15 tar kommandoeksempler for Sysadmin og udviklere

tar er et af de populære filarkiveringsformater, der er tilgængelige i Unix- og Linux-baserede systemer.

Selve navnet er afledt af Tape ARchive, da det blev udviklet til at skrive sekventielle data på båndenheder. Det omtales også som tarball nogle gange.

Som standard arkiverer tar kun filerne uden komprimering, men bruger nogle dele. Vi kan bruge forskellige komprimeringsteknikker for at få et komprimeret output. tar-værktøjet er normalt inkluderet i de fleste Linux-distributioner som standard, og selve formatet understøttes på tværs af andre operativsystemer, inklusive Windows og macOS, via forskellige værktøjer og hjælpeprogrammer.

Vi vil dække nogle af de almindelige eksempler og brug af tar-kommandoen og dens understøttede flag i denne artikel.

Så lad os komme i gang…

Opret tar-arkiv

For at oprette et simpelt ukomprimeret arkiv er syntaksen for tar-kommandoen:

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

Her står flag c for oprettelse, v for verbose output og f for specificering af tar-arkivets filnavn. Angiv efter konvention tar-filnavnet med filtypen .tar. Filer, der skal arkiveres, kan angives med jokertegn eller som enkelte eller flere filnavne/stier.

Som et eksempel har jeg tre filer i min mappe:

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

Og jeg vil oprette et tar-arkiv, der indeholder alle tre filer, det kan gøres 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
$

Jeg kan også kun angive specifikke filer til arkivering, 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
$

Opret komprimeret arkiv (GZ)

tar tillader ikke kun arkivering af filer, men også at komprimere dem for at spare plads. Et af de populære komprimeringsformater er gunzip, normalt repræsenteret ved udvidelsen .gz efter .tar eller som tgz. Vi kan bruge z-flag til at angive, at vi har brug for filerne til at blive komprimeret ved hjælp af gunzip. Her er et eksempel:

$ 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 observere, at størrelsen af ​​begge arkivfiler er væsentligt forskellige, selvom begge indeholder de samme tre filer. Dette skyldes brugen af ​​komprimering ved hjælp af z-flag.

  Sådan accepterer og afviser du automatisk mødeinvitationer i Outlook

Opret komprimeret arkiv (BZ2)

tar understøtter flere andre komprimeringsformater. En af dem er bz2 eller bzip2, som er repræsenteret ved udvidelsen tar.bz2 eller nogle gange som tbz2. Det kan give dig en mindre arkivstørrelse, men bruger til gengæld mere CPU, så processen med at komprimere/dekomprimere kan være langsommere end gz-arkiv.

Eksempel:

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

Fjern alle filer

Et tar-arkiv (uanset om det er komprimeret eller ukomprimeret) kan udtrækkes blot ved at bruge x-indstillingen. Nedenstående eksempler vil tydeliggøre dets brug:

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

Dette fungerer for et gz-komprimeret 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 endda for et bz2-komprimeret 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
$

Liste tar Indhold

For at liste indholdet af et tar-arkiv kan du bruge t-flag som vist nedenfor:

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

Kun én fil kan udtrækkes fra et tar- eller tar.gz- eller tar.bz2-arkiv ved at angive filnavnet 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å samme måde kan du angive flere filnavne adskilt af mellemrum for at udpakke dem sammen på én gang.

$ 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 ved hjælp af Wildcard

For at udpakke en eller flere filer ved hjælp af et jokertegn MØNSTER, brug –wildcards flag:

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

Tilføj filer til arkiv

Nye filer kan tilføjes/tilføjes til eksisterende ukomprimerede tarballs ved at bruge r eller –append flag med nye filnavne eller jokertegn mønster (husk at dette kun virker med ukomprimerede .tar filer og ikke med tar.gz eller tar.bz2 komprimerede formater):

$ 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 observere, at listen med indholdet af archive.tar igen viser de to nyligt tilføjede filer.

  Sådan skriver du N med Tilde på toppen (Ñ ñ): Fuld guide

Slet filer fra arkiv

Fjernelse af specifikke filer fra et tar-arkiv er muligt ved hjælp af –delete-flag som vist nedenfor (sammenlign tar-listen før og efter sletning af 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
$

Igen dette virker kun for ukomprimerede tarballs og vil mislykkes for komprimerede arkivformater.

Opret med Bekræft

Mens du opretter ukomprimerede tar-filer, kan du verificere indholdet af arkivet ved hjælp af W-flag som:

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

Dette kan ikke bruges med komprimeringsflag, selvom du kan komprimere den oprettede tar-fil senere ved hjælp af gzip eller andre værktøjer.

Udpak tjære til mappe

Hvis du vil udpakke dit tarball-indhold til en bestemt mappe i stedet for den aktuelle mappe, skal du bruge -C flag med mappestien som vist nedenfor:

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

Brug diff Flag

Du kan bruge –diff eller d flag til at finde eventuelle ændringer mellem filerne i tar-arkivet og dem i filsystemet. Her er et eksempel, der kører forskellen én gang, da filen inde i taren og ydersiden var den samme. Efter opdatering af filen, blev den kørt igen for at vise forskellen i output.

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

Ekskluder filer

Ekskludering af specifikke filer kan være et krav, mens du opretter tar-arkiver. Dette kan opnås med -exclude flag.

$ 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 bemærke fra ovenstående output, kan vi angive flaget –exclude flere gange for at angive flere filnavne eller mønstre i AND-tilstand. Bemærk, at ud af de seks filer i mappen i ovenstående eksempel, opfyldte kun to filer betingelsen for at blive inkluderet i archive.at.gz.

  Sådan lytter du til podcasts på din Mac

Se tar Indholdsstørrelse

Vi kan få størrelsen på indholdet af et komprimeret tar-arkiv ved at bruge nedenstående kommando:

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

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

Bevar tilladelser

Som standard bevarer tar-kommandoen tilladelse til filer og mapper, den arkiverer, selvom du udtrykkeligt kan angive det samme ved at bruge -p-flag eller -preserve-tilladelser som vist nedenfor:

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

Resumé 👨‍💻

tar er et nyttigt værktøj på Unix/Linux-systemer i lang tid og blev primært brugt til arkiverings- og sikkerhedskopieringsopgaver. Værktøjet har udviklet sig med mange muligheder gennem tiden. Den kan bruges til enkle til komplekse opgaver, da du kender de funktioner, den tilbyder. Denne artikel dækkede nogle af de grundlæggende handlinger, du kan udføre med tar-kommando, og viser, hvordan det kan hjælpe dig i dine daglige systemadministrationsopgaver.

Se dens man-side man tar eller brug tar –help eller tar –brugskommandoen for at få yderligere detaljer.