Saya ingin tahu dan melakukan sedikit membaca tetapi masih memiliki pertanyaan.
Apa yang membuat CPIO berbeda dari TAR? Saya diberitahu dalam pertanyaan lain bahwa tar adalah untuk menyatukan banyak file menjadi 1 arsip yang kemudian biasanya gzip atau bzip.
Saya juga diberitahu bahwa TAR tidak dapat mengompres dari STDOUT. Saya ingin mengarsipkan / mengompresi snapshot ZFS untuk cadangan. Saya bertanya-tanya apakah saya bisa menggabungkan CPIO dengan bzip2 untuk mendapatkan efek ini.
Atau apakah saya memiliki ide yang sepenuhnya salah? Bukankah itu tujuan CPIO?
Ini adalah jenis perintah yang saya buat setelah membaca, jadi Oracle docs tentang membackup snapshot ZFS.
# Backup snapshot to cpio and bzip2 archive
zfs send media/mypictures@20070607 | cpio -o | bzip2 -9c > ~/backups/20070607.bz2
# Restore snapshot from cpio and bzip2 archive
zfs recieve media/mypictures@20070607 | cpio -i | bunzip2 -c ~/backups/20070607.bz2
pax
: PJawaban:
Keduanya
tar
dancpio
memiliki satu tujuan: menggabungkan banyak file terpisah ke satu aliran. Mereka tidak memampatkan data. (Hari-haritar
ini lebih populer karena kesederhanaannya yang relatif - dapat mengambil file input sebagai argumen daripada harus digabungkan denganfind
seperti yangcpio
telah.)Dalam kasus Anda, Anda tidak perlu alat-alat ini; mereka tidak akan memiliki efek yang berguna, karena Anda tidak memiliki banyak file terpisah.
zfs send
sudah melakukan hal yang sama yangtar
akan dilakukan. Jadi Anda tidak memiliki file apa pun , hanya aliran tanpa nama.Untuk mengompresi snapshot, yang harus Anda lakukan adalah menyalurkan
zfs
output melalui program kompresi:(Anda dapat menggantinya
gzip
denganxz
ataubzip2
atau alat kompresi aliran lainnya, jika Anda mau.)sumber
zfs send
sudah melakukan hal yang sama yangtar
akan dilakukan.Selain dari apa yang dikatakan sebelumnya oleh grawity dan Paul :
Sejarah
Dalam "hari tua", cpio (dengan opsi
-c
digunakan) adalah yang alat untuk digunakan ketika datang untuk memindahkan file ke turunan lainnya UNIX karena itu lebih portabel dan fleksibel daripada tar . Tapi tar portabilityissues dapat dianggap sebagai diselesaikan sejak akhir 1980-an.Sayangnya pada saat itu vendor yang berbeda membuat
-c
format cpio (lihat saja halaman manual untuk GNU cpio dan opsinya-H
). Pada saat itu tar menjadi lebih portabel daripada cpio ... Butuh hampir satu dekade penuh sampai berbagai vendor UNIX menyelesaikannya. Memiliki GNU tar dan GNU cpio diinstal adalah suatu keharusan untuk semua admin yang harus berurusan dengan kaset dari berbagai sumber saat itu (bahkan saat ini saya kira).Antarmuka pengguna
tar dapat menggunakan file konfigurasi tape di mana administrator akan mengkonfigurasi drive tape yang terhubung ke sistem. Pengguna kemudian hanya akan mengatakan "Yah saya akan mengambil tape drive 1" daripada harus mengingat simpul perangkat yang tepat untuk rekaman itu (yang bisa sangat membingungkan dan juga tidak standar di berbagai platform UNIX.
Tetapi perbedaan utamanya adalah:
tar dapat mencari direktori sendiri dan mengambil daftar file atau direktori yang akan didukung dari argumen baris perintah.
arsip cpio hanya file atau direktori yang diperintahkan, tetapi tidak mencari subdirektori secara sendiri-sendiri. Juga, cpio mendapatkan daftar item yang akan diarsipkan dari stdin - inilah mengapa hampir selalu digunakan bersama dengan find .
Sebuah cpio perintah sering terlihat menakutkan untuk pemula jika dibandingkan dengan tar :
Saya pikir itulah alasan utama mengapa kebanyakan orang menggunakan tar untuk membuat file arsip: Untuk tugas-tugas sederhana seperti menggabungkan direktori lengkap, itu lebih mudah digunakan.
Juga GNU tar menawarkan opsi
-z
yang menyebabkan arsip yang akan dikompresi dengan GNU zip on the fly, membuat hal-hal bahkan lebih mudah.Di sisi lain orang dapat melakukan hal-hal bagus dengan find & cpio . Sebenarnya ini adalah pendekatan yang lebih mirip UNIX: Mengapa menyertakan pencarian pohon direktori ke cpio jika sudah ada alat yang menangani hampir semua yang dapat dipikirkan orang: find . Hal-hal yang terlintas dalam pikiran adalah hanya membuat cadangan file yang lebih baru dari tanggal tertentu, membatasi file kepada file yang berada di sistem file yang sama atau memfilter hasil-cari dengan
grep -v
untuk mengecualikan file tertentu ...Orang-orang GNU tar menghabiskan banyak pekerjaan untuk memasukkan banyak hal yang sebelumnya hanya mungkin dengan cpio . Sebenarnya kedua alat belajar dari satu sama lain - tetapi hanya cpio yang dapat membaca format tar - bukan sebaliknya.
pemrosesan tar dan output
Satu catatan terakhir untuk sesuatu yang Anda katakan:
Nah, setiap versi tar (GNU atau tidak) dapat digunakan dalam sebuah pipa. Cukup gunakan tanda minus (
-
) sebagai nama arsip:Juga GNU tar penawaran pilihan
--to-command
untuk menentukan perintah postprocessor - meskipun saya masih lebih suka pipa. Mungkin itu berguna saat menulis ke perangkat perangkat keras tertentu.sumber
cp
), pindah (mv
), pindah ( )diff
,, dll; - )BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. Anda mengatakan:only cpio may read the format of tar
. bukankah itu sebuah kontradiksi?tar dan cpio pada dasarnya memiliki fungsi yang sama, yaitu untuk membuat satu file yang berdekatan dari input beberapa file dan direktori. Awalnya ini adalah untuk memasukkan hasilnya ke kaset, tetapi hari ini umumnya digunakan untuk memasukkan ke utilitas kompresi seperti yang Anda miliki di atas. Ini karena mengompresi file besar tunggal lebih menghemat waktu dan ruang daripada mengompresi banyak file kecil. Anda harus mencatat bahwa banyak format gambar (png, jpg dll) sudah sangat terkompresi, dan sebenarnya bisa menjadi sedikit lebih besar jika dimasukkan melalui utilitas kompresi.
Baik tar atau cpio tidak melakukan kompresi sendiri. Tar telah secara efektif "memenangkan" perang "apa yang akan kita gunakan untuk membuat file agregat", tetapi cpio melihat di berbagai tempat. Saya tidak mengetahui adanya manfaat satu di atas yang lain, tar menang karena menjadi lebih umum digunakan.
tar memang dapat mengambil input pada stdin dan output ke stdout - yang kemudian akan disalurkan ke bzip2 seperti yang Anda miliki atau yang serupa. Jika dipanggil dengan opsi "z", maka secara otomatis akan memanggil gzip pada output.
sumber
-j
untuk memanggil bzip2?tar -caf myfiles.tar.xz myfiles/
akan mengompres menggunakanxz
dan initar -caf myfiles.tar.gz myfiles/
akan mengompres menggunakangzip
.Saya meminta dukungan teknis HP dalam ca. 1996 mengapa digunakan
cpio
lebihtar
.Saya diberi tahu bahwa kaset meregang dan aus. Ketika
tar
mencapai bagian yang tidak dapat dibaca dari kaset itu gagal dan mengembalikan nomor kesalahan. Ketikacpio
mencapai bagian yang tidak dapat dibaca, itu berlanjut ke blok yang dapat dibaca berikutnya, menyinkronkan ulang dan melanjutkan.Saya belum pernah melihat dokumentasi untuk mendukung ini, tetapi selalu digunakan
cpio
.sumber
Juga patut dicatat: pada (setidaknya) FreeBSD dan Mac OS X, Anda dapat memanipulasi file cpio dengan tar. Tar BSD menggunakan libarchive di bawah kap, sehingga dapat menangani cpio, pax, shar ...
Ini berarti bahwa masalah kegunaan
cpio
perintah tidak harus menghentikan Anda berinteraksi dengan file cpio.sumber
only cpio may read the format of tar
. Anda mengatakan:BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. bukankah itu sebuah kontradiksi?Sementara jawaban di sini sudah membandingkan
cpio
dantar
sangat baik, saya ingin menyoroti salah satucpio
fitur yang disebut mode pipa yang membuatnya lebih efisien untuk menyalin file selektif (yaitu, melaluifind
dan filter) sambil menjaga struktur direktori mereka. Fitur ini didokumentasikan dengan baik dan dalam premis dasarnya terlihat seperti ini:Setara dengan
tar
akan melibatkan sesuatu seperti ini:Tentu saja ada alternatif lain seperti
rsync
dancp --parents
dibahas di utas lain , tetapi tidak ada yang mendekati fleksibilitas yang ditawarkan oleh kombinasifind
dancpio
. Dengantar
keberadaan di mana-mana untuk membuat arsip, ini adalah satu-satunya alasan yang masih saya gunakancpio
.sumber