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).