LBZIP2(1) دستورات کاربر LBZIP2(1)

lbzip2 - فشرده‌ساز و استخراج‌کننده موازی سریع فایل‌های bzip2

lbzip2|bzip2 [-n WTHRS] [-k|-c|-t] [-d] [-1 .. -9] [-f] [-s] [-u] [-v] [-S] [ فایل ... ]

lbunzip2|bunzip2 [-n WTHRS] [-k|-c|-t] [-z] [-f] [-s] [-u] [-v] [-S] [ فایل ... ]

lbzcat|bzcat [-n WTHRS] [-z] [-f] [-s] [-u] [-v] [-S] [ فایل ... ]

lbzip2|bzip2|lbunzip2|bunzip2|lbzcat|bzcat -h

عملوندهای فایل یا ورودی استاندارد را با استفاده از الگوریتم فشرده‌سازی متن مرتب‌سازی بلوکی باروز-ویلر به فایل‌های معمولی یا خروجی استاندارد فشرده یا از حالت فشرده خارج می‌کند. ابزار lbzip2 حتی هنگام استخراج فایل‌های .bz2 ساخته‌شده توسط bzip2 استاندارد، از چندین رشته اجرایی (thread) و یک تفکیک‌کننده وابسته به ورودی بهره می‌برد.

میزان فشرده‌سازی معمولاً به‌طور قابل‌توجهی بهتر از فشرده‌سازهای متداول‌تر مبتنی بر LZ77/LZ78 بوده و با بیشتر فشرده‌سازهای آماری خانواده PPM رقابت می‌کند.

فشرده‌سازی همواره انجام می‌شود، حتی اگر فایل فشرده‌شده کمی بزرگ‌تر از نسخه اصلی گردد. بدترین حالت انبساط برای فایل‌های با اندازه صفر رخ می‌دهد که به چهارده بایت افزایش می‌یابند. داده‌های تصادفی (شامل خروجی بیشتر فشرده‌سازها) با انبساط مجانبی حدود ۰٫۵٪ کدگذاری می‌شوند.

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

حالت پیش‌فرض عملیات، فشرده‌سازی است. اگر ابزار به‌صورت lbunzip2 یا bunzip2 فراخوانی شود، حالت به استخراج تغییر می‌یابد. فراخوانی ابزار به‌صورت lbzcat یا bzcat حالت استخراج را انتخاب کرده و جریان بایتی استخراج‌شده را در خروجی استاندارد می‌نویسد.

