Michael Niedermair, Joachim Wolf Städtische Berufsschule für Informationstechnik http://www.bsinfo.musin.de/
Zdroje, materiály, obrázky, podpora, …
Sazba německé verze Překlad Odborná korektura Jazyková korektura Grafická úprava Sazba Spolupráce na vydání Licence
Markus Kohm Elke Niedermair Michael Niedermair Axel Stiegelbauer Dominik Wagenfuehr Joachim Wolf LPI (Linux Professional Institute) Volné zdroje (viz použitá literatura) Michael Niedermair Vlastimil Ott Robert Krátký Dana Baierová Michal Hlavatý Pavel Stříž Liberix, o.p.s., http://www.liberix.cz/ Volně použitelné pro nekomerční využití ve veřejných školách. Jiné licenční podmínky možné po dohodě.
Rejstříky Programy / Příkazy Adresáře / Soubory Osoby . . . . . . . . Termíny a výrazy .
6
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
167 167 169 170 171
Úvod Toto skriptum slouží zájemcům pro seznámení s linuxovými operačními systémy. Jedná se o adaptaci německé publikace, kterou vydala Městská odborná škola pro informační techniku v Mnichově (Städtische Berufsschule für Informationstechnik). Cílem je připravit čtenáře na zkoušku LPI Linux Essentials tak, aby ji absolvovali s co nejlepším výsledkem. Základní znalosti a dovednosti nutné pro zaměstnání v IT oborech jsou vyučovány v běžných hodinách informatiky. V lepším případě jsou do nich zahrnuty také základy práce s linuxovým operačním systémem. Obsah skripta najdete na straně 155. Linux Essentials se zaměřuje především na žáky a zájemce, jejichž konkurenční výhoda nespočívá v technických dovednostech. Samozřejmě sem patří také ti zájemci, kteří se chtějí naučit pracovat s linuxovým systémem. K dispozici jsou všeobecné informace a cvičení, stejně jako cvičení, která se opírají o konkrétní scénáře. Skriptum je rozděleno do více oblastí – bloků a lekcí. Každý blok odpovídá zhruba čtyřem výukovým hodinám, je však také potřeba připočítat přípravu a domácí úkoly. Obojí je nezbytné pro přípravu na interní testy a hlavně závěrečnou certifikační zkoušku. Každá lekce je ukončená otázkami, takže znalosti získané v lekce lze shrnout a procvičit. Úroveň odpovídá úrovni středoškolského učiva informatiky a v některých oblastech přesahuje úroveň požadovanou zkouškou LPI. Navíc je přidáno několik témat, která látku ozvláštňují.
Program kurzu Každý kurz je připravený tak, že účastník má během roku absolvovat několik testů, jejichž výsledky jsou pak shrnuty v potvrzení o jejich absolvování. Nakonec je možné složit certifikační zkoušku LPI. Na začátku každé lekce (viz tabulka 1 na následující straně) se uchazeči seznámí s krátkým shrnutím obsahu. Potom mají čas lekci zpracovat, odpovědět na otázky a sami u počítače vyřešit úlohy. Krátce před koncem lekce se píše krátký test (max. na 10 minut), který obsahuje otázky k předchozímu tématu. Otázky jsou postaveny tak jako samotná zkouška LPI. Desátá lekce“ je speciální rychlokurz k přípravě na zkoušku. Během něj účastník zpracuje odpovědi na vybrané zku” šební otázky a bude je prezentovat. Otázky svým zadáním odpovídají certifikační zkoušce LPI, ale nejedná se o skutečné zkušební otázky. Zadání si účastník losuje náhodně.
7
OBSAH
Lekce
Datum
1 2 3 4 5 6 7 8 9 10 11
Téma / Obsah
Test
Úvod, podklady Lekce I – První kroky s Linuxem Lekce II – Práce s uživateli a oprávněními Lekce III – Skripty ulehčují práci Lekce IV – Zpracování obrázků z USB disku Lekce V – Práce v síti Lekce VI – Archivování a komprimace dat Lekce VII – Vytváření webových stránek pro obrázky Lekce VIII – OSS Gimp & LibreOffice (volitelné) Rychlokurz k přípravě na zkoušku Zkouška LPI Linux Essentials
— — Test k I Test k II Test k III Test k IV Test k V Test k VI Test k VII — —
Obrázek 1: Časový harmonogram
Vysvětlivky Příkazy
Příklady obsahují ve vztahu ke spouštění příkazů následující princip: Je-li příkaz zadán přímo, může ho spustit každý uživatel. Pokud se před příkazem nachází sudo, jsou pro spuštění nutná práva administrátora (uživatele root).
Příklady skriptů U některých ukázkových skriptů naleznete vedle samotného kódu také jeho výsledný výpis z konzole. Klávesy
Klávesové zkratky jsou zvýrazněné speciálním fontem, např. Enter. Zapsané jsou také klávesové kombinace, např. Ctrl+Alt+Enter.
Distribuce Pro tuto příručku byla použita distribuce Ubuntu 12.04 LTS.1 Tento systém můžete používat na mnoha místech. • Ve škole v učebnách informatiky, v knihovně, na chodbách a na všech dalších počítačích. Může být nainstalován současně s jinými operačními systémy (včetně Windows). • Doma pomocí tzv. live CD nebo USB disku, viz http://www.ubuntu.com/download/desktop a http://www. ubuntu.cz/ziskejte/stahnout. • Doma na své vlastní instalaci, viz http://www.ubuntu.com/download/help/install-ubuntu-desktop, resp. http://wiki.ubuntu.cz/Instalace/Průvodce%20instalací?redirect=1. • Ve VirtualBoxu na vlastním počítači: – pomocí obrazu pro VirtualBox z webu http://virtualboxes.org/images/ubuntu/, viz http://virtualboximages.com/Ubuntu+12.04+i386+Desktop+VirtualBox+VDI+Virtual+Computer,
– vytvořením vlastního obrazu, viz http://www.abclinuxu.cz/clanky/zaciname-s-virtualboxemvytvoreni-virtualniho-pocitace-a-disku.
Materiály Pro volitelný předmět se používají následující materiály. Příručka Linux Essential Jde o tento text. Aktuální verze je k dispozici ke stažení, informace v tiráži. Úvodní prezentace
Slouží k uvedení do problematiky kurzu.
Prezentace lekcí
Před každou lekcí se prezentuje její obsah.
Vědomostní test
Po některých kapitolách následuje vědomostní test, jednak k sebehodnocení, jednak k vytvoření základu pro pozdější hodnocení. Test zahrnuje jen otázky ze zadané oblasti a trvá zhruba 10 minut.
Ukázkové skripty
Pomocí copy & paste“ je můžete zkopírovat z textu. ”
1 Při
8
překladu jsme příklady ověřovali na Ubuntu 14.04 a v Debian GNU/Linuxu Wheezy, pozn. překl.
OBSAH
Scénář
Třídy IT11FS, IT11FA a IT11SE si uspořádaly na konci roku školní výlet do Berlína. Zúčastnilo se ho cca 70 žáků, jako učitelský dozor byli přítomni Viola Lorenzová a Lars Greiner. Žáci měli za úkol v různých skupinách mimo jiné: • nakopírovat fotky z každého datového média do třídního adresáře, • chronologicky je seřadit a odpovídajícím způsobem pojmenovat, • převést do různých formátů, • vytvořit jejich náhledy, • vytvořit přehledné webové stránky, • data zálohovat.
9
OBSAH
10
Kapitola 1
Lekce I – První kroky s Linuxem V této lekci poznáte Linux, jeho historii, různé distribuce a naučíte se základní kroky v terminálu. Pochopíte, jak se pracuje s příkazy, jak lze zobrazit obsah adresářů a jak se pohybovat v jejich struktuře. Následně si adresáře založíte, budete kopírovat, přesunovat a mazat soubory. Potom si na ploše vytvoříte ikonu pro spuštění terminálu (v našem případě v prostředí Unity systému Ubuntu). Důležité: Poznačte si ve všech cvičeních příkazy, abyste si je při opakování dokázali rychle vybavit. Pokud vám bude něco nejasné, připravte si vhodné otázky.
Linux je moderní víceuživatelský a víceúlohový operační systém. Víceuživatelský znamená, že v jednom okamžiku v něm může pracovat více uživatelů. Víceúlohový (angl. multitask) znamená, v jedné chvíli může v systému běžet více programů (úloh). Obě vlastnosti má Linux díky svému původu souvisejícímu s Unixem.
1.1.1
Historie Unixu
Vývoj Unixu začal koncem 60. let 20. století. Počítače této doby byly velké stroje, které zabíraly celé místnosti nebo dokonce budovy. Ovládaly se prostřednictvím terminálů a ani náznakem nedosahovaly výpočetního výkonu dnešních počítačů.1 Tyto terminály byly jednoduché přístroje s klávesnicí a obrazovkou, které předávaly počítači vše, co bylo zadáno z klávesnice, a zobrazovaly vše, co z počítače přicházelo. Postupem času se tento koncept vyvinul do komunikace typu klient-server. Tento model funguje tak, že úkoly klientského počítače (obvykle jde o stolní počítač) jsou v rámci lokální sítě směřovány na server. Bývají to typicky souborové a adresářové služby, tiskové služby nebo dotazy do databáze. Nejdůležitější události ve vývoji UNIXu byly: 1969 Ken Thompson vyvinul hru (Space Travel), kterou přenesl na počítač DEC-PDP/7. K tomu musel být vytvořen malý víceúlohový systém. Společně s Dennisem Ritchiem2 vyvinuli hierarchický souborový systém, správu paměti s velikostí 4 KWord (4096×18 bitů), správu procesů a časovač. Díky tomu mohl být systém v jeden okamžik využíván dvěma uživateli. Brian Kernighan to popsal jako UNICS (Uniplexed Information and Computing System). Později z toho vznikl název Unix; není to tedy zkratka, nýbrž jméno. 1972 Operační systém byl kompletně přepsán v programovacím jazyku C a distribuován společně s kompilátorem. 1977 Kalifornská univerzita v Berkeley vyvinula Berkeley Software Distribution (BSD), derivát Unixu, který byl zveřejněn pouze za cenu datového nosiče s povolením upravovat zdrojový text. 1980 Unix (a deriváty Unixu) se stal dominujícím operačním systémem na univerzitách. 1983 Vzniká projekt GNU (GNU: Gnu is Not Unix – GNU není Unix) s cílem vytvořit kompletně svobodnou alternativu k Unixu s licencí GNU General Public License (GPL). 1991 Linus Torvalds začíná s vývojem Linuxu, derivátem Unixu. …
1.1.2
Historie Linuxu
V roce 1991 začal Linus Torvalds v Helsinkách s vývojem emulátoru terminálu, který se postupně rozvinul do podoby operačního systému (zveřejněn byl v září). Tehdejší správce FTP serveru Ari Lemmke nebyl spokojen s Torvaldsovými názvy Freax nebo Buggix a software zveřejnil v adresáři s názvem Linux. V lednu 1992 získal Linux licenci GNU GPL3 , což znamenalo, že mohl být začleněn do projektu GNU. Linux tím začal být ještě zajímavější pro mnoho vývojářů, protože se z něj stal jeden z prvních volně dostupných operačních systémů (nejprve pro platformu x86 a později také pro další platformy), což bylo podporováno možností jej upravovat.4 V roce 1996 oznámil Torvalds, že by pro Linux rád měl jako maskota tučňáka a uspořádal proto soutěž. Jako její výsledek byl prezentován Tux.
1.1.3
Distribuce
Linuxová distribuce je souhrn softwarových balíků, které jsou potřebné pro provoz linuxového systému. Existuje velké množství distribucí, přičemž každá z nich má nějaký odlišný záměr. Pro certifikaci LinuxEssentials je lhostejné, kterou distribuci použijete, protože základy jsou u všech systémů stejné. Nejpoužívanější distribuce jsou následující: • • • • • •
Debian GNU/Linux Ubuntu Fedora OpenSuSE Linux Mint Mageia
• • • •
Slackware Arch Linux Knoppix a další
1 Dnešní superpočítače také zabírají místnosti nebo budovy, ale z hlediska výpočetního výkonu jsou nesrovnatelně výkonnější než superpočítače před desítkami let. 2 Dennis MacAlistair Ritchie (* 9. září 1941 v Bronxville, New York; † 12. října 2011 v Berkeley Heights, New Jersey) byl americký softwarový vývojář. Ve spolupráci s Kenem Thompsonem Ken Thompson a Brianem Kernighanem vyvinul nejen UNICS, nýbrž také programovací jazyk C. 3 GNU General Public License je jedna z licencí Free Software Foundation (FSF), která se používá pro licencování svobodného softwaru copyleftem a má kořeny v projektu GNU. 4 Už v roce 1990 existovala první verze 0.1 systému MiNT, operačního systému pro Atari-ST, jehož zdrojové kódy byly vydány s GPL.
12
1.1. LINUX
Obrázek 1.1: Maskot Linuxu Tux Pro cvičení používáme distribuci Ubuntu s pracovním prostředím Unity. Obrázek 1.2 zobrazuje schéma s uvedením některých distribucí. GNU/Linux
Fedora
Open SuSE
Slackware
Red Hat
Debian
Knoppix
CentOS
Edubuntu
Gentoo
Mageia
Ubuntu
Kubuntu
Xubuntu
Linux Mint
Obrázek 1.2: Distribuce (výběr)
Správa životního cyklu distribuce U linuxových programů a distribucí rozlišujeme různé verze. alfa verze Alfa verze je určena vývojářům k testování. Nezkušení uživatelé by se k ní neměli vůbec přiblížit. beta verze Beta verze ještě obsahuje chyby, ale také nové funkce. Pokud nejde o produkční systém, můžete vyzkoušet, jaké nové funkce jsou k dispozici a tak podpořit vývojáře. testing
Verze, která se ještě nachází ve fází testování (jako beta verze), ale je těsně před zveřejněním.
unstable
Nestabilní verze, na níž se vyvíjí. Jednou z ní bude verze alfa nebo testing.
stable
Stabilní verze se považuje za bezchybnou. Může být bez problémů nasazena na produkční systém.
LTS
Normální verze distribucí mají maximální předpokládanou délku životního cyklu jeden až dva roky (Ubuntu 18 měsíců). Potom pro ně už nejsou vydávány aktualizace, opravy nebo poskytována podpora. Jako protiklad existují LTS verze (Long Term Support), v případě Ubuntu jde o pětiletou podporu.
1.1.4
Nasazení
Linux našel uplatnění v mnoha oblastech – ať už jde o desktop, serverové systémy nebo oblast embedded zařízení.
13
LEKCE I – PRVNÍ KROKY S LINUXEM
Stolní počítače – desktopy Operační systém typu Linux lze na stolní (desktopový) počítač nebo notebook nainstalovat jako jediný nebo vedle již existujících systémů (jako Windows). Používají se pracovní prostředí Unity, Gnome, KDE nebo Xfce, LXDE a další … Instalaci systému lze realizovat podle osobních požadavků, vybírat si přitom můžete z tisícovek volně dostupných programů, často existují předpřipravené sady programů pro konkrétní oblast (zpracování textu, výpočty, zpracování videa a fotografií, hry, vědecké aplikace a další …). Tato oblast je pokryta certifikací LinuxEssentials. Obrázek 1.3 zobrazuje Ubuntu 14.04 s Unity.
Obrázek 1.3: Ubuntu 14.04 a Unity
Servery Díky kompatibilitě s jinými unixovými systémy se Linux bleskurychle zabydlel v serverové oblasti, takže aplikace běžící na serveru byly brzy k dispozici, a to bezplatně. Jde především o webový server, databázový server, poštovní server, souborový server nebo groupware. K rozšíření Linuxu do serveroven přispěla také jeho stabilita a snadná obsluha. Díky modulárnosti je možné provozovat jak kompaktní dedikované servery, tak kompletní clusterová5 nebo cloudová řešení.6 Také v oblasti virtualizace (např. používání dalšího operačního systému v rámci spuštěné aplikace VirtualBox7 ) si Linux udělal dobré jméno. Obrázek 1.4 zobrazuje začátek seznamu TOP500 nejrychlejších počítačových systémů, mezi nimi zaujímá Linux více než 82 % (pokud připočteme všechny konkrétní linuxové systémy).
Obrázek 1.4: Seznam TOP500 nejrychlejších počítačů8 5 Počítačový cluster ([klastr]) označuje skupinu propojených počítačů, které navenek vypadají jako počítač jeden. Pokud některý z počítačů přestane fungovat, ostatní si rozdělí jeho práci, aniž by to bylo zvenku patrné. 6 Pojem cloud computing zahrnuje možnost získat a používat výpočetní nebo přenosovou kapacitu, úložný prostor nebo aplikace prostřednictvím datové sítě, a to podle aktuální potřeby. 7 Viz http://www.virtualbox.org 8 Zdroj: http://top500.org, citováno 16. srpna 2014.
14
1.1. LINUX
Embedded zařízení Jako embedded (vestavěná) linuxová zařízení se označují takové přístroje, které fungují díky operačnímu systému s jádrem Linux. Patří mezi ně přijímače HDTV, přehrávače DVD, routery, firewallové systémy, průmyslové počítače a mnoho dalších. Na obrázku 1.5 vidíte DSL router Linksys s linuxovým operačním systémem (jde o DD-WRT – viz http://www. dd-wrt.com).
Obrázek 1.5: Router Linksys s DD-WRT Linuxem
Chytré telefony & tablety Pro chytré telefony a tablety (viz obrázek 1.6 a 1.7) existuje speciální linuxový systém Android, který disponuje mnoha funkcemi nejen pro ovládání telefonu a posílání zpráv, nýbrž také pro zábavu, navigaci nebo správu osobních informací. Zařízení se ovládá pomocí vícedotykového displeje.
Obrázek 1.6: Chytrý telefon HTC
1.1.5
Obrázek 1.7: Tablet Samsung Galaxy
Důležité open-source aplikace
Ke klíčovým programům lze zařadit následující: Apache OpenOffice Svobodný kancelářský balík, který je tvořen několika programy. Patří sem např. aplikace pro zpracování textu, tabulkový kalkulátor, nástroj pro prezentace a vektorový editor. Balík OpenOffice.org vznikl na základě softwaru StarOffice v roce 2000 a byl vyvíjen společností Sun. Ta byla koupena společností Oracle a vývoj balíku přešel pod neziskovou společnost Apache Software Foundation. LibreOffice
LibreOffice vznikl v září 2010 na základě tehdejšího OpenOffice.org, protože mnoho vývojářů nebylo spokojeno s přístupem společnosti Oracle. Vývoj zajišťuje nezisková společnost The Document Foundation. Jednoduše řečeno je cílem nadace vývoj palety produktivních open-source ná”
15
LEKCE I – PRVNÍ KROKY S LINUXEM
strojů nové generace, a to s podporou trvalé, nezávislé a rozsáhlé komunity a na základě otevřených standardů.“ 9 Thunderbird
Mozilla Thunderbird je program pro práci s e-maily, RSS kanály a chatem.
Firefox
Mozilla Firefox je svobodný webový prohlížeč.
Blender
Blender je grafický program pro vytváření 3D modelů, například lidského těla (a to včetně textur a animací).
Gimp
GIMP (GNU Image Manipulation Program) je svobodný grafický bitmapový editor, používá se také na úpravu fotek.
Audacity
Audacity je svobodný editor zvuku a střižna.
ImageMagick
ImageMagick je sada programů pro zpracování a úpravu bitmapové grafiky (zejména z příkazové řádky a skriptů).
Apache
Webový server Apache patří mezi nejpoužívanější software na internetu.
MySQL
Relační databázový systém, je k dispozici jako open source i jako komerční nesvobodná verze, a to pro různé operační systémy.
PostgreSQL
PostgreSQL je svobodný objektově-relační databázový systém (ORDBMS).
NFS
Network File System je síťový protokol vyvinutý společností Sun Microsystems, který slouží pro síťový přístup k datům. Pro Windows existují ovladače, takže i z těchto systémů se lze připojit k linuxovému serveru prostřednictvím NFS.
Samba
Samba je svobodná implementace protokolu Server Message Block (SMB) pro unixové systémy. Zpřístupňuje data a tiskové služby z windowsových serverů. Protokol SMB se označuje také jako Common Internet File System (CIFS), LAN Manager nebo NetBIOS. Prostřednictvím Samby může systém Windows bez dalších ovladačů přistupovat na linuxové servery a ukládat na ně data.
OpenLDAP
OpenLDAP je implementace protokolu LDAP, která umožňuje centrálně spravovat profily uživatelů.
Postfix
Postfix je poštovní server (přesněji Mail Transfer Agent, MTA).
1.1.6
Významné open-source programovací jazyky
K důležitým programovacím jazykům v Linuxu (ale lze je samozřejmě používat také ve Windows) patří: C
Jazyk C je procedurální 10 programovací jazyk, vyvinul ho Dennis Ritchie na začátku sedmdesátých let 20. století v Bellových laboratořích. Právě v céčku“ vznikl operační systém Unix. ”
C++
C++ je programovací jazyk vyšší (tj. nikoliv systémové) úrovně – je objektově orientovaný, generický a procedurální. Vytvořil jej v roce 1979 Bjarne Stroustrup jako rozšíření jazyka C.
Perl
Perl je multiplatformní interpretovaný programovací skriptovací jazyk, který vytvořil Larry Wall v roce 1987. Předlohou mu byl jazyk C, program awk a unixové příkazy. Původně byl Perl zamýšlen k rychlému a efektivnímu zpracování textových souborů, zejména při správě operačního systému.
Python Python je interpretovaný, objektově orientovaný, funkcionální a široce využitelný programovací jazyk. Jeho velkou výhodou je dobrá čitelnost kódu, a proto se hodí pro začátečníky. PHP
PHP je skriptovací jazyk, v němž se vytvářejí dynamické webové stránky a aplikace.
Java
Java je univerzální objektově orientovaný programovací jazyk, který našel uplatnění v mnoha oblastech (na desktopech, serverech i v mobilních zařízeních).
9 Volně
10 Při
16
podle The Document Foundation: CommunityByLaws. procedurálním programování se program vyvíjí tak, že se ve zdrojovém kódu zadávají příkazy, které počítač postupně vykonává.
1.2. TERMINÁL A KONZOLE, PRVNÍ KROKY V PŘÍKAZOVÉ ŘÁDCE
1.2
Terminál a konzole, první kroky v příkazové řádce
Linux uživateli nabízí dvě možnosti ovládání: • Grafické prostředí. Funkce prostředí se aktivují převážně myší. • Konzoli, resp. terminál. Zde se funkce spouštějí napsáním příkazů pomocí klávesnice. Tomuto tématu se nyní budeme věnovat.
1.2.1
Jak spustit konzoli, resp. terminál
Pokud používáte aktuální verzi distribuce Ubuntu, pak pracujete v prostředí Unity. Vyvinula ho firma Canonical a používá se na klasických stolních a přenosných počítačích. S místem na obrazovce zachází úsporně. Na levém okraji obrazovky vidíte lištu, pomocí níž lze spustit různé programy, které často používáte. Říká se jí Launcher [lónčr]. Tlačítko nahoře (Dash [deš]) reprezentuje hlavní nabídku Unity, v níž najdete všechny programy (viz obrázek 1.9). Můžete se proklikat různými kategoriemi, nebo napsat jméno programu a pak ho spustit. Jakmile program běží, jeho ikonu najdete na postranní liště.
Obrázek 1.8: Odebrat tlačítko z postranní lišty Když na ikonu kliknete pravým tlačítkem myši, zobrazí se kontextová nabídka, v níž lze ikonu z lišty odebrat (viz obrázek 1.8).
Obrázek 1.9: Hlavní nabídka Unity – výběr a spouštění programů Pro práci s konzolí nabízí Linux více možností, například: Konsole
X-Terminal, balík: konsole Konsole je terminálový program vytvořený pro prostředí KDE. Umožňuje otevřít v jednom okně více terminálových sezení. V nabídce najdete mnoho různých voleb pro snadnou práci.
Terminál GNOME Terminal, balík: gnome-terminal Terminál je program určený do prostředí Gnome. Také dokáže spravovat v jednom okně více sezení a nabízí podobné funkce jako Konsole.
17
LEKCE I – PRVNÍ KROKY S LINUXEM
Xterm
X-Terminal, balík: xterm Xterm je velmi jednoduchý terminál, který není určen pro žádné konkrétní prostředí. Funguje ve všech pracovních prostředích grafického režimu X Window.
Který terminálový program použijete, je s ohledem na další cvičení lhostejné. Náš favorit je Terminál“. Všechny mají ” jedno společné – spouštějí standardní shell. Tím bývá ve většině distribucí bash.
Jak nainstalovat chybějící softwarové balíky Pokud není nainstalovaný nějaký balík, můžete to snadno napravit. Spusťte si nějaký terminál (xterm, konsole či jiný) a zadejte do něj následující příkaz, pokud chcete nainstalovat například GNOME Terminal: sudo apt-get install gnome-terminal
Může se stát, že vás systém požádá o heslo. Program sudo zajistí, že program následující na řádku za ním bude spuštěn s právy roota (administrátora). Pouze root totiž může instalovat do systému nové programy. Program apt-get nainstaluje (akce install) do systému balík, jehož název je uveden dále. Samozřejmě můžete nové programy (balíky) instalovat v grafickém programu synaptic, nikoliv jen v terminálu. Cvičení: 1. Spusťte ve svém grafickém prostředí terminál podle svého gusta a nainstalujte balík kterm, což je vícejazyčný terminálový emulátor pro grafický režim.
2. Nainstalujte si balík synaptic, pokud nebyl nainstalován automaticky, a spusťte ho pomocí synaptic. S jeho pomocí nainstalujte terminálový správce souborů Midnight Commander (balík mc).
1.2.2
Co je to shell?
Shell (angl. schránka) je program, který vykonává zadané příkazy a komunikuje s uživatelem. Kdykoliv uvádíme shell“, ” máme na mysli emulátor terminálu. V různých systémech existují různé shelly: DOS/WIN9x command.com Windows
cmd.exe
Linux/UNIX bash, dash, sh, csh, zsh, ash atd. Shell se zobrazuje v terminálovém programu v podobě příkazové řádky, převádí uživatelem zadané příkazy na odpovídající systémové akce, spouští systémové programy a zobrazuje uživateli informace, které takto spuštěné programy a operační systém vytvářejí. Nápovědu k shellu bash, který používáme, si zobrazíte takto:
18
1.2. TERMINÁL A KONZOLE, PRVNÍ KROKY V PŘÍKAZOVÉ ŘÁDCE
Obrázek 1.10: Shell jako schránka • help Enter • help
Enter • man bash Enter Důležité vlastnosti shellu Bash • • • • • • •
Doplňování příkazů a parametrů pomocí klávesy Tab.11 Historie (paměť příkazů). Zadávání jmen souborů pomocí zástupných znaků – wildcards (více k tématu na straně 26). Přesměrování vstupu a výstupu programů (více k tématu na straně 66). Propojení vstupu a výstupu více programů (více k tématu na straně 67). Editor příkazové řádky (více k tématu na straně 37). Výkonný skriptovací jazyk (více k tématu na straně 64).
Historie shellu Bash Bash ukládá naposledy spuštěné příkazy a jejich parametry do historie (do souboru ~/.bash_history). Pomocí klávesy ↑ zobrazíte naposledy zadaný příkaz. Pokud klávesu stisknete víckrát, procházíte seznam příkazů do historie, klávesou ↓ zase zpět. Pomocí Ctrl+r můžete seznam dříve vložených příkazů prohledávat. Počet příkazů, které se mají ukládat do historie, se nastavuje pomocí proměnné HISTSIZE. Jakmile je seznam plný, nejstarší záznam se přemaže. Po odhlášení uživatele je seznam uložen do souboru ~/.bash_history. Pokud byste chtěli jméno souboru změnit, pak ho nastavte pomocí proměnné HISTFILE. Nejdůležitější parametry příkazu history jsou tyto: -n
Přiřadí nové záznamy ze souboru do historie v paměti.
-r
Přiřadí všechny záznamy ze souboru do historie v paměti.
-a
Zapíše aktuální záznamy historie v paměti do souboru.
-w
Zapíše všechny záznamy historie v paměti do souboru.
-c
Smaže kompletní seznam v paměti. Je to důležité zejména pro roota a také pro případ, že se v shellu zadávaly příkazy s heslem. Hesla se totiž také ukládají do historie, což může představovat bezpečnostní problém. Mnozí správci tedy ukládají do souboru ~/.bash_logout, který se spouští při odhlášení, následující řádky: # Vyčistit konzoli [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q # Smazat historii history -c # Nastavit velikost na nulu (a~tedy smazat obsah) > ~/.bash_history
11 Pokud zadáte první písmena příkazu nebo názvu souboru a stisknete Tab, Bash se pokusí zadání doplnit. Pokud stisknete Tab dvakrát, zobrazí se nabídka všech možností.
19
LEKCE I – PRVNÍ KROKY S LINUXEM
Zobrazit obsah proměnné Příkazem echo můžete v konzoli zobrazit libovolný text. Pokud obsahuje názvy nějakých proměnných, pak je Bash nahradí jejich obsahem. echo Proměnná HISTSIZE=$HISTSIZE Proměnná HISTSIZE=1000 Zadáte-li přepínač -n, pak se po vypsání obsahu
proměnné nevloží znak pro ukončení řádky.
Klávesové zkratky Bash shellu Časté klávesové zkratky pro práci v shellu: Ctrl+a Skočí na začátek textu v příkazové řádce. Ctrl+e Skočí na konec textu v příkazové řádce. Esc+b
Skočí na předchozí slovo.
Esc+f
Skočí na následující slovo.
Ctrl+b Skočí na předchozí znak. Ctrl+f Skočí na následující znak. Ctrl+k Smaže všechny znaky od kurzoru do konce řádku. Ctrl+u Smaže všechny znaky od kurzoru do začátku řádku. Ctrl+w Smaže slovo vlevo od kurzoru. Ctrl+t Prohodí znaky před kurzorem a za ním. Esc+t
Prohodí slova před kurzorem a za ním.
Ctrl+l Vymaže obsah terminálového okna. Ctrl+s Zastaví výpis obsahu v okně. Ctrl+q Opět spustí výpis obsahu v okně. Ctrl+c Přerušení běhu programu. Příkazy alias Používáte-li často určité programy s konkrétními parametry, bude pro vás přínosem vytvořením aliasu. Pomocí následujícího příkazu si vytvoříte nový příkaz“ (alias), který vás přesune v adresářové struktuře o úroveň výše. ” alias ..='cd ..'
Alias lze opět zrušit příkazem unalias. Některé aliasy jsou definovány už v základním nastavení systému. alias alias alias alias alias alias alias alias alias
Téměř všechny příkazy obsahují krátkou nápovědu ke svým argumentům a volbám. Zobrazíte ji následovně: příkaz --help nebo příkaz -?
Bohaté informace obsahují manuálové stránky. Pomocí příkazu man příkaz (např. man less) zobrazíte manuálovou stránku konkrétního příkazu, zde less. V manuálové stránce se pohybujete pomocí kurzorových šipek a dalších běžných kláves. V textu můžete vyhledávat pomocí klávesy / a zadáním hledaného výrazu. Mezi jednotlivými nalezenými výskyty se pohybujete pomocí n (vpřed) a N (vzad). Manuálové stránky ukončíte klávesou q.12 12 Máte-li nainstalovaný balík manpages-cs, pak bude určitá část manuálových stránek v češtině. Bohužel byl z mnoha distribucí vyřazen pro svou zastaralost. Pozn. překl.
20
1.3. NÁPOVĚDA K PŘÍKAZŮM
man less LESS(1)
LESS(1)
NAME less - opposite of more SYNOPSIS less less less less less
-? --help -V --version [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~] [-b space] [-h lines] [-j line] [-k keyfile] [-{oO} logfile] [-p pattern] [-P prompt] [-t tag] [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines] [-# shift] [+[+]cmd] [--] [filename]... (See the OPTIONS section for alternate option syntax with long option names.)
DESCRIPTION Less is a program similar to more (1), but which allows backward ‐ move ment in the file as well as forward movement. Also, less does not have to read the entire input file before starting, so with large input files it starts up faster than text editors like vi (1). Less uses termcap (or terminfo on some systems), so it can run on a variety of terminals. There is even limited support for hardcopy terminals. (On a hardcopy terminal, lines which should be printed at the top of the screen are prefixed with a caret.) ... less --help SUMMARY OF LESS COMMANDS Commands marked with * may be preceded by a number, N. Notes in parentheses indicate the behavior if N is given. h H Display this help. q :q Q :Q ZZ Exit. --------------------------------------------------------------------------MOVING e ^E j ^N CR y ^Y k ^K ^P f ^F ^V SPACE b ^B ESC-v z * Forward one w ...
(or N lines). (or N lines). (or N lines). (or N lines). to N). (and set window to N).
Chcete-li jeden výraz hledat ve všech manuálových stránkách, pomůže vám příkaz apropos následovaný hledaným výrazem. Podobnou funkci nabízí také příkaz whatis. Návody (HOWTOs) HOWTOs (angl. Jak na to“) jsou podrobné dokumenty, které nepopisují jen jednotlivé příkazy, nýbrž kompletní řešení ” problémů. Příkladem je dokument Samba HOWTO, který popisuje nastavení linuxových adresářů pro počítače s Windows. Dokumenty HOWTO se nacházejí v adresáři /usr/share/doc/, např. /usr/share/doc/howto/, a to jako běžné textové soubory nebo jako jednoduché HTML stránky. Jejich aktuální verze se nacházejí na stránkách Linux Documentation Project (http://www.tldp.org). Další zdroje informací • http://www.linux.org • http://linuxos.pro • http://www.linuxwiki.de
Údaje následující po názvu příkazu jsou chápány jako parametry. Rozlišují se argumenty a přepínače (volby). Argumenty Jména souborů nebo další informace, které budou programem zpracovány. Přepínače
Ovlivňují běh programu. Poznáte je podle úvodního znaku - a obvykle se zadávají ještě před argumenty. Mohou mít také parametry.
Příklady: Kalendář pro prosinec 2014.
cal 12 2014
Prosinec 2014 Ne Po Út St Čt 1 2 3 4 7 8 9 10 11 14 15 16 17 18 21 22 23 24 25 28 29 30 31
ls -la /etc/sh*
Pá 5 12 19 26
So 6 13 20 27
Zobrazí všechny soubory (s dalšími informacemi) z adresáře /etc začínající na sh“. ” -rw-r----- 1 root shadow 1145 Apr 22 04:17 /etc/shadow -rw------- 1 root root 1145 Apr 22 04:17 /etc/shadow-rw-r--r-- 1 root root 73 Nov 18 2013 /etc/shells
Další možnosti pro spouštění příkazů Jakmile příkaz spustíte, poběží spuštěný program na popředí a po čas jeho běhu nebude možné v terminálu zadávat žádné další příkazy. Spustit program na pozadí Pokud za příkaz přidáte znak &, program se spustí na pozadí, tzn. že budete moci v terminálu hned zadávat další příkazy a spouštět další programy. Příklad: gedit datei.txt & Příkaz gedit (grafický textový editor) se spustí přes shell v samostatném okně, vy můžete ihned zadávat další příkazy. Po spuštění programu se zobrazí číslo úlohy (angl. job); všechny spuštěné úlohy zobrazí příkaz jobs. Příkazem fg můžete proces programu, který běží na pozadí, přesunout do popředí. Běžící program (proces) lze zastavit pomocí Ctrl+z a následně ho pomocí bg odeslat na pozadí. Pokud běží více procesů, je nutné příkazům zadat číslo úlohy. Spustit programy za sebou Programy lze spustit hned za sebou, příkazy se oddělují středníkem. Příklad: cmd1 ; cmd2 ; cmd3 Nejprve se vykoná program cmd1. Pokud se ukončí, spustí se program cmd2 a jakmile skončí i ten, spustí se program cmd3.
1.4.3
Zobrazit běžící programy/procesy
Když spustíte program zadáním příkazu, operační systém pro něj v paměti vytvoří proces. Procesy (tedy spuštěné programy) zobrazíte pomocí příkazu ps. ps PID 2961 3028 3088 7415
TTY pts/0 pts/0 pts/0 pts/0
TIME 00:00:00 00:00:03 00:00:00 00:00:00
CMD bash xterm xterm ps
23
LEKCE I – PRVNÍ KROKY S LINUXEM
Spustíte-li ps bez parametrů, zobrazí se pouze ty procesy, které jste spustili v aktuálním sezení. V přehledu uvidíte číslo procesu (PID), jméno použité konzole (TTY), dobu od spuštění a spuštěný program (nikoliv název příkazu). Nejdůležitější parametry příkazu ps jsou:13 -a
Vybere všechny procesy v terminálu, včetně procesů jiných uživatelů.
-x
Vybere procesy bez přiděleného terminálu (tedy např. systémové).
-u
Zobrazí majitele (uživatele) procesu.
-H
Zobrazí stromovou strukturu procesů.
ps aux USER root root ... root syslog root ... mgn
Volitelně můžete použít také příkaz pstree (viz obrázek 1.11 na následující straně). Úkol: Zjistěte s využitím manuálové stránky, jaké informace se zobrazí po zadání ps aux.
Ukončení procesu Proces spuštěný z konzole můžete obvykle násilně ukončit stiskem Ctrl+c. To ale neplatí pro proces, který běží na pozadí a není spojený se žádnou konzolí, nebo jde o systémový proces. Příkazem kill můžete procesy ukončovat. Běžný uživatel smí ukončovat pouze své procesy, oproti tomu root může ukončovat všechny procesy. kill [signál] [další PID...]
Pomocí signálu14 sdělíte systému, jak má proces ukončit. Nezadáte-li žádný parametr, použije se signál -15, SIGTERM. Ten přátelsky“ sdělí procesu, že nastal čas skončit (proces před svým ukončením obvykle uloží všechna data). Signál ” může být ale procesem ignorován. Brutální varianta je -9, SIGKILL, kdy je proces okamžitě ukončen, zabit. Data, která proces neuloží, se přitom ztratí. Místo kill můžete použít také killall, angl. zabít všechny“. V takovém případě se nepoužívá PID, nýbrž příkaz, ” kterým byl proces spuštěn. Pokud máte více procesů stejného příkazu, pak budou ukončeny všechny. Příklad: ps PID TTY 3303 pts/3 5177 pts/3 5236 pts/3 kill -9 5177
TIME 00:00:00 00:00:00 00:00:00
CMD bash xterm ps
Aktualizovaný výpis běžících procesů Pomocí ps se zobrazí procesy jen v okamžiku spuštění tohoto příkazu. Chcete-li vidět aktuální stav procesů, pomůže vám příkaz top. Standardně zobrazuje na prvních pozicích procesy, které mají největší požadavky na výkon procesoru. Kromě toho ale uvidíte také další informace, např. využití paměti.15 13 Příkaz ps patří k několika málo programům, které přijímají parametry v několika stylech zápisu: s přepínačem - jako v Unixu, bez přepínače jako v BSD a s -- podle GNU. 14 Příkazem kill -l si zobrazíte všechny signály, které operační systém podporuje. 15 Barevnou a lepší alternativu představuje program htop. Pozn. překl.
Zobrazit využití paměti Pro zobrazení celkového využití paměti použijte program free. free total Mem: 16365944 -/+ buffers/cache: Swap: 3999740
-g
used 3103556 1729620 0
free 13262388 14636324 3999740
shared 0
buffers 130704
cached 1243232
Bez parametru zobrazí free informace v bajtech, s parametrem -k v kilobajtech, s -m v megabajtech a s parametrem v gigabajtech.
25
LEKCE I – PRVNÍ KROKY S LINUXEM
free -m total Mem: 15982 -/+ buffers/cache: Swap: 3905
1.5
used 3029 1687 0
free 12952 14295 3905
shared 0
buffers 128
cached 1214
Základy práce se soubory
Práce se soubory a adresáři v konzoli vyžaduje dobrou znalost toho, jak jsou tvořeny cesty k souborům a jak se s nimi pracuje.
1.5.1
Způsoby tvoření názvů v souborovém systému
• Různé souborové systémy odlišně interpretují použití velkých a malých písmen v názvech. Existují souborové systémy, které jsou case-sensitive (přísně odlišují velikost písmen), case-preserving (při vytvoření se použije zadaná velikost, při přístupu k existujícím souborům nehraje velikost roli, ale zobrazuje se tak, jak byla zadána) a caseinsensitive (při zápisu se převádí na jeden způsob, při čtení se nerozlišuje). • Názvy souborů mohou obsahovat 255 i více znaků, vždy podle použitého souborového systému. • Zvláštní znaky jsou v názvech povolené (Pozor na ně!). • Názvy souborů obsahující mezery musí být uzavřené do uvozovek (quoting). • Názvy souborů začínající tečkou jsou chápané jako skryté soubory. • Znak lomítko /“ je oddělovač mezi adresáři. ”
1.5.2
Zástupné znaky a regulární výrazy v shellu
Použití zástupných znaků (angl. wildcards) při zadávání názvů souborů jako parametrů pro příkaz v shellu způsobí, že se místo znaků dosadí skutečné a kompletní názvy nalezených souborů a předají spouštěnému příkazu. Různé kombinace zástupných znaků se označují jako regulární výrazy.16
Upozornění: • Vyhodnocení regulárních výrazů probíhá v shellu, nikoliv ve spouštěném příkazu! • Regulární výrazy programů grep, sed, python a dalších se v syntaxi silně odlišují od těch v shellu.17 Význam znaků: ?
Zastupuje libovolný znak.
*
Zastupuje žádný nebo libovolný počet znaků. Hvězdička pokrývá všechny znaky, také tečky, kromě těch na začátku názvu souborů. Regulární výraz *graf* se tedy vztahuje na: grafic.doc, maly-graf, steffigrafapanagassi, readme.graf, graf.
[123]
Jeden ze zadaných znaků.
[a-f]
Jeden znak ze zadaného intervalu.
[!abc]
Žádný ze zadaných znaků.
[^abc]
Žádný ze zadaných znaků.
~
Zkratka pro domovský adresář přihlášeného uživatele .
Příklady s příkazem ls Příkaz ls zobrazuje soubory a adresáře. ls [a-f]* 16 Anglicky
Všechny soubory začínající na písmeno mezi a až f.
se jim říká také glob“ a jejich používání se označuje jako globbing“. ” ” regular expressions, regulární výrazy, se často chápe jako synonymum pro PCRE (Perl Compatible Regular Expressions) nebo extended (rozšířené) regular expressions nebo alespoň basic (základní) regular expressions. U jednoduchého globbingu v shellu chybí možnost výběru výrazů, ale také syntaxe pro opakování znaků (kvantifikátory). Regulární výrazy podle standardu POSIX jsou tedy každopádně něco jiného, než co nabízí shell. 17 Pojem
26
1.5. ZÁKLADY PRÁCE SE SOUBORY
ls *[_.-]
Všechny soubory, jejichž název obsahuje jedenkrát _, . nebo -.
ls *.[!hc]
Všechny soubory, které nekončí na .h nebo .c.
Poznámka: Hvězdička se vztahuje nejen na soubory, ale také na adresáře, ls * vyhledá také soubory v podadresářích. Lze to vypnout přepínačem -d.
Výběr nejdůležitějších linuxových příkazů určených k práci se soubory ls
Zobrazit soubory a adresáře.
cd
Změnit adresář.
mkdir
Vytvořit adresář. Pro vytvoření podadresářů je potřeba zadat parametr -p.
rmdir
Odstranit prázdný adresář. Odstranění adresáře s obsahem: rm -r adresář
pwd
Zobrazit aktuální adresář.
cp
Kopírovat soubory/podadresáře.
rm
Odstranit soubory/podadresáře.
mv
Přejmenovat/přesunout soubory/adresáře.
file
Analyzovat obsah souboru.
cat
Zobrazit obsah (textového) souboru.
less
Interaktivně prohlédnout textový soubor.
test
Univerzální příkaz např. ke zjištění, zda soubor existuje.
find
Hledat konkrétní soubory.
grep
Hledat v souborech textové řetězce.
sort
Seřadit obsah textového souboru po řádcích a zobrazit ho.
echo
Zobrazit text v konzoli.
touch
Nastavit datum posledního přístupu k souboru na aktuální datum. Pokud soubor neexistuje, je vytvořen s nulovou velikostí.
Quoting Pokud nechcete, aby shell vyhodnotil zástupné znaky, musíte jim jejich zvláštní význam odebrat pomocí quotingu. Existuje více možností: • umístit před každý zástupný znak zpětné lomítko \, nebo • zapsat regulární výraz do apostrofů ('). ls *.???
Bez quotingu. test.??? test.aaa test.bbb test.ccc
ls *.'???'
S quotingem. test.???
Skryté soubory Skryté soubory (např. .profile) začínají tečkou a jsou v shellu zobrazeny jen tehdy, když je příkaz ls spuštěn s přepínačem -a nebo když je tečka v parametru explicitně zadaná, např. .*.
27
LEKCE I – PRVNÍ KROKY S LINUXEM
Bez skrytých souborů/adresářů.
ls *
test.aaa test.bbb test.ccc
Zobrazit skryté soubory/adresáře18
ls -d .*
. .. .test.xxx
Adresář . představuje odkaz na aktuální adresář. Souborový systém využívá tečkový záznam pro přístup k názvům všech souborů v daném adresáři. Adresář .. je zase odkaz na nadřízený (rodičovský) adresář. Příklad: Na soubor v aktuálním adresáři se lze odkazovat jako na ./soubor. Na soubor v nadřízeném adresáři se můžete odkazovat takto: ../soubor. Zobrazit všechny soubory/adresáře
ls -a
. .. .test.xxx test.aaa test.bbb test.ccc
Rekurzivní zobrazení Pomocí parametru -R zobrazíte obsah všech podadresářů, které budou prohledány rekurzivně. Pozor: Parametr -r mění směr řazení při výpisu. Alternativu k cílenému prohledání všech podadresářů nabízí příkaz find (viz kapitola 4.1.3 na straně 86). ls -R /tmp
Cvičení: 1. V adresáři /home/auricka/fotky se nacházejí následující snímky: ① ② ③ ④ ⑤
Vytvořte pomocí mkdir test nový adresář, přesuňte se do něj pomocí cd test a vytvořte soubory ①–⑭ pokaždé příkazem touch název souboru. Zadejte čísla souborů, které budou zobrazeny, když spustíte níže uvedené příkazy. (a) ls *
(g) ls ????????????
(b) ls RIM*
(h) ls IMAG002?.raw
(c) ls *JPG
(i) ls RIMG000[1-3]*
(d) ls IM*jpg
(j) ls IMAG00[1-4].jpg
(e) ls *A*
(k) ls [^R]*raw
(f) ls IMAG002?.raw
(l) ls *.[jJ][pP][gG]
2. V adresáři /tmp se momentálně nacházejí následující soubory: 1 Abc-soubor-Nr.1
5 Concurrent-file-No.1
2 ABC-soubor-Nr.1
6 Soubor-File19
10 file02
3 acrobat.ps.pdf
7 Soubor-File29
11 file11
4 Command.com
8 Soubor File29
12 file13
18 Pomocí
28
-d určíte, že příkaz ls nezobrazí obsah adresářů (zde . a ..).
9 File
1.5. ZÁKLADY PRÁCE SE SOUBORY
13 file19
17 Index.HTM
21 liste
14 File19
18 INDEX.html
22 schock.Soubor.198
15 Filiale28
19 INDEX.HTM
23 senseless-file88
16 Hifileasure
20 index.html
24 INDEXOMAT
Doplňte argumenty k ls, aby spuštění zobrazilo níže uvedené soubory. Příklad: ls ?ile?? zobrazí soubory 10, 11, 12, 13, 14.
1.5.3
(a) ls
(10, 11, 12, 13)
(f) ls
(6, 7)
(b) ls
(3, 22)
(g) ls
(7, 8)
(c) ls
(6, 7, 8)
(h) ls
(6, 7, 23)
(d) ls
(9, 14, 15)
(i) ls
(17, 19)
(e) ls
(18, 19, 24)
(j) ls
(1, 2, 22)
Typy souborů
Pomocí ls -la se vypíšou doplňující informace. běžný soubor (ordinary file) soubory zařízení (special file)
Logický popis hardwaru (např. tiskárny, monitoru …). Prostřednictvím souborů se přistupuje k ovladačům jednotlivých zařízení. Přístup pro čtení a zápis jako k běžným souborům. Rozlišují se soubory pro znaková zařízení (např. terminál) a soubory pro bloková zařízení (např. disky).
Příklady důležitých souborů zařízení: /dev/fd0
první disketová mechanika, obvykle odkaz na soubor zařízení /dev/fd0H1440
/dev/sda
první pevný disk SATA nebo SCSI
/dev/hda
první pevný disk IDE nebo CD-ROM (master na prvním IDE řadiči)
/dev/sda1
první primární oddíl prvního pevného disku SATA nebo SCSI
/dev/sda5
první logický oddíl rozšířeného oddílu na prvním disku SATA nebo SCSI
první SATA mechanika CD/DVD-ROM (zkratka znamená scsi readable“) ” /dev/sde2 druhý primární oddíl pátého disku SATA SCSI /dev/sr0
adresář (directory)
/dev/sdb
druhý disk SATA nebo SCSI, případně také USB disk
/dev/tty1
první virtuální terminál
Obsahuje soubory a podadresáře (subdirectories).
Znak
Souborový typ
d
Adresář (directory)
l
Symbolické odkazy (links)
b c
Blokové zařízení (block device) Znakové zařízení (character device)
p
Pojmenovaná roura (pipe)
s
Sokety (sockets)
Obrázek 1.12: Výpis pomocí ls -la a zkratky pro typy souborů
29
LEKCE I – PRVNÍ KROKY S LINUXEM
symbolický odkaz (soft link)
Odkaz na jiný soubor. (více k tématu na straně 35)
pojmenovaná roura (named pipe) Datová struktura ke komunikaci mezi procesy. Cvičení: Spusťte si terminál a zjistěte u následujících souborů/adresářů jejich typ: 1. /etc/acpi 2. /etc/aliases 3. /etc/X11/X 4. /dev/zero 5. /dev/sda 6. /dev/log
1.5.4
Adresářová struktura linuxových systémů (FHS)
Linux a UNIX disponují podobnou adresářovou strukturou, v níž neexistují písmena označující mechaniky či disky. Adresáře jsou organizované do hierarchické struktury – adresářového stromu. Začátek tohoto obráceného stromu se označuje jako kořen (angl. root), resp. kořenový adresář (angl. root directory) nebo /“.19 ” V každé úrovni stromu se mohou nacházet soubory a adresáře, ty vytvářejí vždy další úroveň stromu. Název a pozice každého souboru se zadává odpovídající cestou, která začíná kořenovým adresářem a postupně obsahuje všechny další adresáře vedoucí k souboru. Jednotná struktura adresářového stromu je popsaná ve Filesystems Hierarchy Standard (FHS). Jednotlivé linuxové distribuce se od FHS v detailech odchylují, ale míra přijetí tohoto standardu viditelně narůstá. FHS popisuje mmj. následující adresáře a jejich význam. /bin
Obslužné programy a příkazy, kterou mohou spouštět všichni uživatelé.
/sbin
Programy a příkazy k obsluze a správě systému. Smí je spouštět pouze root.
/boot
Jádro a soubory, které vyžaduje linuxový zavaděč systému.
/dev
Soubory zařízení.
/etc
Konfigurační soubory pro systémové služby a nastavení pro celý systém.
/etc/init.d
Skripty a programy pro start systému.20
/home
Domovské adresáře uživatelů.
/lib
Systémové knihovny a jaderné moduly.
/lib…
Alternativní dynamické knihovny, např. /lib32 a /lib64 pro 32bitové a 64bitové aplikace.
/media
Přípojné body pro výměnná média.
/mnt
Dočasný přípojný bod pro souborové systémy.
/opt
Doplňkové aplikace.
/proc
Souborový systém procesů, rozhraní pro komunikaci s jádrem, např. pro správu procesů.
/root
Domovský adresář systémového správce root.
19 Systémový 20 Mnohé
30
správce root má své jméno díky tomu, že má přístup pro zápis do celého stromu. Jeho domovský adresář je /root. Pozn. překl. distribuce, včetně Debianu a Ubuntu, přecházejí na jiné startovací systémy, takže v tomto ohledu panuje nejednoznačnost. Pozn. překl.
1.5. ZÁKLADY PRÁCE SE SOUBORY
/srv
Data systémových služeb.
/tmp
Dočasné soubory.
/usr
Aplikace, programy, X window system, … (statická data).
/usr/src
Zdrojové kódy linuxového jádra (pokud jsou nainstalované).
/usr/share/doc Soubory s nápovědou a dokumentace různých programů. /var
Proměnlivá data. / bin boot extlinux grub dev etc lib media mnt opt proc driver scsi tty root run sbin srv tmp usr var
Obrázek 1.13: Příklad adresářové struktury v Linuxu (nekompletní)
1.5.5
Pojmy týkající se souborového systému
kořenový adresář (root directory)
Kořen souborového systému nemá nadřazený adresář a označuje se lomítkem /“. ” pracovní adresář (working directory) Místo, kde v adresářovém stromě se momentálně nacházíte (také aktuální adresář). Můžete ho zobrazit pomocí příkazu pwd (angl. print working directory). pwd /home/uzivatel/Dokumenty/Překlady
domovský adresář (home directory)
Vlastní adresář, místo v souborovém systému, které je přidělené uživateli. Cesta k adresáři je uložená v systémové proměnné HOME, resp. ji lze nahradit zkratkou ~. echo $HOME /home/uzivatel echo ~ /home/uzivatel
Domovský adresář představuje soukromou oblast uživatele, vždy se do něj přemístíte příkazem cd. adresář přihlášení (login directory)
Adresář, ve kterém se uživatel ocitne po přihlášení; za běžných okolností jde o domovský adresář.
rodičovský adresář (parent directory) Nadřízený adresář, do něhož se z aktuálního adresáře přemístíte pomocí cd .. absolutní cesta
Kompletní cesta vycházející z kořenu popisující všechny úrovně adresářového stromu až k cílovému souboru (např.: /home/herbert/dopisy/maria.txt).
relativní cesta
Údaje obsažené v cestě začínají na úrovni aktuálního adresáře. Příklad (pro /home/herbert): dopisy/maria.txt.
Cvičení: Jako zadání pro další úkoly použijeme ukázku z adresářové struktury linuxového systému:
Podívejte se na této straně na ukázku adresářové struktury jednoho linuxového počítače. Vyřešte následující úlohy: Příklad: Absolutní cesta souboru 43 je /var/log/messages. 1. Uveďte absolutní cestu souborů 5, 8 a 56.
2. Chcete se přesunout do adresáře /home/auricka. (a) Uveďte příkaz, kterým se do něj přesunete (absolutní cesta).
(b) Kterým příkazem zobrazíte svůj aktuální adresář?
3. Nyní je váš aktuální adresář /home/auricka. (a) Uveďte relativní cestu souboru 23.
(b) Přesuňte se do adresáře 33 pomocí absolutní cesty,
relativní cesty.
4. Nyní je váš aktuální pracovní adresář /tmp Spusťte odtud program 40: absolutní cestou,
relativní cestou.
32
1.5. ZÁKLADY PRÁCE SE SOUBORY
5. Váš aktuální adresář je /var/skola/fotky Uveďte relativní cesty následujících adresářů: 49, 53 a 58.
1.5.6
Práce se soubory
Se soubory lze provádět různé operace. Následuje přehled důležitých příkazů. Kopírování souborů Soubory se kopírují pomocí příkazu cp. cp [volby] zdroj cíl
Pokud je cílem adresář, pak je soubor do tohoto adresáře zkopírován. Název souboru zůstává zachován. Nejdůležitější parametry cp jsou následující. -b
Pokud už cílový soubor existuje, pak je zdrojový soubor přejmenován na Cíl~ (na konec názvu je připojena vlnovka) a teprve potom zkopírován (backup).
-f
Pokud nelze existující cílový soubor otevřít, pak je bez dotazu smazán a kopírování se opakuje (force).
-i
Program se dotáže, zda má existující soubory přepsat (interactive).
-p
Ponechá v maximální míře vlastnosti zdrojového souboru.
-R
Kopíruje adresáře se všemi podadresáři a všemi obsaženými soubory (recursive), lze použít také -r.
-u
Zdrojový soubor se zkopíruje pouze tehdy, je-li cílový soubor starší nebo dosud neexistuje (update).
-v
Vypisuje všechny aktivity na obrazovku (verbose).
-s
Soubor se nebude kopírovat, místo toho se vytvoří symbolický odkaz (symbolic).
-l
Stejné jako -s, vytvoří se ale pevný odkaz (hard link).
-d
Odkazy jsou zachovány a jako takové budou zkopírovány (preserve).
Příklady Kopírování souboru: touch mujSoubor1 cp mujSoubor1 mujSoubor2 ls -l muj* # Soubory zase smazat rm -f mujSoubor?
-rw-r--r-- 1 uzivatel uzivatel 0 Aug 14 11:59 mujSoubor1 -rw-r--r-- 1 uzivatel uzivatel 0 Aug 14 11:59 mujSoubor2
Kopírování souboru s vytvořením zálohy: touch mujSoubor1 cp -b mujSoubor1 mujSoubor2 ls -l muj* echo '* s vytvořením zálohy *' cp -b mujSoubor1 mujSoubor2 ls -l muj* # Soubory zase smazat rm -f mujSoubor*
0 Aug 14 11:54 mujSoubor1 0 Aug 14 11:54 mujSoubor2 0 Aug 14 11:54 mujSoubor1 0 Aug 14 11:54 mujSoubor2 0 Aug 14 11:54 mujSoubor2~
Kopírování souboru, který je novější než cílový soubor: Aby měl soubor skutečně jiné datum, pomocí sleep 2 se vloží dvousekundová pauza. Čas se běžně zobrazuje v minutách, pomocí parametru --full-time jej zobrazíme v komplexní formě. Soubor mujSoubor1 je starší než mujSoubor2, proto zůstává spuštění cp bez efektu.
33
LEKCE I – PRVNÍ KROKY S LINUXEM
echo "X" > mujSoubor1 sleep 2 echo "XXX" > mujSoubor2 cp -u mujSoubor1 mujSoubor2 ls -l --full-time muj* # Soubory zase smazat rm -f mujSoubor*
Mazání souborů Příkazem rm se soubory/adresáře odstraňují. rm [volby] soubor
Příkaz rm má následující důležité parametry. -f
Smazat bez dotazu všechny soubory včetně těch chráněných proti zápisu.
-i
Dotázat se na každé smazání.
-R
Smazat adresáře a jejich obsah rekurzivně (lze použít také -r).
-v
Vypisuje všechny aktivity na obrazovku (verbose).
Příklad mkdir mujDir touch mujDir/mujSoubor1 touch mujDir/mujSoubor2 touch mujDir/mujSoubor3 ls -l mujDir # Soubory zase smazat rm -rf mujDir
34
total 0 -rw-r--r-- 1 uzivatel uzivatel 0 Aug 14 11:54 mujSoubor1 -rw-r--r-- 1 uzivatel uzivatel 0 Aug 14 11:54 mujSoubor2 -rw-r--r-- 1 uzivatel uzivatel 0 Aug 14 11:54 mujSoubor3
1.5. ZÁKLADY PRÁCE SE SOUBORY
Odkazování na soubory V linuxových souborových systémech lze vytvářet odkazy na soubory a k takovým souborům pak přistupovat pod jiným jménem nebo z jiného adresáře. Anglicky se odkazu říká link. ln [volby] zdroj cíl
Standardně se odkaz vytváří prostřednictvím tzv. inode odkazů (pevných odkazů, hard linků). Inode (indirection node) je v souborovém systému blok informací, který obsahuje skoro všechny údaje o souboru – vyjma jeho názvu. Každému souboru je přidělen právě jeden inode. Pevný odkaz lze vytvořit jen v rámci jednoho souborového systému, protože odkaz se realizuje prostřednictvím čísla inodu, např. 4711, a toto číslo existuje také v jiném souborovém systému (k vyřešení lze použít symbolický odkaz). Symbolický odkaz je zkratka, která se realizuje prostřednictvím souborové cesty. Symbolické odkazy proto mohou odkazovat přes hranice diskových oddílů. Inode obsahuje mimo jiné: • • • • • •
přístupová práva k souboru (práva vlastníka, skupin a zvláštní práva), vlastníka souboru a hlavní skupinu (UID, GID), typ souboru (běžný soubor, adresář, odkaz …), velikost souboru (v bajtech), počítadlo referencí (počet pevných odkazů na soubor), datum, – poslední změny inodu (angl. change time, ctime), – posledního přístupu k souboru (poslední otevření/spuštění, angl. access time, atime), – poslední změnu souboru (angl. modification time, mtime),
• jeden nebo více odkazů na bloky, v nichž se nachází obsah souboru. Nejdůležitější parametry příkazu ln jsou tyto: -b
Pokud už cílový soubor existuje, je zdrojový soubor přejmenován na Cíl~ (na konec názvu je připojena vlnovka) a teprve potom je vytvořen odkaz.
-f
Smaže před vytvořením odkazu případně existující cílový soubor.
-i
Dotáže se, zda má být existující soubor přepsán.
-s
Vytvoří symbolický odkaz místo pevného odkazu.
-v
Vypisuje všechny aktivity na obrazovku (verbose).
Příklady V následujícím příkladu se vytvoří soubor. Počítadlo referencí souboru ve třetím sloupci má hodnotu 1 (viz obrázek ⁇ na straně ⁇). V prvním sloupci se zobrazuje číslo inodu. Jakmile se vytvoří odkaz, v adresáři vznikne nový soubor, který bude odkazovat na stejné číslo inodu a počítadlo referencí se u souboru zvýší o jednu. touch mujSoubor1 ls -li mujSoubor1 echo '* Odkaz *' ln mujSoubor1 mujSoubor2 ls -li muj* # Soubory zase smazat rm -f mujSoubor?
5955613 * Odkaz 5955613 5955613
-rw-r--r-- 1 uzivatel uzivatel 0 Aug 14 11:54 mujSoubor1 * -rw-r--r-- 2 uzivatel uzivatel 0 Aug 14 11:54 mujSoubor1 -rw-r--r-- 2 uzivatel uzivatel 0 Aug 14 11:54 mujSoubor2
V tomto příkladu se vytvoří symbolický odkaz. Vznikne přitom nový soubor, který odkazuje na původní soubor. touch mujSoubor1 ls -l mujSoubor1 echo '* Symbolický odkaz *' ln -s mujSoubor1 mujSoubor2 ls -l muj* # Soubory zase smazat rm -f mujSoubor?
Cvičení: 1. Florian Brunner chce snímky z obou svých chytrých telefonů dát k dispozici ostatním. K tomu bude potřeba založit na linuxovém počítači další adresáře (viz také adresářovou strukturu na straně 32). Vytvořte k tomu účelu v /var/skola/fotky/raw/smartphone adresář florian-brunner a v něm ještě podadresáře galaxy a iphone. V případě a) a b) pracujte s absolutními cestami. (a) Vytvořte postupně potřebné adresáře.
(b) Nově vytvořené adresáře zase smažte.
(c) Pokud chcete jedním spuštěním příkazu mkdir vytvořit kompletní podadresářovou strukturu, musíte použít jeden konkrétní parametr. Najděte ho pomocí manuálové stránky (man mkdir).
(d) Přesuňte se nyní do /var/skola/fotky/raw/smartphone a vytvořte požadovanou strukturu jedním příkazem.
2. Johann Beslmeisel chce některé z fotek v adresáři /var/skola/fotky/raw/sony zkopírovat do svého domovského adresáře /home/beslmjo. V případě bodů a), b) a c) použijte absolutní cesty. (a) Kterým příkazem zkopíruje Johann soubor IMAG0004.jpg do svého domovského adresáře?
(b) Uveďte, jak jedním příkazem zkopíruje do svého domovského adresáře oba soubory IMAG0004.jpg a IMAG0005.jpg.
(c) Napište, jak může Johann jedním příkazem zkopírovat všechny dostupné snímky do svého domovského adresáře.
3. Pro potřeby testování převodního skriptu potřebujeme zkopírovat strukturu nacházející se v adresáři /var/skola/fotky/raw/canon do adresáře /tmp/canon. (a) Uveďte příkaz, kterým to provedete.
(b) Po dokončení převodu lze adresář /tmp/canon kompletně a bez dotazu smazat. Jakým příkazem to provedete?
4. Paní Lorenzová vyžaduje, aby adresářová struktura jejího linuxového PC byla přehlednější. Kterým příkazem přesune kompletní adresář /video do adresáře /var/skola?
5. Vyzkoušejte příklad k odkazům (strana 35). Které číslo inodu bude ve vašem případě použito?
6. Podle čeho poznáte, že na soubor je vytvořený pevný odkaz?
36
1.6. TEXTOVÉ EDITORY
1.6
Textové editory
V Linuxu je k dispozici velké množství editorů pro různé oblasti použití. Některé z nich jsou základní textové editory, jiné jsou tak vybavené, že je lze chápat jako komplexní vývojářské prostředí, např. pro vytváření HTML stránek nebo programování třeba v Javě. Jednoduše ovladatelný textový editor je kupříkladu Nano. Dalším editorem, už ne tak snadno ovladatelným, je vi, nabízí ale mnoho různých funkcí.
1.6.1
Nano
Nano je textový editor pro příkazovou řádku a následník editoru Pico. V protikladu ke svým velkým“ příbuzným vi ” a Emacs není tak mocný, ale o to snadněji se ovládá. To mu pomohlo k oblibě zejména mezi linuxovými začátečníky. Také podporuje zvýrazňování syntaxe pro mnoho textových formátů.
Obrázek 1.14: Nano se zvýrazňováním syntaxe Editor se spouští příkazem nano. Chcete-li upravovat existující soubor, zadejte jeho jméno jako parametr. Nejdůležitější klávesové kombinace jsou zobrazeny na dolním řádku terminálu, přičemž znak ^ symbolizuje levou klávesu Ctrl. Kompletní přehled všech klávesových zkratek a kombinací získáte v nápovědě, kterou zobrazíte stiskem Ctrl+g. Cvičení: 1. Spusťte Nano, zadejte následující řádky, uložte soubor pod názvem nano-skript.sh a soubor v Nano znovu otevřete. #!/bin/bash $output="Výstup" $outputput="Nástup" echo $output echo $outputput
Co vás napadlo před uložením a co po opětovném načtení?
2. Nyní změňte pořadí řádků s echo, a to tak, že jeden z nich smažete do schránky a na jiném místě ho zase vložíte.
1.6.2
Vi
Za prazáklad textových editorů pro příkazovou řádku lze považovat vi, který vznikl už v sedmdesátých letech 20. století. Od té doby se ale jeho funkce rozšířily a byl přepracován. Je nainstalován na téměř všech unixových a linuxových systémech (také jako vim – Vi IMproved). Jedná se o oblíbený editor systémových správců, běžní uživatelé mají raději Nano. Editor vi obsahuje tři zásadně odlišné režimy práce.
37
LEKCE I – PRVNÍ KROKY S LINUXEM
Obrázek 1.15: Pracovní režimy editoru vi 1. Příkazový režim (command mode) V tomto režimu se vi nachází po svém spuštění. Stiskem kláves se spouštějí různé příkazy, např. hledání slova, vymazání řádku. Do režimu se také dostanete stiskem klávesy Esc. Syntaxe: [Počet opakování n]textové označení příkazu Příklady: 4dw
Smazat (angl. delete) následující čtyři slova (angl. words).
5dd
Smazat následujících pět řádků.
y
Kopírovat aktuální řádek do schránky (angl. yank, škubnout, trhnout).
5y
Kopírovat do schránky pět řádků.
p
Vložit (angl. paste) řádky ze schránky.
G
Přesunout kurzor na začátek posledního řádku v souboru.
Strg+r Odvolat vrácení změn (redo).
2. Vkládací režim (insert mode) V tomto režimu se vkládají texty. Pomocí kláves i, a nebo o se do tohoto režimu dostanete z příkazového režimu a klávesou Esc zase zpět. 3. Režim příkazové řádky (last line mode) Stisknutím dvojtečky : se z příkazového režimu přemístíte do režimu příkazové řádky a pomocí Esc zase zpět. Syntaxe: :[adresa]příkaz [volby] Příklady: :q!
38
Ukončit vi bez uložení dat.
1.6. TEXTOVÉ EDITORY
:/výraz
Vyhledat v textu; následující výskyt hledaného výrazu zobrazíte stiskem n, předchozí výskyt stiskem N (pokud nějaké jsou).
:set number
Zobrazit v aktuálním sezení editoru číslování řádků.
Nahradit na aktuálním řádku všechny znaky ö“ za oe“. ” ” :1,$/\//\./g Nahradit všechny /“ v celém souboru za .“ (quoting pomocí \nutný). ” ” :5,9s/Maier/Mair/g Nahradit na řádcích 5–9 všechny výskyty jména Maier na Mair. :s/ö/oe/g
:50,$s/[*#]/=/
Nahradit od řádku 50 do konce dokumentu každý první znak *“ nebo #“ znakem =“. ” ” ”
Otázky a cvičení (jen) pro nastávající administrátory 1. Ve kterém režimu se nacházíte po spuštění editoru vi?
2. Ve kterém režimu můžete vi spořádaně ukončit?
3. Jak se dostanete do vkládacího režimu (a) z příkazového režimu, ap.?
(b) z režimu příkazové řádky?
4. Ve kterém režimu můžete pohybovat kurzorem?
5. Ve kterém režimu můžete mazat texty?
6. Uložte ve vi soubor pod jiným názvem. Jak budete postupovat?
7. Zadáním /hledaný výraz můžete v příkazovém režimu vi vyhledávat texty. Najděte v konfiguračním souboru /etc/services pojem lansource.
Uveďte následně číslo prvního řádku, kde se pojem vyskytuje.
8. Upravte soubor /etc/inittab – postarejte se o to, aby klávesovou zkratkou Ctrl+Alt+Del už nebylo možné restartovat počítač. Poznámka: Vyhledejte text ctrlaltdel“ a zakomentujte tento řádek na začátku pomocí #. ”
1.6.3
Vytvoření ikony na ploše
Na ploše lze bez problémů vytvořit ikonu terminálu, která spustí libovolný program. Adresář ~/Plocha/ v domovském adresáři uživatele obsahuje pro každou ikonu jeden soubor. Má příponu .desktop a jedná se o běžný textový soubor. #!/usr/bin/env xdg-open [Desktop Entry] Type=Application Exec=gnome-terminal Name=term Icon=/usr/share/pixmaps/gnome-terminal.xpm
39
LEKCE I – PRVNÍ KROKY S LINUXEM
Pokud máte ikonu vytvořenou, klikněte na ni pravým tlačítkem myši a v kontextové nabídce vyberte Vlastnosti. Spustí se editor, v němž můžete změnit různá nastavení ikony (viz obrázek 1.16). 21
Obrázek 1.16: Úprava ikony na ploše
Cvičení: Poznačte si pokaždé odpovídající příkazy: 1. Spusťte terminál a změňte pracovní adresář na ~/Plocha/.
2. Vytvořte v editoru nano soubor terminal.desktop.
3. Aby bylo možné program spustit, musí mít nastaveno oprávnění spouštět“ (více k tématu na straně 55). ” chmod +x terminal.desktop
4. Vyzkoušejte, že ikona funguje – kliknutím na ni spusťte terminál. 5. Pokud se vám nelíbí použitý obrázek, změňte ho prostřednictvím kontextové nabídky a položky Vlastnosti.
21 Nezapomeňte na kartě Oprávnění zatrhnout přepínač Povolit spouštění souboru jako programu, jinak nebude možné program spustit. Totéž řeší třetí bod úkolů. Pozn. překl.
40
1.7. OTÁZKY
1.7
Otázky
1. Co znamenají výrazy alfa, beta a stabilní verze?
2. Co to znamená, když distribuce nabízí svou LTS verzi?
3. Ze kterých distribucí vznikly následující operační systémy? (a) Ubuntu (b) CentOS 4. Kde všude se nasazuje Linux? Uveďte pokaždé jeden příklad!
5. Co je to konzole a terminál?
6. Jak nainstalujete program synaptic v konzoli?
7. Co je to shell?
8. Uveďte dva příklady, jak získáte nápovědu k linuxovým příkazům.
9. Čím se odlišují volby a argumenty u příkazů?
10. Jmenujte dva typy vytváření názvů u linuxových souborových systémů.
41
LEKCE I – PRVNÍ KROKY S LINUXEM
11. Vysvětlete pojem regulární výrazy“. K čemu byly vymyšleny? ”
12. Co znamená pojem quoting“? ”
13. Jak vypíšete všechny názvy souborů v adresáři, které mají přesně 10 znaků?
14. Jak vypíšete všechny názvy souborů v adresáři, které nezačínají velkým písmenem?
15. Popište pět typů souborů v Linuxu.
16. Co znamená zkratka FHS?
17. Jakou zvláštní vlastnost s ohledem na nadřízený adresář má adresář root neboli / ?
18. Uveďte, které soubory se v linuxovém systému nacházejí v adresářích /etc, /bin, /home, /root.
19. V čem se odlišují adresářové struktury operačních systémů typu Linux a Windows?
20. Co mají společného adresářové struktury a stromy?
42
1.7. OTÁZKY
21. V čem se od sebe liší relativní a absolutní cesta?
22. Jaký význam mají parametry -n a -e příkazu echo?
23. Co ovlivňují následující sekvence u příkazu echo, resp. co představují? \\ \f \n \r \t \v
43
LEKCE I – PRVNÍ KROKY S LINUXEM
44
Kapitola 2
Lekce II – Správa uživatelů a oprávnění Důležitá úloha systémové administrace je správa uživatelů: zakládání nových, odstraňování starých, jejich přiřazování do jednotlivých skupin nebo úpravy jejich členství. A zapomenout nesmíme ani na správu přístupových práv k souborům a jejich vlastnictví. Následující text je rozdělený do dvou částí. V první z nich si ukážeme, jak se uživatelé a skupiny spravují prostřednictvím příkazů, které nejsou závislé na konkrétní linuxové distribuci. Objasníme si účel a strukturu databází, do nichž se ukládají informace o uživatelích, jejich heslech a skupinách, do nichž jsou rozřazeni. Po otázkách a úkolech ke správě uživatelů následuje druhá část, v níž je vysvětleno, jak je to v Linuxu s přístupovými právy k souborům a adresářům a jakým způsobem je můžeme upravovat. Také tato část končí otázkami a cvičeními k tématu přístupových práv a vlastnictví.
Obsah 2.1
2.2
Správa uživatelů v Linuxu . . . . . . . . . . . . . . . . . . 2.1.1 Správce systému, běžný uživatel a systémový uživatel 2.1.2 Primární a sekundární skupiny . . . . . . . . . . . . . 2.1.3 Vytvoření uživatelského účtu . . . . . . . . . . . . . 2.1.4 Práce pod jiným uživatelem – su a sudo . . . . . . . . 2.1.5 Správa skupin . . . . . . . . . . . . . . . . . . . . . . 2.1.6 Otázky . . . . . . . . . . . . . . . . . . . . . . . . . . Oprávnění souborů a jejich vlastnictví . . . . . . . . . . . 2.2.1 Kategorie uživatelů a přístupová práva . . . . . . . . 2.2.2 Změna přístupových práv a vlastnictví . . . . . . . . 2.2.3 Otázky a úkoly . . . . . . . . . . . . . . . . . . . . . .
Jednou ze základních vlastností Linuxu je fakt, že současně může v systému pracovat více uživatelů, a to nezávisle na sobě. Nutnou podmínkou je samozřejmě správa uživatelských účtů a přístupových práv, aby se uživatelé vzájemně nemohli ovlivňovat. Systém uživatelských oprávnění stanovuje, kdo může přistupovat ke kterým souborům, za jakých podmínek smí uživatel číst, nebo dokonce měnit data jiného uživatele, které programy smí spouštět a ke kterým hardwarovým zařízením smí (přes patřičné soubory) přistupovat. Každý uživatel disponuje vlastním uživatelským účtem a domovským adresářem, do kterého se ukládají jeho data a konfigurace programů. Uživatel se do systému přihlašuje se svým uživatelským jménem a heslem. Všechny akce, které uživatel provede během sezení (tzn. mezi přihlášením a odhlášením ze systému), jsou řízeny jeho oprávněními v systému.
2.1.1
Správce systému, běžný uživatel a systémový uživatel
U všech linuxových distribucí jsou obvykle během instalace vytvořeny dva uživatelské účty: • administrátorský účet root, • účet pro běžného uživatele. Správce systému root disponuje všemi oprávněními v systému. Smí číst, měnit a mazat všechny soubory a adresáře a spouštět všechny programy. Uživatel s administrátorskými právy může systém – třeba nedopatřením – poškodit, roz” bít“. Aby se tomu předešlo, root by měl vytvořit další uživatele, kteří budou mít práva omezená. Tito běžní uživatelé pak systém používají k práci, mají neomezený přístup ke svým vlastním datům, ale jen omezený přístup ke zbytku systému. Pro zvláštní programy (např. poštovní nebo webový server) nebo pro přístup ke konkrétním komponentám a zařízením (např. k tiskárně, externím pevným diskům nebo zálohovacím zařízením) existují speciální uživatelské účty. Tyto tzv. systémové uživatelské účty nejsou určené lidem pro interaktivní práci se systémem.
2.1.2
Primární a sekundární skupiny
Pro případ, kdy má více uživatelů společně využívat stejné soubory nebo systémové zdroje, je v Linuxu zaveden princip členství ve skupinách. Každý uživatel musí být členem alespoň jedné skupiny. Říká se jí primární skupina (hlavní skupina). Členství v primární skupině se ukládá do databáze uživatelů, což je soubor /etc/passwd. Uživatelé ale mohou být členy doplňujících skupin, pokud jsou do nich rootem zapsáni (což se uloží do databáze skupin /etc/group). Těmto skupinám se říká sekundární. Po přihlášení je každý uživatel nejprve přiřazen do své primární skupiny. Během sezení se může příkazem newgrp dočasně přidat do dalších skupin, které jsou mu přiřazeny. Do skupin, které jsou chráněné heslem a jichž není členem (tzn. není to zapsáno v /etc/group), se může uživatel dočasně přihlásit zadáním příkazu newgrp a hesla.
2.1.3
Vytvoření uživatelského účtu
Vytvoření uživatelského účtu je principiálně vždy stejné a spočívá v následujících krocích: • • • •
vytvoření záznamů v databázi uživatelů /etc/passwd a databázi hesel /etc/shadow, podle potřeby vytvoření jednoho nebo více záznamů v databázi skupin /etc/group, vytvoření domovského adresáře, nakopírování souborů se základním nastavením a přidělení práv novému uživateli, vyřešení případných dalších přístupových požadavků, např. nastavení diskových kvót (omezení maximálního dostupného prostoru), přístupu ke speciálním aplikacím nebo databázím.
Ke správě uživatelů se v každé linuxové distribuci používá jiný nástroj, s nímž lze vytvářet uživatele a skupiny (např. yast v SUSE, system-config-users ve Fedoře apod.). Nezávisle na distribuci se používají tyto nástroje příkazové řádky: useradd
Vytvořit nový uživatelský účet.
usermod
Upravit existující uživatelský účet.
userdel
Smazat uživatelský účet.
Příkaz useradd s argumentem --help zobrazí možnosti a nastavení: useradd --help usage: useradd [-u uid [-o]] [-g group,..] [-G group] [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] name
46
2.1. SPRÁVA UŽIVATELŮ V LINUXU
Nejdůležitější přepínače pro useradd jsou následující: name
Přihlašovací jméno, identifikátor nově vytvářeného uživatele.
-c
Komentář.
-d
Domovský adresář; pokud není zadán, vytvoří se /home/prihlasovaci_jmeno.
-e
Datum, kdy bude přístup automaticky zablokován.
-g <skupina>
Primární skupina nového uživatele (název nebo GID), skupina musí už existovat.
-G <skupina1>[,skupina2]…
Názvy nebo GID dalších skupin (sekundárních), skupiny musí existovat, oddělují se čárkami.
-m
Vytvořit domovský adresář a nakopírovat do něj soubory se základním nastavením z /etc/skel/.
-k
Jiný adresář se základním nastavením.
-s <shell>
Přihlašovací shell nového uživatelského účtu.
-u
Číselné označení nového účtu, nesmí být už použito; pokud je použito, lze stejné číslo vynutit přepínačem -o.
Tímto příkazem založí root nový uživatelský účet pro uživatele Erwin Bittl s přihlašovacím jménem bittler a přiřadí ho do skupiny it11fa. Jeho domovský adresář bude /home/bittler a zkopíruje se do něj základní nastavení z adresáře /etc/skel.zak. Číslo uživatele (UID) a číslo skupiny (GID) Pro interní identifikaci uživatelů nepoužívá systém jejich jména, nýbrž jednoznačná čísla, tzv. user ID, UID (angl. user = uživatel). UID se obvykle vytváří automaticky při vytvoření nového uživatelského účtu. Kromě UID je každému uživateli přiřazeno ještě jedno číslo, a sice group ID, GID (angl. group = skupina). Jde o číslo primární skupiny, do níž uživatel patří. UID a GID administrátorského uživatele root jsou vždycky 0! Roli přitom nehraje jméno root, nýbrž právě nulové UID. Z toho vyplývá, že každý uživatel, který má ID rovné 0, disponuje právy správce, roota. Příkazem id lze zobrazit právě aktivní primární skupinu uživatele a všechny jemu přidělené sekundární skupiny a jejich GID. id uid=524(bittler) gid=1010(it11fa) skupiny=1010(it11fa),16(dialout),33(video) id root uid=0(root) gid=0(root) skupiny=0(root)
Jak už bylo řečeno, interně se téměř vždy k identifikaci používá UID, resp. GID. I když se jako argument příkazu použije jméno uživatele nebo skupiny, před provedením akce se toto jméno převede na UID, resp. GID. Převod probíhá prostřednictvím databáze uživatelů /etc/passwd a skupin /etc/group. Databáze uživatelů /etc/passwd Soubor /etc/passwd obsahuje seznam všech uživatelů. Pro každého existuje záznam, který obsahuje minimálně přihlašovací jméno, heslo, UID, GID, domovský adresář a shell pro přihlášení. V komentářovém políčku mohou být další informace, např. celé jméno a příjmení uživatele. Každý záznam v /etc/passwd se skládá ze sedmi políček v následujícím formátu: Přihlašovací jméno:Heslo:UID:GID:Komentář:Domovský adresář:Login shell
Komentářové pole se někdy označuje jako GECOS.1 Dvojtečka slouží jako oddělovač polí, proto se nesmí objevit jako hodnota pole (třeba v komentáři). Následující zkrácený výpis zobrazuje několik řádků souboru /etc/passwd: cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh 1 http://en.wikipedia.org/wiki/Gecos_field
Dříve bývala v souboru /etc/passwd uložena také zašifrovaná hesla. Dnes už tomu tak z bezpečnostních důvodů není. Místo toho je v políčku pro heslo písmeno x. Tím se odkazuje na databázi hesel, soubor /etc/shadow, kde jsou hesla uložená zabezpečeným způsobem. Hesla a databáze hesel /etc/shadow Pro linuxová hesla se mají používat jen ASCII znaky2 a z bezpečnostních důvodů by heslo mělo obsahovat velká i malá písmena a číslice. Hesla se v Linuxu ukládají zašifrovaně. Používají se jednosměrné šifrovací výpočty, což znamená, že heslo nelze zpětně rozklíčovat. Pokus o zjištění hesla lze provádět pouze metodou hrubé síly (brute force), tedy postupným zkoušením všech možných kombinací. To je sice v případě kvalitního hesla časově náročné, ale mnozí uživatelé to útočníkům usnadňují tím, že používají slabá hesla.3 Aby se riziko napadení systému snížilo, zašifrovaná hesla se neukládají přímo do /etc/passwd, nýbrž odděleně do souboru /etc/shadow. Ten je čitelný pouze rootem a ostatním uživatelům je tedy nepřístupný. Záznam v souboru /etc/shadow se skládá ze sedmi políček v následujícím formátu: Přihlašovací jméno:Heslo:Poslední změna:MinD:MaxD:Varování:Lhůta:Zablokování:Rezervováno Přihlašovací jméno
Je uloženo také v prvním sloupci v souboru /etc/passwd.
Heslo
Zašifrované heslo uživatele; pokud je políčko prázdné, lze se přihlásit bez hesla, pokud je zde * nebo !, přihlásit se nelze vůbec.
Poslední změna
Den, kdy bylo naposledy změněno heslo jako počet dnů, které uplynuly od 1. ledna 1970.
MinD
Minimální počet dnů, kdy je heslo platné; pokud je políčko prázdné nebo obsahuje nulu, pak není minimum nastavené.
MaxD
Maximální počet dnů, kdy je heslo platné; po uplynutí této lhůty si uživatel musí heslo změnit.
Varování
Počet dnů před uplynutím MaxD, kdy bude uživatel varován, že se blíží okamžik, kdy bude heslo zneplatněno; obvykle se uživateli zobrazuje zpráva po přihlášení.
Lhůta
Představuje počet dnů po uplynutí termínu MaxD, kdy je heslo ještě platné; během této doby se uživatel ještě může přihlásit, ale heslo si musí ihned změnit.
Zablokování
Den, kdy bude uživatelský účet zablokován, uvádí se jako počet dnů od 1. ledna 1970.
Rezervováno
Pro budoucí účely, momentálně nemá políčko konkrétní využití.
Následující zkrácený výpis zobrazuje příklady několika řádků ze souboru /etc/shadow: sudo cat /etc/shadow root:$1$8jp/RdHb$D1x/6Xr2.puE0NX3nIgdX/:14617:0:99999:7::: daemon:*:13991:0:99999:7::: bin:*:13991:0:99999:7::: sys:*:13991:0:99999:7::: ... bittler:$1$JDE7PpXQ$8bV7aOArT3P91NHFaI7vpg:15420:0:99999:7::: brunnefl:$1$yktwzYKG$XmcUCqVtAO99GNGMnPJZ5p:15422:0:99999:7::: summerma:!:15591:0:99999:7::: janist:$1$U3N08ahK$B0x7LHNRbsVuUnKHjzF4as:15425:0:99999:7::: greinela:$1$CwunXsvI$ruro5WzWesKV6kXSkPtdi3:15317:0:99999:7::: lorenzvi:$1$NqaUVjcL$jU5D342fouUdm7xu8051LA:15359:0:99999:7::: ... 2 Pro české prostředí lze s ohledem na sílu hesla jednoznačně doporučit také znaky s diakritickými znaménky. Pozor ovšem na situaci, kdy hrozí, že někdy budete pracovat s nečeskou klávesnicí. Pozn. překl. 3 Je vhodné upozornit, že heslo uživatele pro přihlášení do systému se používá také v případě vzdáleného připojení pomocí SSH. Pokud vám běží služba SSH, je pravděpodobné, že váš počítač čelí pokusům o přihlášení. Pozn. překl.
48
2.1. SPRÁVA UŽIVATELŮ V LINUXU
Když si chce uživatel změnit heslo, zadá příkaz passwd. Je vyzván, aby zadal své staré heslo a poté dvakrát za sebou heslo nové. Běžní uživatelé mohou měnit hesla jen sami sobě. Správce systému root smí měnit hesla všech uživatelů, přičemž nemusí zadávat hesla původní: root@linux ~# passwd bittler New password: ********** Re-enter new password: ********** Password changed.
2.1.4
Práce pod jiným uživatelem – su a sudo
Člověk, který spravuje systém, by neměl trvale pracovat jako root. Hrozí riziko nechtěného poškození systémových souborů nebo programů. Práce s právy roota je riziková také s ohledem na nebezpečí z internetu, protože by mohlo dojít k instalaci a spuštění škodlivého softwaru. Proto se doporučuje, aby také správce systému pracoval pod běžným uživatelským účtem a práva roota používal jen v případě potřeby. K dočasnému získání vyšších“ (administrátorských) ” práv existuje několik možností. • Přihlásit se jako root. • V aktuálním sezení změnit svou identitu pomocí su (angl. switch user, přepnout uživatele). • Spustit příkaz/program pomocí sudo (angl. switch user do, přepnout uživatele a spustit program). Pomocí su se kompletně změní identita uživatele. Obvykle ale postačuje mít administrátorská práva jen pro vykonání jednoho příkazu či spuštění jednoho programu. Toho lze dosáhnout pomocí příkazu sudo. Některé distribuce neumožňují přihlášení jako root (např. Ubuntu). V takovém případě se správcovské úlohy musí vykonávat pomocí sudo. Příklad pro su: lorenzvi@linux ~$ su Heslo: ******** root@linux:/home/lorenzvi# su - bittler bittler@linux: ~$ pwd /home/bittler
Uživatelka lorenzvi nejprve převzala identitu roota. Pokud se totiž u příkazu su neuvede uživatelské jméno, pak se program táže na heslo roota a po jeho úspěšném zadání se identita uživatele změní právě na něj. A jako root pak můžete měnit libovolně identitu bez zadání hesla. Pokud se su spustí s parametrem -, mimo jiné se aktuální pracovní adresář změní na domovský adresář nového uživatele. Program sudo na rozdíl od su nespouští shell s identitou nového uživatele, nýbrž okamžitě spustí zadaný příkaz s odpovídajícími právy. Pomocí přepínače -u lze zadat uživatele, pod nímž má být program spuštěn. Pokud není přepínač uveden, použije se uživatel root. sudo useradd -m janist password for lorenzvi: ********
Za normálních okolností musí uživatel při prvním spuštění sudo (v rámci jednoho sezení) zadat heslo. V Ubuntu je to heslo uživatele, který sudo spouští. Jestli a jak může běžný uživatel sudo používat, se nastavuje v souboru /etc/sudoers.
2.1.5
Správa skupin
Skupiny jsou řešením situací, kdy více uživatelů přistupuje současně ke stejným zdrojům (např. souborům, aplikacím, databázím a podobně). Každý linuxový uživatel bývá členem více skupin. Jeho primární skupina je uložena v souboru /etc/passwd. Přiřazení uživatele do sekundárních skupin, kterých může být libovolný počet, je uloženo v databázi /etc/group. Tento soubor obsahuje všechny v systému dostupné skupiny a k nim přiřazené uživatele. Každý záznam (řádek) obsahuje seznam uživatelů, kteří do skupiny patří. Členství v primárních skupinách není v tomto souboru uvedeno! Záznamy v souboru /etc/group mají následující formát: Název skupiny:Heslo:GID:Seznam uživatelů
Následující (pomocí …) zkrácený výpis zobrazuje některé řádky ze souboru /etc/group: cat /etc/group root:x:0: daemon:x:1: bin:x:2: ... dialout:x:16:greinela,lorenzvi
Primární skupina uživatele greinela se jmenuje ucitele (GID=1000). Byl do ní přiřazen v souboru /etc/passwd, takže v souboru již není /etc/group tento vztah uložený. Navíc je greinela členem skupiny dialout, která mu umožňuje připojovat se k internetu. Je také členem skupiny admin. V systémech jako Ubuntu mohou členové této skupiny provádět administrátorské úlohy, např. instalovat programy nebo měnit nastavení systému. Strategie pro zařazování do skupin Existují dva použitelné postupy, jak zařazovat uživatele do primárních skupin. Nejjednodušší možnost je přiřadit všechny uživatele do jedné primární skupiny users. Tento přístup již roky prosazuje SUSE Linux. Nevýhoda spočívá v tom, že všichni uživatelé potom mají přístup k souborům ostatních uživatelů. U distribucí od Red Hatu a založených na Debianu platí, že každý uživatel má vlastní primární skupinu, jejíž jméno se shoduje s přihlašovacím jménem uživatele. Skupina users je tedy nevyužitá. Toto řešení má při odpovídající správě systému výhody, a to tehdy, když více členů sekundární skupiny vytváří společné soubory. Číslo skupiny (GID) nula je rezervované pro roota, 1 až 999 pro skupiny systémových služeb. GID=100 je běžně rezervované pro skupinu users. GID větší než 1000 lze použít pro vlastní účely. Příkazy pro správu skupin Následující příkazy se používají pro správu skupin: groupadd
Vytvořit novou skupinu.
groupmod
Upravit existující skupinu.
groupdel
Smazat záznamy o existenci skupiny.
Skupinu je nutné nejprve vytvořit, teprve potom do ní lze přidat uživatele. Pro vytvoření se používá příkaz groupadd s následující syntaxí: groupadd [-g GID] jménoskupiny
Pomocí přepínače -g lze zadat konkrétní číslo skupiny. Je potřeba pamatovat na to, že hodnoty do 999 jsou rezervované pro systémové skupiny. Pokud přepínač nezadáte, použije se automaticky další dostupné GID. Existující skupiny lze upravit pomocí groupmod: groupmod [-g GID] [-n novéjméno] jménoskupiny
-g GID
změnit GID zadané skupiny,
-n novéjméno
změnit jméno skupiny na nově zadané, GID se nemění.
Existující skupiny lze smazat příkazem groupdel. Příklady ke správě skupin groupadd -g 1010 it11fa
Vytvořit skupinu it11fa s GID 1010.
groupmod -g 2011 it11fa
Existující skupině it11fa změnit GID na 2011.
groupmod -g 2100 -n teacher ucitele
Skupinu ucitele přejmenovat na teacher a změnit GID na 2100.
groupdel it11fa
Smazat skupinu it11fa.
50
2.1. SPRÁVA UŽIVATELŮ V LINUXU
Přiřazení uživatelů do skupin pomocí usermod Noví uživatelé jsou při vytvoření pomocí useradd ihned přiřazeni do skupin. Pokud požadované skupiny v ten okamžik ještě neexistují nebo pokud se má členství změnit později, použije se příkaz usermod. Ten změní existující uživatelský účet; parametry příkazu jsou v podstatě stejné jako v případě useradd. usermod [-g skupina] [-G skupina1[,skupina2]... ] Uživatelské jméno
Nejdůležitější volby pro správu skupin pomocí usermod: -g skupina
Primární skupina uživatele, jako jméno nebo GID.
-G skupina1[,skupina2]…
Další skupiny (sekundární skupiny) uživatele, jako jméno nebo GID, oddělují se čárkami.
Následuje příklad, jak (v Ubuntu) uživatelku lorenzvi navíc přiřadit do administrátorské skupiny: usermod -G admin lorenzvi
Cvičení: Následující úkoly musíte zpracovávat s administrátorskými oprávněními. Poznačte si pokaždé použité příkazy. 1. Vytvořte následující skupiny s GID uvedeným v závorce: it11fa (1010), it11se (1020), it11fs (1030) a lehrer (1000).
2. Vytvořte vzorové adresáře pro základní nastavení domovských adresářů žáků /etc/skel.zak a učitelů /etc/skel.ucitel. Nakopírujte do nich všechny soubory z adresáře /etc/skel.
3. Vytvořte následující uživatelské účty s nastaveními, která jsou uvedena v seznamu: Přihlaš. jméno
Zkontrolujte pohledem do databáze skupin a uživatelů, že byly účty úspěšně vytvořeny.
51
LEKCE II – SPRÁVA UŽIVATELŮ A OPRÁVNĚNÍ
4. Prohlédněte si databázi hesel. Podle čeho poznáte, že pro nově vytvořeného uživatele dosud nebylo vytvořeno heslo?
Nastavte nyní nově vytvořeným uživatelským účtům heslo tajné“. ”
Jak se změnily odpovídající záznamy v databázi hesel?
5. Přihlaste se na volných konzolích pod následujícími jmény: brunnefl, summerma a janist. K dalším konzolím můžete přistupovat v textovém režimu pomocí klávesových kombinací Alt+F, Alt+F a tak dále. Do textového režimu se z grafického přepnete pomocí Ctrl+Alt+F, Ctrl+Alt+F apod. (a) Přepněte se zpátky na konzoli, kde jste přihlášeni jako root, a zjistěte, kteří uživatelé jsou právě přihlášení. Tyto informace získáte pomocí příkazů w a who.
(b) Nastavte uživateli janist jako shell /bin/dash. Otestujte úspěšný výsledek tak, že se jako janist přihlásíte a odhlásíte.
(c) Nastavte uživateli summerma jako shell /bin/false a vyzkoušejte, že přihlášení tohoto uživatele není možné. Poté opět nastavte shell na /bin/bash.
(d) Vytvořte skupinu photo s GID 2000 a přiřaďte do ní uživatele summerma a brunnefl. Podívejte se na změny, které nastaly v databázi skupin a ověřte, že oba uživatelé se mohou do nové skupiny přepnout pomocí newgrp.
(e) Ověřte, že ve vašem systému existuje skupina admin. Pokud ano, přiřaďte do ní lorenzvi.
(f) Nakonec všechny nově vytvořené uživatelské účty zase zrušte. Dbejte na to, aby byly smazány také domovské adresáře.
52
2.1. SPRÁVA UŽIVATELŮ V LINUXU
2.1.6
Otázky
1. O jaký speciální typ uživatelů se jedná v případě jmen jako daemon, bin, sys a wwwrun?
2. Sestavte kompletní příkaz, kterým pro člověka jménem Frank Meyer z třídy IT11FS vytvoříte uživatele s přihlašovacím jménem meyerfr. Jeho primární skupina bude it11fs, vytvoří se domovský adresář /home/meyerfr a základní nastavení se zkopíruje ze souboru /etc/skel.schueler. Zároveň se do databáze uživatelů zapíše komentář Meyer,Frank,IT11FS“. ”
3. Popište dvě možnosti, jak získat UID uživatele.
4. Potřebujete získat UID uživatelky janist. Zadejte kompletní příkaz, jak tyto informace získáte.
5. Následujícím příkazem získáte GID primární skupiny uživatelky janist: id -g janist 1030
Popište jinou možnost, jak je možné tyto informace získat.
6. Jaký znak políčka pro heslo v souboru /etc/passwd poukazuje na to, že zašifrovaná hesla jsou uložena v souboru /etc/shadow?
7. Pro vyřešení následujících pěti úloh prosím použijte příklad s databází hesel /etc/passwd na straně 47. (a) Uveďte GID skupiny it11se.
(b) Vysvětlete, proč se uživatel summerma nemůže přihlásit do systému a jak vy jako správce systému tento problém vyřešíte.
(c) Uživatel bittler si naposledy změnil heslo dne 21. 03. 2014. Kdy bylo naposledy změněno heslo uživatele brunnefl?
(d) Který záznam musí být změněn a jak, když chceme, aby si uživatelka lorenzvi musela měnit heslo každých třicet dní?
(e) Přečtěte si následující výstup: grep johannes /etc/passwd johannes:x:1102:100::/home/johannes: sudo grep johannes /etc/shadow johannes:!:15591:0:99999:7:::
53
LEKCE II – SPRÁVA UŽIVATELŮ A OPRÁVNĚNÍ
Vysvětlete, proč se uživatel johannes nemůže přihlásit do systému a jak tento problém jako správce systému vyřešíte.
8. Přečtěte si následující výstup: sudo useradd johannes grep johannes /etc/passwd johannes:x:1102:100::/home/johannes: sudo grep johannes /etc/shadow johannes:!:15591:0:99999:7::: ls /home/johannes ls: /home/johannes: No such file or directory
V čem spočívá problém a jak může být odstraněn?
9. Co můžete dělat, když zapomenete své heslo roota?
10. Jak může uživatel pomocí sudo trvale získat práva správce systému?
11. Pomocí příkazu last přihlašovací_jméno_uživatele si můžete nechat vypsat statistiku přihlášení zadaného uživatele. Pokud jméno neuvedete, vypíše se statistika všech uživatelů v systému. Díky last reboot zjistíte, kdy byl systém (resp. počítač) v minulosti vypínán a spouštěn. Vyzkoušejte si obojí – přihlaste se a odhlaste na jiné konzoli jako jiný uživatel a restartujte počítač.
2.2
Oprávnění souborů a jejich vlastnictví
Systém uživatelských účtů a přístupových práv v Linuxu umožňuje, aby v jednom systému pracovalo nezávisle na sobě více uživatelů, aniž by se přitom nějak ovlivňovali. Práva jsou definovaná prostřednictvím skupin, do kterých jsou uživatelé zařazeni. Tak je nastavené, kdo může přistupovat ke kterým souborům, za jakých okolností smí uživatel číst nebo upravovat soubory jiného uživatele, kdo může spouštět které soubory nebo které hardwarové komponenty smí uživatel používat. Správa přístupu je založena na správě uživatelů a nastavení přístupových práv k souborům. Pokud by chtěl například uživatel bittler smazat soubor s databází uživatelů, systém na základě nastavených oprávnění posoudí, zda k tomu má odpovídající práva: rm /etc/passwd rm: smazat proti zápisu chráněný běžný soubor /etc/passwd? y rm: nelze odstranit /etc/passwd: Operace zamítnuta
V uvedeném případě uživatel bittler požadovaná práva nemá, systém mu tedy požadavek na smazání souboru odepřel.
54
2.2. OPRÁVNĚNÍ SOUBORŮ A JEJICH VLASTNICTVÍ
2.2.1
Kategorie uživatelů a přístupová práva
V Linuxu se v souvislosti se souborovými právy rozlišují tři kategorie uživatelů: • vlastník souboru (angl. owner), • členové skupiny, která je souboru přidělena (angl. group), • všichni ostatní uživatelé (angl. others). Každé uživatelské kategorii lze odděleně přiřadit přístupová práva k souboru. Jsou tři a jde o právo číst (r jako angl. read), právo zapisovat (w jako angl. write) a právo spouštět (x jako angl. execute). U souborů se uplatňuje ještě jedna trojice speciálních práv, a sice SUID, SGID a sticky bit. Přístupová práva se ukládají pro každý soubor (a také pro adresáře, soubory zařízení, sokety, roury apod.) na úrovni souborového systému ve skupině po třech bitech.
Obrázek 2.1: Přístupová práva souborového systému Pomocí ls -l názevsouboru lze přístupová práva zobrazit (viz také ukázku 1.5.3 na straně 29): ls -l test.txt -rw-r----- 1 bittler it11fa
208
bře 10 21:55 test.txt
Soubor test.txt je běžný soubor (-). Jeho vlastníkem je uživatel bittler, který ho smí číst a měnit (rw-). Souboru je přidělena skupina it11fa. Všichni členové této skupiny smí soubor číst (r--). Ostatní uživatelé nemohou dělat nic, k souboru nemají žádná práva (---). V následujícím příkladu jsou představeny zvláštnosti v oprávnění souborů, v nichž jsou uložené databáze uživatelů a hesel: ls -ld /etc/passwd /etc/shadow -rw-r--r-- 1 root root 1561 -rw------- 1 root shadow 1187
lis 22 12:45 /etc/passwd lis 22 18:33 /etc/shadow
Soubor s databází uživatelů /etc/passwd mohou číst všichni uživatelé (r--), ale zapisovat do něj (rw-) může jen Přístup k souboru s hesly /etc/shadow pro čtení a zápis má jen root. Nikdo jiný (---) k němu žádný přístup nemá (také bez ohledu na skupinu: ---). root.
Speciální práva: SUID, SGID a sticky bit Na následujícím příkladu si ukážeme, jak speciální práva4 fungují: ls -ld /tmp drwxrwxrwt -rwsr-xr-x -rwxr-sr-x
Do adresáře /tmp mohou zapisovat všichni uživatelé. To znamená, že každý z nich tam může číst, vytvářet a mazat soubory. Protože je ale současně nastaven sticky bit (rwt), smí každý uživatel mazat jen ty soubory, které patří jemu.
SUID u programů Soubor /usr/bin/passwd je přesněji řečeno program pro nastavení hesla. Pokud si chce uživatel změnit heslo, spustí tento program a zadá nové heslo. Uložit heslo do databáze hesel v souboru /etc/passwd znamená, že jsou potřeba práva zápisu na tento soubor. Těmi ale disponuje jen uživatel root (viz výše). Běžně se programy spouštějí vždy s právy toho uživatele, který je spustil. Pomocí speciálního práva SUID (angl. set user ID, nastavit číslo uživatele) se ale program passwd spustí s právy vlastníka souboru (zde je to root), což programu umožní do souboru s hesly zapisovat. 4V
literatuře a praxi se často používá slovo bit“ nebo příznak“. V textu používáme jak speciální práva“, tak bity“. Jde o totéž. Pozn. překl. ” ” ” ”
55
LEKCE II – SPRÁVA UŽIVATELŮ A OPRÁVNĚNÍ
SGID u programů Speciální právo SGID (angl. set group ID, nastavit číslo skupiny) funguje podobně jako SUID. Při spuštění programu se použije GID jeho souboru a nikoliv GID uživatele, který ho spustil. Pro shora uvedený příklad platí, že pokud běžný uživatel spustí program /usr/bin/wall, je tento spuštěn s právy skupiny tty. Pomocí příkazu wall lze přihlášeným uživatelům posílat zprávy. SGID u adresářů
Je-li SGID nastavený u adresářů, je souborům v adresáři nastavena skupina adresáře a nikoliv (jak je běžné) skupina uživatele, který soubor vytvořil. Pro správnou funkčnost SUID, GUID a sticky bitu je nutné, aby měl soubor nastavené právo spouštět 1. v případě SUID vlastníkem, 2. v případě GUID skupinou, 3. v případě sticky bitu ostatními. Pokud se při výpisu ls -l zobrazují jednotlivá speciální práva velkými písmeny (např. -rwSr-xr-x, drwxrwxrwT), pak není odpovídající právo ke spuštění nastaveno a speciální právo tudíž není aktivní.
2.2.2
Změna přístupových práv a vlastnictví
K úpravám přístupových práv a vlastnictví souboru se používají následující příkazy: chmod
Změnit přístupová práva.
chown
Změnit vlastnictví souboru.
chgrp
Změnit příslušnost ke skupině.
Nastavení přístupových práv pomocí znakové notace Pro změnu přístupových práv pomocí znakové notace se mohou použít následující písmena a symboly: Kategorie uživatelů u Vlastnictví (user, owner) g Členové skupiny (group) o Všichni ostatní uživatelé (others) a Všechny tři kategorie (all)
Práva r číst (read) w zapisovat (write) x spouštět (execute) s SUID/SGID t sticky bit
Symboly + Přidat oprávnění - Odebrat oprávnění = Nastavena budou jen tato práva všechna ostatní budou odebrána (pokud byla nastavená)
Příklad Pokud uživatel bittler chce, aby byl soubor přístupný ke čtení jen členům jeho primární skupiny it11fa a nikoliv uživatelům mimo skupinu, musí souboru pomocí chmod odebrat právo ke čtení všem ostatním (others). ls -l skript.sh -rw-r--r-- 1 bittler it11fa chmod o-r skript.sh ls -l skript.sh -rw-r----- 1 bittler it11fa
904 bře 10 21:55 skript.sh
904 bře 10 21:55 skript.sh
Aby mohl on a členové jeho skupiny skript spouštět, musí souboru ještě nastavit právo pro spuštění: chmod u+x,g+x skript.sh ls -l skript.sh -rwxrx---- 1 bittler it11fa
904 bře 10 21:55 skript.sh
Oba příkazy chmod by mohly být zkombinovány do jednoho: chmod u+x,g+x,o-r skript.sh Nastavení přístupových práv pomocí číselné notace Přístupová práva se pro každý soubor ukládají ve skupinách po třech bitech. Je-li oprávnění aktivní, je nastavený odpovídající bit. Příklad: Souboru test.txt mají být nastavena následující přístupová práva: • Vlastník: • Skupina: • Ostatní:
Obrázek 2.2: Přístupová práva v číselné notaci • Speciální práva nemají být nastavena. Číselný (oktalový, osmičkový) zápis práv se získá přečtením číslic označujících aktivní bity zprava doleva. Nastavení bitů podle výše uvedeného zadání se provede spuštěním chmod 0754 test.txt. Speciální práva nemají být nastavena, takže úvodní nulu lze vynechat: chmod 754 test.txt. Příklady pro číselnou a znakovou notaci Znaky Práva Oktalově Význam u=rw,g=r,o= rw-r----- 640 Číst a měnit soubor smí pouze vlastník. Členové skupiny mohou soubor číst, všichni ostatní nemají žádný přístup. a=r,u+w rw-r--r-- 644 Všichni uživatelé v systému mohou soubor číst, jen vlastník ho smí měnit. u=rwx,g=rx,o= rwxr-x--- 750 Vlastník smí soubor číst, zapisovat do něj a spouštět ho. Členové skupiny mohou soubor číst a spouštět, ostatní nemají žádná práva. Kompletní příkazy pro soubor test.txt pak zní: Oktalová notace Znaková notace chmod 640 test.txt chmod u=rw,g=r,o= test.txt chmod 644 test.txt chmod a=r,u+w test.txt chmod 750 test.txt chmod u=rwx,g=rx,o= test.txt Přepínačem -R u příkazu chmod lze přístupová práva nastavit
rekurzivně, tedy také ve všech podadresářích.
Změna vlastnictví souborů Vlastnictví souborů smí měnit jen root! Pro změnu vlastníka souboru se použije příkaz chown: chown [Volby] Vlastník[:Skupina] názevsouboru
Pro změnu skupiny, která smí k souboru přistupovat, se použije příkaz chgrp: chgrp [Volby] Skupina názevsouboru
Příklad: Uživatelka janist se má stát novým vlastníkem souboru /tmp/test.txt: sudo ls -l /tmp/test.txt -rwxrw-r-- 1 bittler it11fa 2508 srp 21 21:55 /tmp/test.txt sudo chown janist /tmp/test.txt ls -l /tmp/test.txt -rwxrw-r-- 1 janist it11fa 2508 srp 21 21:55 /tmp/test.txt
Potom se souboru přiřadí skupina it11fs: sudo chgrp it11fs /tmp/test.txt ls -l /tmp/test.txt -rwxrw-r-- 1 janist it11fs 2508 srp 21 21:55 /tmp/test.txt
Pokud je potřeba změnit vlastníka souboru a také přiřazení skupiny, lze to provést jedním příkazem chown. Kromě jména uživatele je možné zadat také název skupiny, vzájemně se oddělují dvojtečkou: sudo chown janist:it11fs /tmp/test.txt
Také příkazy chown a chgrp pracují rekurzivně, pokud je použit přepínač -R.
57
LEKCE II – SPRÁVA UŽIVATELŮ A OPRÁVNĚNÍ
Cvičení: Příprava na vypracování následujících úkolů: Vytvořte skupiny it11fa a it11se a uživatelské účty brunnefl a summerma. Jako root spusťte následující příkazy: groupadd -g 1010 it11fa groupadd -g 1020 it11se groupadd -g 2000 photo useradd -m -g it11fa -G photo brunnefl useradd -m -g it11se -G photo summerma echo "brunnefl:tajneheslo" | chpasswd echo "summerma:tajneheslo" | chpasswd
Poznámka: Program chpasswd načítá uživatelské jméno a heslo ze standardního vstupu. Oba údaje jsou od sebe odděleny dvojtečkou, heslo se tedy zadává v čitelné formě jako běžný text. Použité příkazy si pokud možno zapište. 1. Doplňte do tabulky chybějící údaje: Přihlašovací jméno
Domovský adresář
Primární skupina
Sekundární skupina
brunnefl summerma
Heslo tajné tajné
2. Nyní se v jiné konzoli přihlaste jako brunnefl. Změňte pracovní adresář na /tmp a pomocí echo Ahoj >testsoubor vytvořte soubor. Nastavte souboru testsoubor následující práva: Vlastník: číst, zapisovat, spouštět; skupina: číst; ostatní: žádná práva, speciální práva nenastavovat. Zadejte varianty příkazu chmod se znakovou a číselnou notací: Znaková notace:
Číselná notace:
3. Přihlaste se v jiné konzoli jako summerma. Smí summerma číst obsah souboru /tmp/testsoubor? Pokud ano, jako brunnefl tomu zabraňte a odstraňte odpovídající práva. Pokud ne, jako brunnefl to povolte a přidejte odpovídající práva. Opět zadejte varianty příkazu chmod v obou notacích: Znaková notace:
Číselná notace:
Jak si ověříte, že jste úkol úspěšně splnili?
4. Krátce vysvětlete, co to znamená, když má adresář nastavený sticky bit.
58
2.2. OPRÁVNĚNÍ SOUBORŮ A JEJICH VLASTNICTVÍ
5. Právo zápisu do adresářů. Jako root proveďte následující: mkdir /testovaciadresar chmod 777 /testovaciadresar echo zdravi vas root > /testovaciadresar/testsoubor chmod 644 /testovaciadresar/testsoubor
6. Přihlaste se nyní jako brunnefl. Proč nemůžete do souboru testsoubor zapisovat, např. takto? echo ahoj >> /testovaciadresar/testsoubor
7. Pokuste se smazat soubor pomocí rm -f /testovaciadresar/testsoubor. Zdůvodněte, co se stalo!
8. Nastavte nyní jako root adresáři /testovaciadresar sticky bit. Příkaz:
Vytvořte jako brunnefl soubor: echo brunnefl > /testovaciadresar/brunnefl Vytvořte jako summerma soubor: echo summerma > /testovaciadresar/summerma
9. Smí summerma smazat soubor uživatele brunnefl (a obráceně)? Svou odpověď zdůvodněte.
10. Jako summerma se příkazem newgrp photo přidejte do skupiny photo a proveďte následující příkaz: echo summerma > /testovaciadresar/summerma-photo
Které skupině bude tento soubor přiřazen?
Umožněte této skupině číst a zapisovat soubor a zakažte jí všechno ostatní: chmod g=rw,o= /testovaciadresar/summerma-photo
Přihlaste se jako brunnefl, přidejte se pomocí newgrp photo do skupiny photo a otestujte pomocí echo brunnefl >> /testovaciadresar/summerma-photo
jestli má brunnefl právo zápisu do tohoto souboru.
59
LEKCE II – SPRÁVA UŽIVATELŮ A OPRÁVNĚNÍ
11. Úklid: Smažte jako root vytvořené skupiny, uživatele a adresáře: userdel -r brunnefl userdel -r summerma groupdel it11fa groupdel it11se groupdel photo rm -r /testovaciadresar
2.2.3
Otázky a úkoly
1. Přeložte následující příkazy ze znakové notace do číselné (oktalové). chmod o=,g=r,u=rw test.txt chmod a=rw,g-w,o-r test.txt
2. Přeložte následující příkazy z oktalové notace do znakové. chmod 751 test.txt chmod 642 test.txt
3. Příkaz ls -l testsoubor aktuálně zobrazuje následující informace: -r-xr-xr-x
1
janist
it11fs
179
čec 27 15:58 testsoubor
Zadejte kompletní příkaz, kterým uživatelka janist změní práva souboru testsoubor tak, že skupina ho bude moci jen číst, vlastník ho bude moci číst a zapisovat do něj a všichni ostatní nebudou mít k souboru žádná práva. Příkaz zadejte ve znakové i číselné notaci:
4. Pročtěte si následující výpis: ls -l test.txt -rwxr-xr-- 1 bittler it11fa příkaz1 ls -l test.txt -rw-r--r-- 1 bittler it11fa příkaz2 ls -l test.txt -rw------- 1 bittler it11fa
208 bře 10 21:55 test.txt
208 bře 10 21:55 test.txt
208 bře 10 21:55 test.txt
Jaké dva příkazy byly spuštěny a provedeny? Zadejte je v kompletním znění: příkaz1 příkaz2
5. K čemu se používají sticky bit, SUID bit a GUID bit?
60
2.2. OPRÁVNĚNÍ SOUBORŮ A JEJICH VLASTNICTVÍ
6. Jak se vlastně sticky bit, SUID bit a GUID bit nastavují? Uveďte příklady v číselné a znakové notaci.
7. Přečtěte si následující výpis: ls -ld /testovaciadresar drwxrwxrwT 1 root root
4096
Lis 12 19:25 /testovaciadresar
Jaký problém vidíte a jak ho vyřešíte?
8. Pomocí následující, trochu objemné, sekvence příkazů se zobrazí výpis příkazu ls s vlevo vypsanými právy v osmičkové soustavě. Vyzkoušejte to! ls -l | awk '{k=0; for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i)); ←if(k)printf("%0o ",k);print}'
61
LEKCE II – SPRÁVA UŽIVATELŮ A OPRÁVNĚNÍ
62
Kapitola 3
Lekce III – Skripty usnadňují práci Tématem této části je vytváření skriptů a práce s nimi. Nejprve si ukážeme, jak skript vytvořit a nastavit mu příznak ke spuštění, aby se dal rovnou spouštět. Abyste mohli programovat“, měli byste znát proměnné a umět s nimi pracovat. ” K tomu jsou potřeba také parametry skriptu. Po těchto základních dovednostech se zaměříme na vytváření skupin pro každou třídu, ale napřed se naučíme využívat cykly, protože nebudeme zakládat jen jednu skupinu, nýbrž mnoho skupin. Abychom mohli provádět různé zkoušky, např. jestli nějaký soubor vůbec existuje, potřebujeme ovládat podmínky a reagovat na ně. Až budeme mít skupiny vytvořené, založíme uživatelské účty pro konkrétní uživatele. K tomu budeme předtím potřebovat jména žáků, která zapíšeme určitým standardizovaným způsobem. Každý žák bude mít své vlastní heslo, které musíme vygenerovat. Aby mohl učitel číst a zapisovat do všech adresářů, musí být vytvořen uživatel s rolí správce, která to umožní.
V posledních kapitolách jste se naučili používat a spouštět různé příkazy. Jistě jste zjistili, že pokud opakovaně používáte stejné příkazy, je s tím spojeno množství ruční práce“, protože je nutné měnit jen některé parametry. Tu obtěžující ruční ” práci lze odstranit využitím malých skriptů a z toho plynoucí automatizací. Skripty jsou v nejjednodušší formě příkazy, které se zapíší do textového souboru a postupně jsou zpracovávány. Skripty, které si ukážeme v této kapitole, jsou shellové (Bash) skripty, jsou tedy závislé na možnostech shellu Bash. Existuje více možností, jak skripty vytvářet. Lze použít jakýkoliv shell (např. Korn, Thompson, C, Bash, Z…), který je v systému nainstalován. Ale využít lze také jakýkoliv interpretovaný jazyk jako Perl, Python, Ruby, Lua, Rexx a další. Podle jazyka se liší nabídka funkcí, možnosti připojení externích knihoven a samozřejmě také rychlost vykonávání. Pro naše účely ale bohatě stačí možnosti Bashe.
3.1.1
První skript
První skript zobrazí aktuální datum a jméno uživatele, který skript spustil. #!/bin/bash echo 'Dnes je :' `date` echo 'Přihlášený uživatel :' $USER
Dnes je : So srp 16 16:33:31 CEST 2014 Přihlášený uživatel : uzivatel
První řádek začíná znaky #! a označuje se jako Shebang (nebo také hash-bang)1 . Tímto řádkem je řečeno, kterým programem se má skript zpracovat. Pak následuje konec řádku. Od řádku dvě už následují patřičné příkazy skriptu.
3.1.2
Spuštění skriptu
Aby mohl být skript vůbec spuštěn, musí mít soubor nastavené právo pro spuštění ( execute“) (viz kapitola 2.2.1 na ” straně 55). chmod +x prvniskript
Skript pak můžete spustit přímo v adresáři pomocí ./prvniskript. Pokud se nachází v adresáři, který je uvedený v proměnné PATH, není potřeba zadávat žádnou cestu a stačí jen jeho název.
3.1.3
Proměnné
Proměnné jsme zmínili už na straně 19. Například proměnnou HOME, která standardně obsahuje absolutní cestu k domovskému adresáři. #!/bin/bash echo 'Domovský adresář:' $HOME
Domovský adresář: /home/uzivatel
Má-li se obsah proměnné vypsat na obrazovku, pak se před jméno proměnné píše znak $. Nová proměnná se vytvoří uvedením jména a přiřazením obsahu. Pokud jsou součástí obsahu mezery, musí být uveden v uvozovkách. #!/bin/bash mojePromenna="Obsah proměnné" echo 'mojePromenna:' $mojePromenna
mojePromenna: Obsah proměnné
Zobrazení všech proměnných Příkazem env se zobrazí všechny proměnné, které se používají v aktuálním sezení Bash shellu. Pokud chcete nějakou proměnnou odstranit, použijte příkaz unset.
Které uvozovky použít? Pokud text, který představuje jeden úsek či hodnotu, obsahuje mezery, musí být uveden v uvozovkách, protože jinak shell nepozná, co patří k sobě (mezera běžně slouží jako oddělovač). Říká se tomu quoting, quote“ je angl. ” uvozovka. Existují dvě možnosti: "Jeden úsek textu"
Dvojitými horními uvozovkami se text vyznačí jako jeden celek. Shell interpretuje obsah a nahradí např. proměnné jejich obsahem. 'Jeden úsek textu'
Jednoduchými horními uvozovkami (apostrofy) se text také vyznačí jako jeden celek, shell ale obsah nezpracovává. 1 http://en.wikipedia.org/wiki/Shebang_(Unix)
dvojité uvozovky : /home/uzivatel jednoduché uvozovky : $HOME
Jednoznačné názvy proměnných Nejednoznačná jména proměnných mohou způsobit různé problémy, viz následující příklad: #!/bin/bash Linux="Linux" Essentials="Essentials" LinuxEssentials="Kurz $Linux $Essentials" echo "$LinuxEssentials" echo "${Linux}Essentials"
Kurz Linux Essentials LinuxEssentials
Jednoznačný výběr konkrétní proměnné lze provést uzavřením jejího jména do složených závorek.
Proměnné jsou beztypové! V Bashi nemají proměnné žádný speciální typ jako třeba v Javě. Podle toho, jaký typ je očekáván, je textový řetězec převeden např. na číslo. Pokud se převod nezdaří, zobrazí se chybové hlášení. Důležité proměnné v Bashi $#
Počet parametrů aktuálního skriptu.
$0
Název skriptu.
$1-$9
Prvních devět parametrů skriptu.
$*
Všechny parametry (použijte "$*").
$@
Všechny parametry (použijte "$@"), ale každý parametr bude uzavřený do uvozovek.
$?
Návratová hodnota (exit status) příkazu (více k tématu na straně 70).
$!
PID posledního příkazu (více k tématu na straně 23) .
$$
PID aktuálního skriptu.
3.1.4
Parametry
Skriptu můžete – podobně jako každému příkazu – předávat parametry (viz kapitola 1.4.2 na straně 23). Parametry jsou postupně očíslovány. První má číslo $1, druhý $2 atd. Tímto způsobem lze adresovat devět parametrů. Proměnná $0 obsahuje název skriptu. Jako příklad máme následující skript: #!/bin/bash echo 0 : $0 echo 1 : $1 echo 2 : $2 echo 3 : $3 echo 4 : $4
Výpočty s proměnnými Obsahují-li proměnné jen celá čísla, lze s nimi snadno provádět jednoduché výpočty. Slouží k tomu příkaz let, který používá aritmetiku celých čísel.
65
LEKCE III – SKRIPTY USNADŇUJÍ PRÁCI
#!/bin/bash a=7 b=5 let x=a+b echo 'a+b :' let x=a-b echo 'a-b :' let x=a/b echo 'a/b :' let x=a*b echo 'a*b :'
$x $x
a+b a-b a/b a*b
: : : :
12 2 1 35
a+b a-b a/b a*b
: : : :
12 2 1 35
$x $x
Místo let lze používat také $((...)). #!/bin/bash a=7 b=5 x=$(($a+$b)) echo 'a+b :' x=$(($a-$b)) echo 'a-b :' x=$(($a/$b)) echo 'a/b :' x=$(($a*$b)) echo 'a*b :'
$x $x $x $x
Další možnosti ohledně výpočtů nabízí příkaz expr. Zadání výpočtu se příkazu expr předává pomocí argumentů, proto se hvězdička pro násobení musí uzavřít do apostrofů, jinak by ji shell zpracoval (expandoval). #!/bin/bash a=7 b=5 x=`expr $a + $b` echo 'a+b :' $x x=`expr $a - $b` echo 'a-b :' $x x=`expr $a / $b` echo 'a/b :' $x x=`expr $a '*' $b` echo 'a*b :' $x
a+b a-b a/b a*b
: : : :
12 2 1 35
Pro práci s desetinnými čísly se musí použít příkaz bc. V takovém případě se výstup příkazu echo rourou |“ předává ” přímo do vstupu příkazu bc. #!/bin/bash echo '44/3' | bc -l echo 'scale=2; 44/3' | bc -l
14.66666666666666666666 14.66
Přesměrování vstupu a výstupu Mnoho příkazů disponuje třemi vstupními a výstupními kanály: Kanál 0: Standardní vstup stdin. Za standardní vstup se považuje klávesnice. Kanál 1: Standardní výstup stdout. Standardním výstupem je obrazovka. Kanál 2: Standardní chybový výstup stderr. Standardním chybovým výstupem je obrazovka. Přesměrování výstupu Výstup se přesměruje pomocí znaku >, resp. >>. Příklady: ls –l > soubor1
66
Výpis příkazu ls –l nesměřuje na obrazovku, nýbrž do souboru soubor1. Pokud soubor1 ještě neexistuje, bude vytvořen. Pokud už existuje, bude přepsán.
3.1. ÚVOD DO PROGRAMOVÁNÍ SKRIPTŮ
Obrázek 3.1: Přesměrování vstupu a výstupu ls –l >> soubor1
Původní obsah soubor1 nebude přepsán. Výstup z příkazu bude připojen za obsah souboru soubor1.
Přesměrování vstupu Vstup pro příkaz může být přesměrován z klávesnice na soubor. Příklad: Příkaz wc čte data ze standardního vstupu (kterým je klávesnice) a vypíše na obrazovku počet všech řádek, slov a znaků. Přesměrováním vstupu můžeme získat počet řádků, slov a znaků konkrétního souboru. wc < soubor1
Zobrazí na obrazovce počet řádků, slov a znaků souboru soubor1.
Současné přesměrování vstupu i výstupu wc < soubor1 > soubor2
Zapíše počet řádků, slov a znaků souboru soubor1 do soubor2.
Přesměrování chybového výstupu Navzdory přesměrování výstupu do souboru se chybová hlášení stále zobrazují na obrazovce. Pokud je chcete také přesměrovat do souboru, musíte použít následující zápis. Příklad: wc < soubor1 > soubor2 2> souborchyby
Výraz 2> souborchyby přesměruje chybová hlášení do souboru souborchyby. Číslice 2 v zápisu 2> popisuje standardní chybový výstup (označený jako kanál 2). Konstrukcí ls –l > vystup 2>&1 se oba výstupní kanály přesměrují do souboru vystup. Přesměrování výstupu příkazu na vstup následujícího příkazu Přesměrování výstupu jednoho příkazu na vstup dalšího příkazu se provádí pomocí roury (angl. pipe, pipeline). Symbol pro rouru je |“. Předávaná data se přitom vůbec nezobrazí na obrazovce. ” Příklad: ls –l | wc
Výstup příkazu ls –l se předá jako vstup příkazu wc. Výstup příkazu wc se zobrazí na obrazovce. Pokud byste chtěli – třeba kvůli kontrole chyb – sledovat i výstup, můžete jeho výpis duplikovat příkazem tee a uložit do souboru. Příklad: ls | tee ls_vysledek | sort
Obrázek 3.2: Duplikování výpisu dat
67
LEKCE III – SKRIPTY USNADŇUJÍ PRÁCI
Výsledek, vytvořený příkazem ls, se pomocí příkazu tee uloží do souboru ls_vysledek. Kromě toho se předá příkazu (viz obrázek 3.2 na předchozí straně).
sort
Here document Standardní vstup je přesměrován na tzv. here document, což je posloupnost řádků, které lze upravovat na aktuálním místě vstupu skriptu (angl. here je zde, tady). V praxi se to používá pro ruční vložení dat do běžícího skriptu (místo načítání ze souboru). příkaz <
Použitá značka musí být na konci řádku a před ní nesmí být mezera nebo jiný prázdný znak. Here document předává konce řádků (\n) dál. V případě, že je ke čtení použit stdin, odpovídají tyto konce stisku klávesy Enter. Příklad: cat <<EOM Ahoj, já jsem here document: $(date) EOM
Ahoj, já jsem here document: So srp 16 16:33:31 CEST 2014
Cvičení: 1. Vytvořte malý skript, kterému zadáte jako parametr dvě čísla. Skript je jednou sečte, jednou odečte a výsledek pokaždé zobrazí. 2. Najděte pomocí manuálové stránky a internetu další standardní operátory jako +“, -“, *“, /“, …, poznačte si je ” ” ” ” a vyzkoušejte v malém skriptu. 3. Vytvořte si skript bspshowparam uvedený v 3.1.4 a spusťte ho: bspshowparam "A B C D" bspshowparam A 'D C' D bspshowparam 1 2 3 4 5 6 7 8 9 0 a b c d e
Co se stalo?
4. Vyřešte střídavě pomocí let, přímo v Bashi pomocí ((...)) a pomocí expr následující úkoly: 2697 - 487 2697 * 487 2697 / 87 2697 + 3954 5. Spočítejte pomocí bc následující úkoly s pěti desetinnými místy: 2.48 + 1.86 56.92 / 4.7 6. Přiřaďte proměnné var postupně následující hodnoty přesně tak, jak jsou uvedené za sebou. Po každém přiřazení si obsah proměnné zobrazte, abyste viděli, zda vše proběhlo správně. Obsah proměnné "Obsah proměnné" $var $HOME
68
3.2. VYTVÁŘENÍ SKUPIN
3.2
Vytváření skupin
K automatickému vytvoření uživatelských účtů pro žáky a učitele bude výhodné vytvořit si skript. Informace o žácích budou získány ze školního informačního systému v následujícím formátu. Sloupce jsou odděleny pomocí dvojtečky :“ ” a mají tento význam. Příjmení:Jméno:Třída Pyka:Johannes:IT11FS Gerber:Dennis:IT11FS Ewender:Nils:IT11FS Feiler:Matthias:IT11FS Wilms:Norman:IT11FS Hollmann:Michael:IT11FS Kreiselmeier:Jens:IT11FS Mannweiler:Christopher:IT11FS Pranckl:Klaus:IT11FS Liepold:Michael:IT11FS Aurich:Karl:IT11FS Meyer:Frank:IT11FS Jakob:Jens:IT11FS Bischoff:Christian:IT11FS Lehnert:Michael:IT11FS Ibanez:Dennis:IT11FS Maier:Thomas:IT11FS Brandes:Martin:IT11FS Flaim:Hendrik:IT11FS Kappl:Tony:IT11FS Volke:Christian:IT11FS Jani:Steffi:IT11FS Weniger:Herbert:IT11FS Gerlicher:Julia:IT11FS
Soubor s informacemi o žácích je strukturovaný tak, že pro každého žáka je použit jeden řádek. Proto je důležité zpracovávat obsah souboru po řádcích a data z nich extrahovat. K načítání po řádcích použijeme cyklus, ale nejprve si vysvětlíme všeobecné možnosti cyklů. Aby skripty a hlavně jejich výstupy byly krátké a přehledné, v následujících příkladech budeme pracovat jen se třemi žáky. Pyka:Johannes:IT11FS Manfred:Rolf:IT11FA Wanzinger:Guido:IT11SE
Soubor: sch.txt
3.2.2
Cykly
V Bashi existuje více možností, jak pracovat s cykly. Cyklus for slouží ke zpracování seznamu, přičemž se pro každý záznam seznamu vykonají instrukce uvedené v těle cyklu. Všeobecná syntaxe vypadá následovně: for <proměnná> in ; do # instrukce done
Poznámka: Seznam hodnot se ukončuje středníkem, za kterým – stále na tomtéž řádku – stojí do. V následujícím příkladu proběhne cyklus s hodnotami 1 až 5. #!/bin/bash for i in 1 2 3 4 5; do echo -n "$i " done
1 2 3 4 5
Lze ale také použít libovolné textové řetězce.
69
LEKCE III – SKRIPTY USNADŇUJÍ PRÁCI
#!/bin/bash for i in Merkur Venuše Země Mars Jupiter ←Saturn Uran Neptun; do echo -n "$i " done
Merkur Venuše Země Mars Jupiter Saturn Uran ←Neptun
Od Bashe verze 4 je pro číselné cykly možné použít také následující konstrukci. Její syntaxe zní: {<Startovní hodnota>....}
Délku kroku můžete vypustit, pokud má hodnotu 1. #!/bin/bash for i in {1..10..2}; do echo -n "$i " done
1 3 5 7 9
Pokud zadáte adresář a/nebo soubor pomocí zástupných znaků, bude se pracovat se seznamem souborů. #!/bin/bash for file in /etc/ali*; do echo -n "$file " done
/etc/aliases
Cyklus for může být – stejně jak je běžné v jiných programovacích jazycích – použit jako čistě iterační. Syntaxe by byla ((;;)) #!/bin/bash for (( i=1; i<=5; i++ )); do echo -n "$i " done
1 2 3 4 5
Kromě cyklu for nabízí Bash možnost použít cyklus while. Obecná syntaxe zní: while [ Podmínka ] ; do # Instrukce done
Cyklus poběží tak dlouho, dokud bude podmínka splněná, tedy bude vracet logickou hodnotu true. Původně byl na podobné testy určen příkaz test. Jeho zápis byl ale zjednodušen a nahrazen hranatými závorkami, takže může být použit v cyklech. Tabulka 3.1 na následující straně zobrazuje výběr podmínkových výrazů.
Reakce na návratovou hodnotu Každý program při ukončení vrací tzv. návratovou hodnotu (angl. return code, exit status, ve Windows error level). Ta se uchovává v proměnné $? a může být použita pro následné akce. příkaz && příkaz1 Pomocí && je návratová hodnota vyhodnocena a pokud se rovná příkaz || příkaz2 Pomocí || je hodnota vyhodnocena a pokud se nerovná nule, je
nule, je spuštěn program příkaz1. spuštěn příkaz2.
Následují další příklady k podmínkovým výrazům. #!/bin/bash a=7; b=5 test $a -gt $b && echo true || echo false
true
Jakmile test vyhodnotí, že podmínka platí, jako návratová hodnota se předá 0, jinak 1. Příkaz po && bude spuštěn jen při vrácené nule, příkaz po || zase jen tehdy, když nula vrácena nebude. #!/bin/bash a="XXX"; b="YYY" test $a = $b && echo true || echo false test $a != $b && echo true || echo false
false true
S odpovídající podmínkou můžete cyklus while použít jako iterační cyklus.
70
3.2. VYTVÁŘENÍ SKUPIN
#!/bin/bash x=1 while [ $x -le 5 ] ; do echo -n "$x " x=$(( $x + 1 )) done
1 2 3 4 5
Další způsob použití cyklu while je řádkové načítání obsahu souboru; k tomu slouží příkaz read. Zdrojový soubor se zadává přesměrováním vstupu za koncem cyklu done. Přesně tuto formu potřebujeme, abychom načetli data o žácích. Poznámka: Všimněte si, jak je pro čtení ze souboru sch.txt použito přesměrování vstupu. #!/bin/bash while read radek ; do echo $radek done < sch.txt
Pokud nyní nastavíte oddělovač sloupců IFS (angl. Internal Field Separator), můžete celý řádek hned rozložit na požadované části. Pro každý sloupec budete potřebovat jednu proměnnou, do níž obsah sloupce uložíte. #!/bin/bash IFS=":" while read prijmeni jmeno trida ; do echo "Žák: $prijmeni, $jmeno, $trida" done < sch.txt
Testuje, zda jsou si hodnoty proměnných rovny. Testuje, zda jsou hodnoty proměnných různé. Testuje, zda je hodnota první proměnné menší než druhé. Testuje, zda je hodnota první proměnné menší nebo rovna druhé. Testuje, zda je hodnota první proměnné větší než druhé. Testuje, zda je hodnota první proměnné větší nebo rovna druhé.
[ [ [ [ [ [
$a $a $a $a $a $a
-eq -ne -lt -le -gt -ge
[ [ [ [
-z -n $x $x
$z ] $z ] = $z ] != $z ]
Testuje, zda je textový řetězec prázdný. Testuje, zda není textový řetězec prázdný. Testuje, zda jsou si textové řetězce rovny. Testuje, zda jsou textové řetězce různé.
[ [ [ [ [ [ [ [
-d -e -f -r -s -w $g $g
$f ] $f ] $f ] $f ] $f ] $f ] -nt $f ] -ot $f ]
Testuje, zda jde o adresář. Testuje, zda soubor/adresář existuje. Testuje, zda jde o normální soubor. Testuje, zda je soubor čitelný, resp. zda k tomu má uživatel práva. Testuje, zda je soubor neprázdný. Testuje, zda lze do souboru zapisovat, resp. zda k tomu má uživatel práva. Testuje, zda je první soubor novější než druhý. Testuje, zda je první soubor starší než druhý.
Textové řetězce -z -n = !=
Soubory -d -e -f -r -s -w -nt -ot
Cvičení: 1. Vyzkoušejte uvedené příklady! 2. Vytvořte cyklus, jehož výstupem bude následující: 1 : 2 : 3 : 4 : 5 : 6 :
3. Vypište pomocí cyklu čísla od 10 do 100. 4. Počítejte cyklem od 100 do 10, použijte v těle cyklu test a číslo vypište jen tehdy, je-li menší než 50.
71
LEKCE III – SKRIPTY USNADŇUJÍ PRÁCI
5. Napište malý skript, který prohodí pořadí jména a příjmení. 6. Napište malý skript, který vypíše jen žáky ze třídy IT11SE.
3.2.3
Podmínky
Pokud soubor sch.txt neexistuje, zobrazí se chybové hlášení. Správným dotazem ale můžete ještě předem zjistit, jestli je soubor k dispozici. Slouží k tomu konstrukce If – Else – Instrukce. Pro podmínky se používají také výrazy z tabulky 3.1 na předchozí straně. Obecná syntaxe vypadá takto: if [ podmínka ]; then # Instrukce pro splnění podmínky else # Instrukce pro nesplnění fi
Blok else je volitelný a nemusíte ho uvádět. Podmínky podléhají stejným pravidlům jako v případě cyklu while. #!/bin/bash touch testsoubor if [ -r testsoubor ]; then echo Soubor existuje else echo Soubor neexistuje fi
3.2.4
Soubor existuje
Vícenásobný výběr
Podmínky if – else lze libovolně větvit a rozvíjet. Jakmile dosáhnete určité složitosti, začnou být nepřehledné. K vyřešení této situace se používá konstrukce case. case $promenna in hodnota1) # nějaké instrukce ;; hodnota2) # nějaké instrukce ;; hodnota3) # nějaké instrukce ;; *) # pro všechny ostatní ;; esac
Blok case se prochází shora dolů. Pokud obsah proměnné odpovídá některé z uvedených hodnot, provedou se odpovídající instrukce (až k ;;) a potom se zpracování bloku ukončí. Pokud se obsah proměnné neshoduje se žádnou uvedenou hodnotou, vykoná se univerzální blok označený hvězdičkou *. V následujícím příkladu se do proměnné var uloží hodnota Hugo. Potom se v bloku case provede odpovídající příkaz (zde je to echo Hugo ...). Bloky Peter, Uschi a * se nevykonají. var=Hugo case $var in Peter) echo ;; Hugo) echo ;; Uschi) echo ;; *) echo ;; esac
72
Peter ...
Hugo ...
Uschi ...
Nenalezeno ...
Hugo ...
3.2. VYTVÁŘENÍ SKUPIN
Hodnotu je také možné zadat přímo klávesnicí. Příkazem read se do proměnné uloží obsah standardního vstupu. read var case $var in Peter) echo ;; Hugo) echo ;; Uschi) echo ;; *) echo ;; esac
Peter ...
Hugo ...
Uschi ...
Nenalezeno ...
Dostupnost souboru s informacemi o žácích Skript pro načtení informací o žácích může být následujícím způsobem přepracován. #!/bin/bash if [ -r sch.txt ]; then IFS=":" while read prijmeni jmeno trida ; do echo "Žák: $prijmeni, $jmeno, $trida" done < sch.txt else echo Soubor sch.txt nebyl nalezen! fi
Pokud použijete vyhledávače, najdete na internetu ještě další řešení, jak načítat soubor po řádcích. Následuje často ukazovaný příklad, který je ale komplexnější, vyžaduje externí příkazy (cut, echo), a proto je značně pomalejší. Tím se ale nebudeme dále zabývat. #!/bin/bash for i in $(cat sch.txt); do prijmeni=$(echo $i | cut -d: -f1) jmeno=$(echo $i | cut -d: -f2) trida=$(echo $i | cut -d: -f3) echo Žák: $jmeno, $prijmeni, $trida done
Nyní máme k dispozici data pro vytvoření třídních skupin. Bylo dohodnuto, že názvy skupin (zde označení třídy) budou používat malá písmena. Vychází se také z toho, že označení třídy neobsahuje žádné speciální znaky (např. diakritiku), jen A–Z a 0–9. Znaky můžete převést pomocí příkazu tr (viz kapitola 4.4.6 na straně 97). Obecná syntaxe je tato: tr řetězec1 řetězec2
Tím bude znak z řetězce1 nahrazen znakem z odpovídající pozice v řetězci2. V příkladu bude písmeno A nahrazeno číslicí 1, B číslicí 2 atd. #!/bin/bash echo ABCDEF | tr 'ABCDEF' '12345'
123455
Určité posloupnosti znaků mají už definovány své zkratky, následuje jejich výběr: [:alnum:]
Znaky a číslice.
[:blank:]
Bílé znaky“ (mezery, tabulátory, …). ”
73
LEKCE III – SKRIPTY USNADŇUJÍ PRÁCI
[:digit:]
Číslice.
[:lower:]
Malá písmena.
[:upper:]
Velká písmena.
V následujícím příkladu budou v proudu všechna velká písmena převedena na malá: #!/bin/bash str="IT11SE" mala=`echo $str | tr '[:upper:]' '[:lower:]'` echo $str ' -> ' $mala
IT11SE
->
it11se
Cvičení: Vytvořte převodní pravidlo pro tr, které zajistí, že podivná“ jména souborů (s mezerami, zvláštními znaky nebo smí” chanými malými a velkými písmeny) budou převedena na nová, psaná malými písmeny a bez zvláštních znaků nebo mezer.
3.2.6
Zjištění dostupných skupin
V souboru s informacemi o žácích se pravidelně objevuje třída. To znamená, že nelze použít každý záznam pro vytvoření skupiny. Pokud skupina již existuje, zobrazí se při pokusu o její vytvoření chyba addgroup: Skupina „xyz“ již existuje.“ ” Proto je potřeba před každým vytvořením testovat, zda skupina náhodou už neexistuje. Jak je napsáno v kapitole (více k tématu na straně 49), všechny skupiny jsou uložené v souboru /etc/group. Příkazem grep snadno zjistíte, jestli skupina existuje. Použije se k tomu regulární výraz ^it11se:. Ten znamená: Hledej na začátku řádku výraz it11se následovaný dvojtečkou. Více k příkazu grep a regulárním výrazům najdete na straně 95. #!/bin/bash str="it11se" echo $str grep "^$str:" /etc/group >/dev/null \ || echo "Skupinu lze vytvořit"
it11se Skupinu lze vytvořit
Příkaz grep vrací jako návratovou hodnotu nulu, pokud je záznam nalezen. Pokud nalezen není, může být následně pomocí || založena nová skupina. #!/bin/bash echo "Vytvořit třídy " if [ -r sch.txt ]; then IFS=":" while read prijmeni jmeno trida ; do kl=`echo $trida | tr '[:upper:]' '[:lower:]'` grep "^$kl:" /etc/group >/dev/null \ || sudo groupadd $kl done < sch.txt fi
Cvičení: Upravte skript tak, aby vytvořil všechny skupiny (třídy), které jsou dostupné v souboru s informacemi o žácích.
3.3
Vytváření uživatelů
Jakmile máte vytvořeny skupiny, můžete zakládat uživatelské účty. Postup je následující: 1. načtení souboru s žáky – již vyřešeno, 2. vygenerování uživatelských jmen žáků (přihlašovací jména), 3. přidání uživatelů a přiřazení do odpovídajících skupin, 4. sestavení seznamů s uživatelskými jmény a hesly.
74
3.3. VYTVÁŘENÍ UŽIVATELŮ
3.3.1
Vygenerování uživatelských jmen
Existuje více možností, jak sestavit uživatelské přihlašovací jméno. Oblíbené jsou dvě možnosti: 1. šest písmen příjmení a dvě písmena křestního jména, vše malými znaky bez diakritiky; z Hollmann, Michael vznikne hollmami, 2. celé příjmení + tečka + celé křestní jméno (vše malými písmeny a bez diakritiky); z Hollmann, Michael vznikne hollmann.michael. Pokud je přihlašovací jméno už obsazeno, připojuje se číslice, aby se zachovala jedinečnost jména. To ale v našem případě nenastalo, takže pracujeme s jednoduchou variantou. Používáme druhou variantu – prijmeni.jmeno. Upravíme si skript použitý pro vytváření skupin: #!/bin/bash echo "Vytvoření uživatele" if [ -r sch.txt ]; then IFS=":" while read prijmeni jmeno trida ; do kl=`echo $trida | tr '[:upper:]' '[:lower:]'` ke=`echo $prijmeni.$jmeno | tr '[:upper:]' '[:lower:]'` echo $ke done < sch.txt fi
Vytvoření uživatele pyka.johannes manfred.rolf wanzinger.guido
I v tomto případě je potřeba ověřit, zda nově zakládaný uživatel už neexistuje. Použije se stejný mechanismus jako v případě ověřování skupiny. Cvičení (pro šikovné): Vytvořte skript, který v případě duplicitních záznamů vytvoří přihlašovací jméno s rozlišovací číslicí.
3.3.2
Generování hesel
Všechny potřebné hodnoty – až na jednu – můžeme stanovit na základě dříve získaných informací. Tou jedinou je heslo. Existuje více možností, jak heslo vygenerovat. Oblíbenou hodnotou pro první heslo bývá datum narození nebo nějaká náhodná hodnota. Datum narození žáků ale nemáme k dispozici, takže tato možnost odpadá. Náhodné hodnoty se dají číst z virtuálního souboru /dev/urandom. Jde o binární hodnoty mezi 0 a 255, tedy také o znaky, které nelze zobrazit, protože nemají žádný viditelný symbol. Také se nedají zadat pomocí klávesnice. Pomocí programu tr zajistíme, že ty znaky, které neodpovídají konkrétnímu pravidlu, nebudou použity. Vytvořené heslo smí obsahovat jen znaky od A do Z (malé a velké) a číslice. Délka bude omezena na osm znaků. #!/bin/bash echo "Vygenerování hesla" pw=$(tr -cd a-zA-Z0-9 < /dev/urandom | head -c 8) echo "PW: $pw"
Vygenerování hesla PW: I1jKFvpw
Program tr načítá znaky z virtuálního souboru. Přepínačem -c se nastaví, že tr použije pouze jeden textový řetězec. Přepínač -d se postará o to, že znak nebude nahrazen, nýbrž vymazán. To znamená, že všechny znaky, které nesplňují pravidlo a-zA-Z0-9, budou při čtení odstraněny a nebudou tedy předány dále programu head. Ten zajišťuje, že se ze vstupních dat přečte vždy jen prvních osm znaků (parametr -c). Program useradd neočekává heslo jako běžný text, nýbrž šifrovaně. K zašifrování se používá program md5pass, který pracuje na principu algoritmu md5.
Message-Digest Algorithm 5 MD5 je kryptografická hashovací funkce, která z textu libovolné délky vytvoří 128bitový kontrolní součet. V Linuxu se tento princip používá k vytvoření šifrovaného záznamu z hesla. Z výsledného záznamu se původní heslo nedá rekonstruovat. Je ovšem možné přeměnit na kontrolní součet slovníky a generovaná textová hesla. Pokud textové heslo a kontrolní součet uložíte do databáze, můžete heslo zjistit, když máte kontrolní součet. Každopádně je tento postup hodně nákladný a náklady výrazně stoupají, když je textové heslo dostatečně komplikované. Místo MD5 lze použít nějaký jiný hashovací algoritmus, třeba SHA-2. #!/bin/bash echo "Generování hesla" pw=$(tr -cd a-zA-Z0-9 < /dev/urandom | head -c 8) pwmd5=$(md5pass $pw) echo "PW: $pw" echo $pwmd5
Nyní už můžeme příkazem useradd vytvořit přihlašovací jména pro žáky (více k tématu na straně 46). useradd -m -U -G <skupiny> -p -s <shell> -c
Parametry mají následující význam: -m
Vytvořit domovský adresář.
-U
Vytvořit skupinu se stejným jménem, jako je přihlašovací jméno.
-G <skupiny>
Zařadit uživatele do zadaných skupin (zde jako skupina použita třída).
-p
Šifrované heslo.
-s <shell>
Použít příkaz shellu (používáme Bash).
-c
Komentář k uživatelskému účtu (zadáváme jméno a třídu).
Vlastní přihlašovací jméno uživatele.
Nyní je vhodná doba pro vytvoření uživatelů a ještě předtím pro úpravu dosavadního skriptu a jeho doplnění o výše uvedené příklady. Zobrazíme si v něm také informaci o vytvořeném účtu a skupině. K tomuto účelu musíme příkazy sloučit do jedné skupiny pomocí kulatých závorek, aby byly pro || brány jako jeden příkaz. #!/bin/bash echo "Vytvoření uživatelů" if [ -r sch.txt ]; then IFS=":" while read prijmeni jmeno trida ; do kl=`echo $trida | tr '[:upper:]' '[:lower:]'` # Vytvořit skupinu, pokud už neexistuje grep "^$kl:" /etc/group >/dev/null \ || ( sudo groupadd $kl; echo Skupina: $kl ) ke=`echo $prijmeni.$jmeno | tr '[:upper:]' '[:lower:]'` # Generovat heslo pw=$(tr -cd a-zA-Z0-9 < /dev/urandom | head -c 8) pwmd5=$(md5pass $pw) # Založit uživ. účet, pokud neexistuje grep "^$ke:" /etc/passwd >/dev/null \ || ( sudo useradd -m -U \ -G $kl \ -p $pwmd5 \ -s /bin/bash \ -c "$prijmeni, $jmeno ($trida)" \ $ke ; echo Přihlašovací jméno: $ke ) done < sch.txt fi
Po provedení skriptu najdete v databázi skupin /etc/group následující záznamy: it11fs:x:1002:pyka.johannes it11fa:x:1003:manfred.rolf it11se:x:1004:wanzinger.guido pyka.johannes:x:1005: manfred.rolf:x:1006: wanzinger.guido:x:1007:
Číselné hodnoty se mohou lišit, protože jsou závislé na tom, kolik skupin bylo založeno dříve. Databáze uživatelů obsahuje následující nové záznamy.
/etc/passwd
pyka.johannes:x:1001:1005:Pyka, Johannes (IT11FS):/home/pyka.johannes:/bin/bash manfred.rolf:x:1002:1006:Manfred, Rolf (IT11FA):/home/manfred.rolf:/bin/bash wanzinger.guido:x:1003:1007:Wanzinger, Guido (IT11SE):/home/wanzinger.guido:/bin/bash
V adresáři /home/ vznikly patřičné podadresáře uživatelů. drwxr-xr-x drwxr-xr-x drwxr-xr-x
Co se týče přístupových práv, situace je následující: 1. Oprávnění na domovský adresář jsou nastavena tak, že ho každý smí číst. To by mělo být později změněno, aby ho směl číst a zapisovat do něj jen jeho vlastník (více k tématu na straně 55). 2. Měl by vzniknout ještě jeden soubor se seznamem přihlašovacích jmen a hesel, aby správce mohl sdělit žákům, jaké mají přihlašovací jméno a heslo. 3. Protože hesla budou uvedena na seznamu, musí se správce postarat o to, aby si je uživatelé po prvním přihlášení změnili. Cvičení: 1. Přepracujte uvedený skript tak, aby po jeho spuštění vznikl soubor názvem zaci-prihlasovaci-jmena.txt a následujícím obsahem: it11fs, manfred.rolf, vFRIPVKI it11fa, pyka.johannes, asd23AW3
Použijte přitom přesměrování výstupu příkazů pomocí echo: echo $kl, $ke, $pw >> zaci-prihlasovaci-jmena.txt
2. Obsah tohoto souboru následně seřaďte příkazem sort, a to podle třídy. 3. Programem passwd a jeho přepínačem -e lze nastavit, že heslu skončila jeho platnost (expirovalo) a že musí být po příštím přihlášení změněno. Přečtěte si v manuálové stránce, jak to funguje a zapracujte tuto možnost do skriptu.
3.3.4
Vytvoření uživatelských účtů učitelům
Poté, co jsme vytvořili uživatelské účty žákům, vytvoříme je nyní také učitelům. Realizace proběhne v těchto krocích: 1. vytvoření skupiny pro učitele (název ucitele), 2. učitelům Viola Lorenzová a Lars Greiner vytvořit uživatelské účty, 3. učitele ze skupiny ucitele a všech skupin přiřadit ke třídám. Cvičení: 1. Vytvořte odpovídající skript , který provede výše uvedené kroky. Informace by měl načítat ze souborů, jako je např. soubor zaci.txt. 2. Jakmile jsou skupiny a účty jednou vytvořené, skripty už se o to znovu nebudou pokoušet. Vytvořte také skript, který uživatelské účty a vytvořené skupiny zase smaže.
3.3.5
Vytvoření superuživatele
Učitel pan Greiner je správce systému a musí mít možnost získat práva roota pomocí příkazu sudo. V Ubuntu se přístup pomocí sudo řídí členstvím ve skupinách admin a sudo. V konfiguračním souboru programu sudo, který se jmenuje /etc/sudoers, to může vypadat třeba takto (jde o část výpisu): Defaults
env_reset
# Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL
77
LEKCE III – SKRIPTY USNADŇUJÍ PRÁCI
S využitím manuálové stránky a dalších zdrojů k příkazu sudo zodpovězte následující otázky a zařiďte, aby pan Greiner mohl – když bude chtít – pracovat jako superuživatel, a to bez nutnosti zadávat heslo. 1. Co se nastavuje záznamem Defaults? Jaké hodnoty lze uvést?
2. V čem spočívá rozdíl mezi skupinou sudo a admin?
3. Co znamená ALL=(ALL:ALL) ALL?
4. Za normálních okolností se musí při použití příkazu sudo zadávat vlastní heslo. Jak by znělo nastavení pro uživatele hans“, které by mu umožnilo žádné heslo nezadávat? ”
5. Popřemýšlejte nad riziky, která existují, když může uživatel spouštět příkaz sudo bez zadání hesla.
Cvičení: 1. Hodnoty Peter“, Uschi“, Hans“ a Gabi“ se mají vypsat pomocí cyklu for. Vytvořte patřičný skript. ” ” ” ” 2. Pomocí cyklu for se mají vypsat hodnoty od jedné do dvaceti (v krocích po pěti). Ukažte dva příklady řešení. 3. Navrhněte k úkolu 2 řešení pomocí cyklu while. 4. Soubor vystup se má vypsat po řádcích prostřednictvím cyklu while. Vytvořte odpovídající skript. 5. Soubor vystup obsahuje řádky s pěti sloupci. Sloupce jsou od sebe odděleny středníkem. Vaším úkolem je vypsat sloupce dva a čtyři; vytvořte k tomu účelu skript. 6. Textový řetězec Berlínská zoo“ převeďte pomocí skriptu na velká písmena. ” 7. Vytvořili jste si heslo a uložili ho do proměnné pw. Nyní ho zašifrujte a uložte do proměnné pwmd5 tak, aby se dalo použít pro příkaz useradd. Vytvořte na to skript. 8. Vytvořte malý skript, který zobrazí uživatelská čísla všech běžných uživatelů (tj. ID >= 1000) a jejich komentář. 9. Rozšiřte skript z 8 tak, aby se vypsaly také všechny skupiny (tedy primární a sekundární). Použijte příkaz grep, kterým vyfiltrujete sekundární skupiny.
78
3.4. OTÁZKY
3.4
Otázky
1. Co je napsané na prvním řádku shellového skriptu pro Bash?
2. Jak se říká prvním dvěma znakům prvního řádku shellového skriptu pro Bash?
3. Co musíte udělat, abyste mohli skript spouštět z konzole příkazem?
4. Jak se definuje proměnná a jak její obsah vypíšete?
5. Co znamená pojem quoting“? ”
6. Jaký výstup získáte spuštěním echo "$HOME" a spuštěním echo '$HOME'?
7. Jaký obsah Bash ukládá v následujících proměnných? $0 $1 $# $* $@ $? $! $$
8. Obsah proměnné i má být zvýšen o hodnotu 2. (a) Ukažte dvě možnosti v Bashi.
(b) Ukažte dvě možnosti s využitím externích příkazů.
9. Pokud je soubor vystup čitelný (a pouze tehdy), má být smazán. (a) Jak bude vypadat kód s využitím if?
(b) Jak bude vypadat kód s využitím test?
79
LEKCE III – SKRIPTY USNADŇUJÍ PRÁCI
10. Obsah souboru vystup se má cyklem while po řádcích vypsat. Vytvořte patřičný skript.
11. Jak si ověříte, že skupina ucitele“ už existuje? ”
80
Kapitola 4
Lekce IV – Zpracování fotografií z datového nosiče Práce s externími datovými médii jako USB disky, SD kartami nebo chytrými telefony patří k běžným činnostem, zejména pokud pracujete s fotkami. Fotografie z třídního výletu je potřeba sesbírat ze všech možných médií. Ne vždycky to musí být snadné. Linux rozpozná velké množství datových nosičů automaticky, ale pokud je některý z nich poškozený nebo se mu prostě nechce“, pak musíte zasáhnout ručně. ” Naštěstí Linux nabízí velké množství informací, díky kterým se dozvíte, proč datové médium nefunguje. Možná nebylo hardwarově rozpoznáno, nebo není naformátované, nebo je poškozené, protože jste ho zapomněli v autě, kde na něj pražilo slunce. Pokud máte hodně fotek z různých fotoaparátů či telefonů a od velkého množství lidí, nejprve musíte všechny sestavit do chronologického pořadí, což nebývá nijak jednoduché. Linux vám ale pomůže, protože dokáže ze souborů získat časové informace, které tam ukládá fotoaparát, a obrázky podle nich seřadit. Pro vytvoření přitažlivé fotogalerie můžete využít různých vizuálních efektů programu ImageMagick.
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
4.1
Externí média
Linux podporuje množství externích zařízení, např. DVD mechaniky, USB disky, SD karty, kamery, fotoaparáty nebo chytré telefony. U většiny systémů včetně Ubuntu stačí vložit médium do mechaniky či připojit k rozhraní USB a systém ho automaticky rozpozná a připojí tak, aby s ním aktuální uživatel mohl hned pracovat.
Obrázek 4.1: Souvislosti: Připojení USB disku Jakmile připojíte USB disk, zareaguje HAL (Hardware Abstraction Layer), který představuje mezivrstvu mezi hardwarem a softwarem. Jeho výhoda spočívá v roli univerzálního překladatele“ a díky němu nemusí software umět přímo ” pracovat s hardwarem. HAL zase spolupracuje s programy udev1 a D-BUS,2 což má za výsledek, že se např. po připojení USB disku ihned spustí správce souborů. Na patřičná oprávnění v pozadí dohlíží služba PolicyKit. Běžný uživatel o této komunikaci za normálních okolností nic netuší a nijak ji nepotřebuje. Ovšem to se změní v případě, že jsou se zařízením problémy nebo je dokonce poškozené.
4.1.1
Hlášení a logy
Při připojení USB disku se do logu zapisují odpovídající hlášení. Logované informace se ukládají do různých souborů (podle toho, od které služby pocházejí) v adresáři /var/log/. Příklady /var/log/syslog
Zde se ukládají normální systémová hlášení. Za jejich vytváření a ukládání zodpovídá démon syslogd.
/var/log/kern.log
Hlášení jádra systému – kernelu.
/var/log/dmesg
Hlášení jádra během startu systému (bootování). Tyto informace se nejprve zapíší do souboru, pokud je připojený odpovídající souborový systém. Předtím si je ale můžete přečíst pomocí příkazu dmesg. To je důležité hlavně v situaci, kdy dojde při startu k chybě a souborový systém nemůže být připojen. Díky dmesg tyto důležité informace získáte a můžete rychle najít příčinu chyby.
/var/log/auth.log
Hlášení týkající se přihlašování uživatelů do systému.
/var/log/udev
Hlášení od služby udev.
… Logovací služba se nastavuje prostřednictvím souboru /etc/rsyslog.conf a souborů v adresáři /etc/rsyslog.d/. Cvičení: Zjistěte, co dělá následující skript: sudo find /var/log -type f -exec wc -l {} \; | sort -nr | head
Hlášení dmesg během startu systému Hlášení během startu poskytují dostatek informací o průběhu startu (bootování) hardwaru a načítaných ovladačích. Dokud systém funguje podle představ svého správce, nejsou tyto informace potřeba; jejich význam se ukáže v okamžiku, kdy dojde k chybě nebo nefunkčnosti v nějaké oblasti. Následuje ukázka s komentáři:3 1 Služba udev hlídá a vyhodnocuje hardwarové události týkající se připojitelných zařízení, tedy těch, která lze připojit a odpojit za běhu počítače. Jakmile udev získá informace o novém zařízení, vyhodnotí situaci podle stanovených pravidel a zařízení vhodně pojmenuje. 2 D-BUS je služba meziprocesové komunikace IPC používaná hlavně v grafických pracovních prostředích. Prostřednictvím D-BUS spolu programy komunikují, např. že byl připojen USB disk a má se spustit správce souborů nebo že bylo vloženo audio CD a má se spustit přehrávač hudby. 3 Hodnota v hranatých závorkách je počet sekund od začátku startu systému.
82
4.1. EXTERNÍ MÉDIA
[ [ [
0.000000] Initializing cgroup subsys cpuset 0.000000] Initializing cgroup subsys cpu 0.000000] Linux version 3.0.0-17-generic (buildd@yellow) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #30-Ubuntu SMP Thu Mar 8 20:45:39 UTC 2012 (Ubuntu 3.0.0-17.30-generic 3.0.22) Jádro (kernel) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.0.0-17-generic root=UUID=1ac132a9-6bb5-40eb-92cb-a02ea616d320 ro quiet splash vt.handoff=7 Parametry jádra [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable) [ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e8000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000dfba1640 (usable) [ 0.000000] BIOS-e820: 00000000dfba3640 - 00000000dfba36a0 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000dfba36a0 - 00000000e0000000 (reserved) [ 0.000000] BIOS-e820: 00000000f4000000 - 00000000f8000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 00000000fed40000 (reserved) [ 0.000000] BIOS-e820: 00000000fed45000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 000000041c000000 (usable) Paměť nalezená BIOSem [ 0.000000] DMI: Hewlett-Packard HP Compaq 8000 Elite CMT PC/3647h, BIOS 786G7 v01.02 10/22/2009 Název počítače [ 0.069731] CPU0: Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz stepping 0a CPU [ 0.344038] Brought up 4 CPUs [ 0.344041] Total of 4 processors activated (21278.92 BogoMIPS). Čtyři jádra aktivována [ 1.314277] e1000e: Intel(R) PRO/1000 Network Driver - 1.3.10-k2 Nalezena síťová karta [ 1.832145] ata5.00: ATA-8: WDC WD20EARX-00PASB0, 51.0AB51, max UDMA/133 SATA pevný disk [ 1.847780] ata3.00: ATA-8: Corsair Force 3 SSD, 1.3.2, max UDMA/133 SATA SSD [ 1.873311] scsi 2:0:0:0: Direct-Access ATA Corsair Force 3 1.3. PQ: 0 ANSI: 5 [ 1.873503] sd 2:0:0:0: Attached scsi generic sg0 type 0 [ 1.873533] sd 2:0:0:0: [sda] 234441648 512-byte logical blocks: (120 GB/111 GiB) [ 1.873593] sd 2:0:0:0: [sda] Write Protect is off [ 1.873595] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.873615] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.874071] sda: sda1 sda2 Připojení SSD» [ 1.876863] scsi 3:0:0:0: CD-ROM hp DVD-RAM GH60L RD01 PQ: 0 ANSI: 5 [ 1.885228] sr0: scsi3-mmc drive: 40x/40x writer dvd-ram cd/rw xa/form2 cdda tray [ 1.885232] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 1.885325] sr 3:0:0:0: Attached scsi CD-ROM sr0 Připojení DVD [ 1.885514] scsi 4:0:0:0: Direct-Access ATA WDC WD20EARX-00P 51.0 PQ: 0 ANSI: 5 [ 1.885633] sd 4:0:0:0: [sdb] 3907029168 512-byte logical blocks: (2.00 TB/1.81 TiB) [ 1.885635] sd 4:0:0:0: [sdb] 4096-byte physical blocks Připojení pevného disku 1 [ 1.885756] scsi 5:0:0:0: Direct-Access ATA WDC WD20EARX-00P 51.0 PQ: 0 ANSI: 5 [ 1.885859] sd 5:0:0:0: [sdc] 3907029168 512-byte logical blocks: (2.00 TB/1.81 TiB) [ 1.885862] sd 5:0:0:0: [sdc] 4096-byte physical blocks Připojení pevného disku 2 [ 2.041003] md/raid0:md0: looking at sdc1 [ 2.041005] md/raid0:md0: comparing sdc1(3907021824) with sdc1(3907021824) [ 2.041011] md/raid0:md0: looking at sdb1 [ 2.041013] md/raid0:md0: comparing sdb1(3907021824) with sdc1(3907021824) RAID 0 pro dva pevné disky [ 9.585517] nvidia 0000:01:00.0: PCI INT A~-> GSI 16 (level, low) -> IRQ 16 [ 9.585525] nvidia 0000:01:00.0: setting latency timer to 64 [ 9.585529] vgaarb: device changed decodes: PCI:0000:01:00.0,olddecodes=io+mem,decodes=none:owns=io+mem [ 9.585671] NVRM: loading NVIDIA UNIX x86_64 Kernel Module 280.13 Wed Jul 27 16:53:56 PDT 2011 Grafická karta ...
Cvičení: Zjistěte s využitím dmesg nejdůležitější informace o hardwaru vašeho počítače.
Hlášení při připojení USB disku Abyste mohli sledovat hlášení (např. během připojení USB disku), spusťte terminál a v něm příkaz tail s přepínačem -f, který zajistí, že se obsah souboru bude zobrazovat kontinuálně. Jakmile se do něj zapíše nové hlášení, ihned se zobrazí v terminálu. 1 2 3 4 5
tail -f /var/log/syslog Apr 19 17:48:47 video kernel: [28621.335465] usb 2-1.7: new high speed USB device number 6 using ehci_hcd Apr 19 17:48:47 video kernel: [28621.429996] scsi7 : usb-storage 2-1.7:1.0 Apr 19 17:48:47 video mtp-probe: checking bus 2, device 6: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7" Apr 19 17:48:47 video mtp-probe: bus: 2, device: 6 was not an MTP device
83
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
19 17:48:48 video kernel: [28622.425091] scsi 7:0:0:0: Direct-Access JetFlash Transcend 16GB 8.07 PQ: 0 ANSI: 2 19 17:48:48 video kernel: [28622.727099] sd 7:0:0:0: Attached scsi generic sg3 type 0 19 17:48:48 video kernel: [28622.728375] sd 7:0:0:0: [sdc] 31375360 512-byte logical blocks: (16.0 GB/14.9 GiB) 19 17:48:48 video kernel: [28622.729368] sd 7:0:0:0: [sdc] Write Protect is off 19 17:48:48 video kernel: [28622.729373] sd 7:0:0:0: [sdc] Mode Sense: 03 00 00 00 19 17:48:48 video kernel: [28622.729943] sd 7:0:0:0: [sdc] No Caching mode page present 19 17:48:48 video kernel: [28622.729948] sd 7:0:0:0: [sdc] Assuming drive cache: write through 19 17:48:48 video kernel: [28622.732557] sd 7:0:0:0: [sdc] No Caching mode page present 19 17:48:48 video kernel: [28622.732562] sd 7:0:0:0: [sdc] Assuming drive cache: write through 19 17:48:48 video kernel: [28622.882479] sdc: sdc1 19 17:48:48 video kernel: [28622.884530] sd 7:0:0:0: [sdc] No Caching mode page present 19 17:48:48 video kernel: [28622.884536] sd 7:0:0:0: [sdc] Assuming drive cache: write through 19 17:48:48 video kernel: [28622.884540] sd 7:0:0:0: [sdc] Attached SCSI removable disk 19 17:48:49 video ntfs-3g[7390]: Version 2011.4.12AR.4 external FUSE 28 19 17:48:49 video ntfs-3g[7390]: Mounted /dev/sdc1 (Read-Write, label "usb_stick", NTFS 3.0) 19 17:48:49 video ntfs-3g[7390]: Cmdline options: rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,dmask=0077,fmask=0177 19 17:48:49 video ntfs-3g[7390]: Mount options: ←rw,nosuid,nodev,uhelper=udisks,allow_other,nonempty,relatime,fsname=/dev/sdc1,blkdev,blksize=4096,default_permissions Apr 19 17:48:49 video ntfs-3g[7390]: Global ownership and permissions enforced, configuration type 7
Co se zde událo: Řádek: 2
Ovladač USB ohlásil jádru, že nalezl nové zařízení USB (ehci →USB 2).
Řádek: 3
Jedná se o úložné zařízení (usb-storage).
Řádek: 6
Název zařízení USB je JetFlash Transcend 16GB“. ” USB disk má velikost bloku 512 bajtů a kapacitu zhruba 14,9 GiB dat.
Řádek: 8
Řádek: 15 Zařízení bude dostupné jako /dev/sdc. Protože má jen jeden diskový oddíl, bude dostupný jako /dev/sdc1. Řádek: 19 Bylo rozpoznáno, že disk je formátovaný jako NTFS a byl načten odpovídající ovladač. Řádek: 20 Disk nese jméno usb_stick“, takže se jeho obsah po připojení automaticky objeví ” v adresáři /media/usb_stick/. Řádek: 21 Odpovídající parametry příkazu mount byly doplněny. V Ubuntu se ikona pro USB disk nachází vlevo v liště. Kliknutím se spustí správce souborů, pokud se automaticky nespustil po připojení disku (záleží na nastavení). Kliknutím pravým tlačítkem myši na ikonu se zobrazí kontextová nabídka. Položka Vysunout zajistí, že se před odpojením uloží na USB disk všechna data, která se ještě nacházejí v dočasné paměti. V logu pak najdete následující záznamy: Apr 19 18:33:59 video kernel: [31324.637429] usb 2-1.7: reset high speed USB device number 7 ←using ehci_hcd Apr 19 18:33:59 video kernel: [31324.745228] usb 2-1.7: USB disconnect, device number 7
Cvičení: • Vložte do mechaniky po sobě DVD a následně zvukové CD a sledujte soubor s logy. • Nyní přes USB připojte fotoaparát nebo přes adaptér SD kartu a opět sledujte hlášení v logu. Všimněte si, který soubor se po vložení či připojení média automaticky spustí.
4.1.2
Zobrazení připojených zařízení USB
Pro zobrazení všech připojených zařízení USB spusťte příkaz lsusb. Pokud přidáte parametr -v resp. -vv, dozvíte se toho mnohem víc. lsusb Bus 001 Bus 002 Bus 003 Bus 004 Bus 005 Bus 006 Bus 007 Bus 008 Bus 009 Bus 010
Každý záznam zobrazuje sběrnici. Normálně má každý počítač více zdířek USB, které jsou obsluhovány různými sběrnicemi. Mohou také podporovat různé rychlosti, např. USB 1, USB 2 nebo nově také USB 3. ID (např. 058f:6387) identifikuje přesně výrobce a také hardware. Na internetu existují různé databáze, v nichž se dozvíte více.4
Více informací o hardwaru Chcete-li získat co nejvíce informací o hardwaru svého systému, použijte program lshw. Prohledá všechny pseudosouborové systémy jako /proc nebo /sys, kde jádro systému uchovává data. Výsledné informace jsou členěny do různých skupin. K dispozici je také grafická varianta příkazu lshw-gtk.
Cvičení: Prozkoumejte zařízení USB, která najdete ve svém systému.
4.1.3
Kopírování fotek
V následujícím příkladu byla k počítači přes adaptér připojena CF karta (compact flash) o kapacitě 1 GiB. Apr Apr Apr Apr Apr Apr Apr Apr Apr ... Apr ... Apr ...
video video video video video video video video video
kernel: [33046.017118] usb 2-1.7: USB disconnect, device number 9 kernel: [33053.615512] usb 2-1.7: new high speed USB device number 10 using ehci_hcd kernel: [33053.710967] scsi11 : usb-storage 2-1.7:1.0 mtp-probe: checking bus 2, device 10: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.7" mtp-probe: bus: 2, device: 10 was not an MTP device kernel: [33054.897268] scsi 11:0:0:0: Direct-Access Generic CF 1.6E PQ: 0 ANSI: 0 CCS kernel: [33054.898729] scsi 11:0:0:1: Direct-Access Generic MS 1.6E PQ: 0 ANSI: 0 CCS kernel: [33054.900084] scsi 11:0:0:2: Direct-Access Generic MMC/SD 1.6E PQ: 0 ANSI: 0 CCS kernel: [33054.901422] scsi 11:0:0:3: Direct-Access Generic SM 1.6E PQ: 0 ANSI: 0 CCS
19 19:02:55 video kernel: [33054.939668] sd 11:0:0:0: [sdc] 2000880 512-byte logical blocks: (1.02 GB/976 MiB) 19 19:02:55 video kernel: [33054.961111]
sdc: sdc1
Karta byla automaticky připojena jako /media/CANON_DC/.5 ls -la /media/CANON_DC/ drwx------ 5 mgn mgn 16384 2011-09-20 10:36 DCIM 4 Viz
např. http://usb-ids.gowdy.us/read/UD/058f/6387 byla použita karta Canon PowerShot.
5 Konkrétně
85
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
Fotoaparáty vytvářejí na datových kartách obvykle adresář pojmenovaný DCIM (angl. Digital Camera Images). V něm mohou být podadresáře, které bývají pojmenovány podle schématu tři číslice + pět znaků, např. 186CANON. V nich jsou uložené fotografie, obvykle 100 souborů na adresář. ls -la /media/CANON_DC/DCIM/186CANON -rw-r--r-- 1 mgn mgn 3085238 2011-11-08 -rw-r--r-- 1 mgn mgn 2169427 2011-11-08 -rw-r--r-- 1 mgn mgn 4399074 2011-12-05 -rw-r--r-- 1 mgn mgn 2448077 2011-12-05 -rw-r--r-- 1 mgn mgn 2673685 2011-12-05 -rw-r--r-- 1 mgn mgn 2880926 2011-12-05 -rw-r--r-- 1 mgn mgn 2960835 2011-12-05 -rw-r--r-- 1 mgn mgn 3283803 2011-12-05 -rw-r--r-- 1 mgn mgn 2614610 2011-12-05 ls -la /media/CANON_DC/DCIM/187CANON/ -rw-r--r-- 1 mgn mgn 2800427 2011-12-05 -rw-r--r-- 1 mgn mgn 2995669 2011-12-05 ...
Nyní můžete soubory kopírovat např. pomocí cp. Pokud ale půjde o stovky nebo více souborů, možná to bude vyžadovat trochu ruční práce, protože jsou fotky rozdělené v podadresářích. Hledání souborů Příkazem find můžete vyhledat a zobrazit soubory podle zadaného schématu nebo pro ně spustit příkaz. man find FIND(1)
FIND(1)
NAME find - search for files in a~directory hierarchy SYNOPSIS find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] DESCRIPTION This manual page documents the GNU version of find. GNU find searches the directory tree rooted at each given file name by evaluating the given expression from left to right, according to the rules of precedence (see section OPERATORS), until the outcome is known (the left hand side is false for and operations, true for or), at which point find moves on to the next file name. ...
Vypíšou se (-print) všechny soubory v adresáři /media/CANON_DC/DCIM a rekurzivně ve všech jeho podadresářích, jejichž jméno vyhovuje regulárnímu výrazu *.JPG. Protože se používají zástupné znaky, musí být textový řetězec uzavřen do apostrofů, jinak shell zástupné znaky zruší. Některé volby pro find: -name
Výraz, podle něhož budou identifikovány soubory.
-print
Vypíše se kompletní cesta k souboru.
-maxdepth
V adresářovém stromě se rekurzivně prohledá maximálně uvedený počet vrstev.
-exec
Provede se zadaný příkaz. Případné argumenty se zadávají za jeho název, ukončí se středníkem (v uvozovkách, jinak by ho shell chápal jako oddělovač celých příkazů). Zástupný symbol pro soubor je v tomto případě {}.
Pokud kopírujete fotky z více fotoaparátů, narazíte zřejmě na následující problémy: • Názvy souborů se opakují, hlavně názvy obsahující čísla. • Nebudete vědět, od koho fotky jsou. • Podle jmen souborů nesestavíte chronologickou řadu. Mnoho argumentů Pomocí příkazu find a parametru -exec lze spouštět další příkazy a zadané parametry se těmto spouštěným příkazům předají. Pokud find najde mnoho souborů, spustí pro každý z nich vlastní proces. Příklad: Všechny soubory uživatele killer mají být smazány. find / -user killer -exec rm {} \;
Pokud příkaz find najde např. 1000 souborů, spustí rm tisíckrát. To bude trvat velmi dlouho. Řešením je v tomto případě příkaz xargs. find / -user killer -print | xargs rm
Příkaz find vypíše všechny soubory uživatele killer a předá je pomocí roury příkazu xargs. Ten ze standardního vstupu vytvoří seznam a následně spustí příkaz rm s tisícem argumentů. Ve výsledku budou spuštěny jen tři procesy – find, xargs a rm. Důležité také je, že nebyla překročena maximální velikost příkazové řádky. Tu zobrazuje následující příklad: getconf ARG_MAX
2097152
Pokud jsou v názvech souborů mezery a předávají se jako parametr, chápe je Bash jako oddělovače parametrů. Proto je příkazům find a xargs nutné sdělit, že mají použít tzv. nulou zakončené textové řetězce“. ” find / -user killer -print0 | xargs -0 rm
Cvičení: 1. Zjistěte pomocí manuálové stránky příkazu find informace o funkcích následujících argumentů a uveďte ke každému příklad: -type
-user
-group
-size
-atime
-mtime
87
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
-ctime
-perm
-iname
!
-a
-o
2. Najděte všechny soubory, které byly změněny v posledních 24 hodinách.
3. Najděte všechny soubory, které jsou větší než 1 MiB a patří vám.
Hledání souborů pomocí locate/slocate Příkaz find musí pokaždé prohledat zadaný adresář, což při velkém množství souborů dlouho trvá. locate používá jiný přístup. Jednou denně (například) prohledá pomocí updatedb celý zadaný adresářový strom a informace o nalezených souborech zapíše do databáze. Při hledání pak locate prohledává jen tuto databázi, což je nesrovnatelně rychlejší než v případě find. slocate zohledňuje ještě vlastníka, skupinu a přístupová práva, takže se zobrazí jen soubory, k nimž má uživatel přístup. locate má ale i nevýhody: Zobrazují se jen ty soubory, které byly v systému před spuštěním updatedb. Později vytvořené soubory nebudou nalezeny. To také znamená, že locate nemá smysl používat na výměnná média jako USB disky, protože v okamžiku spuštění updatedb nejsou pravděpodobně v systému připojená.
Hledání programů pomocí which/whereis Má-li se najít externí program, resp. příkaz, hledá ho shell ve všech adresářích, které jsou uvedeny v proměnné PATH: echo $PATH /usr/local/texlive/2011/bin/x86_64-linux:/usr/local/jdk/bin: /usr/local/texlive/2011/bin/x86_64-linux:/home/mgn/bin:/usr/local/sbin: /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Pokud chcete vědět, ve kterém z těchto adresářů se nachází příkaz find, můžete to zjistit díky which. which find /usr/bin/find Program which začne soubor hledat v prvním adresáři uvedeném v PATH, pokud ho nenajde, pokračuje
dalším
adresářem atd., dokud soubor nenajde. Příkaz whereis zobrazuje nejen externí příkazy, nýbrž také soubory s dokumentací (manuálové stránky), zdrojové kódy a další soubory, které mají s hledaným příkazem co do činění. whereis userdel userdel: /usr/sbin/userdel /usr/share/man/man8/userdel.8.gz
88
4.2. TESTOVÁNÍ, PŘIPOJOVÁNÍ A FORMÁTOVÁNÍ MÉDIÍ
Cvičení: Pro následující cvičení potřebujete odpovídající adresáře, abyste mohli kopírovat soubory z fotoaparátu. 1. Vytvořte následující adresáře, použijte k tomu názvy z vašeho fotoaparátu nebo chytrého telefonu. /var/obrazky/skolni-vylet/IT11FS/raw/canon /var/obrazky/skolni-vylet/IT11FS/raw/sony /var/obrazky/skolni-vylet/IT11FS/raw/iphone-jan /var/obrazky/skolni-vylet/IT11FS/raw/iphone-stefan ...
2. Nastavte třídnímu adresáři taková přístupová práva, aby měli všichni žáci právo číst a zapisovat. 3. A všechny v něm vytvořené soubory a adresáře byly přístupné skupině, v níž je celá třída.
4.2
Testování, připojování a formátování médií
Až dosud byl USB disk systémem rozpoznán a připojen. Klidně se ale může stát, že připojen nebude nebo že systém nerozpozná použitý souborový systém nebo bude disk prostě poškozený.
4.2.1
Souborové systémy
Než začnete médium testovat, je vhodné vědět, jaký souborový systém byl při jeho formátování vlastně použit. V případě mnoha USB a flash disků nebo datových karet (a také fotoaparátů nebo chytrých telefonů) jde o souborový systém FAT. Tabulka 4.1 zobrazuje přehled běžných souborových systémů a jejich typické použití.
Žurnálovací souborový systém Žurnálovací souborový systémem je takový systém, který všechny změny před samotným zapsáním souboru zaznamená do speciální oblasti, žurnálu. Zapíše přitom jen změny. Samotný obsah souboru se uloží později a zůstává ve vyrovnávací paměti co nejdéle, aby se tím dosáhlo co nejvyššího výkonu. V případě výpadku elektrického proudu je možné obsah souboru opět rekonstruovat ze žurnálu. Zabrání se tak nekonzistentnímu stavu, tedy chybovým souborům.
4.2.2
Připojování a odpojování souborových systémů
K připojení souborového systému se používá příkaz mount. Za běžných okolností ho smí spouštět pouze root. mount [-fnrsvw] [-t vfstype] [-o options] device dir
Příklad Do všeobecného adresáře /mnt/ je připojeno zařízení, v tomto případě USB disk. Příkaz mount zkouší detekovat souborový systém a načítá odpovídající ovladač. Pokud by se automatická detekce nezdařila, musí se typ zadat pomocí přepínače -t. Souborový systém FAT12 FAT16 FAT32 VFAT exFAT NTFS ext2 ext3 ext4 btrfs xfs
Linux
Windows
Pro externí média
✔ ✔ ✔ ✔ ✘ ✔ ✔ ✔ ✔ ✔ ✔
✔ ✔ ✔ ✔ ✔ ✔ ✘(✔) ✘ ✘ ✘ ✘
✔ ✔ ✔ ✔ ✔ ✔ ✘ ✘ ✘ ✘ ✘
Popis pro diskety MS-DOS pro malé disky včetně USB disků do 2 GiB pro pevné disky a větší USB disky do 2 TiB rozšíření FAT systému o delší jména souborů pro flash média do 63 ZiB pro pevné disky a větší USB disky do 256 TiB (ž.) pro pevné disky do 16 TiB pro pevné disky do 32 TiB (žurnálovací) pro pevné disky do 1 EiB (žurnálovací) pro pevné disky do 16 EiB (žurnálovací) pro pevné disky do 8 EiB (žurnálovací)
Tabulka 4.1: Přehled některých souborových systémů
89
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
sudo mount /dev/sdv1 /mnt
Pokud spustíte mount bez parametrů, vypíšou se všechny připojené souborové systémy. Nejde přitom jen o pravé“ ” systémy, nýbrž také o virtuální systémy jako proc nebo sysfs. mount /dev/sda1 on / type ext4 (rw,noatime,nodiratime,errors=remount-ro,commit=0) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) fusectl on /sys/fs/fuse/connections type fusectl (rw) none on /sys/kernel/debug type debugfs (rw) none on /sys/kernel/security type securityfs (rw) udev on /dev type devtmpfs (rw,mode=0755) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) none on /run/shm type tmpfs (rw,nosuid,nodev) /dev/sda3 on /tmp type ext4 (rw,noatime,nodiratime,commit=0) /dev/sda4 on /home type ext4 (rw,noatime,nodiratime,commit=0) /dev/sdc1 on /mnt type vfat (rw)
Vidíte, že USB disk (/dev/sdc1) je připojený do adresáře mnt. Použitý souborový systém je FAT s rozšířením VFAT. Pokud byste chtěli vědět, které soubory zařízení jsou přiřazené jednotlivým diskovým oddílům, můžete si je zobrazit příkazem fdisk -l. sudo fdisk -l Disk /dev/sda: 500,1 GB, 500 106 780 160 bajtů hlav: 255, sektorů na stopu: 63, cylindrů: 60 801, celkem 976 771 055 sektorů Jednotky = sektory po 1 * 512 = 512 bajtech Velikost sektoru (logického/fyzického): 512 bajtů / 512 bajtů Velikost I/O (minimální/optimální): 512 bajtů / 512 bajtů Identifikátor disku :0xb471b471 Zařízení Zavádět Začátek /dev/sda1 * 63 /dev/sda2 39070080 /dev/sda3 58605120 /dev/sda4 41110335
Konec 39070079 41110334 976768064 58604475
Bloky 19535008+ 1020127+ 459081472+ 8747070+
Id 83 82 83 83
Systém Linux Linux swap/Solaris Linux Linux
Disk /dev/sdc: 16,2 GB, 16 240 345 088 bajtů hlav: 114, sektorů na stopu: 40, cylindrů: 6 956, celkem 31 719 424 sektorů Jednotky = sektory po 1 * 512 = 512 bajtech Velikost sektoru (logického/fyzického): 512 bajtů / 512 bajtů Velikost I/O (minimální/optimální): 512 bajtů / 512 bajtů Identifikátor disku :0xc3072e18 Zařízení Zavádět /dev/sdc1 *
Začátek 40
Konec 31719423
Bloky 15859692
Id Systém c W95 FAT32 (LBA)
Pro odpojení disku spusťte příkaz umount. Jako parametr se zadává buď jméno zařízení, nebo adresář, do něhož je zařízení připojeno. sudo umount /mnt
Soubory zařízení Většina pevných disků se připojuje přes rozhraní SCSI (i když jde o SATA disky, DVD mechaniky nebo USB disky). Tím pádem se první disk adresuje jako sda, druhý disk jako sdb atd. První primární oddíl má označení 1, druhý 2 apod. Pokud se použije logický oddíl, pak první z nich začíná vždy 5: první primární oddíl, druhý disk →/dev/sdb1 druhý primární oddíl, třetí disk →/dev/sdc2 druhý logický oddíl, čtvrtý disk →/dev/sdd6 Více informací najdete na straně 29.
90
4.2. TESTOVÁNÍ, PŘIPOJOVÁNÍ A FORMÁTOVÁNÍ MÉDIÍ
4.2.3
Kontrola integrity souborových systémů
Souborový systém se testuje na chyby programem fsck. To je však jenom univerzální spouštěč, který podle typu souborového systému spustí odpovídající příkaz, např. pro VFAT je to fsck.vfat. sudo fsck [-t vfstype] device
Pro kontrolu USB disku tedy příkaz spusťte následovně: sudo fsck -t vfat /dev/sdc1 fsck from util-linux 2.19.1 dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN /dev/sdc1: 50 files, 2479/253448 clusters
Důležité: Souborový systém nesmí být během kontroly připojen. Pokud je nalezena chyba, zobrazí se patřičné hlášení a program se pokusí chybu opravit (pokud to bude možné).
4.2.4
Formátování souborových systémů
Příkazem mkfs lze vytvořit nový souborový systém. mkfs: Usage: mkfs [-V] [-t fstype] [fs-options] device [size]
Také zde se používá přepínač -t pro typ souborového mkfs.vfat, mkfs.ntfs, mkfs.ext3, mkfs.ext4, …
systému, podle kterého se spustí odpovídající program, např.
Příkaz pro naformátování USB disku tedy zní: sudo mkfs -t vfat /dev/sdc1 mkfs.vfat 3.0.9 (31 Jan 2010)
Také v tomto případě nesmí být souborový systém připojen. Pokud USB disk fyzicky odpojíte a zase hned připojíte, bude automaticky připojen pod jménem, které bude složeno z generovaných číslic (např. A40B-7AA0). mount .. . /dev/sdc1 on /media/A40B-7AA0 type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed, dmask=0077,utf8=1,showexec,flush,uhelper=udisks)
Chcete-li disk pořádně pojmenovat, použijte při formátování přepínač -n. sudo mkfs -t vfat -n superdisk /dev/sdc1 mkfs.vfat 3.0.9 (31 Jan 2010)
V tomto případě bude USB disk automaticky připojen do adresáře /media/superdisk. Pokud byste chtěli jméno USB disku se systémem FAT změnit, použijte příkaz dosfslabel. sudo dosfslabel /dev/sdc1 superdisk
USB disk – počet diskových oddílů USB disk je běžné zařízení. Je tedy možné vytvořit na něm více diskových oddílů jako na pevném disku. Nepodporují to ale všechny operační systémy (např. starší Windows). Pokud tedy používáte více různých operačních systémů, doporučujeme vám, abyste na USB disku používali jen jeden oddíl (což je standard). Cvičení: Pro toto cvičení potřebujete jeden USB disk, který neobsahuje žádná data a může být smazán! 1. Zasuňte do zdířky USB disk, který smí být smazán. Pokud bude automaticky připojen, spusťte příkaz umount s patřičnými parametry.
2. Naformátujte disk na systém VFAT, jméno mu nedávejte.
3. Jméno mu nastavte dodatečně.
91
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
4. Otestujte disk, zda obsahuje chyby.
4.3
Využití informací o fotce
Do fotografií, které pořídíte digitálním fotoaparátem nebo mobilním telefonem, se ukládají také doplňkové informace ve formátu Exif (Exchangeable Image File Format). Zapisují se přímo do hlavičky souboru JPEG nebo TIFF. Informace zobrazíte pomocí příkazu exif.6 Příklady exif dsc_8044.jpg EXIF tags in 'dsc_8044.jpg' ('Motorola' byte order): --------------------+---------------------------------------------------------Tag |Value --------------------+---------------------------------------------------------Výrobce |NIKON CORPORATION Model |NIKON D3100 Orientace |Nahoře vlevo Horizontální rozliše|300 Vertikální rozlišení|300 Jednotka rozlišení |Palec Software |Ver.1.01 Datum a čas |2012:04:19 16:30:01 YCbCr Positioning |Co-sited Komprese |Komprese JPEG Horizontální rozliše|300 Vertikální rozlišení|300 Jednotka rozlišení |Palec YCbCr Positioning |Co-sited Expoziční čas |1/40 s F-Number |f/5,6 Program expozice |Shutter priority ISO Speed Ratings |400 Verze Exif |Exif verze 2.21 Datum a čas pořízení|2012:04:19 16:30:01 Datum a čas digitali|2012:04:19 16:30:01 Components Configura|Y Cb Cr Komprimované bity na| 4 Kompenzace expozice |0,00 EV Maximální clona |3,60 EV (f/3,5) Režim měření |Uprostřed - vpravo Zdroj světla |Neznámý Blesk |Blesk nebleskl Ohnisková vzdálenost|18,0 mm Maker note |34210 bajtů neznámých dat Komentář | Zlomky vteřin |40 Zlomky vteřin času p|40 Zlomky vteřin času d|40 FlashPixVersion |FlashPix verze 1.0 Barevný model |sRGB Pixel X Dimension |4608 Pixel Y Dimension |3072 Sensing Method |One-chip color area sensor Zdroj souboru |DSC Typ scény |Přímo fotografováno CFA Pattern |8 bajtů neznámých dat Custom Rendered |Normal process Režim expozice |Automatická expozice Vyvážení bílé |Automatické vyvážení bílé Faktor digitálního z| 1 Ohnisková vzdálenost|27 Scene Capture Type |Standard 6 Pokud
92
příkaz neexistuje, nainstalujte si balík exif.
4.3. VYUŽITÍ INFORMACÍ O FOTCE
Gain Control |Low gain up Kontrast |Normal Sytost |Normal Ostrost |Normal Vzdálenost objektu |Neznámý Verze značky GPS |2.2.0.0 Interoperability Ind|R98 Interoperability Ver|0100 --------------------+---------------------------------------------------------EXIF data contains a thumbnail (8729 bytes).
exif IMG2014-05-08.jpg EXIF tags in 'IMG2014-05-08.jpg' ('Motorola' byte order): --------------------+---------------------------------------------------------Tag |Value --------------------+---------------------------------------------------------Výrobce |HTC Model |HTC Legend Horizontální rozliše|72 Vertikální rozlišení|72 Jednotka rozlišení |Palec YCbCr Positioning |Uprostřed Komprese |Komprese JPEG Horizontální rozliše|72 Vertikální rozlišení|72 Jednotka rozlišení |Palec ISO Speed Ratings |86 Verze Exif |Exif verze 2.2 Datum a čas pořízení|2014:05:08 09:48:37 Datum a čas digitali|2014:05:08 09:48:37 Components Configura|Y Cb Cr Ohnisková vzdálenost|3,5 mm FlashPixVersion |FlashPix verze 1.0 Barevný model |sRGB Pixel X Dimension |1728 Pixel Y Dimension |2592 Interoperability Ind|R98 Interoperability Ver|0100 --------------------+---------------------------------------------------------EXIF data contains a thumbnail (26229 bytes).
Uložené informace se liší v závislosti na výrobci fotoaparátu nebo telefonu. Různý může být také formát jednotlivých záznamů, např. data a času. Datum a čas Datum a čas
|2012:04:19 16:30:01 |2012/07/05 15:43:05
Pro nás uživatele je datum velmi důležité, protože díky němu je možné obrázky chronologicky řadit.7 Místo názvů jednotlivých políček ( štítků“, tags) lze zobrazit pouze jejich číselné kódy. 8 Slouží k tomu přepínač -i. Datum má následující ” štítky: 0x132 0x9004 0x9003 0x0007 0x001d
DateTime DateTimeDigitized DateTimeOriginal GPS čas (atomové hodiny) GPS čas
Abyste získali jen relevantní záznamy, je potřeba výpis filtrovat. Cvičení: Prozkoumejte informace Exif vašich fotek. Najdete v nich datum pořízení fotografie? 7 Toho 8 Více
lze tedy dosáhnout jen tehdy, je-li u všech přístrojů správně nastaveno datum a čas! informací najdete na http://www.jojosoftware.de/jojothumb/anleitung/jjt_doc802.htm.
93
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
4.4
Filtrování textových souborů
Různé nástroje, např. exif, produkují velké množství informací. Často potřebujeme získat jen jejich určitý výsek, třeba sloupec nebo řádek, který je potřeba najít pomocí nějakého klíčového slova. Linux naštěstí nabízí dostatek nástrojů, jak podobné vyfiltrování provést. Ty nejdůležitější jsou krátce popsány v následujícím textu a můžete si je vyzkoušet s výstupem programu exif.
4.4.1
Zobrazení obsahu textových souborů
Příkazem cat vypíšete obsah jednoho nebo více souborů. cat [Parametr] <soubor1> <soubor2> <...>
Alternativy příkazu cat Příkaz nl také dokáže zobrazit obsah souboru s čísly řádků, takže představuje alternativu k programu cat. Pro číslování nabízí více parametrů, např. možnost doplnit úvodní nuly. Příklady nl -nrz -w2 sch.txt
Pokud chcete zobrazit jen začátek souboru, použijte příkaz head (angl. hlava), pro konec souboru zase příkaz tail (angl. ocas). head [Parametr] <soubor> tail [Parametr] <soubor>
Nejdůležitější parametry jsou: -c <x>
Zobrazit prvních/posledních x bajtů. <x> může obsahovat jednotku, která počet násobí: b pro 512, k pro 1 KiB, m pro 1 MiB, g pro 1 GiB, kb pro 1000, mb pro 1000×1000… (T, P, E, Z, Y)
Chcete-li ze souboru zobrazit řádky 10 až 15, můžete příkazy propojit rourou |. Nezapomeňte, že zobrazení 10. až 15. řádku znamená zobrazení šesti řádků!
Příkaz tail nabízí ještě jednu zvláštnost. Parametrem -f zajistíte, že soubor se bude vypisovat automaticky vždy, když změní velikost. To se hodí hlavně pro vypisování logů.
94
4.4. FILTROVÁNÍ TEXTOVÝCH SOUBORŮ
4.4.2
Řazení obsahu textových souborů
Příkazem sort můžete řadit obsah textových souborů. Řazení probíhá podle ASCII hodnot, resp. podle pořadí znaků v kódové stránce (typicky podle UTF-8). Toto nastavení se řídí proměnnými LANG, LC_ALL nebo LC_COLLATE, pokud budou obsahovat některou z hodnot cs, cs_CZ nebo cs_CZ.UTF-8, řazení zohlední také české znaky s diakritikou. Podobně to funguje třeba pro němčinu, kde lze přehlásky zohlednit nastavením hodnot na některou z de, de_DE nebo de_DE.UTF-8. sort [Parametr] <soubor>
Nejdůležitější parametry jsou: -b
Ignorovat úvodní prázdné znaky.
-d
Řadit podle slovníkových kritérií, tzn. zohledňují se jen alfanumerické a prázdné znaky.
-f
Pro řazení převádět malá písmena na velká.
-i
Ignorovat netisknutelné znaky.
-n
Textové řetězce obsahující čísla řadit jako čísla.
-r
Řadit v obráceném pořadí.
-k Sl1,Sl2
Řadit podle sloupců (začít u Sl1 a skončit u Sl2).
-t sep
Použít sep jako oddělovač sloupců (viz přepínač -k).
-u
V případě stejných řádků použít jen první.
-o soubor
Uložit výsledek do souboru, lze použít jméno vstupního souboru.
Seřadí seznam uživatelů systému podle jejich UID a zobrazí prvních pět záznamů.
Ignorovat více po sobě jdoucích stejných řádků Pokud soubor obsahuje více po sobě jdoucích řádků se stejným obsahem, lze je ignorovat přepínačem -u. Příkaz uniq možnosti rozšiřuje například nastavením počtu řádků po sobě, které se ještě ignorovat nebudou.
4.4.3
Vybrat řádky z textových souborů
Příkazem grep (ale podporují to také jiné programy) lze podle určitého vzoru vybrat ze souboru konkrétní řádky, podobně jako fungují zástupné znaky pro výběr souborů. Těmto vzorům“ se říká regulární výrazy“ (angl. regular expression, ” ” krátce regex nebo regexp). V následujícím příkladu se vypíší všechny řádky ze souboru, které obsahují jméno Michael“. ” grep 'Michael' zaci.txt
Regulární výraz není vyhodnocován shellem, musí být proto uzavřen do apostrofů. U regulárních výrazů se znaky rozdělují do dvou kategorií podle funkce: 1. řídicí znaky, které mají zvláštní význam,
95
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
2. normální znaky, které mohou být použity samy za sebe. Následuje výběr regulárních výrazů: ^
Značí začátek řádku.
$
Značí konec řádku.
<
Začátek slova.
>
Konec slova.
\d
Číslice (0–9).
\w
Alfanumerické znaky (a–z, A–Z, 0–9).
\s
Bílé znaky (mezery, tabulátory, zalomení řádků … – \t\n\r\f).
.
Libovolný znak.
+
Předchozí výraz alespoň jednou (1–n).
*
Předchozí výraz v libovolném počtu (0–n).
?
Předchozí výraz maximálně jednou (0–1).
{n,m}
Interval opakování, znak před závorkou n až mkrát.
{n}
Počet opakování, znak před závorkou přesně nkrát.
[...]
Jeden ze skupiny znaků v závorce.
[...-...]
Jeden ze znaků z uvedeného rozmezí [0-9], [a-z], [A-Z], [0-9a-zA-Z], …
[^...]
Znak mimo znaky uvedené v závorce.
[^...-...]
Znak mimo rozmezí znaků uvedených v závorce.
a1|a2
Jeden, nebo druhý výraz.
(...)
Skupina výrazů.
\
Zrušení speciálního významu následujícího znaku. \. pro tečku, \$ pro znak dolaru, …
Pokud byste chtěli najít všechna jména jako Maier (Mayr, Mair, Maier, Mayer, Meyer, Meier) nezávisle na velikosti prvního znaku, použili byste následující výraz: [mM][ae][iy]e?r
[mM]
m nebo M
[ae]
a nebo e
[iy]
i nebo y
e?
e jednou nebo vůbec
r
r
96
4.4. FILTROVÁNÍ TEXTOVÝCH SOUBORŮ
4.4.4
Rozčlenění textových souborů do sloupců a polí
Příkazem cut můžete soubor rozdělit do sloupců. To se hodí hlavně v případě, pokud potřebujete nějaký konkrétní sloupec z obsahu souboru. cut [Parametr] <soubor>
Nejdůležitější parametry jsou: -d
Určit oddělovač.
-f
Použít tento sloupec.
Příklad Následující příklad vypíše shelly uživatelů v systému (také systémových uživatelů). Pomocí sort budeme ignorovat duplicitní záznamy. Použijeme k tomu sedmý sloupec souboru /etc/passwd.
Pomocí příkazu wc můžete získat informace o počtu slov, bajtů, znaků a řádků. Nejdůležitější parametry jsou následující: -c
Sečíst bajty.
-m
Sečíst znaky.
-l
Sečíst řádky.
-w
Sečíst slova.
Příklad V následujícím příkladu spočítáme konfigurační soubory. Protože ls zobrazí pro každý soubor jeden řádek, stačí pomocí wc spočítat řádky. Tím získáme počet souborů. cnt=$(ls /etc/*.conf | wc -l) echo $cnt souborů
4.4.6
36 souborů
Záměna znaků
Příkazem tr můžete zaměnit znaky za jiné (více k tématu na straně 73). tr [PARAMETR] řetězec1 [řetězec2]
Nejdůležitější parametry jsou následující: -c
Doplnit řetězec1.
-d
Znaky z řetězce1 odstranit, nikoliv nahradit.
-t
Nejprve řetězec1 zkrátit na délku řetězce2. Poznámka: Můžete zadat také výběr znaků, např. [abc5-9].
Příklady echo "01234" | tr '123' 'ABC'
0ABC4
97
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
2. Doplňte následující sekvenci tak, abyste použitím head a tail vypsali ze souboru users řádky 9 až 14. head
users | tail
3. Vypište pomocí sekvence příkazů obsahující head a tail řádek 2 ze souboru users.
4. Vypište obsah souboru users v opačném pořadí.
5. Vypište všechny řádky ze souboru /etc/passwd seřazené podle čísla UID (třetí sloupec, oddělovačem je :“), přičemž: ” (a) řádek s nejvyšším uživatelským ID vypište jako první,
(b) řádek s nejnižším uživatelským ID vypište jako první.
6. Vytvořte skript se jménem lss, který bude vypisovat jen velikosti a názvy souborů (ls -l).
7. Vypište počet řádků souboru /etc/passwd.
8. Uveďte dvě možnosti, jak vypsat obsah souboru /etc/inittab s číslovanými řádky.
9. Očíslujte ve dvou krocích pomocí nl řádky souboru /etc/services, začněte číslem 100.
10. Co udělá příkaz tr se začátkem známého popěvku? echo HOLKA MODROOKÁ, NESEDÁVEJ U POTOKA | tr [aeiou] i
Zkuste vyřešit následující úlohu a dosáhnout uvedeného výsledku: HOLKA MODROOKÁ, NESEDÁVEJ U POTOKA ----> HALKA MADRAAKÁ, NASADÁVAJ A PATAKA
98
4.4. FILTROVÁNÍ TEXTOVÝCH SOUBORŮ
11. Caesarova šifra9
Slavný římský vládce Julius Caesar prý používal pro přenos tajných poselství následující šifrování: Písmeno A nahradil písmenem D, B písmenem E atd. X zase písmenem A, Y písmenem B a Z písmenem C. S jakými parametry spustíte tr, abyste (a) poselství císaře zašifrovali a
(b) následně zase dešifrovali?
(c) Co znamená WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ?10
Cvičení (pro šikovné): 12. Jak z textového souboru odstraníte interpunkční znaménka? Tip: [:punct:]
13. Jak nahradíte všechny prázdné znaky na konci řádků? (Oktalově: \012“) ”
14. Jak sestavíte setříděný seznam všech slov textového souboru? Každé slovo se v seznamu smí objevit pouze jednou.
15. Stáhněte si příkazem wget www.gutenberg.org/files/345/345.txt text knihy o Draculovi od Brama Stokera11 a proveďte následující: cat 345.txt | tr ' ' '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | \ grep -v '[^a-z]' | sort | uniq -c | sort -rn > vysledek.txt
Pomocí less vysledek.txt si můžete výsledný soubor prohlédnout. (a) Sekvence příkazů vytvořila seznam slov podle frekvence jejich výskytů. Popište, jak proces proběhl. Poznámka: \012“ je znak v osmičkové soustavě pro zalomení řádku ” grep -v '[^a-z]' propustí jen text
(b) Jak byste sekvenci doplnili, aby se zobrazil celkový počet slov, která se v textu objevují jen jednou jedinkrát?
9 Viz http://cs.wikipedia.org/wiki/Caesarova_šifra
10 Jedná
se o Pangram, dříve se hojně používaly pro testování dálnopisu a psacích strojů, dnes pro testování počítačových písem.
http://cs.wikipedia.org/wiki/Pangram 11 Podle Linux Journal č. 180, duben 2009, http://www.linuxjournal.com/article/10384
99
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
4.5
Kopírování souborů s obrázky
Když už teď umíte filtrovat soubory, můžete je zkopírovat z různých fotoaparátů. Při kopírování upravíme jméno tak, aby obsahovalo datum, čas a pro jistotu – jako ochranu proti duplicitám – také jedinečné pořadové číslo. V prvním kroku se soubory zkopírují. V uvedeném příkladu používáme adresář fotak, pokud nebude zadán žádný parametr. V něm jsou uloženy obrázky z různých fotoaparátů. Pro reálný skript musíte samozřejmě použít také adresář /media, v němž jsou připojena různá média (USB disky, datové karty nebo fotoaparáty) s obrázky. INPUT=$1 OUTPUT=$2 if [ -z $INPUT ] ; then INPUT=fotak fi if [ -z $OUTPUT ] ; then OUTPUT=. fi
FILES=$(find ${INPUT} -iname '*.jpg' \ -not -path '*thumbnails*' -print) for FILE in $FILES ; do echo $FILE done
Příkazem find se rekurzivně vyhledávají soubory. Pomocí -iname ignorujeme rozdíly mezi velkými a malými znaky. Protože některé přístroje vytvářejí ke každému snímku ještě náhledový obrázek (angl. thumbnail), budeme adresáře s těmito soubory ignorovat. Pomocí cyklu for si následně nalezená jména vypíšeme.
4.5.1
Získání data a času
Jakmile máme seznam obrázků, můžeme se pokusit vypsat jejich datum a čas. Připomínáme, že datum má následující záznamy (štítky): 0x132 0x9004 0x9003 0x0007 0x001d
DateTime DateTimeDigitized DateTimeOriginal GPS čas (atomové hodiny) GPS čas
Použijeme pole 0x132, resp. 0x9004. Pokud fotoaparát ukládá datum do jiného pole, pak je třeba skript patřičně upravit. INPUT=$1 OUTPUT=$2 if [ -z $INPUT ] ; then INPUT=fotak fi if [ -z $OUTPUT ] ; then OUTPUT=. fi FILES=$(find ${INPUT} -iname '*.jpg' \ -not -path '*thumbnails*' -print) for FILE in $FILES ; do EXIF_DATE=$( \ exif -i $FILE | \ grep -e '^0x132' -e '^0x9004' | \ cut -d'|' -f2 ) echo $EXIF_DATE done
2011:12:05 2012/04/02 2011:12:05 2011:04:20
15:52:51 18:03:29 16:44:10 10:50:51
Příkaz exif vypíše díky přepínači -i přehled použitých polí (štítků), pak oddělovač |“ následovaný datem a časem. ” Pomocí grep si zobrazíte jen ty řádky, které obsahují text Tag 0x132 nebo 0x9004. Pomocí cut použijete jen druhý sloupec, tedy datum. Znak |“ je shellem běžně interpretován jako roura, proto musí být uveden v apostrofech. ”
100
4.5. KOPÍROVÁNÍ SOUBORŮ S OBRÁZKY
4.5.2
Formátování data a času
Jistě si při pohledu na datum a čas všimnete, že jednou se jako oddělovač používá /“ a jindy zase :“. Mezi datem ” ” a časem se nachází mezera. Pokud má být datum použito jako jméno souboru, pak je znak /“ nepřípustný. Ani dvojtečka ” není vhodná, zejména s ohledem na použití v systémech Windows. Z tohoto důvodu tyto znaky v následujícím kroku nahradíme podtržítky. INPUT=$1 OUTPUT=$2 if [ -z $INPUT ] ; then INPUT=fotak fi if [ -z $OUTPUT ] ; then OUTPUT=. fi FILES=$(find ${INPUT} -iname '*.jpg' \ -not -path '*thumbnails*' -print) for FILE in $FILES ; do EXIF_DATE=$( \ exif -i $FILE | \ grep -e '^0x132' -e '^0x9004' | \ cut -d'|' -f2 | \ tr '/: ' '___' \ ) echo $EXIF_DATE done
Rozlišení času je zde jedna sekunda. To ale může znamenat, že v jediné sekundě mohlo být nasnímáno více obrázků. Proto je potřeba jako další rozlišovací kritérium použít pořadové číslo, aby měly obrázky vytvořené ve stejné sekundě rozdílná jména souborů.12 INPUT=$1 OUTPUT=$2 COUNTER=1 if [ -z $INPUT ] ; then INPUT=fotak fi if [ -z $OUTPUT ] ; then OUTPUT=. fi FILES=$(find ${INPUT} -iname '*.jpg' \ -not -path '*thumbnails*' -print) for FILE in $FILES ; do EXIF_DATE=$( \ exif -i $FILE | \ grep -e '^0x132' -e '^0x9004' | \ cut -d'|' -f2 | \ tr '/: ' '___' \ ) OFILE=img_${EXIF_DATE}_$( \ printf "%04d" ${COUNTER} \ ).jpg echo $OFILE COUNTER=$(($COUNTER+1)) cp "${FILE}" "${OUTPUT}/${OFILE}" done
Příkaz printf zajistí, že výsledné číslo bude mít vždy čtyři pozice a úvodní nuly. Při kopírování musí být proměnná uzavřena do uvozovek, protože jméno souboru může obsahovat mezeru (mezera funguje v shellu jako oddělovač parame12 Předpokladem
je správné nastavení času u fotoaparátu.
101
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
trů). Pokud si nyní prohlédnete soubory v adresáři, zjistíte, že jsou seřazené podle data a času a tedy v chronologickém pořadí.
4.5.4
Automatické otočení obrázků
U některých snímků zjistíte, že je nutné je otočit o 90 ◦ . Mnoho grafických prohlížečů to udělá automaticky. Řídí se informací v exif (orientace: vlevo – dole), pokud ji naleznou. Nedělají to ale všechny programy. Obrázky automaticky otočíte příkazem exifautotran (balík libjpeg-progs). exifautotran [seznam souborů]
Cvičení (pro šikovné): 1. Rozšiřte skript tak, aby se po kopírování souborů spustil příkaz exifautotran a obrázky, u kterých je to potřeba, otočil. 2. Rozšiřte skript tak, aby kopíroval také videa (s příponou AVI) a snímky ve formátu“ RAW (s příponou CR2). Tady ” už datum nezjistíte pomocí exif, takže jméno souboru vytvářejte jen z pořadového čísla. 3. Příkazem ufraw (balík ufraw) lze převádět raw obrázky do formátu JPG. (a) Informujte se prostřednictvím manuálových stránek, jak funguje příkaz ufraw, resp. ufraw-batch. Prozkoumejte parametry --rotate, --out-type, --exif a --overwrite. (b) Zapracujte do skriptu příkaz ufraw-batch tak, aby se při kopírování raw snímků automaticky vytvářela jejich JPG verze s informacemi exif. Jméno souboru JPG by mělo být vytvořeno podle předchozích pravidel.
4.6
Vytvoření náhledů
Pro vytvoření přehledného obrazového alba se používají malé náhledové obrázky, angl. thumbnails. Volně dostupná sada programů ImageMagick (balík imagemagick) obsahuje příkaz convert, který provádí různé změny obrázků (převod mezi formáty, změny velikostí apod.). Když ho spustíte s parametrem -thumbnail 100, obrázek bude automaticky zmenšen na velikost o šířce 100 pixelů. Správný poměr mezi stranami zůstane zachován. convert
-thumbnail 100
berlin_01.jpg thumb_berlin_01.jpg
Obrázek 4.2: Originál – rozměry 2304x307
Cvičení: Vytvořte skript, který ke všem souborům JPG vytvoří jejich náhledy.
102
Obrázek 4.3: Náhled – rozměry 133x100
4.7. HRÁTKY S OBRÁZKY
4.7
Hrátky s obrázky
S ImageMagickem můžete provádět ještě další hrátky, které vám obrázky a fotky vylepší. Tato kapitola už nijak nesouvisí se zkouškou Linux Essentials, jde jen o zábavné doplnění. Vyzkoušejte všechny níže uvedené parametry, i když nevíte, co znamenají nebo jim nerozumíte. U všech následujících obrázků používáme originální fotku kastanie.jpg, měníme její rozměry, aby nebyla tak velká, a výsledek převádíme do PNG souboru. PNG soubory mají tu výhodu, že podporují transparentnost, díky čemuž je možné používat více efektů než u JPG souborů.13
4.7.1
Orámování obrázků
Obrázky vypadají při zobrazení lépe, kdy jsou orámovány. S ImageMagickem je orámování snadné, pročtěte si k tomu online dokumentaci. • jednoduché orámování,
convert kastanie.jpg -thumbnail 200 -mattecolor peru -frame 15x15+5+5 ←ka_s01.png
Mnohé další příklady a možnosti naleznete na internetu s pomocí vyhledávačů.
14 Obrázky
pro rámečky použity z DIY Frames Section of Anthony’s Icon“ ”
105
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
4.8
Otázky
1. Co má za úkol HAL?
2. Ve kterém adresáři najdete logy Linuxu?
3. Do kterého souboru se ukládají všechna systémová hlášení?
4. Jak zobrazíte hlášení, která vznikla při startu systému?
5. USB disk po zasunutí do zdířky nefunguje. Jak dosáhnete toho, aby se systémová hlášení při pokusu o připojení disku trvale vypisovala na obrazovku?
6. Proč musíte USB disk bezpečně odpojit“? ”
7. Jak vypíšete všechna připojená USB zařízení?
8. Jak pomocí find zkopírujete soubory, které nejsou starší než 24 hodin a větší než 10 kB?
9. Jak zabráníte příkazu find, aby neprohledával více než dvě adresářové úrovně?
10. Jaký další příkaz slouží ke hledání souborů a které výhody a nevýhody má tento nástroj ve srovnání s find?
11. Pomocí kterého příkazu najdete spustitelné programy (příkazy), které lze spustit bez uvedení adresářové cesty?
12. Pomocí které proměnné můžete doplnit cesty, kde se hledají spustitelné programy (příkazy)?
13. Při připojení USB disku se zobrazí hlášení, že nebyl rozeznán formát nebo že disk obsahuje chyby. Kterým příkazem USB disk otestujete?
14. Co je chápáno pod pojmem žurnálovací souborový systém?
106
4.8. OTÁZKY
15. Jak připojíte a odpojíte USB disk ručně“? ”
16. Kterým příkazem (včetně parametrů) můžete určit zařízení, pod nímž bude dostupný USB disk?
17. Jak se nazývá zařízení, pod kterým je dostupný SCSI pevný disk? (a) druhý primární oddíl třetího disku:
(b) první logický oddíl prvního disku:
18. USB disk je naformátovaný jako VFAT. Jak souborový systém otestujete na chyby?
19. Na USB disku je poškozený souborový systém. Jak ho přeformátujete na systém VFAT?
20. Které příkazy zobrazí doplňující informace z fotografií?
21. Jak zní sekvence příkazů, pomocí níž zobrazíte Model“ fotoaparátu u fotografie IMG4711.JPG? ”
22. U jednoho souboru máte vypsat řádky 7–12. Jakým způsobem toho dosáhnete?
23. Jakým způsobem seřadíte obsah souboru /etc/passwd podle třetího sloupce a v obráceném pořadí?
24. Textový řetězec má být převeden na malá písmena. Jakým příkazem to provedete?
25. Jak uložíte aktuální datum ve formátu 2014-06-03_18:45“ do proměnné aktDate? ”
107
LEKCE IV – ZPRACOVÁNÍ FOTOGRAFIÍ Z DATOVÉHO NOSIČE
108
Kapitola 5
Lekce V – Práce v síti Každá třída chce fotografie ze svého školního výletu ukázat všem ostatním. K tomutu účelu se na serveru v lokální síti zřídí obrazová galerie. Abychom to dokázali, nejprve si v této lekci vysvětlíme nezbytné základy týkající se počítačových sítí a pak si nainstalujeme webový server. Vytvoření fotogalerie je tématem další lekce. Následující kapitoly popisují, jak se linuxový počítač připojí do lokální sítě, aby se mohlo vytvořit připojení k internetu. Před samotnou realizací si nejprve objasníme teoretické základy, kam patří informace o protokolech TCP/IP a principy adresování IPv4 a IPv6. Poté si na typickém příkladu ukážeme, které kroky jsou nutné pro správné nastavení sítě na linuxovém počítači. V části s otázkami si znovu projdeme nejdůležitější aspekty konfigurace sítě v Linuxu. Následně si znalosti procvičíme prakticky při nastavování síťového připojení linuxového počítače. Nakonec na intranetový server nainstalujeme webový server a otestujeme jeho funkčnost. Případně na serveru nastavíme možnost přístupu přes SSH.
Obsah 5.1 5.2 5.3 5.4 5.5 5.6 5.7
Internet a rodina protokolů TCP/IP . . . . IPv4 . . . . . . . . . . . . . . . . . . . . . . . IPv6 . . . . . . . . . . . . . . . . . . . . . . . IP adresy a názvy počítačů pomocí DNS . . Ruční nastavení sítě . . . . . . . . . . . . . Automatické nastavení sítě pomocí DHCP Otázky . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
110 111 112 113 114 117 120
109
LEKCE V – PRÁCE V SÍTI
5.1
Internet a rodina protokolů TCP/IP
Protokoly rodiny TCP/IP jsou široce rozšířené a používají se dnes prakticky ve všech oblastech komunikačních technologií. Je to výsledek vývoje, který začal už v šedesátých letech 20. století díky ministerstvu obrany Spojených států amerických. Cílem bylo jednak zlepšit vzájemnou spolupráci mezi výzkumnými vojenskými institucemi a také s univerzitami a jednak umožnit propojení různorodých sítí různých výrobců a vytvořit tak síť sítí“, Internet. ” Pojem Internet“ zahrnuje nejen propojení více sítí, ale také konkrétní celosvětovou komunikační síť. Jeho úspěch ” spočívá v tom, že velké množství účastníků může využívat centrální služby, např. výměnu dat přes FTP, elektronickou poštu (přes SMTP), vzdálené ovládání počítače pomocí SSH nebo třeba Telnet. Rodina protokolů TCP/IP je pojmenovaná po hlavních z nich, Transmission Control Protocol a Internet Protocol, které převzaly hlavní úlohu. V odborném žargonu se všem protokolům této skupiny také říká TCP/IP Stack. Protokoly TCP/IP jsou navržené tak, aby byla síť maximální možnou měrou stabilní a aby byl výpadek jednotlivých síťových uzlů automaticky přesměrován. K základním výhodám protokolů (které jsou nezávislé na výrobci) patří, že jsou použitelné na všech počítačích a nabízejí tedy široké možnosti nasazení v různých oblastech. Kromě toho lze vytvářet velké sítě s nenáročnou centrální správou.
Obrázek 5.1: Vrstvy TCP/IP
Protokoly internetové vrstvy IP
Internet Protocol Nestavový nespojovaný protokol s celosvětově zaručeným jednoznačným adresováním přenáší datové pakety po síti nebo přes routery mezi různými sítěmi.
ICMP Internet Control Message Protocol Řídí datový provoz v internetu, přenáší řídicí informace mezi stanicemi a poskytuje diagnostické informace pro internetovou a transportní vrstvu. ARP
Address Resolution Protocol Slouží k sdělení fyzické MAC adresy při znalosti logické IP adresy.
Jeden z nejznámějších programů, který používá ICMP, je ping. Pomocí ping lze zjistit, jestli je protějšek vůbec dostupný a jak dlouho k němu trvá přenos dat.
Protokoly transportní vrstvy TCP Transmission Control Protocol Stavový spojovaný protokol, který umožňuje spolehlivý obousměrný přenos souvisejících datových proudů. UDP User Datagramm Protocol Nestavový nespojovaný protokol, který obousměrně přenáší jednotlivé datové segmenty mezi stanicemi; kvůli chybějící kontrole stavu je nespolehlivý, ale také rychlejší než TCP.
Protokoly aplikační vrstvy FTP
110
File Transfer Protocol Umožňuje rychlý přenos dat mezi klientem a serverem.
5.2. IPV4
SMTP Simple Mail Transfer Protocol Výměna elektronické pošty mezi dvěma systémy. SSH
Secure Shell Umožňuje prostřednictvím příkazového řádku interaktivní přístup ke vzdálenému počítači, na rozdíl od telnetu je spojení pomocí SSH šifrované.
NFS
Network File System Přístup k datům přes síť.
HTTP Hypertext Transfer Protocol Přenos hypertextových stránek přes World Wide Web. Adresování protokolů, resp. služeb aplikační vrstvy K odeslání dat konkrétní službě v aplikační vrstvě se na úrovni TCP/IP k adresování používají tzv. porty, např. FTP (20/21), SMTP (25), SSH (22), HTTP (80) a HTTPS (443).
5.2
IPv4
Pomocí IP adresy lze každý počítač jednoznačně adresovat. IP adresa má délku čtyř bajtů (=32 bitů) a dělí se na dvě části: ID sítě a ID hosta (počítače).
Obrázek 5.2: Adres ní formát IPv4
• Maska podsítě odděluje ID sítě od ID hosta v IP adrese. Skládá se ze 32 bitů. • Bitové pozice, na kterých je v masce podsítě 1, patří v IP adrese do ID sítě. • Bitové pozice, na kterých je v masce podsítě 0, patří v IP adrese do ID hosta. • Binární jedničky v masce podsítě jsou vzájemně zarovnány doleva.
Tečková decimální notace IPv4 adres a masky podsítě IP adresa se dělí na čtyři skupiny po osmi bitech. Každá skupina je zapsaná decimálně a oddělená tečkou.
Obrázek 5.3: Tečková decimální notace IPv4 adres Maska podsítě se zapisuje v tzv. notaci CIDR: Po /“ následuje počet bitů nastavených na 1. ” Příklady: 255.0.0.0 odpovídá /8, 255.255.0.0 odpovídá /16, 255.255.255.128 odpovídá /25.
Třídy IPv4 adres Adresa IPv4 může patřit do jedné z pěti adresních tříd: Třídy A, B a C jsou zamýšlené pro různě velké sítě. Výhoda rozdělení na třídy spočívá v možnosti upravit adresy podle potřeb organizačních struktur. Výjimku přestavuje třída D, u níž jde o adresování skupiny hostů, které spolu logicky souvisejí (Multicast). Multicastové přenosy se používají např. u IP TV nebo u služeb typu video on demand“. Třída E se ” nepoužívá a je rezervovaná pro budoucí použití.
Zvláštní adresy IPv4 Adresa celé sítě a všesměrové vysílání Adresa celé sítě je nejnižší adresa, tedy hodnota všech bitů v ID hosta je 0. Adresa všesměrového vysílání (angl. broadcast) je nejvyšší adresa, tj. všechny bity host ID jsou nastavené na 1. Loopback adresa Další speciální adresa je loopback s hodnotou 127.0.0.1. Pakety odeslané na tuto adresu slouží k testovacím účelům, jsou hned přijaty a neopustí počítač. Upozornění: Tyto speciální adresy nesmí být použity pro adresování počítačů! Soukromé IPv4 adresy Ve třídách A, B a C byly vytvořeny rozsahy pro soukromé adresování. Jsou určeny pro lokální sítě (LAN), které nevyžadují veřejné adresy. Soukromé IP adresy nejsou směřovány (routovány) do internetu.
5.3
IPv6
Použitelný adresní prostor IPv4 byl rozčleněn jen do tří tříd, proto nebylo vždy možné nakládat s IPv4 adresami efektivně. To vedlo v devadesátých letech k poznání, že v dohledné době nastane nedostatek adres, a proto bude potřeba nové adresní schéma. Dlouhodobým řešením by měl být internetový protokol verze 6 (IPv6), který řeší dosud známé problémy s dostupností adres a routováním. Zohledňuje také požadavky budoucích aplikací jako např. multimédií nebo videa na žádost. Výhody IPv6 • • • • •
Rozšířený adresní prostor: Použitím 128 bitů dosahuje adresní rozsah teoreticky 2128 adres. Automatické rozdělování a nastavení IPv6 adres (autokonfigurace). Doplňkové bezpečnostní volby pro bezpečnou výměnu dat prostřednictvím VPNs (IPsec). Podpora kvalitní služby (Quality of Service, QoS), např. upřednostnění vybraných datových přenosů. Zjednodušené routování.
Adresní oblasti IPv6 V rámci IPv6 jsou definované různé adresní oblasti se speciálním určením a rozdílnými vlastnostmi. Adresy IPv6 se nerozdělují do tříd, místo toho existují tři oblasti. Unicast
Konkrétní příjemce.
Anycast
Libovolný příjemce ze skupiny.
112
5.4. IP ADRESY A NÁZVY POČÍTAČŮ POMOCÍ DNS
Multicast Každý příjemce ze skupiny. U IPv6 neexistuje všesměrové vysílání (broadcast)!
Adresní typy IPv6 Uvnitř adresní oblasti Unicast existují další typy adres. Global Unicast (2000::/3) Celosvětově platné, globálně routovatelné, přidělovány provozovatelem sítě. Unique Local Unicast (fc00::/7) Soukromé adresy, které se na internetu neroutují. Link Local adresy (fe80::/10) Používají se uvnitř jedné podsítě a vůbec se neroutují.
Adresní formát IPv6 Na obrázku vidíte příklad struktury pro celosvětově platnou adresu IPv6 (Global Unicast).
Obrázek 5.4: Adresní formát IPv6 Celkových 128 bitů se rozděluje na 64 bitů pro prefix podsítě a 64 bitů pro ID rozhraní. Prefix podsítě se skládá ze 45 bitů pro identifikaci firmy nebo organizace (angl. Top Level Aggregation, TLA, a Next Level Aggregation, NLA) a 16 bitů pro adresu podsítě (angl. Site Level Aggregation, SLA). V prefixu podsítě jsou první tři bity rezervované pro identifikaci typu adresy (zde 001 pro Global Unicast). ID rozhraní se mimo jiné odvozuje od MAC adresy síťové karty.
Zápis IPv6 adres Adresy IPv6 se zapisují v osmi blocích po dvou bajtech. Bloky se zadávají hexadecimální notací, oddělují se dvojtečkami. Nuly na začátku bloku lze vypustit, stejně tak bloky, které jsou tvořené jenom nulami. Za sebou následující dvojtečky lze nahradit jedinou, pokud je zachován jednoznačný význam. 2001:0db8:0000:0000:0000:0000:1428:57ab se zkrátí na 2001:0db8::1428:57ab
5.4
IP adresy a názvy počítačů pomocí DNS
Pro uživatele nejsou IP adresy příliš přehledné a pamatují si mnohem lépe jména nebo názvy. I na počítače v internetu je možné přistupovat prostřednictvím jejich jmen. Převod na jména zajišťuje služba Domain Name System (DNS). Jedná se o hierarchické jmenné schéma, v němž se jméno počítače skládá (čteno zprava doleva) z kořenové domény, domény nejvyšší úrovně, domény druhé úrovně, podle potřeby různých subdomén a jména samotného počítače. Každá součást jména se odděluje tečkou. Kompletní jméno, které je složené ze všech uvedených prvků, se označuje za Fully Qualified Domain Name (FQDN). Úkolem serveru DNS je převádět jména na adresy a zase zpátky. Pár příkladů kompletních doménových jmen: www.bsinfo.musin.de.
Städtische Berufsschule für Informationstechnik München (Městská odborná škola pro informační techniku v Mnichově).
ulm-ea3-i.ulm.de.net.dtag.de.
DNS jméno jednoho routeru společnosti Telekom AG.
ftp.arl.army.mil.
Jeden z prvních internetových serverů.
www.liberix.cz.
Obecně prospěšná společnost Liberix, podporující svobodný software v ČR.
Tečka pro kořenovou doménu se vynechává.
Uniform Resource Locator (URL) Uniform Resource Locator (URL) umožňuje jednotným způsobem přistupovat k různým službám v síti nebo na internetu. Formát URL se skládá z typu služby (např. http, ftp, …), adresy nebo DNS jména serveru, na němž je služba dostupná, a případně názvu cílového adresáře a nebo souboru. Příklady URL: http://www.bsinfo.musin.de/downloads/Blockplan1112.pdf ftp://ftp.debian.org/debian/README.html http://192.168.9.184/files/VMs/Linux-vm.rar
113
LEKCE V – PRÁCE V SÍTI
Obrázek 5.5: DNS URL zadaná pomocí IPv6 adres musí být uzavřena do hranatých závorek. http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]/ http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:8080/
5.5
Ruční nastavení sítě
Mnoho distribucí používá pro nastavení sítě program NetworkManager, populární nástroj pro správu síťových připojení v Linuxu, který usnadňuje také přístup k bezdrátovým sítím. Často jsou také používány distribuční nástroje (např. yast v SUSE). NetworkManager je díky svému jednoduchému ovládání rozšířený hlavně na desktopu. Na serverech se síť nastavuje ručně. To je případ i následujícího scénáře, v němž je krok za krokem popsané nastavení sítě na linuxovém stroji linux1. Nejprve nastavíme IPv4 adresu síťové karty, pak router DSL jako standardní bránu a nakonec překlad jmen.
Link encap:Ethernet HWadr 00:80:5a:54:48:cb AKTIVOVÁNO VŠESMĚROVÉ_VYSÍLÁNÍ BĚŽÍ MULTICAST MTU:1500 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 kolizí:0 délka odchozí fronty:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Metrika:1
V tomto příkladu se nacházejí tři síťová rozhraní: • Síťová ethernetová karta jako zařízení eth0 s IPv4 adresou 192.168.50.1 a IPv6 adresou fe80::20c: 29ff:fec7:1e69. • Dále je k dispozici dosud nenastavená bezdrátová karta (wlan0). • A zbývá ještě virtuální síťové rozhraní neboli loopback lo, které reprezentuje samotný počítač, a to s IPv4 adresou 127.0.0.1 (resp. IPv6 adresou ::1). Uvedené jsou ještě další informace, např. hardwarové adresy, MAC adresy jednotlivých karet, přiřazené masky podsítě, IPv4 adresy pro všesměrové vysílání (angl. broadcast) a další stavové informace. Přepínač -a zajistí, že ifconfig zobrazí nastavení všech dostupných síťových karet, a to i těch nenastavených. Pomocí ifconfig můžete ethernetové kartě přiřadit jinou IPv4 adresu: ifconfig eth0 192.168.1.1 up
Pozor: Konfigurace se ihned změní! Pokud se má použít nestandardní maska podsítě, je potřeba kromě masky zadat také novou adresu pro všesměrové vysílání. ifconfig eth0 192.168.2.131 netmask 255.255.255.240 broadcast 192.168.2.143 up
Zadání ve formátu CIDR je také možné: ifconfig eth0 192.168.2.131/28
Jakmile je IP adresa počítače linux1 správně nastavená, můžete z tohoto stroje pomocí pingu vyzkoušet ( pingnout“), ” jestli je v tomto segmentu sítě dostupný nějaký další počítač: ping 192.168.50.254 PING 192.168.50.254 (192.168.50.254) 56(84) bytes of data. 64 bytes from 192.168.50.254: icmp_seq=1 ttl=64 time=0.574 ms 64 bytes from 192.168.50.254: icmp_seq=2 ttl=64 time=0.053 ms 64 bytes from 192.168.50.254: icmp_seq=3 ttl=64 time=0.051 ms ^C --- 192.168.50.254 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.051/0.226/0.574/0.246 ms
Poznámka: Zde byl ping po několika řádcích výpisu přerušen klávesovou kombinací Ctrl+c. Nastavení výchozí brány Počítač linux1 má být přes DSL router připojený k internetu, takže musí dostat od routeru přidělenu IP adresu. V tomto modelovém příkladě je v síti jen jeden router, označuje se jako výchozí brána“ a stará se o směrování dat do ostatních ” sítí. Příkazem route se DSL router nastaví jako výchozí brána na počítači linux1: route add default gw 192.168.50.254
115
LEKCE V – PRÁCE V SÍTI
Platnost výchozí brány si můžete ověřit příkazem route, který vypisuje routovací (směrovací) tabulku linuxového počítače. Pokud je v prvním sloupci napsáno default, je brána nastavená správně. route Směrovací tabulka v jádru pro IP Adresát Brána Maska default 192.168.50.254 0.0.0.0 link-local * 255.255.0.0 192.168.50.0 * 255.255.255.0
Přízn UG U U
Metrik 0 1000 1
Odkaz 0 0 0
Užt Rozhraní 0 eth0 0 eth0 0 eth0
V tomto okamžiku už by mělo být funkční spojení s počítači v internetu, což si můžete ověřit pomocí pingu např. na veřejný DNS server od Googlu: ping 8.8.8.8
Nastavení překladu jmen Ještě je potřeba nastavit překlad jmen, aby byl linux1 v internetu dostupný také pod názvem. Adresa jmenného serveru (DNS) se zapíše do souboru /etc/resolv.conf. V běžných případech se o překlad jmen postará router DSL, potom bude záznam v souboru /etc/resolv.conf vypadat takto: nameserver 192.168.50.254
Funkčnost překladu jmen ověříte příkazem nslookup (ten je ovšem už zastaralý) nebo dig: dig musin.muenchen.de ; <<>> DiG 9.7.3 <<>> musin.muenchen.de ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12028 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;musin.muenchen.de. IN A ;; ANSWER SECTION: musin.muenchen.de. 5 IN A 62.157.140.133 musin.muenchen.de. 5 IN A 80.156.86.78 ;; ;; ;; ;;
Pokud nebude překlad jmen s DSL routerem fungovat, bude potřeba zapsat do souboru /etc/resolv.conf adresu DNS serveru vašeho poskytovatele připojení (např. 194.25.2.132) nebo nějakého jiného důvěryhodného DNS serveru. V malých lokálních sítích nebo pro jednotlivé počítače, pro něž nebývá k dispozici DNS server (třeba nejsou připojené do internetu), může funkci překladu jmen plnit soubor /etc/hosts, do něhož se zapisují jednotlivé názvy počítačů a jejich IP adresy.
Trvalé uložení síťové konfigurace Pro trvalé uložení konfigurace sítě jen nejlepší použít administrativní nástroje, které vám nabízí vaše distribuce. Např. v Ubuntu jde o nástroj pro nastavení sítě v Ovládacím centru GNOME, v SUSE je to yast. Konfigurační soubory pro síťová rozhraní se v různých distribucích nacházejí na různých místech.
116
5.6. AUTOMATICKÉ NASTAVENÍ SÍTĚ POMOCÍ DHCP
Distribuce založené na Debianu Např. Ubuntu: /etc/network/interfaces Nápověda: man 5 interfaces. SUSE
Konfigurační soubory v adresáři /etc/sysconfig/network/ pro eth0 např. ifcfg-eth0.
Red Hat
Konfigurační soubory v adresáři /etc/sysconfig/networkscripts/ pro eth0 např. ifcfg-eth0.
5.6
Automatické nastavení sítě pomocí DHCP
Ruční nastavení sítě je zdlouhavé a náchylné na chyby, automatická konfigurace prostřednictvím Dynamic Host Configuration Protocol (DHCP) je rozhodně pohodlnější. V takovém případě vyjde požadavek na konfiguraci od klienta. DHCP server odpoví a poskytne klientovi všechny nezbytné údaje (např. IP adresu, masku sítě, adresu brány a DNS serveru apod.). Všechny distribuce jsou po své instalaci připravené na roli klienta pro DHCP. Na pozadí se spouští služba dhcpcd, resp. dhclient, která požádá o síťovou konfiguraci. Ve výše uvedeném modelovém příkladu by stačilo aktivovat DHCP server, který je součástí DSL routeru. Cvičení: Připojení počítačů do sítě a jejich statická konfigurace 1. Zjistěte síťové nastavení svého počítače a zapište následující: IPv4 adresa: IPv4 síť: IPv4 všesměrové vysílání: IPv6 adresa: 2. Zjistěte IPv4 a IPv6 adresy svého souseda a vyzkoušejte vzájemné spojení pomocí ping pro IPV4 a pomocí ping6 pro IPv6. 3. Váš počítač je momentálně nastavený tak, že používá DHCP. Zadejte příkaz, kterým nastavíte první ethernetové rozhraní na IPv4 adresu zjištěnou v první úloze. 4. Znovu si zjistěte síťové nastavení vašeho počítače a ověřte si, zda můžete souseda stále kontaktovat prostřednictvím IPv4. 5. Nastavte si výchozí bránu. Použijte IPv4 adresu routeru, kterou vám sdělí lektor kurzu. Ověřte pomocí ping na 8.8.8.8., že routování funguje správně. 6. Nastavte překlad jmen. Použijte IPv4 adresu DNS serveru, kterou vám sdělí lektor kurzu. Vyzkoušejte překlad jmen pro musin.muenchen.de. 7. Nyní byste měli konfiguraci sítě, kterou jste provedli v předchozích úlohách, uložit trvale. Je potřeba ji zapsat do souboru /etc/network/interfaces (tento se používá v systémech založených na Debianu, tedy i v Ubuntu). Počítač je stále nastavený na automatickou konfiguraci přes DHCP, takže záznam pro první ethernetové rozhraní vypadá následovně: auto eth0 iface eth0 inet dhcp
Změňte tedy tento záznam v souboru /etc/network/interfaces a vložte do něj připravenou konfiguraci (xxx nahraďte za své konkrétní hodnoty): auto eth0 iface eth0 address netmask gateway
Restartujte počítač a otestujte, zda je nastavený tak, jak jste chtěli.
117
LEKCE V – PRÁCE V SÍTI
Cvičení: Instalace webového serveru 1. Pro zpřístupnění fotografií ze školního výletu potřebujeme, jak je uvedeno v našem modelovém příkladu (viz obrázek 5.6 na straně 114), nainstalovat webový server Lighttpd. Jedná se rychlý a nenáročný HTTP server, který se navíc ještě snadno nastavuje. Instalace se provede následovně: sudo apt-get install lighttpd
Po instalaci je server hned aktivní a měl by reagovat na požadavky ze všech síťových rozhraní na standardním portu 80. Ukázat si to můžeme na výstupu následujícího příkazu: netstat -apn | grep ":80" tcp 0 0 0.0.0.0:80
0.0.0.0:*
LISTEN
3939/lighttpd
Výpis znamená, že program lighttpd jako proces číslo 3939 naslouchá na všech rozhraních (0.0.0.0) přes TCP na portu 80 (HTTP). Server můžete otestovat vytvořením jednoduché stránky a jejím zobrazením v prohlížeči. echo '
Funguje to!
' > /var/www/index.html
Do adresní řádky prohlížeče zadejte adresu serveru. Pokud to nefunguje, zkontrolujte stav serveru pomocí service lighttpd status, případně ho spusťte pomocí service lighttpd start. Úkol: Nainstalujte a otestujte server Lighttpd podle výše uvedených kroků. 2. Lighttpd je možné pomocí modulů rozšířit o doplňkové funkce. Například může načítat webové stránky z domovských adresářů lokálních uživatelů. Předtím je ovšem třeba aktivovat odpovídající modul jako root, např. lightyenable-mod userdir a server restartovat pomocí service lighttpd restart. Uživatel, který by chtěl tuto funkci využívat, si ve svém domovském adresáři založí adresář /public_html a zveřejní tím jeho obsah pod adresou http://IP_adresa_serveru/~uživatelské_jméno/. Důležité je, aby měl uživatel www-data, pod kterým webový server běží, práva ke čtení adresáře a jeho obsahu. Další informace ohledně nastavení Lighttpd najdete na stránkách http://www.root.cz/clanky/lighttpd-lehky-webserver/, https:// wiki.archlinux.org/index.php/Lighttpd_(Česky) nebo http://www.linuxexpres.cz/praxe/spravalinuxoveho-serveru-lighttpd-a-php-pres-fastcgi. Úkol: Rozšiřte Lighttpd tak, aby načítal webové stránky z domovských adresářů lokálních uživatelů. Cvičení (pro šikovné): Nastavení SSH přístupu na intranetový server 1. Pomocí which sshd můžete otestovat intranetový server, jestli na něm běží server SSH. Pokud zjistíte, že neběží, nainstalujte ho pomocí sudo apt-get install openssh-server
2. Spusťte server SSH pomocí sudo service ssh start a přihlaste se přes SSH jako user1: ssh [email protected]
A hned se zase odhlaste. exit
Uživatel se může přes SSH přihlašovat bez hesla. K nastavení jsou nutné tyto kroky: • uživatel si na klientském počítači vytvoří klíče (veřejný a soukromý), • vytvořený veřejný klíč se připojí do souboru /.ssh/authorized_keys v domovském adresáři uživatele na serveru. 3. Vytvořte si jako user1 na klientském počítači dvojici klíčů: ssh-keygen -t rsa
118
5.6. AUTOMATICKÉ NASTAVENÍ SÍTĚ POMOCÍ DHCP
Přijměte navržený název souboru /home/user1/.ssh/id_rsa a stiskněte dvakrát Enter, čímž vytvoříte prázdné ověřovací heslo. 4. Zkopírujte jako user1 pomocí scp veřejný klíč /home/user1/.ssh/id_rsa.pub do svého (user1) domovského adresáře na serveru SSH: scp /home/user1/.ssh/id_rsa.pub [email protected]:~/.ssh/id_rsa.client
5. Přihlaste se z klienta ještě jednou jako user1 na server SSH: ssh [email protected]
a nastavte veřejný klíč uživatele user1 jako autorizovaný: cat ~/.ssh/id_rsa.client >> ~/.ssh/authorized_keys
6. Po odhlášení by se měl user1 z klientského počítače přihlásit na server SSH bez hesla. Vyzkoušejte to! Důležité: Ujistěte se, že má adresář /.ssh v domovském adresáři práva -rwx------, protože jinak s ním démon SSH odmítne pracovat a přihlášení přes ssh nebude možné.
119
LEKCE V – PRÁCE V SÍTI
5.7
Otázky
1. Co je to internet?
2. Vyjmenujte některé protokoly z rodiny protokolů TCP/IP.
3. K čemu slouží SSH a jaké výhody má oproti Telnetu?
4. Kterým aplikačním protokolem jsou přenášena data z webového serveru?
5. Co je to port?
6. Z kolika bitů se skládá IPv4 adresa?
7. K čemu se používá maska sítě?
8. Zapište binární reprezentaci IP adresy 192.168.1.1.
9. Napište IPv4 a IPv6 adresy loopback rozhraní.
10. Napište zkrácenou verzi IPv6 adresy 2001:0db8:0000:0815:4711:0000:0028:03f1.
11. Jak můžete zjistit konfiguraci dostupných síťových rozhraní?
12. Kterým příkazem zjistíte, zda je počítač dostupný?
13. Co je to výchozí brána a kterým příkazem se nastavuje?
120
5.7. OTÁZKY
14. K čemu se používá DNS?
15. Do kterého souboru se zapisuje používaný DNS server?
16. Napište dva příkazy, kterými ověříte funkčnost překladu doménových jmen.
17. Kterým aplikačním protokolem může být automaticky nastaveno síťové rozhraní?
18. Popište kroky a příkazy, kterými do sítě připojíte a správně nastavíte linuxové PC linux2 z modelového příkladu (viz obrázek 5.6 na straně 114).
121
LEKCE V – PRÁCE V SÍTI
122
Kapitola 6
Lekce VI – Archivace dat a jejich komprimace Archivace dat patří k důležitým bodům, na které se často zapomíná nebo se zanedbávají. Teprve až jsou data nedostupná nebo poškozená, začneme přemýšlet, zda a kdy jsme vůbec udělali jejich poslední zálohu. Některá data si lze snadno znovu opatřit, ale například fotky ze školního výletu jsou nenávratně ztraceny. Další výlet by byl sice fajn, ale obtížně realizovatelný a šance, že se podaří udělat stejné fotky, se blíží nule. V této části si ukážeme, jak lze data různými způsoby komprimovat a archivovat (např. na externí disk).
Rozlišují se dvě metody komprimace: • ztrátová komprimace Data jsou komprimována a počítá se přitom s určitou ztrátou kvality, na druhou stranu se ale sníží množství (velikost) dat. Dekomprimace a získání originálu už není možné. Tento postup se s oblibou používá u filmů, zvukových nahrávek nebo obrázků, např. ve formátu JPG. Ztrátová komprimace není určená pro zálohování dat! • bezztrátová komprimace Komprimace proběhne bez ztráty dat, takže je kdykoliv možné obnovit originál. Právě bezztrátová komprimace je určená k vytváření záloh. Data se komprimují a ukládají dvěma způsoby: Jako datový proud
V datovém kontejneru
Při tomto postupu se původní datový proud komprimuje a uloží do souboru. Komprimují se čistá data, metadata (v případě souboru např. vlastník, datum vzniku apod.) se ztrácejí.
Do kontejneru se neukládají jen komprimovaná data, nýbrž ke každému uloženému souboru také odpovídající metadata (např. název souboru, datum, vlastník, přístupová práva apod.). V kontejneru může být teoreticky uložené libovolné množství souborů a adresářových struktur. Přehled mnoha komprimačních programů najdete na stránce:
Ukázkový soubor Pro ukázky datové komprimace a především pro její srovnání použijeme volně dostupný textový soubor Bible ” Martina Luthera“ z roku 1912. Má tu výhodu, že jde o čistě textový soubor, nemá omezující licenci a je velký přes 4 MiB. Soubor lze stáhnout z adresy http://bitcan.dyndns.org/german/MartinLuther-1912/Martin_ Luther_Uebersetzung_1912.txt.
6.1.1
gzip
Kompresní program gzip (GNU zip) patří k proudovým komprimačním nástrojům a nabízí dobrý kompresní poměr, není zatížený patentovanými algoritmy a najdete ho v každém unixovém/linuxovém systému. Používá se také při přenosu webových stránek ze serveru ke klientovi, např. při komprimaci HTML stránek, aby se přenášely rychleji. Do sady patří tři nástroje: gzip
Komprimuje soubor, resp. datový proud.
gunzip
Dekomprimuje soubor, resp. datový proud.
zcat
Vypíše obsah komprimovaného textového souboru.
Nejdůležitější parametry příkazu gzip jsou: -c
Výstup z programu směřuje na standardní výstup stdout, odkud může být načten jiným programem.
-d
Rozbalit (stejně jako gunzip).
--fast
Použije se rychlá komprimace, která ale nemá tak dobrý výsledek.
--best
Použije se nejlepší komprimace, která ale vyžaduje více času než předchozí typ.
Za normálních okolností připojí gzip komprimovanému souboru příponu .gz a poté smaže originál. gunzip postupuje přesně obráceně.
124
6.1. KOMPRIMACE DAT
V následujícím případě se nejprve textový soubor zkopíruje, aby se originál neměnil. Soubor bude zkomprimován ( zabalen“) a následně zase dekomprimován ( rozbalen“). Abychom viděli, jak kvalitní byl kompresní poměr, zobrazíme ” ” si pokaždé příkazem lss velikost souboru1 . cp bibel.txt Bcomp.txt lss Bcomp.* echo '*** zabalit *' gzip Bcomp.txt lss Bcomp.* echo '*** rozbalit *' gunzip Bcomp.txt.gz lss Bcomp.* # Vše zase smazat rm Bcomp.*
Originální soubor má velikost 4364051 bajtů, zabalený soubor odpovídá cca 31,7 % původní velikosti. Pokud chcete, aby gzip původní soubor nesmazal, zadejte parametr -c a výstup přesměrujte. cp bibel.txt Bcomp.txt gzip -c Bcomp.txt > Bcomp.txt.gz lss Bcomp.* # Vše zase smazat rm Bcomp.*
6.1.2
4364051 Bcomp.txt 1384697 Bcomp.txt.gz
bzip2
Kompresní program bzip2 se chová podobně jako gzip, používá ale jiný algoritmus, který komprimuje lépe než gzip. Vyžaduje ale výrazně více času. Tato sada se skládá z následujících nástrojů: bzip2
Komprimuje soubor, resp. datový proud.
bunzip2
Dekomprimuje soubor, resp. datový proud.
bzcat
Vypíše obsah komprimovaného textového souboru.
Nejdůležitější parametry jsou identické s příkazem gzip, takže stačí jen zaměnit název příkazu. cp bibel.txt Bcomp.txt bzip2 -c Bcomp.txt > Bcomp.txt.bz2 lss Bcomp.* # Vše zase smazat rm Bcomp.*
4364051 Bcomp.txt 998272 Bcomp.txt.bz2
Zřetelně zde vidíme, že komprimovaný soubor se zmenšil na 22,9 %. V dalším příkladu se příkazem time měří, jak dlouho trvá průběh. Hodnoty sice závisejí na tom, kolik procesů operační systém ještě zpracovává paralelně, ale poskytují docela dobrou přibližnou hodnotu. cp bibel.txt Bcomp.txt time gzip -c Bcomp.txt > Bcomp.txt.gz time bzip2 -c Bcomp.txt > Bcomp.txt.bz2 # Vše zase smazat rm Bcomp.*
real 0m0.574s user 0m0.452s sys 0m0.092s real 0m0.955s user 0m0.808s sys 0m0.040s
Jak vidíte, bzip2 potřebuje pro komprimaci zhruba 1,5krát více času než gzip.
6.1.3
zip
Kompresní program zip (protějškem je unzip) patří k nástrojům, které komprimují kontejnerově. Dokáže do archivu (s příponou zip) uložit mnoho souborů s patřičnými metadaty.2 Používá několik algoritmů, které se liší kompresním poměrem a rychlostí zpracování. Základní přednosti programu zip jsou tyto: • teoreticky vzato lze uložit libovolné množství souborů, • metadata jako název souboru nebo vlastník se ukládají, 1 Příkaz
lss je docela obyčejný skript v Bashi, který spustí příkaz ls -l a zobrazí pouze sloupce pro velikost a název souboru. Jak se sloupce zkopírují a použijí, jste se dozvěděli ve čtvrté lekci – (více k tématu na straně 94) 2 Program vyvinul Phil Katz, odtud pochází původní název pkzip a pkunzip.
125
LEKCE VI – ARCHIVACE DAT A JEJICH KOMPRIMACE
• dodatečně lze soubory přidávat, odstraňovat nebo obnovovat, • na výběr souborů lze použít filtr, • data mohou být zašifrovaná.3 Spuštěním zip --help získáte nejdůležitější parametry: zip --help Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license. Zip 3.0 (July 5th 2008). Usage: zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list] The default action is to add or replace zipfile entries from list, which can include the special name - to compress standard input. If zipfile and list are omitted, zip compresses stdin to stdout. -f freshen: only changed files -u update: only changed or new files -d delete entries in zipfile -m move into zipfile (delete OS files) -r recurse into directories -j junk (don't record) directory names -0 store only -l convert LF to CR LF (-ll CR LF to LF) -1 compress faster -9 compress better -q quiet operation -v verbose operation/print version info -c add one-line comments -z add zipfile comment -@ read names from stdin -o make zipfile as old as latest entry -x exclude the following names -i include only the following names -F fix zipfile (-FF try harder) -D do not add directory entries -A adjust self-extracting exe -J junk zipfile prefix (unzipsfx) -T test zipfile integrity -X eXclude eXtra file attributes -y store symbolic links as the link instead of the referenced file -e encrypt -n don't compress these suffixes -h2 show more help
Originální soubor se nemaže, takže ho není třeba kopírovat. zip bibel.zip bibel.txt lss bibel.* # Vše zase smazat rm bibel.zip
Příkazem unzip --help získáte nejdůležitější parametry. unzip --help UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP. Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] Default action is to extract files in list, except those in xlist, to exdir; file[.zip] may be a wildcard. -Z => ZipInfo mode ("unzip -Z" for usage). -p extract files to pipe, no messages -l list files (short format) -f freshen existing files, create none -t test compressed archive data -u update files, create if necessary -z display archive comment only -v list verbosely/show version info -T timestamp archive to latest -x exclude files that follow (in xlist) -d extract files into exdir modifiers: -n never overwrite existing files -q quiet mode (-qq => quieter) -o overwrite files WITHOUT prompting -a auto-convert any text files -j junk paths (do not make directories) -aa treat ALL files as text -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields -C match filenames case-insensitively -L make (some) names lowercase -X restore UID/GID info -V retain VMS version numbers -K keep setuid/setgid/tacky permissions -M pipe through "more" pager -O CHARSET specify a character encoding for DOS, Windows and OS/2 archives -I CHARSET specify a character encoding for UNIX and other archives See "unzip -hh" or unzip.txt for more help. Examples: unzip data1 -x joe => extract all files except joe from zipfile data1.zip unzip -p foo | more => send contents of foo.zip via pipe into program more unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer
3 Šifrování
126
ale není příliš dobré a na internetu najdete mnoho nástrojů, které se snaží heslo prolomit.
6.1. KOMPRIMACE DAT
Při rozbalování pomocí unzip vynikne několik zvláštností: • datum původního souboru zůstává nezměněno, • lze obnovit UID, GID a práva (SUID, GUID a sticky bit) původního souboru (pouze root může nastavit jiné UID, GID atd.), • lze zabránit přepsání existujících souborů, • v textových souborech lze upravit znaky označující konce řádků; Linux používá znak line feed“ (0×10), Mac ” carriage return“ (0×13) a Windows oba dva znaky (0×10 + 0×13). ” Chcete-li zabalit“ také podadresáře, zadejte přepínač -r. ”
zip -r fotky.zip fotak/ echo '*** Zobrazit obsah ***' unzip -l fotky.zip # Vše zase smazat rm fotky.zip
Při komprimaci souborů JPG se stává, že je kompresní poměr velmi malý. To spočívá v tom, že formát souborů JPG je už z principu komprimovaný a jeho další komprimace už nepřinese viditelné výhody. Vlastně jedinou – všechny soubory budou zabalené v jednom archivu. Poznámka: Přepínačem -0 určíte, že zip soubory jen uloží do kontejneru a nebude je komprimovat. V předchozím příkladu se zpracoval také soubor img_cr2_0546.cr2. Přepínačem -x lze určité soubory ze zpracování vyřadit, pomocí -i lze zase zařadit jen ty soubory, které odpovídají zadanému vzoru. Tento parametr lze použít opakovaně, ale musí stát na konci celého příkazu. Pokud se použijí zástupné znaky, musí se hodnota uzavřít do apostrofů (quoting, strana 64).
zip -r fotky.zip fotak/ -x '*.cr2' echo '*** Zobrazit obsah ***' unzip -l fotky.zip # Vše zase smazat rm fotky.zip
Archivační program tar (angl. tape archiver, nástroj pro zálohování na pásku) je v unixových/linuxových systémech velmi rozšířený a patří také ke kontejnerovým archivátorům. Původně byl zamýšlen pro zálohování souborů na magnetické pásky. Nabízí možnost ukládat soubory sekvenčně do jednoho archivu a opět je extrahovat. Jako přípona slouží tar.4 Původně tar nedokázal archiv komprimovat, ale ve spojení např. s gzip, resp. bzip2, lze archivy také komprimovat. Mají příponu tar.gz, resp. tar.bz2. tar [parametr] <soubor> ... 4 Takovému
souboru se často říká tarball.
127
LEKCE VI – ARCHIVACE DAT A JEJICH KOMPRIMACE
Nejdůležitější parametry programu tar jsou:5 -c
Vytvoří archiv.
-t
Zobrazí obsah.
-x
Rozbalí archiv.
-r
Soubory budou přidány.
-u
Soubory, které jsou novější než ty v archivu, budou přidány.
-f
K uložení bude použit soubor.
-v
Zobrazování informací.
-z
Pro komprimaci se použije gzip.
-j
Pro komprimaci se použije bzip2.
-C
Před rozbalením změnit adresář.
-p
Při rozbalení obnovit práva (jiné UID, GID atd. smí nastavit jen root).
Příklady: Soubory jen archivovat a nekomprimovat. tar cvf bibel.tar bibel.txt lss bibel.* # Vše zase smazat rm bibel.tar
bibel.txt 4372480 bibel.tar 4364051 bibel.txt
Nezapomeňte, že tar navíc ukládá ještě metadata, takže nekomprimovaný formát je větší než originál. Soubory archivovat a komprimovat pomocí gzip. tar cvzf bibel.tar.gz bibel.txt lss bibel.* # Vše zase smazat rm bibel.tar.gz
bibel.txt 1384855 bibel.tar.gz 4364051 bibel.txt
Soubory archivovat a komprimovat pomocí bzip2. tar cvjf bibel.tar.bz2 bibel.txt lss bibel.* # Vše zase smazat rm bibel.tar.bz2
bibel.txt 998590 bibel.tar.bz2 4364051 bibel.txt
Soubory archivovat, komprimovat pomocí bzip2 a potom zobrazit obsah. tar cjf bibel.tar.bz2 bibel.txt tar tvjf bibel.tar.bz2 # Vše zase smazat rm bibel.tar.bz2
Soubory archivovat, komprimovat pomocí bzip2 a potom rozbalit do jiného adresáře (práva, datum atd. zůstanou zachována). tar cjf bibel.tar.bz2 bibel.txt mkdir test tar tvjpf bibel.tar.bz2 -C test ls -l test/ # Vše zase smazat rm -r test
-rw-r--r-- plastique/plastique 4364051 2012-06-02 15:24 ←bibel.txt celkem 0
Kopírování více souborů a adresářů Běžně se soubory kopírují pomocí cp, pokud zadáte přepínač -r, pak se kopírují rekurzivně. Předpokladem ale je, aby žádný adresář v cílovém místě neexistoval. Navíc se k tomu ještě přidává fakt, že se kopíruje obsah souborů, ale nikoliv např. přístupová práva. Pomocí tar můžete tyto problémy snadno obejít: 5 Stejně
128
jako ps podporuje tar zápisy parametrů s -, s -- a také bez -.
6.1. KOMPRIMACE DAT
tar cf - | ( cd ; tar xvf - )
Parametrem - se nebude zapisovat do souboru, nýbrž na standardní výstup stdout a ten bude přesměrován pomocí roury. Pak se změní adresář na cílový a přijatý datový proud se zase rozbalí (- se postará, že se bude číst ze stdin). Pokud se při rozbalování navíc zadá -p, zachovají se také práva. Samozřejmě byste mohli použít také gzip, resp. gunzip, to by ale kopírování prodloužilo, protože zabalení a rozbalení potřebuje nějaký čas a zde nemá žádný význam.
6.1.5
Další nástroje pro komprimaci
Často se vám stane, že k vám hlavně ze světa Windows dorazí archivy, které byly vytvořeny jinými kompresními programy. Ve většině případů je můžete v Linuxu bez problémů zpracovat. rar Kompresní program rar (protějškem je unrar) se řadí do skupiny nástrojů kontejnerové komprimace. Program byl vytvořen Jevgenijem Roshalem, odtud název: Roshal ARchive. Software není ani svobodný (free) ani zdarma (for free), nýbrž jen shareware a musí být po 40 dnech používání zaregistrován. Pro Linux existuje také svobodný rozbalovač unrar-free. Rar se dokázal proti zip navzdory vyššímu kompresnímu poměru prosadit jen v některých oblastech, např. při předávání dat přes internet. Jeho omezením je nesvobodná licence. rar [parametr] <archiv> <soubor> ...
Nejdůležitější parametry rar jsou následující: a
Přidá do archivu soubory.
d
Smaže soubory z archivu.
e
Rozbalí archiv.
x
Rozbalí archiv s kompletní adresářovou strukturou.
t
Otestuje archiv.
6.1.6
7-Zip
Kompresní program 7z (7-Zip) patří také k těm, které komprimují kontejnerově, vytvořil ho Igor Viktorovič Pavlov a je vydán s licencí LGPL. Přípona archivů je 7z“. Nejvýznamnější vlastnosti jsou: ” • podpora velkých souborů až do velikosti 16 exabajtů, • komprimace hlavičky archivu, • silné šifrování pomocí AES-256. Ovšem 7z není vhodný pro zálohu linuxového systému, protože ignoruje všechna přístupová práva. Nejdůležitější parametry 7z jsou tyto: a
Přidá soubory/adresáře do archivu, resp. vytvoří archiv.
d
Odstraní soubory/adresáře z archivu.
e
Rozbalí všechny soubory z archivu.
x
Rozbalí archiv a zachová adresářovou strukturu.
l
Vypíše obsah archivu.
t
Otestuje integritu archivu.
u
Aktualizuje obsah archivu.
129
LEKCE VI – ARCHIVACE DAT A JEJICH KOMPRIMACE
7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18 p7zip Version 9.20 (locale=cs_CZ.UTF-8,Utf16=on,HugeFiles=on,2 CPUs) Scanning 7z a bibel.7z bibel.txt echo '******' lss bibel.* # Vše zase smazat rm bibel.7z
6.1.7
Creating archive bibel.7z Compressing
bibel.txt
Everything is Ok ****** 4364051 bibel.txt 1041165 bibel.7z
Otázky
1. Co se rozumí pod pojmem ztrátová, resp. bezztrátová komprimace a která z nich je vhodná pro zálohu dat?
2. Které výhody a nevýhody se objevují u proudové komprimace v porovnání s kontejnerovou komprimací?
3. Jak se u gzip dosáhne toho, aby nemazal originální soubor?
4. Jak lze u zip zabalit také podadresáře?
5. Jak lze zobrazit obsah archivu zip bez jeho rozbalení?
6. Jak lze při vytváření archivu zip vynechat soubory s příponami ~ a .backup?
7. Jak bude vypadat kompletní příkaz pro archivování adresáře hugo s celým obsahem pomocí tar a jeho komprimace pomocí bzip2?
8. Jak zobrazíte obsah archivu tar (zabaleného pomocí bzip2), aniž byste ho rozbalili?
9. Jak se rozbalí archiv tar, aby se obnovila původní práva?
Cvičení: 1. Vyzkoušejte sami výše uvedené příklady. 2. Vytvořte přehledovou tabulku, která bude obsahovat různé komprimované formáty souborů (textové, obrázky PNG, obrázky JPG, kresby SVG, …) a u každého kompresní poměr a komprimační dobu. Poznámka: Použijte dostatečně velké soubory, jinak nebudou mít výsledky vypovídací hodnotu.
130
6.2. ZÁLOHOVÁNÍ DAT
6.2
Zálohování dat
Zálohování chrání data před ztrátou. Tuto větu byste si měli vzít k srdci, protože mnoho lidí se po záloze začne poprvé ptát, až když jsou data ztracena nebo poškozena.
6.2.1
Typy zálohování
Rozlišují se následující typy záloh: zrcadlová záloha
Vytvoří se zrcadlová kopie kompletního datového nosiče (obvykle jde o pevný disk, resp. diskový oddíl) v poměru 1:1. Nezálohují se tedy jen uživatelská data, nýbrž také celý souborový systém, tedy případně i operační systém.
kompletní nebo úplná záloha Zálohovaná data (adresáře a soubory) jsou kompletně přenesena na zálohovací médium, např. pásku, výměnný disk nebo jiné médium. rozdílová záloha
Zálohována jsou všechna data, která byla od poslední kompletní zálohy změněna nebo jsou nová.
přírůstková záloha
Zálohována jsou všechna data, která byla od poslední přírůstkové zálohy změněna nebo jsou nová, nebo jde o první spuštění od poslední kompletní zálohy.
6.2.2
Generační princip
Jednou ze strategií při zálohování je generační princip dědeček-otec-syn“ (angl. grandfather-father-son, GFS), který patří ” mezi nejčastěji používané. Díky němu lze v různých časových odstupech získat různé verze dat. Pokud je poslední záloha (syn) poškozená, lze data získat ze starších záloh (otec) a tak podobně. Příklad Při denní záloze to tedy vypadá následovně: • 4 média pro pondělí až čtvrtek pro každodenní zálohu (syn), • 4 média pro čtyři pátky měsíce (otec), • 12 médií pro poslední den každého měsíce (dědeček). To tedy znamená, že s 20 médii (předpokládejme, že se jedna záloha vejde na jedno médium) pokryjete celý rok. Podle tohoto principu tedy můžete kdykoliv přistupovat k záloze • každého z posledních čtyř pracovních dní (syn), • každého z posledních čtyř pátků (otec), • každého konce posledních dvanácti měsíců (dědeček).
6.2.3
Provedení zálohy
V předchozí kapitole jste se dozvěděli o možnostech kontejnerové komprimace. Ta se skvěle hodí pro zálohování a archivování dat. Zálohu lze provádět ručně nebo pomocí skriptu s určitou mírou automatizace. Pro naši“ (soukromou) zálohu se použije tar s bzip2. Jako úložné médium použijeme USB disk.6 V následujících ” příkladech zazálohujeme podadresář fotak. Cílem bude adresář tmp. Kompletní záloha Kompletní zálohu provedeme skriptem sichvoll. Pro název vytvořeného záložního souboru platí následující schéma: zaloha_<čeho>_komplet_.tar.bz2
Snadno tak poznáme už podle názvu, co, kdy a jak bylo zálohováno. 6 USB
disk opravdu není dobrý prostředek pro uchování záloh, protože jej často nosíme po kapsách, rychle se ztratí a snadno poškodí.
131
LEKCE VI – ARCHIVACE DAT A JEJICH KOMPRIMACE
#!/bin/bash zdroj=$1 cil=/tmp # Adresář jako parametr? if [ -z $1 ] ; then zdroj=fotak fi # Odstranit zvláštní znaky ceho=$(echo $zdroj | tr '/ ' '__') # Datum datum=$(date +%Y-%m-%d_%H-%M-%S)
# Název souboru soubor=zaloha_${ceho}_komplet_${datum}.tar.bz2 # Absolutní cesta tarsoubor=${cil}/${soubor} # Archivovat tar cjf ${tarsoubor} ${zdroj} lss ${tarsoubor}
Přírůstková záloha Pomocí tar je také možné provést přírůstkovou (inkrementální) zálohu. K tomu je potřeba pomocí parametru -g vytvořit snapshot soubor. Přírůstková záloha se provede spuštěním skriptu sichinc. #!/bin/bash zdroj=$1 cil=/tmp # Adresář jako parametr? if [ -z $1 ] ; then zdroj=fotak fi # Odstranit zvláštní znaky ceho=$(echo $zdroj | tr '/ ' '__') # Datum datum=$(date +%Y-%m-%d_%H-%M-%S) # Název souboru soubor=zaloha_${ceho}_inc_${datum}.tar.bz2
# Snapshot soubor snap=zaloha_${ceho}_inc.snar # Absolutní cesta tarsoubor=${cil}/${soubor} # Archivovat tar cjf ${tarsoubor} ${zdroj} \ -g ${cil}/${snap} lss ${cil}/zaloha_${ceho}_inc*
Aby bylo jasné, jak přírůstková záloha pracuje, provedeme krok za krokem zálohu, pokaždé vytvoříme nový soubor a znovu zazálohujeme. Na rychlých počítačích by se mohl název souboru objevit dvakrát za jednu sekundu (sekunda je v tomto případě nejmenší jednotka) a minulá záloha by se tak přepsala. Abychom tomu předešli, použijeme v příkladu příkaz sleep s pauzou dvě sekundy.
132
6.2. ZÁLOHOVÁNÍ DAT
# Pro jistotu smažeme # všechny "staré" zálohy rm -f /tmp/zaloha_fotak* echo '*** Záloha 1 *' bash sichinc
Pokud si prohlédnete velikosti souborů po třetí záloze, zjistíte, že se zálohují jen změny. Automatické zálohování Bylo by samozřejmě pěkné, kdyby se po připojení USB disku automaticky provedla záloha. To je samozřejmě s trochou námahy možné realizovat, přesahuje to ale rámec tohoto skriptu. Příklad jak na to“ najdete např. na http://wiki. ” ubuntuusers.de/udev. Denní zálohování Pokud nehodláte zálohovat na USB disk, nýbrž do adresáře, který je stále k dispozici, např. síťový disk, můžete zálohování nechat na službě cron, která zálohu spustí v zadaném čase. Můžete ji zadat pomocí příkazu anacron. Pro načasované požadavky existují speciální adresáře, z nichž cron načítá obsažené skripty a automaticky je spouští v zadaný čas. Tyto údaje se nastavují v souboru /etc/crontab. # m h dom mon dow user 17 * * * * root 25 6 * * * root 47 6 * * 7 root 52 6 1 * * root
Pokud není v danou dobu počítač zapnutý, postará se anacron o pozdější spuštění skriptu.
6.2.4
Obnovení
Kompletní zálohu lze velmi snadno nahrát zpět, v podstatě stačí jen rozbalit odpovídající archiv. V případě přírůstkové zálohy se postupně nahrávají (rozbalují) všechny zálohy. Důležité je žádnou nevynechat. tar xjf /tmp/zaloha_fotak_inc_2012-05-20_06-17-30.tar.bz2 -g /tmp/zaloha_fotak_inc.snar tar xjf /tmp/zaloha_fotak_inc_2012-05-21_06-17-10.tar.bz2 -g /tmp/zaloha_fotak_inc.snar tar xjf /tmp/zaloha_fotak_inc_2012-05-22_06-17-20.tar.bz2 -g /tmp/zaloha_fotak_inc.snar
133
LEKCE VI – ARCHIVACE DAT A JEJICH KOMPRIMACE
Cvičení: 1. Vyzkoušejte všechny uvedené příklady. 2. Zazálohujte svůj vlastní domovský adresář na USB disk.
6.2.5
Otázky
1. Které metody pro zálohování se často používají? Uveďte u každé minimálně aspoň jednu výhodu a nevýhodu.
2. Co chápete pod pojmem generační princip a jaké výhody přináší?
3. Jak se provádí přírůstková záloha pomocí tar?
134
Kapitola 7
Lekce VII – Vytvoření webové stránky s obrázky Díky pečlivé přípravě jsme nyní ve fázi, kdy chceme prezentovat své fotografie. Prvním krokem bude vytvoření obrazové galerie s náhledy ve formě webové stránky, druhým krokem její zveřejnění na webovém serveru. Abychom předešli různým problémům se zveřejněním obrázků (fotografií), je dobré si včas stanovit, jakou licenci pro obrázky použijeme. Nabízí se několik různých možností. Na konec se budeme zabývat nastavením a možným rozšířením webového prohlížeče, aby byl náš pohyb po internetu bezpečnější a chránili jsme si své soukromí.
K prezentování obrázků je vhodná webová stránka (HTML) s náhledy snímků, které jsme vytvořili již dříve. Po kliknutí na náhled se zobrazí plná verze obrázku.
7.1.1
HTML
K tématu HTML existuje dostatek materiálů, začněte třeba s kurzem na adrese http://www.jakpsatweb.cz/. Poskytne vám dostatek informací a odkazů na další zdroje. Základní tělo HTML dokumentu vypadá následovně: 1 2 3 4 5 6 7 8 9
HTML stránka
Jednoduchá webová stránka
Obrázek 7.1: Zdrojový kód a náhled na stránku v prohlížeči Na prvním řádku se určuje formát (DOCTYPE) HTML stránky. V příkladu je jako základ použito HTML 3.2.1 Na druhém řádku je dokument otevřen značkou na řádku 9 zase uzavřen párovou značkou . Titulek (text, který se zobrazuje v záhlaví okna) se nastavuje v hlavičce (sekce ) pomocí značky . V sekci se nachází vlastní obsah dokumentu. Text běžného odstavce se vkládá mezi značky
. Přehled HTML značek a jejich vlastností najdete na http://www.jakpsatweb.cz/html/rejstrik.html.
7.1.2
Zobrazení náhledů
Jednoduchý přehled obrázků lze vytvořit pomocí tabulky, do níž jednotlivé náhledy umístíme. Tabulka bude mít následující strukturu:
A1
A2
A3
A4
B1
B2
B3
B4
Obrázky do ní vložíte pomocí značky .
1 Tento
136
width="50" width="50" width="50" width="50"
/> /> /> />
width="50" width="50" width="50" width="50"
/> /> /> />
formát je překonaný, dnes je aktuální verze 5, která je v mnoha ohledech modernější. Pozn. překl.
7.1. VYTVÁŘENÍ FOTOGALERIÍ
Krok 1: Vytvoření náhledů V dalším kroku se z obrázků vytvoří jejich malé náhledy (viz kapitola 4.7 na straně 103). Obrázky (celkem 22) pro tyto příklady se nacházejí v podadresáři berlin. Pamatujte, že některé efekty jsou proveditelné jen s formátem png. Příkazem basename se z názvu odstraní adresář a [zde] přípona .jpg. for file in berlin/berlin*.jpg; do destfile=berlin/thumb_$(basename $file ←.jpg).png echo -n "$file " convert $file -thumbnail 200 \ \( +clone -alpha extract \ -virtual-pixel black -spread 10 \ -blur 0x3 -threshold 50% -spread 4 \ -blur 0x.7 \) -alpha off \ -compose Copy_Opacity -composite \ $destfile done
Krok 2: Vytvoření HTML dokumentu Nyní můžeme vytvořit samotné tělo dokumentu. Použijeme k tomu here document. V tabulce budou v každém řádku zobrazeny čtyři obrázky. Pro zjednodušení bude v tomto kroku vypsán jen název souboru. echo Vytvoření prehled1.html # Hlavička cat <<EOM >prehled1.html Fotogalerie
EOM cnt=0 for file in berlin/berlin*.jpg; do if [ $cnt -eq 0 ]; then echo "
" >>prehled1.html fi echo "
$file
" >>prehled1.html cnt=$(($cnt+1)) mod=$(($cnt % 4)) if [ $mod -eq 0 ]; then echo "
" >>prehled1.html cnt=0 fi done if [ $mod -ne 0 ]; then echo "" >>prehled1.html fi # Patička cat <<EOM >>prehled1.html
EOM
Vytvoření prehled1.html
Aby vždycky vznikly čtyři sloupce, testuje se, zda je aktuální počet vytvořených sloupců dělitelný čtyřmi. Pokud ano, vloží se značka , která řádek tabulky ukončí. V případě, že počet obrázků neodpovídá násobku čtyř, musí se po ukončení cyklu ještě otestovat, zda je nutné vložit ukončení řádku tabulky.
137
LEKCE VII – VYTVOŘENÍ WEBOVÉ STRÁNKY S OBRÁZKY
Fotogalerie
berlin/berlin_0001.jpg
berlin/berlin_0002.jpg
berlin/berlin_0003.jpg
berlin/berlin_0004.jpg
berlin/berlin_0005.jpg
berlin/berlin_0006.jpg
berlin/berlin_0007.jpg
berlin/berlin_0008.jpg
berlin/berlin_0009.jpg
berlin/berlin_0010.jpg
berlin/berlin_0011.jpg
berlin/berlin_0012.jpg
berlin/berlin_0013.jpg
berlin/berlin_0014.jpg
berlin/berlin_0015.jpg
berlin/berlin_0016.jpg
berlin/berlin_0017.jpg
berlin/berlin_0018.jpg
berlin/berlin_0019.jpg
berlin/berlin_0020.jpg
berlin/berlin_0021.jpg
berlin/berlin_0022.jpg
Krok 3: Propojení kostry dokumentu a náhledů Nyní nastal okamžik, kdy se do dokumentu vloží pomocí náhledy obrázků. echo Vytvoření prehled2.html # Hlavička cat <<EOM >prehled2.html Fotogalerie
EOM cnt=0 for file in berlin/berlin*.jpg; do if [ $cnt -eq 0 ]; then echo "
Obrázek 7.3: Náhled v prohlížeči Pokud nyní kliknete na náhledový obrázek, otevře se v prohlížeci nové okno nebo karta s obrázkem v plné velikosti.
142
7.2. ZVEŘEJNĚNÍ FOTOGALERIE NA WEBOVÉM SERVERU
7.1.3
Otázky
1. Zjistěte pomocí webu Jak psát web nejdůležitější definice DOCTYPE a krátce popište jejich funkce.
2. Zjistěte, jaké možnosti a vlastnosti mají ještě značky pro tabulku
a pro obrázek .
Cvičení: 1. Vyzkoušejte si výše uvedené příklady sami. 2. Když se podíváte na přehled náhledů, zjistíte, že u posledních buněk tabulky není rámeček. Přepracujte logiku skriptu tak, aby poslední sloupce vyplnil buňkami s prázdným“ obsahem –
. ” 3. Přehled může ještě být výrazně vylepšen. Zapojte svou fantazii a kreativitu a vzhled vylepšete např. • barvami, • jinak tvořenými náhledy, • doplňkovými informacemi, jako jsou název souboru, datum vytvoření, údaje EXIF a další.
7.2
Zveřejnění fotogalerie na webovém serveru
Poté, co je galerie vytvořená, může být zveřejněna pomocí webového serveru, který jsme instalovali kapitole 5.6 na straně 118 (zatím jen lokálně). Můžete ale klidně použít jiný webový server. Lighttpd standardně zveřejňuje obsah adresáře /var/www. HTML stránku (např. prehled3.html) a adresář s obrázky (v tomto případě berlin) musíte tedy nakopírovat do /var/www. Nezapomeňte na to, že soubory musí mít oprávnění být čitelné všemi“, protože jinak bude přístup k nim zamítnut. ”
Obrázek 7.4: Pohled na adresář localhost Kliknutím na odkaz prehled3.html zobrazíte připravenou galerii.
143
LEKCE VII – VYTVOŘENÍ WEBOVÉ STRÁNKY S OBRÁZKY
Obrázek 7.5: Galerie na webovém serveru
7.3
Licence
Pokud člověk potřebuje obrázky, texty nebo jiná média, často si sedne k vyhledávači, předhodí mu svůj požadavek a nalezené výsledky pomocí copy & paste“ začlení do svého dokumentu. Většina lidí přitom nepřemýšlí, jakou licenci použitá ” díla mají. Kritický okamžik může nastat tehdy, když někdo použije cizí díla ve svém vlastním a majitel to zjistí. To může vést k oboustranně nepříjemné zkušenosti. Aby se takovým situacím předešlo a aby byla licenční problematika obrázků a dalších děl jasná, měl by autor při jejich zveřejnění srozumitelně vyznačit, pod jakou licencí je dává k dispozici.
7.3.1
Přehled
V této kapitole jsou uvedeny důležité licence, které se často používají v oblasti Linuxu. Uvedené informace nemusí být s ohledem na právní účinnost kompletní a korektní. GNU GPL GNU General Public License“ (označovaná také jako GNU GPL nebo jen GPL) je licence pro svobodný software obsahující ” copyleft a vydaná organizací Free Software Foundation (FSF).2 Více k tématu: • http://www.gnu.org/licenses/gpl-3.0.html • http://jxself.org/translations/gpl-3.cz.shtml3 • http://www.gpl.sk/v3/ Krátce řečeno, GNU GPL znamená: • program a jeho kód se smí používat volně a bez licenčních a dalších poplatků, • uživatel – – – –
smí studovat zdrojové kódy programu, smí zdrojové kódy měnit a upravovat software pro své potřeby, smí části kódu používat pro vlastní projekty, smí program v nezměněné nebo upravené formě šířit dál.
Ale: Musí jiným lidem umožnit provádění změn a úprav kódu podle práv uvedených v GPL a musí tedy upravený kód dát k dispozici. • na program se neposkytuje žádná záruka, • v žádném případě není vývojář odpovědný za možné škody.
2 GNU 3V
GPL byla vytvořena Richardem Stallmanem, zakladatelem projektu GNU, v roce 1989. době překladu příručky jediný srozumitelný překlad verze 3 do češtiny, který zde lze uvést, ovšem jen pro rámcovou informaci. Pozn. překl.
144
7.3. LICENCE
Copyleft FSF rozumí pod pojmem copyleft kombinaci jednak rozsáhlých svobod při využití a jednak povinností zachovat tyto svobody při předání nebo distribuci kódu. To tedy znamená, že kód, který je licencován GPL, musí zůstat open-source, změny a doplnění musí mít stejnou licenci a kód musí být k dispozici. Filozofie open source Na začátku se používal pojem free software“.4 Eric Raymond zavedl pojem open source“, protože se domníval, že slovo ” ” free“ 5 odradí kompetentní zájemce z podnikatelské sféry. U free software“ jde více o politickou myšlenku, tedy hlavně ” ” svobodu, kdežto u open source“ jde v první řadě o vývojový a obchodní model. ” Richard Stallman k tomu řekl následující: Strach ze svobody: Hlavní argument pro pojem open-source software je, že free [svobodný] software některé lidi ” zneklidňuje. To je pravda: Když se mluví o svobodě, o etických otázkách, o zodpovědnost a pohodlnosti, pak se po lidech vyžaduje, aby přemýšleli o věcech, které by nejraději ignorovali. To může vyvolat nepohodlí, takže mnoho lidí tu představu raději zavrhne. Z toho nevyplývá, že by společnost byla lepší, kdybychom o těchto tématech přestali mluvit.“ 6 Open-source model nabízí hodně také pro podnikání. • Vyvíjejí se otevřené standardy. Díky nim mohou jednotlivci i firmy pracovat na jednom produktu, což by bylo nad možnosti jedince. Uživatel přitom sám určuje časový průběh vývoje; rychlé opravy chyb a různé úpravy nepředstavují obvykle žádný problém. • Díky tomu, že je kód přístupný, podléhá silné kontrole. To vede k vyšší bezpečnosti. Případné bezpečnostní mezery jsou obvykle rychle rozpoznány mnoha lidmi a také rychle odstraněny. U uzavřeného komerčního softwaru se častěji stává, že jsou nedostatky zatajovány, dokud je neodkryjí a nevyužijí útočníci.
Obchodní modely open source V odborné literatuře lze najít množství obchodních modelů pro open source. Mnoho firem sází na oblast poradenství, doplňující implementaci a především na školení a podporu. Podrobný popis najdete na stránce http://winfwiki.wi-fom. de/index.php/Gesch\%C3\%A4ftsmodelle_auf_Basis_des_Open_Source_Betriebssystems_LINUX. GNU LGPL GNU Lesser General Public License“ (LGPL) byla původně zkratkou pro Library General Public License“, ale později ” ” byla přejmenována. V podstatě odpovídá licenci GPL s tou výjimkou, že programy (včetně nesvobodných) mohou být kombinovány (dynamicky linkovány) s programovou knihovnou vydanou s licencí LGPL. To znamená, že proprietární program může používat svobodnou knihovnu. Tím je umožněno, že k vývoji programu, který nepodléhá licenci GPL, je možné použít knihovnu chráněnou licencí LGPL. Úpravy knihovny samotné musí být samozřejmě znovu licencovány LGPL. BSD Licence BSD (Berkeley Software Distribution z Kalifornské univerzity) omezuje programátory a také uživatele jen do té míry, že musí uvádět původní autory (copyrightová doložka). Jádro licence spočívá ve vyloučení nároků na odpovědnost vůči programátorům. Zdrojový kód, který podléhá licenci BSD, smí být použit ve vlastních projektech, aniž by ty následně musely být svobodným softwarem. Public Domain Public domain nepředstavuje ve smyslu open source žádnou licenci. Jen říká, že autor se vzdává veškerého vlivu na své dílo a že si s ním každý může dělat, co uzná za vhodné. Pojetí public domain ve Spojených státech amerických ( Vzdávám ” se všech práv k dílu.“) se liší od pojetí v jiných zemích. V Německu jde o volné dílo, viz https://de.wikipedia.org/ 7 wiki/Gemeinfreiheit. FLOSS/FOSS Pojmy Free/Libre Open Source Software (FLOSS), resp. Free and Open Source Software (FOSS) označují svobodný a opensource software. Více informací např. na http://www.ifossf.org.8 4 Anglicky znamená free“ jednak zdarma“, jednak svobodný“. Hlavní význam, viz dále, se týká svobody, ale na první pohled lidé vidí zdarma“. ” ” ” ” Pozn. překl. 5 Ve významu zdarma“, pozn. překl. ” 6 Richard M. Stallman – The Selected Essays of Richard M. Stallman“ 7 V České republice platí”Autorský zákon, který zmiňuje volné dílo v § 28 a softwaru se věnuje speciálně § 66. Pozn. překl. 8 České informace získáte např. na http://www.liberix.cz, pozn. překl.
145
LEKCE VII – VYTVOŘENÍ WEBOVÉ STRÁNKY S OBRÁZKY
Closed-source Closed-source je opakem open-source. Znamená to, že zdrojový kód není dostupný. Free Software Foundation doporučuje, aby se tento pojem nepoužíval a místo něj se hovořilo o nesvobodném nebo proprietárním softwaru. Přehled softwarových licencí Licence
Smí se používat s komerčním softwarem
Vlastní úpravy musí být opět svobodné
Může být zveřejněno pod jinými podmínkami
GPL LGPL BSD Public Domain
ano9 ano ano ano
ano ano ne ne
ne ne ano10 ano
Další přehledy v angličtině najdete na těchto stránkách: • http://en.wikipedia.org/wiki/Comparison_of_free_software_licences • http://www.gnu.org/licenses/gpl-faq Německá organizace Bundeszentrale für politische Bildung vydala knihu Freie Software Zwischen Privat- und Ge” meineigentum“ jako PDF s licencí Creative Commons Attribution-ShareAlike 2.0 License: http://freie-software. bpb.de/Grassmuck.pdf
Český Liberix vydal více materiálů, zejména Software na úřadech a jeho otevřené alternativy“, http://liberix. ” pozn. překl.
Creative Commons Creative Commons, krátce CC, je veřejně prospěšná organizace, která zveřejňuje různé standardizované licenční smlouvy, s jejichž pomocí může autor jednoduchým způsobem uvolnit práva ke svým dílům (textů, obrázkům a fotografiím, hudebním dílům, videoklipům …). Poskytovány jsou následující právní moduly: by Musí být uvedeno jméno autora. nc Dílo nesmí být využito pro komerční účely. nd Dílo nesmí být upraveno nebo změněno. sa Šíření pouze za stejných podmínek. Například: CC BY
Uvedení jména.
CC BY-SA
Uvedení jména, šíření za stejných podmínek.
CC BY-ND
Uvedení jména, žádné úpravy.
CC BY-NC
Uvedení jména, nekomerčně.
CC BY-NC-SA Uvedení jména, nekomerčně, šíření za stejných podmínek. CC BY-NC-ND Uvedení jména, nekomerčně, žádné úpravy. Více informací na http://www.creativecommons.org a česky na http://www.creativecommons.cz. Licence GNU pro svobodnou dokumentaci GFDL – licence GNU pro svobodnou dokumentaci (GNU Free Documentation License) – je copyleftová licence určená původně pro softwarovou dokumentaci. Licence umožňuje: • rozmnožování díla, • rozšiřování díla, • úpravy díla, a to také ke komerčním účelům. Na oplátku zavazuje uživatele díla k dodržení následujících podmínek: • uvedení autora díla, • odvozená díla opatřit stejnou licencí (princip copyleftu). 10 GPL výslovně povoluje komerční zhodnocení programů. Přirozeně za dodržení pravidel GPL, tedy že zákazníkovi musí být na žádost a bez zvláštních poplatků poskytnut zdrojový kód. Poplatek za datový nosič nebo odeslání je v pořádku. 10 BSD licence (upravená BSD licence, resp. BSD licence se třemi klauzulemi a originální BSD licence s propagační klauzulí) jsou kompatibilní s GPL. Z toho vyplývá, že kód licencovaný BSD smí být zařazen do GPL projektu a celek smí být publikován s GPL.
146
7.4. FIREFOX JAKO BEZPEČNÝ PROHLÍŽEČ
7.3.2
Kterou licenci pro vlastní obrázky
Pro fotogalerii se nabízí licence Creative Commons. Autor se musí rozhodnout, jestli zakáže komerční využití (NC, non commercial) nebo jestli požaduje zachování stejných licenčních podmínek také u odvozených děl (SA, share alike).
7.3.3
Otázky
1. V čem spočívá základní rozdíl mezi GPL a LPGL?
2. Jak rozumíte pojmu copyleft?
3. Co znamená FLOSS/FOSS?
4. Co znamená CC BY-NC?
5. Co znamená CC BY-NC-ND?
7.4
Firefox jako bezpečný prohlížeč
Pro bezpečné surfování internetem jsou nutná některá nastavení v prohlížeči, život vám mohou ulehčit také některé doplňky.
7.4.1
JavaScript
JavaScript je jeden z programovacích jazyků, který je součástí prohlížeče. Díky němu se mohou na lokálním počítači spouštět příkazy, kterou jsou součástí mnoha webových stránek. Platí to ale i pro akce, které vůbec spouštět nechceme. Nastavení se ve starších verzích prováděla pomocí Úpravy – Předvolby. V nových verzích jsou dostupná přes adresu about:config nebo pomocí doplňku, např. QuickJava. Ten vám umožní jedním kliknutím povolovat nebo zakazovat různé technologie – Java, JavaScript, QuickSilver a další (viz (viz obrázek 7.6 na následující straně)). Pokud tak učiníte a JavaScript tím deaktivujete, budete v tomto ohledu ochráněni, na druhou stranu ale přestane správně fungovat velké množství stránek, které JavaScript vyžadují. Další možností je doplněk NoScript. Umožní vám povolit nebo zakázat spouštění JavaScriptu na každé stránce. Doplňky se instalují v nabídce Nástroje – Správce doplňků.
7.4.2
Ochrana soukromých informací
Firefox nabízí možnost používat stále soukromý režim (viz obrázek 7.8 na následující straně). Během něj se neukládají žádné informace o navštívených stránkách, chronologie návštěv, cookies apod. Pokud si tento režim nevyberete, můžete si nastavit, v jaké míře a hlavně kdy má Firefox tato data automaticky vymazat. Vhodná doba pro smazání těchto dat je například v okamžiku, kdy Firefox ukončujete. Následující doplňky vám pomohou snadno a rychle smazat historii, cookies a další data, včetně Flash Local Shared Objects: • Click&Clean, • BetterPrivacy.
147
LEKCE VII – VYTVOŘENÍ WEBOVÉ STRÁNKY S OBRÁZKY
Obrázek 7.6: Nastavení JavaScriptu
7.4.3
Obrázek 7.7: NoScript chrání před zlovolnými stránkami
Potlačení reklamy
Mnoho stránek své uživatele štve neustálým zobrazováním reklamních ploch. Nejenže to obtěžuje, ale často člověk obtížně najde to, co původně hledal, kromě toho se přenášejí zbytečná data. Doplněk jménem Adblock Plus vám pomůže a nežádoucí reklamu skryje. V jeho nabídce můžete aktivovat různé filtry, díky nimž se zakáže reklama nejen z České republiky, ale třeba z Polska nebo jiné země (viz obrázek 7.9).
Obrázek 7.8: Nastavení soukromí
7.4.4
Obrázek 7.9: Odstranění reklamy
Zabránit stránkám ve sledování
Existují různé možnosti, jak stránky zkoušejí zjistit, kdo navštíví které stránky. Jednou z možností je načíst malý obrázek o velikosti jednoho bodu z určitého serveru. Ten pak do svého logovacího souboru uloží, kdo (tedy myšlena IP adresa), kdy a kterou stránku navštívil. Zabránit tomu umí doplněk Ghostery. Zobrazí vám, ze kterých prvků je webová stránka složena a umožní vám některé blokovat.11 Navíc Ghostery zobrazuje, jakou funkci má ten který prvek. Například u Google Adsense: Google AdSense je aplikace ” zobrazující reklamy. Majitelé webových stránek se mohou do tohoto programu zapojit a povolit zobrazování textových, obrazových a video reklam na svých stránkách. Tato reklamní sdělení jsou spravována Googlem a vytvářejí finanční příjem jak principem za kliknutí“, tak za zobrazení“. Hlavní produkty jsou AdSense pro obsah (textová nebo grafická ” ” reklama) a AdSense pro vyhledávání.“
7.4.5
Šifrované připojení
Mnoho provozovatelů webových stránek nabízí vedle HTTP připojení také šifrovanou variantu HTTPS. Výhodou je, že připojení k serveru nelze odposlouchávat, resp. zjistit jeho obsah. Doplněk https-finder nahradí HTTP připojení jeho 11 Sluší se podotknout, že sami autoři Ghostery lákadlu neodolali a také sledují, jakým způsobem uživatel tento software používá. Odesílání dat autorům samozřejmě můžete zakázat. Pozn. překl.
148
7.4. FIREFOX JAKO BEZPEČNÝ PROHLÍŽEČ
bezpečnější variantou, kdykoliv bude k dispozici.
7.4.6
Ukládání obsahu
Když stránka nabízí nějaký soubor ke stažení, můžete ho získat kliknutím nebo přes kontextovou nabídku a Uložit odkaz jako. V případě více souborů na jedné stránce už to ale není zábava, spíše otrava. Doplněk DownThemAll (DTA) prohledá celou stránku a nabídne vám možnost stáhnout všechny nalezené soubory současně. Můžete si je před stažením filtrovat – obrázky, dokumenty a podobně (viz obrázek 7.10).
Obrázek 7.10: Filtry doplňku DownThemAll
7.4.7
Vyhledávání na internetu
Pro vyhledávání používá většina lidí Google, Seznam nebo možná ještě Bing.12 S využitím doplňku FoxyWebSearch lze dotaz odeslat více vyhledávačům současně a výsledek zobrazit. Souhrn na pravém okraji ukazuje, kolik výsledků každý z vyhledávačů nalezl. Cvičení: 1. Vyzkoušejte všechny uvedené doplňky. 2. Hledejte v katalogu na adrese https://addons.mozilla.org/cs/firefox/extensions/ privacy-security/ další doplňky týkající se bezpečnosti. 3. Prohledejte ostatní kategorie s doplňky. Pokud se vám některý bude líbit, vyzkoušejte ho.
12 V
německém originále textu byly uvedeny Google, Yahoo a Bing, v ČR je situace jiná. Pozn. překl.
149
LEKCE VII – VYTVOŘENÍ WEBOVÉ STRÁNKY S OBRÁZKY
150
Kapitola 8
Lekce VIII – OSS Gimp & LibreOffice V této části se zaměříme na používání open-source softwaru. Tato část je volitelná, pokud zbude čas nebo pro domácí přípravu. Na některých fotkách můžete někdy najít fleky, občas tam překáží nějaký předmět, který tam nemá co dělat, nebo má někdo červené oči. Pomocí Gimpu můžete s trochou praxe podobné nedokonalosti odstranit a získat tak výrazně lepší fotografie. V předchozím textu jsme si ukázali, jak z třídních fotek vytvořit fotogalerii s náhledy. Další možností, jak lze prezentovat fotky, je vytvoření prezentace v LibreOffice.
Gimp (GNU Image Manipulation Program) je bezplatný a svobodný bitmapový editor, který je k dispozici s licencí GNU GPL. Používá se obvykle k úpravě jednotlivých obrázků a fotografií a k aplikování vizuálních efektů a filtrů.
Instalace GIMP se nachází v běžném zdroji softwaru Ubuntu a lze ho snadno nainstalovat. Jde o verzi 2.8, která podporuje zobrazení v jednom okně (starší verze pracovaly pouze v režimu více oken). sudo apt-get install gimp
Obrázek 8.1: GIMP v režimu jednoho okna Popisovat zde GIMP by bylo nad rámec možností. Existuje množství návodů a článků, které vám ukáží, jak s GIMPem pracovat, například: • http://www.gimpusers.de/tutorials • http://www.gimp-werkstatt.de/tutorien-grundlagen.php • http://www.linuxexpres.cz/praxe/gimptorialy-jednoduche-navody-pro-gimp1 Cvičení: Vyzkoušejte si GIMP se svými fotografiemi, pročtěte si některé tutoriály a návody a pokuste se vylepšit své snímky nebo z nich odstranit případné nedostatky.
8.2
LibreOffice
LibreOffice je svobodný a bezplatný kancelářský balík pro zpracování textů, tabulkové výpočty, prezentace a vektorové kresby. Obsahuje také modul pro zpracování dat z databází a editor rovnic. Pro vytváření prezentací slouží LibreOffice Impress, ale popisovat ho zde nebudeme. Pomohou vám některé z následujících článků:
1V
češtině existuje kniha Lubomíra Čevely Digitální fotografie v programu GIMP, vydal Computer Press, 2012. Pozn. překl.
Cvičení: Vyzkoušejte si Impress a vytvořte prezentaci ze svých fotek.
2 Nejvíce
českých návodů najdete zřejmě na webu OpenOffice.cz, pozn. překl.
153
LEKCE VIII – OSS GIMP & LIBREOFFICE
154
Kapitola 9
Přehled témat: Linux Essentials Úvod Souhrnný popis celého programu LinuxEssentials najdete na adrese http://wiki.lpi.org/wiki/LinuxEssentials (ve verzi 1.0)1 Cílem programu Linux Essentials je definovat základní dovednosti, které jsou nezbytné pro kompetentní používání linuxového operačního systému na stolním či přenosném počítači nebo na mobilním zařízení (typu tablet, telefon). Tento projekt chce pomáhat mladým lidem a také všem, pro které je Linux a open source novinkou. Podporovat je v pochopení role, kterou Linux a open source představují v širším kontextu odvětví IT.
Popis kandidáta vhodného pro zkoušku (MQC) Následující popis představuje kandidáta, který ještě splňuje požadavky k absolvování zkoušky LPI Linux Essentials. Takového fiktivního člověka nazýváme Minimally Qualified Candidate (minimálně kvalifikovaný kandidát, MQC). Standardy zkoušky LPI Linux Essentials musí být nastaveny tak, aby tento člověk – a každý schopnější – zkoušku absolvoval a každý méně schopný u ní neuspěl. Úspěšný kandidát by měl rozumět oblasti Linuxu a open source a měl by znát nejběžnější open-source aplikace. Měl by rozumět základním komponentám linuxového operačního systému a měl by ovládat práci v příkazové řádce. Dále by měl disponovat základními znalostmi z oblasti bezpečnosti a správy systému, stejně jako správy uživatelů, skupin, práce v příkazové řádce a uživatelských oprávnění. Držitel certifikátu Linux Essentials je s nejvyšší pravděpodobností koncový uživatel komplexně spravovaného systému. Minimálně kvalifikovaný kandidát vhodný pro zkoušku Linux Essentials: • Má základní povědomí o svobodném a open-source softwaru (FOSS), o různých komunitách a softwarových licencích. • Rozumí principům procesů, programů a základním komponentám operačního systému. • Má základní přehled o počítačovém hardwaru. • Má alespoň základní povědomí o systémové bezpečnosti, o uživatelích a skupinách, přístupových právech pro veřejné a soukromé adresáře. • Dokáže svůj počítač připojit do lokální sítě (LAN) a přistupovat k jiným počítačům. • Zná běžné open-source aplikace a dokáže k ním přiřadit jejich možné closed-source ekvivalenty. • Rozumí ovládání linuxových desktopových prostředí a dokáže najít nápovědu či pomoc. • Díky základním dovednostem ovládá práci v příkazové řádce, včetně správy souborů. • Dokáže vytvářet jednoduché zálohy a archivy. • Umí použít textový editor v příkazové řádce. • Rozumí přístupovým oprávněním souborů a adresářů. • Dokáže napsat a spustit jednoduché skripty. 1 Zdroj: http://wiki.lpi.org/wiki/LinuxEssentials(DE)
155
PŘEHLED TÉMAT: LINUX ESSENTIALS
Přehled Téma
Popis
Váha
1
Linuxová komunita a kariéra v oblasti open source
7
1.1
Vývoj Linuxu a běžných operačních systémů
2
1.2
Důležité open-source aplikace
2
1.3
Porozumění licencím open-source softwaru
1
1.4
Počítačová gramotnost a práce s Linuxem
2
2
Jak se vyznat v linuxovém systému
8
2.1
První kroky v příkazové řádce
2
2.2
Nápověda v příkazové řádce
2
2.3
Práce s adresáři a logovacími soubory
2
2.4
Vytváření, přesouvání a mazání souborů
2
3
Síla příkazové řádky
10
3.1
Archivace souborů v příkazové řádce
2
3.2
Vyhledávání v souborech a čtení dat
4
3.3
Vytváření skriptů
4
4
Linuxový operační systém
8
4.1
Výběr operačního systému
1
4.2
Hardware počítače
2
4.3 4.4
Ukládání dat Připojení počítače do sítě
3 2
5
Bezpečnost a oprávnění k souborům
7
5.1
Základní bezpečnost a typy uživatelů
2
5.2
Vytváření uživatelů a skupin
2
5.3
Nastavení práv a vlastnictví u souborů
2
5.4
Speciální adresáře a soubory
1 Součet
1 Linuxová komunita a kariéra v oblasti open source Váha: 7 1.1 Vývoj Linuxu a běžných operačních systémů Váha
2
Popis
Informace o vývoji Linuxu a důležitých distribucích
Hlavní poznatky: • Filozofie open source • Distribuce • Embedded systémy Stručný seznam použitých souborů, pojmů a programů: • Android • Debian • CentOS
156
40
1.2 Důležité open-source aplikace Váha
2
Popis
Důležité aplikace a jejich použití
Hlavní poznatky: • • • • •
Desktopové aplikace Serverové aplikace Mobilní aplikace Programovací jazyky Nástroje pro správu softwarových balíků
Stručný seznam použitých souborů, pojmů a programů: • • • • •
Open-source komunity a licence svobodného a open-source softwaru
Hlavní poznatky: • Licence • Free Software Foundation (FSF), Open Source Initiative (OSI) Stručný seznam použitých souborů, pojmů a programů: • GPL, BSD, Creative Commons • Svobodný software (free software), otevřený software (open-source software), FOSS, FLOSS • Obchodní modely open source Je dobré znát: • Duševní vlastnictví: Copyright, chráněné obchodní značky a patenty • Licence Apache, licence Mozilla
1.4 Počítačová gramotnost a práce s Linuxem Váha
2
Popis
Základní počítačové dovednosti a práce s Linuxem
Hlavní poznatky: • Základní ovládání desktopu • První kroky v příkazové řádce • Komerční využití Linuxu, cloud computing a virtualizace Stručný seznam použitých souborů, pojmů a programů: • Využití webového prohlížeče, povědomí o bezpečném chování, možnosti nastavení, vyhledávání na internetu, ukládání obsahu • Terminál a konzole • Nastavení hesel • Nástroje pro nastavení osobního zabezpečení • Používání běžných open-source aplikací v prezentacích a projektech
157
PŘEHLED TÉMAT: LINUX ESSENTIALS
2 Jak se vyznat v linuxovém systému Váha: 8 2.1 První kroky v příkazové řádce Váha
2
Popis
Základní dovednosti pro používání příkazové řádky v Linuxu
Hlavní poznatky: • • • • • •
Základy práce v shellu Zadávání příkazů a jejich syntaxe Nastavení, přepínače a parametry Proměnné Vyhledávací vzory, zástupné znaky Používání uvozovek (quoting)
Stručný seznam použitých souborů, pojmů a programů: • • • •
echo history
Proměnná prostředí PATH which
Je dobré znát: • Nahrazování proměnných • Operátory ||, && and ;
2.2 Nápověda v příkazové řádce Váha
2
Popis
Používání různých systémů nápovědy v příkazové řádce
Hlavní poznatky: • Man • Info Stručný seznam použitých souborů, pojmů a programů: • • • • •
man info
Manuálové stránky /usr/share/doc locate
Je dobré znát: • apropos, whatis, whereis
2.3 Práce s adresáři a logovacími soubory Váha
2
Popis
Orientace v domovském adresáři, v systémových adresářích, logovací soubory na různých místech
Hlavní poznatky: • Soubory, adresáře • Skryté soubory a adresáře
158
• Domovský adresář (home) • Absolutní a relativní cesty Stručný seznam použitých souborů, pojmů a programů: • • • • •
Běžné volby a přepínače pro ls Rekurzivní výpis cd
. a .. Home
a~
2.4 Vytváření, přesouvání a mazání souborů Váha
2
Popis
Vytváření, přesouvání a mazání souborů a adresářů v domovském adresáři
Hlavní poznatky: • Soubory a adresáře • Rozdíl mezi velkými a malými písmeny • Jednoduché použití zástupných znaků a uvozovek Stručný seznam použitých souborů, pojmů a programů: • mv, cp, rm, touch • mkdir, rmdir
3 Síla příkazové řádky Váha: 10 3.1 Archivace souborů v příkazové řádce Váha
2
Popis
Archivace souborů v jejich adresářích
Hlavní poznatky: • Soubory, adresáře • Archivy, komprimace Stručný seznam použitých souborů, pojmů a programů: • • • •
tar
Běžné volby pro tar gzip, bzip2 zip, unzip
Je dobré znát: • Rozbalení jednotlivých souborů z archivu
3.2 Vyhledávání v souborech a čtení dat Váha
4
Popis
Vyhledávání v souborech a čtení dat v domovských adresářích
Hlavní poznatky: • Roury a kolony • Přesměrování vstupu a výstupu
159
PŘEHLED TÉMAT: LINUX ESSENTIALS
• Nejdůležitější regulární výrazy podle standardu POSIX (., [ ], *, ?) Stručný seznam použitých souborů, pojmů a programů: • • • • • • •
find grep less head, tail sort cut wc
Je dobré znát: • Základní regulární výrazy podle standardu POSIX (zejm. - [^ ], ^, $) • Rozšířené regulární výrazy podle standardu POSIX ( - +, ( ), |) • xargs
3.3 Vytváření skriptů Váha
4
Popis
Vytváření jednoduchých skriptů z často opakovaných příkazů
Hlavní poznatky: • Základy zpracování textu • Základy vytváření skriptů Stručný seznam použitých souborů, pojmů a programů: • • • • • •
/bin/sh
Proměnné Argumenty for cykly echo
Návratová hodnota
Je dobré znát: • • • •
pico, nano, vi
(jen základy nutné pro vytvoření skriptu) Bash Příkazy if, while a case Příkazy read, test a [
4 Linuxový operační systém Váha: 8 4.1 Výběr operačního systému Váha
1
Popis
Informace o důležitých operačních systémech a linuxových distribucích
Hlavní poznatky: • Rozdíly mezi systémy Windows, Mac OS X a Linux • Správa životního cyklu distribucí Stručný seznam použitých souborů, pojmů a programů: • Grafické prostředí vs. příkazová řádka, možnosti desktopového prostředí • Vývojové cykly, beta, stabilní verze
160
4.2 Hardware počítače Váha
2
Popis
Jak vybrat komponenty pro stavbu desktopového a serverového počítače
Hlavní poznatky: • Hardware Stručný seznam použitých souborů, pojmů a programů: • Pevné disky a oddíly, základní desky, procesory, síťové prvky, optické mechaniky, periférie • Typy displejů • Ovladače
4.3 Ukládání dat Váha
3
Popis
Kde jsou v linuxovém systému uloženy různé informace
Hlavní poznatky: • Jádro • Procesy • syslog, klog, dmesg • /lib, /usr/lib, /etc, /var/log Stručný seznam použitých souborů, pojmů a programů: • Programy, knihovny, balíky a databáze balíků, systémová nastavení • Procesy a procesní tabulky, adresování paměti, systémová hlášení a logování • ps, top, free
4.4 Připojení počítače do sítě Váha
2
Popis
Zodpovězení základních otázek a nastavení nutná pro připojení počítače do lokální sítě (LAN)
Hlavní poznatky: • Internet, síť, router • Domain Name Service • Nastavení sítě Stručný seznam použitých souborů, pojmů a programů: • route • resolv.conf • IPv4, IPv6 • ifconfig • netstat • ping Je dobré znát: • ssh • dig
161
PŘEHLED TÉMAT: LINUX ESSENTIALS
5 Bezpečnost a oprávnění k souborům Váha: 7 5.1 Základní bezpečnost a typy uživatelů Váha
2
Popis
Různé typy uživatelů v linuxovém systému
Hlavní poznatky: • Root a neprivilegovaní uživatelé • Systémoví uživatelé Stručný seznam použitých souborů, pojmů a programů: • /etc/passwd, /etc/group • id, who, w • sudo Je dobré znát: • su
5.2 Vytváření uživatelů a skupin Váha
2
Popis
Vytváření uživatelů a skupin v linuxovém systému
Hlavní poznatky: • Příkazy týkající se uživatelů a skupin • Uživatelská ID Stručný seznam použitých souborů, pojmů a programů: • • • •
/etc/passwd, /etc/shadow, /etc/group id, last useradd, groupdadd passwd
Je dobré znát: • usermod, userdel • groupmod, groupdel
5.3 Nastavení práv a vlastnictví u souborů Váha
2
Popis
Správa přístupových oprávnění u souborů a nastavení jejich vlastníků
Hlavní poznatky: • Souborová a adresářová práva a vlastnictví Stručný seznam použitých souborů, pojmů a programů: • ls -l • chmod, chown Je dobré znát: • chgrp
162
5.4 Speciální adresáře a soubory Váha
1
Popis
Speciální adresáře a soubory v linuxovém systému, včetně zvláštních přístupových práv
Hlavní poznatky: • Systémové soubory a knihovny • Symbolické odkazy (symlinky) Stručný seznam použitých souborů, pojmů a programů: • • • •
/etc, /var /tmp, /var/tmp
a sticky bity
ls -d ln -s
Je dobré znát: • Pevné odkazy (hardlinky) • Setuid/Setgid
163
PŘEHLED TÉMAT: LINUX ESSENTIALS
164
Přílohy Doporučená literatura České knihy doplněny překladatelem, původní literaturu ponecháváme bez změny. • Bíbr, I. a kol. Mandriva Linux 2010 CZ. Instalační a uživatelská příručka. Brno: Computer Press, 2009. ISBN 978-80-251-2825-1 • Bíbr, I. a kol. Ubuntu 10.10 CZ. Praktická příručka uživatele Linuxu. Brno: Computer Press, 2010. ISBN 978-80-251-3007-0 • Fogel, K. Tvorba open source softwaru. Jak řídit úspěšný projekt svobodného softwaru. Praha: CZ.NIC, 2012. ISBN: 978-80-904248-5-2 • Kameník, P. Příkazový řádek v Linuxu. Praktická řešení. Brno: Computer Press, 2011. ISBN 978-80-251-2819-0 • MATEJKA, J. Internet jako objekt práva: hledání rovnováhy autonomie a soukromí. 1. vydání. Praha: CZ.NIC, 2013. ISBN 978-80-904248-7-6 • Satrapa, P. Internetový protokol verze 6. Třetí, aktualizované a doplněné vydání. Praha: CZ.NIC, 2011. ISBN 978-80-904248-4-5 • Sobell, Mark G. Mistrovství v Linuxu. Příkazový řádek, shell, programování. Brno: Computer Press, 2007. ISBN 978-80-251-1726-2 Dále doporučujeme archiv bezplatného openMagazinu (http://www.openmagazin.cz). • Linux Essentials – Die Einsteiger-Zertifizierung des LPI der Firma Linup-Front Schulungsunterlage (Deutsch) unter Creative Commons http://shop-download.linupfront.de/cc/lxes-de-manual-cc.pdf
Schulungsunterlage (anglicky) unter Creative Commons http://shop-download.linupfront.de/cc/lxes-en-manual-cc.pdf
• Linux Essentials (anglicky) Roderick W. Ssh ISBN: 978-1-1181-0679-2 Paperback, 368 stran, 2012, 32,00 eur http://eu.wiley.com/WileyCDA/WileyTitle/productCd-1118106792,miniSiteCd-SYBEX.html
• Linux – Das umfassende Handbuch Johannes Plötner, Steffen Wendzel Galileo Computing 1282 stran, 5., aktualizované vydání 2012, vazba, s 2 DVD 49,90 eur, ISBN 978-3-8362-1822-1 Openbook (zdarma) http://openbook.galileocomputing.de/linux/
• Ubuntu GNU/Linux (Version 11.04) Marcus Fischer Galileo Computing 1118 stran, 39,90 eur ISBN 978-3-8362-1765-1 Openbook (zdarma) http://openbook.galileocomputing.de/ubuntu/
• Linux-UNIX-Programmierung Jürgen Wolf Galileo Computing
165
PŘEHLED TÉMAT: LINUX ESSENTIALS
1216 stran, s CD, 49,90 eur ISBN 3-89842-749-8 Openbook (zdarma) http://openbook.galileocomputing.de/linux_unix_programmierung/
• Shell-Programmierung Jürgen Wolf Galileo Computing 782 stran, s CD, 44,90 eur ISBN 3-89842-683-1 Openbook (zdarma) http://openbook.galileocomputing.de/shell_programmierung/
• Wie werde ich UNIX-Guru? Arnold Willemer Galileo Computing 672 stran, 2003, vazba, 34,90 eur, ISBN 978-3-89842-240-6 (Vergriffen) Openbook (zdarma) http://openbook.galileocomputing.de/unix_guru/
• IT-Handbuch für Fachinformatiker Sascha Kersken Galileo Computing ca. 1172 stran, 5., aktualizované a rozšířené vydání, vazba, ca. 34,90 eur, ISBN 978-3-8362-1744-6 Openbook (zdarma) http://openbook.galileocomputing.de/it_handbuch/
wall ...................................................................... 56 wc........................................................................ 97 whatis .................................................................. 21 whereis ................................................................. 88 which ................................................................... 88 who................................................................. 22, 52 X xargs .............................................................. 87, 160 Y yast .............................................................. 114, 116 Z zcat .................................................................... 124 zip ..................................................................... 125 zsh ....................................................................... 18
ADRESÁŘE / SOUBORY
Adresáře / Soubory A auth.log (/var/log/) .................................................. 82 B .bash_history (~/) .................................................... 19 .bash_logout (~/) ..................................................... 19 C crontab (/etc/) ...................................................... 133 D dmesg (/var/log/) .................................................... 82 E /etc/rsyslog.d/ ........................................................ 82 /etc/skel/ ............................................................... 47 /etc/sysconfig/network/ ......................................... 117 /etc/sysconfig/networkscripts/ ................................ 117 G group (/etc/) .................................................46, 49, 76 H hosts (/etc/) ......................................................... 116 I interfaces (/etc/network/) ....................................... 117 K kern.log (/var/log/).................................................. 82 M /mnt/ .................................................................... 89 P passwd (/etc/).............................. 46, 47, 49, 50, 55, 76, 97 ~/Plocha/.......................................................... 39, 40 R resolv.conf (/etc/) .................................................. 116 rsyslog.conf (/etc/) .................................................. 82 S shadow (/etc/) .......................................... 46, 48, 48, 55 sudoers (/etc/) ................................................... 49, 77 syslog (/var/log/) .................................................... 82 U udev (/var/log/) ...................................................... 82 urandom (/dev/) ..................................................... 75 /usr/share/doc/ ....................................................... 21 /usr/share/doc/howto/ ............................................. 21 V /var/log/................................................................ 82
169
OSOBY
Osoby K Kernighan, Brian .................................................... 12 L Lemmke, Ari .......................................................... 12 N Niedermair, Michael ................................................. 2 R Raymond, Eric...................................................... 145 Ritchie, Dennis .................................................. 12, 16 S Stallman, Richard............................................ 144, 145 Stroustrup, Bjarne................................................... 16 T Thompson, Ken ...................................................... 12 Torvalds, Linus....................................................... 12 W Wall, Larry ............................................................ 16 Wolf, Joachim ......................................................... 2