15 tar parancspéldák Sysadmin és fejlesztők számára

A tar a Unix és Linux alapú rendszerekben elérhető egyik népszerű fájlarchiválási formátum.

Maga a név a Tape ARchive-ból származik, mivel azt szalagos eszközökön történő szekvenciális adatok írására fejlesztették ki. Néha tarballnak is nevezik.

Alapértelmezés szerint a tar csak tömörítés nélkül, de bizonyos részek felhasználásával archiválja a fájlokat. Különféle tömörítési technikákat alkalmazhatunk a tömörített kimenet eléréséhez. A tar segédprogram általában alapértelmezés szerint benne van a legtöbb Linux-disztribúcióban, és magát a formátumot más operációs rendszerek is támogatják, beleértve a Windowst és a macOS-t is, különböző eszközökön és segédprogramokon keresztül.

Ebben a cikkben bemutatunk néhány gyakori példát és a tar parancsot és a támogatott jelzők használatát.

Tehát kezdjük…

Tar Archívum létrehozása

Egy egyszerű tömörítetlen archívum létrehozásához a tar parancs szintaxisa a következő:

$ tar cvf <tar-file-name> <files-to-archive>

Itt a c a létrehozást, a v a részletes kimenetet, az f pedig a tar archívum fájlnevét jelenti. Megállapodás szerint adja meg a tar fájlnevet .tar kiterjesztéssel. Az archiválandó fájlok megadhatók helyettesítő karakterekkel, vagy egyetlen vagy több fájlnévként/útvonalként.

Például három fájl van a könyvtáramban:

$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$

És szeretnék létrehozni egy tar archívumot, amely mindhárom fájlt tartalmazza, ezt a következőképpen lehet megtenni:

$ tar cvf archive.tar *
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
$

Csak bizonyos fájlokat adhatok meg az archiváláshoz, például:

$ tar cvf archive1.tar file1.txt file2.txt
file1.txt
file2.txt
$ ls -l archive1.tar
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar
$

Tömörített archívum (GZ) létrehozása

A tar nemcsak a fájlok archiválását teszi lehetővé, hanem a tömörítést is, hogy helyet takarítson meg. Az egyik népszerű tömörítési formátum a gunzip, amelyet általában .gz kiterjesztéssel jelölnek a .tar után vagy tgz-ként. Használhatjuk a z flaget annak meghatározására, hogy a fájlokat gunzip segítségével kell tömöríteni. Íme egy példa:

$ tar cvzf archive.tar.gz file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$

Megfigyelhető, hogy mindkét archív fájl mérete lényegesen eltérő, bár mindkettő ugyanazt a három fájlt tartalmazza. Ennek oka a z zászlót használó tömörítés.

  KVM virtuális gép létrehozása Ubuntuban

Tömörített archívum létrehozása (BZ2)

A tar számos más tömörítési formátumot is támogat. Az egyik a bz2 vagy a bzip2, amelyet a tar.bz2 kiterjesztéssel vagy néha tbz2-vel jelölnek. Lehet, hogy kisebb archívumot ad, de több CPU-t fogyaszt, így a tömörítési/kicsomagolási folyamat lassabb lehet, mint a gz archívum.

Példa:

$ tar cvjf archive.tar.bz2 file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   212 Sep 12 20:25 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$ file archive.tar*
archive.tar:     POSIX tar archive (GNU)
archive.tar.bz2: bzip2 compressed data, block size = 900k
archive.tar.gz:  gzip compressed data, from Unix, original size modulo 2^32 10240
$

Távolítsa el az összes fájlt

A tar archívum (akár tömörített, akár tömörítetlen) egyszerűen kibontható az x opció használatával. Az alábbi példák tisztázzák a használatát:

$ tar xvf archive.tar
file1.txt
file2.txt
file3.txt
$ ls -l
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair    13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair    19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair    24 Sep 12 20:08 file3.txt
$

Ez így működik egy gz tömörített archívumnál:

$ tar xvf archive.tar.gz
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Vagy akár egy bz2 tömörített archívumhoz is:

$ tar xvf archive.tar.bz2
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Lista tar Tartalom

A tar archívum tartalmának listázásához használhatja a t jelzőt az alábbiak szerint:

$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$

Untar Specific Files

Egy tar vagy tar.gz vagy tar.bz2 archívumból csak egy fájl bontható ki a következő fájlnév megadásával:

$ tar xvf archive.tar.bz2 file1.txt
file1.txt
$ ls -l
total 8
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
$

Hasonlóképpen több fájlnevet is megadhat szóközzel elválasztva, hogy egyszerre kibontsa őket.

$ tar xvf archive.tar.bz2 file1.txt file3.txt
file1.txt
file3.txt
$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Távolítsa el a helyettesítő karaktert

Egy vagy több fájl kibontásához helyettesítő karakteres PATTERN használatával, használja a –wildcards jelzőt:

$ tar xvf archive.tar.bz2 --wildcards "file*"
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Fájlok hozzáadása az archívumhoz

Új fájlok hozzáadhatók/hozzáfűzhetők a meglévő tömörítetlen tarballokhoz az r vagy –append kapcsolóval új fájlnevekkel vagy helyettesítő karaktermintával (ne feledje, ez csak tömörítetlen .tar fájlokkal működik, tar.gz vagy tar.bz2 tömörített formátumokkal nem):

$ tar rvf archive.tar file-new*
file-new.txt
file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new2.txt
$

Megfigyelhető, hogy az archive.tar tartalmának listázása ismét megjeleníti a két újonnan hozzáadott fájlt.

  A LastPass biztonsági kihívás leküzdésének legjobb módja

Fájlok törlése az archívumból

Adott fájlok eltávolítása a tar archívumból lehetséges a –delete kapcsolóval az alábbiak szerint (hasonlítsa össze a tar listát a fájlok törlése előtt és után):

$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new2.txt
$ tar --delete -f archive.tar file-new.txt file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
$

Ez ismét csak a tömörítetlen tarballoknál működik, és a tömörített archív formátumoknál nem működik.

Létrehozás a Verify segítségével

Tömörítetlen tar fájlok létrehozásakor ellenőrizheti az archívum tartalmát a W jelzővel a következőképpen:

$ tar cvfW archive.tar file*.txt
file1.txt
file2.txt
file3.txt
Verify file1.txt
Verify file2.txt
Verify file3.txt
$

Ez nem használható tömörítési jelzőkkel, bár a létrehozott tar fájlt később gzip vagy más eszközök segítségével tömörítheti.

Tar kibontása mappába

Ha a tarball tartalmát egy adott mappába szeretné kibontani az aktuális könyvtár helyett, használja a -C kapcsolót a könyvtár elérési útjával az alábbiak szerint:

$ tar xvf archive.tar -C new-directory/
file1.txt
file2.txt
file3.txt
file2.txt
file4.txt
$ ls -l new-directory/
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt
$

Diff Flag használata

A –diff vagy d kapcsolóval megkeresheti a tar archívumban lévő fájlok és a fájlrendszerben lévő fájlok közötti változásokat. Íme egy példa, amely egyszer lefuttatja a diff-et, amikor a tar-on belüli és a külső fájl azonos volt. A fájl frissítése után ismét lefutott, hogy megmutassa a kimeneti különbséget.

$ tar dvf archive.tar file4.txt
file4.txt
$
$ echo newline > file4.txt
$
$ tar dvf archive.tar file4.txt
file4.txt
file4.txt: Mod time differs
file4.txt: Size differs
$

Fájlok kizárása

Tar-archívumok létrehozásakor követelmény lehet bizonyos fájlok kizárása. Ez az –exclude jelzővel érhető el.

$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/
dir/
dir/file1.txt
dir/file3.txt
$ ls -l dir
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt
$ tar tvf archive.tar.gz
drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/
-rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt
-rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt
$

Amint a fenti kimenetből észrevehető, többször megadhatjuk az –exclude jelzőt, hogy több fájlnevet vagy mintát adjunk meg ÉS feltételben. Ne feledje, hogy a fenti példában a könyvtárban található hat fájl közül csak két fájl felelt meg az archive.at.gz fájlba való felvétel feltételének.

  Hogyan lássunk színkorrigált világot az iPhone segítségével

Tar Tartalomméret megtekintése

A tömörített tar archívum tartalmának méretét az alábbi paranccsal kaphatjuk meg:

$ tar tvf archive.tar.gz
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$ tar -xzf archive.tar.gz --to-stdout|wc -c
56
$

Hasonlóan a bz2 archívumhoz:

$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$ tar -xjf archive.tar.bz2 --to-stdout|wc -c
56
$

Engedélyek megőrzése

Alapértelmezés szerint a tar parancs megőrzi az archiválás alatt álló fájlok és könyvtárak engedélyeit, bár ugyanezt kifejezetten megadhatja a -p jelző vagy a -preserve-permissions használatával, az alábbiak szerint:

$ tar cvpzf archive.tar.gz *.txt
file1.txt
file2.txt
file3.txt
$

Összefoglaló 👨‍💻

A tar egy hasznos segédprogram Unix/Linux rendszereken sokáig, és elsősorban archiválási és biztonsági mentési feladatokhoz használták. A segédprogram az idők során számos lehetőséggel fejlődött. Egyszerű és összetett feladatokhoz használható, ha ismeri az általa kínált funkciókat. Ez a cikk bemutatja a tar paranccsal végrehajtható néhány alapvető műveletet, és bemutatja, hogyan segíthet a napi rendszerfelügyeleti feladatokban.

További részletekért tekintse meg a man tar kézikönyvoldalát, vagy használja a tar –help vagy tar –usage parancsot.