Úvod
Linux diff
příkaz se používá k porovnání dvou souborů řádek po řádku a zobrazení rozdílu mezi nimi. Tento nástroj příkazového řádku uvádí změny, které je třeba provést, aby byly soubory identické.
Přečtěte si další informace o diff
příkaz a jeho možnosti se snadno srozumitelnými příklady.
syntaxe diff
Syntaxe pro použití diff
příkaz je:
diff [option] file1 file2
Syntaxe výstupu
Při práci s diff
, je důležité vědět, jak interpretovat výstup, který se skládá z:
- Výstup začínající
<
odkazuje na obsah v prvním souboru. - Výstup začínající
>
odkazuje na obsah ve druhém souboru. - Čísla řádků odpovídající prvnímu souboru.
- Zvláštní symbol. Speciální symboly označují, jak je třeba upravit první soubor, aby odpovídal druhému souboru. Výstup může zobrazovat:
a
(přidat)c
(změnit)d
(smazat)
- Čísla řádků odpovídající druhému souboru.
Příklad rozdílu
Ukázat, jak diff
příkaz funguje, vytvořili jsme dva vzorové soubory a porovnali jejich obsah.
Vytvořte dva vzorové soubory
1. Nejprve pomocí terminálu vytvořte soubor pro Linux s názvem example1.txt . Používáme textový editor Nano, ale můžete použít libovolný textový editor.
sudo nano example1.txt
2. Jakmile textový editor vytvoří a otevře soubor, přidejte do něj následující řádky:
Apple
Orange
Banana
Watermelon
Chery
3. Uložte a ukončete soubor – podržte Ctrl + X a potvrďte stisknutím Y .
4. Dále vytvořte example2.txt soubor spuštěním:
sudo nano example2.txt
5. Přidejte do souboru následující obsah:
Orange
Peach
Apple
Banana
Melon
Cherry
6. Uložte změny a ukončete.
Porovnejte soubory s příkazem diff
1. Se dvěma ukázkovými soubory na místě použijte diff
příkaz, abyste viděli, jak se liší a jak je učinit identickými:
diff example1.txt example2.txt
Výstup obsahuje pokyny, jak upravit první soubor tak, aby měl stejný obsah jako v example2.txt . Podívejme se na výstup ukázkových souborů a dekódujeme pokyny.
1d0
– První řádek (1
) z prvního souboru by měl být smazán (d
). Pokud ne, zobrazí se na řádku0
ve druhém souboru.< Apple
–Obsah, který potřebujete smazat (jak je uvedeno1d0
).2a2,3
– V řádku2
z prvního souboru byste měli přidat (a
) řádky2
a3
(2,3
) z druhého souboru.> Peach
,> Apple
– Obsah, který potřebujete přidat (jak je uvedeno v2a2,3
).4c5
– Čtvrtý řádek (4
) z prvního souboru by měl být změněn (c
) na pátý řádek (5
) z druhého souboru.< Watermelon
– Obsah, který potřebujete změnit.> Melon
– Na co to potřebujete změnit.
Možnosti rozdílů
Bez dalších možností diff
zobrazí výstup ve výchozím formátu. Existují způsoby, jak tento výstup upravit, aby byl srozumitelnější nebo použitelnější pro váš případ použití. Přečtěte si další informace o diff
možnosti příkazů.
Možnost -c
Kontextový formát je diff
možnost nástroje příkazového řádku, která vypíše několik řádků kontextu kolem řádků, které se liší.
Chcete-li zobrazit rozdíl mezi soubory v kontextu, použijte příkaz:
diff -c file1 file2
Podívejte se na výstup pro ukázkové soubory v kontextovém formuláři na obrázku níže.
Řádky zobrazující informace o prvním souboru začínají ***
, zatímco řádky označující druhý soubor začínají ---
.
První dva řádky zobrazují název a časové razítko obou souborů:
*** example1.txt 2021-12-27 10:53:30.700640904 +0100
--- example2.txt 2021-12-27 10:54:41.304939358 +0100
****************
- se používá pouze jako oddělovač.
Před výpisem řádků z každého souboru začíná výstup rozsahem řádků souborů:
*** 1,5 ****
--- 1,6 ----
Zbývající řádky vypisují obsah souborů. Začátek každého řádku uvádí, jak upravit soubor example1.txt aby byl stejný jako example2.txt . Pokud řádek začíná:
-
(mínus) – je potřeba jej smazat z prvního souboru.
+
(plus) – je třeba přidat do prvního souboru.
!
(vykřičník) – je třeba jej změnit na odpovídající řádek z druhého souboru.
Pokud není žádný symbol, řádek zůstává stejný.
Ve výše uvedeném příkladu byste proto měli odstranit Apple
z prvního řádku nahraďte Watermelon
s Melon
ve čtvrtém řádku a přidejte Peach
a Apple
na řádky dva a tři.
Možnost -u
Jednotný formát je možnost, kterou můžete přidat k zobrazení výstupu bez jakýchkoli nadbytečných kontextových řádků. Chcete-li to provést, použijte příkaz:
diff -u file1 file2
Nyní se podívejme na výstup pro ukázkové soubory v jednotném formátu:
Řádky zobrazující informace o prvním souboru začínají ---
, zatímco řádky označující druhý soubor začínají +++
.
První dva řádky zobrazují název a časové razítko obou souborů:
*** example1.txt 2021-12-27 10:53:30.700640904 +0100
--- example2.txt 2021-12-27 10:54:41.304939358 +0100
@@ -1,5 +1,6 @@
- zobrazuje rozsah řádků pro oba soubory.
Na řádcích níže je zobrazen obsah souborů a jak upravit soubor example1.txt aby byl shodný s example2.txt . Když řádek začíná:
-
(mínus) – je potřeba jej smazat z prvního souboru.
+
(plus) – musí být přidán do prvního souboru.
Pokud není žádný symbol, řádek zůstává stejný.
Ve výše uvedeném příkladu dává výstup pokyn, že Apple
a Watermelon
by měl být odstraněn, zatímco Peach
, Apple
a Watermelon
by měl být přidán.
Možnost -i
Ve výchozím nastavení diff
rozlišuje velká a malá písmena. Pokud chcete, aby se malá a velká písmena ignorovala, přidejte -i
možnost k příkazu:
diff -i file1 file2
Pokud například vytvoříme jeden soubor s následujícími řádky:
Apple
Orange
Banana
Watermelon
Cherry
A další soubor s obsahem:
Apple
orange
Banana
watermelon
Cherry
Výstup bez dalších možností ukazuje, že mezi soubory jsou rozdíly, a poskytuje pokyny, jak je upravit.
Pokud však přidáte -i
možnost, neexistuje žádný výstup, protože příkaz nezjistil žádné rozdíly.
– možnost verze
Chcete-li zkontrolovat verzi diff
běžící na vašem systému spusťte příkaz:
diff --version
–možnost nápovědy
Pro výstup souhrnu diff
běh použití:
diff --help
Další možnosti rozdílů
Další možnosti, které se diff
podporuje:
-a / --text | Zobrazit soubory jako text a porovnat je řádek po řádku. |
-b / --ignore-space-change | Při porovnávání souborů ignorujte prázdné znaky. |
-B / --ignore-blank-lines<code> | Při porovnávání souborů ignorujte prázdné řádky. |
--binary | Porovnejte a zapište data v binárním režimu. |
-d --minimal | Upravte algoritmus (například za účelem nalezení menší sady změn). |
-e / --ed | Nastavte výstup jako platný ed skript. |
-E / --ignore-tab-expansion | Při porovnávání souborů ignorujte příponu karty. |
-l / --paginate | Spusťte výstup přes pr k jeho stránkování. |
-N / --new-file | Považujte chybějící soubor za přítomný, ale prázdný. |
-q / --brief | Vytiskne, zda se soubory liší bez zadání podrobností. |
-s / --report-identical-files | Výstup, když jsou soubory identické. |
-w / --ignore-all-space | Při porovnávání souborů ignorujte mezery. |