Tar er et av de mest brukte filarkiveringsformatene i Unix- og Linux-miljøer.
Navnet stammer fra «Tape Archive», ettersom det opprinnelig ble designet for å lagre data sekvensielt på båndstasjoner. Det refereres også til som en «tarball».
Standard tar-funksjonen er å arkivere filer uten komprimering, men det brukes ofte i kombinasjon med komprimeringsteknikker. Verktøyet «tar» er som regel inkludert som standard i de fleste Linux-distribusjoner, og formatet er kompatibelt med andre operativsystemer, som Windows og macOS, gjennom forskjellige programmer og verktøy.
I denne artikkelen skal vi se nærmere på noen vanlige eksempler og bruksområder for tar-kommandoen og de tilhørende flaggene.
La oss starte…
Opprettelse av et tar-arkiv
Grunnleggende syntaks for å lage et enkelt, ukomprimert arkiv ser slik ut:
$ tar cvf <arkivnavn.tar> <filer_som_skal_arkiveres>
Her betyr «c» opprettelse, «v» gir en detaljert utskrift, og «f» spesifiserer navnet på tar-arkivet. Det er vanlig å bruke filtypen .tar for tar-filer. Filene som skal arkiveres kan angis enten med jokertegn eller som enkelte filnavn eller stier.
La oss se på et eksempel. Jeg har tre filer i min katalog:
$ ls -l total 12 -rw-r--r-- 1 bruker bruker 13 Sep 12 20:08 fil1.txt -rw-r--r-- 1 bruker bruker 19 Sep 12 20:08 fil2.txt -rw-r--r-- 1 bruker bruker 24 Sep 12 20:08 fil3.txt $
For å lage et tar-arkiv som inneholder alle tre filene, kan jeg bruke kommandoen:
$ tar cvf archive.tar * fil1.txt fil2.txt fil3.txt $ ls -l archive.tar -rw-r--r-- 1 bruker bruker 10240 Sep 12 20:15 archive.tar $
Jeg kan også velge å arkivere bestemte filer, slik som:
$ tar cvf arkiv1.tar fil1.txt fil2.txt fil1.txt fil2.txt $ ls -l arkiv1.tar -rw-r--r-- 1 bruker bruker 10240 Sep 12 20:15 arkiv1.tar $
Lage komprimerte arkiver (GZ)
I tillegg til å arkivere filer, kan tar også komprimere dem for å spare diskplass. Et vanlig komprimeringsformat er gunzip, som ofte har filtypen .gz etter .tar, eller som .tgz. Vi kan bruke flagget «z» for å indikere at filene skal komprimeres med gunzip. Her er et eksempel:
$ tar cvzf arkiv.tar.gz fil* fil1.txt fil2.txt fil3.txt $ ls -l arkiv.tar arkiv.tar.gz -rw-r--r-- 1 bruker bruker 10240 Sep 12 20:15 arkiv.tar -rw-r--r-- 1 bruker bruker 188 Sep 12 20:21 arkiv.tar.gz $
Det er tydelig at størrelsen på de to arkivfilene er svært forskjellig, selv om begge inneholder de samme tre filene. Dette skyldes komprimeringen med «z»-flagget.
Lage komprimerte arkiver (BZ2)
Tar støtter også flere andre komprimeringsformater, deriblant bz2 eller bzip2, som ofte har filendelsen .tar.bz2 eller noen ganger .tbz2. Dette kan gi mindre arkivstørrelser, men krever mer CPU, noe som kan gjøre komprimering og dekomprimering tregere enn med gz-arkiver.
Eksempel:
$ tar cvjf arkiv.tar.bz2 fil* fil1.txt fil2.txt fil3.txt $ ls -l arkiv.tar arkiv.tar.gz arkiv.tar.bz2 -rw-r--r-- 1 bruker bruker 10240 Sep 12 20:15 arkiv.tar -rw-r--r-- 1 bruker bruker 212 Sep 12 20:25 arkiv.tar.bz2 -rw-r--r-- 1 bruker bruker 188 Sep 12 20:21 arkiv.tar.gz $ file arkiv.tar* arkiv.tar: POSIX tar archive (GNU) arkiv.tar.bz2: bzip2 compressed data, block size = 900k arkiv.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240 $
Uttrekking av alle filer
Et tar-arkiv (enten det er komprimert eller ikke) kan enkelt pakkes ut med «x»-alternativet. Følgende eksempler viser bruken:
$ tar xvf arkiv.tar fil1.txt fil2.txt fil3.txt $ ls -l total 24 -rw-r--r-- 1 bruker bruker 10240 Sep 19 18:25 arkiv.tar -rw-r--r-- 1 bruker bruker 13 Sep 12 20:08 fil1.txt -rw-r--r-- 1 bruker bruker 19 Sep 12 20:08 fil2.txt -rw-r--r-- 1 bruker bruker 24 Sep 12 20:08 fil3.txt $
Dette fungerer også for et gz-komprimert arkiv:
$ tar xvf arkiv.tar.gz fil1.txt fil2.txt fil3.txt $ ls -l total 16 -rw-r--r-- 1 bruker bruker 188 Sep 19 18:27 arkiv.tar.gz -rw-r--r-- 1 bruker bruker 13 Sep 12 20:08 fil1.txt -rw-r--r-- 1 bruker bruker 19 Sep 12 20:08 fil2.txt -rw-r--r-- 1 bruker bruker 24 Sep 12 20:08 fil3.txt $
Eller for et bz2-komprimert arkiv:
$ tar xvf arkiv.tar.bz2 fil1.txt fil2.txt fil3.txt $ ls -l total 16 -rw-r--r-- 1 bruker bruker 212 Sep 19 18:31 arkiv.tar.bz2 -rw-r--r-- 1 bruker bruker 13 Sep 12 20:08 fil1.txt -rw-r--r-- 1 bruker bruker 19 Sep 12 20:08 fil2.txt -rw-r--r-- 1 bruker bruker 24 Sep 12 20:08 fil3.txt $
Liste innhold i tar-arkivet
For å se innholdet i et tar-arkiv, kan du bruke flagget «t», som vist nedenfor:
$ tar tvf arkiv.tar.bz2 -rw-r--r-- bruker/bruker 13 2021-09-12 20:08 fil1.txt -rw-r--r-- bruker/bruker 19 2021-09-12 20:08 fil2.txt -rw-r--r-- bruker/bruker 24 2021-09-12 20:08 fil3.txt $
Pakke ut bestemte filer
Du kan pakke ut enkeltfiler fra et tar-, tar.gz- eller tar.bz2-arkiv ved å spesifisere filnavnet:
$ tar xvf arkiv.tar.bz2 fil1.txt fil1.txt $ ls -l total 8 -rw-r--r-- 1 bruker bruker 212 Sep 19 18:31 arkiv.tar.bz2 -rw-r--r-- 1 bruker bruker 13 Sep 12 20:08 fil1.txt $
Tilsvarende kan du pakke ut flere filer ved å liste filnavnene med mellomrom mellom:
$ tar xvf arkiv.tar.bz2 fil1.txt fil3.txt fil1.txt fil3.txt $ ls -l total 12 -rw-r--r-- 1 bruker bruker 212 Sep 19 18:31 arkiv.tar.bz2 -rw-r--r-- 1 bruker bruker 13 Sep 12 20:08 fil1.txt -rw-r--r-- 1 bruker bruker 24 Sep 12 20:08 fil3.txt $
Pakke ut med jokertegn
For å pakke ut en eller flere filer som matcher et jokertegnmønster, kan du bruke –wildcards-flagget:
$ tar xvf arkiv.tar.bz2 --wildcards "fil*" fil1.txt fil2.txt fil3.txt $ ls -l total 16 -rw-r--r-- 1 bruker bruker 212 Sep 19 18:31 arkiv.tar.bz2 -rw-r--r-- 1 bruker bruker 13 Sep 12 20:08 fil1.txt -rw-r--r-- 1 bruker bruker 19 Sep 12 20:08 fil2.txt -rw-r--r-- 1 bruker bruker 24 Sep 12 20:08 fil3.txt $
Legge til filer i arkiv
Du kan legge til nye filer i eksisterende ukomprimerte tar-arkiver ved å bruke «r» eller –append-flagget med nye filnavn eller jokertegn (dette fungerer kun med ukomprimerte .tar-filer, ikke med komprimerte formater som tar.gz eller tar.bz2):
$ tar rvf arkiv.tar fil-ny* fil-ny.txt fil-ny2.txt $ tar tvf arkiv.tar -rw-r--r-- bruker/bruker 13 2021-09-12 20:08 fil1.txt -rw-r--r-- bruker/bruker 19 2021-09-12 20:08 fil2.txt -rw-r--r-- bruker/bruker 24 2021-09-12 20:08 fil3.txt -rw-r--r-- bruker/bruker 15 2021-09-19 18:59 fil2.txt -rw-r--r-- bruker/bruker 10 2021-09-19 18:58 fil4.txt -rw-r--r-- bruker/bruker 9 2021-09-19 19:10 fil-ny.txt -rw-r--r-- bruker/bruker 9 2021-09-19 19:10 fil-ny2.txt $
Du kan se at innholdsfortegnelsen for arkiv.tar nå viser de to nylig tilføyde filene.
Slette filer fra arkivet
Det er mulig å fjerne spesifikke filer fra et tar-arkiv ved å bruke –delete-flagget (sammenlign innholdet før og etter sletting):
$ tar tvf arkiv.tar -rw-r--r-- bruker/bruker 13 2021-09-12 20:08 fil1.txt -rw-r--r-- bruker/bruker 19 2021-09-12 20:08 fil2.txt -rw-r--r-- bruker/bruker 24 2021-09-12 20:08 fil3.txt -rw-r--r-- bruker/bruker 15 2021-09-19 18:59 fil2.txt -rw-r--r-- bruker/bruker 10 2021-09-19 18:58 fil4.txt -rw-r--r-- bruker/bruker 9 2021-09-19 19:10 fil-ny.txt -rw-r--r-- bruker/bruker 9 2021-09-19 19:10 fil-ny2.txt $ tar --delete -f arkiv.tar fil-ny.txt fil-ny2.txt $ tar tvf arkiv.tar -rw-r--r-- bruker/bruker 13 2021-09-12 20:08 fil1.txt -rw-r--r-- bruker/bruker 19 2021-09-12 20:08 fil2.txt -rw-r--r-- bruker/bruker 24 2021-09-12 20:08 fil3.txt -rw-r--r-- bruker/bruker 15 2021-09-19 18:59 fil2.txt -rw-r--r-- bruker/bruker 10 2021-09-19 18:58 fil4.txt $
Dette fungerer igjen kun med ukomprimerte tar-arkiver, ikke med komprimerte formater.
Opprett med verifisering
Når du lager ukomprimerte tar-filer, kan du validere innholdet i arkivet med «W»-flagget:
$ tar cvfW arkiv.tar fil*.txt fil1.txt fil2.txt fil3.txt Bekreft fil1.txt Bekreft fil2.txt Bekreft fil3.txt $
Dette kan ikke brukes med komprimeringsflagg, men du kan komprimere den opprettede tar-filen senere med gzip eller andre verktøy.
Pakke ut til en mappe
Hvis du vil pakke ut innholdet i tar-arkivet til en bestemt mappe i stedet for gjeldende katalog, bruk -C-flagget med mappebanen:
$ tar xvf arkiv.tar -C ny-mappe/ fil1.txt fil2.txt fil3.txt fil2.txt fil4.txt $ ls -l ny-mappe/ total 16 -rw-r--r-- 1 bruker bruker 13 Sep 12 20:08 fil1.txt -rw-r--r-- 1 bruker bruker 15 Sep 19 18:59 fil2.txt -rw-r--r-- 1 bruker bruker 24 Sep 12 20:08 fil3.txt -rw-r--r-- 1 bruker bruker 10 Sep 19 18:58 fil4.txt $
Bruk diff-flagget
Du kan bruke –diff- eller «d»-flagget for å sjekke eventuelle forskjeller mellom filene i tar-arkivet og de i filsystemet. Her er et eksempel som kjører diff en gang når filen i tar-arkivet og den utenfor var identiske. Etter at filen ble oppdatert, ble den kjørt på nytt for å vise endringene i utdataene.
$ tar dvf arkiv.tar fil4.txt fil4.txt $ $ echo ny linje > fil4.txt $ $ tar dvf arkiv.tar fil4.txt fil4.txt fil4.txt: Endret tidspunkt fil4.txt: Ulik størrelse $
Ekskludere filer
Det kan være nødvendig å ekskludere bestemte filer når du oppretter tar-arkiver. Dette kan gjøres med –exclude-flagget.
$ tar --exclude="mappe/fil2.txt" --exclude="mappe/fil-ny*.txt" -cvzf arkiv.tar.gz mappe/ mappe/ mappe/fil1.txt mappe/fil3.txt $ ls -l mappe total 24 -rw-r--r-- 1 bruker bruker 9 Sep 19 19:10 fil-ny.txt -rw-r--r-- 1 bruker bruker 9 Sep 19 19:10 fil-ny2.txt -rw-r--r-- 1 bruker bruker 5 Sep 19 19:20 fil-ny3.txt -rw-r--r-- 1 bruker bruker 5 Sep 19 19:27 fil1.txt -rw-r--r-- 1 bruker bruker 6 Sep 19 19:27 fil2.txt -rw-r--r-- 1 bruker bruker 8 Sep 19 19:27 fil3.txt $ tar tvf arkiv.tar.gz drwxr-xr-x bruker/bruker 0 2021-09-19 19:30 mappe/ -rw-r--r-- bruker/bruker 5 2021-09-19 19:27 mappe/fil1.txt -rw-r--r-- bruker/bruker 8 2021-09-19 19:27 mappe/fil3.txt $
Som du ser, kan du bruke –exclude-flagget flere ganger for å spesifisere flere filnavn eller mønstre med AND-logikk. I eksemplet ovenfor var det kun to av de seks filene i mappen som tilfredsstilte betingelsen for å bli inkludert i arkiv.at.gz.
Se størrelse på tar-innhold
Vi kan se størrelsen på innholdet i et komprimert tar-arkiv ved å bruke følgende kommando:
$ tar tvf arkiv.tar.gz -rw-r--r-- bruker/bruker 13 2021-09-12 20:08 fil1.txt -rw-r--r-- bruker/bruker 19 2021-09-12 20:08 fil2.txt -rw-r--r-- bruker/bruker 24 2021-09-12 20:08 fil3.txt $ tar -xzf arkiv.tar.gz --to-stdout|wc -c 56 $
Tilsvarende for bz2-arkiv:
$ tar tvf arkiv.tar.bz2 -rw-r--r-- bruker/bruker 13 2021-09-12 20:08 fil1.txt -rw-r--r-- bruker/bruker 19 2021-09-12 20:08 fil2.txt -rw-r--r-- bruker/bruker 24 2021-09-12 20:08 fil3.txt $ tar -xjf arkiv.tar.bz2 --to-stdout|wc -c 56 $
Bevar tillatelser
Som standard beholder tar-kommandoen fil- og mappetillatelser når den arkiverer. Du kan eksplisitt angi det samme med -p-flagget eller –preserve-permissions, som vist nedenfor:
$ tar cvpzf arkiv.tar.gz *.txt fil1.txt fil2.txt fil3.txt $
Oppsummering 👨💻
Tar har vært et essensielt verktøy i Unix/Linux-systemer i lang tid, og det ble opprinnelig brukt til arkivering og sikkerhetskopiering. Verktøyet har utviklet seg over tid med mange alternativer. Det kan brukes til både enkle og komplekse oppgaver, så lenge du kjenner funksjonene det tilbyr. Denne artikkelen har gjennomgått noen av de grunnleggende operasjonene du kan utføre med tar-kommandoen, og hvordan den kan hjelpe deg med daglige systemadministrasjonsoppgaver.
Sjekk man-siden for tar (man tar), eller bruk «tar –help» eller «tar –usage» for mer informasjon.