Linux команда diff - команда сравнения текстовых файлов.
Innehållsförteckning:
diff
är ett kommandoradsverktyg som låter dig jämföra två filer rad för rad. Det kan också jämföra innehållet i kataloger.
diff
kommandot används oftast för att skapa en patch som innehåller skillnaderna mellan en eller flera filer som kan tillämpas med
patch
kommandot.
Hur man använder
diff
kommandot
Syntaxen för
diff
kommandot är enligt följande:
diff… FILES
diff
kommandot kan visa utdata i flera format med normal, kontext och enhetligt format som det vanligaste. Utgången innehåller information om vilka rader i filerna som måste ändras så att de blir identiska. Om filerna matchar, produceras ingen utgång.
För att spara kommandoutdata i en fil använder du omdirigeringsoperatören:
diff file1 file2 > patch
, använder vi följande två filer för att förklara hur
diff
kommandot fungerar:
Ubuntu Arch Linux Debian CentOS Fedora
fil2
Kubuntu Ubuntu Debian Arch Linux Centos Fedora
Normalt format
I sin enklaste form när
diff
kommandot körs på två textfiler utan något alternativ producerar det en utgång i normalt format:
diff file1 file2
Utgången ser ut så här:
0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos
Det normala utgångsformatet består av en eller flera sektioner som beskriver skillnaderna. Varje avsnitt ser ut så här:
change-command < from-file-line… --- > to-file-line…
0a1
,
2d2
och
4c4, 5
är ändringskommandon. Varje ändringskommando innehåller följande, från vänster till höger:
- Radnumret eller radintervallet i den första filen.Et speciellt ändringstecken. Radnumret eller radintervallet i den andra filen.
Ändringstecken kan vara ett av följande:
-
a- Lägg till raderna.c- Ändra raderna.d- Radera raderna.
Ändringskommandot följs av de kompletta raderna som tas bort (
<
) och läggs till i filen (
>
).
Låt oss förklara produktionen:
-
0a1- Lägg till rad1i den andra filen i början av filen1 (efter raden0).-
> Kubuntu- Linjen från den andra raden som läggs till i den första filen som beskrivs ovan.
2d2- Radera rad2i den första filen. Symbolen2efterdbetyder att om linjen inte raderas skulle den visas på rad2i den andra filen.-
< Arch Linux- den raderade raden.
4c4, 5- Ersätt (ändra) rad5i den första filen med rader4-5från den andra filen.-
< CentOS- Raden i den första filen som ska ersättas.---- Separator.> Arch Linuxoch> Centos- Linjer från den andra filen som ersätter raden i den första filen.
-
Kontextformat
När kontextutmatningsformatet används visar
diff
kommandot flera rader med sammanhang runt raderna som skiljer sig mellan filerna.
Alternativet
-c
berättar för
diff
att producera output i kontextformatet:
diff -c file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora
Utgången börjar med namnen och tidsstämplarna om de filer som jämförs, och en eller flera sektioner som beskriver skillnaderna. Varje avsnitt ser ut så här:
*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…
-
from-file-line-numbersochto-file-line-numbers- Linjenumren eller kommaseparerade radintervall i respektive första och andra fil.from-file-lineochto-file-line- Raderna som skiljer sig och raderna i sammanhanget:- Linjer som börjar med två mellanslag är kontektslinjer, linjerna som är desamma i båda filerna. Linjer som börjar med minussymbolen (
-) är de linjer som inte motsvarar något i den andra filen. Rader som saknas i den andra filen. Linjer som börjar med plussymbolen (+) är de rader som inte motsvarar något i den första filen. Rader som saknas i den första filen. Linjer som börjar med utropstecknet (!) Är raderna som ändras mellan två filer. Varje grupp rader som börjar med!från den första filen har en motsvarande matchning i den andra filen.
- Linjer som börjar med två mellanslag är kontektslinjer, linjerna som är desamma i båda filerna. Linjer som börjar med minussymbolen (
Låt oss förklara de viktigaste delarna av produktionen:
- I det här exemplet har vi bara ett avsnitt som beskriver skillnaderna.
*** 1, 6 ****och--- 1, 7 ----berättar för oss raderna från de första och andra filerna som ingår i detta avsnitt. LinjerUbuntu,Debian,Fedoraoch sista tomma raden är desamma i båda filerna. Dessa rader börjar med dubbelutrymme. Linje- Arch Linuxfrån den första filen motsvarar ingenting i den andra filen. Även om denna rad också finns i den andra filen, är positionerna olika.Line+ Kubuntufrån den andra filen motsvarar ingenting i den första filen.Line! CentOS! CentOSfrån den första filen och raderna! Arch Linux! Arch Linuxoch! CentOS! CentOSfrån den andra filen ändras mellan filerna.
Som standard är antalet sammanhangslinjer standardvärde till tre. För att ange ett annat nummer använder
--contexts
alternativet
-C
(
--contexts
):
diff -C 1 file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora
Unified Format
Det enhetliga utgångsformatet är en förbättrad version av kontextformatet och ger en mindre utgång.
Använd alternativet
-u
att berätta för
diff
att skriva ut utskriften i det enhetliga formatet:
diff -u file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora
Utmatningen börjar med namnen och tidsstämplarna för filerna och en eller flera sektioner som beskriver skillnaderna. Varje avsnitt har följande form:
*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…
-
@@ from-file-line-numbers to-file-line-numbers @@- Linjenumret eller raden för raderna från de första och andra filerna som ingår i detta avsnitt.line-from-files- Raderna som skiljer sig och raderna i sammanhanget:- Linjer som börjar med två mellanslag är kontektslinjer, linjerna som är desamma i båda filerna. Linjer som börjar med minussymbolen (
-) är linjerna som tas bort från den första filen. Linjer som börjar med plussymbolen (+) är raderna som läggs till från den första filen.
- Linjer som börjar med två mellanslag är kontektslinjer, linjerna som är desamma i båda filerna. Linjer som börjar med minussymbolen (
Ignorera fall
Som du kanske märker i exemplen ovan är
diff
kommandot som versaler känsligt med versaler som standard.
Använd alternativet
-i
att berätta
diff
till ignorerar fall:
diff -ui file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora
Slutsats
Jämförelse av textfiler för skillnader är en av de vanligaste uppgifterna för Linux-systemadministratörer.
diff
kommandot jämför filer rad för rad. För mer information, skriv
man diff
i din terminal.
Diff-IE Tillägg för Internet Explorer hjälper dig att identifiera förändringar på en webbsida
Diff-IE är en prototyp Add- på från Microsoft Research for Internet Explorer, som belyser ändringarna på en webbsida sedan senaste gången du besökte den.
Chmod-kommando i Linux (filtillstånd)
I Linux hanteras åtkomst till filerna genom filtillstånd, attribut och äganderätt. Den här handboken beskriver hur du använder chmod-kommandot för att ändra åtkomstbehörigheter för filer och kataloger.
Chgrp-kommando i Linux (ändra grupp)
I Linux är varje fil associerad med en ägare och en grupp och har behörigheter som avgör vilka användare som kan läsa, skriva eller köra filen. Chgrpc-kommandot ändrar gruppägande av givna filer.







