lha(1) General Commands Manual lha(1)

lha - ابزار فشرده‌سازی برای فایل‌های آرشیو .lzh

lha [-]{lvtxep[q{num}][finv]}[w=<dir>] archive_file [file ...]

دستور lha ابزاری برای استخراج فایل‌های آرشیو .lzh است. این ابزار همچنین از گونه‌های مختلف آرشیو .lzh، مانند .lzs و .pma نیز پشتیبانی می‌کند.

این نسخه از ابزار lha بخشی از Lhasa است؛ پیاده‌سازی آزادی از قالب .lzh.

ابزار lha در مقایسه با بیشتر دستورات یونیکس نحو (syntax) غیرمعمولی دارد. پارامتر اول برنامه، دستور مورد نظر برای اجرا و تمامی گزینه‌های اضافی را مشخص می‌کند. پارامتر دوم مسیر فایل آرشیو را برای عملیات تعیین می‌کند. پس از آن، فهرستی از الگوهای جانشین (wildcard) برای تطبیق با نام فایل‌های درون آرشیو قرار می‌گیرد.

کاراکتر اول در پارامتر دستور، عملیاتی که باید انجام شود را تعیین می‌کند که یکی از موارد زیر است:

فهرست کردن محتویات آرشیو مشخص‌شده.
فهرست کردن محتویات آرشیو مشخص‌شده با جزئیات کامل (پُرگو).
بررسی یکپارچگی آرشیو مشخص‌شده: خارج کردن محتویات آن از حالت فشرده و بررسی CRC.
استخراج آرشیو. فایل‌ها در دایرکتوری کاری فعلی استخراج می‌شوند، مگر اینکه گزینهٔ 'w' مشخص شده باشد.
استخراج آرشیو و ارسال فایل‌های از حالت فشرده خارج‌شده به خروجی استاندارد (stdout) به جای نوشتن آن‌ها روی سیستم‌فایل به‌عنوان فایل‌های واقعی. این گزینه هنگام استفاده به عنوان بخشی از خط لولهٔ (pipeline) پوسته مفید است.

باقی‌ماندهٔ پارامتر دستور برای تعیین گزینه‌های اضافی به کار می‌رود:

حالت بی‌صدا (Quiet). اعداد بالاتر خروجی‌های بیشتری را فرونشانی می‌کنند. سطح 0 عملکرد عادی است. اگر هیچ عددی مشخص نشود، فرونشانی کامل (سطح 2) اعمال می‌شود. گزینهٔ بی‌صدا همچنین گزینهٔ بازنویسی اجباری ('f') را نیز فعال می‌کند.
اجبار به بازنویسی فایل‌های موجود: بدون درخواست تایید.
نادیده گرفتن مسیر فایل‌های آرشیوشده: تمام فایل‌های آرشیوشده را بدون در نظر گرفتن زیرپوشه‌ها، در یک پوشه استخراج می‌کند.
هیچ عملیات واقعی انجام ندهد: در عوض، یک اجرای آزمایشی (dry run) از عملیات درخواست‌شده انجام داده و آنچه انجام می‌شد را در خروجی استاندارد شرح می‌دهد.
حالت پرگو (Verbose): باعث می‌شود اطلاعات بیشتری در خروجی استاندارد نوشته شود.
مشخص کردن دایرکتوری مقصد برای استخراج فایل‌ها. این باید آخرین گزینه در پارامتر اول باشد.

برنامهٔ Lhasa قالب خروجی فهرست خود را از پورت اصلی lha در یونیکس به ارث برده است و این قالب را برای حفظ سازگاری حفظ می‌کند، چرا که برخی ابزارها خروجی آن را پردازش (parse) می‌کنند. بسته به آرگومان‌های خط فرمان، چهار قالب خروجی مختلف پشتیبانی می‌شوند:

