15 ejemplos de comandos tar para administradores de sistemas y desarrolladores
Publicado: 2021-09-21tar es uno de los formatos de archivo más populares disponibles en sistemas basados en Unix y Linux.
El nombre en sí se deriva de T ape AR chive, ya que fue desarrollado para escribir datos secuenciales en dispositivos de cinta. También se le conoce como tarball a veces.
Por defecto, tar solo archiva los archivos sin compresión pero usando algunas partes. Podemos utilizar diferentes técnicas de compresión para obtener una salida comprimida. La utilidad tar generalmente se incluye en la mayoría de las distribuciones de Linux de forma predeterminada, y el formato en sí es compatible con otros sistemas operativos, incluidos Windows y macOS, a través de diferentes herramientas y utilidades.
Cubriremos algunos de los ejemplos comunes y el uso del comando tar y sus indicadores compatibles en este artículo.
Entonces empecemos…
Crear archivo tar
Para crear un archivo simple sin comprimir, la sintaxis del comando tar es:
$ tar cvf <tar-file-name> <files-to-archive> Aquí los indicadores c significa creación, v para salida detallada y f para especificar el nombre del archivo tar. Por convención, especifique el nombre del archivo tar con la extensión .tar . Los archivos que se van a archivar se pueden especificar con comodines o como nombres / rutas de archivo únicos o múltiples.
Como ejemplo, tengo tres archivos en mi directorio:
$ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $ Y quiero crear un archivo tar que contenga los tres archivos, se puede hacer como:
$ tar cvf archive.tar * file1.txt file2.txt file3.txt $ ls -l archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar $También puedo especificar solo archivos específicos para archivar, como:
$ tar cvf archive1.tar file1.txt file2.txt file1.txt file2.txt $ ls -l archive1.tar -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar $Crear archivo comprimido (GZ)
tar no solo permite archivar archivos, sino también comprimirlos para ahorrar espacio. Uno de los formatos de compresión más populares es gunzip, generalmente representado por la extensión .gz después de .tar o como tgz . Podemos usar la bandera z para especificar que necesitamos que los archivos se compriman usando gunzip. He aquí un ejemplo:
$ tar cvzf archive.tar.gz file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ Puede observar que el tamaño de ambos archivos de almacenamiento es sustancialmente diferente a pesar de que ambos contienen los mismos tres archivos. Esto se debe al uso de compresión mediante el indicador z .
Crear archivo comprimido (BZ2)
tar admite varios otros formatos de compresión. Uno de ellos es bz2 o bzip2 que está representado por la extensión tar.bz2 o, a veces, como tbz2 . Puede darle un tamaño de archivo más pequeño pero a su vez consume más CPU, por lo que el proceso de compresión / descompresión podría ser más lento que el archivo gz .
Ejemplo:
$ tar cvjf archive.tar.bz2 file* file1.txt file2.txt file3.txt $ ls -l archive.tar archive.tar.gz archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 12 20:25 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 12 20:21 archive.tar.gz $ file archive.tar* archive.tar: POSIX tar archive (GNU) archive.tar.bz2: bzip2 compressed data, block size = 900k archive.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240 $Desinstalar todos los archivos
Un archivo tar (ya sea comprimido o sin comprimir) se puede extraer simplemente usando la opción x . Los siguientes ejemplos aclararán su uso:
$ tar xvf archive.tar file1.txt file2.txt file3.txt $ ls -l total 24 -rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $ Esto funciona para un archivo comprimido gz como:
$ tar xvf archive.tar.gz file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $ O incluso para un archivo comprimido bz2 como:
$ tar xvf archive.tar.bz2 file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $Listar contenido de alquitrán
Para enumerar el contenido de un archivo tar, puede usar el indicador t como se muestra a continuación:
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $Untar archivos específicos
Solo se puede extraer un archivo de un archivo tar o tar.gz o tar.bz2 especificando el nombre del archivo como:
$ tar xvf archive.tar.bz2 file1.txt file1.txt $ ls -l total 8 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt $Del mismo modo, puede especificar varios nombres de archivo separados por espacio para extraerlos juntos de una vez.
$ tar xvf archive.tar.bz2 file1.txt file3.txt file1.txt file3.txt $ ls -l total 12 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $Untar usando comodines
Para extraer uno o más archivos usando un PATTERN comodín, use la --wildcards :
$ tar xvf archive.tar.bz2 --wildcards "file*" file1.txt file2.txt file3.txt $ ls -l total 16 -rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt $Agregar archivos al archivo
Se pueden agregar / adjuntar nuevos archivos a los archivos tar sin comprimir existentes usando r --append flag con nuevos nombres de archivo o patrón comodín (recuerde que esto solo funciona con archivos .tar sin comprimir y no con formatos comprimidos tar.gz o tar.bz2 ):

