A Tar parancs Linux alatt: Tar CVF és Tar XVF példaparancsokkal magyarázva

A név tara legtöbb beszámoló rövidítése a szalagos archívum . A szóban forgó "szalagok" mindazok a mágneses tároló meghajtók lennének, amelyek egészen az 1950-es években népszerűek voltak.

Ez arra utal, hogy az tareszköz lehet, hogy egy kicsit régi, és már túl van a kezdetén. De az igazság az, hogy az évek során és az informatikai világ összes szeizmikus változásán keresztül tarsemmit sem veszített ereje és értéke.

Ebben a cikkben a Linux in Action könyvem tartalma alapján bemutatom a kátrányarchívum létrehozásának, tömörítésének és helyreállításának alapjait. Kezdjük az elején.

Archívumok létrehozása

Ez a példa az összes fájlt és könyvtárat az aktuális munkakönyvtárban és alatt veszi fel, és létrehoz egy archív fájlt, amelyet okosan elneveztem archivename.tar.

Itt három argumentumot használok a tar parancs után:

  • a ckátrány új archívumot hoz létre,
  • v a képernyő kimenetét részletesre állítja, így frissítéseket kapok, és
  • f rámutat a fájlnévre, amelyet szeretnék adni az archívumnak.

Ez *utasítja taraz összes fájlt és a helyi könyvtárakat rekurzívan beillesztésre.

$ tar cvf archivename.tar * file1 file2 file3 directory1 directory1/morestuff directory1/morestuff/file100 directory1/morestuff/file101 

A tar parancs soha nem mozgatja és nem törli az eredeti könyvtárakat és fájlokat, amelyeket betáplál - csak archivált másolatokat készít.

Megjegyzendő továbbá, hogy az előző parancsban csillag (*) helyett egy pont (.) Használata még rejtett fájlokat is tartalmaz (amelyek fájlnevei ponttal kezdődnek) az archívumba.

Ha a saját számítógépén követi (ahogy mindenképpen kéne), akkor megjelenik egy új fájl, archivename.tar néven. A .tar fájlnévkiterjesztés nem szükséges, de mindig jó, ha a fájl célját a lehető legtöbb módon egyértelműen közli.

Az archívum kibontása a fájlok visszaállítása érdekében egyszerű: Csak a xvfhelyett használja cvf. Ez a példában az eredeti fájlok és könyvtárak új példányait menti az aktuális helyre.

$ tar xvf archivename.tar file1 file2 file3 directory1 directory1/morestuff directory1/morestuff/file100 directory1/morestuff/file101 

Természetesen azt is megteheti, hogy a tar a kitermelt fájlokat elküldi valamilyen más helyre az -Cargumentum használatával, amelyet a cél helye követ:

$ tar xvf archivename.tar -C /home/mydata/oldfiles/ 

Nem akarja mindig az összes fájlt felvenni az archívum egyik könyvtárfájába.

Tegyük fel, hogy készítettél néhány videót, de ezek jelenleg könyvtárakban vannak, mindenféle grafikai, audio és szöveges fájlokkal együtt (amelyek tartalmazzák a jegyzeteidet). Az egyetlen fájl, amelyről biztonsági másolatot kell készíteni, az .mp4 fájlnévkiterjesztést használó végleges videoklipek.

Ennek módja:

$ tar cvf archivename.tar *.mp4 

Nagyszerű. De ezek a videofájlok hatalmasak. Nem lenne jó, ha tömörítéssel egy kicsit kicsinyítenénk ezt az archívumot?

Ne mondj többet! Csak futtassa az előző parancsot a z(zip) argumentummal. Ez megmondja a gzip programnak, hogy tömörítse az archívumot.

Ha követni szeretné az egyezményt, hozzáadhat egy .gzkiterjesztést a .tarmár meglévő mellett. Ne feledje: egyértelműség.

Így fog játszani:

$ tar czvf archivename.tar.gz *.mp4 

Ha ezt kipróbálja saját .mp4 fájljain, majd az ls -l fájlt futtatja az új archívumokat tartalmazó könyvtárban, akkor észreveheti, hogy a .tar.gzfájl nem sokkal kisebb, mint a .tarfájl, talán kb . 10%. Mi van ezzel?

Nos, a .mp4fájlformátum maga is tömörítve van, így sokkal kevesebb hely van a gzip számára a dolgainak elvégzésére.

Mivel a tar teljes mértékben ismeri Linux környezetét, felhasználhatja azokat a fájlok és könyvtárak kiválasztására, amelyek a jelenlegi munkakönyvtárán kívül élnek. Ez a példa az összes .mp4fájlt hozzáadja a /home/myuser/Videos/könyvtárhoz:

