Pracujeme v Linuxe, 2. časť


Súbory, všade samé súbory...

Akiste ste pri prechádzke systémom zistili, že je plný, ba preplnený súbormi. To je v poriadku a je to správne. Každý súbor má svoje pevné miesto a využitie. Bez problémov vieme zistiť, ktorému programu ktorý súbor patrí. V systéme máme teda absolútny prehľad, na rozdiel od Windows95, kde sa nezriedka topíme v množstve knižníc, nápovedných a iných súborov.

Linux, ako každý Unixovský systém, je založený na súboroch. Chcem tým povedať, že aj na zariadenia v adresári /dev, časti jadra v adresári /proc, symbolické a pevné linky, znakové a blokové špeciálne súbory, na sockety (zásuvky) a dokonca aj na adresáre sa možno pozerať ako na súbory a aplikovať na ne príkazy OS a/alebo programovacích jazykov.

Druhy súborov

Ako som v úvode spomenul, v Linuxe existuje viacero druhov súborov, pričom každý má svoje osobité použitie.

  1. Bežné súbory – sú súbory, ako ich poznáme v DOSe, prípadne W95. Obsahujú buď čitateľný alebo binárny kód.
  2. Linky – sú špeciálne súbory. Dobrým analógom sú zástupcovia (shortcuts) vo W95. Vždy predstavujú zástupcu už existujúceho súboru. Poznáme dva druhy linkov – pevné (hard link) a symbolické (symbolic link). Symbolické linky ukazujú na konkrétny súbor a strácajú platnosť, ak pôvodný súbor zmažeme. Pevné linky ukazujú priamo na určité miesto na disku, takže keď pôvodný súbor zmažeme, pevný link je stále v poriadku (lebo sa nepremazáva celý súbor, len alokačný záznam). Pevný link ukazuje na rovnaké číslo inode (alokačná jednotka) ako pôvodný súbor, zatiaľ čo symbolický sa vzťahuje k menu pôvodného súboru. Pevný link nemôže však ukazovať na adresár. V tomto prípade je jediným riešením symbolický link. Zástupcovia vo W95 sú podobné symbolickým linkom, aj keď priamo nimi nie sú.
  3. Blokové a znakové zariadenia – nachádzajú sa takmer výlučne v adresári /dev. Sú schopné ukazovať na konkrétne hardwareové zariadenia. Znakové zariadenia špecifikujú najčastejšie porty (prenos informácií po znakoch), blokové zariadenia zastupujú najmä dátové nosiče – diskety, disky, SCSI rozhrania a podobne.
  4. Pomenované spojky (named pipes) a zásuvky (sockety) – špeciálne súbory umožňujúce komunikáciu medzi procesmi.

 

Práca so súbormi a adresármi

Vypísanie súborov adresára dosiahneme pomocou príkazu ls. Ako vyzerá samotný listing, vidíte na časti výpisu môjho adresára:

00_index.txt mbox.1.gz               rar202.exe
Mail         mod_czech_2_4_0_fix.tgz sdraw3.cfg

Ls automaticky zarovná výstup do viacerých stĺpcov, podľa dĺžky mien súborov. Ak máte súbory s veľmi dlhými názvami, dostanete výstup vo dvoch stĺpcoch.

Samozrejme, ls je schopný o súboroch poskytnúť veľmi veľa informácií. Výpis najdôležitejších parametrov pre ls nájdete v tabuľke. Skúste napríklad ls –l. U mňa to vyzerá tako:

frcatel:~$ ls -l
total 17574
-rw-r--r-- 1 peterp peterp 6435   Feb 10 13:49 00_index.txt
drwx------ 2 peterp peterp 1024   Oct 22 17:37 Mail
-rw-r--r-- 1 peterp peterp 10742  Dec 29 10:40 Readme.txt
-rw-r--r-- 1 peterp peterp 460327 Feb 3  17:02 TBAV804.ZIP
drwxrwxr-x 2 peterp peterp 1024   Feb 3  15:39 bin
-rwxr-sr-- 1 root   modem  2547   Feb 28 20:14 vytoc
-rw------- 1 peterp peterp 187493 Feb 28 13:17 debian-lists

V poradí zľava doprava dostávame informácie o type a právach aplikovaných na súbor, o počte pevných linkov vzťahujúcich sa ten-ktorý súbor, o vlastníkovi, skupine, veľkosti v bajtoch, o dátume a čase poslednej modifikácie a o mene súboru.

Zastavím sa trochu pri prvom stĺpci vľavo. Prvé písmeno v ňom určuje typ súboru. Znak “-” určuje, že sa jedná o obyčajný súbor. d označuje adresár, l znamená symbolický link, c špecifikuje znakové zariadenie, b blokové zariadenie, p označuje spojku (named pipe) a s zásuvku.

