Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Informace
Obcování s ďáblem 4 - Další práce se soubory
16. srpna 2001, 00.00 | Minule jsme se naučili využívat základní "triky" shellu pro specifikaci souborů - hvězdičku, hranaté závorky a podobně. Dnes si o nich řekneme malinko více, a podíváme se i na pár dalších příkazů.
Minule jsme se naučili využívat základní "triky" shellu pro specifikaci souborů - hvězdičku, hranaté závorky a podobně. Dnes si o nich řekneme malinko více, a podíváme se i na pár dalších příkazů.
Kdo se o to stará?
Pro dobré pochopení funkce shellu je důležité si uvědomit, že výše zmíněné "finty" interpretuje sám shell, a nikoli konkrétní příkazy (jako tomu je např. v DOSu). Shell tedy načte zadaný řádek, sám v něm najde všechny hvězdičky, hranaté závorky, tildy a podobně, převede je na odpovídající soubory, a ty teprve předá příkazu. Nejlépe je to vidět v případě, že si sami napíšeme nějaký jednoduchý prográmek; pro ty, kdo znají jazyk C, uvedu jednoduchý příklad - ostatní musí mému tvrzení prostě věřit:
Příkaz cat zobrazí obsah souboru, příkaz cc přeloží zdrojový text do spustitelného tvaru, který se (v našem případě) spustí zapsáním záhadného nápisu "./a.out" (proč právě tak a ne jinak si ukážeme později):
292 /tmp\> cat test.C
#include
void main(int argc,char *argv[]) {
for (int i=1;i<argc;i++) printf("arg %d -> %s\n",i,argv[i]);
}
293 /tmp\> cc test.C
294 /tmp\> ./a.out /etc/*.conf
arg 1 -> /etc/bootstrap.conf
arg 2 -> /etc/kern_loader.conf
arg 3 -> /etc/krb.conf
arg 4 -> /etc/krb5.conf
295 /tmp\>
Z toho vyplývá několik důsledků, jež stojí za podrobnější ukázku:
• již víme, že zadáme-li příkazu ls jméno souboru, vypíše daný soubor; zadáme-li mu však jméno složky, vypíše její obsah. To je samozřejmě správné, někdy však může být výsledek překvapivý. Ve složce "/etc" je např. vnořená složka "mail" a soubor "mail.rc". Co myslíte, že vypíše příkaz "ls mai*"? Obvykle začátečníci očekávají něco jako
mail mail.rc
Namísto toho se vypíše informace o souboru "mail.rc", a obsah složky "mail":
307 /etc\> ls mai*
mail.rc
mail:
local-host-names sendmail.cf
308 /etc\>
Je tomu tak proto, že ls, jak jsme uvedli nahoře, pro jméno souboru vypíše tento soubor, avšak pro jméno složky její obsah.
• můžeme klidně používat speciální znaky v kterémkoli příkazu - pokud např. zvolíme takovou specifikaci, že jejím výsledkem je jediné jméno složky, můžeme ji klidně využít třeba v příkazu cd (jediné jméno v "/etc", jež končí písmenem 'l', je jméno složky "mail"):
310 /etc\> cd *l
311 /etc/mail\>
• chceme-li v některém parametru, který není jménem souboru, použít některý ze speciálních znaků, musíme jej označit obráceným lomítkem, případně ukrýt do uvozovek či apostrofů. Ukažme si to na příkazu echo, který prostě opíše své argumenty:
324 /etc\> echo Takhle neni zadny problem
Takhle neni zadny problem
325 /etc\> echo Takhle * ANO *
Takhle afpovertcp.cfg bootstrap.conf crontab csh.cshrc csh.login csh.logout daily dumpdates find.codes fstab.hd fstab.rd fstab.sd ftpusers gdb.conf gettytab group hostconfig hostconfig~ hosts hosts.equiv hosts.lpd httpd iftab inetd.conf inetd.conf~ kcpassword kern_loader.conf krb.conf krb.realms krb5.conf localtime magic mail mail.rc man.conf master.passwd monthly motd networks passwd printcap protocols rc rc.boot rc.common resolv.conf rmtab rpc services shells slpda.conf slpsa.conf ssh_config ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_key ssh_host_key.pub ssh_prng_cmds sshd_config sudoers syslog.conf ttys ttys.installer weekly wgetrc xtab zshrc ANO afpovertcp.cfg bootstrap.conf crontab csh.cshrc csh.login csh.logout daily dumpdates find.codes fstab.hd fstab.rd fstab.sd ftpusers gdb.conf gettytab group hostconfig hostconfig~ hosts hosts.equiv hosts.lpd httpd iftab inetd.conf inetd.conf~ kcpassword kern_loader.conf krb.conf krb.realms krb5.conf localtime magic mail mail.rc man.conf master.passwd monthly motd networks passwd printcap protocols rc rc.boot rc.common resolv.conf rmtab rpc services shells slpda.conf slpsa.conf ssh_config ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_key ssh_host_key.pub ssh_prng_cmds sshd_config sudoers syslog.conf ttys ttys.installer weekly wgetrc xtab zshrc
326 /etc\> echo "Takhle * ANO *"
Takhle * ANO *
327 /Mac_OS_X/etc\> echo [tohle take neprojde]
zsh: bad pattern: [tohle
328 /Mac_OS_X/etc\> echo \[tohle ano\]
[tohle ano]
329 /Mac_OS_X/etc\>
Na řádce 325 se shell pokusil interpretovat hvězdičky jako specifikace souborů - jak je vidět, velmi úspěšně ;)
Další možnosti...
Naprostá většina příkazů toho umí mnohem více; v příkazovém řádku je zvykem používat pro speciální služby tzv. přepínače. To jsou obvykle jednopísmenné zkratky, uvedené za pomlčkou (např. "ls -l" nebo "pwd -P"). Pokud chceme použít více přepínačů najednou, můžeme je uvést zvlášť nebo dohromady - příkazům je to jedno: "ls -la" a "ls -l -a" je jedno a totéž.
...příkazu cd
Příkaz cd rozumí tomu nejjednoduššímu přepínači vůbec - samotné pomlčce. "cd -" přejde do složky, ve které jsme byli minule:
356 /tmp\> cd /etc
357 /etc\> cd -
/tmp
358 /tmp\> cd -
/etc
359 /etc\> cd -
/tmp
360 /tmp\>
Kromě toho můžeme použít příkaz cd vůbec bez parametrů, a pak přejde do naší domovské složky (stejně jako kdybychom napsali "cd ~").
...příkazu ls
Z mnoha přepínačů, jimž příkaz ls rozumí, se zatím seznámíme jen se třemi nejpoužívanějšími: -A ("All") zajistí, že příkaz ls vypíše všechny soubory a složky, včetně těch, jež jsou normálně skryty (v unixu k tomu neslouží žádný speciální atribut, ale triviální pravidlo: cokoli začíná tečkou, je skryto):
374 /tmp\> cd
375 ~\> ls
4K78_CzKbd/ Desktop/ Movies/ Projects/ Sites/ pokus/
4K78_CzKbd.tar.gz Documents/ Music/ Public/ UnassignedYet/
Applications/ Library/ Pictures/ RootTemp@ damnit/
376 ~\> ls -A
.CFUserTextEncoding .tcsh_history Documents/ Projects/ damnit/
.DS_Store 4K78_CzKbd/ Library/ Public/ pokus/
.FBCIndex 4K78_CzKbd.tar.gz Movies/ RootTemp@
.FBCLockFolder/ Applications/ Music/ Sites/
.Trash/ Desktop/ Pictures/ UnassignedYet/
377 ~\>
Přepínač -d ("Directories") zajistí, že ls nebude vypisovat obsah složek, ale jen jejich jména. Podívejte se nahoru na příklad na řádce 307, a srovnejte jej s následujícím řádkem 380:
380 /etc\> ls -d mai*
mail/ mail.rc
381 /etc\>
Prozatím poslední - ale asi nejčastěji využívaný - je přepínač -l ("Long format"). Ten pro každý zobrazený soubor vypíše řadu dalších zajímavých informací:
381 /etc\> ls -ld mai*
drwxr-xr-x 1 root wheel 1056 Feb 24 09:54 mail/
-rw-r-r- 1 root wheel 105 Feb 17 16:57 mail.rc
382 /etc\>
První písmenko na řádku určuje o co jde: 'd' je složka ("Directory"), '-' je obyčejný soubor, 'l' je link ("link") - linkům se budeme podrobně věnovat příště, kdy si také řekneme proč je 'link' něco jiného, než 'zástupce' ("alias"), a co znamená ta jednička před "root" - a ostatní možnosti v praxi hnedtak neuvidíte.
Následujících devět písmenek určuje přístupová práva. I ta si musíme nechat na jindy, protože jde o poměrně složitý systém. O té "jedničce" za nimi jsme se již zmínili. Pak následuje jméno vlastníka, jméno skupiny, do které soubor či složka patří, velikost v bytech (u složek nemá valný smysl), datum a čas poslední modifikace, a jméno souboru nebo složky.
Na co se můžeme těšit?
Příště se pustíme do příkazů pro skutečnou práci se soubory: naučíme se měnit jejich jména, kopírovat je a vytvářet linky - a vysvětlíme si podrobně jak fungují, protože to je věc, s níž má řada uživatelů velké problémy.
Obsah seriálu (více o seriálu):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová