Articles

Omgaan met RAR- en 7-Zip-archieven in Linux

De bestandscompressieformaten RAR en 7-Zip vinden hun oorsprong in Windows, dus ondersteuning voor deze formaten onder Linux is niet zo vanzelfsprekend als voor oude Unix-overblijfselen als Gzip en TAR. Maar met de juiste software kun je zonder veel problemen met deze gecomprimeerde bestanden overweg.

Eerst een beetje achtergrond. RAR – kort voor Roshal Archive – is een eigen bestandscompressie formaat ontwikkeld door Eugene Roshal. Roshal verkoopt een commercieel programma voor Windows, WinRAR, maar biedt ook gratis uncompress clients aan voor een aantal besturingssystemen.

7-Zip is een Windows programma dat is ontworpen om zoveel mogelijk compressie formaten aan te kunnen. Het eigen formaat is 7z, dat een moderne afgeleide van het LZ77 compressie-algoritme gebruikt. De 7-Zip Windows app en een 7z software development kit zijn beschikbaar onder de LGPL.

Beide formaten hebben de pretentie betere compressie ratio’s te bereiken voor veel voorkomende data types dan oudere algoritmes. Ze ondersteunen ook het opsplitsen van grote archieven in meerdere kleine volumes voor eenvoudigere mobiliteit en foutherstel. De combinatie van deze twee eigenschappen heeft ze populair gemaakt voor online distributie van extreem grote bestanden zoals ISO images.

7z en Linux

De 7-Zip app is open source, maar blijft Windows-only. Voor Linux-gebruikers linkt het project naar een opdrachtregel-clientpakket genaamd p7zip dat twee uitvoerbare bestanden biedt, 7z en 7za. De twee hebben dezelfde syntaxis en opties, met als enige verschil dat 7za een op zichzelf staande app is die alleen is gecompileerd voor gebruik met 7z en de essentiële Unix formaten (tar, gzip, bzip2, etc.), terwijl 7z een plugin architectuur gebruikt die het mogelijk maakt om veel aanvullende compressie formaten te ondersteunen.

De basis syntaxis is 7z function options filename.7z. Om een archief te decomprimeren, gebruikt u 7z x myfile.7z. U kunt bestanden uit een archief extraheren met 7z e myotherfile.7z, maar als u de e-functie gebruikt, extraheert u alle bestanden naar de huidige werkdirectory, terwijl x hun paden behoudt.

RAR en Linux

De RAR-situatie is wat gecompliceerder, vanwege het eigen compressieschema van het bestandsformaat. De RARLAB site biedt een gratis uncompress-only client voor Linux, genaamd unrar, ontworpen voor 32-bit Intel distro’s in zowel RPM als Slackware pakketten, en als standalone binaries voor PowerPC, 64-bit Intel, en ARM Linux systemen. Aangezien RARLAB’s unrar-programma noch vrije software, noch open source is, zul je het waarschijnlijk niet bij veel Linux-distributies aantreffen. Je kunt een tarball met broncode van RARLAB downloaden, maar de bijgevoegde licentie verbiedt je expliciet om de broncode te gebruiken voor het ontwikkelen van enige vorm van RAR encoder.

Een andere optie is een GPLv2-gelicenseerd command-line tool, ontwikkeld door het Gna! project. Verwarrend genoeg heet de open source RAR decoder ook unrar. Gna! unrar is ontworpen als een wikkel rond unrarlib, een open source RAR decoderingsbibliotheek ontwikkeld door Christian Scheurer en Johannes Winkelmann – die geen deel uitmaken van Gna!.

Scheurer en Winkelmann ontwikkelden unrarlib op basis van de originele RARLAB broncode, maar vroegen en kregen toestemming van Eugene Roshal om hun werk als vrije software uit te brengen. Zodoende is unrarlib beschikbaar onder de GPLv2 en onder RARLAB’s originele licentie.

Die licentie-afspraak lijkt de weg vrij te maken voor geïnteresseerde partijen om RARLAB te omzeilen en een concurrerende RAR encoder te maken van de originele broncode, maar dat is nog niet gebeurd. Scheurer zelf is niet geïnteresseerd om dit na te streven, hij zegt dat hij liever open source formaten gebruikt voor het maken van archieven. “Je kunt niet altijd kiezen in welk formaat je de gegevens krijgt, dus het is prima om een open manier te hebben om er toegang toe te krijgen. Maar je kunt wel kiezen op welke manier je een archief maakt. Als je geen closed source compressieprogramma’s wilt, zijn er goede alternatieven.”

Het gepatenteerde unrar gebruikt dezelfde basissyntaxis als 7z en 7za. Om het archief te decomprimeren en de bestandspaden te behouden, typ je unrar x myarchive.rar. In de GPL unrar, voegt u eenvoudigweg een koppelteken voor de x: unrar -x myotherarchive.rar.

Tot op heden ondersteunt unrarlib alleen tot versie 2 van het RAR bestandsformaat. Scheurer zegt dat hij werkt aan het toevoegen van ondersteuning voor het nieuwere RAR3 formaat aan unrarlib, maar zegt dat hij niet zeker weet welke reactie hij van RARLAB kan verwachten.

GUI ondersteuning

Als je het meeste werk doet vanuit een Linux window manager, dan heb je geluk. Zowel GNOME als KDE hebben grafische archiefbeheerders – File Roller voor GNOME en Ark voor KDE. Recente versies van beide gebruiken plugins om een grote verscheidenheid aan archiefformaten te ondersteunen, en vertrouwen op p7zip voor 7z ondersteuning en Gna! unrar voor RAR ondersteuning. Vanwege de incompatibiliteit van de nieuwere RAR3 bestanden, kan het echter nodig zijn om ook de proprietary unrar op je systeem te installeren.

Zoals ik in het begin al zei, zowel 7z als RAR ondersteunen het opsplitsen van grote bestanden in kleinere brokken. Echter, in mijn tests herkende noch File Roller, noch Ark dat een map vol met opeenvolgend genummerde bestanden myfile.7z.001, myfile.7z.002, myfile.7z.003, enzovoort, één 7z bestand was dat in hapklare brokken was opgedeeld.

Dus, om bij de data binnenin te komen, moest ik de opgesplitste bestanden weer samenvoegen op de commandoregel met het cat commando. cat myfile.7z.001 myfile.7z.002 myfile.7z.003 > myfile.7z zal de gedeeltelijke bestanden weer in volgorde aan elkaar plakken, en het resultaat myfile.7z noemen. Op dat moment zou je het 7z archief kunnen openen in File Roller of Ark, maar zolang je al aan de commando regel zit, is het veel sneller om gewoon 7z x myfile.7z te typen, en voilà – data, mooie data, direct binnen handbereik.

Laat een antwoord achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *