How to Use Comm, Diff, and Patch: Linux Terminal 201 - HakTip 169
Spisu treści:
- Jak korzystać z polecenia
diff
- Normalny format
- Format kontekstowy
- Ujednolicony format
- Zignoruj wielkość liter
- Wniosek
diff
to narzędzie wiersza polecenia, które pozwala porównać dwa pliki linia po linii. Może także porównywać zawartość katalogów.
Polecenie
diff
jest najczęściej używane do utworzenia poprawki zawierającej różnice między jednym lub większą liczbą plików, które można zastosować za pomocą polecenia
patch
.
Jak korzystać z polecenia
diff
Składnia polecenia
diff
jest następująca:
diff… FILES
Polecenie
diff
może wyświetlać dane wyjściowe w kilku formatach, przy czym najczęściej są to format normalny, kontekstowy i jednolity. Dane wyjściowe zawierają informacje o tym, które wiersze w plikach należy zmienić, aby stały się identyczne. Jeśli pliki są zgodne, dane wyjściowe nie są generowane.
Aby zapisać dane wyjściowe polecenia w pliku, użyj operatora przekierowania:
diff file1 file2 > patch
, użyjemy następujących dwóch plików, aby wyjaśnić, jak działa polecenie
diff
:
Ubuntu Arch Linux Debian CentOS Fedora
plik2
Kubuntu Ubuntu Debian Arch Linux Centos Fedora
Normalny format
W najprostszej postaci, gdy polecenie
diff
jest uruchamiane na dwóch plikach tekstowych bez żadnej opcji, generuje dane wyjściowe w normalnym formacie:
diff file1 file2
Dane wyjściowe będą wyglądać mniej więcej tak:
0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos
Normalny format wyjściowy składa się z jednej lub więcej sekcji opisujących różnice. Każda sekcja wygląda następująco:
change-command < from-file-line… --- > to-file-line…
0a1
,
2d2
i
4c4, 5
to polecenia zmiany. Każde polecenie zmiany zawiera następujące elementy, od lewej do prawej:
- Numer linii lub zakres linii w pierwszym pliku. Specjalny znak zmiany. Numer linii lub zakres linii w drugim pliku.
Znak zmiany może być jednym z następujących:
-
a
- Dodaj linie.c
- Zmień linie.d
- Usuń linie.
Po poleceniu zmiany pojawiają się pełne wiersze, które są usuwane (
<
) i dodawane do pliku (
>
).
Wyjaśnijmy wynik:
-
0a1
- Dodaj wiersz1
drugiego pliku na początku pliku 1 (po wierszu0
).-
> Kubuntu
- Linia z drugiej linii, która jest dodawana do pierwszego pliku, jak opisano powyżej.
2d2
- Usuń wiersz2
z pierwszego pliku. Symbol2
pod
oznacza, że jeśli linia nie zostanie usunięta, pojawi się na linii2
w drugim pliku.-
< Arch Linux
- usunięta linia.
4c4, 5
- Zamień (zmień) wiersz5
w pierwszym pliku na linie4-5
z drugiego pliku.-
< CentOS
- Linia w pierwszym pliku do zamiany.---
- Separator.> Arch Linux
i> Centos
- Linie z drugiego pliku zastępujące linię w pierwszym pliku.
-
Format kontekstowy
Gdy używany jest kontekstowy format wyjściowy, polecenie
diff
wyświetla kilka linii kontekstu wokół linii, które różnią się między plikami.
Opcja
-c
mówi
diff
aby wygenerował dane wyjściowe w formacie kontekstowym:
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
Dane wyjściowe zaczynają się od nazw i znaczników czasu, jeśli porównywane pliki oraz co najmniej jedna sekcja opisująca różnice. Każda sekcja wygląda następująco:
*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…
-
from-file-line-numbers
ito-file-line-numbers
- Numery linii lub zakres linii oddzielony przecinkami odpowiednio w pierwszym i drugim pliku.from-file-line
ito-file-line
- Linie, które się różnią i linie kontekstu:- Linie zaczynające się od dwóch spacji są liniami kontekstu, liniami, które są takie same w obu plikach. Linie zaczynające się od symbolu minus (
-
) to linie, które nie odpowiadają nic w drugim pliku. Brakuje linii w drugim pliku. Linie zaczynające się od symbolu plus (+
) to linie, które nie odpowiadają nic w pierwszym pliku. Brak linii w pierwszym pliku. Linie zaczynające się od wykrzyknika (!
) To linie, które są zmieniane między dwoma plikami. Każda grupa linii zaczynająca się od!
z pierwszego pliku ma odpowiadające dopasowanie w drugim pliku.
- Linie zaczynające się od dwóch spacji są liniami kontekstu, liniami, które są takie same w obu plikach. Linie zaczynające się od symbolu minus (
Wyjaśnijmy najważniejsze części wyniku:
- W tym przykładzie mamy tylko jedną sekcję opisującą różnice.
*** 1, 6 ****
i--- 1, 7 ----
mówi nam zakres wierszy z pierwszego i drugiego pliku, które są zawarte w tej sekcji. LinieUbuntu
,Debian
,Fedora
i ostatnia pusta linia jest taka sama w obu plikach. Te wiersze zaczynają się od podwójnej spacji. Linia- Arch Linux
z pierwszego pliku nie odpowiada nic w drugim pliku. Chociaż ta linia istnieje również w drugim pliku, pozycje są różne. Linia+ Kubuntu
z drugiego pliku nie odpowiada nic w pierwszym pliku. Linia! CentOS
! CentOS
od pierwszego pliku i linii! Arch Linux
! Arch Linux
i! CentOS
! CentOS
z drugiego pliku są zmieniane między plikami.
Domyślnie liczba linii kontekstu wynosi domyślnie trzy. Aby określić inny numer, użyj opcji
-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
Ujednolicony format
Zunifikowany format wyjściowy jest ulepszoną wersją formatu kontekstowego i daje mniejszy wynik.
Użyj opcji
-u
, aby powiedzieć
diff
aby wydrukował dane wyjściowe w ujednoliconym formacie:
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
Dane wyjściowe zaczynają się od nazw i znaczników czasu plików oraz jednej lub więcej sekcji opisujących różnice. Każda sekcja ma następującą formę:
*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…
-
@@ from-file-line-numbers to-file-line-numbers @@
- Numer linii lub zakres linii z pierwszego i drugiego pliku zawartego w tej sekcji.line-from-files
- Linie, które się różnią i linie kontekstu:- Linie zaczynające się od dwóch spacji są liniami kontekstu, linie, które są takie same w obu plikach. Linie zaczynające się od symbolu minus (
-
) to linie, które są usuwane z pierwszego pliku. Linie zaczynające się od znaku plus (+
) to linie, które są dodawane z pierwszego pliku.
- Linie zaczynające się od dwóch spacji są liniami kontekstu, linie, które są takie same w obu plikach. Linie zaczynające się od symbolu minus (
Zignoruj wielkość liter
Jak można zauważyć w powyższych przykładach, polecenie
diff
domyślnie rozróżnia małe i wielkie litery.
Użyj opcji
-i
, aby powiedzieć
diff
aby ignorował wielkość liter:
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
Wniosek
Porównywanie plików tekstowych pod kątem różnic jest jednym z najczęstszych zadań administratorów systemów Linux.
Komenda
diff
porównuje pliki linia po linii. Aby uzyskać więcej informacji, wpisz
man diff
w swoim terminalu.
Polecenie CP w systemie Linux (kopiowanie plików)
cp to narzędzie wiersza polecenia do kopiowania plików i katalogów w systemach Unix i Linux.
Polecenie Pwd w systemie Linux (bieżący katalog roboczy)
Bieżący katalog roboczy to katalog, w którym aktualnie pracuje użytkownik. W tym artykule pokażemy, jak określić bieżący katalog roboczy za pomocą polecenia pwd
Polecenie Dmesg w systemie Linux
Narzędzie wiersza polecenia dmesg drukuje i kontroluje bufor pierścieniowy jądra. Jest to przydatne do sprawdzania komunikatów rozruchowych jądra i debugowania problemów związanych ze sprzętem.