Comando tar no Linux (arquivamento de arquivos) [Guia Básico]

O comando tar no Linux serve para criar arquivamentos de arquivos no Linux. Estes arquivamentos vêm do tempo que se usava fitas de backup para criar cópias de segurança de dados.

Com o fim do uso de fitas de backup, o uso de se criar arquivamentos utilizando o mesmo software continuou no mundo Unix e Linux, através do comando tar, que cria os arquivos conhecidos como “tarball”.

Os arquivos tarball são empacotamentos de arquivos e diretórios que mantêm a estrutura de diretórios e arquivos original em um arquivo tar, com a possibilidade de compressão de dados.

O comando para empacotar arquivos e diretórios é o tar. O nome deste comando provém de “Tape-ARchive”. Ele lê arquivos e diretórios e salva em fita ou arquivo.

Juntamente com os dados, ele salva informações importantes como a última modificação, permissões de acesso e outros. Isso o torna capaz de restaurar o estado original dos dados.

As opções do comando tar não são tão opcionais assim. Ele recebe pelo menos dois argumentos:

  • opções:  Diz o que o tar deve fazer
  • [fonte]: Se o tar for utilizado para fazer backup, este parâmetro pode ser um arquivo, um dispositivo, um diretório a ser copiado;
  • [destino]: Se o comando for utilizado para backup, esta opção irá especificar o destino para os dados. Pode ser um arquivo tarball ou um dispositivo. Se for utilizado para restaurar os arquivos, ela irá especificar um arquivo tarball e um dispositivo de onde os dados serão extraídos.

Primeiro deve-se escolher o que tar deve fazer através das opções:

  • -c: Cria um novo arquivo .tar;
  • -u: Adiciona mais arquivos ao arquivo .tar somente se estes forem novos ou modificados;
  • -r: Adiciona os arquivos especificados no final do arquivo .tar;
  • -g: Cria um backup incremental;
  • -t: Lista o conteúdo de um arquivo .tar;
  • -x: Extrai os arquivos de arquivo .tar;

Ele ainda tem opções auxiliares:

  • -j: Utiliza o bzip2 para compactar e descompactar os arquivos .tar.bz2;
  • -J: Utiliza o xz para compactar e descompactar os arquivos .tar.xz
  • -z: Utiliza o gzip para compactar e descompactar os arquivos .tar.gz;
  • -v: Lista todos os arquivos processados;
  • -f: Indica que o destino é um arquivo em disco, e não uma unidade de fita magnética;

As opções do tar podem ser combinadas em um único parâmetro como “cvzf”. 

Por ser um comando que originalmente foi feito para ler/gravar em fita, para criar um arquivamento tar ou ler um arquivamento tar em disco, deve-se sempre usar a opção “f”.

Exemplos:

Para salvar um determinado diretório /var/lib/mysql em um no arquivo /var/backup/mysql.tar.gz:

$ tar cvzf /var/backup/mysql.tar.gz /var/mysql

Para extrair o mesmo pacote:

$ tar xvzf /var/backup/mysql.tar.gz –C / 

Você poderá abrir o conteúdo de um arquivo tarball com extensão .tar.gz:

$ tar xvzf arquivo.tar.gz

Se o arquivo for compactado com o bzip2, ele deve ser descompactado pelo bunzip2:

$ tar xvjf arquivo.tar

No caso dos arquivos compactados com xz, pode-se utilizar:

$ tar xvJf linux.tar.xz

No ambiente gráfico, você pode descompactar e extrair um arquivo tarball sem muito esforço, apenas clicando no arquivo. Desta forma o Linux invocará em segundo plano o compactador de dados apropriado, juntamente com o tar para extrair o pacote de dados no diretório corrente.

Veja a comparação entre a compactação realizada pelos compactadores gzip, bzip2 e xz e um arquivo tar sem compactação:

$ ls -1shS linux*
895M linux.tar
165M linux.tar.gz
126M linux.tar.bz2
105M linux-5.4.3.tar.xz

No dia a dia, é recomendado memorizar a seguinte tabela para descompactar arquivos:

ExtensãoCompactador UtilizadoOpção do Tar
.tar.gzGzip$ tar xvzf arquivo.tar.gz
.tar.bz2Bzip2$ tar xvjf arquivo.tar.bz2
.tar.xzXz$ tar xvJf arquivo.tar.xz

Para criar um pacote a partir de uma relação de diretórios em um arquivo e com a data superior a 01/05/2020:

$ cat listabackup.txt
/etc 
/var/lib/mysql
/usr/local/apache2/conf
$ tar czPf backup.tar.gz -N 01/05/2020 -T listabackup.txt

Para salvar o diretório /etc em fita SCSI no dispositivo /dev/st0:

$ tar cvz /dev/st0 /etc

Para listar o conteúdo de uma fita SCSI no dispositivo /dev/st0:

$ tar tfz /dev/st0

Para extrair somente o arquivo de password:

$ tar xvfz /dev/st0 etc/passwd

O tar permite fazer backups incrementais com facilidade, através da opção “-g“:

$ tar cvfz backup-full.tar.gz –g arquivo_controle.txt /dir1 /dir2

Neste exemplo, o tar irá criar um primeiro backup full chamado backup-full.tar.gz dos diretórios dir1 e dir2. Uma lista de controle será gerada pelo tar com o nome de arquivo_controle.txt.

Para fazer backups incrementais, que conterão somente os arquivos alterados desde o último backup (seja ele full ou incremental), utiliza-se o mesmo comando, apenas alterando o nome do arquivo tar:

$ tar cvfz backup-incremental.tar.gz –g arquivo_controle.txt /dir1 /dir2

Desta forma, o tar apenas irá colocar no backup-incremental.tar.gz os arquivos alterados desde o último backup. 

Para restaurar o backup feito desta forma, deve-se abrir o arquivamento backup-full.tar.gz:

$ tar xvzf backup-full.tar.gz 

E todos os backups incrementais feitos desde o backup full, na ordem que foram criados:

$ tar xvzf backup-incremental.tar.gz

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe