namnet tar
är av de flesta konton en förkortning för tape archive. ”Banden” i fråga skulle vara alla de magnetiska lagringsenheter som var populära hela vägen tillbaka på 1950-talet.
det föreslår att tar
verktyget kan vara lite gammalt och förbi dess främsta. Men sanningen är att under alla år och genom alla seismiska förändringar i IT-världen har tar
inte förlorat någon av sin kraft och värde.
i den här artikeln, baserat på innehåll från min Linux in Action-bok, ska jag visa dig grunderna för tar-arkivskapande, komprimering och restaurering. Låt oss börja från början.
detta exempel tar alla filer och kataloger inom och under den aktuella arbetskatalogen och bygger en arkivfil som jag Smart har kallat archivename.tar
.
här använder jag tre argument efter tar-kommandot:
-
c
berättar tar för att skapa ett nytt arkiv, -
v
ställer in skärmutgången till verbose så jag får uppdateringar, och -
f
pekar på filnamnet jag skulle vilja ge skärmen ett nytt Arkiv Arkiv.
*
är vad berättar tar
att inkludera alla filer och lokala kataloger rekursivt.
$ tar cvf archivename.tar *file1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
tar – kommandot kommer aldrig att flytta eller ta bort någon av de ursprungliga katalogerna och filerna du matar den-det gör bara arkiverade kopior.
Du bör också notera att du använder en punkt (.) i stället för en asterisk ( * ) i föregående kommando skulle inkludera även dolda filer (vars filnamn börjar med en punkt) i arkivet.
Om du följer med på din egen dator (som du definitivt borde) ser du en ny fil med namnet arkivnamn.tjära. Den .tar filnamnstillägg är inte nödvändigt, men det är alltid bra att tydligt kommunicera syftet med en fil på så många sätt som möjligt.
att extrahera ditt arkiv för att återställa filerna är enkelt: Använd bara xvf
istället för cvf
. Det kommer i exemplet att spara nya kopior av originalfilerna och katalogerna på den aktuella platsen.
$ tar xvf archivename.tarfile1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
Naturligtvis kan du också låta tar skicka dina extraherade filer till någon annan plats med-C
argumentet följt av målplatsen:
$ tar xvf archivename.tar -C /home/mydata/oldfiles/
du vill inte alltid inkludera alla filer i ett katalogträd i ditt arkiv.
anta att du har producerat några videor, men de finns för närvarande i kataloger tillsammans med alla typer av grafik -, ljud-och textfiler (som innehåller dina anteckningar). De enda filerna du behöver säkerhetskopiera är de sista videoklippen med filnamnstillägget. mp4.
Så här gör du det:
$ tar cvf archivename.tar *.mp4
det är bra. Men dessa videofiler är enorma. Skulle det inte vara trevligt att göra det arkivet lite mindre med komprimering?
säg inte mer! Kör bara det föregående kommandot medz
(zip) – argumentet. Det kommer att berätta för gzip-programmet att komprimera arkivet.
Om du vill följa konventionen kan du också lägga till en.gz
förlängning utöver.tar
som redan finns där. Kom ihåg: klarhet.
Så här skulle det spela ut:
$ tar czvf archivename.tar.gz *.mp4
om du provar det här på dina egna .MP4-filer och sedan kör ls-l i katalogen som innehåller de nya arkiven kanske du märker att filen.tar.gz
inte är så mycket mindre än.tar
fil, kanske 10% eller så. Vad är det med det?
Tja, filformatet.mp4
komprimeras själv, så det finns mycket mindre utrymme för gzip att göra sina saker.
eftersom tar är fullt medveten om sin Linux-miljö kan du använda den för att välja filer och kataloger som bor utanför din nuvarande arbetskatalog. Detta exempel lägger till alla.mp4
filer i/home/myuser/Videos/
katalog:
$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4
eftersom arkivfiler kan bli stora kan det ibland vara meningsfullt att dela upp dem i flera mindre filer, överföra dem till sitt nya hem och sedan återskapa originalfilen i andra änden. Split-verktyget är tillverkat för detta ändamål.
i det här exemplet berättar-b
Linux att dela upp arkivnamnet.tjära.GZ-fil i 1 GB-stora delar. Operationen namnger sedan var och en av delarna—arkivename.tjära.gz.partaa, arkivnamn.tjära.gz.partab, arkivnamn.tjära.gz.partac, och så vidare:
$ split -b 1G archivename.tar.gz "archivename.tar.gz.part"
på andra sidan skapar du arkivet igen genom att läsa var och en av delarna i följd (cat archivename.tjära.gz.del*), omdirigera sedan utmatningen till en ny fil som heter archivename.tjära.gz:
$ cat archivename.tar.gz.part* > archivename.tar.gz
Streaming file system archives
Här är där bra grejer börjar. Jag ska visa dig hur du skapar en Arkivbild av en fungerande Linux — installation och strömma den till en fjärrlagringsplats-allt inom ett enda kommando. Här är kommandot:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
snarare än att försöka förklara allt detta direkt, använder jag mindre exempel för att utforska det en bit i taget.
Låt oss skapa ett arkiv med innehållet i en katalog som heter importantstuff som är fylld med, ja, riktigt viktiga saker:
$ tar czvf - importantstuff/ | ssh [email protected] "cat > /home/username/myfiles.tar.gz"importantstuff/filename1importantstuff/[email protected]'s password:
låt mig förklara det exemplet. I stället för att ange arkivnamnet direkt efter kommandoargumenten (som du har gjort hittills) använde jag ett streck (czvf -).
bindestrecket matar ut data till standardutgång. Det låter dig trycka arkivfilnamn detaljer tillbaka till slutet av kommandot och berättar tar att förvänta källinnehållet för arkivet istället.
jag pipade sedan ( / ) det namnlösa, komprimerade arkivet till en SSH-inloggning på en fjärrserver där jag blev ombedd att få mitt lösenord.
kommandot bifogat i citattecken körde sedan cat mot arkivdataströmmen, som skrev ströminnehållet till en fil som heter myfiles.tjära.gz i min hemkatalog på fjärrvärden.
en fördel med att generera arkiv på detta sätt är att du undviker overhead av ett mellansteg. Det finns ingen anledning att ens tillfälligt spara en kopia av arkivet på den lokala maskinen. Tänk dig att säkerhetskopiera en installation som fyller 110 GB av dess 128 GB ledigt utrymme. Vart skulle arkivet gå?
det var bara en katalog med filer. Antag att du måste säkerhetskopiera ett aktivt Linux OS till en USB-enhet så att du kan flytta den till en separat maskin och släppa den i maskinens huvudenhet.
förutsatt att det redan finns en ny installation av samma Linux-version på den andra maskinen, kommer nästa copy / paste-operation att generera en exakt kopia av den första.
OBS: Detta fungerar inte på en målenhet som inte redan har ett Linux-filsystem installerat. För att hantera den situationen måste du använda
dd
nästa exempel skapar ett komprimerat arkiv på USB-enheten som kallas /dev/sdc1
.
--one-file-system
argumentet utesluter all data från alla filsystem förutom den nuvarande. Detta innebär att pseudopartitioner som /sys/
och /dev/
inte läggs till i arkivet. Om det finns andra partitioner som du vill inkludera (som du gör för /usr/
och /var/
I det här exemplet), bör de uttryckligen läggas till.
slutligen kan du utesluta data från det aktuella filsystemet med --exclude
argument:
# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \ --one-file-system \ / /usr /var \ --exclude=/home/andy/
låt oss nu gå tillbaka till det fullservicekommandoexemplet. Använd det du redan har lärt dig, arkivera alla viktiga kataloger i ett filsystem och kopiera arkivfilen till en USB-enhet. Det borde vara meningsfullt för dig nu:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
det finns mycket mer administration godhet i form av böcker, kurser och artiklar tillgängliga på my bootstrap-it.com.