تعداد رشته‌های اجرایی (thread) فشرده‌سازی/استخراج را روی WTHRS تنظیم می‌کند. اگر این گزینه مشخص نشود، lbzip2 تلاش می‌کند تعداد پردازنده‌های برخط سیستم را بررسی کند (در صورتی که محیط کامپایل و اجرا از آن پشتیبانی کنند)، یا با خطا خارج می‌شود (اگر قادر به تعیین تعداد پردازنده‌های برخط نباشد).
عملوندهای فایل را پس از فشرده‌سازی یا استخراج موفق حذف نمی‌کند. فایل‌های ورودی معمولی دارای بیش از یک پیوند (hard link) را باز می‌کند.
خروجی را در خروجی استاندارد می‌نویسد، حتی زمانی که عملوندهای فایل ارائه شده باشند. این گزینه شامل -k بوده و -t را نفی می‌کند.
بررسی سلامت استخراج؛ خروجی را به‌جای نوشتن در فایل‌ها یا خروجی استاندارد دور می‌ریزد. این گزینه شامل -k بوده و -c را نفی می‌کند. تقریباً معادل دادن -c و هدایت خروجی استاندارد به سیاهچاله (bit bucket) است.
اجرای استخراج را مستقل از حالت انتخابی با نام فراخوانی تحمیل می‌کند.
اجرای فشرده‌سازی را مستقل از حالت انتخابی با نام فراخوانی تحمیل می‌کند.
-1 .. -9
اندازه بلوک فشرده‌سازی را از ۱۰۰ کیلوبایت تا ۹۰۰ کیلوبایت، با گام‌های ۱۰۰ کیلوبایتی تنظیم می‌کند. در هنگام استخراج نادیده گرفته می‌شود. همچنین بخش «اندازه بلوک» در ادامه را ببینید.
نام مستعار برای -1.
نام مستعار برای -9. این حالت پیش‌فرض است.
باز کردن فایل‌های ورودی غیرمعمولی. باز کردن فایل‌های ورودی با بیش از یک پیوند، که در صورت مشخص نشدن -k پیوندها را می‌شکند. تلاش برای حذف هر فایل خروجی قبل از باز کردن آن. به‌طور پیش‌فرض lbzip2 فایل‌های موجود را بازنویسی نمی‌کند؛ اگر می‌خواهید بازنویسی انجام شود، باید گزینه -f را مشخص کنید. اگر گزینه‌های -c و -d نیز داده شده باشند، فایل‌هایی که در قالب bzip2 نیستند رد نمی‌شوند بلکه بدون تغییر کپی می‌گردند؛ بدون گزینه -f برنامه lbzip2 پس از رسیدن به فایلی که در قالب bzip2 نیست متوقف می‌شود.
کاهش مصرف حافظه به بهای کاهش کارایی.
تفکیک متوالی بلوک‌های ورودی. این کار ممکن است نسبت فشرده‌سازی را بهبود داده و مصرف پردازنده را کاهش دهد، اما مقیاس‌پذیری موازی را کاهش می‌دهد.
حالت پرگو. چاپ اطلاعات دقیق‌تر درباره پیشرفت فشرده‌سازی/استخراج در خطای استاندارد: قبل از پردازش هر فایل، پیامی شامل نام فایل‌های ورودی و خروجی چاپ می‌شود؛ حین فشرده‌سازی/استخراج، درصد تقریبی تکمیل و زمان تخمینی اتمام (تنها در صورتی که خطای استاندارد به یک ترمینال متصل باشد) نمایش می‌یابد؛ پس از پردازش هر فایل پیامی شامل نسبت فشرده‌سازی، صرفه‌جویی در فضا، کل زمان فشرده‌سازی و میانگین سرعت فشرده‌سازی/استخراج (بایت‌های داده معمولی پردازش‌شده در ثانیه) چاپ می‌شود.
چاپ آمار متغیرهای شرطی در خطای استاندارد برای هر عملیات فشرده‌سازی/استخراج تکمیل‌شده. برای تحلیل کارایی و پروفایلینگ مفید است.
جهت سازگاری با bzip2 پذیرفته شده و در غیر این صورت نادیده گرفته می‌شوند.
چاپ راهنمای استفاده از خط فرمان در خروجی استاندارد و خروج موفقیت‌آمیز.
چاپ اطلاعات مجوز و نگارش در خروجی استاندارد و خروج موفقیت‌آمیز.

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

فایل
فایل‌های مورد نظر برای فشرده‌سازی یا استخراج را مشخص می‌کند.

عملوندهای فایل با پسوندهای نام .bz2, .tbz, .tbz2 و .tz2 در هنگام فشرده‌سازی نادیده گرفته می‌شوند. در هنگام استخراج، پسوندهای .bz2 در نام فایل‌های خروجی حذف می‌شوند؛ پسوندهای .tbz, .tbz2 و .tz2 با .tar جایگزین می‌گردند؛ سایر نام‌های فایل با پسوند .out ذخیره می‌شوند. اگر سیگنال INT یا TERM به lbzip2 ارسال شود، فایل خروجی معمولی در حال ایجاد پیش از خروج حذف می‌گردد.

اگر هیچ فایلی داده نشود، lbzip2 به‌صورت یک فیلتر کار کرده و ورودی استاندارد را پردازش و در خروجی استاندارد می‌نویسد. در این حالت، lbzip2 از نوشتن خروجی فشرده در ترمینال (یا خواندن ورودی فشرده از ترمینال) خودداری می‌کند، زیرا خروجی باینری در ترمینال کاملاً نامفهوم و بی‌فایده خواهد بود.

0
اگر lbzip2 با موفقیت به پایان برسد. فرض بر این است که هر زمان تلاش کند، lbzip2 در نوشتن در خطای استاندارد با شکست مواجه نشود.
1
اگر lbzip2 با یک خطای مهلک روبرو شود.
4
اگر lbzip2 هشدارهایی صادر کند بدون اینکه با خطای مهلکی روبرو شود. فرض بر این است که هر زمان تلاش کند، lbzip2 در نوشتن در خطای استاندارد با شکست مواجه نشود.
اگر lbzip2 قصد خروج با وضعیت ۱ به دلیل یک خطای مهلک را داشته باشد، اما چنین سیگنالی با عمل موروثی SIG_DFL قبلاً برای lbzip2 ایجاد شده باشد، آنگاه lbzip2 پس از پاکسازی فایل‌های خروجی ناقص، از طریق یکی از این سیگنال‌ها خاتمه می‌یابد.
اگر یک ارزیابی زمان اجرا (runtime assertion) شکست بخورد (یعنی lbzip2 یک باگ در خودش پیدا کند). امید است کسی که باینری شما را کامپایل کرده آن‌قدر جسور نبوده باشد که #define NDEBUG را تعریف کرده باشد.
ابزار lbzip2 این سیگنال‌ها را دریافت می‌کند تا بتواند فایل خروجی قطع‌شده را حذف کند. در چنین مواردی، lbzip2 با ارسال مجدد (یکی از) سیگنال‌های دریافت‌شده خارج می‌شود.

