Naredba Tar u Linuxu: Tar CVF i Tar XVF objašnjene primjerom naredbi

Naziv tarje, po većini računa, kratica za arhivu trake . Dotične "vrpce" bili bi svi oni magnetski pogoni za pohranu koji su bili popularni još 1950-ih.

To sugerira da bi taralat mogao biti malo star i prošao svoje najbolje godine. Ali istina je da, tijekom svih godina i kroz sve seizmičke promjene u IT svijetu, tarnije izgubio ništa od svoje moći i vrijednosti.

U ovom članku, na temelju sadržaja iz moje knjige Linux u akciji, pokazat ću vam osnove stvaranja, kompresije i obnavljanja tar arhive. Krenimo od početka.

Stvaranje arhiva

Ovaj će primjer uzeti sve datoteke i direktorije unutar i ispod trenutnog radnog direktorija i stvoriti arhivsku datoteku koju sam pametno imenovao archivename.tar.

Ovdje koristim tri argumenta nakon naredbe tar:

  • cgovori tar stvoriti novu arhivu,
  • v postavlja izlaz zaslona na opsežan, tako da ću dobiti ažuriranja i
  • f upućuje na naziv datoteke koju bih želio dati u arhivu.

To *je ono što govori tarda rekurzivno uključuje sve datoteke i lokalne direktorije.

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

Naredba tar nikada neće premjestiti ili izbrisati nijedan izvorni direktorij i datoteke kojima ga hranite - ona samo čini arhivirane kopije.

Također biste trebali primijetiti da bi upotreba točke (.) Umjesto zvjezdice (*) u prethodnoj naredbi uključivala čak i skrivene datoteke (čija imena datoteka počinju točkom) u arhivi.

Ako pratite na svom računalu (kao što biste definitivno trebali), vidjet ćete novu datoteku koja se zove archivename.tar. Proširenje naziva datoteke .tar nije potrebno, ali uvijek je dobro na što je moguće više načina jasno priopćiti svrhu datoteke.

Izdvajanje arhive radi vraćanja datoteka jednostavno je: samo upotrijebite xvfumjesto cvf. To će, u primjeru, spremiti nove kopije izvornih datoteka i direktorija na trenutnom mjestu.

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

Naravno, tar može također poslati svoje izvađene datoteke na neko drugo mjesto koristeći -Cargument, nakon čega slijedi ciljno mjesto:

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

Nećete uvijek željeti uključiti sve datoteke unutar stabla direktorija u svoju arhivu.

Pretpostavimo da ste izradili neke videozapise, ali oni se trenutno čuvaju u direktorijima zajedno sa svim vrstama grafičkih, audio i tekstualnih datoteka (koje sadrže vaše bilješke). Jedine datoteke koje trebate sigurnosno kopirati su konačni videoisječci koji koriste ekstenziju naziva .mp4.

Evo kako to učiniti:

$ tar cvf archivename.tar *.mp4 

To je odlično. Ali te su video datoteke ogromne. Ne bi li bilo lijepo smanjiti tu arhivu pomoću kompresije?

Ne govori više! Samo pokrenite prethodnu naredbu s zargumentom (zip). To će reći gzip programu da komprimira arhivu.

Ako želite slijediti konvenciju, možete dodati i .gzproširenje uz .tarveć postojeće. Zapamtite: jasnoća.

Evo kako bi se to odigralo:

$ tar czvf archivename.tar.gz *.mp4 

Ako ovo isprobate na vlastitim .mp4 datotekama, a zatim pokrenete ls -l u direktoriju koji sadrži nove arhive, možda ćete primijetiti da .tar.gzdatoteka nije toliko manja od .tardatoteke, možda 10% ili tako nekako. Što je s tim?

Pa, .mp4format datoteke je sam stisnut, tako da ima puno manje prostora za gzip da radi svoje stvari.

Kako je tar u potpunosti svjestan svog Linux okruženja, možete ga koristiti za odabir datoteka i direktorija koji žive izvan vašeg trenutnog radnog direktorija. Ovaj primjer dodaje sve .mp4datoteke u /home/myuser/Videos/direktoriju:

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

Budući da arhivske datoteke mogu postati velike, ponekad bi imalo smisla razbiti ih na više manjih datoteka, prenijeti ih u njihov novi dom, a zatim ponovno stvoriti izvornu datoteku na drugom kraju. Alat za razdvajanje napravljen je u tu svrhu.

U ovom primjeru -bgovori Linuxu da podijeli datoteku archivename.tar.gz na dijelove veličine 1 GB. Zatim operacija imenuje svaki od dijelova - archivename.tar.gz.partaa, archivename.tar.gz.partab, archivename.tar.gz.partac i tako dalje:

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

S druge strane, ponovno stvarate arhivu čitajući svaki od dijelova u nizu (mačka archivename.tar.gz.part *), a zatim preusmjeravate izlaz u novu datoteku koja se naziva archivename.tar.gz:

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

Strujanje arhiva datotečnog sustava

Ovdje počinju dobre stvari. Pokazat ću vam kako stvoriti arhivsku sliku radne Linux instalacije i pretočiti je na udaljeno mjesto za pohranu - sve u okviru jedne naredbe. Evo naredbe:

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

Umjesto da to sve odmah objasnim, upotrijebit ću manje primjere kako bih to istraživao jedan po jedan dio.

Stvorimo arhivu sadržaja direktorija zvanog importantstuff koji je ispunjen, pa, stvarno važnim stvarima:

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

Dopustite mi da objasnim taj primjer. Umjesto da unesem ime arhive odmah nakon naredbenih argumenata (na način koji ste radili do sada), upotrijebio sam crticu (czvf -).

Crtica daje podatke na standardni izlaz. Omogućuje vam da detalje imena datoteke arhive vratite na kraj naredbe i govori taru da umjesto toga očekuje izvorni sadržaj za arhivu.

Zatim sam neimenovanu, komprimiranu arhivu preusmjerio u ssh prijavu na udaljeni poslužitelj gdje su me pitali za lozinku.

Naredba zatvorena pod navodnicima tada je izvršila cat protiv arhivskog toka podataka, koji je sadržaj streama zapisao u datoteku nazvanu myfiles.tar.gz u mom početnom direktoriju na udaljenom hostu.

Jedna od prednosti generiranja arhiva na ovaj način je ta što izbjegavate režijske troškove srednjeg koraka. Nije potrebno čak niti privremeno spremiti kopiju arhive na lokalni stroj. Zamislite sigurnosnu kopiju instalacije koja ispunjava 110 GB od svojih 128 GB dostupnog prostora. Kamo bi nestala arhiva?

To je bio samo direktorij datoteka. Pretpostavimo da trebate izraditi sigurnosnu kopiju aktivnog Linux OS-a na USB pogonu kako biste ga mogli premjestiti na zasebni stroj i spustiti u glavni pogon tog stroja.

Pod pretpostavkom da već postoji nova instalacija iste verzije Linuxa na drugom stroju, sljedeća operacija kopiranja / lijepljenja generirat će točnu presliku prve.

NAPOMENA: Ovo neće raditi na ciljnom pogonu koji još nema instaliran Linux sustav datoteka. Da biste riješili tu situaciju, morat ćete upotrijebiti 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.