Príkazový riadok

Spúšťanie programov

Je ťažké niečo dosiahnuť bez toho, aby ste spustili program; môžete niečo vaším počítačom podoprieť, alebo ním pristaviť otvorené dvere a niektoré vydávajú nádherný vrnivý zvuk, keď bežia, ale to je tak všetko. A myslím, že sa všetci zhodneme na tom, že jeho použitie ako vrniacej zarážky dverí nie je to, čo prinieslo osobnému počítaču popularitu, ktorej sa teraz teší.

Takže pamätáte sa, že takmer všetko v Linux-e je súbor? Nuž, o programoch to platí tiež. Každý príkaz, ktorý spustíte (a ktorý nie je zabudovaný do shell-u) sídli niekde ako súbor. Program spustíte jednoducho špecifikovaním celej cesty k nemu.

Napríklad, pamätáte sa na program su z posledej sekcie? Nuž, v skutočnosti je v adresári /bin: /bin/su by ho krásne spustilo.

Prečo potom len naťukanie su, funguje? Koniec koncov, nepovedali ste, že je v /bin. Rovnako dobre sa mohol nachádzať v /usr/local/share, no nie? Ako to vedel? Odpoveď je ukrytá v premennej prostredia PATH; väčšina shell-ov má buď PATH, alebo niečo veľmi podobné PATH. V podstate obsahuje zoznam adresárov, v ktorých hľadá programy, ktoré sa pokúšate spustiť. Takže, keď ste spustili program su, váš shell prebehol svoj zoznam adresárov, kontrolujúc každý z nich, či sa v ňom nenachádza vykonateľný súbor nazvaný su, ktorý by mohol spustiť. Prvý, na ktorý narazí, spustí. To sa udeje vždy, keď spustíte program bez špecifikovania celej cesty k nemu. Ak dostanete chybu Command not found, to len znamená, že program, ktorý ste sa pokúšali spustiť, nie je vo vašej PATH. (Prirodzene, to by bola pravda len ak program vôbec existuje ...) Hlbšie budeme rozoberať premenné prostredia v sekcii nazvanej Bourne Again Shell (bash).

Tiež si pamätajte, že “.” je skratka pre “adresár, v ktorom práve som”. Takže, ak ste sa náhodou nachádzali v /bin, ./su by fungovalo ako explicitná plná cesta.

Zhodovanie nahradzovacích znakov (Wildcard Matching)

Takmer všetky shell-y rozoznávajú isté znaky ako náhrady, alebo skratky, ktoré znamenajú “sem ide čokoľvek”. Také znaky sú príznačne nazvané “nahradzovacie znaky (wildcards)”; najpoužívanejšie sú * a ?. Podľa konvencie, ? sa zvyčajne zhoduje s ľubovoľným jedným znakom. Napríklad predpokladajme, že máme adresár s tromi súbormi: ex1.txt, ex2.txt, a ex3.txt. Chcete prekopírovať všetky tieto súbory (použitím programu cp, ktorý popisujeme v sekcii nazvanej cp v Kapitole 10) do iného adresára, naprídklad do /tmp. Nuž ťukanie cp ex1.txt ex2.txt ex3.txt /tmp je priveľa práce. Je ďaleko jednoduchšie naťukať cp ex?.txt /tmp; ? sa zhoduje s každým so znakov “1”, “2”, a “3”, a každý z nich sa postupne nahradí za “?”.

Čo vravíte? Že to je ešte stále priveľa práce? Máte pravdu. Je to otrasné. Na to máme zákony, ktoré nás chránia pred takými vecami. Našťastie máme tiež *. Ako sme už spomínali, * sa zhoduje s “ľubovoľným počtom znakov”, vrátane 0. Takže, ak tie tri súbory sú jediné v tom adresári, mohli by sme jednoducho povedať cp * /tmp a dostať ich všetky jedným ťahom. Predpokladajme ale, že tiež existuje súbor nazvaný example.txt a ďalší nazvaný hejaz.txt. Chceme okopírovať example.txt, ale nie hejaz.txt; cp example* /tmp to spraví za nás.

cp example?.txt /tmp by, prirodzene, zobralo len naše tri pôvodné súbory; v example.txt nie je žiaden znak, ktorý by sa zhodoval s ?, takže by zostal vynechaný.

Presmerovanie vstupu/výstupu a rúry

(Tu ide niečo super.)

   $ ps > blargh

Viete, čo je to? To som ja, ako bežím ps, aby som videl, ktoré procesy bežia; ps je popísané v Kapitole 11. To nie je to, čo je super. To, čo je super, je > blargh, čo zhruba znamená “vezmi výstup z ps a zapíš ho do súboru nazvaného blargh”. Ale počkajte, bude to ešte zaujímavejšie.

   $ ps | less

Toto zoberie výstup z ps a “pustí ho rúrou” do less, takže môžem cezeň rolovať podľa mojej ľubovôle.

   $ ps >> blargh

Toto je tretí najčastejšie používaný druh presmerovania; robí rovnakú vec ako “>”, s tým rozdielom, že “>>” pridá výstup z ps na koniec súboru blargh, ak daný súbor existuje. Ak nie, tak podobne ako pri “>”, bude vytvorený. (“>” vymaže aktuálny obsah blargh.)

Tiež existuje operátor “<” , ktorý znamená “vezmi svoj vstup z nasledovného”, ale nie je tak často používaný.

   $ fromdos < dosfile.txt > unixfile.txt

Presmerovanie začne byť skutočne srandou, keď ho začnete hromadiť:

   $ ps | tac >> blargh

To spustí ps, obráti poradie riadkov na výstupe a pripojí ich na koniec súboru blargh. Môžete naskladať toľko presmerovaní, koľko len chcete; len si pamätajte, že sú interpretované zľava doprava.

Pozrite si manálovú stránku bash(1), kde nájdete detailnejšie informácie o presmerovávaní.