$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4 

Mivel az archív fájlok nagyok lehetnek, előfordulhat, hogy van értelme több kisebb fájlra bontani őket, áthelyezni új otthonukba, majd a másik végén újra létrehozni az eredeti fájlt. A hasító eszköz erre a célra készült.

Ebben a példában -bazt mondja a Linuxnak, hogy ossza fel az archivename.tar.gz fájlt 1 GB méretű részekre. Ezután a művelet megnevezi az egyes részeket - archivename.tar.gz.partaa, archivename.tar.gz.partab, archivename.tar.gz.partac és így tovább:

$ split -b 1G archivename.tar.gz "archivename.tar.gz.part" 

A másik oldalon újra létrehozza az archívumot az egyes részek egymás utáni felolvasásával (cat archivename.tar.gz.part *), majd irányítsa át a kimenetet egy új fájlba, archivename.tar.gz néven:

$ cat archivename.tar.gz.part* > archivename.tar.gz 

Streaming fájlrendszer archívumok

Itt kezdődnek a jó dolgok. Megmutatom, hogyan hozhat létre archív képet egy működő Linux-telepítésről, és hogyan továbbíthatja azt egy távoli tárhelyre - mindezt egyetlen paranccsal. Itt van a parancs:

# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz" 

Ahelyett, hogy mindezt azonnal megpróbálnám elmagyarázni, kisebb példákat használok egy-egy darab feltárására.

Hozzunk létre egy archívumot egy fontos anyag nevű könyvtár tartalmáról, amely nagyon fontos dolgokkal van tele:

$ tar czvf - importantstuff/ | ssh [email protected] "cat > /home/username/myfiles.tar.gz" importantstuff/filename1 importantstuff/filename2 [...] [email protected]'s password: 

Hadd magyarázzam el ezt a példát. Ahelyett, hogy az archívum nevét közvetlenül a parancs argumentumok után írtam volna (ahogy eddig tetted), inkább egy kötőjelet (czvf -) használtam.

A kötőjel adatokat ad ki a standard kimenetre. Ez lehetővé teszi az archív fájlnév részleteinek visszaszorítását a parancs végére, és felszólítja a tar-t, hogy inkább az archívum forrástartalmát várja el.

Ezután átneveztem (|) a meg nem nevezett, tömörített archívumot egy ssh bejelentkezéshez egy távoli szerveren, ahol tőlem kérték a jelszavamat.

Az idézőjelekbe foglalt parancs ezután végrehajtotta a macskát az archív adatfolyam ellen, amely az adatfolyam tartalmát a myfiles.tar.gz nevű fájlba írta a távoli állomás saját könyvtárában.

Az archívumok ilyen módon történő előállításának egyik előnye, hogy elkerüli a középső lépés költségeit. Nem kell ideiglenesen menteni az archívum egy példányát a helyi gépre. Képzelje el, hogy biztonsági másolatot készít egy olyan telepítésről, amely 110 GB-ot tölt ki 128 GB szabad helyéből. Hova kerülne az archívum?

Ez csak egy fájlkönyvtár volt. Tegyük fel, hogy biztonsági másolatot kell készítenie egy aktív Linux operációs rendszerről egy USB meghajtóra, hogy áthelyezhesse azt egy külön gépre, és bedobhassa az adott gép fő meghajtójába.

Feltéve, hogy a második gépen már telepítve van ugyanarról a Linux-verzióról, a következő másolási / beillesztési művelet az első pontos másolatát generálja.

MEGJEGYZÉS: Ez nem fog működni olyan célmeghajtón, amelyre még nincs telepítve Linux fájlrendszer. A helyzet kezeléséhez használnia kell dd.

The next example creates a compressed archive on the USB drive known as /dev/sdc1.

The --one-file-system argument excludes all data from any file system besides the current one. This means that pseudo partitions like /sys/ and /dev/ won’t be added to the archive. If there are other partitions that you want to include (as you’ll do for /usr/ and /var/ in this example), then they should be explicitly added.

Finally, you can exclude data from the current file system using the --exclude argument:

# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \ --one-file-system \ / /usr /var \ --exclude=/home/andy/ 

Now let’s go back to that full-service command example. Using what you’ve already learned, archive all the important directories of a file system and copy the archive file to a USB drive. It should make sense to you now:

# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz" 

There's much more administration goodness in the form of books, courses, and articles available at my bootstrap-it.com.