o nome tar
é, pela maioria das contas, abreviatura de arquivo de fita. As “fitas”em questão seriam todas as unidades de armazenamento magnético que eram populares em todo o caminho de volta na década de 1950.
que sugere que a ferramenta tar
pode ser um pouco velho e passado de seu prime. Mas a verdade é que, ao longo de todos os anos e através de todas as mudanças sísmicas no mundo das TI, tar
não perdeu nenhuma de sua potência e valor.
neste artigo, baseado no conteúdo do meu livro Linux em acção, vou mostrar-lhe o básico da criação, compressão e restauração do arquivo tar. Vamos começar pelo princípio.
Este exemplo irá pegar todos os arquivos e diretórios dentro e abaixo do Diretório de trabalho atual e construir um arquivo que eu habilmente nomeou archivename.tar
.
aqui eu uso três argumentos após o comando tar:
-
c
diz tar para criar um novo arquivo, -
v
define a saída do ecrã para o modo verboso, então eu vou obter atualizações, e -
f
aponta para o nome do arquivo que eu gostaria de dar ao arquivo.
o *
é o que diz atar
para incluir todos os ficheiros e pastas locais recursivamente.
$ tar cvf archivename.tar *file1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
o comando tar nunca irá mover ou remover qualquer uma das pastas originais e ficheiros que você o alimentar – ele só faz cópias arquivadas.
Você também deve notar que usando um ponto (.) em vez de um asterisco (*) no comando anterior incluiria até arquivos escondidos (cujos nomes de arquivos começam com um ponto) no arquivo.
Se você está seguindo em seu próprio computador (como você definitivamente deve), então você vai ver um novo arquivo chamado archivename.alcatrao. O .a extensão do nome de arquivo tar não é necessária, mas é sempre uma boa idéia para comunicar claramente o propósito de um arquivo de tantas maneiras quanto possível.a extracção do seu arquivo para restaurar os ficheiros é fácil: Just use xvf
instead ofcvf
. Que, no exemplo, irá salvar novas cópias dos arquivos e diretórios originais no local atual.
$ tar xvf archivename.tarfile1file2file3directory1directory1/morestuffdirectory1/morestuff/file100directory1/morestuff/file101
é claro, você também pode ter tar enviar os arquivos extraídos para algum outro lugar, usando o -C
argumento, seguido do local de destino:
$ tar xvf archivename.tar -C /home/mydata/oldfiles/
Você não deseja incluir todos os arquivos dentro de uma árvore de diretórios em seu arquivo.
suponha que você produziu alguns vídeos, mas eles estão atualmente mantidos em diretórios, juntamente com todos os tipos de arquivos gráficos, áudio e texto (contendo suas notas). Os únicos arquivos que você precisa fazer backup são os clipes de vídeo finais usando a extensão.mp4 filename.
Aqui está como fazer isso:
$ tar cvf archivename.tar *.mp4
isso é ótimo. Mas esses arquivos de vídeo são enormes. Não seria bom tornar esse arquivo um pouco mais pequeno usando compressão? Não digas mais nada! Basta executar o comando anterior com o argumento z
(zip). Isso vai dizer ao programa gzip para comprimir o arquivo.
Se quiser seguir A Convenção, também pode adicionar uma extensão.gz
para além da extensão .tar
que já existe. Lembra-te: clareza.
Aqui está como isso seria jogar fora:
$ tar czvf archivename.tar.gz *.mp4
Se você tentar fazer isso em seu próprio país .mp4 arquivos e, em seguida, executar ls -l no directório que contém os novos arquivos, você pode perceber que o .tar.gz
arquivo não é muito menor do que o .tar
arquivo, talvez 10% ou assim. O que é isso?
Well, the .mp4
file format is itself compressed, so there’s a lot less room for gzip to do its stuff.
Como o tar está completamente ciente do seu ambiente Linux, pode usá-lo para seleccionar ficheiros e pastas que vivem fora da sua pasta de trabalho actual. Este exemplo adiciona todos os ficheiros .mp4
no/home/myuser/Videos/
directório:
$ tar czvf archivename.tar.gz /home/myuser/Videos/*.mp4
Devido a ficheiros de arquivo, podem ficar muito grandes, algumas vezes pode fazer sentido para dividir em vários arquivos menores, transferi-los para sua nova casa, e, em seguida, recriar o arquivo original na outra extremidade. A ferramenta split é feita para este propósito.
neste exemplo, -b
diz ao Linux para dividir o arquivename.alcatrao.ficheiro gz em peças do tamanho de 1 GB. A operação então nomeia cada uma das partes-arquivename.alcatrao.gz.partaa, arquivename.alcatrao.gz.partab, arquivename.alcatrao.gz.partac, e assim por diante:
$ split -b 1G archivename.tar.gz "archivename.tar.gz.part"
do outro lado, você recriou o arquivo lendo cada uma das partes em sequência (cat archivename.alcatrao.gz.part*), em seguida, redirecionar a saída para um novo arquivo chamado arquivename.alcatrao.gz:
$ cat archivename.tar.gz.part* > archivename.tar.gz
streaming file system archives
Aqui é onde as coisas boas começam. Eu vou mostrar a vocês como criar uma imagem de arquivo de uma instalação Linux funcional e transmiti — la para um local de armazenamento remoto-tudo dentro de um único comando. Aqui está o comando.:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
ao invés de tentar explicar tudo isso imediatamente, vou usar exemplos menores para explorá-lo uma peça de cada vez.
let’s create an archive of the contents of a directory called importantstuff that’s filled with, well, really important stuff:
$ tar czvf - importantstuff/ | ssh [email protected] "cat > /home/username/myfiles.tar.gz"importantstuff/filename1importantstuff/[email protected]'s password:
deixe-me explicar esse exemplo. Em vez de introduzir o nome do arquivo logo a seguir aos argumentos do comando (como fez até agora), usei um traço (czvf -).
O traço dá os dados à saída padrão. Ele permite que você empurre os detalhes do arquivo de volta para o fim do comando e diz ao tar para esperar o conteúdo de origem para o arquivo em vez disso.
i então piped ( | ) the unnamed, compressed archive to an ssh login on a remote server where I was asked for my password.
o comando incluído entre aspas, então executado cat contra o fluxo de dados do arquivo, que escreveu o conteúdo do fluxo para um arquivo chamado myfiles.alcatrao.gz na minha pasta pessoal na máquina remota.
uma vantagem de gerar arquivos desta forma é que você evita a sobrecarga de um passo médio. Não há necessidade de salvar temporariamente uma cópia do arquivo na máquina local. Imagine fazer backup de uma instalação que preenche 110 GB de seus 128 GB de espaço disponível. Para onde iria O arquivo?
isso era apenas um diretório de arquivos. Suponha que você precisa fazer backup de um sistema operacional Linux ativo para uma unidade USB para que você possa movê-lo para uma máquina separada e deixá-lo na unidade principal dessa máquina.
assumindo que já existe uma nova instalação da mesma versão Linux na segunda máquina, a próxima operação copy/paste irá gerar uma réplica exata da primeira.
Nota: Isto não irá funcionar numa unidade de destino que não tenha já instalado um sistema de ficheiros Linux. Para lidar com essa situação, você precisará usar
dd
o próximo exemplo cria um arquivo comprimido na unidade USB conhecida como/dev/sdc1
.
o argumento--one-file-system
exclui todos os dados de qualquer sistema de ficheiros para além do actual. Isto significa que pseudo partições como e /dev/
não serão adicionadas ao arquivo. Se existem outras partições que você deseja incluir (como você fará para /usr/
e /var/
neste exemplo), então elas devem ser explicitamente adicionadas.
Finalmente, você pode excluir os dados do atual sistema de arquivos usando o --exclude
argumento:
# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \ --one-file-system \ / /usr /var \ --exclude=/home/andy/
Agora, vamos voltar ao serviço completo de comando de exemplo. Usando o que você já aprendeu, arquivar todas as diretorias importantes de um sistema de arquivos e copiar o arquivo para uma unidade USB. Deve fazer sentido para ti agora.:
# tar czvf - --one-file-system / /usr /var \ --exclude=/home/andy/ | ssh [email protected] \ "cat > /home/username/workstation-backup-Apr-10.tar.gz"
há muito mais bondade administrativa na forma de livros, cursos e artigos disponíveis na minha bootstrap-it.com.