อ่าน 4 นาที
บีบอัด (ซอฟต์แวร์)
compress เป็น คำสั่ง เชลล์ สำหรับ การบีบอัดข้อมูล โดยใช้อัลกอริธึม LZW [ 1 ] เป็นคำสั่งเชลล์เสริมที่กู้คืนไฟล์ให้กลับสู่สถานะเดิม (ทั้งเนื้อหาและ เมตาเดตา ) จากไฟล์ที่สร้างด้วย...
บีบอัด (ซอฟต์แวร์)
| บีบอัด / คลายการบีบอัด | |
|---|---|
| ผู้เขียนต้นฉบับ | สเปนเซอร์ โทมัส |
| ปล่อย | กุมภาพันธ์ พ.ศ. 2528 |
| ระบบปฏิบัติการ | ยูนิก , ระบบคล้ายยูนิก , ไอบีเอ็ม ไอ |
| พิมพ์ | สั่งการ |
| บีบอัดไฟล์ .Z | |
|---|---|
| นามสกุลไฟล์ | .Z |
| สื่อประเภทอินเทอร์เน็ต | แอปพลิเคชัน/เอ็กซ์คอมเพรส |
| พัฒนาโดย | สเปนเซอร์ โทมัส |
| ประเภทของรูปแบบ | การบีบอัดข้อมูล |
compressเป็นคำสั่งเชลล์ สำหรับการบีบอัดข้อมูลโดยใช้อัลกอริธึมLZW [ 1 ]เป็นคำสั่งเชลล์เสริมที่กู้คืนไฟล์ให้กลับสู่สถานะเดิม (ทั้งเนื้อหาและเมตาเดตา ) จากไฟล์ที่สร้างด้วย uncompresscompress
แม้ว่าครั้งหนึ่งจะได้รับความนิยม แต่compressก็เสื่อมความนิยมลงเนื่องจากใช้อัลกอริธึม LZW ที่ได้รับการจดสิทธิบัตร การใช้งานจึงถูกแทนที่ด้วยคำสั่งต่างๆ เช่นgzipและbzip2ที่ใช้อัลกอริธึมอื่นๆ และให้การบีบอัดข้อมูลที่ดีกว่า เมื่อเทียบกับgzipที่การตั้งค่าที่เร็วที่สุดcompressจะช้ากว่าเล็กน้อยในการบีบอัด เร็วกว่าเล็กน้อยในการคลายการบีบอัด และมีอัตราส่วนการบีบอัด ที่ต่ำ กว่า อย่างมาก [ 2 ]หน่วยความจำ 1.8 MiB ถูกใช้ในการบีบอัด ข้อมูล รางวัลฮัตเตอร์ซึ่งมากกว่าเล็กน้อยเมื่อgzipเทียบกับการตั้งค่าที่ช้าที่สุด[ 3 ]
compressและuncompressยังคงมีอยู่บน ระบบ UnixและBSDและได้รับการพอร์ตไปยังIBM i [ 4 ]
compressได้รับการกำหนดมาตรฐานในข้อกำหนด X/Open CAE ในปี 1994 [ 5 ]และเพิ่มเติมในข้อกำหนดพื้นฐานของ The Open Group ฉบับที่ 6 และ 7 [ 6 ] Linux Standard Baseไม่compressต้องการ[ 7 ]
compressมักจะถูกยกเว้นจากการติดตั้งเริ่มต้นของระบบปฏิบัติการ Linuxแต่สามารถติดตั้งได้จากแพ็คเกจแยกต่างหาก[ 8 ]compressมีให้ใช้งานสำหรับ FreeBSD, OpenBSD, MINIX, Solaris และ AIX
compressอนุญาตให้ใช้ได้กับโปรโตคอลแบบจุดต่อจุด (Point-to-Point Protocol)ในRFC 1977และสำหรับHTTP/1.1ในRFC 9110แม้ว่าจะไม่ค่อยได้ใช้ในระบบการใช้งานสมัยใหม่แล้ว เนื่องจากมี deflate/gzip ที่ดีกว่าให้ใช้งาน
ใช้
ไฟล์ที่ถูกบีบอัดโดยcompressทั่วไปจะมีนามสกุล" .Z" และบางครั้งจึงเรียกว่าไฟล์ .Z นามสกุลนี้มาจาก โปรแกรม บีบอัดไฟล์ รุ่นก่อน ที่ใช้นามสกุล ".z"
การใช้งาน ส่วนใหญ่tarรองรับการบีบอัดโดยการส่งข้อมูลผ่านทางท่อcompressเมื่อมีการระบุ-Zตัวเลือกในบรรทัดคำสั่ง
gunzipสามารถคลายไฟล์ .Z ได้[ 9 ]
อัลกอริทึม
อัลกอริทึม LZW ที่ใช้ในนั้นcompressได้รับการจดสิทธิบัตรโดยSperry Research Centerในปี 1983 Terry Welchได้ตีพิมพ์บทความ IEEE เกี่ยวกับอัลกอริทึมนี้ในปี 1984 [ 10 ]แต่ไม่ได้ระบุว่าเขาได้ยื่นขอสิทธิบัตรสำหรับอัลกอริทึมนี้ Spencer Thomas จากมหาวิทยาลัยยูทาห์ได้นำบทความนี้ไปใช้และดำเนินการcompressในปี 1984 โดยไม่รู้ว่ามีสิทธิบัตรรอการอนุมัติสำหรับอัลกอริทึม LZW รูปแบบภาพ GIFก็ได้รวมการบีบอัด LZW ในลักษณะนี้ด้วย และ ต่อมา Unisysได้อ้างสิทธิ์ในค่าลิขสิทธิ์จากการใช้งาน GIF Joseph M. Orost เป็นผู้นำทีมและทำงานร่วมกับ Thomas และคณะเพื่อสร้างเวอร์ชันสุดท้าย (4.0) ของcompressและเผยแพร่เป็นซอฟต์แวร์ฟรีให้กับกลุ่ม net.sources USENET ในปี 1985 สิทธิบัตรของสหรัฐอเมริกาหมายเลข 4,558,302ได้รับการอนุมัติในปี 1985 ทำให้compressไม่สามารถใช้งานได้หากไม่จ่ายค่าลิขสิทธิ์ให้กับ Sperry Research (ซึ่งต่อมาได้รวมเข้ากับ Unisys)
สิทธิบัตร LZW ของสหรัฐอเมริกาหมดอายุในปี 2546 ดังนั้นจึงถือเป็นสาธารณสมบัติในสหรัฐอเมริกาแล้ว ปัจจุบัน สิทธิบัตร LZW ทั่วโลกทั้งหมดหมดอายุแล้ว (ดูGraphics Interchange Format#Unisys และการบังคับใช้สิทธิบัตร LZW )
ตามPOSIX.1-2024compressรองรับ อัลก อริ ธึม DEFLATEที่ใช้ในgzip [ 11 ]
รูปแบบไฟล์
เอาต์พุตที่บีบอัดประกอบด้วยกลุ่มบิต แต่ละกลุ่มบิตประกอบด้วยรหัสที่มีจำนวนบิตคงที่ (9–16) แต่ละกลุ่ม ยกเว้นกลุ่มสุดท้าย จะถูกจัดเรียงตามจำนวนบิตต่อรหัสคูณด้วย 8 และเติมศูนย์ทางด้านขวา กลุ่มสุดท้ายจะถูกจัดเรียงตามอ็อกเท็ต 8 บิตและเติมศูนย์ ข้อมูลเพิ่มเติมสามารถดูได้จากประเด็นในที่เก็บ GitHub ของ ncompress [ 12 ]
ตัวอย่าง:
- สมมติว่าผลลัพธ์มีรหัส 9 บิตจำนวน 10 รหัส รหัส 10 บิตจำนวน 5 รหัส และรหัส 11 บิตจำนวน 13 รหัส โดยมีกลุ่มข้อมูล 3 กลุ่ม กลุ่มละ 90 บิต 50 บิต และ 143 บิต
- กลุ่มแรกจะมีข้อมูล 90 บิต บวกกับบิตศูนย์ 54 บิตเพื่อเติมให้ครบ 72 บิต (9 บิต × 8)
- กลุ่มที่สองจะมีข้อมูล 50 บิต บวกกับบิตศูนย์ 30 บิตเพื่อเติมให้ครบ 80 บิต (10 บิต × 8)
- กลุ่มที่สามจะมีข้อมูล 143 บิต บวกกับบิตศูนย์ 1 บิตเพื่อจัดเรียงให้ตรงกับ 8 บิต (เนื่องจากเป็นกลุ่มสุดท้ายในผลลัพธ์)
การมีอยู่ของบิตเสริม (padding bits) แท้จริงแล้วเป็นข้อผิดพลาด เนื่องจาก LZW ไม่ต้องการการจัดเรียงใดๆ ข้อผิดพลาดนี้มีมานานกว่า 35 ปีแล้ว และพบได้ในโปรแกรมบีบอัดไฟล์ UNIX ดั้งเดิม , ncompress , gzipและเวอร์ชัน Windows ไฟล์ application/x-compress ทั้งหมด ถูกสร้างขึ้นโดยใช้ข้อผิดพลาดนี้
บางcompressโปรแกรมจะเขียนบิตแบบสุ่มจากบัฟเฟอร์ที่ยังไม่ได้กำหนดค่าลงในส่วนเติม (paddings) ไม่มีการรับประกันว่าส่วนเติมเหล่านั้นจะเป็นศูนย์ โปรแกรมถอดรหัสจะต้องละเว้นค่าในส่วนเติมเหล่านั้นเพื่อความเข้ากันได้
ดูเพิ่มเติม
ลิงก์ภายนอก
- : บีบอัดข้อมูล – เอกสารอ้างอิงเชลล์และยูทิลิตี้, ข้อกำหนดยูนิกซ์ฉบับเดียว , เวอร์ชัน 5 จากThe Open Group
- – คู่มือโปรแกรมเมอร์Unix เวอร์ชัน 8
- – คู่มือคำสั่งทั่วไปของ FreeBSD
- – คู่มือคำสั่งทั่วไปของ OpenBSD
- – คู่มืออ้างอิงคำสั่งผู้ใช้Solaris 11.4
- ncompress - การใช้งานการบีบอัด/คลายการบีบอัดแบบโอเพนซอร์สสำหรับระบบ POSIX
- compress - คำสั่ง compress ดั้งเดิมของ Unix (ในไฟล์เก็บถาวรที่ถูกบีบอัด)
- compress - ไฟล์ปฏิบัติการ compress ดั้งเดิมของ Unix (บีบอัดด้วย gzip)
- ซอร์สโค้ดสำหรับ compress v4.0 (ไฟล์เก็บถาวรแบบ gzip)
- ไฟล์ ZIP ที่บรรจุโปรแกรมบีบอัดไฟล์เวอร์ชันสำหรับ Windows
- ซอร์สโค้ดของ fcompress.c เวอร์ชันปัจจุบันจาก compress
- การจัดเรียงกลุ่มบิต - คำอธิบายเกี่ยวกับการจัดเรียงกลุ่มบิต
- lzws - ไลบรารีและ CLI ใหม่ ที่พัฒนาขึ้นโดยไม่ใช้โค้ดเดิม
- ruby-lzws - ไลบรารีเชื่อมต่อ Ruby ที่รองรับการสตรีมมิ่ง
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ บีบอัด (ซอฟต์แวร์)
compress เป็น คำสั่ง เชลล์ สำหรับ การบีบอัดข้อมูล โดยใช้อัลกอริธึม LZW [ 1 ] เป็นคำสั่งเชลล์เสริมที่กู้คืนไฟล์ให้กลับสู่สถานะเดิม (ทั้งเนื้อหาและ เมตาเดตา ) จากไฟล์ที่สร้างด้วย...
ใช้
ไฟล์ที่ถูกบีบอัดโดย compress ทั่วไปจะมีนามสกุล " .Z" และบางครั้งจึงเรียกว่าไฟล์ .Z นามสกุลนี้มาจาก โปรแกรม บีบอัดไฟล์ รุ่นก่อน ที่ใช้นามสกุล ".z"
อัลกอริทึม
อัลกอริทึม LZW ที่ใช้ในนั้น compress ได้รับการจดสิทธิบัตรโดย Sperry Research Center ในปี 1983 Terry Welch ได้ตีพิมพ์บทความ IEEE เกี่ยวกับอัลกอริทึมนี้ในปี 1984 [ 10 ] แต่ไม่ได้ระบุว่าเขาได้ยื่นขอสิทธิบัตรสำหรับอัลกอริทึมนี้ Spencer Thomas จาก...
รูปแบบไฟล์
เอาต์พุตที่บีบอัดประกอบด้วยกลุ่มบิต แต่ละกลุ่มบิตประกอบด้วยรหัสที่มีจำนวนบิตคงที่ (9–16) แต่ละกลุ่ม ยกเว้นกลุ่มสุดท้าย จะถูกจัดเรียงตามจำนวนบิตต่อรหัสคูณด้วย 8 และเติมศูนย์ทางด้านขวา กลุ่มสุดท้ายจะถูกจัดเรียงตามอ็อกเท็ต 8 บิตและเติมศูนย์...