Úvod do textového prostredia unixov
Na tomto workshope sa dozviete základné informácie o práci na príkazovom riadku unixových operačných systémov. Pre nedostatok času sa na mnohé veci pozrieme len letmo a v prípade, že budete chcieť veci ktoré sa tu naučíte neskôr používať, budete si musieť čo-to doštudovať. Alebo Inak. Na tomto workshope sa čo-to dozviete a doštudovať si toho budete musieť strašne veľa. Tento text nieje vyčerpávajúci hoci nováčika pravdepodobne vyčerpá, bezchybný (zanedbáva veci v ktorých by sme sa mohli na workshope príliš zamotať), súvislý, konzistentný a obávam sa, že ani zmysluplný (obsahuje množstvo zmysluprázdnych príkladov).
Unixové operačné systémy sa aj v súčasnosti používajú prevažne na serveroch a routroch všetkého druhu, na desktopoch sa vyskytujú pomerne zriedka. Ich veľkou prednosťou z hľadiska systémového administrátora, ale aj zručného používateľa je to, že ešte aj v súčasnosti možno povedať, že z "príkazového riadku" urobíte stále viac ako z grafických rozhraní. To je výhodou jednak pre to, že na takomto systéme možno pracovať nadiaľku bez veľkých nárokov na internetové pripojenie, ale aj pre to, že vďaka textovému rozhraniu je práca z hľadiska nevidiaceho používateľa relatívne jednoduchá, bez komplikácií súvisiacich s prístupnosťou (žiadne obrázkové informácie, veľmi zriedka je potrebný nejaký vizuálny kontext).
Čo je unix
O histórii sa rozpisovať neplánujem, pretože kapitolka o histórii unixov je povinnou jazdou každého textu ktorý o unixoch pojednáva. Takže kto prahne po informáciách, ten si prečíta napríklad text na wikipedii
V tomto texte pokec o tom čo to vlastne je odbavíme nasledovne:
- Viacužívateľský operačný systém podporujúci multitasking,
- Existuje množstvo unix-like operačných systémov
- Okrem jadra sú dôležité utility ktorých máme k dispozícii strašne veľa
- Každá robí jednu vec, no robí ju poriadne,
- Utility možno prepájať.
Ako začať
V prvom rade potrebujeme nejaký unix. Jedna z možností ako prísť ku kontu na nejakom serveri s unixom je nájsť poskytovateľa, ktorý nám takéto konto poskytne. Na internete je ich pomerne veľa a zohnať "shell" (tak sa služba od poskytovateľa nazýva) už dnes nieje ťažké ani za mierny poplatok. Celkom elegantnou možnosťou ako k shellu prísť je napríklad zriadiť si vlastný virtuálny server. Miernou nevýhodou pre začiatočníkaje fakt, že si takýto server musíte sami správne nastaviť, čo nemusí byť úplne jednoduché. Na druhej strane, pri zriaďovaní virtuálneho servera už nejako nastavený linux dostanete, takže nieste v takej situácii, v akej by ste boli, ak by ste si inštalovali systém od úplného začiatku.
Na workshope budeme používať interný server, prihlasovacie údaje sa dozviete počas workshopu. Skôr ako sa vrhneme na samotný unix, povedzme si ešte niečo o SSH, ktoré budeme používať na pripojenie k serveru.
SSH
Ako som spomenul vyššie, unixové operačné systémy možno používať nadiaľku. Na to, aby sme to mohli robiť je potrebné sa k ním nejako pripojiť. V súčasnosti sa na to používa protokol s názvom SSH (secure shell). Podrobný pokec o možnostiach ssh by bol na jeden ďalší workshop, preto tu spomenieme iba fakt, že je to protokol, cez ktorý možno s použitím nejakého klienta komunikovať so serverom a záujemcov o viac informácií odkážeme napríklad na seriál "SSH receptem na bezpečnost" (1.a 2. časť), záujemcovia o pokročilé informácie isto radi nahliadnú do vtipne napísaného seriálu ssh intimně aneb úvod do paranoii
Tu spomenieme len to, čo budeme akútne potrebovať na workshope, teda že na to, aby sme mohli komunikovať so serverom cez SSH budeme potrebovať nejakého klienta. Použijeme program putty pre windows, presnejšie jeho portable verziu, ktorá nerobí neporiadok v registroch. Preskáčte do sekcie download a stiahnite hneď prvý balíček označený "All-in-one ZIP file". V snahe zabezpečiť "nadčasovosť" tohoto textu nevkladám priamu linku, pretože putty sa vyvíja a linka môže byť už zajtra zastaralá.
Po stiahnutí a rozbalení spomenutého zipu venujme pozornosť programu putty.exe, ktorý je súčasťou balíčka. Po jeho spustení sa otvorí okno, do ktorého môžeme zadať prihlasovacie údaje:
- Hostname(or ip): názov servera na ktorý sa ideme pripájať
- port: Predvolený je 22, ide o port, na ktorom na servery počúva ssh server
- Prepínač necháme na SSH a stlačíme tlačidlo "open"
Po úspešnom pripojení sa na server pracujeme podobne ako na príkazovom riadku windows. Teda na poslednom riadku máme čosi čomu sa hovorí "prompt", kam píšeme príkazy. Výstupy z príkazov sa vypisujú na obrazovku, ktorej obsah si pozeráme prezeracím kurzorom, alebo jaws kurzorom, v závislosti na tom, aký čítač obrazovky používame.
Teraz už vieme všetko potrebné na to, aby sme sa mohli pripojiť k nášmu serveru.
Pre tých, čo by si radi zriadili svoj vlastný server: na vyhľadanie vhodnej služby môžete použiť google. Moja stránka (práve tá, z ktorej čítate tieto informácie) beží takisto na virtuálnom serveri, ktorý mám zriadený na serveroch spoločnosti 4smart.
Po úspešnom pripojení
Ak ste sa úspešne prihlásili, môžeme začať s prvými experimentmi. Po zadaní hesla vám server zobrazí niekoľko viac aj menej zaujímavých informácií, pod nimi sa bude nachádzať prompt, na ktorom sa nachádza aj kurzor. Na tento riadok budeme písať príkazy, prostredníctvom ktorých budeme komunikovať so serverom. Interpret príkazov (program ktorý bude vaším príkazom rozumieť a odpovedať na ne) sa nazýva shell.
Existuje množstvo rôznych shellov. Odlišujú sa napríklad v podpore rôznych funkcií, skriptovacích jazykoch v ktorých pre ne môžete "formulovať" jednoduché programy a pod. My sa budeme zaoberať v súčasnosti asi najpoužívanejším shellom s názvom bash.
Bash máme nastavený ako "login shell" čo znamená, že sa spúšťa automaticky po prihlásení.
V prípade, že chcete spojenie ukončiť, napíšte príkaz exit a potvrdte ho enterom. Každý príkaz, ktorý budeme zapisovať do príkazového riadka, musíme ukončovať enterom, aby sme shellu povedali, že sme príkaz dopísali a on sa ním môže začať zaoberať. Existuje aj možnosť zatvoriť okno stlačením kombinácie alt+f4, autor tohoto textu však tento spôsob ukončovania spojenia s unixom považuje za ekvivalentný trieskaniu dvermi po 22:00.
Základné operácie s príkazovím riadkom
Akoo už bolo spomenuté, kľúčový je príkazový riadok do ktorého píšeme príkazy. Každý príkaz ukončujeme enterom. Vyskúšajte si nasledujúce príkazy:
- who: príkaz nám zobrazí informácie o práve prihlásených používateľoch. Každý riadok obsahuje základné informácie o jednom používateľovy. Okrem mena sa tu môžme dozvedieť virtuálnu konzolu cez ktorú je používateľ pripojený, ale aj dátum a čas kedy sa používateľ prihlásil.
- finger: príkaz na zistenie informácií o konkrétnom používateľovy
- uptime: informácie o behu servera
- date: príkaz na zobrazenie ale aj nastavenie (to ale môže len administrátor) dátumu a času
Vyskúšajte si vymenované príkazy, skúste sa pohrať s históriou.
Príkazy možno okrem písania aj editovať, teda fungujú šípky doprava a doľava a tlačidlá backspace a delete.
Hornou a dolnou šípkou možno používať históriu naposledy použitých príkazov, čo budete pravdepodobne využívať neskôr, keď budeme písať dlhšie príkazy.
Za zmienku ešte stojí automatické doplňovanie príkazov ale aj názvov súborov a priečinkov po stlačení tabulátora (vyskúšame neskôr, keď to začne byť potrebné).
Skôr ako sa začneme venovať práci so súbormi a priečinkami, povedzme si ešte, že príkazom možno zadávať aj parametre. Vo všeobecnosti má tvar príkazu nasledujúci tvar:
príkaz parameter1 parameter2 parameter3 ...
Spomeňme si napríklad na príkaz finger, ktorému sme ako parameter zadávali meno používateľa, o ktorom sme sa chceli niečo dozvedieť.
Parametre ktoré začínajú pomlčkou (-) budeme nazývať prepínače. Tie sa používajú na výber funkcionality konkrétneho príkazu, zatiaľ čo tie bez pomlčky sú väčšinou "dáta" ktoré má konkrétny príkaz spracovať.
Parametre oddeľujeme medzerou, čo môže vyvolávať nepríjemné pocity v čitateľoch s túžbami zadávať parametre obsahujúce medzeru. Takýchto čitateľov učičíkame informáciou, že viac slovné parametre (reťazce) uzatvárame do uvodzoviek.
Trochu nepríjemnou správou pre používateľov operačného systému Windows môže byť aj to, že všetko v unixoch (shell, názvy súborov, prepínače,...) rozlišuje veľké a malé písmená. Teda napríklad príkazi WHO, Who, ani wHo neexistujú.
Súbory a priečinky
Aj v unixových systémoch sa perzistentné dáta uchovávajú v súboroch, ktoré môžeme organizovať do priečinkov. Pri práci so shellom sme vždy v nejakom priečinku nastavení. Príkazom pwd si môžeme kedykoľvek zistiť aktuálnu cestu.
Všimnime si, že v unixoch sa ako oddeľovač používa namiesto windowsového \ štandardné lomítko (/) a že cesta nezačína písmenkom disku.
V unixoch sú všetky disky, priečinky a súbory organizované v jednom strome a v prípade, že máme v serveri viacero diskov, sú tieto pripojené do nejakého priečinka vrámci tohoto stromu.
ls: Výpis obsahu priečinka
Na vypísanie obsahu priečinka slúži príkaz ls. Ak ho použijeme bez parametrov, vypíšeme si obsah aktuálneho priečinka.
Príkaz ls však rozumie množstvu prepínačov, ktorými môžeme určiť, ako má vizerať výpis, čo všetko má výpis obsahovať,... Ako posledný parameter môžme uviesť cestu k priečinku, ktorý chceme vypísať. Príkaz ls teda nemusíme nutne použiť len na výpis aktuálneho priečinka. Nasleduje niekoľko často používaných prepínačov. Jednopísmenkové prepínače môžme kombinovať do jedného slova, teda napríklad zápisy
ls -a -l
a
ls -al
sú ekvivalentné.
- -a: all vypíše všetky súbory. bez tohoto prepínača sa nevypisujú súbory a priečinky ktorých názov začína bodkou (.), pretože tieto sa v unixoch chápu ako skryté. Napríklad váš domovský priečinok (to je ten, ktorý je nastavený po tom ako sa prihlásite a do ktorého si môžete ukladať vlastné dáta) obsahuje množstvo skrytých súborov a priečinkov, ktoré obsahujú konfiguráciu pre rôzne programy.
- l:list výpis priečinka obsahuje detailné informácie o každej položke. Každá položka je na samostatnom riadku a z ľava do prava obsahuje nasledujúce informácie:
- jednoznakový príznak ktorý hovorí o aký typ objektu ide. (-:súbor, d:priečinok, l:odkaz, s:symbolický odkaz, p:rúra,...)
- 9 znakový reťazec popisujúci prístupové práva k objektu (viď ďalej)
- počet referencií na konkrétny objekt (referencie narastajú s počtom hard liniek)
- meno vlastníka
- meno skupiny
- veľkosť
- dátum a čas vytvorenia
- názov
- d: pri priečinkoch nevypisuje ich obsah, ale informáciu o konkrétnom priečinku. Hodí sa v kombinácii s prepínačom l a v prípade, že sa chceme dozvedieť, ako máme nastavené atribúty na konkrétnom priečinku.
- t: triedenie podľa dátumu, najnovší ako prvý
- r: reverzný výpis (napríklad pri triedení)
- S (pozor na veľké písmená): triedenie podľa veľkosti
- R: rekurzívny výpis (že čo to je? Vyskúšajte)
cd: zmena priečinka
parametrom príkazu môže byť relatívna (bez lomítka na začiatku) alebo absolútna (ak má cesta lomítko na začiatku, tak ju nazývame absolútna, pretože popisuje cestu k priečinku od koreňového priečinka) cesta k priečinku do ktorého chceme vstúpiť.
mkdir pokus
cd pokus
ls
cd ..
rmdir pokus
cd /
ls
predposledným príkazom sme prešli do koreňového priečinka.
Za zmienku ešte stojí informácia, že shell nám ponúka rýchli spôsob ako sa dostať do niektorých priečinkov:
- cd: bez parametrov znamená choď do môjho domovského priečinka
- cd ~: choď do môjho domovského priečinka. Môže sa zijsť, ak chceme ísť do nejakého podpriečinka, ktorý sa nachádza v našom domovskom priečinku. Napríklad cd ~/pokus
- cd -: choď do priečinka, v ktorom som bol pred tým, ako som naposledy použil cd.
mkdir, rmdir: vytváranie resp mazanie priečinka
Oba príkazy sa najčastejšie používajú s jedným alebo viacerími parametrami pre jeden alebo viacero priečinkov. Vytvárať aj mazať teda môžeme aj viacero priečinkov naraz, týmto spôsobom však môžme mazať len prázdne priečinky.
cp: kopírovanie
Najjednoduchšia verzia má 2 parametre a to zdroj a cieľ, pri čom cieľ môže byť aj priečinok. Bez potrebných prepínačov môžme kopírovať len súbory, pri kopírovaní priečinkov treba použiť prepínač -r (rekurzívne kopírovanie). Teda napríklad
cp -r public_html kopia
okopíruje priečinok public_html do priečinka kopia.
Pri kopírovaní môžeme používať aj to, čo zrejme poznáte pod názvom masky:
- ?:nahrádza jeden znak
- *:nahrádza ľubovoľný reťazec
- []:nahrádza jeden z množiny znakov
S maskami sa viac pohráme neskôr, skusmo si však môžete vyskúšať vyrobiť priečinok a v ňom napríklad súbory kap1, kap2, kap3, (na vytváranie súborov použite príkaz touch) a na ňom vyskúšať napríklad:
ls kap?
ls kap[123]
alebo ls *
čo si myslíte, čo urobí toto?
cp kap*[05].txt vybrane
Prístupové práva
Jedna z vecí s ktorou sa vo windows väčšina ľudí nezaoberá alebo zaoberá veľmi zriedka sú prístupové práva. Pri práci na unixoch ich pravdepodobne budeme stretávať častejšie, pretože na unixoch budeme pravdepodobne vykonávať častejšie veci, pri ktorých je úprava prístupových práv potrebná.
Pod prístupovými právami myslíme akési nastavenia, ktorý používatelia a čo môžu alebo nemôžu robiť s konkrétnym objektom alebo objektmi.
V každom unixovom operačnom systéme máme k dispozícii prinajmenšom jeden ty práv, ktoré budeme nazývať posixové. Tento systém nám umožňuje nastavovať práva pre 3 úrovne:
- vlastník: čo môže s objektom robiť jeho vlastník (pamätáte na ls s parametrom -l?)
- skupina: čo môže s objektom robiť skupina v ktorej je objekt zaradený (opäť ls -l)
- ostatní: čo môžu s objektom robiť tí čo niesú ani v skupine v ktorej je objekt, ani jeho vlastníci
Na každej úrovni môžme zapínať alebo vypínať tieto základné atribúty:
- čítanie: r ako read
- zápis: w ako write
- spúšťanie (pre súbory) resp vstup (pre priečinky): x ako execute
Vspomeňme si teraz na druhý údaj z ľava vo výpise obsahu priečinka s parametrom -l. Mám na mysli krypticky vizerajúcu deväticu znakov ktorá obsahuje nejakú kombináciu znakov rwx a pomlčiek. Tento údaj kóduje prístupové práva. Prvá trojica určuje práva pre vlastníka, druhá pre skupinu a tretia pre ostatných. Ak je na pozícii písmenka znak pomlčka, znamená to, že príslušná úroveň konkrétne oprávnenie nemá. Napríklad
rwxr-x--x
znamená:
- vlastník (rwx): má plné práva teda čítanie, zápis aj spúšťanie resp vstup
- skupina (r-x): môže objekt čítať a spúšťať, nie však meniť
- a ostatní (--x): môžu objekt len spúšťať resp (ak je to priečinok) do neho vstupovať.
Na to aby ste mohli začať s právami experimentovať by sa ešte zišlo vedieť, ako ich nastavovať.
chmod: nastavovanie práv
Príkaz chmod rozumie zadávaniu práv v dvoch formátoch. V tomto texte si popíšeme symbolický, ktorý umožňuje nastavovať práva aj "relatívne". Symbolický spôsob má nasledujúci tvar:
chmod popis_pravsubor1, subor2,...
A popis_prav pozostáva z jedného alebo viacerých výrazov oddelených čiarkou. Výrazy začínajú jedným z písmen u(ser), g(roup), alebo o(thers), za ktorím špecifikujeme práva pre konkrétnu úroveň. Ťažkopádny popis zadávania práv si skúsime v tomto texte ušetriť a nahradíme ho niekoľkými praktickými príkladmi:
$ chmod u=rwx,g=rw,o=x a.txt
-rwxrw---x 1 lecky demo 0 May 21 09:27 a.txt
$ chmod o+r+w a.txt
-rwxrw-rwx 1 lecky demo 0 May 21 09:27 a.txt
$ chmod o-w,g-w+x a.txt
-rwxr-xr-x 1 lecky demo 0 May 21 09:27 a.txt
a teraz ešte niekoľko poznámok:
- znak "=" slúži na absolútne nastavenie práv, teda práva inicializujeme na hodnotu za znakom,
- znakmy "+" a "-" konkrétny atribút zapíname resp vypíname,
- Atribúty môžeme meniť aj pre priečinky, ak však nepoužijeme prepínač -R, zmenia sa len pre priečinok, nie však pre objekty vňom.
Vyskúšajte si:
- Zistite aké práva má nastavené váš domovský priečinok a uvedomte si, čo znamenajú
- vo vašom domovskom priečinku vytvorte priečinok zdielanie tak, aby bol jeho obsah prístupný pre všetkých, nech sa ale nedá meniť
- v priečinku zdielanie vytvorte podpriečinok tajne, z ktorého sa bude dať kopírovať len za predpokladu, že budeme poznať názov súboru
Dokumentácia
V predchádzajúcich častiach sme sa z ľahka pozreli na niekoľko príkazov. Tento text však z pochopiteľných dôvodov pred zvedavím čitateľom zatajuje množstvo zaujímavých prepínačov a funkcií jednotlivých príkazov. Napríklad príkaz chmod rozumie okrem symbolického aj absolútnemu zadávaniu prístupových práv. Zvedavého čitateľa už nebudeme ďalej trápiť rečičkami o tom, čo všetko sme mu zatajili a predstavíme si manuálové stránky.
Ide o základnú dokumentáciu, ktorá existuje ku každému z vyššie spomenutých, ale aj k mnohým doposiaľ nespomenutým príkazom. Manuálové stránky sú zvyčajne veľmi rozsiahle, zároveň však aj veľmi poučné a možno povedať, že ich čítaním trávia mnoho času aj ostrieľaní používatelia unixov. Na ich zobrazenie sa používa program s názvom man, ktorému môžeme ako parameter zadať okrem iného aj názov programu, ktorého dokumentáciu si chceme prečítať.
Vyskúšajme napríklad:
man chmod
Manuálové stránky sa zobrazujú po stranách prostredníctvom programu "less", ktorý budeme v budúcnosti používať veľmi často, preto je dobré pamätať si v súvislosti s ním niekoľko dôležitých vecí:
- Slúži na zobrazovanie (nie na editovanie) textov, ktoré sú dlhšie ako jedna obrazovka,
- Umožňuje vyhľadávanie v texte (stlačme /, napíšme čo chceme hľadať a potvrďme enterom) (veci znalých možno poteší informácia, že vyhľadávanie vie čo sú to regulárne výrazy)
- ?: hľadanie opačným smerom,
- n resp shift+n: nasledujúci resp predchádzajúci výskyt naposledy hľadaného (pozor, pri hľadaní otáznikom je nasledujúci vlastne predchádzajúci a predchádzajúci nasledujúci),
- medzera alebo f ako forward: nasledujúca strana
- b ako backward: predchádzajúca strana
- šípky nahor a nadol sa dajú použiť na posúvanie po riadkoch
- pred príkazy na pohyb (medzera, b, šípky, n,...) môžeme predradiť číslo. To potom znamená, že chceme konkrétnu operáciu vykonať toľko krát, aké číslo sme zadali. Napríklad 5n znamená nájdi piaty nasledujúci výskyt naposledy hľadaného
- G: skok na konkrétny riadok (napríklad 1G = choď na prvý riadok, G bez predradeného čísla = choď na posledný riadok)
Vráťme sa teraz k manuálovým stránkam. Každá stránka je rozdelená na niekoľko častí:
- NAME: názov programu (len jeden riadok)
- SYNOPSIS: Zhrnutie informácií o syntaxi príkazu
- DESCRIPTION: sekcia ktorá podrobne popisuje konkrétny príkaz. Často veľmi rozsiahla a rozdelená na ďalšie podčasti.
- SEE ALSO: zoznam súvisiacich programov
- AUTHOR: autor manuálovej stránky,
- ...
Manuálové stránky sú v systéme organizované v tzv sekciách a číslo sekcie sa píše pred program ku ktorému si chceme manuálovú stránku prečítať. O každej sekcii sa môžete dozvedieť základné informácie, ak si pozriete man ku slovu intro v každej sekcii. Teda napr
man 1 intro
man 2 intro
Celkom užitočné "help" utilitky, ktoré stojí za to poznať sú aj apropos a whatis (pozri manuálové stránky, resp vyskúšaj)
Prepájanie príkazov
Vyskúšajte si vypísať podrobnosti o priečinku /etc
ls -al /etc
Zistíte, že je dosť dlhý (v mojom prípade má 195 riadkov). Obsahuje zoznam všetkých súborov a priečinkov, ktoré nejako súvisia s konfiguráciou servera a na obrazovku sa nám naraz nezmestí. Vyššie bol spomenutý príkaz less, ktorý dokáže zobrazovať dlhé výpisy tak, že ich "zalamuje" po stranách. Ten by sa nám teraz náramne zišiel, potrebovali by sme mu však náš dlhý výpis nejako poslať. Dá sa to urobiť tak, že príkazu ls povieme, aby to čo by normálne poslal na výstup, radšej poslal programu less, ktorý nám to rozumne vypíše. Programy ls a less teda spojíme a použijeme na to "potrubie", ktoré reprezentuje znak |. Teda:
ls -al /etc |less
a opäť si počkáme a po chvíli sa nám zobrazí čosi podobné ako pri manuálových stránkach. a môžme používať vyhľadávanie, posúvanie po obrazovkách,... Vyskúšajte si nájsť informácie o napríklad o súbore passwd.
Mimochodom, počet riadkov vo výpise pri mojom priečinku som zistil pomocou príkazu wc (word count) s prepínačom -l (lines) do ktorého som poslal výstup z príkazu ls.
Pomocou rúry môžete spájať aj viacero príkazov, napríklad
ls |sort |less
program sort slúži na triedenie dát a jeho (utriedený) výstup sme pre istotu poslali do programu less, aby sme videli celý výstup.
Výstup programu môžeme presmerovať aj do súboru:
ls -al /etc >~/a.txt
výstup teda presmerovávame znakom >.
Rovnako sa dá presmerovať aj vstup, používa sa na to znak <.
Ak znak > zdvojíme, obsah súboru do ktorého presmerovávame nebude vymazaný, ale výstup bude pridaný na jeho koniec. Teda
ls >a.txt
ls -al >>a.txt
bude obsahovať výpisy toho istého priečinka. Najprv iba názvy a potom detailný výpis.
Na výpis obsahu súboru môžeme použiť príkaz cat
cat a.txt
sort <a.txt |less
A nakoniec ešte zdvojené <. Vyskúšajte si:
sort <<poslednyriadok
prvy
druhy
treti
stvrty
piaty
poslednyriadok
Rôzne užitočné utilitky a triky
Pri demonštrovaní nasledujúcich utilitiek a konštruktov bashu budeme používať súbor, ktorý sa nachádza v priečinku /etc a volá sa passwd. To je súbor, ktorý obsahuje informácie o všetkých používateľoch na serveri. Zvedavci si pozrú
man 5 passwd
Zvedavci takisto nebudú považovať nižšie uvedené opisy za vyčerpávajúce a pri každom príkaze nazrú do manuálových stránok, alebo budú klásť zvedavé otázky googlu.
grep
Nástroj na filtrovanie výstupu. Rozumie množstvu parametrov a zvedavcom odporúčam nazrieť do man stránok. Najjednoduchšie a najčastejšie použitie:
cat /etc/passwd |grep michael
vypíše všetky také riadky súboru passwd, ktoré obsahujú slovo michael
find
Nástroj na vyhľadávanie súborov podľa rôznych kritérií. Takisto s hutnou dokumentáciou a širokým spektrom využitia
find .
vypíše obsah aktuálneho priečinka aj všetkých podpriečinkov rekurzívne
find . -iname *.txt
vyhľadá a vypíše cesty ku všetkým txt súborom, relatívne k aktuálnemu priečinku. I-čko v prepínači "iname" znamená case insensitive (bez citlivosti na veľké písmená)
find `pwd` -iname *.txt
Podobný výpis ako v predchádzajúcej ukážke, ibaže cesty sú absolútne. Dosiahli sme to nahradením cesty od ktorej sa má začať hľadať. Bodku sme nahradili príkazom pwd, uzavretým v opačných úvodzovkách. Tie nám umožňujú vložiť výstup nejakého programu ako parameter pre iný program.
find . -type d -and -empty
Nájde objekty ktoré sú priečinky (-type d) a zároveň (-and) sú prázdne (-empty), teda vypíše všetky prázdne priečinky
read
Slúži na načítanie vstupu zo štandardného vstupu. Načítanú hodnotu vkladá do pomenovanej premennej. Popri read si v nasledujúcom krátkom príklade ukážeme aj echo
read riadok
echo napisal si $riadok
Ano, bash vie čo sú to premenné a ano, netreba ich nijako špeciálne vytvárať, stačí do nich niečo zapísať
meno=mrkvicka
echo $meno
jednoduché testovanie výstupu
Príkazy môžeme okrem | spájať aj pomocou logických spojok && (a zároveň) a || (alebo). Každý príkaz po skončení vracia návratovú hodnotu, ktorá sa ukladá v premennej $?
cd
echo $?
cd neexistujuci_priecinok
echo $?
Vidíme že ak príkas skončil úspešne, vrátil hodnotu 0, v opačnom prípade vracia nenulovú hodnotu.
Pri použití && a || sa chápe nula ako pravda a nenulová hodnota ako nepravda, čo môžeme využiť nasledovne:
ls a.txt &&echo uz existuje ||touch a.txt
ak súbor a.txt existuje, tak ls vráti hodnotu 0 a vykonása echo. Ak neexistuje, tak sa echo za && nevykoná, ale sa vykoná vetva za || (alebo) a súbor sa vytvorí
while
Uhádnite alebo zistite, čo robia nasledujúce riadky:
find . -iname "*.txt" |while read s
do
cat $s |grep ahoj >/dev/null &&echo $s obsahuje hladane slovo
done
Všimnite si, že štandardný výstup grepu sme presmerovali do súboru /dev/null. Je to taký kontajner na nepotrebné výstupy, ktorý sme využili práve teraz, pretože nechceme, aby nám grep vypisoval na výstup riadky, na ktorých našiel čo hľadáme. My chceme v našom jednoduchom programe iba návratovú hodnotu z programu grep.
editovanie textov
Pre unixové prostredia existuje množstvo rôznych editorov. Pre tých, ktorím sa nechce veľa učiť bude pravdepodobne postačujúci editor s názvom pico (po spustení si pozrite spodné riadky obrazovky), pre tých, čo disponujú trpezlivosťou a majú radi dokonalosť odporúčam excelentný editor vim.
Čítanie pre tých, ktorím sa práca v unixoch stále zdá byť zvládnuteľná
- man: awk, sed a nástroje v SEE ALSO sekciách
- seriál o regulárnych výrazoch veci tak užitočnej, ako málo čo. Tých čo sa čertia, že regulárne výrazy sú iné ako zástupné znaky z vordu aj napriek tomu, že poskytujú podobnú funkcionalitu by som rád upozornil, aby smerovali svoj hnev správnym smerom. Zatiaľ čo regulárne výrazy sú nasvete od sedemdesiatych rokov, zástupné znaky existujú... no veď viete. Ak teda hromžíte na unix, tak plačete na nesprávnom hrobe.
- Letmý text o programovaní v bashy, v jazyce českém
- Trochu podrobnejší tutoriál o skriptovaní v bashy, angličtina
- články so zameraním na bash na serveri http://www.root.cz