Linux diff command summary with examples
Obsah:
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:
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 řádek1
druhého souboru na začátek souboru1 (za řádek0
).-
> Kubuntu
- Řádek z druhého řádku, který se přidá do prvního souboru, jak je popsáno výše.
2d2
- Vymažte řádek2
z prvního souboru. Symbol2
za symbolemd
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) řádek5
v prvním souboru řádky4-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
ato-file-line-numbers
- Čísla řádků nebo řádek oddělený čárkami v prvním a druhém souboru.from-file-line
ato-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.
- Řádky začínající dvěma mezerami jsou řádky kontextu, řádky, které jsou stejné v obou souborech. Řádky začínající symbolem mínus (
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. LinkyUbuntu
,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.
- Řádky začínající dvěma mezerami jsou řádky kontextu, řádky, které jsou v obou souborech stejné. Řádky začínající symbolem mínus (
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.
Příkaz Chmod v Linuxu (oprávnění souboru)

V Linuxu je přístup k souborům spravován prostřednictvím oprávnění k souborům, atributů a vlastnictví. Tento tutoriál popisuje, jak pomocí příkazu chmod změnit přístupová oprávnění k souborům a adresářům.
Příkaz Chgrp v Linuxu (změna skupiny)

V systému Linux je každý soubor spojen s vlastníkem a skupinou a má oprávnění, která určují, kteří uživatelé mohou soubor číst, zapisovat nebo provádět. Příkaz chgrpc mění vlastnictví dané soubory ve skupině.
Příkaz Cp v Linuxu (kopírování souborů)

cp je obslužný program příkazového řádku pro kopírování souborů a adresářů v systémech Unix a Linux.