Além do que foi dito anteriormente por grawity e Paul :
História
Nos "velhos tempos", o cpio (com a opção -c
usada) era a ferramenta a ser usada quando se tratava de mover arquivos para outros derivados do UNIX, pois era mais portátil e flexível que o tar . Mas os problemas da portabilidade do alcatrão podem ser considerados resolvidos desde o final dos anos 80.
Infelizmente, foi nessa época que diferentes fornecedores manipularam o -c
formato do cpio (basta olhar na página de manual do GNU cpio e a opção -H
). Naquele momento, o tar se tornou mais portátil que o cpio ... Levou quase uma década inteira até que os diferentes fornecedores do UNIX resolvessem isso. Ter o GNU tar e o GNU cpio instalados era uma obrigação para todos os administradores que tinham que lidar com fitas de diferentes fontes na época (até hoje em dia eu presumo).
Interface de usuário
tar pode usar um arquivo de configuração de fita em que o administrador configuraria as unidades de fita conectadas ao sistema. O usuário então dizia apenas "Bem, eu levarei a unidade de fita 1" em vez de ter que lembrar o nó exato do dispositivo para a fita (o que pode ser muito confuso e também não é padronizado em diferentes plataformas UNIX.
Mas a principal diferença é:
O tar é capaz de pesquisar diretórios por conta própria e usa a lista de arquivos ou diretórios para backup dos argumentos da linha de comando.
O cpio arquiva apenas os arquivos ou diretórios informados, mas não pesquisa subdiretórios por conta própria. Além disso, o cpio obtém a lista de itens a serem arquivados do stdin - é por isso que quase sempre é usado em combinação com o find .
Um comando cpio geralmente parece assustador para o iniciante, se comparado ao tar :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
Eu acho que essa é a principal razão pela qual a maioria das pessoas usa o tar para criar arquivos compactados: para tarefas simples, como agrupar um diretório completo, é apenas mais fácil de usar.
Além disso, o GNU tar oferece a opção -z
que faz com que o arquivo seja compactado com o GNU zip em tempo real, tornando as coisas ainda mais fáceis.
Por outro lado, pode-se fazer coisas bacanas com o find & cpio . Na verdade, é uma abordagem mais semelhante ao UNIX: por que incluir a pesquisa em árvore de diretórios no cpio se já existe uma ferramenta que cuida de quase tudo o que se pode pensar: find . O que vem à mente é apenas fazer backup de arquivos mais recentes que uma determinada data, restringindo os arquivos àqueles que residem no mesmo sistema de arquivos ou filtrando a saída de localização grep -v
para excluir determinados arquivos ...
O pessoal do GNU tar gastou muito trabalho para incluir muitas das coisas que antes eram possíveis apenas com o cpio . De fato, as duas ferramentas aprendidas umas com as outras - mas apenas o cpio pode ler o formato do tar - e não o contrário.
processamento de alcatrão e saída
Uma última nota para algo que você disse:
Também me disseram que o TAR não pode comprimir do STDOUT. Desejo arquivar / compactar snapshots do ZFS para backups. Eu queria saber se eu poderia combinar o CPIO com o bzip2 para obter esse efeito.
Bem, toda versão do tar (GNU ou não) pode ser usada em um pipe. Basta usar um sinal de menos ( -
) como nome do arquivo:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
O GNU tar também oferece a opção --to-command
de especificar um comando pós-processador - embora eu ainda prefira o pipe. Talvez seja útil ao gravar em determinados dispositivos de hardware.
pax
: P