Tar är ett av de mest använda filarkiveringsformaten inom Unix- och Linuxbaserade system.
Namnet ”tar” härstammar från ”Tape ARchive” då det ursprungligen skapades för att spara data sekventiellt på bandenheter. Det refereras ibland till som en ”tarball”.
Som standard packar tar ihop filer utan komprimering, men med vissa tilläggsfunktioner. Genom att använda olika komprimeringstekniker kan man generera ett komprimerat resultat. Tar-verktyget är vanligtvis en standardkomponent i de flesta Linuxdistributioner, och formatet stöds även i andra operativsystem, som Windows och macOS, med hjälp av diverse verktyg.
Denna artikel kommer att gå igenom några av de vanligaste exemplen och användningsområdena för tar-kommandot och dess flaggor.
Låt oss sätta igång…
Skapa ett tar-arkiv
För att skapa ett enkelt, okomprimerat arkiv ser tar-kommandots syntax ut så här:
$ tar cvf <arkivnamn.tar> <filer att arkivera>
Här står ”c” för att skapa ett arkiv, ”v” för att ge detaljerad utdata och ”f” för att ange namnet på tar-arkivfilen. Enligt konvention bör tar-filnamn ha tillägget .tar. Filerna som ska arkiveras kan anges med jokertecken, enskilda filnamn eller flera filnamn/sökvägar.
Som exempel har jag tre filer i min katalog:
$ 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 $
För att skapa ett tar-arkiv som inkluderar alla tre filerna kan jag göra så här:
$ 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 $
Jag kan även ange specifika filer att arkivera, till exempel:
$ 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 $
Skapa ett komprimerat arkiv (GZ)
Tar tillåter inte bara arkivering av filer utan kan även komprimera dem för att spara lagringsutrymme. Ett vanligt komprimeringsformat är gunzip, vanligtvis representerat av tillägget .gz efter .tar, eller som .tgz. Genom att använda flaggan ”z” anger vi att filerna ska komprimeras med gunzip. Här är ett exempel:
$ 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 $
Observera att storleken på de två arkivfilerna skiljer sig avsevärt, trots att de innehåller samma tre filer. Detta beror på att komprimering använts med hjälp av flaggan ”z”.
Skapa komprimerat arkiv (BZ2)
Tar stöder ett flertal andra komprimeringsformat. Ett av dem är bz2 eller bzip2, som representeras av tillägget .tar.bz2 eller ibland .tbz2. Detta kan resultera i en mindre arkivstorlek, men medför också högre CPU-användning, vilket kan göra komprimerings-/dekomprimeringsprocessen långsammare än för gz-arkiv.
Exempel:
$ 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 $
Extrahera alla filer
Ett tar-arkiv (oavsett om det är komprimerat eller okomprimerat) kan enkelt extraheras med hjälp av alternativet ”x”. Följande exempel visar hur detta fungerar:
$ 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 $
Detta fungerar även för ett gz-komprimerat arkiv:
$ 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 $
Och även för ett bz2-komprimerat arkiv:
$ 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-innehåll
För att lista innehållet i ett tar-arkiv kan du använda flaggan ”t” enligt nedan:
$ 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 $
Extrahera specifika filer
En enskild fil kan extraheras från ett tar-, tar.gz- eller tar.bz2-arkiv genom att ange filnamnet så här:
$ 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 $
På samma sätt kan du ange flera filnamn, separerade med mellanslag, för att extrahera dem samtidigt.
$ 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 $
Extrahera med jokertecken
För att extrahera en eller flera filer med hjälp av ett jokertecken (PATTERN) används flaggan ”–wildcards”:
$ 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 $
Lägga till filer i arkiv
Nya filer kan läggas till i befintliga okomprimerade tar-filer med hjälp av flaggan ”r” eller ”–append” tillsammans med de nya filnamnen eller jokerteckenmönstren. (Observera att detta endast fungerar med okomprimerade .tar-filer och inte med tar.gz eller tar.bz2 komprimerade format):
$ 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 $
Som du ser visar nu listan över innehållet i archive.tar även de två nyligen tillagda filerna.
Ta bort filer från arkivet
Det är möjligt att ta bort specifika filer från ett tar-arkiv med hjälp av flaggan ”–delete” (jämför tar-listan före och efter att filer har tagits bort):
$ 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 $
Återigen, detta fungerar endast för okomprimerade tar-filer och misslyckas för komprimerade arkivformat.
Skapa med verifiering
När du skapar okomprimerade tar-filer kan du verifiera arkivets innehåll med flaggan ”W” på följande sätt:
$ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $
Detta kan inte användas med komprimeringsflaggor, men du kan komprimera den skapade tar-filen i efterhand med gzip eller andra verktyg.
Extrahera tar till mapp
Om du vill extrahera innehållet i din tar-fil till en specifik mapp istället för den aktuella katalogen, använder du flaggan ”-C” tillsammans med katalogsökvägen, som visas nedan:
$ 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 $
Använd diff-flaggan
Du kan använda flaggan ”–diff” eller ”d” för att hitta eventuella ändringar mellan filerna i tar-arkivet och de i filsystemet. Här är ett exempel där diff körs en gång när filerna inuti tar-arkivet och utanför var identiska. Efter att filen uppdaterats kördes det igen för att visa skillnaden i utdata.
$ 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 $
Exkludera filer
Ibland kan det finnas behov av att exkludera specifika filer när du skapar tar-arkiv. Detta kan göras med flaggan ”–exclude”.
$ 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 $
Som du ser i utdata ovan kan vi ange flaggan ”–exclude” flera gånger för att ange flera filnamn eller mönster i ett ”AND”-tillstånd. Observera att av de sex filerna i katalogen i exemplet ovan var det bara två filer som uppfyllde villkoret för att inkluderas i archive.at.gz.
Visa storlek på tar-innehåll
Vi kan få storleken på innehållet i ett komprimerat tar-arkiv med kommandot nedan:
$ 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 $
På samma sätt för bz2-arkiv:
$ 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 $
Bevara behörigheter
Som standard bevarar tar-kommandot behörigheten för filer och kataloger som det arkiverar, men du kan även explicit ange detta med flaggan ”-p” eller ”–preserve-permissions” som visas nedan:
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $
Sammanfattning 👨💻
Tar har länge varit ett användbart verktyg i Unix/Linux-system och används främst för arkivering och säkerhetskopiering. Verktyget har utvecklats och fått många alternativ över tid. Det kan användas för både enkla och komplexa uppgifter, förutsatt att du har kunskap om dess funktioner. Den här artikeln har gått igenom några av de grundläggande funktionerna du kan använda med tar-kommandot och visar hur det kan hjälpa dig med dina dagliga systemadministrationsuppgifter.
För mer information, se manualen med kommandot ”man tar” eller använd ”tar –help” eller ”tar –usage”.