Acabei de aprender que o cpio tem três modos: copy-out, copy-in e pass-through.
Eu queria saber quais são as vantagens e desvantagens do cpio nos modos copy-out e copy-in em relação ao tar. Quando é melhor usar cpio e quando usar tar?
Pergunta semelhante para cpio no modo pass-through versus cp.
Obrigado e cumprimentos!
Responder1
Esta é uma visão geral extremamente genérica:
O CPIO faz um trabalho melhor de duplicação de um sistema de arquivos, incluindo a realização de backups. Ele preserva coisas como hardlinks, fifos e outros recursos de arquivo não padrão. A maioria das implementações do CPIO faz tudo o que o TAR faz, incluindo leitura e gravação de arquivos .tar. O CPIO geralmente leva uma lista de arquivos da entrada padrão para o arquivo; isso torna muito fácil canalizar uma lista de outra coisa (como find
).
A passagem CPIO é muito útil se você tiver uma lista muito longa de arquivos que deseja copiar do diretório A para o diretório B. (Por exemplo, você pode usar find
para localizar todos os arquivos que foram alterados nos últimos 2 anos em seu sistema)
O TAR faz um trabalho melhor simplesmente despejando todos os seus arquivos padrão de/para uma fita (ou arquivo compactado). É um pouco mais simples de usar (para as tarefas mais comuns). Ele atende facilmente às demandas simples de backup da maioria das pessoas; e grande parte de sua popularidade vem desse fato.
E agora as letras miúdas. Existem várias versões e implementações diferentes de CPIO e TAR. Cada um possui recursos diferentes e alguns possuem opções de linha de comando diferentes. Há coisas que cada um pode fazer onde o outro não pode; se você estiver limitado por um, tente o outro. Todo mundo tem um favorito e 99% das vezes qualquer um deles realizará a tarefa.
Responder2
No redhat AE 3, descobri que o cpio tinha uma limitação de tamanho de 2 GBytes em um fluxo de saída. No entanto, o tar não tinha essa limitação.
Outros sistemas podem ter limitações diferentes.
Responder3
Entendo pelos comentários e outros antecedentes que cpio
são menos onipresentes agora e inconsistentes entre as versões. Mas cpio
tem uma vantagem que recentemente achei inestimável ao lidar com um grande número de arquivos tar corrompidos. Ele não para no primeiro erro em um arquivo tar, mas tenta ignorar dados incorretos e extrair o máximo possível. Por exemplo,
tar xf ./sample.corrupt.tar
irá imprimir
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
após o primeiro erro encontrado, enquanto
cpio -F ./sample.corrupt.tar -i -v
imprimirá os arquivos extraídos e para cada erro imprimirá:
cpio: invalid header: checksum error
cpio: warning: skipped 6 bytes of junk
cpio: invalid header: checksum error
cpio: warning: skipped 2 bytes of junk
etc...
O formato tar espera que cada cabeçalho do arquivo esteja alinhado em um limite 512, mas se a corrupção desalinhar os cabeçalhos, cpio
faça o melhor esforço para extrair o máximo possível
Responder4
Não vejo razão para usar o cpio por qualquer motivo que não seja copiar arquivos RPM abertos, viadisrpmourpm2cpio, mas pode haver casos em que cpio é preferível a tar.
História e popularidade
Ambosalcatrãoecpiosão formatos de arquivo concorrentes que foram introduzidos emVersão 7 Unixem 1979 e depois incluído emPOSIX.1-1988, embora apenas tar tenha permanecido no próximo padrão, POSIX.1-20011.
O formato de arquivo do Cpio mudou diversas vezes e não permaneceu totalmente compatível entre as versões. Por exemplo, agora existe uma representação codificada em ASCII de dados de informações de arquivos binários.
O Tar é mais conhecido universalmente, tornou-se mais versátil ao longo dos anos e tem maior probabilidade de ser suportado em um determinado sistema. O Cpio ainda é usado em algumas áreas, como oPacote Red Hatformato (RPM), emboraRPM v5(que é reconhecidamente obscuro) usaxarem vez de cpio.
Ambos vivem na maioria dos sistemas do tipo Unix, embora o tar seja mais comum. Aqui estãoEstatísticas de instalação do Debian:
#rank name inst vote old recent no-files (maintainer)
13 tar 189206 172133 3707 13298 68 (Bdale Garbee)
61 cpio 189028 71664 96346 20920 98 (Anibal Monsalve Salazar)
Modos
Copiar: Isto é para criação de arquivo, semelhante atar -pc
Cópia: Isto é para extração de arquivo, semelhante atar -px
Atravessar: Isso é basicamente ambos os itens acima, semelhantes, tar -pc … |tar -px
mas em um único comando (e, portanto, microscopicamente mais rápido). É semelhante ao cp -pdr
, embora cpio e (especialmente) tar tenham mais capacidade de personalização. Considere também rsync -a
o , que as pessoas muitas vezes esquecem, já que é mais comumente usado em uma conexão de rede.
Não comparei o desempenho deles, mas espero que sejam bastante semelhantes em CPU, memória e tamanho de arquivo (após compactação).