Příkazy Unixu
Milan Keršláger, 09.11.2006, 08:32:32
Nápověda
Klasická nápověda se v Unixu nachází v manuálových stránkách, které si můžete
od roku 1979 zobrazit příkazem man
(stránkování mezerníkem,
ukončení klávesou "q", nápověda klávesou "h"). V tomto
formátu je k dispozici pro některé manuálové stránky i český překlad. Manuálové
stránky lze prohledávat pomocí příkazů whatis
a
apropos
, které prohledají předem vytvořenou databázi krátkých a
delších popisů v úvodních odstavcích manuálových stránek. Databáze se vytváří
příkazem makewhatis
. Manuálové stránky jsou organizovány do
sekcí,
které sdružují příbuzná témata. Pokud jsou v systému dvě stejnojmenné manuálové
stránky v různých sekcích, je potřeba číslo sekce uvést jako první parametr.
Sdružení GNU však zavedlo formát TexInfo, který je dostupný příkazem
info
, a proto některé manuálové stránky neobsahují nejnovější
informace. Uživatelsky přívětivější je pro prohlížení TexInfo stránek příkaz
pinfo
(lze používat šipky a podobně). Kromě toho by každý příkaz
měl při použití přepínače --help
měl vypsat stručnou nápovědu pro
použití příkazu.
man cp # manuálová stránka příkazu cp (je-li k dispozici, pak jazyk dle nastavení)
LANG=C man cp # anglická manuálová stránka příkazu cp
pinfo cp # info stránka příkazu cp
cp --help # zobrazí stručnou nápovědu pro příkaz cp
whatis passwd # prohledá krátké popisy příkazů na výskyt slova passwd
apropos passwd # prohledá detailnější popisy příkazů na výskyt slova passwd
man 5 passwd # manuálová stránka ze sekce 5 (popis souboru /etc/passwd)
man cp | col -bf | unix2dos > soubor.txt # manuálová stránka do souboru (např. pro tisk)
Práce s příkazovým řádkem
Po přihlášení do systému pomocí terminálové emulace pomocí SSH protokolu (z MS
Windows např. pomocí programu
PuTTY,
z jiného Unixu pomocí příkazu
ssh
) je uživateli spuštěn interpret příkazů - tzv. shell. Komfort
práce a syntaxe je závislá na tom, jaký shell zvolíte. Obvykle se jedná BASH
(Bourne-Again Shell). Přihlašovací shell lze změnit příkazem chsh
,
přičemž seznam dostupných variant naleznete v souboru /etc/shells
.
Pokud zapisujete příkaz nebo jméno souboru, můžete si nechat poradit pomocí
klávesy <TAB>. Jméno souboru je doplněno nebo se ozve pípnutí, které
signalizuje, že je k dispozici více variant. Můžete přidat další znak a opět
zkusit klávesu <TAB> a nebo po pípnutí stisknout klávesu <TAB>
podruhé, aby se vypsaly všechny dostupné možnosti.
Každý příkaz může být následován několika přepínači a parametry, přičemž
oddělovacím znakem je mezera. Přepínače slouží ke změně standardního chování
příkazu (například zapnutí podrobnějšího výpisu adresáře). Dělíme je na krátké
přepínače, které jsou uvozeny znakem mínus, za kterým následuje jedno písmeno
(a případný parametr oddělený mezerou nebo bez mezery). Pokud nejsou použity
parametry, lze krátké přepínače sdružovat do skupiny za jediný znak mínus.
Dlouhé přepínače jsou uvozeny dvěma znaky mínus těsně po sobě a skládají se z
celého slova, které obvykle vystihuje jeho funkci. Nelze je sdružovat, jako
krátké přepínače. Parametry příkazu určují, s čím bude příkaz pracovat. Pokud
parametr není určen, bude příkaz buď pracovat s aktuálním adresářem nebo
očekávat vstup z klávesnice (místo aby příkaz četl ze zadaného souboru). Tato
pravidla jsou v systému jednotná, na parsování přepínačů a parametrů jsou
používány specializované knihovní funkce, chování systému je až na výjimky
jednotné a příkazy lze snadno sdružovat do kolon (trubky, pipe).
Vstup z klávesnice lze ukončit kombinací CTRL+d
. Předčasně
lze běh příkazu ukončit kombinací CTRL+c
. U celoobrazovkových
programů (links, mc, less, ...) lze vynutit překreslení obrazovky
kombinací CTRL+l
(klávesa s malým písmenem "L").
Výstup na terminál (obrazovku) lze pozastavit kombinací CTRL+s
a dále povolit kombinací CTRL+q
.
Někdy se terminál tak zvaně "splaší" (vypisují se nesmyslné znaky,
případně nic nebo jsou podivně nastavené barvy apod. - terminál je v takovém
případě jen nevhodně přenastaven speciálními řídícími znaky). V takovém případě
pro uvedení do původního stavu použijte níže uvedené příkazy (lze je napsat i
"poslepu" a pak odeslat klávesou Enter).
echo ^[c # řídící znak se zapíše: CTRL+v a pak ESC a pak písmeno "c"
stty sane
Příkazy pro práci s adresáři
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 -
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 se jménem huzva
pwd
- výpis aktuálního adresáře
du
- vypíše obsazený prostor (výsledek v kB)
- -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ářů
- Poznámky:
!!!SMRTELNÉ:
rm -r .*
(vyhoví i dvě tečky - příkaz maže i v
nadřízených adresářích), SPRÁVNĚ: rm -r .[^.]*
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ů)
Textové utility
cat [soubor]
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
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
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 soč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 \;
Příklad: find /proc -name \*conn\* -exec cat {} \; 2> /dev/null
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)
- příklad:
dos2unix soubor.txt
- příklad:
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á)
- +číslo
- určuje sloupec, který se má použít pro třídění. Sloupce se
číslují od 0. Lze definovat více sloupců (např. zápis +3 +1
určuje, že primární klíč je ve 4. sloupci, sekundární klíč ve
2. sloupci). K číslu sloupce mohou být připojeny písmena
n, r či f, které ovlivňují způsob třídění
dle tohoto klíče
- -číslo
- určuje sloupec, před kterým klíče končí. Obvykle se neuvádí -
klíče jsou až do posledního sloupce na řádce
- -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)