L'ordre tar (tape archiver) permet arxivar fitxers i va ser creada per GNU. Com podeu veure pel seu nom, l'ordre tar s'utilitzava inicialment per fer còpies de seguretat en cintes (tapes). Actualment però, podem utilitzar tar per guardar dades en qualsevol dispositiu o simplement per arxivar al disc dur.
Els fitxers creat per tar se'ls anomena tarballs i són força utilitzats per fer còpies de seguretat o per distribuir múltiples fitxers entre sistemes. Per exemple, moltes aplicacions es poden descarregar des de Internet com a tarballs o sense anar més lluny, els paquets de programari contenen fitxers tarball al seu interior.
tar és una comanda amb força opcions, les quals podeu consultar en detall al manual:
$ man tar
O online a:
http://linux.die.net/man/1/tar
I també podeu consultar el manual online a:
http://www.gnu.org/software/tar/manual/index.html
A la següent taula resumim les ordres mśe importants que ens proporciona tar:
Comanda | Comanda curta | Descripció |
---|---|---|
--create | c | Crea un arxiu tar |
--concatenate | A | Afegeix fitxers tar a un fitxer |
--append | r | Afegeix fitxers que no són tar a un arxiu ta |
--update | u | Afegeix només els fitxers que són nous a un arxiu |
--diff o --compare | d | Compara un arxiu amb els fitxers del disc |
--list | t | Mostra els continguts d'un arxiu |
--extract o --get | x | Extreu els fitxers d'un arxiu |
NOTA: A la taula quan parlem d'arxiu ens referim a un tarball o fitxer tar. NOTA 2: Les comandes de tar es poden especificar tant sense guió (-) com amb guió i a més es poden combinar. Per exemple $ tar xvzf fitxer.tar.gz
A més de les comandes disposem dels següents paràmetres (també anomenats qualificadors):
Qualificador | Abreviatura | Descripció |
---|---|---|
--directory dir | C | Canvia al directori -dir' abans de realitzar les operacions |
--file [host:]file | f | Utilitza el fitxer file de la màquina host com a fitxer d'arxiu. |
--listed-incremental file | g | Realitza una còpia de seguretat incremental o una restauració utilitzant el fitxer file com a llista dels fitxers arxivats prèviament. |
--one-file-system | l | Fa còpia de seguretat o restaura només d'un sistema de fitxers. |
--multi-volume | M | Crea o extrau un fitxer tar multivolum |
--same-permissions | p | Manté tota la informació de permisos |
--absolute-paths | P | Manté les barres (/) inicials dels fitxers |
--verbose | b | Mostra el fitxers llegits o extrets. Quan s'utilitza amb --list mostra informació extra com la mida, els permisos i les marques de temps dels fitxers. |
--verify | w | verifica l'arxiu després de creat |
--exclude file | no en té | Exclou el fitxer file de l'arxiu |
--exclude-from file | X | Exclou els fitxers indicats a file de l'arxiu |
--gzip or --ungzip | z | Processa (comprimeix o descomprimeix) un fitxer comprimit amb gzip |
--bzip2 | j | Processa (comprimeix o descomprimeix) un fitxer comprimit amb bzip |
Tal i com podeu comprovar amb:
$ whereis tar tar: /bin/tar /usr/share/man/man1/tar.1.gz $ dpkg -S /bin/tar tar: /bin/tar
en sistemes de la família Debian, com per exemple Ubuntu, tar es proporcionat pel paquet tar. Aquest paquet es troba normalment instal·lat per defecte en la majoria de distribucions.
Per defecte, l'ordre tar treballa amb cintes. Per aquesta raó quan vulguem treballar amb fitxers (la majoria de vegades) haurem d'indicar-ho amb el paràmetre f.
La sintaxi a utilitzar a l'hora d'empaquetar un conjunt de fitxers és:
$ tar cf fitxer.tar fitxers
On fitxer.tar és el paquet que contindrà tots els fitxers especificats per fitxers. Per defecte tar és una comanda silenciosa en cas que tot funcioni correctament (a l'estil Unix: No News Good News). Podeu obtenir més informació amb el paràmetre v (--verbose). Per exemple:
$ tar cvf fitxer.tar FestaUbuntu FestaUbuntu/ FestaUbuntu/XerradaOpenStreetMaps/ FestaUbuntu/XerradaOpenStreetMaps/.svn/ FestaUbuntu/XerradaOpenStreetMaps/.svn/entries FestaUbuntu/XerradaOpenStreetMaps/.svn/text-base/ FestaUbuntu/XerradaOpenStreetMaps/.svn/props/ FestaUbuntu/XerradaOpenStreetMaps/.svn/prop-base/ FestaUbuntu/XerradaOpenStreetMaps/.svn/format FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/ FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/text-base/ FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/text-base/presentacio-ubuntujj-osm.pdf.svn-base FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/props/ FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/prop-base/
També es poden indicar llistes de fitxers:
$tar -c file1 file2 file3 ...
NOTA: Observeu que tar suporta tant les opcions amb guió (Unix98) i sense guió (BSD).
Podem empaquetar només el fitxers nous a partir d'una data concreta, amb l'opció -N (--newer):
$ tar cvf file.tar --newer "2008-02-07 13:54:00" fitxers
Ho podem fer amb l'opció -p (--preserve-permisions):
$ tar czfp file.tar.gz archivewithtar/
Per desempaquetar un fitxer podem utilitzar la comanda --extract (x)
$ tar -xvf fitxer.tar
o
$ tar xvf fitxer.tar
El paràmetre v (--verbose) l'hem utilitzat per mostrar més informació sobre el procés d'extracció. Per defecte només es mostren els errors.
Podem també extreure només un fitxer (o subconjunt de fitxers):
$ tar xvf linuxtarfile.tar archivewithtar/dmesg
Per tal de consultar els continguts d'un fitxer tar, podeu utilitzar l'ordre t:
$ tar tf fitxer.tar FestaUbuntu/ FestaUbuntu/XerradaOpenStreetMaps/ FestaUbuntu/XerradaOpenStreetMaps/.svn/ FestaUbuntu/XerradaOpenStreetMaps/.svn/entries FestaUbuntu/XerradaOpenStreetMaps/.svn/text-base/ FestaUbuntu/XerradaOpenStreetMaps/.svn/props/ FestaUbuntu/XerradaOpenStreetMaps/.svn/prop-base/ FestaUbuntu/XerradaOpenStreetMaps/.svn/format FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/ FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/text-base/ FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/text-base/presentacio-ubuntujj-osm.pdf.svn-base FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/props/ FestaUbuntu/XerradaOpenStreetMaps/.svn/tmp/prop-base/
podeu mostrar més informació amb v (--verbose):
$ tar -tvf fitxer.tar drwxr-xr-x sergi/sergi 0 2009-05-12 12:52 FestaUbuntu/ drwxr-xr-x sergi/sergi 0 2009-05-12 12:52 FestaUbuntu/XerradaOpenStreetMaps/ drwxr-xr-x sergi/sergi 0 2009-05-12 13:50 FestaUbuntu/XerradaOpenStreetMaps/.svn/ -r--r--r-- sergi/sergi 216 2009-05-12 12:52 FestaUbuntu/XerradaOpenStreetMaps/.svn/entries ...
Es pot fer amb l'opció `--compare' (`-d'):
$ tar --compare --verbose --file=index.tar
Equivalent a:
$ tar dvf index.tar
Es mostraran tots els fitxers seguits d'un text. Si no hi ha text és que no hi ha diferencies.
Exemple:
$ mkdir tar $ cd tar $ touch a $ touch b $ touch c $ tar cvf fitxers.tar a b c
Si comparem són iguals:
$ tar dvf fitxers.tar a b c
Si ara modifiquem un fitxer:
$ touch b
$ tar dvf fitxers.tar a b b: Mod time differs c
Si modifiquem el contingut:
$ vi a $ tar dvf fitxers.tar a a: Mod time differs a: Size differs b b: Mod time differs c
Recursos:
Per exemple:
$ sudo tar -xvpzf $IMAGE_PATH -C /mnt/${NAME}/
Extreu una imatge de disc
Segons el manual, també es pot utilitzar--preserve:
$ man tar ... --preserve same as both -p and -s
Des d'una live CD:
$ tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
Recursos:
En sistemes operatius lliures, el sistema més utilitzat per tal de comprimir fitxers és gzip. Gzip és l'abreviació de GNU zip.
Gzip es basa en l'algoritme DEFLATE, que és una combinació dels algorismes LZ77 i el Huffman. DEFLATE es va desenvolupar com a resposta a les patents que van cobrir LZW i d'altres algoritmes de compressió.
No s'ha de confondre el gzip amb el Zip ja que no són compatibles. gzip no arxiva fitxers, només els comprimeix. A causa d'això tot sovint s'utilitza conjuntament amb alguna eina per arxivar com tar.
Normalment, l'extensió dels arxius gzipats és .gz. El programari d'Unix sovint es distribueix en fitxers amb extensió
.tar.gz
o
.tgz
anomenats tarballs. Són fitxers empaquetats amb tar i comprimits amb gzip.
Per descomprimir un fitxer gzip:
$ tar xvzf fitxercomprimit.tar.gz
$ tar -czf fitxers.tar.gz fitxers
Comprimir el directori al que esteu i guardar el tarball al directori pare:
$ tar -czvf ../all.tar.gz *
Recursos:
$ gzip fitxer
$ gzip -d fitxer.gz
O podeu utilitzat gunzip:
$ gunzip fitxer.gz
Per defecte es substitueix el fitxer comprimit pel resultat de descomprimir. Per descomprimir el resultat en un altre fitxer:
$ gunzip fitxer.gz > fitxer
Un cas força habitual es descomprimir els fitxers de documentació del paquets Debian. Normalment, per estalviar temps, aquest fitxers estan comprimits. Per exemple, per veure exemples de com configurar les interfícies de xarxa:
$ dpkg -L ifupdown | grep doc | grep interfaces /usr/share/doc/ifupdown/examples/network-interfaces.gz ...
$ sudo gunzip /usr/share/doc/ifupdown/examples/network-interfaces.gz $ vi /usr/share/doc/ifupdown/examples/network-interfaces
$ tar -ztvf file.tar.gz
On:
Recursos:
$ tar jxvf fitxercomprimit.tar.bz2
$ tar cvjf tarfile.tar.bz2 files...
$ tar -jtvf file.tar.bz2
On:
Dos opcions:
$ bzip2 -d fitxer.bz2
o
$ bunzip2 fitxer.bz2
$ bzip2 fitxer
Comprimeix el fitxer i genera un fitxer fitxer.bz2 (l'original es borra).
Vegeu zip
Vegeu rar
Vegeu 7zip
L'ordre cpio com tar, també és un ordre que permet arxivar fitxers, però que difereix en la forma de funcionar.
L'ordre cpio té 3 modes d'operació:
NOTA: tingueu en compte que el nom dels modes copy-out i copy-in pot ser una mica confús.
Cpio té múltiples opcions que podeu consultar al manual:
$ man cpio
o a Internet:
http://linux.die.net/man/1/cpio
Les opcions més importants les podeu trobar a la següent taula:
Opció | Abreviatura | Descripció |
---|---|---|
--reset-access-time | -A | Torna a establir el temps d'accés (atime) després de llegir el fitxer de forma qe no sembla que així estat llegit |
--append | -A | Afegeix fitxers a un arxiu |
--pattern-file=filename | -E filename | Utilitza els continguts del fitxer filename com a una llista de fitxers a extreure |
--file=filename | -F filename | Utilitza el fitxer filename com a fitxer d'arxiu. Si no s'utilitza aquest paràmetre per defecte s'utilitza la entrada estàndard o la sortida estàndard. |
--format=format | -H format | Utilitza un format especific per al fitxer d'arxiu. Els possibles formats són bin (per defecte, crea un fitxer binari), crc (nou format binari amb checksum), o tar |
No hi ha | -I filename | Utilitza el fitxer especificat en comptes de l'entrada estàndard. A diferència de -F no es redireccionen les dades de sortida. |
--no-absolute-filenames | No hi ha | En mode copy-in (extreure) extreu els fitxers relatius al directrui de treball. |
--unconditional | -u | Reemplaça els fitxers sense preguntar. |
--list | -t | Mostra la taula de continguts de l'entrada |
--verbose | -v | Mostra informació extra |
Per especificar els fitxers que es volen arxivar cal fer-ho utilitzant l'entrada estàndard. Tenim doncs força opcions:
Utilitzar l'ordre find:
Combinant l'ordre find amb un conducte (pipe) i redireccions:
$ find ./carpeta_a_arxivar | cpio -o > /media/KINGSTON/arxiu.cpio
El fitxer resultat no es troba comprimit. Per comprimir podem utilitzar gzip:
$ find ./carpeta_a_arxivar | cpio -o | gzip > /media/KINGSTON/arxiu.cpio
Podem utilitzar l'opció -i i redireccions:
$ cpio -i < /media/KINGSTON/arxiu.cpio
Si el fitxer està comprimit podeu utilitzar l'opció -c:
$ gunzip -c /media/KINGSTON/arxiu.cpio| cpio -i
Consulteu ar.
Per exemple, per dividir un fitxer en trossos de 100M:
$ tar czv UbuntuServer_904_cursos.vmdk | split -b 100M - UbuntuServer.tar.gz
El fitxer es pot recuperar amb:
$ cat UbuntuServer.tar.gz* | tar xzvf -
$ sudo tar cvzf /linux2/backups/mysql/wikidb_20090901.sql.tar.gz /linux2/backups/mysql/wikidb_20090901.sql ar: Removing leading `/' from member names /linux2/backups/mysql/wikidb_20090901.sql
Crea el fitxer /linux2/backups/mysql/wikidb_20090901.sql.tar.gz que conté el fitxer original /linux2/backups/mysql/wikidb_20090901.sql amb tot el path (però sense /). És dir:
linux2/backups/mysql/wikidb_20090901.sql
Si volem mantenir el /, cal utilitzar la opció:
-P, --absolute-names don’t strip leading ‘/’s from file names
NOTA: compte que pot ser perillós restaurar aquest tipus de fitxers en segons quins casos (pot sobrescriure fitxers del sistema importants sense previ avís).
Si no el volem mantenir i només volem posar el fitxer sense path:
$ sudo tar cvzf /linux2/backups/mysql/wikidb_20090901.sql.tar.gz -C /linux2/backups/mysql wikidb_20090901.sql
$ sudo tar -cvpzf karmic_ubuntu_server.tar.gz --exclude=/mnt/karmic/proc --exclude=/mnt/karmic/lost+found --exclude=/mnt/karmic/sys -C /mnt/karmic/ .
Per restaurar en un altre partició muntada:
$ sudo tar -xvpzf /mnt/repositori_maquina_virtual/karmic_ubuntu_server.tar.gz -C /mnt/negrell