Úvod do UNIXu, cvičení 1 Organizační informace Co je vlastně ten UNIX? Jak to chodí v labech
Cvičící Jan Šembera Web: http://www.bofh.cz/ E-mail: jan.sembera@innoxia.cz Konzultace: na základě předchozí dohody mailem nebo na cvičení Na SISALu se vůbec nevyskytuji.
Cvičení Pondělí 12:20 SU2 Oficiálně skupina I/1-Y/39, reálně beru kohokoli, kdo se vejde. Hard limit 25. Pokud nejste I/39, napište mi mail, že sem budete chodit. Ověřte si zhruba do týdne, jestli jste v Grupíčku napsáni tam, kde být chcete.
Za co je zápočet? Prezence není nutná, ale je doporučená. Alternativa 1 (běžná) zápočtová písemka na posledním cvičení semestru, neomezený počet možných opakování při neúspěchu. snadné domácí úkoly alespoň 5 z 12 správně vyřešených a odevzdaných včas. Náhradní možné, ale těžké.
Za co je zápočet? Alternativa 2 (pro hardcore UNIXáře) zápočtový příklad bude značně složitější než písemka a budu přísněji hodnotit. Určeno zejména pro znalé a odvážné. Nutno se dohodnout na tématu včas. Průběžné výsledky domácích úkolů budou v Grupíčku.
Zkouška Písemná Úkol je vypracování netriviálního skriptu řešícího nějakou netriviální úlohu K dispozici počítač s manuálovými stránkami, možnost vzít si s sebou libovolné texty (ne vyřešený příklad!) Poté diskuze nad řešením
Co je to UNIX? Původně jeden operační systém Dnes ochranná známka UNIX vlastněná The Open Group, udílená pouze systémům, které splňují normu Single UNIX Specification (a zaplatí si certifikaci)
Co je to UNIX? V širším smyslu libovolný operační systém, co se dostatečně UNIXu blíží. Často jsou tyto systémy nazývány UNIX-like. Linux, který máme před sebou, je jedním z nich. Občas také systémy splňující normu POSIX. Ano, je to poměrně zmatené...
O čem předmět bude? Naučíme se základní principy, na kterých je UNIX vystavěn. uživatelsky pracovat s běžným UNIXem. programovat v příkazovém interpreteru (tzv. shell), a to včetně pokročilého skriptování (též sed, awk). Budeme se zabývat zejména tím, co funguje všude.
O čem předmět nebude? Nebude o administraci UNIXových systémů SWI106 Administrace UNIXu Nebudeme probírat API systému SWI015 Programování v UNIXu
K čemu (se učit) UNIX? Kvalitní a historicky ověřený systém. Jiná filosofie, jiný přístup k věci. Často využíván na serverech ve firmách a institucích všech velikostí. Moderní UNIXy jsou také kvalitním desktopem.
K čemu (se učit) UNIX? Dobrý síťový subsystém. Běží na všech architekturách. Od embedded zařízení po superpočítače. Některé UNIXy a UNIX-like systémy jsou zcela zdarma včetně userlandu a spousty aplikací
Filosofie UNIXu Skládáme malé funkční celky, které dělají svou práci dobře a nejsou natolik náchylné k chybám, jako velké molochy.
Kde se to naučím? Přednášky Literatura Praxe ze slajdů se na zkoušku nenaučíte, cvičení není tolik... v počítačových laboratořích doma s vhodným LiveCD doma s plnohodnotnou instalací Konzultace
Laby na MS - konta SU1, SU2 a UNIXy v rotundě mají společná konta Dočasně (začátkem semestru) by mělo fungovat lokální konto, ale bez sítě: login: * heslo: * Konto si zřiďte na SISALu do příštího cvičení. Bez netu není zábava. Dr. Matouš, od úterka do pátku 10:30-11:00, 15:30-16:00
Laby na MS - AFS V rotundě stroje nerestartujte na strojích pracují lidé vzdáleně. Pokud vám něco nepůjde, zavolejte službu. Uživatelská data na AFS. Máte je tak k dispozici, ať se přihlásíte kdekoliv. Prý i z Internetu (good luck!) AFS občas chcípne a občas blbne. Trpělivost...
Laby na MS Co tu je? GNU/Linux u-plx.ms.mff.cuni.cz X = 1, 2,..., 32 Solaris u-us.ms.mff.cuni.cz IRIX kappa.ms.mff.cuni.cz MacOS X (?) u-mac.ms.mff.cuni.cz
Uživatelské aplikace (Linux) Webový prohlížeč firefox, opera, konqueror,... elinks, links, lynx Poštovní klient thunderbird, evolution,... mutt, pine Kancelářské balíky openoffice.org, koffice Přehrávač multimedií mplayer, xine,... mplayer s caca výstupem
Laby na MS homes Každý uživatel má svůj domovský adresář. V případě MS rozdělen na dvě části: přímo ~, několik desítek MB podadresář BIG, několik GB Příkaz fs quota zobrazí volnou kapacitu.
Terminálové emulátory Pokud si zvolíte práci v grafickém režimu, budete potřebovat jeden z následujících programů konsole gnome-terminal xterm aterm rxvt
Úvod do UNIXu, cvičení 2 Základní práce s shellem Manipulace se soubory, metaznaky Procesy, přesměrování, roury
Základní ovládání shellu První příkaz: echo Šipka vlevo a vpravo editace příkazu Šipka nahoru a dolu historie (bash) CTRL+C - zruší rozepsaný příkaz CTRL+R - vyhledávání v historii (bash) CTRL+D konec vstupu # - komentář Příkazy logout, exit
Nápověda? V tzv. manuálových stránkách. man <příkaz> man -k <příkaz> Nestandardně také info help
Vzdálený přístup Pomocí protokolu SSH ssh <username>@<machine> ssh <machine> Ve Windows například pomocí PuTTY, nutno nastavit protokol ssh, port 22. Skrz ssh lze pouštět i grafické aplikace
Adresářová struktura Jeden strom, kořenový adresář / Separátor je / Případné další diskové oblasti se prostě připojí do nějakého adresáře (mount). Každý adresář obsahuje. a.. Case-sensitive Téměř libovolné znaky Relativní i absolutní cesty
Pohyb po adresářovém stromě ls [-l] [-a] [-1] [cesta] cd [cesta] pwd
Zajímavé adresáře / - kořenový adresář /bin, /sbin základní utility systému /etc konfigurační soubory systému /usr struktura jako /, programy /home domovské adresáře uživatelů /tmp dočasné soubory /var často se měnící soubory, logy, etc. /root domovský adresář uživatele root... mezi systémy se může ale dost lišit a všude nemusí být vše přítomno...
Druhy souborů - soubory d adresáře b bloková zařízení c znaková zařízení l symbolické odkazy s sockety p roury
Speciální znaky * - libovolný počet libovolných znaků? - právě jeden libovolný znak Úložka: Vypište všechny soubory z /usr/bin, které obsahují v názvu 4 znaky a.
Manipulace se soubory cat [-n] touch [jméno] cp [zdroj] [cíl] mv [zdroj] [cíl] rm [oběť]
Escapování 'blabla' zabrání veškeré expanzi bla bla bla - respektuje mezery, ale expanduje Úložka: Který znak nesmí být v názvu souboru?
Manipulace s adresáři mkdir [-p] rmdir rm [-r] [-f] Opatrně s mazáním!
Méně je někdy více more less wc [-c] [-w] [-l] head -n tail -n
Přesměrování příkaz >soubor příkaz <soubor příkaz >>soubor lze kombinovat
Malé úložky Vytvořte si soubor obsahující aktuální datum, nikoli však čas (hint: příkaz date) Uložte do souboru prvních 8 řádek souboru /etc/passwd Za ně přidejte posledních 5 řádek tohotéž souboru.
Pipe & pipeline příkaz příkaz... prakticky libovolný počet rychlost zpracování se přizpůsobí tomu nejpomalejšímu procesu v pipeline
Úložky Vypište n-tý řádek seznamu skupin. Spočítejte slova v manuálové stránce pro bash. Zkopírujte vše mezi 5. až 15. řádkem z /etc/passwd do vlastního souboru
Úvod do UNIXu, cvičení 3 Více k metaznakům, ls, cp a mv SSH podruhé Hrátky s uživateli
Metaznaky mkdir test cd test touch.a touch b ls -al ls -al * Kde je problém? Jak ho odstranit? Zkuste smazat soubor 'b'. Co se stalo?
Více k ls mkdir b c c/d; touch e ls * ls ls b ls -d b
Více k cp a mv touch soubor1 soubor2 mkdir adresar cp soubor1 soubor3 cp soubor1 adresar cp soubor1 adresar/ cp soubor1.. souborn adresar
Divné znaky v názvech Vytvořte soubor s názvem -f Pokud se vám to povedlo, smažte ho. V čem je problém zde a jak ho řešit? Řešení: rm -- -f
SSH podruhé Úloha: Vymyslete, jak pomocí ssh zkopírovat soubor na jiný počítač (kopírujte například do adresáře /tmp). Hint: ssh může brát jako parametr příkaz, který bude spuštěn na druhé straně.
SCP Bezpečné kopírování souborů mezi počítači. scp filename [username@]box:filename scp [username@]box:filename filename Lze i mezi dvěma vzdálenými stroji... Úloha: Zjistěte z manpage, jak zkopírovat pomocí scp celý strom.
Manipulace s uživateli id who who am i whoami finger (i vzdáleně) last lastlog
Manipulace s uživateli Úloha: napište příkaz, který spočítá počet uživatelů přihlášených na stroji (duplicity klidně započítejte, filtrovat je zatím neumíme).
Povídejme si... Nějak se napárujte talk (lze i vzdáleně) write mesg Úkol: Potěšte kolegu nějakým hezkým dárečkem, například mu zapípejte nebo mu věnujte nějaký soubor. reset
Úvod do UNIXu, cvičení 4 Backticky Velká úloha na dosud probranou látku
Backticky `příkaz` Provede příkaz, jeho výstup dosadí zpět na příkazovou řádku a tu vykoná echo 'ls -l /etc/' > soubor `cat soubor`
Backticky Lze též nahradit $( ), který lze i poměrně rozumně vnořovat. Úloha: Napište příkaz, který spočítá počet znaků v prvních třech souborech v /usr/bin začínajících na písmeno 'c'. Vyhněte se řešení, které by počítalo ve více souborech, než je nezbytně nutné.
Backticky Úloha: Chceme napsat sekvenci příkazů, která v závislosti na datu spuštění spustí předpřipravený příkaz pro tento den. Adresářová struktura 2007-03-12/ 2007-03-12/cmd příkaz ke spuštění 2007-03-12/param parametry 2007-03-12/out jméno výstupu hint: date s vhodným výstupním formátem.
Větší úloha ( Milostné SMS ) Každý večer chcete poslat své drahé polovičce jednu SMS (ideálně jinou). Ale aby se nestalo, že na to někdy zapomeneme, napíšeme si skript, který to bude dělat za nás a SMSky si sepíšeme předem do souboru. wget http://www.bofh.cz/links/sms.txt Napište posloupnost příkazů, která: Odebere jeden řádek ze souboru se zprávami. Zprávu pošle mailem. Uloží SMSku i s datumem odeslání do souboru.
Úvod do UNIXu, cvičení 5 Proměnné Linky sort, uniq, tr, cut
Proměnné Přiřazení NAME=VALUE před rovnítkem nesmí být mezera! Vložení hodnoty $NAME ${NAME}
Proměnné Obdobně jako u backticků je nutno i u proměnných dávat pozor na mezery. A= X Y echo $A echo $A
Proměnná $PATH Úloha: Vytvořte si funkční kopii cp s názvem kopiruj někde ve svém domovském adresáři (například v podadresáři bin/). Proč není dobrý nápad mít v cestě.?
Linky Hardlinky Dnes se už příliš nepoužívá, není přehledné Ztotožnění souboru Nelze na adresáře ln [target] [link] ls -i umožní odhalení (mají stejné # inody) Softlinky / symlinky Jasné a zřejmé Možnost zacyklení Lze i adresáře ln -s [target] [link]
sort, uniq sort -n numerický -r opačně -s stabilní (nestandardní rozšíření) -u unikátní -t separátor -k POS1[,POS2] podle čeho se bude třídit uniq -d pouze duplicitní řádky -u pouze unikátní řádky
cut cut -d separátor -b oddělovat po bajtech -c oddělovat po znacích -f oddělovat po polích
sort, uniq, cut Úloha: Setřiďte /etc/passwd podle skutečného jména uživatele. Úloha: Setřiďte /etc/passwd podle UID uživatele. Úloha: Z deseti posledních přihlášení vypište jména uživatelů. Každého vypište pouze jednou.
sort, uniq Úloha: Vypište (pouze) jméno skupiny s třetím největším GID. Úloha: Vypište, kolik uživatelů používá který login shell (hint: vhodný parametr uniq) Domácí úloha: Vyberte deset naposledy přihlášených uživatelů na daném počítači (a to bez cyklů a podmínek).
tr Úloha: Implementujte šifru ROT13 pomocí příkazu tr.
Úvod do UNIXu, cvičení 6 tr cut, paste, split Úvod do regulárních výrazů grep, sed a ed
tr tr A B Mění n-tý znak z posloupnosti A na n-tý znak z posloupnosti B Možnosti zadání výčtem rozsah A-Z třídy znaků [:alpha:], [:alnum:], [:blank:] Parametry -d maže znaky v množině A -s z opakovaných výskytů znaků z A udělá jeden výskyt
tr Úloha: Upravte svou vlastní kopii /etc/passwd tak, aby bylo vše pouze velkými písmeny.
paste, split paste opak cut, jako parametry se dají názvy souborů. Ty jsou pak chápány jako sloupce, které paste slepí (mezi ně vloží oddělovač) split rozdělí větší soubor na menší kusy podle bajtů (-b) či řádků (-l) split [zdroj] [prefix] generuje pak soubory ve tvaru: prefixaa, prefixab, prefixac,...
cut, paste, split Úloha: Vypište prvních třicet uživatelských jmen z /etc/passwd do pěti sloupečků po šesti řádcích.
cut, paste, split Úloha: Japonská jména zapsaná v latince se obvykle píší ve tvaru PŘÍJMENÍ Jméno. Upravte výstup getent passwd tak, aby položka skutečného jména byla v tomto tvaru. Na vstupu očekávejte Jméno Příjmení. Vstup: jednt7bm:x:31337:0:tomáš Jedno:/:/bin/bash Výstup: jednt7bm:x:31337:0:jedno Tomáš:/:/bin/bash
Regulární výrazy Obyčejné (BRE) vs. rozšířené (ERE) Rozšířené je třeba zvlášť zapnout: sed -r grep -E Rozšířené mohou být pohodlnější, obyčejné budou zase fungovat všude. BRE:. * \{\} \(\) ^ $ [ ] ERE:. * {} () ^ $ [ ] +?
Regulární výrazy Úloha: Vyberte uživatelské řádky, které jsou starými uživateli (tedy formát xxxxnnnn, kde x je libovolné písmeno a N libovolné číslo). Úloha: Totéž pro nové uživatele tam je formát xxxxxnxx. Úloha: Vyberte uživatele, kteří nespadají ani do jedné z těchto kategorií. Vyzkoušejte si BRE i ERE.
Úvod do UNIXu, cvičení 7 grep, sed diff, comm
diff, comm Úloha: Ověřte, zdali je soubor /etc/passwd setříděný podle UID. Úloha: Porovnejte soubor /etc/passwd s výstupem getent passwd a vypište první řádek, který se liší.
grep, sed Úloha: Napište posloupnost příkazů, která odstraní všechny komentáře ze skriptu.
grep, sed Úloha: Vypište seznam všech uživatelů, kteří se jmenují Jan (nikoli však už například Jana). Úloha: Výpis předchozí úlohy naformátujte do podoby: UID = Jméno Tedy například: 43013 = Jan Šembera
Úvod do UNIXu, cvičení 8 grep, sed find
grep, sed Úloha: Nahraďte C++ komentáře C komentáři. Vstup: bla bla bla; // komentar podle C++ Vystup: bla bla bla; /* komentar podle C */
grep, sed Úloha: Vyberte z getent passwd uživatele v novém formátu. V nich najděte ty, jejichž skutečné jméno neodpovídá jejich přihlašovacímu jménu (pokud tací jsou pravděpodobně to budou ti, kteří mají příjmení kratší než čtyři znaky a dále vdané studentky).
grep, sed Úloha: Na vstupu jsou řádky ve formátu uid:username. Vygenerujte z nich soubor ve formátu /etc/passwd, tak, že: místo hesla je 'x' gid = uid prázdné jméno domovský adresář /home/username shell /bin/sh Odvážní zkusí ignorovat uid v souboru, ale vygenerují si ho nějakou posloupností (aby každý měl jiné).
find Úloha: Najděte soubory v adresáři /etc, které byly změněny během posledního týdne.
Úvod do UNIXu, cvičení 9 find, grep, sed, expr...
find Úloha: Najděte všechny soubory v adresáři /usr/lib (včetně podadresářů), které obsahují v názvu dva znaky a. Úloha: Vypište setříděně (nejvíce výskytů na začátku) počet souborů jednotlivých typů v adresáři /usr/bin (opět včetně podadresářů). Pro určení typu použijte příkaz file.
sed Úloha: Sečtěte dohromady všechna UID v /etc/passwd pomocí expr. Úloha: Napište skript, který v nějakém adresáři (opět včetně podadresářů) změní ve všech souborech s příponou.c řetězec 'int' na 'long'.
Struktura e-mailu From <adresa> <datum> Klíč1: Hodnota Klíč2: Hodnota... KlíčN: Hodnota Obsah mailové zprávy
sed Úloha: Vypište soubor od konce (tj. obraťte pořadí řádků, pořadí znaků na řádce zachovejte).
Úvod do UNIXu, cvičení 10 Shell
seq Nestandardní nástroj seq generuje číselné posloupnosti: seq 5 1 2 3 4 5 seq 3 6 3 4 5 6 seq 10 5 30 10 15 20 25 30 Úloha: Napište ve standardním shellu skript, který se bude chovat stejně.
seq Úloha: Nyní použijte váš hotový seq ke stažení obrázkové galerie. Obrázky jsou obvykle pojmenovány za sebou. Ukázková galerie je předpřipravena na http://www.ms.mff.cuni.cz/~sembj3am/g/
Úvod do UNIXu, cvičení 11 Shell
Drobné varování i=1 cat /etc/passwd while read X; do i=`expr $i + 1` done echo $i
Drobné varování while read X < /etc/passwd; do echo $X done while read X; do echo $X done < /etc/passwd
Přesměrování echo a 3>&2 2>&1 1>&3
Přesměrování IFS= : cat /etc/passwd while read Y Y c Y; do... read Z < /dev/tty... done;
Dočasné soubory PID=$$... echo bla > /tmp/lala.$pid...
which Nástroj which vypíše jméno souboru, který se spustí, pokud napíšeme nějaký příkaz (postupně prochází $PATH a hledá ve všech adresářích daný soubor). which cp /usr/bin/cp Úloha: Napište ve standardním shellu (či v awk) skript, který se bude chovat stejně.
Hromadné přejmenování Úloha: Napište skript, který hromadně přejmenuje soubory s příponou.jpg na soubory s příponou.png, tedy například abc.jpg -> abc.png