نمایش می‌دهد: مجوزهای یونیکس / نوع سیستم‌عامل، UID/GID، اندازه غیرفشرده، نسبت فشرده‌سازی، زمان تغییر، نام فایل.
خروجی دو خطی. خط اول نام فایل را نشان می‌دهد، خط دوم نمایش می‌دهد: مجوزهای یونیکس / نوع سیستم‌عامل، UID/GID، اندازه غیرفشرده، نسبت فشرده‌سازی، زمان تغییر، نام فایل، سطح هدر (header level).
نمایش می‌دهد: مجوزهای یونیکس / نوع سیستم‌عامل، UID/GID، اندازه فشرده، اندازه غیرفشرده، نسبت فشرده‌سازی، قالب فشرده‌سازی، چک‌سام، زمان تغییر، نام فایل.
خروجی دو خطی. خط اول نام فایل را نشان می‌دهد، خط دوم نمایش می‌دهد: مجوزهای یونیکس / نوع سیستم‌عامل، UID/GID، اندازه فشرده، اندازه غیرفشرده، نسبت فشرده‌سازی، قالب فشرده‌سازی، چک‌سام، زمان تغییر در قالب طولانی، سطح هدر.

در ادامه توضیحات تفصیلی هر یک از این فیلدها آمده است:

مجوزهای یونیکس / نوع سیستم‌عامل (PERMSSN)
برای فایل‌هایی که در سیستم یونیکس فشرده شده‌اند، مجوزها را با همان قالبی که ls(1) در زمان اجرا با گزینهٔ -l استفاده می‌کند، فهرست می‌کند. اگر فایل در یک سیستم یونیکس ایجاد نشده باشد، نوع سیستم‌عامل در براکت‌ها نمایش داده می‌شود. به عنوان مثال «[MS-DOS]» و «[MacOS]»؛ نام سیستم‌عامل هرگز حاوی فاصله نیست. اگر فایل روی Microware OS-9 ایجاد شده باشد، مجوزهای مربوط به آن سیستم نیز نمایش داده خواهد شد.
شناسه کاربر / شناسه گروه یونیکس (UID/GID)
برای فایل‌هایی که روی سیستم یونیکس فشرده شده‌اند، شناسه کاربر و گروه فایل را فهرست می‌کند، مشابه خروجی ls(1) در زمان اجرا با گزینهٔ -ln. اگر فایل روی سیستم یونیکس ایجاد نشده باشد، "***** / *****" نشان داده می‌شود؛ بخش تفاوت‌های قالب فهرست (LIST FORMAT DIFFERENCES) را در زیر ببینید.
اندازه فشرده (PACKED)
اندازه فایل به بایت همان‌طور که در داخل آرشیو ذخیره شده است (شامل هدر، که حاوی متاداده‌های فایل است، نمی‌شود). اگر از یک قالب غیرفشرده مانند -lh0- استفاده شود، این مقدار با SIZE برابر خواهد بود.
اندازه غیرفشرده (SIZE)
اندازه فایل به بایت، پیش از آن‌که فشرده شود.
نسبت فشرده‌سازی فایل (RATIO)
اندازه فشرده‌شده به صورت درصدی از اندازه غیرفشرده. این مقدار کارایی قالب فشرده‌سازی را می‌سنجد؛ هر چه درصد کمتر باشد، بهتر است. مقدار (به طور بدبینانه) به 0.1% بعدی گرد می‌شود. اگر از یک قالب غیرفشرده مانند -lh0- استفاده شود، این مقدار برابر با 100% خواهد بود. برای دایرکتوری‌ها، "******" نشان داده می‌شود. توجه داشته باشید که این مقدار در مقایسه با unzip(1) که درصد کاهش حجم فایل اصلی را نشان می‌دهد، معکوس است.
قالب فشرده‌سازی (METHOD)
قالب فشرده‌سازی استفاده‌شده برای ذخیره این فایل. بخش قالب‌های فشرده‌سازی (COMPRESSION FORMATS) را در زیر ببینید.
چک‌سام (CRC)
چک‌سام CRC16 محتویات فایل در قالب هگزادسیمال. هشدار: در حالی که این مقدار برای بررسی سرانگشتی یکپارچگی فایل مفید است، اما فقط یک چک‌سام 16 بیتی است و نباید برای محافظت از فایل‌های بزرگتر از چند کیلوبایت قابل اعتماد در نظر گرفته شود.
زمان تغییر (STAMP)
تاریخ و زمانی که فایل قبل از ذخیره در آرشیو آخرین بار تغییر کرده است. اگر فایل برچسب زمانی ذخیره‌شده نداشته باشد، چیزی نشان داده نمی‌شود. خروجی می‌تواند به یکی از دو شکل باشد: اگر تاریخ در شش ماه گذشته باشد، ماه، روز و زمان نشان داده می‌شوند؛ مانند "Aug 24 12:38". برای فایل‌های قدیمی‌تر، ماه، روز و سال نشان داده می‌شوند؛ مانند "Aug 24 2020".
زمان تغییر در قالب طولانی (STAMP)
این فقط هنگام فهرست کردن در قالب -vv استفاده می‌شود. تاریخ و زمان کامل به صورت عددی و نزدیک به قالب ISO 8601 (اگرچه نه کاملاً منطبق بر آن استاندارد) فهرست می‌شوند. به عنوان مثال "2020-08-24 12:38:25".
سطح هدر (LV)
قالب هدر Lha مورد استفاده برای ذخیره این فایل. قالب‌های پشتیبانی‌شده 0-3 هستند.

خروجی حالت فهرست در ابزار اصلی lha در یونیکس طوری طراحی نشده بود که برای ماشین خوانا باشد. از آنجا که برخی ابزارها سعی در پردازش (parse) خروجی فهرست دارند، خروجی فهرست Lhasa به عمد کمی تغییر یافته تا سازگارتر و پردازش آن آسان‌تر شود.

تفاوت‌های اصلی در اینجا آمده است:

  • اگر فایلی روی یک سیستم یونیکس ایجاد نشده باشد، یک کلمه فاصله‌ساز (spacer) در ستون UID/GID نشان داده می‌شود. نسخهٔ اصلی lha فقط فضای خالی نشان می‌داد.
  • نوع سیستم‌عامل برای آرشیوهای ایجادشده توسط MacLHA به صورت "MacOS" (بدون فاصله) فهرست می‌شود. نسخهٔ اصلی lha عبارت "Mac OS" را نشان می‌داد.

توجه داشته باشید که به طور کلی، رویکرد پردازش متنی خروجی ماهیتاً شکننده و مستعد باگ است. توصیه می‌شود در عوض از API مناسب (liblhasa) استفاده کنید.

در ادامه توضیحاتی پایه‌ای درباره قالب‌های مختلف فشرده‌سازی پشتیبانی‌شده (همان‌طور که هنگام استفاده از دستور فهرست مستند شده در بالا نمایش داده می‌شوند) ارائه شده است. تمام قالب‌ها گونه‌هایی از الگوریتم فشرده‌سازی LZSS هستند.

داده‌های فشرده‌نشده (ذخیره‌شده)، همان‌طور که توسط ابزار اصلی LArc استفاده می‌شد. این مورد ارتباطی با الگوریتم فشرده‌سازی LZ4 با همین نام ندارد.
قالب‌های فشرده‌سازی معرفی‌شده با ابزار اصلی LArc. قالب -lzs- از یک پنجره لغزان 2KiB استفاده می‌کند در حالی که -lz5- از یک پنجره 4KiB بهره می‌برد.
مدخل دایرکتوری. هیچ داده‌ای ذخیره نمی‌شود، فقط هدرها ذخیره می‌شوند.
داده‌های فشرده‌نشده (ذخیره‌شده)، همان‌طور که در LHarc و LHa استفاده می‌شود.
الگوریتم فشرده‌سازی معرفی‌شده با LHarc. این قالب از یک پنجره لغزان 4KiB با کدگذاری پویای هافمن (dynamic Huffman) استفاده می‌کند.
الگوریتم جدید معرفی‌شده با LHa (معروف به LHarc نسخه 2.0). نسخه‌های اولیه (-lh4- و -lh5-) به ترتیب از اندازه پنجره‌های لغزان 8KiB و 16KiB استفاده می‌کردند. نسخه‌های بعدی گونه‌های جدیدی را با اندازه‌های پنجره بزرگ‌تر معرفی کردند: -lh6- (اندازه 64KiB) و -lh7- (اندازه 128KiB).
گونه‌ای از قالب -lh4- که در بالا ذکر شد و توسط UNLHA32.dll معرفی شد که اندازه پنجره را به 1MiB افزایش می‌دهد.
گونه‌ای از قالب -lh4- ذکرشده در بالا که توسط ابزار LHark (انشعابی از LHa) معرفی شد. این قالب در واقع درون فایل‌های آرشیو با نام -lh7- نام‌گذاری شده است، اما Lhasa آن را به صورت داخلی تغییر نام می‌دهد تا از تداخل با الگوریتم دیگری با همین نام جلوگیری کند. از یک پنجره لغزان 128KiB با چند بهبود جزئی در الگوریتم استفاده می‌کند.
داده‌های فشرده‌نشده (ذخیره‌شده)، همان‌طور که توسط ابزار PMarc استفاده می‌شود.
الگوریتم مورداستفاده در نسخه ۱ از ابزار PMarc.
الگوریتم مورداستفاده در نسخه ۲ از ابزار PMarc.

قالب‌های زیر در حال حاضر توسط Lhasa پشتیبانی نمی‌شوند (اما احتمالاً در آینده پشتیبانی خواهند شد):

این قالب‌ها می‌توانند توسط LHa نسخه ۲.۰ از حالت فشرده خارج شوند، اما این ابزار عملاً نمی‌توانست آرشیوهایی با این قالب‌ها تولید کند؛ به نظر می‌رسد این قالب‌ها فقط در نسخه‌های بتا قبل از انتشار نسخه ۲.۰ پشتیبانی می‌شدند. در نتیجه، نمونه‌های اندکی از آن‌ها (در صورت وجود) در دنیای واقعی یافت می‌شود.
گسترش‌های قالب -lh4- به اندازه‌های پنجره حتی بزرگ‌تر.
تولیدشده توسط ابزار PAKLEO متعلق به ThunderSoft (.pll).
مورد استفاده در قالب .swg (بسته SWAG) از SourceWare Archival Group.
تولیدشده توسط LDarc و LDIFF (.lzd).
تولیدشده توسط ابزار Micrognosis Compression Archiver.
قالب تولیدشده توسط ابزار فشرده‌سازی !PopCom برای CP/M.

اگر با نمونه‌هایی از این موارد در دنیای واقعی برخورد کردید، لطفاً با ما تماس بگیرید.

در اینجا چند مثال از نحوه فراخوانی برنامه آورده شده است:

فهرست کردن محتویات فایل foobar.lzs (همراه با تولید خروجی با جزئیات کامل).
استخراج محتویات یک فایل آرشیو خود-استخراج‌گر به نام foobar.exe در دایرکتوری فعلی، با بازنویسی فایل‌های موجود با نام‌های مشابه در صورت وجود.
استخراج محتویات foobar.lzh در /tmp، بازنویسی هرگونه فایل موجود در آنجا، و فرونشاندن خروجی عادی (مشابه رفتار پیش‌فرض بی‌صدای دیگر ابزارهای یونیکس مانند cp(1) یا tar(1)).

https://lhasa.soulsphere.org

باگ‌ها را می‌توان در ردیاب اشکال گیت‌هاب گزارش کرد: https://github.com/fragglet/lhasa

unzip(1), tar(1), gzip(1), bzip2(1), xz(1), lzip(1)

