Oltre a quanto detto in precedenza da Grawity e Paul :
Storia
Ai vecchi tempi, cpio (con l'opzione -c
utilizzata) era lo strumento da utilizzare quando si trattava di spostare i file in altri derivati UNIX poiché era più portabile e flessibile di tar . Ma i problemi di portabilità del catrame possono essere considerati risolti dalla fine degli anni '80.
Purtroppo è stato in quel periodo che diversi produttori hanno modificato il -c
formato di cpio (basta guardare la pagina di manuale di GNU cpio e l'opzione -H
). A quel tempo il catrame è diventato più portatile di cpio ... Ci sono voluti quasi un intero decennio prima che i diversi venditori UNIX lo risolvessero. Avere GNU tar e GNU cpio installati era un must per tutti gli amministratori che all'epoca avevano a che fare con nastri di diverse fonti (anche oggi presumo).
Interfaccia utente
tar può usare un file di configurazione del nastro in cui l'amministratore configurerebbe le unità nastro connesse al sistema. L'utente quindi dovrebbe semplicemente dire "Bene, prendo l'unità a nastro 1" invece di dover ricordare il nodo esatto del dispositivo per il nastro (che potrebbe essere molto confuso e non essere standardizzato su diverse piattaforme UNIX.
Ma la differenza principale è:
tar è in grado di cercare le directory da solo e accetta l'elenco di file o directory di cui eseguire il backup dagli argomenti della riga di comando.
cpio archivia solo i file o le directory a cui viene detto, ma non cerca le sottodirectory ricorsivamente da sola. Inoltre cpio ottiene l'elenco degli elementi da archiviare da stdin - questo è il motivo per cui è quasi sempre usato in combinazione con find .
Un comando cpio sembra spesso spaventoso per il principiante se confrontato con tar :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
Penso che sia il motivo principale per cui la maggior parte delle persone usa tar per creare file di archivio: per compiti semplici come raggruppare una directory completa è solo più facile da usare.
Anche GNU tar offre l'opzione -z
che consente di comprimere l'archivio con zip GNU al volo, rendendo le cose ancora più facili.
D'altro canto, con find & cpio si possono fare cose eleganti . In realtà è un approccio più simile a UNIX: perché includere la ricerca dell'albero delle directory in cpio se c'è già uno strumento che si prende cura di quasi tutto ciò che si può pensare: find . Le cose che vengono in mente sono solo il backup dei file più recenti di una certa data, limitando i file a quelli che risiedono nello stesso filesystem o filtrando l'output di ricerca con grep -v
per escludere determinati file ...
Le persone di GNU tar hanno speso molto lavoro per includere molte di quelle cose che prima erano possibili solo con cpio . In effetti entrambi gli strumenti appresi l'uno dall'altro - ma solo cpio può leggere il formato di tar - non viceversa.
elaborazione tar e output
Un'ultima nota a qualcosa che hai detto:
Inoltre mi è stato detto che TAR non può comprimere da STDOUT. Voglio archiviare / comprimere le snapshot ZFS per i backup. Mi chiedevo se avrei potuto combinare CPIO con bzip2 per ottenere questo effetto.
Bene, ogni versione di tar (GNU o meno) può essere usata in una pipe. Basta usare un segno meno ( -
) come nome dell'archivio:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
Anche GNU tar offre la possibilità --to-command
di specificare un comando postprocessor, anche se preferirei comunque la pipe. Forse è utile quando si scrive su determinati dispositivi hardware.
pax
: P