Tar-kommandoen i Linux: Tar CVF og Tar XVF forklaret med eksempler på kommandoer

Navnet tarer, for de fleste konti, en forkortelse for båndarkiv . De "bånd", der er tale om, ville være alle de magnetiske lagerdrev, der var populære hele vejen tilbage i 1950'erne.

Det antyder, at tarværktøjet muligvis er lidt gammelt og forbi dets prime. Men sandheden er, at den gennem alle årene og gennem alle de seismiske ændringer i IT-verdenen ikke tarhar mistet sin magt og værdi.

I denne artikel, baseret på indhold fra min Linux in Action-bog, vil jeg vise dig det grundlæggende i oprettelse, komprimering og gendannelse af tjærearkiv. Lad os starte i starten.

Oprettelse af arkiver

Dette eksempel tager alle filer og mapper i og under det aktuelle arbejdsmappe og bygger en arkivfil, som jeg klogt har navngivet archivename.tar.

Her bruger jeg tre argumenter efter tjærkommandoen:

  • den cfortæller tjære at oprette et nyt arkiv,
  • v indstiller skærmoutputtet til at uddybe, så jeg får opdateringer, og
  • f peger på det filnavn, jeg gerne vil give arkivet.

Det *er det, der fortæller tarat inkludere alle filer og lokale mapper rekursivt.

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

Tjærekommandoen vil aldrig flytte eller slette nogen af ​​de originale mapper og filer, du fodrer den - den laver kun arkiverede kopier.

Du skal også bemærke, at brug af en prik (.) I stedet for en stjerne (*) i den forrige kommando ville omfatte endda skjulte filer (hvis filnavne begynder med en prik) i arkivet.

Hvis du følger med på din egen computer (som du bestemt skulle), vil du se en ny fil ved navn archivename.tar. .Tar-filtypenavnet er ikke nødvendigt, men det er altid en god ide at kommunikere formålet med en fil tydeligt på så mange måder som muligt.

Det er nemt at udpakke dit arkiv for at gendanne filerne: Brug det bare i xvfstedet for cvf. Det vil i eksemplet gemme nye kopier af de originale filer og mapper på den aktuelle placering.

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

Selvfølgelig kan du også lade tjære sende dine udpakkede filer til et andet sted ved hjælp af -Cargumentet efterfulgt af målplaceringen:

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

Du vil ikke altid medtage alle filerne i et katalogtræ i dit arkiv.

Antag at du har produceret nogle videoer, men de opbevares i øjeblikket i mapper sammen med alle slags grafik-, lyd- og tekstfiler (der indeholder dine noter). De eneste filer, du har brug for at tage backup af, er de endelige videoklip, der bruger filtypenavnet .mp4.

Sådan gør du:

$ tar cvf archivename.tar *.mp4 

Det er fantastisk. Men disse videofiler er enorme. Ville det ikke være rart at gøre det arkiv lidt mindre ved hjælp af kompression?

Sig ikke mere! Kør bare den forrige kommando med z(zip) argumentet. Det vil fortælle gzip-programmet at komprimere arkivet.

Hvis du vil følge konventionen, kan du også tilføje en .gzudvidelse ud over den, .tarder allerede er der. Husk: klarhed.

Sådan spiller det ud:

$ tar czvf archivename.tar.gz *.mp4 

Hvis du prøver dette på dine egne .mp4-filer og derefter kører ls -l i biblioteket, der indeholder de nye arkiver, kan du bemærke, at .tar.gzfilen ikke er så meget mindre end .tarfilen, måske 10% eller deromkring. Hvad er der med det?

Nå, .mp4filformatet er i sig selv komprimeret, så der er meget mindre plads til gzip til at gøre sine ting.

Da tar er fuldt ud klar over sit Linux-miljø, kan du bruge det til at vælge filer og mapper, der lever uden for din nuværende arbejdsmappe. Dette eksempel tilføjer alle .mp4filerne i /home/myuser/Videos/biblioteket:

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

Da arkivfiler kan blive store, kan det nogle gange give mening at opdele dem i flere mindre filer, overføre dem til deres nye hjem og derefter genskabe den originale fil i den anden ende. Opdelingsværktøjet er lavet til dette formål.

I dette eksempel -bfortæller Linux Linux at opdele filen archivename.tar.gz i 1 GB-store dele. Operationen navngiver derefter hver af delene - archivename.tar.gz.partaa, archivename.tar.gz.partab, archivename.tar.gz.partac og så videre:

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

På den anden side opretter du arkivet igen ved at læse hver af delene i rækkefølge (cat archivename.tar.gz.part *) og omdirigere derefter output til en ny fil kaldet archivename.tar.gz:

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

Streaming filsystemarkiver

Her begynder de gode ting. Jeg skal vise dig, hvordan du opretter et arkivbillede af en fungerende Linux-installation og streamer det til en fjernlagerplacering - alt sammen inden for en enkelt kommando. Her er kommandoen:

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

I stedet for at prøve at forklare alt det med det samme, bruger jeg mindre eksempler til at udforske det et stykke ad gangen.

Lad os oprette et arkiv med indholdet af en mappe kaldet importantstuff, der er fyldt med, virkelig vigtige ting:

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

Lad mig forklare dette eksempel. I stedet for at indtaste arkivnavnet lige efter kommandoargumenterne (den måde, du har gjort indtil nu), brugte jeg et bindestreg (czvf -).

Dash'et udsender data til standardoutput. Det giver dig mulighed for at skubbe arkivfilnavnoplysningerne tilbage til slutningen af ​​kommandoen og fortæller tar at forvente kildeindholdet til arkivet i stedet.

Jeg ledte derefter (|) det unavngivne, komprimerede arkiv til et ssh-login på en ekstern server, hvor jeg blev bedt om min adgangskode.

Kommandoen indeholdt i anførselstegn udførte derefter cat mod arkivdatastrømmen, som skrev streamindholdet til en fil kaldet myfiles.tar.gz i mit hjemmekatalog på den eksterne vært.

En fordel ved at generere arkiver på denne måde er, at du undgår omkostningerne ved et mellemtrin. Der er ikke behov for engang midlertidigt at gemme en kopi af arkivet på den lokale maskine. Forestil dig, at du sikkerhedskopierer en installation, der fylder 110 GB af dens 128 GB ledig plads. Hvor ville arkivet gå hen?

Det var bare en mappe med filer. Antag, at du skal sikkerhedskopiere et aktivt Linux OS til et USB-drev, så du kan flytte det til en separat maskine og slippe det i maskinens hoveddrev.

Forudsat at der allerede er en ny installation af den samme Linux-version på den anden maskine, genererer den næste kopi / indsæt-operation en nøjagtig replika af den første.

BEMÆRK: Dette fungerer ikke på et måldrev, der ikke allerede har et Linux-filsystem installeret. For at håndtere denne situation skal du bruge 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" 

Der er meget mere administrativ godhed i form af bøger, kurser og artikler tilgængelige på min bootstrap-it.com.