de naam tar
is, volgens de meeste accounts, een afkorting voor tape archive. De” tapes”in kwestie zouden alle magnetische storage drives zijn die populair waren helemaal terug in de jaren 1950.
dat suggereert dat de tar
tool misschien een beetje oud en voorbij zijn priemgetal. Maar de waarheid is dat gedurende alle jaren en door alle seismische veranderingen in de IT-wereld, tar
niets van zijn kracht en waarde heeft verloren.
in dit artikel, gebaseerd op de inhoud van mijn Linux in Action book, zal ik je de basisprincipes laten zien van het aanmaken, comprimeren en herstellen van TAR-archieven. Laten we bij het begin beginnen.
dit voorbeeld neemt alle bestanden en mappen binnen en onder de huidige werkmap en bouwt een archiefbestand dat ik slim archivename.tar
heb genoemd.
hier gebruik ik drie argumenten na het tar-Commando:
- De
c
vertelt tar om een nieuw archief aan te maken, -
v
stelt de schermuitvoer in op verbose zodat ik updates krijg, en -
f
wijst naar de bestandsnaam die ik het archief wil geven.
de *
is wat tar
vertelt om alle bestanden en lokale mappen recursief op te nemen.
$ tar cvf archivename.tar *file1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
het tar – commando zal nooit een van de originele mappen en bestanden verplaatsen of verwijderen die u invoert-Het maakt alleen gearchiveerde kopieën.
u dient ook op te merken dat het gebruik van een punt (.) in plaats van een sterretje (*) in het vorige commando zou zelfs verborgen bestanden (waarvan de bestandsnamen beginnen met een punt) in het archief.
Als u op uw eigen computer volgt (wat u zeker zou moeten doen), dan zult u een nieuw bestand met de naam archivename zien.teer. De .tar bestandsnaamextensie is niet nodig, maar het is altijd een goed idee om het doel van een bestand op zoveel mogelijk manieren duidelijk te communiceren.
uw archief uitpakken om de bestanden te herstellen is eenvoudig: Gebruik gewoon xvf
in plaats van cvf
. Dat, in het voorbeeld, zal nieuwe kopieën van de originele bestanden en mappen op te slaan in de huidige locatie.
$ tar xvf archivename.tarfile1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
natuurlijk kunt u tar ook uw uitgepakte bestanden naar een andere plaats laten sturen met behulp van het argument -C
, gevolgd door de doellocatie:
$ tar xvf archivename.tar -C /home/mydata/oldfiles/
u wilt niet altijd alle bestanden in een mapstructuur in uw archief opnemen.
stel dat u een aantal video ‘ s hebt geproduceerd, maar ze worden momenteel bewaard in mappen samen met allerlei grafische, audio-en tekstbestanden (die uw notities bevatten). De enige bestanden die je nodig hebt om een back-up zijn de definitieve videoclips met behulp van de .mp4 bestandsnaam extensie.
hoe doe je dat:
$ tar cvf archivename.tar *.mp4
dat is geweldig. Maar die videobestanden zijn enorm. Zou het niet leuk zijn om dat archief een beetje kleiner te maken met behulp van compressie?
zeg niets meer! Voer het vorige commando uit met het argument z
(zip). Dat zal het gzip programma vertellen om het archief te comprimeren.
Als u conventie wilt volgen, kunt u ook een .gz
extensie toevoegen naast de .tar
die er al is. Denk eraan: helderheid.
Dit is hoe dat zou verlopen:
$ tar czvf archivename.tar.gz *.mp4
Als u dit op uw eigen .mp4-bestanden probeert en dan ls-l uitvoert op de map met de nieuwe archieven, kunt u merken dat het .tar.gz
bestand niet veel kleiner is dan het .tar
bestand, misschien 10% of zo. Wat is daarmee?
wel, het .mp4
bestandsformaat is zelf gecomprimeerd, dus er is veel minder ruimte voor gzip om zijn dingen te doen.
omdat tar zich volledig bewust is van zijn Linux omgeving, kunt u het gebruiken om bestanden en mappen te selecteren die buiten uw huidige werkmap leven. Dit voorbeeld voegt alle .mp4
bestanden toe in de/home/myuser/Videos/
map:
$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4
omdat archiefbestanden groot kunnen worden, is het soms zinvol om ze op te splitsen in meerdere kleinere bestanden, ze naar hun nieuwe startpagina over te brengen en dan het originele bestand aan de andere kant opnieuw aan te maken. De split tool is hiervoor gemaakt.
in dit voorbeeld vertelt -b
Linux om de archivenaam te splitsen.teer.GZ bestand in 1 GB-formaat delen. De operatie noemt dan elk van de onderdelen-archivename.teer.gz.partaa, archivename.teer.gz.partab, archivename.teer.gz.partac, enzovoort:
$ split -b 1G archivename.tar.gz "archivename.tar.gz.part"
aan de andere kant maak je het archief opnieuw aan door elk van de delen achter elkaar te lezen (cat archivename.teer.gz.deel*), dan de uitvoer omleiden naar een nieuw bestand met de naam archivename.teer.gz:
$ cat archivename.tar.gz.part* > archivename.tar.gz
Streaming file system archives
hier begint het goede spul. Ik ga je laten zien hoe je een archief image van een werkende Linux installatie te maken en streamen naar een externe opslaglocatie-allemaal binnen een enkele opdracht. Hier is het commando:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
in plaats van dat alles meteen uit te leggen, zal ik kleinere voorbeelden gebruiken om het stuk voor stuk te verkennen.
laten we een archief maken van de inhoud van een map genaamd importantstuff die gevuld is met, nou ja, heel belangrijke dingen:
$ tar czvf - importantstuff/ | ssh [email protected] "cat > /home/username/myfiles.tar.gz"importantstuff/filename1importantstuff/[email protected]'s password:
laat me dat voorbeeld uitleggen. In plaats van het invoeren van de Archiefnaam direct na de opdracht argumenten (de manier waarop je hebt gedaan tot nu toe), Ik gebruikte een streepje (czvf -).
het streepje voert gegevens uit naar standaarduitvoer. Het laat je de archiefbestandsnaamdetails terug pushen naar het einde van het commando en vertelt tar om in plaats daarvan de broninhoud voor het archief te verwachten.
Ik piped (|) het naamloze, gecomprimeerde archief naar een SSH-login op een externe server waar ik om mijn wachtwoord werd gevraagd.
het commando tussen aanhalingstekens voerde vervolgens cat uit tegen de archiefdatastroom, die de inhoud van de stream schreef naar een bestand genaamd myfiles.teer.gz in mijn home directory op de remote host.
een voordeel van het genereren van archieven op deze manier is dat u de overhead van een middelste stap vermijdt. Het is niet nodig om zelfs tijdelijk een kopie van het archief op de lokale machine op te slaan. Stel je voor dat je een back-up maakt van een installatie die 110 GB van de 128 GB beschikbare ruimte vult. Waar zou het archief heen gaan?
dat was slechts een map met bestanden. Stel dat je een back-up moet maken van een actief Linux OS naar een USB-drive, zodat je het naar een aparte machine kunt verplaatsen en het in de hoofddrive van die machine kunt laten vallen.
aangenomen dat er al een nieuwe installatie is van dezelfde Linux versie op de tweede machine, zal de volgende kopieer / plak operatie een exacte replica van de eerste genereren.
Opmerking: Dit werkt niet op een doelstation dat nog geen Linux bestandssysteem heeft geïnstalleerd. Om die situatie aan te pakken, moet u
dd
gebruiken.
het volgende voorbeeld maakt een gecomprimeerd archief aan op het USB-station dat bekend staat als /dev/sdc1
.
het argument --one-file-system
sluit alle gegevens uit van elk bestandssysteem behalve het huidige. Dit betekent dat pseudo partities als /sys/
en /dev/
niet aan het archief zullen worden toegevoegd. Als er andere partities zijn die je wilt opnemen (zoals je zult doen voor /usr/
en /var/
in dit voorbeeld), dan moeten ze expliciet toegevoegd worden.
ten slotte kunt u gegevens uitsluiten van het huidige bestandssysteem met behulp van het argument --exclude
:
# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \ --one-file-system \ / /usr /var \ --exclude=/home/andy/
laten we nu teruggaan naar het voorbeeld van het full-service Commando. Met behulp van wat je al hebt geleerd, Archiveer alle belangrijke mappen van een bestandssysteem en kopieer het archiefbestand naar een USB-station. Het zou nu logisch moeten zijn voor jou.:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
Er is veel meer administratie goedheid in de vorm van boeken, cursussen, en artikelen beschikbaar op mijn bootstrap-it.com.