| Vývojář | Bellovy laboratoře aDouglas McIlroy |
|---|---|
| Typ softwaru | počítačový program, standardní UNIXová utilita či příkaz afile comparison |
| Některá data mohou pocházet zdatové položky. | |
diff je v informatice nástroj, který se používá pro zjištění rozdílů mezi dvěmatextovými soubory tak, že vypíše řádky, kterými se zadané soubory liší. Nalezneme jej vUnix a operačních systémechunixového typu. Nástroj je využíván zejménaprogramátory, kteří tak mohou snadno prohlédnout změny, ke kterým vezdrojovém kódu programu došlo. Příbuzným nástrojem jediff3, který porovnává tři soubory. Výstup programu diff označujeme jako patch (záplata) a lze ho použít k aplikaci na původní soubor pomocí stejnojmenného nástrojepatch.
Nástrojdiff slouží k zjištění rozdílů mezi dvěma soubory, které jsou zadány na vstupu (starý a nový). Na rozdíl od nástrojecmp (který jen ohlásí, zda jsou soubory stejné nebo rozdílné) je výstupem nástrojediff seznam změn, ke kterým došlo (přidaný řádek, smazaný řádek, změněný řádek). Změny jsou obvykle doplněny také okolními (nezměněnými) řádky textu (tzv. kontext), který slouží k lepšímu pochopení změn a pro kontrolu umístění popsaných změn.
Při posuzování změn je možné ignorovat změny založené na přidání nebo odebrání prázdných řádků,bílých znaků (mezery a tabulátory), ale i určitých řádků, takže i pro různé soubory může být nástrojemdiff zjištěno, že se neliší.
Výstupem programu je seznam změn, který je zapsán v jednom z dostupných formátů (viz dále). Tento výstup označujeme pojmempatch (záplata). Máme-li k dispozici původní verzi souboru (který byl použit při porovnání jakostarý – viz výše) a záplatu, můžeme pomocí stejnojmenného nástrojepatch na něj aplikovat změny a získat tak novou verzi souboru (viznový výše). Nástrojpatch pracuje inverzně vůči nástrojidiff. Programátoři proto nemusí při spolupráci posílat neustále celé změněné soubory, ale stačí poslat jen seznam změn k poslední všeobecně známé verzi, tj. záplatu (patch).
diff [volby] stary_soubor novy_soubor
Příkazdiff porovnává obsah souborustary_soubor s obsahem souborunovy_soubor. Je-li místo jména souboru použit znak „-“, čte se místo nějstandardní vstup. Pokud je jeden z argumentů adresář a druhý je soubor, potom příkaz porovnává obsah uvedeného souboru se stejnojmenným souborem v uvedeném adresáři. V tomto případě se soubor nesmí nahradit znakem minus. Jsou-li oba argumenty jména adresářů, potom se porovnávají obsahy souborů v uvedených adresářích v abecedním pořadí. Potřebujeme-li adresáře prohledávatrekurzivně (tj. včetně podadresářů), zadáme volbu-r (nebo--recursive vGNU implementaci). Příkaz neporovnává obsahy adresářů jakožto souborů s adresářovou informací.
Příkazdiff je primárně určen na porovnávání textových souborů po řádcích. Na začátku porovnávání se však vždy zjišťuje, o jaký typ souboru jde. Pokud se v prvních několikaKiB souboru nenajde jedinýnull znak, potom se soubor považuje za textový. V opačném případě jde o binární soubor, diff je porovnábajt po bajtu a pouze oznámí, že se soubory liší (nebo neoznámí nic, potom jsou soubory shodné). Příkaz lze volbou-a nebo--text násilně vnutit, že jde o textové soubory. Diff potom tyto soubory bude porovnávat textově. Naopak zadáním volby--brief spustíme binární porovnávání opět bez ohledu na skutečný typ souboru. K dispozici je rovněž volba--binary, která však v systémech vyhovujících normámPOSIX (např.Linux) nemá význam. Význam má tam, kde se řádky ukončují dvojicí znakůCR,LF. Normálně se v takovém systému znak CR na vstupu vynechává a na výstupu se přidává. Po uvedení--binary se CR na vstupu přečte jako každý jiný znak a na výstupu se nepřidává. (Žádná z voleb zmíněných v této sekci není součástí POSIX specifikace).
Příkazdiff umí údaje předávat na výstup v několika formátech. Normální (implicitní) je takový, ve kterém se vypisují pouze ty řádky, které jsou v jednom či druhém souboru navíc nebo se liší. Tento formát se však pro vytváření záplat běžně nepoužívá.
Obecný formát normálního výpisu je následující:
popis změny<řádek z prvního souboru<řádek z prvního souboru…--->řádek ze druhého souboru>řádek ze druhého souboru…
Možné popisy změny jsou tři. Obsahují vždy číslo řádku nebo interval čísel řádků (čísla se v intervalu oddělují čárkou) z prvního souboru (vztahuje se k pořadí jmen souborů uvedených na příkazovém řádku při spuštění diff), dále pak identifikátor změny (a, c, d) a číslo řádku nebo interval řádků ze druhého souboru.
Další možný výstupní formát je kontextový. Zde diff změny zobrazí spolu s okolními řádky. Uživatel tak lépe pochopí význam změn. Kontextový výstupní formát zapínáme jednou z voleb-c,-C a --context. Dvěma posledním volbám zadáváme jako parametr počet řádků vypisovaného okolí. Nástrojpatch typicky vyžaduje pro kontrolu aplikovaných změn dva řádky okolí.
Řádky obsahující okolí začínají dvěma mezerami. Rozdílné řádky obsahují v prvním sloupci jeden z následujících znaků a ve druhém sloupci mezeru:
Pokud jsou změny pouze typu + a -, potom se okolí v opačném souboru nevypisuje.
Dalším typem výstupního formátu je unifikovaný (sjednocený) kontextový formát. Jeho výhodou proti kontextovému způsobu výpisu je odstranění nadbytečných opakujících se řádků. Výpis v tomto tvaru se získá volbami-u,-U nebo--unified.
| Příkazy a programypříkazové řádkyUnixu (více) | |
|---|---|
| Správa souborů | |
| Správa procesů | |
| Správa uživatelů a prostředí | |
| Zpracování textu | |
| Programování vshellu | |
| Síťová komunikace | |
| Hledání | |
| Ostatní | |