– Úkol 1:
V MS Windows případně stáhněte a spusťte program PuTTY
(Download, Alternative binary files, soubor putty.exe pro 64-bit x86), připojte (přihlašte)
se pomocí něj pod svým uživatelským jménem k serveru
phoenix.inf.upol.cz a odpojte (odhlašte) se z něj.
Unixové systémy – cvičení
Cvičení 1
První cvičení probíhá ještě v MS Windows, na učebně nebo na vlastních počítačích, příp. v Apple macOS na vlastních počítačích.
MS Windows
Uživatelské jméno (login) a heslo do MS Windows na učebně jsou stejné jako do Portálu UP. Rozložení klávesnice je zde české (QWERTZ). Přihlásíme se.
Jsou zde předinstalované programy PuTTY a WinSCP. Na vlastních počítačích stáhneme jejich portabilní verze (bez potřeby instalace) z putty.software (Download, Alternative binary files, soubor putty.exe pro 64-bit x86), resp. winscp.net (Download, other downloads, Portable executables, Download, soubor WinSCP-x.y.z-Portable.zip). Použijeme je ke vzdálenému připojení k linuxovému serveru phoenix.inf.upol.cz pro zadávání textových příkazů (PuTTY) a přenosu souborů na/z něj (WinSCP).
Login a heslo do linuxu
Uživatelské jméno (login) a náhodně vygenerované heslo na phoenix.inf.upol.cz a do linuxu na učebnách byly uživatelům zaslány na UP mail (předmět: Heslo do linuxu na KI pro ucet login). Jméno je stejné jako do Portálu UP, heslo ale nikoliv! Heslo obsahuje i speciální znaky (mimo písmena a číslice), je doporučeno jej z mailu zkopírovat a vložit do místa zadávání.
Vzdálené textové připojení k linuxovému serveru – PuTTY
PuTTY je svobodný SSH aj. klient a emulátor textového terminálu ("příkazový řádek", CLI = Command Line Interface) nejen pro MS Windows. Spustíme jej a připojíme (přihlásíme) se k SSH serveru phoenix.inf.upol.cz tak, že toto jméno zadáme do pole Host Name (or IP address) a stiskneme tlačítko Open (nebo klávesu Enter, při prvním připojení je pak ještě potřeba potvrdit bezpečnostní upozornění tlačítkem Accept nebo Connect Once). Poté postupně zadáme v terminálu uživatelské jméno a heslo, za výzvy login as: a password:, s potvrzením obého klávesou Enter. POZOR: Při zadávání hesla není od terminálu žádná odezva (žádné hvězdičky, puntíky apod., z bezpečnostních důvodů)! Pro vložení zkopírovaného hesla ze schránky zde nefunguje klávesová zkratka Control-V, vložení se provede klávesovou zkratkou Shift-Insert nebo stisknutím pravého tlačítka myši (nad terminálem).
Po úspěšném připojení se v terminálu zobrazí úvodní "banner" a na
posledním řádku výzva (prompt) k zadání příkazu. Zadáme příkaz logout
nebo exit (s potvrzením klávesou Enter) a tím se od serveru odpojíme
(odhlásíme).
Přenos souborů na/z linuxového serveru – WinSCP
WinSCP je grafický SFTP (SCP) aj. klient pro MS Windows. Spustíme jej a opět se připojíme (přihlásíme) k SSH serveru phoenix.inf.upol.cz. Do pole Host name: zadáme toto jméno, volitelně můžeme do polí User name: a Password: zadat uživatelské jméno a heslo, a stiskneme tlačítko Login (nebo klávesu Enter, při prvním připojení je pak opět ještě potřeba potvrdit bezpečnostní upozornění tlačítkem Accept). Poté, pokud jsme je nezadali už v předchozím dialogu, postupně zadáme uživatelské jméno a heslo, do polí Username: a Password: (s potvrzením obého klávesou Enter nebo tlačítkem OK).
Po úspěšném připojení je v levé části okna zobrazen seznam souborů a adresářů na místním počítači, v pravé části na serveru. Soubor nebo adresář zkopírujeme z místního počítače na server (upload) například tak, že v seznamu pro server otevřeme cílový adresář na serveru (klávesami ↑ a ↓ a Enter nebo myší, výchozí je domovský adresář uživatele), v seznamu pro místní počítač zvolíme soubor nebo adresář (focus) a stiskneme klávesu F5 (a potvrdíme klávesou Enter nebo tlačítkem OK). Kopírování ze serveru na místní počítač (download) provedeme stejně, jen zaměníme server a místní počítač. Pro přesun označení (focus) mezi seznamy pro místní počítač a server můžeme použít i klávesu Tab. Soubory a adresáře můžeme i přesouvat (klávesa F6), mazat (F8), přejmenovat (F2) nebo vytvářet nové (adresáře F7). Odpojení (odhlášení) se od serveru provedeme jednoduše ukončením programu (s potvrzením tlačítkem Yes).
– Úkol 2:
V MS Windows případně stáhněte a spusťte program WinSCP (Download,
other downloads, Portable executables, Download,
soubor WinSCP-x.y.z-Portable.zip), připojte (přihlašte) se pomocí něj pod
svým uživatelským jménem k serveru phoenix.inf.upol.cz, zkopírujte
nějaký soubor nebo adresář z MS Windows na server a zpět a
odpojte (odhlašte) se
ze serveru.
Apple macOS
V Apple macOS můžeme ke vzdálenému připojení k linuxovému serveru phoenix.inf.upol.cz použít aplikace Terminál pro zadávání textových příkazů, ve spojení s programem ssh, a Cyberduck k přenosu souborů na/ze server/u.
Vzdálené textové připojení k linuxovému serveru – Terminál a příkaz ssh
Terminál je předinstalovaný emulátor textového terminálu
("příkazový řádek"). Po jeho spuštění se v něm k SSH serveru
phoenix.inf.upol.cz připojíme (přihlásíme) pomocí programu SSH klienta
zadáním příkazu ssh login@phoenix.inf.upol.cz, kde login je
uživatelské jméno, s potvrzením klávesou Enter. Zadáváme pouze heslo,
za výzvu password: (pokud v příkazu nezadáme část login@, zadáváme
před heslem i uživatelské jméno, za výzvu login:) a opět POZOR, při
zadávání hesla není od terminálu žádná odezva! Zadání hesla potvrdíme
taktéž klávesou Enter. Po úspěšném připojení je to stejné jako u
PuTTY.
Přenos souborů na/z linuxového serveru – Cyberduck
Cyberduck je grafický SFTP (SCP) aj. klient a je potřeba jej doinstalovat z App Store (v nabídce pod ikonou "jablka" v levém horním rohu obrazovky) nebo cyberduck.io (Download, Cyberduck for macOS, soubor Cyberduck-x.y.z.w.zip). Po jeho spuštění se k SSH serveru phoenix.inf.upol.cz připojíme (přihlásíme) tak, že v titulkovém pruhu okna klikneme na Nové spojení, v dialogu v roletkové nabídce nahoře zvolíme SFTP (SSH File Transfer Protocol), jméno serveru zadáme do pole Server: a uživatelské jméno do pole Jméno:. Heslo zde můžeme volitelně zadat také, do pole Heslo:, nebo ho zadáme až v následném dialogu, po jehož potvrzení a úspěšném připojení je v okně zobrazen seznam souborů a adresářů na serveru. Odpojení (odhlášení) se od serveru pak provedeme kliknutím na ikonu "eject" vpravo v titulkovém pruhu okna nebo jednoduše ukončením programu.
Cvičení 2
Ve druhém cvičení se již přesuneme do unixového systému, do linuxu na učebně nebo na vlastním počítači, příp. do Apple macOS na vlastním počítači.
linux
Na učebně je předinstalovaná distribuce Debian GNU/Linux, kterou zvolíme v nabídce při startu počítače. Na vlastní počítač případně nainstalujeme kteroukoliv zvolenou distribuci linuxu (přehled např. na Linux.cz). Výchozí uživatelské rozhraní na učebně je grafické, výchozím uživatelským prostředím po přihlášení uživatele je desktop Gnome.
Přihlašovací obrazovka (GDM)
Do linuxu na učebně se přihlásíme pomocí stejného uživatelského jména (login) a hesla jako na server phoenix.inf.upol.cz, ke kterému jsme se připojovali v předchozím cvičení. POZOR: Před prvním přihlášením se do linuxu na učebně je nutné se předtím přihlásit (skrze SSH) na server phoenix.inf.upol.cz! – pomocí PuTTY v MS Windows nebo programu ssh v linuxu a Apple macOS; toto máme hotovo z prvního cvičení.
Pokud jsme se na daném počítači již do linuxu někdy dříve přihlásili, můžeme vybrat (klinutím) své plné jméno v seznamu uprostřed přihlašovací obrazovky. V opačném případě klikneme na text Nejste na seznamu? pod seznamem a zadáme své uživatelské jméno (s potvrzením klávesou Enter). Následně, při zadávání hesla, se místo zadávaných znaků vypisují puntíky a zadané skutečné znaky je možné zobrazit a skrýt kliknutím na ikonku "oka". Zadané heslo opět potvrdíme klávesou Enter.
Na přihlašovací obrazovce je možné, pro zadání uživatelského jména a zejména hesla, zvolit rozložení klávesnice, anglické nebo české (QWERTY), a to kliknutím na indikátor aktuálního rozložení en, resp. cs, v pravém horním rohu obrazovky a volbou v nabídce nebo přímo klávesovou zkratkou Super-mezerník (či Windows-mezerník). Vedle indikátoru aktuálního rozložení klávesnice jsou také ikony pro nastavení záležitostí přístupnosti (accessibility, ikona "panáčka" nalevo) a pro vypnutí a restartování počítače (ikona "vypínače" napravo, zcela v rohu obrazovky; možnost uspání počítače je vypnutá).
– Úkol 1:
Přihlašte se v grafické přihlašovací obrazovce (GDM) pod svým
uživatelským jménem do unixového systému (linux) a následující
provádějte v něm. (V případě linuxu na učebně je nutné se
před prvním přihlášením zde předtím přihlásit (skrze SSH) na
server phoenix.inf.upol.cz! – pomocí PuTTY
v MS Windows nebo programu ssh v linuxu a Apple macOS.)
Uživatelské prostředí – desktop Gnome
Ihned po přihlášení uživatele (zahájení uživatelského sezení, session) může být zobrazen přehled Činností, viz další odstavec, v tom případě stačí kliknout na prázdnou plochu nebo na okno kterékoliv případně spuštěné aplikace. V případě prvního přihlášení uživatele může být spuštěna stručná úvodní prohlídka, kterou je možné přeskočit.
Téměř veškerá aktivita v desktopu, včetně spouštění aplikací, se děje skrze přehled Činností, který vyvoláme nejrychleji stiskem klávesy Super (Windows), ale také kliknutím na "pomlčku s tečkou" zcela vlevo v horní liště desktopu nebo pouhým najetím myši zcela do levého horního rohu obrazovky. Stejnými způsoby se vrátíme zpět do pracovní plochy, plus také klávesou Esc. Aplikace lze v přehledu spustit kliknutím na ikonu aplikace v nabídce (toolbar) dole na obrazovce nebo přímo psaním jména aplikace (nebo něčeho, co s aplikací souvisí) a následně kliknutím na ikonu nabídnuté vyhledané aplikace (ikonu lze vybrat i klávesami ← a → a následně aplikaci spustit pomocí klávesy Enter). Nabídku všech (grafických) aplikací lze zobrazit kliknutím na "mřížku teček" v toolbaru, nabídkou lze skrolovat kolečkem myši (nebo i klávesami PageUp a PageDown, výběr ikony aplikace i klávesami šipek). Tuto nabídku opustíme, bez spuštění aplikace, opět klávesou Esc.Uživatelské prostředí desktopu je běžné okenní, běžící aplikace se zobrazují v (možno i překrývajících se) oknech. Okno můžeme přesouvat tažením myší nejen za titulkový pruh, ale při stisknuté klávese Super také kdekoliv v okně, nebo po stisku Alt-F7 i klávesami šipek (a potvrzením klávesou Enter). Změna velikosti okna je možná klasicky tažením myší za hranu okna, ale také opět po stisku Alt-F8 i klávesami šipek. Vedle tlačítek v titulkovém pruhu okno maximalizujeme i pomocí Alt-F10 a zavřeme (aplikaci ukončíme) pomocí Alt-F4. Mezi okny různých aplikací se přepneme klasicky pomocí Alt-Tab (nebo i Super-Tab), mezi okny téže aplikace pak pomocí Alt-` (Super-`). Akce přesunu, zavření a přepnutí okna můžeme provádět, klinutím nebo tažením myší, i v přehledu Činností, kde se všechna okna zobrazují zmenšená a nepřekrývající se.
Desktop standardně podporuje více pracovních ploch. Kromě těch s přítomnými okny je (ve výchozím nastavení) vždy k dispozici další prázdná plocha navíc. Okna můžeme přesouvat i mezi plochami, pro přepnutí na jinou plochu máme několik možností: skrolování kolečkem myši nad indikátorem ploch zcela vlevo v horní liště (ona "pomlčka" pro aktivní plochu a "tečky" pro další), klávesami PageUp a PageDown v přehledu Činností, kde jsou miniatury ploch zobrazeny vpravo, nebo přímo klávesovými zkratkami Super-PageUp a Super-PageDown. Za povšimnutí stojí absence jakýchkoliv ikon (aplikací, souborů nebo adresářů) na plochách a nemožnost je tam nějak přidat. To je vlastnost desktopu Gnome, existuje ale způsob, jak ikony souborů a adresářů na plochu přidat: rozšíření (extension) Gnome, např. Desktop Icons NG.
Mezi základní aplikace grafického uživatelského prostředí dnes jistě patří prohlížeč souborů, webový prohlížeč a textový editor. V linuxu máme tradičně na výběr; aktuálně výchozí v desktopu Gnome jsou to aplikace Soubory, Firefox a Textový editor, ale dostupné (předinstalované na učebně nebo v distribuci) jsou i např. webový prohlížeč Chromium nebo textový editor Gedit. Počínaje třetím cvičením budeme používat ještě emulátor textového terminálu v podobě například výchozí aplikace Terminál.
– Úkol 2:
V grafickém uživatelském prostředí (Gnome) spusťte dostupný prohlížeč
souborů (Soubory), webový
prohlížeč (Firefox, Chromium) a textový editor (Textový
editor, Gedit), přepínejte mezi jejich okny, okny
posunujte, přesuňte je na jinou plochu desktopu, přepínejte plochy.
Pokud je nastavených více rozložení klávesnice, nalezneme opět indikátor aktuálního rozložení en, resp. cs, stejně jako na přihlašovací obrazovce, v pravém horním rohu obrazovky, v horní liště nalevo od indikátorů zařízení (zvuku, sítě aj.). Rozložení opět změníme kliknutím na indikátor a volbou v nabídce nebo přímo klávesovou zkratkou Super-mezerník (Windows-mezerník). Navíc jsou nyní v nabídce s rozloženími také možnosti zobrazení aktuálního rozložení (včetně variant při stisku modifikátorů Shift nebo RightAlt/AltGr!) a nastavení klávesnice včetně přidání/odebrání rozložení. Pokud je ovšem nastaveno pouze jedno rozložení klávesnice, indikátor aktuálního rozložení zobrazen není a k nastavení klávesnice se dostaneme v rámci nastavení celého desktopu, aplikace Nastavení. K tomu vede cesta i skrze systémovou nabídku. Tu otevřeme kliknutím na indikátory zařízení (spolu s ikonou "vypínače") zcela vpravo v horní liště a Nastavení jsou pod ikonou "ozubeného kolečka". V okně Nastavení pak v seznamu vlevo vybereme položku Klávesnice a rozložení klávesnice zde můžeme přidat nebo odebrat nastavením Vstupních zdrojů.
– Úkol 3:
Zkontrolujte v grafickém uživatelském prostředí (Gnome)
dostupnost volby anglického a
českého rozložení klávesnice, pokud některé z nich chybí,
přidejte jej (Nastavení, Klávesnice), mezi rozloženími
přepínejte a zobrazte si je.
Vzdálené připojení k MS Windows
V prvním cvičení jsme se vzdáleně textově připojovali k linuxovému serveru phoenix.inf.upol.cz z MS Windows pomocí SSH klienta PuTTY. Přestože PuTTY je dostupné i pro linux, z linuxu se k serveru připojíme až ve třetím cvičení pomocí programu ssh v textovém uživatelském prostředí ("příkazový řádek", podobně jako v prvním cvičení v případě Apple macOS).
Nyní se připojíme (přihlásíme) vzdáleně graficky k MS Windows serveru terminal.inf.upol.cz. V desktopu Gnome je tomu jednoduchá aplikace Připojení, klient vzdálené pracovní plochy (samozřejmě jsou k dispozici i další, např. Remmina). Po jejím spuštění klikneme na ikonu "plus" vlevo v titulkovém pruhu okna, zadáme síťové jméno terminal.inf.upol.cz, typ připojení ponecháme RDP a stiskneme tlačítko Připojit (při prvním připojení je ještě potřeba potvrdit bezpečnostní upozornění). POZOR: Server terminal.inf.upol.cz je dostupný pouze z univerzitní sítě (pro připojení odjinud je nutné vytvořit VPN připojení k univerzitní síti)! Do polí Uživatelské jméno... a Heslo... zadáme uživatelské jméno (login) a heslo do MS Windows (stejné jako do Portálu UP, do pole Doména... není třeba nic zadávat, ale můžeme zadat PRFAD) a stiskneme tlačítko Ověřit. Pro opětovné připojení k serveru, ke kterému jsme se již někdy dříve připojovali, pak stačí v okně aplikace kliknout na dlaždici se jménem serveru.
– Úkol 4:
Pomocí aplikace Připojení (nebo jiné pro vzdálené RDP
připojení) se připojte
(přihlašte) pod svým uživatelským jménem k MS Windows serveru terminal.inf.upol.cz a odpojte
(odhlašte) se z něj.
Připojení síťového disku
Pro přenos souborů na/z MS Windows můžeme využít připojení adresáře jako síťového disku, přímo v prohlížeči souborů (v desktopu Gnome aplikace Soubory). Připojíme si uživatelský domovský adresář v MS Windows na učebnách a serverech katedry. V okně aplikace Soubory vybereme v seznamu vlevo položku Síť, do pole dole zadáme adresu smb://dragon.inf.upol.cz/students-homes/login, kde login je uživatelské jméno do MS Windows (smb je označení síťové služby sdílení souborů a adresářů v MS Window, dragon.inf.upol.cz je síťové jméno serveru a students-homes je adresář s domovskými adresáři uživatelů) a stiskneme tlačítko Připojit. POZOR: I server dragon.inf.upol.cz je dostupný pouze z univerzitní sítě (a pro připojení odjinud je nutná VPN)! V následném dialogu zvolíme Registrovaný uživatel, zadáme uživatelské jméno (login) a heslo do MS Windows, do polí Uživatelské jméno a Heslo, do pole Doména zadáme PRFAD (zde je to nutné) a stiskneme tlačítko Připojit. Po ukončení práce s připojeným síťovým diskem jej odpojíme například kliknutím v okně aplikace Soubory na ikonu "eject" vedle pojmenování disku (adresáře) v seznamu vlevo. V okně, po výběru vlevo položky Síť, rovněž vidíme seznam připojení z dřívějška a pro opětovné připojení stačí vybrat položku seznamu (jako otevření adresáře). Užitečný může být na serveru dragon.inf.upol.cz také adresář vyuka, obsahující výukové materiály od vyučujících (adresa smb://dragon.inf.upol.cz/vyuka).
Podobně si můžeme připojit jako síťový disk i adresář z linuxového serveru, v našem případě uživatelský domovský adresář na serveru phoenix.inf.upol.cz. Adresa bude jen ssh://phoenix.inf.upol.cz (bez zadání adresáře, domovský adresář uživatele je výchozí; také je možné místo ssh zadat sftp). Uživatelské jméno (login) a heslo je na tento server. V linuxu na učebně je toto připojení ale nadbytečné, protože uživatelské domovské adresáře na serveru phoenix.inf.upol.cz jsou zde připojeny automaticky při startu systému a fungují jako domovské adresáře uživatelů přihlašovaných i na učebně.
– Úkol 5:
V prohlížeči souborů (Soubory) si připojte pod svým
uživatelským jménem jako síťový disk Váš domovský adresář
dragon.inf.upol.cz/students-homes/login (kde login je
Vaše uživatelské jméno) v MS Windows, zkopírujte nějaký soubor
nebo adresář z linuxu na disk (do adresáře v MS Windows) a zpět a disk odpojte.
Nápověda a odhlášení
Na závěr se ještě vrátíme k samotnému uživatelskému prostředí, desktopu Gnome. Má výborně zpracovanou a do češtiny přeloženou nápovědu v podobě aplikace Nápověda.
Nakonec, cesta k odhlášení se ze systému vede přes systémovou nabídku (ale i přímo přes klávesovou zkratku Control-Alt-Delete). K té se, pro zajímavost, vedle již zmíněného kliknutí na indikátory zařízení (spolu s ikonou "vypínače") zcela vpravo v horní liště, můžeme dostat i pomocí pouze klávesnice: zkratka Control-Alt-Tab, volba Horní lišta a poté klávesy šipek a Enter. Kromě nastavení celého desktopu ("ozubené kolečko") a různých tlačítek a jiných prvků pro nastavení zařízení (zvuku, sítě aj.) jsou zde i ikony pro uzamčení desktopu (uživatelského sezení, ikona "zámku", pro odemčení je nutné zadat heslo) a pro vypnutí a restartování počítače (ikona "vypínače"; možnost uspání počítače je na učebně vypnutá). A pod touto druhou ikonou je právě ukrytá i možnost odhlášení se ze systému (ukončení uživatelského sezení), případně také dočasného přepnutí na jiného uživatele (to znamená uzamčení sezení, přihlášení se jiného uživatele a po jeho odhlášení odemčení sezení).
– Úkol 6:
Prohlédněte si nápovědu grafického uživatelského prostředí (Gnome) a nakonec se ze
systému odhlašte.
Ještě poznámka: na přihlašovací obrazovce GDM na učebně je možné zvolit pro sezení (session) jiné předinstalované uživatelské prostředi než výchozí desktop Gnome – po výběru nebo zadání uživatelského jména, před potvrzením hesla, kliknutím na ikonu "ozubené kolečko" v pravém dolním rohu obrazovky a výběrem položky.
Apple macOS
Přihlašovací obrazovka
V Apple macOS je uživatelské rozhraní rovněž grafické, přihlašovací obrazovka je podobná jako v linuxu. Přihlášení zadáním hesla funguje stejně, možnost volby rozložení klávesnice v pravém horním rohu obrazovky zde může být také, stejně jako je zde ikona pro vypnutí a restartování počítače.
Uživatelské prostředí
Uživatelské prostředí je bežné okenní, není zde ovšem přehled Činností jako v desktopu Gnome. Nabídka (toolbar) dole na obrazovce s vybranými aplikacemi je přítomná vždy, všechny aplikace jsou dostupné pod ikonou "barevných čtverečků" (Launchpad), kde je pak i možnost vyhledání aplikace psaním jejího jména. Práce s okny je klasická, pro přepínání mezi okny (aplikacemi) slouží klávesová zkratka command-Tab. Atypické je umístění nabídky (menu) aplikace, která bývá obvykle v okně dané aplikace pod titulkovým pruhem, do horní lišty celého prostředí. Více pracovních ploch prostředí nepodporuje, na plochu je ale možné standardně umísťovat ikony souborů a adresářů.
Aplikacemi prohlížeče souborů, webového prohlížeče a textového editoru jsou Finder, Safari a TextEdit, emulátor textového terminálu je rovněž aplikace Terminál (již jsme ji použili v prvním cvičení).
Se změnou rozložení klávesnice kliknutím na indikátor aktuálního rozložení v horní liště vpravo, nalevo od indikátorů zařízení (zvuku, sítě aj.), je to stejné jako v desktopu Gnome. Pro změnu přímo je klávesová zkratka control-mezerník. V nabídce s rozloženími jsou také možnosti zobrazení aktuálního rozložení (Zobrazit prohlížeč klávesnic, včetně varianty při stisku modifikátoru option) a nastavení klávesnice, ke kterému se dostaneme i rámci nastavení celého systému, aplikace Nastavení systému. K tomu vede cesta i skrze systémovou nabídku, kterou otevřeme kliknutím na ikonu "jablka" zcela vlevo v horní liště. V okně Nastavení systému pak v seznamu vlevo vybereme položku Klávesnice, pod titulkem Zadáni textu klikneme na tlačítko Upravit... vedle Vstupní zdroje a v následném dialogu rozložení klávesnice přidáme nebo odebreme.
Vzdálené připojení k MS Windows
Pro toto je potřeba doinstalovat aplikaci pro vzdálené RDP připojení, například oficiální MS Remote Desktop (nově Windows App for Mac), z App Store nebo What's new in Windows App (tab macOS, odkaz na .pkg v tabulce, soubor Windows_App_x.y.z_installer.pkg). Po jejím spuštění se k MS Windows serveru terminal.inf.upol.cz graficky připojíme (přihlásíme) tak, že v nabídce (menu) aplikace vybereme položky Connections a PC Quick Connect..., do pole PC name: zadáme jméno serveru a po stisku tlačítka Connect pokračujeme obdobně jako u aplikace Připojení v desktopu Gnome.
Připojení síťového disku
Připojení adresáře z MS Windows jako síťového disku podporuje přímo prohlížeč souborů (aplikace Finder). Pro připojení uživatelského domovského adresáře v MS Windows na učebnách a serverech katedry vybereme v nabídce (menu) aplikace Finder položky Otevřít a Připojit k serveru... a dále postupujeme obdobně jako u prohlížeče souborů v linuxu (v desktopu Gnome aplikace Soubory).
Připojení adresáře z linuxového serveru, v našem případě uživatelského domovského adresáře na serveru phoenix.inf.upol.cz, jako síťového disku už aplikace Finder přímo nepodporuje. Podporu je potřeba doinstalovat, například Mountain Duck, z App Store nebo z mountainduck.io/ (Download for Mac, soubor Mountain Duck-x.y.z.w.zip). Po spuštění se v horní liště vpravo vedle indikátoru aktuálního rozložení klávesnice objeví ikona "kachničky". Po kliknutí na ni a výběru položky Nové spojení... postupujeme stejně jako u aplikace Cyberduck v prvním cvíčení a po úspěšném připojení je připojený adresář jako síťový disk otevřen v aplikaci Finder. Odpojení disku provedeme například v okně aplikace Fider kliknutím na ikonu "eject" vedle pojmenování disku (adresáře) v seznamu vlevo.
Nápověda a odhlášení
Česká nápověda je (online) dostupná v menu (výchozí) aplikace Finder, položky Nápověda a Nápověda pro macOS.
Odhlášení se ze systému je dostupné skrze systémovou nabídku (ikona "jablka" zcela vlevo v horní liště), položka Odhlásit uživatele jméno.... Navíc zde najdeme i položky pro uzamčení prostředí (Zamknout obrazovku) a pro vypnutí a restartování (a uspání) počítače.
Cvičení 3
Ve třetím cvičení "vyměníme" grafické uživatelské rozhraní za pro unixové systémy původní textové, poskytované emulátorem terminálu Terminál (který je výchozí v grafickém desktopu Gnome) nebo jinou aplikaci tohoto druhu (např. Konsole, xterm apod.). V Apple macOS jde rovněž o aplikaci Terminál. Jelikož jde o aplikaci v grafickém uživatelském prostředí, kde již jsme přihlášeni, v okně (emulátoru) terminálu se po jeho spuštění již znovu nepřihlašujeme. Můžeme ale použít i emulátor terminálu pro vzdálené připojení k unixovému systému, např. k linuxovému serveru phoenix.inf.upol.cz z MS Windows, třeba aplikaci PuTTY z prvního cvičení, kde se ke vzdálenému systému přihlásíme. V tomto textovém rozhraní už víceméně zůstaneme po všechna zbývající cvičení.
– Úkol 1:
V grafickém uživatelském prostředí (Gnome) spusťte aplikaci emulace terminálu
(Terminál, Konsole, xterm apod.) a
následující provádějte v této aplikaci (terminálu).
Příkazový řádek a interpret (shell)
Uživatelským pracovním prostředím v textovém emulátoru
terminálu (dále jen terminálu) je prostředí tzv. příkazového řádku (command
line interface, CLI). Ten je
poskytovaný programem příkazového interpretu (shell), který
je spuštěný v terminálu po případném (vzdáleném) přihlášení
uživatele (v rámci uživatelského sezení, session). Výchozím příkazovým interpretem v linuxu na učebně, ale
i v mnoha linuxových distribucích a jiných unixových
systémech, je shell Bash
(Bourne-Again Shell) z
projektu GNU. V Apple macOS
je výchozí Z shell, ale bývá předinstalovaný i GNU Bash
– spustíme jej zadáním v Z shellu příkazu bash
(potvrzeném klávesou Enter). Nadále budeme předpokládat
shell GNU Bash, ale mnohé je funkční i v Z shellu.
V jednořádkovém prostředí shellu v terminálu (text delší než šířka terminálu pokračuje na dalším řádku, ale je stále uvažovaný jako jeden řádek) mu zadáváme textové příkazy, za výzvu shellu (prompt). Ta je zobrazena na prvním řádku terminálu (shora) od začátku (zleva) a má typickou podobu login@hostname:adresar$ (plus ještě mezera za $), kde login je uživatelské jméno (login), hostname síťové jméno počítače, na kterém shell běží, a adresar je aktuální adresář shellu – shell se vždy "nachází" v nějakém adresáři, výchozí po spuštění shellu je domovský adresář uživatele. Podobně vypadá i prompt Z shellu v Apple macOS, prompt shellu Bash zde ale má strohou podobu bash-verze$. Dodejme, že prompt superuživatele root má na konci typicky # místo $ a že podobu promptu si uživatel může nastavit vlastní (toto ale dělat nebudeme).
Pro další text si zjednodušíme značení klávesových zkratek: C- znamená Control- (tj. za stisku klávesy Control stisknout klávesu uvedenou za -), podobně S- pro Shift-; S-C- znamená Shift-Control-. M- je pro původní klávesu Meta, kterou na současných klávesnicích reprezentuje klávesa (levý) Alt a na klávesnicích Apple ji zastupuje klávesa option, značená O-.
Znaky textu příkazu na příkazovém řádku shellu zadáváme na pozici textového kurzoru (vyplněný obdélník nebo podtržítko, případně blikající), který se s každým zadaným znakem posune o jednu pozici doprava. Po zadaném textu můžeme kurzorem pohybovat a text editovat. Pro pohyb kurzorem po znacích (předchozí a následující) jsou klávesy ← a →, po slovech textu (kde slovo je posloupnost znaků bez mezery nebo tabulátoru), po začátcích, resp. koncích slov, pohybujeme kurzorem pomocí C-← a C-→ (nebo i M-← a M-→), na začátek nebo konec textu kurzor přesuneme pomocí Home a End (nebo také C-a a C-e). Pro základní editaci zadaného textu obvykle fungují Del (pokud ne nebo klávesa není, pak C-d) pro výmaz znaku na kurzoru a Backspace pro výmaz znaku před kurzorem, dle očekávání. Část slova od kurzoru k začátku slova vymažeme pomocí M-Backspace, po konec slova pak pomocí M-d. Znak na kurzoru prohodíme s předchozím znakem pomocí C-t, slovo s kurzorem s předchozím slovem pak pomocí M-t. Část celého textu od kurzoru k začátku textu (po prompt) vymažeme pomocí C-u, po konec textu pak pomocí C-k. Velmi užitečné je to, že jakákoliv vymazaná část slova nebo celého textu je uložena do "schránky řádku" a lze ji opětovně vložit na pozici kurzoru pomocí C-y.
V okně terminálu v grafickém prostředí můžeme využít pro kopírování textu příkazového řádku i pouze myš, případně s klávesovými zkratkami, stejně jako pro kopírování textu v oknech jiných aplikací (přes "schránku", operace copy&paste). V grafickém rozhraní unixových systémů včetně linuxu obvykle stačí text označit myší a pro jeho vložení, například na místo kurzoru v terminálu, jen stisknout kolečko myši. Případně pro zkopírování myší označeného textu a jeho vložení mohou v terminálu fungovat klávesové zkratky S-C-c a S-C-v (v jiných aplikacích jen obvyklé C-c a C-v).
Potvrzení zadaného textu (i prázdného) na příkazovém řádku, tedy "odeslání" jej shellu jako příkazu k vykonání, provedeme klávesou Enter. V terminálu se může zobrazit nějaký výstup vykonání příkazu a poté je opět zobrazena výzva shellu (prompt).
Když je příkazy a jejich výstupy zaplněna celá obrazovka (okno) terminálu, typicky 24 nebo 25 řádků, začne při dalším zobrazovaném textu skrolovat nahoru, tj. nejstarší text (horní řádky) vyroluje "nad" obrazovku. K němu se můžeme vrátit a obrazovkou terminálu, jako náhledem (oknem) na část textu, standardně na poslední, můžeme po celém textu posouvat (skrolovat), klávesovými zkratkami S-PageUp a S-PageDown nebo i kolečkem myši nad terminálem (případně často i dvěma prsty nahoru a dolů po touchpadu). V Apple macOS fungují fn-↑ a fn-↓ (a dva prsty po touchpadu). Text na obrazovce můžeme také vyrolovat (obrazovku smazat) nahoru tak, že na obrazovce zůstane jen prompt na prvním řádku nahoře, klávesovou zkrakou C-l.
– Úkol 2:
Napište do příkazové řádky shellu v terminálu (za výzvu,
prompt) jakýkoliv text, pohybujte po něm kurzorem, editujte
jej (včetně kopírování) a potvrďte jej shellu jako příkaz (v tuto chvíli nezáleží
na tom, jestli platný). Zaplňte textem příkazů a jejich
výstupy celou obrazovku (okno) terminálu a poté obrazovkou skrolujte.
Historie příkazů
Shell udržuje historii všech zadaných příkazů, kterou je možné
listovat a prohledávat. Historie je, po ukončení shellu, ukládaná do souboru (s
omezením na počet příkazů v řádu obvykle stovek nebo tisíců) a
jiný shell v jiném terminálu (i v dalším uživatelském sezení)
historii ze souboru při svém spuštění načítá a svoji historii
příkazů po ukončení do souboru přidává; takže je možné
listovat a prohledávat i historii z předchozích shellů.
K předchozím příkazům do minulosti se v historii
vrátíme pomocí ↑, k následujícím blíže k
přítomnosti pomocí ↓. Příkaz z historie
se ihned objevuje na řádku za promptem a pro znovuspuštění ho stačí
potvrdit. Pro skok na první příkaz v historii obvykle funguje
M-<, za poslední příkaz pak
M->. Interaktivní vyhledávání v historii zahájíme
klávesovou zkratkou C-r (prompt shellu se změní) a
pak zadáváme text vyskytující se v hledaném příkazu (mazání
pomocí Backspace), který se ihned zobrazuje na řádku
a stačí jej potvrdit; nebo vyhledávání zrušíme pomocí
C-g. Opětovný stisk C-r během
vyhledávání vyhledá předchozí příkaz s výskytem zadaného textu
a stisk ↑ nebo ↓ při
vyhledaném příkazu zobrazí na řádku příkaz v histori hned před nebo za ním a
vyhledávání se ukončí. Doplňme ještě dopředu (viz dále), že
celou historii shellu si můžeme zobrazit pomocí příkazu history.
– Úkol 3:
Listujte v shellu historií zadaných příkazů, historii si zobrazte a nějaký předchozí
příkaz v historii vyhledejte a spusťte znovu.
Příkazy a programy
Jednoduchý příkaz shellu je seznam slov oddělených mezerami nebo tabulátory (tzv. bílými znaky). První slovo, běžně chápané jako jméno příkazu, se shell snaží vykonat, s dalšími volitelnými slovy jako jeho argumenty, a pokud to není interní příkaz shellu, představuje první slovo název programu, který shell zkusí spustit. Pokud program daného názvu není v systému dostupný, vykonání příkazu (spuštění programu) končí chybou, podobně jako například při chybném seznamu argumentů příkazu. Argumentům začínajícím znakem - (pomlčka) se říká přepínače (options). POZOR: Jména interních příkazů, názvy programů i argumenty jsou (u shellu Bash i jiných) citlivá na velikost písmen, tzv. case-sensitive! U Z a Bash shellu v Apple macOS se to ale týká jen argumentů.
Nyní si již nějaké platné příkazy (s v systému existujícími
programy) vyzkoušíme. Například příkaz date,
spouštějící program date,
zobrazí (vypíše) aktuální systémový datum a čas. Po vyzkoušení příkazů
DATE nebo Date se naopak objeví
chybová hláška shellu příkaz nenalezen. Příkaz
date -d tomorrow +%A s argumenty (-d
je přepínač), v Apple macOS date -v+1d
+%A, zobrazí jen jméno zítřejšího dne. Co argumenty
znamenají, se dozvíme později v nápovědě k programu
date. Příkazy who a w
zobrazují nějaké infomace k aktuálně přihlášeným uživatelům v
systému, druhý příkaz navíc na prvním řádku výpisu informace o
době běhu systému a jeho akuálním vytížení. Velmi užitečný, i
když se to na první pohled nezdá, je příkaz echo,
který "jen" zobrazí (vypíše) v terminálu své argumenty (vyjma
přepínačů, kterým "rozumí"), např. echo Ahoj svete!.
Příkazů můžeme na příkazový řádek zadat i více "naráz" a nechat je
vykonat postupně všechny po potvrzení jedním
Enter. V tom případě je oddělíme znakem
; (středník). Budou vykonány po sobě, další vždy
až skončí předchozí (existuje i možnost souběžného vykonávání
více příkazů, o tom ale až v šestém
cvičení). Například echo -n Pocitac:\ ;
hostname. Příkaz echo -n Pocitac:\
(všimněme si mezery za \)
zde nejprve zobrazí text Pocitac: (včetně
mezery za :) a příkaz hostname pak síťové jméno
počítače. Pro přepínač -n viz nápovědu
shellu k příkazu echo dále, konstrukce \ (\ a mezera)
představuje způsob, jak na příkazovém řádku zadat mezeru tak,
aby byla součástí příkazu a ne oddělovačem jména a argumentů
příkazu (více opět viz šesté cvičení).
Vzdálené textové připojení k linuxovému serveru – ssh
Program ssh (secure shell) je textový SSH klient a můžeme
jej použít ke vzdálenému připojení (přihlášení) k linuxovému
serveru phoenix.inf.upol.cz, podobně jako
grafický program PuTTY pro MS
Windows v prvním cvičení. Příkaz je ssh login@phoenix.inf.upol.cz, kde login je
uživatelské jméno na serveru. Po spuštění příkazu za výzvu
password: zadáme heslo na
tento server (pokud v příkazu nezadáme část login@, zadáváme
před heslem i uživatelské jméno, za výzvu
login:), které opět potvrdíme
klávesou Enter. POZOR: Při
zadávání hesla není od terminálu žádná odezva (z
bezpečnostních důvodů)! Po úspěšném připojení k serveru je to stejné jako u
PuTTY.
Úkol 4:
Pomocí programu ssh se připojte (přihlašte) pod svým uživatelským
jménem na server phoenix.inf.upol.cz a odhlašte se z něj.
Změna hesla a ukončení shellu
Pro změnu hesla uživatele v unixových systémech včetně linuxu bežně slouží program passwd. Za výzvy zadáme
postupně stávající a dvakrát nové heslo, potvrzené klávesou Enter. Opět platí, že při
zadávání hesel není od terminálu žádná odezva. V linuxu na
učebnách, ale i na serveru phoenix.inf.upol.cz,
jsou ovšem hesla síťově sdílená (pomocí systému NIS), takže
místo passwd je zde nutné pro změnu hesla použít příkaz yppasswd.
Shell ukončíme příkazem exit. Také funguje
klávesová zkratka C-d při prázdném zadávaném textu
na příkazovém
řádku (jen prompt). Pokud je shell tzv. přihlašovací, tzn. vznikl v
důsledku přihlášení uživatele, např. přes síťovou službu SSH,
lze jej ukončit také příkazem logout (viz první cvičení). Ve všech případech při
ukončení shellu v terminálu dojde obvykle automaticky i k ukončení
programu emulátoru terminálu (v grafickém prostředí tedy i k
uzavření jeho okna; ne ovšem v Apple macOS).
Nápověda shellu a manuálové stránky
Shell má pro každy svůj (interní) příkaz integrovanou nápovědu
s popisem příkazu i všech jeho argumentů,
dostupnou přes příkaz help. Jako argument zadáme
jméno příkazu, např. help echo, bez argumentu
zobrazí seznam všech interních příkazů s
jejich nejčastějšími argumenty. Pokud bychom chtěli vědět, zda
je jméno interní příkaz shellu nebo program, použijeme příkaz
type, např. type -a echo (a vidíme,
že echo je jak interní příkaz shellu tak i program).
Úkol 5:
Zobrazte nápovědu příkazového interpretu (shellu)
k příkazu echo.
Úkol 6:
Pomocí příkazu echo zobrazte Unicode znak s hodnotou
(šestnáctkově) 1F600.
Hlavní formou nápovědy v unixových systémech jsou však
manuálové stránky, pro (téměř) všechny programy pro
textový terminál a někdy i pro grafické programy (ale i pro
konfigurační a speciální soubory systému, programátorské funkce a další). Je to primární
textová dokumentace programu, kterou si můžeme interaktivně
prohlížet přes celou obrazovku terminálu programem man,
kterému jako argument zadáme jméno programu, např. man
echo. Stránky mají jednotnou strukturu: stručná
charakteristika programu, zápis a popis argumentů, podrobnější
popis včetně případných příkladů použití, (neinteraktivní) odkazy na jiné stránky a (konfigurační) soubory, informace o
autorech, hlášení chyb a další. Interakci prohlížení stránky
obvykle zajišťuje program less, ve kterém se můžeme po stránce
posouvat po řádcích pomocí ↑ a
↓ nebo
kolečkem myši (nebo prstem či prsty na touchpadu), po
obrazovkách pomocí
PagegUp a PageDown, přejít na začátek nebo konec stránky
pomocí Home (také <) a
End (>), ve stránce vyhledávat
pomocí / (ke konci) nebo ? (k začátku) a
zadáním textu spolu s Enter, opakovat poslední vyhledání
pomocí n (ve směru prvního vyhledání) a
N (proti směru), zobrazit vlastní nápovědu se
stejnými možnostmi pomocí h a konečně opustit
tuto nápovědu nebo i zobrazení manuálové stránky pomocí q.
Dodejme ještě, že manuálové stránky můžeme vyhledávat přes
(přesné) jméno programu pomocí whatis a přes klíčové slovo
v popisu programu v manuálové stránce pomocí
apropos, kde jméno nebo slovo je argumentem
těchto programů.
Úkol 7:
Prohlédněte si manuálovou stránku programu date. Co
zobrazí příkaz date +%A\ %e. a proč?
Úkol 8:
Pomocí programu date (a jeho manuálové stránky) zobrazte aktuální datum ve tvaru DD. MM. RRRR (včetně mezer
za tečkami).
GNU Info
V unixových systémech se základními programy z projektu GNU, tedy i v linuxových
distribucích, ne však v Apple macOS, bývá k dispozici i další
dokumentace, GNU Info, pro programy a programové
celky či balíky. Příkaz info bez argumentu zobrazí
"rozcestníkovou" stránku pro všechnu tuto dokumentaci, která
je organizovaná hierarchicky s hypertextovými odkazy (podobně
jako web). Ze
stránky můžeme interaktivně přejít na odkazovanou stránku následováním
odkazu, zobrazeného s podtrženým textem a *
(hvězdičkou) před ním, klávesou Enter po přesunu
kurzoru na text, na v
hierarchii nadřazenou stránku pomocí
u. Prohlížení samotné stránky je
podobné jako u manuálové stránky, akorát klávesy šipek
pohybují kurzorem a ne stránkou, navíc interaktivní vyhledávání je
zahájeno pomocí
C-s nebo C-r a ihned se vyhledává
následně zadaný
text se zrušením pomocí C-g, interní nápovědu
vyvoláme pomocí H (a zavřeme pomocí
l). Za prozkoumání stojí stránka pro balík programů
GNU Coreutils, info coreutils, neboť ten
tvoří základní programové vybavení unixových systémů, včetně
programů pro základní manipulaci se soubory a s textem, kterými
se v dalších cvičeních budeme zabývat.
Cvičení 4
Ve čtvrtém cvičení zůstaneme v unixovém textovém uživatelském rozhraní emulátoru terminálu z předchozího třetího cvičení a pracovním prostředí příkazového řádku (CLI) a interpretu, shellu (GNU Bash). Podíváme se na základní práci se soubory a adresáři. Většina následujících programů, i v dalších cvičeních, je z balíku GNU Coreutils.
Soubory a adresáře
Cestu k aktuálnímu adresáři shellu (shell se vždy
"nachází" v nějakém adresáři, výchozí po jeho spuštění je
domovský adresář uživatele) zjistíme pomocí příkazu
pwd. Pro zobrazení (výpis) obsahu adresáře,
tj. seznamu jmen souborů a podadresářů adresáře, slouží
program ls (nebo téměř stejný dir). Bez
argumentů, ls zobrazí pouze tento seznam,
formátovaný do vícesloupcové tabulky na obrazovku terminálu, pro aktuální
adresář. Jména mohou být obarvená, například jména (pod)adresářů
modře a jména souborů s vybranými příponami různými jinými
barvami, ale to záleží na nastavení shellu (a možnostech
emulátoru terminálu). Další užitečné údaje k souborům a adresářům
přidáme přepínačem -l: ls -l. Jména
jsou nyní v posledním sloupci zobrazené tabulky, první znak
prvního sloupce značí typ položky, například -
(pomlčka) pro soubor, d pro adresář (další znaky
prvního sloupce se týkají uživatelským práv, která si
vysvětlíme v příštím, pátem
cvičení). Ve sloupci před jmény je datum a čas poslední
změny obsahu souboru nebo adresáře (u adresáře to znamená
změna seznamu souborů nebo podadresářů adresáře) a ve sloupci
před tímto je zobrazena velikost souboru v bytech. V případě
adresáře to ale není velikost adresáře ve smyslu součtu
velikostí všech souborů v něm (rekurzivně v celém adresářovém
podstromu), k tomu je program du níže, ale technický
údaj o alokované velikosti pro obsah adresáře
(tj. seznam). Pro zobrazení velikosti v nejbližším
1024-násobku bytů, tedy v kB, MB, GB atd. (tzv. "lidsky
čitelný formát", "human readable"), stačí přidat ještě
přepínač -h: ls -l -h, nebo i ls
-lh, protože jednopísmenné přepínače lze takto
"slučovat" za jednu pomlčku. Tzv. skryté soubory a adresáře přidáme do výpisu
přepínačem -a: ls -a; bez něj se
nezobrazují (to je celá "skrytost").
Úkol 1:
Zobrazte cestu k aktuálnímu adresáři.
Úkol 2:
Zobrazte seznam všech souborů a podadresářů, včetně
tzv. skrytých, v
aktuálním adresáři (= obsah adresáře) s podrobnějšími informacemi
(jméno, velikost, datum, práva aj.) o nich.
Můžeme zobrazit i obsah
jakéhokoliv jiného adresáře než aktuálního, když cestu k němu
(relativní nebo absolutní) přidáme
ls také jako argument, např. pro cestu pouze
jméno ls -l
public_html (předpokládáme existenci adresáře
public_html v aktuálním adresáři, což je v
případě domovského adresáře uživatelů
na učebnách a serveru phoenix.inf.upol.cz
předpřipravená situace a domovský adresář je po přihlášení
uživatele výchozí aktuální). Můžeme zadat i cestu k souboru,
ale to zobrazí jen výpis k samotnému souboru (což může být i
tak užitečné např. ve spojení s přepínačem -l). Cest můžeme zadat i více
současně, výpis je zobrazem pro každou z nich. Speciální
jména . (tečka) a .. (dvě tečky)
značí aktuální adresář (ten je ale bez zadání cesty u
ls výchozí) a
rodičovský adresář. POZOR: Jména souborů a adresářů,
uváděná v cestách ale i celkově, stejně jako jména interních příkazů shellu a
programů, jsou citlivá na velikost písmen (case-sensitive)!
Opět se to ale netýká Apple macOS.
Pro změnu aktuálního adresáře obsahuje shell příkaz
cd. Bez udání cesty jako argumentu "přepne" do
domovského adresáře uživatele, pro znak -
(pomlčka) jako cestu "přepne" do předchozího aktuálního adresáře (shell
si pamatuje celou posloupnost aktuálních adresářů). Pro
vytvoření nového (prázdného) podadresáře v aktuálním adresáři
použijeme program mkdir, kterému je nutné zadat
jméno nově vytvářeného adresáře, např. mkdir
pokusy.
Úkol 3:
Vytvořte adresář tmp, vejděte do něj a vyjděte z
něj do nadřazeného (rodičovského) adresáře.
Zmíněnou velikost adresáře ve smyslu součtu
velikostí všech souborů v něm (rekurzivně v celém adresářovém
podstromu) získáme programem du. Tento ale bez
přepínače vypisuje velikost (a cestu) pro všechny podadresáře aktuálního
adresáře, a to rekurzivně v celém podstromu adresáře (tj. pro všechny
podadresáře všech jeho poadresářů), což obvykle nechceme, takže
rovnou přidáme přepínač -s: du
-s. Pro velikost v násobcích bytů ("human readable")
opět podporuje přepínač -h: du -sh, pro jiný adresář než
aktuální stačí zadat cestu k němu jako argument (i více
cest).
Úkol 4:
Zobrazte velikost aktuálního adresáře (program du).
Doplňování jména v příkazovém řádku – Tab
Nesmírně užitečná je v příkazovém řádku funcionalita shellu (GNU Bash, ale i jiných) doplňování jména souboru nebo adresáře, ale také interního příkazu shellu i programu ke spuštění, a někdy (u GNU Bash) i argumentů, často přepínačů, všude tam, kde je toto jméno očekáváno, typicky jako součást cesty jako argumentu příkazu. Aktivuje se klávesou Tab (tabulátor). Volitelně zadáme začátek jména a stiskneme Tab. Pokud existuje pouze jediná možnost doplnění (jediný existující soubor, adresář, program apod. s takto začínajícím jménem), celý zbytek jména je doplněn! Pokud je možností doplnění víc, je případně doplněn nejdelší společný začátek jména a při dalším stisku Tab je zobrazen seznam všech doplnění jména (formou tabulky)! Dopíšeme další znak(y) a zkusíme Tab znovu pro doplnění celého zbytku jména. Pokud je seznam (tabulka) větší než co se vleze na obrazovku terminálu, může být jeho zobrazení pozastaveno po první obrazovce – další část (obrazovku) zobrazíme stiskem klávesy mezerník, nebo zobrazení ukončíme pomocí q. A pokud je seznam velký příliš, může se ještě před zobrazením jeho první části objevit dotaz na toto zobrazení, s možnými odpověďmi y pro ano a n pro ne. Pokud chceme do příkazového řádku zadat samotný znak tabulátoru, musíme použít kombinaci C-v TAB, tj. TAB po C-v.
– Úkol 5:
Při zadávání příkazů, jmen programů a souborů nebo adresářů stiskněte
(opakovaně) klávesu Tab!
Obsah souboru
V terminálu si můžeme zobrazit obsah jakéhokoliv souboru
(nejen obsah např. manuálové stránky), ale vzhledem k tomu, že
jde o textový terminál, je zde bezpečné zobrazovat pouze
textové soubory (tzv. plain text, více v osmém cvičení, soubory typicky s příponou
jména .txt, konfigurační, logovací
aj.). Případné speciální netextové znaky mohou terminál nepříjemně
ovlivnit (zobrazení znaků v terminálu, jeho chování
aj.). Nejjednodušší program pro zobrazení (výpis) obsahu
souboru v (do) terminálu je cat, kde cestu k souboru mu
zadáme jako argument, např. cat
public_html/welcome.html. Pokud je ale obsah souboru
větší než co se vleze na obrazovku terminálu, předchozí obsah
vyroluje a v terminálu zůstane jen konec obsahu velikosti
obrazovky. K němu se sice můžeme vrátit (skrolováním
terminálu), ale komfortnější je si obsah souboru na obrazovce
terminálu prohlížet interaktivně, stejně jako manuálové stránky,
programem less: less public_html/welcome.html. Jeho základní ovládání jsme si již
uvedli u popisu manuálových stránek a jejich prohlížeče
man, protože ten používá less. Pokud si (pouze
textovým) obsahem souboru nejsme jisti nebo jen chceme
napovědět, jakého typu obsah je ("co je soubor zač"), může se
hodit program file. Ten se snaží typ obsahu souboru
(zadaného mu jako argument)
identifikovat s využitím své "databáze" charakteristik a
typických částí obsahu (signatur).
– Úkol 6:
Pomocí (grafického) textového editoru (např. aplikace
Textový editor nebo Gedit) upravte obsah
souboru welcome.html v adresáři
public_html ve vašem domovském adresáři (na serveru
phoenix.inf.upol.cz je tento soubor interpretován
jako webová stránka dostupná
na adrese http://phoenix.inf.upol.cz/~login,
kde login je uživatelské jméno).
Úkol 7:
Zobrazte obsah souboru welcome.html z předchozího
úkolu (programy cat, less).
Kopírování, přesun a mazání souborů a adresářů
Pro kopírování a přesun (plus přejmenování, technicky je to
totéž co přesun) souborů a adresářů jsou v unixových systémech
standardní programy cp a mv. Akceptují minimálně
dvě cesty jako argumenty, všechny kromě poslední chápané jako
existující zdroje ("co") a
poslední jako případně neexistující cíl ("kam"). Pokud je
zdroj zadaný jeden, nemůže to (přirozeně) být cesta k adresáři a současně cíl cesta k
existujícímu souboru, a cíl nemusí existovat – tzn.
kopie nebo
přejmenování zdroje na cíl, jinak při existenci cíle kopie nebo přesun
zdroje do cíle. Pokud je
zdrojů zadaných víc než jeden, cíl pak musí být cesta k
existujícímu adresáři. V případě kopie zdroje jako cesty k adresáři je pak nutné,
pro kopii celého adresáře včetně jeho obsahu (i prázdného), doplnit přepínač
-r (recursive): cp -r adresář
cíl. Pro mazání je standardní program rm,
kterému se jako argumenty rovněž předávají cesty a pokud je to
cesta k adresáři, pak je opět pro výmaz celého adresáře včetně
jeho obsahu (i prázdného – pouze takový lze smazat i
programem rmdir) nutné přidat přepínač -r:
rm -r adresář.
Programy cp, mv a rm mají společné "klasické" přepínače -i, -f a -v. Přepínač -i (interactive) zapíná tzv. interaktivní režim, což znamená, že před každou operací, při které by mohlo dojít ke ztrátě dat (přepsáním nebo vymazáním souboru nebo adresáře) se program nejdříve dotáže na svolení operaci provést (s možnými odpověďmi y pro ano a n pro ne). To podporuje bezpečné provádění operací (v unixových systémech standardně neexistuje možnost obnovení přepsaných nebo smazaných souborů a adresářů!) a v linuxových distribucích bývá tento přepínač při vykonávání těchto programů často automaticky doplňovaný. Na druhou stranu například ve spojení s přepínačem -r takových dotazů nemusí být málo (navíc zde jsou ještě dotazy pro vstup do každého (pod)adresáře). Proto přepínač -f (force) naopak veškeré dotazy potlačuje, což ovšem může být nebezpečné. Přepínač -v (verbose) pak zapíná tzv. "ukecaný" režim, kdy je uživatel o každé jednotlivé operaci informován výpisem do terminálu.
Úkol 8:
Zkopírujte soubor welcome.html z předchozího
úkolu na soubor index.html, ten přejmenujte
na main.html a poté tento smažte (s volbami
postupně -i s odpovědí ne na výmaz a -f). Zkopírujte
adresář public_html na adresář web a poté tento smažte.
Přenos souborů na/z linuxového serveru – scp
Spolu s programem ssh pro vzdálené připojení k
linuxovému serveru v textovém terminálu bývá typicky distribuován i program
scp (secure copy) pro kopírování souborů a adresářů
na/ze vzdáleného unixového serveru. Jeho základní použití je
stejné jako u cp, včetně přepínače -r, jen
pro zadání cesty na vzdáleném serveru před ni přidáme
síťové jméno serveru, případně i s uživatelským jménem (login)
stejně jako u SSH klienta ssh,
oddělené od cesty : (dvojtečkou), tedy ve
tvaru login@server:cesta. Aktuálním adresářem (pro
relativní cestu) na serveru po připojení na něj je domovský
adresář uživatele na serveru a tento je také výchozí,
pokud není za : uvedena žádná cesta. Se samotným připojením na
server (přihlášením, zadáním hesla) je to stejné jako u
ssh, akorát pokud není u cesty na
vzdálený server
zadaná část login@, výchozí
je jméno (login) uživatele, který program spouští, a jméno se nezadává. Například tedy pro linuxový server
phoenix.inf.upol.cz příkaz scp
login@phoenix.inf.upol.cz:public_html/welcome.html .
zkopíruje (stáhne, download) soubor welcome.html
v podadresáři public_html domovského adresáře
uživatele jménem login ze serveru do aktuálního
adresáře na místním systému. Naopak pro kopii z místního
systému na server (nahrání, upload) bude cesta na serveru (se
jménem serveru) zadaná jako poslední argument.
Úkol 9:
Pomocí programu scp zkopírujte soubor
welcome.html z předchozího
úkolu pod svým uživatelským
jménem na server phoenix.inf.upol.cz do souboru
/tmp/login.html (kde login je
vaše uživatelské jméno) a poté tento soubor zkopírujte zpět ze
serveru do adresáže /tmp na místním systému.
Vyhledávání souborů a adresářů
Různé možnosti vyhledávání souborů a adresárů poskytuje v
unixových systémech program find. Jako první argument
(až na některé přepínače) mu zadáváme cestu k adresáři, ve
kterém má vyhledávat (tj. v jeho obsahu, adresářovém
podstromu), jako další argumenty potom testy (kritéria), podle kterých
má vyhledávat. Jeho výchozím výstupem do terminálu jsou cesty
(relativní k zadanému adresáři) k
nalezeným souborům nebo adresářům vyhovujícím zadaným
testům. Pro možné testy viz manuálovou stránku
programu, man find, testy se zadávají ve tvaru přepínačů (název testu za
-) s hodnotou:
-test hodnota. Například pomocí find . -name
vzor můžeme v aktuálním adresáři vyhledat soubory nebo adresáře, jejichž
jméno odpovídá vzoru (o vzorech shellu pro jména si řekneme v
šestém cvičení), kde jednoduchý vzor
je obyčejný textový řetězec (bez speciálních znaků
*?[] pro vzor). Varianta -iname vzor
nerozlišuje u vzoru/jmen velikost písmen. Test
-size velikost je pro velikost souboru, číselná
hodnota velikost
může mít příponu k, M, G pro 1024-násobky bytů a c pro byty
(pozor, ne b, to je pro 512 bytů a je výchozí bez
přípony). Velikost souboru musí odpovídat přesně zadané
hodnotě, což obvykle nechceme,
proto před ni můžeme zadat i znaky - (mínus) pro
hodnotu/velikost i menší a + (plus) pro i větší. Podobně je to
například i s testem -mtime dní pro čas poslední
změny obsahu souboru (nebo adresáře), jehož hodnotou je počet
dní do minulosti od aktuálního času (tedy větší hodnota znamená
více do minulosti). Existují i testy -mmin minut pro
hodnotu v minutách nebo -atime/-amin pro čas
posledního přístupu k souboru. Nebo můžeme testovat (obyčejný)
soubor, testem -type f, nebo adresář, -type
d. Další testy jsou třeba pro
uživatelská práva souboru/adresáře nebo uživatele jako
jeho vlastníka, ale tyto záležitosti si představíme až v
příštím pátém
cvičení. Více zadaných testů musí být splněných
současně (konjunktivně), ale mezi testy je možné úvést i
přepínač -o
(nebo -or) pro disjunktivní splnění testů nebo
před testem uvést \! (-not) pro jeho
negaci.
Úkol 10:
Vyhledejte všechny soubory ve vašem domovském adresáři větší než
1 kB a současně nezměněné dříve než jeden den zpět.
Dodejme ještě, že kromě testů můžeme programu find zadat jako argumenty i akce, které má s nalezenými soubory nebo adresáři rovnou provést. Například formátovaný výpis mnoha různých informací o nich (nejen cesty k nim, -printf formát), smazání (-delete) nebo rovnou vykonání libovolného příkazu nad nimi (-exec příkaz \;), ale zde už odkážeme na manuálovou stránku programu.
Cvičení 5
V pátém cvičení ještě zůstaneme u souborů a adresářů, budou nás zajímat hlavně uživatelská přístupová práva. Podíváme se ale také na používání výměnných diskových médií, např. USB flash disku, a vybrané zajímavé soubory a adresáře linuxových systémů.
Soubory a adresáře
Symbolický odkaz
Dalším, speciálním typem souboru, vedle běžného souboru a
adresáře, je symbolický odkaz, soft link na soubor,
adresář nebo i jiný odkaz
(existuje ještě i tzv. pevný odkaz, hard link, ale ten
vynecháme). Jeho "obsahem" je cesta (absolutní nebo relativní)
k odkazovanému souboru,
adresáři nebo jinému odkazu, přičemž samotný odkaz (jako
speciální soubor) může být uložený
kdekoliv jinde v celé adresářové struktuře. Vytvoříme jej pomocí programu
ln s přepínačem -s (bez něj by se vytvářel
pevný odkaz): ln -s cíl odkaz, kde
cíl je odkazovaná cesta (cíl odkazu) a
odkaz je cesta k odkazu (typicky jen jméno, tj. v
aktuálním adresáři) – pokud není zadaná, bude vytvořený odkaz
stejného jména jako cíl v aktuálním adresáři. V zobrazení (výpisu) obsahu adresáře
programem ls můžeme odkaz poznat tak, že jeho jméno
může být obarvené, typicky azurově, nebo v případě použití
přepínače -l je u zobrazení odkazu první znak prvního
sloupce (typ položky) znak l a za jménem odkazu
je doplněno -> následované cestou k cíli odkazu.
Odkaz je, ve spojení s faktem, že může být v adresářové struktuře umístěný jinde než jeho cíl, užitečný v tom, že při souborových operacích čtení (např. programem cat) a zápisu (např. textovým editorem) aplikovaných na odkaz (stejně jako na soubor) se operace provádí s cílem odkazu a ne s odkazem samotným. Další takovou operací je změna uživatelských práv níže (odkaz má vždy "nastavena" plná práva). Ovšem operace kopie (např. programem cp), přesunu (přejmenováním, mv) a mazání (rm) se již provádějí se samotným odkazem (jako se souborem)! Zajímavá je situace, kdy neexistuje cíl odkazu, například v důsledku jeho přesunu nebo smazání (odkaz může být i rovnou vytvořený na neexistující cíl). Samotný odkaz existuje dál a je tzv. rozbitý (broken). V zobrazení (výpisu) ls může být takový odkaz obarven červeně a stane se opět "funkčním" ve chvíli, kdy jeho cíl bude opět existovat.
Úkol 1:
Vytvořte symbolický odkaz index.html na kopii
souboru welcome.html z předchozího cvičení, zobrazte obsah
kopie "přes odkaz", kopii pak smažte, opět vytvořte a pak smažte odkaz. Mezi
těmito kroky si zobrazte
obsah adresáře s odkazem s podrobnějšími informacemi (o odkazu).
Uživatelská přístupová práva
Ke každému souboru nebo adresáři (i odkazu) je v unixových
systémech přidružený uživatel, jako vlastník, typicky
ten, který soubor nebo adresář vytvořil, a uživatelská skupina
(typicky tzv. primární skupina vlastníka). Zatímco vlastníka
může změnit jen superuživatel groups nebo id (bez argumentu pro
uživatele, který program spouští, jinak s argumentem jména
uživatele). Vlastníka a skupinu každého souboru a adresáře
vidíme u zobrazení ls -l ve třetím a čtvrtém
sloupci, před údajem o velikosti. Druhý sloupec vynecháme, v prvním sloupci, vyjma
prvního znaku udávajícího typ položky (viz předchozí
cvičení), jsou vyjmenována uživatelská práva k položce.
Úkol 2:
Zobrazte skupiny, do kterých (váš
) uživatel patří, a
obsah nějakého adresáře
s informacemi o vlastnících, skupinách a právech souborů a podadresářů.
Tzv. tradiční unixová přístupová práva jsou u souborů a
adresářů evidována pro tři kategorie uživatetelů: vlastníka,
(ostatní) uživatele z přidružené uživatelské skupiny a všechny ostatní uživatele
(je možná i pokročilejší evidence pro více konkrétních uživatelů a skupin,
podle seznamů ACL, ale těmi se nebudeme
zabývat). Samotná (základní) práva jsou čtení, zápis a
spouštění (pro což je potřeba i právo čtení) – to je význam pro soubory. Pro adresáře právo
čtení znamená zobrazení obsahu adresáře, tj. seznamu jmen
jeho souborů a podadresářů, právo zápisu změnu tohoto
obsahu, tj. vytváření, přesun (přejmenování) a mazání
položek seznamu a právo spouštění pak pro adresáře znamená vstup do adresáře
– to je ovšem potřeba pro jakoukoliv manipulaci se
soubory a podadresáři adresáře, tedy jejich čtení, zápis (včetně
vytvoření, přesunu a smazání), spouštění i jen zobrazení
dalších informací k nim. V zobrazení ls -l jsou
práva v prvním sloupci (za prvním znakem) zapsána třemi
trojicemi znaků pro právo čtení (znak r, read), zápisu
(w, write) a spouštění (x, execute) postupně pro
vlastníka, skupinu a ostatní. Pokud právo není nastaveno, je
zde místo odpovídajícího znaku znak - (pomlčka).
Pro změnu práv u souboru nebo adresáře je program chmod. Jeho prvním (nepřepínačovým) argumentem je specifikace práv a dalšími argumenty pak cesty k souborům a/nebo adresářům, u kterých práva chceme nastavit. Specifikace práv je možná dvojí, symbolická a číselná. Symbolická je ve tvaru kategorieoperacepráva (bez mezer) a těchto zadání může být uvedeno víc oddělených , (čárkou, bez mezer). Kategorie je žádný a více znaků u (user) pro vlastníka, g (group) pro skupinu, o (other) pro ostatní nebo a (all) pro všechny uživatele – tato kategorie je výchozí, pokud není zadána žádná, operace je jeden ze znaků + (plus) pro přidání práv, - (mínus) pro odebrání práv nebo = pro (absolutní) nastavení pouze zadaných práv a (základní) práva jsou buď žádný a více znaků r pro čtení, w pro zápis nebo x pro spouštění (ještě i X pro vstup do adresáře nebo u souboru již je právo spouštění pro nějakou kategorii uživatelů) anebo jeden ze znaků u, g, o pro práva taková, jaká jsou již nastavena pro danou kategorii uživatelů. Číselná specifikace (základních) práv je jednodušší (a omezenější), jedna až tři číslice od 0 do 7 (počáteční chybějící číslice jsou uvažovány 0) postupně pro kategorie uživatelů vlastník, skupina a ostatní. Každá číslice je součet hodnot 4 pro právo čtení, 2 pro právo zápisu a 1 pro právo spouštění (tedy např. hodnota 6 je dohromady pro práva čtení a zápisu), a práva jsou nastavena vždy pouze takto zadaná (absolutně).
Úkol 3:
Odeberte souboru welcome.html z prvního
úkolu právo zápisu
vlastníkovi a zkuste do něj zapsat
(např. textovým editorem), odeberte právo čtení a zkuste
zobrazit jeho obsah, poté práva
souboru vraťte.
Úkol 4:
Odeberte adresáři public_html z předchozího
cvičení právo vstupu všem uživatelům a zkuste
zobrazit jeho obsah a vstoupit do něj, poté právo vraťte a odeberte
právo čtení a opět zkuste zobrazit jeho obsah a vstoupit do něj, pak
opět právo adresáři vraťte.
Úkol 5:
Nastavte všechna práva vlastníkovi a pouze právo vstupu skupině a
ostatním uživatelům adresáři public_html z
předchozího úkolu.
Kromě zmíněných základních práv (čtení, zápis a spouštění)
existují ještě speciální práva (někdy označovaná jako bity):
tzv. set user ID (on execution, SUID), set group ID (SGID) a
restricted deletion flag či sticky bit podle užití pro adresář
či soubor. V zobrazení ls -l je poznáme podle
písmene s místo x pro právo
spouštění pro vlastníka (SUID) nebo skupinu (SGID),
resp. písmene t pro ostatní (flag/sticky). Stejná
písmena by se použila u programu chmod pro jejich
nastavení. Jejich význam vynecháme (je spíše technický a někdy
i nebezpečný), ukážeme si jen význam práva restricted deletion flag
u adresáře: při nastaveném zmemožňuje přejmenování nebo
smazání souboru nebo podadresáře adresáře komukoliv jinému (s
výjimkou superuživatele root) než
vlastníkovi tohoto souboru nebo podadresáře, případně samotného
adresáře. Typicky bývá toto právo nastaveno u všeobecně (pro
všechny uživatele) zapisovatelného adresáře /tmp
pro dočasné soubory uživatelů.
– Úkol 6:
Zkuste v adresáři /tmp vytvořit soubor a smazat
cizí soubor (jehož váš
uživatel není vlastníkem; cizí
soubor může jiný uživatel vytvořit např. na serveru
phoenix.inf.upol.cz po svém vzdáleném
připojení pomocí ssh).
Připojování souborových systémů
V unixových systémech se obsah, adresářová struktura,
souborových systémů z diskových zařízení, včetně
např. výměnných diskových médií, připojuje
(mount) pod nějaký adresář v (jednom) adresářovém
stromu systému, tzv. přípojný bod. Při připojení dojde k překrytí původního
obsahu adresáře a po odpojení (unmount) zase k
odkrytí; proto se typicky připojuje do prázdných, případně nově
vytvořených, adresářů. Připojování obsahu souborových systémů z trvale
v počítači přítomných diskových zařízení (disků) je typicky
záležitostí konfigurace systému, zaměříme se tedy na výměnná
disková média používaná uživateli, např. USB flash disky,
optické disky nebo paměťové karty. V moderních grafických
prostředích (např. desktopu Gnome v linuxu) dojde
při aktivaci média (zasunutím do konektoru, mechaniky, slotu
apod.) k automatickému připojení obsahu média, v linuxu obvykle do
adresáře (přípojného bodu) /media/login/jméno-média, kde
login je uživatelské jméno a
jméno-média je jméno souborového systému na médiu
(nebo jednoduše média). V Apple MacOS je přípojný bod adresář
/Volumes/jméno-média. Pokud k tomu nedojde, je obvykle možné
připojení (třeba jen pokusem o zobrazení) obsahu média v
prohlížeči souborů (grafickém, např. v aplikaci
Soubory, v Apple macOS Finder), ve kterém se médium objeví. Zde i můžeme
získat informaci o celkové, obsazené a volné kapacitě média, ale v
prostředí textového terminálu k tomu můžeme využít program
df, ideálně rovnou s přepínačem -h:
df -h, který zobrazuje tabulku pro (téměř) všechny
připojené souborové systémy (v posledním sloupci tabulky jsou
zobrazeny přípojné body).
Odpojení obsahu média i média ze
systému jako takového, po ukončení práce s ním, provedeme nejjednodušeji opět v
prohlížeči souborů, například kliknutím na ikonu "eject" vedle
pojmenování média (nebo cesty přípojného bodu), podobně jako v
případě síťového disku ve druhém cvičení. POZOR: Pro operace se
soubory, zvláště déletrvající (při větší velikosti souboru), se
v unixových systémech intenzivně používají paměťové buffery,
takže typicky operace zápisu může být systémem (programem,
aplikací) oznámena jako
provedená, ale skutečný zápis na cílové médium v té chvíli
ještě nemusí být dokončen! Prohlízeč souborů (nebo jiná
aplikace) by sice v takovém případě neměla odpojení cílového média dokončit
(a oznámit, že je možné médium bezpečně fyzicky odpojit, vytáhnout
apod.), ale pro jistotu je před odpojením média
doporučeno vynutit dokončení všech operací s ním například
programem sync a médium odpojit až po ukončení
běhu tohoto programu.
V linuxu, pokud k automatickému připojení obsahu média nedojde
a/nebo ho nechceme připojovat v (grafickém) prohlížeči
souborů, můžeme pro připojení a odpojení použít příkazy udisksctl
mount -b /dev/soubor-média, resp. udisksctl unmount -b /dev/soubor-média,
což je novější možnost připojení pod stejný připojovací bod
jako výše (/media/login/jméno-média), nebo
starší příkazy pmount /dev/soubor-média,
resp. pumount /dev/soubor-média (ano, bez n v
pumount), v tomto případě pod připojovací bod
/media/soubor-média. Zde soubor-média je
jméno speciálního souboru systému pro médium, které získáme
např. programem lsblk (případně i s přepínačem
-f pro informaci o souborovém systému na médiu)
zobrazujícím v tabulce informace o všech diskových médiích –
jméno soubor-média, např. sdb1, je zobrazeno v prvním sloupci.
Úkol 7:
Připojte k počítači USB flash disk a zobrazte si jeho obsah a
informaci o celkové, obsazené a volné kapacitě
(programem df). Poté disk bezpečně (!) odpojte.
Zajímavé soubory a adresáře
Podívejme se ještě na závěr na pár vybraných zajímavých souborů a adresářů v unixových systémech. V adresáři /dev je spousta speciálních souborů jako rozhraní k hardware nebo pro nějaký účel. Například v linuxu již zmíněné sdxn (a symbolické odkazy na ně např. z /dev/disk), kde x je znak a a dál v abecedě a n je číslo, pro disková média (písmeno) a jejich oblasti (číslo), nebo třeba null je tzv. "černá díra", do tohoto souboru můžeme zapsat libovolné množství dat a všechna se nenávratně ztratí (číst není možné nic), nebo random a urandom jako rozhraní pro generátory pseudonáhodných dat.
V adresáři /etc jsou umístěné systémové (textové) konfigurační soubory. Například ve všem čitelném souboru passwd jsou evidovány informace o uživatelských účtech (login, ID, ID primární skupiny, plné jméno, cesta k domovskému adresáři a výchozí shell), ovšem ne hesla uživatelů. Ta, resp. jejich kryptografický hash, jsou (v linuxu, ne Apple macOS) v souboru shadow, který je již čitelný pouze superuživateli root.
Valná většina souborů systému a nainstalovaných programů a aplikací je uložená v
adresáři /usr. Například v podadresáři
share/man jsou všechny manuálové
stránky a v podadresáři share/doc další
dokumentace programů a aplikací, typicky v podobě textových
souborů nebo webových stránek (zkusme du -sh /usr/share/doc).
V podadresářích adresáře /home, v Apple macOS /Users, jsou domovské adresáře uživatelů, ovšem domovský adresář superuživatele root je v adresáři /root (ne v Apple macOS; není ostatním uživatelům přístupný). Pod podadresáře adresářů /media a /mnt se typicky připojují obsahy jiných souborových systémů mimo vlastní systém, např. z výše rozebíraných výměnných diskových médií (/media) nebo trvale v počítači přítomných diskových zařízení (/mnt). V Apple macOS se vše připojuje pod podadresáře adresáře /Volumes. Výše zmíněný adresář /tmp mohou uživatelé a programy využít pro odkládání dočasných souborů (obsah obvykle "nepřežije" restart systému).
Zajímavé technické (a detailní) informace o systému,
spuštěných programech a hardware počítače lze získat ze
souborů v adresáři /proc (ne v Apple macOS), a v linuxu ještě i
adresáři /sys. Na obsahu těchto adresářů je
zajímavé také to, že je zcela generovaný systémem (jádrem),
včetně obsahu souborů, na požadavek čtení a obsah není nikde uložený. Soubory zde mají
typicky nulovou nebo nějakou fixní velikost, až na výjimky
jako například /proc/kcore (tento soubor
poskytuje náhled na celou tzv. virtuální paměť
systému). Podívejme se např. na obsah souborů
/proc/cpuinfo (viz také v linuxu program lscpu) a
/proc/meminfo (lsmem) s
detailními informacemi o procesoru (CPU) a paměti (RAM) počítače.
Cvičení 6
V šestém cvičení se přesuneme od souborů a adresářů k, v první části, procesům jako spuštěným programům, zobrazení informací o nich a jejich ukončování, a ve druhé části se začneme více zabývat samotným příkazovým interpretem, shellem (GNU Bash), konkrétně řízením úloh v něm a expanzí cest k souborům a adresářům.
Procesy
Proces je v operačních systémech aktivní entita reprezentující spuštěný program. Program může pro svoji činnost používat i více procesů, obvykle ale ke každému spuštěnému programu existuje v systému jeden proces. Říkáme, že "program nebo proces běží pod uživatelem", typicky tím, který ho spustil (systémové procesy beží pod superuživatelem root). Procesy jsou v unixových systémech, podobně jako soubory a adresáře, organizovány hierarchicky do jediného stromu, s kořenem procesem programu init spouštěném jádrem systému při jeho startu. Každý další proces je spouštěn jako potomek svým rodičovským procesem a každý proces má svoje číslo PID.
Zobrazení informací o procesech
Základním programem pro zobrazení (výpis) informací o
procesech je v textovém terminálovém prostředí program
ps. Bez argumentů zobrazuje jen procesy (informace
o nich) spuštěné v shellu, ve kterém je ps spuštěn, tedy
například jen procesy programů bash (pro shell GNU
Bash) a ps. Procesy jsou na řádcích
zobrazené tabulky,
ve sloupcích (se záhlavím na prvním řádku) jsou informace o nich, jako např. PID, souhrnný čas
běhu procesu (TIME, přesněji souhrnný čas
využívání procesoru procesem – POZOR: není totéž jako
doba od spuštění procesu doteď!) nebo jméno programu
procesu (CMD). Argumenty programu ps jsou
trojí: tzv. BSD, jednopísmenné nezačínající -
(pomlčkou), unixové, jednopísmenné začínající - (tj. klasické
přepínače) a GNU, (dlouhé) slovní začínající dvěma -. Možnosti těchto sad argumentů se značně překrývají,
budeme používat první dvě (a typicky se nekombinují argumenty
z různých sad).
Přidáním argumentu x zobrazíme všechny procesy
uživatele, který ps x spouští. Navíc místo pouze jména
programu je zobrazen celý příkaz jeho spuštění, včetně argumentů (sloupec
COMMAND). Spolu s a, dohromady
ps ax, jsou pak zobrazeny všechny procesy v
systému, všech uživatelů. Podobně funguje i ps -e
(jen jsou zobrazena jen jména programů, ne celé
příkazy). Další informace jako uživatelské jméno
(USER, uživatele, pod
kterým proces běží), procento využití procesoru
(%CPU, podíl času běhu procesu a doby od jeho
spuštění), procento využití operační paměti RAM
(%MEM) nebo datum nebo čas spuštění procesu
(START nebo STIME) získáme
argumentem u nebo -f: oblíbené
ps aux nebo ps -ef. Pro zobrazení
vztahu rodič-potomek mezi procesy, ve sloupci se jménem programu nebo
příkazem, je argument f nebo -H (ne
v Apple macOS). Můžeme si i zvolit informace (sloupce), které
o procesech chceme zobrazit, (posledním sloučeným) argumentem o názvy
nebo -o názvy, kde názvy jsou
čárkou oddělená klíčová slova pro informace, např. pid pro PID,
cmd pro příkaz (command v Apple macOS), %cpu pro využití
procesoru apod. (kompletní seznam najdeme v manuálové stránce
programu ps), např. ps axo pid,%cpu,cmd
nebo ps -eo pid,%cpu,cmd. Dále
například pomocí -C jména (ne v Apple macOS) omezíme zobrazení jen
na procesy se jménem programu ze seznamu (jmen oddělených
čárkou), pomocí U jména nebo -u
jména na procesy běžící pod uživatelem, pro další
možnosti již odkážeme na manuálovou stránku man ps.
Celou stromovou hierarchii všech procesů v systému můžeme
zobrazit pomocí pstree (ne v Apple
macOS). Přidáním argumentů -a nebo
-p doplníme zobrazení příkazů (nejen jmen
programů) nebo PID procesů, například.
Úkol 1:
Zobrazte výpis všech procesů Vašeho
a jiného uživatele, všechny
procesy v systému, dále ve stromové struktuře a nakonec pouze s informací o PID a
příkazu procesu.
Informace o procesech si můžeme v textovém prostředí nechat
zobrazovat i interaktivně, přes celou
obrazovku terminálu. Klasickým starším programem top,
nebo v linuxu novějším htop. Po spuštění,
top zobrazuje v horní části obrazovky na prvním
řádku informace o
době běhu systému a jeho akuálním vytížení (stejně jako
program w) a na dalších řádcích různé počty procesů
(Tasks) a informace o celkovém vytížení procesoru a využití
operační paměti (a tzv. odkládacího prostoru, swap). Tyto
údaje jsou periodicky aktualizované, stejně jako celá hlavní tabulka s
procesy ve zbytku obrazovky – s podobnými výchozími informacemi
(sloupci) jako v případě ps aux. Program ovládáme
klávesami písmen nebo jinými, z nichž některé si představíme. Tabulkou můžeme posouvat doleva a
doprava i nahoru a dolů klávesami šipek, PageUp a
PageDown a Home a
End. Klávesou x přepneme zvýraznění (tučně)
sloupce, podle kterého jsou procesy aktuálně setřízeny
(výchozí je využití procesoru, %CPU), klávesami P,
M a T přímo volíme setřízení podle
sloupce využití procesoru (%CPU), operační paměti (%MEM) a času běhu
procesu (TIME), pomocí < a > pak
měníme sloupec určující setřízení na sousední (v Apple macOS
se sloupec volí klávesou o) a
klávesou R setřízení převrátíme. Přes
f si můžeme vybrat informace (sloupce), které v
tabulce procesů chceme mít zobrazené (obrazovka výběru obsahuje nahoře
nápovědu k ovládání). Klávesami c a V přepneme zobrazení
pouze jména programu procesu nebo celého příkazu, resp. vztahů
rodič-potomek mezi procesy (sloupec
COMMAND), pomocí u (v Apple MacOS
U) můžeme omezit
zobrazení jen na procesy následně zadaného uživatele (žádného
pro všechny, zrušení pomocí Esc) a po
k (v Apple macOS S) můžeme ukončit (přesněji zaslat mu signál,
viz dále) proces s daným PID. Přes klávesu L
můžeme v tabulce vyhledat proces se zadaným řetězcem v názvu
programu. Klávesami l, t, m nebo
1 různě měníme zobrazení informací nad tabulkou
procesů a přes d (v Apple macOS s) můžeme změnit interval
aktualizace všech údajů. Konečně pod klávesami h
nebo ? se skrývá nápověda s přehledem všech
ovládacích kláves a program ukončíme stiskem q.
Linuxový program htop má zobrazení i ovládání
velice podobné programu top, na první pohled viditelný
rozdíl je ovšem v použití barev v zobrazení údajů. Zmíníme se
jen o rozdílech v ovládání. Klávesy ↑ a
↓ neposouvají celou tabulkou s procesy,
nýbrž označením (barevným pruhem přes celý řádek) vybraného
procesu. U sloupce, podle kterého jsou procesy aktuálně
setřízeny, je zvýrazněno (barvou) jen jeho záhlaví trvale
(klávesa x je pro něco zcela jiného), sloupec
určující setřízení měníme zvolením sloupce v nabídce (klávesami ↑,
↓ a Enter) po stisku nejen
< a >, ale také . nebo
, (nebo i F6, SortBy
– v posledním řádku obrazovky jsou vždy zobrazeny aktuální ovládací klávesy) a setřízení převracíme
klávesou I. Výběr informací (sloupců), které v
tabulce procesů chceme mít zobrazené, zahájíme stiskem
S (nebo F2, Setup) a poté klávesami šipek
vybereme v nabídkách položky Screens a Main a
následně sloupce (nabídky poskytují i nastavení celého
programu). Klávesa c (a
Ukončení procesu
Uživatel může, vedle spouštění programů s vytvořením procesů,
programy a jejich procesy i "násilně" nebo "nekorektně", mimo funkci
programu, ukončovat. Samozřejmě jen takové, které "mu patří"
(běží pod uživatelem; s výjimkou spueruživatele
root, ten může ukončovat kterýkoliv proces
kteréhokoliv uživatele). Základním nástrojem pro to je program
kill, kterému zadáme jako argumenty PID procesů k
ukončení: kill PID. To získáme buď pomocí ps nebo top
(htop) výše, nebo i pomocí programu
pidof, kterému jako argument předáme jméno
programu (ne v Apple macOS). Z technického hlediska,
kill zasílá procesu tzv. signál, který mu lze
zadat formou přepínače: -signál (nebo i
-s signál), kde signál může být
jméno signálu (i s prefixem SIG) nebo jeho číslo, a účelem
(akcí) signálu ve skutečnosti nemusí být jen ukončení procesu. Signálů je
víc, jejich přehled poskytuje kill -l (a detailní
popis man 7 signal), výchozí pro kill je
TERM (číslo 15). Jeho účelem je ukončení procesu,
stejně jako u signálu KILL (9), který je v tom
"účinnější", pokud proces z nějakého důvodu není možné
"normálně" ukončit. Účelem signálů STOP (19) a
CONT (18) je ale zastavení a znovurozběhnutí
procesu – zastavení procesu neznamená jeho ukončení, ale
"zmrazení" (nebude vykonáván procesorem), viz také dále řízení
úloh v shellu. Vyzkoušejme si to například na jakékoliv grafické
aplikaci, nejlépe spuštěné v terminálu, např. (v desktopu Gnome)
Kalkulačka jako program
gnome-calculator (v Apple macOS příkaz open
-Wa Calculator). Po získání PID jeho procesu (v jiném terminálu), po
kill -STOP PID bude aplikace "zamrznutá" (v Apple
macOS ne; ale
interakce s ní, např. myší, bude evidována) a po kill
-CONT PID se opět "rozběhne" (a interakce se provede).
Podobný programu kill je program killall, jen s tím rozdílem, že místo PID mu zadáváme jména programů a on zašle signál všem procesům programů s těmito jmény. Přepínačem -u jméno-uživatele (bez zadání jmen programů) můžeme také jednoduše zvolit všechny procesy daného uživatele (což je užitečné zejména pro superuživatele root).
Při ukončení procesu, "korektně" jeho funkcí nebo i "nekorektně"
signálem, jsou v unixových systémech standardně ukončeni (signálem) i
všichni jeho potomci v rámci stromu procesů. Například při
odhlášení uživatele chceme ukončit všechny programy spuštěné
v shellu nebo grafickém desktopu v rámci uživatelova sezení
(session) –
s ukončením jejich procesu jsou tedy ukončeny i procesy těchto
programů jako jejich potomci. Program ale může "zařídit", že
se toto u jeho procesů dít nebude a ve skutečnosti to tak mají programy
shellů (včetně GNU Bash), pokud jsou ukončeny "korektně". Jejich rodičem ale bývá
program emulátoru terminálu a ten už to tak nemá (tj. jeho
potomci jsou vždy ukončeni). Demonstrujme si to opět např. na
aplikaci Kalkulačka, programu gnome-calculator spuštěném v shellu v
emulátoru terminálu. Při ukončení emulátoru terminálu,
např. zavřením jeho okna, se ukončí ("nekorektně") nejen shell
v něm (jako potomek procesu terminálu), ale i
aplikace (jako potomek procesu shellu). Ovšem při "korektním" ukončení shellu, např. příkazem
exit, se sice ukončí i emulátor terminálu
(protože tento se bez shellu automaticky ukončuje, ne v Apple macOS), ale
aplikace poběží dál (!) – toto ale můžeme vyzkoušet až poté,
co se níže v rámci řízení úloh v shellu dozvíme, jak po
(obyčejném) spuštění programu v shellu "vrátit"
terminál zpět shellu pro možnost opět zadávat příkazy v
příkazovém řádku, zatímco program běží dál.
Úkol 2:
Spusťte, v příkazovém řádku v terminálu, (grafický) program
gnome-calculator, ve druhém terminálu získejte PID jeho procesu,
programem kill jej zastavte (poté ho zkuste ovládat),
pak znovurozběhněte a nakonec ukončete. Spusťte jej poté znovu,
opět z terminálu, a zavřete okno terminálu.
Doba běhu příkazu
Dodejme stručně, že můžeme zjistit i dobu běhu příkazu
(programu a jeho procesu) a to tak, že před příkaz v příkazovém řádku shellu
doplníme program time: time příkaz. Jsou
zobrazeny tři časy: skutečná doba běhu příkazu
(real), doba vykonávání kódu programu
(user) a doba vykonávání kódu (jádra) systému v
kontextu procesu (sys).
Příkazový interpret (shell)
Nyní se již přesuneme zpět k samotnému příkazovému interpretu, shellu (GNU Bash), jehož základní ovládání skrze příkazový řádek jsme si ukázali ve třetím cvičení, a ukážeme si, co dalšího nám nabízí.
Řízení úloh
Podobně jako proces na systémové úrovni reprezentuje spuštěný program, spuštěný příkaz shellu, po jeho potvrzení na příkazovém řádku ("odeslání" shellu k vykonání), je reprezentován úlohou shellu. Narozdíl od procesů ale úlohy shellu nejsou hierarchicky organizovány, není mezi nimi vztah rodič-potomek, a jsou evidovány v rámci každého shellu (v každém emulátoru terminálu) zvlášť pod svým číslem úlohy job ID. Úloha shellu může být vykonávána, neboli příkaz či program může v shellu běžet, tzv. na popředí (foreground) nebo na pozadí (background). Vykonávání úlohy na popředí znamená, že shell předá příkazu (programu) vstup i výstup terminálu, tzn. možnost skrze terminál uživateli zadávat příkazu (textová) data i do terminálu data příkazem zobrazovat. Po dobu vykonávání příkazu není v terminálu dostupný příkazový řadek s promptem shellu pro zadávání dalšího příkazu a shell do terminálu nic nezobrazuje, dokud příkaz neskončí. Oproti tomu při vykonávání úlohy na pozadí shell pouze "propůjčí" příkazu (programu) výstup terminálu. Sám může do terminálu také zobrazovat (textová) data, ale ponechává si vstup terminálu s promtem v příkazovém řádku pro zadávání dalších příkazů. Mezitím je příkaz (program), bez možnosti mu zadávat skrze terminál data, vykonáván (běží) "na pozadí" shellu a současně s ním může být vykonáván další v shellu zadaný příkaz (na popředí i na pozadí).
Obyčejné spuštění příkazu doteď bylo vždy na popředí. Spuštění
příkazu rovnou na pozadí se provede jednoduše přidáním znaku &
(ampersand) na konec příkazu (často ještě s mezerou
před). Například příkaz gnome-calculator & (v
Apple macOS open -Wa Calculator &) spustí
aplikaci Kalkulačka, jejíž úloha bude v shellu
vykonávána (příkaz/program poběží a může něco zobrazovat v terminálu) na pozadí a v shellu zůstane dostupný příkazový
řádek s promptem pro zadání dalšího příkazu. Při takovém
spuštění úlohy shell
zobrazí v terminálu ID úlohy (jako [job ID]) a PID
procesu aplikace a po skončení úlohy, po zadání dalšího
příkazu (i prázdného), zobrazí informaci o dokončení
úlohy. Všechny úlohy shellu (job ID a příkaz) vykonávané na pozadí si
můžeme nechat zobrazit příkazem jobs, případně s
přepínačem -l pro zobrazení i PID procesů.
Úlohu spuštěnou (obyčejně) na popředí je možné dodatečně
"přepnout" na pozadí a obráceně. Jelikož úloha vykonávaná na
popředí má i vstup terminálu, musíme ho nějak "vrátit" shellu
a jeho promptu v příkazovém řádku. Toho docílíme klávesou
zkratkou C-z, což způsobí zastavení úlohy (procesu, signálem STOP, viz výše) a shell o tom informuje. Následně
můžeme zadat příkaz bg pro znovurozběhnutí úlohy
(procesu, signálem CONT) na pozadí (shell o tom
opět informuje). Obráceně, když úloha vykonávaná na pozadí
nemá vstup terminálu a je zde prompt shellu, můžeme rovnou
zadat příkaz fg pro "přepnutí" úlohy na
popředí. Bez argumentu identifikujícího úlohu (nebo s argumentem
% nebo %%) příkazy uvažují
poslední zastavenou úlohu (bg) nebo poslední
úlohu spuštěnou nebo znovurozběhnutou na pozadí
(fg). Jinou úlohu je možné zadat jejím číslem job ID
(jen číslo nebo za znak %) nebo i začátkem nebo obsahem
příkazu, pomocí %prefix nebo %?obsah.
Podobně jako procesy můžeme ukončovat "nekorektně" programem kill, můžeme ukončovat "nekorektně" ("násilně") i úlohy shellu. Ovšem jen, pokud je úloha vykonávána na popředí, a to klávesovou zkratkou C-c (což znamená zaslání procesu úlohy signálu INT (2), v Apple macOS ukončí příkaz open, ne aplikaci přes něj spuštěnou). Samotný shell takto ale neukončíme.
Úkol 3:
Spusťte, v příkazovém řádku v terminálu, (grafické) programy gnome-calculator a gnome-mines, první tzv. na pozadí a druhý tzv. na popředí. Druhý přesuňte na
pozadí a první na popředí. Pak první ukončete (zavřete jeho okno) a
"korektně" ukončete shell v terminálu (např. příkazem exit).
Expanze cest
Pro zadání cest, jako argumentů příkazů, k více souborům nebo adresářům, jejichž jména mají nějaké části společné, můžeme s výhodou využít vzorů (patterns) pro zadání těchto jmen a zadat tak cestu jen jednu se vzorem. Shell takovou cestu automaticky, před spuštěním příkazu, expanduje ("rozbalí") na abecedně setřízený seznam cest (oddělených mezerou) s celými jmény na dané cestě existujících souborů a adresářů vyhovujících vzoru a nahrazenými místo vzoru. Ve vzorech lze využít následujících zápisů: * (hvězdička) pro jakýkoliv řetězec znaků (i prázdný), ? (otazník) pro jakýkoliv jeden znak a [znaky] pro jakýkoliv jeden znak z mezi [] vyjmenovaných znaků, a jejich kombinací. Místo vyjmenování znaků mezi [] lze také zapsat rozsah znaků od-do dle jejich (anglického) abecedního setřízení a znaky ^ (stříška) nebo ! (vykřičník) uvedené jako první za [ mění množinu znaků na doplňkovou do všech znaků (anglické) abecedy. Pokud žádná jména vzoru nevyhovují, cesta expandována není a zůstává i se vzorem.
Takže například samotná * (jako relativní cesta) je expandována na abecedně setřízeny seznam jmen všech v aktuálním adresáři existujících souborů a adresářů (jako seznamu relativních cest), /tmp/p*l na seznam (absolutních) cest ke všem souborům a adresářům v adresáři /tmp, jejichž jména začínají znakem p a končí znakem l (a mezi nimi je cokoliv, včetně ničeho), pokus?/vysledek.txt na seznam (relativních) cest k souborům vysledek.txt ve všech adresářích (v aktuálním adresáři), jejichž jméno je pokus následované jediným jakýmkoliv znakem, p[ou]* na seznam jmen všech souborů a adresářů (v aktuálním adresáři) začínajících řetězcem po nebo pu (a pak cokoliv) atd. Vzorů je možné v jedné cestě, místo více jmen, uvést i víc, například /home/p[^o-u]*/*.txt je rozbalená na seznam cest ke všem souborům (nebo adresářům) se jménem končícím na .txt ve všech podadresářích se jmény začínajícími na p a jakýkoliv znak kromě znaků o až u v adresáři /home.
Úkol 4:
Zobrazte seznam cest ke všem souborům v
adresáři /dev se jménem ttycifra,
kde cifra je 0 až 9, a se jménem začínajícím
ttynecifra, kde necifra je jakýkoliv
jeden znak mimo 0 až 9.
Užitečné mohou být i zkratky ~ (tilda) za absolutní cestu k domovskému adresáři uživatele (pod kterým shell běží), případně ~login pro uživatele jménem login, a ~+ a ~- za absolutní cestu k aktuálnímu a předchozímu aktuálnímu adresáři.
Kvótování
Viděli jsme, že některé znaky mají v shellu speciální význam,
například v příkazu mezera, tabulátor, ; nebo &, a ve vzoru
pro cestu *, ? a [ (a nakonec i ~ v použitích výše). Pokud
chceme v příkazu nebo cestě zadat tyto znaky samotné, musíme
jejich speciální význam potlačit a tzv. je
kvótovat. Pro jeden znak před něj stačí dát
\ (jak jsme již viděli ve třetím
cvičení), pro více v řetězci je výhodnější celý řetězec
uzavřít mezi ' (apostrofy) nebo "
(uvozovky), např. echo '* &'. Tyto tři kvótovací znaky je opět potřeba kvótovat
(typicky pomocí \), pokud chceme opět zadat je
samotné. Takových znaků se speciálním významem je v shellu
(GNU Bash) ještě víc,
v příštím, sedmém cvičení, si
jich představíme hned dalších šest, ostatní (obyčejné) znaky
můžeme kvótovat také, ale nemusíme.
Úkol 5:
Vytvořte (v aktuálním adresáři) soubory, např. pomocí programu touch, se jmény
* * * (včetně obou dvojic mezer mezi *) a "1 & 2"
(včetně obou ").
Cvičení 7
V sedmém cvičení zůstaneme u příkazového interpretu, shellu (GNU Bash), a jeho bohatých možností a seznámíme se hlavně s přesměrováním vstupu a výstupu příkazů z a do terminálu a propojováním příkazů pomocí roury (pipe). Ke konci jsou pak představeny ještě základy používání proměnných, "podshellu" a (jednoduché) aritmetiky v shellu.
Příkazový interpret (shell)
Aliasy
Pokud nějaký příkaz, zvláště obsahující více argumentů,
používáme často, může být výhodné si ho celý pojmenovat a pak
ho spouštět zadáním tohoto jména. Tomu se říká alias
a příkaz pro jeho vytvoření je rovněž alias. Jeho
argumenty jsou ve tvaru jméno=příkaz, kde jméno
je jméno vytvářeného (nebo měněného existujícího) aliasu a
příkaz je dobré uvádět celý kvótovaný (obvykle v
'), protože typicky obsahuje mezery jako speciální znak
oddělující název příkazu nebo programu a argumenty,
např. alias lsl='ls -l'. Při použití aliasu jako
(jména) příkazu je mu možné předat další argumenty a v příkazu v definici
aliasu může být jako jméno příkazu použito i jméno již existujícího aliasu,
např. alias lsla='lsl -a', nebo dokonce i stejné
jméno jako je jméno definovaného aliasu. Při potvrzení
("odeslání") příkazu shellu v příkazovém řádku, před jeho
spuštěním, shell vždy
případné aliasy jako jména v příkazu expanduje (nahradí jména za příkazy)
a to opakovaně (rekurzivně, stejné jméno samozřejmě ne), takže např. příkaz
lsla je (po vytvoření aliasů předchozími
uvedenými příkazy)
expandovaný na příkaz ls -l
-a. alias bez argumentu zobrazí všechny
v shellu definované aliasy (ve tvaru definic, s argumenty jen jmény aliasů
zobrazí jen tyto) a pro zrušení aliasu je příkaz unalias
jména. V konfiguračním souboru ~/.bashrc
shellu GNU Bash již bývají (zejména v linuxových
distribucích) nějaké aliasy připraveny, typicky "bezpečné"
cp, mv a rm s
přepínačem -i, což je nutné pro uchování aliasů i
po ukončení aktuálního shellu (ve kterém byly definovány) pro
další shelly v dalších terminálech.
Přesměrování vstupu a výstupu
Pokud shell beží v (emulátoru) terminálu, jsou vstup i výstup
v něm spuštěných příkazů (programů) automaticky "navázány" na terminál,
tj. příkaz může získávat i zobrazovat (textová) data
prostřednictvím terminálu, viz řízení úloh
v přechozím šestém cvičení. Tento vstup a výstup je však možné
přesměrovat (redirect) ze, resp. do souboru,
nebo v případě vstupu i z terminálu, ale se zadáním dat
hromadně při spuštění příkazu nebo jako
součásti příkazu v příkazovém řádku před jeho spuštěním (místo zadávání dat
v terminálu interaktivně až ve chvíli, kdy si je příkaz/program vyžádá). Přesměrování
vstupu příkazu ze souboru provedeme zápisem <
soubor, kde soubor je cesta k souboru,
uvedeným v rámci příkazu (kdekoliv na místě argumentů, ale
typicky na konci příkazu), například cat <
text.txt. Bez argumentu cesty k souboru totiž cat očekává
vstup dodaný uživatelem, klasicky interaktivně skrze terminál,
takto mu ho dodáme rovnou ze souboru (což je rozdíl oproti
tomu, když si cat načte soubor zadaný jako
argument sám). Přesměrování výstupu příkazu do souboru, místo
zobrazení v terminálu, pak provedeme analogickým zápisem
> soubor, například echo Ahoj >
text.txt (ve skutečnosti je platným příkazem i jen
> soubor "bez" příkazu, je to asi nejkratší
příkaz pro vytvoření prázdného souboru). Toto případný obsah existujícího souboru
text.txt celý přepíše, pro přidání výstupu příkazu
za stávající obsah souboru použijeme >> místo
>: echo Ahoj >> text.txt. Tato
přesměrování, vstupu i výstupu, můžeme v jednom příkazu
i použít současně, takže například cat < text.txt >
kopie.txt vlastně vytvoří kopii souboru podobně jako
program cp. Ovšem POZOR, současné přesměrování vstupu i
výstupu nesmí být z a do toho samého souboru! –
výsledkem by bylo jen vymazání obsahu souboru.
Úkol 1:
Uložte výstup programu date do souboru a pak do něj přidejte výpis
všech procesů v systému.
Přesměrování vstupu příkazu z terminálu, ale se zadáním dat
hromadně při spuštění příkazu, provedeme zápisem <<
značka. Po potvrzení příkazu bude shell očekávat
(textová) data zapsaná do terminálu, za prompt >
, i více řádků (ukončených běžně klávesou
Enter), ukončená řádkem obsahujícím pouze řetězec
značka – toto může být jakékoliv slovo
(typicky řetězec písmen, např. obvyklé EOF). Až poté je příkaz spuštěn a zadaná
data jsou mu předána na vstup. A do třetice, k přesměrování
vstupu příkazu "z příkazového řádku", tj. kdy vstupní data
jsou součástí příkazu před jeho spuštěním, slouží zápis
<<< 'vstupní text', například cat <<<
'Ahoj' (apostrofy jsou zde k potlačení speciálního
významu některých znaků, kvótování, typicky mezery).
Úkol 2:
Zapište do souboru, (pouze) pomocí programu cat, text
zadaný na vstupu terminálu a poté ještě přidejte text zapsaný
přímo v příkazovém řádku.
Výstup příkazů (procesů), směrovaný do terminálu,
je ve skutečnosti dvojí: standardní a chybový (vstup je
jediný, standardní). Standardní výstup je používaný pro data,
která jsou výsledkem běžné činnosti příkazu (programu) nebo pro
informování o této činnosti (viz např. tzv. "ukecaný" režim
nejen programů cp, mv, rm), zatímco
chybový výstup slouži k předávání (zobrazování) zpráv o
problémech při této činnosti, nestandardních situacích,
upozorněních, chybách. Přesměrování výstupu výše se týkalo
standardního výstupu, chybový výstup je ale možné z terminálu
do souboru přesměrovat také, použitím 2> místo
jen > (technicky, chybový výstup je
identifikovaný číslem 2, standardní číslem 1). Často se toho
využívá pro "zbavení se" tohoto výstupu z terminálu pryč, ale ne
do konkrétního souboru, nýbrž do "černé díry"
/dev/null, například ls neexistuje 2>
/dev/null. Přesměrovat můžeme i oba výstupy současně, použitím
&>.
Skupina příkazů
Již ze třetího cvičení se základy příkazového řádku a shellu víme, že příkazů můžeme na řádku zadat a nechat jich "naráz" vykonat víc. Jejich oddělením znakem ; (středník) se vykonají postupně za sebou v pořadí zápisu, další po dokončení předchozího. Pokud místo ; použijeme & (amperand), bude každý příkaz před tímto znakem vykonaný na pozadí, viz řízení úloh v předchozím šestém cvičení, což znamená, že jeho vykonávání bude probíhat souběžně s vykonáváním dalšího příkazu za tímto znakem (i poslední příkaz může být zakončený & a být vykonávaný na pozadí). Tyto způsoby vykonávání příkazů můžeme i kombinovat, ovšem s tím, že "& má přednost před ;", tj. nejdříve se (souběžně) vykonají příkazy oddělené & a až po nich další oddělené ;. Pro opačný způsob, tj. vykonání na pozadí více příkazů oddělených ; a vykonávaných postupně, jako "celku", musíme tyto příkazy uzavřít do skupiny, použitím { příkazy; } (POZOR: za { musí být alespoň jedna mezera, nebo přechod na nový řádek, a před } musí být poslední příkaz "potvrzen" ukončením ;, & nebo Enter, tj. přechodem na nový řádek). Přidáním & za skupinu ji pak celou vykonáme na pozadí.
Skupina příkazů se může "hodit" i ve spojení s přesměrováním
výstupu do souboru. Přesměrování se totiž týká každého
příkazu zvlášť a při použití například "na konci" více zadaných příkazů je
tak přesměrovaný výstup pouze posledního příkazu. Pokud ale
příkazy uzavřeme do skupiny a přesměrování výstupu použijeme
na celou skupinu, bude do souboru přesměrovaný výstup všech
příkazů ve skupině, například { echo -n Pocitac:\ ;
hostname; } > pocitac.txt (což je rozdíl oproti
echo -n Pocitac:\ ; hostname >
pocitac.txt). Přesměrováním vstupu pro všechny příkazy
ve skupině se už ale takto udělat nedá, to je aplikováno jen na
první příkaz skupiny.
Roura (pipe)
Když každý příkaz (proces) může získávat data skrze vstup a
poskytovat data skrze výstup a tyto je možné přesměrovat z
terminálu na soubor, pak by jistě bylo užitečné, kdyby výstup jednoho
příkazu mohl být předaný (přesměrovaný) na vstup jiného příkazu "rovnou", bez
souboru jako (dočasného) prostředníka. Tj. bez toho nejdříve
výstup prvního příkazu přesměrováním uložit do souboru a pak
obsah tohoto souboru předat přesměrováním vstupu druhému
příkazu. Přesně k tomuto účelu slouží roura (pipe)!
Zapsáním | (svislítka) mezi příkazy zařídíme
"přímé napojení" (přesměrování) standardního výstupu (prvního) příkazu před | na vstup
(druhého) příkazu za |. Navíc, dle očekávání, budou oba příkazy
vykonávány souběžně jako jeden, co první vyprodukuje na
výstupu, to druhý ihned dostane na vstupu, bez ukládání dat do
nějakého souboru. Například ps aux | less nám
zobrazí výstup ps aux rovnou v programu
less pro interaktivní prohlížení (protože, podobně jako
u cat, pokud programu less není předaná cesta k souboru jako
argument, očekává data na vstupu). Kromě toho prvnímu
příkazu je stále možné přesměrovat vstup (a také chybový
výstup) a druhému výstup (oba), což znamená, že použití roury
můžeme opakovat a takto propojit příkazů více než
dva. Dodejme, že použitím | se "do
roury" přesměrovává standardní výstup prvního příkazu, oba jeho
výstupy (standardní i chybový) současně můžeme přesměrovat
pomocí |&, a také, že všechny znaky
<, >, | a
{ mají speciální význam a pokud chceme zadat
je samotné, musíme je kvótovat.
Úkol 3:
Zobrazte výstup programu date a výpis všech procesů v systému současně v programu less.
Proměnné
Shell podporuje proměnné známé z programovacích
jazyků (ve skutečnosti shell implementuje celý vlastní programovací
jazyk, ale jeho většinu možností rozebírat nebudeme). Jsou
(až na výjimky) automatické, tj. nové není třeba nějak
deklarovat nebo definovat jako v běžných programovacích
jazycích, stačí je rovnou použít uložením hodnoty, a také nejsou žádného partikulárního
(datového) typu, jako hodnotu je do nich možné uložit libovolný obsah,
typicky ale textový. Vedle uživatelských proměnných, jejichž
jméno může být jakýkoliv řetězec z písmen (anglické abecedy), číslic a _ (podtržítka)
nezačínající číslicí, má shell své vlastní předdefinované, se
jmény typicky s velkými písmeny, a speciální,
tzv. parametry, se jmény jeden speciální znak nebo
cifra. Parametry vynecháme, vlastní proměnné shellu jsou např. USER se
jménem uživatele, pod kterým shell běží, HOME s (absolutní) cestou k
domovskému adresáři uživatele, PWD s (absolutní) cestou k
aktuálnímu adresáři v shellu nebo třeba RANDOM s náhodným číslem mezi 0
a 32767, pro mnoho dalších viz manuálovou stránku shellu
(man bash pro GNU Bash). Zmiňme ale ještě
proměnnou PATH, jejíž hodnotou je seznam cest k adresářům,
oddělených : (dvojtečkou), ve kterých shell hledá program ke
spuštění se jménem zadaným jako první slovo příkazu, pokud to není interní
příkaz shellu. Standardně v unixových systémech obsahuje systémové cesty k adresářům
s instalovanými programy, např. /bin a
/usr/bin, ale neobsahuje třeba cestu k aktuálnímu
adresáři (.) – takže pokud si tuto cestu do
seznamu nepřidáme, nelze, narozdíl od programů instalovaných v
systému, spouštět programy z aktuálního adresáře pouze zadáním
jejich jména (ale je nutné zadat cestu k nim,
např. ./). Tuto vlastní proměnnou shellu změnit
lze, ostatní ale většinou ne.
Hodnotu proměnné získáme tak, že před její jméno uvedeme znak
$ (dolar), tzv. expanze proměnné. Můžeme
ji pak použít kdekoliv v rámci příkazu shellu, například
echo $USER. Pro uložení hodnoty do
(uživatelské, i nové) proměnné je příkaz
jméno_proměnné=hodnota, kde hodnota
tedy mohou být jakákoliv data, typicky ale textová. V hodnotě
funguje (je vyhodnocený) speciální význam znaků, takže pro ně
samotné je nutné je kvótovat. A zde je rozdíl mezi kvótováním
uzavřením řetězce, typicky celé hodnoty, mezi ' a
": mezi " má $ speciální
význam, tj. funguje získání hodnoty proměnné, mezi
' ne. Tedy například U="user: $USER"
uloží do proměnné U (správně) text s hodnotou
proměnné USER, narozdíl od (zřejmě nesprávného)
U='user: $USER' (po kterém bude v U
text obsahující řetězec $USER).
Podobně jako mají příkazy a programy (procesy) vstup a výstup,
který je možné z termimálu přesměrovat z/do souboru, mají i
přístup k tzv. proměnným prostředí (běhového), získaným typicky
od rodičovského procesu, ze kterého jsou spuštěny. Rodič ale musí před
spuštěním potomka tyto proměnné pro něj nastavit. V případě
shellu a jeho uživatelských proměnných (svoje vlastní shell
některé takto nastavuje) tyto pro příkazy a programy z něj spuštěné
takto automaticky nastaveny nejsou, tedy proměnné (jejich
hodnoty) nejsou ve
spuštěných příkazech a programech dostupné. Například když spustíme nový
shell ("v shellu"), pro GNU Bash program
bash, tak v něm nebudou proměnné z "nadřazeného"
shellu dostupné. Ale můžeme je takto nastavit, exportovat,
příkazem export proměnná, příp. i rovnou s uložením
hodnoty export proměnná=hodnota (bez argumentu
zobrazí seznam všech exportovaných proměnných), a pak dostupné budou.
Úkol 4:
Přidejte do seznamu cest v proměnné shellu PATH
aktuální adresář (tj. cestu .) a proměnnou exportujte.
"Podshell"
Obráceně to ale nefunguje, proměnné z příkazu nebo programu
(procesu), např. "z shellu v shellu", v shellu (procesu), ze
kterého byly spuštěny, dostupné být nemohou. Toho se využívá
právě u "shellu v shellu" a proto můžeme příkaz (nebo i více
příkazů naráz) nechat vykonat v (automaticky spuštěném) "podshellu", uzavřením do
(), například: (X=A; date +%$X)
– proměnná X bude dostupná pouze v
"podshellu" (a neovlivní případně existující proměnnou
X v "nadřazeném" shellu). Znak ( má
tedty opět speciální význam a pro něj samotný je potřeba ho
kvótovat. Tato konstrukce navíc
umožňuje získat data ze (standardního) výstupu příkazu v "podshellu" celá
jako hodnotu a tu například uložit do proměnné nebo použít
kdekoliv v rámci jiného příkazu shellu! Opět uvedením znaku $
před (), například echo $(date
+%Y). V shellu se tomu říká substituce příkazu.
Aritmetika
Shell (GNU Bash) implementuje i jednoduchou
celočíselnou aritmetiku. Zápis uzavřený mezi (())
(dvojité kulaté závorky, a pouze mezi nimi) se vyhodnocuje jako aritmetický
výraz, např. ((1+2)). V tomto výrazu je možné
používat i proměnné (jejich hodnoty), expanzí proměnné (zápisem s $
před jménem proměné, ale zde i bez něj), a dokonce i
substituci příkazu ($(příkaz))! Hodnota proměnné
nebo výstup příkazu je interpretován jako celé číslo, od začátku
dokud jsou to číslice. Také je zde možné ukládat výsledek
vyhodnocení výrazu do proměnné, například A=2;
((A=$A+3)). Výraz v (()) je ale pouze
vyhodnocen, pro získání výsledku vyhodnocení výrazu (hodnotu)
je potřeba opět použít znak $, tzv. expanzi
aritmetiky: echo $(($A*2)). Mezi podporovanými
operacemi v aritmetickém výrazu jsou třeba sčítání (operátor
+) a odčítání (-), násobení
(*) a
dělení (celočíselné, /), zbytek po celočíselném
dělení (%),
umocňování (**) nebo logické (!, &&, ||)
a srovnávací (==, !=, <, >) operace, další již nalezneme v
manuálové stránce man bash.
Úkol 5:
Zobrazte, s využitím programu date (a jeho manuálové
stránky, konkrétně pak i přepínače -d 12/24), počet dní
zbývajících do Štědrého dne (24. 12.) aktuálního roku.
Tímto náhled na možnosti shellu ukončíme. Další z jeho bohatého repertoáru programovacího jazyka, například podmínky (kdy podmínkou je příkaz), cykly, funkce a uložení kódu do souboru (skriptu), nebo široké možnosti expanze proměnných a parametrů (funkcí a skriptů), proměnné typu pole, pokročilejší možnosti řízení úloh a správy historie příkazů nebo samotného příkazového řádku ponecháme zájemcům; manuálová stránka shellu je velmi cenným zdrojem informací.
Cvičení 8
Úkol 1:
Změňte kódování textu na vstupu z UTF-8 na cp1250, používaném na MS
Windows, včetně správných konců řádků (na unixových systémech
a MS Windows), a opačně.
– Úkol 2:
Vytvořte v textových editorech vim (vi),
emacs (jed) a nano (pico) tabulku
s několika řádky a sloupci (oddělenými
např. tabulátorem) a
vyzkoušejte si operace mazání znaků, slov, částí řádku, více
řádků, kopírování a
vložení částí řádku a několika řádků, undo a redo,
vyhledání a náhrady řetězce za
jiný a práci s více soubory a okny (otevření, zavření/uložení, přepínání).
– Úkol 3:
Vyzkoušejte (v příkazové řádce) klávesu C-x C-e a příkaz fc
(včetně vyvolání příkazu začínajícího nějakým řetězcem).
Cvičení 9
Úkol 1:
Zobrazte očíslované řádky vstupu od 10. do 20. řádku včetně v
opačném pořadí řádků.
Úkol 2:
Setřiďte (tabulkový) výstup programu df podle volného
místa (čtvrtý sloupec) číselně sestupně.
Úkol 3:
Setřiďte výstup programu history podle příkazu, s odstraněním
duplicitních příkazů (čísla příkazů ponechat).
Úkol 4:
Pomocí programů cut a paste prohoďte v
tabulkovém vstupu (více než dva sloupce oddělené např. tabulátorem)
první a druhý sloupec.
Úkol 5:
Zobrazte počet skupin, do kterých (váš
) uživatel patří.
Úkol 6:
Zobrazte na jednom řádku seznam všech uživatelů, pod kterými běží v
systému alespoň jeden proces.
Cvičení 10
Úkol 1:
V textových editorech vim (vi),
emacs (jed) a nano (pico) vyhledejte na základě
regulárního výrazu čísla, i necelá s případně
desetinnou čárkou a necelou částí, následovaná mezerami a jednotkou B, kB, MB, GB nebo TB.
Úkol 2:
Změňte velikosti všech písmen na vstupu z malých na velká.
Úkol 3:
Zobrazte pouze řádky souboru, které nejsou v jiném souboru, tj.
rozdíl
souborů (jako rozdíl množin).
Úkol 4:
Zobrazte pouze řádky vstupu obsahující číslo zapsané v šestnáctkové
soustavě začínající 0x (s malými i velkými písmeny).
Úkol 5:
Zobrazte seznam pouze souborů a adresářů s letošním datem modifikace.
Úkol 6:
Zobrazte pouze řádky vstupu, které neobsahují dvě stejná čísla.
Cvičení 11
Úkol 1:
Odstraňte ze vstupu mezery na koncích řádků.
Úkol 2:
Zobrazte ze vstupu pouze všechna čísla, i necelá s případně
desetinnou čárkou a necelou částí, každé na
samostatný řádek.
Úkol 3:
Pomocí programu sed prohoďte v tabulkovém vstupu (více
než dva sloupce oddělené např. tabulátorem)
první a druhý sloupec.
Úkol 4:
Zobrazte ze vstupu, ve kterém některé řádky představují
nadpisy uvozené číslováním 1., 1.1, 1.1.1 atd., pouze tyto
nadpisy, bez číslování a ve stromové
struktuře -- odsazením levého okraje podnadpisů od levého okraje
nadřazeného nadpisu mezerou.
Cvičení 12
Úkol 1:
Pomocí programu awk zobrazte z tabulkového vstupu (sloupce oddělené např. tabulátorem)
pouze dva sloupce specifikované v proměnných předaných awk
při jeho spuštění.
Úkol 2:
Zobrazte, ze souboru /etc/passwd, seznam
uživatelů ve tvaru login tabulátor plné jméno uživatele.
Úkol 3:
Z čísel ve sloupci v tabulkovém vstupu (sloupce oddělené
např. tabulátorem) spočítejte jejich průměr.
Úkol 4:
Zobrazte ze vstupu obsahujícího (i vnořené) bloky textu začínající řádkem obsahujícím pouze slovo START
a končící řádkem obsahujícím pouze slovo END pouze text bloků první úrovně (tj. není
mimo bloky ani ve vnořených blocích).