Bestanden archiveren met Tar in de Linux-terminal

0
Bestanden archiveren met Tar in de Linux-terminal

De meeste mensen zijn waarschijnlijk redelijk bekend met het maken, verzenden of ontvangen van zip-bestanden. Zip neemt een verzameling bestanden en slaat ze op in een zip-archiefbestand, waarbij de gegevens tijdens het proces worden gecomprimeerd.





Naast het opslaan van de inhoud van de bestanden, worden ook al hun metagegevens opgeslagen, dit is extra informatie die aan een object is gekoppeld. In het geval van bestanden bevat het de wijzigingstijden, hun eigenaren en toestemmingen en, natuurlijk, de naam van elk bestand.

Wanneer u een archief uitpakt, wordt al deze informatie uitgepakt, waardoor de originele set bestanden precies zo wordt gerecreëerd als ze waren, wat best handig is!

Archieven kunnen op verschillende manieren worden gebruikt, maar de meest populaire zijn het bundelen van een set bestanden om te downloaden – een enkel bestand is gemakkelijker te hanteren en de compressie maakt het sneller om te downloaden – en het maken van back-ups. Omdat Zip al een hele tijd bestaat, kan iedereen het gebruiken en kunnen alle besturingssystemen het aan. Toch heeft Zip een aantal nadelen.

AANBEVOLEN VIDEO’S VOOR U …
Het belangrijkste probleem is dat de compressie volgens moderne normen slecht is. In de afgelopen 25 jaar is de compressietechnologie verder gegaan en hoewel er verbeteringen aan Zip zijn aangebracht, zijn er enkele betere alternatieven beschikbaar.

Een ander nadeel van Zip is dat het bedoeld is om naar een bestand te archiveren, terwijl we soms de data naar een ander apparaat of dienst willen sturen.

Tar begrijpen
Het standaard archiefprogramma voor Unix-achtige besturingssystemen, waaronder Linux en Mac OS X, is Tar, zo genoemd omdat Tar oorspronkelijk werd gebruikt om back-ups op tape-drives op te slaan (Tape ARchive).

Teer

Het werkt op een andere manier dan Zip omdat het alle gearchiveerde gegevens naar de standaarduitvoer stuurt en het de gegevens niet standaard comprimeert omdat veel tapedrives al hardware-compressie hebben ingebouwd.

Het ontbreken van compressiecode lijkt misschien een nadeel, maar het is eigenlijk een gemak. Omdat Tar in staat is om zijn data via een extern compressieprogramma te pijpen, kan het elke gewenste compressor gebruiken – zelfs een die niet bestond toen het Tar-programma werd ontwikkeld.

Compressieprogramma’s werken op één bestand of gegevensstroom en produceren één gecomprimeerd bestand of stroom, dus dit splitst de taak in twee delen: archivering en compressie. Hoewel dit misschien ingewikkelder lijkt, is Tar perfect in staat om de details zelf aan te pakken.

Laten we zeggen dat we een directory hebben die foo heet . We willen er een archief van maken, dat vaak een tarball wordt genoemd. We kunnen een van deze opties uitvoeren:

tar cf foo. tar foo

tar czf foo.tar.gz foo

tar cjf foo.tar.bz2 foo

tar cJf foo.tar.xz foo

De c- optie vertelt het Tar-programma dat we een archief aan het maken zijn, terwijl f vertelt dat we het archief opslaan in een bestand met de opgegeven naam. Daarom maakt het eerste commando een niet-gecomprimeerd archief aan dat foo.tar wordt genoemd .

De volgende opdrachten voegen een extra optie toe die Tar vertelt welk type compressie moet worden gebruikt: z gebruikt gzip-compressie, j gebruikt bzip2-compressie en J gebruikt xz-compressie. (Let op het hoofdlettergebruik!)

Teerargumenten en opties
Er zijn ook lange versies van deze argumenten die de commando’s beter leesbaar maken, maar de meesten van ons zijn lui en gebruiken de versie die korter is om te typen. We hadden deze opdrachtregel echter ook kunnen gebruiken als we wilden:

tar –create –gzip –file foo.tar.gz foo

De bestandsextensie is niet vereist, maar het is een afspraak die het voor mensen gemakkelijker maakt om precies te zien wat voor soort archief het is – het systeem zelf heeft die hulp niet nodig, omdat het dit allemaal zelf kan oplossen. Het uitpakken van een archief is simpelweg een kwestie van c vervangen door x of –create met –extract . U hoeft het compressietype echter niet op te geven, zoals Tar het uitrekent:

tar xf foo.tar.gz

Een andere optie die u misschien wilt toevoegen, is v of –verbose , om u te laten zien wat Tar aan het doen is.

Als je een tarball hebt gekregen, wil je misschien zien wat erin zit zonder hem uit te pakken. Als u een archief heeft gemaakt, met name een back-up, wilt u misschien controleren of het juist is voordat u erop vertrouwt. De testoptie controleert de integriteit en geeft een overzicht van de inhoud van het archief.

tar tvf foo.tar.gz

Dat zijn de belangrijkste Tar-opties, maar het programma heeft er nog veel meer, zoals A of –concatenate om bestanden aan een bestaand archief toe te voegen in plaats van een nieuw aan te maken.