برنامه lbzip2 فایل‌های بزرگ را در قالب بلوک‌ها فشرده می‌کند. این برنامه می‌تواند با اندازه‌های مختلف بلوک از ۱۰۰ کیلوبایت تا ۹۰۰ کیلوبایت با گام‌های ۱۰۰ کیلوبایتی کار کند و تنها به میزان نیازش حافظه تخصیص می‌دهد. اندازه بلوک هم بر نسبت فشرده‌سازی به‌دست‌آمده و هم بر میزان حافظه مورد نیاز برای فشرده‌سازی و استخراج اثر می‌گذارد. سرعت فشرده‌سازی و استخراج عملاً تحت تأثیر اندازه بلوک قرار نمی‌گیرد، مشروط بر اینکه فایل مورد پردازش آن‌قدر بزرگ باشد که بتوان آن را بین تمام رشته‌های پردازشی تقسیم کرد.

فلگ‌های -1 تا -9 اندازه بلوک را به ترتیب از ۱۰۰٬۰۰۰ بایت تا ۹۰۰٬۰۰۰ بایت (پیش‌فرض) مشخص می‌کنند. در زمان استخراج، اندازه بلوک استفاده‌شده برای فشرده‌سازی از درون فایل فشرده خوانده می‌شود -- بنابراین فلگ‌های -1 تا -9 در طول استخراج بی‌اثر بوده و نادیده گرفته می‌شوند.

اندازه‌های بزرگ‌تر بلوک بازده نهایی به‌شدت کاهنده‌ای دارند؛ بیشترین میزان فشرده‌سازی از دویست یا سیصد کیلوبایت نخست اندازه بلوک حاصل می‌شود، واقعیتی که هنگام استفاده از lbzip2 روی سیستم‌های با منابع محدود ارزش به یاد سپردن را دارد. همچنین درک این نکته مهم است که حافظه مورد نیاز استخراج در زمان فشرده‌سازی با انتخاب اندازه بلوک تعیین می‌شود. به‌طور کلی باید سعی کنید از بزرگ‌ترین اندازه بلوکی که محدودیت‌های حافظه اجازه می‌دهد استفاده کنید.

نکته مهم دیگر برای فایل‌های کوچک صادق است. طبق طراحی، در هر لحظه تنها یکی از رشته‌های پردازشی lbzip2 می‌تواند روی یک بلوک کار کند. این بدان معناست که اگر تعداد بلوک‌ها در فایل فشرده کمتر از تعداد پردازنده‌های برخط باشد، برخی از رشته‌های پردازشی در تمام طول مدت بیکار خواهند ماند. بنابراین فشرده‌سازی فایل‌های کوچک با اندازه‌های بلوک کوچک‌تر می‌تواند سرعت فشرده‌سازی و استخراج را به‌طور قابل‌توجهی افزایش دهد. این تفاوت سرعت با افزایش تعداد هسته‌های پردازنده ملموس‌تر می‌شود.

برخورد با شرایط خطا کم‌رضایت‌بخش‌ترین جنبه lbzip2 است. خط‌مشی برنامه این است که تلاش کند فایل‌سیستم را در یک وضعیت پایدار رها کرده و سپس خارج شود، حتی اگر به معنای پردازش نکردن برخی از فایل‌های ذکرشده در خط فرمان باشد.

«وضعیت پایدار» به این معناست که یک فایل یا در شکل فشرده‌شده یا در شکل فشرده‌نشده وجود داشته باشد، نه هر دو. این به قاعده «در صورت بروز شرایط خطا، فایل خروجی را حذف کرده و فایل ورودی را دست‌نخورده باقی بگذار» خلاصه می‌شود. فایل‌های ورودی تنها زمانی حذف می‌شوند که بتوان کاملاً مطمئن بود فایل خروجی با موفقیت نوشته و بسته شده است.

