นอกเหนือจากที่กล่าวไว้ก่อนหน้านี้โดยgrawityและPaul :
ประวัติศาสตร์
ใน "วันเก่า" cpio (มีตัวเลือก-c
ใช้) เป็นเครื่องมือในการใช้งานเมื่อมันมาถึงการย้ายไฟล์ไปยัง derivates UNIX อื่น ๆ เพราะมันเป็นแบบพกพามากขึ้นและมีความยืดหยุ่นกว่าน้ำมันดิน แต่ค่าความสามารถในการพกพาของtarนั้นอาจได้รับการพิจารณาว่าแก้ไขได้ตั้งแต่ปลายทศวรรษ 1980
น่าเสียดายที่ประมาณเวลานั้นที่ผู้ค้าต่าง ๆ จัดการ-c
รูปแบบของcpio (ดูที่หน้าคู่มือสำหรับGNU cpioและตัวเลือก-H
) ในเวลานั้นtarกลายเป็นแบบพกพามากกว่าcpio ... มันใช้เวลาเกือบสิบปีกว่าที่ผู้ขาย UNIX รายอื่นจะคัดแยกออก การติดตั้งGNU tarและGNU cpioนั้นเป็นสิ่งที่จำเป็นสำหรับผู้ดูแลระบบทุกคนที่ต้องจัดการกับเทปจากแหล่งต่าง ๆ ตั้งแต่นั้นมา (แม้กระทั่งทุกวันนี้ฉันก็เข้าใจ)
หน้าจอผู้ใช้
tarอาจใช้ไฟล์การกำหนดค่าเทปซึ่งผู้ดูแลระบบจะกำหนดค่าเทปไดรฟ์ที่เชื่อมต่อกับระบบ จากนั้นผู้ใช้จะพูดว่า "เอาล่ะฉันจะเอาเทปไดรฟ์ 1" แทนที่จะจำโหนดอุปกรณ์ที่แน่นอนสำหรับเทป (ซึ่งอาจทำให้สับสนมากและจะไม่โดดเด่นในแพลตฟอร์ม UNIX ที่แตกต่างกัน)
แต่ความแตกต่างที่สำคัญคือ:
tarสามารถค้นหาไดเรกทอรีด้วยตัวเองและนำรายการไฟล์หรือไดเรกทอรีที่จะสำรองจากอาร์กิวเมนต์บรรทัดคำสั่ง
cpioเก็บถาวรเฉพาะไฟล์หรือไดเรกทอรีที่บอก แต่ไม่ค้นหาไดเรกทอรีย่อยซ้ำด้วยตัวมันเอง นอกจากนี้ยังcpioได้รับรายชื่อของรายการที่จะถูกเก็บไว้จากstdin - นี่คือเหตุผลที่มันมักจะใช้ร่วมกับการค้นหา
cpioคำสั่งมักจะมีลักษณะที่น่ากลัวที่จะเริ่มต้นถ้าเทียบกับtar :
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
ฉันคิดว่านั่นเป็นเหตุผลหลักที่คนส่วนใหญ่ใช้tarเพื่อสร้างไฟล์เก็บถาวร: สำหรับงานง่าย ๆ เช่นการรวมไดเรกทอรีที่สมบูรณ์มันใช้งานง่ายกว่า
นอกจากนี้GNU tarยังมีตัวเลือก-z
ที่ทำให้การบีบอัดไฟล์บีบอัดด้วยGNU zipทำได้รวดเร็วยิ่งขึ้น
ในทางกลับกันคนหนึ่งอาจทำสิ่งที่ดีที่มีการค้นหาและcpio ในความเป็นจริงมันเป็นมากขึ้น UNIX เหมือนวิธีการ: ทำไมรวมการค้นหาต้นไม้ไดเรกทอรีเข้าcpioถ้ามีแล้วเครื่องมือที่จะดูแลของเกือบทุกหนึ่งสามารถคิด: การค้นหา สิ่งที่ควรคำนึงถึงคือการแบ็คอัปไฟล์ที่ใหม่กว่าวันที่กำหนด จำกัด ไฟล์ไว้เฉพาะผู้ที่อยู่ในระบบไฟล์เดียวกันหรือกรองการค้นหาเอาท์พุทด้วยgrep -v
เพื่อแยกไฟล์บางไฟล์ ...
ผู้คนในGNU tarใช้เวลาทำงานหลายอย่างเพื่อรวมสิ่งต่าง ๆ มากมายที่ก่อนหน้านี้เป็นไปได้กับcpioเท่านั้น ในความเป็นจริงเครื่องมือทั้งสองเรียนรู้จากกันและกัน - แต่มีเพียงcpioเท่านั้นที่สามารถอ่านรูปแบบtarได้ - ไม่ใช่วิธีอื่น
tarและการประมวลผลเอาท์พุท
หมายเหตุสุดท้ายหนึ่งสำหรับสิ่งที่คุณพูด:
นอกจากนี้ฉันก็บอกว่า TAR ไม่สามารถบีบอัดจาก STDOUT ฉันต้องการเก็บถาวร / บีบอัดสแนปชอตของ ZFS สำหรับการสำรองข้อมูล ฉันสงสัยว่าฉันสามารถรวม CPIO กับ bzip2 เพื่อรับผลกระทบนี้ได้หรือไม่
ทว่าtarทุกรุ่น(GNU หรือไม่) อาจใช้ในไพพ์ เพียงใช้เครื่องหมายลบ ( -
) เป็นชื่อไฟล์เก็บถาวร:
$ tar cvf - myfiles | bzip > myfiles.tar.bz
นอกจากนี้GNU tarยังมีตัวเลือก--to-command
ในการระบุคำสั่ง postprocessor - แม้ว่าฉันจะยังคงต้องการไพพ์ อาจใช้เมื่อเขียนถึงอุปกรณ์ฮาร์ดแวร์บางอย่าง
pax
: P