Android

Naredba za razliku u Linuxu

Osnovne komande u Linux-u

Osnovne komande u Linux-u

Sadržaj:

Anonim

diff je uslužni program naredbenog retka koji vam omogućuje usporedbu dviju datoteka svaki redak. Može i usporediti sadržaj direktorija.

Naredba diff najčešće se koristi za stvaranje zakrpe koja sadrži razlike između jedne ili više datoteka koje se mogu primijeniti pomoću naredbe patch .

Kako se koristi naredba za diff

Sintaksa naredbe diff je sljedeća:

diff… FILES

Naredba diff može prikazati izlaz u nekoliko formata, a najčešći su uobičajeni, kontekstni i objedinjeni format. Izlaz uključuje podatke o tome koji se retci u datotekama moraju promijeniti kako bi postali identični. Ako se datoteke podudaraju, ne proizvodi se izlaz.

Za spremanje naredbenog izlaza u datoteku koristite operatora preusmjeravanja:

diff file1 file2 > patch

sljedeće dvije datoteke objasnit ćemo kako funkcionira naredba diff :

file1

Ubuntu Arch Linux Debian CentOS Fedora file2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Normalni format

U svom najjednostavnijem obliku kada se naredba diff izvodi na dvije tekstualne datoteke bez ikakvih opcija, ona proizvodi izlaz u normalnom formatu:

diff file1 file2

Izlaz će izgledati ovako:

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

Uobičajeni izlazni format sastoji se od jednog ili više odjeljaka koji opisuju razlike. Svaki odjeljak izgleda ovako:

change-command < from-file-line… --- > to-file-line…

0a1 , 2d2 i 4c4, 5 su naredbe za promjenu. Svaka naredba za promjenu sadrži slijeva, slijeva:

  • Broj retka ili raspon linija u prvoj datoteci. Posebni znak za promjenu. Broj linije ili raspon linija u drugoj datoteci.

Znak promjene može biti jedan od sljedećih:

  • a - Dodajte linije. c - Promjena linija. d - Brisanje linija.

Naredba za promjenu prati kompletne retke koji se uklanjaju ( < ) i dodaju u datoteku ( > ).

Objasnimo izlaz:

  • 0a1 - Dodajte redak 1 druge datoteke na početak datoteke1 (nakon retka 0 ).
    • > Kubuntu - redak iz drugog retka koji se dodaje prvoj datoteci kako je gore opisano.
    2d2 - Brisanje retka 2 iz prve datoteke. Simbol 2 nakon d označava da će se, ako redak ne bude izbrisan, pojaviti na drugom retku 2 .
    • < Arch Linux - izbrisana linija.
    4c4, 5 - Zamijenite (promijenite) redak 5 u prvoj datoteci s linijama 4-5 iz druge datoteke.
    • < CentOS - Redak u prvoj datoteci koji treba zamijeniti. --- - separator. > Arch Linux i > Centos - Linije iz druge datoteke koje zamjenjuju liniju u prvoj datoteci.

Oblik konteksta

Kada se koristi izlazni format konteksta, naredba diff prikazuje nekoliko linija konteksta oko redaka koje se razlikuju između datoteka.

Opcija -c govori diff da proizvede izlaz u kontekstnom formatu:

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

Izlaz započinje s imenima i vremenskim oznakama ako se uspoređuju datoteke i jednim ili više odjeljaka koji opisuju razlike. Svaki odjeljak izgleda ovako:

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers to-file-line-numbers - brojevi linija ili raspon linija odvojenih zarezima u prvoj i drugoj datoteci. from-file-line i to-file-line - Linije koje se razlikuju i linije konteksta:
    • Linije koje počinju s dva razmaka su linije konteksta, linije koje su u obje datoteke jednake. Linije koje počinju simbolom minus ( - ) su linije koje u drugoj datoteci ne odgovaraju ničemu. Linije koje nedostaju u drugoj datoteci. Linije koje započinju simbolom plus ( + ) su retci koji ne odgovaraju ničemu u prvoj datoteci. Linije koje nedostaju u prvoj datoteci. Linije koje započinju uskličnikom ( ! ) Retci su koji se mijenjaju između dvije datoteke. Svaka grupa linija koja započinje s ! iz prve datoteke ima odgovarajuće podudaranje u drugoj datoteci.

Objasnimo najvažnije dijelove rezultata:

  • U ovom primjeru imamo samo jedan odjeljak koji opisuje razlike. *** 1, 6 **** i --- 1, 7 ---- govori nam o rasponu redaka iz prve i druge datoteke koji su uključeni u ovaj odjeljak. Linije Ubuntu , Debian , Fedora i zadnji prazni red isti su u obje datoteke. Ove linije počinju s dvostrukim razmakom.Line - Arch Linux iz prve datoteke ne odgovara ničemu u drugoj datoteci. Iako ova linija postoji i u drugoj datoteci, položaji su različiti.Line + Kubuntu iz druge datoteke ne odgovara ničemu u prvoj datoteci.Line ! CentOS ! CentOS iz prve datoteke i redaka ! Arch Linux ! Arch Linux i ! CentOS ! CentOS iz druge datoteke mijenja se između datoteka.

Prema zadanim postavkama, broj kontekstnih linija zadan je na tri. Za određivanje drugog broja koristite opciju -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

Jedinstveni format

Jedinstveni izlazni format poboljšana je verzija kontekstnog formata i daje manji izlaz.

Upotrijebite opciju -u da kažete diff za ispis izlaza u jedinstvenom formatu:

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

Izlaz započinje s imenima i vremenskim oznakama datoteka te jednim ili više odjeljaka koji opisuju razlike. Svaki odjeljak ima oblik:

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ - Broj retka ili raspon redaka iz prve i druge datoteke uključene u ovaj odjeljak. line-from-files - Redovi koji se razlikuju i crte konteksta:
    • Linije koje počinju s dva razmaka su linije konteksta, linije koje su u obje datoteke jednake. Linije koje počinju simbolom minus ( - ) su linije koje se uklanjaju iz prve datoteke. Linije koje počinju sa simbolom plus ( + ) su retke koji su dodani iz prve datoteke.

Zanemari slučaj

Kao što možete primijetiti u gornjim primjerima, naredba diff prema zadanom je osjetljiva na velika i mala slova.

Upotrijebite opciju -i za diff u slučaju ignoriranja:

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

Zaključak

Usporedba tekstualnih datoteka za razlike jedan je od najčešćih zadataka za administratore Linux sustava.

Naredba diff uspoređuje datoteke po redak. Za više informacija upišite man diff na vašem terminalu.

razl. terminala