GNU/Linux >> Znalost Linux >  >> Linux

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

Příkaz Diff v linuxu se používá k porovnání obsahu dvou souborů řádek po řádku a pokud je nalezen rozdíl, vypíše také rozdíly spolu s čísly řádků. Příkaz Diff lze také použít k porovnání obsahu dvou adresářů.

Příkaz Diff hraje důležitou roli ve skriptu shellu, kde chceme spustit příkaz na základě rozdílu dvou souborů.

syntaxe příkazu diff

$ diff soubor1 soubor2

Výstup příkazu diff může být v následujícím formátu:

  • Normální (výchozí)
  • Kontext
  • Sjednocené

Různé symboly výstupu příkazu diff:

  • a -> označuje, že bylo něco přidáno
  • c -> označuje, že byl změněn nějaký text
  • d -> znamená to, že nějaký text byl smazán

Ve výchozím nastavení příkaz diff zobrazuje výstup v normálním formátu, to znamená, že když je obsah dvou souborů identický, neprodukuje žádný výstup, ale dostaneme výzvu.

V tomto příspěvku probereme příkaz diff s praktickými příklady.

1) Porovnejte dva soubory pomocí příkazu diff

Předpokládejme, že máme dva soubory aachen.txt a sydney.txt a následuje obsah těchto souborů,

[[email protected] ~]# cat aachen.txt
Linux Rocks in the open source world, followings are the linux distributions:
CentOS
Red Hat
Ubuntu Debian
Linux Mint
OpenSUSE
Fedora
[[email protected] ~]# cat sydney.txt
Linux Rocks in the open source world, followings are the linux distributions:
CentOS
Red Hat
Ubuntu Debian
Linux Mint
OpenSUSE
Fedora
[[email protected] ~]#

Porovnejme obsah těchto souborů pomocí příkazu diff,

[[email protected] ~]# diff aachen.txt sydney.txt
[[email protected] ~]#

Výše uvedený výstup potvrzuje, že oba soubory jsou totožné. Udělejme nějaké změny v aachen.txt, přepišme open source jako „open-source“.

Nyní znovu spusťte příkaz diff,

[[email protected] ~]# diff aachen.txt sydney.txt

Výstup,

Ve výstupu 1c1 označuje, že 1. řádek prvního souboru je třeba změnit, aby byly oba soubory identické.

Vraťme výše uvedenou změnu zpět a přidejte nový řádek „Arch Linux ” v sydeny.txt na konci souboru a znovu spusťte příkaz diff,

Výstup příkazu diff „7a8 ” znamená, že za 7. řádek v prvním souboru musíme přidat další řádek, aby odpovídal 8. řádku druhého souboru.

Odeberme „Arch Linux“ a „Fedora“ ze sydney.txt a poté se pokusíme tyto soubory porovnat,

Výstup příkazu diff „7d6 ” znamená, že musíme odstranit 7. řádek v prvním souboru, abychom se synchronizovali s druhým souborem na řádku číslo 6.

2) Výstup příkazu Diff v kontextu formátu (-c)

Použijte volbu "-c" v příkazu diff k vytvoření výstupu příkazu diff v kontextovém formátu. Příklad je uveden níže,

[[email protected] ~]# diff -c aachen.txt sydney.txt

První dva řádky představují názvy souborů spolu s datem a časem jejich úpravy a symbolem tří hvězdiček („*** “) označuje první soubor a symbol tří pomlček („ “) označuje druhý soubor.

Pouze jedna pomlčka „-“ znamená, že řádek je třeba odstranit, a symbol plus „+“ znamená, že je třeba přidat řádek do souboru. Pokud je jakýkoli řádek, který nevyžaduje žádnou změnu, je před ním dvě mezery.

3) Výstup příkazu Diff v jednotném formátu (-u)

Použijte volbu „-u“ v příkazu diff, pokud chcete vytvořit jeho výstup v jednotném formátu, příklad je znázorněn níže,

[[email protected] ~]# diff -u aachen.txt sydney.txt

Výše uvedený výstup je poněkud podobný kontextovému formátu, ale jednotný formát zobrazuje výstup stručným způsobem, zde první dva řádky označují názvy souborů spolu s datem a časem jejich úpravy..

Tři pomlčky („—“) představují první soubor a symbol tři plus („+++“) představuje druhý soubor, po dvou znak „-1,7“ označuje řádky z prvního souboru a „+1,7“ představuje řádky se pohybují od 2. souboru. Navíc symbol (+Core OS) znamená, že tento řádek je třeba přidat do prvního souboru a symbol pomlčka (-Fedora) znamená, že tento řádek je třeba odstranit z prvního souboru, aby byl totožný s 2. souborem.

4) Při porovnávání souborů ignorujte velká a malá písmena (-i)

Ve výchozím nastavení příkaz diff rozlišuje malá a velká písmena a pokud chcete v příkazu diff ignorovat velká a malá písmena, použijte volbu „-i“, příklad je uveden níže,

Předpokládejme, že máme následující obsah dvou souborů

Spusťte příkaz diff bez jakékoli volby,

[[email protected] ~]# diff aachen.txt sydney.txt
5,6c5,6
< Ubuntu debian
< Linux mint
---
> Ubuntu Debian
> Linux Mint
[[email protected] ~]#

Nyní spusťte příkaz diff s volbou -i,

[[email protected] ~]# diff -i aachen.txt sydney.txt
[[email protected] ~]#

Jak můžeme vidět na výše uvedeném výstupu, příkaz diff ignoroval vlastnost rozlišující malá a velká písmena, když použijeme volbu -i.

5) Soubory sestav jsou totožné s příkazem diff (-s)

