Příkazová řádka =============== .. sectionauthor:: Jiří Sedláček 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í** | +==================+=================================================================+ | ``↑`` a ``↓`` | Listování posledně zadanými příkazy nahoru (starší příkazy) / | | | dolů | +------------------+-----------------------------------------------------------------+ | ``←`` a ``→`` | Pohyb v rámci aktuálního příkazu | +------------------+-----------------------------------------------------------------+ | ``Home`` ``End`` | Obvyklý význam (na začátek/konec řádku) | +------------------+-----------------------------------------------------------------+ | ``Backspace`` | Vymaže znak jako obvykle („před sebe“, „za sebe“) | | ``Del`` | | +------------------+-----------------------------------------------------------------+ | ``Ctrl`` + ``W`` | Vymaže slovo (Word): slovo končí mezerou (ev. tabulátorem) | +------------------+-----------------------------------------------------------------+ | ``Ctrl`` + ``U`` | Vymaže celý řádek | +------------------+-----------------------------------------------------------------+ | ``Tab`` | Dokončování příkazů (viz poznámka 2) | +------------------+-----------------------------------------------------------------+ | ``Ctrl`` + ``R`` | *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: | | | | | | a) použít tento příkaz (šipkou vlevo/vpravo) a příp. ho | | | upravit | | | | | | b) připsat další písmeno/písmena | | | | | | c) znovu (opakovaně) stisknout ``Ctrl`` + ``R`` a zobrazí se | | | *další vyhovující* příkaz | +------------------+-----------------------------------------------------------------+ | ``Ctrl`` + ``C`` | 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í** | +==================+=================================================================+ | ``history`` | 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 „!“. | +------------------+-----------------------------------------------------------------+ | ``history 25`` | Vypíše 25 posledních příkazů | +------------------+-----------------------------------------------------------------+ | | ``!!`` | | Zopakuje poslední příkaz | | | ``!``\ *nnn* | | Zopakuje příkaz z řádky daného čísla (číslo *bez* mezery) | | | ``!-8`` | | Aktuální příkaz mínus 8 | +------------------+-----------------------------------------------------------------+ | ``clear`` | Příkaz smaže obsah obrazovky terminálu (jen obrazovku, | | | nemá žádný vliv na historii). | +------------------+-----------------------------------------------------------------+ | ``reset`` | 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: 1. 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). 2. 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). 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: a) *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). b) *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é: a) **Interní příkaz:** pokud příkaz, který jste zadali je tzv. interní příkaz (*bultin command*), vykoná ho interpret příkazů. b) **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. 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*: a) 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). b) Znak \\ na konci řádku = pokračování příkazu na další řádce c) 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í). Příkazy - argumenty, přepínače a parametry ------------------------------------------ Můžeme zadávat příkazy bez dalších argumentů např. .. code-block:: bash pwd ls či za příkazem může následovat jeden či více argumentů, např. .. code-block:: bash 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: .. code-block:: bash 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. .. code-block:: bash 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: .. code-block:: bash 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říkaz ``pwd`` je představitelem příkazů bez parametrů. Příkaz ``ls`` 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: .. code-block:: bash 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`` nebo ``mv`` 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ě. .. code-block:: bash 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. 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:** 1. Interní nápověda daného příkazu (programu). 2. Dokumentace ve formě manuálových stránek. 3. Dokumentace ve formě pro program info. 4. Online verze manuálových stránek. 5. 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. a. 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ů. b. 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í: | 1 Executable programs or shell commands | 2 System calls (functions provided by the kernel) | 3 Library calls (functions within program libraries) | 4 Special files (usually found in /dev) | 5 File formats and conventions eg /etc/passwd | 6 Games | 7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) | 8 System administration commands (usually only for root) | 9 Kernel routines [Non standard] 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: .. code-block:: bash :emphasize-lines: 1 man -k passwd passwd (5) - the password file passwd (1) - change user password passwd (1ssl) - compute password hashes .. code-block:: bash :emphasize-lines: 1 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: https://manpages.debian.org/ *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ě. 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`` .. code-block:: bash 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ý: .. code-block:: bash 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ě). .. code-block:: bash 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: .. code-block:: bash 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: .. code-block:: bash 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. 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: .. code-block:: bash 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: .. code-block:: bash 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): .. code-block:: bash 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: .. code-block:: bash ((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). .. code-block:: bash :emphasize-lines: 1 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 ... .. code-block:: bash :emphasize-lines: 1 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: .. code-block:: bash 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.