Po špecifikácii typu súboru nasleduje popis práv (permissions) pre prístup a spúšťanie. Prvá trojica písmen (po type súboru, samozrejme) označuje práva vlastníka, druhá trojica popisuje práva skupiny a tretia trojica určuje práva tých užívateľov, ktorí nie sú v skupine. r označuje prístup pre čítanie, w pre zápis a x pre spúšťanie súboru. Všimnite si dva súbory z môjho adresára, napríklad Readme.txt a debian-lists. Readme.txt môžu čítať všetci, no len vlastník doň môže zapisovať a nikto ho nemôže spúšťať. Čo sa týka súboru debian-lists, vlastník ho môže čítať a zapisovať doň, ináč nikto tento súbor neprečíta ani neprepíše.

Pri adresároch majú všetky atribúty veľmi podobný význam. r umožní čítať obsah adresára (teda zistiť, čo obsahuje), w povolí zápis do adresára a x umožní prístup do adresára. Chcem upozorniť, že medzi r a x je rozdiel – ak má adresár nastavený len r bit, môžete si nechať urobiť listing tohto adresára, ale nemôžete doň vojsť a nemáte prístup k jeho súborom. Naopak, ak má adresár nastavený len x bit, nemôžete si nechať vypísať jeho obsah, ale zato doň môžete vojsť a ak odniekiaľ presne viete, aký súbor sa v ňom nachádza, môžete si ho pozrieť (pravda, ak to práva samotného súboru povoľujú). Je to trošku zapletené – vyskúšajte si to sami.

Existujú aj ďalšie práva, ktoré sú v listingu reprezentované ďalšími písmenami. Najčastejšie sa môžete stretnúť s písmenami s a t. S znamená, že súboru je pridelený tzv. suid bit, prípadne sgid bit. Ten, kto spustí tento súbor, dostane pre jeho beh plné práva jeho vlastníka. Obyčajne totiž spustený program má práva podľa toho, kto ho spustil. Pozrite si v listingu súbor vytoc. Jeho vlastníkom je root a súbor je v skupine modem. Skupina má nastavený s-bit. Ten, kto je zaradený do skupiny modem a spustí vytoc, má pre jeho beh práva roota - vlastníka. S-bit sa používa hlavne na udelenie privilégií pre tie programy, ktoré majú byť prístupné viacerým neprivilegovaným užívateľom, a predsa musia v systéme, povedzme, meniť tie nastavenia, ktorými môže “hýbať” len správca. S-bit môžeme prideliť len vlastníkovi (suid) a skupine (sgid), ostatným nie.

T označuje tzv. sticky bit, “lepavosť” súboru. Znie to všelijako, ale podstata je prozaická: časti programu po jeho prvom spustení zostanú v RAM, a keď sa bude štartovať druhýkrát, nemusí sa nahrávať z disku, takže jeho spustenie potrvá omnoho kratšie. Pri používaní tohto bitu radím byť veľmi striedmy – môže sa stať, že sa program už do RAM nezmestí, a preto sa uloží do odkladacej pamäte na disk. A to už zrýchlenie neprinesie.

Sticky bit pre adresáre má už iný význam – pokiaľ je nastavený, tak z daného adresára môže užívateľ mazať len tie súbory, ktoré sú jeho, bez ohľadu na zápisové práva daného adresára.

Zmena práv

Na zmenu práv pre súbor slúži príkaz chmod. Syntax je veľmi jednoduchá:

chmod [augo] [+-=] [rwxst] meno_súboru

Znaky v prvej zátvorke určujú, komu budeme “manipulovať” s právami. a zmení práva všetkým, u vlastníkovi súboru, g skupine a o užívateľom mimo skupiny. Môžeme meniť práva viacerým subjektom naraz – napríklad skupine a súčasne aj ostatným užívateľom. Ďalej, znamienka “ a “–” označujú pridanie či odňatie toho-ktorého práva. Znak “=” nastaví práve tie práva, ktoré sme uviedli, ostatné zmaže. A nakoniec prichádza špecifikácia samotného práva, ktoré meníme.

Iný spôsob, ako zadať chmodu, komu má čo zmeniť, je pomocou čísla. Je to praktickejšie ako určovanie zmien pomocou písmen. Totiž nemôžeme naraz nezávisle od seba meniť práva povedzme skupiny a ostatných, ak zmeny určujeme písmenovo. Potrebovali by sme teda dva príkazy za sebou. Určenie pomocou čísel je naopak veľmi výhodné - jedno číslo je schopné jednoznačne naraz popísať všetky práva súboru. Číslo má 4 cifry, ak ich zadáme menej, tak sa automaticky pred číslo doplnia nuly. Každú cifru čísla určíme prostým sčítaním 4, 2 a 1 podľa nasledujúceho pravidla: prvá cifra určuje suid bit (4), sgid bit (2) a sticky bit (1). Ak z týchto práv chceme udeliť viaceré, zodpovedajúce čísla sčítame. Podobne je to pri druhej, tretej i štvrtej cifre, no tam majú čísla 4,2,1 iný význam: čítanie (4), zápis (2) a spúšťanie (1), pričom druhá cifra špecifikuje práva vlastníka, tretia hovorí o skupine a štvrtá o ostatných užívateľoch.