$ tar rvf archive.tar file-new* file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ Puede observar que la lista de contenidos de archive.tar muestra nuevamente los dos archivos recién agregados.
Eliminar archivos del archivo
Es posible eliminar archivos específicos de un archivo tar usando la --delete como se muestra a continuación (compare la lista de archivos tar antes y después de la eliminación de archivos):
$ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r--r-- abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $ tar --delete -f archive.tar file-new.txt file-new2.txt $ tar tvf archive.tar -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt -rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt -rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt $Nuevamente, esto solo funciona para archivos tar sin comprimir y fallará para formatos de archivo comprimidos.
Crear con Verify
Mientras crea archivos tar sin comprimir, puede verificar el contenido del archivo usando el indicador W como:
$ tar cvfW archive.tar file*.txt file1.txt file2.txt file3.txt Verify file1.txt Verify file2.txt Verify file3.txt $ Esto no se puede usar con indicadores de compresión, aunque puede comprimir el archivo tar creado más tarde usando gzip u otras herramientas.
Extraer alquitrán a la carpeta
Si desea extraer el contenido de su tarball a una carpeta específica en lugar del directorio actual, use el indicador -C con la ruta del directorio como se muestra a continuación:
$ tar xvf archive.tar -C new-directory/ file1.txt file2.txt file3.txt file2.txt file4.txt $ ls -l new-directory/ total 16 -rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt -rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt $Usar indicador de diferencia
Puede usar --diff indicador d para encontrar cualquier cambio entre los archivos en el archivo tar y los del sistema de archivos. Aquí hay un ejemplo que ejecuta el diff una vez cuando el archivo dentro y fuera del tar era el mismo. Después de actualizar el archivo, se ejecutó una vez más para mostrar la diferencia en la salida.
$ tar dvf archive.tar file4.txt file4.txt $ $ echo newline > file4.txt $ $ tar dvf archive.tar file4.txt file4.txt file4.txt: Mod time differs file4.txt: Size differs $Excluir archivos
La exclusión de archivos específicos puede ser un requisito al crear archivos tar. Esto se puede lograr con la bandera --exclude .
$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/ dir/ dir/file1.txt dir/file3.txt $ ls -l dir total 24 -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt -rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt -rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt -rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt -rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt $ tar tvf archive.tar.gz drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/ -rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt -rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt $ Como puede observar en el resultado anterior, podemos especificar la --exclude varias veces para especificar varios nombres de archivo o patrones en la condición AND . Tenga en cuenta que de los seis archivos en el dir en el ejemplo anterior, solo dos archivos cumplieron la condición para ser incluidos en archive.at.gz .
Ver tamaño del contenido de alquitrán
Podemos obtener el tamaño del contenido de un archivo tar comprimido usando el siguiente comando:
$ tar tvf archive.tar.gz -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xzf archive.tar.gz --to-stdout|wc -c 56 $ Del mismo modo para el archivo bz2 :
$ tar tvf archive.tar.bz2 -rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt -rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $ tar -xjf archive.tar.bz2 --to-stdout|wc -c 56 $Conservar permisos
De forma predeterminada, el comando tar conserva el permiso de los archivos y directorios que está archivando, aunque puede especificar explícitamente el mismo usando -p flag o --preserve-permissions como se muestra a continuación:
$ tar cvpzf archive.tar.gz *.txt file1.txt file2.txt file3.txt $Resumen
tar es una utilidad útil en sistemas Unix / Linux durante mucho tiempo y se utilizó principalmente en tareas de archivo y copia de seguridad. La utilidad ha evolucionado con muchas opciones a lo largo del tiempo. Puede usarse para tareas simples o complejas, dado que conoce las características que ofrece. Este artículo cubrió algunas de las operaciones básicas que puede realizar con el comando tar y muestra cómo puede ayudarlo en sus tareas diarias de administración del sistema.
Consulte su página de man tar o use el comando tar --help o tar --usage para obtener más detalles.