Mohou nastat situace, kdy porovnáváme soubory pomocí příkazu diff a pokud je obsah identický, pak chceme zobrazit zprávu, že soubor je identický, toho lze dosáhnout předáním možnosti ‚-s‘ v příkazu diff,

[[email protected] ~]# cat filex.txt
DevOPs Engineer
Cloud Stack Engineer
Linux System Admin
Monitoring Team
[[email protected] ~]# cat filey.txt
DevOPs Engineer
Cloud Stack Engineer
Linux System Admin
Monitoring Team
[[email protected] ~]# diff -s filex.txt filey.txt
Files filex.txt and filey.txt are identical
[[email protected] ~]#

6) Ignorujte prázdné místo při porovnávání souborů s rozdílem  (-b)

Předpokládejme, že máme dva soubory filea.txt a fileb.txt kde bílé mezery nejsou konzistentní, takže pokud použijeme příkaz diff bez jakékoli možnosti v tom, že ukáže rozdíl mezi bílými místy, i když obsah je identický, takže v takových případech můžeme ignorovat nekonzistentní bílá místa v příkazu diff pomocí volby -b , příklad je uveden níže,

[[email protected] ~]# cat filea.txt
Hi,  LinuxTechi is a Linux based  blog. It contains linux  HowTo's  and  Tips  &  Tricks.
[[email protected] ~]# cat fileb.txt
Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks.
[[email protected] ~]#

Porovnejte soubory bez jakékoli volby pomocí příkazu diff,

[[email protected] ~]# diff filea.txt fileb.txt
1c1
< Hi,  LinuxTechi is a Linux based  blog. It contains linux  HowTo's  and  Tips  &  Tricks.
---
> Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks.
[[email protected] ~]#

Nyní použijte volbu -b ve výše uvedeném příkazu diff

[[email protected] ~]# diff -b filea.txt fileb.txt
[[email protected] ~]#

Pokud chcete ignorovat všechna prázdná místa během porovnávání pomocí příkazu diff, použijte „-w ” možnost

[[email protected] ~]# diff -w filea.txt fileb.txt

7) Ignorujte bílé místo na konci řádku během porovnávání (-Z)

Pokud chcete během porovnávání ignorovat zkušební mezeru na konci řádku, použijte „-Z ” možnost

[[email protected] ~]# diff -Z filea.txt fileb.txt

Použijte „-B ” v příkazu diff ignorovat všechny prázdné řádky během porovnávání,

[[email protected] ~]# diff -B filea.txt fileb.txt

8) Porovnejte dva adresáře

Předpokládejme, že máme dva adresáře s názvem lab01 a lab02, tyto mají následující soubory a podadresáře

[[email protected] ~]# ls -l lab01/
total 0
-rw-r--r--. 1 root root  0 Feb  1 17:49 filea.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 fileb.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 filec.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 filed.txt
drwxr-xr-x. 2 root root 23 Feb  1 17:50 sitea
[[email protected] ~]# ls -l lab02/
total 0
-rw-r--r--. 1 root root  0 Feb  1 17:49 filea.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 fileb.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 filec.txt
-rw-r--r--. 1 root root  0 Feb  1 17:49 filed.txt
drwxr-xr-x. 2 root root 23 Feb  1 17:50 sitea
[[email protected] ~]#

Porovnejme tyto dva adresáře pomocí níže uvedeného příkazu diff,

[[email protected] ~]# diff -qr lab01/ lab02/
[[email protected] ~]#

Kde:

  • -q -> instruuje příkaz diff, aby hlásil pouze v případě, že se soubory liší
  • -r -> instruuje příkaz diff, aby rekurzivně hledal rozdíl v podadresářích

Když dostaneme prázdný výstup, znamená to, že oba adresáře jsou identické. Pojďme odstranit filed.txt z lab02 a pak se pokusíme porovnat,

[[email protected] ~]# cd lab02/
[[email protected] lab02]# rm -f filed.txt
[[email protected] lab02]# cd
[[email protected] ~]# diff -qr lab01/ lab02/
Only in lab01/: filed.txt
[[email protected] ~]#

Výše uvedený výstup říká, že filed.txt je přítomen pouze v adresáři lab01

9) Přesměrování výstupu příkazu diff do souboru

Výstup příkazu Diff lze přesměrovat do souboru pomocí symbolu „>“. To se stává velmi užitečné ve skriptech shellu, kde chceme provést úlohu pouze v případě, že výstup příkazu diff obsahuje rozdíly.

[[email protected] ~]# diff aachen.txt sydney.txt
9,10d8
< SLES
< Puppy Linux
[[email protected] ~]# diff aachen.txt sydney.txt  > diff.txt
[[email protected] ~]# cat diff.txt
9,10d8
< SLES
< Puppy Linux
[[email protected] ~]#

Další příklad

Porovnejte dva soubory na terminálu vedle sebe

Když použijeme volbu „-y“ při porovnávání dvou souborů pomocí příkazu diff, zobrazí se oba soubory na terminálu vedle sebe.

[[email protected] ~]# diff -y /etc/fstab /tmp/fstab

výstup

Výše uvedený výstup jasně ukazuje rozdíl dvou souborů.

To je vše z tohoto článku, doufám, že nyní lépe rozumíte příkazu diff tím, že si projdete výše uvedené příklady. Neváhejte se podělit o své názory a komentáře.

Přečtěte si také :16 příkladů příkazů Echo v systému Linux

Přečtěte si také8 příkladů příkazů Head v systému Linux


Linux
  1. sa Příklady příkazů v Linuxu

  2. Příklady příkazů ac v Linuxu

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

  1. 7 Příklady příkazů Linux df

  2. du příklady příkazů v Linuxu

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

  1. 8 Příklady příkazů Linux TR

  2. Příklady příkazů rm v Linuxu

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