Eines per arxivar paquets

De Guifi.net - Wiki Català

tar

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

Instal·lació i paquets

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.

Fitxers i el paràmetre f

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.

Empaquetar

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).

Empaquetar fitxers nous (a partir d'una data)

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 

Empaquetar mantenint les permisos

Ho podem fer amb l'opció -p (--preserve-permisions):

$ tar czfp file.tar.gz archivewithtar/

Desempaquetar

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 

Llistar

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
...

Còpies incrementals


Comparar un fitxers tar amb fitxers del sistema

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:

Opció -p. Preservar permisos

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

Crear una imatge de disc

Des d'una live CD:

$ tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

Recursos:

gzip

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.

Descomprimir tarballs

Per descomprimir un fitxer gzip:

$ tar xvzf fitxercomprimit.tar.gz
  • x: Extreure
  • f: Indica que treballem amb un fitxer. Tar és una eina que té molts anys i treballa per defecte amb cintes
  • v: Opcional. Mode verbose. Aporta més informació sobre el procés.

Comprimir tarballs

$ tar -czf fitxers.tar.gz fitxers

Recursos:

Fitxers gz

Comprimir

$ gzip fitxer

Descomprimir

$ 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

Llistar

$ tar -ztvf file.tar.gz

On:

  • t: List the contents of an archive
  • v: Verbosely list files processed (display detailed information)
  • z: Filter the archive through gzip so that we can open compressed (decompress) .gz tar file
  • f filename: Use archive file called filename

bz2

Recursos:

Descomprimir tarball

$ tar jxvf fitxercomprimit.tar.bz2

Comprimir tarball

$ tar cvjf tarfile.tar.bz2 files...

Llistar tarball

$ tar -jtvf file.tar.bz2

On:

  • t: List the contents of an archive
  • v: Verbosely list files processed (display detailed information)
  • z: Filter the archive through gzip so that we can open compressed (decompress) .gz tar file
  • j: Filter archive through bzip2, use to decompress .bz2 files.
  • f filename: Use archive file called filename

Descomprimir

Dos opcions:

$ bzip2 -d fitxer.bz2

o

$ bunzip2 fitxer.bz2

Comprimir

$ bzip2 fitxer

Comprimeix el fitxer i genera un fitxer fitxer.bz2 (l'original es borra).

cpio

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ó:

  • Mode copy-out (-o o --create-option): Aquest mode crea un arxiu i copia fitxers a aquest arxiu.
  • Mode copy-in (-i o --extract): Aquest mode extreu fitxers d'un arxiu. És possible extreure només fitxers concrets o fitxers segons un patró.
  • Mode copy-pass (-p o --pass-through): Combina els dos modes anteriors permetent que es pugui copiar un estructura de directoris d'una localització a un altre.
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

Arxivar fitxers

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

Extreure fitxers

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

ar

Consulteu ar.

Empaquetar un fitxer en múltiples fitxers partits. split

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 -

Exemples

absolute path names

$ 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

Fer una còpia d'un sistema muntat

$ 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

Vegeu també

Eines de l'usuari