GNU/Linux >> Znalost Linux >  >> Linux

Diff Command v Linuxu

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

diff příkaz 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í patch příkaz.

Jak používat diff Příkaz #

Syntaxe pro diff příkaz je následující:

diff [OPTION]... FILES

diff příkaz může zobrazit výstup v několika formátech, přičemž nejběžnější je normální, kontextový a jednotný formát. Výstup obsahuje informace o tom, které řádky v souborech je třeba změnit, aby byly identické. Pokud se soubory shodují, nebude vytvořen žádný výstup.

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

diff file1 file2 > patch

V tomto článku použijeme následující dva soubory k vysvětlení diff příkaz funguje:

soubor1
Ubuntu
Arch Linux
Debian
CentOS
Fedora
soubor2
Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora

Normální formát #

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

diff file1 file2

Výstup bude vypadat nějak 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 změny. Každý příkaz změny obsahuje následující zleva doprava:

  • Číslo řádku nebo rozsah řádků v prvním souboru.
  • Zvláštní znak změny.
  • Číslo řádku nebo rozsah řádků ve 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 - Odstraňte řádky.

Po příkazu change následují celé řádky, které jsou odstraněny (< ) a přidán do souboru (> ).

Pojďme si vysvětlit výstup:

  • 0a1 - Přidejte řádek 1 druhého souboru na začátku souboru1 (za řádkem 0 ).
    • > Kubuntu - Řádek z druhého řádku, který je přidán do prvního souboru, jak je popsáno výše.
  • 2d2 - Smazat řádek 2 v prvním souboru. 2 za d symbol znamená, že pokud není řádek smazán, objeví se na řádku 2 ve druhém souboru.
    • < Arch Linux - odstraněný řádek.
  • 4c4,5 - Nahradit (změnit) řádek 5 v prvním souboru s řádky 4-5 z druhého souboru.
    • < CentOS - Řádek v prvním souboru, který má být nahrazen.
    • --- - Oddělovač.
    • > Arch Linux a > Centos - Řádky z druhého souboru nahrazující řádek v prvním souboru.

Kontextový formát #

Když je použit kontextový výstupní formát, diff zobrazí několik řádků kontextu kolem řádků, které se mezi soubory liší.

-c volba říká diff k vytvoření výstupu v kontextu 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 v případě porovnávaných souborů 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 rozsah řádků oddělených čárkami v prvním a druhém souboru.
  • from-file-line a to-file-line - Liší se řádky a řádky kontextu:
    • Řádky začínající dvěma mezerami jsou řádky kontextu, řádky, které jsou v obou souborech stejné.
    • Řádky začínající znakem mínus (- ) jsou řádky, které neodpovídají ničemu ve druhém souboru. V druhém souboru chybí řádky.
    • Řádky začínající znakem plus (+ ) jsou řádky, které neodpovídají ničemu v prvním souboru. V prvním souboru chybí řádky.
    • Řádky začínající vykřičníkem (! ) jsou řádky, které se mění mezi dvěma soubory. Každá skupina řádků začínající ! z prvního souboru má odpovídající shodu ve druhém souboru.

Pojďme si vysvětlit 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 zahrnuty v této sekci.
  • Řádky Ubuntu , Debian , Fedora a poslední prázdný řádek jsou v obou souborech stejné. Tyto řádky začínají dvojitou mezerou.
  • Řada - Arch Linux z prvního souboru neodpovídá ničemu v druhém souboru. Přestože tento řádek existuje i ve druhém souboru, pozice jsou odlišné.
  • Řádek + Kubuntu z druhého souboru neodpovídá ničemu v prvním souboru.
  • Řádek ! CentOS z prvního souboru a řádků ! Arch Linux a ! 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 jiné číslo, použijte -C (--contexts ) možnost:

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

Sjednocený formát #

Jednotný výstupní formát je vylepšenou verzí kontextového formátu a vytváří menší výstup.

Použijte -u možnost sdělit diff pro tisk výstupu v jednotné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á jmény 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 sekci.
  • line-from-files - Liší se řádky a řádky kontextu:
    • Řádky začínající dvěma mezerami jsou řádky kontextu, řádky, které jsou v obou souborech stejné.
    • Řádky začínající znakem mínus (- ) jsou řádky, které jsou odstraněny z prvního souboru.
    • Řádky začínající znakem plus (+ ) jsou řádky, které se přidají z prvního souboru.

Ignorovat velikost písmen #

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

Použijte -i možnost sdělit diff ignorovat velká a malá písmena:

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í rozdílů v textových souborech je jedním z nejběžnějších úkolů správců systémů Linux.

diff příkaz porovná soubory řádek po řádku. Pro více informací napište man diff ve vašem terminálu.

Pokud máte nějaké dotazy, zanechte prosím níže komentář.


Linux
  1. Mít krávu na příkazovém řádku Linuxu

  2. Přihlaste se do příkazového řádku Linuxu

  3. Příklady příkazů diff v Linuxu

  1. 8 tipů pro příkazový řádek Linuxu

  2. Linuxový příkaz mv

  3. Linux du command

  1. 9 diff Příklady příkazů v Linuxu

  2. Linuxový ip příkaz

  3. Linux cd příkaz