ضغط (برنامج)

compressهو أمر شل لضغط البيانات باستخدام خوارزمية LZW . [ 1 ] هو أمر شل مصاحب يقوم باستعادة الملفات إلى حالتها الأصلية (المحتوى والبيانات الوصفية ) من ملف تم إنشاؤه باستخدام .uncompresscompress

على الرغم من شعبيتها السابقة، compressفقدت هذه الأداة شعبيتها بسبب استخدامها لخوارزمية LZW الحاصلة على براءة اختراع. وقد استُبدل استخدامها بأوامر gzipأخرى bzip2تستخدم خوارزميات مختلفة وتوفر ضغطًا أفضل للبيانات. بالمقارنة مع gzipالأداة في أسرع إعداداتها، compressفإن الأداة أبطأ قليلاً في الضغط، وأسرع قليلاً في فك الضغط، ولها نسبة ضغط أقل بكثير . [ 2 ] يتم استخدام 1.8 ميجابايت من الذاكرة لضغط بيانات جائزة هوتر ، وهو ما يزيد قليلاً عن gzipاستهلاكها في أبطأ إعداداتها. [ 3 ]

compressوقد uncompressحافظت على وجودها على أنظمة Unix و BSD وتم نقلها إلى IBM i . [ 4 ]

compressتم توحيدها في مواصفات X/Open CAE في عام 1994، [ 5 ] ثم في مواصفات المجموعة المفتوحة الأساسية، الإصدارين 6 و7. [ 6 ] لا تتطلب قاعدة معيار لينكس ذلكcompress . [ 7 ]

compressغالبًا ما يتم استبعادها من التثبيت الافتراضي لتوزيعة لينكس، ولكن يمكن تثبيتها من حزمة منفصلة. [ 8 ]compress وهي متوفرة لأنظمة FreeBSD وOpenBSD وMINIX وSolaris وAIX.

compressيُسمح به لبروتوكول نقطة إلى نقطة في RFC 1977 ولـ HTTP/1.1 في RFC 9110 ، على الرغم من أنه نادرًا ما يتم استخدامه في عمليات النشر الحديثة نظرًا لتوافر deflate/gzip الأفضل.  

يستخدم

compressتُسمى الملفات المضغوطة عادةً بالامتداد ".Z"، ولذلك تُسمى أحيانًا ملفات .Z. هذا الامتداد مشتق من برنامج الضغط السابق الذي كان يستخدم الامتداد ".z".

تدعم معظم tarالتطبيقات الضغط عن طريق تمرير البيانات compressعند إعطاء -Zخيار سطر الأوامر.

gunzipيمكنه فك ضغط ملفات .Z. [ 9 ]

الخوارزمية

compressحصل مركز سبيري للأبحاث على براءة اختراع لخوارزمية LZW المستخدمة في عام 1983. ونشر تيري ويلش مقالًا في مجلة IEEE حول الخوارزمية عام 1984، [ 10 ] لكنه أغفل الإشارة إلى أنه قدّم طلبًا للحصول على براءة اختراع لها. استغل سبنسر توماس من جامعة يوتا هذا المقال وطبّق الخوارزمية compressعام 1984، دون أن يدرك أن براءة اختراع خوارزمية LZW قيد الانتظار. كما تضمن تنسيق صور GIF ضغط LZW بهذه الطريقة، وطالبت شركة يونيسيس لاحقًا بحقوق ملكية فكرية على تطبيقات GIF. قاد جوزيف إم. أوروست الفريق وعمل مع توماس وآخرين لإنشاء النسخة النهائية (4.0) من البرنامج compressونشرها كبرنامج مجاني لمجموعة net.sources على شبكة USENET عام 1985. مُنحت براءة الاختراع الأمريكية رقم 4,558,302 عام 1985 ، مما جعل البرنامج compressغير قابل للاستخدام دون دفع حقوق ملكية فكرية لشركة سبيري للأبحاث (التي اندمجت لاحقًا مع يونيسيس).

انتهت صلاحية براءة اختراع LZW الأمريكية في عام 2003، لذا فهي الآن ملكية عامة في الولايات المتحدة. واليوم، انتهت صلاحية جميع براءات اختراع LZW في جميع أنحاء العالم (انظر تنسيق تبادل الرسومات#Unisys وإنفاذ براءة اختراع LZW ).

اعتبارًا من معيار POSIX.1-2024،compress يدعم خوارزمية DEFLATE المستخدمة في gzip . [ 11 ]

تنسيق الملف

يتكون الناتج المضغوط من مجموعات بتات. تتألف كل مجموعة بتات من رموز ذات عدد ثابت من البتات (9-16 ) . تُحاذى كل مجموعة، باستثناء المجموعة الأخيرة، إلى عدد البتات لكل رمز مضروبًا في 8، وتُملأ من اليمين بأصفار. أما المجموعة الأخيرة فتُحاذى إلى ثمانيات بتات وتُملأ من اليمين بأصفار. يمكن الاطلاع على مزيد من المعلومات في مشكلة على مستودع ncompress على GitHub. [ 12 ]

مثال:

لنفترض أن المخرجات تحتوي على عشرة رموز من 9 بت، وخمسة رموز من 10 بت، وثلاثة عشر رمزًا من 11 بت. يوجد ثلاث مجموعات من المخرجات تحتوي على 90 بت، و50 بت، و143 بت من البيانات.
  • ستكون المجموعة الأولى عبارة عن 90 بت من البيانات + 54 بت صفري للحشو من أجل محاذاتها إلى 72 بت (9 بت × 8).
  • ستكون المجموعة الثانية عبارة عن 50 بت من البيانات + 30 بت من الأصفار للحشو من أجل التوافق مع 80 بت (10 بت × 8).
  • ستكون المجموعة الثالثة عبارة عن 143 بت من البيانات + بت واحد من الحشو الصفري من أجل محاذاتها إلى 8 بت (لأن هذه هي المجموعة الأخيرة في الإخراج).

إن وجود بتات الحشو هو في الواقع خلل برمجي، إذ لا يتطلب LZW أي محاذاة. وقد استمر هذا الخلل لأكثر من 35 عامًا، وكان موجودًا في برامج الضغط الأصلية في أنظمة UNIX ، مثل compress وncompress و gzip ، بالإضافة إلى نسخة Windows منه. وقد تم إنشاء جميع ملفات application/x-compress باستخدام هذا الخلل.

تقوم بعض compressالتطبيقات بكتابة بتات عشوائية من مخزن مؤقت غير مهيأ في الحشوات. ولا يوجد ما يضمن أن تكون الحشوات أصفارًا. يجب على برنامج فك الضغط تجاهل القيم الموجودة في الحشوات لضمان التوافق.

انظر أيضاً

مراجع

  1. فرايسنجر، مايك. "ncompress: مشروع متاح للجميع" . تم الاطلاع عليه بتاريخ 30 يوليو 2014. Compress هو برنامج ضغط ملفات LZW سريع وبسيط. لا يتمتع Compress بأعلى معدل ضغط، ولكنه من أسرع البرامج لضغط البيانات. يُعد Compress المعيار الفعلي في مجتمع UNIX لضغط الملفات.
  2. غومانس، لوك. "الضغط - ما الفرق بين gzip و compress؟" . موقع Unix & Linux Stack Exchange .
  3. "معيار ضغط النصوص الكبيرة" . mattmahoney.net . compress 4.3d....
  4. آي بي إم . "برمجة Qshell لنظام IBM System i الإصدار 7.2" (ملف PDF) . آي بي إم . تم الاطلاع عليه بتاريخ 5 سبتمبر 2020 .
  5. أوامر وأدوات مواصفات X/Open CAE، الإصدار 4، النسخة 2 (ملف PDF)، 1994، opengroup.org
  6. مرجع الصدفة والأدوات المساعدة، مواصفات يونكس الموحدة ، الإصدار 3 من مجموعة Open Groupcompress  
  7. الفصل 17. الأوامر والأدوات المساعدة في المواصفات الأساسية القياسية لنظام لينكس 5.0.0، linuxfoundation.org
  8. ncompress ، pkgs.org
  9. "GNU Gzip" . نظام تشغيل جنو وحركة البرمجيات الحرة . 2023-02-05 . تاريخ الاسترجاع 2024-04-03 . يمكن لبرنامج gunzip حاليًا فك ضغط الملفات التي تم إنشاؤها بواسطة gzip أو zip أو compress أو pack. يتم الكشف عن تنسيق الإدخال تلقائيًا.
  10. ويلش، تيري أ. (1984). "تقنية لضغط البيانات عالي الأداء" (ملف PDF) . مجلة IEEE Computer . 17 (6): 8-19 . doi : 10.1109/MC.1984.1659158 . S2CID 2055321 . 
  11. "ضغط" . مجموعة أوبن . تم الاسترجاع في 2 نوفمبر 2024 .
  12. "الضغط باستخدام 9 بتات لا يعمل · المشكلة رقم 5 · vapier/ncompress" . GitHub . تم الاطلاع عليه بتاريخ 17-09-2024 .