15 tar kommandoexempel för Sysadmin och utvecklare

tar är ett av de populära filarkiveringsformaten som finns tillgängliga i Unix- och Linux-baserade system.

Själva namnet kommer från Tape ARchive eftersom det utvecklades för att skriva sekventiell data på bandenheter. Det kallas också för tarball ibland.

Som standard arkiverar tar endast filerna utan komprimering men med vissa delar. Vi kan använda olika komprimeringstekniker för att få en komprimerad utdata. tar-verktyget ingår vanligtvis i de flesta Linux-distributioner som standard, och själva formatet stöds i andra operativsystem, inklusive Windows och macOS, via olika verktyg och verktyg.

Vi kommer att täcka några av de vanliga exemplen och användningen av tar-kommandot och dess flaggor som stöds i den här artikeln.

Så låt oss börja…

Skapa tar-arkiv

För att skapa ett enkelt okomprimerat arkiv är syntaxen för tar-kommandot:

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

Här står flaggorna c för skapande, v för utförlig utdata och f för att specificera tar-arkivfilens namn. Enligt konvention, ange tar-filnamnet med .tar-tillägget. Filer som ska arkiveras kan anges med jokertecken eller som enstaka eller flera filnamn/sökvägar.

Som ett 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
$

Och jag vill skapa ett tar-arkiv som innehåller alla tre filerna, det kan göras som:

$ 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 bara ange specifika filer att arkivera också, som:

$ 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 komprimerat arkiv (GZ)

tar tillåter inte bara arkivering av filer utan komprimerar dem också för att spara utrymme. Ett av de populära komprimeringsformaten är gunzip, vanligtvis representerat av tillägget .gz efter .tar eller som tgz. Vi kan använda z-flaggan för att specificera att vi behöver filerna som 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
$

Du kan observera att storleken på båda arkivfilerna är väsentligt olika även om båda innehåller samma tre filer. Detta beror på användningen av komprimering med z-flagga.

Skapa komprimerat arkiv (BZ2)

tar stöder flera andra komprimeringsformat. En av dem är bz2 eller bzip2 som representeras av förlängningen tar.bz2 eller ibland som tbz2. Det kan ge dig en mindre arkivstorlek men förbrukar i sin tur mer CPU, så processen att komprimera/dekomprimera kan vara långsammare än 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
$

Ta bort alla filer

Ett tar-arkiv (oavsett om det är komprimerat eller okomprimerat) kan extraheras helt enkelt genom att använda alternativet x. Nedan exempel kommer att förtydliga dess användning:

$ 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 för ett gz-komprimerat arkiv som:

$ 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
$

Eller till och med för ett bz2-komprimerat arkiv som:

$ 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 t-flaggan som visas 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
$

Untar specifika filer

Bara en fil kan extraheras från ett tar- eller tar.gz- eller tar.bz2-arkiv genom att ange filnamnet som:

$ 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 tillsammans på en gång.

$ 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
$

Untar med Wildcard

För att extrahera en eller flera filer med hjälp av ett jokertecken PATTERN, använd –wildcards flagga:

$ 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/läggas till i befintliga okomprimerade tarballs genom att använda flaggan r eller –append med nya filnamn eller jokerteckenmönster (kom ihåg att detta bara 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
$

Du kan observera att listinnehållet i archive.tar återigen visar de två nyligen tillagda filerna.

Ta bort filer från arkivet

Att ta bort specifika filer från ett tar-arkiv är möjligt med –delete-flaggan som visas nedan (jämför tar-listan före och efter radering av filer):

$ 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 fungerar detta bara för okomprimerade tarballs och kommer att misslyckas för komprimerade arkivformat.

Skapa med Verifiera

När du skapar okomprimerade tar-filer kan du verifiera innehållet i arkivet med W-flaggan som:

$ 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 senare med gzip eller andra verktyg.

Extrahera tjära till mapp

Om du vill extrahera ditt tarballinnehåll till en specifik mapp istället för den aktuella katalogen, använd flaggan -C 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 Flagga

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 som kör skillnaden en gång när filen inuti taren och utsidan var densamma. Efter uppdatering av filen kördes den 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

Att utesluta specifika filer kan vara ett krav när du skapar tar-arkiv. Detta kan uppnås med –exclude-flaggan.

$ 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 kan notera från ovanstående utdata kan vi specificera flaggan –exclude flera gånger för att ange flera filnamn eller mönster i 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 tar Innehållsstorlek

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 kommandot tar behörighet för filer och kataloger som det arkiverar även om du uttryckligen kan ange detsamma med -p-flagga eller -preserve-behörigheter som visas nedan:

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

Sammanfattning 👨‍💻

tar är ett användbart verktyg på Unix/Linux-system länge och användes främst i arkiverings- och säkerhetskopieringsuppgifter. Verktyget har utvecklats med många alternativ över tiden. Den kan användas för enkla till komplexa uppgifter, förutsatt att du känner till funktionerna den erbjuder. Den här artikeln täckte några av de grundläggande operationerna du kan göra med tar-kommandot och visar hur det kan hjälpa dig i dina dagliga systemadministrationsuppgifter.

Se dess man-sida man tar eller använd tar –help eller tar –användningskommandot för att få mer information.