Como você usaria o comando cpio?

7

Enquanto estudava para o exame lpic, encontrei o comando cpio .

A descrição do cpio declara:

Cpio was originally designed to store backup file archives on a tape device in a sequential, contiguous manner. Cpio does not compress any content, but resulting archives are often compressed using gzip or other external compressors.

Ao observar exemplos de como usar o cpio, não consigo encontrar um único cenário em que o cpio seja melhor do que as ferramentas mais comuns, como tar .

O que é um exemplo em que usar cpio seria usado (além de backups em fita) ou não é mais relevante nos sistemas atuais?

    
por spuder 31.01.2014 / 06:47

6 respostas

5

Ainda é relevante para descompactar os RPMs. Existe um utilitário rpm2cpio que converte um pacote RPM em cpio archive. Até onde sei, não há nada para converter um RPM em tar archive. Aqui está um exemplo de uso:

rpm2cpio myrpmfile.rpm | cpio -idmv
    
por 31.01.2014 / 08:13
2

Se o seu sistema não tiver um tar GNU com sua opção -T e --null, cpio é a maneira de obter um subconjunto específico de arquivos em um arquivo tar:

find . -name CVS -prune -o -print0 | cpio -o -Hustar > all.tar

Eu também acho o -V / --dot muito mais informativo sobre o progresso do que o modo detalhado completo (em tar ou cpio ) nos casos em que você sabe quantos arquivos terá que empacotar (supondo que você sabe quanto tempo o seu terminal é e no meu caso são bons com a tabela de multiplicação de 80).

Sempre há uso para várias soluções para o mesmo problema. Como cpio pode ler tar archives, você pode acabar com o tar e usar cpio em todos os lugares.

    
por 31.01.2014 / 08:57
2

Antigamente, havia uma vantagem em usar cpio , mas esse recurso especial não é implementado em gcpio. Estou falando sobre o fato de que a implementação original do AT & T cpio implementou a extração de arquivos de maneira específica semelhante à que o install faz e essa é a razão pela qual a AT & T preferiu usar o cpio para instalar binários ao vivo sistema.

Se você chamar star com o nome cpio , obterá esse recurso e, se você adicionar a opção -install às opções de star ao extrair arquivos, obterá esse comportamento.

BTW: o formato de arquivo CPIO não é mais visto como um formato útil pelo POSIX, pois não é extensível. As quatro "variantes" do formato CPIO são completamente incompatíveis entre si e toda vez que uma extensão é necessária, uma variante de formato CPIO completamente nova / incompatível é criada.

    
por 10.09.2015 / 16:16
1

O tar usa a definição de arquivo ustar , que limita a duração do nome do caminho para 100 bytes. Hierarquias profundamente aninhadas - nada incomum nos dias de hoje - não podem ser arquivadas com tar. cpio não tem esse handicap.

Eu prefiro pax (1). Como o cpio, o pax faz melhor uso da entrada e saída padrão do que o tar. pax pode usar o formato cpio, o que significa que, se você esbarrar no limite do nome do caminho, poderá continuar usando o mesmo utilitário apenas adicionando -x cpio ao comando. Você usa essa opção apenas para criar arquivos; na leitura, a pax detecta o formato automaticamente.

    
por 01.02.2014 / 18:44
1

I can't find a single scenario where cpio would better than more common tools like tar.

Aqui está um, que eu aprendi antes que rsync e cp -r existissem:

$ find /foo -print | cpio -pud /bar

Isso copia todos os arquivos em /foo para /bar , preservando todas as permissões de arquivos e estrutura de diretórios.

Para fazer isso com tar , você precisa criar um arquivo morto temporário e descompactá-lo novamente, porque tar não tem esse modo de filtro pass-thru.

    
por 07.02.2014 / 08:35
0

Eu tenho usado o cpio por muitos anos e ainda o faço. Isso me salvou muitas vezes na recuperação sem extenso conhecimento de Linux / Unix.

Exemplo eu tenho um servidor Ubuntu 17.04LTS instalado e regularmente atualizo meus arquivos para backup usando o cpio aprox. todos os meses usando uma unidade USB externa de 500Gb.

Eu montei a unidade de backup como tal:

mount /dev/sdb1 /BACKUP 

Verifique se você criou uma pasta chamada BACKUP no diretório raiz como um ponto de montagem e use o seguinte comando:

mount /dev/sdb1 /BACKUP    

Faça um df para garantir que esteja montado. Então cd /BACKUP e crie uma pasta chamada Ubuntu_Backup_17.04LTS.

Então cd / , verifique se você está / antes de iniciar o processo cpio com pwd, e então execute o seguinte comando:

find . -mount -print | cpio -pdumv /BACKUP/Ubuntu_Backup_17.04LTS

Isso copiará todos os arquivos e pastas do diretório ROOT, EXCLUINDO o ponto de montagem BACKUP.

Depois de terminar, se você for para /BACKUP/Ubuntu_Backup_17.04LTS e listar os arquivos e pastas, verá que é exatamente igual à listagem da sua unidade ROOT.

A restauração é exatamente a mesma, pode ser uma restauração completa de uma pasta como / etc.

Exemplo:

cd /BACKUP/Ubuntu_Backup_17.04LTS

e execute o inverso;

find . -mount -print | cpio -pdumv /  

ou para uma pasta / etc) o comando seria

find /etc -mount -print | cpio -pdumv /  

Isso copiará a pasta / etc do Backup para / para recuperação.

Isso copiará todos os arquivos e pastas de volta para / partition e, em seguida, reinicializará. É muito útil quando uma atualização dá errado.

    
por 03.12.2017 / 23:39

Tags