Obcování s ďáblem 4 - Další práce se soubory - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Seriály

Více seriálů



Software

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):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Tipy a Triky  

 » Rubriky  » Začínáme s  

 » Rubriky  » Software  

 

 

 

Nejčtenější články
Nejlépe hodnocené články
Apple kurzy

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: