gzip ไร้น้ำมันดิน? ทำไมพวกเขาใช้ร่วมกัน?


60

ทำไมtarและgzipใช้กันเกือบทุกครั้งไม่ใช่แค่ gzip? มีประโยชน์อย่างไรกับวิธีการนั้น?

คำตอบ:


72

TARสร้างไฟล์ที่เก็บถาวรเดียวจากไฟล์จำนวนมาก แต่ไม่บีบอัดไฟล์

รายละเอียดรูปแบบ

ไฟล์ tar คือการต่อข้อมูลอย่างน้อยหนึ่งไฟล์ แต่ละไฟล์นำหน้าด้วยเร็กคอร์ดส่วนหัว 512- ไบต์ ข้อมูลไฟล์ถูกเขียนไม่เปลี่ยนแปลงยกเว้นความยาวของมันจะถูกปัดเศษเป็นหลายไบต์ที่ 512 และพื้นที่ว่างเต็มเป็นศูนย์ จุดสิ้นสุดของการเก็บถาวรถูกทำเครื่องหมายด้วยระเบียนที่กรอกข้อมูลศูนย์อย่างน้อยสองรายการ

GZIPบีบอัดไฟล์เดียวเป็นไฟล์เดียว แต่ไม่สร้างคลังข้อมูล

รูปแบบไฟล์

... แม้ว่ารูปแบบไฟล์จะอนุญาตให้มีการตัดแบ่งการเชื่อมต่อหลาย ๆ ไฟล์ (ไฟล์ซิปจะถูกบีบอัดแบบต่อกันราวกับว่าพวกเขาเป็นไฟล์เดียว) แต่โดยปกติแล้ว gzip จะใช้ในการบีบอัดไฟล์เพียงไฟล์เดียว [4] การบีบอัดไฟล์เก็บถาวรโดยทั่วไปแล้วจะสร้างขึ้นโดยการรวมกลุ่มของไฟล์ลงในไฟล์เก็บถาวร tar เดียวแล้วบีบอัดไฟล์เก็บถาวรนั้นด้วย gzip


12
ไม่มีสิ่งเช่นไฟล์ "tgz" มันเป็น tar.gz งานของ gzip คือการ zip หรือ unzip เนื้อหา (ในกรณีนี้คือไฟล์เก็บถาวร tar) จากนั้นคุณก็ยกเลิกการเก็บถาวรด้วย tar มันเป็นปรัชญาการวางท่อทั่วไปของ Unix และไม่เหมือนใคร
luis.espinal

5
ไม่. tar.gz ไม่ซ้ำกัน:. tar.bz2, .cpio.gz ฯลฯ ทำงานในลักษณะเดียวกัน
46971

3
@ user36310 ฉันรู้ว่าคุณหมายถึงอะไรในหลักการ แต่ในทางปฏิบัติเครื่องมือช่วยให้คุณแยกไฟล์เดียว tar -xzvf tarball.tar.gz single/file.txt. เบื้องหลังมันต้องทำงานพิเศษบางอย่าง แต่สำหรับไฟล์ที่ปรากฏมันจะแยกไฟล์เดียว
Rich Homolka

4
ทำให้นั้น "ทำงานพิเศษมาก" ถ้าไฟล์อยู่ท้ายไฟล์เก็บถาวรขนาดใหญ่ เห็นได้ชัดว่าหากคุณต้องการเข้าถึงแบบสุ่ม zip / rar / xar / 7z / lzh / arj / cab / sit ฯลฯ เป็นรูปแบบที่เหนือกว่า
LaC

3
จะแม่นยำ.tar.*เก็บถาวรบีบอัดเสมอ "มั่นคง" คือ ประกอบด้วยสตรีมที่บีบอัดเดี่ยว การ.zipเก็บถาวรในทางกลับกันไม่มั่นคงเลยอัลกอริธึมการบีบอัดเริ่มต้นใหม่สำหรับแต่ละไฟล์ มันเสียสละประสิทธิภาพการบีบอัดเพื่อเพิ่มความเร็วในการเข้าถึงแบบสุ่ม .7zไฟล์เก็บถาวรสามารถเป็น solid, non-solid หรือมี solid blocks
Daniel B

17

Gzip / Bzip2 เป็นเครื่องอัดกระแส พวกเขาบีบอัดข้อมูลเป็นสิ่งที่เล็กลง สามารถใช้กับไฟล์แต่ละไฟล์ แต่ไม่สามารถใช้กับกลุ่มของไฟล์ด้วยตนเอง

ในทางกลับกันทาร์มีความสามารถในการเปลี่ยนรายการไฟล์ที่มีพา ธ การอนุญาตและข้อมูลการเป็นเจ้าของให้เป็นสตรีมต่อเนื่องเดียว - และในทางกลับกัน

นั่นคือเหตุผลที่ไฟล์เก็บถาวร (และหากจำเป็นต้องบีบอัดด้วย) โดยปกติจะใช้ tar + วิธีการบีบอัดบางอย่าง


12

Tar รับผิดชอบในการทำสิ่งหนึ่งและสิ่งเดียวเท่านั้นที่ดี: (un) การเก็บถาวรลงใน (จาก) ไฟล์เก็บถาวรเดียว ของอะไร? หนึ่งในสิ่งเดียวเท่านั้น: ชุดของไฟล์

Gzip มีหน้าที่ในการทำสิ่งหนึ่งและสิ่งเดียวเท่านั้นที่ดี: (un) การบีบอัด ของอะไร? สิ่งหนึ่งและสิ่งเดียวเท่านั้น: ไฟล์เดียวทุกชนิด ... และที่มีไฟล์ที่สร้างขึ้นด้วย tar

มันกลับไปสู่ปรัชญาของระบบยูนิกซ์ของการวางท่อสถาปัตยกรรม "ไปป์และฟิลเตอร์" พื้นฐาน; การรักษาทุกอย่างในรูปแบบไฟล์และเป้าหมายสถาปัตยกรรมด้านเสียงของ "สิ่งหนึ่งสิ่งใดสิ่งหนึ่งสิ่งใดสิ่งหนึ่งเพียงอย่างเดียวและสิ่งที่ดี" (ซึ่งส่งผลให้เป็นปลั๊กอินที่เล่นง่ายและสง่างาม .)

ในความเรียบง่ายมันเกือบเป็นพีชคณิตในธรรมชาติ (เป้าหมายที่หนักหน่วงในการออกแบบระบบ) และนั่นก็ไม่ใช่เรื่องง่าย

ในหลาย ๆ ทาง (และไม่มีข้อบกพร่อง) นี่เกือบจะเป็นจุดสูงสุดของความสามารถในการเรียงลำดับโมดูลัสการมีเพศสัมพันธ์แบบหลวมและการรวมกันที่สูง หากคุณเข้าใจสี่สิ่งนี้ (และฉันหมายถึงเข้าใจจริงๆ ) คุณเข้าใจแล้วจะเห็นได้ชัดว่าทำไม tar และ gzip จึงทำงานเป็นคู่


1
ปรัชญาของ UNIX นั้นสวยงามดี แต่ฉันสังเกตว่ามันสั้นเกินไปและสร้างคลังเก็บที่ไม่มั่นคง (การแตกไฟล์เดียวจาก tar.gz ขนาด 1-GB ไม่น่าจะเจ็บปวดและจากสิ่งที่ฉันเข้าใจที่นี่ ZIP นั้นยอดเยี่ยมกว่า tar.gz ... ใช่ไหม?)
Mehrdad

@Mehrad - ก่อนอื่นไฟล์เก็บถาวรไม่แข็งคืออะไร? จากสาเหตุของ Voltaire "หากคุณจะพูดคุยกับฉันก่อนอื่นคุณต้องกำหนดเงื่อนไขของคุณ" . ประการที่สองใช่สถาปัตยกรรมไปป์และฟิลเตอร์สั้นในบางกรณีเช่นเดียวกับสถาปัตยกรรมอื่น ๆ โดยไม่คำนึงถึงความสวยงาม นั่นเป็นเพียงส่วนหนึ่งของวิศวกรรมและไม่ใช่ข้อโต้แย้งที่เกิดขึ้น ประการที่สาม zip นั้นเหนือกว่า gzip และ tar แต่นั่นไม่ใช่สิ่งที่คุณถาม คุณถามว่าเพราะเหตุใด zip และ tar จึงทำงานเหมือนกันและถ้ามีข้อดีและคุณได้รับคำตอบทางเทคนิค
luis.espinal

@ Mehrad - เช่นกันฉันไม่ทราบว่าคุณประสบปัญหาประเภทใดเมื่อทำการขยายไฟล์ | untar ไฟล์ 1gig tar.gz ฉันทำมาหลายครั้งมากถึง 2GB ด้วยการติดตั้งเก่ากว่าของ gzip (และสูงสุด 4gb ด้วยรุ่นใหม่กว่าของ gzip) หากคุณกำลังทำมันผ่านสายหรือบนเมาท์ NFS แล้ว duh! คุณจะพบปัญหาการแสดงที่คล้ายกันเช่นเดียวกับการทำซิปธรรมดา Heck ฉันยังไม่ได้ตัดจากท่อไปยังกระบวนการระยะไกลที่แยกอินพุต gzip ลงในซ็อกเก็ต ลองด้วยซิป สำหรับแต่ละปัญหาให้ใช้เครื่องมือที่เหมาะสม (ไม่ว่าจะเป็น tar | gz หรือ zip)
luis.espinal

8

ประการแรก TAR ไม่ได้ถูกสร้างขึ้นเพื่อสร้างไฟล์เก็บถาวร มันArchiver เทป หน้าที่ของมันคือการเขียนหรือโหลดไฟล์เก็บถาวรไปยัง / จากเทป

-fตัวเลือกที่จะทำให้มันใช้ไฟล์เป็น "เทปเสมือน" ซึ่งจากนั้นจะสามารถบีบอัดโดยโปรแกรมอื่น ในความเป็นจริงการบีบอัดดังกล่าวเกิดขึ้นกับเทปที่ใช้งานจริงเช่นกัน

แน่นอนว่าปรัชญาของการใช้หนึ่งโปรแกรมเพื่อทำให้ดีนั้นนับรวมในกรณีนี้ แต่ก็อาจพลาดได้ว่าทำไมไฟล์เก็บถาวร TAR จึงมีโครงสร้างเป็นสตรีมแทนที่จะเป็นไดเรกทอรีของเนื้อหา + เนื้อหา


3
ขวา ... ไฟล์ ZIP ใส่ข้อมูลไฟล์ทั้งหมดในส่วนหัวเดียวจากนั้นเนื้อหาไฟล์ทั้งหมด ... ที่ทำให้ไม่สามารถผนวกไฟล์ไปยังไฟล์ ZIP เพิ่มเติม ... คุณต้องเขียนไฟล์ทั้งหมดใหม่อีกครั้งด้วย ... รูปแบบ TAR ส่วนหัวของแต่ละไฟล์แยกจากกันดังนั้นคุณสามารถต่อท้ายไฟล์ได้อย่างง่ายดายโดยไม่ต้องเขียนเทปใหม่ทั้งหมด
JoelFan

5

ตามเนื้อผ้าระบบ Unix ใช้โปรแกรมหนึ่งไปดำเนินการอย่างใดอย่างหนึ่งต่อปรัชญา Unix : tarเป็นเพียงวิธีการจัดแพคเกจหลายไฟล์เป็นไฟล์เดียวเดิมสำหรับเทปสำรองข้อมูล (เพราะฉะนั้นtar, เสื้อลิงเท่ลูกกระเทียม) tarไม่ให้การบีบอัด เก็บไม่มีการบีบอัดที่เกิดมักจะถูกบีบอัดด้วยโปรแกรมอื่น ๆ บางอย่างเช่นgzip, หรือbzip2 xzในสมัยก่อนพวกเขาต้องการใช้compressคำสั่งเพื่อทำสิ่งนี้ อัลกอริทึมการบีบอัดใหม่กว่ามีประสิทธิภาพมากกว่านี้

วิธีการที่ถูกทำให้เป็นโมดูลสูงที่กำหนดโดยปรัชญา Unix หมายความว่าแต่ละโปรแกรมสามารถใช้ทีละตัวตามความเหมาะสมหรือรวมกันเพื่อทำงานที่ซับซ้อนมากขึ้นรวมถึงการสร้างคลังข้อมูลบีบอัดตามที่อธิบายไว้ที่นี่ สำหรับงานประเภทเหล่านี้มันยังทำให้ง่ายต่อการสลับเครื่องมือแต่ละอย่างตามต้องการ คุณเพียงแค่เปลี่ยนโปรแกรมบีบอัดเพื่อใช้อัลกอริทึมการบีบอัดที่แตกต่างกันโดยไม่ต้องเปลี่ยนtarยูทิลิตี้เอง

วิธีการแบบแยกส่วนนี้ไม่ได้ไม่มีข้อเสีย ในฐานะที่เป็นที่กล่าวถึงในความคิดเห็นที่คำตอบอื่น ๆ ซึ่งเป็นรูปแบบที่เก็บทุ่มเทบีบอัดเหมือน.zipจะดีกว่าที่จะสามารถจัดการกับการสกัดของแต่ละไฟล์; tarballs ที่ถูกบีบอัดจะต้องทำการคลายการบีบอัดเกือบทั้งหมดเพื่อแตกไฟล์ใกล้ถึงจุดสิ้นสุดของไฟล์เก็บถาวรในขณะที่.zipไฟล์เก็บถาวรอนุญาตให้เข้าถึงเนื้อหาแบบสุ่มได้ (บางรูปแบบที่ใหม่กว่าเช่น.7zสนับสนุนคลังเก็บถาวรและไม่ใช่เก็บถาวรรวมทั้งบล็อกทึบขนาดแตกต่างกันในคลังเก็บขนาดใหญ่) การใช้อย่างต่อเนื่องtarร่วมกับยูทิลิตี้การบีบอัดแยกต่างหากเป็นเรื่องของประเพณีและความเข้ากันได้; นอกจากนี้.7zและ.zipไม่สนับสนุนข้อมูลเมตาของระบบไฟล์ Unix เช่นการอนุญาต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.