Ebben a cikkben a fájlkezelő parancsokat fogjuk megismerni. A legtöbb programnál nem ismertetjük az összes paramétert, elég csak a legfontosabbakat tudni. Kezdő felhasználót talán el is riaszthatja a paraméterek sorolása oldalakon keresztül, így csak a leglényegesebbeket vesszük át, a többi megnézhető a program man oldalán.
Fájlnév kiírása útvonalból – basename
A basename levágja a fájlnévből a hozzá vezető útvonalat és a kiterjesztést:
$ basename /home/linux/proba.png proba.png $
Könyvtáron is működik:
$ basename /home/linux/ linux $
A fájl/könyvtár kiterjesztését is le tudjuk vágni, ha megadjuk a végződést (suffix):
$ basename /home/linux/proba.png .png proba $ basename /etc/cron.d .d cron $ basename /etc/cron.d on.d cr $
Talán nem látszik elsőre, mi értelme a basename és dirname (Fájlok: könyvtár- és fájlkezelő parancsok 1.) programoknak, de majd a shell scriptek írásainál ki fog derülni 🙂
Fájl (létrehozása vagy) időbélyegének megváltoztatása – touch
A touch megváltoztatja minden megadott fájl utolsó elérésének és/vagy utolsó módosításának idejét az aktuális rendszeridőre. Ha a fájl nem létezik, a touch létrehozza:
$ ls -lak probafajl ls: probafile nem érhető el: Nincs ilyen fájl vagy könyvtár $ touch probafajl $ ls -l probafajl -rw-r--r-- 1 jonci jonci 0 2009-08-03 15:34 probafajl $
A jelenlegi idő helyett megadhatunk egy általunk kívántat is a “-t [[CC]YY]MMDDhhmm[.ss]” (például: [[20]10]01020304[05]) formával. 2010. január 2. 3 óra 4 percet az alábbi módon adhatjuk meg:
$ touch -t 201001020304 probafajl $
A “-c” opció megadásával letilthatjuk a nem létező fájlok létrehozását.
Fájlok és könyvtárak másolása – cp
Természetesen GNU/Linuxra is létezik Norton Commander klón, de érdemes megismerkedni a karakteres eszközökkel is, hogy a későbbiekben felhasználhassuk tudásunkat scriptek írásához. Fájlok és könyvtárat másolására – elsősorban – a cp programot tudjuk használni.
Meglévő fájl (tempfile1) lemásolása másik néven az aktuális könyvtárba, valamint a /home/jonci-ba:
$ pwd /tmp $ cp tempfile_regi tempfile_uj $ cp tempfile_regi /home/jonci/tempfile_megujabb $
Figyelem! Ha a tempfile2 már létezik, szó nélkül felülírja a rendszer. A figyelmeztetéshez használni kell a “-i” kapcsolót.
Ha a fájl nevét változatlanul akarjuk hagyni, akkor elég csak a célkönyvtárat megadni:
$ cp tempfile_regi /home/jonci/ $
Célkönyvtár esetén több fájlt is másolhatunk egyszerre:
$ cp tempfile_regi tempfile_uj /home/jonci/ $
Több fájlt nem tudunk összemásolni egy fájllá, arra a cat programot tudjuk használni:
$ cp tempfile_regi tempfile_uj tempfile_megujabb cp: a megadott cél (”tempfile_megujabb”) nem könyvtár $
Könyvtár másolásához használnunk kell a “-r” kapcsolót:
$ mkdir tempdir_regi $ cp tempdir_regi tempdir_uj cp: ”tempdir_regi” könyvtár kihagyása $ cp -r tempdir_regi tempdir_uj $
Érdemes még megemlíteni a “-a” kapcsolót. Segítségével egész jó adatmentést lehet végezni. Nem tökéletes, de alap szinten tökéletesen megfelelő eredményt produkál:
$ cp -a /a/menteni/kivánt/könyvtár /útvonal/a/mentéseket/tároló/könyvtárhoz/ $
A másolás folyamán megmarad minden fájl és könyvtár tulajdonosa, csoportja és összes joga.
Fájlok és könyvtárak átnevezése vagy átmozgatása – mv
A cp parancsnál elmondottak itt is érvényesek, mindössze annyi a különbség, hogy az eredeti fájl/könyvtár nem marad meg.
Fájl/könyvtár átnevezése:
$ mv tempfile_regi tempfile_uj $ mv tempdir_regi tempdir_uj $
Hibát jelent, ha az utolsó argumentum nem könyvtár, és több mint két fájl van megadva:
$ mv proba1 proba2 proba3 mv: when moving multiple files, last argument must a directory Try `mv –help' for more information. $
Hasonlóan, könyvtárat sem lehet megadni úgy forrásnak, hogy a cél egy fájl:
$ mv a proba1 mv: cannot overwrite non-directory `proba' with directory `a' $
Csak szabályos fájlokat tud fájlrendszerek közt mozgatni. Amennyiben a célfájl nem írható és a “-f” vagy a “–force” opció nem adott, a mv megkérdezi a felhasználót, hogy felülírhatja-e a fájlt. Ha a válasz nem ‘y‘-nal vagy ‘Y‘-nal kezdődik, a fájlt átugorja.
Fájlok és könyvtárak törlése – rm
Alapértelmezésként a könyvtárakat nem törli. Ha egy állomány nem írható és az “-f” vagy a “–force” kapcsolót nem aktiváltuk, akkor az rm megkérdezi a felhasználót, hogy eltávolíthatja-e az állományt. Ha a válasz nem ‘y‘ vagy ‘Y‘ betűvel kezdődik, a következő állományt veszi. A “-v” kapcsolóval kiírathatjuk a törölt fájl nevét:
$ ls -l proba[12] -r--r--r-- 1 linux linux 0 aug 3 16:04 proba1 -r--r--r-- 1 linux linux 0 aug 3 16:04 proba2 $ rm –v proba1 rm: remove write-protected file `proba1'? y removing `proba1' $ rm –f proba2 $
Kérhetjük a programot a “-i” kapcsoló megadásával, hogy fájltörlés előtt kérdezzen rá, hogy valóban törölni akarjuk-e a fájlt:
$ touch proba $ rm -iv proba rm: remove `proba'? y removing `proba' $
Az “-f” paraméter nem csak akkor hasznos, ha rákérdezés nélkül akarunk írásvédett fájlt törölni, hanem akkor is, ha azt akarjuk, hogy egy esetleges nem létező fájl törlésének kísérletekor se legyen hibaüzenet, főleg script programok írásakor, futtatásakor lehet segítségünkre.
Azonban vigyázzunk a használatakor rendszergazdaként. A “-r” paraméterrel együtt használva root felhasználóként hatalmas károkat okozhatunk. Az alábbi két példa végzetes kimenetelű a rendszer számára, lehetőleg kerüljük a használatukat. A második parancs példa egy véletlen szóköz karakterre, aminek következtében nem a /tmp/* könyvtárat adtuk meg paraméternek, hanem felsorolásként a /tmp és a /* könyvtárakat:
$ rm –rf / $ rm –rf /tmp /* $
A második parancs helyesen így lett volna:
$ rm –rf /tmp/* $
Leheletnyi a különbség, de halálos …
Végezetül pedig lássunk egy különleges paramétert, ami sok más programnál is megtalálható, ez pedig a “—” (kettő kötőjel). E paraméter alkalmazásával mondhatjuk meg a programnak, hogy ami e mögött szerepel az már biztos nem paraméter. Tételezzük fel, hogy létezik egy “-proba” nevű fájl, amit le szeretnénk törölni:
$ rm -proba rm "-proba" rm: invalid option -- p Try `rm --help' for more information. $
Hibaüzenetet kapunk, ugyanis a fájlnév első karaktere “–” (kötőjel), így paraméterként szeretné értelmezni az rm, ami nem sikerülhet neki. Az idézőjelek használata sem jelent megoldást a problémára:
$ rm '-proba'
vagy
$ rm "-proba"
esetén is ugyanazt a hibaüzenetet kapjuk, mint nélkülük. Ilyen problémák áthidalására használható a “—” paraméter:
$ rm -i -- –proba removing `-proba' $
Új fájl kezdeti jogainak meghatározása – umask
Új fájl létrehozása mindig 0666 (a tulajdonos, a csoport és a többiek által is olvasható és írható) jogokkal történik. Ezeket az alap jogosultságokat módosíthatjuk a programmal. Akárhogy is állítsuk be őket, a futtatási, a SUID, a SGID és a Sticky jog sosem kerül rá egy újonnan létrehozott fájlra, így a program, ha paraméterben páratlan számot kap, kivon belőle egy egyest.
A következőképpen képződik az alap jogosultság: a megadott umask értéket bitenként invertáljuk, majd az eredmény és az alap 0666 érték között AND műveletet végzünk. A kapott jogok kerülnek rá az újonnan létrehozott fájlra:
$ umask 0000 $ touch proba1 $ ls -lak proba1 -rw-rw-rw- 1 jonci jonci 0 jan 7 00:38 proba1 $ $ umask 0044 $ touch proba2 $ ls -lak proba2 -rw--w--w- 1 jonci jonci 0 jan 7 00:38 proba2 $ $ umask 0666 $ touch proba3 $ ls -lak proba3 ---------- 1 jonci jonci 0 jan 7 00:38 proba3 $
A beállított umask értéket a program paraméter nélküli futtatásával kérhetjük le, a “-S” kapcsoló esetén betűkkel jelzi a jogokat:
$ umask 0037 $ umask 0037 $ umask -S u=rwx,g=r,o= $
Fájl típusának meghatározása – file
Három tesztet hajt végre a fájlon. Az első sikeres vizsgálat eredménye kerül a kimenetre. Az eredmény általában a következő lehet:
text : | ASCII karaktereket tartalmazó fájl |
executable : | a kernel számára értelmes, futtatható állomány |
data : | bármi más, ami nem tartozik az első kettőbe |
A “-z” paraméter megadásával a tömörített fájlokban elhelyezett fájlokat is vizsgálja. A “-k” paraméterrel pedig kérhetjük, hogy az első egyezéskor ne álljon meg a vizsgálat.
$ file /bin/cp /bin/cp: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped $ file /etc/fstab /etc/fstab: UTF-8 Unicode text $
Lemezfoglalást összegzése – du
A parancs segítségével lekérdezhetjük az elfoglalt lemezterületet. Alapértelmezésként az aktuális könyvtárban levő könyvtárak lemezfoglaltságát jeleníti meg. Ha a fájlok lemezfoglaltságát is látni szeretnénk, akkor meg kell adni a “-a” paramétert, valamint ha a lemezfoglaltságot bájtokban szeretnénk látni, akkor adjuk meg a “-b” paramétert is:
$ du –ab /tmp/probakonyvtar 0 /tmp/probakonyvtar/proba1 0 /tmp/probakonyvtar/proba1 512 /tmp/probakonyvtar A kijelzett értéket kérhetjük kilóbájtban is: $ du –ak /tmp/probakonyvtar 0 /tmp/probakonyvtar/proba1 0 /tmp/probakonyvtar/proba1 1 /tmp/probakonyvtar $
A “-h” paraméter segítségével bekapcsolhatjuk a “human readable“, azaz az “emberi olvashatóság” üzemmódot. Megadásával a kijelzésre került lemezfoglaltsági érték a lehető legnagyobb dimenzióval történik, amelynél az érték még nem kisebb, mint 1 (értékek lehetnek például: 1K, 2.54M, 7.1G):
$ du –h /tmp/probakonyvtar 512 /tmp/probakonyvtar/elso_alkonyvtar 512 /tmp/probakonyvtar/masodik_alkonyvtar 1.5k /tmp/probakonyvtar $
Van még egy kellemes paramétere a programnak. A “-s” paraméter megadásával egy összegzést kérhetünk az elfoglalt helyről, így ha egy könyvtárról kérdezzük le az információt, akkor nem írja ki minden alkönyvtárára, fájljára, hanem csak a könyvtár össze lemezfoglaltságát jeleníti meg. Használjuk az előbb megismert “-h” kapcsolót is:
$ du –sh /bin 2.5M /bin $
Szabad lemezterület kijelzése – df
A rendszerbe felcsatolt partíciók, adattárolók foglaltságáról kérhetünk le adatokat. Ennek a programnak is van “-k” paramétere, aminek hatására a méreteket kilóbájtban kapjuk. Valamint itt is van “-h” paraméter az “emberi olvashatóság” üzemmód bekapcsolására:
$ df –h Filesystem Size Used Avail Use% Mounted on /dev/sda7 5.6G 4.6G 1.0G 82% / /dev/sda1 23M 5.7M 15M 27% /boot /dev/sda6 141M 75M 66M 53% /var/log /dev/sda8 28G 1.2G 27G 4% /opt $
Ha nem vagyunk kíváncsiak az összes partíció adatára, akkor szűkíthetjük a kiírást csak a kívántra. Ehhez csak meg kell adni paraméterben az adott csatolási könyvtárat:
$ df –h /opt Filesystem Size Used Avail Use% Mounted on /dev/sda8 28G 1.2G 27G 4% /opt $