ˇ a´rka Vavrecˇkova´ S
Operacˇnı´ syste´my cvicˇenı´
ˇ a´st II: Linux C
Slezska´ univerzita v Opaveˇ Filozoficko-prˇ´ırodoveˇdecka´ fakulta ´ stav informatiky U Opava, poslednı´ aktualizace 21. cˇervna 2010
´ stavu Anotace: Tento dokument je urcˇen pro studenty druhe´ho rocˇnı´ku IVT na U informatiky Slezske´ univerzity v Opaveˇ. Obsahuje la´tku probı´ranou ve cvicˇenı´ch prˇedmeˇtu Operacˇnı´ syste´my v cˇa´sti semestru veˇnovane´ Linuxu. Probı´rana´ la´tka navazuje na prˇedmeˇt Praktikum z operacˇnı´ch syste´mu˚. Prˇedpokla´da´ se za´kladnı´ orientace v beˇzˇny´ch na´strojı´ch s graficky´m rozhranı´m v Linuxu, adresa´rˇove´ strukturˇe, zarˇ´ızenı´ch, prˇ´ıstupovy´ch opra´vneˇnı´ch a principu beˇhu procesu˚.
Operacˇnı´ syste´my cvicˇenı´ Cˇa´st II: Linux RNDr. Sˇa´rka Vavrecˇkova´, Ph.D. Dostupne´ na: http://fpf.slu.cz/˜vav10ui/opsys.html ´ stav informatiky U Filozoficko-prˇ´ırodoveˇdecka´ fakulta Slezska´ univerzita v Opaveˇ Bezrucˇovo na´m. 13, 746 01 Opava Sa´zeno v syste´mu LATEX Tato inovace prˇedmeˇtu Operacˇnı´ syste´my je spolufinancova´na Evropsky´m socia´lnı´m fondem a Sta´tnı´m rozpocˇtem CˇR, projekt cˇ. CZ.1.07/2.3.00/0 9.0197, „Posı´lenı´ konkurenceschopnosti vy´zkumu a vy´voje informacˇnı´ch technologiı´ v Moravskoslezske´m kraji“.
Prˇedmluva
Co najdeme v teˇchto skriptech ´ stavu informatiky Slezske´ Tato skripta jsou urcˇena pro studenty informaticky´ch oboru˚ na U univerzity v Opaveˇ. Ve cvicˇenı´ch prˇedmeˇtu Operacˇnı´ syste´my se v prvnı´ cˇa´sti semestru probı´rajı´ operacˇnı´ syste´my z rodiny Windows a v druhe´ cˇa´sti semestru unixove´ syste´my se zameˇrˇenı´m na Linux, tato skripta se vyuzˇ´ıvajı´ pra´veˇ v druhe´ cˇa´sti semestru. Navazujeme na obdobna´ skripta z prˇedmeˇtu Praktikum z operacˇnı´ch syste´mu˚, tedy prˇedpokla´dajı´ se jizˇ za´kladnı´ znalosti pra´ce v Linuxu (alesponˇ v graficke´m prostrˇedı´), orientace v adresa´rˇove´ strukturˇe a prˇ´ıstupovy´ch opra´vneˇnı´ch. Na to, zˇe jde o la´tku pouze pro cˇa´st semestru, se skripta mohou zda´t znacˇneˇ rozsa´hla´. Du˚vodem je zarˇazenı´ mnoha uka´zkovy´ch (rˇesˇeny´ch) prˇ´ıkladu˚ a motivacˇnı´ch (nerˇesˇeny´ch) u´kolu˚, ktere´ majı´ pomoci prˇi pochopenı´ a osvojenı´ si ucˇiva. U neˇktery´ch prˇ´ıkazu˚ jsou uvedeny take´ jejich obvykle´ vy´stupy, take´ z du˚vodu cˇasto nedostatecˇny´ch prˇ´ıstupovy´ch opra´vneˇnı´ studentu˚ v ucˇebna´ch. Neˇktere´ oblasti jsou take´ „navı´c“ (jsou oznacˇeny ikonami fialove´ barvy), ty nejsou probı´ra´ny a ani se neobjevı´ na testech – jejich u´kolem je motivovat k dalsˇ´ımu samostatne´mu studiu nebo poma´hat v budoucnu prˇi zı´ska´va´nı´ dalsˇ´ıch informacı´ dle potrˇeby v zameˇstna´nı´.
Znacˇenı´ Ve skriptech se pouzˇ´ıvajı´ na´sledujı´cı´ barevne´ ikony: • Nove´ pojmy, na´zvy souboru˚, obecne´ postupy, znacˇenı´ v prˇ´ıkazech, pouzˇ´ıvane´ symboly, apod. jsou znacˇeny modry´m symbolem v pozna´mce na okraj, ktery´ vidı´me take´ zde vpravo. • Konkre´tnı´ postupy a na´stroje (prˇ´ıkazy, programy, soubory, skripty), zpu˚soby rˇesˇenı´ ru˚zny´ch situacı´, do ktery´ch se mu˚zˇe administra´tor dostat, syntaxe prˇ´ıkazu˚ atd. jsou znacˇeny take´ modrou ikonou. iii
P $
iv
• Zelena´ je take´ ikona vyznacˇujı´cı´ sekce, ktere´ jsou opakova´nı´m ucˇiva z prˇedna´sˇek, jine´ cˇa´sti teˇchto skript nebo z prˇedchozı´ho semestru (prˇedmeˇtu Praktikum z operacˇnı´ch syste´mu˚).
O
• Zvla´sˇt’je take´ vyznacˇen text, ktery´ je obvykle vy´stupem probı´rany´ch prˇ´ıkazu˚ (vcˇetneˇ teˇch, jejichzˇ spusˇteˇnı´ vyzˇaduje vysˇsˇ´ı prˇ´ıstupova´ opra´vneˇnı´) nebo mu˚zˇe jı´t o obsah neˇktery´ch souboru˚. Barva ikony je oranzˇova´.
M
• Neˇktere´ cˇa´sti textu jsou oznacˇeny fialovou ikonou, cozˇ znamena´, zˇe jde o nepovinne´ u´seky, ktere´ nejsou probı´ra´ny (veˇtsˇinou; studenti si je mohou podle za´jmu vyzˇa´dat nebo sami prostudovat). Jejich u´cˇelem je dobrovolne´ rozsˇ´ırˇenı´ znalostı´ studentu˚ o pokrocˇila´ te´mata, na ktera´ obvykle prˇi vy´uce nezby´va´ moc cˇasu. • Fialova´ ikona se objevuje take´ u neˇktery´ch nerˇesˇeny´ch u´kolu˚. Tyto u´koly nejsou povinne´ a studenti se jimi mohou zaby´vat podle svy´ch za´jmu˚ (jsou obvykle na´rocˇneˇjsˇ´ı nezˇ jine´ u´koly). ˇ lutou ikonou jsou oznacˇeny odkazy, na ktery´ch lze zı´skat dalsˇ´ı informace o te´matu. • Z Mu˚zˇe jı´t o zpu˚soby zı´ska´nı´ na´poveˇdy, nejcˇasteˇji vsˇak u te´to ikony najdeme odkazy na internet. • Cˇervena´ je ikona pro upozorneˇnı´ a pozna´mky. Opticky (ale uzˇ ne barevneˇ) jsou odlisˇeny take´ rˇesˇene´ prˇ´ıklady a nerˇesˇene´ u´lohy. Prˇ´ıklady jsou cˇ´ıslova´ny, cˇ´ısla slouzˇ´ı k jednoduche´mu odkazova´nı´ na tyto prˇ´ıklady.
R
L
Prˇı´klad 0.1 Takto vypada´ prostrˇedı´ s prˇ´ıkladem. Cˇ´ıslo prˇ´ıkladu je 0.1.
´ koly U Ota´zky a u´koly, na´meˇty na vyzkousˇenı´, ktere´ se doporucˇuje prˇi procvicˇova´nı´ ucˇiva prova´deˇt, jsou uzavrˇeny v tomto prostrˇedı´. Pokud je v prostrˇedı´ vı´ce u´kolu˚, jsou cˇ´ıslova´ny.
Jak probı´hajı´ testy Na za´pocˇtovy´ch testech z prˇedmeˇtu˚ ty´kajı´cı´ch se operacˇnı´ch syste´mu˚ lze pouzˇ´ıvat pocˇ´ıtacˇ, a to na´poveˇdu a na´stroje beˇzˇneˇ dostupne´ ve standardnı´ instalaci dane´ho operacˇnı´ho syste´mu, ale bez prˇ´ıstupu na Internet. Nejsou dovoleny dokumenty vlastnı´ ani cizı´ vy´roby, ktere´ nejsou soucˇa´stı´ standardnı´ instalace, nelze pouzˇ´ıvat internetovy´ prohlı´zˇecˇ ani jiny´ zpu˚sob prˇ´ıstupu na externı´ zdroje informacı´.
C
v
Na stra´nka´ch prˇedmeˇtu je k dispozici orientacˇnı´ seznam ota´zek a u´kolu˚, ktere´ se mohou objevit na testu, ovsˇem v testu se mohou objevit mı´rne´ odlisˇnosti (naprˇ´ıklad v na´zvech zpracova´vany´ch souboru˚ cˇi adresa´rˇu˚, jine´ prˇepı´nacˇe prˇ´ıkazu˚, apod.). Tato skripta plneˇ pokry´vajı´ odpoveˇdi na ota´zky, ktere´ se mohou objevit v za´pocˇtove´m testu cˇ. 2 (Linux) v prˇedmeˇtu Operacˇnı´ syste´my.
Obsah
1
Textovy´ rezˇim v Linuxu 1.1 Textove´ shelly a prˇ´ıkazy . . . . . . . . . . . . . 1.1.1 Kdy, kde a jak pouzˇ´ıvat textovy´ shell . 1.1.2 Skripty . . . . . . . . . . . . . . . . . . . 1.1.3 Struktura prˇ´ıkazu˚ . . . . . . . . . . . . . 1.2 Za´stupne´ znaky . . . . . . . . . . . . . . . . . . 1.3 Na´poveˇda . . . . . . . . . . . . . . . . . . . . . 1.3.1 Jak volat o pomoc . . . . . . . . . . . . . 1.3.2 Manua´love´ stra´nky . . . . . . . . . . . . 1.3.3 Zna´m prˇ´ıkaz, chci veˇdeˇt, k cˇemu slouzˇ´ı 1.3.4 Nezna´m prˇ´ıkaz . . . . . . . . . . . . . . 1.4 Pra´ce s adresa´rˇi a soubory . . . . . . . . . . . . 1.4.1 Adresa´rˇe . . . . . . . . . . . . . . . . . . 1.4.2 Soubory . . . . . . . . . . . . . . . . . . 1.4.3 Pevne´ a symbolicke´ odkazy . . . . . . . 1.5 Prˇesmeˇrova´nı´ a filtry . . . . . . . . . . . . . . . 1.5.1 Smeˇrova´nı´ a deskriptory . . . . . . . . . 1.5.2 Filtry . . . . . . . . . . . . . . . . . . . . 1.5.3 Prohleda´va´nı´ . . . . . . . . . . . . . . . 1.5.4 Automaticke´ zpracova´nı´ . . . . . . . . . 1.6 Mozˇnosti vytvorˇenı´ nove´ho souboru . . . . . . 1.7 Dalsˇ´ı prˇ´ıkazy . . . . . . . . . . . . . . . . . . . . 1.8 Specia´lnı´ znaky pro uvozova´nı´ . . . . . . . . . 1.9 Promeˇnne´ . . . . . . . . . . . . . . . . . . . . . 1.9.1 Za´klady pra´ce s promeˇnny´mi . . . . . . 1.9.2 Vy´pocˇty . . . . . . . . . . . . . . . . . .
vi
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1 3 4 5 5 5 6 9 11 13 13 15 17 17 17 19 22 26 28 29 30 32 32 35
vii
2
3
Skripty a programova´nı´ 2.1 Konfiguracˇnı´ a dalsˇ´ı syste´move´ soubory 2.2 Skripty . . . . . . . . . . . . . . . . . . . 2.2.1 Co je to skript . . . . . . . . . . . 2.2.2 Parametry a na´vratove´ hodnoty 2.2.3 Dalsˇ´ı mozˇnosti pouzˇitı´ skriptu˚ . 2.3 Programova´nı´ v shellu . . . . . . . . . . 2.3.1 Jednoduche´ propojenı´ prˇ´ıkazu˚ . 2.3.2 Prˇ´ıkazy pro podmı´nky a cykly . 2.3.3 Jednoduche´ testova´nı´ . . . . . . 2.3.4 Pole . . . . . . . . . . . . . . . . . 2.4 Prˇeklad programu˚ . . . . . . . . . . . . . 2.5 Dalsˇ´ı na´stroje . . . . . . . . . . . . . . . 2.5.1 Aliasy . . . . . . . . . . . . . . . 2.5.2 Konverze textovy´ch souboru˚ . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
´ lohy prˇi spra´veˇ U 3.1 Uzˇivatele´ a skupiny . . . . . . . . . . . . . . . 3.1.1 Informace o uzˇivatelı´ch . . . . . . . . 3.1.2 Vlastnosti u´cˇtu˚ a skupin . . . . . . . . 3.1.3 Prˇ´ıstupova´ opra´vneˇnı´ . . . . . . . . . 3.1.4 Navysˇova´nı´ prˇ´ıstupovy´ch opra´vneˇnı´ 3.2 Procesy a u´lohy . . . . . . . . . . . . . . . . . 3.2.1 Prˇ´ıkazy pro pra´ci s procesy . . . . . . 3.2.2 Skupiny a relace procesu˚ . . . . . . . ´ lohy a multitasking . . . . . . . . . . 3.2.3 U 3.2.4 Komunikace procesu˚ . . . . . . . . . . 3.2.5 Pla´nova´nı´ spousˇteˇnı´ procesu˚ . . . . . 3.3 Spra´va zarˇ´ızenı´ . . . . . . . . . . . . . . . . . 3.3.1 Pameˇt’ova´ me´dia . . . . . . . . . . . . 3.3.2 Prˇipojova´nı´ a odpojova´nı´ pameˇtı´ . . . 3.3.3 Program fdisk . . . . . . . . . . . . . 3.3.4 Hlavnı´ a vedlejsˇ´ı cˇ´ıslo zarˇ´ızenı´, udev 3.4 Moduly ja´dra . . . . . . . . . . . . . . . . . . 3.5 Operacˇnı´ pameˇt’ . . . . . . . . . . . . . . . . . 3.6 Sı´t’ . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
37 37 38 38 39 40 40 40 41 44 45 46 47 47 48
. . . . . . . . . . . . . . . . . . .
49 49 49 52 55 56 59 59 61 62 65 67 70 70 72 76 77 78 79 80
viii
4
Nasazenı´ syste´mu 4.1 Pokrocˇile´ mechanismy rˇ´ızenı´ prˇ´ıstupu . . . 4.1.1 POSIX ACL . . . . . . . . . . . . . . 4.1.2 Atributy . . . . . . . . . . . . . . . . 4.1.3 PAM . . . . . . . . . . . . . . . . . . 4.1.4 Capabilities (kvalifikace) . . . . . . . 4.1.5 Chra´neˇne´ prostrˇedı´ pro beˇh procesu 4.2 Beˇh syste´mu . . . . . . . . . . . . . . . . . . 4.2.1 Inicializace syste´mu a proces init . ´ rovneˇ beˇhu . . . . . . . . . . . . . 4.2.2 U 4.3 Logova´nı´ provozu . . . . . . . . . . . . . . . 4.3.1 Vstup syslogu . . . . . . . . . . . . . 4.3.2 Filtrova´nı´ vstupu . . . . . . . . . . . 4.3.3 Vy´stup syslogu . . . . . . . . . . . . 4.4 Firewall . . . . . . . . . . . . . . . . . . . . . 4.5 Instalace aplikacı´ . . . . . . . . . . . . . . . 4.5.1 Bina´rnı´ a zdrojove´ balı´cˇky . . . . . . 4.5.2 Instalace ze zdrojovy´ch ko´du˚ . . . . 4.6 Bezpecˇnost syste´mu . . . . . . . . . . . . . . 4.7 Dalsˇ´ı na´stroje pro spra´vu . . . . . . . . . . .
Literatura
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
85 85 85 87 88 90 90 91 91 92 94 94 95 97 98 99 100 103 104 106 107
Kapitola
1
Textovy´ rezˇim v Linuxu Tato kapitola je u´vodem do spra´vy operacˇnı´ch syste´mu˚ s ja´drem GNU/Linux (da´le Linux), veˇtsˇina postupu˚ s mı´rnou modifikacı´ platı´ i pro jine´ unixove´ (unix-like) syste´my. Podı´va´me se prˇedevsˇ´ım na pra´ci se shellem. V unixovy´ch syste´mech vcˇetneˇ Linuxu je mozˇne´ pouzˇ´ıvat neˇkolik ru˚zny´ch shellu˚. My se zde budeme veˇnovat pouze shellu bash – Bourne Again Shell.
1.1 1.1.1
Textove´ shelly a prˇı´kazy Kdy, kde a jak pouzˇı´vat textovy´ shell
V unixovy´ch syste´mech vcˇetneˇ Linuxu ma´me vzˇdy mimo graficke´ prostrˇedı´ mozˇnost prova´deˇt ru˚zne´ operace take´ v textove´m rezˇimu pomocı´ prˇ´ıkazu˚. Tento zpu˚sob pra´ce se syste´mem se mu˚zˇe zda´t nepohodlny´ (a proto ho spousta uzˇivatelu˚ ani moc nepouzˇ´ıva´), ale je uzˇitecˇny´, pokud • chceme operace prova´deˇt efektivneˇ (nemusı´me se dosta´vat do urcˇite´ho okna s nastavenı´m prˇes ru˚zna´ menu a jina´ okna, ma´me vsˇechno „pohromadeˇ“, ru˚zna´ nastavenı´ prova´dı´me na jednom mı´steˇ, v okneˇ termina´lu nebo konzoly), • chceme automatizovat a zrychlit urcˇite´ operace (pro cˇasto pouzˇ´ıvane´ sledy prˇ´ıkazu˚ napı´sˇeme skript, ten vzˇdy jen spustı´me), hodı´ se take´ tehdy, kdyzˇ tata´zˇ nastavenı´ prova´dı´me na vı´ce zarˇ´ızenı´ch, • chceme, aby urcˇite´ prˇ´ıkazy a programy spolupracovaly formou prˇeda´va´nı´ vstupu˚ a vy´stupu˚, • nemu˚zˇeme najı´t v graficke´m prostrˇedı´ mı´sto, kde se urcˇita´ veˇc nastavuje (v mnoha distribucı´ch je graficke´ prostrˇedı´ poneˇkud upraveno, navı´c jsou vy´razne´ rozdı´ly mezi KDE/GNOME/XFce/atd.), 1
TEXTOVE´ SHELLY A PRˇI´KAZY
1.1
2
• urcˇity´ program nepracuje v graficke´m prostrˇedı´ podle nasˇich prˇedstav, • ma´me alergii na graficka´ prostrˇedı´, atd. Kdyzˇ zada´va´me prˇ´ıkazy, pracujeme vzˇdy s urcˇity´m shellem. Shell je prˇ´ıkazovy´ interpret, je to prˇedevsˇ´ım program (rozhranı´), ktery´ slouzˇ´ı ke spousˇteˇnı´ jiny´ch programu˚, a to prˇedevsˇ´ım v textove´m rezˇimu. Pokud ma´me spusˇteˇno graficke´ prostrˇedı´, dostaneme se do shellu spusˇteˇnı´m konzoly (obvykle je v menu tlacˇ´ıtka obdobne´ho tlacˇ´ıtku Start ve Windows, za´visı´ na pouzˇ´ıvane´m desktopove´m prostrˇedı´) nebo spusˇteˇnı´m urcˇity´ch programu˚ (naprˇ´ıklad xterm). Pu˚vodnı´ shell v Unixu byl Bourne Shell (vznikl roku 1978 a oznacˇoval se jednodusˇe sh), jehozˇ autor je Stephen Bourne. O neˇco pozdeˇji (v dobeˇ prˇepisu Unixu do jazyka C) vznikl jako alternativa C Shell (oznacˇoval se csh). Zatı´mco Bourne Shell byl urcˇen spı´sˇe pro
psanı´ skriptu˚ a umozˇnˇoval lepsˇ´ı spolupra´ci programu˚ (vcˇetneˇ smeˇrova´nı´), C Shell hodneˇ inspirovany´ jazykem C se orientoval hlavneˇ na interaktivnı´ pra´ci prˇ´ımo v prˇ´ıkazove´m rˇa´dku (naprˇ´ıklad pouzˇ´ıva´nı´ historie pomocı´ specia´lnı´ch prˇ´ıkazu˚) a take´ prˇinesl pokrocˇilejsˇ´ı spra´vu u´loh. V soucˇasne´ dobeˇ se uzˇ nesetka´me prˇ´ımo s Bourne Shellem a C Shellem, ale spı´sˇe s jejich potomky:1 • Toronto C Shell (tcsh) je rozsˇ´ırˇenı´ csh o dalsˇ´ı mozˇnosti, naprˇ´ıklad pouzˇ´ıva´nı´ sˇipek prˇi pra´ci s historiı´ prˇ´ıkazu˚, tcsh take´ odstranil neˇktere´ chyby souvisejı´cı´ s cˇinnostı´ ve skriptu, ktere´ se vyskytovaly v csh, je obvykle nainstalova´n v adresa´rˇi /bin/tcsh nebo /usr/bin/tcsh nebo /usr/local/bin/tcsh (za´lezˇ´ı na distribuci), • Korn Shell (ksh) – syntaxe prˇ´ıkazu˚ odpovı´da´ Bourne Shellu, ale jinak veˇtsˇinu vlastnostı´ prˇejal z tcsh, jde vlastneˇ o hybrid shellu˚ sh a tcsh, je nainstalova´n v adresa´rˇi /bin/ksh nebo /usr/bin/ksh, • Bourne Again Shell (bash) je nejobvyklejsˇ´ım shellem v Linuxu a je velmi podobny´ ksh (je jednodusˇsˇ´ı, naprˇ´ıklad oproti ksh neobsahuje podporu raciona´lnı´ch cˇ´ısel a vı´cedimenziona´lnı´ch polı´), je nainstalova´n v /bin/bash nebo /usr/bin/bash nebo /usr/local/bin/bash, • Debian Almquist Shell (dash) je potomkem shellu ash (Almquist Shell) ze syste´mu FreeBSD, jak na´zev napovı´da´, mu˚zˇeme se s nı´m setkat u Debianu a jeho potomku˚ (vcˇetneˇ Ubuntu); je podobny´ shellu bash, ale mı´rneˇ osekany´ (neˇktere´ vlastnosti shellu bash nepodporuje) a rychlejsˇ´ı, • Z Shell (zsh) je naopak vybaveneˇjsˇ´ı nezˇ bash, a to smeˇrem k veˇdecky´m vy´pocˇtu˚m (je srovnatelny´ spı´sˇe s shellem ksh). V Linuxu je vzˇdy (nebo te´meˇrˇ vzˇdy) nainstalova´n shell bash, a kromeˇ neˇho i neˇkolik dalsˇ´ıch. Seznam pouzˇitelny´ch shellu˚ (teˇch, ktere´ ma´me k dispozici) je v souboru /etc/shells. Mezi shelly se prˇepı´na´me prˇ´ıkazem chsh (je to zkratka z CHange SHell). 1
Peˇkne´ porovna´nı´ shellu˚ (dokonce vcˇetneˇ Prˇ´ıkazove´ho rˇa´dku ve Windows) najdeme naprˇ´ıklad na stra´nce http://en.wikipedia.org/wiki/Comparison of command shells.
P
1.1
TEXTOVE´ SHELLY A PRˇI´KAZY
3
Prˇı´klad 1.1 Uka´zˇeme si pouzˇitı´ prˇ´ıkazu chsh. spustı´me prohlı´zˇecˇ na´poveˇdy pro prˇ´ıkaz chsh, zjistı´me si syntaxi prˇ´ıkazu, tedy jake´ parametry podporuje, program man ukoncˇ´ıme stiskem kla´vesy Q ,
man chsh
(„l“ jako „list“) vypı´sˇe seznam shellu˚, ktere´ je mozˇne´ si nastavit, tedy vypı´sˇe obsah souboru /etc/shells,
chsh -l
pra´veˇ jsme svu˚j login shell (tj. shell spousˇteˇny´ prˇi nasˇem prˇihlasˇova´nı´) nastavili na Z Shell, zmeˇna se projevı´ bud’ po restartu konzoly nebo po odhla´sˇenı´/prˇihla´sˇenı´.
chsh -s /bin/zsh
Pokud je shell, ktery´ chceme takto zapnout, nainstalova´n, ale prˇitom nenı´ uveden v souboru ´ pravou tohoto souboru /etc/shells, nebude to fungovat a zobrazı´ se chybove´ hla´sˇenı´. U mu˚zˇe totizˇ administra´tor zaka´zat pouzˇ´ıva´nı´ teˇch shellu˚, ktere´ nepovazˇuje za bezpecˇne´ (prosteˇ jejich rˇa´dky vymazˇe), resp. povolit pouze konkre´tnı´ shelly, ktere´ sa´m urcˇ´ı.
P
Dalsˇ´ı mozˇnou prˇ´ıcˇinou selha´nı´ prˇ´ıkazu je zada´nı´ nespra´vne´ cesty k souboru shellu (jde prˇece o program), zde stacˇ´ı zjistit, kde konkre´tneˇ je shell nainstalova´n.
Z graficke´ho rezˇimu (obvykle to by´va´ neˇktere´ z desktopovy´ch prostrˇedı´ KDE nebo GNOME) spustı´me neˇktery´ termina´l nebo konzolu (naprˇ´ıklad konsole nebo xterm – program prˇedstavujı´cı´ rozhranı´ pro zada´va´nı´ prˇ´ıkazu˚, obvykle mu˚zˇeme mı´t najednou spusˇteˇno vı´ce shellu˚ – relacı´ a prˇepı´nat se mezi nimi pomocı´ za´lozˇek). V KDE by´vajı´ termina´ly a konzole dosazˇitelne´ prˇes nabı´dku K , menu Termina´ly (prˇ´ıpadneˇ K ï Spustit ï napı´sˇeme konsole nebo jiny´ na´zev termina´lu cˇi konzole). V modernı´ch unixovy´ch syste´mech vcˇetneˇ Linuxu ma´me souborove´ manazˇery, kterˇ´ı na´m usnadnˇujı´ pra´ci prˇedevsˇ´ım prˇi operacı´ch s adresa´rˇi a soubory. Jsou to naprˇ´ıklad Midnight Commander (spousˇtı´ se prˇ´ıkazem mc) pracujı´cı´ v konzoli (a tedy ve ktere´koliv distribuci s jaky´mkoliv graficky´m prostrˇedı´m), Konqueror v desktopove´m prostrˇedı´ KDE, Nautilus v desktopove´m prostrˇedı´ GNOME, atd.
1.1.2
Skripty
Skripty (skriptove´ soubory) jsou textove´ spustitelne´ soubory, ktere´ pro sve´ spusˇteˇnı´ potrˇebujı´ interpret (trˇeba neˇktery´ shell). Soubory se skripty obvykle mı´vajı´ bud’ prˇ´ıponu SH, a nebo jsou bez prˇ´ıpony (ale mu˚zˇeme se setkat i s prˇ´ıponou TXT, je to celkem jedno). Kazˇdy´ skript je psa´n vzˇdy pro urcˇity´ shell nebo programovacı´ jazyk (naprˇ´ıklad bash nebo perl) a v jine´m nemusı´ fungovat. Proto cˇasto by´va´ na prvnı´m rˇa´dku skriptu identifikace shellu. Tento rˇa´dek vzˇdy zacˇ´ına´ dvojicı´ znaku˚ #!, pokud ovsˇem se ve skriptu nacha´zı´. Prˇı´klad 1.2 Prvnı´ rˇa´dek skriptu mu˚zˇe vypadat trˇeba takto:
$
$
ZA´STUPNE´ ZNAKY
1.2
4
• #!/usr/bin/tcsh znamena´, zˇe skript ma´ by´t interpretova´n shellem Toronto C Shell, • #!/usr/bin/bash urcˇuje skript s prˇ´ıkazy shellu Bourne Again Shell, • #!/usr/bin/perl (adresa mu˚zˇe by´t jina´, za´lezˇ´ı na umı´steˇnı´ spustitelne´ho programu perl) je skript psany´ v programovacı´m jazyce Perl.
Aby bylo mozˇne´ skript spousˇteˇt v textove´m rezˇimu napsa´nı´m jeho na´zvu, musı´ by´t oznacˇen jako spustitelny´, tj. je trˇeba nastavit prˇ´ıznak x v prˇ´ıstupovy´ch opra´vneˇnı´ch. V opacˇne´m prˇ´ıpadeˇ musı´me skript spousˇteˇt jako parametr interpretacˇnı´ho programu (naprˇ´ıklad bash soubor.sh), ale i tak je vhodne´ tento soubor oznacˇit jako spustitelny´ nastavenı´m prˇ´ıslusˇne´ho prˇ´ıznaku.
1.1.3
Struktura prˇı´kazu˚
Prˇ´ıkazy se skla´dajı´ z teˇchto cˇa´stı´: na´zev prˇı´kazu nebo prˇ´ıpadneˇ na´zev spustitelne´ho souboru, ktery´ tady pouzˇ´ıva´me jako prˇ´ıkaz, mu˚zˇe obsahovat i cestu, v opacˇne´m prˇ´ıpadeˇ je hleda´n v adresa´rˇ´ıch uvedeny´ch v prˇ´ıslusˇne´ promeˇnne´ prostrˇedı´ (nehleda´ se v pracovnı´m adresa´rˇi, proto kdyzˇ se pra´veˇ tam nacha´zı´, pı´sˇeme ./na ´zev pr ˇı ´kazu),
P
volby (prˇepı´nacˇe) zacˇ´ınajı´cı´ obvykle znakem pomlcˇka, ve veˇtsˇineˇ Unixovy´ch syste´mu˚ je mu˚zˇeme „shrnout“ za jedinou pomlcˇku (bez mezer samozrˇejmeˇ), pokud jsou jednopı´smenne´ (volby delsˇ´ı nezˇ jedno pı´smeno musı´me psa´t kazˇdou zvla´sˇt’, kazˇda´ z nich bude mı´t vlastnı´ pomlcˇku), volby obvykle rˇ´ıdı´ a uprˇesnˇujı´ prˇ´ıkaz; existujı´ i „vı´cepı´smenne´“ volby (naprˇ´ıklad velmi uzˇitecˇna´ je volba --help), aby se odlisˇily od jednopı´smenny´ch, u neˇktery´ch prˇ´ıkazu˚ zacˇ´ınajı´ dveˇma pomlcˇkami, argumenty nezacˇ´ınajı´ pomlcˇkou, obvykle prˇ´ıkazu rˇ´ıkajı´, se ktery´mi daty ma´ pracovat, naprˇ´ıklad na´zvy souboru˚. Naprˇ´ıklad u prˇ´ıkazu ls -la nejaky_adr je na´zvem rˇeteˇzec ls, volby jsou l, a (jednopı´smenne´, proto je mu˚zˇeme napsat za jedinou pomlcˇku), argument je adresa´rˇ nejaky_adr.
Interaktivnı´ prˇ´ıkazy (komunikujı´cı´ s uzˇivatelem, naprˇ´ıklad filtry pro stra´nkova´nı´ v textu) cˇasto pro sve´ ukoncˇenı´ vyzˇadujı´ stisknutı´ kla´vesy q . Termina´l nebo konzolu lze ukoncˇit prˇ´ıkazem exit nebo prˇ´ıpadneˇ zavrˇenı´m okna konzoly. Pozna´mka: Unixove´ syste´my jsou case-sensitive, tedy rozlisˇujı´ mala´ a velka´ pı´smenka, na cozˇ je trˇeba dba´t nejen u zada´va´nı´ na´zvu˚ prˇ´ıkazu˚, ale i u na´zvu˚ souboru˚ a adresa´rˇu˚.
$
L
NA´POVEˇDA
1.3
1.2
5
Za´stupne´ znaky
Take´ v Unixu pouzˇ´ıva´me prˇi pra´ci se soubory a adresa´rˇi za´stupne´ znaky, ma´me jich dokonce vı´ce nezˇ ve Windows. Jsou to:
P
* – jaky´koliv pocˇet ktery´chkoliv znaku ˚ , zde navı´c bereme v u´vahu, zˇe prˇ´ıpona souboru a tecˇka prˇed nı´ jsou soucˇa´stı´ na´zvu souboru, a tedy * mu˚zˇe reprezentovat i tecˇku, ? – ktery´koliv znak, a to pra´veˇ jeden, vcˇetneˇ tecˇky v na´zvu, [znaky] – jeden ze znaku ˚ uvedeny´ch v seznamu znaky, naprˇ´ıklad [ABa] znamena´, zˇe
na to mı´sto lze dosadit jeden ze znaku˚ A, B, a; pokud chceme reprezentovat delsˇ´ı sled znaku˚, mu˚zˇeme to udeˇlat takto: [A-Z] znamena´ vsˇechna velka´ pı´smena,lze to kombinovat: [A-Za-z0-9] znamena´ pı´smeno nebo cˇ´ıslici, [ˆznaky] – odpovı´da´ jednomu znaku, ktery´ se lisˇ´ı od vsˇech uvedeny´ch v za´vorce, naprˇ´ıklad [ˆa-kA-K] znamena´ ktery´koliv znak kromeˇ maly´ch a velky´ch pı´smen v rozmezı´
od A do K, naprˇ´ıklad pı´smeno M nebo neˇktera´ cˇ´ıslice podmı´nku splnˇujı´, ~ – domovsky´ adresa´rˇ, navı´c sekvence ~uzivatel (bez mezery) je odkaz na domovsky´ adresa´rˇ uzˇivatele s prˇihlasˇovacı´m jme´nem uzivatel, at’se nacha´zı´ kdekoliv.
1.3 1.3.1
Na´poveˇda Jak volat o pomoc
Na´poveˇdu k prˇ´ıkazu˚m mu˚zˇeme zı´skat vı´ce zpu˚soby: • zobrazenı´m manua´love´ stra´nky prˇ´ıkazu, a to prˇ´ıkazem man, takto lze bud’ zobrazit na´poveˇdu ke konkre´tnı´mu prˇ´ıkazu nebo pomocı´ klı´cˇove´ho slova zjistit, jak se hledany´ prˇ´ıkaz nazy´va´, • neˇkdy je implementova´n prˇ´ıkaz apropos, ktery´ pouzˇijeme, kdyzˇ nevı´me, jak se prˇ´ıkaz nazy´va´, • prˇ´ıkaz whatis2 naopak pouzˇijeme, kdyzˇ jsme narazili na prˇ´ıkaz (spustitelny´ soubor), ale nevı´me, co prova´dı´ (vypı´sˇe se kra´tka´ informace o prˇ´ıkazu), • prˇ´ıkaz info vypı´sˇe kra´tkou informaci o prˇ´ıkazu, • v graficke´m rezˇimu v menu programu˚ vcˇetneˇ termina´lu prˇ´ıpadneˇ prˇes tlacˇ´ıtko K (graficka´ na´poveˇda je take´ spustitelna´ prˇ´ıkazem khelpcenter), existuje take´ prˇ´ıkaz xman, • v Linuxu existujı´ dokumenty HOWTO („jak na to“), a to bud’ prˇ´ımo v jednotlivy´ch distribucı´ch nebo na internetu, obsahujı´ prˇ´ımo rady, jak postupovat v urcˇity´ch situacı´ch, 2
Prˇ´ıkaz whatis pouzˇ´ıva´ vlastnı´ databa´zi o prˇ´ıkazech. Tuto databa´zi je dobre´ obcˇas aktualizovat, naprˇ´ıklad po veˇtsˇ´ı aktualizaci syste´mu, cozˇ se provede prˇ´ıkazem makewhatis.
$
NA´POVEˇDA
1.3
6
• obdobneˇ jsou k nalezenı´ dokumenty FAQ (Frequently Asked Questions) pro cˇasto pokla´dane´ ota´zky, • ve Firefoxu jsme automaticky prˇesmeˇrova´ni na manua´love´ stra´nky, naprˇ´ıklad prˇi zada´nı´ man chsh do adresnı´ho rˇa´dku (tam, kde bychom jinak zadali http://...) se na´m automaticky zobrazı´ manua´lova´ stra´nka prˇ´ıkazu chsh na neˇktere´m serveru prˇ´ımo urcˇene´m pro manua´love´ stra´nky. Na internetu je hodneˇ stra´nek veˇnovany´ch shellu bash, naprˇ´ıklad: • http://www.gnu.org/software/bash • http://tldp.rog/LDP/abs/html (skripty) • http://www.abclinuxu.cz/clanky/show/46130
1.3.2
Manua´love´ stra´nky
Na´poveˇda k prˇ´ıkazu˚m, konfiguracˇnı´m souboru˚m, skriptu˚m a funkcı´m je v unixovy´ch syste´mech standardneˇ k nalezenı´ prˇedevsˇ´ım v manua´lovy´ch stra´nka´ch. Prˇ´ıkaz man je zkratkou z anglicke´ho slova „manual“ a je obdobou windowsovske´ho prˇ´ıkazu help, i kdyzˇ je mnohem komplexneˇjsˇ´ı. Za´kladnı´ tvar prˇ´ıkazu je na´sledujı´cı´: man pr ˇı ´kaz
$
vypı´sˇe manua´l (na´poveˇdu) k zadane´mu prˇ´ıkazu
Na´poveˇdu k prˇ´ıkazu man mu˚zˇeme zobrazit prˇ´ıkazem man man. Manua´ly k jednotlivy´m prˇ´ıkazu˚m (ve skutecˇnosti existujı´ i pro neˇktere´ konfiguracˇnı´ soubory a dalsˇ´ı veˇci) jsou cˇleneˇny do cˇa´stı´, kazˇda´ cˇa´st ma´ urcˇity´ vy´znam. Manua´lova´ stra´nka obvykle obsahuje cˇa´sti uvedene´ v tabulce 1.1 (neˇktere´ se nemusı´ vyskytovat, naopak jine´ mohou by´t navı´c). Prˇı´klad 1.3 Podı´va´me se na strukturu jedne´ z manua´lovy´ch stra´nek. Otevrˇe se automaticky pomocı´ „stra´nkovacˇe“ vcˇetneˇ zobrazenı´ forma´tova´nı´ (to zde neuvidı´me). Po zada´nı´ prˇ´ıkazu man chsh se na´m zobrazı´ tato manua´lova´ stra´nka (vidı´me ji take´ na obra´zku 1.1): chsh(1) NAME chsh - change login shell SYNOPSIS chsh [-D binddn] [-P path] [-s shell] [-l] [-q] [-u] [-v] [user] DESCRIPTION chsh is used to change the user login shell. A normal user may only change the login shell for their own account, the super user may change the loggin shell for any account. If a shell is not given on the command line, chsh operates in an
M
1.3
NA´POVEˇDA
7
Cˇa´st
Vy´znam
NAME SYNOPSIS
Jme´no prˇ´ıkazu Syntaxe prˇ´ıkazu, nepovinne´ parametry jsou uzavrˇeny do hranaty´ch za´vorek, polozˇky, mezi ktery´mi si mu˚zˇeme vybrat, jsou oddeˇleny symbolem „|“, polozˇky, ktere´ se mohou opakovat, jsou ukoncˇeny trˇemi tecˇkami Detailnı´ popis prˇ´ıkazu Seznam syste´movy´ch souboru˚, ke ktery´m ma´ prˇ´ıkaz neˇjaky´ vztah (naprˇ´ıklad je neˇjaky´m zpu˚sobem upravuje) Vy´znam jednotlivy´ch parametru˚ Prˇ´ıklady pouzˇitı´ prˇ´ıkazu Odkazy na dalsˇ´ı manua´love´ stra´nky, ke ktery´m ma´ tento prˇ´ıkaz neˇjaky´ vztah Vy´znam chybovy´ch hla´sˇenı´ a na´vratove´ ko´dy prˇ´ıkazu Popis neocˇeka´vane´ho chova´nı´ prˇ´ıkazu nebo kontakt, na ktery´ lze zaslat informaci o chybne´m chova´nı´ programu licence, pod kterou je prˇ´ıkaz sˇ´ırˇen odkazy na manua´love´ stra´nky souvisejı´cı´ch prˇ´ıkazu˚ nebo souboru˚
DESCRIPTION FILES OPTIONS EXAMPLES SEE ALSO DIAGNOSTICS BUGS COPYRIGHT SEE ALSO
Tabulka 1.1: Cˇa´sti manua´lovy´ch stra´nek interactive fashion, prompting the user with the current login shell. Enter the new value to change the field, or leave the line blank to use the current value. Enter none to remove the current value. The current value is displayed between a pair of [ ] marks. The only restrictions placed on the login shell is that toe command name must be listed in /etc/shells, unless the invoker is the superuser, and then any value may be added. An account with a restricted login shell may not change their login shell. This version of chsh is able to change the shell of local, NIS, NIS+ and LDAP accounts, if the permissions allow it. OPTIONS -D, --binddn binddn Use the Distinguished Name binddn to bind to the LDAP directory. The user will be prompted for a˜password for simple authentication. -s, --shell Specify your login shell. ... FILES /etc/passwd - user account information /etc/shells - list of valid login shells SEE ALSO
1.3
NA´POVEˇDA
8
Obra´zek 1.1: Vy´stup prˇ´ıkazu man chsh chfn(1), passwd(5), shells(5) AUTHOR Thorsten Kukuk
pwdutils February 2004
chsh(1)
Cˇa´st obsahujı´cı´ volby (options, prˇepı´nacˇe) byla zkra´cena.
Manua´love´ stra´nky jsou sdruzˇova´ny do sekcı´, sekce obvykle´ v Linuxu jsou v tabulce 1.2. Kazˇda´ sekce sdruzˇuje prˇ´ıkazy (ale take´ na´poveˇdu ke konfiguracˇnı´m souboru˚m a funkcı´m), ktere´ majı´ neˇco spolecˇne´ho, naprˇ´ıklad sekce 1 obsahuje prˇ´ıkazy, ktere´ mu˚zˇe pouzˇ´ıvat i beˇzˇny´ uzˇivatel, naproti tomu sekce 8 obsahuje prˇ´ıkazy urcˇene´ pro administra´tora (naprˇ´ıklad roota). Uzˇitecˇna´ (i pro beˇzˇne´ho uzˇivatele) je take´ sekce 5 obsahujı´cı´ forma´t konfiguracˇnı´ch
NA´POVEˇDA
1.3
9
souboru˚. Cˇı´slo sekce
Obsah
0 1 2 3
Hlavicˇkove´ soubory (jazyka C), obvykle jsou k v adresa´rˇi /usr/include Prˇ´ıkazy a syste´move´ programy, ktere´ mu˚zˇe pouzˇ´ıvat i beˇzˇny´ uzˇivatel Sluzˇby ja´dra (vola´nı´ ja´dra, syste´mova´ vola´nı´) a chybove´ (na´vratove´) ko´dy Dokumentace k syste´movy´m knihovna´m (dostupne´ funkce obsazˇene´ v knihovna´ch) Specia´lnı´ soubory v /dev Forma´t konfiguracˇnı´ch souboru˚ (vcˇetneˇ /etc/fstab) Hry Balı´ky maker, popis souborove´ho syste´mu, manua´lu˚ atd., na´stroje pro pra´ci s textem Spra´va syste´mu – prˇ´ıkazy a na´stroje pouzˇ´ıvane´ rootem Dokumentace k ja´dru Nezarˇazene´ stra´nky
4 5 6 7 8 9 n
Tabulka 1.2: Sekce manua´lovy´ch stra´nek Prˇ´ıkaz man -s n pr ˇı ´kaz vypı´sˇe manua´lovou stra´nku prˇ´ıkazu v sekci cˇ´ıslo n (tenty´zˇ prˇ´ıkaz mu˚zˇe by´t ve vı´ce sekcı´ch, v kazˇde´ je trochu jiny´ obsah manua´love´ stra´nky), bez tohoto parametru vypı´sˇe prvnı´ nalezenou manua´lovou stra´nku. Prˇ´ıkaz man -a pr ˇı ´kaz vypı´sˇe vsˇechny manua´love´ stra´nky prˇ´ıkazu (ze vsˇech sekcı´).
1.3.3
Zna´m prˇı´kaz, chci veˇdeˇt, k cˇemu slouzˇı´
Pokud zna´me na´zev prˇ´ıkazu a chceme zjistit, k cˇemu slouzˇ´ı a prˇ´ıpadneˇ take´ jak se pouzˇ´ıva´ (parametry apod.), pouzˇijeme jeden z na´sledujı´cı´ch prˇ´ıkazu˚: man pr ˇı ´kaz
zobrazı´ se manua´lova´ stra´nka prˇ´ıkazu v programu man,
info pr ˇı ´kaz
jedna´ se o dokumentaci GNU Info, cozˇ je hypertextovy´ syste´m,
takto zjistı´me, ve ktery´ch manua´lovy´ch stra´nka´ch jsou k nalezenı´ podrobneˇjsˇ´ı informace o prˇ´ıkazu, zobrazı´ se take´ kra´tky´ popis prˇ´ıkazu.
whatis pr ˇı ´kaz
Prˇı´klad 1.4 Po zada´nı´ prˇ´ıkazu man chsh zı´ska´me vy´stup podobny´ tomu, ktery´ vidı´me na obra´zku 1.1 na straneˇ 8, zobrazila se manua´lova´ stra´nka prˇ´ıkazu chsh. Pokud zada´me info chsh, ve skutecˇnosti zı´ska´me neˇco velmi podobne´ho (naprosto stejny´ obsah, jen trochu jinak forma´tovany´), protozˇe pro prˇ´ıkaz chsh neexistuje samostatna´ info stra´nka a bere se manua´lova´ stra´nka.
$
1.3
NA´POVEˇDA
10
Jina´ situace je vsˇak u pouzˇ´ıvaneˇjsˇ´ıch prˇ´ıkazu˚, jako je naprˇ´ıklad prˇ´ıkaz ls (to je obdoba prˇ´ıkazu dir ve Windows): • jestlizˇe zada´me man ls, zı´ska´me beˇzˇnou manua´lovou stra´nku, ktera´ se prˇedevsˇ´ım soustrˇedı´ na vysveˇtlenı´ funkce jednotlivy´ch parametru˚, • po zada´nı´ info ls se zobrazı´ neˇco jine´ho – info stra´nka soustrˇed’ujı´cı´ se prˇedevsˇ´ım na vysveˇtlenı´ funkce samotne´ho programu, oproti manua´love´ stra´nce je poneˇkud „upovı´daneˇjsˇ´ı“, • kdyzˇ zada´me whatis ls, zı´ska´me pouze kra´tkou informaci o urcˇenı´ prˇ´ıkazu, jde naopak o velmi strucˇnou informaci. Manua´lova´ stra´nka prˇ´ıkazu ls (man ls) zacˇ´ına´ takto (ve skutecˇnosti je mnohem delsˇ´ı): LS(1) User commands NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort. Mandatory arguments to long options are mandatory for short options too. OPTIONS -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and ..
M
Zjistili jsme, zˇe jde o prˇ´ıkaz, ktery´ vypisuje obsah adresa´rˇe, da´le zˇe v syntaxi jsou hned za na´zvem prˇ´ıkazu volby (options, prˇepı´nacˇe) a pak na´sledujı´ na´zvy souboru˚. Souboru˚? No ano, prˇece vı´me, zˇe v unixovy´ch syste´mech platı´ vsˇechno je soubor, vcˇetneˇ adresa´rˇu˚. Ze strucˇne´ho popisu (description) se da´le dovı´me, zˇe pokud neuvedeme zˇa´dny´ soubor, vypı´sˇe se obsah pracovnı´ho adresa´rˇe, polozˇky jsou rˇazeny abecedneˇ (pokud neurcˇ´ıme jinak prˇepı´nacˇi). Na´sleduje popis voleb (options). Je jich pomeˇrneˇ hodneˇ, proto jsme vy´pis „usekli“. Zde na prvnı´ pohled vidı´me rozdı´l mezi pouzˇitı´m male´ho a velke´ho pı´smene – pokud napı´sˇeme „-a“, budou vypisova´ny take´ polozˇky zacˇ´ınajı´cı´ tecˇkou (z prˇedchozı´ho semestru jizˇ vı´me, zˇe jde o skryte´ soubory), pokud vsˇak napı´sˇeme „-A“, chova´nı´ bude zda´nliveˇ podobne´ (take´ budou vypisova´ny skryte´ soubory), ale nevypı´sˇou se dva adresa´rˇe, ktere´ jsou take´ skryte´ (odkaz na nadrˇ´ızeny´ adresa´rˇ a odkaz na sebe sama). Info stra´nka prˇ´ıkazu ls (info ls) zacˇ´ına´ takto: File> coreutils.info, Node: ls invocation, Next: dir invocation, Up: Directory listing
M
1.3
NA´POVEˇDA
11
10.1 ‘ls’: List directory contents ================================== The ‘ls’ program lists information about files (of any type, including directories). Options and file arguments can be intermixed arbitrarily, as usual. For non-option command-line arguments that are directories, by default ‘ls’ lists the contents of directories, not recursively, and ommitting files with names beginning with ‘.’. Fot other non-option arguments, by default ‘ls’ lists just the file name. If no non-option argument is specified, ‘ls’ operates on the current directory, acting as if it had been invoked with a˜single argument of ‘.’. ...
V za´hlavı´ info stra´nky se prˇedevsˇ´ım dozvı´me na´zev info souboru, ktery´ pra´veˇ cˇteme a jeho pozici ve strukturˇe (info stra´nky tvorˇ´ı stromovou strukturu). Na´sledujı´cı´m uzlem ve stromeˇ je prˇ´ıkaz dir (platı´ pro OpenSUSE, obecneˇ tento prˇ´ıkaz nenı´ v Linuxu ani jiny´ch unixovy´ch syste´mech podporova´n), nadrˇ´ızeny´m uzlem je skupina prˇ´ıkazu˚ pro vy´pis adresa´rˇu˚. Da´le zjistı´me neˇco podobne´ho jako v manua´love´ stra´nce, tedy zˇe prˇ´ıkaz vypisuje informace o nejru˚zneˇjsˇ´ıch souborech a je uprˇesneˇno, o jake´ informace se vlastneˇ jedna´. Vy´chozı´m chova´nı´m je vy´pis obsahu adresa´rˇu˚, a to ne rekurzı´vneˇ a bez skryty´ch souboru˚, standardneˇ pouze jme´na souboru˚. Pro doplneˇnı´ – vy´stupem prˇ´ıkazu whatis ls je ls(1)
- list directory contents
Tento vy´pis je velmi kra´tky´ a jeho u´cˇelem je usnadnit orientaci – narazı´me na prˇ´ıkaz (nebo si na neˇktery´ prˇ´ıkaz matneˇ vzpomeneme) a chceme veˇdeˇt, o co se vlastneˇ jedna´. Zjistili jsme, zˇe tento prˇ´ıkaz je v sekci 1 (v manua´lovy´ch stra´nka´ch) a slouzˇ´ı k vy´pisu obsahu adresa´rˇe.
1.3.4
M
Nezna´m prˇı´kaz
Pokud nezna´me na´zev prˇ´ıkazu, ale napadajı´ na´s klı´cˇova´ slova souvisejı´cı´ s prˇ´ıkazem (slova, ktera´ by se mohla vyskytovat na manua´love´ stra´nce, nejle´pe neˇkde na jejı´m zacˇa´tku ve strucˇne´m popisu prˇ´ıkazu), mu˚zˇeme pouzˇ´ıt neˇktery´ z na´sledujı´cı´ch postupu˚, podle toho, ktery´ prˇ´ıkaz je nainstalova´n. man -k r ˇete ˇzec apropos r ˇete ˇzec
vy´pis vsˇech dostupny´ch te´mat, ve ktery´ch se nacha´zı´ zadany´ rˇeteˇzec tote´zˇ
urcˇili jsme, zˇe majı´ by´t prohleda´ny pouze manua´love´ stra´nky v sekci zadane´ cˇ´ıslem
apropos -s c ˇı ´slo r ˇete ˇzec
$
1.3
NA´POVEˇDA
12
Prˇı´klad 1.5 Nemu˚zˇeme si vzpomenout na na´zev prˇ´ıkazu, ktery´ vypisuje obsah adresa´rˇe. Vyzkousˇ´ıme neˇkolik mozˇnostı´: zı´ska´me seznam prˇ´ıkazu˚, ktere´ neˇjak souvisejı´ s adresa´rˇi, ale je jich opravdu hodneˇ (neˇkolik stra´nek), takzˇe vyzkousˇ´ıme neˇco jine´ho,
man -k directory
tak to je lepsˇ´ı, vypsalo se uzˇ jen pa´r prˇ´ıkazu˚, mezi
man -k ”directory contents”
ktery´mi si urcˇiteˇ vybereme, apropos ”directory contents”
tote´zˇ,
apropos -s 1 ”directory contents”
jesˇteˇ lepsˇ´ı – vypsaly se pouze prˇ´ıkazy patrˇ´ıcı´
do sekce 1 Vy´sledny´ vy´pis: dir (1) ls (1) vdir (1)
- list directory contents - list directory contents - list directory contents
M
(v ru˚zny´ch distribucı´ch Linuxu se vy´pis bude lisˇit).
Uzˇitecˇna´ mu˚zˇe by´t take´ kla´vesa Tab . Pokud vı´me, jak prˇ´ıkaz zacˇ´ına´, ale nevı´me jisteˇ, jak da´le pokracˇuje (anglicˇtina :-), napı´sˇeme zacˇa´tek prˇ´ıkazu (nebo trˇeba na´zvu souboru, pro ty to taky funguje) a stiskneme kla´vesu Tab .
$
Prˇı´klad 1.6 Vyzkousˇ´ıme automaticke´ doplnˇova´nı´ prˇ´ıkazu˚ pomocı´ kla´vesy Tab . Vı´me, zˇe prˇ´ıkaz zacˇ´ına´ pravdeˇpodobneˇ pı´smeny „wh“, ale nevı´me, jak da´l. Napı´sˇeme wh Tab
Zobrazı´ se: whatis
whereis
which
while
who
whoami
whois
´ koly U 1. Zobrazte manua´lovou stra´nku prˇ´ıkazu ls. Zjisteˇte, k cˇemu se tento prˇ´ıkaz pouzˇ´ıva´, jake´ lze zadat prˇepı´nacˇe, co znamena´ prˇepı´nacˇ -d a podı´vejte se, pod jakou licencı´ je prˇ´ıkaz sˇ´ırˇen. Vsˇimneˇte si, zˇe za na´zvem prˇ´ıkazu v za´hlavı´ stra´nky je rˇeteˇzec (1), cozˇ znamena´, zˇe pracujete se stra´nkou ze sekce 1. 2. V prˇedchozı´m u´kolu jste zjistili, k cˇemu slouzˇ´ı prˇepı´nacˇ -d. Vyzkousˇejte tento prˇepı´nacˇ na prˇ´ıkazu ls -dl /boot (tj. s prˇida´nı´m parametru pro dlouhy´ vy´pis – vsˇech parametru˚).
M C
1.4
PRA´CE S ADRESA´RˇI A SOUBORY
13
Da´le vyzkousˇejte prˇ´ıkaz ls -dl ~ /boot (jsou zada´ny dva adresa´rˇe, z nichzˇ prvnı´ je va´sˇ domovsky´ adresa´rˇ). Jak tento prˇ´ıkaz s prˇepı´nacˇem -d pouzˇijete k vypsa´nı´ informacı´ o pracovnı´m adresa´rˇi? 3. Zobrazte manua´lovou stra´nku prˇ´ıkazu mount. Vsˇimneˇte si cˇ´ısla sekce, uzˇ to nenı´ 1, ale 8. Jake´ typy prˇ´ıkazu˚ patrˇ´ı do sekce 8? Tento prˇ´ıkaz slouzˇ´ı k prˇipojova´nı´ pameˇt’ovy´ch me´diı´. Jak vidı´me, manua´lova´ stra´nka je velmi dlouha´ (vsˇimneˇte si, zˇe jsou odlisˇne´ parametry pro ru˚zne´ typy souborovy´ch syste´mu˚). Na konci stra´nky se take´ podı´vejte, na ktere´ dalsˇ´ı stra´nky s podobny´mi te´maty je odkazova´no. 4. Zjisteˇte, ve ktery´ch manua´lovy´ch stra´nka´ch se pı´sˇe o souboru fstab (pozor, nezajı´majı´ na´s pouze stra´nky s tı´mto na´zvem, ale obecneˇji stra´nky, na ktery´ch se tento rˇeteˇzec vyskytuje).
1.4 1.4.1
Pra´ce s adresa´rˇi a soubory Adresa´rˇe
Zde prˇedpokla´da´me znalosti o adresa´rˇove´ strukturˇe z minule´ho semestru (prˇedmeˇt Praktikum z operacˇnı´ch syste´mu˚). Pouzˇ´ıvane´ prˇ´ıkazy jsou pwd
vy´pis na´zvu pracovnı´ho adresa´rˇe (zkratka z „print working directory“) cd adresa ´r ˇ
zmeˇna aktivnı´ho adresa´rˇe (bez argumentu: prˇesun do domovske´ho adresa´rˇe) cd podrizeny prˇesun do podrˇ´ızene´ho adresa´rˇe podrizeny cd .. prˇesun do nadrˇ´ızene´ho adresa´rˇe (pozor, prˇed tecˇkami by meˇla by´t mezera) cd ../.. prˇesun o dva adresa´rˇe nahoru, vsˇimneˇte si, zˇe pro oddeˇlenı´ adresa´rˇu˚ na
cesteˇ (zde na cesteˇ nahoru) pouzˇ´ıva´me obycˇejne´ lomı´tko, nikoliv opacˇne´ cd ~ prˇesun do nasˇeho domovske´ho adresa´rˇe (naprˇ´ıklad pokud jsme prˇihla´sˇeni jako uzˇivatel hanicka, takto se prˇesuneme do adresa´rˇe /home/hanicka) cd /home/novak prˇesun do domovske´ho adresa´rˇe uzˇivatele novak cd ~novak tote´zˇ co prˇedchozı´, take´ se prˇesuneme do domovske´ho adresa´rˇe uzˇivatele novak mkdir adresa ´r ˇ
vytvorˇenı´ nove´ho adresa´rˇe rmdir adresa ´r ˇ
zrusˇenı´ pra´zdne´ho adresa´rˇe (prˇed pouzˇitı´m prˇ´ıkazu musı´me z adresa´rˇe odstranit vsˇechny polozˇky
$
1.4
PRA´CE S ADRESA´RˇI A SOUBORY
14
ls [volby] [soubor]
vy´pis obsahu adresa´rˇe (adresa´rˇu˚), neˇktere´ volby: -l prova´dı´ dlouhy´ vy´pis (i s atributy vcˇetneˇ pra´v a vlastnı´ka), -a vypı´sˇe take´ skryte´ soubory (ktere´ zacˇ´ınajı´ tecˇkou, vcˇetneˇ . a ..), --sort=size serˇadı´ polozˇky podle velikosti mı´sto podle na´zvu, take´ lze serˇadit naprˇ´ıklad podle cˇasu (time), prˇ´ıpony (extension) apod. -r serˇadı´ v opacˇne´m porˇadı´ (reverse), -R provede prˇ´ıkaz rekurzı´vneˇ (recursively), atd. (parametru ˚ je velmi mnoho)
Argumentem prˇ´ıkazu mu˚zˇe by´t take´ na´zev souboru (resp. adresa´rˇe), ktery´ chceme vypsat. Prˇı´klad 1.7 Pro ls -l mu˚zˇe by´t vy´stup -rwxr-x---rwxr-x--drwxr-xr--
2 1 1
novakj novakj novakj
4 4 1 1
uzivatel uzivatel uzivatel uzivatel
elita elita users
254136 254136 150
Oct Jan Feb
12 30 14
2000 2004 1997
sezn.txt moje poznamky adr/
nebo drwxr-xr-x drwxr-xr-x -rw-r--r--rw-rw-r--
users users users users
4096 4096 150 32223208
´ uno lis lis ´ uno
9 28 29 2
00:10 22:31 14:23 00:23
Desktop/ Documents/ Pevny ´ disk C pvysl.pdf
Vy´chozı´ chova´nı´ tohoto prˇ´ıkazu (stejneˇ jako jiny´ch) se da´ nastavit (budeme se ucˇit pozdeˇji). Mu˚zˇeme urcˇit nejen to, ktere´ polozˇky budou vypisova´ny a zpu˚sob rˇazenı´, ale take´ naprˇ´ıklad styl vy´pisu cˇasu a dalsˇ´ı parametry. Vy´znam jednotlivy´ch sloupcu˚ zna´me – na zacˇa´tku rˇa´dku je typ souboru, prˇ´ıstupova´ opra´vneˇnı´, na´sleduje pocˇet pevny´ch odkazu˚ na soubor, vlastnı´k, skupina, velikost, cˇas poslednı´ zmeˇny a konecˇneˇ na´zev souboru.
´ koly U 1. Pokud nejste ve sve´m pracovnı´m adresa´rˇi, prˇejdeˇte do neˇj. Vytvorˇte podadresa´rˇ test. 2. Prˇejdeˇte do adresa´rˇe test a pro jistotu vypisˇte na´zev pracovnı´ho adresa´rˇe, abyste si oveˇrˇili, kde konkre´tneˇ v adresa´rˇove´ strukturˇe jste. Vytvorˇte podadresa´rˇ vnoreny. 3. Prˇesunˇte se do sve´ho domovske´ho adresa´rˇe a vypisˇte jeho obsah tak, aby se vypsaly i skryte´ soubory a aby byl pouzˇit dlouhy´ (sˇiroky´) vy´pis (vcˇetneˇ vlastnostı´ polozˇek). Vyzkousˇejte take´ rekurzi, porovnejte vy´pis teˇchto prˇ´ıkazu˚: • ls -lR
C
1.4
PRA´CE S ADRESA´RˇI A SOUBORY
• • • •
ls ls ls ls
15
-aR * -l * -a *
4. Smazˇte adresa´rˇe, ktere´ jste vytvorˇili v prˇedchozı´ch u´kolech – test a vnoreny. Nezapomenˇte, zˇe zatı´m umı´me smazat pouze pra´zdny´ adresa´rˇ.
1.4.2
Soubory
Protozˇe v unixovy´ch souborech platı´, zˇe vsˇe je soubor, te´meˇrˇ vsˇechny da´le uvedene´ prˇ´ıkazy lze pouzˇ´ıt take´ na adresa´rˇe. file soubor(-y)
pokusı´ se zjistit vnitrˇnı´ forma´t souboru (jestli se jedna´ o adersa´rˇ, textovy´ soubor pro urcˇitou znakovou sadu, PNG nebo jiny´ obra´zek, PDF, . . . , prˇ´ıkaz je samozrˇejmeˇ pouzˇitelny´ i na soubory bez prˇ´ıpony nebo s „nic nerˇ´ıkajı´cı´ “ prˇ´ıponou, pracuje prˇedevsˇ´ım s obsahem souboru (to je velmi du˚lezˇite´, proto na to znovu upozornı´me: v Linuxu nenı´ ani tak du˚lezˇita´ prˇ´ıpona, jako spı´sˇe skutecˇny´ obsah souboru, cozˇ je rozhodneˇ bezpecˇneˇjsˇ´ı) cp soubor1 soubor2
kopı´rova´nı´ prvnı´ho souboru do druhe´ho provede archivaci zvolene´ho adresa´rˇe, tedy kopı´ruje rekurzı´vneˇ se zachova´nı´m atributu˚ souboru˚ (naprˇ´ıklad vlastnı´k nebo cˇasove´ u´daje) cp -uR ˜/Documents ˜/zaloha provede rekurzivnı´ update (jen soubory, ktere´ se od poslednı´ za´lohy zmeˇnily) cp -sR *.png ./obrazkyPNG v podadresa´rˇi obrazkyPNG pracovnı´ho adresa´rˇe vytvorˇ´ı symbolicke´ odkazy na vsˇechny soubory s prˇ´ıponou PNG cp -a ˜/Documents ˜/zaloha
mv s1 s2
prˇejmenova´nı´ nebo prˇesun souboru s1 na s2 (takto mu˚zˇeme prˇejmenova´vat cˇi prˇesouvat i adresa´rˇe, nejen beˇzˇne´ soubory) rm soubor
odstraneˇnı´ souboru rm soubor odstranı´ zadany´ soubor rm -fr adresa ´r ˇ rekurzı´vneˇ odstranı´ vsˇe v zadane´m adresa´rˇi, a to bez upozornˇo-
va´nı´ (force) cat soubor
vypsa´nı´ obsahu textove´ho souboru
$
1.4
PRA´CE S ADRESA´RˇI A SOUBORY
16
soubory s1, s2 a s3 prˇecˇte a zapı´sˇe do souboru s4 jejich obsah (neˇco podobne´ho jsme meˇli ve Windows u kopı´rova´nı´ z konzoly)
cat s1 s2 s3 > s4 head -n soubor
vypı´sˇe prvnı´ch n rˇa´dku˚ souboru, tedy jake´si „za´hlavı´ “, podle zacˇa´tku mu˚zˇeme orientacˇneˇ odhadnout zby´vajı´cı´ obsah souboru zajı´ma´ na´s, k cˇemu je asi tento soubor; neˇktere´ konfiguracˇnı´ soubory majı´ na sve´m zacˇa´tku v pozna´mce strucˇny´ popis, ten takto zobrazı´me ls -la | head -1 zobrazı´me pouze prvnı´ rˇa´dek vy´pisu prˇedchozı´ho prˇ´ıkazu (trochu prˇedbı´ha´me, ale princip roury uzˇ zna´me z Windows); na prvnı´m rˇa´dku je totizˇ zobrazen celkovy´ pocˇet zobrazeny´ch polozˇek, tedy zjistı´me pocˇet souboru˚ vcˇetneˇ adresa´rˇu˚ v pracovnı´m adresa´rˇi head /etc/sensors.conf
tail -n soubor
vypı´sˇe poslednı´ch n rˇa´dku˚ souboru, pouzˇ´ıva´ se prˇi procha´zenı´ log souboru˚, kde jsou nove´ za´znamy prˇida´va´ny pra´veˇ na konec: tail -8 /var/vysledky.log
zobrazı´ poslednı´ch 8 rˇa´dku˚ zadane´ho souboru
cmp s1 s2
porovna´nı´ souboru˚ s1 a s2, po nalezenı´ rozdı´lu se beˇh ukoncˇ´ı diff s1 s2
porovna´nı´ souboru˚, oproti prˇedchozı´mu prˇ´ıkazu tento procha´zı´ cele´ soubory a pokousˇ´ı se najı´t odlisˇnosti dı´ky vsˇem cˇtyrˇem pouzˇity´m parametru˚m jsou ignorova´ny odlisˇnosti ve velky´ch/maly´ch pı´smenech, tabula´torech, pra´zdny´ch rˇa´dcı´ch a mezera´ch
diff -iEBw soubor1 soubor2
touch soubor
soubor neotevrˇe, ale zmeˇnı´ datum a cˇas poslednı´ho prˇ´ıstupu na aktua´lnı´ u´daje („dotkne se“ souboru), pokud soubor neexistuje, vytvorˇ´ı ho tar
program pro archivaci souboru˚ gzip
ZIP a gz soubory, pouzˇ´ıva´ se take´ kombinace tohoto a prˇedchozı´ho s prˇ´ıponou .tar.gz compress, uncompress
komprese a dekomprese souboru, soubory s prˇ´ıponou .Z Ve veˇtsˇineˇ prˇ´ıkazu˚ mu˚zˇeme zadat i vı´ce souboru˚, a to trˇeba pomocı´ masky. Pak se provedou pozˇadovane´ operace pro vsˇechny tyto soubory.
1.5
PRˇESMEˇROVA´NI´ A FILTRY
1.4.3
17
Pevne´ a symbolicke´ odkazy
Z prˇedchozı´ho semestru vı´me, jaky´ je rozdı´l mezi pevny´mi a symbolicky´mi odkazy na soubor. Ted’ si uka´zˇeme, jak se s teˇmito odkazy pracuje v textove´m rezˇimu. ln zdroj [cı ´l | cı ´lovy ´_adresa ´r ˇ] vytvorˇenı´ pevne´ho odkazu cı ´l na zdroj (nebo v cı´love´m adresa´rˇi), ve vy´pisu pomocı´ ls
$
se vytvorˇeny´ odkaz projevı´ zvy´sˇenı´m cˇ´ısla pocˇtu pevny´ch odkazu˚ za prˇ´ıstupovy´mi pra´vy souboru vytvorˇ´ı pevny´ odkaz na zadany´ soubor v pracovnı´m adresa´rˇi (to je ta tecˇka na konci) ln prvni.txt druhy.txt treti.txt /home/uzivatel vytvorˇ´ı pevne´ odkazy na vsˇechny zadane´ soubory v domovske´m adresa´rˇi uzˇivatele s prˇihlasˇovacı´m jme´nem uzivatel, vytvorˇene´ pevne´ odkazy jsou v pracovnı´m adresa´rˇi ln prvni.txt druhy.txt treti.txt ˜ provede tote´zˇ (je to jiny´ zpu˚sob adresace domovske´ho adresa´rˇe tohoto uzˇivatele) ln /adr1/adr2/soub.pdf .
ln -s puvodni [cil]
vytvorˇenı´ symbolicke´ho odkazu, ve vy´pisu pomocı´ ls se vytvorˇeny´ odkaz projevı´ typem souboru l (v prvnı´m sloupci vy´pisu) zmeˇnı´ desktopove´ prostrˇedı´, ktere´ je spousˇteˇne´ automaticky po startu X Window na XFce (soubor – skript .xinitrc v domovske´m adresa´rˇi uzˇivatele urcˇuje, ktery´ soubor spousˇtı´ desktopove´ prostrˇedı´ nebo spra´vce oken pro tohoto uzˇivatele, soubor xinitrc.xfce je spousˇteˇcı´ soubor pro XFce, prˇ´ıpadneˇ to mu˚zˇe by´t textovy´ soubor, ve ktere´m je spousˇteˇcı´ prˇ´ıkaz pro toto prostrˇedı´ cˇi spra´vce oken)
ln -s /etc/X11/xinit/xinitrc.xfce ˜/.xinitrc
´ koly U 1. Vytvorˇte ve sve´m domovske´m adresa´rˇi, v podadresa´rˇi documents (nebo dokumenty) symbolicky´ odkaz na soubor /etc/fstab (pod pu˚vodnı´m na´zvem), da´le symbolicky´ odkaz na tenty´zˇ soubor s na´zvem fst. 2. Pak zde vytvorˇte pevny´ odkaz na soubor .bashrc ze sve´ho domovske´ho adresa´rˇe (~/.bashrc) pod na´zvem bashrc (bez tecˇky). 3. Vypisˇte obsah sve´ho adresa´rˇe documents v rozsˇ´ırˇene´ formeˇ, abyste videˇli oznacˇenı´ jednotlivy´ch polozˇek.
1.5
Prˇesmeˇrova´nı´ a filtry
1.5.1
Smeˇrova´nı´ a deskriptory
Take´ v Unixu existuje standardnı´ vstup, vy´stup a chybovy´ vy´stup. Symboly <, >, >>, |, & pro prˇesmeˇrova´nı´ fungujı´ jako ve Windows. Programy, ktere´ prˇes roury prˇijı´majı´ vstupy
C
PRˇESMEˇROVA´NI´ A FILTRY
1.5
18
a doka´zˇou svu˚j vy´stup take´ poslat do roury, se nazy´vajı´ filtry. Pomocı´ prˇesmeˇrova´nı´ je mozˇne´ take´ „oklikou“ vytvorˇit novy´ soubor, naprˇ´ıklad zada´me prˇ´ıkaz cat > vysl.txt, da´le pı´sˇeme rˇa´dky textu (obsah souboru) a ukoncˇ´ıme kla´vesovou kombinacı´ Ctrl+D (v unixovy´ch syste´mech je to znak konce souboru). Prˇesmeˇrova´nı´ chybove´ho vy´stupu je trochu slozˇiteˇjsˇ´ı. Pouzˇ´ıva´me prˇi neˇm popisovacˇ souboru, ktery´ se pı´sˇe vzˇdy nalevo od symbolu prˇesmeˇrova´nı´. Neˇktera´ zarˇ´ızenı´ majı´ pro tento popisovacˇ prˇirˇazeno cˇ´ıslo (jako ve Windows), na´s zajı´ma´ 0 ... STDIN 1 ... STDOUT 2 ... STDERR
Deskriptor (popisovacˇ) vstupu a vy´stupu je vlastneˇ ukazatel na mı´sto, odkud se ma´ bra´t vstup nebo kam se ma´ posı´lat vy´stup. Deskriptorem mu˚zˇe by´t soubor nebo zarˇ´ızenı´, pouzˇ´ıva´me take´ cˇ´ıselne´ oznacˇenı´ pro momenta´lnı´ vstup (0), momenta´lnı´ vy´stup (1) a momenta´lnı´ chybovy´ vy´stup (2). S cˇ´ıselny´m oznacˇenı´m se pracuje podle tabulky 1.3. Smeˇrova´nı´
Vy´znam
i> soubor
prˇesmeˇrova´nı´ vy´stupu pu˚vodneˇ smeˇrovane´ho na deskriptor i do souboru prˇipojenı´ vy´stupu mı´sto na deskriptor i do souboru vstup je prˇesmeˇrova´n z deskriptoru i vstup je smeˇrova´n mı´sto z deskriptoru i z deskriptoru j vy´stup je prˇesmeˇrova´n do deskriptoru i do vy´stupnı´ho deskriptoru i je prˇirˇazen deskriptor j
i>> soubor <&i i<&j >&i i>&j
Tabulka 1.3: Pra´ce s deskriptory Prˇı´klad 1.8 Na´sledujı´cı´ dvojice prˇ´ıkazu˚ jsou ekvivalentnı´: ls -la > soubor ls -la 1> soubor
sort < soubor sort 0< soubor
(je du˚lezˇite´, aby mezi deskriptorem a smeˇrovacı´m symbolem nebyla mezera) Prˇesmeˇrujeme chybovy´ vy´stup prohleda´va´nı´ adresa´rˇe /var na zarˇ´ızenı´ null, tedy do „kosˇe“: find /var -name ’*’ -print 2> /dev/null
V prˇ´ıkladu jsme videˇli vyuzˇitı´ zarˇ´ızenı´ /dev/null. Jedna´ se o „odpatkovy´ kosˇ“ ve stejne´m vy´znamu, v jake´m zna´me zarˇ´ızenı´ NUL ve Windows (pozor – dveˇ pı´smena „L“ oproti jed-
P
PRˇESMEˇROVA´NI´ A FILTRY
1.5
19
nomu, navı´c v unixovy´ch syste´mech se zarˇ´ızenı´ pı´sˇou obvykle maly´mi pı´smeny). Mu˚zˇeme pouzˇ´ıvat naprˇ´ıklad tato zarˇ´ızenı´: • /dev/null – vy´stupnı´ zarˇ´ızenı´ pro odstraneˇnı´ vy´pisu˚ (odpadkovy´ kosˇ)
$
• /dev/random – vstupnı´ zarˇ´ızenı´ pro na´hodna´ cˇ´ısla • /dev/urandom – tote´zˇ • /dev/zero – vstupnı´ zarˇ´ızenı´ generujı´cı´ nuly • /dev/tty – vstupnı´ zarˇ´ızenı´, ktere´ znamena´ termina´l (z pohledu uzˇivatele prosteˇ kla´vesnice) • /dev/lp0 – vy´stupnı´ zarˇ´ızenı´ prˇedstavujı´cı´ tiska´rnu Pokud obvykle vy´stupnı´ zarˇ´ızenı´ /dev/null pouzˇijeme jako vstupnı´ soubor (naprˇ´ıklad v prˇ´ıkazu cat /dev/null > soubor
vy´sledny´ soubor je pra´zdny´ (nebo pokud neexistoval, vytvorˇ´ı se pra´zdny´ soubor). Prˇı´klad 1.9 Uka´zky prˇesmeˇrova´nı´ deskriptoru˚: prˇesmeˇrujeme chybovy´ vy´stup na stejne´ mı´sto jako standardnı´ vy´stup, tj. do zadane´ho souboru (jiny´mi slovy, standardnı´ i chybovy´ vy´stup budou v tomto souboru)
ls -la >& cely_vystup.log
prˇesmeˇruje standardnı´ vy´stup do souboru a standardnı´ chybovy´ vy´stup do deskriptoru, ktery´ je momenta´lneˇ pod &1, tedy take´ do souboru
ls /adr 1>soubor 2>&1
prˇesmeˇruje chybovy´ vy´stup na pu˚vodnı´ vy´stup a potom vy´stup na zadany´ soubor (vsˇimneˇte si zmeˇny porˇadı´ smeˇrovacı´ch parametru˚)
ls /adr 2>&1 1>soubor
Neˇktere´ kombinace se mohou zda´t nesmyslne´, ale meˇjme na pameˇti, zˇe prˇesmeˇrova´nı´ deskriptoru˚ platı´ pro celou u´lohu (pod tı´m si zatı´m mu˚zˇeme prˇedstavit posloupnost prˇ´ıkazu˚ propojeny´ch rourami) a tedy hodnoty deskriptoru˚ „putujı´“ postupneˇ celou rourou doprava.
1.5.2
Filtry
Co je to filtr, uzˇ vı´me. Podı´va´me se na neˇkolik nejdu˚lezˇiteˇjsˇ´ıch programu˚, ktere´ mohou pracovat jako filtry. sort [options soubor(-y)]
setrˇ´ıdı´ rˇa´dky textove´ho souboru pokud narazı´ na dva stejne´ rˇa´dky, v setrˇ´ıdeˇne´m vy´stupu bude pouze jeden z nich (vynecha´va´ duplicitnı´ rˇa´dky)
sort -u soubor
$
1.5
PRˇESMEˇROVA´NI´ A FILTRY
20
sort -r soubor reverznı´ trˇ´ıdeˇnı´ (setrˇ´ıdı´ v opacˇne´m porˇadı´) sort < souborzdroj > souborcil program zı´skal svu˚j vstup ze souboru smeˇ-
rova´nı´m, podobneˇ vy´stup je smeˇrova´n do dalsˇ´ıho souboru cat soubor | sort zı´ska´nı´ vstupu prˇes rouru, prˇ´ıkaz pouzˇ´ıva´me jako filtr wc [pr ˇepı ´nac ˇe] soubory
prˇ´ıkaz pocˇ´ıtajı´cı´ pocˇet rˇa´dku˚, slov a bytu˚ souboru, pouzˇ´ıva´me prˇepı´nacˇe -c (vypı´sˇe pocˇet bytu˚ souboru vcˇetneˇ forma´tovacı´ch jako je konec rˇa´dku), -m (pocˇet znaku˚ v souboru), -w (pocˇet slov – rˇeteˇzcu˚ oddeleny´ch bı´ly´mi znaky), -l (pocˇet rˇa´dku˚, ve skutecˇnosti pocˇet symbolu˚ konec rˇa´dku), -L (pocˇet znaku˚ v nejdelsˇ´ım rˇa´dku). vypı´sˇe pocˇet znaku˚ souboru vypı´sˇe pocˇet B (oktetu˚) souboru, cozˇ nenı´ u´plneˇ tote´zˇ jako pocˇet znaku˚ (neˇktere´ znakove´ sady ko´dujı´ znaky do vı´ce nezˇ jednoho B) -l soubor vypı´sˇe pocˇet rˇa´dku˚ (lines) souboru -w soubor vypı´sˇe pocˇet slov (tj. rˇeteˇzcu˚ oddeˇleny´ch netisknuty´mi znaky, trˇeba mezerami, tabula´tory, konci rˇa´dku˚) -L soubor (pozor, velke´ pı´smeno) vypı´sˇe de´lku nejdelsˇ´ıho rˇa´dku, tedy „sˇ´ırˇku“ souboru -mclwL soubor vypı´sˇe vsˇechny vy´sˇe uvedene´ u´daje; ale pozor, u´daje nejsou nijak oznacˇeny (vypı´sˇe se prosteˇ rˇada cˇ´ısel), porˇadı´ nenı´ da´no porˇadı´m parametru˚ v prˇ´ıkazu, ale je to „rˇa´dku˚ slov oktetu˚ znaku˚ de´lka_rˇa´dku“ -c soubor1 soubor2 soubor3 vypı´sˇe pozˇadovany´ u´daj postupneˇ pro vsˇechny zadane´ soubory -la | wc -l zjistı´me pocˇet polozˇek vcˇetneˇ skryty´ch v pracovnı´m adresa´rˇi (vypı´sˇe se pouze cˇ´ıslo)
wc -m soubor wc -c soubor wc wc wc wc
wc ls
Tento prˇ´ıkaz doka´zˇe take´ nacˇ´ıst na´zvy souboru˚, ktere´ ma´ zpracova´vat, ze zadane´ho souboru. pg soubor
stra´nkova´nı´ souboru, jde o jeden z nejstarsˇ´ıch a nejjednodusˇsˇ´ıch stra´nkovacı´ch filtru˚ more soubor
stra´nkova´nı´ souboru mu˚zˇeme zadat pocˇet rˇa´dku˚ na obrazovce, po ktery´ch se budeme pohybovat prˇi „stra´nkova´nı´“ (prˇi prˇechodu na dalsˇ´ı stra´nku se vzˇdy posuneme o toto cˇ´ıslo) more -s soubor vı´ce pra´zdny´ch rˇa´dku˚ za sebou zobrazı´ jako jediny´ pra´zdny´ rˇa´dek (squeeze multiple blank lines into one) more +c ˇı ´slo soubor zobrazova´nı´ zacˇne azˇ od rˇa´dku s tı´mto cˇ´ıslem more -c ˇı ´slo soubor
less soubor
dalsˇ´ı stra´nkovacı´ filtr, ktery´ je funkcˇneˇ podobny´ filtru more, ale nabı´zı´ mnohem rozsa´hlejsˇ´ı mozˇnosti ovla´da´nı´ vcˇetneˇ pouzˇ´ıva´nı´ kurzorovy´ch kla´ves.
1.5
PRˇESMEˇROVA´NI´ A FILTRY
21
Ve veˇtsˇineˇ linuxovy´ch distribucı´ se v programu man interneˇ pouzˇ´ıva´ pra´veˇ stra´nkovacı´ filtr less. Dalsˇ´ım stra´nkovacı´m filtrem je pg, ten je pro zmeˇnu znacˇneˇ jednodusˇsˇ´ı. Neˇktere´ z drˇ´ıve probı´rany´ch prˇ´ıkazu˚ se take´ dajı´ pouzˇ´ıt jako filtry, naprˇ´ıklad prˇ´ıkaz ls -la | head -10
zobrazı´ pouze prvnı´ch 10 rˇa´dku˚ vy´pisu prvnı´ho prˇ´ıkazu. Na dalsˇ´ı typ filtru˚, vyhleda´vacı´, se podı´va´me v samostatne´ sekci. Nejpouzˇ´ıvaneˇjsˇ´ım vyhleda´vacı´m filtrem je grep. Prˇı´klad 1.10 Stra´nkovacı´ filtry vypisujı´ svu˚j vstup po stra´nka´ch. Naprˇ´ıklad ls -l | pg, ls -l | more, ls -l | less
Ovla´da´nı´ filtru pg: Enter +
dalsˇ´ı stra´nka dalsˇ´ı stra´nka, prˇedchozı´ stra´nka
, −
n
prˇechod na stra´nku n (cˇ´ıslo)
$
prˇechod na poslednı´ stra´nku
q
ukoncˇenı´
Ovla´da´nı´ filtru more: Mezernı´k Enter
dalsˇ´ı stra´nka
dalsˇ´ı rˇa´dek
?
vypı´sˇe se na´poveˇda k ovla´da´nı´ interaktivnı´ho filtru
q
ukoncˇenı´
Kromeˇ toho ma´ tento filtr dalsˇ´ı mozˇnosti ovla´da´nı´, ktere´ vycha´zejı´ z pouzˇ´ıva´nı´ textove´ho editoru vi. Podporuje naprˇ´ıklad odskoky v textu, vyhleda´va´nı´, prˇeskoky mezi soubory, ma´ take´ vlastnı´ prˇ´ıkazovy´ prompt.
´ koly U 1. Vytvorˇte soubor prvni s jaky´mkoliv obsahem. Pak tento soubor setrˇid’te, setrˇ´ıdeˇny´ vy´stup prˇesmeˇrujte do souboru druhy.
C
2. Vypisˇte obsah adresa´rˇe /dev vcˇetneˇ skryty´ch souboru˚, a to i s vlastnostmi polozˇek (tj. sˇiroky´ vy´pis), pouzˇijte neˇktery´ stra´nkovacı´ filtr. 3. Spocˇ´ıtejte rˇa´dky prˇedchozı´ho vy´pisu (tj. zjisteˇte, kolik polozˇek je v adresa´rˇi /dev). 4. Zjisteˇte de´lku souboru .bashrc ve vasˇem domovske´m adresa´rˇi. 5. Zjisteˇte pocˇet vsˇech uzˇivatelu˚ definovany´ch v syste´mu (na´poveˇda: jsou ulozˇeni v souboru /etc/passwd, kazˇdy´ za´znam na samostatne´m rˇa´dku).
R
1.5
1.5.3
PRˇESMEˇROVA´NI´ A FILTRY
22
Prohleda´va´nı´
K prohleda´va´nı´ adresa´rˇove´ struktury (hleda´nı´ souboru˚) pouzˇ´ıva´me prˇ´ıkaz find, k prohleda´va´nı´ obsahu souboru˚ zase grep. Program grep lze pouzˇ´ıt take´ k nalezenı´ na´zvu souboru v zadane´m adresa´rˇi – stacˇ´ı na vstup programu poslat vy´pis adresa´rˇe. find
prohleda´va´nı´ adresa´rˇove´ struktury, hleda´me soubory (a adresa´rˇe) se zadany´m na´zvem nebo jiny´mi parametry, take´ poskytuje mozˇnost omezene´ho zpracova´nı´ souboru˚ nebo ovlivnˇova´nı´ forma´tu vlastnı´ho vy´stupu find *.txt -print
vypı´sˇe vsˇechny soubory se zadanou prˇ´ıponou v pracovnı´m
adresa´rˇi vypı´sˇe vsˇechny soubory se zadanou prˇ´ıponou rekurzı´vneˇ (apostrofy jsou nutne´!) find /usr -name soubor -print hleda´ soubor v adresa´rˇi (lze pouzˇ´ıt i jednoduche´ regula´rnı´ vy´razy), prˇepı´nacˇ -print zpu˚sobı´ vy´pis u´plne´ho jme´na (prohleda´va´me adresa´rˇ /usr), pokud mı´sto -name napı´sˇeme -iname, nerozlisˇujı´ se mala´ a velka´ pı´smena find -user uzivatel -print hleda´ soubor vlastnı´ka uzivatel (prohleda´va´me pracovnı´ adresa´rˇ) find -uid 1520 -name prac* -print hleda´me soubor (rekurzı´vneˇ), jehozˇ na´zev zacˇ´ına´ zadany´m rˇeteˇzcem a jeho vlastnı´k je uzˇivatel se zadany´m UID (lze take´ zadat GID, parametr -gid) find ˜ -iname desk* -print vypı´sˇe vsˇe v pracovnı´m adresa´rˇi a jeho podadresa´rˇ´ıch, co zacˇ´ına´ rˇeteˇzcem „desk“ bez rozlisˇova´nı´ maly´ch a velky´ch pı´smen find -name ’*.txt’ -print
find -print find -mtime 2 -print
hleda´me soubor, ktery´ byl modifikova´n (modified) naposledy prˇed pra´veˇ 2 dny (prˇesneˇji prˇed 2*24 hodinami) find -mtime +2 -print hleda´me soubor, ktery´ byl modifikova´n (modified) naposledy prˇed vı´ce nezˇ 2 dny find -mtime -2 -print hleda´me soubor, ktery´ byl modifikova´n (modified) naposledy prˇed me´neˇ nezˇ 2 dny find -atime 3 -print k souboru bylo prˇistupova´no (accessed) naposledy prˇed 3 dny; obecneˇ: mu˚zˇeme vyhleda´vat vsˇe, co bylo modifikova´no (m), prˇistupova´no (a) nebo meˇneˇno (c, change) v zadane´ dobeˇ, zde jde o dny, ale existujı´ volby i pro minuty find -type d -size +10k -print vypı´sˇou se soubory typu adresa´rˇ (d), jejichzˇ velikost je vı´ce nezˇ 10 kB find -type f -size -2M -print vypı´sˇou se beˇzˇne´ soubory (f), jejichzˇ velikost je me´neˇ nezˇ 2 MB (jako typ souboru je mozˇne´ pouzˇ´ıt d pro adresa´rˇ, f pro beˇzˇny´ soubor, c pro znakove´ zarˇ´ızenı´, b pro blokove´ zarˇ´ızenı´, p pro pojmenovanou rouru, l pro symbolicky´ odkaz a s pro socket)
$
1.5
PRˇESMEˇROVA´NI´ A FILTRY
23
chceme vypsat cele´ na´zvy souboru˚, v jejichzˇ prˇ´ıstupovy´ch opra´vneˇnı´ch je pra´vo za´pisu pro uzˇivatele A/NEBO pra´vo za´pisu pro skupinu find -perm /u+w,g+w -print chceme vypsat cele´ na´zvy souboru˚, v jejichzˇ prˇ´ıstupovy´ch opra´vneˇnı´ch je pra´vo za´pisu pro uzˇivatele A/NEBO pra´vo za´pisu pro skupinu find -perm -u+w,g+w -print chceme vypsat cele´ na´zvy souboru˚, v jejichzˇ prˇ´ıˇ pra´vo za´pisu ´ ROVEN stupovy´ch opra´vneˇnı´ch je pra´vo za´pisu pro uzˇivatele A ZA pro skupinu find / -perm -4000 -print vypı´sˇe cele´ na´zvy souboru˚ (rekurzı´vneˇ v korˇenove´m adresa´rˇi), ktere´ majı´ nastaven SUID bit (vzpomenˇte si z prˇedchozı´ho semestru, co to znamena´), SUID, SGID a Sticky bity se dajı´ zadat pouze zada´nı´m cˇ´ıselne´ho mo´du souboru find -perm /u+w,g+w -print
find / \( -perm -4000 -o -perm -2000 \) -type f -exec ls -la{} \;
ted’ je prˇ´ıkaz o neˇco slozˇiteˇjsˇ´ı; vsˇ´ıma´me si vsˇech souboru˚ s nastaveny´m SUID nebo SGID bitem (takto zapisujeme disjunkci, za´vorky jsou nutne´), ma´ jı´t o beˇzˇne´ soubory (vcˇetneˇ spustitelny´ch, ne adresa´rˇe), na konci je mı´sto obycˇejne´ho vy´pisu volba na spusˇteˇnı´ prˇ´ıkazu, v jehozˇ vy´stupu zjistı´me informace o souboru grep [pr ˇepı ´nac ˇe] reg_vy ´raz [soubor ...]
pro zmeˇnu prohleda´va´ textove´ soubory; vypı´sˇe rˇa´dky textove´ho souboru, ktere´ obsahujı´ zadany´ rˇeteˇzec, rˇeteˇzec je zada´va´n jako regula´rnı´ vy´raz, neˇkt. prˇepı´nacˇe: -i -l -n -r -o -c
nerozlisˇuje mala´ a velka´ pı´smena pouze vypı´sˇe na´zvy souboru˚, ve ktery´ch nalezl shodu vypı´sˇe take´ cˇ´ıslo rˇa´dku rekurzı´vneˇ zpracova´va´ i podadresa´rˇe vypı´sˇe jen nalezeny´ rˇeteˇzec, ne cely´ rˇa´dek v souborech pouze spocˇ´ıta´ vy´skyty nalezene´ho rˇeteˇzce
V regula´rnı´m vy´razu mu˚zˇeme pouzˇ´ıvat symboly shrnute´ v tabulce 1.4. Posix sekvence jsou jake´si „zkratky“ pro konkre´tnı´ typy znaku˚. Naprˇ´ıklad mı´sto 0-9, mu˚zˇeme napsat posix sekvenci [:digit:]. Dalsˇ´ı mozˇnosti najdeme v tabulce 1.5. Protozˇe jsou posix sekvence uzavrˇeny do hranaty´ch za´vorek, pak prˇi pouzˇitı´ v regula´rnı´m vy´razu jsou tyto za´vorky „zdvojeny“ – vnitrˇnı´ patrˇ´ı posix sekvenci, vneˇjsˇ´ı uzavı´rajı´ mnozˇinu, ze ktere´ se vybı´ra´ prvek. Prˇı´klad 1.11 Uka´zˇeme si pouzˇitı´ prˇ´ıkazu grep. hleda´me v souborech s prˇ´ıponou .txt slovo vypis bez rozlisˇova´nı´ maly´ch a velky´ch pı´smen
grep -i ”vypis” *.txt
1.5
PRˇESMEˇROVA´NI´ A FILTRY
Prvek
Vy´znam
.
Libovolny´ znak Nula nebo jeden vy´skyt prˇedcha´zejı´cı´ho rˇeteˇzce Nula nebo vı´ce vy´skytu˚ prˇedcha´zejı´cı´ho rˇeteˇzce Jeden nebo vı´ce vy´skytu˚ prˇedcha´zejı´cı´ho rˇeteˇzce m opakova´nı´ prˇedcha´zejı´cı´ho rˇeteˇzce m azˇ n opakova´nı´ prˇedcha´zejı´cı´ho rˇeteˇzce m nebo vı´ce opakova´nı´ prˇedcha´zejı´cı´ho rˇeteˇzce Zacˇa´tek rˇa´dku Konec rˇa´dku Jaky´koli (jeden) znak z mnozˇiny v za´vorka´ch Jaky´koli znak mimo prvky mnozˇiny Jake´koli znaky v dane´m rozsahu (jeden) logicke´ nebo – bud’ rˇeteˇzec r1, nebo rˇeteˇzec r2
? * + {m} {m,n} {m,} ˆ $ [tr ˇı ´da] [ˆtr ˇı ´da] [x-y] r1 | r2
24
Tabulka 1.4: Regula´rnı´ vy´razy v prˇ´ıkazu grep hleda´me v souborech s prˇ´ıponou .txt slovo vypis bez rozlisˇova´nı´ maly´ch a velky´ch pı´smen, pouze vypı´sˇe na´zvy souboru˚, ve ktery´ch se toto slovo nacha´zı´
grep -il ”vypis” *.txt
u kazˇde´ho souboru s prˇ´ıponou .c vypı´sˇe pocˇet vkla´dany´ch souboru˚ s prˇ´ıponou .h nebo .c, a protozˇe tecˇka je vy´znamovy´ znak (urcˇuje jeden jaky´koliv symbol), musı´me prˇed ni da´t zpeˇtne´ lomı´tko, aby byla bra´na jako soucˇa´st rˇeteˇzce
grep -cr ”#include.*\.[hc]” *.c
chceme pocˇet anglicky´ch oslovenı´ prˇes vsˇechny soubory se zadanou prˇ´ıponou rekurzı´vneˇ v podadresa´rˇ´ıch pracovnı´ho adresa´rˇe
grep -cr ”Dear \(Mr.|Ms.|Miss\)” *.txt
v zadane´m souboru hleda´me rodna´ cˇ´ısla ve tvaru 123456/1234 – nejdrˇ´ıv 6 cˇ´ıslic, pak lomı´tko a trˇi nebo cˇtyrˇi cˇ´ıslice; jinak:
grep ’[0-9]\{6\}/[0-9]\{3,4\}’ soubor.txt
grep ’[[:digit:]]\{6\}/[[:digit:]]\{3,4\}’ soubor.txt
v zadane´m souboru hleda´me IP adresy ve tvaru 123.123.123.123 – cˇtyrˇi skupiny cˇ´ıslic, v kazˇde´ skupineˇ 1 azˇ 3 cˇ´ıslice; jinak: grep ’\([0-9]\{1,3\}\)\{4\}’ soubor.log
grep ’\([[:digit:]]\{1,3\}\)\{4\}’ soubor.log
V prˇ´ıkazech si mu˚zˇeme povsˇimnout, zˇe je nutno rozlisˇit vyhleda´vane´ znaky a „metaznaky“, ktere´ v regula´rnı´m vy´razu slouzˇ´ı k uprˇesneˇnı´ vyhleda´vacı´ho rˇeteˇzce (naprˇ´ıklad v poslednı´m prˇ´ıkazu kulate´ za´vorky).
1.5
PRˇESMEˇROVA´NI´ A FILTRY
25
Sekvence
Vy´znam
[:digit:]
cˇ´ıslice hexadecima´lnı´ cˇ´ıslice
[:xdigit:]
pı´smena pı´smena a cˇ´ıslice mala´ pı´smena velka´ pı´smena
[:alpha:] [:alnum:] [:lower:] [:upper:]
mezera a tabula´tor pra´zdne´ znaky (mezera, tabula´tor, konec rˇa´dku, . . . )
[:blank:] [:space:]
viditelne´ znaky viditelne´ znaky a mezera
[:graph:] [:print:]
Tabulka 1.5: Posix sekvence prˇi vyhleda´va´nı´ Program grep je pruzˇneˇjsˇ´ı nezˇ find (uzˇ pro rozsa´hle´ mozˇnosti regula´rnı´ch vy´razu˚), proto je cˇasto pouzˇ´ıva´n nejen k prohleda´va´nı´ textovy´ch souboru˚, ale take´ k prohleda´va´nı´ struktury adresa´rˇu˚ v kombinaci s prˇ´ıkazem ls. Prˇı´klad 1.12 Uka´zˇeme si mozˇnosti prohleda´va´nı´ adresa´rˇove´ struktury prˇ´ıkazem grep: ls -la | grep -ic ”ˆ-”
vypı´sˇe pocˇet beˇzˇny´ch souboru˚ v pracovnı´m adresa´rˇi
vypı´sˇe vsˇechny beˇzˇne´ soubory (rˇa´dek zacˇ´ına´ pomlcˇkou), ktere´ jsou spustitelne´ (vlastnı´k ma´ pra´vo spousˇteˇnı´)
ls -la | grep ”ˆ-..x”
Prˇı´klad 1.13 Uka´zˇeme si, jaky´m zpu˚sobem vypı´sˇeme login shell neˇktere´ho uzˇivatele. Prˇedpokla´dejme, zˇe chceme zna´t shell uzˇivatele novak. Pak zada´me: cat /etc/passwd | grep ”ˆnovak:” | cut -d : -f 7
Vypada´ to trochu zvla´sˇtneˇ. V koloneˇ (rourˇe) je prvnı´ prˇ´ıkaz cat, ktery´ na svu˚j vy´stup posˇle obsah souboru /etc/passwd, cozˇ je soubor se seznamem uzˇivatelu˚ a jejich parametru˚. Dalsˇ´ı na rˇadeˇ je prˇ´ıkaz grep, ktery´ vybere pouze rˇa´dek obsahujı´cı´ na sve´m zacˇa´tku jme´no hledane´ho uzˇivatele. Trˇetı´m prˇ´ıkazem v koloneˇ je cut (pozor, neple´st si s cat), ktery´ „usekne“ rˇa´dek a zobrazı´ pouze jeho konec. Jeho prvnı´ volba, -d, stanovı´ dvojtecˇku na oddeˇlovacˇ „sloupcu˚“. Druhy´ parametr stanovı´, zˇe chceme pouze sedme´ pole v porˇadı´ (pole jsou oddeˇlena oddeˇlovacˇem zadany´m v prˇedchozı´ volbeˇ).
1.5
PRˇESMEˇROVA´NI´ A FILTRY
26
Mu˚zˇe se sta´t, zˇe sice vı´me, jak se prˇ´ıkaz nazy´va´ a jake´ ma´ parametry, a taky je jasne´, zˇe je nainstalova´n, ale prˇesto ho nelze spustit. Mu˚zˇe to by´t tı´m, zˇe cesta k tomuto prˇ´ıkazu nenı´ zahrnuta v promeˇnne´ obsahujı´cı´ cesty ke spustitelny´m souboru˚m. Pak je mozˇne´ spustit prˇ´ıkaz s absolutnı´ cestou, ale tu musı´me prˇedem zjistit. K tomu slouzˇ´ı prˇ´ıkaz whereis.
$
Prˇı´klad 1.14 Zjistı´me cesty k neˇktery´m prˇ´ıkazu˚m. whereis ls
zobrazı´ cestu k prˇ´ıkazu ls
zobrazı´ celkem hodneˇ cest k ru˚zny´m souboru˚m, ktere´ se takto nazy´vajı´; hned prvnı´ vypsany´ rˇeteˇzec je spra´vny´, tedy zjistı´me, zˇe prˇ´ıkaz lze spustit s absolutnı´ cestou /usr/bin/passwd (nebo jinak, mu˚zˇe se lisˇit v ru˚zny´ch unixovy´ch syste´mech), vypsal se take´ stejnojmenny´ konfiguracˇnı´ soubor v adresa´rˇi /etc
whereis passwd
whereis shutdown prˇ´ıkaz na vypnutı´ (restart apod.) syste´mu najdeme zjevneˇ v adresa´rˇi /sbin, protozˇe na serverech ho typicky mu ˚ zˇe pouzˇ´ıvat pouze root
´ koly U 1. Ve vy´pisu obsahu sve´ho domovske´ho adresa´rˇe najdeˇte vsˇechny polozˇky, jejichzˇ na´zev obsahuje rˇeteˇzec rc .
C
2. Najdeˇte ve sve´m domovske´m adresa´rˇi vsˇechny soubory, ktere´ obsahujı´ rˇeteˇzec (dvojznak) #! . 3. Vypisˇte pocˇet podadresa´rˇu˚ ve sve´m domovske´m adresa´rˇi. 4. Vypisˇte pocˇet vsˇech beˇzˇny´ch souboru˚ ze sve´ho domovske´ho adresa´rˇe, ktere´ jsou skryte´ (zacˇ´ınajı´ tecˇkou). 5. Vypisˇte seznam vsˇech symbolicky´ch odkazu˚ ve sve´m domovske´m adresa´rˇi. 6. Sestavte prˇ´ıkaz, ktery´ prohleda´ syste´m a najde vsˇechny soubory veˇtsˇ´ı nezˇ 1024 MB, nechte zobrazit vlastnosti souboru (abyste zjistili vlastnı´ky teˇchto souboru˚), prˇ´ıpadneˇ mu˚zˇete z rˇa´dku˚ vyfiltrovat pouze u´daje o vlastnı´kovi a na´zvu souboru.
1.5.4
Automaticke´ zpracova´nı´
Hromadne´ zmeˇny v obsahu souboru lze prova´deˇt vı´ce ru˚zny´mi programy. Z nejzna´meˇjsˇ´ıch jsou sed (Stream Editor) a awk, kde sed ma´ jednodusˇsˇ´ı syntaxi, ktera´ dovoluje naprˇ´ıklad vymaza´va´nı´ vzoru˚ odpovı´dajı´cı´ch regula´rnı´mu vy´razu nebo jejich nahrazova´nı´ jiny´mi vzory, program awk je jizˇ mnohem komplexneˇjsˇ´ı a jde vlastneˇ o programovacı´ jazyk hodneˇ podobny´ jazyku C. Zde si uka´zˇeme pouze program sed. Za´kladnı´ syntaxe:
1.5
PRˇESMEˇROVA´NI´ A FILTRY
27
sed [pr ˇepı ´nac ˇe] [skript] [vstupnı ´_soubor]
zpracova´nı´ vy´razu˚ v textove´m souboru, neˇktere´ prˇepı´nacˇe: -e r ˇete ˇzec skript k provedenı´ (ne soubor, ale rˇeteˇzec!) -f soubor soubor se skriptem k provedenı´
Skript ma´ formu ap, kde a je adresa ve zpracova´vane´m souboru a p je prˇ´ıkaz, ktery´ se na dane´m mı´steˇ ma´ prove´st. Pro zada´nı´ adresy a prˇ´ıkazu platı´ da´le nastı´neˇna´ pravidla. Adresy mohou by´t: • (bez adresy) prˇ´ıkaz se pouzˇije na vsˇechny rˇa´dky • c ˇı ´slo cˇ´ıslo rˇa´dku, ktery´ se ma´ zpracovat • c ˇı ´slo~krok vsˇechny rˇa´dky od rˇa´dku s dany´m cˇ´ıslem s na´sobkem dany´m krokem (tj. c ˇı ´slo + i*krok), naprˇ´ıklad 1~2 budou vsˇechny liche´ rˇa´dky • $ poslednı´ rˇa´dek vstupu • /regula ´rnı ´_vy ´raz/ rˇa´dky odpovı´dajı´cı´ regula´rnı´mu vy´razu, lomı´tka jsou nutna´, uvnitrˇ pouzˇ´ıva´me vsˇe, co u grep, ale prˇed neˇktere´ vy´znamove´ znaky da´va´me \ (\+, \?, \{...}, \|) Pokud na´sleduje I, nerozlisˇujı´ se mala´ a velka´ pı´smena • adresa1,adresa2 vsˇechny rˇa´dky v rozmezı´ adres • adresa,+n vsˇech n rˇa´dku˚ od zadane´ adresy Prˇ´ıkazy majı´ tuto formu: • d vymazˇ nalezeny´ vzor • p vypisˇ (vytiskni) nalezeny´ vzor na vy´stup • s/co/c ˇı ´m/pr ˇepı ´nac ˇe (lomı´tka jsou soucˇa´stı´ vy´razu) nahrad’ co c ˇı ´m, a to zpu ˚ sobem urcˇeny´m prˇepı´nacˇi: – g nahrad’ vsˇechny vy´skyty – c ˇ´ ıslo nahrad’ jen vy´skyt s porˇadı´m c ˇı ´slo – i nerozlisˇuj mala´ a velka´ pı´smena Prˇı´klad 1.15 Na neˇkolika prˇ´ıkladech si uka´zˇeme pouzˇitı´ programu sed: sed -e ’1,5d’ soubor.txt
odstranı´ ze zadane´ho souboru prvnı´ azˇ pa´ty´ rˇa´dek sed -e ’s/<[ˆ>]*>//g’ *.html
ze vsˇech html souboru˚ v dane´m adresa´rˇi odstranı´ vsˇechny tagy <...> (vnitrˇnı´ cˇa´st zajisˇt’uje, zˇe pokud je na rˇa´dku vı´ce tagu˚, bude text mezi nimi zachova´n), dveˇ lomı´tka za sebou jsou nutna´, protozˇe mezi nimi se vlastneˇ nacha´zı´ pra´zdny´ rˇeteˇzec c ˇı ´m – g znamena´ „nahradit vsˇechny vy´skyty“
MOZˇNOSTI VYTVORˇENI´ NOVE´HO SOUBORU
1.6
28
cat soubor.txt | sed -e ’s/\&/\&/g’ | sed -e ’s/\/\>/g’ > soubor.html usnadnı´ prˇevod textove´ho souboru do html formy tı´m, zˇe vsˇechny symboly & nahradı´ patrˇicˇny´m ekvivalentem v HTML ko´du, tote´zˇ udeˇla´ take´ se zname´nky < a >
Prˇı´klad 1.16 Nalezene´ cˇa´sti vy´razu jsou zapamatova´ny a prˇ´ıstupny pod \1, \2, atd., uka´zˇeme si na prˇ´ıkladu da´vkove´ zmeˇny prˇ´ıpony HTM na HTML: ls *.htm | sed -e ’s/\(.*\)\.htm/mv \1.htm \1.html/’
• prˇ´ıkaz ls vypı´sˇe obsah adresa´rˇe (jako dir ve Windows) podle zadane´ho vzoru – vsˇechny soubory s prˇ´ıponou htm, • ve skriptu pouzˇijeme prˇ´ıkaz s/co/c ˇı ´m/pr ˇepı ´nac ˇe, • reg. vy´raz pro „co“ znamena´ neˇjake´ znaky (tj. \(.*\)) na´sledovane´ tecˇkou (\.) a pu˚vodnı´ prˇ´ıponou, • provede se vola´nı´ prˇ´ıkazu mv, ktery´ prˇejmenuje soubory s prˇ´ıponou HTM na tyte´zˇ soubory, ale s prˇ´ıponou HTML (cˇa´st prˇed prˇ´ıponou je zapamatova´na v \1).
´ koly U 1. Odhadneˇte, co bude vy´stupem teˇchto prˇ´ıkazu˚ (domovsky´ adresa´rˇ je ˜):
C
• ls -la | sed -e ’s/r--/---/g’ • ls -la | sed -e ’/ˆd/d’ • ls -la | sed -e ’s/ˆ[rwxdl-]*/t prava/g’ 2. Napisˇte prˇ´ıkaz podobny´ prˇ´ıkazu˚m v prˇedchozı´m u´kolu, ktery´ by v uvedene´m vy´pisu smazal vsˇe, co se nacha´zı´ za poslednı´ tecˇkou na rˇa´dku (v sekci o regula´rnı´ch vy´razech pro vyhleda´va´nı´ si najdeˇte zpu˚sob reprezentace konce rˇa´dku).
1.6
Mozˇnosti vytvorˇenı´ nove´ho souboru
V prˇedchozı´m textu jsme se setkali s neˇkolika mozˇnostmi vytvorˇenı´ nove´ho souboru, neˇktere´ z nich dovolujı´ za´rovenˇ do souboru neˇco ulozˇit. Takzˇe postupneˇ: • kopı´rova´nı´m a smeˇrova´nı´m do souboru • touch soubor
O
DALSˇI´ PRˇI´KAZY
1.7
29
• cat /dev/null > soubor • cat > soubor, napı´sˇeme pa´r rˇa´dku˚, pak stiskneme Ctrl+D S poslednı´m uvedeny´m zpu˚sobem jsme se setkali i u Windows (pouzˇitı´ prˇ´ıkazu type v kombinaci se vstupem CON). V Linuxu mu˚zˇeme vytvorˇit zcela ekvivalentnı´ prˇ´ıkaz: cat /dev/tty > soubor nebo cat < /dev/tty > soubor
ale procˇ bychom to deˇlali, kdyzˇ prˇ´ıkaz cat doka´zˇe pracovat i interaktivneˇ (proto mu˚zˇeme vynechat zada´nı´ vstupu jako konzoly). Nicme´neˇ, je to mozˇne´. Pokud si „nemu˚zˇeme zapamatovat“ ukoncˇujı´cı´ sekvenci Ctrl+D , ktera´ prˇedstavuje konec souboru, ma´me mozˇnost pouzˇ´ıt tzv. vlozˇene´ soubory (here documents). Je to (te´meˇrˇ) tote´zˇ, jen navı´c stanovı´me ukoncˇujı´cı´ sekvenci.
P
Prˇı´klad 1.17 Vytvorˇ´ıme novy´ soubor pomocı´ vlozˇene´ho souboru, tedy stanovı´me ukoncˇujı´cı´ sekvenci, po jejı´mzˇ zada´nı´ bude soubor uzavrˇen, prˇ´ıkaz ukoncˇen, a tato sekvence se nestane soucˇa´stı´ vytvorˇene´ho souboru. Zada´me: cat > novysoubor.txt << KONEC
Da´le pı´sˇeme na kla´vesnici to, co chceme, aby bylo v souboru: Toto je prvnı ´ r ˇa ´dek, a ted’ pı ´s ˇeme dals ˇı ´ r ˇa ´dek. Tento r ˇa ´dek bude poslednı ´. KONEC
M
Po napsa´nı´ ukoncˇujı´cı´ sekvence (kterou jsme urcˇili na rˇeteˇzec „KONEC“) se prˇ´ıkaz ukoncˇ´ı a soubor je vytvorˇen.
1.7
Dalsˇı´ prˇı´kazy
Podı´va´me se na neˇktere´ dalsˇ´ı jednoduche´ prˇ´ıkazy: date
vy´pis data a cˇasu, parametry mu˚zˇeme stanovit, co a v jake´ formeˇ bude vypsa´no vypı´sˇe datum ve tvaru den.meˇsı´c (meˇsı´c bude vypsa´n slovneˇ, podle jazykove´ho nastavenı´ syste´mu) date +%x vypı´sˇe datum ve tvaru meˇsı´c/den/rok date +%T vypı´sˇe cˇas ve tvaru hodiny:minuty:sekundy date >> log.dat tento prˇ´ıkaz umı´steˇny´ do .login, prˇ´ıpadneˇ .profile, zpu˚sobı´, zˇe prˇi kazˇde´m prˇihla´sˇenı´ se do souboru log.dat prˇida´ datum tohoto prˇihla´sˇenı´, ma´me tedy prˇehled o tom, kdy se uzˇivatel tohoto jme´na prˇihlasˇoval
date +%d.%B
$
SPECIA´LNI´ ZNAKY PRO UVOZOVA´NI´
1.8
30
clear
smaza´nı´ obrazovky exec pr ˇı ´kaz
provede prˇ´ıkaz, ale teˇsneˇ prˇed tı´m ukoncˇ´ı rodicˇovsky´ proces (pokud tento prˇ´ıkaz napı´sˇeme v shellu, pak je ukoncˇen shell a pak proveden prˇ´ıkaz); hlavnı´m du˚vodem pouzˇ´ıva´nı´ tohoto prˇ´ıkazu bylo drˇ´ıve omezene´ mnozˇstvı´ operacˇnı´ pameˇti, ukoncˇenı´ rodicˇovske´ho procesu zpu˚sobilo uvolneˇnı´ pameˇti jı´m pouzˇ´ıvane´, dnes se pouzˇ´ıva´ spı´sˇe jako poslednı´ spousˇteˇcı´ prˇ´ıkaz ve skriptech echo [-e] [-n] r ˇete ˇzec
tento prˇ´ıkaz byl jizˇ drˇ´ıve pouzˇ´ıva´n. Jeho za´kladnı´ u´cˇel je stejny´ jako ve Windows, tedy vypı´sˇe svu˚j parametr (vsˇe vcˇetneˇ mezer). Prˇepı´nacˇ -n zamezı´ prˇechodu na novy´ rˇa´dek po vyhodnocenı´ prˇ´ıkazu. Pokud parametr nebo jeho cˇa´st uzavrˇeme do uvozovek, mu˚zˇeme pouzˇ´ıvat specia´lnı´ znaky (escape sekvence) (naprˇ´ıklad \n zpu˚sobı´ prˇesun na novy´ rˇa´dek – zarˇa´dkova´nı´ ve vy´stupu, \t je tabula´tor), ale navı´c musı´ by´t pouzˇit prˇepı´nacˇ -e. Mu˚zˇeme pouzˇ´ıt i apostrofy, pak obsah nebude interpretova´n (vypı´sˇe se tak jak je). Prˇı´klad 1.18 Tento prˇ´ıkaz vytvorˇ´ı na´sledujı´cı´ tabulku: echo -e ”Nadpis1\tNadpis2\nObsah1\tObsah2” Nadpis1 Obsah1
Nadpis2 Obsah2
´ koly U 1. Vyzkousˇejte ru˚zne´ mozˇnosti zobrazenı´ data a cˇasu.
M C
2. Zobrazte manua´lovou stra´nku prˇ´ıkazu echo (v sekci 1). Zjisteˇte, jake´ prˇepı´nacˇe ma´ tento prˇ´ıkaz a jake´ forma´tovacı´ rˇeteˇzce lze pouzˇ´ıvat mimo vy´sˇe uvedeny´ch.
1.8
Specia´lnı´ znaky pro uvozova´nı´
Ru˚zne´ typy uvozovek a dalsˇ´ıch symbolu˚ mohou meˇnit zpu˚sob zacha´zenı´ s rˇeteˇzcem. Apostrofy urcˇujı´, zˇe vsˇe, co je mezi nimi, tvorˇ´ı jednolity´ celek, i kdybychom mezitı´m klepli na kla´vesu Enter , znaky mezi apostrofy jsou obvykle bra´ny jako obycˇejny´ text. Jsou beˇzˇneˇ pouzˇ´ıva´ny naprˇ´ıklad v teˇchto prˇ´ıpadech: • v prˇ´ıkazu echo (nebo jine´m) chceme text umı´stit do vı´ce rˇa´dku˚, pak na prvnı´m rˇa´dku (ktery´ zacˇ´ına´ prˇ´ıslusˇny´m prˇ´ıkazem) je jen levy´ apostrof, pravy´ je na poslednı´m rˇa´dku, ktery´ chceme do vstupu zahrnout,
P
1.8
SPECIA´LNI´ ZNAKY PRO UVOZOVA´NI´
31
• na´zvy souboru˚ obsahujı´cı´ mezery uzavı´ra´me do apostrofu˚, • find / -name ’*’ -print (zde zabranˇujeme interpretaci hveˇzdicˇky; vyzkousˇejte i variantu bez apostrofu˚, obdrzˇ´ıte chybove´ hla´sˇenı´) • atd., setkali jsme se s nimi u regula´rnı´ch vy´razu˚, kde urcˇovaly hranice vy´razu a zamezovaly prˇedcˇasne´ interpretaci, setka´me se s nimi take´ naprˇ´ıklad u promeˇnny´ch. Obra´cene´ apostrofy naopak zpu˚sobujı´ okamzˇitou interpretaci sve´ho obsahu. Tedy obsah mezi obra´ceny´mi apostrofy je nahrazen svy´m vy´stupem. Takto lze vlozˇit vy´stup jednoho prˇ´ıkazu do parametru jine´ho prˇ´ıkazu.
P
Prˇı´klad 1.19 Srovnejme (pozor, mezery kolem opera´toru jsou povinne´!!!): • expr 1 + 1 • echo Vy ´poc ˇet: ’expr 1 + 1’ • echo Vy ´poc ˇet: ‘expr 1 + 1‘ Vy´stup prvnı´ho prˇ´ıkazu je cˇ´ıslo 2 (tento prˇ´ıkaz vyhodnotı´ svu˚j argument jako aritmeticky´ vy´raz). V druhe´m prˇ´ıpadeˇ se pouze vypı´sˇe cely´ rˇeteˇzec, nic nebude vypocˇteno. V trˇetı´m prˇ´ıpadeˇ jsme do parametru prˇ´ıkazu echo vlozˇili prˇ´ıkaz pro vy´pocˇet, a to v obra´ceny´ch apostrofech, tedy nejdrˇ´ıv je proveden vnitrˇnı´ prˇ´ıkaz, pak je jeho vy´sledek (cˇ´ıslo 2) vlozˇen na mı´sto tohoto prˇ´ıkazu a teprve potom je vypsa´n cely´ rˇeteˇzec.
Zpeˇtne´ lomı´tko se narozdı´l od ostatnı´ch uvozovacı´ch symbolu˚ pı´sˇe pouze prˇed symbol, nikoliv za neˇj. Zpeˇtna´ lomı´tka pouzˇ´ıva´me k prˇepnutı´ vy´znamu na´sledujı´cı´ho prvku (tj. bud’ vypnutı´ nebo zapnutı´, opacˇneˇ vzhledem k pu˚vodnı´mu nastavenı´). S neˇktery´mi zpu˚soby pouzˇitı´ jsme se uzˇ setkali, naprˇ´ıklad u regula´rnı´ch vy´razu˚ nebo u escape sekvencı´ v prˇ´ıkazu echo. Zde je to naprˇ´ıklad \n, tedy vy´sledek nenı´ cha´pa´n jako pı´smeno „n“, ale escape sekvence prˇechodu na novy´ rˇa´dek. Zpeˇtne´ lomı´tko take´ umı´stı´me na konec rˇa´dku, pokud ma´ prˇ´ıkaz (jeho parametry) pokracˇovat na na´sledujı´cı´m rˇa´dku. Prˇı´klad 1.20 echo prvnı ´ r ˇa ´dek\ > druhy ´ r ˇa ´dek \ > tr ˇetı ´ r ˇa ´dek
vypı´sˇe prvnı ´ r ˇa ´dekdruhy ´ r ˇa ´dek tr ˇetı ´ r ˇa ´dek
(vsˇimneˇte si chybeˇjı´cı´ mezery; chybı´, protozˇe jsme ji do pu˚vodnı´ho prˇ´ıkazu prˇed konec rˇa´dku nenapsali).
P
1.9
PROMEˇNNE´
32
Uvozovky vypı´najı´ nahrazova´nı´ jmen, ale prˇitom zachova´vajı´ vy´znam obra´ceny´ch apostrofu˚, promeˇnny´ch a znaku˚ uvozeny´ch zpeˇtny´m lomı´tkem. Uvozovky vyuzˇijeme take´ jako na´hradu beˇzˇny´ch apostrofu˚, pokud je chceme vnorˇit (beˇzˇne´ apostrofy nelze vnorˇovat, proto mı´sto „vneˇjsˇ´ıch apostrofu˚“ pouzˇijeme uvozovky). ´ koly U Vyuzˇijte obra´cene´ apostrofy k vy´pisu informacı´ o povoleny´ch shellech, vyzkousˇejte:
P C
cat /etc/shells ls -la ‘cat /etc/shells‘
Ve vy´pisu take´ zjistı´te prˇ´ıpadne´ symbolicke´ odkazy, ktere´ jednı´m na´zvem shellu odkazujı´ na jiny´ shell.
1.9 1.9.1
Promeˇnne´ Za´klady pra´ce s promeˇnny´mi
Promeˇnne´ se definujı´ v souboru .bashrc nebo jsou prˇeddefinova´ny syste´mem cˇi v jine´m konfiguracˇnı´m souboru. Nejdu˚lezˇiteˇjsˇ´ı jsou:
P
HOME domovsky´ adresa´rˇ uzˇivatele TERM typ termina´lu SHELL cesta k pouzˇ´ıvane´mu shellu USER prˇihlasˇovacı´ jme´no uzˇivatele PATH seznam adresa´rˇu ˚ , ve ktery´ch se hleda´ spousˇteˇny´ soubor, jednotlive´ cesty jsou oddeˇ-
leny dvojtecˇkou PS1 prompt, vy´zva prˇ´ıkazove´ho rˇa´dku konzoly nebo termina´lu PWD pracovnı´ adresa´rˇ
V promeˇnne´ PATH nenı´ ve vy´chozı´m nastavenı´ cesta k pracovnı´mu adresa´rˇi a prˇi spusˇteˇnı´ programu take´ narozdı´l od Windows nenı´ spousˇteˇny´ program hleda´n v pracovnı´m adresa´rˇi! Proto pokud chceme spustit naprˇ´ıklad program mujprogram umı´steˇny´ v adresa´rˇi, ktery´ je pra´veˇ nasˇ´ım pracovnı´m adresa´rˇem, provedeme to takto: ./mujprogram
Teoreticky by se tento „proble´m“ dal vyrˇesˇit prˇida´nı´m adresa´rˇe „.“ do promeˇnne´ PATH, ale toto rˇesˇenı´ se z bezpecˇnostnı´ch du˚vodu˚ nedoporucˇuje.3 3
Prˇedstavte si, zˇe ve vasˇem domovske´m adresa´rˇi (ktery´ velmi cˇasto by´va´ pracovnı´m adresa´rˇem) bude podstrcˇen sˇkodlivy´ software pojmenovany´ stejneˇ jako neˇktery´ z beˇzˇneˇ pouzˇ´ıvany´ch prˇ´ıkazu˚, nejle´pe prˇ´ıkazu obvykle se nacha´zejı´cı´ho v adresa´rˇi /sbin, ktery´ cˇasto neby´va´ zahrnut v promeˇnne´ PATH. Pokud zarˇadı´me
$
PROMEˇNNE´
1.9
33
Existuje take´ obdoba rozdeˇlenı´ promeˇnny´ch na beˇzˇne´ a dynamicke´, s cˇ´ımzˇ jsme se setkali uzˇ ve Windows. Naprˇ´ıklad promeˇnna´ PS1 je dynamicka´. Promeˇnne´ jsou bud’ loka´lnı´ (platne´ pouze v ra´mci skriptu, prˇ´ıkazove´ho shellu nebo bloku uvnitrˇ skriptu), a nebo promeˇnne´ prostrˇedı´, ktere´ jsou viditelne´ i mimo oblast, ve ktere´ byly deklarova´ny (pozor, pojem „prostrˇedı´“ ma´ v Linuxu opacˇny´ vy´znam nezˇ ve Windows). Prˇ´ıkazy pro pra´ci s promeˇnny´mi: echo $prome ˇnna ´
vypı´sˇe obsah promeˇnne´ (vyhodnotı´ ji), pracuje s beˇzˇny´mi i dynamicky´mi promeˇnny´mi prome ˇnna ´=vy ´raz
zmeˇnı´ obsah promeˇnne´ export prome ˇnna ´
exportuje promeˇnnou do prostrˇedı´ (aby ji mohly vyuzˇ´ıvat vsˇechny skripty i prˇ´ıkazovy´ rezˇim), da´ se spojit s prˇirˇazenı´m hodnoty do promeˇnne´ env
vypı´sˇe promeˇnne´ s jejich obsahem (promeˇnne´ prostrˇedı´) set
vypı´sˇe vesˇkere´ promeˇnne´ a funkce, ktere´ jsou definova´ny v dane´ oblasti, ve ktere´ pracujeme (vy´stup je pomeˇrneˇ rozsa´hly´) unset
odstranı´ promeˇnnou read prome ˇnna ´
nacˇte ze standardnı´ho vstupu rˇeteˇzec do promeˇnne´ Znak $ vyhodnotı´ vsˇe, co se za nı´m nacha´zı´ (vsˇe azˇ po prvnı´ mezeru nebo konec rˇa´dku povazˇuje za na´zev zpracova´vane´ promeˇnne´), proto kdyzˇ zada´va´me za na´zvem promeˇnne´ jesˇteˇ neˇco dalsˇ´ıho, uzavrˇeme tuto promeˇnnou do lomeny´ch za´vorek: export PATH=${PATH}:/usr/TeX/bin
Kdyzˇ chceme, aby se takova´to „vnitrˇnı´ promeˇnna´“ vyhodnocovala prˇi kazˇde´m vola´nı´ „vneˇjsˇ´ı promeˇnne´“, uzavrˇeme vy´raz do jednoduchy´ch uvozovek (apostrofu˚). Prˇı´klad 1.21 Prˇedpokla´dejme, zˇe neˇkde trˇeba ve skriptu pouzˇ´ıva´me promeˇnnou. Nejdrˇ´ıv ji vytvorˇ´ıme a inicializujeme, pak vypı´sˇeme jejı´ obsah. do promeˇnne´ PATH tecˇku, mu˚zˇeme tento sˇkodlivy´ software omylem spustit (a pokud je jeho programa´tor dost chytry´ na to, aby po dokoncˇenı´ sve´ vlastnı´ cˇinnosti spustil pu˚vodnı´ program na spra´vne´m umı´steˇnı´, tak to ani nezjistı´me). Mohlo by se zda´t, zˇe stacˇ´ı tecˇku prˇidat azˇ na konec promeˇnne´ PATH, aby vsˇechny drˇ´ıve uvedene´ adresa´rˇe meˇly prˇednost, ale toto nefunguje, pokud neˇktere´ jinak du˚lezˇite´ cesty nejsou v te´to promeˇnne´ zahrnuty.
P $
1.9
PROMEˇNNE´
34
prom=”A B C” echo $prom echo ”$prom” echo \$prom
Druhy´, trˇetı´ a cˇtvrty´ prˇ´ıkaz na´m postupneˇ dajı´ tyto vy´stupy (vsˇimneˇte si du˚sledku pouzˇitı´ uvozovek): A B C A B C $prom
Prˇı´klad 1.22 Do promeˇnne´ nemusı´me ukla´dat jen rˇeteˇzec nebo cˇ´ıslo. Jak vı´me, obra´cene´ apostrofy jsou prostrˇedkem, jak vynutit vyhodnocenı´ vy´razu. Naprˇ´ıklad: prom=”Vy ´stup: ; ‘ls -la‘” echo $prom echo ”$prom”
V prvnı´m prˇ´ıkazu jsme do promeˇnne´ ulozˇili prˇ´ıkaz (vlastneˇ dva prˇ´ıkazy oddeˇlene´ strˇednı´kem, aby mohly by´t na jednom rˇa´dku) k interpretaci. Obra´cene´ apostrofy uvnitrˇ uvozovek jsou zde nutne´. V dalsˇ´ıch prˇ´ıkazech vypisujeme obsah promeˇnne´, cˇ´ımzˇ vyvola´me interpretaci prˇ´ıkazu˚ v nı´ ulozˇeny´ch. Vyzkousˇenı´m si mu˚zˇeme oveˇrˇit vy´znam uvozovek u poslednı´ho prˇ´ıkazu.
Prˇı´klad 1.23 Dalsˇ´ı uka´zky s promeˇnny´mi: export PS1=’$PWD’
do promeˇnne´ PS1, tj. do momenta´lnı´ho promptu, si ulozˇ´ıme pra-
covnı´ adresa´rˇ pracovnı´ adresa´rˇ bez cesty, s cestou je \w (a take´ zobrazuje domovsky´ adresa´rˇ jako vlnovku)
PS1=”\W” PS1=”\d”
promptem bude aktua´lnı´ datum
PS1=”\A”
promptem je aktua´lnı´ cˇas – jen hodiny a minuty, jine´ mozˇnosti pro cˇas jsou \t
nebo \T PS1=”\u\h\$ ” PS1=”\u\h:\w> ”
prompt je ve formeˇ uzˇivatel pocˇ´ıtacˇ$ (plus mezera) prompt je ve formeˇ uzˇivatel pocˇ´ıtacˇ: pracovnı´ adresa´rˇ¿ (plus mezera)
PS1=’pracuji tak dlouho: $SECONDS’
dynamicka´
opeˇt zmeˇnı´me prompt, promeˇnna´ SECONDS je
1.9
PROMEˇNNE´
35
vyuzˇili jsme promeˇnnou uvnitrˇ parametru prˇ´ıkazu; vsˇimneˇte si slozˇeny´ch za´vorek kolem na´zvu promeˇnne´, zde jsou nutne´
mkdir $HOME/novy
Kromeˇ promeˇnne´ PS1 existujı´ obvykle jesˇteˇ dalsˇ´ı promeˇnne´ urcˇujı´cı´ prompt. Veˇtsˇinou se setka´me alesponˇ se sekunda´rnı´m promptem PS2, ktery´ je zobrazova´n naprˇ´ıklad prˇi psanı´ vı´cerˇa´dkovy´ch prˇ´ıkazu˚, prˇ´ıpadneˇ prˇi vytva´rˇenı´ here documents. Pokud chceme, aby na´mi vytvorˇena´ promeˇnna´ byla viditelna´ i mimo pracovnı´ prostrˇedı´, ve ktere´m je vytvorˇena (naprˇ´ıklad i mimo skript, nejru˚zneˇjsˇ´ım dalsˇ´ım programu˚m apod., musı´me ji exportovat: export prom
Prˇ´ıkaz set je ve skutecˇnosti mnohem silneˇjsˇ´ı, nejde jen o vypisova´nı´ seznamu promeˇnny´ch a funkcı´. Mu˚zˇeme naprˇ´ıklad do promeˇnne´ prˇirˇadit vy´sledek funkce (podrobnosti najdeme v manua´love´ stra´nce prˇ´ıkazu set). ´ koly U 1. Vyzkousˇejte prˇ´ıkazy vypisujı´cı´ promeˇnne´. Vyberte si kteroukoliv promeˇnnou a vypisˇte jejı´ obsah.
C
2. Vyzkousˇejte prˇ´ıkazy z prˇ´ıkladu 1.21. Da´le podle prˇ´ıkladu 1.22 vyzkousˇejte prˇirˇazenı´ prˇ´ıkazu do promeˇnne´. Take´ se pokuste zmeˇnit si prompt podle dalsˇ´ıho prˇ´ıkladu.
1.9.2
Vy´pocˇty
Pouzˇ´ıva´nı´ promeˇnny´ch u´zce souvisı´ s prova´deˇnı´m vy´pocˇtu˚. Pro tyto u´cˇely existujı´ prˇedevsˇ´ım dva za´kladnı´ prˇ´ıkazy: let ”vy ´raz”
zmeˇna hodnot promeˇnny´ch s vyhodnocenı´m vy´razu, v neˇktery´ch prˇ´ıpadech jsou uvozovky nutne´ let let let let
3 + 4 vypocˇte a vypı´sˇe vy´sledek ”prom=3+4” do promeˇnne´ je ulozˇen vy´sledek vy´razu ”prom+=4” je podporova´na „ce´cˇkovska´“ notace prˇirˇazova´nı´ ”prom+=$prom” na prave´ straneˇ mu˚zˇe by´t take´ promeˇnna´, ale samozrˇejmeˇ
prˇ´ıslusˇneˇ oznacˇena´ symbolem dolaru, aby byla interpretova´na expr vy ´raz
dalsˇ´ı zpu˚sob, jak vyhodnotit vy´raz a prˇ´ıpadneˇ v neˇm pouzˇ´ıt promeˇnnou, cˇi do promeˇnne´ ulozˇit vy´sledek, kolem opera´toru˚ jsou povinneˇ mezery nejdrˇ´ıv vypocˇte vy´raz, pak vy´sledek prˇirˇadı´ do promeˇnne´ (kolem rovnı´tka nesmı´ by´t mezery)
prom=‘expr 3 + 4‘
1.9
PROMEˇNNE´
36
vypı´sˇe cˇ´ıslo o 1 veˇtsˇ´ı nezˇ je hodnota promeˇnne´ $prom (tj. dosadı´ za promeˇnnou, vypocˇte vy´raz a vypı´sˇe)
expr $prom + 1
Vy´sledek si mu˚zˇeme vzˇdy oveˇrˇit vypsa´nı´m echo $prom. Prˇı´klad 1.24 Hodnotu promeˇnne´ lze nacˇ´ıst i od uzˇivatele (promeˇnna´, do ktere´ nacˇteme vstup od uzˇivatele, nemusı´ prˇedem existovat, lze ji vytvorˇit i vola´nı´m funkce read): echo -n ”Zadej c ˇı ´slo: ” read prom1 echo -n ”Byla nac ˇtena hodnota ${prom1}” prom2=$prom1
Vsˇimneˇte si za´vorek kolem na´zvu promeˇnne´. Zde nejsou prˇ´ımo nutne´, ale je dobre´ si na neˇ zvyknout, protozˇe v urcˇity´ch prˇ´ıpadech jsou naopak nevyhnutelne´. Cely´ vypisovany´ rˇeteˇzec take´ nemusı´ by´t v uvozovka´ch, v tomto prˇ´ıpadeˇ. prom1+=80 let ”prom2+=80 echo prom1=${prom1}, prom2=${prom2}.
´ koly U 1. Proved’te prˇ´ıkazy z prˇ´ıkladu 1.24. Zjisteˇte, jaky´ je rozdı´l ve vy´stupech prˇ´ıkazu˚, kde se k promeˇnne´ prˇicˇ´ıta´ cˇ´ıslo 80. Ve ktere´m prˇ´ıpadeˇ se s promeˇnnou zacha´zı´ vzˇdy jako s rˇeteˇzcovou? 2. Zobrazte manua´lovou stra´nku prˇ´ıkazu expr a zjisteˇte, jake´ vy´razy jı´m lze interpretovat. 3. Vyzkousˇejte vy´pocˇty, kde je na prave´ straneˇ vy´razu promeˇnna´. Nacˇteˇte od uzˇivatele hodnotu promeˇnne´ a vypisˇte jejı´ dvojna´sobek.
C
Kapitola
2
Skripty a programova´nı´ V te´to kapitole jsou zahrnuta pokrocˇilejsˇ´ı te´mata, je vlastneˇ rozsˇ´ırˇenı´m prˇedchozı´ kapitoly. Podı´va´me se na konfiguracˇnı´ soubory, potom na dalsˇ´ı u´lohy ty´kajı´cı´ se pra´ce v shellu bash (skripty, podmı´nky, cykly, pole, apod.).
2.1
Konfiguracˇnı´ a dalsˇı´ syste´move´ soubory
Veˇtsˇina konfiguracˇnı´ch souboru˚ nenı´ psa´na pro urcˇity´ shell, ale ma´ specia´lnı´ forma´t (samozrˇejmeˇ textovy´) srozumitelny´ prˇedevsˇ´ım tomu programu, ktery´ ma´ konfigurovat. Neˇktere´ z nich jsou skryte´ (zacˇ´ınajı´ tecˇkou). Prˇ´ıklady konfiguracˇnı´ch souboru˚: /etc/fstab
seznam souborovy´ch syste´mu˚, ktere´ se prˇipojujı´ prˇi startu syste´mu nebo mohou by´t prˇipojeny /etc/mtab
seznam momenta´lneˇ prˇipojeny´ch (mounted) souborovy´ch syste´mu˚, je dynamicky generova´n syste´mem podle obsahu jednoho ze souboru˚ v adresa´rˇi /proc /etc/inittab
konfigurace programu init /etc/securetty
seznam termina´lu˚, ze ktery´ch je dovoleno prˇihla´sit se na u´cˇet root /etc/passwd
seznam uzˇivatelu˚ /etc/group
seznam skupin
37
P
2.2
SKRIPTY
38
Do souboru /var/log/messages se (ve vy´chozı´m nastavenı´, ktere´ mu˚zˇe by´t zmeˇneˇno) ukla´dajı´ zpra´vy o beˇhu syste´mu (co se deˇje, co se spousˇtı´ apod.), vcˇetneˇ samotne´ho startu syste´mu. Pokud chceme zjistit, zda dosˇlo k neˇjake´ chybeˇ (a prˇ´ıpadneˇ i neˇjake´ dalsˇ´ı informace), mu˚zˇeme nahle´dnout do tohoto souboru. Prˇ´ımy´ prˇ´ıstup k neˇmu ma´ vsˇak pouze root, a navı´c tento soubor je hodneˇ rozsa´hly´ (dokonce uzˇ jen prˇi startu se toho deˇje strasˇneˇ hodneˇ), takzˇe musı´me zvolit vhodny´ zpu˚sob prˇ´ıstupu k tomuto souboru a navı´c pouzˇ´ıt vhodny´ filtr.
P
Root pouzˇije na´sledujı´cı´ prˇ´ıkaz: cat /var/log/messages | grep klı ´c ˇove ´ slovo,
beˇzˇny´ uzˇivatel napı´sˇe prˇ´ıkaz dmesg | grep klı ´c ˇove ´_slovo (program dmesg slouzˇ´ı k zı´ska´nı´ informacı´ o startu syste´mu, take´ cˇte ze souboru /var/log/messages). Beˇzˇny´ uzˇivatel mu˚zˇe takto zı´skat pouze informace ulozˇene´ do /var/log/messages beˇhem startu syste´mu, root ktere´koliv infor-
mace prˇidane´ kdykoliv prˇi beˇhu syste´mu. Kdyzˇ se prˇihlasˇujeme, postupneˇ se nacˇ´ıtajı´ tyto konfiguracˇnı´ soubory: • /etc/profile – toto je obecny´ skript platny´ pro vsˇechny profily
P
• ˜/.bash_profile, ˜/.bash_login, ˜/.profile – bere v u´vahu vzˇdy jen jeden z teˇchto trˇ´ı souboru˚ (vzˇdy ten prvnı´ podle tohoto porˇadı´, na ktery´ narazı´), obsahuje konkre´tnı´ profil platny´ pro dane´ho uzˇivatele • ˜/.bashrc – tento skript se spustı´, pokud jsme se neprˇihlasˇovali v textove´m rezˇimu, ale chceme pracovat trˇeba v konzole Prˇi odhlasˇova´nı´ se pak prova´dı´ ko´d v souboru ˜/.bash_logout.
2.2 2.2.1
Skripty Co je to skript
Skripty (skriptove´ soubory) jsou textove´ spustitelne´ soubory, ktere´ pro sve´ spusˇteˇnı´ potrˇebujı´ interpret (to je neˇktery´ shell). Soubory se skripty obvykle mı´vajı´ bud’ prˇ´ıponu .sh, a nebo jsou bez prˇ´ıpony. Kazˇdy´ skript je psa´n vzˇdy pro urcˇity´ shell nebo programovacı´ jazyk (naprˇ´ıklad bash nebo perl) a v jine´m nemusı´ fungovat. Proto cˇasto by´va´ na prvnı´m rˇa´dku skriptu identifikace shellu. Tento rˇa´dek vzˇdy zacˇ´ına´ dvojicı´ znaku˚ #!, pokud ovsˇem se ve skriptu nacha´zı´. Naprˇ´ıklad: • #!/usr/bin/tcsh znamena´, zˇe skript ma´ by´t interpretova´n shellem Toronto C Shell, • #!/usr/bin/bash urcˇuje skript s prˇ´ıkazy shellu Bourne Again Shell, • #!/usr/bin/perl (adresa mu˚zˇe by´t jina´, za´lezˇ´ı na umı´steˇnı´ spustitelne´ho programu perl) je skript psany´ v programovacı´m jazyce Perl.
P
2.2
SKRIPTY
39
Aby bylo mozˇne´ skript spousˇteˇt v textove´m rezˇimu napsa´nı´m jeho na´zvu, musı´ by´t oznacˇen jako spustitelny´, tj. je trˇeba nastavit prˇ´ıznak x v prˇ´ıstupovy´ch opra´vneˇnı´ch. V opacˇne´m prˇ´ıpadeˇ musı´me skript spousˇteˇt jako parametr interpretacˇnı´ho programu (naprˇ´ıklad bash soubor.sh). Skript pro shell bash vypada´ naprˇ´ıklad takto: #!/bin/bash echo Hello World echo znamena Ahoj svete
M
Skripty mu˚zˇeme pouzˇ´ıt pro automaticke´ za´lohova´nı´, shromazˇd’ova´nı´ informacı´, prˇida´va´nı´ novy´ch uzˇivatelu˚ a obecneˇ jakoukoliv automatizaci posloupnosti operacı´.
2.2.2
Parametry a na´vratove´ hodnoty
Parametry skriptu jsou prˇ´ıstupne´ prˇes promeˇnne´ $0 (na´zev skriptu), $1 (prvnı´ parametr), $2 (druhy´ parametr), . . . , $9 (i vysˇsˇ´ı), jejich obsahy lze posouvat a tak se dostat i k dalsˇ´ım parametru˚m pomocı´ prˇ´ıkazu shift (jako nepovinny´ parametr mu˚zˇeme pouzˇ´ıt cˇ´ıslo
P
oznacˇujı´cı´ pocˇet prˇesunu˚, implicitneˇ je to 1). Skript mu˚zˇe take´ vracet na´vratovy´ ko´d, a to prˇ´ıkazem exit. Mu˚zˇeme jako nepovinny´ argument zadat cˇ´ıslo na´vratove´ho ko´du, vy´chozı´ je cˇ´ıslo 0. Na´vratova´ hodnota nemusı´ by´t konstantnı´ cˇ´ıslo, mu˚zˇeme takto prˇedat trˇeba i obsah promeˇnne´. exit exit 8
konec skriptu, vracı´me hodnotu 0 konec skriptu, vracı´me hodnotu 8
exit $prom
konec skriptu, vracı´me hodnotu obsazˇenou v zadane´ promeˇnne´
Obdobou promeˇnne´ errorlevel z Windows je v Unixu promeˇnna´ $?. Obsahuje status (stav) poslednı´ho spousˇteˇne´ho prˇ´ıkazu, cozˇ samozrˇejmeˇ mu˚zˇe by´t i skript. Beˇzˇneˇ pouzˇ´ıvane´ na´vratove´ hodnoty (chybove´ ko´dy) jsou 0 (proces probeˇhl u´speˇsˇneˇ), 1 (proces se spustil, ale probeˇhl neu´speˇsˇneˇ – nastaly chyby prˇi beˇhu), 2 (proces se nespustil), 127 (proces nebylo mozˇno spustit, protozˇe program nebyl nalezen). Prˇı´klad 2.1 Trochu prˇedbeˇhneme a pouzˇijeme cyklus until pro procha´zenı´ vsˇemi parametry, ktere´ uzˇivatel prˇi spusˇteˇnı´ nasˇeho skriptu pouzˇil. Soubor se skriptem obsahuje tento ko´d: until [ -z ”$1” ] do # # echo -n ”$1 ” shift done # echo #
”z” jako ”zero” - prova ´dı ´ se tak dlouho, dokud nebude splne ˇna podmı ´nka ”prvnı ´ parametr je pra ´zdny ´” # vypı ´s ˇeme prvnı ´ parametr # posun, do prvnı ´ho parametru se dostane obsah druhe ´ho apod. konec cyklu zar ˇa ´dkova ´nı ´ na konec (pra ´zdny ´ r ˇa ´dek)
M
PROGRAMOVA´NI´ V SHELLU
2.3
40
Prˇedpokla´dejme, zˇe tento na´sˇ skript je ulozˇen v souboru s na´zvem pokus.sh a uzˇivatel ho spustil s teˇmito parametry: ./pokus.sh kalendar auto 54 posledni
Pak vy´stupem bude na´sledujı´cı´:
M
kalendar auto 54 posledni
V cyklu sice vypisujeme porˇa´d prvnı´ parametr ($1), ale dı´ky prˇ´ıkazu posunu se do tohoto parametru postupneˇ prˇesouvajı´ vsˇechny na´sledujı´cı´. Cyklus koncˇ´ı tehdy, kdyzˇ je v prvnı´m parametru pra´zdny´ rˇeteˇzec, tj. dalsˇ´ı parametr jizˇ nenı´ zada´n. Mohli bychom pouzˇ´ıt take´ cyklus for (viz da´le) – pocˇet pouzˇity´ch (plny´ch) parametru˚ je totizˇ ulozˇen v promeˇnne´ $#.
2.2.3
Dalsˇı´ mozˇnosti pouzˇitı´ skriptu˚
Na prvnı´m rˇa´dku skriptu by´va´ uveden prˇ´ıkaz spousˇteˇjı´cı´ shell, ktery´ ma´ prove´st interpretaci na´sledujı´cı´ch rˇa´dku˚. Ve skutecˇnosti tam mu˚zˇe by´t te´meˇrˇ ktery´koliv prˇ´ıkaz, ktere´mu je pak prˇesmeˇrova´n zby´vajı´cı´ obsah souboru jako vstup. Nahrazenı´ shellu na´sledujı´cı´m skriptem zpu˚sobı´, zˇe pokud se uzˇivatel, pro ktere´ho byla zmeˇna provedena, pokusı´ prˇihla´sit do syste´mu, vypı´sˇe se mu uvedena´ hla´sˇka a uzˇivateli bude odmı´tnut prˇ´ıstup. #!/usr/bin/tail +2 Pozor, tvu ˚j ´ uc ˇet byl zablokova ´n z du ˚vodu ... Pokud chces ˇ vs ˇe napravit, ...
M
Samotne´ nahrazenı´ shellu se provede prˇ´ıkazem chsh -s /.../soubor_skriptu uz ˇivatel
2.3 2.3.1
Programova´nı´ v shellu Jednoduche´ propojenı´ prˇı´kazu˚
V Unixu se setka´va´me s podobny´mi mozˇnostmi propojenı´ prˇ´ıkazu˚, jake´ zna´me z Windows (ostatneˇ, odkud se to vsˇechno ve Windows asi vzalo). Mozˇnosti: pr ˇı ´kaz1 ; pr ˇı ´kaz2 ; pr ˇı ´kaz3
zvla´sˇt’na samostatny´ch rˇa´dcı´ch
sekvencˇnı´ prova´deˇnı´ prˇ´ıkazu˚, tote´zˇ, jako kdyby byly
$
2.3
PROGRAMOVA´NI´ V SHELLU
41
rˇeteˇzenı´ vstupu˚/vy´stupu˚, tedy roury (kolony) (pozor, to nenı´ plneˇ sekvencˇnı´ prova´deˇnı´, na´sledujı´cı´ prˇ´ıkaz mu˚zˇe zacˇ´ıt zpracova´vat vstup jesˇteˇ prˇed ukoncˇenı´m prˇedchozı´ho prˇ´ıkazu, typicky stra´nkovacı´ filtry)
pr ˇı ´kaz1 | pr ˇı ´kaz2 | pr ˇı ´kaz3
logicke´ OR, na´sledujı´cı´ prˇ´ıkaz se provede pouze tehdy, kdyzˇ prˇedchozı´ skoncˇil neu´speˇchem (tj. vra´til nenulovy´ na´vratovy´ ko´d)
pr ˇı ´kaz1 || pr ˇı ´kaz2 || pr ˇı ´kaz3
logicke´ AND, na´sledujı´cı´ prˇ´ıkaz se provede pouze tehdy, kdyzˇ prˇedchozı´ skoncˇil u´speˇchem
pr ˇı ´kaz1 && pr ˇı ´kaz2 && pr ˇı ´kaz3
Vy´sˇe uvedene´ mozˇnosti lze take´ kombinovat a pracuje se s nimi stejneˇ jako ve Windows, proto je da´le nebudeme rozva´deˇt. Prˇı´klad 2.2 pgrep nejaky_proces >/dev/null && echo proces be ˇz ˇı ´ || echo proces nebe ˇz ˇı ´
Pro sdruzˇova´nı´ neˇkolika prˇ´ıkazu˚ spojeny´ch teˇmito symboly mu˚zˇeme pouzˇ´ıt slozˇene´ za´vorky. Navı´c se takto da´ rˇesˇit proble´m posla´nı´ na pozadı´ cele´ sekvence prˇ´ıkazu˚. Prˇı´klad 2.3 sleep 30; echo ”Konec prace!”
30 sekund se nic nedeˇje (ani prompt), pak se vypı´sˇe hla´sˇka sleep 30; echo ”Konec prace!” &
30 sekund se nic nedeˇje, pak se na pozadı´ provede prˇ´ıkaz { sleep 30; echo ”Konec prace!” }&
30 sekund mu˚zˇeme pracovat (je zobrazen prompt), pak se objevı´ hla´sˇka
Symbol & samotny´ na konci na´zvu prˇ´ıkazu je neˇco trochu jine´ho. Znamena´ asynchronnı´ prova´deˇnı´ prˇ´ıkazu, tedy prˇ´ıkaz na´sledovany´ tı´mto symbolem je spusˇteˇn na pozadı´ a mu˚zˇeme v shellu da´le beˇzˇneˇ pracovat. S touto mozˇnostı´ se blı´zˇe sezna´mı´me ve spra´veˇ procesu˚ a u´loh.
2.3.2
Prˇı´kazy pro podmı´nky a cykly
Podmı´nka if: Prˇ´ıkaz if ma´ tuto syntaxi: if [ podmı ´nka ]; then pr ˇı ´kazy jaky ´koliv poc ˇet pr ˇı ´kazu ˚ fi
nebo
$
if [ podmı ´nka ]; then pr ˇı ´kazy else pr ˇı ´kazy fi
M
2.3
PROGRAMOVA´NI´ V SHELLU
42
Pozna´mka: Mezery uvnitrˇ hranaty´ch za´vorek jsou naprosto nutne´, protozˇe ve skutecˇnosti je za´vorka [ prˇ´ıkazem a vsˇe za nı´ azˇ po strˇednı´k za symbolem ] jsou parametry tohoto prˇ´ıkazu. Mı´sto tohoto prˇ´ıkazu mu˚zˇeme ve skutecˇnosti pouzˇ´ıt jaky´koliv jiny´ prˇ´ıkaz nebo kolonu (rouru) prˇ´ıkazu˚, vyhodnocova´na bude na´vratova´ hodnota.
E
Formu podmı´nky probereme po uka´zce syntaxe cyklu˚. Prˇı´kazy cyklu ˚: Cykly mu˚zˇeme prova´deˇt pomocı´ trˇ´ı druhu˚ prˇ´ıkazu˚: for, while a until. Prˇ´ıkaz for ma´ syntaxi: for i in $( seznam r ˇete ˇzcu ˚ ); do pr ˇı ´kazy echo pr ˇı ´stup k prome ˇnne ´ i je $i echo stejne ˇ jako u syste ´movy ´ch prome ˇnny ´ch done
M
Mu˚zˇeme take´ pouzˇ´ıvat syntaxi prˇevzatou z csh: for i in ’seznam r ˇete ˇzcu ˚’; do pr ˇı ´kazy done
M
Prˇ´ıkazy while a until majı´ tuto syntaxi: while [ podmı ´nka ]; do pr ˇı ´kazy done
until [ podmı ´nka ]; do pr ˇı ´kazy done
Opeˇt je nutne´ prˇida´vat mezery u hranaty´ch za´vorek. Podmı´nky v prˇı´kazech if, while a until: V podmı´nce se pouzˇ´ıvajı´ rˇeteˇzce obvykle prˇedstavujı´cı´ promeˇnne´ a da´le opera´tory reprezentovane´ teˇmito prˇepı´nacˇi: Pro rˇeteˇzce: rete ˇ ˇzec -z r ˇete ˇzec ˇete r ˇzec1 = r ˇete ˇzec2 ˇete r ˇzec1 != r ˇete ˇzec2
= true, pokud je rˇeteˇzec nepra´zdny´ = true, pokud je rˇeteˇzec pra´zdny´ = true, pokud jsou rˇeteˇzce stejne´ = true, pokud jsou rˇeteˇzce ru˚zne´
Pro na´zvy souboru ˚: -f -d -r -w -x -s
soubor soubor soubor soubor soubor soubor
= true, pokud soubor existuje a je beˇzˇny´ soubor = true, pokud soubor existuje a je to adresa´rˇ = true, pokud soubor existuje a je nastaveno pra´vo cˇtenı´ = true, pokud soubor existuje a je nastaveno pra´vo za´pisu = true, pokud soubor existuje a je nastaveno pra´vo spousˇteˇnı´ = true, pokud soubor existuje a ma´ nenulovou de´lku
M
2.3
PROGRAMOVA´NI´ V SHELLU
43
Pro cˇ´ısla a promeˇnne´ s cˇı´sly: c ˇı ´slo1 c ˇı ´slo1 c ˇı ´slo1 c ˇı ´slo1 c ˇı ´slo1 c ˇı ´slo1
-eq -ne -gt -lt -ge -le
c ˇı ´slo2 c ˇı ´slo2 c ˇı ´slo2 c ˇı ´slo2 c ˇı ´slo2 c ˇı ´slo2
= true, pokud cˇ´ıslo1 = cˇ´ıslo2 = true, pokud cˇ´ıslo1 <> cˇ´ıslo2 = true, pokud cˇ´ıslo1 > cˇ´ıslo2 = true, pokud cˇ´ıslo1 < cˇ´ıslo2 = true, pokud cˇ´ıslo1 ≥ cˇ´ıslo2 = true, pokud cˇ´ıslo1 ≤ cˇ´ıslo2
Skla´da´nı´ vy´razu ˚: ! vy ´raz vy ´raz1 -a vy ´raz2 vy ´raz1 -o vy ´raz2 \( vy ´raz \).
negace vy´razu logicke´ AND logicke´ OR uza´vorkova´nı´ vy´razu
Pokud existuje trˇeba jen mala´ pravdeˇpodobnost, zˇe v promeˇnne´ pouzˇite´ ve vy´razu by mohl by´t pra´zdny´ rˇeteˇzec, musı´ by´t na´zev promeˇnne´ (i se znakem $) uzavrˇen do uvozovek. Pokud v prˇ´ıkazu if chceme nechat prvnı´ veˇtev pra´zdnou a psa´t prˇ´ıkazy azˇ do veˇtve else, do prvnı´ veˇtve da´me alespon ˇ pra´zdny´ prˇ´ıkaz (to je „:“, dvojtecˇka). V sekvencı´ch prˇ´ıkazu˚ (vcˇetneˇ podmı´nek prˇ´ıkazu˚) mu˚zˇeme pouzˇ´ıvat take´ symboly pro spojova´nı´ prˇ´ıkazu˚, tj. ;, &&, ||. V prˇ´ıkazech cyklu˚ mu˚zˇeme pro prˇerusˇenı´ cyklu pouzˇ´ıt prˇ´ıkaz break nebo continue. Prˇı´klad 2.4 Podı´va´me se na neˇkolik jednoduchy´ch skriptu˚ vyuzˇ´ıvajı´cı´ch bud’ rozhodova´nı´ (prˇ´ıkaz if) nebo neˇkterou formu cyklu. 1. #!/bin/bash if [ ”$PWD” = ”/” ]; then echo Pracovnı ´ adresa ´r ˇ je root, tam me ˇ nikdo nedostane! exit 1 fi
2. #!/bin/bash #pr ˇepneme se do adresa ´r ˇe docasny v domovske ´m adresa ´r ˇi cd ~/docasny #vytvor ˇı ´me prome ˇnnou (neexportujeme, pouz ˇijeme ji jen zde) souhlas=”N” pwd for i in $( ls -a ); do echo Smazat $i .... (A/N)? read souhlas if [ ”$souhlas” = ”A” || ”$souhlas” = ”a” ]; then #rekurzı ´vnı ´ maza ´nı ´ souboru ˚ a adresa ´r ˇ˚ u:
M M
2.3
PROGRAMOVA´NI´ V SHELLU
44
rm -fr $i if [ $? -eq 0 ]; then echo OK, soubor smaza ´n else echo CHYBA pr ˇi maza ´nı ´ souboru! fi else echo OK, soubor zu ˚ stane fi done
3. #!/bin/bash for c in $( 1 2 3 ); do echo c = $c done for i in $(”$HOME” ”$SHELL” ”$PS1” ); do echo $i je ‘$i‘ done
4. #!/bin/bash klavesa=”N” until [ $klavesa != ”N” ]; do echo Tak uz ˇ stiskni ne ˇjakou kla ´vesu! echo (krome klavesy N) done
5. #!/bin/bash CITAC=1 POSLEDNI=5 vysledek=1 while [ $CITAC -lt $POSLEDNI ]; do let vysledek*=2 citac+=1 done echo 2ˆ$POSLEDNI = $vysledek
2.3.3
Jednoduche´ testova´nı´
Prˇ´ıkaz test prova´dı´ vyhodnocenı´ sve´ho argumentu, obvykle vracı´ hodnotu true nebo false. Umozˇnˇuje zjistit, zda jsou dva rˇeteˇzce (trˇeba obsahy promeˇnny´ch) stejne´ nebo jeden mensˇ´ı (veˇtsˇ´ı apod.) nezˇ druhy´ (prˇedevsˇ´ım pro promeˇnne´ obsahujı´cı´ cˇ´ısla), zda zadany´ soubor existuje, zda je proveditelny´ (tj. program), atd. Na´zvy promeˇnny´ch se da´vajı´ do uvozovek. Syntaxe pouzˇ´ıvana´ v podmı´nka´ch podmı´neˇne´ho prˇ´ıkazu a smycˇek je vlastneˇ alias pro prˇ´ıkaz test, tedy [ r ˇete ˇzce ]; je tote´zˇ jako test r ˇete ˇzce. Prˇ´ıkaz test samozrˇejmeˇ
M
M M
2.3
PROGRAMOVA´NI´ V SHELLU
45
nemusı´me pouzˇ´ıvat jen ve skriptech, mu˚zˇeme vyuzˇ´ıvat mozˇnost prova´deˇt jednoduche´ vy´pocˇty a testova´nı´ prˇ´ımo v prˇ´ıkazove´m rezˇimu. Prˇı´klad 2.5 Uka´zˇeme si pouzˇitı´ jednoduche´ho testova´nı´ na zjisˇteˇnı´ existence adresa´rˇe. Prˇed prˇesunem do zadane´ho adresa´rˇe si mu˚zˇeme takto otestovat, zda existuje: if test -d adresar > then > cd adresar > else > ztratil(-a) jsem se!!! > fi
M
Parametr -d slouzˇ´ı k testova´nı´ existence adresa´rˇe, jine´ parametry zase slouzˇ´ı k testova´nı´ existence jake´hokoliv souboru, blokove´ho cˇi znakove´ho specia´lnı´ho souboru, souboru s nastaveny´m SUID bitem, je mozˇne´ testovat take´ prˇ´ıstupova´ opra´vneˇnı´, zda je adresa´rˇ pra´zdny´, atd.
2.3.4
Pole
Promeˇnne´ nemusı´ by´t jen rˇeteˇzce nebo cela´ cˇ´ısla, mohou to by´t take´ pole polozˇek. S poli pracujeme podobneˇ jako s jiny´mi promeˇnny´mi a syntaxe cˇa´stecˇneˇ vycha´zı´ z jazyka C, jen narozdı´l od C nemusı´me bra´t ohled na omezenı´ dana´ datovy´mi typy a pevnou cˇi dynamickou alokacı´. Indexace je od 0.
Prˇı´klad 2.6 Neˇkolik uka´zek pra´ce s poli: 1. #!/bin/bash #deklarace pole: nazvyznamek=( Jednicky Dvojky Trojky Ctyrky Petky ) znamky=( 8 5 1 2 0 ) #pozor na slozene zavorky: echo Pocet jednicek: $znamky[0] echo Vsechny znamky: $znamky[*] echo Tabulka znamek: echo Znamka /tPocet #parametr prikazu for je vlastne taky pole:
M
PRˇEKLAD PROGRAMU˚
2.4
46
for z in $( 0 1 2 3 4 ); do echo $nazvyznamek[$z]: /t$znamky[$z] done #predefinovani pole: znamky=( 3 4 5 1 ) #paty prvek (znamky[4]) se prepsal na prazdny retezec!
2. #!/bin/bash
M
kapacitaletadel=( 21 3 15 ) #prikoupime letadlo, jehoz kapacita je 52: kapacitaletadel=( $kapacitaletadel[*] 52 ) #do prvniho letadla jsme prikoupili jedno sedadlo: kapacitaletadel[0]=”22”
Neˇktere´ syste´move´ promeˇnne´ jsou take´ typu pole, naprˇ´ıklad BASH_VERSINFO je pole u´daju˚ o pouzˇ´ıvane´ verzi shellu bash.
2.4
Prˇeklad programu˚
V shellu mu˚zˇeme spousˇteˇt i aplikace graficke´ho rezˇimu, existujı´ zde i textove´ programy pro u´pravu textu˚ (naprˇ. nano, pico, vi, vim, emacs, kwrite, kedit), kompila´tory jazyka C (gcc, c++, cc, . . . ) apod. Pro prˇeklad programu˚ v jazyce C (nebo take´ C++) se obvykle pouzˇ´ıva´ prˇekladacˇ gcc (GNU C Compiler). Jedna´ se opravdu o prˇekladacˇ, nikoliv editor (jako editor mu˚zˇeme pouzˇ´ıt neˇktery´ z beˇzˇny´ch textovy´ch editoru˚, ale existujı´ i specia´lneˇ urcˇene´ pro programova´nı´, naprˇ´ıklad Kate nebo prostrˇedı´ KDevelop). Program gcc se v jednodusˇsˇ´ım prˇ´ıpadeˇ pouzˇ´ıva´ takto: gcc -o vystupni_soubor zdrojovy.c
prˇelozˇ´ı zadany´ zdrojovy´ soubor, take´ je stano-
ven vy´stupnı´ soubor Program ma´ velmi mnoho nejru˚zneˇjsˇ´ıch voleb, cˇasto urcˇeny´ch pro prˇeklad konkre´tnı´ho jazyka, neˇktere´ volby jsou hardwaroveˇ za´visle´ (pro konkre´tnı´ hardwarovou platformu). Existujı´ take´ naprˇ´ıklad volby pro prˇeklad vı´cevla´knovy´ch aplikacı´.
$
2.5
DALSˇI´ NA´STROJE
47
´ koly U Vytvorˇte textovy´ soubor zdroj.c s na´sledujı´cı´m obsahem (naprˇ´ıklad v editoru kwrite nebo gedit, nebo prˇ´ımo v shellu prˇ´ıkazem cat > soubor.c << KONEC):
C M
#include<stdio.h> int main(void){ printf(”Hello World\n”); }
Ulozˇte do vasˇeho domovske´ho adresa´rˇe a pak prˇelozˇte: gcc -o vystupnisoubor zdroj.c
Program spust’te. Nezapomenˇte, zˇe va´sˇ domovsky´ adresa´rˇ zrˇejmeˇ nenı´ v promeˇnne´ obsahujı´cı´ cesty ke spustitelny´m souboru˚m, tedy je nutne´ zadat cestu do pracovnı´ho adresa´rˇe: ./vystupnisoubor
2.5
Dalsˇı´ na´stroje
2.5.1
Aliasy
Alias je za´stupny´ na´zev pro neˇjaky´ rˇeteˇzec, obvykle prˇ´ıkaz nebo cˇa´st prˇ´ıkazu. Pro pra´ci s aliasy existuje prˇ´ıkaz alias [zastupny=’retezec’], prˇi pouzˇitı´ bez parametru˚ vypı´sˇe vsˇechny existujı´cı´ aliasy. alias
vypı´sˇe nadefinovane´ aliasy
alias md=’mkdir’
vytvorˇ´ı zkratku pro prˇ´ıkaz mkdir
od te´to chvı´le se prˇi zada´nı´ prˇ´ıkazu ls (prˇ´ıpadneˇ i s dalsˇ´ımi parametry) budou vypisovat vsˇechny polozˇky vcˇetneˇ skryty´ch
alias ls=’ls -a’
vytvorˇ´ıme vlastnı´ prˇ´ıkaz (vlastneˇ ani ne tak prˇ´ıkaz jako obdobu makra), ktery´ vypı´sˇe zadany´ soubor a za´rovenˇ ocˇ´ısluje rˇa´dky. Pouzˇ´ıva´ se takto:
alias seznam=’cat -n’
seznam soubor.txt
vytvorˇ´ıme prˇ´ıkaz, ktery´ ukoncˇ´ı zadany´ proces, i kdyby byl naprˇ´ıklad zamrzly´, pouzˇitı´ pro proces s PID 2510:
alias odstrel=’kill -9’
odstrel 2510
tento prˇ´ıkaz vypisuje vsˇechny textove´ soubory v pracovnı´m adresa´rˇi, vcˇetneˇ skryty´ch
alias textove=”ls -la | grep ’.txt’” alias c+=’mount /mnt/sda1’
ne´ho disku
vytvorˇeny´ prˇ´ıkaz c+ prˇipojı´ prvnı´ oddı´l prvnı´ho pev-
$
DALSˇI´ NA´STROJE
2.5
48
Aliasy platı´ vzˇdy jen do ukoncˇenı´ syste´mu, takzˇe pokud chceme neˇktery´ za´stupny´ rˇeteˇzec pouzˇ´ıvat trvale, musı´me ho zapsat do neˇktere´ho skriptu, ktery´ se spousˇtı´ hned po startu pocˇ´ıtacˇe, prˇihla´sˇenı´ nebo startu shellu (naprˇ. ~/.bashrc).
2.5.2
Konverze textovy´ch souboru˚
iconv je program pro konverzi textovy´ch souboru ˚ mezi ru˚zny´mi ko´dova´nı´mi (filtr), naprˇ´ı-
klad iconv -f cp1250 -t iso8859-2 < souborwin.txt > souboriso.txt
zkonvertuje soubor s Windows ko´dova´nı´m cp1250 na ISO8859-2, iconv -f iso8859-2 -t utf-8 < souboriso.txt > souborutf.txt
zkonvertuje soubor v ko´dova´nı´ ISO8859-2 na unicode UTF-8. Seznam vsˇech podporovany´ch ko´dova´nı´ se zobrazı´ iconv -list. Programem s rozsa´hlejsˇ´ımi funkcemi je naprˇ´ıklad recode (doka´zˇe kromeˇ jine´ho take´ odstranit diakritiku ze souboru), da´le enca (doka´zˇe take´ detekovat znakovou sadu). Program cstocs je zase konvertor specializovany´ na cˇesˇtinu a slovensˇtinu: cstocs cp1250 utf-8 < soubor.txt > vysledek.txt
Program convmv doka´zˇe opravit na´zvy souboru˚, ktere´ nezodpoveˇdny´ uzˇivatel Windows pojmenoval s pouzˇitı´m ha´cˇku˚ a cˇa´rek a odeslal jine´mu uzˇivateli: convmv -f cp1250 -t utf8 soubor
$
Kapitola
3
´ lohy prˇi spra´veˇ U V te´to kapitole se setka´me s u´lohami prˇi spra´veˇ operacˇnı´ho syste´mu, prˇedevsˇ´ım ve spra´veˇ uzˇivatelu˚, procesu˚, zarˇ´ızenı´, sı´teˇ a dalsˇ´ıch. Podı´va´me se take´ na pra´ci s moduly ja´dra.
3.1
Uzˇivatele´ a skupiny
3.1.1
Informace o uzˇivatelı´ch
Uzˇivatele´ mohou v souvislosti se svy´mi u´cˇty pouzˇ´ıvat tyto prˇ´ıkazy: users
vypı´sˇe seznam prˇihla´sˇeny´ch uzˇivatelu˚ (v seznamu bude alesponˇ jeden na´zev – u´cˇet, pod ktery´m jsme prˇihla´sˇeni) who
vy´pis aktivnı´ch uzˇivatelu˚ (pra´veˇ prˇihla´sˇeny´ch podobneˇ jako u prˇedchozı´ho prˇ´ıkazu), a to vcˇetneˇ ru˚zny´ch dalsˇ´ıch informacı´ (bez parametru˚) vypı´sˇe momenta´lneˇ prˇihla´sˇene´ uzˇivatele a za´kladnı´ informace o nich (naprˇ´ıklad kdy se uzˇivatel prˇihlasˇoval) who -aH zobrazı´ se seznam vsˇech logova´nı´ od startu syste´mu (kdyzˇ pouzˇijeme parametr -a nebo --all), nad sloupci se zobrazı´ za´hlavı´ who
w
takto zjistı´me, kdo je prˇihla´sˇen a co deˇla´, pracuje se souborem /var/run/utmp (docˇasny´ soubor s prˇihla´sˇeny´mi uzˇivateli), jako parametr mu˚zˇeme (nemusı´me) zadat prˇihlasˇovacı´ jme´no uzˇivatele, jehozˇ cˇinnost na´s zajı´ma´ whoami
informace o prˇihla´sˇene´m uzˇivateli (prˇihlasˇovacı´ jme´no)
49
$
3.1
UZˇIVATELE´ A SKUPINY
50
id
vypı´sˇe identitu uzˇivatele z vy´pisu zjistı´me sve´ UID, GID, na´zev uzˇivatele a skupiny, a da´le seznam skupin, do ktery´ch patrˇ´ıme; vy´stup mu˚zˇe vypadat takto: uid=1002(uzivatel) gid=100(users) groups=16(dialout),100(users),182(pskupina) id novak vypı´sˇeme podobne´ informace o zadane´m uzˇivateli id -u novak vypı´sˇe se pouze UID uzˇivatele novak (pomocı´ parametru˚ omezujeme mnozˇstvı´ vypsany´ch informacı´) id
finger
vy´pis aktivnı´ch uzˇivatelu˚ vcˇetneˇ plne´ho jme´na, kde a kdy se prˇihla´sil apod. finger vypı´sˇe pozˇadovane´ informace ve sloupcı´ch finger -l vypı´sˇe informace v „long“ – dlouhe´m forma´tu, jako seznam finger novak vypı´sˇe informace o zadane´m uzˇivateli finger novak@uctarna prˇ´ıkaz lze pouzˇ´ıvat i vzda´leneˇ (zada´va´me uzˇivatele a po-
cˇ´ıtacˇ, na ktere´m ma´ by´t prˇihla´sˇen) V souvislosti s uzˇivateli a skupinami na´s zajı´majı´ neˇktere´ soubory. O domovsky´ch adresa´rˇ´ıch vı´me (domovske´ adresa´rˇe beˇzˇny´ch uzˇivatelu˚ jsou v adresa´rˇi /home, domovsky´ adresa´rˇ roota je /root, syste´movı´ uzˇivatele´ (veˇtsˇinou procesy jako je naprˇ´ıklad ftp nebo apache) zˇa´dny´ domovsky´ adresa´rˇ nemajı´. Da´le jsou du˚lezˇite´ soubory: • /etc/passwd – seznam uzˇivatelu˚, kterˇ´ı se mohou do syste´mu prˇihla´sit, forma´t rˇa´dku (za´znamu) je login:heslo:UID:GID:plne ´ jme ´no:homedir:shell
pokud na mı´steˇ hesla (druha´ polozˇka na rˇa´dku) je symbol „x“, znamena´ to, zˇe heslo je v souboru /etc/shadow, pokud je zde uveden rˇeteˇzec na mı´steˇ hesla, je sˇifrovany´ • /etc/group – seznam definovany´ch skupin, forma´t rˇa´dku (za´znamu) je login:heslo:GID:vlastnı ´k
pokud je mı´sto hesla symbol „!“, znamena´ to, zˇe heslo nenı´ definova´no (cozˇ je u veˇtsˇiny skupin), pokud je tam „x“, je heslo v souboru /etc/shadow • /etc/shadow – sˇifrovany´ soubor obsahujı´cı´ hesla uzˇivatelu˚ a skupin • /etc/skel – adresa´rˇ pouzˇ´ıvany´ jako vzor („kostra“) prˇi vytva´rˇenı´ domovsky´ch adresa´rˇu˚ pro nove´ uzˇivatele • /etc/login.defs – soubor s vy´chozı´mi nastavenı´mi bezpecˇnostnı´ho charakteru, naprˇ´ıklad je zde mozˇne´ nastavit metodu sˇifrova´nı´ hesel (DES, MD5, SHA256, SHA5120), jak cˇasto si uzˇivatel musı´ meˇnit heslo, logova´nı´ souvisejı´cı´ch informacı´, minima´lnı´ hodnota UID pro noveˇ vytva´rˇene´ beˇzˇne´ uzˇivatele, chova´nı´ syste´mu prˇi neu´speˇsˇne´m pokusu o prˇihla´sˇenı´, hodnota promeˇnne´ PATH pro beˇzˇne´ uzˇivatele a pro roota, atd.
P
3.1
UZˇIVATELE´ A SKUPINY
51
V prˇ´ıkazu pro vytvorˇenı´ nove´ho uzˇivatelske´ho u´cˇtu mu˚zˇeme specifikovat vlastnı´ na´hradu souboru /etc/shadow nebo adresa´rˇe /etc/skel, to se mu˚zˇe hodit z du˚vodu veˇtsˇ´ı bezpecˇnosti (naprˇ´ıklad u´tocˇnı´k nevı´ prˇedem, kde sˇifrovana´ hesla hledat). Prˇı´klad 3.1 Prˇedpokla´dejme, zˇe pracujeme v graficke´m prostrˇedı´ (KDE) se spusˇteˇnou konzolou, cozˇ celkem ani nema´ vliv, da´le na prvnı´m termina´lu (tty1, Ctrl+Alt+F1 ) jsme prˇihla´sˇeni, ale pra´veˇ nema´me spusˇteˇn zˇa´dny´ interaktivnı´ prˇ´ıkaz, na druhe´m termina´lu jsme prˇihla´sˇeni a ma´me spusˇteˇn prˇikaz cat a na trˇetı´m termina´lu jsme take´ prˇihla´sˇeni a ma´me spusˇteˇn prˇ´ıkaz top (interaktivnı´ prˇ´ıkaz vypisujı´cı´ stav spusˇteˇny´ch procesu˚). Po zada´nı´ prˇ´ıkazu w zı´ska´me tento vy´stup: 21:24:57 up 1:11, 4 users, USER TTY LOGIN@ IDLE sarka :0 20:14 ?xdm? sarka tty1 21:20 4:35 sarka tty2 21:21 3:06 sarka tty3 21:24 18.00s
load average: 0.14, 0.09, 0.19 JCPU PCPU WHAT 40.17s 0.12s /bin/sh /usr/bin/startkde 0.08s 0.08s -bash 0.06s 0.00s cat 0.22s 0.14s top
M
V za´hlavı´ najdeme momenta´lnı´ cˇas, da´le jak dlouho beˇzˇ´ı syste´m, kolik uzˇivatelu˚ je pra´veˇ prˇihla´sˇeno a pru˚meˇrne´ doby nacˇ´ıta´nı´ programu˚ v poslednı´ch 1, 5 a 15 minuta´ch (tyto u´daje jsou pro kazˇde´ spusˇteˇnı´ tohoto prˇ´ıkazu mı´rneˇ odlisˇne´). Dalsˇ´ı za´znamy se vztahujı´ k prˇihla´sˇeny´m uzˇivatelu˚m. Protozˇe k tomuto syste´mu se prˇihlasˇuji pouze ja´ (sı´t’ova´ karta je zneaktivneˇna), jine´ prˇihlasˇovacı´ jme´no v seznamu nenı´. Ale zato pro jedno jsou zde cˇtyrˇi rˇa´dky, tedy uzˇivatel je prˇihla´sˇen 4×. Na rˇa´dku najdeme prˇihlasˇovacı´ jme´no, na ktere´m termina´lu je uzˇivatel prˇihla´sˇen, kdy se prˇihla´sil, celkovou dobu necˇinnosti uzˇivatele na termina´lu, hodnota JCPU prˇedstavuje souhrn cˇasu stra´vene´ho procesy z tohoto termina´lu na procesoru (nezapocˇ´ıta´vajı´ se procesy beˇzˇ´ıcı´ na pozadı´), hodnota PCPU prˇedstavuje dobu cˇinnosti procesu, ktery´ je uveden v na´sledujı´cı´m sloupci WHAT. Podle sloupce WHAT pozna´me, ktery´ proces je hlavnı´m beˇzˇ´ıcı´m procesem na dane´m termina´lu (prˇi pra´ci v prostrˇedı´ KDE je to vzˇdy startkde se za´kladnı´m shellem, at’ma´me spusˇteˇn jaky´koliv dalsˇ´ı program).
´ koly U 1. Srovnejte vy´pis prˇ´ıkazu˚ w, who, whoami, id a finger, take´ s neˇktery´mi uvedeny´mi parametry. Ve vy´stupu ktere´ho prˇ´ıkazu zjistı´te, kdy se uzˇivatel prˇihla´sil, jake´ ma´ UID a GID, jaky´ je jeho shell, jaky´ ma´ domovsky´ adresa´rˇ? 2. Projdeˇte si obsah vsˇech konfiguracˇnı´ch souboru˚ a adresa´rˇu˚ zde zmı´neˇny´ch, pokud to dovolujı´ vasˇe prˇ´ıstupova´ opra´vneˇnı´.
C
3.1
UZˇIVATELE´ A SKUPINY
52
3. Procvicˇte si pra´ci s termina´ly (konzolami) – zkratkou Ctrl+Alt+F1 se prˇesunˇte na tty1, prˇihlaste se (pokud to jde) a prˇ´ıkazem tty zjisteˇte na´zev termina´lu (resp. specia´lnı´ho souboru pro tento termina´l), da´le zkratkou Alt+F2 na druhy´ termina´l (procˇ zde nepouzˇ´ıva´me kla´vesu Ctrl ?), prˇihlaste se a podobneˇ i na trˇetı´m termina´lu. Na kazˇde´m z termina´lu˚ spust’te neˇktery´ interaktivnı´ prˇ´ıkaz (naprˇ´ıklad man pro neˇkterou manua´lovou stra´nku, samotny´ cat, yes, top a nebo stra´nkovacı´ prˇ´ıkaz na neˇktery´ dlouhy´ soubor). Pak vyzkousˇejte prˇ´ıkaz w. Odhla´sı´te se prˇ´ıkazem logout.
3.1.2
Vlastnosti u´cˇtu˚ a skupin
Program passwd je jednı´m z nejdu˚lezˇiteˇjsˇ´ıch prˇ´ıkazu˚ pro nastavenı´ vlastnostı´ uzˇivatelsky´ch u´cˇtu˚ a skupin. Nejcˇasteˇji je pouzˇ´ıva´n ke zmeˇneˇ hesla, ale take´ dalsˇ´ıch informacı´ souvisejı´cı´ch s u´cˇtem (naprˇ´ıklad lze zadat dobu platnosti hesla, plne´ jme´no uzˇivatele apod.), prˇ´ıkaz mu˚zˇe by´t pouzˇ´ıva´n bud’ majitelem u´cˇtu (ne vzˇdy) a rootem. Mozˇnosti:
$
chceme zmeˇnit heslo zadane´ho uzˇivatele, budeme dota´za´ni na pu˚vodnı´ a nove´ heslo (pak pro kontrolu jesˇteˇ jednou)
passwd novak
tı´mto prˇ´ıkazem lze meˇnit heslo skupiny (ano, i skupiny mohou mı´t heslo), zmeˇnu mu˚zˇe prove´st bud’ root nebo hlavnı´ cˇlen skupiny
passwd -g skupina
passwd -f takto zmeˇnı´me „verˇejne´ u´daje“, ktere´ jsou volneˇ k zobrazenı´ v souboru /etc/passwd nebo naprˇ´ıklad programem finger (naprˇ´ıklad plne´ jme´no, telefonnı´
cˇ´ıslo, apod.) passwd -s
zmeˇna login shellu (podobneˇ jako chsh)
vypı´sˇe nastavenı´ u´cˇtu uzˇivatele (zda je u´cˇet zamknuty´, je bez hesla nebo s heslem, datum poslednı´ zmeˇny hesla, jak cˇasto musı´ by´t heslo meˇneˇno apod.)
passwd -S uzivatel
nastavı´me maxima´lnı´ sta´rˇ´ı hesla na 90 dnu˚ (po uplynutı´ te´to doby musı´ uzˇivatel zmeˇnit heslo beˇhem prvnı´ho prˇihlasˇova´nı´ po uplynutı´)
passwd -x 90 uzivatel
po uplynutı´ te´to doby se uzˇivateli zacˇne objevovat upozorneˇnı´, zˇe by meˇl zmeˇnit heslo
passwd -w 85 uzivatel passwd -l uzivatel
zamknutı´ (lock) u´cˇtu uzˇivatele
passwd -u uzivatel
odemknutı´ (unlock) u´cˇtu uzˇivatele
uzˇivatel je prˇinucen zmeˇnit heslo prˇi prˇ´ısˇtı´m spusˇteˇnı´ (pouzˇ´ıva´ se u noveˇ vytvorˇeny´ch u´cˇtu˚, aby si uzˇivatel vytvorˇil heslo)
passwd -e uzivatel
Pro pra´ci s hesly skupin existuje take´ prˇ´ıkaz gpasswd. Uzˇivatele a skupiny lze prˇida´vat nebo naopak odstranˇovat. Prˇi vytva´rˇenı´ nove´ho uzˇivatelske´ho u´cˇtu lze bud’ zadat vsˇechny parametry prˇ´ımo do prˇ´ıkazu, a nebo mu˚zˇeme pro implicitnı´ parametry pouzˇ´ıt soubor /etc/default/useradd.
$
3.1
UZˇIVATELE´ A SKUPINY
53
Tento soubor mu˚zˇe vypadat trˇeba takto:
M
GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel GROUPS=video,novaskup CREATE_MAIL_SPOOL=no SKEL (zkratka ze „skeleton“, kostra) je neˇco na zpu ˚ sob adresa´rˇe s implicitnı´m profilem.
V tomto adresa´rˇi mu˚zˇeme vytvorˇit vsˇe, co chceme, by se zkopı´rovalo do profilu prˇirˇazene´ho k noveˇ vytvorˇene´mu u´cˇtu. Protozˇe cˇ´ısla UID by´vajı´ do 500 vyhrazena´ syste´movy´m uzˇivatelu˚m (root, ale take´ neˇktere´ specia´lnı´ procesy, de´mony, majı´ sve´ UID z du˚vodu vysˇsˇ´ıch prˇ´ıstupovy´ch pra´v), volı´me UID vzˇdy veˇtsˇ´ı nezˇ 500 (a samozrˇejmeˇ takove´ cˇ´ıslo, ktere´ jesˇteˇ nenı´ vyhrazeno pro jine´ho uzˇivatele), obvykle dokonce nad 1000. Kazˇdy´ uzˇivatel ma´ svou hlavnı´ skupinu, jejı´ GID je uvedeno na rˇa´dku uzˇivatele v souboru /etc/passwd. Mu˚zˇe vsˇak patrˇit do vı´ce skupin (to jsme videˇli ve vy´stupech prˇ´ıkazu˚ z prˇedchozı´ho textu) a prˇ´ıkaz newgrp umozˇnˇuje uzˇivateli pracovat pod jinou skupinou nezˇ je jeho hlavnı´. Pra´ce s uzˇivatelsky´mi u´cˇty:
$
useradd
prˇida´nı´ nove´ho uzˇivatele useradd -m novak vytvorˇ´ıme novy´ u´cˇet s vyuzˇitı´m implicitnı´ch parametru˚, volba -m znamena´, zˇe se ma´ automaticky vytvorˇit domovsky´ adresa´rˇ uzˇivatele useradd -m -d /home/novak -gid 180 -s /bin/bash -c ”komenta ´r ˇ” novak
neˇktere´ volby zada´va´me rucˇneˇ (domovsky´ adresa´rˇ, GID, shell a komenta´rˇ), zbyle´ budou bra´ny ze souboru SKEL useradd -m -f novak u´cˇet je hned po vytvorˇenı´ neaktivnı´ userdel
odstraneˇnı´ uzˇivatelske´ho u´cˇtu userdel novak odstranı´ zadany´ uzˇivatelsky´ u´cˇet userdel -rf novak navı´c odstranı´ take´ domovsky´ adresa´rˇ uzˇivatele (volba -f
znamena´ force, tedy nedba´ se na varova´nı´ v prˇ´ıpadeˇ souboru˚ nevlastneˇny´ch dany´m uzˇivatelem) usermod
zmeˇna vlastnostı´ uzˇivatelske´ho u´cˇtu (obvykle uzˇ existujı´cı´ho) usermod --inactive 3 novak
tento prˇ´ıkaz zneaktivnı´ zadany´ u´cˇet na 3 dny
3.1
UZˇIVATELE´ A SKUPINY
54
usermod -L novak uzamkne u´cˇet (nebo --lock) usermod -U novak odemkne u´cˇet (nebo --unlock) usermod -c ”Nove ´ Jme ´no” novakova zmeˇna komenta´rˇove´ho rˇeteˇzce u´cˇtu newusers soubor
v souboru jsou sepsa´ni uzˇivatele´, ktere´ je trˇeba prˇidat do syste´mu, v podobne´m forma´tu jako je v souboru /etc/passwd, prˇ´ıkaz prˇida´ vsˇechny uzˇivatele ze souboru do syste´mu groupadd
vytvorˇenı´ skupiny groupadd -gid 814 skupina
vytvorˇenı´ skupiny, mu˚zˇeme (nemusı´me) zadat GID
groupdel skupina
odstraneˇnı´ skupiny newgrp skupina
zmeˇna skupiny beˇhem pra´ce uzˇivatele (uzˇivatel patrˇ´ı do vı´ce skupin) Prˇi vytva´rˇenı´ uzˇivatelsky´ch u´cˇtu˚ a skupin mu˚zˇeme take´ pouzˇ´ıt volby pro LDAP (tj. koexistenci s Active Directory v heterogennı´ sı´ti). Hromadne´ prˇida´nı´ novy´ch uzˇivatelu ˚: Vytvorˇ´ıme textovy´ soubor, kde kazˇdy´ rˇa´dek bude patrˇit jednomu uzˇivateli. Forma´t je stejny´ jako u rˇa´dku˚ v souboru /etc/passwd. Na rˇa´dku napı´sˇeme postupneˇ • prˇihlasˇovacı´ jme´no, • heslo v nezako´dovane´m tvaru (k tomuto souboru se proto nikdo nepovolany´ nesmı´ dostat!!!), • UID nove´ho uzˇivatele (toto pole se doporucˇuje nechat pra´zdne´, pak bude vhodne´ UID vybra´no automaticky), • cˇ´ıslo vy´chozı´ skupiny, do ktere´ je uzˇivatel zarˇazen, pokud je zde cˇ´ıslo GID, ktere´ jesˇteˇ nenı´ prˇirˇazeno zˇa´dne´ skupineˇ, bude vytvorˇena nova´ skupina s tı´mto GID a s na´zvem stejny´m jako je login uzˇivatele, jehozˇ za´znam je na tomto rˇa´dku obsazˇen, • pozna´mka (obvykle se zde napı´sˇe skutecˇne´ jme´no uzˇivatele), • domovsky´ adresa´rˇ (/home/...), • vy´chozı´ shell uzˇivatele. Pokud uvedena´ skupina nebo adresa´rˇ jesˇteˇ neexistuje, automaticky jsou vytvorˇeny. Jednotlive´ polozˇky na rˇa´dku jsou oddeˇleny dvojtecˇkou (pro zapamatova´nı´: v promeˇnne´ PATH a v souborech /etc/passwd, /etc/group a dalsˇ´ıch jsou polozˇky take´ oddeˇleny dvojtecˇkou), naprˇ´ıklad komarek:px214ej:1206:506:Jan Komarek:/home/komarek:/bin/bash
Tento soubor pouzˇijeme jako atribut prˇ´ıkazu newusers, naprˇ: pokud je pojmenovan uzivatele.t, prˇ´ıkaz vypada´ newusers uzivatele.t
$
3.1
UZˇIVATELE´ A SKUPINY
55
´ koly U 1. Zjisteˇte u´daje o sve´m u´cˇtu, ktere´ se vztahujı´ k heslu. V manua´love´ stra´nce zjisteˇte, co ktery´ vypsany´ u´daj znamena´.
C
2. Zjisteˇte, jake´ jsou vy´chozı´ u´daje pro vytvorˇenı´ nove´ho u´cˇtu (vypisˇte obsah prˇ´ıslusˇne´ho souboru).
3.1.3
Prˇı´stupova´ opra´vneˇnı´
Pro zmeˇnu parametru˚ souvisejı´cı´ch s opra´vneˇnı´m (vlastnı´k, skupina, rˇeteˇzec opra´vneˇnı´) pouzˇ´ıva´me tyto prˇ´ıkazy: chown uz ˇivatel soubor
zmeˇna majitele souboru, mu˚zˇe pouzˇ´ıt pouze pu˚vodnı´ majitel nebo spra´vce chgrp skupina soubor
tote´zˇ pro skupinu chmod pra ´va soubor
zmeˇna prˇ´ıstupovy´ch pra´v souboru, obecneˇ mo´du souboru, pouzˇ´ıva´ se ve dvou tvarech. 1. tvar (absolutnı´): pra´va jsou trˇi cˇ´ıslice (vlastnı´k, skupina, ostatnı´), kazˇda´ z intervalu 0..7, kazˇda´ z teˇchto cˇ´ıslic je soucˇtem cˇ´ısel 4 – cˇtenı´ 2 – za´pis 1 – spousˇteˇnı´ 0 – nic Naprˇ´ıklad rw-r-xr-- ⇒ 4 + 2 + 0, 4 + 0 + 1, 4 + 0 + 0 ⇒ 654 ⇒ pouzˇijeme chmod 654 soubor rwxr-x--- ⇒ 4 + 2 + 1, 4 + 0 + 1, 0 + 0 + 0 ⇒ 750 ⇒ pouzˇijeme chmod 750 soubor
2. tvar: pouzˇijeme, kdyzˇ chceme pozmeˇnit jen neˇktera´ pra´va, Naprˇ´ıklad chmod u+rw,g-w,o-rwx soubor
takto jsme nastavili vlastnı´kovi souboru cˇtenı´ a za´pis, skupineˇ jsme odebrali pra´vo za´pisu a ostatnı´m jsme odebrali vsˇechna pra´va, chmod g+r-w soubor
skupineˇ jsme nastavili pra´vo cˇtenı´ a odebrali pra´vo za´pisu.
$
3.1
UZˇIVATELE´ A SKUPINY
56
umask xyz
vypı´sˇe masku pra´v, ktera´ se implicitneˇ strha´vajı´ prˇi vytvorˇenı´ nove´ho souboru (standardneˇ 022, tedy se pouzˇijı´ pra´va 755). Nastavenı´ prˇı´znaku ˚ mo´du souboru: V prˇedchozı´m semestru jsme si vysveˇtlili, co znamenajı´ prˇ´ıznaky setuid, setgid a sticky. Nynı´ se podı´va´me na mozˇnost nastavenı´ teˇchto prˇ´ıznaku˚.
$
chmod u+s soubor
nastavenı´ prˇ´ıznaku setuid pro soubor chmod g+s soubor
nastavenı´ prˇ´ıznaku setgid pro soubor chmod +t soubor
nastavenı´ prˇ´ıznaku sticky pro soubor Prˇ´ıznaky rusˇ´ıme podobneˇ, jen mı´sto znaku „+“ da´me „-“. Skupina uzˇivatelu ˚ pracujı´cı´ch na projektu: Postupujeme takto: 1. Prˇihla´sı´me se jako root
$
2. groupadd nova_skupina 3. uzˇivatele´ u1, u2, u3, . . . jsou cˇleny skupiny users a nove´ skupiny (nastavı´me cˇlenstvı´ ve skupina´ch pro dane´ u´cˇty): usermod -G users, nova_skupina u1 usermod -G users, nova_skupina u2 ...
4. mkdir /vol/novy_adresar 5. nastavı´me pro tento adresa´rˇ skupinu a vlastnı´ka (vedoucı´ho skupiny – uzˇivatele u1), da´le prˇ´ıstupova´ pra´va: chgrp nova_skupina /vol/novy_adresar chown u1 /vol/novy_adresar chmod o-rwx /vol/novy_adresar
3.1.4
Navysˇova´nı´ prˇı´stupovy´ch opra´vneˇnı´
Kdyzˇ potrˇebujeme navy´sˇit prˇ´ıstupova´ opra´vneˇnı´ v textove´m rezˇimu, je k dispozici alesponˇ jeden z teˇchto prˇ´ıkazu˚: su [uz ˇivatel]
zı´ska´nı´ pra´v jine´ho uzˇivatele (SubstituteUser), kdyzˇ nenı´ uveden zˇa´dny´ uzˇivatel, doplnı´ se automaticky root, dalsˇ´ı zada´vane´ prˇ´ıkazy jizˇ spousˇtı´me jako novy´ uzˇivatel
$
3.1
UZˇIVATELE´ A SKUPINY
57
sudo [pr ˇı ´kaz]
„SUperuser DO“, proved’ pr ˇı ´kaz (obvykle) jako superuzˇivatel, tedy root, pokud neuvedeme prˇ´ıkaz, ve vy´chozı´m nastavenı´ platı´ zvy´sˇena´ opra´vneˇnı´ po urcˇitou omezenou dobu (5 minut) U obou prˇ´ıkazu˚ existujı´ take´ uprˇesnˇujı´cı´ volby, ktere´ zde nebudeme uva´deˇt. Prˇ´ıkaz su je starsˇ´ı a prakticky nekonfigurovatelny´, v mnoha linuxovy´ch distribucı´ch nenı´ pouzˇ´ıva´n. Naproti tomu chova´nı´ prˇ´ıkazu sudo lze pomeˇrneˇ dobrˇe konfigurovat a souvisejı´cı´ mechanismus se take´ nazy´va´ sudo mechanismus. Sudo mechanismus tedy znamena´ (vy´hradnı´) vyuzˇ´ıva´nı´ prˇ´ıkazu sudo k zı´ska´va´nı´ vysˇsˇ´ıch prˇ´ıstupovy´ch opra´vneˇnı´, uzˇivatel root se obvykle ani nesmı´ prˇihlasˇovat klasicky´m zpu˚sobem. Konfigurace mechanismu je ulozˇena v souboru /etc/sudoers, ktery´ je sice textovy´, ale lze jej editovat pouze specia´lnı´m programem /usr/sbin/visudo. Pro roota je v /etc/sudoers obvykle za´znam root ALL=(ALL) ALL
Tuto konfiguraci lze pouzˇ´ıt i pro jine´ uzˇivatele, ale jen pokud jim plneˇ du˚veˇrˇujeme a sdeˇlı´me jim heslo roota. Typicky se da´ vyuzˇ´ıt pro alternativnı´ administra´tory. Obecna´ syntaxe je uz ˇivatel poc ˇı ´tac ˇ=(efektivnı ´ uz ˇivatel) pr ˇı ´kaz
Prvnı´ polozˇka znamena´ uzˇivatele, pro ktere´ho rˇa´dek platı´. Pokud chceme mı´sto uzˇivatele zadat celou skupinu, pak prˇed jejı´ na´zev napı´sˇeme symbol %, abychom odlisˇili uzˇivatele od skupiny, prˇed na´zev sı´t’ove´ skupiny oproti tomu da´va´me symbol +. Na´sleduje pocˇ´ıtacˇ, na ktere´m je toto nastavenı´ platne´ (tj. pokud je za´znam v souboru jine´ho pocˇ´ıtacˇe, neplatı´). Mu˚zˇe to by´t prˇ´ımo na´zev pocˇ´ıtacˇe, IP adresa, adresa (pod)sı´teˇ apod. V za´vorka´ch je na´zev uzˇivatelske´ho u´cˇtu, ke ktere´mu se takto docˇasneˇ prˇihlasˇujeme, a poslednı´m parametrem je seznam prˇ´ıkazu˚, ktere´ takto uzˇivatel mu˚zˇe spousˇteˇt. Prˇı´klad 3.2 Uka´zˇeme si neˇkolik rˇa´dku˚, ktere´ mohou by´t v souboru /etc/sudoers. novak novakuvstroj.firma.cz = (ALL) /bin/kill,/bin/killall
zadany´ uzˇivatel mu˚zˇe na sve´m pocˇ´ıtacˇi (i vzda´leneˇ) spousˇteˇt prˇ´ıkazy pro ukoncˇova´nı´ jiny´ch prˇ´ıkazu˚ novak novakuvpc.firma.cz = (ALL) NOPASSWD: /bin/kill,/usr/bin/killall
tote´zˇ, navı´c nebude vyzˇadova´no heslo roota %wwwadmin www.webserver.cz = (www) /usr/local/apache/bin/apachectl
cˇlenove´ zadane´ skupiny mohou na zadane´m web serveru spousˇteˇt zadany´ prˇ´ıkaz jako uzˇivatel www
P
3.1
UZˇIVATELE´ A SKUPINY
58
pepa mailserver = /bin, !/bin/su
zadane´mu uzˇivateli na mailserveru dovolı´me spousˇteˇt cokoliv z adresa´rˇe /bin kromeˇ prˇ´ıkazu su (zde vidı´me za´pis negace), musejı´ autentizovat sami sebe (pracujı´ pod svy´m u´cˇtem, nenı´ zde nic v za´vorka´ch) fileadmin ALL, !mailserver = ALL
zadany´ uzˇivatel mu˚zˇe spousˇteˇt vsˇe na vsˇech strojı´ch kromeˇ mailserveru ALL = (ALL) NOPASSWD: /sbin/shutdown
vsˇichni mohou vsˇude spustit prˇ´ıkaz, ktery´ vypı´na´ pocˇ´ıtacˇ, nebude vyzˇadova´no heslo
Abychom nemuseli pokazˇde´ zada´vat dlouhe´ sekvence prˇ´ıkazu˚, je mozˇne´ definovat tzv. aliasy sekvencı´ (to nenı´ tote´zˇ co alias prˇ´ıkazu). Rozlisˇujı´ se aliasy pro uzˇivatele (User_Alias), pro pocˇ´ıtacˇ (Host_Alias), pro efektivnı´ho uzˇivatele (Runas_Alias) a pro spousˇteˇny´ prˇ´ıkaz (Cmnd_Alias). Vestaveˇny´m aliasem je naprˇ´ıklad ALL (je vytvorˇen pro vsˇechny typy aliasu˚), znamena´ „vsˇe“. Prˇı´klad 3.3 Uka´zˇeme si pra´ci s aliasy sekvencı´ pro sudo mechanismus. User_Alias ADMINS=webadmin,mailadmin,honza
nadefinovali jsme alias pro uzˇivatele (zde administra´tory ru˚zny´ch serveru˚) User_Alias SEKRETARKY=hanka,jana,pepa
podobneˇ, pro sekreta´rˇky (pokud nastoupı´ nova´ sekreta´rˇka, prˇida´me ji do tohoto seznamu) Host_Alias SERVERS=master,mailserver,wwwserver
nadefinovali jsme alias pro umı´steˇnı´ (zde ru˚zne´ servery) Runas_Alias OPERATORS=root,operator,zalohovac
tento alias je pouzˇitelny´ v „za´vorce“ Cmnd_Alias KILL=/bin/kill,/usr/bin/killall
alias pro programy, jejichzˇ spousˇteˇnı´ chceme rˇ´ıdit, zde programy pro ukoncˇova´nı´ procesu˚ Cmnd_Alias KONEC=/sbin/shutdown,/sbin/reboot
alias pro programy ukoncˇujı´cı´ syste´m (vypnutı´ a restart) SEKRETARKY LOCAL = NOPASSWD: KONEC
sekreta´rˇky majı´ pra´vo bez zada´va´nı´ hesla ukoncˇit nebo restartovat loka´lnı´ pocˇ´ıtacˇ (LOCAL je implicitnı´ alias pro mı´stnı´ pocˇ´ıtacˇ, na ktere´m je uzˇivatel prˇihla´sˇen) novak ALL, !SERVERS = (ALL) KONEC, KILL
uzˇivatel mu˚zˇe na vsˇech pocˇ´ıtacˇ´ıch kromeˇ serveru˚ v roli vsˇech ukoncˇovat procesy a beˇh syste´mu
3.2
PROCESY A U´LOHY
59
ADMINS SERVERS = ALL
administra´torˇi mohou na serverech vsˇechno (to nenı´ zrovna bezpecˇne´)
3.2 3.2.1
Procesy a u´lohy Prˇı´kazy pro pra´ci s procesy
S procesy mu˚zˇeme pracovat naprˇ´ıklad pomocı´ teˇchto prˇ´ıkazu˚: top
$
Prˇ´ıkaz interaktivneˇ vypisuje seznam procesu˚, ktere´ momenta´lneˇ beˇzˇ´ı, a to v pravidelny´ch intervalech. Ukoncˇ´ı se stiskem kla´vesy q (nebo jiny´m druhem ukoncˇenı´). Prˇ´ıkaz top obvykle zobrazuje pouze ty procesy, ktere´ zabı´rajı´ veˇtsˇ´ı nezˇ zanedbatelne´ mnozˇstvı´ syste´movy´ch zdroju˚ (prˇedevsˇ´ım CPU). Pro rˇ´ızenı´ vy´pisu mu˚zˇeme pouzˇ´ıvat neˇktere´ kla´vesove´ zkratky, naprˇ´ıklad Shift+P setrˇ´ıdı´ procesy podle zatı´zˇenı´ CPU (Processor, mu˚zˇe odhalit procesy, ktere´ se zasekly), Shift+M podle mnoz ˇ stvı´ zabrane´ pameˇti (Memory), M zapneme nebo vypneme zobrazova´nı´ informacı´ o pameˇti zabrane´ procesy, K umozˇnı´ bez nutnosti opusˇteˇnı´ programu poslat neˇktery´ signa´l vybrane´mu procesu (zada´me PID procesu a signa´l), H na ´ poveˇda.
ps
Vypı´sˇe vsˇechny momenta´lneˇ beˇzˇ´ıcı´ (running) procesy na urcˇite´m termina´lu (PID, specia´lnı´ soubor termina´lu, cˇas CPU, ktery´ proces jizˇ vyuzˇil, na´zev procesu). Mu˚zˇeme pouzˇ´ıt naprˇ´ıklad tyto prˇepı´nacˇe: prˇida´ jesˇteˇ neˇktere´ informace, naprˇ´ıklad UID, PPID procesu, cˇas spusˇteˇnı´ tote´zˇ co prˇedchozı´, ale pro vsˇechny procesy v syste´mu, nejen z me´ho termina´lu (tato forma je zrˇejmeˇ nejpouzˇ´ıvaneˇjsˇ´ı) -u uzivatel vypı´sˇe procesy urcˇite´ho uzˇivatele a dalsˇ´ı informace (za´teˇzˇ CPU a RAM). -eH takto zobrazı´me take´ „stromovou strukturu“ procesu˚ -eo uid,gid,sid,nice,nlwp,cmd parametr -o umozˇnı´ vybrat sloupce, ktere´ chceme vypsat -ef --sort uid,pid mu˚zˇeme zadat krite´ria trˇ´ıdeˇnı´ (ne vsˇechny sloupce lze takto zadat) aux tato syntaxe (prˇepı´nacˇe bez pomlcˇek, trochu jina´ pı´smena pro prˇepı´nacˇe) se pouzˇ´ıva´ na syste´mech z rˇady BSD (naprˇ´ıklad FreeBSD), ale je pouzˇitelna´ i v Linuxu (neˇkterˇ´ı lide´ si „aux“ le´pe pamatujı´)
ps -f ps -ef ps ps ps ps ps
$
3.2
PROCESY A U´LOHY
60
pstree
vykreslı´ hierarchii procesu˚ (strom vztahu˚ rodicˇ – potomek). Mu˚zˇeme take´ pouzˇ´ıvat neˇktere´ prˇepı´nacˇe, naprˇ´ıklad -c zobrazı´ vsˇechny procesy bez shlukova´nı´ stejneˇ nazvany´ch, -p zobrazı´ u kazˇde´ho procesu PID, -a zobrazı´ take´ parametry, se ktery´mi byly procesy spusˇteˇny. Program pracuje v pseudograficke´m prostrˇedı´. Podobneˇ fungujı´cı´ program, ale v graficke´m prostrˇedı´ (KDE), jde kpm pgrep proces
tento prˇ´ıkaz je vlastneˇ kombinace prˇ´ıkazu˚ ps a grep, vra´tı´ PID zadane´ho procesu pmap PID
podrobny´ rozpis pameˇti vyuzˇ´ıvane´ procesem (nejen vlastneˇne´), take´ zjistı´me, jestli proces vyuzˇ´ıva´ sdı´lenou pameˇt’neˇktere´ knihovny nebo jine´ho procesu. PID zı´ska´me naprˇ´ıklad pomocı´ pgrep whereis pr ˇı ´kaz
takto zjistı´me, kde konkre´tneˇ se prˇ´ıkaz nacha´zı´ whereis top
zjistı´me, kde konkre´tneˇ se nacha´zı´ prˇ´ıkaz top, vypı´sˇe se
top: /usr/bin/top /usr/bin/X11/top /usr/share/man/man1/top.1.gz
To, co hleda´me, je obvykle hned prvnı´ cesta, tj. s celou cestou bychom prˇ´ıkaz spousˇteˇli takto: /usr/bin/top whereis sudo vypı´sˇe, kde konkre´tneˇ se nacha´zı´ prˇ´ıkaz sudo (a taky jestli je nain-
stalova´n, takto rychle zjistı´me, jestli je podporova´n sudo mechanismus: sudo: /usr/bin/sudo /usr/lib/sudo /usr/bin/X11/sudo /usr/share/man/man8/sudo.8.gz
(vsˇimneˇte si rozdı´lu v cesteˇ u poslednı´ polozˇky – takto pozna´me take´ cˇ´ıslo sekce, ve ktere´ je manua´lova´ stra´nka prˇ´ıkazu, zde 8) ´ koly U 1. Spust’te interaktivnı´ prˇ´ıkaz, ktery´ v pravidelny´ch intervalech zobrazuje seznam beˇzˇ´ıcı´ch procesu˚. Projdeˇte si manua´lovou stra´nku tohoto prˇ´ıkazu a zjisteˇte, jak lze ovlivnit de´lku intervalu, ve ktere´m jsou informace obnovova´ny. 2. Zjisteˇte u´daje o procesu s PID 20 – kdo je vlastnı´kem procesu, kdo je jeho rodicˇovsky´m procesem, jak se proces nazy´va´. 3. Vypisˇte u´daje o procesu s na´zvem acpid (zajı´ma´ na´s prˇedevsˇ´ım jeho PID, PPID, cesta, se kterou byl spusˇteˇn, vlastnı´k, prˇ´ıpadneˇ dalsˇ´ı u´daje). Pro zkra´cenı´ vy´pisu mu˚zˇete pouzˇ´ıt vyhleda´vacı´ filtr. 4. Zjisteˇte, jak vyuzˇ´ıva´ pameˇt’proces sshd (tj. je trˇeba nejdrˇ´ıv zjistit jeho PID). 5. Zjisteˇte, kde jsou nainstalova´ny programy man, mount, gcc a ls.
C
PROCESY A U´LOHY
3.2
3.2.2
61
Skupiny a relace procesu˚
Jak vı´me, v unixovy´ch syste´mech jsou procesy usporˇa´da´ny ve stromove´ strukturˇe na za´kladeˇ vztahu rodicˇ–potomek, potomci byli spusˇteˇni rodicˇovsky´m procesem. Skupina procesu˚ je seskupenı´ takovy´ch procesu˚, mezi ktery´mi existujı´ blı´zke´ „rodinne´“ vztahy. Je to vlastneˇ podstrom ve stromove´ strukturˇe procesu˚. Proces, ktery´ je v korˇeni tohoto podstromu, je hlavnı´m procesem skupiny. Skupina procesu˚ ma´ take´ sve´ identifikacˇnı´ cˇ´ıslo – PGID (Process Group ID). Cˇ´ıslem
P
PGID je PID hlavnı´ho procesu skupiny. Typicky tvorˇ´ı skupinu procesy spusˇteˇne´ v ra´mci jedine´ho termina´lu. Prˇı´klad 3.4 Ma´me spusˇteˇn program konsole a v neˇm (v jedne´ ze za´lozˇek) manua´lovou stra´nku neˇktere´ho prˇ´ıkazu. V tom prˇ´ıpadeˇ je v ra´mci konsole spusˇteˇna instance shellu, v nı´ program man, ktery´ vyuzˇ´ıva´ stra´nkovacˇ less. Ve vy´pisu prˇ´ıkazu ps -eHo pid,pgid,comm budou kromeˇ jine´ho i tyto rˇa´dky: PID ... 4245 4247 6466 6478 4774 6569
PGID
COMMAND
3980 4247 6466 6466 4774 6569
konsole bash man less bash ps
M
To znamena´, zˇe program less patrˇ´ı do skupiny, jejı´mzˇ hlavnı´m procesem je proces man.
Veˇtsˇina syste´movy´ch procesu˚ ma´ PGID nastaveno na 0. Proces s PID 0 neexistuje, tedy nejsou zarˇazeny do zˇa´dne´ skupiny. To vsˇak neplatı´ pro vsˇechny syste´move´ procesy. Naprˇ´ıklad proces hald (de´mon zajisˇt’ujı´cı´ nı´zkou´rovnˇovy´ prˇ´ıstup k hardwaru, vrstva HAL) je hlavnı´m procesem sve´ vlastnı´ skupiny procesu˚ (svy´ch potomku˚). Dalsˇ´ı skupiny procesu˚ (ale uzˇ spı´sˇe v uzˇivatelske´m prostoru) jsou tvorˇeny inicializacˇnı´mi procesy graficky´ch prostrˇedı´ (naprˇ´ıklad v KDE jde o kdeinit). Relace (session, sezenı´) je obdoba skupiny procesu˚ na trochu vysˇsˇ´ı u´rovni. Relace je take´ podstrom stromu procesu˚, mu˚zˇe souviset naprˇ´ıklad s procesy jednoho prˇihla´sˇene´ho uzˇivatele (typicky souvisı´ s termina´lem, ze ktere´ho jsou procesy spousˇteˇny). Podobneˇ jako skupina procesu˚ je jednoznacˇneˇ urcˇena svy´m PGID (cozˇ je PID hlavnı´ho procesu skupiny), relace je jednoznacˇneˇ urcˇena svy´m SID (Session ID), cozˇ je PID hlavnı´ho procesu relace.
P
3.2
PROCESY A U´LOHY
62
V mnoha prˇ´ıpadech se cˇ´ıslo SID shoduje s cˇ´ıslem PGID, u syste´movy´ch procesu˚ je to prakticky pravidlo. Odlisˇnosti najdeme u uzˇivatelsky´ch procesu˚ spousˇteˇny´ch ze spolecˇne´ho (virtua´lnı´ho) termina´lu. Prˇı´klad 3.5 Podı´va´me se na podobny´ vy´pis jako v prˇedchozı´m prˇ´ıkladu. Ve vy´pisu prˇ´ıkazu ps -eHo pid,sid,pgid,comm budou kromeˇ jine´ho i tyto rˇa´dky: PID ... 4245 4247 6466 6478 4774 6569
SID
PGID
COMMAND
3980 4247 6447 6447 4774 6574
3980 4247 6466 6466 4774 6569
konsole bash man less bash ps
M
Vidı´me, zˇe na neˇktery´ch rˇa´dcı´ch se SID a PGID lisˇ´ı. Jednotlive´ za´lozˇky konzoly (zde jsou zobrazeny dveˇ, jde o procesy bash) tvorˇ´ı samostatne´ virtua´lnı´ konzoly, v kazˇde´ konzole je jedna relace sdı´lejı´cı´ spolecˇne´ SID (cozˇ je PID procesu bash, ktery´ je v korˇeni relace).
Skupiny procesu˚ se vyuzˇ´ıvajı´ prˇedevsˇ´ım z du˚vodu usnadneˇnı´ komunikace mezi procesy. Procesy v ra´mci jedne´ skupiny jednodusˇeji komunikujı´, mohou si posı´lat tzv. signa´ly. ´ cˇelem relacı´ je prˇedevsˇ´ım zjednodusˇena´ spra´va u´loh. S u´lohami pracujeme vzˇdy v ra´mci U jedne´ relace, a uvnitrˇ relace jsou jednotlive´ procesy identifikova´ny kromeˇ sve´ho PID take´ tzv. cˇ´ıslem u´lohy. Kromeˇ toho se take´ vyuzˇ´ıvajı´ vy´hody snadneˇjsˇ´ı komunikace mezi procesy v ra´mci relace, naprˇ´ıklad pokud je ukoncˇova´n hlavnı´ proces relace, odesˇle vsˇem svy´m potomku˚m signa´l k ukoncˇenı´, a tedy se rekurzı´vneˇ ukoncˇ´ı cely´ podstrom procesu˚. ´ koly U 1. Spust’te prˇ´ıkaz, ktery´ slouzˇ´ı k vypsa´nı´ identifikacˇnı´ch cˇ´ısel procesu (vcˇetneˇ PGID a SID), jak jste videˇli na prˇ´ıkladech. V seznamu najdeˇte skupiny procesu˚ a relace. 2. Do vy´pisu z prˇedchozı´ho u´kolu mu˚zˇete prˇidat take´ dalsˇ´ı sloupce, naprˇ´ıklad user pro zobrazenı´ vlastnı´ka procesu.
3.2.3
´ lohy a multitasking U
V shellu bash mu˚zˇeme s procesy pracovat na vysˇsˇ´ı u´rovni – pracujeme s u´lohami. Tento styl pra´ce souvisı´ s multitaskingem a pra´ce s u´lohami vlastneˇ znamena´ pra´ci v multitaskove´m rezˇimu i v textove´m shellu.
C
PROCESY A U´LOHY
3.2
63
´ loha mu˚zˇe U • beˇzˇet na poprˇedı´, pak pracujeme prˇ´ımo s nı´ a nezobrazuje se prompt, takova´ je nejvy´sˇe jedna, • beˇzˇet na pozadı´ (trˇeba neˇjaky´ delsˇ´ı vy´pocˇet), pak „nezabı´ra´ prompt“ a umozˇnˇuje na´m spustit na poprˇedı´ jinou u´lohu, • by´t pozastavena´ na pozadı´, tedy na poprˇedı´ mu˚zˇe beˇzˇet jina´ u´loha, ale tato u´loha zrovna nebeˇzˇ´ı (pozastavene´ jsou take´ ty u´lohy, ktere´ by jinak beˇzˇely na pozadı´, ale nemajı´ zrovna co deˇlat). Kla´vesove´ zkratky pro pra´ci s u´lohami: Ctrl+C
ukoncˇenı´ u´lohy beˇzˇ´ıcı´ na poprˇedı´ (neˇktere´ programy tuto zkratku nereagujı´)
Ctrl+Z
pozastavenı´ u´lohy na poprˇedı´ (platı´ tote´zˇ)
prˇekreslenı´ obrazovky termina´lu nebo konzoly (hodı´ se naprˇ´ıklad tehdy, kdyzˇ u´loha na pozadı´ necˇekaneˇ posˇle neˇco na vy´stup)
Ctrl+L
Kdyzˇ chceme u´lohu hned spustit na pozadı´, na konec prˇipı´sˇeme jako argument symbol & (za mezeru), naprˇ´ıklad dlouhy ´_vy ´poc ˇet &
Symbol & musı´ by´t poslednı´m symbolem na rˇa´dku. Neˇktere´ u´lohy mohou beˇzˇet na pozadı´ a nezdrzˇujı´ na termina´lu uzˇivatele, ktery´ mu˚zˇe spousˇteˇt jaky´koliv pocˇet jiny´ch u´loh. Kazˇda´ u´loha ma´ prˇirˇazeno identifikacˇnı´ cˇ´ıslo u´lohy, ktere´ nenı´ tote´zˇ jako PID procesu, ale cˇ´ıslova´nı´ je jen v ra´mci termina´lu (konzoly) – rea´lneˇ v ra´mci relace, kde uzˇivatel pracuje (tedy mnohem nizˇsˇ´ı cˇ´ısla). Pokud chceme toto identifikacˇnı´ cˇ´ıslo pouzˇ´ıt jako parametr neˇktere´ho z na´sledujı´cı´ch prˇ´ıkazu˚, musı´me prˇed nı´m napsat znak %, abychom odlisˇili cˇ´ıslo u´lohy od cˇ´ısla procesu. Kazˇda´ u´loha, ktera´ beˇzˇ´ı na nasˇem termina´lu, ma´ tedy sve´ cˇ´ıslo u´lohy, cˇ´ıslo procesu a pak jesˇteˇ dalsˇ´ı cˇ´ısla (PID, SID, atd.). V prˇ´ıkazech je nutne´ rozlisˇit cˇ´ıslo u´lohy od cˇ´ısla procesu, tedy, jak bylo vy´sˇe uvedeno, prˇed cˇ´ıslo u´lohy da´va´me %. Da´le mu˚zˇeme pouzˇ´ıvat tyto prˇ´ıkazy: jobs
Vypı´sˇe vsˇechny u´lohy na termina´lu a jejich stav (beˇzˇ´ıcı´, pozastavena apod.), poslednı´ z u´loh, ktere´ jsme poslali na pozadı´, je oznacˇena symbolem „+“, prˇedposlednı´ symbolem „-“ fg [%uloha]
Prˇ´ıkazem fg posˇleme u´lohu, ktera´ je na pozadı´, zpeˇt na poprˇedı´ a zacˇnou se vypisovat take´ jejı´ vy´stupy. Pokud je takovy´ch u´loh vı´ce a prˇ´ıkaz je pouzˇit bez parametru, je posla´na na poprˇedı´ ta, ktera´ byla jako poslednı´ „odsunuta“ (tj. ve vy´pisu u´loh je oznacˇena symbolem „+“). Jako parametr mu˚zˇeme zadat cˇ´ıslo u´lohy, ktera´ ma´ by´t prˇenesena na poprˇedı´ (nesmı´me zapomenout znak %).
3.2
PROCESY A U´LOHY
64
bg [%uloha]
Spustı´ pozastavenou u´lohu na pozadı´. Opeˇt mu˚zˇeme v parametru zadat cˇ´ıslo u´lohy. Pokud u´loha pra´veˇ nema´ co prova´deˇt, zu˚stane pozastavena´. Prˇı´klad 3.6 Uka´zˇeme si pra´ci s u´lohami. Nejdrˇ´ıv spustı´me neˇkolik interaktivnı´ch u´loh. spustı´me program yes, ktery´ nedeˇla´ nic jine´ho, nezˇ zˇe vypisuje rˇa´dky s pı´smenem „y“, tento vy´stup prˇesmeˇrujeme do souboru /dev/null, aby se nezobrazoval, symbol na konci zajistı´, zˇe proces bude prˇ´ımo smeˇrova´n na pozadı´; objevı´ se rˇa´dek (cˇ´ıslo mu˚zˇe by´t jine´, zobrazuje se PID procesu):
yes > /dev/null &
[1] 5783
tento prˇ´ıkaz zna´me, ted’ jsme ho spustili na pozadı´ (nema´ co deˇlat, tak byl pozastaven), vypsalo se
cat &
[2] 5787 [2]+ Stopped
cat
M M
tento prˇ´ıkaz narozdı´l od prˇedchozı´ho vsˇe, co dostane na svu˚j vstup, obracı´ (reverze), vypsalo se
rev &
[3] 5793 [3]+ Stopped
M
chceme seznam u´loh na tomto termina´lu, vy´pis:
jobs
[1] [2][3]+
fg
rev
Running Stopped Stopped
yes > /dev/null & cat rev
M
Symboly + a - na´m rˇ´ıkajı´, ktera´ u´loha byla na pozadı´ posla´na jako poslednı´, resp. prˇedposlednı´. ted’ jsme na poprˇedı´ poslali tu u´lohu, ktera´ byla na pozadı´ posla´na jako poslednı´ tuto u´lohu jsme poslali zpeˇt na pozadı´, zobrazı´ se
Ctrl+Z
[3]+ Stopped fg %1
rev
na poprˇedı´ posˇleme u´lohu s cˇ´ıslem 1, tj. yes
Ctrl+Z
u´lohu jsme poslali zpeˇt na pozadı´
kill %1 %2 %3
ukoncˇ´ıme vsˇechny trˇi u´lohy, zobrazı´ se
[1]+ [2] [3]-
yes > /dev/null & cat rev
Terminated Terminated Terminated
M M
PROCESY A U´LOHY
3.2
65
´ koly U Vyzkousˇejte postup uka´zany´ v prˇ´ıkladu 3.6. Mu˚zˇete pracovat s interaktivnı´mi u´lohami v prˇ´ıkladu uvedeny´mi, prˇ´ıpadneˇ i s dalsˇ´ımi, naprˇ´ıklad ispell (kontrola anglicke´ho pravopisu), nslookup (interaktivnı´ prˇeklad DNS na´zvu˚ na IP adresy), apod.
C
Procvicˇte si spousˇteˇnı´ u´loh na pozadı´, vypisova´nı´ u´loh, prˇena´sˇenı´ na poprˇedı´, pozastavova´nı´ a ukoncˇova´nı´.
3.2.4
Komunikace procesu˚
Procesy mohou vza´jemneˇ komunikovat neˇkolika zpu˚soby: • posı´la´nı´m signa´lu˚, • posı´la´nı´m zpra´v (IPC, InterProcess Communication), zpra´va narozdı´l od signa´lu mu˚zˇe obsahovat i data, pouzˇ´ıva´ se naprˇ´ıklad prˇi synchronizaci procesu˚, • prˇes sdı´lenou pameˇt’, do ktere´ ma´ prˇ´ıstup vı´ce procesu˚, • prˇes soubory, prˇ´ıpadneˇ docˇasne´ soubory, pouzˇ´ıva´ se i v mechanismu zrˇeteˇzova´nı´ prˇ´ıkazu˚ pomocı´ pipes (rour) nebo socketu˚, s rourami lze zacha´zet jako se soubory. Na´s zajı´majı´ prˇedevsˇ´ım signa´ly. Beˇzˇ´ıcı´m procesu˚m a u´loha´m tedy mu˚zˇeme posı´lat signa´ly (cˇ´ısla znamenajı´cı´ jednoduche´ prˇ´ıkazy), naprˇ´ıklad: 1 (SIGHUP) – tento signa´l posı´la´ ja´dro procesu˚m ve skupineˇ, jejı´zˇ hlavnı´ (rodicˇovsky´) proces byl „zaveˇsˇen“ – naprˇ´ıklad termina´l cˇi komunikacˇnı´ program ukoncˇen; typickou reakcı´ procesu na tento signa´l (prˇedevsˇ´ım u de´monu˚) je znovunacˇtenı´ konfiguracˇnı´ch souboru˚, cozˇ je vlastneˇ restart procesu, neˇktere´ procesy se prˇi obdrzˇenı´ tohoto signa´lu ukoncˇujı´. Pokud chceme, aby proces spousˇteˇny´ urcˇity´m prˇ´ıkazem v takove´m prˇ´ıpadeˇ nereagoval na signa´l SIGHUP (tj. aby de´mon nenacˇ´ıtal znovu konfiguraci, resp. beˇzˇny´ proces se neukoncˇoval prˇi ukoncˇenı´ rodicˇovske´ho termina´lu cˇi neprˇesouval se mı´sto ukoncˇenı´ pod proces init), pouzˇijeme pro jeho spusˇteˇnı´ prˇ´ıkaz nohup pr ˇı ´kaz & 2 (SIGINT) – prˇerusˇenı´ procesu nebo u´lohy z kla´vesnice (ekvivalent Ctrl+C ) 9 (SIGKILL) – bezpodmı´necˇne´ ukoncˇenı´ (proces po sobeˇ neuklidı´ prostrˇedky (naprˇ. pameˇt’), zu˚stanou zabra´ny, dokud nenı´ ukoncˇen rodicˇovsky´ proces 15 (SIGTERM) – implicitnı´ volba (kdyzˇ nenı´ uveden zˇa´dny´ signa´l, vybere se tento), zdvorˇile pozˇa´da´ proces, aby se ukoncˇil a da´ mu mozˇnost po sobeˇ uklidit prostrˇedky, proces mu˚zˇe tento signa´l ignorovat, pokud chceme ukoncˇit strom procesu˚ (v ra´mci jedne´ skupiny nebo alesponˇ se stejny´m – nasˇ´ım – UID), pouzˇijeme pra´veˇ tento signa´l, 19 (SIGSTOP) – pozastavenı´ u´lohy, ekvivalentnı´ pouzˇitı´ kla´vesove´ zkratky Ctrl+Z 18 (SIGCONT) – pozastavena´ u´loha mu˚zˇe pokracˇovat v cˇinnosti (continue)
P
PROCESY A U´LOHY
3.2
66
Signa´ly mu˚zˇeme posı´lat pouze svy´m vlastnı´m u´loha´m a procesu˚m, kromeˇ roota – ten mu˚zˇe signa´l odeslat komukoliv. K posı´la´nı´ signa´lu˚ slouzˇ´ı prˇ´ıkazy kill, pkill a killall, neˇktere´ termina´love´ (konzolove´) programy majı´ tuto volbu take´ v menu. zasla´nı´ signa´lu cˇ. 9 (SIGKILL) procesu s PID 6223
kill -9 6223
tote´zˇ
kill -KILL 6223 kill -9 %2
$
zasla´nı´ te´hozˇ signa´lu u´loze cˇ. 2
pokud nezada´me signa´l, je posla´n signa´l 15 (SIGTERM) pro standardnı´ ukoncˇenı´ procesu
kill %2 kill -l
vy´pis seznamu signa´lu˚ (list)
posˇle signa´l SIGTERM vsˇem procesu˚m, jejichzˇ PPID (rodicˇovsky´ proces) odpovı´da´ zadane´mu
pkill -P 5421 pkill -u 1002
ukoncˇ´ı procesy zadane´ho uzˇivatele (zada´va´me UID)
ukoncˇ´ı procesy ve skupineˇ procesu˚ se zadany´m PGID (ukoncˇ´ı cely´ podstrom, nenı´ nutne´ zvla´sˇt’ukoncˇovat jednotlive´ procesy ve skupineˇ)
killall -g 3981
Prˇı´klad 3.7 Chceme pozastavit u´lohu, jejı´zˇ PID je 3189 a cˇ´ıslo u´lohy je 3. Ma´me tyto mozˇnosti: • • • •
kill -19 3189 kill -19 %3 kill -STOP 3189 kill -STOP %3
Je jedno, kterou mozˇnost zvolı´me, fungujı´ vsˇechny.
Signa´ly se mohou lisˇit na ru˚zny´ch distribucı´ch Linuxu a samozrˇejmeˇ na ru˚zny´ch dalsˇ´ıch unixovy´ch syste´mech. Seznam nadefinovany´ch signa´lu˚ vypı´sˇeme prˇ´ıkazem kill -l. Prˇı´klad 3.8 Dosˇlo k neˇjake´ za´vadeˇ, ktera´ znemozˇnı´ odhla´sit se, potom: • prˇihla´sı´me se znovu • zjistı´me cˇ´ıslo stare´ho (beˇzˇ´ıcı´ho) shellu, ktery´ se na´m prˇedtı´m nepodarˇilo ukoncˇit odhla´sˇenı´m, a to pomocı´ prˇ´ıkazu ps • ukoncˇ´ıme tento shell prˇ´ıkazem kill -9 PID, kde za PID dosadı´me zjisˇteˇne´ cˇ´ıslo procesu.
$
3.2
PROCESY A U´LOHY
67
´ koly U 1. Spust’te prˇ´ıkaz cat bez parametru˚ a pozastavte ho ( Ctrl+Z ).
C
2. Spust’te na pozadı´ prˇ´ıkaz yes, jeho vy´stup prˇesmeˇrujte tak, aby se nevypisoval: yes > /dev/null &
3. Stejneˇ (na pozadı´) spust’te prˇ´ıkaz rev bez parametru˚. 4. Prˇ´ıkazem jobs zobrazte seznam u´loh, zjisteˇte cˇ´ısla teˇchto u´loh. 5. Obnovte proces yes na pozadı´, proces cat zastavte prˇ´ıkazem kill. Vypisˇte seznam u´loh a porovnejte s prˇedchozı´m. 6. Prˇ´ıkaz cat spust’te na pozadı´, prˇesunˇte ho na poprˇedı´ a pomocı´ kla´vesove´ kombinace ho ukoncˇete. Ukoncˇete take´ proces rev a yes.
3.2.5
Pla´nova´nı´ spousˇteˇnı´ procesu˚
Pla´novat spousˇteˇnı´ procesu˚ lze dveˇma ru˚zny´mi mechanismy – at a cron. Prvnı´ z nich je jednodusˇsˇ´ı a slouzˇ´ı spı´sˇe k jednoduche´mu jednora´zove´mu napla´nova´nı´ spusˇteˇnı´ u´lohy (naprˇ´ıklad za hodinu nebo stanoveny´ den v urcˇitou hodinu), druhy´ ma´ mnohem sˇirsˇ´ı mozˇnosti. Nejdrˇ´ıv se podı´va´me na jednodusˇsˇ´ı mechanismus: at
napla´nova´nı´ spousˇteˇnı´ programu˚ nebo skriptu˚ v zadane´m cˇase, aby pla´nova´nı´ fungovalo, musı´ by´t spusˇteˇn de´mon atd at -l vypı´sˇe seznam napla´novany´ch u´loh at now + 2 minutes takto napla´nujeme u´lohu (jako posloupnost spusˇteˇnı´ prˇ´ıkazu˚ a programu˚), po zada´nı´ se objevı´ prompt PS2 (obvykle symbol >) a mu˚zˇeme
zada´vat jednotlive´ prˇ´ıkazy, ktere´ se v zadane´ dobeˇ majı´ spustit, konec zada´va´nı´: kla´vesova´ zkratka Ctrl+D stejneˇ jako prˇi vytva´rˇenı´ souboru (ale mu˚zˇeme vyuzˇ´ıt take´ podobny´ postup, jaky´ zna´me z „here documents“ – strana 29) at Mon 18:00 v pondeˇlı´ 18 hodin at May 15 07:15 2010 dalsˇ´ı zpu˚sob zada´nı´ cˇasu (15. kveˇtna, atd.) at -r 7 ze seznamu napla´novany´ch u´loh odebereme u´lohu cˇ´ıslo 7 (cˇ´ıslo u´lohy zjistı´me s vy´pisu seznamu u´loh) Prˇı´klad 3.9 Uka´zˇeme si pra´ci s programem at. Nejdrˇ´ıv oveˇrˇ´ıme, zda je spusˇteˇn de´mon atd, kdyzˇ zjistı´me, zˇe ne, tak ho spustı´me (musı´me mı´t vysˇsˇ´ı prˇ´ıstupova´ opra´vneˇnı´) a na´sledneˇ napla´nujeme jednoduchou u´lohu. ps -e | grep atd
vy´stup je pra´zdny´ (nenı´ vybra´n zˇa´dny´ rˇa´dek)
$
3.2
PROCESY A U´LOHY
68
jsme pozˇa´da´ni o heslo a pak je de´mon atd spusˇteˇn (toto funguje v takove´ linuxove´ distribuci, ktera´ pouzˇ´ıva´ sudo mechanismus; jinak bychom museli zadat prˇ´ıkaz su a pak spustit pla´novacı´ho de´mona)
sudo /usr/sbin/atd
ps -e | grep atd 5140 ?
na vy´stupu bude rˇa´dek
00:00:00 atd
To znamena´, zˇe tento de´mon uzˇ beˇzˇ´ı (zrˇejmeˇ bude zobrazeno jine´ PID) at now + 2 minutes >
zacˇneme pla´novat, zobrazı´ se prompt >
chceme, aby se v zadane´ dobeˇ vytvorˇil novy´ soubor v domovske´m adresa´rˇi, klepneme na Enter a pak stiskneme Ctrl+D , prompt PS2 zmizı´, jsme informova´ni o ukoncˇenı´ pla´nova´nı´ objevenı´m rˇa´dku
touch ˜/novysoubor.txt
job 1 at 2010-05-15 04:47
a objevı´ se beˇzˇny´ prompt PS1, mu˚zˇeme zada´vat dalsˇ´ı prˇ´ıkazy vypı´sˇe seznam napla´novany´ch u´loh, ta nasˇe by tam meˇla by´t (pokud jesˇteˇ neuplynuly ty dveˇ minuty)
at -l ls ˜
po dvou minuta´ch si vypı´sˇeme obsah pracovnı´ho adresa´rˇe, meˇl by tam by´t noveˇ vytvorˇeny´ soubor zase budeme pla´novat, ale vyuzˇijeme mechanismus „here document“, abychom nemuseli lovit v pameˇti zkratku Ctrl+D , zada´me:
at 05:01 << KONEC >
echo Napla ´nova ´no
hotovo, napla´novali jsme, zˇe v zadane´ dobeˇ dostaneme zpra´vu, v te´to dobeˇ se zobrazı´ tato informace:
> KONEC
You have new mail in /var/spool/mail/sarka cat /var/spool/mail/sarka
zobrazı´me obsah zpra´vy:
From [email protected] Sat May 15 04:39:02 2010 Return-Path: <[email protected]> X-Original-To: sarka Delivered-To: [email protected] Received: by linux-2vp6.site (Postfix, from userid 1002) id 3F471485BA; Sat, 15 May 2010 04:39:02 +0200 (CEST) Subject: Output from your job 2 To: [email protected] Message-Id: <[email protected]> Date: Sat, 15 May 2010 04:39:02 +0200 (CEST) From: [email protected] (Sarka Vavreckova) Napla ´nova ´no
Tı´mto zpu˚sobem je tedy uzˇivatel informova´n o uda´losti v syste´mu, ktera´ se ho ty´ka´, a neplatı´ to pouze o pla´nova´nı´.
M
SPRA´VA ZARˇI´ZENI´
3.3
69
Na´stroj cron je mnohem sofistikovaneˇjsˇ´ı. De´mon, ktery´ sleduje cˇas a spousˇtı´ napla´novane´ u´lohy, se nazy´va´ crond (aby mechanismus byl pouzˇitelny´, tento de´mon musı´ by´t spusˇteˇn). V KDE je standardneˇ prˇ´ıtomno graficke´ rozhranı´ pro pouzˇ´ıva´nı´ tohoto na´stroje, kcron. Podı´va´me se na za´kladnı´ syntaxi: cron
na´stroj (je spousˇteˇn jako de´mon), ktery´ doka´zˇe pla´novat take´ pravidelne´ akce, naprˇ´ıklad pravidelne´ za´lohova´nı´. man crontab, man 5 crontab, man cron zı´ska´nı´ na´poveˇdy pro cron crontab -l zobrazı´ se aktua´lnı´ seznam napla´novany´ch u´loh (to, co dany´ uzˇivatel
ma´ pra´vo videˇt) crontab -e editace za´znamu˚ cronu, soubor se otevrˇe v editoru specifikovane´m v promeˇnne´ VISUAL nebo EDITOR (pokud je to editor vi, meˇli bychom veˇdeˇt alesponˇ to, jak ho ukoncˇit – prˇ´ıkazem :q (nebo :wq, pokud chceme prˇed ukoncˇenı´m ulozˇit svou pra´ci), vy´znam je prˇedevsˇ´ım v tom, zˇe nemusı´me zjisˇt’ovat, do ktere´ho souboru vlastneˇ ma´me za´znam ukla´dat Napla´novane´ u´lohy jsou ulozˇeny v souborech /etc/crontab, nebo v neˇktere´m souboru adresa´rˇe /etc/cron.d, a da´le prˇedevsˇ´ım v souborech • • • • • •
/etc/crontab – za´kladnı´ soubor s napla´novany´mi u ´ lohami /etc/cron.d/ – adresa´rˇ se soubory v podobne´m forma´tu, pro ru ˚ zne´ uzˇivatele /etc/cron.daily – zde jsou u ´ lohy, ktere´ majı´ by´t spousˇteˇny denneˇ pod u´cˇtem root /etc/cron.weekly – u ´ lohy spousˇteˇne´ rootem kazˇdy´ ty´den /etc/cron.monthly – u ´ lohy spousˇteˇne´ rootem kazˇdy´ meˇsı´c /var/spool/cron/ – adresa´rˇ, ve ktere´m si cron udrzˇuje informace o konkre´tnı´ch
pla´nova´nı´ch, do tohoto adresa´rˇe ma´ prˇ´ıstup pouze root, ale ani ten do souboru˚ nezasahuje Kazˇda´ u´loha je na samostatne´m rˇa´dku a ma´ tuto formu: minut hodin den me ˇsı ´c rok pr ˇ´ ıkaz
Pokud u´daj nema´ by´t zada´n, napı´sˇeme znak „*“. Prˇı´klad 3.10 Pro napla´nova´nı´ spusˇteˇnı´ prˇ´ıkazu pro smaza´nı´ docˇasny´ch souboru˚ v zadane´m adresa´rˇi, a to denneˇ v 14:05, bude v souboru /etc/crontab nebo /etc/cron.daily rˇa´dek 5 14 * * * rm -rf /home/uzivatel/*.tmp
$
3.3
SPRA´VA ZARˇI´ZENI´
3.3
Spra´va zarˇı´zenı´
3.3.1
Pameˇt’ova´ me´dia
70
Protozˇe jsou vsˇechny adresa´rˇe v jedine´m stromeˇ, odpada´ proble´m s prˇepı´na´nı´m mezi disky (oddı´ly na disku). Prˇesto vsˇak existujı´ prˇ´ıkazy souvisejı´cı´ s disky, ktere´ na´s mohou zajı´mat. df
vypı´sˇe volne´ mı´sto na jednotlivy´ch discı´ch (disk free) df df
df df df
ke kazˇde´mu oddı´lu na disku se vypı´sˇou u´daje o velikosti oddı´lu, kolik je vyuzˇito (i procenta) a do ktere´ho adresa´rˇe je prˇipojen (prˇ´ıpojny´ bod) -T ke kazˇde´mu oddı´lu se vypı´sˇe take´ typ souborove´ho syste´mu (pokud ovladacˇ souborove´ho syste´mu vyuzˇ´ıva´ modul FUSE, vypı´sˇe se, naprˇ´ıklad mı´sto ntfs, u´daj „fuseblk“) -Th kromeˇ vy´sˇe uvedeny´ch u´daju˚ se u´daje o mnozˇstvı´ mı´sta zobrazı´ v „lidske´m“ forma´tu vcˇetneˇ jednotek (mı´sto pocˇtu bloku˚ u´daje v KB, MB, GB) -i u´daje o dostupne´m, volne´m apod. mı´steˇ se zapisujı´ v pocˇtech i-uzlu˚ (inodes) mı´sto v pocˇtu bloku˚ (tj. ma´me prˇedstavu o pocˇtu souboru˚ a adresa´rˇu˚ na oddı´lu) -a vypı´sˇou se informace o vsˇech prˇipojeny´ch souborovy´ch syste´mech vcˇetneˇ mnoha virtua´lnı´ch (ne vsˇech), tento vy´pis ma´ smysl naprˇ´ıklad tehdy, kdyzˇ chceme prˇehled prˇipojeny´ch souborovy´ch syste´mu˚
du
vypı´sˇe obsazene´ mı´sto na disku (disk usage) zabrane´ konkre´tnı´m souborem nebo adresa´rˇem (vcˇetneˇ jeho podadresa´rˇu˚, rekurzı´vneˇ) vypı´sˇe rekurzı´vneˇ vsˇechny adresa´rˇe v pracovnı´m adresa´rˇi a ke kazˇde´mu mnozˇstvı´ mı´sta, ktere´ zabı´ra´ (v blocı´ch) du -a podobneˇ, ale kromeˇ adresa´rˇu˚ vypisuje i ostatnı´ soubory a mı´sto jimi zabrane´ du -h soubor.pdf pro zadany´ soubor vypı´sˇe mnozˇstvı´ mı´sta, ktere´ zabı´ra´, pouzˇity´ prˇepı´nacˇ zpu˚sobı´ vy´pis v „lidsky´ch“ jednotka´ch du -h ‘ls *.txt‘ vypı´sˇe mı´sto zabrane´ soubory s prˇ´ıponou TXT nacha´zejı´cı´mi se v pracovnı´m adresa´rˇi; prˇ´ıkaz nepracuje jako filtr za jiny´m prˇ´ıkazem, proto mu da´me vy´stup prˇ´ıkazu ls jako parametr (obra´cene´ apostrofy jsou nutne´, aby se vnorˇeny´ prˇ´ıkaz vyhodnotil drˇ´ıve nezˇ vneˇjsˇ´ı) du
lsof
vypı´sˇe seznam otevrˇeny´ch souboru˚ (vycha´zı´ ze seznamu procesu˚, ke kazˇde´mu zjisˇt’uje, ktere´ soubory ma´ tento proces otevrˇene´) – list open files; zjistı´me prˇedevsˇ´ım na´zev procesu, PID, uzˇivatele, FD (bud’ cˇ´ıselny´ deskriptor beˇzˇne´ho souboru nebo identifikace typu – pracovnı´ adresa´rˇ, mem – soubor mapovany´ do pameˇti, apod., k deskriptoru by´va´ prˇipojen symbol pro typ otevrˇenı´ – r, w, apod.), typ (naprˇ. DIR pro adresa´rˇ, LINK pro symbolicky´ odkaz, IPv4 pro IPv4 socket, atd.), cˇ´ısla zarˇ´ızenı´, offset souboru, cˇ´ıslo i-uzlu a samozrˇejmeˇ na´zev souboru
$
3.3
SPRA´VA ZARˇI´ZENI´
71
vypı´sˇe vsˇechny otevrˇene´ soubory, jde o velmi dlouhy´ vy´pis (na desktopu obvykle neˇkolik tisı´c polozˇek) lsof > ˜/seznamlsof.txt to uzˇ je lepsˇ´ı, vy´stup si mu˚zˇeme prohle´dnout v souboru lsof | grep ”\.so[0-9\.]$” > ˜/pouziteknihovny.txt podobneˇ jako v prˇedchozı´m prˇ´ıkazu, ale na vy´stup se dostanou pouze pouzˇ´ıvane´ soubory, ktere´ jsou knihovnami (majı´ prˇ´ıponu .SO, za prˇ´ıponou mu˚zˇe by´t jesˇteˇ cˇ´ıslo verze knihovny) lsof ˜ zı´ska´me seznam procesu˚, ktere´ pracujı´ s nasˇ´ım domovsky´m adresa´rˇem lsof -u uz ˇivatel vypı´sˇe pouze seznam souboru˚ pouzˇ´ıvany´ch procesy se zadany´m uzˇivatelem (mu˚zˇeme zadat UID nebo na´zev uzˇivatele, kdyzˇ je jich vı´ce, tak je oddeˇlı´me cˇa´rkami, kolem cˇa´rek nesmı´ by´t mezery) lsof | grep pipe zjistı´me, ktere´ procesy pra´veˇ komunikujı´ prˇes nepojmenovanou (anonymnı´) rouru lsof | grep socket zjistı´me, ktere´ procesy pra´veˇ komunikujı´ prˇes socket
lsof
sync
synchronizace diskovy´ch oddı´lu˚ a cache pameˇtı´ fsck
kontrola vadny´ch sektoru˚ na disku (parametry najdeme v na´poveˇdeˇ), ve skutecˇnosti se pouzˇ´ıvajı´ varianty pro konkre´tnı´ souborovy´ syste´m – fsck.ext2, fsck.ext3, raiserfsck, fsck.vfat, fsck.ntfs, apod. apropos fsck takto zjistı´me konkre´tnı´ prˇ´ıkazy pro ru˚zne´ souborove´ syste´my fsck.ext3 /dev/sd9 provede kontrolu zadane´ho oddı´lu se souborovy´m syste´-
mem ext3 (oddı´l by meˇl by´t odpojen) mkfs
vytvorˇenı´ souborove´ho syste´mu (v terminologii Windows zforma´tova´nı´, parametry najdeme v na´poveˇdeˇ), opeˇt existujı´ varianty pro ru˚zne´ souborove´ syste´my – mkfs.ext2fs, mkfs.ext3fs, mkfs.vfat, apod. Prˇı´klad 3.11 Po zada´nı´ prˇ´ıkazu df -ah zı´ska´me tento vy´stup (notebook dualboot Windows 7 a SUSE Linux): Filesystem /dev/sda7 /proc sysfs debugfs udev devpts /dev/sda8 /dev/sda9
Size 20G 0 0 0 2.0G 0 40G 60G
Used 3.8G 0 0 0 192K 0 188M 5.1G
Avail 16G 0 0 0 2.0G 0 38G 51G
Use% 20% 1% 1% 10%
Mounded on / /proc /sys /sys/kernel/debug /dev /dev/pts /home /usr
M
3.3
SPRA´VA ZARˇI´ZENI´
/dev/sda2 /dev/sda5 fusectl securityfs none
117G 168G 0 0 0
72
30G 256M 0 0 0
87G 168G 0 0 0
26% 1% -
/mnt/winC /mnt/winD /sys/fs/fuse/connections /sys/kernel/security /proc/sys/fs/binfmt_misc
´ koly U 1. Zjisteˇte, kolik volne´ho mı´sta je na jednotlivy´ch oddı´lech pevne´ho disku (vyzkousˇejte, jestli funguje i na prˇipojena´ vy´meˇnna´ me´dia, jako naprˇ´ıklad USB flash disky).
C
2. Zjisteˇte, kolik mı´sta na disku zabı´ra´ adresa´rˇ s dokumenty ve vasˇem domovske´m adresa´rˇi. Da´le zjisteˇte, kolik mı´sta na disku zabı´ra´ adresa´rˇ /var/log. 3. Zjisteˇte, ktere´ procesy pracujı´ s vasˇ´ım domovsky´m adresa´rˇem. 4. Zjisteˇte, ktere´ soubory jsou pra´veˇ pouzˇ´ıva´ny procesy, jejichzˇ vlastnı´kem jste vy. 5. Zjisteˇte, kdo pra´veˇ pouzˇ´ıva´ soubor /dev/null.
3.3.2
Prˇipojova´nı´ a odpojova´nı´ pameˇtı´
Pro prˇipojenı´ a odpojenı´ diskove´ho oddı´lu nebo vy´meˇnne´ho pameˇt’ove´ho me´dia (na ktere´m je obvykle jediny´ oddı´l) pouzˇ´ıva´me tyto prˇ´ıkazy: mount
$
prˇipojı´ disk do syste´mu (resp. jeho souborovy´ syste´m) umount
odpojı´ disk Soubor fstab. Prˇi spra´veˇ disku˚ pracujeme opeˇt bud’ s na´stroji dostupny´mi v graficke´m prostrˇedı´, nebo pouzˇ´ıva´me prˇ´ıkazy shellu a soubor fstab a prˇ´ıkaz mount. Soubor /etc/fstab slouzˇ´ı k evidenci prˇipojitelny´ch logicky´ch disku˚. Kazˇdy´ rˇa´dek odpovı´da´ ˇ a´dek se skla´da´ z teˇchto cˇa´stı´: jednomu disku nebo oddı´lu se souborovy´m syste´mem. R 1. Urcˇenı´ zarˇ´ızenı´, ktere´ se bude prˇipojovat (specia´lnı´ soubor), pro ru˚zne´ disky naprˇ´ıklad /dev/sda1, /dev/cdrom, /dev/fd0. V neˇktery´ch distribucı´ch (jmenoviteˇ noveˇjsˇ´ı verze SUSE) se mu˚zˇeme setkat s poneˇkud chaoticky´m oznacˇenı´m – mı´sto /dev/sdax mu˚zˇeme najı´t naprˇ´ıklad /dev/disk/by-id/ata-vy ´robnı ´-ko ´d-disku-partx. 2. Na´zev prˇ´ıpojne´ho bodu (mounting point), prˇes ktery´ bude zarˇ´ızenı´ prˇ´ıstupne´ (/mnt/c, /mnt/cdrom, prˇ´ıpadneˇ /windows/C, /media/cdrecorder). Zde uvedeny´ adresa´rˇ mu ˚zˇeme urcˇit take´ sami, jenom ho musı´me prˇedem vytvorˇit.
P
3.3
SPRA´VA ZARˇI´ZENI´
73
3. Typ souborove´ho syste´mu na zarˇ´ızenı´. Mu˚zˇe zde by´t ext2, ext3, reiserfs nebo jiny´ linuxovy´ souborovy´ syste´m, vfat, ntfs, msdos pro disky, se ktery´mi pracujeme ve Windows, nfs je pro disky vzda´leny´ch pocˇ´ıtacˇu˚, pro CD je iso9660, pro DVD je to udf (Universal Disk Format), pro swap partition je to hodnota swap. Mu˚zˇeme se setkat s s volbou auto, to znamena´ automaticke´ rozpozna´nı´ souborove´ho syste´mu prˇi prˇipojova´nı´. Je to vhodne´ naprˇ´ıklad pro diskety, USB disky nebo CD/DVD. 4. Seznam parametru˚ pro mount. Nejdu˚lezˇiteˇjsˇ´ı jsou • ro (pouze pro cˇtenı´), rw (i pro za´pis), • user (prˇipojit mu˚zˇe i beˇzˇny´ uzˇivatel, odpojit tenty´zˇ uzˇivatel), users (prˇipojit beˇzˇny´ uzˇivatel, odpojit kdokoliv, i neˇkdo jiny´), • noauto (po startu syste´mu nenı´ prˇipojen automaticky, musı´ se rucˇneˇ, typicke´ pro vy´meˇnna´ me´dia), • iocharset=iso8859-2 a code=852 (slouzˇ´ı ke spra´vne´mu nastavenı´ cˇesˇtiny, mu˚zˇe by´t i jina´ znakova´ stra´nka), • locale=cs_CZ.UTF-8 – podobneˇ, ale pro (Windowsovske´) disky s na´zvy souboru˚ v Unicode, dnes beˇzˇne´ na NTFS, • exec (povolenı´ spousˇteˇt na tomto oddı´lu programy), noexec (zaka´za´no spousˇteˇt na tomto oddı´lu programy, velmi doporucˇova´no pro datove´ disky), • noatime (prˇi prˇ´ıstupu k souboru – access – nebude aktualizova´n cˇas poslednı´ho prˇ´ıstupu k souboru, mu˚zˇe zrychlit pra´ci s oddı´lem), • nodev (i kdyby byl neˇktery´ soubor z tohoto oddı´lu oznacˇen jako specia´lnı´ soubor zarˇ´ızenı´, nebude s nı´m takto zacha´zeno, bude bra´n jako obycˇejny´ soubor; z hlediska bezpecˇnosti se doporucˇuje pro vsˇechny oddı´ly, kde se nepocˇ´ıta´ s existencı´ specia´lnı´ch souboru˚, naprˇ´ıklad /home, /usr, datove´ disky), • nosuid (nastavene´ SUID a SGID bity budou ignorova´ny), • sync (zarˇ´ızenı´ bude prˇi kazˇde´m za´pisu okamzˇiteˇ synchronizova´no, cache pameˇt’ se bude vyuzˇ´ıvat jen minima´lneˇ; pro SSD disky a USB flash disky je tato volba nevhodna´, zkracuje zˇivotnost disku), atd. Neˇktere´ volby jsou pouzˇitelne´ pouze pro neˇktere´ souborove´ syste´my. Podrobnosti o volba´ch najdeme v manua´lech – man fstab, man mount). Pokud jsou uplatnˇova´ny ACL a rozsˇ´ırˇene´ atributy prˇ´ıstupu (o nich v na´sledujı´cı´ kapitole), setka´me se u neˇktery´ch oddı´lu˚ s u´dajem acl,user_xattr. 5. Pokud je zde znak 1, bude program dump tento oddı´l za´lohovat. 6. Pokud je zde znak 1 nebo 2, bude program fsck tento oddı´l kontrolovat prˇi startu. Hodnota 1 urcˇuje veˇtsˇ´ı prioritu (zkontroluje se nejdrˇ´ıv), pouzˇ´ıva´ se pro hlavnı´ oddı´l, 2 je pro ostatnı´. Hodnota 0 se zada´va´ pro ty oddı´ly, ktere´ se nemajı´ kontrolovat (naprˇ´ıklad windows oddı´ly nebo vy´meˇnna´ me´dia).
3.3
SPRA´VA ZARˇI´ZENI´
74
Korˇenovy´ oddı´l by meˇl obsahovat v poslednı´ch dvou cˇa´stech znak 1. S jeho rˇa´dkem bychom nemeˇli nic deˇlat, hrozı´ riziko kolapsu (resp. nespusˇteˇnı´) Linuxu. Prˇı´klad 3.12 Soubor /etc/fstab mu˚zˇe vypadat naprˇ´ıklad takto (zarovna´nı´ do sloupcu˚ je provedeno pomocı´ tabula´toru˚): /dev/sda6 swap /dev/sda7 / /dev/sda8 /home /dev/sda9 /usr /dev/sda2 /mnt/winC locale=cs_CZ.UTF-8 0 0 /dev/sda5 /mnt/winD locale=cs_CZ.UTF-8 0 0 proc /proc sysfs /sys debugfs /sys/kernel/debug usbfs /proc/bus/usb devpts /dev/pts
swap ext3 ext3 ext3 ntfs-3g
defaults 0 0 acl,user_xattr 1 1 acl,user_xattr 1 2 acl,user_xattr 1 2 users,gid=users,fmask=133,dmask=022,
ntfs-3g
users,gid=users,fmask=133,dmask=022,
proc sysfs degubfs usbfs devpts
defaults noauto noauto noauto mode=0620,gid=5
M
0 0 0 0 0
0 0 0 0 0
Jak vı´me, v /etc/fstab jsou prˇipojitelne´ souborove´ syste´my, kdezˇto v souboru /etc/mtab najdeme seznam souborovy´ch syste´mu˚, ktere´ jsou pra´veˇ prˇipojeny. Prˇi uvedene´m obsahu souboru /etc/fstab najdeme v souboru /etc/mtab tyto rˇa´dky: /dev/sda7 / ext3 rw,acl,user_xattr 0 0 /proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 debugfs /sys/kernel/debug debugfs rw 0 0 udev /dev tmpfs rw 0 0 devpts /dev/pts devpts rw,mode=0620,gid=5 0 0 /dev/sda8 /home ext3 rw,acl,user_xattr 0 0 /dev/sda9 /usr ext3 rw,acl,user_xattr 0 0 /dev/sda2 /mnt/winC fuseblk rw,noexec,nosuid,nodev,allow_other, default_permissions,blksize=4096 0 0 /dev/sda5 /mnt/winD fuseblk rw,noexec,nosuid,nodev,allow_other, default_permissions,blksize=4096 0 0 fusectl /sys/fs/fuse/connections fusectl rw 0 0 securityfs /sys/kernel/security securityfs rw 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0 /dev/sdb1 /media/disk vfat rw,nosuid,nodev,noatime,flush,uid=1000, utf8,shortname=lower 0 0
Kazˇdy´ za´znam je samozrˇejmeˇ na jedine´m rˇa´dku, zde neˇktere´ dlouhe´ za´znamy „prˇetekly“ na na´sledujı´cı´ rˇa´dek (rˇa´dky koncˇ´ıcı´ cˇa´rkou). Druhy´ vy´pis se mu˚zˇe zda´t me´neˇ prˇehledny´, protozˇe jednotliva´ pole na rˇa´dku jsou oddeˇlova´na mezerou mı´sto tabula´toru. Poslednı´ vypsany´ rˇa´dek patrˇ´ı pra´veˇ prˇipojene´mu vy´meˇnne´mu zarˇ´ızenı´ (USB flash disku).
M
3.3
SPRA´VA ZARˇI´ZENI´
75
Vsˇimneˇte si vztahu mezi u´daji v teˇchto dvou souborech a mezi vy´pisem, ktery´ jsme videˇli v prˇ´ıkladu 3.11 na straneˇ 71.
Prˇipojova´nı´ disku ˚. Pokud je v fstab na urcˇite´m rˇa´dku volba noauto, musı´me tento disk sami prˇipojit, abychom ho mohli pouzˇ´ıvat. Ty´ka´ se to vy´meˇnny´ch zarˇ´ızenı´, jako jsou CD, DVD, USB flash disky nebo diskety. Tento u´kol je snadno rˇesˇitelny´ v graficke´m prostrˇedı´ – v kontextove´m menu ikony prˇedstavujı´cı´ pameˇt’ove´ me´dium (disketu, flash disk apod.) zvolı´me Prˇipojit (Mount), pro odpojenı´ Odpojit (UMount), v ru˚zny´ch distribucı´ch mohou by´t tyto polozˇky ru˚zneˇ nazva´ny. Pokud na plosˇe (nebo jinde) tyto ikony nema´me, mu˚zˇeme je tam prˇidat (v nastavenı´ plochy urcˇ´ıme zobrazovana´ zarˇ´ızenı´). V shellu pouzˇijeme naprˇ´ıklad tyto prˇ´ıkazy: mount
(bez parametru˚) vypı´sˇe prˇipojene´ disky, podobneˇ jako cat /etc/mtab
pokud je tento prˇ´ıpojny´ bod uvedeny´ v souboru /etc/fstab, pro prˇipojenı´ zadane´ho oddı´lu stacˇ´ı prˇ´ıkazu mount tato informace, tedy prˇipojı´me zadany´ oddı´l
mount /mnt/winD
mount -o r /mnt/winD
prˇipojı´ syste´m pouze pro cˇtenı´
mount -o r /mnt/winD
prˇipojı´ syste´m pouze pro cˇtenı´
mount -o rw /mnt/winD mount -l -t fstype
prˇipojı´ syste´m pro cˇtenı´ i za´pis, implicitnı´ volba
zobrazı´ seznam prˇipojeny´ch oddı´lu˚ se zadany´m souborovy´m sys-
te´mem prˇipojenı´ USB flash disku se souborovy´m syste´mem FAT32, zada´va´me specia´lnı´ soubor a prˇ´ıpojny´ bod
mount -t vfat /dev/sdb2 /mnt/flash
Prˇipojova´nı´ a odpojova´nı´ vyzˇaduje pra´va spra´vce syste´mu (pokud nepouzˇ´ıva´me kontextove´ menu v graficke´m rezˇimu), proto prˇed pouzˇitı´m prˇ´ıkazu mount nebo umount pouzˇijeme prˇ´ıkaz su nebo sudo pro zı´ska´nı´ pra´v superuzˇivatele. Prˇı´klad 3.13 Uka´zˇeme si prˇipojova´nı´ a odpojova´nı´ disku˚: mount /dev/sdb1 /home
prˇipojı´ partition 1 druhe´ho disku, na neˇm jsou domovske´ adresa´rˇe uzˇivatelu˚ (to se obvykle prova´dı´ automaticky prˇi startu syste´mu) mount /dev/sda1 /mnt/C -t ntfs
prˇipojı´ partition 1 prvnı´ho disku se souborovy´m syste´mem NTFS (tady pozor, za´lezˇ´ı, jaky´ ovladacˇ NTFS pouzˇ´ıva´me, veˇtsˇinou by to asi bylo trochu jinak)
$
SPRA´VA ZARˇI´ZENI´
3.3
76
mount /dev/sda3 /usr -t ext3fs
prˇipojı´ partition 3 prvnı´ho disku, na nı´ jsou adresa´rˇe instalovany´ch programu˚ (/usr), souborovy´ syste´m ext3 mount /dev/fd0 /mnt/floppy -t vfat
prˇipojı´ disketu se souborovy´m syste´mem FAT mount /mnt/floppy
vyuzˇitı´ pouze druhe´ho u´daje na rˇa´dku v fstab umount /mnt/cdrom
odpojenı´ CD
Pokud prˇ´ıpojny´ bod nenı´ uveden v fstab, musı´me prˇ´ıkazu mount dodat i parametry, ktere´ by jinak byly v fstab uvedeny (forma je uvedena v man mount). Prˇipojenı´ USB flash disku. Na´sledujı´cı´ postup je v noveˇjsˇ´ıch distribucı´ch plneˇ rˇesˇen automaticky´m prˇipojova´nı´m (automount, supermount, gnome-mount, apod.), ale hodı´ se u hodneˇ stary´ch distribucı´, ktere´ chceme zprovoznit na „letite´m“ hardwaru.
Kdyzˇ chceme prˇipojit USB flashdisk, nejdrˇ´ıv vytvorˇ´ıme odpovı´dajı´cı´ adresa´rˇ v /mnt, pokud tam jesˇteˇ nenı´: mkdir -m 666 /mnt/flash (parametrem prˇ´ıkazu mohou by´t i prˇirˇazena´ prˇ´ıstupova´ pra´va, at’tento krok nemusı´me deˇlat dalsˇ´ım prˇ´ıkazem). Pak pro prˇipojenı´ stacˇ´ı zadat mount -t vfat /dev/sdb1 /mnt/flash (pouzˇijeme samozrˇejmeˇ spra´vny´ specia´lnı´ soubor, mu˚zˇe by´t jiny´ nezˇ zde uvedeny´). Jestlizˇe si chceme trochu zjednodusˇit prˇipojova´nı´, mu˚zˇeme do fstab prˇidat rˇa´dek /dev/sdb1 /mnt/flash vfat noauto,users,sync 0 0
Pak stacˇ´ı pro prˇipojenı´ zadat jen mount /mnt/flash nebo flashdisk prˇipojı´me v graficke´m prostrˇedı´.
3.3.3
Program fdisk
Jednı´m z nejdu˚lezˇiteˇjsˇ´ıch programu˚ pro spra´vu disku˚ je program fdisk (podoba s Windowsovsky´m fdiskem je pouze v na´zvu a v za´kladnı´ch funkcı´ch). Prˇ´ıkazy pouzˇ´ıvane´ v programu jsou v tabulce 3.1. Programem fdisk je mozˇne´ vytva´rˇet i jine´ nezˇ linuxove´ partitions, dokonce i msdos a vfat, ale nedoporucˇuje se to, DOS a Windows s takto vytvorˇeny´mi partitions z neˇjake´ho du˚vodu nemusejı´ pracovat spra´vneˇ. Narozdı´l od DOSovske´ho fdisku, ktery´ umı´ vytvorˇit pouze jednu prima´rnı´ partition a ostantnı´ musı´ by´t zahrnuty v extended partition, linuxovy´ fdisk doka´zˇe vytvorˇit beˇzˇne´ 4 prima´rnı´ partitions.
P
MODULY JA´DRA
3.4
77
Prˇ´ıkaz
Vy´znam
fdisk -l /dev/hda
vypı´sˇe informace o udane´m disku zobrazı´ se okno pro pra´ci s diskem na´poveˇda k fdisku, na´poveˇda prˇi pra´ci s programem zobrazı´ oddı´ly disku vytvorˇ´ı novou partition (program na´s vede, obcˇas stiskneme neˇjakou kla´vesu, uda´me zacˇa´tek a velikost partition) smazˇe partition
fdisk /dev/hda man fdisk kla ´vesa M kla ´vesa P kla ´vesa N kla ´vesa D
Tabulka 3.1: Prˇ´ıkazy fdisku
3.3.4
Hlavnı´ a vedlejsˇı´ cˇı´slo zarˇı´zenı´, udev
Ja´dro nepracuje s „rˇeteˇzcovy´mi“ na´zvy zarˇ´ızenı´, ale pouze s jejich cˇ´ıselny´m oznacˇenı´m. Kazˇde´ zarˇ´ızenı´ ma´ prˇirˇazena dveˇ cˇ´ısla: • Hlavnı´ cˇ´ıslo je jedinecˇne´ pro kazˇdy´ druh zarˇ´ızenı´,
P
• Vedlejsˇ´ı cˇ´ıslo je jedinecˇne´ pro kazˇdou instanci druhu zarˇ´ızenı´. Naprˇ´ıklad kdyzˇ ma´me dveˇ sı´t’ove´ karty, budou mı´t stejne´ hlavnı´ cˇ´ıslo, ale jina´ vedlejsˇ´ı cˇ´ısla. Ve vy´stupu prˇ´ıkazu ls -las /dev jsou tato cˇ´ısla uvedena tam, kde u beˇzˇny´ch souboru˚ je jejich de´lka. Cˇ´ısla zarˇ´ızenı´ se take´ obvykle dajı´ zjistit v neˇktere´m z na´stroju˚ v graficke´m rozhranı´. Pokud je pro spra´vu zarˇ´ızenı´ mı´sto devfs pouzˇit souborovy´ syste´m udev (cozˇ je dnes obvykle´), pak jsou cˇ´ısla zarˇ´ızenı´ dynamicky generovana´. Souborovy´ syste´m udev, jak jizˇ vı´me, slouzˇ´ı ke spra´veˇ prˇ´ıstupu k zarˇ´ızenı´m. Jedna´ se o virtua´lnı´ souborovy´ syste´m, ktery´ poskytuje rozhranı´ mezi procesy a ovladacˇi zarˇ´ızenı´ beˇzˇ´ıcı´mi prˇeva´zˇneˇ v ja´drˇe. Jeho cˇinnost zajisˇt’uje de´mon udevd, ktery´ periodicky zjisˇt’uje informace ze souborove´ho syste´mu sysfs. Dı´ky tomu ma´ neusta´le prˇehled o zmeˇna´ch v seznamu prˇipojeny´ch zarˇ´ızenı´ a mu˚zˇe vcˇas na tyto zmeˇny reagovat. ´ koly U Vypisˇte obsah adresa´rˇe /dev tak, aby se u kazˇde´ho specia´lnı´ho souboru zobrazilo hlavnı´ a vedlejsˇ´ı cˇ´ıslo zarˇ´ızenı´. Zjisteˇte hlavnı´ a vedlejsˇ´ı cˇ´ıslo zarˇ´ızenı´ odpovı´dajı´cı´ch oddı´lu˚m na vasˇem pevne´m disku.
$
P C
MODULY JA´DRA
3.4
3.4
78
Moduly ja´dra
Ja´dro Linuxu (technicky vztato, Linux je pra´veˇ ja´dro) je monoliticke´ a rozsˇirˇitelne´ pomocı´ ´ kolem modulu˚ je tedy rozsˇirˇovat funkcˇnost ja´dra. modulu˚. U Existujı´ ru˚zne´ druhy modulu˚, naprˇ´ıklad ovladacˇe zarˇ´ızenı´, ovladacˇe souborovy´ch syste´mu˚, moduly zajisˇt’ujı´cı´ funkcˇnost sı´teˇ (naprˇ´ıklad ovladacˇe sı´t’ovy´ch protokolu˚), firewall, moduly pro sledova´nı´ hardwaru vcˇetneˇ stavu baterie nebo teploty procesoru.
P
Moduly jsou ulozˇeny v souborech s prˇ´ıponou KO (kernel object). Obvykle jsou ulozˇeny v adresa´rˇi /lib/modules/...kernel/, kde najdeme podadresa´rˇe nazvane´ podle typu˚ modulu˚ (fs, net, crypto, apod.), ve ktery´ch jizˇ jsou soubory s prˇ´ıponou KO. Moduly lze do ja´dra zava´deˇt za beˇhu, obvykle nenı´ trˇeba restartovat syste´m. Pokud je vsˇak modul sˇpatneˇ napsany´, mu˚zˇe se sta´t, zˇe prˇi vy´skytu chybne´ho cˇi podezrˇele´ho chova´nı´ bude nastaven neˇktery´ z tained prˇ´ıznaku˚, cozˇ pra´veˇ znamena´ proble´m v ja´drˇe, a jediny´ zpu˚sob, jak se teˇchto prˇ´ıznaku˚ zbavit, je restart. Neˇktere´ z tained prˇ´ıznaku˚ jsou va´zˇne´ (naprˇ´ıklad „hardwarova´ chyba pameˇti“), jine´ se moc nerˇesˇ´ı (naprˇ´ıklad „nacˇten modul s nevyhovujı´cı´ licencı´“, jako je proprieta´lnı´ nebo neuvedena´). Pro pra´ci s moduly ja´dra mu˚zˇeme vyuzˇ´ıt naprˇ´ıklad tyto prˇ´ıkazy: /sbin/lsmod
$
(list modules) vypı´sˇe seznam modulu˚, ktere´ jsou pra´veˇ zavedeny v ja´drˇe, ke kazˇde´mu take´ jeho velikost a ky´m je pouzˇ´ıva´n (zde zjistı´me take´ za´vislosti modulu˚), tento program jednodusˇe nacˇte a zforma´tuje u´daje uvedene´ v souboru /proc/modules, tedy alternativneˇ mu˚zˇeme pouzˇ´ıt prˇ´ıkaz cat /proc/modules /sbin/modprobe
slouzˇ´ı k zava´deˇnı´ modulu˚ do ja´dra nebo jejich odstranˇova´nı´, take´ zjisˇt’uje za´vislosti mezi moduly a prˇi zavedenı´ kazˇde´ho modulu zavede i moduly, na ktery´ch je za´visly´ /sbin/modprobe eth0 zavede do ja´dra modul eth0 /sbin/modprobe -r fuse odstranı´ z ja´dra zadany´ modul a vsˇechny moduly,
ktere´ ho pouzˇ´ıvajı´ (pokud to jde; kdyby neˇktery´ z modulu˚ byl pouzˇ´ıva´n jaky´mkoliv procesem, odstraneˇnı´ by nemohlo probeˇhnout) /sbin/modprobe -l nfs* vypı´sˇe vsˇechny existujı´cı´ moduly (prˇesneˇji jejich soubory) vyhovujı´cı´ zadane´ masce /sbin/modprobe -l | grep bluetooth pokud se hledany´ rˇeteˇzec nenacha´zı´ prˇ´ımo v na´zvu modulu, ale naprˇ´ıklad v na´zvu adresa´rˇe, ve ktere´m je soubor modulu ulozˇen, pouzˇijeme pro vyhleda´va´nı´ radeˇji grep ´ koly U 1. Zjisteˇte, ktere´ moduly jsou pra´veˇ nacˇteny v ja´drˇe. 2. Vypisˇte seznam souboru˚ modulu˚ ja´dra, ktere´ ve sve´m na´zvu obsahujı´ rˇeteˇzec „ipv4“ (tento rˇeteˇzec mu˚zˇe by´t z obou stran obklopen jaky´mikoliv znaky).
C
3.5
OPERACˇNI´ PAMEˇTˇ
79
3. Vypisˇte seznam vsˇech souboru˚ modulu˚ obsahujı´cı´ch rˇeteˇzec irda. 4. Zjisteˇte, ktere´ moduly se vztahujı´ k firewallu netfilter (tento rˇeteˇzec nemusı´ by´t nutneˇ v na´zvu souboru, pravdeˇpodobneˇji jej najdete v na´zvu adresa´rˇe).
3.5
R
Operacˇnı´ pameˇt’
V prˇ´ıpadeˇ operacˇnı´ pameˇti mu˚zˇeme pouzˇ´ıvat tyto prˇ´ıkazy: free
$
zobrazı´ informaci o vyuzˇ´ıva´nı´ operacˇnı´ pameˇti (prˇedevsˇ´ım kolik operacˇnı´ pameˇti je volne´, jak je pouzˇ´ıva´n odkla´dacı´ prostor apod.) pmap PID
vypı´sˇe seznam vsˇech souboru˚, ktere´ ma´ zadany´ proces namapova´ny v pameˇti, take´ u´daje o vyuzˇ´ıva´nı´ pameˇti procesem (kolik ma´ soukrome´ pameˇti pro za´pis a pro cˇtenı´, a kolik sdı´lene´), mezi polozˇkami je take´ pameˇt’za´sobnı´ku (stack) a haldy (heap) Vesˇkere´ u´daje o vyuzˇ´ıva´nı´ operacˇnı´ pameˇti (vı´ce nezˇ prˇ´ıkazem free) zjistı´me ze souboru /proc/meminfo. Neˇktere´ u ´ daje o vyuzˇ´ıva´nı´ pameˇti procesem zı´ska´me take´ prˇ´ıkazem top. Zatı´mco v tradicˇnı´ch unixovy´ch syste´mech se virtua´lnı´ pameˇt’ spravuje pomocı´ odkla´da´nı´ (swapova´nı´, tedy odkla´da´nı´ cele´ho nedeˇlitelne´ho adresove´ho prostoru procesu), v Linuxu je pouzˇ´ıva´no stra´nkova´nı´ (paging, odkla´da´nı´ jednotlivy´ch stra´nek procesu), trˇebazˇe je pro tuto cˇinnost z historicky´ch du˚vodu˚ take´ pouzˇ´ıva´n pojem swap. De´lka stra´nek, na ktere´ je rozdeˇlena virtua´lnı´ pameˇt’, je obvykle 1 kB nebo 4 kB, podle velikosti bloku˚ na disku, kam se pameˇt’odkla´da´. V Linuxu je swapova´nı´ optimalizova´no tak, aby v prˇ´ıpadeˇ nutne´ potrˇeby dalsˇ´ıho volne´ho mı´sta ve fyzicke´ pameˇti byla mensˇ´ı pravdeˇpodobnost, zˇe bude potrˇeba odkla´dat neˇktere´ stra´nky do swapu – stra´nky, ktere´ se nepouzˇ´ıvajı´, i kdyzˇ jsou rezervova´ny, jsou odlozˇeny, aby zbytecˇneˇ nezabı´raly mı´sto ve fyzicke´ pameˇti. Pouzˇ´ıva´ se bud’ swap soubor nebo swap partition (doporucˇuje se spı´sˇe partition), swap partition nema´ zˇa´dny´ souborovy´ syste´m (nelze ji prˇipojit), v souboru fstab ale musı´ by´t uvedena (pokud je pouzˇ´ıva´na, samozrˇejmeˇ) a mı´sto oznacˇenı´ souborove´ho syste´mu je zde rˇeteˇzec swap. Swapovacı´ch souboru˚ i partitions mu˚zˇe by´t pouzˇ´ıva´no i vı´ce (obvykle azˇ 8). Prˇı´klad 3.14 Nove´ swap soubory mu˚zˇeme vytva´rˇet podle potrˇeby za beˇhu syste´mu, vytvorˇ´ıme soubor s urcˇity´mi vlastnostmi (musı´ to by´t soubor bez pra´zdny´ch mı´st s vhodnou de´lkou). dd if=/dev/zero of=/novy_swap bs=4096 count=65536
jeden ze zpu˚sobu˚ vytvorˇenı´ souboru vhodne´ho pro pouzˇitı´ jako swap
3.6
SI´Tˇ
80
mkswap /novy_swap
prˇevedenı´ existujı´cı´ho souboru na swap soubor (na jeho zacˇa´tek se zapı´sˇou potrˇebne´ rˇ´ıdicı´ struktury, prova´dı´ se obvykle jen prˇi instalaci) swapon /novy_swap
zapnutı´ pouzˇ´ıva´nı´ souboru pro swapova´nı´, mu˚zˇe to by´t ktery´koliv soubor, ktery´ byl oznacˇen pomocı´ mkswap Pokud chceme pouzˇ´ıvat swap partition, stacˇ´ı, kdyzˇ je uvedena v souboru fstab s oznacˇenı´m swap (mu˚zˇe jich opeˇt by´t vı´ce nezˇ jedna), zapnutı´ pouzˇ´ıva´nı´ teˇchto oblastı´ pro swap se prova´dı´ take´ prˇ´ıkazem swapon.
Pokud ma´me instalova´no vı´ce operacˇnı´ch syste´mu˚, za jisty´ch okolnostı´ a po provedenı´ neˇktery´ch nastavenı´ mohou sdı´let stejny´ odkla´dacı´ prostor.
3.6
Sı´t’
Prˇi pra´ci se sı´tı´ prˇedevsˇ´ım pouzˇ´ıva´me protokoly ftp, telnet nebo ssh (ostatnı´ jsou pouzˇ´ıva´ny spı´sˇe v graficke´m prostrˇedı´, naprˇ. http). Ke spusˇteˇnı´ teˇchto protokolu˚ obvykle slouzˇ´ı prˇ´ıkazy stejneˇ pojmenovane´. ftp hpoc ˇı ´tac ˇi prˇenos souboru ˚ ; je nutne´ prˇihla´sit se k pocˇ´ıtacˇi, ktery´ zada´va´me (tj. prˇi-
$
hla´sit se). Po prˇihla´sˇenı´ obvykle mu˚zˇeme zobrazit seznam prˇ´ıkazu˚, ktere´ mu˚zˇeme pouzˇ´ıvat, zada´nı´m ?. telnet hpoc ˇı ´tac ˇi prˇ´ıkaz pro vzda´lene´ prˇipojenı´ k UNIXove´mu serveru, na ktere´m ma´me
konto, je vyvola´na prˇihlasˇovacı´ procedura. Pouzˇ´ıva´me vsˇechny prˇ´ıkazy vy´sˇe (i nı´zˇe) uvedene´, jakobychom sedeˇli prˇ´ımo u pocˇ´ıtacˇe, na ktery´ se prˇihlasˇujeme, vcˇetneˇ vyvola´nı´ na´poveˇdy. Pra´ci s telnetem ukoncˇ´ıme kla´vesou q . ssh <poc ˇı ´tac ˇ> podobneˇ jako telnet, ale spojenı´ je sˇifrovane´, proto bezpecˇneˇjsˇ´ı, doporu-
cˇuje se pouzˇ´ıvat mı´sto telnetu. Da´le v UNIXu samozrˇejmeˇ najdeme prostrˇedky pro komunikaci mezi uzˇivateli prˇihla´sˇeny´mi ke stejne´mu UNIXove´mu syste´mu, elektronickou posˇtu, atd. Prˇi spra´veˇ male´ sı´teˇ se mu˚zˇe pouzˇ´ıvat soubor /etc/hosts, ktery´ obsahuje dome´nove´ adresy a aliasy pro urcˇite´ IP adresy v male´ sı´ti, je zde take´ naprˇ´ıklad rˇa´dek 127.0.0.1
localhost
Tento soubor je pouzˇ´ıva´n protokolem IPv4 iIPv6, takzˇe na syste´mu podporujı´cı´m oba protokoly zde budou i rˇa´dky pro protokol IPv6, naprˇ´ıklad ::1 fe00::0
localhost ipv6-localhost ipv6-loopback ipv6-localnet
$
3.6
SI´Tˇ
81
ff00::0 ff02::1 ff02::2 ff02::3
ipv6-mcastprefix ipv6-allnodes ipv6-allrouters ipv6-allhosts
Z nejdu˚lezˇiteˇjsˇ´ıch prˇ´ıkazu˚ pro pra´ci se sı´tı´: ping [-c n] [-R] poc ˇı ´tac ˇ
$
zjisˇteˇnı´ dostupnosti a odezvy urcˇite´ IP nebo dome´nove´ adresy. Funguje prakticky stejneˇ jako tento prˇ´ıkaz ve Windows. Odesı´la´ cı´love´mu pocˇ´ıtacˇi testovacı´ zpra´vy ICMP request (kazˇdou sekundu) a cˇeka´ na odezvu. Prˇ´ıkaz pracuje interaktivneˇ, jeho cˇinnost prˇerusˇ´ıme naprˇ´ıklad stiskem kla´ves Ctrl+C , pak vypı´sˇe souhrnnou statistiku (kolik paketu˚ bylo odesla´no, prˇijato, podı´l ztraceny´ch, da´le odezvu cı´love´ho pocˇ´ıtacˇe – nejrychlejsˇ´ı, pru˚meˇr a nejpomalejsˇ´ı odpoveˇd’, strˇednı´ odchylka). Cı´lovy´ pocˇ´ıtacˇ zada´va´me bud’ jeho IP adresou, nebo jeho URL (tj. www.xxx.zz). Prˇepı´nacˇ -c urcˇuje, kolik paketu˚ ma´ by´t odesla´no, prˇepı´nacˇ -R zobrazı´ vsˇechny uzly sı´teˇ, prˇes ktere´ vedla komunikace, dalsˇ´ı volby zjistı´me z manua´lovy´ch stra´nek. ifconfig
zjisˇteˇnı´ MAC adresy (to je hardwarova´ adresa sı´t’ove´ karty – adresa na spojove´ vrstveˇ v OSI modelu), a take´ IP adresy pro urcˇite´ rozhranı´, masky sı´teˇ, atd., prˇideˇlenı´ IP adresy urcˇite´mu rozhranı´ (naprˇ´ıklad ethernetove´ karteˇ – jako rozhranı´ pouzˇijeme eth0), je v adresa´rˇi /sbin ifconfig -a zobrazı´ informaci o vsˇech sı´t’ovy´ch rozhranı´ch ifconfig eth0 zobrazı´ informaci o sı´t’ove´m rozhranı´ eth0 (to obvykle by´va´ ether-
netova´ karta), vy´stup mu˚zˇe vypadat takto: eth0
Link encap:Ethernet HWaddr 00:0a:31:8a:75:72 inet addr:172.28.124.128 Bcast:172.28.124.255 Mask:255.255.255.0 inet6 addr: fe52::126a:24af:ff8b:818b/64 Scope:Link UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3612 errors:3558 dropped:0 overruns:0 frame:0 TX packets:2344 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:384534 (375.5 KiB) TX bytes:798863 (780.1 KiB) Interrupt:19 Base address:0x2024
ifconfig eth0 down
„shodı´“ zarˇ´ızenı´ eth0 (zneaktivnı´ tuto kartu)
M
3.6
SI´Tˇ
82
ifconfig eth0 up aktivuje zarˇ´ızenı´ eth0 ifconfig eth0 down hw ether 00:00:00:00:00:02
kromeˇ toho, zˇe zneaktivnı´ zarˇ´ızenı´ eth0, take´ mu prˇirˇadı´ MAC adresu; podprˇ´ıkaz hw ether adresa znamena´, zˇe jde o ethernetovou kartu, ktere´ prˇirˇazujeme danou adresu (prˇed podobny´mi zmeˇnami je vzˇdy nutne´ kartu zneaktivnit) ifconfig eth0 172.119.124.104 netmask 255.255.255.0 up nastavı´ IP adresu a masku podsı´teˇ pro eth0, pak je zaktivnı´ (prˇedpokla´da´me, zˇe prˇedtı´m byla tato karta neaktivnı´)
Tento prˇ´ıkaz ma´ dalsˇ´ı volby, ktery´mi lze naprˇ´ıklad urcˇovat multicast a broadcast adresy, prˇideˇlovat zdroje (I/O pameˇt’, IRQ apod.), nastavovat metriky, atd. netstat
kontroluje konfiguraci a provoz na sı´ti, velmi komplexnı´ na´stroj s ru˚zny´mi prˇepı´nacˇi (pro zobrazenı´ smeˇrovacı´ tabulky, zobrazenı´ spojenı´, atd.) – pokud nepracujeme s prˇ´ıstupovy´mi opra´vneˇnı´mi roota, vypisujı´ se pouze informace o nasˇich vlastnı´ch procesech a jejich spojenı´ch vypı´sˇe vsˇechny nejdu˚lezˇiteˇjsˇ´ı informace (otevrˇene´ sı´t’ove´ porty, vzda´leny´ syste´m, se ktery´m se komunikuje, stav spojenı´ netstat -natp | grep LISTEN zobrazı´ vsˇechny otevrˇene´ porty protokolu TCP (prˇepı´nacˇ -t, pro UDP by byl prˇepı´nacˇ -u), soucˇa´stı´ vy´pisu budou take´ procesy, ktere´ porty otevrˇely (prˇepı´nacˇ -p), filtrujeme pouze naslouchajı´cı´ procesy (cˇekajı´ na prˇ´ıchozı´ spojenı´) netstat -a
Implementace prˇ´ıkazu netstat se lisˇ´ı na ru˚zny´ch unixovy´ch syste´mech, prˇedevsˇ´ım na BSD syste´mech se setka´me s odlisˇny´mi prˇepı´nacˇi nebo mı´rny´mi odlisˇnosti v mnozˇstvı´ vypsany´ch informacı´ (sloupcu˚) u tohoto prˇ´ıkazu. Neˇktere´ podobne´ informace zı´ska´me take´ z vy´stupu prˇ´ıkazu lsof, se ktery´m jsme se sezna´mili jizˇ drˇ´ıve (strana 70). arp
pra´ce s tabulkami ARP (tyto tabulky slouzˇ´ı k rychlejsˇ´ımu prˇekladu mezi IP adresou a hardwarovou – MAC – adresou sı´t’ove´ karty) zobrazı´ ARP tabulku, druhy´ prˇepı´nacˇ znamena´, zˇe vsˇechny adresy se zobrazı´ v cˇ´ıselne´m tvaru (mı´sto dome´novy´ch na´zvu˚) arp -n -i eth1 zobrazı´ ARP tabulku zadane´ho sı´t’ove´ho rozhranı´ (to na´sleduje za prˇepı´nacˇem -i) arp -s 123.123.123.123 -i eth1 prˇida´nı´ za´znamu do ARP tabulky pro kartu eth1 arp -d 123.123.123.123 -i eth1 odebra´nı´ za´znamu z ARP tabulky pro kartu eth1 arp -a -n
3.6
SI´Tˇ
83
arping [pr ˇepı ´nac ˇe] poc ˇı ´tac ˇ
prˇ´ıkaz s podobnou funkcı´ jako ping, ale pouzˇ´ıva´ jiny´ typ paketu˚ (pakety posı´lane´ prˇ´ıkazem ping mohou by´t neˇktery´mi servery a firewally ignorova´ny cˇi zahazova´ny). Mu˚zˇeme pouzˇ´ıvat prˇepı´nacˇ -c a take´ neˇktere´ dalsˇ´ı prˇepı´nacˇe se stejny´m vy´znamem jako u ping, da´le naprˇ. prˇepı´nacˇ -b zpu˚sobı´, zˇe vsˇechny pakety budou zası´la´ny formou broadcast (bez tohoto prˇepı´nacˇe pouze prvnı´ dotaz, ten slouzˇ´ı ke zjisˇteˇnı´, kde hledat uzel sı´teˇ s danou IP adresou). traceroute poc ˇı ´tac ˇ
tento na´stroj slouzˇ´ı k trasova´nı´ (vypsa´nı´ cesty k zadane´mu pocˇ´ıtacˇi). Je obvykle v adresa´rˇi /sbin nebo /usr/sbin. Funguje podobneˇ jako ping -R, ale vy´pis je podrobneˇjsˇ´ı a mozˇnosti prˇ´ıkazu rozsˇirˇujı´ dalsˇ´ı prˇepı´nacˇe (v manua´lovy´ch stra´nka´ch). route
pra´ce se smeˇrovacı´ tabulkou host
tento jednoduchy´ program prˇeva´dı´ IP adresu na DNS a naopak, podle toho, jaky´ parametr zada´me. Ru˚zny´mi parametry mu˚zˇeme rˇ´ıdit dalsˇ´ı zobrazovane´ informace. nslookup
kontrola cˇinnosti DNS serveru (bez parametru˚: vyhleda´ DNS servery pro danou dome´nu, prˇ´ıpadneˇ mu˚zˇeme program spustit v interaktivnı´m rezˇimu (spusˇteˇnı´ bez parametru˚), ve ktere´m zada´va´me prˇ´ıkazy interpretovane´ programem nslookup, na´poveˇda se zobrazı´ prˇ´ıkazem help named
spra´va a prˇ´ıstup k DNS (jmenne´ sluzˇby), program byl pu˚vodneˇ pouzˇ´ıva´n ve veˇtvi BSD, ted’ je na veˇtsˇineˇ unixovy´ch syste´mu˚ vcˇetneˇ Linuxu iptables
konfigurace firewallu netfilter (cozˇ je standardnı´ firewall v Linuxu, podrobneˇji v na´sledujı´cı´ kapitole), existujı´ dalsˇ´ı na´stroje vcˇetneˇ teˇch s graficky´m rozhranı´m, ktere´ zjednodusˇujı´ pra´ci s firewallem Vybavenost unixovy´ch syste´mu˚ na´stroji pro pra´ci se sı´teˇmi je obecneˇ vysoka´, ovsˇem v kazˇde´m unixove´m syste´mu svy´m zpu˚sobem specificka´. Neˇktere´ firmy distribuujı´cı´ unixove´ syste´my prˇida´vajı´ sve´ vlastnı´ typicke´ na´stroje. Odlisˇnosti jsou take´ v souborech a adresa´rˇ´ıch, ktere´ se sı´teˇmi souvisejı´. Veˇtsˇina konfiguracˇnı´ch skriptu˚ obvykle by´va´ v adresa´rˇi /etc/sysconfig/network a jeho podadresa´rˇ´ıch, v neˇktery´ch linuxovy´ch distribucı´ch to je adresa´rˇ /etc/rc.d/rc.inet1 (Slackware), /etc/conf.d/net (Gentoo) nebo /etc/network (Debian). Dynamicke´ (momenta´lnı´) nastavenı´ sı´teˇ obvykle najdeme v podadresa´rˇ´ıch a souborech v syste´mu /proc, naprˇ´ıklad v souborech /proc/net/arp, /etc/networks, /etc/hosts, /etc/ethers.
P
3.6
SI´Tˇ
84
´ koly U 1. Projdeˇte si vsˇechny konfiguracˇnı´ soubory souvisejı´cı´ se sı´teˇmi, ktere´ byly zmı´neˇny v te´to sekci a ktere´ jsou dostupne´ ve vasˇ´ı distribuci.
C
2. Zjisteˇte dostupnost serveru www.google.com. Zjisteˇte cestu prˇes smeˇrovacˇe k tomuto serveru. 3. Zjisteˇte (vypisˇte) informace o sı´t’ovy´ch rozhranı´ch na sve´m pocˇ´ıtacˇi. 4. Projdeˇte si manua´lovou stra´nku prˇ´ıkazu netstat a zjisteˇte nejdu˚lezˇiteˇjsˇ´ı prˇepı´nacˇe. Porovnejte s prˇepı´nacˇi, ktere´ se pouzˇ´ıvajı´ u stejnojmenne´ho prˇ´ıkazu ve Windows.
R
Kapitola
4
Nasazenı´ syste´mu V te´to kapitole se budeme zaby´vat pokrocˇily´mi mechanismy rˇ´ızenı´ prˇ´ıstupu, popisem beˇhu syste´mu vcˇetneˇ jeho startu, na´stroji na logova´nı´ provozu, firewallem, projdeme si instalaci syste´mu a aplikacı´ vcˇetneˇ prˇ´ıkazu˚ pro balı´cˇkovacı´ syste´my, a v neposlednı´ rˇadeˇ se podı´va´me na mozˇnosti zabezpecˇenı´ Linuxu.
4.1 4.1.1
Pokrocˇile´ mechanismy rˇı´zenı´ prˇı´stupu POSIX ACL
V normeˇ POSIX, kterou jizˇ (alesponˇ podle jme´na a urcˇenı´) zna´me z prˇedchozı´ho semestru, jsou definova´ny take´ bezpecˇnostnı´ seznamy rˇ´ızenı´ prˇ´ıstupu, ACL (Access Control List). Samotne´ ACL se ukla´dajı´ jako metadata souborove´ho syste´mu ve formeˇ rozsˇ´ırˇeny´ch atributu˚. Podobneˇ jako u ACL ve Windows nebo v sı´t’ovy´ch zarˇ´ızenı´ch, i zde jde o to pro vyjmenovane´ uzˇivatele nebo cˇleny skupin definovat prˇ´ıstupova´ opra´vneˇnı´ (jde o jemneˇjsˇ´ı rozdeˇlenı´ nezˇ vlastnı´k–skupina–zbytek). Princip prˇ´ıstupovy´ch opra´vneˇnı´ rwx je vpodstateˇ zachova´n, jen ma´me vı´ce mozˇnostı´ pro jejich prˇirˇazova´nı´.
P
Rozlisˇujeme trˇi typy ACL: • ACL pro uzˇivatele, • ACL pro skupiny, • ACL pro ostatnı´ Pro pra´ci s ACL slouzˇ´ı vı´ce ru˚zny´ch prˇ´ıkazu˚. Jejich seznam (resp. seznam souvisejı´cı´ch manua´lovy´ch stra´nek) mu˚zˇeme zı´skat naprˇ´ıklad takto: apropos -s 1 acl ; apropos -s 8 acl
(vypı´sˇeme prˇ´ıkazy, ktere´ v popisu obsahujı´ tuto zkratku, a to pouze z manua´lovy´ch stra´nek v sekcı´ch 1 a 8). 85
4.1
POKROCˇILE´ MECHANISMY RˇI´ZENI´ PRˇI´STUPU
86
Vy´stup mu˚zˇe vypadat takto: aclocal (1) chacl (1) getfacl (1) setfacl (1) smbcacls (1) slapacl (8) tcpdmatch (8) vfs_gpfs (8)
-
manual page for aclocal 1.10.1 change the access control list of a file or a directory get file access control lists set file access control lists Set or get ACLs on an NT file or directory names Check access to a list of attributes tcp wrapper oracle gpfs specific samba extensions like acls and prealloc
Na´s zajı´majı´ prˇedevsˇ´ım prˇ´ıkazy getfacl a setfacl, ktere´ slouzˇ´ı k zobrazenı´ a zmeˇna´m ACL seznamu˚. Existujı´cı´ nastavenı´ mu˚zˇeme take´ exportovat (za´lohovat) do souboru.
M
$
Prˇı´klad 4.1 Mechanismus ACL je transparentnı´, prˇ´ıstupove´ funkce fungujı´ i v prˇ´ıpadeˇ, zˇe nenı´ zapnuty´. Naprˇ´ıklad na syste´mu s nainstalovany´mi (to je obvykle´) a vypnuty´mi ACL (nepouzˇ´ıvany´mi) prˇi zada´nı´ prˇ´ıkazu getfacl ˜/.bashrc
zı´ska´me tento vy´stup: # file: .bashrc # owner: sarka # group: users user::rwgroup::r-other::r--
Pokud je na zadany´ soubor uplatneˇn ACL, naprˇ´ıklad uzˇivateli nadrizeny majı´ by´t explicitneˇ nastavena pra´va rw-, pak by zde byl jeden rˇa´dek navı´c, a to user:nadrizeny:rw-
Tedy forma´t vy´pisu je celkem jednoduchy´. Nejdrˇ´ıv (zakomentovaneˇ) je uveden na´zev souboru cˇi adresa´rˇe, vlastnı´k a skupina, na´sledujı´ rˇa´dky s nastaveny´mi ACL ve formeˇ typACL:jme ´no:opra ´vne ˇnı ´
s tı´m, zˇe pokud jme´no nenı´ uvedeno, jedna´ se o vy´chozı´ nastavenı´ (u typu pro uzˇivatele nastavenı´ pro vlastnı´ka, u typu pro skupinu nastavenı´ pro vy´chozı´ skupinu souboru, u typu „ostatnı´“ pro nevyjmenovany´ zbytek sveˇta).
Prˇı´klad 4.2 Zmeˇnu ACL provedeme takto: setfacl -m u:nadrizeny:rw-,g::rw--,g:apache:rwx,o:--- soubor
M
POKROCˇILE´ MECHANISMY RˇI´ZENI´ PRˇI´STUPU
4.1
87
Jednomu z uzˇivatelu˚ jsme nastavili pra´vo cˇtenı´ a za´pisu, skupineˇ souboru takte´zˇ, skupineˇ vytvorˇene´ pro webovy´ server apache jsme povolili vsˇe (pozor, aby to bylo opravdu nutne´) a zbytku sveˇta jsme vsˇe zaka´zali. Vsˇimneˇte si, zˇe v poslednı´ cˇa´sti nastavenı´ ACL (pro zbytek sveˇta) nejsou dveˇ dvojtecˇky, ale jen jedna. To je zcela vporˇa´dku, u „ostatnı´ch“ se ani nepocˇ´ıta´ s mozˇnostı´ zada´vat neˇcˇ´ı jme´no.
Lze definovat take´ masku, ktera´ naprˇ´ıklad snı´zˇ´ı vsˇechna opra´vneˇnı´, ktera´ byla explicitneˇ nadefinova´na. ´ koly U V manua´lovy´ch stra´nka´ch zjisteˇte, jak lze prˇi nastavova´nı´ ACL neˇktere´ho adresa´rˇe pouzˇ´ıt rekurzi.
4.1.2
C
Atributy
Atributy v souborovy´ch syste´mech. Neˇktere´ souborove´ syste´my v Linuxu dnes podporujı´ atributy. Jedna´ se prˇedevsˇ´ım o souborove´ syste´my ext2 a ext3, ale podporu atributu˚ (trochu jinak pojaty´ch) najdeme take´ naprˇ´ıklad u XFS. Atributu˚ je celkem dost (a rozhodneˇ nemajı´ nic spolecˇne´ho s tı´m, co zna´me jako atributy u souborovy´ch syste´mu˚ pro Windows). Kromeˇ jine´ho jsou uzˇitecˇne´ naprˇ´ıklad i soubor nelze modifikovat, smazat ani prˇejmenovat, ani na neˇj nelze vytvorˇit odkaz a soubor lze otevrˇ´ıt pouze v rezˇimu append (tj. mu ˚ zˇeme jen prˇida´vat data na konec, ale
ne modifikovat pu˚vodnı´ obsah), hodı´ se naprˇ´ıklad u du˚lezˇity´ch LOG souboru˚ S (velke´ S) po provedenı´ jaky´chkoliv zmeˇn dojde k okamzˇite´ synchronizaci, tj. data jsou
okamzˇiteˇ zapisova´na na disk I (velke´ I) je nastavova´n automaticky u vsˇech adresa´rˇu ˚ , ktere´ byly indexova´ny pro
vyhleda´va´nı´ A znamena´, zˇe u souboru nebude prˇi prˇ´ıstupu k neˇmu aktualizova´na hodnota atime
(access time), cozˇ u cˇasto otevı´rany´ch souboru˚ mu˚zˇe urychlit pra´ci s nimi s (male´ s) je nastaven u souboru ˚ , jejichzˇ smaza´nı´ ma´ by´t „du˚kladne´“, bohuzˇel imple-
mentace tohoto atributu je odlisˇna´ v ru˚zny´ch distribucı´ch a nemusı´ by´t zcela bezpecˇna´ (naprˇ´ıklad obsah souboru mu˚zˇe by´t prˇi maza´nı´ prˇepsa´n nulami, na´hodny´mi hodnotami, a nebo v nejhorsˇ´ım prˇ´ıpadeˇ nemusı´ by´t na neˇj vu˚bec bra´n zrˇetel)
P
POKROCˇILE´ MECHANISMY RˇI´ZENI´ PRˇI´STUPU
4.1
88
S atributy pracujeme pomocı´ teˇchto prˇ´ıkazu˚: lsattr
$
vypı´sˇe nastavene´ atributy pro zadany´ soubor nebo vı´ce souboru˚ (na´zvy souboru˚ pouzˇijeme jako parametry prˇ´ıkazu), seznam souboru˚ (cˇi adresa´rˇu˚) mu˚zˇeme tomuto prˇ´ıkazu prˇedat i prˇes rouru (naprˇ´ıklad ls -a | lsattr) chattr
slouzˇ´ı ke zmeˇneˇ atributu˚ souboru (neˇktere´ atributy nelze meˇnit, naprˇ´ıklad atribut o indexaci), jako parametr pı´sˇeme na´zev souboru, jehozˇ atributy chceme nastavovat, da´le atribut a prˇ´ıpadneˇ dalsˇ´ı volby (naprˇ´ıklad pro rekurzivnı´ nastavenı´ atributu˚) chattr +s soubor.txt nastavenı´ atributu „s“ pro zadany´ soubor, po zada´nı´ prˇ´ıkazu lsattr soubor.txt zı´ska´me tento vy´stup: s-------------- soubor.txt chattr -d souborbezzalohy.sh takto odebı´ra´me atribut (nastaveny´ atribut „d“
znamena´, zˇe soubor nebude automaticky za´lohova´n, tedy odstraneˇnı´m atributu jsme zajistili, zˇe soubor bude za´lohova´n, pokud je to nastaveno pro dany´ oddı´l) Rozsˇı´rˇene´ (extended) atributy. Mechanismus rozsˇ´ırˇeny´ch atributu˚ umozˇnˇuje definovat vlastnı´ na´zvy atributu˚ (a samozrˇejmeˇ i jejich hodnoty). Nejsme tedy odka´za´ni jen na omezenou mnozˇinu atributu˚ souvisejı´cı´ch se souborovy´m syste´mem. Rozsˇ´ırˇene´ atributy jsou pouzˇ´ıva´ny prˇedevsˇ´ım v souvislosti se zvy´sˇenı´m zabezpecˇenı´, setka´me se s nimi naprˇ´ıklad v modulu SELinux a na nich je take´ zalozˇen mechanismus POSIX ACL.
P
Pro pra´ci s rozsˇ´ırˇeny´mi atributy slouzˇ´ı prˇ´ıkazy getfattr a setfattr.
4.1.3
PAM
Syste´m PAM (Pluggable Authentication Modules) je mechanismus rozsˇirˇujı´cı´ch bezpecˇnostnı´ch modulu˚ pouzˇ´ıvany´ na Linuxu, ve FreeBSD a v Solarisu. Pomocı´ PAM lze naprˇ´ıklad povolovat prˇihla´sˇenı´ jen v urcˇity´ cˇas a pouze z urcˇite´ho mı´sta (termina´lu), stanovit limity na prostrˇedky (pocˇty spusˇteˇny´ch procesu˚ na relaci, spotrˇebu pameˇti, apod., takto mu˚zˇeme do urcˇite´ mı´ry zabra´nit u´toku˚m typu DoS), volit ru˚zne´ metody sˇifrova´nı´ hesel, atd. Je to syste´m zalozˇeny´ na za´sobnı´ku s moduly (pam_stack) s tı´m, zˇe prˇi autentizaci uzˇivatele je za´sobnı´k procha´zen shora dolu˚ a kazˇdy´m modulem musı´ „projı´t“, tedy kazˇdy´ modul v za´sobnı´ku musı´ da´t souhlas s autentizacı´. PAM vyuzˇ´ıvajı´ ru˚zne´ sluzˇby, ke ktery´m se autentizujı´ uzˇivatele´ (kromeˇ jine´ho take´ sluzˇba prˇihlasˇova´nı´ uzˇivatele do syste´mu nebo neˇktere´ de´mony pro prˇ´ıstup ke sve´ konfiguraci). Pokud sluzˇba chce vyuzˇ´ıvat PAM, vytvorˇ´ı si vlastnı´ za´sobnı´k modulu˚, ktery´ specifikuje v souboru v adresa´rˇi /etc/pam.d. Tedy celkoveˇ je trˇeba vytvorˇit v tomto adresa´rˇi vlastnı´ soubor a v neˇm specifikovat svu˚j za´sobnı´k. Pokud sluzˇba nechce vytva´rˇet vlastnı´ soubor, mu˚zˇe pouzˇ´ıt vy´chozı´ /etc/pam.d/other.
P
4.1
POKROCˇILE´ MECHANISMY RˇI´ZENI´ PRˇI´STUPU
89
Svu˚j za´sobnı´k si sluzˇba mu˚zˇe vytva´rˇet z modulu˚ ulozˇeny´ch v souborech, ktere´ se obvykle jmenujı´ stejneˇ a majı´ prˇ´ıponu .SO). Modulu˚ je celkem hodneˇ, naprˇ´ıklad: • pam_access – lze omezit mı´sta, odkud se uzˇivatel (nebo skupina uzˇivatelu˚) mu˚zˇe prˇihlasˇovat (platı´ i pro vzda´lena´ prˇihla´sˇenı´, lze zadat take´ IP adresy) • pam_time – lze omezit cˇas prˇihlasˇova´nı´ uzˇivatelu˚ • pam_securetty – omezenı´ mozˇnosti prˇihla´sˇenı´ uzˇivatele root ze specifikovany´ch zarˇ´ızenı´ (definujeme „bezpecˇne´“ termina´ly pro prˇihla´sˇenı´ roota) • pam_cracklib – kontrola hesel, zda nejsou snadno prolomitelna´ tzv. slovnı´kovy´m u´tokem • pam_pwhistory – ukla´da´ se historie hesel, cˇ´ımzˇ se da´ zabra´nit, aby si uzˇivatele´ (nucenı´ si obcˇas meˇnit heslo) naprˇ´ıklad nevolili cyklicky strˇ´ıdaveˇ pa´r hesel • pam_tally – tento modul sleduje mnozˇstvı´ neu´speˇsˇny´ch prˇihla´sˇenı´, ktera´ na´sledujı´ prˇ´ımo za sebou; stanovı´me hranici (naprˇ´ıklad 3) a po prˇekrocˇenı´ te´to hranice lze usoudit, zˇe jde o slovnı´kovy´ u´tok na heslo, tedy zablokujeme u´cˇet • pam_userdb – prˇi autentizaci se pouzˇ´ıva´ databa´ze Berkeley DB database (je indexova´na podle prˇihlasˇovacı´ho jme´na, ke kazˇde´mu je ulozˇeno heslo) Seznam modulu˚ zı´ska´me naprˇ´ıklad z manua´lovy´ch stra´nek, mu˚zˇeme zadat apropos -s 8 pam
Kazˇdy´ PAM modul musı´ by´t neˇjak nakonfigurova´n. Konfigurace je obvykle ulozˇena v souborech /etc/security/na ´zev.conf, naprˇ´ıklad konfigurace modulu pam_access je v souboru /etc/security/access.conf. Tyto soubory jsou obvykle dobrˇe okomentova´ny, tedy pokud chceme konfiguraci zmeˇnit, obvykle neby´va´ proble´m. Prˇı´klad 4.3 Konkre´tnı´ konfigurace ale mu˚zˇe by´t uvedena take´ prˇ´ımo u na´zvu modulu. Naprˇ´ıklad do souboru /etc/pam.d/login prˇida´me rˇa´dek account
required
/lib/security/pam_tally.so deny=3 no_magic_root
To znamena´, zˇe po trˇech selha´nı´ch prˇihla´sˇenı´ (deny=3) bude u´cˇet zablokova´n, a platı´ to i pro prˇihlasˇova´nı´ roota. Existujı´ take´ dalsˇ´ı parametry, ktere´ bychom zjistili v manua´love´ stra´nce (man pam_tally, naprˇ´ıklad doba, po kterou ma´ by´t u´cˇet zamknut).
´ koly U 1. Podle na´vodu v textu vypisˇte seznam PAM modulu˚. 2. Da´le se podı´vejte do adresa´rˇe /etc/pam.d a vypisˇte si obsah neˇktery´ch souboru˚, ktere´ v neˇm najdete.
C
POKROCˇILE´ MECHANISMY RˇI´ZENI´ PRˇI´STUPU
4.1
4.1.4
90
Capabilities (kvalifikace)
Capabilities (kvalifikace, take´ schopnosti) prˇedstavujı´ nı´zkou´rovnˇovy´ mechanismus (na u´rovni ja´dra) rˇ´ızenı´ prˇ´ıstupu. Mu˚zˇeme je cha´pat jako nı´zkou´rovnˇove´ ACL stanovene´ pro urcˇite´ typy operacı´ (ne pro objekty). Konkre´tnı´mu uzˇivateli lze prˇirˇadit nebo odebrat urcˇite´ opra´vneˇnı´ k prova´deˇnı´ stanovene´ cˇinnosti. Neˇktere´ z nejdu˚lezˇiteˇjsˇ´ıch kvalifikacı´: pra´vo zmeˇnit vlastnı´ka souboru
CAP_CHOWN CAP_KILL
pra´vo zası´lat signa´ly cizı´m procesu˚m
CAP_SETPCAP
pra´vo prˇena´sˇet kvalifikace na jiny´ proces (standardneˇ majı´ pouze vla´kna
ja´dra) CAP_LINUX_IMMUTABLE pra´vo nastavovat neˇktere´ vlastnosti, naprˇ´ıklad nastavovat cˇi rusˇit atribut „a“ (soubor lze otevrˇ´ıt pouze v rezˇimu append), je to jedna z ma´la mozˇnostı´
jak ochra´nit nastavenı´ atributu˚ CAP_SYS_RAWIO
tato kvalifikace umozˇnˇuje prova´deˇt nı´zkou´rovnˇove´ I/O operace se za-
rˇ´ızenı´mi Pro pra´ci s capabilities existujı´ funkce, ale lze take´ nainstalovat balı´cˇek s programem lcap. Capabilities jsou sice funkcˇnı´, ale problematicky´ mechanismus (prˇedevsˇ´ım proto, zˇe procesy v uzˇivatelske´m prostoru nemohou sve´ kvalifikace volneˇ prˇeda´vat a deˇdit).
4.1.5
Chra´neˇne´ prostrˇedı´ pro beˇh procesu
Neˇkdy je vhodne´ z bezpecˇnostnı´ch du˚vodu˚ omezit prostrˇedı´, ve ktere´m dany´ proces beˇzˇ´ı. Pod pojmem prostrˇedı´ se zde prˇedevsˇ´ım myslı´ dostupnost neˇktery´ch „citliveˇjsˇ´ıch“ souboru˚ a adresa´rˇu˚. Toto upravene´ prostrˇedı´ se nazy´va´ chroot (changed root). Jak vı´me, korˇenovy´m adresa´rˇem je root, oznacˇovany´ symbolem „/“. Tento adresa´rˇ vidı´ jako korˇenovy´ veˇtsˇina procesu˚. Je vsˇak mozˇne´ vytvorˇit novy´ adresa´rˇ neˇkde ve strukturˇe adresa´rˇu˚, nakopı´rovat do neˇj potrˇebne´ soubory a adresa´rˇe (jen v nejnutneˇjsˇ´ı mı´rˇe) a sdeˇlit spousˇteˇne´mu procesu, zˇe tento vytvorˇeny´ adresa´rˇ je root a tam ma´ take´ hledat vsˇe, co bude potrˇebovat. Skutecˇny´ root je pro tento proces neviditelny´, vidı´ pouze ten svu˚j, virtua´lnı´. Prˇi vytvorˇenı´ a zprovozneˇnı´ chroot prostrˇedı´ potrˇebujeme tyto prˇ´ıkazy: mkdir
je trˇeba vytvorˇit adresa´rˇ, ktery´ bude pro na´sˇ proces viditelny´ jako root cp
do tohoto adresa´rˇe musı´me zkopı´rovat soubory a adresa´rˇe, ktere´ proces potrˇebuje ke sve´mu beˇhu, protozˇe jinak by se k nim nedostal chroot
tı´mto prˇ´ıkazem spustı´me proces uvnitrˇ nasˇeho chra´neˇne´ho prostrˇedı´
P $
BEˇH SYSTE´MU
4.2
91
spusˇteˇnı´ programu v chra´neˇne´m prostrˇedı´, adresa´rˇ musı´ by´t prˇedem vytvorˇen a do neˇj take´ zkopı´rova´n bina´rnı´ soubor s programem, jsou nutna´ vysoka´ prˇ´ıstupova´ opra´vneˇnı´ (tj. naprˇ´ıklad prˇedrˇadı´me prˇ´ıkaz sudo)
chroot /chranenyadresar program
ldd
tento prˇ´ıkaz na´m pomu˚zˇe zjistit knihovny, ktere´ zadany´ proces potrˇebuje ke sve´mu beˇhu vypı´sˇe se seznam knihoven, ktere´ se dynamicky linkujı´ prˇi spusˇteˇnı´ programu /bin/bash (dosadı´me svu˚j program, ktery´ chceme spousˇteˇt v chra´neˇne´m prostrˇedı´), vypsane´ knihovny musı´me zkopı´rovat do adresa´rˇe pro chra´neˇne´ prostrˇedı´ se zachova´nı´m adresa´rˇove´ struktury (naprˇ´ıklad zrˇejmeˇ bude nutne´ vytvorˇit podadresa´rˇ lib pro knihovny)
ldd /bin/bash
Chra´neˇne´ prostrˇedı´ chroot nenı´ samospasitelne´. Existujı´ zpu˚soby, jak se proces uzavrˇeny´ v chroot prostrˇedı´ mu˚zˇe dostat ven, naprˇ´ıklad zneuzˇitı´m prˇ´ıkazu˚ mount nebo mknod (proces by mohl odpojit a znovu prˇipojit souborovy´ syste´m, cˇ´ımzˇ by zrusˇil izolaci, druhy´m prˇ´ıkazem by mohl vytvorˇit vlastnı´ specia´lnı´ soubor zarˇ´ızenı´ s prˇ´ımy´m prˇ´ıstupem do pameˇti, cˇ´ımzˇ by zase zı´skal prˇ´ılezˇitost zrusˇit svou izolaci). Tyto proble´my se dajı´ cˇa´stecˇneˇ rˇesˇit co nejveˇtsˇ´ım omezenı´m opra´vneˇnı´ a prˇ´ıpadneˇ vytvorˇenı´m chra´neˇne´ho prostrˇedı´ na oddı´lu prˇipojene´m s takovy´mi volbami jako je naprˇ´ıklad nemozˇnost interpretovat specia´lnı´ soubory zarˇ´ızenı´ a prˇipojenı´ pouze pro cˇtenı´.
4.2 4.2.1
Beˇh syste´mu Inicializace syste´mu a proces init
Vı´me, zˇe prˇed startem syste´mu je spusˇteˇn zavadacˇ (u Linuxu obvykle Grub nebo LILO). Tento zavadeˇcˇ nejdrˇ´ıv nabı´dne mozˇnost spusˇteˇnı´ nainstalovany´ch operacˇnı´ch syste´mu˚ nebo program na kontrolu pameˇt’ovy´ch modulu˚. Prˇedpokla´dejme, zˇe jsme vybrali neˇktery´ Linux. Zava´deˇnı´ syste´mu probı´ha´ takto: 1. Ja´dro je standardneˇ komprimova´no, tedy je nutne´ ho rozbalit, zave´st do pameˇti a zkontrolovat jeho integritu. Take´ se na zacˇa´tku zava´dı´ pocˇa´tecˇnı´ RAMdisk (initrd). 2. V ra´mci prˇ´ıpravy inicializace ja´dra je trˇeba vytvorˇit tabulku stra´nek pameˇti (protozˇe take´ ja´dro bude potrˇebovat pameˇt’) a detekovat nejdu˚lezˇiteˇjsˇ´ı hardware (prˇedevsˇ´ım procesor). 3. Inicializace ja´dra znamena´ rea´lne´ spusˇteˇnı´ cele´ho ja´dra. Zahrnuje vytvorˇenı´ potrˇebny´ch datovy´ch struktur pro spra´vu procesu˚, pameˇtı´ apod., nastavenı´ obsluhy prˇerusˇenı´, inicializaci ovladacˇu˚, ktere´ jsou zakompilova´ny do ja´dra (neˇktere´ musejı´ by´t zakompilova´ny, aby vu˚bec ja´dro mohlo fungovat, naprˇ´ıklad ovladacˇe disku˚), detekci
P
BEˇH SYSTE´MU
4.2
92
zarˇ´ızenı´. Pokud je nastaveno automaticke´ zava´deˇnı´ modulu˚ ja´dra, provede se take´ nynı´. 4. Vytvorˇ´ı se prvnı´ „opravdove´“ vy´pocˇetnı´ vla´kno, cozˇ je proces /sbin/init. Proces init rˇ´ıdı´ vesˇkere´ dalsˇ´ı operace v syste´mu vcˇetneˇ zbytku startu syste´mu, a je take´ ´ kolem tohoto procesu je take´ korektnı´ ukoncˇenı´ rodicˇem vsˇech ostatnı´ch procesu˚. U syste´mu. 5. Proces init rˇ´ıdı´ zbytek zava´deˇnı´ syste´mu, a to pomocı´ u´rovnı´ beˇhu (viz da´le). Prova´dı´ inicializaci uzˇivatelske´ cˇa´sti syste´mu. Jsou prˇipojeny souborove´ syste´my, aktivova´ny bezpecˇnostnı´ technologie, sı´t’ova´ rozhranı´, spusˇteˇny de´mony, nastaveny a nastartova´ny konzoly, a nakonec take´ na jedne´ z konzol (obvykle sedme´) graficke´ prostrˇedı´.
4.2.2
´ rovneˇ beˇhu U
Unixove´ syste´my ve standardu System V prˇejı´majı´ u´rovneˇ beˇhu (v BSD se nepouzˇ´ıvajı´). ´ rovenˇ beˇhu je stav procesu init. Podle toho, ktera´ u´rovenˇ beˇhu je pouzˇita, se urcˇuje, U ktere´ cˇa´sti syste´mu majı´ by´t spusˇteˇny. 0 1 2–5 6
Zastavenı´ syste´mu (syste´m nebeˇzˇ´ı) Jednouzˇivatelsky´ rezˇim Uzˇivatelske´ rezˇimy (beˇzˇny´ provoz) Znovuzavedenı´ syste´mu (reboot)
Tabulka 4.1: Obvykle´ u´rovneˇ beˇhu syste´mu Jednouzˇivatelsky´ rezˇim je pouzˇ´ıva´n pro administraci syste´mu, kdyzˇ je potrˇeba, aby se rootovi v syste´mu „nemotali“ dalsˇ´ı uzˇivatele´, zvla´sˇteˇ tehdy, kdyzˇ potrˇebuje, aby v neˇktere´m souborove´m syste´mu nebyly zˇa´dne´ soubory otevrˇene´ (naprˇ´ıklad prˇi za´lohova´nı´ nebo kontrole konzistence souborove´ho syste´mu). Pro beˇzˇny´ provoz se pouzˇ´ıvajı´ uzˇivatelske´ rezˇimy, kazˇdy´ unixovy´ syste´m ma´ pro tento u´cˇel stanovenu vy´chozı´ volbu (by´va´ to veˇtsˇinou 3, 4 nebo 5). Vy´chozı´ u´rovenˇ beˇhu, ktera´ je pouzˇita prˇi zavedenı´ syste´mu, je urcˇena v souboru /etc/inittab. Jinou u ´ rovenˇ mu˚zˇeme nastavit naprˇ´ıklad prˇi startu syste´mu v zavadeˇcˇi, a to spusˇteˇnı´m ja´dra s parametrem single (pro jednouzˇivatelsky´ rezˇim) nebo emergency (pro za´chranny´ rezˇim), nebo za beˇhu syste´mu prˇ´ıkazem telinit.
Kazˇdy´ syste´m si konkre´tnı´ vy´znam u´rovnı´ 2–5 urcˇuje sa´m, cˇasto by´va´ odlisˇena pra´ce bez graficke´ho rozhranı´ a s grafikou, prˇ´ıpadneˇ se sı´tı´ nebo bez nı´. Naprˇ´ıklad u´rovenˇ 2 by´va´ vı´ceuzˇivatelsky´ rezˇim bez sı´teˇ a bez grafiky, u´rovenˇ 5 je vı´ceuzˇivatelsky´ syste´m se sı´tı´ a grafikou. Prˇi spousˇteˇnı´ syste´mu je nastavena urcˇita´ u´rovenˇ beˇhu a proces init podle cˇ´ısla u´rovneˇ pozna´, co konkre´tneˇ ma´ prove´st. V souboru /etc/inittab je pro kazˇdou u´rovenˇ beˇhu
P
4.3
LOGOVA´NI´ PROVOZU
93
stanoven skript urcˇujı´cı´, co prˇesneˇ se ma´ prove´st, a take´ jsou stanoveny operace, ktere´ se majı´ prove´st prˇi stisknutı´ kla´vesove´ zkratky Ctrl+Alt+Del . Naprˇ´ıklad tam mu˚zˇeme najı´t tyto rˇa´dky: # vy ´chozı ´ ´ uroven ˇ be ˇhu: id:5:initdefault: # pokud nestartujeme do za ´chranne ´ho rez ˇimu provede se na ´sledujı ´cı ´: si::bootwait:/etc/init.d/boot # pro jednotlive ´ ´ urovne ˇ jsou uvedeny skripty, ktere ´ se majı ´ spustit: 10:0:wait:/etc/init.d/rc 0 11:1:wait:/etc/init.d/rc 1 12:2:wait:/etc/init.d/rc 2 13:3:wait:/etc/init.d/rc 3 14:4:wait:/etc/init.d/rc 4 15:5:wait:/etc/init.d/rc 5 16:6:wait:/etc/init.d/rc 6 # co se ma ´ prove ´st v jednouz ˇivatelske ´m rez ˇimu: ls:S:wait:/etc/init.d/rc S ˜˜:S:respawn:/sbin/sulogin # co de ˇlat pr ˇi stisknutı ´ Ctrl+Alt+Del: ca::ctrlaltdel:/sbin/shutdown -r -t 4 now ...
(cely´ soubor je celkem dlouhy´, plny´ komenta´rˇu˚). Tento soubor needitujeme, obvykle neby´va´ du˚vod. Zmeˇny se veˇtsˇinou prova´deˇjı´ spı´sˇe ve skriptech, na ktere´ je zde odkazova´no, jako je soubor /etc/rc.d/rc (jeho prvnı´ parametr by´va´ cˇ´ıslo u´rovneˇ beˇhu) a da´le skripty, ktere´ jsou z neˇj prˇ´ıpadneˇ vola´ny. Momenta´lnı´ u´rovenˇ beˇhu zjistı´me prˇ´ıkazem who -r
Pozna´mka: Pokud chceme restartovat syste´m naprˇ´ıklad beˇhem instalace (tı´m nenı´ mysˇlen zoufaly´ cˇin prˇi zamrznutı´ syste´mu, to se v Linuxu obvykle neprˇihodı´, ale restart z du˚vodu˚ nove´ho nacˇtenı´ vsˇech konfiguracˇnı´ch souboru˚), pouzˇijeme kla´vesovou zkratku Ctrl+Alt+Del . Jedna´ se o „regule´rnı´ restart“, na ktere´m se podı´lı´ operacˇnı´ syste´m, a nebo jinou operaci, podle nastavenı´ procesu init. Technicky jde o posla´nı´ signa´lu SIGINT procesu init. ´ koly U 1. Zjisteˇte, ktera´ je momenta´lnı´ u´rovenˇ beˇhu. 2. Prohle´dneˇte si obsah konfiguracˇnı´ch souboru˚ zde uvedeny´ch (souboru˚ /etc/inittab, /etc/rc.d/...).
M
$
E C
LOGOVA´NI´ PROVOZU
4.3
4.3
94
Logova´nı´ provozu
Syslog je mechanismus logova´nı´ a souvisejı´cı´ch u´loh dostupny´ na kazˇde´m zarˇ´ızenı´, na ktere´m beˇzˇ´ı (te´meˇrˇ) jaky´koliv unixovy´ syste´m vcˇetneˇ Linuxu. Ja´drem mechanismu je de´mon syslogd.
4.3.1
Vstup syslogu
De´mon syslogd cˇte svu˚j vstup ze zarˇ´ızenı´ (socketu) /dev/log. Tento vstup filtruje (vybı´ra´ to, co ho zajı´ma´) podle konfigurace, ktera´ se nacha´zı´ v souboru /etc/syslog.conf (to je tedy jeho konfiguracˇnı´ soubor) a pak podle nastavenı´ ukla´da´ hla´sˇenı´ o takto zjisˇteˇny´ch uda´lostech do jednoho nebo vı´ce LOG souboru˚. Data, ktera´ syslogd prˇijı´ma´, se skla´dajı´ ze trˇ´ı cˇa´stı´: • kategorie urcˇuje typ nebo odesı´latele uda´losti, existujı´ tyto kategorie: – – – – – – – – – – – – –
auth – autentizace uzˇivatelu˚, authpriv – informace o autentizaci urcˇena´ pro administra´tora, cron – zpra´vy od de´mona cron (pla´nova´nı´ procesu˚), daemon – zpra´vy od ru˚zny´ch de´monu˚, kern – zpra´vy od ja´dra (kernel), lpr – zpra´vy od tiskove´ho subsyste´mu, mail – zpra´vy ty´kajı´cı´ se elektronicke´ posˇty, mark – cˇasova´ razı´tka (timestamps), ktere´ se pravidelneˇ zapisujı´ do logu, news – diskusnı´ skupiny, security – tote´zˇ co auth, syslog – vlastnı´ zpra´vy syslogu (i z jine´ho uzlu v sı´ti), user – obvykle zpra´vy od aplikacı´ v uzˇivatelske´m rezˇimu, local0–local7 – pro tyto kategorie lze definovat vlastnı´ vy´znam,
• priorita urcˇuje du˚lezˇitost uda´losti: – – – – – – – –
emerg – syste´m je nepouzˇitelny´ nebo va´zˇneˇ ohrozˇen (emergency), alert – je nutny´ okamzˇity´ za´sah, crit – kriticka´ situace, err – chyba, warning – varova´nı´, notice – norma´lnı´, avsˇak vy´znamna´, zpra´va, info – informativnı´ zpra´va, debug – ladicı´ zpra´va (debugger),
• vlastnı´ text zpra´vy. Tento typ informacı´ tedy syslog zı´ska´.
LOGOVA´NI´ PROVOZU
4.3
4.3.2
95
Filtrova´nı´ vstupu
Jak bylo vy´sˇe uvedeno, ve sve´m konfiguracˇnı´m souboru ma´ urcˇeno, co s takovy´m za´znamem prove´st. V tomto souboru jsou za´znamy ve formeˇ ´l kategorie.priorita TAB cı kategorie.=priorita TAB cı ´l ´l kategorie.!priorita TAB cı kategorie.!=priorita TAB cı ´l
(priorit mu˚zˇe by´t i vı´ce, oddeˇlujı´ se strˇednı´kem, tote´zˇ platı´ i o dvojicı´ch kategorie.priorita). Pokud je prˇed prioritou jen tecˇka, nastavenı´ platı´ pro uvedenou a vsˇechny vysˇsˇ´ı priority. Pokud chceme nastavenı´ omezit jen na zadanou prioritu, prˇida´me prˇed ni „=“. Symbol „!“ znamena´ negaci, tedy pokud je uveden, dana´ priorita (a vsˇechny vysˇsˇ´ı) nebude zahrnuta. Lze kombinovat: „!=“, nebude zahrnuta pouze uvedena´ priorita. Mezi prioritami a cı´lem musı´ by´t vzˇdy alesponˇ jednou stisknuty´ tabula´tor, mezera nestacˇ´ı. Kategorii mu˚zˇeme zadat symbolem *. To znamena´, zˇe se konfigurace ty´ka´ jake´koliv kategorie. Cı´l urcˇuje, kam konkre´tneˇ ma´ by´t uda´lost ozna´mena, logova´na. Mu˚zˇe to by´t bud’ konkre´tnı´ log soubor (vy´chozı´ nebo jaky´koliv jiny´), nebo vy´pis na konzolu cˇi prˇeposla´nı´ na jiny´ pocˇ´ıtacˇ v sı´ti. Pokud chceme, aby byla uda´lost ozna´mena vı´ce cı´lu˚m (naprˇ´ıklad zobrazena urcˇite´mu uzˇivateli a za´rovenˇ ulozˇena do souboru), oddeˇlı´me cı´le cˇa´rkou. Mozˇnosti: • soubor – vy´chozı´ je /var/log/messages, ale mu˚zˇeme si urcˇit na´zvy souboru˚ naprˇ´ıklad pro ru˚zne´ kategorie nebo priority, • @server.firma.cz nebo @IPadresa – uda´lost bude prˇeposla´na, • user1, user2, . . . – uda´lost bude ozna´mena zadane´mu uzˇivateli (to mu˚zˇe by´t root, admin, operator, apod., podle toho, jake´ ma´me vytvorˇene´ uzˇivatele), ale jen tehdy, kdyzˇ je uzˇivatel pra´veˇ prˇihla´sˇen, • * – uda´lost bude ozna´mena vsˇem prˇihla´sˇeny´m uzˇivatelu˚m, • @loghost – mu˚zˇeme pouzˇ´ıt, pokud v souboru /etc/hosts je definova´n cı´l loghost. Lze pouzˇ´ıt take´ prˇesmeˇrova´nı´ do pojmenovane´ roury, ze ktere´ pak mu˚zˇe cˇ´ıst jaky´koliv proces, ktery´ urcˇ´ıme (a pru˚beˇzˇneˇ zpracova´vat ozna´menı´ o uda´lostech), stacˇ´ı uve´st na´zev souboru a prˇed neˇj napsat symbol roury: kern.=err
|/var/log/jadro
Prˇı´klad 4.4 Takto neˇjak mohou vypadat za´znamy v souboru /etc/syslog.conf: mail.*
/var/log/maillog
⇒ Vsˇechny uda´losti z kategorie mail jsou ulozˇeny do souboru /var/log/maillog
4.3
LOGOVA´NI´ PROVOZU
96
security.*;security.!=debug /var/log/secure
⇒ Vsˇechny uda´losti z kategorie security kromeˇ uda´losti s prioritou debug jsou ulozˇeny do souboru /var/log/secure cron.*
/var/log/cron
⇒ Vsˇechny uda´losti z kategorie cron jsou ulozˇeny do souboru /var/log/cron (to znamena´ uda´losti souvisejı´cı´ s pla´novany´m spousˇteˇnı´m procesu˚) kern.debug;auth.notice
/dev/console
⇒ Uda´losti ty´kajı´cı´ se ladeˇnı´ ja´dra a beˇzˇne´ a prˇesto vy´znamne´ uda´losti autentizace jsou vypsa´ny na syste´move´ konzoli authpriv.*
/var/log/secure
⇒ Vsˇechny „citliveˇjsˇ´ı“ uda´losti autentizace jsou ulozˇeny do souboru /var/log/secure lpr.info
/var/log/lpd-info
⇒ Informacˇnı´ zpra´vy a vsˇechny s vysˇsˇ´ı prioritou o uda´lostech z tiskove´ho subsyste´mu se ulozˇ´ı do /var/log/lpd-info *.err
admin,/var/log/errors
⇒ Vsˇechny chybove´ a va´zˇneˇjsˇ´ı zpra´vy jsou okamzˇiteˇ ozna´meny uzˇivateli admin (pokud je prˇihla´sˇen) a za´rovenˇ ulozˇeny do souboru /var/log/errors *.=crit
/var/log/messages,@loghost,root
⇒ Vsˇechny kriticke´ uda´losti jsou ulozˇeny do souboru /var/log/messages, da´le posla´ny na adresu definovanou pod aliasem loghost a za´rovenˇ je okamzˇiteˇ informova´n root, pokud je prˇihla´sˇen *.emerg
*,/var/log/emergency
⇒ O mimorˇa´dneˇ nebezpecˇny´ch uda´lostech jsou informova´ni vsˇichni prˇihla´sˇenı´ uzˇivatele´ a za´rovenˇ je prˇida´n za´znam do souboru /var/log/emergency
Pokud chceme, aby syslog prˇijı´mal zpra´vy z jiny´ch syste´mu˚, musı´me spustit de´mona syslogd s parametrem -d (platı´ v Linuxu): /usr/sbin/syslogd -m 0 -r
Prˇepı´nacˇ -m urcˇuje de´lku intervalu, v jake´m se syslogd ozy´va´, tj. do logu zapisuje, zˇe „zˇije“. Nastavenı´m na 0 toto chova´nı´ zrusˇ´ıme. Parametr -r znamena´ „remote“, syslogd pak nasloucha´ na portu 514 a prˇijı´ma´ vsˇechny UDP pakety. Na FreeBSD je nutne´ pouzˇ´ıt jinou syntaxi: /usr/sbin/syslogd
LOGOVA´NI´ PROVOZU
4.3
97
(bez parametru˚, protozˇe nasloucha´nı´ na portu 514 je zde vy´chozı´ chova´nı´). Na FreeBSD je take´ mozˇne´ urcˇit uzly v sı´ti, jejichzˇ UDP pakety budou prˇijı´ma´ny. Odlisˇnou syntaxi (i od te´to) majı´ syste´my OpenBSD, Solaris a jine´, je tedy trˇeba vzˇdy prostudovat manua´lovou stra´nku: man syslogd
Take´ je mozˇne´, zˇe budeme muset povolit nasloucha´nı´ sluzˇby syslogd na UDP portu. To se provede v /etc/services rˇa´dkem syslog 512/UDP, ale je pravdeˇpodobne´, zˇe tam takovy´ za´znam uzˇ je. Na zarˇ´ızenı´ch, ze ktery´ch jsou UDP pakety prˇijı´ma´ny, je pak nastaveno vy´sˇe popsany´m zpu˚sobem zası´la´nı´ na tento „sbeˇrny´“ pocˇ´ıtacˇ. Pokud syslogd pra´veˇ beˇzˇ´ı a my jsme provedli zmeˇnu jeho konfigurace (v souboru /etc/syslog.conf), musı´me syslogd restartovat, aby zaregistroval zmeˇny ve sve´ konfiguraci.
4.3.3
Vy´stup syslogu
Zatı´m jsme si uka´zali, jake´ u´daje dosta´va´ syslogd na svu˚j vstup, podle cˇeho je filtruje a kam je ukla´da´. Zby´va´ podı´vat se, v jake´m forma´tu. Na vy´stupu je za´znam obsahujı´cı´ • cˇas, kdy k uda´losti dosˇlo, • kategorii (kernel, mail apod.), • text zpra´vy. Soucˇa´stı´ nenı´ priorita, protozˇe ta uzˇ byla uplatneˇna prˇi filtrova´nı´. Mu˚zˇe zde by´t naprˇ´ıklad za´znam: Feb 21 10:00:28 IOL kernel: device eth0 left promiscuous mode
Kdyzˇ syslog nastavujeme, hodı´ se mozˇnost vyzkousˇenı´ jeho funkcˇnosti. K tomu mu˚zˇe slouzˇit na´stroj logger. Naprˇ´ıklad uda´lost kategorie daemon a priority info se zadanou zpra´vou vygenerujeme takto: logger -p daemon.info ”testujeme syslog”
Rucˇnı´ spra´va logu˚ mu˚zˇe by´t celkem na´rocˇna´. Je trˇeba hlı´dat obsah souboru˚ a navı´c sledovat jejich de´lku (vcˇas umazat starsˇ´ı za´znamy), stroj naslouchajı´cı´ na UDP portu by meˇl by´t dostatecˇneˇ chra´neˇn (je zde vysoke´ riziko DoS u´toku˚, tedy firewall je rozhodneˇ na mı´steˇ). S neˇktery´mi u´lohami mohou pomoci prˇ´ıdavne´ na´stroje. Naprˇ´ıklad rotaci logu˚ (vcˇetneˇ oznacˇova´nı´ cˇi odstranˇova´nı´ starsˇ´ıch za´znamu˚) zvla´dne logrotate. Existujı´ take´ propracovaneˇjsˇ´ı verze syslogu, naprˇ´ıklad syslog-ng (umı´ komunikovat i prˇes TCP a zvla´dne take´ regula´rnı´ vy´razy, nejen hveˇzdicˇku, v soucˇasny´ch distribucı´ch je velmi oblı´beny´), nsyslogd (komunikuje prˇes TCP/SSL), Secure Syslog, Modular Syslog a dalsˇ´ı. Volneˇ sˇirˇitelny´ program NTSyslog1 (vlastneˇ sluzˇba, kterou mu˚zˇeme instalovat), umozˇnˇuje pouzˇ´ıvat syslog take´ ve Windows (logy z Windows lze posı´lat na vzda´leny´ syste´m a tam naprˇ´ıklad 1
NTSyslog najdeme na http://ntsyslog.sourceforge.net.
4.4
FIREWALL
98
vyhodnocovat). Na´stroj logwatch2 mu˚zˇeme pouzˇ´ıt k sumarizaci logu˚, prova´dı´ analy´zu logu˚ za stanovene´ obdobı´ a vytva´rˇ´ı souhrnnou zpra´vu. Program swatch3 je uzˇitecˇny´, kdyzˇ naopak potrˇebujeme by´t o urcˇite´ uda´losti informova´ni pokud mozˇno okamzˇiteˇ – detekuje na´mi definovane´ situace a stanoveny´m zpu˚sobem informuje, a protozˇe je psa´n v perlu, je to velmi pruzˇny´ na´stroj vyuzˇ´ıvajı´cı´ regula´rnı´ vy´razy.
4.4
Firewall
V noveˇjsˇ´ıch linuxovy´ch ja´drech (od verze 2.4) najdeme firewall NetFilter, cozˇ je obousmeˇrny´ stavovy´ firewall. Jedna´ se o modul ja´dra, ke ktere´mu se neprˇistupuje prˇ´ımo, ale prˇes obsluzˇny´ program iptables.4
P
Za´kladem je chain, tabulka, obsahujı´cı´ pravidla uplatnˇovana´ na pakety. Standardneˇ jsou definova´ny trˇi chainy, lze doplnit dalsˇ´ı. • Chain INPUT se uplatnı´ na pakety, ktere´ do syste´mu prˇicha´zejı´. • Chain OUTPUT se uplatnı´ na pakety, ktere´ ze syste´mu odcha´zejı´. • Chain FORWARD je urcˇen pro pakety, ktere´ nejsou vytvorˇeny uvnitrˇ syste´mu a ani pro neˇj nejsou urcˇeny, prˇeda´vajı´ se jen mezi rozhranı´mi syste´mu (pru˚chozı´ pakety). To je prˇ´ıpad syste´mu, ktery´ slouzˇ´ı naprˇ´ıklad jako smeˇrovacˇ (provoz smeˇrovany´ z jednoho portu na jiny´). Program iptables umozˇnˇuje pracovat s chainy (vytvorˇit nebo zrusˇit chain, nastavit vy´chozı´ politiku) a s jejich obsahem (prˇida´vat a odstranˇovat pravidla v chainu, vypsat seznam pravidel). Naprˇ´ıklad politiku (tj. hlavnı´ za´sadu) chainu nastavı´me takto: iptables -P FORWARD DROP
(velka´ a mala´ pı´smena jsou na dany´ch pozicı´ch du˚lezˇita´, je to prˇece Linux), cˇ´ımzˇ jsme urcˇili, zˇe pru˚chozı´ pakety, ktere´ neodpovı´dajı´ nastaveny´m pravidlu˚m v chainu FORWARD (cozˇ je chain pro pru˚chozı´ pakety), budou zahozeny. Potom samozrˇejmeˇ je nutne´ v pravidlech povolit takovy´ provoz, ktery´ ma´ by´t povolen. Aby byla konfigurace nejen platna´, ale take´ ulozˇena pro nacˇtenı´ po vypnutı´ a zapnutı´ pocˇ´ıtacˇe, je nutne´ tuto konfiguraci ulozˇit. Tento postup je odlisˇny´ pro ru˚zne´ typy distribucı´, naprˇ´ıklad v distribucı´ch zalozˇeny´ch na RedHat (vcˇetneˇ Mandrivy) je to prˇ´ıkaz /sbin/service iptables save
V distribucı´ch zalozˇeny´ch na Debianu v souboru /etc/default/iptables nastavı´me rˇa´dek enable_iptables_initd=true 2
logwatch zı´ska´me na http://www.logwatch.org. Program swatch (Simple Watch) je dostupny´ na http://swatch.sourceforge.net. 4 Ve starsˇ´ıch ja´drech, se ktery´mi se (doufejme) uzˇ nesetka´me, se pouzˇ´ıval firewall IPChains se stejnojmenny´m obsluzˇny´m programem (ipchains). 3
$
4.5
INSTALACE APLIKACI´
99
cˇ´ımzˇ ulozˇenı´ povolı´me, samotne´ ulozˇenı´ se provede prˇ´ıkazem /etc/init.d/iptables save_active
Nenı´ vzˇdy nutne´ prova´deˇt konfiguraci a jejı´ ulozˇenı´ v textove´m rezˇimu. Existuje dokonce neˇkolik ru˚zny´ch graficky´ch rozhranı´ k programu iptables. V desktopovy´ch distribucı´ch je najdeme celkem beˇzˇneˇ, prˇ´ıpadneˇ je mozˇne´ si neˇktery´ z nich sta´hnout z repozita´rˇe a nainstalovat. V unixovy´ch syste´mech zalozˇeny´ch na BSD (naprˇ´ıklad OpenBSD) se cˇasto setka´me s firewallem PacketFilter (starsˇ´ı byl IPFilter), obsluzˇny´ program je pfctl.
Obra´zek 4.1: Firewall Netfilter V Linuxu se obvykle setka´me take´ s graficky´m rozhranı´m firewallu, naprˇ´ıklad na obra´zku 4.1 je rozhranı´ pro konfiguraci firewallu v SUSE Linuxu.
4.5
Instalace aplikacı´
Aplikace pro Linux jsou obvykle dostupne´ v repozita´rˇ´ıch. Repozita´rˇ je (obvykle hierarchicky) usporˇa´dana´ databa´ze balı´cˇku˚ se softwarem. Mu˚zˇe se nacha´zet na internetu (typicky oficia´lnı´ repozita´rˇe zvolene´ distribuce Linuxu) nebo naprˇ´ıklad na vy´meˇnne´m pameˇt’ove´m me´diu (nebo kdekoliv jinde, kam ma´me prˇ´ıstup). Vy´hodou Linuxu oproti Windows je tedy existence jednoho nebo vı´ce centralizovany´ch u´lozˇisˇt’, ktera´ jsou proveˇrˇena´ a prˇedevsˇ´ım snadno a rychle dostupna´.
O
INSTALACE APLIKACI´
4.5
100
Pro vsˇechny na´stroje pro instalaci balı´cˇku˚ (package) platı´, zˇe je trˇeba mı´t prˇedem urcˇeny repozita´rˇe. Ty jsou automaticky beˇhem instalace nastaveny na instalacˇnı´ me´dium (obvykle DVD, ze ktere´ho instalujeme Linux) a da´le na jeden nebo vı´ce oficia´lnı´ch repozita´rˇu˚ na webu nasˇ´ı linuxove´ distribuce. Z teˇchto repozita´rˇu˚ mu˚zˇeme instalovat novy´ software, ale prˇedevsˇ´ım jsou zde zajisˇt’ova´ny automaticke´ aktualizace.
4.5.1
Bina´rnı´ a zdrojove´ balı´cˇky
Postup instalace se lisˇ´ı podle toho, v jake´ formeˇ jsou instalacˇnı´ soubory. Pokud to jsou bina´rnı´ balı´cˇky (RPM, DEB, apod.), pouzˇijeme prˇ´ıslusˇny´ na´stroj (pro RPM je to program rpm nebo urpmi, pro DEB je to dpkg nebo apt, atd.), ve veˇtsˇineˇ distribucı´ existujı´ graficka´ rozhranı´ k teˇmto programu˚m nebo prˇ´ımo programy prova´deˇjı´cı´ tote´zˇ, ale s grafickou na´stavbou (rpmDrake v Mandrake, xrpm v RedHat, YaST2 v SUSE, . . . ). S neˇktery´mi jsme se sezna´mili v minule´m semestru. Prˇı´klad 4.5 V distribuci s rpm balı´cˇky (tj. v distribucı´ch odvozeny´ch z RedHat): rpm -i balicek.rpm (prˇ´ıpadneˇ dalsˇ´ı parametry, jsou v man rpm, nejcˇasteˇji se pouzˇ´ıva´ -ivh) – instalace zadane´ho (beˇzˇne´ho bina´rnı´ho) rpm balı´cˇku (mu ˚ zˇeme pouzˇ´ıvat i jednoduche´ regula´rnı´ vy´razy, prˇedevsˇ´ım „*“) rpm -e balicek.rpm
odinstalace zadane´ho balı´cˇku
rpm -rebuild balicek.rpm
$
(prˇ´ıpadneˇ dalsˇ´ı parametry) – instalace zdrojove´ho rpm
balı´cˇku rpm -U balicek.rpm
aktualizace programu, pro ktery´ je balı´cˇek vytvorˇen
rpm -i balicek.rpm
zobrazı´ informaci o balı´cˇku
vypı´sˇe se seznam vsˇech nainstalovany´ch balı´cˇku˚ (hodneˇ dlouhy´, doporucˇuje se ho neˇjak filtrovat, naprˇ´ıklad zada´nı´m dalsˇ´ıch nepovinny´ch parametru˚ nebo prˇes grep)
rpm -qa
rpm -l balicek.rpm rpm -f soubor
vypı´sˇe seznam souboru˚, ktere´ jsou v balı´cˇku zahrnuty
zjistı´me, ve ktere´m balı´cˇku se nacha´zı´ zadany´ soubor
Z bezpecˇnostnı´ch du˚vodu˚ je vhodne´ prˇed samotnou instalacı´ alesponˇ zkontrolovat digita´lnı´ podpis a kontrolnı´ soucˇet balı´cˇku (pouzˇije se pouze prˇepı´nacˇ --checksig). Jde o to, aby v balı´cˇku bylo pra´veˇ to, co ocˇeka´va´me a co tam dal autor, a ne trˇeba trojsky´ ku˚nˇ.5 Dalsˇ´ı na´stroj v distribucı´ch odvozeny´ch z RedHatu je urpmi: urpmi balicek.rpm
nainstaluje balı´cˇek
urpme balicek.rpm
odstranı´ balı´cˇek (pozor, zmeˇna v na´zvu prˇ´ıkazu)
5
Trojsky´ ku˚nˇ je program fungujı´cı´ podobneˇ jako virus – program budı´cı´ dojem uzˇitecˇnosti, ale jeho ko´d byl zameˇneˇn za jiny´, poneˇkud me´neˇ „uzˇitecˇny´“.
$
4.5
INSTALACE APLIKACI´
urpmi.update -a
101
aktualizuje zdroje softwaru (repozita´rˇe)
urpmi --update --auto -auto-select
sta´hne a nainstaluje aktualizace softwaru
Mu˚zˇeme se take´ setkat s na´strojem yum (Fedora Core) nebo yast (SUSE).
Prˇı´klad 4.6 V distribucı´ch s deb balı´cˇky (odvozeny´ch od distribuce Debian) se setka´me s na´strojem dpkg a prˇedevsˇ´ım velmi oblı´beny´m apt. Podı´va´me se prˇedevsˇ´ım na druhy´ z teˇchto na´stroju˚. V distribucı´ch odvozeny´ch z Debianu jsou adresy zdroju˚ (tedy repozita´rˇu˚) ulozˇeny v textove´m souboru /etc/apt/sources.list. Pokud chceme prˇidat novy´ repozita´rˇ, mu˚zˇeme to prove´st bud’ pomocı´ prˇ´ıslusˇny´ch na´stroju˚ pro pra´ci s balı´cˇky (vcˇetneˇ graficky´ch) nebo prˇidat na konec tohoto souboru novy´ za´znam. Prˇ´ıkazy pro pra´ci s balı´cˇky a repozita´rˇi: apt-get install balicek.deb
instalace balı´cˇku
pouze simuluje instalaci, takto zjistı´me, jestli by beˇhem instalace nemohl nastat neˇjaky´ proble´m
apt-get -s install balicek.deb apt-get remove balicek.deb apt-get update
odstraneˇnı´ balı´cˇku
update zdroju˚ softwaru (aktualizace souboru /etc/apt/sources.list)
aktualizace nainstalovany´ch balı´cˇku˚ na nejnoveˇjsˇ´ı verze (prˇedem je trˇeba prove´st update prˇedchozı´m uvedeny´m prˇ´ıkazem), prˇepı´nacˇ -u sice nenı´ nutny´, ale doporucˇuje se (budeme informova´ni podrobneˇ o vsˇech balı´cˇcı´ch, ktery´ch se aktualizace ty´ka´, jinak by nebyly vypsa´ny)
apt-get -u upgrade
apt-get -u dist-upgrade
aktualizace cele´ distribuce (vy´znam prˇepı´nacˇe je stejny´ jako
u prˇedchozı´ho prˇ´ıkazu) zkontroluje databa´zi nainstalovany´ch balı´cˇku˚ a zjistı´ prˇ´ıpadne´ nesrovnalosti (posˇkozenou instalaci, proble´my v za´vislostech mezi balı´cˇky apod.), nic neinstaluje, pouze zkontroluje
apt-get check
pokud ma´me v mechanice instalacˇnı´ DVD (nebo CD), tı´mto prˇ´ıkazem bude automaticky prˇida´no ke zdroju˚m do souboru /etc/apt/sources.list
apt-cdrom add
apt-cache search gcompris gcompris
hleda´me na´zvy balı´cˇku˚, ktere´ souvisejı´ s programem
chceme podrobneˇjsˇ´ı informace o balı´cˇku s na´zvem gcompris (zde zada´va´me prˇ´ımo na´zev balı´cˇku, v prˇedchozı´m prˇ´ıkazu sˇlo o vy´raz k vyhleda´va´nı´)
apt-cache show gcompris
apt-cache depends gcompris
zjistı´me za´vislosti zadane´ho balı´cˇku
$
4.5
INSTALACE APLIKACI´
102
Prˇı´klad 4.7 V souboru /etc/apt/sources.list najdeme (kromeˇ komenta´rˇu˚) rˇa´dky ve formeˇ deb uri distribuce komponenty deb-src uri distribuce komponenty
ˇ a´dek obvykle zacˇ´ına´ slovem deb nebo deb-src (podle toho, zda jde o bina´rnı´ nebo zdroR jove´ balı´cˇky), na´sleduje adresa repozita´rˇe (mu˚zˇe to by´t server na internetu nebo trˇeba pameˇt’ove´ me´dium, ze ktere´ho jsme instalovali syste´m), na´zev distribuce (nemusı´ by´t konkre´tnı´ na´zev) a pak blizˇsˇ´ı urcˇenı´ veˇtve v repozita´rˇi (alesponˇ „main“ pro hlavnı´ veˇtev, cˇasto se setka´me se „stable“ nebo „stable/updates“).
Naprˇ´ıklad takto mu˚zˇe vypadat tento soubor v distribuci Debian, verze Etch: # Debian GNU/Linux Stable - security updates deb http://security.debian.org/ stable/updates main contrib non-free deb-src http://security.debian.org/ stable/updates main contrib non-free # Debian GNU/Linux Stable - packages deb ftp://ftp.linux.cz/pub/linux/debian stable main contrib non-free deb-src ftp://ftp.linux.cz/pub/linux/debian stable main contrib non-free deb http://ftp.cz.debian.org/debian/ stable main contrib non-free deb-src http://ftp.cz.debian.org/debian/ stable main contrib non-free #deb http://http.us.debian.org/debian stable main contrib non-free #deb-src http://http.us.debian.org/debian stable main contrib non-free deb ftp://ftp.de.debian.org/debian etch main deb http://http.us.debian.org/debian/ sarge main # Debian GNU/Linux - TeX Live deb http://www.tug.org/texlive/Debian/ deb-src http://www.tug.org/texlive/Debian/ deb http://www.tug.org/texlive/Debian/ deb-src http://www.tug.org/texlive/Debian/
pool/ pool/ updpkg/ updpkg/
# Instalac ˇnı ´ me ´dia (DVD 1-3), vs ˇe je zakomentova ´no: # deb cdrom:[Debian GNU/Linux 4.0 r3 _Etch_ - Official i386 DVD Binary-3 20080217-11:31]/ etch main # deb cdrom:[Debian GNU/Linux 4.0 r3 _Etch_ - Official i386 DVD Binary-1 20080217-11:31]/ etch contrib main # deb cdrom:[Debian GNU/Linux 4.0 r3 _Etch_ - Official i386 DVD Binary-2 20080217-11:31]/ etch main
Tento soubor lze prˇ´ımo editovat (s pra´vy roota), ale jen tehdy, pokud pra´veˇ nebeˇzˇ´ı zˇa´dny´ program pracujı´cı´ s balı´cˇky (naprˇ´ıklad apt-get nebo neˇktery´ z na´stroju˚ s graficky´m rozhranı´m, trˇeba Adept).
M
INSTALACE APLIKACI´
4.5
103
Po kazˇde´ zmeˇneˇ je trˇeba aktualizovat vnitrˇnı´ databa´zi mechanismu apt, naprˇ´ıklad prˇ´ıkazem apt-get update.
Dalsˇ´ı informace najdeme naprˇ´ıklad na • http://www.debian.org/doc/manuals/apt-howto/index.cs.html • http://www.tfug.org/helpdesk/linux/rpm.html ´ koly U Ujasneˇte si, ktery´ typ balı´cˇku˚ pouzˇ´ıva´ vasˇe distribuce. Podle typu balı´cˇkovacı´ho syste´mu vyzkousˇejte alesponˇ prˇ´ıkazy pro zjisˇt’ova´nı´ informacı´ o balı´cˇcı´ch a repozita´rˇ´ıch.
4.5.2
Instalace ze zdrojovy´ch ko´du˚
Protozˇe jsou tyto instalovane´ programy dostupne´ v archivech (gzip, tar, tar.gz, .tgz, .Z apod.), prvnı´m krokem je samozrˇejmeˇ rozbalenı´ archivu do neˇjake´ho vhodne´ho adresa´rˇe. Dalsˇ´ım krokem je hleda´nı´ souboru README mezi rozbaleny´mi soubory a prˇ´ıpadneˇ skriptu Install, v teˇchto souborech by´va´ postup instalace podrobneˇ popsa´n. Je zrˇejme´, zˇe kdyzˇ budeme prˇekla´dat ze zdrojovy´ch ko´du˚, musı´me mı´t nainstalova´n prˇekladacˇ, cozˇ je obvykle gcc. Da´le je potrˇeba upravit konfiguraci instalace (tj. podle nasˇeho syste´mu a prˇ´ıpadneˇ hardwarove´ architektury nastavit parametry prˇekladu), obvykle pomocı´ skriptu Install nebo configure (to je beˇzˇneˇjsˇ´ı). Tento skript pak mu˚zˇe mı´t parametry (ty zjistı´me vy´sˇe popsany´m zpu˚sobem, ze souboru˚ doda´vany´ch se zdrojovy´m ko´dem, jako parametry se pouzˇ´ıvajı´ cˇasto volby, ktere´ majı´ rˇ´ıdit postup instalace – co se ma´ instalovat, co ne, prˇ´ıp. konfigurace po nainstalova´nı´). Abychom zajistili, zˇe se spustı´ skript v pracovnı´m adresa´rˇi a ne jiny´ stejneˇ pojmenovany´ (prˇedpokla´dejme, zˇe pracovnı´m adresa´rˇem je adresa´rˇ se zdrojovy´mi soubory), pouzˇijeme syntaxi ./configure
Pokud se jedna´ o aplikaci vyuzˇ´ıvajı´cı´ graficke´ rozhranı´, bude konfigurace instalace trochu jina´. Mezi zdrojovy´mi soubory mu˚zˇe by´t naprˇ´ıklad skript Imake, pak se pro prˇeklad mı´sto make pouzˇije prˇ´ıkaz xmkmf. Instalace se prova´dı´ obvykle pomocı´ programu make. Tento program pouzˇ´ıva´ skript Makefile, ktery´ spustı´ prˇ´ıslusˇny´ prˇekladacˇ a ze zdrojovy´ch souboru ˚ vytvorˇ´ı bina´rnı´. Neˇkdy je potrˇeba prove´st take´ prˇ´ıkaz make s dalsˇ´ımi parametry, naprˇ´ıklad • make install zkopı´ruje vytvorˇene´ bina´rnı´ soubory na spra´vna´ mı´sta v adresa´rˇove´ strukturˇe,
C
BEZPECˇNOST SYSTE´MU
4.6
104
• make clean odstranı´ nepotrˇebne´ objektove´ soubory, • make -p (prˇed vlastnı´ instalacı´) spustı´ pouze simulaci prˇekladu, na vy´pisech programu mu˚zˇeme sledovat, co vlastneˇ bude provedeno. Prˇı´klad 4.8 Ve veˇtsˇineˇ prˇ´ıpadu˚ stacˇ´ı posloupnost akcı´ (nacha´zı´me se v adresa´rˇi se zdrojovy´mi ko´dy): ./configure make sudo make install
Prˇ´ıkaz make install je nutne´ spustit s vysˇsˇ´ımi prˇ´ıstupovy´mi opra´vneˇnı´mi. Zde jsme pouzˇili prˇ´ıkaz sudo, ale ve skutecˇnosti se samozrˇejmeˇ budeme rˇ´ıdit tı´m, co pouzˇ´ıva´me v nasˇem syste´mu (trˇeba su).
Instalovat mu˚zˇeme bud’ do sdı´leny´ch cˇa´stı´ (adresa´rˇ /usr nebo le´pe /opt), ale pokud k instalovane´ aplikaci ma´ mı´t prˇ´ıstup pouze jeden konkre´tnı´ uzˇivatel, je vhodne´ instalovat do jeho domovske´ho adresa´rˇe (v jeho domovske´m adresa´rˇi vytvorˇ´ıme adresa´rˇ ˜/bin nebo podobneˇ, a tam instalujeme).
4.6
Bezpecˇnost syste´mu
Linux je obecneˇ povazˇova´n za stabilnı´ a bezpecˇny´ syste´m. Neˇkdy se objevı´ bezpecˇnostnı´ mezera, ale narozdı´l od Windows se reakce v podobeˇ za´platy objevuje velmi rychle (cˇasto beˇhem 24 hodin). Pro bezpecˇnost ma´ velky´ vy´znam i to, zˇe uzˇivatele´ (a prˇedevsˇ´ım spra´vci) Linuxu jsou veˇtsˇinou „znalı´ problematiky“ a nezanedba´vajı´ bezpecˇnostnı´ hlediska – pouzˇ´ıvajı´ ru˚zne´ bezpecˇnostnı´ mechanismy, pravidelneˇ zjisˇt’ujı´, zda je trˇeba syste´m aktualizovat, udrzˇujı´ spusˇteˇne´ na´stroje pro zajisˇteˇnı´ bezpecˇnosti na sı´ti (firewall, apod.). Zatı´mco drˇ´ıve se hesla uzˇivatelu˚ ukla´dala spolu s ostatnı´mi informacemi o uzˇivatelı´ch v zasˇifrovane´ podobeˇ (sˇifrovana´ pouze hesla) v souboru /etc/passwd, dnes se prosazuje ukla´da´nı´ hesel do zvla´sˇtnı´ho souboru, /etc/shadow, takova´ „odstı´novana´“ hesla se nazy´vajı´ stı´nova´ hesla (pu˚vodnı´ soubor /etc/passwd uzˇ nenı´ zasˇifrovany´, ale beˇzˇny´ uzˇivatel ho neotevrˇe). Prˇ´ırucˇka spra´vce zabezpecˇenı´ Linuxu je na http://www.securityportal.com/lasg. SELinux je projekt NSA (Na´rodnı´ agentura pro bezpecˇnost USA). Pokud linuxova´ distribuce obsahuje podporu SELinuxu (cozˇ je dnes celkem beˇzˇne´), v ja´drˇe existuje modul, ktery´ kontroluje prˇ´ıstupova´ pra´va ke vsˇem operacı´m v syste´mu u uzˇivatelu˚, procesu˚ a dalsˇ´ıch objektu˚. Omezuje prˇ´ıstupova´ pra´va prˇedevsˇ´ım procesu˚m spusˇteˇny´m ze sı´teˇ. Viry nejsou na Linuxech prˇ´ılisˇ rozsˇ´ırˇene´. Je to z mnoha du˚vodu˚ – „prave´“ viry jsou vlastneˇ u´seky programu, musı´ tedy by´t veˇtsˇinou (ne vzˇdy!) psa´ny pro urcˇity´ operacˇnı´ syste´m,
O
P
4.6
BEZPECˇNOST SYSTE´MU
105
a tı´m je veˇtsˇinou syste´m Windows (unixove´ syste´my jsou porˇa´d jesˇteˇ me´neˇ rozsˇ´ırˇene´ nezˇ Windows, takzˇe efekt by nebyl zase azˇ tak veliky´). Ostatnı´ druhy sˇkodlivy´ch ko´du˚ fungujı´cı´ na trochu jine´m principu (skripty, prˇ´ıpadneˇ viry prˇ´ımo psane´ pro unixove´ syste´my) sice teoreticky majı´ sˇanci, ale hradbou je zase obvykle vysˇsˇ´ı zabezpecˇenost unixovy´ch syste´mu˚, tedy syste´m prˇ´ıstupovy´ch pra´v (beˇzˇny´ uzˇivatel nemu˚zˇe zasahovat do ja´dra ani instalovat a spousˇteˇt programy, ktere´ do doka´zˇou), firewall s routerem a dalsˇ´ı mechanismy, takzˇe sˇkodlivy´ ko´d mu˚zˇe do syste´mu proniknout veˇtsˇinou jen vinou administra´tora, ktery´ zanedbal bezpecˇnostnı´ opatrˇenı´. Obdobne´ mozˇnosti majı´ vlastneˇ i syste´my Windows s ja´drem NT, i kdyzˇ mozˇna´ ne tak propracovana´ (unixove´ syste´my jsou mnohem starsˇ´ı, programa´torˇi meˇli vı´c cˇasu a zabezpecˇenı´ bylo prima´rnı´ potrˇebou), zde se take´ projevuje prˇedevsˇ´ım lidsky´ faktor. Unixove´ syste´my vcˇetneˇ Linuxu si navı´c instalujı´ prˇedevsˇ´ım uzˇivatele´ „znalejsˇ´ı “, kterˇ´ı veˇdı´, zˇe podcenˇovat bezpecˇnost se nevypla´cı´. Du˚lezˇita´ je take´ ota´zka bezpecˇnostnı´ch chyb. V tisku (a hlavneˇ na Internetu) se objevujı´ cˇasto hla´sˇky typu „byla objevena bezpecˇnostnı´ dı´ra X v operacˇnı´m syste´mu Y, ktera´ mu˚zˇe zpu˚sobit Z“. Bezpecˇnostnı´ dı´ry se objevujı´ v kazˇde´m operacˇnı´m syste´mu (a vlastneˇ v jake´mkoliv rozsa´hlejsˇ´ım a slozˇiteˇjsˇ´ım projektu, tomu se neda´ vyhnout). Proto je du˚lezˇite´ „za´platovat, za´platovat a za´platovat“, at’se jedna´ o jaky´koliv syste´m. Bezpecˇnostnı´ za´platy jsou dostupne´ na Internetu take´ pro Linuxove´ distribuce (je mozˇne´ mı´t zapnute´ automaticke´ aktualizace, a to pro vsˇechny aplikace, nejen syste´m). I v Linuxu mu˚zˇeme pouzˇ´ıvat antivirove´ programy. Neˇktere´ firmy zna´me´ svy´mi produkty pro Windows dnes vyda´vajı´ take´ verze pro Linux, naprˇ´ıklad AVG, Kaspersky AntiVirus for Samba nebo Nod32, to jsou vsˇak komercˇnı´ produkty. Jejich vy´hodou je propracovany´ servis ze strany firmy. Existuje vsˇak antivir, ktery´ je uzˇ od svy´ch zacˇa´tku˚ volneˇ sˇirˇitelny´ a prˇ´ımo urcˇeny´ pro unixove´ syste´my – ClamAV (jeho na´stavba s graficky´m rozhranı´m pro KDE je KlamAV), nabı´zı´ jak antivirovy´ scaner, tak i „rezidentnı´ “ ochranu (je spusˇteˇn de´mon) a oveˇrˇova´nı´ posˇty, mu˚zˇeme aktivovat take´ automaticke´ aktualizace produktu. Zajı´mavy´ je take´ projekt SpamAssassin, ktery´ take´ ma´ verzi pro Linux. Objevujı´ se take´ na´stroje, ktere´ majı´ zvy´sˇit bezpecˇnost existujı´cı´ch distribucı´. Zde mu˚zˇeme zarˇadit nejen SELinux, ale trˇeba take´ Bastille Linux. Bastille Linux je na´stroj, ktery´ uzˇivateli klade ota´zky a na za´kladeˇ jeho odpoveˇdı´ meˇnı´ konfiguraci syste´mu ke kompromisu mezi bezpecˇnostı´ syste´mu a uzˇivatelskou prˇ´ıveˇtivostı´. Nastavenı´ se ty´kajı´ povolova´nı´ a zakazova´nı´ neˇktery´ch funkcı´, ktere´ by mohly by´t prˇ´ıpadneˇ zneuzˇity k pru˚niku do syste´mu, zakazova´nı´ beˇhu neˇktery´ch funkcı´ jako de´monu˚, ukoncˇova´nı´ neˇktery´ch nepotrˇebny´ch serveru˚, zabezpecˇova´nı´ heslem, konfigurace firewallu (tady pozor prˇi konfiguraci prˇes sı´t’, Bastille by takto mohl na´hle prˇerusˇit svou cˇinnost a pocˇ´ıtacˇ by zu˚stal nedostupny´). Musı´me by´t samozrˇejmeˇ prˇihla´sˇeni s dostatecˇny´mi pra´vy. Projekt je dostupny´ zatı´m pro neˇktere´ nejzna´meˇjsˇ´ı distribuce a jejich klony na stra´nka´ch http://freshmeat.net.
$
4.7
DALSˇI´ NA´STROJE PRO SPRA´VU
106
Za´chranny´ syste´m ma´ podobny´ vy´znam jako nouzovy´ rezˇim nebo za´chranna´ konzola ve Windows 2000/XP. V ru˚zny´ch distribucı´ch ho lze spustit ru˚zneˇ, je to jedna z veˇcı´, kterou by si meˇl kazˇdy´ prˇedem nastudovat v dokumentaci. Jednou z mozˇnostı´ je pouzˇitı´ parametru emergency prˇi startu ja´dra.
$
Za´chranny´ rezˇim znamena´ u´rovenˇ beˇhu pouze jednouzˇivatelskou, a da´le veˇtsˇinou nejsou prˇipojeny zˇa´dne´ oddı´ly kromeˇ korˇenove´ho, tedy v prˇ´ıpadeˇ potrˇeby je musı´me prˇipojit rucˇneˇ. Takte´zˇ se obvykle musı´me obejı´t bez graficke´ho rozhranı´ (ale lze je spustit).
4.7
Dalsˇı´ na´stroje pro spra´vu
Vy´borny´ na´stroj pro spra´vu syste´mu je Webmin. Je ke stazˇenı´ na http://www.webmin.com a pro jeho provoz stacˇ´ı prakticky jen internetovy´ prohlı´zˇecˇ (trˇeba Firefox nebo Mozilla) a samozrˇejmeˇ nainstalovane´ho a spusˇteˇne´ho de´mona webmin. Pracujeme v graficke´m rozhranı´ (co jine´ho v internetove´m prohlı´zˇecˇi), ke konfiguraci loka´lnı´ho pocˇ´ıtacˇe (toho, na ktere´m pracujeme) se dostaneme prˇes https://localhost:10000, k jiny´m pocˇ´ıtacˇu˚m v sı´ti prˇes jejich adresy. Mu˚zˇeme konfigurovat i to, co nenı´ v Ovla´dacı´m centru vcˇetneˇ ru˚zny´ch serveru˚ (Samba, Apache, . . . ). Na adrese http://www.linuxprinting.org je mozˇne´ najı´t rˇesˇenı´ ru˚zny´ch proble´mu˚ prˇi tisku v Linuxu. Polozˇka Printer Listing pro na´mi zadanou tiska´rnu zobrazı´ u´rovenˇ podpory v Linuxu (do jake´ mı´ry funguje), da´le zde najdeme i ovladacˇe pro ru˚zne´ druhy tiska´ren. Pro bezpecˇnost sı´teˇ jsou uzˇitecˇne´ na´stroje Nessus (http://www.nessus.org, vyhleda´va´ bezpecˇnostnı´ dı´ry v pocˇ´ıtacˇove´ sı´ti), Nmap (http://www.nmap.org, kontroluje sı´t’ova´ zarˇ´ızenı´ prˇes IP protokol), Snort (http://www.snort.org, monitoruje podezrˇelou cˇinnost na sı´ti, detekuje mozˇne´ pru˚niky do sı´teˇ), atd. Takovy´ch na´stroju˚ je hodneˇ a s neˇktery´mi se sezna´mı´me ve cˇtvrte´m rocˇnı´ku v prˇedmeˇtu Pocˇ´ıtacˇove´ sı´teˇ a decentralizovane´ syste´my.
Literatura Existuje mnoho zdroju˚, ktere´ mu˚zˇe spra´vce syste´mu nebo sı´teˇ pouzˇ´ıt pro dalsˇ´ı sebevzdeˇla´va´nı´ (a sebevzdeˇla´va´nı´ je v te´to dobeˇ a tomto oboru nezbytneˇ nutne´). Na´sledujı´ neˇktere´ ze zdroju˚, ktere´ mohou by´t pro tento u´cˇel pouzˇitelne´.
Informacˇnı´ porta´ly o Linuxu a internetove´ cˇasopisy: [1] http://www.tldp.org [2] http://www.linux.cz [3] http://docs.linux.cz [4] http://www.penguin.cz [5] http://www.linuxworld.cz [6] http://www.linuxzone.cz [7] http://www.linuxsoft.cz [8] http://www.abclinuxu.cz [9] http://www.root.cz [10] http://www.linuxexpress.cz [11] http://www.lpmagazine.org
Cˇla´nky a ucˇebnice: [12] Ucˇebnice GNU/Linuxu [online]. ABCLinuxu.cz. URL: http://www.abclinuxu.cz/ucebnice/obsah [13] COOPER, M. Advanced Bash-Scripting Guide [online]. URL: http://www.tldp.org/LDP/abs/ [14] PATOCˇKA, M. Porovna´nı´ syste´mu˚ Linux a FreeBSD (seria´l) [online]. URL: http://www.root.cz/clanky/porovnani-linux-freebsd/ 107
108
[15] STUTZ, M. The Linux Cookbook: Tips and Techniques for Everyday Use [online]. URL: http://www.dsl.org/cookbook/cookbook_toc.html [16] BROWN, M. A. Guide to IP Layer Network Administration with Linux [online]. URL: http://linux-ip.net/html/ [17] BRANDEJS, M. Vy´ukove´ materia´ly k prˇedmeˇtu Unix [online]. URL: http://www.fi.muni.cz/usr/brandejs/unix [18] BRANDEJS, M. Starsˇ´ı vy´ukove´ materia´ly k prˇedmeˇtu Unix [online]. URL: http://www.fi.muni.cz/usr/brandejs/unix old/pomucky/pomucky-unix.html [19] KERSˇLA´GER, M. Linux [online]. URL: http://www.pslib.cz/ke/Linux [20] ZˇEMBER, M. Exploity [online]. URL: http://www.ms.mff.cuni.cz/˜zembm2am/exploity/exploity.html [21] HA¨RING, D. Nebojte se Linuxu: pla´nova´nı´, hierarchie a rˇ´ızenı´ procesu˚ I [online]. URL: http://www.linuxzone.cz/index.phtml?idc=252&ids=29 [22] KOVA´Rˇ, D. Procˇ ma´me /proc ? [online] URL: http://www.linuxexpres.cz/praxe/proc-mame-proc [23] KASˇPA´REK, T. Co prˇed na´mi tajı´ /proc [online]. URL: http://www.root.cz/clanky/co-pred-nami-taji-proc/ [24] GAGYI, M. Sysfs – bra´na do ja´dra [online]. URL: http://www.abclinuxu.cz/clanky/system/sysfs-brana-do-jadra [25] BRADY, P. Linux Commands – a Practical Reference [online]. URL: http://www.pixelbeat.org/cmdline.html [26] MILAR, B. Seria´l o BASHi [online]. URL: http://www.linuxexpres.cz/praxe/serial-o-bashi [27] Introduction to BASH [online]. GNU.org. URL: http://www.gnu.org/software/bash [28] FUCHS, J. BASH (seria´l) [online]. URL: http://www.abclinuxu.cz/clanky/show/46130 [29] MATYS, J. Programova´nı´ pod Linuxem pro vsˇechny [online]. URL: http://www.root.cz/serialy/programovani-pod-linuxem-pro-vsechny/
Pro hlubsˇı´ studium: [30] LASSER, J. Rozumı´me Unixu. Praha, Computer Press, 2002.
109
[31] JELI´NEK, L. Ja´dro syste´mu Linux: kompletnı´ pru˚vodce programa´tora. Brno, Computer Press, 2008. [32] LOCKHART, E. Bezpecˇnost sı´tı´ na maximum. Brno, Computer Press, 2005. [33] HATCH, B. – LEE, J. – KURTZ, G. Hacking bez tajemstvı´: Linux. Brno, Computer Press, 2003. [34] RAYMOND, E. S. Umeˇnı´ programova´nı´ v Unixu. Brno, Computer Press, 2004. [35] SMITH, R. W. Linux ve sveˇteˇ Windows. Praha, Grada Publishing, 2006. Neˇktere´ strany dostupne´ na: http://books.google.cz/books?id=uDO_I1kIRBYC&printsec=frontcover#v=onepage [36] VYCHODIL, V. Operacˇnı´ syste´m Linux: Prˇ´ırucˇka cˇeske´ho uzˇivatele. Brno, Computer Press, 2003. Uka´zkova´ kapitola dostupna´ na: http://vychodil.inf.upol.cz/errata/download/linux-pcu-kap5.pdf [37] The Linux Foundation – publications [online]. Seznam odkazu˚ na publikace o Linuxu. URL: http://www.linuxfoundation.org/collaborate/publications [38] PRODEˇLAL, J. Ja´dro BSD [online]. URL: http://www.fi.muni.cz/˜kas/p090/referaty/2003-podzim/skupina16/kernel_xprodel.html [39] FreeBSD Handbook [online]. URL: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ [40] PECHANEC, J. Programova´nı´ v Unixu (v jazyce C) [online]. URL: http://www.devnull.cz/mff/pvu/