قالب .lzh با ابزار آرشیو MS-DOS کازو هیکو میکی (Kazuhiko Miki) یعنی LArc آغاز شد که از الگوریتم LZSS توسعه‌یافته توسط هاروهیکو اوکومورا (Haruhiko Okumura) و پسوند فایل .lzs استفاده می‌کرد. قالب ظرف (container) دوباره برای LHarc توسط هارویاسو یوشیزاکی (Yoshi) استفاده شد که از الگوریتم جدیدی به نام LZHUF و پسوند .lzh بهره می‌برد. در نسخه‌های بعدی، LHarc به LHA تغییر نام یافت و با الگوریتم‌های فشرده‌سازی کارآمدتر گسترش یافت.

نسخه‌های ابزار LHA بعداً به سیستم‌عامل‌های مختلفی از جمله Amiga، Atari، MacOS، OS/2 و Unix پورت شدند. ابزاری برای MSX-DOS به نام PMarc قالب ظرف را با یک الگوریتم فشرده‌سازی جدید (پسوند .pma) مجدداً استفاده کرد.

نسخه یونیکس این ابزار توسط ماسارو اوکی (Masaru Oki)، نوبوتاکا واتازاکی (Nobutaka Watazaki) و تسوگیو اوکاموتو (Tsugio Okamoto) توسعه یافت، اما تحت مجوزی منتشر شد که با تعاریف نرم‌افزار آزاد یا متن‌باز مطابقت نداشت. Lhasa به عنوان یک جایگزین مستقیم (drop-in replacement) توسعه یافت که نرم‌افزار آزاد و متن‌باز است.

نام "LHA" و پسوند فایل .lzh اشاره‌ای به الگوریتم فشرده‌سازی هستند: ترکیبی از کدگذاری فرهنگ لغت لمپل-زیو-استورر-شیمانسکی (Lempel–Ziv–Storer–Szymanski) و کدگذاری هافمن (Huffman). طرح‌های مشابهی در سایر الگوریتم‌های فشرده‌سازی مانند Deflate (استفاده‌شده در gzip/zlib، فایل‌های تصویری PNG و قالب .zip) استفاده می‌شود.

نسخهٔ فعلی امکان ایجاد فایل‌های آرشیو جدید را نمی‌دهد.

برخی از الگوریتم‌های فشرده‌سازی ناشناخته در حال حاضر پشتیبانی نمی‌شوند (بخش قالب‌های پشتیبانی‌نشده (UNSUPPORTED FORMATS) در بالا را ببینید).

این ابزار در حال حاضر تبدیل قالب متن را برای نام‌فایل‌های غیر ASCII هنگام فهرست کردن محتویات آرشیو انجام نمی‌دهد. نویسه‌های غیر ASCII با علامت سوال جایگزین می‌شوند.

برنامه Lhasa توسط سایمون هاوارد (Simon Howard) نوشته شده و نگهداری می‌شود.

حق نشر © 2011-2025 سایمون هاوارد (Simon Howard).

بدین وسیله اجازه استفاده، کپی، تغییر و/یا توزیع این نرم‌افزار برای هر هدفی با یا بدون دریافت هزینه اعطا می‌شود، مشروط بر اینکه اعلامیه حق نشر بالا و این اعلامیه مجوز در تمامی نسخه‌ها درج شوند.

این نرم‌افزار "همان‌طور که هست" (AS IS) ارائه شده است و نویسنده هرگونه ضمانت را در رابطه با این نرم‌افزار، از جمله کلیه ضمانت‌های ضمنی مربوط به خرید و فروش و تناسب با هدفی خاص سلب می‌کند. تحت هیچ شرایطی نویسنده در قبال خسارات خاص، مستقیم، غیرمستقیم، یا پیامدی یا هرگونه خسارتی ناشی از سلب امکان استفاده، داده‌ها یا سود، خواه در قالب اقدام قراردادی، سهل‌انگاری یا اقدامات شبه‌جرم دیگر ناشی از یا در ارتباط با استفاده یا کارایی این نرم‌افزار، مسئول نخواهد بود.