103.3 Lecke 2
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
103 GNU és Unix parancsok |
Fejezet: |
103.3 Alapvető fájl-menedzsment |
Lecke: |
2/2 |
Bevezetés
Fájlok megtalálása
A gép használatakor a fájlok száma és mérete fokozatosan növekszik. Néha nehézségeket okozhat egy adott fájl megtalálása. Szerencsére a Linux biztosítja a find
funkciót a fájlok gyors keresésére és megtalálására. A find
a következő szintaxist használja:
find STARTING_PATH OPTIONS EXPRESSION
STARTING_PATH
-
meghatározza azt a mappát, ahol a keresés kezdődik.
OPTIONS
-
szabályozza a viselkedést és specifikus kritériumokat ad hozzá a keresési folyamat optimalizálása érdekében.
EXPRESSION
-
meghatározza a keresési lekérdezést.
$ find . -name "myfile.txt" ./myfile.txt
A kezdő elérési út ebben az esetben az aktuális mappa. A -name
opció azt adja meg, hogy a keresés a fájl neve alapján történjen. A myfile.txt
a keresendő fájl neve. Ha fájl-globbingot használunk, ügyeljünk arra, hogy a kifejezés idézőjelek közé kerüljön:
$ find /home/frank -name "*.png" /home/frank/Pictures/logo.png /home/frank/screenshot.png
Ez a parancs megkeresi az összes .png
végződésű fájlt a /home/frank/
mappában és alatta. Ha nem értjük a csillag (*
) használatát, akkor az előző leckéből megismerhetjük.
Kritériumok használata a keresés felgyorsításához
A find
segítségével típus, méret vagy idő alapján kereshetünk fájlokat. Egy vagy több opció megadásával a kívánt eredményt kevesebb idő alatt kapjuk meg.
Fájl típusa alapján kereső kapcsolók, például:
-type f
-
fájl keresése.
-type d
-
mappa keresése.
-type l
-
szimbolikus link keresése.
$ find . -type d -name "example"
Ez a parancs megkeresi az összes olyan mappát az aktuális mappában és alatta, amelynek a neve example
.
A find
-al használható egyéb kritériumok a következők:
-name
-
a megadott név alapján végez keresést.
-iname
-
a név alapján keres, azonban az kis- és nagybetű nem fontos (pl. a
myFile
teszteset hasonló aMYFILE
-hoz). -not
-
visszaadja azokat az eredményeket, amelyek nem felelnek meg a tesztesetnek.
-maxdepth N
-
az aktuális mappában, valamint az
N
szint mélységű mappákban keres.
Fájlok keresése módosítási idő szerint
A find
lehetővé teszi a mappahierarchia szűrését is a fájl módosításának időpontja alapján:
$ sudo find / -name "*.conf" -mtime 7 /etc/logrotate.conf
Ez a parancs a teljes fájlrendszerben (a kiindulási útvonal a gyökérkönyvtár, azaz a /
) minden olyan fájlt megkeres, amely a .conf
karakterekkel végződik és amelyet az elmúlt hét napban módosítottak. Ez a parancs a rendszer mappaszerkezetének alján kezdődő mappák eléréséhez emelt szintű jogosultságokat igényel, ezért használjuk itt a sudo
szót. Az mtime
-nak átadott argumentum a fájl utolsó módosítása óta eltelt napok számát jelöli.
Fájlok keresése méret alapján
A find
méret alapján is tud keresni fájlokat. Így kereshetünk 2G
-nél nagyobb fájlokat a /var
-ban:
$ sudo find /var -size +2G /var/lib/libvirt/images/debian10.qcow2 /var/lib/libvirt/images/rhel8.qcow2
A -size
opció az átadott argumentumnak megfelelő méretű fájlokat jeleníti meg. Néhány példa a következő argumentumokra:
-size 100b
-
pontosan 100 bájt méretű fájlok.
-size +100k
-
100 kilobájtnál nagyobb fájlok.
-size -20M
-
20 megabájtnál kisebb fájlok.
-size +2G
-
2 gigabájtnál nagyobb fájlok.
Note
|
Az üres fájlok kereséséhez használhatjuk a következőket: |
Az eredményhalmazon végrehajtható akciók
Ha a keresés megtörtént, az -exec
használatával a kapott halmazon műveleteket lehet végrehajtani:
$ find . -name "*.conf" -exec chmod 644 '{}' \;
Ez az aktuális mappában (.
) és alatta minden objektumot szűr a .conf
végződésű fájlnevekre, majd a chmod 644
parancsot hajtja végre, hogy módosítsa a jogosultságokat az eredményeken.
Egyelőre ne foglalkozzunk a '{}' \;
jelentésével, mivel arról később lesz szó.
Fájlok tartalom alapján történő szűrése a grep
segítségével
A grep
egy kulcsszó előfordulásának keresésére szolgál.
Vegyünk egy olyan helyzetet, amikor a fájlok keresése a tartalom alapján történik:
$ find . -type f -exec grep "lpi" '{}' \; -print ./.bash_history Alpine/M helping/M
Ez az aktuális mappahierarchiában (.
) minden olyan objektumot megkeres, amely egy fájl (-type f
), majd végrehajtja a grep "lpi"
parancsot minden olyan fájlra, amely megfelel a feltételeknek. A feltételeknek megfelelő fájlok a képernyőre kerülnek (-print
). A kapcsos zárójelek ({}
) a find
találati eredmények placeholderei. A {}
aposztrófok ('
) közé van zárva, hogy elkerüljük a speciális karaktereket tartalmazó fájlok grep
-nek történő átadását. Az -exec
parancsot pontosvesszővel (;
) fejezzük be, amelyet a shell értelmezésének elkerülése érdekében fel kell oldani (\;
).
A -delete
opció hozzáadása a kifejezés végéhez az összes megfelelő fájlt törli. Ezt az opciót akkor érdemes használni, ha biztosak vagyunk benne, hogy a találatok csak a törölni kívánt fájlokkal egyeznek meg.
Az alábbi példában a find
megkeresi, majd törli az összes olyan fájlt a hierarchiában, kezdve az aktuális mappával, amely a .bak
karakterekkel végződik:
$ find . -name "*.bak" -delete
Fájlok archiválása
A tar
parancs (archiválás és tömörítés)
A tar
parancs, a “tape archive(r)” rövidítése, tar archívumok létrehozására szolgál, egy fájlcsoport archívummá alakításával. Az archívumokat úgy hozzuk létre, hogy egy fájlcsoportot könnyen lehessen mozgatni vagy biztonsági másolatot készíteni róla. Gondoljunk a tar
-ra úgy, mint egy olyan eszközre, amely olyan ragasztót hoz létre, amelyre a fájlokat fel lehet ragasztani, csoportosítani és könnyen mozgatni.
A tar
képes a tar archívumok kicsomagolására, az archívumban található fájlok listájának megjelenítésére, valamint további fájlok hozzáadására egy meglévő archívumhoz.
A tar
parancs szintaxisa az alábbi:
tar [OPERATION_AND_OPTIONS] [ARCHIVE_NAME] [FILE_NAME(S)]
OPERATION
-
Csak egy műveleti argumentum megengedett és kötelező. A leggyakrabban használt műveletek a következők:
--create
(-c
)-
Új tar archívum létrehozása.
--extract
(-x
)-
A teljes archívum vagy egy vagy több fájl csomagolása az archívumból.
--list
(-t
)-
Az archívumban található fájlok listájának megjelenítése.
OPTIONS
-
A leggyakrabban használt opciók a következők:
--verbose
(-v
)-
A
tar
parancs által feldolgozott fájlok megjelenítése. --file=archive-name
(-f archive-name
)-
Az archívum nevének megadása.
ARCHIVE_NAME
-
Az archívum neve.
FILE_NAME(S)
-
A kicsomagolandó fájlok nevei vesszővel elválasztva. Ha nincs megadva, az egész archívum kitömörítésre kerül.
Archívum létrehozása
Tegyük fel, hogy van egy stuff
nevű mappánk az aktuális mappában, és azt egy archive.tar
nevű fájlba szeretnénk menteni. A következő parancsot futtatnánk:
$ tar -cvf archive.tar stuff stuff/ stuff/service.conf
Nézzük, mit jelentenek a kapcsolók:
-c
-
Létrehoz egy archívumot.
-v
-
Az archívum létrehozása közben a terminálban megjeleníti a folyamatot, más néven “verbose” mód. A
-v
mindig opcionális ezekben a parancsokban, de hasznos lehet. -f
-
Lehetővé teszi az archívum nevének megadását.
Általában egyetlen mappa vagy egyetlen fájl archiválásához Linuxon a következőt használjuk:
tar -cvf NAME-OF-ARCHIVE.tar /PATH/TO/DIRECTORY-OR-FILE
Note
|
A |
Ha egyszerre több mappát szeretnénk archiválni, akkor a /PATH/TO/DIRECTORY-OR-FILE
szakaszban felsoroljuk az összes mappát egy szóközzel elválasztva:
$ tar -cvf archive.tar stuff1 stuff2
Ez az archive.tar
állományban a stuff1
és stuff2
archívumát eredményezné.
Archívum kicsomagolása
A tar
segítségel kicsomagolni is lehet:
$ tar -xvf archive.tar stuff/ stuff/service.conf
Ez ki fogja csomagolni az archive.tar
tartalmát az aktuális mappába.
Ez a parancs ugyanaz, mint a fentebb használt parancs az archívum létrehozására, kivéve a -x
kapcsolót, amely a -c
kapcsolót helyettesíti.
Az archívum tartalmának egy adott mappába történő kicsomagolásához a -C
parancsot használjuk:
$ tar -xvf archive.tar -C /tmp
Ez kicsomagolja az archive.tar
tartalmát a /tmp
mappába.
$ ls /tmp stuff
Tömörítés a tar
-ral
A Linux disztribúciókhoz mellékelt GNU tar
parancs egyetlen képes létrehozni egy .tar
archívumot, majd azt gzip
vagy bzip2
tömörítéssel tömöríteni egyetlen paranccsal:
$ tar -czvf name-of-archive.tar.gz stuff
Ez a parancs egy tömörített fájlt hoz létre az gzip
algoritmus (-z
) használatával.
Míg a gzip
tömörítést leggyakrabban a .tar.gz
vagy .tgz
fájlok létrehozására használják, a tar
támogatja a bzip2
tömörítést is. Ez lehetővé teszi a bzip2
tömörített fájlok létrehozását, amelyek neve gyakran .tar.bz2
, .tar.bz
vagy .tbz
.
Ehhez a -z
-t a gzip
helyett a -j
-t a bzip2
-re cseréljük:
$ tar -cjvf name-of-archive.tar.bz stuff
A fájl kitömörítéséhez a -c
-t -x
-el helyettesítjük, ahol az x
a “extract”-ot jelenti:
$ tar -xzvf archive.tar.gz
A gzip
gyorsabb, de általában valamivel kevesebbet tömörít, így valamivel nagyobb fájlt kapunk. A bzip2
lassabb, de kicsit jobban tömörít, így valamivel kisebb fájlt kapunk. Általában azonban a gzip
és a bzip2
gyakorlatilag ugyanaz, és mindkettő hasonlóan működik.
Alternatívaként alkalmazhatjuk a gzip
vagy a bzip2
tömörítést a gzip
parancs segítségével a gzip
tömörítéshez és a bzip
parancs segítségével a bzip
tömörítéshez. Például a gzip
tömörítés alkalmazásához használjuk a következőt:
gzip FILE-TO-COMPRESS
gzip
-
ugyanezzel a névvel, de
.gz
végződéssel hozza létre a tömörített fájlt. gzip
-
a tömörített fájl létrehozása után eltávolítja az eredeti fájlokat.
A bzip2
parancs hasonló módon működik.
A fájlok kicsomagolásához a gunzip
vagy a bunzip2
algoritmust használjuk a fájl tömörítéséhez használt algoritmustól függően.
A cpio
parancs
A cpio
a copy in, copy out
rövidítése. Olyan archív fájlok feldolgozására szolgál, mint a *.cpio
vagy a *.tar
fájlok.
A cpio
az alábbi műveleteket hajtja végre:
-
Fájlok archívumba másolása.
-
Fájlok kicsomagolása archívumból.
A fájlok listáját a szabványos bemenetről veszi (többnyire az ls
kimenetéről).
Egy cpio
archívumot így hozhatunk létre:
$ ls | cpio -o > archive.cpio
Az -o
opció utasítja a cpio-t
, hogy hozzon létre egy kimenetet. Ebben az esetben a létrehozott kimeneti fájl az archive.cpio
. Az ls
parancs felsorolja az aktuális mappa archiválandó tartalmát.
Az archívum kicsomagolása az alábbi módon történik:
$ cpio -id < archive.cpio
Az -i
opciót a kicsomagolás elvégzésére használjuk. A -d
opció létrehozza a célmappát. A <
karakter a szabványos bemenetet jelöli. A kicsomagolandó bemeneti fájl az archive.cpio
.
A dd
parancs
A dd
adatokat másol át egyik helyről a másikra. A dd
parancssori szintaxisa sok más Unix programtól eltér, a GNU szabványos -option value
vagy --option=value
formátumai helyett az option=value
szintaxist használja a parancssori opciókhoz:
$ dd if=oldfile of=newfile
Ez a parancs a oldfile
tartalmát másolja az newfile
-be, ahol a if=
a bemeneti fájl, az of=
pedig a kimeneti fájlra utal.
Note
|
A |
A dd
az adatok nagy/kisbetűsre változtatására vagy közvetlenül a blokkeszközökre, például a /dev/sdb
-re történő írásra is használható:
$ dd if=oldfile of=newfile conv=ucase
Ez az oldfile
teljes tartalmát átmásolja a newfile
-ba, és az egész szöveget nagybetűvel írja.
A következő parancs a /dev/sda
lemezen található teljes merevlemezről biztonsági mentést készít a backup.dd
nevű fájlba:
$ dd if=/dev/sda of=backup.dd bs=4096
Gyakorló feladatok
-
Nézzük az alábbi listát:
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
Milyen típusó fájlokat fog kiírni ez a parancs?
-
Melyik mappában kezdődik meg a keresés?
-
-
Egy felhasználó tömöríteni szeretné a backup mappáját. Az alábbi parancsot használja:
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
Melyik kapcsoló hiányzik a mentés tömörítéséhez a
gzip
algoritmus használatával?
Gondolkodtató feladatok
-
Rendszergazdaként rendszeres ellenőrzéseket kell végezni nagy mennyiségű fájlok eltávolítása érdekében. Ezek a terjedelmes fájlok a
/var
könyvtárban találhatók, és.backup
kiterjesztéssel végződnek.-
Írjuk le a parancsot, ami a
find
használatával megkeresi ezeket a fájlokat: -
A fájlok méretének elemzése azt mutatja, hogy a fájlok mérete
100M
és1000M
között mozog. Egészítsük ki az előző parancsot ezzel az új információval, hogy megtalálhassuk a100M
és1000M
közötti méretű mentési fájlokat: -
Végül fejezzük be ezt a parancsot a törlés művelettel, hogy ezek a fájlok eltávolításra kerüljenek:
-
-
A
/var
mappában négy backup fájl található:db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
A
tar
segítségével adja meg azt a parancsot, amely létrehozza azdb-first-quarter-2018.backup.tar
nevű archívumfájlt: -
Adjuk meg azt a
tar
parancsot, amely létrehozza az archívumot és agzip
segítségével tömöríti. Figyeljünk arra, hogy az eredményül kapott fájlnévnek.gz
végződéssel kell végződnie:
-
Összefoglalás
Ebben a leckében megtanultuk:
-
Hogyan keressünk fájlokat a
find
segítségével. -
Hogyan adhatunk hozzá keresési feltételeket idő, fájltípus vagy méret alapján a
find
-hoz való argumentumokkal. -
Hogyan hajtsunk végre műveletet a visszaadott eredményhalmazon.
-
Hogyan archiváljunk, tömörítsünk és csomagoljunk ki fájlokat a
tar
segítségével. -
Archívumok feldolgozása a
cpio
-val. -
Fájlok másolása a
dd
programmal.
Válaszok a gyakorló feladatokra
-
Nézzük az alábbi listát:
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
Milyen típusó fájlokat fog kiírni ez a parancs?
Mappákat.
-
Melyik mappában kezdődik meg a keresés?
/home/frank/Documents
-
-
Egy felhasználó tömöríteni szeretné a backup mappáját. Az alábbi parancsot használja:
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
Melyik kapcsoló hiányzik a mentés tömörítéséhez a
gzip
algoritmus használatával?A
-z
.
Válaszok a gondolkodtató feladatokra
-
Rendszergazdaként rendszeres ellenőrzéseket kell végezni nagy mennyiségű fájlok eltávolítása érdekében. Ezek a terjedelmes fájlok a
/var
könyvtárban találhatók, és.backup
kiterjesztéssel végződnek.-
Írjuk le a parancsot, ami a
find
használatával megkeresi ezeket a fájlokat:$ find /var -name *.backup
-
A fájlok méretének elemzése azt mutatja, hogy a fájlok mérete
100M
és1000M
között mozog. Egészítsük ki az előző parancsot ezzel az új információval, hogy megtalálhassuk a100M
és1000M
közötti méretű backup fájlokat:$ find /var -name *.backup -size +100M -size -1000M
-
Végül fejezzük be ezt a parancsot a törlés művelettel, hogy ezek a fájlok eltávolításra kerüljenek:
$ find /var -name *.backup -size +100M -size -1000M -delete
-
-
A
/var
mappában négy backup fájl található:db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
A
tar
segítségével adja meg azt a parancsot, amely létrehozza azdb-first-quarter-2018.backup.tar
nevű archívumfájlt:$ tar -cvf db-first-quarter-2018.backup.tar db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Adjuk meg azt a
tar
parancsot, amely létrehozza az archívumot és agzip
segítségével tömöríti. Figyeljünk arra, hogy az eredményül kapott fájlnévnek.gz
végződéssel kell végződnie:$ tar -zcvf db-first-quarter-2018.backup.tar.gz db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-