ส่วนที่ 1: ประสิทธิภาพ
นี่เป็นการเปรียบเทียบเวิร์กโฟลว์สองแบบแยกกันและสิ่งที่พวกเขาทำ
คุณมีไฟล์บนดิสก์blah.tar.gz
ซึ่งก็คือข้อมูลที่ถูกบีบอัด gzip ขนาด 1 GB ซึ่งเมื่อไม่มีการบีบอัดจะมีขนาด 2 GB (ดังนั้นอัตราการบีบอัด 50%)
วิธีที่คุณจะสร้างสิ่งนี้หากคุณต้องทำการเก็บถาวรและบีบอัดแยกต่างหากจะเป็น:
tar cf blah.tar files ...
ซึ่งจะส่งผลblah.tar
ซึ่งเป็นการรวมตัวของfiles ...
ในรูปแบบที่ไม่มีการบีบอัดเท่านั้น
จากนั้นคุณจะทำ
gzip blah.tar
นี้จะอ่านเนื้อหาของblah.tar
จากดิสก์บีบอัดพวกเขาผ่านวิธีการบีบอัด gzip เขียนเนื้อหาไปblah.tar.gz
แล้วยกเลิกการเชื่อมโยง (ลบ) blah.tar
ไฟล์
ตอนนี้มาขยายขนาด!
วิธีที่ 1
คุณมีblah.tar.gz
ไม่ทางใดก็ทางหนึ่ง
คุณตัดสินใจที่จะเรียกใช้:
gunzip blah.tar.gz
นี่จะ
- อ่าน 1 GB
blah.tar.gz
บีบอัดเนื้อหาข้อมูล
- ประมวลผลข้อมูลที่บีบอัดผ่านตัว
gzip
ขยายการบีบอัดในหน่วยความจำ
- เมื่อบัฟเฟอร์ของหน่วยความจำเต็มไปด้วยค่า "บล็อก" ของข้อมูลให้เขียนข้อมูลที่ไม่มีการบีบอัดลงในไฟล์
blah.tar
บนดิสก์และทำซ้ำจนกว่าข้อมูลที่บีบอัดทั้งหมดจะถูกอ่าน
- ยกเลิกการเชื่อมโยง (ลบ)
blah.tar.gz
ไฟล์
ตอนนี้คุณมีblah.tar
บนดิสก์ซึ่งไม่มีการบีบอัด แต่มีไฟล์หนึ่งไฟล์หรือมากกว่านั้นพร้อมกับโครงสร้างข้อมูลที่ต่ำมาก ขนาดไฟล์น่าจะเป็นสองไบต์ที่ใหญ่กว่าผลรวมของข้อมูลไฟล์ทั้งหมดที่ควรจะเป็น
คุณวิ่ง:
tar xvf blah.tar
นี่จะ
- อ่านเนื้อหาข้อมูลที่ไม่มีการบีบอัดขนาด 2 GB
blah.tar
และtar
โครงสร้างข้อมูลของรูปแบบไฟล์รวมถึงข้อมูลเกี่ยวกับการอนุญาตไฟล์ชื่อไฟล์ไดเรกทอรี ฯลฯ
- เขียนข้อมูล 2 GB พร้อมข้อมูลเมตาลงในดิสก์ สิ่งนี้เกี่ยวข้องกับ: การแปลโครงสร้างข้อมูล / ข้อมูลเมตาดาต้าเป็นการสร้างไฟล์และไดเรกทอรีใหม่บนดิสก์ตามความเหมาะสมหรือการเขียนไฟล์และไดเรกทอรีที่มีอยู่ใหม่ด้วยเนื้อหาข้อมูลใหม่
ข้อมูลทั้งหมดที่เราอ่านจากดิสก์ในกระบวนการนี้คือ 1 GB (สำหรับ gunzip) + 2 GB (สำหรับ tar) = 3 GB
ข้อมูลทั้งหมดที่เราWROTEไปยังดิสก์ในกระบวนการนี้คือ 2 GB (สำหรับ gunzip) + 2 GB (สำหรับ tar) + ไม่กี่ไบต์สำหรับข้อมูลเมตา = ประมาณ 4 GB
วิธีที่ 2
คุณมีblah.tar.gz
ไม่ทางใดก็ทางหนึ่ง
คุณตัดสินใจที่จะเรียกใช้:
tar xvzf blah.tar.gz
นี่จะ
- อ่านเนื้อหาข้อมูลที่ถูกบีบอัด 1 GB ของ
blah.tar.gz
บล็อกในแต่ละครั้งลงในหน่วยความจำ
- ประมวลผลข้อมูลที่บีบอัดผ่านตัว
gzip
ขยายการบีบอัดในหน่วยความจำ
- ในขณะที่บัฟเฟอร์หน่วยความจำเต็มมันจะไปป์ข้อมูลนั้นในหน่วยความจำจนถึง
tar
ตัวแยกวิเคราะห์รูปแบบไฟล์ซึ่งจะอ่านข้อมูลเกี่ยวกับข้อมูลเมตา ฯลฯ และข้อมูลไฟล์ที่ไม่บีบอัด
- เมื่อบัฟเฟอร์หน่วยความจำเต็มใน
tar
ตัวแยกวิเคราะห์ไฟล์มันจะเขียนข้อมูลที่ไม่มีการบีบอัดลงในดิสก์โดยการสร้างไฟล์และไดเรกทอรีและเติมข้อมูลด้วยเนื้อหาที่ไม่บีบอัด
ข้อมูลทั้งหมดที่เราอ่านจากดิสก์ในกระบวนการนี้คือ 1 GB ของข้อมูลที่ถูกบีบอัดระยะเวลา
ข้อมูลทั้งหมดที่เราWROTEไปยังดิสก์ในกระบวนการนี้คือ 2 GB ของข้อมูลที่ไม่มีการบีบอัด + สองสามไบต์สำหรับเมตาดาต้า = ประมาณ 2 GB
หากคุณสังเกตเห็นจำนวนของดิสก์ I / O ในวิธีที่ 2จะเหมือนกับดิสก์ I / O ที่ดำเนินการโดยพูดโปรแกรมZip
หรือ7-Zipปรับความแตกต่างของอัตราส่วนการบีบอัด
และถ้าอัตราส่วนการบีบอัดเป็นปัญหาของคุณให้ใช้Xz
คอมเพรสเซอร์เพื่อแค็tar
ปซูลและคุณมีไฟล์เก็บถาวร TAR ของLZMA2ซึ่งมีประสิทธิภาพเท่ากับอัลกอริธึมที่ทันสมัยที่สุดที่มีใน 7-Zip :-)
ส่วนที่ 2: คุณสมบัติ
tar
เก็บสิทธิ์ของ Unix ไว้ในเมตาดาต้าของไฟล์และเป็นที่รู้จักกันดีและผ่านการทดสอบสำหรับการบรรจุไดเร็กทอรีที่มีการอนุญาตที่แตกต่างกันทุกชนิดลิงก์สัญลักษณ์ ฯลฯ ประสบความสำเร็จมีมากกว่าสองสามอินสแตนซ์ เป็นไฟล์เดียวหรือสตรีม แต่ไม่จำเป็นต้องบีบอัดมัน (แม้ว่าการบีบอัดจะมีประโยชน์และมักใช้)
ส่วนที่ 3: ความเข้ากันได้
เครื่องมือจำนวนมากมีการแจกจ่ายในแหล่งที่มาหรือรูปแบบไบนารีเป็น. tar.gz หรือ. tar.bz2 เนื่องจากเป็นรูปแบบไฟล์ "ตัวหารร่วมที่ต่ำที่สุด": เหมือนกับผู้ใช้ Windows ส่วนใหญ่ที่มีการเข้าถึง. zip หรือ. decar ตัวบีบอัดส่วนใหญ่ แม้พื้นฐานที่สุดจะสามารถเข้าถึง tar และ gunzip ได้อย่างน้อยไม่ว่าจะอายุเท่าไร แม้แต่เฟิร์มแวร์ Android ก็สามารถเข้าถึงเครื่องมือเหล่านี้ได้
โครงการใหม่ที่กำหนดเป้าหมายผู้ชมที่ใช้การแจกแจงแบบสมัยใหม่อาจแจกจ่ายได้ดีในรูปแบบที่ทันสมัยกว่าเช่น. tar.xz (ใช้รูปแบบการบีบอัด Xz (LZMA) ซึ่งบีบอัดได้ดีกว่า gzip หรือ bzip2) หรือ. 7z ซึ่งคล้ายกับรูปแบบไฟล์ZIP หรือRARที่ทั้งคู่บีบอัดและระบุโครงร่างสำหรับการรวมหลายไฟล์ไว้ในไฟล์เดียว
คุณไม่เห็น .7z ใช้บ่อยมากขึ้นสำหรับเหตุผลเดียวกันกับที่เพลงไม่ได้ขายจากร้านค้าออนไลน์ดาวน์โหลดในรูปแบบใหม่ของแบรนด์เช่นบทประพันธ์หรือวิดีโอWebM เข้ากันได้กับคนที่ใช้ระบบโบราณหรือพื้นฐานมาก
tar xvzf
มันยากกว่า7z -x
...