Android

Rozdílný příkaz v Linuxu

Linux diff command summary with examples

Linux diff command summary with examples

Obsah:

Anonim

diff je nástroj příkazového řádku, který umožňuje porovnávat dva soubory řádek po řádku. Může také porovnat obsah adresářů.

Příkaz diff se nejčastěji používá k vytvoření opravy obsahující rozdíly mezi jedním nebo více soubory, které lze použít pomocí příkazu patch .

Jak používat příkaz diff

Syntaxe příkazu diff je následující:

diff… FILES

Příkaz diff může zobrazit výstup v několika formátech, přičemž nejběžnějšími jsou normální, kontextový a sjednocený formát. Výstup obsahuje informace o tom, které řádky v souborech musí být změněny, aby se staly identickými. Pokud se soubory shodují, nevytvoří se žádný výstup.

Chcete-li uložit výstup příkazu do souboru, použijte operátora přesměrování:

diff file1 file2 > patch

, vysvětlíme, jak funguje příkaz diff následující dva soubory:

file1

Ubuntu Arch Linux Debian CentOS Fedora file2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Normální formát

Ve své nejjednodušší podobě, když je příkaz diff spuštěn na dvou textových souborech bez jakékoli možnosti, vytvoří výstup v normálním formátu:

diff file1 file2

Výstup bude vypadat asi takto:

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

Normální výstupní formát se skládá z jedné nebo více částí, které popisují rozdíly. Každá sekce vypadá takto:

change-command < from-file-line… --- > to-file-line…

0a1 , 2d2 a 4c4, 5 jsou příkazy ke změně. Každý příkaz ke změně obsahuje následující zleva doprava:

  • Číslo řádku nebo rozsah řádků v prvním souboru. Speciální znak změny. Počet řádků nebo rozsah řádků v druhém souboru.

Znak změny může být jeden z následujících:

  • a - Přidejte řádky. c - Změňte řádky. d - Vymažte řádky.

Za příkazem change následují úplné řádky, které jsou odebrány ( < ) a přidány do souboru ( > ).

Vysvětlíme výstup:

  • 0a1 - Přidejte řádek 1 druhého souboru na začátek souboru1 (za řádek 0 ).
    • > Kubuntu - Řádek z druhého řádku, který se přidá do prvního souboru, jak je popsáno výše.
    2d2 - Vymažte řádek 2 z prvního souboru. Symbol 2 za symbolem d znamená, že pokud není řádek odstraněn, objeví se na druhém řádku v druhém souboru.
    • < Arch Linux - odstraněný řádek.
    4c4, 5 - Nahraďte (změňte) řádek 5 v prvním souboru řádky 4-5 z druhého souboru.
    • < CentOS - Řádek v prvním souboru, který má být nahrazen. --- - Separátor. > Arch Linux a > Centos - Řádky z druhého souboru nahrazující řádek v prvním souboru.

Kontextový formát

Při použití výstupního formátu kontextu zobrazí příkaz diff několik řádků kontextu kolem řádků, které se mezi soubory liší.

Volba -c říká diff aby vytvořil výstup v kontextovém formátu:

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

Výstup začíná jmény a časovými razítky, jsou-li porovnávány soubory, a jednou nebo více sekcemi, které popisují rozdíly. Každá sekce vypadá takto:

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers a to-file-line-numbers - Čísla řádků nebo řádek oddělený čárkami v prvním a druhém souboru. from-file-line a to-file-line - Řádky, které se liší a řádky kontextu:
    • Řádky začínající dvěma mezerami jsou řádky kontextu, řádky, které jsou stejné v obou souborech. Řádky začínající symbolem mínus ( - ) jsou řádky, které neodpovídají ničemu ve druhém souboru. Řádky chybící ve druhém souboru. Řádky začínající symbolem plus ( + ) jsou řádky, které neodpovídají ničemu v prvním souboru. Řádky, které chybí v prvním souboru. Řádky začínající vykřičníkem ( ! ) Jsou řádky, které se mění mezi dvěma soubory. Každá skupina řádků začíná ! z prvního souboru má odpovídající shodu v druhém souboru.

Vysvětlíme nejdůležitější části výstupu:

  • V tomto příkladu máme pouze jednu sekci popisující rozdíly. *** 1, 6 **** a --- 1, 7 ---- nám říká rozsah řádků z prvního a druhého souboru, které jsou obsaženy v této sekci. Linky Ubuntu , Debian , Fedora a poslední prázdný řádek je v obou souborech stejný. Tyto řádky začínají dvojitým mezerou. Linka - Arch Linux z prvního souboru neodpovídá nic ve druhém souboru. Ačkoli tento řádek existuje i ve druhém souboru, pozice jsou odlišné. Linka + Kubuntu z druhého souboru neodpovídá ničemu v prvním souboru ! CentOS Linka ! CentOS ! CentOS od prvního souboru a řádků ! Arch Linux ! Arch Linux a ! CentOS ! CentOS z druhého souboru se mezi soubory mění.

Ve výchozím nastavení je počet kontextových řádků nastaven na tři. Chcete-li zadat další číslo, použijte volbu -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

Jednotný formát

Unifikovaný výstupní formát je vylepšená verze kontextového formátu a produkuje menší výstup.

Pomocí volby -u řekněte diff aby vytiskl výstup ve sjednoceném formátu:

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

Výstup začíná názvy a časovými razítky souborů a jednou nebo více sekcemi, které popisují rozdíly. Každá sekce má následující podobu:

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ - Číslo řádku nebo rozsah řádků z prvního a druhého souboru obsaženého v této části. line-from-files - Řádky, které se liší a řádky kontextu:
    • Řádky začínající dvěma mezerami jsou řádky kontextu, řádky, které jsou v obou souborech stejné. Řádky začínající symbolem mínus ( - ) jsou řádky, které jsou odstraněny z prvního souboru. Řádky začínající znakem plus ( + ) jsou řádky, které jsou přidány z prvního souboru.

Ignorovat případ

Jak si můžete všimnout ve výše uvedených příkladech, příkaz diff ve výchozím nastavení rozlišuje velká a malá písmena.

Použijte volbu -i a řekněte diff aby ignoroval případ:

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

Závěr

Porovnání textových souborů pro rozdíly je jedním z nejčastějších úkolů pro správce systémů Linux.

Příkaz diff porovnává soubory řádek po řádku. Pro více informací napište man diff do svého terminálu.

dif terminál