Hlavní navigace

Triky pro začátečníky (4)

11. 8. 2000
Doba čtení: 4 minuty

Sdílet

Již čtvrtý díl Triků se bude zabývat skládáním příkazů, rourami, přesměrováním vstupů a výstupů a podobnými triky, bez kterých se nikdy nestanete skutečnými linuxovými guru. Před tím se však ještě krátce vrátím k souborovému systému, přesněji k linkům.

Co je to link (odkaz)? V podstatě je to něco jako záložka či bookmark Netscapu. Podobně jako v tomto (nenáviděném, přesto hojně používaném) programu, kdy záložky vám šetří čas při vypisování a hlavně pamatování si adresy internetových serverů, linky souborového systému odkazují na soubory či adresáře. Každý link pak zastupuje zvolený soubor a můžete s ním pracovat téměř stejně, jako s originálním souborem.

Linky se dají rozdělit na dva typy, symbolické a pevné. Pevný link vytvoří přímý odkaz do souborového systému až na úroveň inodu. Zároveň zvedne čítač, který indikuje počet pevných linků na daný soubor. Po vytvoření pevného linku prakticky není možné rozlišit, který soubor je originální a který je jen pevný link. Pokud smažete původní soubor, pevný link zůstane zachován. Pouze se sníží čítač. Teprve až čítač skončí na nule, smaže se soubor i fyzicky.

Naproti tomu jsou symbolické linky rozdílné. Symbolické linky je možné vytvářet i na adresáře, pevné linky nikoliv. Pokud smažete cílový soubor či adresář, link přestane platit. Link můžete používat běžným způsobem, jeho editací se změní obsah cílového dokumentu. Ovšem kopírování či přesouvání symbolických linků funguje trochu odlišně. Když kopírujete symbolický link, objeví se jeho kopie na novém místě. Pokud však adresa v symbolickém linku byla relativní (../soubor.txt), link přestane platit.

Linky vytváříme příkazem ln (viz man ln). Pokud nepoužijeme parametr -s, vznikne pevný link. Symbolický link vytvoříme třeba takto: ln -s cesta/k/sou­boru/soubor.txt. Takto nám vznikne v aktuálním adresáři symbolický link na soubor.txt. Příkaz ln cesta/k/soubo­ru/soubor.txt linky/soubor.txt by vytvořil pevný link na stejný soubor v adresáři linky s názvem soubor.txt. Pevné linky není možné vytvářet na adresáře. Důvodem je nebezpečí zacyklení souborového systému. Pevné linky ani nemohou směřovat mezi různými file systémy. Například pokud byste chtěli udělat pevný link do svého domovského adresáře na soubor na dosovském disku, máte smůlu. Pevný link i jeho cíl musí být vždy na stejném oddílu. Práva symbolických linků nemusíte nastavovat. Vždy se totiž používají práva cílového souboru. Takže jestli jste uvažovali o něčem jako ln -s /etc/passwd, tak na to rovnou zapomeňte.

A nyní se konečně dostávám k modularitě příkazů pod Unixem. Linuxové příkazy je totiž možné velice jednoduše skládat za sebe. Výstup prvního programu slouží jako vstup dalšího programu, jehož výstup čte třetí program .. Možná si stále ještě neuvědomujete, jak mocné je toto schéma, ale doufám, že po přečtení následujících odstavců si je zalíbíte a nad nějakou pseudokopií od Microsoftu budete po právu ohrnovat nos.

Začněme ale od úplných základů. Jak již jistě dobře víte, příkaz ls slouží pro výpis obsahu aktuálního adresáře. (No, on se dá použít i na výpis obsahu libovolného adresáře nebo pro získání informací o vybraném souboru, ale to nebudu probírat. Pokud byste měli zájem, napište mi.) Jenže u některých adresářů se výpis nevejde na jednu obrazovku. Co teď? Pokud jste pod Xy, nejspíš zkusíte scrollbar (posouvací lištu na kraji). Pod terminálem existuje podobný trik – mačkání klávesy Page Up za současného stisku klávesy Shift. V některých jádrech / distribucích jste se takhle mohli dostat až k obrazovkám z Biosu, RedHat > 6 takovou vzdálenost nepodporuje. Bohužel netuším, jak tato vlastnost linuxové konzole funguje, ani jak se omezuje historie a proč start Xů zruší tuto paměť. Snad mi to někdo vysvětlí v diskusi pod článkem …

Každopádně ale existuje ještě jiné řešení a tím je přesměrování výstupu příkazu ls skrze rouru do příkazu more. Zkuste například ls /dev | more. Zobrazí se vám první stránka výstupu a na posledním řádku je indikováno, že můžete pokračovat dále nápisem Více (případně More, záleží na lokalizaci). Stiskem mezerníku se objeví další stránka, enter odscrolluje jen o jeden řádek. Výpis ukončíte písmenem q. More bohužel podporuje scrollování jediným směrem. Proto jako součást GNU aplikací vznikla jeho obdoba less.

root_podpora

Znalci angličtiny určitě ocení specifický humor autorů programu, který je schopnější než more (česky: více) a nazvali jej less (česky: méně). Pokud tedy změníte příkaz takto: ls /dev | less, získáte mnohem větší možnost pohybu. Less vám umožní jít dopředu i zpět, ovládá se nejen mezerníkem a enterem, ale můžete použít i šipky dolů a nahoru a klávesy Page Down a Page Up. Navíc podporuje i vyhledávání, takže když napíšete dopředné lomítko a text, less se pokusí najít zvolený text a zvýrazní jej tučným písmem. No, more to sice umí taky, ale less je lepší :-). Jenže less je hlavně GNU program a na komerčních Unixech jej většinou nenajdete. Tam si proto vzpomeňte na more. Oba programy je možné použít také pro prohlížení obsahu souboru. Prostě napíšete třeba less /etc/passwd a hned víte, kdo další má na počítači konto.

Hraní si s zřetězením příkazů pomocí roury bude pokračovat příště. Pokud si chcete zaexperimentovat sami, zapamatujte si znak |, kterým se oddělují jednotlivé příkazy. Zkuste si například napsat sekvenci příkazů, která vypíše tři přihlášené uživatele. Nápověda: man w, man tail.

Byl pro vás článek přínosný?