Toekomstbestendig
We hebben gezegd dat Tar elk nieuw compressieformaat aankan dat wordt geleverd, omdat het compressie doorgeeft aan een ander programma. Er zijn opdrachtregelopties om dit automatisch te doen voor gzip, bzip2 en xz, maar wat als iemand met een nieuwe compressor komt?

Zeg zoiets als sdc – super-duper-compressor? Je zou een niet-gecomprimeerde tarball kunnen maken en vervolgens sdc gebruiken om het te comprimeren, maar dat is verkwistend en traag. Gebruik in plaats daarvan een pijp:

tar c foo | sdc> foo.tar.sdc

unsdc foo.tar.sdc | teer xv

Hier gebruiken we alleen de –create- optie met Tar. Het ontbreken van een bestemming zorgt ervoor dat Tar de archiefgegevens naar de standaarduitvoer stuurt, die vervolgens naar het sdc-compressorprogramma wordt geleid. De tweede opdracht keert het proces om, decomprimeert het archief en stuurt het naar Tar voor extractie.

Dit artikel is aan TechRadar geleverd door Linux Format, het nummer één tijdschrift om je kennis over Linux, open source-ontwikkelingen, distro-releases en nog veel meer te vergroten. Abonneer u op de print of digitale versie van Linux Format hier
Er zijn twee soorten compressie: lossless en lossy. Lossy-compressie zorgt voor een grotere verkleining van de bestandsgrootte door zorgvuldig gegevens te verwijderen die de resultaten niet sterk beïnvloeden. JPEG- en MP3-bestanden gebruiken compressie met verlies.

Bij archivering wordt gebruikgemaakt van compressie zonder verlies en wordt het resultaat gedecomprimeerd, zodat u precies terugkomt waar u bent begonnen. Er zijn een aantal compressiemethoden zonder verlies beschikbaar, maar hier zijn enkele van de meest voorkomende.

Deflate Dit is de standaardcompressie die door Zip wordt gebruikt; het is oud en niet bijzonder effectief, maar wordt snel en goed ondersteund.
Comprimeren Dit is een oud Unix-compressieprogramma. De bestanden hebben de extensie .Z, maar het is onwaarschijnlijk dat u er veel in het wild zult zien. Er zijn ook patentproblemen mee.
Gzip Deze Compress-vervanging is volledig open en wordt nog steeds gebruikt. Gzip gebruikt Deflate, maar produceert over het algemeen kleinere archieven dan Zip met zijn standaardinstellingen. Het geeft niet de beste compressie, maar het comprimeert en decomprimeert snel, waardoor het een goede keuze is wanneer grootte niet de belangrijkste overweging is.
Bzip2 Dit is een efficiëntere compressor, maar gaat ten koste van de snelheid. Vooral de compressie kan langzamer zijn, maar levert compactere resultaten op.
xz Dit recentere programma maakt gebruik van het LZMA2-compressie-algoritme dat ook door 7-Zip wordt gebruikt. Het is snel – vooral voor decompressie – en werkt uitstekend. Het is de voorkeurscompressor voor veel belangrijke Linux-projecten, inclusief Coreutils en de kernel zelf.
Een kernonderdeel van de filosofie van Unix-achtige besturingssystemen is dat tools gespecialiseerd moeten zijn – elke tool moet één klus klaren en het goed doen. Dat betekent dat we een manier nodig hebben om programma’s aan elkaar te koppelen om complexere taken uit te voeren, en dat gebeurt met leidingen. Elk terminalprogramma heeft streams voor standaardinvoer, standaarduitvoer en standaardfout (meestal aangeduid als stdin, stdout en stderr).

Standaardinvoer is hoe het programma informatie accepteert en het gebruikt standaard het toetsenbord bij het uitvoeren van een opdracht vanaf een terminal. Standaarduitvoer is de uitvoer van de opdracht die standaard wordt afgedrukt naar het terminalvenster. Standaardfout gaat naar dezelfde plaats, maar deze kunnen allemaal worden gewijzigd. Beschouw het voorbeeld van:

tar c foo | sdc> foo.tar.sdc

AANBEVOLEN VIDEO’S VOOR U …
De | karakter is de pijp en het verbindt de standaard output van het ene programma met de standaard input van een ander. Dus Tar archiveert de inhoud van foo en stuurt deze naar stdout, die vervolgens wordt doorgestuurd naar de invoer van sdc.

De meeste compressoren werken standaard aan een bestand:

gzip een bestand

Dit comprimeert het bestand naar somefile.gz . Als er geen bestand wordt opgegeven, comprimeren ze de standaardinvoer en sturen ze het resultaat naar de standaarduitvoer. Het> -teken voert een omleiding uit en leidt de standaarduitvoer van de terminal naar een bestand om, zodat je een gecomprimeerd archief hebt in foo.tar.sdc .

Standaardfout wordt niet omgeleid door>. Als er iets misgaat, worden foutmeldingen naar de terminal afgedrukt – wat logisch is, want als ze naar het bestand zouden worden gestuurd, zou je niet weten dat er iets mis was.

Leave a Reply

Your email address will not be published. Required fields are marked *