Unix alatt az idők során kialakult egy konvencionális könyvtár-struktúra:
ez ugyan (kevés kivételtől eltekintve) nem kötelező érvényű, de
ha máshogy alakítjuk gépünk könyvtárszerkezetét általában csak
saját dolgunkat nehezítjük vele. Kisebb eltérések persze mindig akadnak:
mi, amint eddig is tettük, a "Slackware" nevű Linux disztribúció
konvencióit követjük.
Minden a / (root, vagyis gyökér) könyvtárból indul. Első könyvtár
a /bin, ahol a rendszer futtatáshoz, a rendszer felállásához
legszükségesebb futtatható állományok vannak: a "bash", a "cat", a "ps"
és így tovább.
Linux sajátosság a /boot könyvtár, ahol a Linux boot-vezérlő program,
a LILO (Linux Loader) adatfile-jai kaptak helyet.
Következő a /dev, ahol a rendszer erőforrásait reprezentáló speciális
ún. eszköz (device) specifikus file-okat találhatjuk.
A /etc alatt helyezkednek el a rendszer-konfigurációs file-ok, illetve
Linux alatt az /etc/rc.d könyvtárban vannak a rendszer indulásakor
automatikusan lefutó file-ok. Az /etc/skel konyvtár egy "skeleton"
(csontváz) könyvtár a létrehozandó felhasználók számára: ha a
standard, Slackware-hez mellékelt programokkal hozunk létre új account-okat
a gépen, ennek a könyvtárnak a tartalma másolódik be a home
könyvtárukba.
/home könyvtár alatt találhatók a felhasználók "home" könyvtárai,
az eddigi példákban szerepelt /usr/users régi, BSD rendszerekből
származó csökevény.
A következő könyvtár a /lib: Linux alatt itt található a dinamikus
programkönyvtárak nagy része.
Minden Unix filesystem-en található egy /lost+found alkönyvtár: ha
a filesystem megsérül, és a helyreállító program olyan file-okat
talál rajta, amelyeknek könyvtárstruktúrába helyezéséhez nincs
elég információja, ide teszi őket.
Rendszerint van még egy /mnt alkönyvtár is: általában ide szokás
az ideiglenes (például floppy, CD-ROM) filesystem-eket illeszteni (mount).
Szintén Linux sajátosság (illetve más, újabb Unix-okaban is előfordul
már) a /proc alkönyvtár: itt nem "igazi" file-ok vannak, hanem a rendszer,
a folyamatok állapotát reprezentáló "álfile-ok". Például a
/proc/meminfo kiolvasásával ("cat /proc/meminfo ") a "free" parancséhoz
hasonló kimenetet kaphatunk.
A /root könyvtár Slackware-ben a rendszergazda home-könyvtára.
Következő fontos könyvtár a /sbin ebben a rendszergazda számára
fontos, rendszeradminisztráláshoz szükséges futtatható file-okat
találjuk.
A /tmp könyvtár az, ahova mindenkinek van írásjoga, ideiglenes file-ok
tárolására való. Mivel Unix alatt nagyon sok program használja a /tmp
könyvtárat ideiglenes file-jainak tárolására, mindig ügyeljünk arra,
hogy itt legyen szabad hely, különben egész alapvető programok
nem lesznek képesek futni, és nagyon furcsa dolgok történhetnek.
/usr könyvtár alatt Unix-okban tradicionálisan a rendszer futtatásához
nem feltétlenül szükséges, "minden egyéb" file helyezkedik el: a
/usr is alatt is van /usr/bin, /usr/lib, /usr/etc, /usr/sbin
könyvtár, ahol a különböző installált szoftverek futtatható és
adatfile-jai helyezkednek el. (Adatfile-ok rendszerint a /usr/lib alatt.)
A /usr/man alatt találhatók a "man" parancs adatfile-jai, a /usr/include
alatt pedig a rendszer C header file-jai kaptak helyet.
A /usr/X* könyvtárakban az XFree grafikus rendszer file-jai találhatók.
A /usr/local alatt általában megismétlődik egy, a /usr-éhez hasonló
könyvtárstruktúra: mivel a /usr/bin-ben lévő programok rendszerint
az operációs rendszerrel együtt érkeznek, tágabb értelemben véve
annak részeinek tekinthetők, ezért a rendszergazdák nem szívesen
keverik közéjük a "lokálisan" (rendszerint forrásból) felinstallált
programokat - és a /usr/local alá helyezik őket. Így van ez Linux
alatt is. Említést érdemel még a /usr/src könyvtár is: értelemszerűen
programforrásokat szokás ide tenni, Linux alatt pedig mindig megtalálható
itt a kernel (tehát maga a Linux) forrása is.
A főkönyvtárból nyílik még a /var alkönyvtár, amely mindenféle, a
rendszer működésével kapcsolatos "aktuális" file-t tárol: például
a /var/adm könyvtárban vannak a különféle "napló" (log) file-ok,
amelyek a rendszer eseményeit rögzítik. A /var/spool alatt pedig a
többek között a nyomtatókezelő és a levelező alrendszer ideiglenes
file-jai találhatók meg. A /var alatt lévő file-ok
a rendszergazdának (vagy még neki sem, rendszerprogramoknak) szólnak,
átlag felhasználó nem sok érdekeset találhat itt.
Végezetül, a gyökérkönyvtárban található még a /vmlinuz, vagy
/zImage, vagy /vmunix nevű file, ami a kernelt tartalmazza: innét
töltődik be boot-oláskor.
A /dev (devices - eszközök) alkönyvtárban találhatók a rendszer-
erőforrásokat reprezentáló speciális file-ok. Ezek teremtik meg a
kapcsolatot a kernel "device driver"-nek (eszközmeghajtó) nevezett, az
egyes fizikai eszközök kezeléséért felelős komponensei és a rendszer
egyéb részei között. Kétféle eszközmeghajtót különböztetünk meg:
a karakteres ("c") és a blokkos ("b") típusút, annak megfelelően, hogy az
általa reprezentált eszköz milyen szervezésű. Egy winchester, vagy floppy
eszközmeghajtója blokkos, míg például egy soros vonalat, vagy terminált
reprezentáló file-hoz tartozó eszközmeghajtó karakteres típusú.
Lássuk röviden a föbb file-csoportokat a /dev alatt, illetve egy-két
példán keresztül azt, hogyan használhatjuk őket:
- /dev/audio
- Ha valamilyen hangkártya vagy más zajkeltő szerkezet van
a kernelbe konfigurálva, akkor a .au formátumú file-okat ide
kiírva meghallgathatjuk őket. Példa: "cat x.au >/dev/audio "
Ha a hangkártya digitalizálásra is képes, ez a file olvaható is.
- /dev/cdrom
- Ez általában egy link a bonyolultabb nevű, valódi CD-ROM
speciális file-ra. Hasonlóan használható mint egy winchester
speciális file.
- /dev/cua*
- A soros vonala(ka)t jelentő speciális file-ok. Írásuk
vagy olvasásuk küldést/vételt jelent a megfelelő vonalon.
- /dev/fd*
- A floppy diszkeket reprezentálják. A fd0 kezdetű file-ok
az A floppyra vonatkoznak, a fd1 kezdetűek a B-re. Mount-olásnál
kell ezeket a neveket használnunk, vagy pedig akkor, ha a floppy-n
lévő image-t (összes szektort) egy file-ba akarjuk olvasni. Erre
használhatjuk például a "cat floppyimage" parancsot.
Blokkos eszközök írása/olvasásakor érdemesebb a "cat" helyett
a "dd" parancsot használni: működése hasonló, csak bővebben
paraméterezhető, és blokk-műveletekre optimalizálható. Például:
az előző file visszaírása az 1.44MB-s B lemezre:
"dd bs=512 /dev/fd1H1440". (bs=block size)
- /dev/hd*
- A rendszerben lévő AT buszos winchesterek: a /dev/hda az
első winchestert jelenti, /dev/hdb a másodikat. Ha a gépben két
IDE vezérlő vagy egy EIDE vezérlő van, akkor a többi diszkhez a
/dev/hd1[ab] néven férhetünk hozzá. Ha ezeket a file-neveket
számokkal folytatjuk, az egyes diszkeken lévő partíciókhoz jutunk,
például /dev/hda1,/dev/hda2
- /dev/midi, mixer
- Hangkártyához tartozó file-ok, a /dev/midi értelemszerűen midi file-ok kezelésére.
- /dev/mouse,modem
- Általában ezek linkek valamely soros portra.
- /dev/pty*
- Pszeudo-terminál vonalakat reprezentáló speciális file-ok.
- /dev/sd*
- SCSI diszkek.
- /dev/tty*
- A (virtuális) konzol terminálvonalai.
- /dev/ttyS*
- Soros vonali terminálok.
- /dev/null
- Ez egy igen érdekes file: minden beleírt adatot elnyel, és
olvasáskor mindig filevége-jelet ad. Akkor hasznos, ha egy parancs
kimenetét el akarjuk nyomni. Például, ha nem akarjuk a
hibaüzeneteket látni: "parancs 2>/dev/null".
- /dev/zero
- Az előzőhöz hasonló file, azzal a különbséggel, hogy
olvasáskor végtelen sok 0 értékű byte-ot ad vissza.
A "dd 10kfile bs=1k count=10" utasítással például
létrehozhatunk egy 10Kbyte hosszú, 10kfile nevű csupa 0-ból
álló file-t.
Mint már korábban szó volt róla, a Linux többféle filerendszer-formátumot
is támogat. Többféle Unix-os filesystem-et:
- minix
- amelyet egy régebbi Unix implementációtól örökölt,
- ext
- (extended) filesystem formátumot, amely az előző
továbbfejlesztése
- ext2
- second extended, amely szintén az előző továbbfejlesztése,
jelenleg ez a legnagyobb teljesítményű Linuxos filesystem formátum, szinte
minden Linux rendszeren ezt használják
- xiafs
- amely egy, Frank Xia által kifejlesztett filesystem: mára az
"ext2" már teljesen kiszorította
- /proc
- amely filerendszerként van implementálva, az
egységesebb kezelés érdekében
Ezek a filesystem formátumok főleg teljesítményben (sebesség, maximális
méret, létrehozható maximális file-méret, maximális file-név hossz stb.)
térnek el egymástól: jelenleg a legjobb az "ext2", amelyet Remy Card
fejlesztett ki (és fejleszt tovább folyamatosan).
További, Linux által támogatott filesystem formátumok:
- msdos
- MS-DOS-os, FAT formátumú partíciók, floppy-k kezelésére
- umsdos
- speciális filesystem, segítségével DOS-os, FAT filesystem-en
hozhatunk létre "igazi" Unix-os filerendszert. (Vagyis biztosítja a file-okhoz
tartozó Unix-os plusz információ kezelését.)
- NFS
- Network File System: TCP/IP hálózati környezetben elosztott
hálózati filerendszert hozhatunk létre segítségével.
- ISO9660
- a CD-ROM-ok file formátuma
- HPFS
- (egyenlőre csak olvasható) OS/2 HPFS filerendszer
- SYSV/Coherent
- egy újabb Unix-os filerendszer.
Az itt felsorolt formátumok a standard Linux kernel részei: kiegészítések
(ún. patch-ek) formájában létezik még sok más, ritkábban használt
filesystem formátum támogatása is (további Unix-os file-rendszereké,
például BSD "ufs", illetve léteznek Linuxra is röptömörítő szoftverek).
Nem Unix-os file-rendszereket csak látszólag tudunk Unix-osként kezelni:
"msdos" filesystem-en nem tudunk például linket létrehozni, file-tulajdonost
váltani stb. File-okat írni, olvasni végrehajtani azonban ugyanúgy lehet.
"Hosszú" file-neveket szintén nem tudunk annak kezelésére alkalmatlan
filesystem-eken létrehozni.
Filesystem-et létrehozni (formázni) a "mkfs" utasítás családdal lehet:
"ext2" filerendszert a "b" winchester második partíciójára például a
"mke2fs /dev/hdb2" paranccsal tudunk. A mkfs parancsok nem képesek
alacsony szintű (fizikai) formázást végezni: winchesterek esetén ezt
a BIOS Setup-ból kell megtennünk, floppy-kat pedig az "fdformat" paranccsal
formázhatunk alacsony szinten.
Filesystem-ek beillesztése: ha az előbb létrehozott filesystem-et szeretnénk
beilleszteni a /mnt könyvtár alá: "mount -t /dev/hdb2 /mnt". Az illesztést
megszüntetni az "umount /mnt" paranccsal lehet, ez azonban csak akkor
lehetséges, ha az összes file le van zárva az adott filesystem-en, és
nincs a rendszerben olyan folyamat, amelynek aktuális könyvtára valahova
a filesystem területére mutat.
Ha egy filesystem valamilyen okból kifolyólag (általában áramszünet,
véletlen kikapcsolás) logikailag meghibásodik, az "fsck" utasítás-család
valamely tagjával próbálhatjuk megjavítani ("ext2" filesystem esetén
használjuk az "e2fsck"-t). Ezt a parancsot mindig használaton kívüli
(nem beillesztett, vagy végső esetben "read-only" - csak olvasható -
módon beillesztett) filesystem-en futtassuk: az "fsck" direkt diszk-blokkokkal
dolgozik és azokat javítja meg, a buffer cache-ben azonban a hibás
blokkok marad(hat)nak benn, amelyeket az "update" visszaírhat a diszkre.
Bár nem kötelező Unix alatt file-név kiterjesztést (extension)
használni, mégis - a könnyebb eligazodás végett - szokás.
Futtatható file-oknak általában nem adnak kiterjesztést.
A gyakoribb kiterjesztések:
- .c,.h
- C forrásfile-ok
- .cpp
- C++ forrás
- .s,.S
- Assembly forrás
- .o
- tárgykód (object) file-ok
- .a
- statikus programkönyvtárak
- .conf,.cf
- konfigurációs file-ok
- .so.*
- dinamikus programkönyvtárak
- .[1-9]
- (szám kiterjesztés): az egyes manual page file-ok
- .sh,.csh
- (nem mindig) a script file mely shell alá készült
- .tar
- a "tar" archiválóval készült file
- .gz
- a "gzip" (GNU zip) tömörítővel tömörített file
- .tgz
- .tar.gz rövidítése (a "tar" nem tömörít)
- .Z
- a "compress" (régebbi) tömörítővel pakolt file
- .tex
- TeX vagy LaTeX forrásfile
- .dvi
- DVI (Device Independent) szöveges-grafikus file formátum
- .ps
- PostScript (oldalleíró, nyomtatókezelő nyelv) file
- .au,.wav
- Hangmintákat tartalzó file-ok
Ha egy file nevéről nem tudjuk kitalálni, mi is lehet benne,
megpróbálkozhatunk a "file file_nev" paranccsal: a "file" utasítás
beleolvas és megpróbálja kitalálni, milyen file is az. Az általában
ismert file-formátumokra meglepően jól működik.
Mivel leggyakrabban DOS alá formázott mágneslemezekkel találkozhatunk,
létrehoztak Unix alá egy programgyűjteményt, amely ezen floppyk
kezelését könnyíti meg: a megszokott DOS szintakszist használhatjuk
floppy-műveleteknél.
Például egy file bemásolása az A: floppyról az aktuális könyvtárba:
claudius:~$ mcopy "a:\file.xxx" .
Az összes "m" parancs felsorolásáért nézzük meg a "mtools" man page-t!
Figyelmeztetés: használhatunk DOS-os metakaraktereket is a file-nevekben,
ezeket azonban mindig érdemes a shelltől idézőjellel megvédeni, az
eltérő értelmezés miatt. (Az "mtools" helyesen értelmezi a DOS-os
metakaraktereket, csak gondoskodnunk kell arról, hogy ezek a metakarakterek
el is jussanak hozzá.)
Vége. Egyenlőre...