3. Könyvtár- és fájlkezelés

Szinte minden operációs rendszer alapvető része a fájlrendszerek kezelése. A fájlrendszer röviden a háttértáron tárolt fájlok, könyvtárak és egyéb rendszerezésre szolgáló elemek (linkek, named pipe-ok és mások) tárolásának módját, kezelését és elérését értjük. Ebben a fejezetben ezeket, valamint a hozzájuk kapcsolódó fogalmakat és parancsokat ismerjük meg.

3.1. A tartalomjegyzék

A Windowshoz hasonlóan a Unix esetében is igaz, hogy a fájlok könyvtárakban (mappákban) helyezkednek el. Az ok itt is ugyanaz: a könyvtárak lehetővé teszik a fájlok logikus elrendezését, nem kell minden fájlt ömlesztve, egyetlen helyen tárolni. Egy másik ok a teljesítmény növelése: egy kisebb fájlszámú könyvtárban sokkal gyorsabban megtalálható egy keresett fájl. A könyvtárak tartalmát, a tartalomjegyzéket a fájlrendszer nyilvántartja, megtekinteni az ls parancs használatával lehet (az ls a list szó rövidítése). Az ls paraméterek nélkül az aktuális könyvtár fájljainak és könyvtárainak nevét mutatja meg. Windows-on, amennyiben a Putty beállításakor a terminál típusának xterm-color-t adtál meg, most a tartalomjegyzék színesben jelenik meg, a könyvtárak kékkel, a fájlok zöld színnel láthatók. (Amikor először jelentkezel be, az aktuális könyvtárad az ún. home könyvtárad, ami kezdetben (látszólag) üres. Ezért a példa kedvéért most egy másik könyvtárba lépünk a cd /etc paranccsal. (A cd parancsról hamarosan bővebben is lesz szó.)

feri@columbo:~$ cd /etc
feri@columbo:/etc$ ls
acpi                    init.d                   ppp
adduser.conf            initramfs-tools          profile
aliases                 inputrc                  profile.d
alternatives            insserv                  protocols
apm                     insserv.conf             python
apparmor                insserv.conf.d           python2.7
apparmor.d              iproute2                 rc0.d
apport                  iscsi                    rc1.d
apt                     issue                    rc2.d
at.deny                 issue.net                rc3.d

A tartalomjegyzéknek ez a formája nem sok információt ad, ezért a gyakorlatban nem ezt, hanem egy részletesebb megjelenítést szoktunk használni. Ehhez az ls parancsot a -l kapcsolóval egészítjük ki. A -l hatására a parancs az egyes fájlok és könyvtárak részletes adatait is megjeleníti, ún. hosszú listát ad (long, ezért l a kapcsoló neve).

feri@columbo:/etc$ ls -l
összesen 900
drwxr-xr-x 3 root root    4096 febr   2 14:06 acpi
-rw-r--r-- 1 root root    2981 febr   2 13:51 adduser.conf
-rw-r--r-- 1 root root     185 febr   2 14:21 aliases
drwxr-xr-x 2 root root    4096 febr   2 14:24 alternatives
drwxr-xr-x 3 root root    4096 febr   2 14:05 apm
drwxr-xr-x 3 root root    4096 febr   2 14:06 apparmor
drwxr-xr-x 8 root root    4096 febr   2 14:06 apparmor.d
drwxr-xr-x 5 root root    4096 febr   2 14:06 apport
drwxr-xr-x 6 root root    4096 febr   2 14:22 apt
-rw-r----- 1 root daemon   144 okt   25  2011 at.deny
-rw-r--r-- 1 root root    2076 márc  28  2013 bash.bashrc
-rw-r--r-- 1 root root   58753 máj   10  2013 bash_completion
drwxr-xr-x 3 root root   12288 febr   2 14:08 bash_completion.d
-rw-r--r-- 1 root root     356 jan   28  2013 bindresvport.blacklist

Lássuk, hogy mit is jelentenek az egyes oszlopok! Most még nem derül fény mindenre, később, a linkek és a jogosultsági rendszer tárgyalásakor még visszatérünk néhányukra.

-rw-r--r-- 1 root root    2981 febr   2 13:51 adduser.conf
---------- - ---- ----    ---- -------------- ------------
|    |     |  |    |       |          |            |
1    2     4  5    6       7          8            9
1. Típus:A sor első karaktere a fenti példában - vagy d, ez alapján tudható, hogy az adott sor egy fájlt vagy egy könyvtárat ír le. Ha az első karakter d, akkor ez egy könyvtár (directory), ha egy - karakter áll itt, akkor a sor egy fájlt ír le. Később lesz majd szó az ún. softlinkről, ebben az esetben az első karakter l (kis el), a blokkos eszközfájlról, amit egy b karakter jelöl, és a karakteres eszközfájlról, ekkor egy c áll a sor elején. Más típusú bejegyzések is lehetnek egy tartalomjegyzékben, de ezekkel itt nem foglalkozunk, ha érdeklődsz, a named pipe-nak nézz utána.
2. Jogok:Az első karakter után álló kilenc karakter a bejegyzéshez tartozó jogosultságokat írja le. Az már most nyilvánvalónak tűnik, hogy az r valamiféle olvasást, a w pedig írást jelent, részletesen erről A Unix jogosultsági rendszere c. fejezetben lesz szó.
3. Linkszám:A második oszlopban látható szám az ún. linkszám, jelentésüket a linkekről szóló rész tárgyalja majd.
4-5. Tulajdonos, csoport:
 A harmadik és negyedik oszlopban a bejegyzéshez tartozó tulajdonos és csoport tartozik. Bővebben a jogosultsági rendszer tárgyalásakor tisztázzuk ezek jelentését.
6. Méret:A következő szám a bejegyzés mérete. Fájlok esetében könnyen értelmezhető, a fájl hosszát jelenti bájtban. A könyvtárak is foglalnak helyet a diszken, így ezeknek is van méretük, ez olvasható itt le.
7. Dátum, idő:A hatodik, hetedik, és a nyolcadik oszlop egy dátumot és időt ír le, ez a fájl vagy könyvtár utolsó módosításának dátuma és ideje. A korszerű operációs rendszerek emellett minden bejegyzéshez képesek rögzíteni az utolsó olvasás valamint a létrehozás dátumát és idejét is, de a gyakorlatban ezek nem annyira fontosak, mint az utolsó módosítás ideje. A fájlrendszer sebességének növelése érdekében ezért néha ki is kapcsolják ezek rögzítését.
8. Név:Az utolsó oszlopban van a fájl vagy könyvtár neve.

3.1.1. Helyettesítő karakterek

A fájlrendszeren végzett munka során nagy segítséget jelent, ha több elemre együttesen is tudsz hivatkozni, pl. a törlést végző parancsot tudod úgy paraméterezni, hogy az minden tmp kiterjesztésű fájlt töröljön. Ezért van néhány speciális karakter, amely az ilyen esetekben használatos.

  • A * több karaktert helyettesít. Így a pass* minden olyan bejegyzésnek megfelel, amelynek az első négy karaktere pass. De a * használható egy név belsejében is: a p*s*d jelentése: az első karakter p, az utolsó d, és a kettő közt valahol kell lennie egy s-nek is. Így ezzel pl. a password nevű fájlra hivatkozhatsz.
  • A ? pontosan egy karaktert helyettesít azon a helyen, ahová azt írod. A p?ss azoknak a neveknek felel meg, amelyek első karaktere p, a harmadik és negyedik pedig s.
  • A [] karakterek közt több karaktert is felsorolhatsz. Az adott pozíción egyetlen karakter szerepelhet, az, amelyet a zárójelek közé írtál. Így a p[aA]ssword két névre, a password-re és a pAssword-re illeszkedik. Szögletes zárójelpár esetén tagadást is használhatsz a zárójelbe írt ^ karakterrel. A p[^aA]ssword hatása épp az ellenkezője lesz az előzőnek, azt jelenti, hogy a második pozíción nem szerepelhet a betű függetlenül attól, hogy azt kis- vagy nagybetűvel írták.

A helyettesítő karakterek használatát eléggé el lehet vadítani, az alábbi példát a fentiekből raktam össze, az értelmezését rád bízom:

feri@columbo:/etc$ ls -l p[aA][^d]sw*[rRxX]*
-rw-r--r-- 1 root root 15905 márc  28  2014 passwd.org

Megjegyzés

A későbbiek során lényeges lesz, hogy a helyettesítő karktereket nem az egyes parancsok értelmezik, hanem a parancsértelmező. A ls -l d*.conf parancs végrehajtásakor a shell elvégzi a d*.conf kifejtését, azaz megkeresi az aktuális könyvtárban az ennek megfelelő bejegyzéseket (könyvtárakat, fájlokat). Az eredeti kifejezést ezután az így kapott listára cseréli. Így tehát az ls -l d*.conf parancs kiadásakor valójában az ls -l debconf.conf deluser.conf fut le. Ez a működés azért előnyös, mert így nem kellett az egyes parancsokba kódolni a speciális karakterek jelentését, azok mindenhol pontosan ugyanúgy fognak működni. Ez persze néhány alkalommal majd okoz kisebb galibát, de erről majd később lesz szó.

3.2. Könyvtárkezelő parancsok

A könyvtárak kezelésére további parancsok szolgálnak, nézzük át ezeket!

3.2.1. ls

Bár már láttad, hogy az ls a tartalomjegyzék megtekintésére szolgál, nézzük meg néhány hasznos paraméterét!

Mikor módosult utoljára egy könyvtár tartalma? Ha ezt szeretnéd megnézni, logikus megoldásnak tűnik az ls -l konyvtárnév parancs, ez azonban a fenti logika szerint nem a könyvtár sorát mutatja meg a tartalomjegyzékben, hanem annak tartalmát listázza ki.

root@columbo:~/demo# ls -l tesztDir/
-rw-r--r--  1 root root 3019 jún   16 08:25 adatok.txt
-rw-------  1 feri feri   13 aug    7  2017 hello.txt
-rw-r--r--  1 root root  321 jún   16 08:26 podcasts.txt

Az ls számára -d vagy a -ld kapcsolókkal használva azt írjuk elő, hogy a parancs a könyvtárak adatait jelenítse meg, ne azok tartalmát. Az alábbi példa megvilágítja ezt, az első esteben a tesztDir tartalmát, a második esetben, a -d kapcsolóval már magát a tesztDir könyvtárbejegyzés adatait kérdezem le.

root@columbo:~/demo# ls -ld tesztDir/
drwxr-xr-x 2 root root 4096 jún   16 08:27 tesztDir/

A tartalomjegyzékben nagy fájlok esetén nehézkes pontosan kiolvasni a fájl méretét, mert alapértelmezésben az bájtban van megadva. A -h kapcsolóval módosítható ez, kérheted, hogy a megfelelő prefixet használja a parancs. Az alábbi példában -h hatására a 4383088 bájtos méret helyett a 4,2M jelenik meg.

root@columbo:~# ls -l /usr/bin/aptitude-curses
-rwxr-xr-x 1 root root 4383088 febr  18  2014 /usr/bin/aptitude-curses

root@columbo:~# ls -lh /usr/bin/aptitude-curses
-rwxr-xr-x 1 root root 4,2M febr  18  2014 /usr/bin/aptitude-curses

A Unixok esetén a rejtett fájlok neve ponttal kezdődik. A rejtettség nem valamiféle védelem, csak annyit jelent, hogy az ls parancs csak a -a kapcsoló használata esetén jeleníti meg őket. A saját használatra kijelölt könyvtáradban (vagyis a home könyvtáradban) vannak ilyen fájlok, pl. a már korábban említett .bash_history neve is ponttal kezdődik, tehát rejtett. Mivel a napi munka során ezek a fájlok nem annyira fontosak, az állandó megjelenítésük inkább zavaró lenne, ezért kezdik a nevüket ponttal. Az alábbi példában megjelenítjük a rejtett bejegyzéseket (itt csak azok vannak):

root@columbo:/home/nagy.agnes# ls -la
összesen 20
drwxr-xr-x   2 nagy.agnes nagy.agnes 4096 jún   15 11:36 .
drwxr-xr-x 215 root       root       4096 okt   16  2018 ..
-rw-r--r--   1 nagy.agnes nagy.agnes  220 márc  28  2013 .bash_logout
-rw-r--r--   1 nagy.agnes nagy.agnes 3637 ápr   24  2014 .bashrc
-rw-r--r--   1 nagy.agnes nagy.agnes  675 márc  28  2013 .profile
-rw-r--r--   1 nagy.agnes nagy.agnes 8613 ápr   11  2015 .bash_history

3.2.2. pwd

A pwd (Print Working Directory) az aktuális könyvtár pontos elhelyezkedését írja ki. Az aktuális könyvtár (vagy munkakönyvtár) az, amelyikben éppen dolgozol, amit az általad kiadott parancsok is használnak. A pwd parancsot nem sokszor használjuk, mert a prompt amúgy is mutatja, melyik az, de később, a shell scriptek írásakor még szükség lesz rá, így érdemes megjegyezned, hogy van ilyen.

feri@columbo:/etc$ pwd
/etc

A példában az etc a könyvtár neve, az előtte levő / karakter pedig a gyökérkönyvtárat jelenti. Az aktuális könyvtár tehát a gyökérkönyvtárból nyíló etc könyvtár. Ha eddig Windows-zal dolgoztál, könnyű összetéveszteni a \ karakterrel, ott az jelöli a gyökérkönyvtárat. Több könyvtár esetén az egyes könyvtárakat elválasztó karakter is a / lesz, ahogyan az alábbi példában láthatod.

feri@columbo:/var/log$ pwd
/var/log

A Unixok minden felhasználó számára biztosítanak egy könyvtárat, amit a felhasználó a munkája során használhat, ennek általános neve a home könyvtár. Erre a parancssorban a ~ karakterrel lehet hivatkozni, a későbbiekben bizonyos feladatokat ennek használatával tudunk elegánsan megoldani. Az alábbi példában a prompt a ~ karaktert tartalmazza, a pwd viszont már a könyvtár pontos helyét adja vissza, ami a /home/feri.

feri@columbo:~$ pwd
/home/feri

Figyelem!

  • A home könyvtár rendszerint a /home nevű könyvtárból nyílik. A gyakorlatban ez néha félreértést okoz, ez csak egy kiindulási pont, tehát nem ez a felhasználó home könyvtára.

  • A home könyvtárak helyének meghatározására több módszer létezik (igazából bárhol lehetnek). A columbo szerveren ezek az alábbi struktúrában vannak azért, mert így könnyen tudom törölni a korábbi évfolyamok hallgatóit. Így a TD66TT Neptun kódú felhasználó home könyvtára valójában a /home/2017/TD66TT lesz.

    ├── home
        ├──2017
        │   ├── TD66TT
        │   ├── HR63GS
        │   ├── 35GS75
        ├──2018
        │   ├── A0GYJG
        │   ├── A1K32F
        │   ├── A1XJ8R
        │   ├── A3IEKW
        │   ├── A69EYU
    

3.2.3. cd

Minden kiadott parancsod, ha másképp nem rendelkezel, az aktuális könyvtárral dolgozik. Pl. ha egy fájlt akarsz másolni, és nem írod le, hogy az hol van, a másoló parancs az aktuális könyvtárban fogja azt keresni. A cd (Change Direcory) paranccsal lehet egy másik könyvtárat aktuálissá tenni, azaz mozogni a könyvtárrendszerben. A parancsnak egy kötelező paramétere van, a könyvtár neve, amit aktuálissá akarsz tenni (úgy is mondjuk, hogy amelyikbe be akarsz lépni). A könyvtár leírását vagy az aktuális könyvtárhoz képest adjuk meg, vagy a gyökérkönyvtárhoz viszonyítva. Az előbbit relatív (hiszen csak az aktuális könyvtárban érvényes), az utóbbit abszolút elérési útnak nevezik. Az elérési útban néhány speciális jelölés is használható speciális könyvtárak jelölésére. Lássunk néhány példát!

  • A cd programok/teszt parancs az aktuális könyvtárból nyíló programok könyvtárból nyíló teszt könyvtárba lép. Ez a relatív elérési út, mivel az aktuális könyvtárból indul ki.
  • A cd /etc/X11 parancs a gyökérkönyvtárból nyíló etc könyvtárból nyíló X11 könyvtárat teszi aktuálissá. Ez az abszolút elérési út, mert bármelyik könyvtárban is vagy, mindenképp a gyökérkönyvtárhoz képest adtad meg a könyvtár helyét.
  • A cd .. az aktuális könyvtárból egy szinttel feljebb lép. A működése azon alapul, hogy minden könyvtárban van egy .. nevű könyvtár, amely a könyvtár keletkezésekor automatikusan létrejött. Ezt a rendszer hozza létre úgy, hogy az a szülő könyvtárra mutat. A cd .. hatására ezért lépünk vissza a szülő könyvtárba, nem pedig azért, mert ez valamilyen speciális változó vagy paraméter lenne.
  • A cd ~ jelentése ugyanaz, mint a cd parancs paraméter nélküli kiadásának, a saját home könyvtáradba lépsz vele.
  • A cd ~<felhasználó> a felhasználó home könyvtárába lép. A cd ~szabo.bela eredményeként tehát a szabo.bela home könyvtára lesz az aktuális könyvtár.
  • A fentiek tetszőlegesen kombinálhatók, tehát ennek is van értelme: cd ~bela/../teszt. Az értelmezését rád bízom, rakd össze az egyes elemeket!
  • Ne felejtsd el a Tab használatát a cd használatakor sem! Ezzel nagyon gyorsan tudsz majd dolgozni, és nem fogsz gépelési hibákat véteni!

A fenti példákban látható paraméterek nem csak a cd esetében használhatók, hanem minden könyvtárhivatkozáskor is. Ezért nyugodtan általánosíts, minden parancs esetén, ahol könyvtárat adhatsz meg, használhatod a .., ., ~, és a ~<felhasználó> elemeket is.

Megjegyzés

Van egy másik könyvtár is, amellyel a Windows rendszerben is találkozhattál már, ennek neve egyetlen pontból áll. Ez a könyvtárbejegyzés önmagára a könyvtárra mutat, ami első pillantásra értelmetlennek tűnik, de néhány parancs esetében kifejezetten jól jön. A cd . parancsnak nem sok értelme lehet, de később, pl. a fájlok másolásakor a cél helyének meghatározásakor nagyon jól jön az aktuális könyvtár leírására: egy ilyen esetben a cél könyvtár helyére egyszerűen egy pontot írhatunk.

3.2.4. tree

A tree parancs nem része minden Unix rendszernek, külön telepíthető fel. A könyvtárakkal történő munka során néha jól jön, mert vizuálisan képes megjeleníteni a könyvtárrendszert az aktuális, vagy meghatározott ponttól. Paraméterei:

  • Megadhatod azt a könyvtárat, amelyből kiindulva szeretnéd a könyvtársatruktúrát megjeleníteni pl. így: tree /etc.
  • A -d hatására a tree csak a könyvtárakat rajzolja ki, az abban levő fájlokat nem. Alapesetben a fájlok is megjelennek, így a tree / hatására a rendszer összes könyvtára és az abban levő összes fájl megjelenítésre kerül, csak győzd kivárni. Lássunk egy példát, a /etc könyvtárból nyíló könyvtárstruktúra megjelenítését! Csak a könyvtárak érdekelnek, ezért használom a -d kapcsolót. Az ábra a kimenet egy részletét tartalmazza:
feri@columbo:/etc$ tree -d
.
├── acpi
│   └── events
├── alternatives
├── apm
│   └── event.d
├── apparmor
│   └── init
│       └── network-interface-security
├── apparmor.d
│   ├── abstractions
│   │   ├── apparmor_api
│   │   └── ubuntu-browsers.d
│   ├── cache
│   ├── disable
│   ├── force-complain
│   ├── local
│   ├── snap
│   │   └── abstractions
│   │       ├── apparmor_api
│   │       └── ubuntu-browsers.d

3.2.5. mkdir

Új könyvtár létrehozására az mkdir (Make Directory) való. Paraméterként a létrehozandó könyvtár nevét kell megadnod. Így a mkdir teszt elkészít egy új teszt nevű könyvtárat az aktuális könyvtárban.

Megjegyzés

  • Sok parancs esetében, ahol egy fájl vagy könyvtár megadható, többet is felsorolhatsz, így van ez az mkdir esetében is. Az mkdir prg1 prg2 prg3 kiadásakor mindhárom könyvtár létrejön az aktuális könyvtárban, tehát ehhez nem kell három parancsot kiadnod.
  • Az előző feladat még “unixosabban” is megoldható így: mkdir prg{1..3}. A kapcsos zárójelek közti kifejezés a shell számára egy ciklust jelent 1-től 3-ig, így az valójában ezt futtatja le: mkdir prg1 prg2 prg3. Fontos, hogy értsd, nem az mkdir végzi ezt az értelmezést éppúgy, mint a korábban bemutatott *, ? stb. értelmezését sem.

Az mkdir esetében hibaüzenetet kapsz, ha olyan könyvtárat akarsz létrehozni, amelynek a szülő könyvtára nem létezik, pl. a mkdir programs/prg1 csak akkor működik, ha a programs könyvtár már létezik. Ez sokszor zavaró, ezért az mkdir rendelkezik egy paraméterrel, amelyet használva a parancs a paraméterében szereplő minden részkönyvtárat létrehoz, a példában először elkészíti a programs, majd ez követően a prg1 könyvtárat. Az alábbi példában ezt láthatod:

feri@columbo:~/demo$ mkdir programs/prg1
mkdir: nem lehet a következő könyvtárat létrehozni: ”programs/prg1”: Nincs ilyen fájl vagy könyvtár
feri@columbo:~/demo$ mkdir -p programs/prg1
feri@columbo:~/demo$ tree
.
└── programs
    └── prg1

2 directories, 0 files

3.2.6. rmdir

Könyvtárak törlésének irodalmi parancsa az rmdir. Paramétere a törlendő könyvtár neve, melynek üresnek kell lennie, tehát nem tartalmazhat sem fájlt, sem újabb könyvtárat. Ha vannak ilyenek, először azokat kell törölni, vagy az rm parancsot kell használni helyette.

feri@columbo:~/demo$ rmdir programs/prg1
feri@columbo:~/demo$ tree -d
.
└── programs

1 directory

Veszélyforrás!

Unix alatt nincs lehetőség a törölt fájlok helyreállítására, ezért nagyon nagy figyelmet kell fordítanod a törlést végző parancsok kiadásakor! Ha hibázol, és olyan fájlokat is törölsz, amelyekre szükséged van, csak a mentésből állíthatod helyre azokat!

3.2.7. rm

A könyvtárak törlésére sokkal hatékonyabb parancs az rm. Ez eredetileg fájlok törlésére szolgált, de a -r paraméterrel könyvtárak rekurzív törlésére használható akkor is, ha az nem üres.

feri@columbo:~/demo$ rm -r programs/
feri@columbo:~/demo$ tree
.

0 directories, 0 files

Megjegyzés

A -r kapcsolót számos esetben használják annak jelölésére, hogy a parancsot nem csak a megadott könyvtárban kell végrehajtani, hanem az abból nyílók mindegyikében. Mivel egy könyvtárrendszer bejárásának kézenfekvő módja a rekurzió, ezért -r a kapcsoló neve.

3.2.8. mv

A gyakorlatban hasznos, ha van lehetőséged könyvtárak áthelyezésére, erre az mv parancs szolgál. Hogy a helyzet ne legyen annyira egyszerű, ugyanez a parancs kell ahhoz is, hogy átnevezhess egy könyvtárat. Az, hogy melyik műveletet hajtod végre, a paraméterek megadásától függ. Az mv programs target parancs eredménye áthelyezés lesz, ha a target könyvtár létezik. Az programs könyvtár új helye a target lesz.

feri@columbo:~/demo$ mkdir -p programs/prg1
feri@columbo:~/demo$ mkdir target
feri@columbo:~/demo$ tree -d
.
├── programs
│   └── prg1
└── target

3 directories
feri@columbo:~/demo$ mv programs/ target/
feri@columbo:~/demo$ tree -d
.
└── target
    └── programs
        └── prg1

3 directories

Most lássuk, mi történik, ha a target könyvtár nem létezik! Az mv programs target most, mivel a célkönyvtár nem létezik, átnevezést hajt végre, a programs új neve target lesz.

feri@columbo:~/demo$ mkdir -p programs/prg1
feri@columbo:~/demo$ mv programs/ target/
feri@columbo:~/demo$ tree
.
└── target
    └── prg1

2 directories, 0 files

3.2.9. cp

A könyvtárak másolását a cp paranccsal lehet elvégezni. Paraméterként meg kell adni a forrás és a célkönyvtárat is. Lássuk ezt egy példán keresztül!

feri@columbo:~/demo$ tree
.
└── target
    └── prg1

2 directories, 0 files
feri@columbo:~/demo$ mkdir tmp
feri@columbo:~/demo$ cp -r target tmp
feri@columbo:~/demo$ tree
.
├── target
│   └── prg1
└── tmp
    └── target
        └── prg1

5 directories, 0 files

A cp -r target tmp parancsban a forrás (amit másolni fogunk) a korábban már létrehozott target, a cél pedig a most készített tmp könyvtár. A -r kapcsolóra azért van szükség, hogy a cp számára jelezzük, a target teljes tartalmát, annak minden könyvtárát és fájlját is másolni kell. Enélkül a parancs nem működött volna:

feri@columbo:~/demo$ tree
.
├── target
│   └── prg1
└── tmp

3 directories, 0 files
feri@columbo:~/demo$ cp  target tmp
cp: ”target” könyvtár kihagyása

3.2.10. A Unix könyvtárrendszere

/bin:A felhasználók által indítható parancsok helye, amelyekre már a rendszer felállása során szükség van.
/boot:Az operációs rendszer betöltéséhez szükséges fájlok, boot manager, kernel, initrd vannak itt.
/dev:Az eszközfájlok szokásos könyvtára.
/etc:A rendszer konfigurációs fájljainak gyűjtőhelye.
/home:A felhasználók home könyvtárainak kiindulópontja.
/media:A felmountolt meghajtók jellegzetes elérési pontja.
/mnt:Szintén mount pontként használatos.
/proc:A procfs mount pontja.
/root:A rendszergazda home könyvtára.
/run:A futó programok átmeneti fájljainak helye. Rendszerint a memóriát használja, az itt levő fájlok nincsenek a diszken.
/sbin:A rendszergazda által használható parancsok helye, azoké, amelyekre már a boot folyamat során szükség van.
/tmp:Az átmeneti fájlok könyvtára. Rendszerint ez is a memóriát használja, az itt levő fájlok nincsenek a diszken.
/usr:A felhasználói programok tárolásának kiindulási helye.
/usr/local/bin:A helyi rendszergazda által telepített programok helye. Ezek nem az operációs rendszer részei.
/usr/bin:A felhasználók által indítható parancsok helye, amelyekre csak a rendszer felállása után van szükség.
/usr/sbin:A rendszergazda által használható parancsok helye, ide azok kerülnek, amelyekre a rendszer indulása során nincs szükség.
/var:Változó tartalmú fájlok, adatbázisok, weblapok, levelek stb. kerülnek ide.

3.3. Fájlkezelő parancsok

A fájlok kezelésére is számos parancsot kínál az operációs rendszer.

3.3.1. cat

Egy fájl tartalmának megjelenítésére szolgáló parancs a cat. Értelemszerűen legalább egy paramétere kell, hogy legyen, a megjelenítendő fájl neve. Lássunk egy példát! A /etc/passwd fájl a rendszer felhasználóinak adatait tartalmazza, a bejelentkezés során fontos szerepe van. A jogosultsági rendszer tárgyalásakor részletesen megismerjük a felépítését. Most lássuk a tartalmát! (A fájl columbo.uni-eszterhazy.hu gépen elég hosszú, ezért nem mutatom a teljes tartalmat, csak az első 10 sorát.)

feri@columbo:~/demo$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin

A cat számos paraméterrel rendelkezik, megmutatok néhányat, amit néha jól használhatsz. A -n kapcsolóval a cat sorszámokat ír a sorok elé:

feri@columbo:~/demo$ cat -n /etc/passwd
     1  root:x:0:0:root:/root:/bin/bash
     2  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
     3  bin:x:2:2:bin:/bin:/usr/sbin/nologin
     4  sys:x:3:3:sys:/dev:/usr/sbin/nologin
     5  sync:x:4:65534:sync:/bin:/bin/sync
     6  games:x:5:60:games:/usr/games:/usr/sbin/nologin
     7  man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
     8  lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
     9  mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    10  news:x:9:9:news:/var/spool/news:/usr/sbin/nologin

A -s kapcsolóval a többszörös üres sorok egy üres sorra cserélhetők. Az alábbi példában a teszt.txt több üres sort tartalmaz:

feri@columbo:~/demo$ cat teszt.txt
első sor


második sor



harmadik sor

A -s kapcsolóval a többszörös üres sorok egy sorra redukálódnak:

feri@columbo:~/demo$ cat -s teszt.txt
első sor

második sor

harmadik sor

Megjegyzés

  • A parancs neve a Concatenate szóból származik, ugyanis a parancs eredeti célja nem egyetlen fájl tartalmának megjelenítésére, hanem több fájl egyesítésére, ún. konkatenálására volt. Ennek megfelelően paraméterként számos fájlt adhatsz meg, ezek tartalmát sorban megjeleníti.

3.3.2. Lapozóprogramok

A cat kimenete folyamatosan kiírásra kerül a képernyőre. Hosszú fájl esetén nem fogod tudni elolvasni a tartalmát, mert az pillanatok alatt eltűnik, csak a fájl végét fogod látni. Ha emlékszel a Ctrl-s és a Ctrl-q billentyűk jelentésére, akkor játszhatsz ezekkel, de ennél azért komolyabb megoldásra van szükség. Ezért az egyes rendszerek más parancsokat is tartalmazhatnak erre a feladatra, olyanokat, melyek támogatják a felhasználót abban, hogy kényelmesen elolvashassa a fájl tartalmát. Ezek a korábban már említett lapozó programok.

A legegyszerűbb lapozóprogram a more. Ez a fájl tartalmát úgy jeleníti meg, hogy minden képernyőnyi tartalom megjelenése után megállítja az újabb sorok kiírását, és szóköz megnyomásáig vár. Ez után újabb képernyőnyi tartalom jelenik meg, és így folytatódik a fájl végének eléréséig. A / megnyomása után meg lehet adni egy keresendő szöveget, az n a következő találatot adja. A q megnyomásával ki lehet lépni a programból. A more tudása ezzel ki is merül, nem igazán “okos”, nekem pl. zavaró a visszafelé lapozás képességének hiánya.

feri@columbo:~/demo$ more /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
--Tovább--(9%)

Jobban használható változat a less. A neve valójában egy szójáték, jelentésében kevesebb, de valójában többet tud, mint a more. Itt már működik a visszafelé lapozás, lehet visszafelé is keresni a b megnyomásával.

Sokan használják a most parancsot lapozóprogramként, ez még nagyobb szolgáltatási kört nyújt.

Megjegyzés

Emlékezz rá, a man parancs valójában valamelyik lapozóprogramot hívja meg, és azzal mutatja meg a kézikönyv tartalmát. Hogy melyiket használja, azt a PAGER környezeti változó határozza majd meg, erről részletesen a környezeti változóknál olvashatsz.

3.3.3. cp

A könyvtárak másolása után a cp használata már nem jelent problémát, ha fájlokat kell másolnod. Fájlok csoportja is másolható, ha a helyettesítő karaktereket használod, a *, a ? és a [] segítségével fájlok csoportjait tudod egy lépésben másolni. Egy példa: legyen az aktuális könyvtár a gyökérkönyvtár, és másold a /etc könyvtár összes conf kiterjesztésű fájlját a home könyvtárad backup könyvtárába!

feri@columbo:/$ mkdir ~/backup
feri@columbo:/$ cp /etc/*.conf ~/backup

A másolás során megadhatsz egy új fájlnevet is, az alábbi példában a másolat neve jelszavak.txt lesz:

feri@columbo:~/demo$ cp /etc/passwd tmp/jelszavak.txt
feri@columbo:~/demo$ tree
.
├── target
│   └── prg1
└── tmp
    └── jelszavak.txt

3 directories, 1 file

3.3.4. mv

A fájlok áthelyezése és átnevezése sem hoz már nagy újdonságot, ha az eddigieket megértetted. Az áthelyezés folyamata pontosan az, mint a másolásé, a különbség csak az, hogy a sikeres másolást követően a forrás fájlokat a parancs törli. Az áthelyezés elve sem változott, ha a cél nem létezik, áthelyezés, egyébként átnevezés történik. Lássunk erre is néhány példát!

Először másold a /etc/passwd fájlt az aktuális könyvtárba! Mivel a cp parancsnak mindenképp meg kell adni a cél könyvtárat abban az esetben is, ha az aktuális könyvtár, a . karaktert használjuk erre. Figyeld meg ezt a cp parancsban!

feri@columbo:~/demo$ cp /etc/passwd .
feri@columbo:~/demo$ tree
.
├── passwd
├── target
│   └── prg1
└── tmp
3 directories, 1 file

Helyezd át ezt a fájlt a tmp könyvtárba!

feri@columbo:~/demo$ mv passwd tmp/
feri@columbo:~/demo$ tree
.
├── target
│   └── prg1
└── tmp
    └── passwd
3 directories, 1 file

Nevezd át a passwd fájlt! Az új név legyen jelszavak.txt! Ebben a feladatban, mivel átnevezésről van szó, a forrás és a cél könyvtára meg kell, hogy egyezzen.

feri@columbo:~/demo$ mv tmp/passwd tmp/jelszavak.txt
feri@columbo:~/demo$ tree
.
├── target
│   └── prg1
└── tmp
    └── jelszavak.txt

Az alábbi megoldás is helyes lett volna, és a gyakorlatban talán egyszerűbb is:

feri@columbo:~/demo$ cd tmp
feri@columbo:~/demo$ mv passwd jelszavak.txt

3.3.5. rm

Az rm a könyvtárak mellett fájlok törlésére is szolgál. Paraméterként a törlendő fájlok nevét kell megadni, ennél a parancsnál is használhatók a helyettesítő karakterek. Ahogyan a könyvtáraknál, a fájlok törlésekor is nagyon figyelj, nehogy olyan fájlokat is törölj, amit nem szeretnél, a törlés visszavonására nincs mód. Ha bizonytalan vagy, a törlés előtt listázd ki azokat a fájlokat, amikre a törlés parancsát kiadod. Ezt teszem az alábbi példában:

feri@columbo:~/demo$ ls tmp/j*
tmp/jelszavak.txt
feri@columbo:~/demo$ rm tmp/j*

3.3.6. file

A Windows rendszerekben egy fájl típusáról annak kiterjesztése ad információt. Egy docx fájl Word dokumentumot, egy xlsx egy Excel munkafüzetet jelent. Az összerendelés elég merev, a fájlon duplán kattintva a Word, illetve az Excel indul majd el. Unix alatt ez nincs így, a fáljoknak lehet kiterjesztése, de ez nem feltétlenül van így. Ezért egy fájl típusának meghatározása nem történhet erre alapozva. A file parancs információt ad egy fájl tartamáról úgy, hogy megpróbálja az tartalma alapján felismerni. A parancshoz egy adatbázis is tartozik, amely alapján működik. Az alábbi példában egy képfájlt vizsgálunk:

koczka.ferenc@ns:~/unixBook$ file source/_images/sitelogo.png
source/_images/sitelogo.png: PNG image data, 255 x 98, 8-bit/color RGB, non-interlaced

3.3.7. touch

Ezt a parancsot egy új, üres fájl létrehozására szoktam használni. Valójában nem erre való, ez csak egy mellékhatása, az eredeti célja a fájl idő adatainak megváltoztatása. Lássunk erre is egy példát!

feri@columbo:~/demo$ ls -l
összesen 8
drwxrwxr-x 3 feri feri 4096 júl    2 20:55 target
drwxrwxr-x 2 feri feri 4096 júl    2 22:35 tmp
feri@columbo:~/demo$ touch hello.txt
feri@columbo:~/demo$ ls -l
összesen 8
-rw-rw-r-- 1 feri feri    0 júl    2 22:47 hello.txt
drwxrwxr-x 3 feri feri 4096 júl    2 20:55 target
drwxrwxr-x 2 feri feri 4096 júl    2 22:35 tmp

3.3.8. diff, patch

A diff két fájl összehasonlítására szolgál, paraméterként a két fájl nevét kell megadni. Amennyiben ezek azonosak, a diff nem ír ki semmit, ha különböznek, akkor leírja a különbségeket úgy, hogy az más programok számára felhasználható legyen. Lássunk egy példát! A file:hello.txt fájl tartalma a Hello szó.

feri@columbo:~/demo$ cat hello.txt
Hello
feri@columbo:~/demo$ cp hello.txt masolat.txt
feri@columbo:~/demo$ diff hello.txt masolat.txt

Miután változtattam, a masolat.txt fájlban töröltem az o betűt, a diff kimenete megváltozik:

feri@columbo:~/demo$ diff hello.txt masolat.txt
1c1
< Hello
---
> Hell

Mire jó ez a furcsa kimenet?

Programkódok esetén nem optimális, ha egy kis változás miatt a teljes forrást újra le kell töltened, hogy a legfrissebb változattal rendelkezz. A diff kimenete és a patch parancs kiváló eszköz arra, hogy a változásokat a nálad levő forrásban is átvezesd. Ennek során a diff kimenetéből egy kisméretű, a különbségeket pontosan leíró ún. patch fájl készül, amellyel a patch parancs előállítja a javított verziót. Neked csak ezt a patch fájlt kell letöltened és a korábbi verziót “megpatchelned”. Egy rövid példa erre (az átirányítások miatt lehet, hogy csak később lesz érthető ez a példa):

feri@columbo:~/demo$ diff hello.txt masolat.txt >patch.txt
feri@columbo:~/demo$ cat masolat.txt
Hell

feri@columbo:~/demo$ patch -p0 masolat.txt <patch.txt
patching file masolat.txt
Reversed (or previously applied) patch detected!  Assume -R? [n] y
feri@columbo:~/demo$ cat masolat.txt
Hello

Megjegyzés

Ha foglalkozol programozással, biztosan találkoztál már a verziókezelő rendszerek valamelyikével, a Gittel vagy az SVN-nel. Ezek működése is a diff parancson alapul.

3.4. Az inode

Ahhoz, hogy a Unix fájlrendszerével kapcsolatos további műveleteket jól megértsd, meg kell ismerned az inode fogalmát. Az eddigiek alapján ugyanis úgy tűnket, hogy az egyes fájlok és könyvtárak jellemzőit (mérete, dátumai, tulajdonos, csoportja) a tartalomjegyzék tárolja, pedig ez nem így van. A fájlnév kivételével minden jellemző a fájlrendszer egy másik egységében, a fájlhoz tartozó ún. inode-ban van, a tartalomjegyzék pedig csak a fájl nevét és egy, az inode-ra mutató pointert tartalmaz. Az ls -i parancs minden sor elején kiírja az ahhoz tartozó inode számot is:

root@columbo:~# ls -dil /etc/*.conf
 1773 -rw-r--r-- 1 root root  3019 nov   17  2018 /etc/adduser.conf
 2398 -rw-r--r-- 1 root root   321 márc  30  2012 /etc/blkid.conf
 4920 -rw-r--r-- 1 root root 10029 okt    3  2017 /etc/ca-certificates.conf
  709 -rw-r--r-- 1 root root  2969 márc  15  2012 /etc/debconf.conf
  204 -rw-r--r-- 1 root root   604 okt   20  2011 /etc/deluser.conf
30281 -rw-r----- 1 root fuse   280 máj   24  2013 /etc/fuse.conf
35749 -rw-r--r-- 1 root root  2584 okt   10  2012 /etc/gai.conf

Ebben a példában az adduser.conf fájlhoz tartozó inode szám tehát az 1773, ebben van leírva a fájl minden egyéb tulajdonsága, amit a stat paranccsal lehet részletesen megtekinteni:

root@columbo:~# stat /etc/adduser.conf
  Fájl: ”/etc/adduser.conf”
    Méret: 3019         blokkok: 8          IO-blokk: 4096   szabályos fájl
Eszköz: 801h/2049d      I-node: 1773        linkek: 1
Hozzáférés: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Elérés: 2019-01-27 14:37:01.458495337 +0100
Módosítás: 2018-11-17 15:59:22.911580639 +0100
 Változás: 2018-11-17 15:59:22.911580639 +0100
 Születés: -
Az inode felépítése

3.5. A linkek

A Windowsban már találkozhattál a parancsikonokkal, ennek két megvalósítása is létezik a Unix fájlrendszereiben, a hardlink és a softlink. Ezek ugyanazt a célt szolgálják, de más úton érik azt el. A cél mindkét esetben ugyanaz: ha egy fájlra vagy könyvtárra újabb directory bejegyzést készítesz, ezzel az eredetit egy másik úton is el lehet érni. A linkek használata nagyban leegyszerűsítheti a gyakorlati munkát, mivel nem kell hosszú könyvtárneveket, fájlneveket megjegyezned, vagy gépelned.

3.6. Fájlrendszerek csatolása

A Microsoft operációs rendszereiben az egyes meghajtókat az ábécé betűivel jelölik. Az A: meghajtó a mágneslemezes meghajtót jelenti, a C: a merevlemezt, a D: pl. egy DVD olvasót.

Putty beállítása

Ez a módszer más rendszerekben nem jellemző, inkább a fájlrendszerek csatolását használják. Lássuk ennek lényegét egy példán! Az operációs rendszert az ábra bal oldalán látható háttértár tartalmazza, az egyszerűség kedvéért csak néhány könyvtárat rajzoltunk meg. Emellett van két másik meghajtónk, az egyik legyen egy zenefájlokat tartalmazó pendrive, a másik pedig egy újabb merevlemez:

Putty beállítása

Az operációs rendszer a pendrive-ot és a külső diszket a fenti állapotában nem tudja elérni, azokat először csatolni (mountolni) kell. Ennek során a meghajtó fájlrendszerének gyökérkönyvtárát a rendszer valamelyik könyvtárába kapcsoljuk, így az beilleszkedik az operációs rendszert tartalmazó meghajtó könyvtárrendszerébe. Az alábbi ábrán a csatolás utáni állapot látható, a pendrive a media/zenek könyvtárba, a másik merevlemez a /home könyvtárba.

Putty beállítása

Megjegyzés

  • A csatolásról részletesen tanulunk még a fájlrendszerek csatolásáról szóló részben.
  • Biztosan tudod, hogy egy merevlemezt több részre lehet osztani (partícionálni), és ezeket a részeket önálló meghajtóként lehet használni. Ezeket a részeket szintén mountolni kell. A partícionálásról később itt olvashatsz.
  • Ha Android rendszerű mobiltelefonod van, melyben SD kártyát is használsz, ott is találkozhatsz a csatolással. Ahhoz, hogy elérd a kártya tartalmát, a /mnt/sdcard könyvtárba kell lépned.
  • Ha a csatolást megelőzően a csatolási pontul szolgáló könyvtárban fájlok vagy további könyvtárak vannak, azok a csatolást követően nem érhetők el, a csatolt fájlrendszer gyökérkönyvtára “letakarja” azokat. Ilyen pontok az ábrán a /media/zenek és a /home.
  • A csatolást (mountolást) és a lecsatolást (umountolást) csak a rendszer adminisztrátora végezheti.
  • A Windows operációs rendszer is képes a csatolásra, de abban ezt ritkán használják.

3.6.1. df

A napi munka során időről időre felmerülhet a kérdés: mennyi szabad hely van az adott meghajtón? Erre, és néhány ehhez kapcsolódó kérdésre a df (disk free) parancs ad választ. Az alábbi példában a parancsnak még egy -H (human readable) kapcsolót is adunk, ezzel az egyes területek nagyságát nem bájtban, hanem az ember számára legkönnyebben értelmezhető egységben (Kilobájt, Megabájt, Gigabájt) írja ki.

feri@columbo:~$ df -H
Fájlrendszer   Méret Fogl. Szab. Fo.% Csatol. pont
udev            510M  4,1k  510M   1% /dev
tmpfs           105M  541k  104M   1% /run
/dev/sda1       3,9G  2,3G  1,4G  63% /
none            4,1k     0  4,1k   0% /sys/fs/cgroup
none            5,3M     0  5,3M   0% /run/lock
none            522M     0  522M   0% /run/shm
none            105M     0  105M   0% /run/user
/dev/sda3        13G  1,9G  9,9G  16% /home

A példában két sor érdekes számunkra, a /dev/sda1 és a /dev/sda3 kezdetű. Ez a gépben levő, két részre osztott (partícionált) merevlemez adatait írja le. Az operációs rendszer a /dev/sda1-en van, 3.9 GByte méretű, amelyből 2.3G foglalt, még 1.4G szabad hely van rajta. A 13Gb méretű /dev/sda3 a /home könyvtárba van csatolva, 1.9G foglalt, 9.9G szabad rajta. A többi sor nem fizikai eszközt jelöl, ezekkel később foglalkozunk majd.

3.6.2. du

A du egy adott könyvtárban levő bejegyzések (fájlok, könyvtárak, linkek) által elfoglalt helyről ad információt. Két módot mutatok a használatára.

Egy könyvtár által elfoglalt hely kiírására a -s kapcsolóval lehet használni. Példánkban ez 1.765.784 bájt.

root@columbo:/home# du -s
1765784 .

Ha emberi formában (human readable) szeretnéd:

root@columbo:/home# du -sh
1,7G    .

Az alábbi példa szerinti paraméterezést a gyakorlatban szoktam használni, ezzel meg lehet állapítani, hogy melyik könyvtár mennyi helyet foglal el a háttértáron. Főleg akkor hasznos, ha a diszk betelőben van, és meg kell keresem, hogy melyik könyvtár mérete lett indokolatlanul nagy. A paraméterben szereplő * hatására a parancs nem egy összesített értéket jelenít meg, hanem bejegyzésenként számítja ki a foglaltságot.

root@columbo:/home# du -sh *
4,0K    2014
56M     2015
1001M   2016
655M    2017
500K    andris
20K     B73JYX
20K     C3XYVK
216K    CNT3OM
736K    feri
64K     kiraly.roland
28K     koczka.ferenc
40K     koczkapeter
20K     KPULU6
16K     lost+found
12M     magyarp
4,0K    teszt.txt
248K    WD4PYQ

3.7. Ellenőrző kérdések

  • Mi a fájlrendszer?
  • Milyen elemei vannak a tartalomjegyzéknek?
  • Milyen bejegyzéstípusok lehetnek a egy Unix tartalomjegyzékben?
  • Milyen helyettesítő karakterek használhatók a fájlok meghatározására és milyen jelentésük van ezeknek?
  • Milyen módon hivatkozhatók könyvtárak a parancssorban?
  • Mi az abszolút és a relatív elérési út?
  • Milyen könyvtárkezelő parancsok érhetők el Linux alatt és mi ezek feladata?
  • Milyen fájlkezelő parancsok érhetők el Linux alatt és mi ezek feladata?
  • Mi a home könyvtár?
  • Hogyan lehet törölt fájlokat és könyvtárakat visszaállítani?
  • Milyen könyvtárak vannak egy Unix fájlrendszerében és mit tartalmaznak ezek?
  • Mik a lapozóprogramok, hogyan kell használni őket? Soroljon fel néhányat és hasonlítsa össze őket!
  • Hogyan kell átnevezni és átnevezni fájlokat és könyvtárakat?
  • Hogyan lehet két fájlt összehasonlítani?
  • Mi a patch?
  • Mi az inode és mi a feladata?
  • Hasonlítsa össze a hardlinket és a softlinket? Milyen korlátaik vannak?
  • Mit jelent a fájlrendszerek csatolása?
  • Milyen parancsokkal szerezhető információ a szabad hely nagyságáról és a foglaltságokról?

3.8. Feladatok

3.8.1. Könyvtárkezelés

  • Melyik az aktuális könyvtár?
  • Lépj a gyökérkönyvtárba!
  • Lépj a saját home könyvtáradba!
  • Lépj a rendszergazda home könyvtárába (a jogosultsági rendszer valószínűleg megakadályozza majd)!
  • Lépj a gyökérkönyvtárból nyíló etc könyvtárba!
  • Lépj vissza egy szinttel feljebb!
  • Jelenítsd meg az aktuális könyvtár tartalomjegyzékét!
  • Jelenítsd meg a /etc, majd a /var/log könyvtár tartalomjegyzékét is (részletes adatokkal)!
  • Lépj a saját home könyvtáradba! Hozz létre egy új alkönyvtárat, a neve legyen Teszt!
  • Egyetlen paranccsal hozz létre ebben két újabb könyvtárat, T1-et és T2-t!
  • Rajzoltasd ki a könyvtárstruktúrát a tree paranccsal! A további feladatok megoldása során használd ezt a megoldások helyességének ellenőrzésére!
  • Egyetlen paranccsal hozz létre a Teszt könyvtárból nyíló három, egymásból nyíló könyvtárat: Unix/Linux/Debian néven!
  • Nevezd át a Debian könyvtárat Deb-re!
  • Helyezd át a Deb könyvtárat a T1-be!
  • Töröld a T1 könyvtárat!
  • Egyetlen paranccsal töröld a Teszt könyvtárat!
  • Jelenítsd meg az aktuális könyvtár tartalmát!
  • Jelenítsd meg a /etc könyvtár tartalmát részletesen!
  • Jelenítsd meg a /etc könyvtár conf kiterjesztésű fájljait!
  • Jelenítsd meg a /etc könyvtár azon fájljait, melyek p-vel kezdődnek!
  • Jelenítsd meg a /etc könyvtár azon fájljait, melyek f-re végződnek!
  • Jelenítsd meg a /etc könyvtár azon fájljait, melyek első karaktere p, a harmadik s és d-re végződnek!
  • Jelenítsd meg a home könyvtárának tartalmát a benne levő rejtett fájlokkal együtt!
  • Jelenítsd meg a /etc könyvtár azon fájljait, melyek második karaktere a vagy n!
  • Jelenítsd meg a /etc könyvtár azon fájljait, melyek második karaktere nem a és nem n!
  • Jelenítsd meg a rendszer összes fájlját és könyvtárát (hosszan fut)!
  • Indítsd el a Midnight Commandert!
  • A fenti feladatokat végezd el a Midnight Commanderrel is!

3.8.2. Fájlkezelés

  • Hozd létre a home könyvtárában az ábrán látható könyvtárstruktúrát!
gyakorlat
 |
 |--Proba
 |  |
 |  |--test
 |  |  |---unix
 |  |
 |  |--Linux
 |
 |--Check
    |--Tmp
  • Lépj a /etc könyvtárba! Jelenítsd meg az innen nyíló könyvtárrendszert a tree paranccsal! Csak a könyvtárakat jelenítsd meg, a fájlokat ne!
  • Másold a /etc könyvtár passwd fájlját a Proba könyvtárba!
  • Másold a /etc könyvtár shadow nevű fájlját a test könyvtárba!
  • Másold a /etc könyvtár összes conf kiterjesztésű fájlját a Linux könyvtárba!
  • Másold a /etc könyvtár azon fájljait, melynek második karaktere a, a negyedik s, és d-re végződnek, a Check könyvtárba!
  • Helyezd át a Test könyvtár minden fájlját a Linux könyvtárba!
  • Hozz létre egy új fájlt a Check könyvtárban, melynek neve Adatok.txt!
  • Töröld a Linux könyvtár fájljait!
  • Töröld a Próba könyvtárat!
  • Jelenítsd meg a képernyőn a /etc/passwd fájl tartalmát!
  • Az előző feladatot végezd el a less paranccsal is! Értelmezd a fájl szerkezetét! Lapozz a szövegben, keresd meg a Bela nevű felhasználókat! Lépj ki a less-ből!
  • Állapítsd meg a következő fájlok típusát: /bin/bash, /etc/passwd, /var/log/syslog!

3.8.3. Linkek

  • Hozd létre újra a Proba könyvtárat, és másold bele az /etc könyvtár passwd fájlját!
  • Nézd meg a Proba könyvtár passwd fájljának linkszámát! Hozz létre egy hardlinket erre a fájlra jelszofajl néven! Jelenítsd meg a jelszofajl tartalmát! Mennyi a linkszáma ennek és az eredeti fájlnak?
  • Töröld a passwd nevű fájlt! Mennyi most a linkszám? Megjeleníthető a jelszofajl tartalma?
  • Nevezd át a jelszofajl-t passwd-re! Hozz létre egy softlinket erre a fájlra, a neve legyen s_p.txt!
  • Milyen hosszú ez a fájl? Miért ennyi?
  • Jelenítsd meg az s_p.txt tartalmát!
  • Jelenítsd meg a tartalomjegyzéket! Hol látható, hogy ez a fájl valójában softlink?