Kamil `JP` Dedecius
Transkript
Kamil ’JP’ Dedecius Jemný úvod do shellů Jemný úvod do shellů 1 Co je to shell Shell je anglický výraz vyjadřující totéž, co v českém jazyce slova ”příkazový interpret” (ano, zejména „interpretÿ je vyloženě české slovo :o)). Úkolem shellu je, jak vyplývá z českého překladu, interpretovat neboli provádět příkazy. které mu zadá uživatel nebo které jsou umístěny v nějakém souboru (skriptu, dávce). Asi každý zná command.com z MS–DOSu – to je právě jedna z ukázek příkazového interpretu. V oblasti UNIXů, tedy přesněji UN*Xů vzniklo hned několik shellů, uživatel tedy narozdíl od DOSu není odkázán na jeden konkrétní (lepší či horší), ale má na vybranou z více možností. 1.1 Bourne Shell První skutečný uznávaný UNIXový shell – sh – vznikl v laboratořích AT&T a do UNIXu (již verze 6) byl přidán roku 1975 (to ještě byly počítače ze dřeva). K obrazu svému jej stvořil Stephen R. Bourne. Narozdíl od boha použil místo žebra programovací jazyk C, výsledek tedy sice nebyl tak půvabný (skoro by se dalo říci, že stvořil hranatou potvoru), ale na druhou stranu alespoň netrpí rozmary. Tento shell umožňoval spoustu nových věcí, měl job control, uměl pracovat s proměnnými, regulárními výrazy, funkcemi, dalo se v něm obstojně skriptovat atd. Měl i své nevýhody (proto ta hrbatá potvora) – narozdíl od shellů, na které jsme dnes zvyklí (stále jsme u UN*Xů!) neuměl doplňovat názvy souborů, neměl historii příkazů a práce s více procesy na pozadí byla spíše utrpením. Na většině systémů tento shell jej najdete v /bin/sh (pozor, na GNU/Linuxu jde většinou o symbolický odkaz na /bin/bash). 1.2 C Shell C Shell vznikl o něco málo později na počátku 80. let na Kalifornské universitě v Berkeley. Jeho „otcemÿ je Bill Joy. Jeho cílem bylo vytvořit přátelštější interaktivní shell, který by používal styl jazyka C (Bourne Shell používal styl jazyka ALGOL). Tomuto kroku se nelze divit, neboť UNIX byl v Berkley psán (přepisován) právě v jazyku C, programátoři na něj byli zvyklí a nikdo jiný tehdy na UNIXu nepracoval. Jenže osud tomu chtěl tak, že na skriptování C Shell moc použitelný nebyl, neboť měl slabou kontrolu vstupu a výstupu, postrádal mnoho funkcí a měl nepříliš dobrou syntaxi příkazů. Nicméně na poli interaktivních shellů jednoznačně vedl díky doplňování jmen souborů a funkcí, aliasům a vydařenému řízení procesů (jobs). C Shell najdete v /bin/csh (tedy pokud jej máte nainstalovaný). 1.3 TENEX/TOPS C Shell Zkráceně se mu říká tcsh a po nainstalování jej najdete v /bin/tcsh. Tento klon rozšiřuje možnosti klasického C Shellu o možnost pohybu v historii pomocí šipek nahoru a dolu a pohyb po řádce pomocí kláves šipka vlevo a vpravo. 1.4 Korn Shell Korn Shell napsal v laboratořích AT&T pan David G. Korn v první polovině 80. let. Tento shell zavádí výhody C Shellu (zejm. v oblasti interaktivity) do klasického Bournova shellu. Středisko UN*Xových technologií 1 Kamil ’JP’ Dedecius Jemný úvod do shellů Výsledkem byl Bourne–kompatibilní shell, který uměl práci s historií, aliasy, funkcemi, poli, doplňování, aritmetickými operacemi aj. Tento shell má 3 verze – Official (ksh), Public Domain (pdksh) a Desktop (dtksh, umí práci s GUI). Další variantou ksh je POSIX Shell. Kromě POSIXového, který má jisté odchylky najdete všechny zmíněné shelly v /bin. 1.5 Bourne Again Shell Nejbachratější, nejpomalejší a nejmocnější ze zmíněných shellů. Jeho autory je Brian Fox z Free Software Foundation, maintainerem je Chet Ramey. bash je GNU verze Bourneova shellu, doplněná o mnoho užitečných i neužitečných vlastností. Je součástí snad každé distribuce linuxové distribuce, najdete jej v /bin/bash. Rovněž /bin/sh většinou ukazuje na /bin/bash, ovšem pozor na kompatibilitu! Velké množství shellových skriptů napsaných v bashi na klasickém Bourneově sh nepustíte, i když má na prvním řádku #!/bin/sh To je způsobeno tím, že takto spuštěný shell se sice snaží chovat jako sh, ovšem u té snahy to končí. Více najdete v manuálových stránkách. 1.6 Ostatní shelly Jako u všeho na UNIXech máte i v oblasti shellů široký výběr. Zde byly vyjmenovány jen ty nejčastější verze, se kterými se můžete, ale existují i jiné, za všechny jmenujme velmi výkonný a samozřejmě volný Z–Shell. 2 Interaktivní a neinteraktivní shell, login shell Od této kapitoly se již budeme zabývat pouze shellem bash. Interaktivní shell, jak již název vypovídá, je takový, který umožňuje přímou interakci s uživatelem. To v praxi znamená, že vy mu můžete prostřednictvím klávesnice nadávat a on vám bude na oplátku zdvořile odpovídat (jste ve výhodě, mužete být vulgární :o)). $ Ty jsi ale osklivy shell, bashi! -bash: Ty: command not found Aby nebylo jen u toho nadávání (k tomu shelly vytvořeny nebyly), můžete mu zadávat také něco slušnějšího a užitečnějšího, jako třeba v následujícím případě, kde si ukážeme aktuální datum: $ date So lis 20 16:01:53 CET 2004 Neinteraktivní shell je ten, který vás neposlouchá. Tedy víceméně, můžete mu dělat cokoliv zvenčí, třeba mu zatnout tipec tak, že ho zabijete, ale rozhodně mu jednoduchým způsobem nebudete zadávat nějaké rozumné příkazy, pokud na to není předem připraven. Pokud se Středisko UN*Xových technologií 2 Kamil ’JP’ Dedecius Jemný úvod do shellů ptáte, k čemu takový shell je, když vás neposlouchá, pak vězte, že slouží ke zpracování skriptů. Podobně jako jsou dávky v MS–DOSu (nejklasičtější ukázkou je autoexec.bat), které provede command.com, na UN*Xech jsou skripty, které provádí ten či onen shell. Login shell je takový, který při svém spuštění načte obsah určitých souborů. 3 Spuštění shellu Jak již bylo nastíněno, bash může běžet interaktivně nebo neinteraktivně a to ještě volitelně jako login shell. Co to znamená si vysvětlíme v této kapitole (nebojte, je to jednoduché a zná to každý, jen to neumí pojmenovat ;o)) Rozdíly by měly být z předchozí kapitolky jasné, proto se teď podíváme na zoubek oněm „souborůmÿ zmíněným u login shellu. Při spouštění interaktivního login shellu se čtou následující soubory (dle pořadí): 1. /etc/profile 2. ~/.bash_profile 3. ~/.bash_login 4. ~/.profile První ze souborů, tedy /etc/profile se čte vždy pokud existuje. Ostatní tři se bash pokouší otevřít v takovém pořadí, jak bylo napsáno. První z nich, který existuje a je možné jej přečíst, je spuštěn (přesněji je spuštěn jeho obsah). Když je interaktivní login shell ukončen, pokusí se načíst soubor .bash logout a spustí v něm definované příkazy. Jestliže je spouštěn interaktivní shell, který není zároveň login shellem, bash se pokusí načíst a provést příkazy v souboru ~/.bashrc. Praxe tomu chce tak, že v souboru ~/.bashrc bývají nadefinovány vlastnosti, které chceme aby platily vždy. Proto se tento soubor načítá i při spouštění ~/.bash_profile, a to následujícím způsobem: if [ -f ~/.bashrc ]; then . ~/.bashrc fi Zní to možná celé trochu zamotaně, ale ve skutečnosti má každý bashista o téhle problematice alespoň matnou představu. Pro ukázku a snazší pochopení se podíváme na obsah zmíněných souborů. 3.1 /etc/profile # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). Středisko UN*Xových technologií 3 Kamil ’JP’ Dedecius Jemný úvod do shellů PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games" if [ "$PS1" ]; then if [ "$BASH" ]; then PS1=’\u@\h:\w\$ ’ else if [ "‘id -u‘" -eq 0 ]; then PS1=’# ’ else PS1=’$ ’ fi fi fi export PATH umask 022 3.2 ~ /.bash profile # .bashrc if [ -f ~/.bashrc ]; then . ~/.bashrc fi # Nastavime vi mod set -o vi on # Hodne restriktivni umask umask 0077 3.3 /.bash login Tento soubor na svém počítači nemám. 3.4 /.profile Tento soubor na svém počítači nemám. 3.4.1 /.bashrc # .bashrc Středisko UN*Xových technologií 4 Kamil ’JP’ Dedecius Jemný úvod do shellů # User specific aliases and functions alias ssh.hept=’ssh beruska@heptium’ alias ssh.sut=’ssh -X beruska@sut-01’ alias ssh.moira=’ssh -X beruska@moira’ # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Vlastni nastaveni PS1=’\[\033[1;32m\][\u@\h \W]$ \[\033[0m\]’ export PS1 # Setting interprets modes # set -o vi on #set aliases alias ls=’ls --color=auto’ alias l=’ls’ alias ll=’ls -l’ alias la=’ls -A’ alias lal=’ls -al’ alias cetc=’cd /etc’ alias clog=’cd /var/log’ alias m=’more’ alias mroe=’more’ alias moer=’more’ alias les=’less’ alias mail=’nail’ alias ps2pdf=’ps2pdf -sPAPERSIZE=a4’ 3.5 ~ /.bash logout clear 3.6 A k čemu to celé je? Asi jste již pochopili, že ve zmíněných souborech si můžete nastavit spoustu věcí, např. cesty, barvu a sestavení promptu, mód editace příkazové řádky (v případě výše vi, defaultně je emacs), smazání obrazovky po odhlášení atd. Středisko UN*Xových technologií 5 Kamil ’JP’ Dedecius Jemný úvod do shellů 4 Zjednodušte si práci Práce v příkazové řádce rozhodně není přežitkem, i když se vám hodně lidí a firem (zejména zabývajících se vývojem programů pro nové druhy pokémonů zvané klikaču) bude snažit tvrdit opak. Příkazová řádka je podstatně rychlejší už v principu své činnosti, odpadá nutnost mít v paměti zavedené celé grafické prostředí (často solidně vytěžující stroj), nejste nuceni k hledání těch správných ikonek. Stačí si jen pamatovat potřebné příkazy a klikaču se na vás nechytá. Nehledě na to, že některé věci v grafických prostředích bez drahých a náročných programů neuděláte. Když vám na UN*Xu přestane jít X–server, stále můžete svou semestrálku dopsat (pokud ji děláte třeba v LATEXu, stále vám chodí poštovní, ftp, www server a vy se můžete v klidu věnovat jejich konfiguraci. Můžete si stále prohlížet web, stahovat soubory, pouštět hudbu, dokonce koukat na film. A kromě toho, většinou jste rychlejší (pokud víte, co a jak dělat). 4.1 Klávesové zkratky Práce na příkazové řádce bývala kdysi utrpením, neboť se po ní nedalo normálním způsobem pohybovat. Ti, kteří vyrostli na MS–DOSu mohou jen dosvědčit, že to bývala spíše otročina. MS–DOS si pamatoval jen poslední příkaz, který bylo možno vyvolat klávesou F3, na řádce se nedalo pohybovat, jen psát a mazat klávesou backspace. Takové doby pamatuje i UNIX, pravdaže v době, kdy MS–DOS vznikl byl už UNIX schopen mnoha věcí, na něž jsme dnes zvyklí. Mezi nejdůležitější klávesy a klávesové zkratky 1 kromě šipek patří: TAB – klávesa, která doplní název proměnné (začíná–li text $), uživatelského jména (začíná–li text ~), hostname (začíná–li text ), příkazu (spustitelného souboru, aliasu i funkce) a jména souboru v pořadí tak, jak bylo napsáno. Kdyby byl film Dobří holubi se vracejí o UN*Xu, Rudolf Hrušinský by tam řekl: „Člověk, který nepoužívá tabulátor, je pro práci definitivně ztracenÿ. CTRL–a – tato kombinace vrátí kurzor na začátek řádky. CTRL–l – vyčistí obrazovku ale zachová aktuální řádku tak, jak byla napsána (vhodné, pokud jste něco lehce nevychytali a nechcete, aby to ten, kdo u vás sedí viděl). CTRL–e – posune kurzor na konec řádku CTRL–r – vynikající kombinace, inkremenálně hledá v historii shodu s tím, co píšete. Kupodivu to používá málo lidí. CTRL–t – opět skvělá kombinace, prohodí písmenko pod kurzorem s písmenem předcházejícím (obzvlášť vhodné na zkomoleniny mroe apod.) Klávesových zkratek je z načné množství, více se o nich dozvíte v manuálových stránkách bashe. Pro úplnost jen dodám, že si můžete klávesové zkratky sami nastavit v souboru, jehož název je uložen v proměnné INPUTRC (zjistíte příkazem echo $INPUTRC), pakliže tato proměnná je prázdná nebo nedefinovaná, tak v souboru ~/.inputrc. Více se dozvíte v manuálových stránkách bashe nebo knihovny readline (man 3 readline) 1 Uvažujeme nastavený mód emacs, máte–li vi, přepnete mód příkazem set -o emacs on Středisko UN*Xových technologií 6 Kamil ’JP’ Dedecius Jemný úvod do shellů 4.2 Funkce Funkce jsou tématem pro příští přednášky, nicméně se o nich krátce zmíníme. Funkce označuje posloupnost příkazů, které se v daném pořadí provádějí. V mém /etc/profile mám následující dvě funkce: # DISTCC ON function distccon() { echo "Zapinam distribuovane kompileni na hostech" export CCACHE_PREFIX="distcc" export DISTCC_HOSTS="147.32.117.168 147.32.117.20" } # DISTCC OFF function distccoff() { echo "Vypinam distribuovane kompileni na hostech" unset CCACHE_PREFIX unset DISTCC_HOSTS } První z nich mi zapíná a druhá vypíná distribuované kompilování na daných hostitelských počítačích. To pak lze zapnout jednoduše příkazem $ distccon Otázka pro vás: Stačí napsat prvních pár písmen a doplnit TABem? 4.3 Aliasy V této kapitole se dostáváme k jedné z nejužitečnějších možností bashe – aliasům. Alias je druhý (třetí. . .) název pro funkci, takže pokud trpíte maniakálním rychlopsaním s množstvím překlepů limitně se blížícím nekonečnu, můžete si nadefinovat tyto překlepy jako aliasy pro původně zamýšlený příkaz, např.: alias mroe="more" alias moer="more" alias m="more" Za zmínku stojí, že poslední alias ulehčuje práci nejvíc, stačí pak jen m mujsoubor Aby aliasy vydržely, je třeba je umístit do tepla souboru, který čte bash po spuštění (nejčastěji .bashrc v domovském adresáři). Za domácí úkol si zjistěte, jak je vyřešit alias na barevný výpis adresářů pomocí ls (řešení najdete v těchto materiálech ;o)). Středisko UN*Xových technologií 7 Kamil ’JP’ Dedecius Jemný úvod do shellů 4.4 Symbolické odkazy – symlinky Symbolické odkazy, neboli symlinky slouží ke ”vložení” souboru do konkrétního adresáře, přičemž tento soubor má zůstat v adresáři ve kterém je doteď. Klasická kopie by zbytečně zabírala místo, proto se vytvoří pouze symlink, jehož velikost je minimální (pouze obsahuje cíl odkazu) a přitom se na první pohled chová, jako by to byl onen soubor (který je ve skutečnosti jinde). Dejme tomu, že chcete mít ve svém domovském adresáři soubor BASH-PROMPT, který se nachází v /usr/doc/Linux-HOWTOs/Bash-Prompt-HOWTO. Můžete si ho ještě jednou zkopírovat, ale jak už jsme řekli, to není systémové řešení, to je řešení a la večerníček Pat a Mat. Protože chcete být uznávanými UN*Xáky, uděláte to následovně: ln -s /usr/doc/Linux-HOWTOs/Bash-Prompt-HOWTO BASH-HOWTO 5 Jemný úvod do proměnných Každý, kdo si nainstaluje na počítač nějaký ten UN*X se diví, proč že mu nejde síť mimo koleje. V této kapitole se dozvíte, jak tento problém jednoduše vyřešit. Nejprve je ale na řadě nutné zlo v podobě teoretického úvodu. V UN*Xech rozeznáváme několik druhů proměnných podle možností jejich přístupu k nim. Konkrétně budeme–li uvažovat jako příkazový interpret bash, máme k dispozici lokální, environmentální a shellové proměnné. Lokální proměnné jsou ty, které jsou blízké konkrétní instanci shellu. Nemají k nim přístup programy. Environmentální proměnnéjsou dostupné vší havěti spuštěné z aktuálního shellu. Některá na nich dokonce může záviset, např. programy pracující se sítí. Shellové proměnné určují charakteristiky spuštěného shellu. Mezi tyto proměnné patří např.: BASH VERSION – název mluví sám za sebe :o) GROUPS – obsahuje seznam skupin, jichž je uživatel členem. HOSTNAME – „ jménoÿ počítače PWD – aktuální adresář IFS – Internal Field Separator – oddělovač polí, defaultně mezera, tabulátor, newline PATH – cesta, kde se vyhledávají spustitelné soubory HOME – domovský adresář aktuálního uživatele PS1, PS2, PS3, PS4 – prompty Proměnným se v bashi přiřazuje hodnota zápisem PROMENNA=hodnota Pakliže chceme mít proměnnou nastavenu jako proměnnou prostředí, musíme ji vyexportovat – možné jsou dva způsoby jak vytvořit globální proměnnou: Středisko UN*Xových technologií 8 Kamil ’JP’ Dedecius Jemný úvod do shellů SUT=’borci’ export PROMENNA export JP=’borec nejvetsi’ V uvedených případech jsme si vyexportovali dvě proměnné, SUT a JP. První případ je klasičtější, funguje narozdíl od druhého i na původním Bourneově shellu. Oba ale nejsou k ničemu, autor si na nich jen spravoval sebevědomí po dlouhém a úmorném dni ;o). Proměnná, která narozdíl od těch předchozích udělá mnohé, je http proxy. Určitě neuhádnete, čeho docílíte následujícím zápisem: export http_proxy=’http://cache2.sh.cvut.cz:3128’ Jak asi správně tušíte, začne vám zázračně chodit síť i mimo Strahov 2 :o) 6 Nejčastější programy a příkazy spouštěné ze shellu Zatím jste se dozvěděli, jak co nastavit a jak si co zjednoduššit. Ovšem šedá je každá teorie a my jsme mladí a chceme se bavit3 . Nuže, následuje výčet programů a příkazů, který by se v začátcích mohl hodit. 6.1 Shellové „built–inÿ příkazy cd – změní adresář echo – vypíše text nebo proměnnou exit – ukončí aktuální shell (též CTRL–d) help – vypíše nápovědu k shellovému příkazu, jehož název následuje kill – pošle signál procesu (man 7 signal) logout – ukončí aktuální login shell pwd – vypíše celou cestu k aktuálnímu adresáři (hodnotu proměnné PWD) set – inicializuje proměnnou, s parametrem -o mění nastavení shellu type – vypíše jak by se s tím, co následuje zacházelo (skript, soubor, roura. . .) ulimit – nastavuje limity uživatele (max. počet procesů, max. velikost souboru. . .) umask – nastavuje práva nově vytvořených souborů (viz poslední kapitola) unset – zruší proměnnou 2 Tedy pokud se v cache2.sh opět nešťourá nějaký umělec. Očekáváte–li nyní návod, jak si v shellu pustit „péčkoÿ nebo zapařit nějakou pořádnou gamesku, jste na špatné adrese. Nás baví práce v shellu :o)) 3 Středisko UN*Xových technologií 9 Kamil ’JP’ Dedecius Jemný úvod do shellů Ostatní programy a příkazy 6.2 WWW lynx – nejklasičtější z klasických webových prohlížečů links – český webový prohlížeč, podstatně vylepšen (menu přes ESC) 6.3 FTP ftp – klasický a nepoužitelný FTP klient lftp – nejlepší FTP klient pod sluncem curl – stahování po FTP, HTTP (už víte, proč dostala „Didoÿ tolik hlasů? :o) wget – dtto 6.4 Pošta a news pine – jednoduchý na ovládání mutt – nejpoužívanější klient na GNU/Linuxu, trochu složitější než pine 6.5 IM licq – konzolový klient k licq centericq – skvělý konzolový IM klient, umí nejen ICQ, ale i Jabber, IRC, AIM a Yahoo! 6.6 Audio a video mplayer – nevyžaduje komentář ;o) mpg123 a mpg321 – přehrávače hudby 6.7 IRC irc centericq epic 6.8 Textové editory piko, nano – jednoduché na ovládání emacs – vychází z klasického UNIXového emacsu, sofistikovaný vi – tak trochu hardcore vim – vi improved, vylepšené vi, stejně hardcore :o) Až ho budete chtít zkusit, zapamatujte si sekvenci kláves escape, :q, enter :o)) Středisko UN*Xových technologií 10 Kamil ’JP’ Dedecius Jemný úvod do shellů 6.9 Další užitečné drobnosti V rámci přednášek se potkáte s některými z následujících příkazů a programů. Můžete si je nastudovat dopředu ;o) sort – třídí data ze vstupu uniq – vytváří unikátní data sed – nástroj na práci s REGEX awk – nástroj na práci s REGEX grep – vybírá data ze souborů podle REGEXu find – vyhledávání souborů diff – vyhledávání rozdílů v souborech (takto vznikají patche) cat – výpis obsahu souboru na definovaný výstup more – stránkovaný výpis souboru less – méně než more, ale méně je někdy více ;o) tar, untar – tape archiever gzip, gunzip – kompresní program cp – kopírování souborů mv – přesun souborů rm – smazání souborů mkdir – vytvoření adresáře rmdir – zrušení prázdného adresáře tree – stromový výpis adresáře ssh – klient SSH scp – kopírování po SSH passwd – změna hesel adduser, useradd – bez komentáře ifconfig, ip – nastavení sítě ps – výpis procesů top – monitorování procesů Středisko UN*Xových technologií 11 Kamil ’JP’ Dedecius Jemný úvod do shellů 7 Prompt, to je pro bashistu výzva Prompt anglicky znamená výzva, jeho prostřednictvím nás shell nejen vyzívá k zadání příkazu, ale zároveň k jeho změně. Většina UN*Xových distribucí přichází s více či méně defaultním promptem, který povětšinou bývá klasicky bílý. V této kapitole se dozvíte, jak jej změnit k obrazu svému. Nejprve se podíváme na zoubek escape sekvencím, které by se mohly hodit: d – datum e – ASCII escape znak h – hostname po první tečku (mujscot.doma.pod.mostem.cz -¿ mujscot) H – kompletní hostname l – jméno aktuálního terminálu (např. tty1) n – znak NL s – název shellu (např. bash) t – aktuální čas ve 24 hodinovém formátu T – dtto ve 12 hodinovém formátu u – aktuální uživatel v – verze shellu w – hodnota proměnné PWD W – basename z proměnné PWD (/home/opicak -¿ opicak) $ – je–li hodnota EUID = 0, pak vypíše znak #, jinak $ – znak [ – začátek sekvence netisknutelných znaků ] – konec sekvence netisknutelných znaků Klasický prompt, na který jsme zvyklí a používáme ho každou chvíli je definován environmentální proměnnou PS1. Prompty PS2 až PS4 se většinou nemění. PS1 tak, jak je používám já (po odstranění barev) se vytvoří a vypadá následovně: $ export PS1=’[\u@\h \W]\$ ’ [jp@mojscot ~]$ Středisko UN*Xových technologií 12 Kamil ’JP’ Dedecius Jemný úvod do shellů Tabulka 1: Barvičky – sekvence barva sekvence černá 0;30 tmavě šedá 1;31 modrá 0;34 světle modrá 1;34 zelená 0;32 světle zelená 1;32 azurová 0;36 světle azurová 1;36 červená 0;31 světle červená 1;31 fialová 0;35 světle fialová 1;35 hnědá 0;33 žlutá 1;33 světle šedá 0;37 bílá 1;37 Protože tenhle prompt je sice „výkonnýÿ, ale nevzhledný, používám k jeho dokrášlení barvičky. Ty se zadávají poměrně nepěknými sekvencemi, takže dosáhnout kýženého výsledku na první pokus je zhola nemožné. Prompt je pak možné nastavit dvěma způsoby – buď si nastavit proměnné s názvy barev a z proměnných pak sestavit prompt, nebo rovnou. První způsob je podstatně přehlednější, já však dávám přednost druhému. Můj prompt pak vypadá následovně 4 : [jp@mujscot temp]$ export PS1=’ [ 033[1;32m ][ u@ h W]$ [jp@mujscot temp]$ [ 033[0m ]’ Prompt mého vlastního stroje je potom celý zelený. Jelikož jsem většinu času připojen po SSH i k jiným počítačům, mám na nich nastaven jinak barevný hostname což mi umožňuje jejich rychlé vizuální odlišení a zvyšuje tím se míra bezpečnosti práce na nich (nestává se mi, že bych pracoval na jiném stroji než chci). Stroje, k nimž mám roota, mají nastavený prompt červený a to ještě na každém stroji je prompt jinak sestaven tak, abych je lehce odlišil. Kdybyc měl roota na více počítačů, přistoupil bych k barevné změně u hostname, zatím to ale není aktuální. Jak vidíte, i taková drobnost jako je barva promptu může významně vylepšit bezpečnost. 8 Něco málo o bezpečnosti, aneb root je hrozba systému Bylo nebylo, jednoho dne byl rootem stvořen funkční desktop. A ten desktop běžel bez problémů tak dlouho, dokud jej ten samý root nesejmul. Možná to zní nesmyslně, ale bohužel tento scénář je pravdivý. Největší hrozbou pro systém je totiž sám root, pravděpodobnost, že 4 Paradoxně bylo ještě podstatně horší vytvořit ten text v LATEXu než v bashi :o)). Středisko UN*Xových technologií 13 Kamil ’JP’ Dedecius Jemný úvod do shellů jej „sundáÿ hacker je řádově menší. Proto si dávejte pozor, co jako root děláte. Lépe řečeno, pod rootem nedělejte nic, co jde udělat pod normálním uživatelským účtem. Vzpomeňme příhodu, kdy se jakýsi člověk, který evidentně neměl s Linuxem žádné zkušenosti, ptal na IRC jak smazat mailovou frontu. I poradil mu nedobrý jedinec zkusit příkaz rm -rf / Jak to skončilo si lze domyslet. Ovšem jako vše mělo i toto svou dobrou stránku – frontu smazal ;o). Jako jiný příklad uvedu ten, jež se stal mě samotnému (za své chyby bychom se neměli ani tak stydět, jako se z nich především poučit) – jednou jsem ve spěchu přesouval data mezi dvěma uživatelskými účty. Abych neměl problémy s právy, dělal jsem tuto činnost jako root s tím, že pak akorát změním vlastníka. Jelikož se jednalo o celé adresáře, chtěl jsem na to použít chown rekurzivně, ovšem nějak jsem v tom spěchu napsal cestu špatně a omylem přivlastnil druhému uživateli trochu víc, než jsem chtěl – celý adresář /home. Naštěstí jsem byl jediným, kdo měl k onomu kontu přístup. Hlavní věcí bylo, že už jsem uměl skriptovat, takže náprava trvala několik málo okamžiků, ale krve by se ve mně nedořezal. Proto si na to dávejte pozor. Jedním z nejhorších zlozvyků je spouštění různých „uživatelskýchÿ programů pod rootem. Rovněž tak přihlašování roota do desktopu (např. KDE) nebo okenního manageru (WindowMakeru, *wm aj.) by se mělo trestat veřejným bičováním. Administrátoři různých serverů si často neuvědomují, že ani kompilace programů pod rootem není bezpečná. Pokud si to troufá někdo na desktopu, jeho hloupost (zdůrazňuji slovo hloupost), pokud to dělá někdo na serveru, zasloužil by za uši. Důvod je prostý – soubor Makefile může obsahovat nebezpečné direktivy. Pokud nutně potřebujete dát někomu rootovská práva na konkrétní činnost (např. čtení logů), udělejte to přes sudo. Pakliže už něco děláte jako root, okamžitě jak svou práci dokončíte, ukončete všechny programy a odhlašte se z roota. Opět jeden případ za všechny – kolega editoval /etc/password a v klidu odešel od svého počítače pryč, ponechaje nejen otevřený rootův účet na svém počítači, ale v něm dokonce i spuštěný editor vipw a v něm otevřený onen soubor. Samozřejmě aplikace, které pak chtěly do tohoto souboru padaly jak švestky a důvod nebyl na první pohled patrný. Vyvarovávejte se suid a sgid binárek, je to cesta do pekel. Programů, které se spouští pod jiným EUID (efektivní UID), by mělo být na systému minimum, jmenujme např. passwd, sloužící ke změně hesla uživatele. Ten suid být musí, neboť potřebuje zapisovat do /etc/shadow, kam má práva jen root. Naopak velmi špatným nápadem by byl bash jako suid root. S takovým by měl každý právo dělat si na systému co by chtěl. Opět mi to nedá nevzpomenout na jiného člověka, jemuž jeho kamarád soustavně hackoval počítač. Důvodem byl dobře schovaný shell, který byl právě suid root :o)). Mějte správně nastavená práva současných souborů a na nové soubory (umask). Práva jsou na linuxu čísla z osmičkové soustavy, kde: čtení (r) = 4 zápis (w) = 2 spouštění (x) = 1 Středisko UN*Xových technologií 14 Kamil ’JP’ Dedecius Jemný úvod do shellů Práva se zapisují v tripletu ugo, kde u je vlastník (user), g skupina (group) a o jsou ostatní uživatelé (others), přičemž se vyjadřuje hodnota součtu přidělených práv. Práva je možné také zapisovat písmeny, opět v pořadí ugo. Tedy například 754 je ekvivalentí k rwxrxr–. Práva nových souborů jsou nastavena automaticky dle hodnoty umasku. Hodnota umasku se odečítá od plných práv v tripletu, tedy od 777. Máme-li např umask 0022 (první nula vyjadřuje osmičkové číslo), pak nově vytvořené soubory mají práva 755. Pokud chceme být hodně restriktivní, nastavíme umask 0077, čili skupina a ostatní uživatelé nemají k námi nově vytvořeným souborům žádná práva. Tím náš stručný úvod do bezpečnosti končí. Problematika bezpečnosti UN*Xů je ale velice komplexní, proto se k ní budeme často vracet (a pokud to vyjde, ukážeme si někdy, jak takový špatně zabezpečený stroj kompromitovat). 9 Otázky, aneb dávali jste pozor? Jaký shell se nejvíce používá na GNU/Linuxu? Je to Bourne Shell? V jakém adresáři většinou najdeme shelly? Jak je to s /bin/sh na GNU/Linuxu? Co kompatibilita bashe s klasickým sh? Jaký je rozdíl mezi interaktivním a neinteraktivním shellem? Co je login shell? Kdy bash načítá ~/.bashrc? Co vše doplní klávesa TAB? Kam se běžně umisťují definice aliasů? K čemu jsou symbolické odkazy a jak se jim běžně říká? Co značí proměnná PS1? Co značí proměnná IFS? Jak se udělá proměnná environmentální? Proč nepracovat pod rootem, pokud to není nutné? Jak jsou definována práva na UN*Xech (triplet, hodnoty)? K čemu je umask? Naučili jste se něco nového? Nebylo to moc nudné? (odpověď nám můžete dát na http://sut.sh.cvut.cz) 10 Závěr Tak jako všechno v životě, i tato přednáška končí. Buďte pilní a poznávejte krásy těchto úžasných operačních systémů, ať už jde přímo o UNIX, anebo o jiný OS který z něj vychází (např. *BSD nebo GNU/Linux). A neváhejte navštívit naše další přednášky, informace najdete na webových stránkách projektu SUT http://sut.sh.cvut.cz. Středisko UN*Xových technologií 15 Kamil ’JP’ Dedecius Jemný úvod do shellů 11 Literatura Více se o probraných tématech dozvíte v následující literatuře 5 : Sams Teach Yourself Shell Programming in 24 Hours (ISBN 0–672–31481–9) Bash Prompt Howto (najdete v /usr/doc/Linux-HOWTOs/Bash-Prompt-HOWTO nebo na internetu) Hatch, B. a kol.: Hacking bez tajemství – Linux. Computer press, Brno 2003 man 1 bash man 1 chmod man 1 umask man 1 ln manuálové stránky zmíněných programů 12 O tomto dokumentu Tento dokument byl vysázen v systému LATEX. Autor se omlouvá za nedokonalou sazbu a problémy s některými fonty, ovšem již nezbývá čas zabývat se kompatibilitou s Acrobat Readerem. Věcné chyby reportujte na [email protected] nebo na webových stránkách projektu SUT http://sut.sh.cvut.cz. Tento dokument byl připraven jako pomůcka k přednášce Jemný úvod do shellů. Můžete jej volně šířit v nezměněné podobě pod stejným názvem. 5 Není citována podle normy, ale za to mě snad popotahovat nebudete :o)) Středisko UN*Xových technologií 16
Podobné dokumenty
sborník souhrnů - Lékařská fakulta
kteří chtěji pracovat, zařadit. Proto byl vypracován postup, který
doporučuje zařazování alergiků a k alergii predisponovaných osob do
Abíčko - AbcLinuxu.cz
Vítejte u čtení časopisu Abíčko.
Abíčko vychází jako měsíční příloha serveru http://www.abclinuxu.cz a obsahuje výběr toho nejzajímavějšího obsahu, který zde byl v minulém měsíci publikován. Touto ...
Anna Bernáthovámá doma hodně telefonů. A my jsme toho využili!
ale naopak ctíte jednoduché a přímé ovládání? Pak je právě pro vás určen program
CenterICQ! Nenechte se zmást tím, že
obsahuje v názvu slovo ICQ. Dnes už si poradí i s mnoha dalšími protokoly, jako...
Žalmy - Rozhovor nad Biblí
jistým konkrétním způsobem si jeho činů používá, přiznává se k nim. I když se věci nedaří
podle našich vlastních představ, můžeme se v každé situaci pokusit o svých sto procent,
ke kterým nás vede ...
Jemný úvod do shellů II
Soubory můžeme dále vyhledávat podle velikosti, data poslední změny, modifikace, přístupu, podle regulárních výrazů, nastavených práv, uživatele atd. Některé z těchto možností
jsou specifikovány čí...
1) Živá příroda 3.r.
sedmikráska chudobka, smetánka lékařská (pampeliška)
2) Zjisti z učebnice, jakými způsoby se rozmnožují:
Jahodník ………………………………………………………………………………..
Tulipán .………………………………………………………………………………..
Brambory...