Vlastnictví souborů a přístupová práva Z hlediska ochrany souboru jsou důležité tyto informace: - Každý soubor v operačním systému Unix je vlastněn některým uživatelem. - Každý soubor je také spojen se skupinou uživatelů. - Každý soubor má přístupová práva (pro která se někdy používá označení privilegia). Jedná se o mechanismus, jenž určuje, kdo může k danému souboru přistupovat, kdo může spouštět dané programy a podobně. Každé z přístupových práv může být odděleně přiřazeno vlastníku souboru, skupině nebo všem uživatelům operačního systému. Přístupová práva: (příznaky) pro soubor r (read) soubor je povoleno číst w (write) do souboru je povoleno zapisovat x (execute) soubor je povoleno spustit (provést) pro adresář r je povoleno vypsat seznam souborů v adresáři; nikoli však zpřístupnit soubory v něm odkazované w do adresáře je povoleno zapisovat, tj. lze vytvářet a rušit soubory x že uživatel může zpřístupňovat soubory v adresáři v jeho podadresářích. Pokud nemá uživatel žádná práva, nemůže ani použít příkaz cd. Přístupová práva se vztahují na tři kategorie uživatelů: - vlastník souboru - ostatní uživatelé patřící do stejné skupiny, jaká je v hlavičce souboru - ostatní uživatelé Zjisteni pristupovych prav: ls -l soubor ls -ld adresar chmod přístupová práva lze zadávat číselně: 4 právo číst 2 zapisovat 1 spouštět syntaxe: chmod 741 soubor Do jiné skupiny se mohu přepnout příkazem newgrp skupina. Příkazem id zjistím, do jakých skupin se mohu přepnout. Linky - slouží k vytváření odkazů na daný soubor z jiných adresářů. (tvrdý a měkký) Tvrdý link je nerozlišitelný od odkazu na soubor, který vznikl při jeho vytvoření, měkký link představuje pouze informaci o lokalizaci souboru. Pracujeme-li s měkkým linkem, je to většině případů jako kdybychom pracovali se souborem. Syntaxe: ln -s úplné_jméno_souboru jméno_linku Systém procesů Souborový systém slouží v operačním systému k organizaci dat. Data sama o sobě postrádají smysl, pokud nemohou být interpretována nebo modifikována. V operačním systému UNIX slouží k modifikaci (a vytváření) dat systém procesů. Jelikož je UNIX víceúlohový systém, je nutné od sebe jednotlivé procesy jednoznačně rozlišit. Jádro si o běžících procesech udržuje přehled, každý proces je jednoznačně identifikován pomocí čísla PID - Process Identification. Seznam procesů v sytému lze získat programem ps. Použijeme-li ho bez argumentu, ps vypíše seznam aktivních procesů spojených s aktuálně používaným terminálem. plch@bart:~> ps PID TTY TIME CMD 25446 pts/17 00:00:00 bash 27557 pts/17 00:00:00 ps Množinu zobrazovaných procesů lze modifikovat lze vymezit pomocí následujících přepínačů. Přepínač -a zobrazí informace o všech aktivních procesech řízených nějakým terminálem. Nadto přepínač -e zobrazí informace úplně o všech procesech. Procesy běžící pod efektivním uživatelem lze zobrazit pomocí přepínač -u. Běh procesů na pozadí Všechny dosud používané příklady běžely na popředí, to znamená, že v době běhu procesu uživatel nemohl používat shell. Proces lze spustit na pozadí uvedením metaznaku ampersand "&" na konci příkazu spuštění. plch@bart:~> xbiff& [1] 28354 Bezprostředně po spuštění příkazu na pozadí shell uživateli zobrazí informační řádek. První číslo v hranatých závorkách je identifikátor procesu v rámci aktuálního shellu (číslo úlohy). Druhé číslo je PID procesu. Na process spuštěný v shellu se lze při práci odkazovat oběma čísly. Příkaz jobs vypíše běžící úlohy a jejich stav. Přesun na pozadí a na popředí Může se stát, že spustíme proces, který běží nad očekávání dlouho a chceme ho přesunou na pozadí. Shell umožňuje pomocí CTRL+z pozastavit chod programu. plch@bart:~> xbiff [1]+ Stopped xbiff plch@bart:~> ps -o pid,s,cmd PID S CMD 27686 S -bash 28466 T xbiff 28504 R ps -o pid,s,cmd K přesunu pozastaveného procesu na pozadí slouží příkaz bg. Argumentem pro příkaz bg je číslo úlohy. plch@bart:~> bg 1 [1]+ xbiff & Příkaz fg slouží k přesunu procesu na popředí. Klávesová zkratka CTRL+c u většiny programů způsobí okamžité přerušení jejich běhu. Zrušení (zabití) procesu se provede příkazem kill PID, případně kill -9 PID. (-9 signál, který zruší každý proces, má-li k tomu uživatel oprávnění.) Příkaz ke zrusení úlohy se používá se následujícím způsobem: kill %1 Při odhlášení jsou automaticky všechny řádné procesy zrušeny. Pokud chceme, aby proces běžel i po odhlášení, použijeme například příkaz at nebo nohup (zde je nutné zopakovat prosbu o nepřetěžování serverů vašimi procesy a o akademickém poslání univerzitní sítě). Přesměrování a roury Téměř všechny obslužné programy v UNIXu jsou koncipovány jako filtry. Tj. při práci přetvářejí vstupní data na výstup. Vstupní data jsou obvykle zadávána pomocí terminálu, výstup je tisknut na obrazovku. V UNIXu existují ustálená označení pro standardní vstup - klávesnici terminálu, standardní výstup - obrazovku terminálu a stndardní chybový výstup. Pro přesměrování vstupu a výstupů lze použít metaznaky "<", ">" a ">>". Jak ukládat výstup (>) $ls > soubor (pokud soubor existuje, bude přepsán) (>>) přidání přesměrování standardního chybového hlášení 2> přesměrování výstupu a chybových hlášení &> /dev/null Soubor /dev/null má v operačním systému Unix speciální význam. Představuje černou díru, do které se ztratí jakékoliv množství informací, aniž by například hrozilo, že se zaplní vás pevný disk. Zřetězení obslužných programů pomocí roury Chceme, aby jeden program pracoval přímo s výstupem jiného programu. (du - zobrazuje, kolik každý soubor v pracovním adresáři obsazuje bloků sort - setřízení -n setřiď pomocí numerického pořadí -r setřiď v obráceném pořadí - největší na začátek) $ du | sort -rn spojení dvou filtrů se provádí pomocí roury (pipe) | (řídí tok dat) spojení více filtrů pomocí rour - kolona Př: cmd1 | cmd2 | cmd3 w | grep pumprdlik | wc -l UNIX - víceuživatelský systém Kdo je s námi v systému přihlášen a co dělá zjistíme zadáním: who - kdo a kde who am i w [-f] [uživatelské jméno] 9:56am up 165 days, 18:00, 30 users, load average: 0.05, 0.03, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 - 25Sep 1 27days 22:30m 22:27m vmware root pts/1 - 25Sep 1 11days 0.13s 0.13s bash root pts/6 - Thu 6pm 3days 0.04s 0.04s bash zriha pts/7 - 4Oct 1 18days 0.23s 0.10s bash Příkaz w zobrazuje informace o momentálních uživatelích operačního systému a informace o tom, co dělají. Každý řádek obsahuje informace o uživateli, například kdy se přihlásil. Kolonka JCPU ukazuje celkový čas procesoru, který uživatel spotřeboval, zatímco kolonka PCPU ukazuje celkový čas procesoru spotřebovaný jejich momentálně běžící úlohou. Jestliže u příkazu w uvedete volbu f, pak se zobrazí i vzdálený systém, ze kterého je daný uživatel přihlášen. K interaktivní komunikaci slouží příkaz talk uživatel@stroj. Odpovíme také příkazem talk uživatel@stroj. Ukonční například pomocí CTRL+c. Nechceme-li být při práci vyrušování zprávami, zakážeme zobrazování přijímaných zpráv příkazem mesg n, opětné povolení mesg y. Příkaz finger vám umožní získat informace o ostatních uživatelích vašeho systému nebo o uživatelích sítě Internet. finger [-slpm] [user][@machine] Pomocí příkazu finger můžete získat informace o lokálním uživateli (například sam), o jiném počítači (například @elanor.sci.muni.cz), informace o uživateli vzdáleného počítače (například sam@elanor.sci.muni.cz) nebo informace o lokálním počítači (neuvede se žádný parametr). Použijete-li u příkazu finger volbu -s, pak se vám vždy zobrazí stručný výpis (stejný, který obdržíte, když program finger použijete k získání informací o počítači) a pokud použijete volbu -l, zobrazí se vám vždy kompletní výpis (i tehdy, když program finger použijete k získání informací o počítači). Po zadání volby -p se nezobrazí informace ze souborů .forward, .plan a .project. Zadáte-li volbu -m a žádáte-li pouze informace o uživateli, pak se vám zobrazí pouze přihlašovací jméno. Soubory .plan a .project Jedná se o soubory, které jsou uloženy v domovském adresáři uživatele a jejichž obsah se zobrazí pokaždé, když je na daného uživatele aplikován program finger. Soubory .plan a .project si můžete vytvořit sami - jediné omezení spočívá v tom, že ze souboru .project se zobrazuje pouze první řádek. Dále platí, že každý, kdo chce aplikovat program finger musí mít možnost procházet vaším domovským adresářem a každý musí být schopen číst soubory .plan a .project. Práce s disketou S disketami se pracuje pomocí balíku mtools (viz. man mtools). Základní příkazy pro práci s disketami jsou: mdir a: Vypíše obsah aktuálního adresáře na disketě mcopy soubor a: Zkopíruje soubor do aktuálního adresáře na disketě mcd a: Změní aktuální adresář na disketě mdel a:soubor Smaže soubor na disketě mdeltree a:adresar Smaže adresář na disketě Diskety není třeba "přimontovávat" ani "odmontovávat" příkazem mount. Pro připojování USB Flash disků byl v učebně zprovozněn automounter, jsou přístupné podle následující tabulky. číslo diskového oddílu adresář 1 (/dev/sda1) /media/usb 1 (/dev/sda) /media/usb0 1 (/dev/sda1) /media/usb1 2 (/dev/sda2) /media/usb2 3 (/dev/sda3) /media/usb3 4 (/dev/sda4) /media/usb4 Použití Automounter funguje tak, že dané zařízení připojí až poté, co k němu přistoupíte. Dokud nevstoupíte např. do /media/usb adresář se Vám vůbec nevypíše. Po jedné minutě nečinnosti bude disk automaticky odpojen. Disk bude odpojen jen v případě, že jsou dokončeny všechny operace čtení/zápis. Pokud se budete nacházet v adresáři /media/usb, disk se neodpojí dokud z tohoto adresáře neodejdete. Před vyjmutím flash fisku z USB dávejte prosím pozor, jestli je disk už odmountovaný. Předejdete tím ztrátě vlastních dat. Pokud se vám nepodaří flash disk hned zpřístupnit, tak počkejte ještě několik vteřin. Flash disk se může také připojit jako zařízení /dev/sd{b,c,d}, v tomto případě je třeba použít adresář /media/usb{b,c,d}. Všechny varianty možností připojení jsou uvedeny /etc/auto.media. Pomocí příkazu dmesg si můžete zkontrolovat, jako které zařízení se flash disk připojil. CD-ROM disky jsou připojovány také pomocí automounteru. K připojení je potřeba vstoupit do adresáře /media/cdrom. Příkazové prostředí Unixu: Po přihlášení do systému automaticky pracujete s příkazovým interpreterem (shellem), který přijímá příkazy, spouští programy a ovládá prostředí Vaší seance. (Zde bash), uživatel má od administrátora nastaveno, který shell je po přihlášení spuštěn). Příkazové interprety mají svůj vlastní programovací jazyk a programy napsané v tomto jazyce se nazývají skripty příkazového interpretu (shell scripts). Zjištění příkazového interpretu: $echo $SHELL Shell bash hledá při startu v domovském adresáři právě přihlášeného uživatele soubory .bash_profile, .bash_login, .profile, pokud existují tak je v tomto pořadí načítá a vykonává příkazy v nich obsažené. (Soubor .bash_profile je obdoba souboru autoexec.bat v DOSu). Systémové proměnné Nezávisle na shellu se Vaše prostředí sestává z proměnných, jejichž hodnoty určují, jak se systém chová. Vypis nastavení konkrétní proměnné: echo $PATH Všimněte si, že jsme před jméno systémové proměnné uvedli znak $. Jedině tak lze zjistit hodnotu systémové proměnné. Pokud byste znak dolaru neuvedli, dostali byste následující výpis: $ echo PATH PATH Existuje další důležitý příkaz, pomocí kterého lze získat informace o prostředí. Tímto příkazem je env. Po zadání příkazu env (také příkazu set) se vám zobrazí seznam všech systémových proměnných. Jste-li uživateli systému X Window, pak bude tento seznam velmi dlouhý, proto používejte příkaz env | more. Systémová proměnná PATH obsahuje seznam adresářů oddělených dvojtečkou, ve kterých systém automaticky vyhledává spustitelné programy. Systémová proměnná PATH existuje hlavně proto, abychom nemuseli při každém spouštění nějakého programu zadávat celou cestu k tomuto programu. Zadáte-li tedy jakýkoliv příkaz, prohledá příkazový procesor všechny adresáře uvedené v systémové proměnné PATH. Když jej najde, spustí jej, a pokud ne, vypíše následující zprávu: command not found Pozor, aktuální adresář (pracovní adresář) se neprohledává automaticky. Přidání adresáře do cesty: $export PATH=$PATH:/cesta Prostřednictvím jisté proměnné prostředí můžete také specifikovat, jak má vypadat váš příkazový řádek. Tato proměnná prostředí má označení jako PS1. Příklad nastavení: PS1=`tty` PS1=" `hostname` `basename $PS1` `basename $SHELL`(\!) " PS1="$PS1 "'$PWD'" "" $ " export PS1 Nastavování hodnot proměnných závisí na shellu. (prom=hodnota, export prom). Př. export EDITOR=joe echo $EDITOR Používání aliasů (druhých jmen souborů) alias ll="ls -l" Příkaz definuje tzv. alias (druhé jméno) příkazu. V našem případě se jméno příkazu ll rozšiřuje a příkaz příkazového procesoru ls -l. Za předpokladu, že příkazový procesor bash přečetl uvedenou definici ve vašem konfiguračním souboru (zpravidla .bashrc), pak má příkaz ll stejný efekt jako příkaz ls -l. Přitom ušetříte polovinu stisknutých kláves. Ve skutečnosti v systému příkaz ll neexistuje, ale příkazový procesor bash jej automaticky transformuje na platný program. Zrušení aliasu se provádí příkazem unalias. Vytváření skriptů Při vytváření složitějších příkazu v shellu uživatel dříve či později narazí na potřebu uchovat je pro další použití. Skripty jsou obyčejné soubory obsahující příkazy pro shell. Má-li skript nastavené právo spouštění, uživatel jej může spustit stejným způsobem jako program. Tj. leží-li skript v adresáři, na nějž je uvedena prohledávací cesta, stačí uvést jméno skriptu. Nenachází-li se skript v prohledávací cestě, je nutné odkázat se na něj pomocí absolutní nebo relativní cesty. Ve skriptech příkazového procesoru se znak # používá k označení komentáře a příkazový procesor zbytek řádku za znakem # ignoruje. Unixovsky souborovy manager - mc (Midnight Commander) podoba se Norton Commandru, konfiguracni soubor v domovskem adresari .mc.ini, spusteni v cernobilem modu: mc -b, v barevném mc -c Ovládání MC by uživatelům znalých Norton Commandera nemělo činit žádné potíže. K ovládání je možno používat i myš (původně bylo mc zkratkou za mouseless commander, po přidání podpory pro myš byl přejmenován na midnight commander).