dum | žák

Linux

Název školy Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace
Adresa školky Kostelní 134, 411 08 Štětí
46773509
Název operačního programu OP Vzdělávání pro konkurenceschopnost
Registrační číslo CZ.1.07/1.5.00/34.1006
Označení vzdělávacího materiálu VY_32_INOVACE_21_PSS_412
Název tématické oblasti (sady) Operační systémy
Název materiálu Pokročilý příkazový shell
Anotace Text seznamuje některé pokročilejší vlastnosti příkazového shellu. Popisuje co se odehrává v pozadí zadávání příkazů do shellu, totiž kde se vyhledávají spustitelné soubory. Popisuje proměnné prostředí a jak lze měnit především proměnnou PATH. Dále ukazuje práci s aliasy, spouštění programů na pozadí, podmíněné spuštění a přesměrování std. Výstupu.
Autor Ivan Pomykacz Jazyk český
Očekávaný výstup Získá informace z proměnných prostředí. Upravuje proměnnou PATH. Vytváří aliasy. Spouští program na pozadí. Používá přesměrování výstupu do souboru nebo jiných programů.
Klíčová slova PATH, proměnné prostředí, alias, program na pozadí, přesměrování výstupu
Druh výukového zdroje Výklad Věková skupina žáků 17+
Typ interakce aktivita Ročník 3.
Speciální vzdělávací potřeby žádné
Zhotoveno, (datum/období) 1.4.2014 Celková velikost

pdf icon
Pokročilý příkazový shell

Obsah

Jak je to s aplikacemi?

Aplikace - program se zpravidla skládá z několika částí:

  • spustitelný binární kód (pokud nejde o skript - python, bash, perl, ruby, ...);

  • sdílené knihovny a jiná data;

  • globální konfigurace (společná pro všechny uživatele - tzv. výchozí/defaults);

  • lokální konfigurace (individuální pro uživatele).

Například program sleep má svoji binární podobu v adresáři /usr/bin (lze zjistit příkazem whereis). Dále má své manuálové stránky v adresáři /usr/share/man.

Pokud tedy nainstalujeme nějakou aplikaci, tak se zpravidla rozkopíruje do různých adresářů v systému. Každý adresář má ovšem svůj význam.

Zatím co adresáře /bin a /sbin obsahují základní programy a systémové nástroje, tak adresář /usr/bin (/usr/sbin) obsahuje převážně uživatelské a správcovské aplikace. Ale pouze spustitelné soubory. Ostatní součásti aplikací jsou v dalších adresářích, jako /usr/share, /usr/lib nebo /etc.

Práva na spuštění

Chceme-li aplikaci spustit, musí mít soubor, kterým se spouští nastavená práva na spuštění (+x). Je vcelku jedno, zda-li jde o binární soubor ne skript. Spuštění skriptu je možné však obejít spuštěním interpretu, který následně vykoná předložený skript.

Zmíněné obcházení spouštění skriptů neberte jako bezpečnostní nedostatek. Platí totiž to, že uživatel musí mít práva nejen na spuštění skriptu, ale rovněž na všechny příkazy ve skriptu obsažené. Tzn., že pokud bude ve skriptu příkaz mkfs, uživatel musí mít práva i k tomuto příkazu zvlášť.

Proměnné prostředí

Kdykoli se přihlásí uživatel do systému, jsou v rámci jeho relace dostupné tzv. proměnné prostředí. Tyto proměnné obsahují zpravidla informace o relaci, jako kdo je přihlášen, kde se nachází (v jakém adresáři), kde má domovský adresář, atp.

Můžete si vypsat tyto proměnné příkazem printenv.

PATH

Proměnná $PATH obsahuje výčet cest, kde se nachází spustitelné soubory. Lze ji vypsat příkazem echo $PATH.

    # echo $PATH
    /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/mist/.local/bin:/home/mist/bin

Kdykoli tedy napíšete název programu do příkazového řádku, tak shell okamžitě začne prohledávat adresáře v proměnné $PATH, a pokud příkaz najde, tak se jej pokusí spustit.

Mimo PATH

Pokud se spouštěný program nenachází v cestách uvedených v proměnné PATH, pak nezbývá, než zadat cestu ke spustitelnému souboru.

  • absolutní cesta
    # /usb/bin/sleep

  • relativní cesta
    # ./aplikace (příklad nebude fungovat)

    U relativní cesty je nezbytné, pokud se spouštěná aplikace nachází v témže adresáři jako uživatel, zadat nejprve odkaz na aktuální adresář (.).

Nastavení PATH

Proměnnou lze nastavit příkazem export. Jeho spuštění ovšem ovlivní pouze relaci toho uživatele, kde byl příkaz spuštěn. To mj. znamená, že pokud relaci ukončíte a znovu otevřete, vše se vrátí do původního stavu

Ne zrovna ideální příklad:

    # export PATH=/moje/biny

Všimněte si, že při exportu proměnné (její deklaraci) se nepoužívá znak $.

Uvedený příklad vám ovšem tak nějak znefunkční vaší relaci. To proto, že jste si z proměnné $PATH odstranili (prostě přepsali) ostatní cesty. Zkuste echo $PATH a uvidíte.

Pokud chcete relaci oživit, stačí ji ukončit a znovu spustit (otevřít). Korektnější varianta příkazu pro změnu, resp. přidání nové cesty by byla:

    # export PATH=$PATH:/moje/biny

V tomto případě se do proměnné $PATH uloží i původní obsah. Dvojtečka : slouží jako oddělovač cest.

Trvalé nastavení PATH

Je poměrně nepraktické po každém přihlášení nebo otevření relace znovu zadávat ty samé příkazy pro export proměnných. Existuje proto soubor (skript), který se postará o tyto rutinní akce. Nazývá se .bashrc.

Uvedený příkaz pro export jednoduše napíšete na konec tohoto souboru a při dalším otevřením relace se tyto změny automaticky aplikují.

Aliasy

V některých případech admin/uživatel uvítá, aby si mohl některé příkazy pojmenovat třeba jinak. Nebo, a to je častější případ, aby se spuštěný příkaz automaticky spustil s konkrétními parametry.

Např. program ls pro výpis obsahu adresáře. Poměrně často se používá varianta ls -l. S aliasem je možné zápis zkrátit na jiný název, např. ll

    alias ll="ls -l"

Z uvedeného příkladu je zřejmé, že nový alias se jmenuje ll. Při spuštění tohoto aliasu se ale vykoná příkaz v uvozovkách, tj. ls -l.

Aliasy se zpravidla definují do souboru .bashrc.

Program na pozadí

V příkazové řádce je možné příkazy spouštět přímo na pozadí. Za spouštěným příkazem se připojí znak & a program se následně spustí automaticky na pozadí.

Podmíněné spuštění příkazu

Podmíněné spuštění programu lze docílit použitím operátoru &&. Je-li návratový kód předchozího příkazu true, vykoná se příkaz následující.

Přesměrování výstupu

Přesměrování výstupu pomocí > a >> umožňuje veškerý výstup programu přesměrovat do souboru nebo i jiného programu.

Přesměrování chybového výstupu

Přesměrování chybového výstupu 2> znamená, že veškeré chybové hlášky lze stejně jako v případě přesměrování std. výstupu do souboru nebo jinam.