Základní příkazy Unixu
Z Milan Kerslager
Obsah
Příkazy pro práci s adresáři
V následujícím textu jsou postupně představeny základní příkazy pro práci v unixovém příkazovém řádku. Text je součástí série článků Práce s Linuxem. Čtenář tedy zde navazuje na předchozí články (zejména Příkazový řádek v Unixu a Základní informace o systému).
- ls [cesta]
- výpis obsahu adresáře
- přepínače:
- -a vypíše všechny soubory v adresáři včetně souborů, které začínají tečkou (tzv. skryté soubory)
- -l dlouhý výpis (včetně práv, počet hardlinek, vlastníka, skupiny, délky, času poslední modifikace)
- -t setřídí výpis podle data poslední modifikace, od nejnovějších ke starším
- -u setřídí výpis podle času posledního přístupu k souboru, od nejnovějších ke starším
- -r opačný způsob třídění
- -F přidat znak k souborům určující jejich typ, normálním nic (spustitelný*, adresář/, symbolická linky@, FIFO|, socket=)
- -R rekurzivní výpis podadresářů
- -L vypsat soubor, na který ukazuje linka místo linky samotné (kombinace -RL jde i za linky)
- -d vypíše adresáře jako ostaní soubory místo jejich obsahu
- -f netřídit obsah adresáře
- -i vypíše číslo i-nodu každého souboru
- mkdir [adresář]
- vytvoření adresáře
- přepínače:
- -p rekurzivní vytváření (více adresářů najednou)
- rmdir [adresář]
- smazání adresáře
- adresář musí být prázdný (mazání neprázdných adresářů - viz: rm -r)
- cd [adresář]
- změna aktuálního adresáře
- bez parametru přepne do domácího adresáře
cd dir přepne do adresáře se jménem dir
(absolutní nebo relativní cesta)
cd .. přepne do nadřízeného adresáře
cd - přepne do adresáře, ve kterém jsme byli naposledy (krok zpět)
cd ~/dir označuje adresář dir ve vlastním domácím adresáři
cd ~huzva označuje domácí adresář uživatele s přihlašovacím jménem huzva
- pwd
- výpis aktuálního adresáře
- du
- vypíše obsazený prostor (výsledek v kB)
- přepínače
- -s spočítat jen výsledek za celý podstrom adresářů
- -h výstup v jednotkách (kB, MB, GB apod.)
Příkazy pro práci se soubory
- cp [soubor1] [cílové_jméno]
- cp [soubor1] [soubor2] [soubor3] ... [cílový adresář]
- kopírování souboru(ů), cíl musí být vždy uveden (tečka označuje aktuální adresář)
- přepínače:
- -r rekurzivní kopírování podadresářů
- -i interaktivní (při přepisu souboru se ptá)
- -a zachovává čas, vlastníka, skupinu, přístupová práva (používá se k archivaci)
- mv [původní_jméno] [nové_jméno]
- přejmenování souboru a jeho případný přesun
- přesouvat adresáře lze jen v rámci jednoho filesystému (jednoho oddílu, resp. partition - jinak je nutné soubory kopírovat)
- rm [soubor]
- smazání souboru
- přepínače:
- -i interaktivní (každé mazání bude vyžadovat souhlas uživatele)
- -f na nic se neptej a mazej
- -r rekurzivní mazání včetně podadresářů
SMRTELNÉ: rm -rf .* (vyhoví i dvě tečky - příkaz maže i v nadřízených adresářích) SPRÁVNĚ: rm -rf .[^.]*
- hexdump [soubor]
- hexadecimální výpis bajtů v souboru
- přepínače:
- -C kromě hexadecimálního výstupu vypíše i ASCII reprezentaci znaků (kromě řídících znaků)
- find [adresář] [podmínka] [operace]
- rekurzivní prohledávání stromu adresářů a souborů
- podmínka:
- -name soubor nalezení souboru dle jména. Lze použít metaznaky *,?,[], musí však být uzavřeny do apostrofů nebo uvozovek nebo uvozeny zpětným lomítkem, aby byly interpretovány příkazem find a ne expandovány shellem. Varianta -iname soubor ignoruje velká/malá písmena
- -user jméno hledá se soubor, jehož vlastníkem je uživatel jméno
- -type typ hledá soubory daného typu, kde typ nabývá hodnoty:
- f obyčejný soubor
- d adresář
- l linka
- -atime n hledají se soubory, ke kterým bylo před n dny naposledy přistupováno
- -mtime n hledají se soubory, do kterých byl před n dny proveden poslední zápis
- -links n hledá se soubor se specifikovaným počtem odkazů (linků)
- -size n hledají se soubory o velikosti n jednotek, kde jednotka je standardně 512 bajtů nebo se dá určit písmenem, které následuje těsně za číslem:
- c v bajtech
- k v kilobajtech
- -a operátor logického součinu ("a")
- -o operátor logického součtu ("nebo")
- ! negace
- pokud je před číselným výrazem (výše označeno jako n) uveden znak + (plus), znamená to že se budou hledat soubory, u nichž kritérium přesahuje danou hodnotu. Pokud je před číselným výrazem znak - (mínus), budou se hledat soubory s kritériem nedosahujícím danou hodnotu.
- operace:
- -print zobrazení jmen souborů, které byly vybrány (GNU find nalezené soubory zobrazuje i bez tohoto parametru)
- -exec příkaz se soubory vybranými podle kritéria bude proveden uvedený příkaz, ve kterém znaky {} reprezentují jméno vybraného souboru, text příkazu musí být ukončen mezerou, zpětným lomítkem a středníkem \;
find /proc -name \*conn\* -exec cat {} \; 2> /dev/null
Textové utility
- cat [soubor]
- vypsání obsahu souboru
- přepínače:
- -n očíslovat na výstupu řádky (viz též příkaz
nl
)
- -n očíslovat na výstupu řádky (viz též příkaz
- tac [soubor]
- vypsání obsahu souboru s obráceným pořadím řádků
- head [soubor]
- výpis začátku souboru (stadardně 10 řádků)
- přepínače:
- -číslo počet vypsaných řádků od začátku souboru
- -c číslo počet vypsaných bajtů od začátku souboru
- tail [soubor]
- výpis konce souboru (stadardně 10 řádků)
- přepínače:
- -číslo počet vypsaných řádků od konce souboru
- -cčíslo počet vypsaných bajtů od konce souboru
- -f na konci souboru čekej a zobrazuj přírustky
- file [soubor]
- určí typ souboru podle jeho obsahu (spustitelný, GIF, ZIP, text, prázdný, linka, ...)
- definice typů je v souboru /etc/magic (resp. /usr/share/magic)
- stat [soubor]
- vypíše obsah inodu (vlastník, poslední změna souboru a inodu, velikost, přístupová práva, atd.)
- strings [soubor]
- vypíše řetězce z binárního souboru
- wc [soubor]
- vypíše počet řádků, slov a písmen v souboru
- přepínače:
- -l počet řádků
- -w počet slov
- -c počet znaků
- touch [soubor]
- mění datum poslední modifikace souboru
- když soubor neexistuje, je vytvořen nový s nulovou délkou
- přepínače:
- -t MMDDhhmm[[SS]RR][.ss] použít tento čas
- cut [soubor]
- vertikální řez souborem
- přepínače:
- -bpozice pozice vyříznutí podle sloupců počítáno od 1
- -fpoložky položky (implicitní oddělovač je tabelátor)
- -dznak definuje znak jako oddělovač položek (tj. jiný, než tabelátor)
- tvar seznamu položek (pozic):
- 2-5 druhá až pátá položka (pozice)
- -5 první až pátá položka (pozice)
- 1,7 první a sedmá položka
- nl [soubor]
- očíslovat řádky souboru (výstupu)
- join [soubor1] [soubor2]
- tiskne na výstup odpovídající řádky obou souborů podle společné identifikace
- přepínače:
- -1 sloupec z prvního souboru slučovat podle identifikace ze zadaného sloupce
- -2 sloupec z druhého souboru slučovat podle identifikace ze zadaného sloupce
- -t oddělovač použít jiný oddělovač v vstupních a výstupních souborech
Filtry
- less [soubor] ...
- vstup opisuje na výstup po stránkách, lepší a novější varianta příkazu more
- název je slovní hříčka: program méně umí více, než program více, který toho umí méně, než program méně (more znamená anglicky více a less znamená méně)
- ovládací klávesy:
- mezera posun o stránku vpřed
- b posun o stránku zpět
- q konec programu
- :n skočí na následující soubor uvedený na příkazové řádce
- /řetězec hledat řetězec směrem dopředu
- ?řetězec hledat řetězec směrem dozadu
- n hledat další výskyt řetězce (v původním směru hledání)
- N hledat další výskyt řetězce v opačném směru, než bylo zadáno původní hledání
- F čeká a zobrazuje přírustky v souboru - obdoba příkazu tail -f soubor
- dos2unix
- provádí konverzi DOSového formátu konce řádku - znaky CR (Carriage Return - návrat vozíku tiskárny, kód 0x0D hexadecimálně, resp. 13 decimálně) a LF (Line Feed - posun papíru v tiskárně o jeden řádek, tj. 0x0A hexadecimálně, resp. 10 decimálně) do formátu konce řádků v Unixu (jen znak CR)
dos2unix soubor.txt dos2unix < soubor.dos > soubor.unx
- unix2dos
- provádí konverzi z Unixového formátu konce řádku (znak LF) na formát DOSu (znaky CR a LF)
- tee [soubor]
- filtr - opisuje vstup do souboru a zároveň na obrazovku
- přepínače:
- -a nový text se připojí na konec souboru
- sort [+číslo] [přepínače] [soubor]
- filtr - třídění vstupu
- přepínače:
- -n setřídění numerické (pokud jsou číselné hodnoty)
- -r setřídění sestupné
- -b ignorovat počáteční mezery
- -f nebudou se rozlišovat malá a velká písmena (velká písmena jsou převáděna na malá)
- -k číslo určuje sloupec, od kterého se posuzuje pořadí při třídění (číslovány od 1)
- -k číslo1,číslo2 určuje rozsah sloupců pro třídění
- -tznak určení znaku, který odděluje jednotlivé sloupce
- -u z výstupního souboru budou vyloučeny duplicitní řádky (pro posouzení duplicit se porovnávají pouze klíče)
- uniq [paramery] [soubor]
- filtr - odstraňuje duplicitní řádky ze setříděného vstupu
- přepínače:
- -číslo přeskočí se zadaný počet řádků od začátku
- -u budou se vypisovat pouze řádky, které nejsou duplicitní
- -d budou se vypisovat pouze řádky, které jsou duplicitní
- -c na začátku každého řádku se vypíše počet výskytů
- grep [výraz] [soubor]
- hledá výraz v souboru a vypisuje řádky, které ho obsahují
- přepínače:
- -c vypíše počet řádků, ve kterých byl nalezen vzor
- -i ignoruje rozdíly mezi malými a velkými písmeny
- -l zobrazuje pouze jména souborů, ve kterých byl nalezen vzor
- -n zobrazí čísla řádků obsahujících vzor
- -s potlačen chybový výstup
- -v vypíše řádky neobsahující vzor
- -r rekurzivní hledání v podadresářích
- -q nalezený řádek se nevypisuje - používá se např. v testech ve skriptech, kde jen testujeme návratový kód, tj. nalezeno - pravda (0), nenalezeno - nepravda (1)
- při specifikaci hledaného řetězce lze použít regulární výraz, ve kterém lze použít následující speciální znaky (doporučuji zapisovat regulární výraz do uvozovek či apostrofů):
^ začátek řádku $ konec řádku . libovolný znak * libovolný počet opakování předchozího znaku [] právě jeden znak z množiny znaků uvedených v těchto závorkách, při specifikaci lze použít následující dva speciální znaky: - používá se pro označení intervalu znaků z množiny ASCII (např. a-z, 0-9) ^ negace výčtu znaků \ potlačení speciálního významu následujícího znaku
Příklady regulárních výrazů:
^# řádky začínající znakem křížek (hash) ^$ prázdné řádky ^.$ řádky obsahující právě jeden znak ^[a-z]*$ řádky obsahující pouze malá písmena \.[0-9] výraz označuje tečku následovanou číslicí
Porovnávání souborů
- cmp
- porovnává dva soubory po jednotlivých bajtech, ohlásí první rozdílný bajt
- přepínače:
- -s potlačení výstupu o nalezených odchylkách
- diff soubor1 soubor2
- porovnává dva soubory po jednotlivých řádcích a hledá rozdíly mezi nimi
- vypisuje změněné řádky, výstup se používá jako vstup pro program patch
- přepínače:
- -u unifikovaný výstup (používá se nejčastěji, modifikované řádky jsou odlišeny znaky plus a mínus, které vyjadřují, zda byl řádek smazán nebo přidán; změněné řádky jsou obklopeny původními,aby se při použití programu patch poznalo, je-li zpracovávaný soubor ve stavu, který byl zachycen programem diff)
- -r rekurzivní běh
- -N zahrnuty i nové soubory
- popis standardního výstupu programu (unifikovaný formát viz výše):
Ve výpisu je nejdříve údaj o typu a rozsahu nalezených změn, poté následuje výpis řádek z obou souborů: znak < označuje řádky prvého souboru, znak > označuje řádky druhého souboru. Údaj o typu a rozsahu změn má tuto strukturu m x n, kde:
m označuje čísla řádek prvního souboru n označuje čísla řádek druhého souboru x může nabývat hodnot: a přidání řádků k prvnímu souboru d zrušení řádků z druhého souboru c změna znaků na řádcích
Např. zápis 8,20 c 8,22 označuje že na řádcích 8 až 20 z prvního souboru byly provedeny změny, které jsou zapsány na řádcích 8 až 22 druhého souboru (současně byly dva řádky vloženy).
- comm [-123] soubor1 soubor2
- zjišťuje, které řádky ve dvou setříděných souborech jsou stejné
- výstup obsahuje tři vzájemně se prolínající sloupce s následujícím významem:
- 1. sloupec - řádek je v prvním souboru, není ve druhém
- 2. sloupec - řádek je ve druhém souboru, není v prvním
- 3. sloupce - řádek je v obou souborech
- přepínače:
- -123 potlačí výstup příslušného sloupce (např. -13 propustí na standardní výstup pouze druhý sloupec)