Jemný úvod do shellů II
Transkript
Kamil ’JP’ Dedecius Jemný úvod do shellů II Jemný úvod do shellů II 1 Hledání souborů aneb kam jsem to sakra. . . Jelikož je naším cílem naučit vás pracovat na příkazové řádce, budeme se věnovat i tématům, která se přímo shellu netýkají. Jedním z nich je hledání zatoulaného souboru, adresáře apod. Jde o činnost, kterou každý člověk pracující s počítači občas musí provádět. Aby mu to tvůrci operačních systémů a programů usnadnili, snaží se vyvíjet velké množství na první pohled naprosto nepoužitelných nástrojů. My se budeme zabývat jen těmi, které můžete najít na UN*Xech. 1.1 Manuální hledání ;o) Manuální hledání je nejstarší a „nejproduktivnějšíÿ (haha) způsob vyhledávání souborů. Spočívá v otrockém procházení adresářů, nejčastěji prováděném pomocí různých souborových manažerů (na MS-DOSu populární M602, Volkov Commander, Norton Commander, na UN*Xech nejčastěji Midnight Commander), nebo jako v případě autora tohoto materiálu prostým použitím příkazu ls, aplikovaného na všechny možné adresáře. Zmiňovat, že takto své soubory najdete opravdu rychle, je škoda slov 1 . 1.2 which Příkaz which vyhledává soubory v adresářích uvedených v proměnné PATH. Defaultně vypíše pouze první výskyt souboru, pokud je spuštěn s parametrem –a nebo pro pisálky –all, pak vypíše výskyt ve všech adresářích v cestě (tj. PATH). [jp@mujscot SUT]$ which ls /usr/bin/ls [jp@mujscot SUT]$ which -a ls /usr/bin/ls /bin/ls which není příliš použitelný a užitečný, snad jen pokud se chcete podívat, kde že ten váš program, který pouštíte bez zadání cesty, sídlí. 1.3 whereis whereis je obdobou příkazu which s tím, že umí vyhledávat i manuálové stránky: [jp@mujscot SUT]$ whereis ls ls: /bin/ls /usr/bin/ls /usr/man/man1/ls.1.gz /usr/share/man/man1/ls.1.gz Ačkoliv je tento příkaz o trochu šikovnější než which, je většinou ještě méně využívaný. Alespoň u mě. 1 Věřím, že ironie je zcela zjevná ;o) Středisko UN*Xových technologií 1 Kamil ’JP’ Dedecius Jemný úvod do shellů II 1.4 find Jestliže which a whereis přirovnáme k trabantu, pak find je hotový Rolls–Royce mezi programy na vyhledávání souborů. Samozřejmě s množstvím koní pod kapotou vzrůstá problém jej ukočírovat. find prohledává rekurzivně obsah všech adresářů, které mu zadáte, proto jeho běh může trvat poněkud delší dobu. Základní syntaxe findu je následující: find [cesta...] [výraz] Cesta je jeden nebo více adresářů. Za počátek výrazu se považuje jeden ze znaků ‘-’, ‘(’, ‘)’, ‘,’, nebo ‘!’. Už se děsíte? Nebojte, bude hůř ;o). Pro začátek si ale uvedeme nejjednodušší způsob, jak najít soubor, jehož jméno známe a víme, že „bydlíÿ kdesi v našem domovském adresáři (jen nevíme, v jakém podadresáři). Dejme tomu, že se jmenuje seminarka.avi 2 . [pilnystudent@peckostroj skola]$ find /home/pilnystudent -name ’seminarka.avi’ /home/pilnystudent/skola/semestralky/P/seminarka.avi Apostrofy v tomto případě nejsou povinné, ale v některých jiných případech (používáme–li regulární výrazivo) být mohou a dle mého názoru je dobrým zvykem je používat. V dalším případě si ukážeme, jak vyhledat soubor, jehož jméno si tak dobře nepamatujeme: [jp@mujscot SUT]$ find /home/jp -name ’TeamSpeak.*’ /home/jp/Desktop/TeamSpeak.desktop /home/jp/bin/teamspeak/image/TeamSpeak.bin /home/jp/.teamspeak2/TeamSpeak.Conf Uvedený příklad demonstruje hledání souboru TeamSpeak s libovolnou příponou. Narozdíl od MS–DOSu je ’.’ normálním povoleným znakem souboru, takže $find /home/jp -name ’TeamSpeak’ najde i soubory s tečkou. Ještě pro pořádek je nutno podotknout, že znak ’*’ zastupuje jakoukoliv sekvenci 0 a více znaků a může se objevit na libovolném místě výrazu. Jeden libovolný znak zastupuje ’ ?’, ale to se moc nepoužívá (snad pro skriptování). Dalším užitečným výrazem je iname. Ten způsobí vyhledávání podobným způsobem jako name, ovšem bez závislosti na velikosti písmen (je tzv. case–insensitive): [jp@mujscot SUT]$ find /home/jp -iname ’teamspeak*’ /home/jp/Desktop/TeamSpeak.desktop /home/jp/bin/teamspeak /home/jp/bin/teamspeak/image/TeamSpeak.bin /home/jp/bin/teamspeak/image/manual/teamspeak.gif /home/jp/bin/teamspeak/image/TeamSpeak /home/jp/.teamspeak2/TeamSpeak.Conf 2 Inspiroval jsem se u lidí, kteří podobným způsobem schovávají kinematografická díla s lechtivou tématikou ;o) Středisko UN*Xových technologií 2 Kamil ’JP’ Dedecius Jemný úvod do shellů II Vyhledávání si můžeme zkrátit přepínači maxdepth a mindepth. Ty nám určují, do jaké maximální a minimální hloubky se mají prohledávat zadané adresáře. Užitečnější z nich je ten první, hodí např. pro vyhledávání konfiguračních souborů nebo obrázků v adresářích, kde jsou umístěné webové stránky. Za předpokladu, že máme hrubou představu v jaké hloubce naše soubory sídlí, nám poměrně solidně dokáže zkrátit čekání na výsledek. Ukážeme si to v následujícím příkladě, kde si vyhledáme vše, co obsahuje písmeno ’m’ a sídlí v aktuálním podadresáři: [jp@beruska ~]$ find . -name ’*m*’ -maxdepth 1 ./Documents ./playlist.m3u ./optimalizace ./MyTemp ./mambo_czech.tar.gz ./siemens ./temp ./lomeno_tmp Jak je patrné, find nám našel opravdu vše, ať už jde o symlinky, adresáře, soubory atd. Pokud bychom chtěli jen konkrétní druh souboru, použijeme přepínač type a za ním označení typu. Pro naše účely nám stačí přepínače d – adresář, f – soubor a l – symlink. Chceme-li tedy předchozí hledání omezit pouze na adresáře, uděláme to následovně: [jp@beruska ~]$ find . -name ’*m*’ -maxdepth 1 -type d ./Documents ./MyTemp ./siemens ./temp Na tomto případě je zároveň ukázáno, jak lze přepínače řetězit a skládat. 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 číslem n, jemuž může předcházet znak ’+’ nebo ’-’. Na následujícím příkladě si vypíšeme soubory v aktuálním adresáři, ke kterým bylo přistupováno naposled před více než 30 dny: [jp@mujscot ~]$ find . -name ’*m*’ -maxdepth 1 -atime +30 ./playlist.m3u ./mambo_czech.tar.gz Středisko UN*Xových technologií 3 Kamil ’JP’ Dedecius Jemný úvod do shellů II S nalezenými soubory můžete provádět různé akce, a to hned dvěma způsoby. Např. můžeme chtít vypsat status souboru pomocí stat (právě tak jej můžeme smazat pomocí rm, změnit mu práva, vlastníka apod.). Použijeme předchozí příklad a ten dále rozšíříme: [jp@mujscot ~]$ find . -name ’*m*’ -maxdepth 1 -atime +30 -exec stat {} \; File: ‘./playlist.m3u’ Size: 53 Blocks: 8 IO Block: 4096 regular file Device: 303h/771d Inode: 65445 Links: 1 Access: (0600/-rw-------) Uid: ( 1000/ jp) Gid: ( 100/ users) Access: 2004-05-10 15:48:16.000000000 +0200 Modify: 2004-05-10 15:46:15.000000000 +0200 Change: 2004-05-10 15:46:15.000000000 +0200 File: ‘./mambo_czech.tar.gz’ Size: 6129 Blocks: 16 IO Block: 4096 regular file Device: 303h/771d Inode: 65782 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ jp) Gid: ( 100/ users) Access: 2004-10-30 20:36:47.000000000 +0200 Modify: 2004-10-30 19:48:52.000000000 +0200 Change: 2004-10-30 19:48:52.000000000 +0200 Složené závorky jsou nahrazeny jménem souboru tak, jak jej našel find, středník příkaz ukončuje. Je jej nutné uvést v escape sekvenci, pozor na mezeru mezi pravou složenou závorkou a zpětným lomítkem. Druhou možností je použít příkaz xargs v „nahrazovacím móduÿ, tj. s přepínačem -i: [jp@mujscot ~]$ find . -name ’*m*’ -maxdepth 1 -atime +30 |xargs -i File: ‘./playlist.m3u’ Size: 53 Blocks: 8 IO Block: 4096 regular Device: 303h/771d Inode: 65445 Links: 1 Access: (0600/-rw-------) Uid: ( 1000/ jp) Gid: ( 100/ Access: 2004-05-10 15:48:16.000000000 +0200 Modify: 2004-05-10 15:46:15.000000000 +0200 Change: 2004-05-10 15:46:15.000000000 +0200 File: ‘./mambo_czech.tar.gz’ Size: 6129 Blocks: 16 IO Block: 4096 regular Device: 303h/771d Inode: 65782 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ jp) Gid: ( 100/ Access: 2004-10-30 20:36:47.000000000 +0200 Modify: 2004-10-30 19:48:52.000000000 +0200 Change: 2004-10-30 19:48:52.000000000 +0200 stat {} file users) file users) To by bylo o příkazu find v tomto textu vše, ovšem zde jeho možnosti ani zdaleka nekončí. Více najdete v manuálových stránkách (mj. se dozvíte, že je možné s argumenty provádět i logické operace, ovšem to už rámec tohoto materiálu přesahuje). A na závěr malá poznámka – na UNIXech bylo (a na některých je dodnes) potřeba použít u findu přepínač –print, jinak vám na standardní výstup nic nevypíše. Středisko UN*Xových technologií 4 Kamil ’JP’ Dedecius Jemný úvod do shellů II 1.5 locate Příkaz locate využívá ke své funkci databázi souborů vytvořenou pomocí findu. Databáze se updatuje v pravidelných časových intervalech příkazem updatedb (který si sami můžete spustit, ovšem připravte se na pauzu na kafe ;o) ). Výhodou je, že soubor najdete okamžitě, ať je kdekoliv (tedy téměř kdekoliv), nevýhodou pak to, že pokud není databáze aktuální, k žádanému výsledku nedospějete. Pokud svůj počítač navíc na noc vypínáte, nejspíše bude vaše databáze velmi archaická (při troše štěstí najde i vyhynulé druhy ;o) ) a pak nezbývá než doporučit přeplánování úloh na jiný čas. Pro kompletnost si ukážeme jak locate funguje: [jp@mujscot tmp]$ locate test.html /usr/doc/gcc-3.3.4/INSTALL/test.html /usr/doc/db4-4.2.52/html/ref/build_unix/test.html /usr/doc/db4-4.2.52/html/ref/build_win/test.html /usr/doc/libao-0.8.5/ao_plugin_test.html /usr/doc/libvorbis-1.0.1/vorbisfile/ov_test.html /usr/doc/pcre-5.0/html/pcretest.html /usr/lib/lynx/lynx_doc/test/ISO_LATIN1_test.html /usr/lib/lynx/lynx_doc/test/tabtest.html Tím kapitoly věnované hledání souborů končí a my se můžeme směle vrhnout na slibovaný shell. 2 Pokračujeme v BASHi. . . 2.1 Job Control Pojem job control označuje řízení úloh. Úlohy můžeme spouštět buď na popředí (mají process group ID stejné jako aktuální terminál a lze je z terminálu ovládat klávesami), nebo na pozadí (opak předcházejícího). Na popředí se spouštějí úlohy defaultně, na pozadí je pustíte, přepojíte–li za příkaz znak ’&’, jako v následujícím příkladě: [jp@beruska etc]$ cat /etc/hosts & # For loopbacking. 127.0.0.1 localhost 147.32.117.5 beruska.sh.cvut.cz beruska # End of hosts. [1] 3953 [1] Done cat /etc/hosts Co z výpisu můžeme vyčíst? Tato úloha měla číslo 1, poslední proces, který s ní byl asociován měl PID=3953. Středisko UN*Xových technologií 5 Kamil ’JP’ Dedecius Jemný úvod do shellů II Procesy ovšem můžeme chtít shodit na pozadí i v průběhu jeho činnosti. To uděláme tak, že stiskneme klávesovou kombinaci CTRL–Z, která jej pozastaví (uspí, suspendne) a příkazem bg jej hodíme na pozadí: [jp@mujscot ~]$ yes y y y y y [3]+ Stopped [jp@mujscot ~]$ bg yes Procesy jde taktéž hodit do popředí příkazem fg. bg i fg akceptují argumenty %n, kde n je číslo úlohy (můžete jej získat také pomojí příkazu jobs). Pokud argument neuvedete, pracuje se s poslední spuštěnou úlohou. Použití jobs demonstruje následující příklad: [jp@beruska ~]$ jobs [1]- Stopped [2]+ Stopped more README.txt yes (wd: /etc) (wd: /tmp/BitTorrent-3.4.2) Z výpisu můžeme poznat, že úloha 2 je aktuální (má znaménko +) a byla spuštěna v /etc. Úloha 1 byla předchozí (znaménko –), byla spuštěna jako more README.txt. Obě úlohy jsou stopnuté. Nyní úlohu 1 ukončíme signálem SIGTERM: [jp@mujscot ~]$ kill %1 [1]- Stopped (wd now: ~) [jp@mujscot ~]$ jobs [1]- Ukončen (SIGTERM) [2]+ Stopped more README.txt (wd: /tmp/BitTorrent-3.4.2) more README.txt yes (wd: /etc) (wd: /tmp/BitTorrent-3.4.2) Jak je evidentní, s řízením úloh to není zas tak jednoduché. Cílem tohoto odstavce bylo seznámit vás se základním ovládáním úloh, zájemci o bližší prozkoumání problematiky nechť se podívají do manuálových stránek bashe. Středisko UN*Xových technologií 6 Kamil ’JP’ Dedecius Jemný úvod do shellů II 2.2 To je vražda, napsala, aneb učíme se používat příkaz kill Příkaz kill neslouží ani tak k zabíjení, jako k posílání signálů procesům. Signál SIGHUP SIGINT SIGQUIT SIGILL SIGKILL SIGSEGV SIGTERM SIGSTOP SIGCONT Tabulka 1: Nejdůležitější signály Hodnota Popis 1 Donutí proces znovu načíst konfigurační soubor 2 Přerušení procesu z klávesnice (CTRL–C) 3 Ukončení z klávesnice (většinou CTRL– ) 4 Neplatná instrukce 9 Zabití procesu 11 Invalid memory reference 15 Ukončovací signál (při zániku terminálu) 17, 19, 23 Pozastavení procesu (např. CTRL–Z) 19, 18, 25 Protiklad k SIGSTOP Jak již bylo uvedeno, signály lze posílat pomocí příkazu kill a to hned několika způsoby. Následující dva jsou ekvivalentní: $ $ $ $ $ $ kill kill kill kill kill kill -s SIGKILL 1234 -s KILL 1234 -s 9 1234 -SIGKILL 1234 -KILL 1234 -9 1234 1234 je číslo procesu, které můžeme zjistit pomocí příkazu ps, nejčastěji spouštěného s parametry aux (čili ps aux). Protože jsou případy, kdy je nepraktické posílat signály procesům přes jejich čísla, lze při dostatečné míře opatrnoste použít příkaz killall a číslo procesu nahradit jeho názvem: $ killall -9 bash Posledně uvedený příklad není moc praktický. Používat bez rozmyslu killall pod rootem je jako hrát si se sirkou na sudu se střelným prachem. Když už jsme se zmínili o procesech, uvedeme si pár užitečných příkazů pro práci s nimi. Jedním z nich je již zmíněný ps, který nám vypíše existující procesy. Má dost přepínačů na to, aby se s ním dalo chvíli hrát. Dalším je top, sloužící k průběžnému moniorování stavu systému z hlediska běžících procesů. Také má několik přepínačů a navíc i interaktivní ovládání pomocí kláves ;o). Strom procesů si můžete zobrazit pomocí pstree (přepínače dne –fp). Mezi procesy lze vyhledávat pomocí příkazu pgrep, doporučuji ozkoušet přepínač –l. Signály lze procesům posílat i pomocí pkill, který si vybere procesy stejně jako pgrep a těm pak signál pošle. Středisko UN*Xových technologií 7 Kamil ’JP’ Dedecius Jemný úvod do shellů II 2.3 Přesměrování vstupu a výstupu Se vstupem a výstupem můžeme na UN*Xech poměrně pohodlně pracovat. Abychom však věděli, oč jde, musíme nejdříve projít trochou suché teorie. Začneme souborovými deskriptory (file deskriptory). 2.3.1 Souborové deskriptory Souborové deskriptory v shellu představují čísla, která zastupují konkrétní soubory. V následujícím textu budeme pracovat se třemi soubory, které jsou vytvářeny s každým spuštěným příkazem. Soubory a jejich deskriptory jsou: Standardní vstup – STDIN – 0 Standardní výstup – STDOUT – 1 Standardní chybový výstup – STDERR – 2 Standardní výstup a standardní chybový výstup jsou svázány s terminálem, proto na něm můžete vidět co váš příkaz vypisuje za informace a chybová hlášení. 2.3.2 Začínáme přesměrovávat výstup K přesměrování výstupu slouží znaménko ’>’. Příkladem může být následující zápis: $ ls > vypis.txt Tento zápis způsobí že vše, co by se vypsalo na STDOUT, skončí v souboru vypis.txt. Chybová hlášení se budou nadále vypisovat na STDOUT a my je tedy uvidíme na terminálu. Předchozí zápis je ekvivalentní se zápisem: $ ls 1> vypis.txt Problémem někdy může být, že ’>’ způsobí přepsání souboru. Pokud chceme do souboru jen vložit něco na konec, uděláme to tak, že použijeme zdvojený znak většítka (čili ’>>’): $ ls > vypis.txt $ echo "A tenhle řádek přijde na konec souboru" >> vypis.txt 2.3.3 Začínáme přesměrovávat vstup Přesměrování vstupu je o trochu jednodušší. Použijeme znak ’<’ a za něj uvedeme jméno souboru, který chceme příkazu předat. Například následující dva zápisy dělají totéž: [jp@mujscot ~]$ cat optimalizace export CXXFLAGS="-march=athlon-xp -O3 -fomit-frame-pointer" export CFLAGS="-march=athlon-xp -O3 -fomit-frame-pointer" [jp@mujscot ~]$ cat <optimalizace export CXXFLAGS="-march=athlon-xp -O3 -fomit-frame-pointer" export CFLAGS="-march=athlon-xp -O3 -fomit-frame-pointer" Středisko UN*Xových technologií 8 Kamil ’JP’ Dedecius Jemný úvod do shellů II Přesměrování vstupu se používá spíše ve skriptování, pokud potřebujeme v běžné praxi někam předat obsah souboru, používá se cat. 2.3.4 Přesměrování výstupu na terminál a do souboru zároveň Pokud potřebujeme přesměrovat STDOUT do souboru a zároveň nechceme přijít o výpis na terminálu, použijeme příkaz tee. Příkladem budiž následující řádky: [jp@mujscot ~]$ cat optimalizace |tee test export CXXFLAGS="-march=athlon-xp -O3 -fomit-frame-pointer" export CFLAGS="-march=athlon-xp -O3 -fomit-frame-pointer" [jp@mujscot ~]$ more test export CXXFLAGS="-march=athlon-xp -O3 -fomit-frame-pointer" export CFLAGS="-march=athlon-xp -O3 -fomit-frame-pointer" Jak je patrné, výstup z catu byl nejen zobrazen na terminálu, ale i zapsán do souboru test. 2.3.5 Sofistikovanější přesměrování výstupu Chybové hlášky a standardní výstup můžeme přesměrovat do dvou samostatných souborů: $ make 1> out.log 2> error.log Někdy ale potřebujeme přesměrovat STDOUT a STDERR do jednoho souboru, abychom viděli výsledky práce i chybové hlášky zároveň (je to praktičtější, neboť je zachován časový sled). To provedeme podle následujícího příkazu: $ make > zaznam.txt 2>&1 Pokud tento příklad budeme rozebírat vidíme, že STDERR (deskriptor 2) je přesměrován do STDOUT (deskriptor 1). K přesměrování se při použití file deskriptorů používá znak ampersand (’&’). A STDOUT je následně přesměrován do souboru zaznam.txt. 2.3.6 Sofistikovanější přesměrování vstupu Vstup můžeme do souboru přesměrovat i pomocí ’<< delimiter’. Pak je vstup čten tak dlouho, dokud se nenarazí na delimiter. Opět uvedeme dva příklady, které dělají totéž: [jp@mujscot ~]$ mail -s ’testovaci mail s presmerovanim vstupu’ [email protected] << TEST > Tady mohu psat mail > dokud nenapisu to > osklive slovo > TEST [jp@mujscot ~]$ echo "A takhle to jde taky, aneb proc si to komplikovat" |mail -s ’test Středisko UN*Xových technologií 9 Kamil ’JP’ Dedecius 2.3.7 Jemný úvod do shellů II Slovo k přesměrováním na závěr Možná to tak nevypadá, ale přesměrovávat STDIN, STDOUT a STDERR je vcelku hračka. Nenechte se zastrašit velkým množstvím možností, co máte k dispozici. Právě v téměř neomezených možnostech spočívá krása UN*Xů. 2.3.8 A slibovaná perlička na závěr – náš první UN*Xový vir Nejde o vir v pravém slova smyslu, ale rychlost jeho šíření je úžasná (byť sám o sobě na to nemá žádný mechanismus krom své jednoduchosti, krásy a dopadu :o)). Je až smutné, že velké množství serverů a stanic je nastaveno tak, že tento kratičký kousek shellového kódu zabere. Přitom obrana je jednoduchá (man limits, /etc/security/limits.conf). POZOR!!! VŘELE NEDOPORUČUJI SPOUŠTĚT NÁSLEDUJÍCÍ KÓD, POKUD NEVÍTE, CO DĚLÁ!!! V ŽÁDNÉM, OPRAVDU V ŽÁDNÉM PŘÍPADĚ NEZKOUŠEJTE TENTO KÓD NA SERVERU. MOHLI BYSTE SE DOČKAT NEPŘÍJEMNÉHO PŘEKVAPENÍ!!! $ : :(){ :|:&};: Rozbor proveden na přednášce, kód pro jistotu zneschopněn pro skript–kiddies ;o) 3 Pár otázek pro kontrolu vaší pozornosti Vyhledejte všechny soubory v /etc, co mají příponu conf, jsou novější než 50 dní a ty zkopírujte do adresáře $HOME/etc. Vyhledejte v adresáři /usr všechny symlinky. Najděte v /dev všechna znaková zařízení (použijte man find). Postupně spusťte 5 úloh a všechny je stopněte, následně spusťte na pozadí a ukončete. Najděte pomocí pgrepu všechny procesy agetty Následující zápis vloží STDOUT všech příkazů do jednoho souboru. Nahraďte ho jednotlivými zápisy tak, aby jste dosáhli téhož výsledku: {date; uptime; who; } > mujlog Co dělá následující zápis? make 1>&2 Co dělá následující zápis? make >&2 K čemu je dobrý program tee? Přesměrovává i STDERR? 4 Doporučená literatura Sams Teach Yourself Shell Programming in 24 Hours (ISBN 0–672–31481–9) man 1 bash man 1 which man 1 whereis man 1 updatedb man 1 yes man 1 locate man 1 find man 1 kill man 1 killall man 1 pkill man 1 ps man 1 stat man 1 xargs man 1 pgrep man 7 signal man 5 limits Středisko UN*Xových technologií 10 Kamil ’JP’ Dedecius Jemný úvod do shellů II 5 O tomto dokumentu Tento dokument byl vysázen v systému LATEX. Autor se omlouvá za nedokonalou sazbu. 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ů II. Můžete jej volně šířit v nezměněné podobě pod stejným názvem. Středisko UN*Xových technologií 11
Podobné dokumenty
TeamSpeak v1.36– 22/11/2008
napr. JXP, Rocco, Yassiboy, Sambuca atd. aby vam umoznil registrovat se na tento server. Exclusively for *A·I+ + *A·II+ - Artificial Intelligence by JXP
VíceJak si nastavit trvale připojení TeamSpeaku na známé servery. 1
Jak si nastavit trvale připojení TeamSpeaku na známé servery. 1. Spustit TeamSpeak a v menu Connection vybrat položku Connect
VíceRoot.cz - Triky pro zacatecniky 6
Posledne jsem trochu nakousnul presmerovani standardniho vstupu a vystupu. Dnes si tuto vybornou vlastnost probereme trochu dukladneji. Predem ale upozornuji, ze se uvedene priklady budou tykat pre...
Více1 MECHANIKA TEKUTIN TEKUTINY
vztlaková síla a vždy směřuje svisle vzhůru. Značíme ji FVZ . Například kámen ve vodě zvedneme menší silou než na vzduchu. Některé předměty jsou v kapalině nadlehčovány tak velkou silou, že plovou ...
VíceAbíčko - AbcLinuxu.cz
rozbalí kamkoli na disk a spouští se rovnou z tohoto adresáře. Hodně příjemný a pro testy užitečný přístup. Co se podpory Oracle serverů týče, lze se připojit pouze na 9 a vyšší. Respektive s 8 Rap...
VíceDeveloper tutorial beta 2
(neboli process ID = číslo procesu) a pak stačí jen v dalším příkaze napsat kill čísloProcesu které nám vyplivnul pgrep restart.sh. Anebo to lze udělat rovnou jedním příkazem a to příkazem : kill $...
VíceIVAP Virtual Pilot Client
pro obnovovací frekvenci jaké chcete dosáhnout. IvAp a připojená MTL – Multiplayer Traffic Library (použitá pro zobrazení ostatních online pilotů s aktuálním letadlem a li...
VíceKamil `JP` Dedecius
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 ...
Více