ابزار lbzip2 برای کار به انواع مختلفی از منابع سیستمی نیاز دارد. این منابع شامل حافظه، رشته‌های پردازشی، موتکس‌ها (mutexes) و متغیرهای شرطی (condition variables) هستند. خط‌مشی برنامه این است که در صورت وقوع شکست در تخصیص منابع، عملیات را متوقف کند.

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

ابزار lbzip2 تلاش می‌کند داده‌ها را با انجام چندین تبدیل غیربدیهی فشرده کند. هر فشرده‌سازی یک فایل متضمن این فرض است که فایل فشرده‌شده می‌تواند برای بازتولید نسخه اصلی استخراج شود. تلاش‌های زیادی در طراحی، کدنویسی و آزمودن انجام شده تا اطمینان حاصل شود این برنامه به‌درستی کار می‌کند. با این حال، پیچیدگی الگوریتم‌ها و به‌ویژه وجود موارد خاص مختلف در کد که با احتمال بسیار کم اما غیرصفر رخ می‌دهند، رد کردن کامل احتمال وجود باگ در برنامه را بسیار دشوار می‌سازد. این بدان معنا نیست که این برنامه ذاتاً غیرقابل‌اعتماد است؛ در واقع امید زیادی وجود دارد که عکس آن صادق باشد -- lbzip2 با دقت فراوان ساخته شده و به‌طور گسترده آزمایش شده است.

به عنوان یک بررسی خودکار برای محافظت از شما، lbzip2 از چیدمان‌های ۳۲ بیتی CRC استفاده می‌کند تا اطمینان یابد نسخه استخراج‌شده یک فایل دقیقاً با نسخه اصلی یکسان است. این کار از آسیب دیدن داده‌های فشرده و باگ‌های کشف‌نشده در lbzip2 (که امید است نامحتمل باشد) محافظت می‌کند. احتمال شناسایی نشدن خرابی داده‌ها بسیار ناچیز است، حدود یک در چهار میلیارد برای هر فایل پردازش‌شده. با این حال آگاه باشید که این بررسی هنگام استخراج رخ می‌دهد، بنابراین تنها می‌تواند به شما بگوید که مشکلی وجود دارد.

بررسی‌های CRC تنها می‌توانند فایل‌های آسیب‌دیده را شناسایی کنند، اما نمی‌توانند به شما در بازیابی داده‌های اصلی و فشرده‌نشده کمک نمایند. با این حال، به دلیل ماهیت بلوکی الگوریتم فشرده‌سازی، ممکن است بازیابی بخش‌هایی از فایل آسیب‌دیده امکان‌پذیر باشد، حتی اگر برخی بلوک‌ها از بین رفته باشند.

فایل‌های ورودی مجزا رشته‌های پردازشی را به اشتراک نمی‌گذارند؛ در هر لحظه حداکثر روی یک فایل ورودی کار می‌شود.

برنامه lbzip2 در ابتدا توسط Laszlo Ersek <lacos@caesar.elte.hu>، http://lacos.hu نوشته شد. نگارش‌های 2.0 و پس از آن توسط Mikolaj Izdebski نوشته شده‌اند.

Copyright (C) 2011, 2012, 2013 Mikolaj Izdebski
Copyright (C) 2008, 2009, 2010 Laszlo Ersek
Copyright (C) 1996 Julian Seward

This manual page is part of lbzip2, version 2.5. lbzip2 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

lbzip2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with lbzip2. If not, see http://www.gnu.org/licenses.

Adam Maulis at ELTE IIG; Julian Seward; Paul Sladen; Michael Thomas from Caltech HEP; Bryan Stillwell; Zsolt Bartos-Elekes; Imre Csatlos; Gabor Kovesdan; Paul Wise; Paolo Bonzini; Department of Electrical and Information Engineering at the University of Oulu; Yuta Mori.

http://lbzip2.org
bzip2(1)
http://www.bzip.org
pbzip2(1)
http://compression.ca/pbzip2
bzip2smp(1)
http://bzip2smp.sourceforge.net
smpbzip2(1)
http://home.student.utwente.nl/n.werensteijn/smpbzip2
dbzip2(1)
http://www.mediawiki.org/wiki/Dbzip2
p7zip(1)
http://p7zip.sourceforge.net
26 March 2014 lbzip2-2.5