Napríklad máme súbor TBAV804.ZIP. Jeho práva vyzerajú takto:

-rw-r--r-- 1 peterp peterp 460327 Feb 3 17:02 TBAV804.ZIP

Predstavme si, že chceme členom skupiny peterp pridať zápisové právo a ostatným užívateľom zatrhnúť akékoľvek práva. Potom by príkazy vyzerali:

chmod g+w TBAV804.ZIP

chmod o-r TBAV804.ZIP

alebo

chmod 0660

Zmena vlastníka a skupiny súboru

V prípade, že potrebujeme zmeniť vlastníka súboru, použijeme príkaz chown. Príkaz však môže využívať len root. Syntax je jednoduchá:

chown nový_vlastník.nová_skupina meno_súboru

Ak za meno nového vlastníka nedáme bodku a novú skupinu, zachová sa existujúca. Ak bodku napíšeme, ale meno skupiny neuvedieme, systém ju automaticky zmení na vlastnú skupinu nového vlastníka (tzn., že ak nový vlastník je niekto, tak aj skupina bude niekto).

Ak potrebujeme len zmeniť skupinu súboru bez zmeny vlastníka, použijeme príkaz chgrp. Samozrejme, súboru môžeme prideliť len takú skupinu, ktorej sme členmi. Syntax:

chgrp nová_skupina meno_súboru.

Programy chmod, chown aj chgrp majú užitočný parameter –R. Je to rekurzívna zmena na všetkých podadresároch so všetkými súbormi, ktoré obsahujú. Ak teda ideme zmeniť prístupové práva, vlastníka alebo skupinu vo veľkej adresárovej štruktúre, s veľkou výhodou použijeme práve –R a nemusíme sa “unúvať” na každý adresár osobitne.

 

Ďalšie bežné operácie

Povedali sme si veľa o vlastnostiach súborov. No okrem toho, že im všakovako pomeníme vlastnosti, je treba niekedy ich aj presunúť, skopírovať, vytvoriť či vymazať...

Súbory sa kopírujú pomocou príkazu cp. Poradie parametrov je zdrojový súbor – cieľový súbor. Presun súborov realizujeme príkazom mv, poradie parametrov je také isté ako pri cp. Súbory sa vymazávajú pomocou rm. Pokiaľ nás popadla bláznivá hodinka a rozhodli sme sa zmazať nejakú veľkú adresárovú vetvu, použijeme rm –rf meno_adresára. Parameter r označuje rekurzívne mazanie a f prinúti rm neklásť nijaké otázky, len mazať. POUŽÍVAŤ OPATRNE!!!

Čo sa týka adresárov, vytvárajú sa použitím mkdir, vymažú sa rmdir (ak sú prázdne).

A vytváranie súborov – to si povieme nabudúce, ale ak by ste už teraz nemali trpezlivosť a veľmi chceli obohatiť váš domovský adresár o vlastné súbory, vyskúšajte príkaz cat > meno_súboru. Keď dopíšete posledný znak, na ukončenie a uloženie súboru použite kombináciu <Ctrl><D>.

Na ďalšie Linuxenie sa teší

Peter Palúch ( peterp@frcatel.utc.sk )

Parameter Význam
a Vypíše všetky súbory, vrátane tých, čo začínajú znakom “ . ”
b Neštandardné znaky v názve súborov vypíše ako ESC sekvenciu
d Adresáre vypíše ako obyčajné súbory a neuvedie ich obsah
k Veľkosti súborov bude vypíše v kilobajtoch
l V listingu uvedie typ, práva, počet hard linkov, vlastníka, skupinu, veľkosť, čas a meno
m Súbory vypíše do riadkov a oddelí čiarkami
n Namiesto mien vlastníka a skupiny uvedie číslo vlastníka (UID) a skupiny (GID)
A Podobne ako parameter a, vylúči však súbory, čo začínajú znakom “ . ”
F Ku každému súboru v listingu pridá znak špecifikujúci typ súboru (viď man ls)
R Rekurzívne vypíše obsah všetkých podadresárov daného adresára
I reťazec Nevypíše tie súbory, ktorých meno obsahuje zadaný reťazec
--color=? Nastavuje použitie farieb. Namiesto otáznika treba zadať buď none (nikdy), auto (sám zváži vhodnosť použitia farieb), always (vždy).

Tabuľka 1 : parametre programu ls.

(vyšlo-vyjde v časopise PCRevue apríl 1998)


[Pridať príspevok k článku][Verzia pre tlač]