C2110 Operační systém UNIX a základy programování -1- C2110 Operační systém UNIX a základy programování 4. lekce Petr Kulhánek kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta Masarykova univerzita, Kotlářská 2, CZ-61137 Brno C2110 Operační systém UNIX a základy programování -2- Obsah  Souborový systém II speciální znaky, kvóty, přístupová práva, diskové zařízení, USB disky, vyhledávání souborů  Procesy I proces, multitasking, základní příkazy, přesměrování, roury C2110 Operační systém UNIX a základy programování -3Souborový systém II C2110 Operační systém UNIX a základy programování -4Speciální znaky Speciální znaky v názvech souborů nebo adresářů: * - cokoliv v názvu (bez skrytých souborů) ? - jeden znak v názvu [] - rozsah (jeden znak) v názvu, př. [ajk], [a,j,k], [a-j] Rozvoj (expanzi) speciálních znaků provádí shell ještě před spuštěním samotného příkazu. Expanzi lze zabránit uvedením jména v uvozovkách nebo použitím zpětného lomítka před speciálním znakem. Příklady $ cp *.pdf Documents/ zkopíruje všechny pdf dokumenty z aktuálního adresáře do podadresáře Documents $ rm * smaže všechny soubory v aktuálním adresáři (kromě adresářů) $ mv A? Tmp/ přesune soubory s názvem začínajícím písmenem "A" a obsahujícím dva znaky do adresáře "Tmp" C2110 Operační systém UNIX a základy programování -5Speciální znaky K expanzi speciálních znaků dojde pouze tehdy, pokud existuje alespoň jeden soubor vyhovující danému předpisu: Příklady: $ cd $ echo D* Desktop Documents Downloads $ echo A* A* $ echo "D*" D* $ echo D\* D* C2110 Operační systém UNIX a základy programování -6- Kvóty Pro vaše domovské adresáře jsou nastaveny kvóty na využití diskového prostoru na diskovém oddílu wolf.wolf.inet:/export/home/. Aktuální stav zaplnění a nastavení kvót lze zjistit příkazem quota: [kulhanek@wolfn ~]$ quota -vs Disk quotas for user kulhanek (uid 18773): Filesystem blocks quota limit grace files quota limit wolf.wolf.inet:/export/home/ 1550M 1954M 2051M 20453 0 0 Aktuální využití Kvóta, kterou lze dočasně překročit. Tvrdý limit, který již nelze překročit. Překročení kvóty může vést k nefunkčnímu přihlášení pomocí grafického rozhraní. V tomto případě se přihlaste v textovém terminálu (např: Ctrl+Alt+F1) a přesuňte soubory na jiný diskový oddíl (např. dočasně do adresáře /scratch/vas_login nebo smažte nepotřebné soubory). C2110 Operační systém UNIX a základy programování -7Přístupová práva $ ls -l drwxrwxr-x 3 kulhanek lcc 4096 2008-10-13 09:57 bin/ drwx------ 2 kulhanek lcc 4096 2008-10-13 09:58 Desktop/ -rw-rw-r-- 1 kulhanek lcc 5858 2008-10-17 11:58 distance.cpp jméno souboru či adresáře/ vlastník (user) a skupina uživatelů (group) velikost (B) čas poslední změny přístupová práva Přístupová práva určují jaké operace může uživatel provádět se soubory či adresáři v souborovém systému. Přístupová práva: r možnost číst soubor vypsat obsah adresáře w možnost měnit soubor změnit obsah adresáře x možnost spuštění souboru možnost vstoupit do adresáře Každý soubor či adresář má určeného vlastníka a skupinu. Přístupová práva se uvádějí zvlášť pro vlastníka souboru, pro skupinu a ostatní uživatele. C2110 Operační systém UNIX a základy programování -8Změna přístupových práv Přístupová práva: r možnost číst soubor vypsat obsah adresáře w možnost měnit soubor změnit obsah adresáře x možnost spuštění souboru možnost vstoupit do adresáře Skupina práv: u vlastník (user) g skupina uživatelů (group) o ostatní (other) a všichni (all), právo se aplikuje na u,g,o Příklad: $ chmod u+x,g-w soubor přístupová práva drwxrwxr-x typ: soubor (-) nebo adresář (d) u g o Přidá (+) právo pro spuštění vlastníkovi a Odstraní (-) právo zápisu pro skupinu Přístupová práva souborů a adresářů může měnit vlastník souboru nebo superuživatel příkazem chmod. $ chmod permissions file1 [file2 ...] C2110 Operační systém UNIX a základy programování -9Změna vlastníka, změna skupiny Vlastníka souborů a adresářů může měnit pouze superuživatel příkazem chown. Skupinu uživatelů pro soubory a adresáře může měnit vlastník nebo superuživatel příkazem chgrp. Vlastník může použít pouze skupiny, do kterých patří (lze zjistit příkazem id). [kulhanek@wolf01 ~]$ id uid=18773(kulhanek) gid=2001(lcc) groups=2001(lcc),2027(kulhanek),2030(compchem) [kulhanek@wolf01 ~]$ ls -ld Documents/ drwxr-xr-x 9 kulhanek lcc 4096 Feb 16 2012 Documents/ [kulhanek@wolf01 ~]$ chgrp compchem Documents/ [kulhanek@wolf01 ~]$ ls -ld Documents/ drwxr-xr-x 9 kulhanek compchem 4096 Feb 16 2012 Documents/ změna skupiny $ chgrp group_name file1 [file2 ...] C2110 Operační systém UNIX a základy programování -10Diskové zařízení [kulhanek@wolf01 ~]$ df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/server1-root ext3 20G 5.9G 13G 32% / udev devtmpfs 3.9G 4.0K 3.9G 1% /dev tmpfs tmpfs 1.6G 444K 1.6G 1% /run none tmpfs 5.0M 0 5.0M 0% /run/lock none tmpfs 3.9G 12K 3.9G 1% /run/shm /dev/sda1 ext3 168M 36M 124M 23% /boot /dev/mapper/server1-scratch ext3 20G 1.9G 17G 11% /scratch /dev/mapper/server1-vbox ext3 20G 5.6G 14G 30% /win wolf.wolf.inet:/export/software/ncbr nfs 93G 60G 29G 68% /software/ncbr wolf.wolf.inet:/export/home nfs 280G 164G 102G 62% /auto/home zařízení typ souborového systému přípojný bod Přehled o využití souborových systémů, o diskových zařízeních a jejich přípojných bodech poskytuje příkaz df. ext3 – third extended filesystem (nativní souborový systém linuxu) nfs – network filesystem vfat – virtual file allocation table (souborový systém používaný MS Windows) Typy souborových systémů: C2110 Operační systém UNIX a základy programování -11USB disky [kulhanek@wolf01 ~]$ df -Th Filesystem Type Size Used Avail Use% Mounted on ................................................................................ wolf.wolf.inet:/export/home nfs 280G 164G 102G 62% /auto/home /dev/sdg1 vfat 962M 841M 122M 88% /media/B19A-1CA2 USB disky se připojují automaticky v grafickém prostředí do svazku /media. [kulhanek@wolf01 ~]$ umount /media/B19A-1CA2 Disk lze odpojit v grafickém prostředí nebo příkazem umount. Argumentem příkazu je přípojný bod zařízení. Disk lze odpojit pouze pokud není využíván (nesmí být otevřen žádný soubor, žádný proces nesmí mít jako pracovní adresář nastaven (pod)adresář z přípojného bodu včetně přípojného bodu). Přehled procesů využívajících daný adresář (přípojný bod) lze získat příkazem lsof (nebo fuser). [kulhanek@wolf01 ~]$ lsof /media/B19A-1CA2/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 31521 kulhanek cwd DIR 8,97 4096 518 /media/B19A-1CA2/GoslarFinal bash 31893 kulhanek cwd DIR 8,97 4096 518 /media/B19A-1CA2/GoslarFinal vi 32011 kulhanek cwd DIR 8,97 4096 518 /media/B19A-1CA2/GoslarFinal vi 32011 kulhanek 4u REG 8,97 12288 535 /media/B19A-1CA2/GoslarFinal/.README.swp C2110 Operační systém UNIX a základy programování -12Vyhledávání souborů K vyhledávání souborů lze použít příkaz find. $ find [where] what pokud není uvedeno, hledá se v aktuálním adresáři Vyhledávací dotaz (what) je komponován z dílčích dotazů, které je možné spojovat logickými operátory. Nejběžnější dotazy: -name pattern najde všechny soubory, které mají jméno pattern pattern může obsahovat speciální znaky: *,?,[] (při použití speciálních znaků uvádíme pattern v uvozovkách) -type c najde všechny soubory typu c (soubor, adresář, atd. výčet typů viz. man find) Logické operátory: -and levý a pravý dotaz je splněn současně -or je splněn levý nebo pravý dotaz vyhledávání je rekurzivní (výchozí stav) C2110 Operační systém UNIX a základy programování -13Vyhledávání souborů, příklady $ find /home/ -name '*.txt' $ find ~kulhanek –name '*.txt' –or –name '*.hpp' $ find –name 'D*' –and –type d v adresáři /home/ nalezne všechny soubory, které mají zakončení .txt v adresáři /home/kulhanek nalezne všechny soubory, které mají zakončení .txt nebo .hpp v aktuálním adresáři nalezne všechny podadresáře, jejichž jména začínají písmenem D C2110 Operační systém UNIX a základy programování -14Přehled příkazů Souborový systém: ls vypíše obsah adresáře pwd vypíše cestu k aktuálnímu pracovnímu adresáři cd změní aktuální pracovní adresář mkdir vytvoří adresář rmdir odstraní prázdný adresář cp zkopíruje soubor či adresář mv přesune soubor či adresář rm odstraní soubor či adresář find nalezne soubor či adresář du vypíše velikost adresáře nebo souborů stat vypíše podrobné informace o souboru či adresáři df vypíše informace o připojených diskových oddílech quota vypíše informace o nastavených kvótách pro přípojné body scp kopíruje soubory mezi počítači C2110 Operační systém UNIX a základy programování -15- Cvičení 1. Ve svém domovském adresáři vytvořte podadresář Data 2. Do adresáře Data zkopírujte obsah adresáře /home/kulhanek/Data/ včetně podadresářů 3. Nalezněte všechny soubory s koncovkou .cpp, které se nacházejí v adresáři Data (jména souborů vypište na obrazovku) 4. V adresáři /scratch/vas_login vytvořte adresář Headers 5. Do adresáře Headers zkopírujte všechny soubory z adresáře /home/kulhanek/Data/dev/src , které mají koncovkou .h 6. Do adresáře Headers přesuňte všechny soubory z adresáře /home/vas_login/Data/dev/src , které mají koncovkou .cpp 7. Jaká je velikost souboru /home/kulhanek/Data/dev/src/GraphicsSetup.cpp v B a kB 8. Ověřte, zda-li nepřekračujete kvótu nastavenou na váš domovský adresář 9. V adresáři Headers smažte všechny soubory s koncovkou .h a obsahujících slovo Graphics na začátku jména souboru 10. Smažte adresář Headers C2110 Operační systém UNIX a základy programování -16Procesy I C2110 Operační systém UNIX a základy programování -17- Procesy Proměnné Proces: pid, ppid Proces: pid, ppid Proměnné rodičovský proces dceřiný proces • Prvním spuštěným procesem po spuštění systému je proces “init” • Každý příkaz spuštěný v shellu (příkazové řádce) je procesem pid = identifikátor procesu ppid = identifikátor rodičovského procesu Proces je instance běžícího programu. V daný okamžik může na jednom fyzickém procesoru běžet jeden proces. Operační systém pak zajišťuje rychlé přepínaní běžících procesů, což vede k jejich zdánlivému souběžnému běhu (multitasking). C2110 Operační systém UNIX a základy programování -18Výpis procesů Procesy lze vypsat příkazy: top průběžně zobrazuje procesy setříděné podle zátěže procesoru (ukočení klávesou q) ps vypíše procesy běžící v daném terminálu nebo podle zadaných specifikací (ps -u user_name) pstree vypíše procesy (stromový výpis) $ ps PID TTY TIME CMD 8763 pts/5 00:00:00 bash 8852 pts/5 00:00:00 gimp 8857 pts/5 00:00:00 ps číslo procesu terminál, ve kterém proces běží spotřebovaný strojový čas jméno spuštěného příkazu C2110 Operační systém UNIX a základy programování -19Standardní proudy process (příkaz, program)standardní vstupní proud (klávesnice) standardní výstupní proud (obrazovka terminálu) standardní výstupní chybový proud (obrazovka terminálu) Vstupně-výstupní proudy slouží procesu ke komunikaci se svým okolím. Každý proces otevírá tři standardní proudy: C2110 Operační systém UNIX a základy programování -20- Přesměrování process (příkaz, program)standardní vstupní proud (klávesnice) standardní výstupní proud (obrazovka terminálu) standardní výstupní chybový proud (obrazovka terminálu) Vstupně-výstupní proudy lze přesměrovat tak, aby používaly soubory místo klávesnice či obrazovky. C2110 Operační systém UNIX a základy programování -21Přesměrování vstupu Přesměrování standardního vstupu programu my_command ze souboru input.txt. $ my_command < input.txt Přesměrování standardního vstupu programu my_command ze souboru skriptu. ....... ./my_command << EOF prvni radka textu druha radka textu treti radka textu EOF ...... značka určující konec vstupu (volí uživatel) konec vstupu, značku nesmí obklopovat mezery text, který tvorí načítaný vstup Tento způsob přesměrování je obzvláště výhodné používat ve skriptech, nicméně funguje i v příkazové řádce. Výhodou je expanze proměnných v načítaném textu. C2110 Operační systém UNIX a základy programování -22Přesměrování výstupu Přesměrování standardního výstupu programu my_command do souboru output.txt. (Soubor output.txt je vytvořen. Pokud již existuje, je jeho původní obsah smazán.) $ my_command > output.txt Přesměrování standardního výstupu programu my_command do souboru output.txt. (Soubor output.txt je vytvořen. Pokud již existuje, je výstup programu my_command připojen na jeho konec.) $ my_command >> output.txt Podobná pravidla platí pro standardní chybový výstup, v tomto případě se používají následující operátory: $ my_command 2> errors.txt $ my_command 2>> errors.txt C2110 Operační systém UNIX a základy programování -23Spojování výstupních proudů Standardní výstup a standardní chybový výstup programu my_command lze současně přesměrovat do souboru output.txt. $ my_command &> output.txt Výše uvedený postup nelze použít pro operátor >>. $ my_command &>> output.txt nefunguje Řešení: Nejdříve je nutné přesměrovat standardní výstup a poté spojit standardní chybový výstup s výstupem standardním. $ my_command >> output.txt 2>&1 $ my_command 2>&1 >> output.txt nefunguje pořadí je důležité! C2110 Operační systém UNIX a základy programování -24Roury (pípy) Roury slouží ke spojování standardního výstupu jednoho procesu se standardním vstupem jiného procesu. process 1 process 2 vstup výstup | vstup výstup chybový výstup chybový výstup $ command_1 | command_2 Použití: C2110 Operační systém UNIX a základy programování -25Roury a chybový proud Přenos standardního chybového výstupu přes rouru je možné provést po jeho spojení se standardním výstupem. process 1 process 2 vstup výstup | vstup výstup chybový výstup chybový výstup $ command_1 2>&1 | command_2 Použití: 2>&1 C2110 Operační systém UNIX a základy programování -26Příkazy pro cvičení $ cat soubor1.txt soubor2.txt $ paste soubor1.txt soubor2.txt $ wc soubor.txt $ head -15 soubor.txt $ tail -6 soubor.txt Ukázky použití: spojí obsah souborů soubor1.txt a soubor2.txt za sebe a výsledek vypíše na obrazovku spojí obsah souborů soubor1.txt a soubor2.txt vedle sebe a výsledek vypíše na obrazovku vypíše počet řádků, slov a znaků, které obsahuje soubor soubor.txt vypíše prvních 15 řádků ze souboru soubor.txt vypíše posledních 6 řádků ze souboru soubor.txt cat spojí obsah více souborů do jednoho (za sebe), případně vypíše obsah jednoho souboru paste spojí obsah více souborů do jednoho (vedle sebe) wc informace o souboru (počet řádků, slov a znaků) head vypíše úvodní část souboru tail vypíše koncovou část souboru C2110 Operační systém UNIX a základy programování -27- Cvičení 1. Vytvořte adresář Procesy ve vašem domovském adresáři 2. Do adresáře Procesy zkopírujte program (soubor) /bin/ls a prejmenujte jej na myls 3. Spusťte program myls 4. Jaké přístupová práva má soubor myls ? 5. Souboru myls odstraňte všechna práva pro spuštění. Co se stane, pokud se pokusíte program myls spustit? 6. Nalezněte všechny soubory s koncovkou .f90 , které obsahuje adresář /home/kulhanek/Data/dev/src/ , seznam souborů uložte do souboru ~/Procesy/seznam.txt 7. Kolik řádků obsahuje soubor seznam.txt ? 8. Vypište první dva řádky ze souboru seznam.txt nejdříve na obrazovku a poté do souboru dva_radky.txt 9. Vypište pouze třetí řádek ze souboru seznam.txt 10. V adresáři /proc nalezněte všechny soubory, které začínají písmeny cpu . Z výpisu odstraňte informace o nepovoleném přístupu přesměrováním chybového proudu do /dev/null