3. Příkazová řádka¶
Autor sekce: Jiří Sedláček <sedlacek@vse.cz>
3.1. Efektivnější a pohodlnější práce na příkazové řádce¶
Existuje řada klávesových zkratek a dalších postupů pro efektivnější, rychlejší a pohodlnější práci na příkazové řádce. Neuvádím všechny možnosti.
Klávesa(y) |
Význam/využití |
---|---|
|
Listování posledně zadanými příkazy nahoru (starší příkazy) / dolů |
|
Pohyb v rámci aktuálního příkazu |
|
Obvyklý význam (na začátek/konec řádku) |
|
Vymaže znak jako obvykle („před sebe“, „za sebe“) |
|
Vymaže slovo (Word): slovo končí mezerou (ev. tabulátorem) |
|
Vymaže celý řádek |
|
Dokončování příkazů (viz poznámka 2) |
|
Reverse search: stiskněte tuto zkratku a potom zadejte několik znaků kdekoli z příkazů (ze začátku, uprostřed, na konci), pokud možno co nejvíce unikátní. Zobrazí se první vyhovující příkaz. Poté můžete:
|
|
Přeruší vykonávání daného programu (pošle mu signál přerušení). Existují však určité výjimky: některé programy se ukončí klávesou q (Quit) nebo příkazem exit. |
Příkaz |
Význam/využití |
---|---|
|
Zobrazí n posledních příkazů (např. 100, záleží na nastavení) Řádky jsou očíslovány což lze využít různými kombinacemi „!“. |
|
Vypíše 25 posledních příkazů |
!! ! nnn!-8 |
Zopakuje poslední příkaz
Zopakuje příkaz z řádky daného čísla (číslo bez mezery)
Aktuální příkaz mínus 8
|
|
Příkaz smaže obsah obrazovky terminálu (jen obrazovku, nemá žádný vliv na historii). |
|
Resetuje nastavení terminálů (použijte, když clear nestačilo) např. poté, co jste na terminál omylem vypsali obsah binárního souboru. |
Poznámky:
Některé klávesy nemusí na vašem PC fungovat tak, jak výše popsáno (závisí na typu klávesnice, nastavení terminálu, zda jde o virtuální nebo „pravý“ textový terminál).
Dokončování příkazů (klávesa Tab) funguje nejen pro příkazy, ale i jejich přepínače a parametry (např. jména souborů). Zapište několik písmen a stiskněte Tab. Je-li jednoznačné, doplní např. celý zbytek jména souboru. Pokud není jednoznačné, ale možností je jen několik, vypíše je. Je-li jich hodně, zeptá se, zda je má všechny vypsat.
Je-li shell Bash (nejčastější), je historie příkazů uložena v souboru .bash_history, ten si můžete např. zkopírovat na své PC a prohlédnout (po dosažení maximálního počtu řádků jsou nejstarší mazány).
3.2. Interpret příkazů (shell)¶
Vámi zadané příkazy zpracovává tzv. interpret příkazů (příkazový interpret, též příkazový procesor, anglicky shell). Shell je automaticky spuštěn po přihlášení uživatele do systému, vytváří tzv. příkazovou řádku, pomocí které může uživatel počítač ovládat.
Shell má dva základní režimy:
Interaktivní režim: vložený příkaz nebo příkazy jsou ihned zpracovány po odeslání klávesou Enter. Typicky jsou příkazy na jednom řádku, ale i v interaktivním režimu lze (dlouhé) příkazy zapsat na více řádků. Na konec řádku zapište \ (zpětné lomítko), na dalším řádku se objeví znak > a můžete pokračovat v psaní příkazů. Rozlišujte různé využití zpětného lomítka (viz přehled níže).
Dávkový režim: provádí příkazy předem zapsané v textovém souboru. V Unixu a Linuxu jim zpravidla říkáme skripty (případně shellové skripty). Může jít o značně komplexní programy. K dispozici jsou mimo jiné logické operátory, podmíněné příkazy či příkazy iterace. Skripty se zde nebudeme blíže zabývat.
Jaký konkrétní shell se po přihlášení daného uživatele automaticky
spustí, je uvedeno v souboru /etc/passwd
(viz ukázka výpisu tohoto souboru v prezentaci).
Ve většině Linux distribucí je to nejčastěji /bin/bash
, bash (Bourne-again
shell), který vychází ze staršího Bourne shell. Některé další shelly
jsou (v konkrétní distribuci nejsou k dispozici všechny):
ash, dash: Almquist shell (ash) je malý, kompaktní a tedy rychlý shell s určitými omezeními. Dash je jeho verze pro Debian, kde se používá pro rychlejší start počítače, pro uživatele je pak zpravidla nastaven výše popsaný bash. Dále se hodně používá u zařízení s embedded Linux (např. domácí multimediální centra, set-top boxy a další spotřební elektronika, různá síťová zařízení) a u některých Linux mini distribucí.
rbash: Restricted shell záměrně omezuje možnosti v něm prováděných interaktivních nebo dávkových příkazů s cílem zvýšit zabezpečení systému (některým útokům však nemůže zabránit, existují také triky na únik z omezeného režimu). V případě shellu bash se vyvolá příkazem rbash nebo bash -r.
Prompt se zobrazuje na začátku příkazové řádky. V nejjednodušším případě se může zobrazovat pouze jako znak $, příp. jako > u některých shellů. Často zde bývá např. jméno uživatele a/nebo aktuální adresář, příp. i další údaje, někdy i barevně rozlišené. Na případnou úpravu (dočasnou, trvalou) existuje na Internetu řada návodů.
Pokud zadáte určitý příkaz (příkazy) interpret příkazů provede nejprve řadu transformací např. nahradí * nebo ? odpovídajícím seznamem souborů, obdobně nahrazuje proměnné jejich obsahem ad. Poté:
Interní příkaz: pokud příkaz, který jste zadali je tzv. interní příkaz (bultin command), vykoná ho interpret příkazů.
Externí příkaz: pokud to není interní příkaz, tak interpret příkazů najde odpovídající program (spustitelný soubor), spustí ho a předá mu všechny argumenty.
Interních příkazů je poměrně málo, např. alias
, cd
, echo
,
exit
, logout
, pwd
.
Zda jde o interní příkaz lze zjistit interním příkazem type
, např.
type cd
(vypíše cd is a shell builtin = interní příkaz)
nebo type cat
, který vypíše cat is hashed (/bin/cat) = externí příkaz.
Někdy type
vypíše, že je to alias, např. grep is aliased to `grep –color=auto‘.
U aliasu snadno nepoznáte, zda výsledný příkaz je interní/externí: nejspíše
ale externí, protože pro interní příkazy se aliasy obvykle nevytváří.
Poslední možnost je … shell keyword např. pro příkazy jako if
,
for
, time
které se používají ve skriptech = také interní.
Z hlediska běžného uživatele není až tak důležité, zda jde o interní nebo externí příkaz.
3.3. Různé využití zpětného lomítka¶
Znak \ (zpětné lomítko) má v Linuxu nejméně tři různé významy, podle toho, kde ho použijete:
Znak následující za zpětným lomítkem bude interpretován jako obyčejný znak, i když jinak má speciální význam: př. \? nebo \* nebo \ (viz kap. „Obvykle použití speciálních znaků“ výše).
Znak \ na konci řádku = pokračování příkazu na další řádce
Třetí, dosud neprobraný, způsob využití znaku \ je, že uvozuje tzv. formátovací nebo řídící znak. Nejčastěji (např. v dále popsaném příkazu echo) využijete \n, což znamená nový řádek (newline).
Další řídící nebo formátovací znaky pravděpodobně využijete až ve skriptech, např. \t znamená tabulátor, \f je FormFeed (nová stránka), \a je alert bell (zvukové znamení).
3.4. Příkazy - argumenty, přepínače a parametry¶
Můžeme zadávat příkazy bez dalších argumentů např.
pwd
ls
či za příkazem může následovat jeden či více argumentů, např.
mkdir prac
cd prac
ls -l
cd ..
cp soub.txt prac
mv --force soub.txt prejmen.txt
ls -l -a a*
pwd
(print working directory) vypíše aktivní adresář (užitečné,
pokud se aktuální adresář nezobrazuje jako součást promptu).ls
(list) bez argumentů
vypíše jen jména souborů v aktuálním adresáři.mkdir
(make directory) vytvoří nový adresář prac
,cd
(change directory) je změna aktuálního adresáře ve do prac
,cp
(copy) zde zkopíruje soub.txt
do adresáře prac
(pokud adresář neexistuje, tak vytvoří
soubor prac).mv
(move) přesouvá nebo přejmenovává soubor/soubory (zde přejmenování).Podrobnější popis těchto příkazů je v kapitole Tematický přehledu vybraných příkazů.
Již z těchto ukázek je vidět, že v Unixu lze argumenty rozdělit do několika skupin:
přepínače (options, ze slova optional) začínají jednou pomlčkou (krátký přepínač) či dvěma pomlčkami (dlouhý přepínač). Přepínač může mít argument (hodnotu) či je bez hodnoty a přepíná mezi dvěmi logickými hodnotami (v angličtině se poté často označuje jako flag).
krátký přepínač (short option) začíná jednou pomlčkou. Je snaha volit tyto přepínače mnemotechnicky (např. -l jako long), ale příkazů i přepínačů je mnoh a stejné písmeno mívá u různých příkazů různý význam. Je-li těchto přepínačů více, může být každý zapsán samostatně, ale typicky se sdružují (na pořadí zpravidla nezáleží). Příklady pro ls:
ls -l # dlouhý (long) výpis
ls -l -a # long formát, navíc vypsat i skryté soubory
ls -la # totéž jako -l -a
dlouhý přepínač (long option) začíná dvěma pomlčkami následované celým slovem (i více slov bez mezer spojených pomlčkou). Ke krátkému přepínači obvykle existuje i dlouhá varianta (jednou z výjimek bez dlouhé varianty je
ls -l
), dlouhých přepínačů je obvykle více než krátkých.
ls --all # --all je stejné jako -a
ls --directory # stejné jako ls -d, vypíše se jméno adresáře, ne obsah
ls -l --all # stejné jako ls -la
flag - všechny dosavadní ukázky byly se přepínači bez zadané hodnoty. Tyto přepínače buď jsou či nejsou uvedeny - přepínají mezi dvěmi logickými hodnotami. V češtině se obvykle pro ně nepoužívá speciální pojmenování.
přepínače s hodnotou - někdy je nutné či vhodné nastavit i konkrétní hodnotu přepínače. Hodnoty jsou častějí u dlouhých přepínačů. Následují ukázky:
ls -l --sort=size # long formát, setřídit dle velikosti
ls -l --sort=time # long formát, setřídit dle času
ls -l --sort time # stejné jako předchozí, hodnota oddělená mezerou
ls -l --sort=extension # long formát, setřídit dle přípony
parametry obvykle určují, s čím má příkaz či program pracovat. Např. v příkazu
mkdir
se zadá jméno adresáře, který se má vytvořit. Lze zadat více adresářů a poté se vytvoří všechny. Příkazpwd
je představitelem příkazů bez parametrů. Příkazls
lze použít bez parametrů (vypíší se všechny soubory v aktuálním adresáři) či lze zadat adresář(e), ze kterých se mají vypisovat soubory či lze zadat vzor(y) názvů souborů, které se mají vypsat:
ls # bez parametrů, vypíše se obsah aktuálního adresáře
ls -l prac # vypsání souborů v adresáři "prac"
ls -l c* b* # vypíší se soubory/adresáře začínající písmeny c a b
poziční parametry - u příkazů jako
cp
nebomv
standardně zadáváte dva parametry (co kam zkopírovat resp. co přejmenovat na co). U těchto parametrů závisí na pořadí, na vzájemné pozici vůči sobě.
cp soub.txt prac # zkopírování souboru do podadresáře prac
mv --force soub.txt prejmen.txt # přejmenování souboru
Závěr: počet a význam nutných argumentů lze většinou odvodit z funkce daného příkazu.
3.5. Nápověda k příkazům¶
Zatímco základní parametry příkazů si většinou odvodíte z funkce daného příkazu, přepínače příkazu si pravděpodobně budete pamatovat jen vybrané a pro nejpoužívanější příkazy. Proto je důležité naučit se používat různé formy nápovědy:
Interní nápověda daného příkazu (programu).
Dokumentace ve formě manuálových stránek.
Dokumentace ve formě pro program info.
Online verze manuálových stránek.
Online stránky s příklady, FAQ, HOWTO stránky, další WWW stránky.
Interní nápověda pro daný příkaz závisí na tom, zde jde o interní nebo externí příkaz.
pro většinu externích příkazů funguje
příkaz --help
, např.ls --help
. Funguje i u některých interních příkazů.pro interní příkazy zadejte
help interní_příkaz
, např.help cd
.
Pokud nevíte, zkuste nejprve (a) a pak teprve (b).
Již nápověda –help je obvykle dost podrobná, další možností jsou
manuálové stránky, ty vyvoláte man příkaz
, např. man ls
.
Příkaz man nápovědu automaticky stránkuje. Manuálové stránky jsou
standardně rozděleny do více kategorií:
Příkaz man passwd
zobrazí nápovědu pro příkaz passwd
. Příkaz
man 5 passwd
zobrazí nápovědu pro soubor /etc/passwd
.
Příkaz man man
zobrazí nápovědu programu man a také přehled 10 kategorií.
Při hledání nápovědy k nějakému tématu zkuste zadat přepínač -f
či -k
,
viz následující ukázky:
man -k passwd
passwd (5) - the password file
passwd (1) - change user password
passwd (1ssl) - compute password hashes
man -k passwd
chgpasswd (8) - update group passwords in batch mode
chpasswd (8) - update passwords in batch mode
gpasswd (1) - administer /etc/group and /etc/gshadow
grub-mkpasswd-pbkdf2 (1) - generate hashed password for GRUB
htpasswd (1) - Manage user files for basic authentication
ldappasswd (1) - change the password of an LDAP entry
mkpasswd (1) - Overfeatured front end to crypt(3)
pam_localuser (8) - require users to be listed in /etc/passwd
passwd (1) - change user password
passwd (1ssl) - compute password hashes
passwd (5) - the password file
slapd-passwd (5) - /etc/passwd backend to slapd
slappasswd (8) - OpenLDAP password utility
update-passwd (8) - safely update /etc/passwd, /etc/shadow and /etc/group
Další program info
zobrazí pro konkrétní příkaz nebo téma
někdy stejné informace (ale trochu jinak naformátované), někdy ještě podrobnější.
Existuje též
podobný program pinfo (může být třeba doinstalovat), který je pro řadu
uživatelů přehlednější (vybrané části dokumentace, např. odkazy na WWW
stránky, odkazy na další témata, jsou zvýrazněny barevně).
Online verze manuálových stránek: obdobně jako u pinfo, řada uživatelů preferuje online verzi manuálových stránek jako přehlednější (zvýraznění tučně a jinou barvou). Mezi další výhody patří, že takto můžete prostudovat i nápovědu pro příkazy, které dosud nemáte instalovány, příp. porovnat nápovědu i pro různé verze. Např. pro Debian jsou oficiální man stránky na:
Nápověda s příklady: než oficiální „suchá“ dokumentace je pro začátečníky, ale někdy i pro zkušenější uživatele, srozumitelnější nápověda příkazu s příklady. Zadejte do vyhledávače „příkaz examples“, příp. „Linux příkaz examples“, např. cat examples a měli byste získat hned několik kvalitních odkazů na články a tutoriály, které použití příkazu ilustrují na názorných příkladech.
Dále existuje řada stránek s častými otázkami (FAQ), tzv. HOWTO stránky, Wiki stránky a mnoho dalších WWW stránek věnovaných Linux příkazům a Linuxu obecně.
3.6. Obecná struktura nápovědy pro příkazy¶
Ať už jste nápovědu pro daný příkaz získaly přepínačem –help, programem
man nebo info, je struktura nápovědy velmi podobná. Na začátku bývá
obecný formát příkazu, poté význam jednotlivých parametrů a přepínačů
a příp. další důležité informace. Např. pro příkaz ls
ls [OPTION]... [FILE]...
je jak „Option“, tak „File“ v hranatých závorkách, tzn. že obě tyto části lze vynechat, jak už jsme uvedli v příkladech dříve. Je tedy možné zadat:
ls
uvedeme jen samotný příkaz
ls -la
uvedeme jen jeden nebo více přepínačů
ls prac
žádný přepínač, jeden parametr - soubor nebo adresář
ls -la prac
použity dva přepínače a jeden parametr (soubor nebo adresář)
Naproti tomu pro příkaz mkdir
je obecný formát příkazu poněkud
jiný:
mkdir [OPTION]... DIRECTORY...
Důvod je zřejmý: zatímco přepínače jsou volitelné, jméno
nejméně jednoho vytvářeného adresáře je nutné vždy zadat, jinak příkaz
mkdir
nedává smysl.
U příkazu mv
jsou uvedena hned tři obecná schémata, jak příkaz
použít, protože příkazem lze soubory přejmenovávat
i přesouvat (schémata si již prostudujte samostatně).
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
U jiných příkazů se můžeme setkat ještě s dalšími variantami obecného formátu příkazu, např. u příkazu hostname jedna varianta pro zobrazení jména PC má tento tvar:
hostname [-a|-A|-d|-f|-i|-I|-s|-y]
Všechny přepínače jsou v hranatých závorkách, tj. lze je vynechat. Ale v rámci hranatých závorek jsou jednotlivé volby odděleny svislou čarou, tzn. že se vzájemně vylučují: můžete si vybrat jen jednu možnost. V druhé variantě (pro nastavení jména PC) má obecný formát příkazu následující tvar:
hostname [-b] {hostname|-F file}
První přepínač je jako obvykle v hranatých závorkách, lze ho tedy vynechat, celý zbytek je ve složených závorkách a opět je zde svislá čára. To znamená, že tyto dvě volby se opět vzájemně vylučují, ale jednu možnost si musíte vybrat.
3.7. Proměnné v shellu, proměnné prostředí¶
Příkazový interpret používá proměnné (shell variables). Každá
proměnná má jméno a hodnotu, hodnotou může být i prázdný řetězec.
Po přihlášení a spuštění
příkazového interpretu se jich vytvoří poměrně hodně. Všechny proměnné
prostředí vypíšete příkazem set
.
Tabulka uvádí význam několika důležitých
proměnných (zda je určitá proměnná nastavena závisí též na distribuci,
příp. použitém shellu, např. EDITOR, PAGER, TZ).
Proměnná |
Stručný popis |
---|---|
USER |
uživatelské jméno právě přihlášeného uživatele (např. novak) |
HOME |
domovská složka aktuálního uživatele (absolutní cesta: /home/novak) |
HOSTNAME |
jméno počítače |
SHELL |
který shell je právě aktivní (např. /bin/bash) |
TERM |
který terminál je aktivní (např. xterm) |
PWD |
aktuální adresář |
OLDPWD |
předchozí adresář (proměnná na začátku prázdná) |
LANG |
nastavení jazyka (kód jazyka a kódování) |
PS1, PS2 |
Prompt String1 a 2: aktuální nastavení tzv. promptu |
PATH |
vyhledávací cesta (podrobnosti pod tabulkou) |
Při použití se před jméno doplní znak $ (dolar), popř. lze ještě jméno uzavřít
do složených závorek.
Obsah (hodnotu) proměnné vypíšeme příkazem echo $JMÉNO
, např. echo $PWD
(je to totéž jako příkaz pwd
).
echo $PATH
vypíše seznam složek oddělených dvojtečkou, např.
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
.
V těchto složkách bude interpret příkazů vyhledávat programy. Pokud není
v žádném z těchto adresářů, vypíše chybovou hlášku.
Hodnota se do proměnné přiřazuje pomocí operátoru = (rovná se). Okolo
operátoru nesmí být mezery. Např. další adresář přidáme do cesty takto:
PATH=$PATH:/home/novak/bin # přidání na konec
PATH=/home/novak/bin:$PATH # přidání na začátek
Tilda (~
) striktně vzato proměnnou není, ale reálně se chová jako
proměnná, obsahující domovský adresář právě přihlášeno uživatele. Proto
následující příkazy dají stejný výsledek:
cd ~
cd $HOME
cd /home/novak
cd
První dva příkazy dají stejný výsledek vždy, třetí příkaz je
ekvivalentní za předpokladu, že právě přihlášený uživatel je „novak“ a
proměnná $HOME má hodnotu „/home/novak“. Nejrychlejší a nejjednodušší
je čtvrtá varianta: cd
(bez parametru) je totéž jako cd ~
.
Můžeme vytvářet vlastní proměnné, které se pro snadné odlišení od proměnných prostředí obvykle píší pouze malými písmeny. Vlastní proměnné využijete především ve skriptech, kterými se zde blíže nezabýváme, proto jen malá ukázka (před a za rovnítkem nesmí být mezera):
jmeno=Jan
pocet=25
ks=5
let celkem=pocet*ks
echo "Jméno: $jmeno Počet: $pocet Kusů: $ks Celkem: $celkem"
Předposlední řádek ukázky let celkem=pocet*ks
můžeme zapsat také
následujícími způsoby:
((celkem=pocet*cena))
celkem=`expr $pocet '*' $cena` # přenositelná varianta
Jen poslední varintu lze použít v shellu /bin/sh. Zpětné apostrofy v ní označují, že obsah se provede jako příkaz a nahradí se výsledkem. Hvězdička musí být v apostrofech, jinak se místo ní doplní jména souborů z aktuálního adresáře.
Za proměnné prostředí (environment variables) se označují ty proměnné,
které se zpřístupňují spouštěným programům. Všechny proměnné
prostředí vypíšete příkazem env
, obvykle mají jména složená z velkých písmen.
Proměnné z výše uvedené tabulky patří mezi proměnné prostředí. Striktně vzato
mnohé z nich příkazový interpret získá při svém spuštění jako proměnné
prostředí z programu, který ho spustil.
Následují ukázky začátku výpisu příkazů env
(vypsání pouze proměnných prostředí)
a set
(vypsání všech proměnných v příkazovém interpretu).
env
SSH_CONNECTION=2001:718:1e02:42::38 32826 2001:718:1e02:18::87 22
LANG=en_US.UTF-8
EDITOR=vi
GPG_TTY=/dev/pts/0
...
set
BASH=/bin/bash
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_VERSION='4.4.12(1)-release'
COLUMNS=157
EDITOR=vi
...
Proměnná se začne předávat spouštěným programům, pokud se tzv. exportuje:
export BAR=FOO # exportování proměnné BAR včetně přiřazení hodnoty FOO
BAR2=FOO2 # přiřazení hodnoty do proměnné BAR2
export BAR2 # a následné exportování proměnné
Pokud je proměnná označena pro export, tak při změně hodnoty není potřeba ji znovu exportovat.