| bzip2(1) | General Commands Manual | bzip2(1) |
نام (NAME)
bzip2, bunzip2 -
فشردهساز
فایل مبتنی
بر
مرتبسازی
بلوکی،
نسخه 1.0.8
bzcat - باز کردن
فایلهای
فشرده در
خروجی
استاندارد
bzip2recover - بازیابی
دادهها از
فایلهای
آسیبدیده
bzip2
خلاصه دستور (SYNOPSIS)
bzip2 [ -cdfkqstvzVL123456789 ] [ filenames
... ]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [ filenames ... ]
bunzip2 [ -h|--help ]
bzcat [ -s ] [ filenames ... ]
bzcat [ -h|--help ]
bzip2recover filename
توضیحات (DESCRIPTION)
دستور bzip2 فایلها را با استفاده از الگوریتم فشردهسازی متن مرتبسازی بلوکی باروز-ویلر (Burrows-Wheeler) و کدگذاری هافمن فشرده میکند. فشردهسازی معمولاً به مراتب بهتر از روشهای سنتیتر مبتنی بر LZ77/LZ78 است و به کارایی خانواده فشردهسازهای آماری PPM نزدیک میشود.
گزینههای خط فرمان عمداً بسیار شبیه به گزینههای GNU gzip طراحی شدهاند، اما کاملاً یکسان نیستند.
دستور bzip2 انتظار دارد فهرستی از نام فایلها به همراه پرچمهای خط فرمان ارائه شود. هر فایل با یک نسخه فشرده از خودش به نام "original_name.bz2" جایگزین میشود. هر فایل فشرده همان تاریخ تغییر، مجوزها و در صورت امکان همان مالکیت فایل اصلی متناظر را حفظ میکند تا این ویژگیها هنگام باز کردن فایل بهدرستی بازیابی شوند. مدیریت نام فایل ابتدایی است؛ به این معنا که سازوکاری برای حفظ نام، مجوزها، مالکیتها یا تاریخهای فایلهای اصلی در سامانههای فایلی که فاقد این مفاهیم هستند یا محدودیتهای شدیدی در طول نام فایل دارند (مانند MS-DOS) وجود ندارد.
دستورهای bzip2 و bunzip2 بهطور پیشفرض فایلهای موجود را بازنویسی نمیکنند. اگر مایل به انجام این کار هستید، پرچم -f را مشخص کنید.
اگر نام هیچ فایلی مشخص نشود، bzip2 از ورودی استاندارد فشردهسازی کرده و در خروجی استاندارد مینویسد. در این حالت، bzip2 از نوشتن خروجی فشرده در ترمینال خودداری میکند، چرا که این خروجی کاملاً ناخوانا و در نتیجه بیفایده خواهد بود.
دستور bunzip2 (یا bzip2 -d) تمام فایلهای مشخصشده را بازگشایی میکند. فایلهایی که توسط bzip2 ایجاد نشده باشند شناسایی و نادیده گرفته میشوند، و یک پیام هشدار صادر میشود. bzip2 تلاش میکند تا نام فایل بازگشاییشده را بر اساس نام فایل فشرده به صورت زیر حدس بزند:
filename.bz2 تبدیل
میشود به filename
filename.bz تبدیل
میشود به filename
filename.tbz2 تبدیل
میشود به
filename.tar
filename.tbz تبدیل
میشود به
filename.tar
anyothername تبدیل
میشود به
anyothername.out
اگر پسوند فایل به یکی از پسوندهای شناختهشده .bz2، .bz، .tbz2 یا .tbz ختم نشود، bzip2 پیام میدهد که نمیتواند نام فایل اصلی را حدس بزند، و نام اصلی را به همراه پسوند .out استفاده میکند.
همانند فشردهسازی، عدم ارائه نام فایل باعث بازگشایی از ورودی استاندارد به خروجی استاندارد میشود.
دستور bunzip2 فایلی را که از الحاق دو یا چند فایل فشرده تشکیل شده باشد، بهدرستی بازگشایی میکند. نتیجه حاصل، الحاق فایلهای غیرفشرده متناظر خواهد بود. آزمون یکپارچگی (-t) فایلهای فشرده الحاقشده نیز پشتیبانی میشود.
همچنین میتوانید با استفاده از پرچم -c فایلها را در خروجی استاندارد فشرده یا بازگشایی کنید. چند فایل میتوانند به این روش فشرده و بازگشایی شوند. خروجیهای حاصل به صورت متوالی به stdout فرستاده میشوند. فشردهسازی چند فایل به این روش، جریانی شامل چندین نمایش فایل فشرده ایجاد میکند. چنین جریانی تنها توسط نسخه 0.9.0 یا بالاتر bzip2 بهدرستی بازگشایی میشود. نسخههای پیشین bzip2 پس از بازگشایی اولین فایل موجود در جریان متوقف میشوند.
دستور bzcat (یا bzip2 -dc) تمام فایلهای مشخصشده را در خروجی استاندارد بازگشایی میکند.
دستور bzip2 آرگومانها را به ترتیب از متغیرهای محیطی BZIP2 و BZIP میخواند و آنها را پیش از هر آرگومان خواندهشده از خط فرمان پردازش میکند. این ویژگی روشی مناسب برای ارائه آرگومانهای پیشفرض فراهم میآورد.
فشردهسازی همیشه انجام میشود، حتی اگر حجم فایل فشرده کمی بزرگتر از فایل اصلی شود. فایلهای کمتر از حدود صد بایت معمولاً بزرگتر میشوند، زیرا سازوکار فشردهسازی دارای سربار ثابتی در حدود ۵۰ بایت است. دادههای تصادفی (شامل خروجی بیشتر فشردهسازهای فایل) با حدود ۸٫۰۵ بیت بر هر بایت کدگذاری میشوند که افزایشی در حدود ۰٫۵٪ به دنبال دارد.
برای محافظت از شما به عنوان یک خودآزمایی، bzip2 از کدهای مقابله با خطای ۳۲-بیتی (CRC) استفاده میکند تا مطمئن شود نسخه بازگشاییشده یک فایل با فایل اصلی یکسان است. این کار از آسیب دیدن دادههای فشرده و از خطاهای نرمافزاری کشفنشده در bzip2 (که امید است بسیار نامحتمل باشند) محافظت میکند. شانس شناسایی نشدن آسیب دادهها بسیار ناچیز است؛ حدود یک مورد در چهار میلیارد برای هر فایل پردازششده. با این حال آگاه باشید که این بررسی هنگام بازگشایی انجام میشود، بنابراین تنها میتواند به شما اطلاع دهد که اشکالی رخ داده است. این بررسی نمیتواند در بازیابی دادههای غیرفشرده اصلی کمکی کند. شما میتوانید از bzip2recover برای تلاش در جهت بازیابی دادهها از فایلهای آسیبدیده استفاده کنید.
مقدارهای بازگشتی: ۰ برای خروج عادی، ۱ برای مشکلات محیطی (پیدا نشدن فایل، پرچمهای نامعتبر، خطاهای ورودی/خروجی و غیره)، ۲ برای نشان دادن فایل فشرده خراب، ۳ برای خطای ناسازگاری داخلی (مانند باگ) که منجر به توقف بحرانی (panic) bzip2 شده باشد.
گزینهها (OPTIONS)
- -c --stdout
- فشردهسازی یا بازگشایی در خروجی استاندارد.
- -d --decompress
- اجبار به بازگشایی. برنامههای bzip2، bunzip2 و bzcat در واقع یک برنامه هستند و تصمیم درباره اینکه چه عملیاتی انجام شود بر اساس نام استفادهشده گرفته میشود. این پرچم آن سازوکار را لغو میکند و bzip2 را وادار به بازگشایی میسازد.
- -z --compress
- مکمل -d: فشردهسازی را بدون توجه به نام فراخوانی تحمیل میکند.
- -t --test
- بررسی یکپارچگی فایل(های) مشخصشده بدون بازگشایی آنها. این عملیات در واقع یک بازگشایی آزمایشی انجام داده و نتیجه را دور میریزد.
- -f --force
- اجبار به
بازنویسی
فایلهای
خروجی. در
حالت عادی،
bzip2
فایلهای
خروجی
موجود را
بازنویسی
نخواهد کرد.
همچنین bzip2
را وادار
میکند تا
پیوندهای
سخت (hard links) به
فایلها را
قطع کند،
کاری که در
غیر این
صورت انجام
نمیدهد.
دستور bzip2 در حالت عادی از بازگشایی فایلهایی که بایتهای جادویی سرآیند صحیح را ندارند خودداری میکند. با این حال اگر اجبار شود (-f)، چنین فایلهایی را بدون تغییر عبور میدهد. این رفتار مشابه رفتار GNU gzip است.
- -k --keep
- نگهداشتن (عدم حذف) فایلهای ورودی در حین فشردهسازی یا بازگشایی.
- -s --small
- کاهش مصرف
حافظه برای
فشردهسازی،
بازگشایی و
آزمایش.
فایلها با
استفاده از
الگوریتم
اصلاحشدهای
بازگشایی و
آزمایش
میشوند که
تنها به ۲٫۵
بایت به
ازای هر
بایت بلوک
نیاز دارد.
این بدان
معناست که
هر فایلی
میتواند
در ۲۳۰۰
کیلوبایت
حافظه
بازگشایی
شود، هرچند
تقریباً با
نصف سرعت
عادی.
در زمان فشردهسازی، -s اندازه بلوک ۲۰۰ کیلوبایت را انتخاب میکند که مصرف حافظه را در حدود همان مقدار محدود میسازد، البته به بهای کاهش ضریب فشردهسازی. بهطور خلاصه، اگر سامانه شما با کمبود حافظه مواجه است (۸ مگابایت یا کمتر)، از -s برای همه کارها استفاده کنید. بخش مدیریت حافظه در ادامه را ببینید.
- -q --quiet
- حذف پیامهای هشدار غیرضروری. پیامهای مربوط به خطاهای ورودی/خروجی و سایر رویدادهای بحرانی حذف نخواهند شد.
- -v --verbose
- حالت پرحرف -- نمایش ضریب فشردهسازی برای هر فایل پردازششده. تکرار پرچمهای -v سطح جزئیات را افزایش میدهد و اطلاعات زیادی نمایش میدهد که در درجه اول برای اهداف عیبیابی مفید است.
- -h --help
- چاپ پیام راهنما و خروج.
- -L --license -V --version
- نمایش نسخه نرمافزار، شرایط مجوز و ضوابط آن.
- -1 (or --fast) to -9 (or --best)
- تنظیم اندازه بلوک روی ۱۰۰ کیلوبایت، ۲۰۰ کیلوبایت ... ۹۰۰ کیلوبایت هنگام فشردهسازی. هنگام بازگشایی هیچ اثری ندارد. بخش مدیریت حافظه در ادامه را ببینید. نامهای مستعار --fast و --best در درجه اول برای سازگاری با GNU gzip هستند. بهویژه، --fast عملیات را به طرز چشمگیری سریعتر نمیکند، و --best صرفاً رفتار پیشفرض را انتخاب مینماید.
- --
- رفتار با تمام آرگومانهای بعدی به عنوان نام فایل، حتی اگر با خط تیره آغاز شوند. این گزینه برای این است که بتوانید فایلهایی با نامهایی که با خط تیره شروع میشوند را پردازش کنید، به عنوان مثال: bzip2 -- -myfilename.
- --repetitive-fast --repetitive-best
- این پرچمها در نسخههای 0.9.5 و بالاتر زائد هستند. آنها در نسخههای اولیه کنترل تقریبی روی رفتار الگوریتم مرتبسازی فراهم میکردند که گاهی اوقات مفید بود. نسخههای 0.9.5 و بالاتر دارای الگوریتم بهبودیافتهای هستند که این پرچمها را بیاثر و غیرضروری میسازد.
مدیریت حافظه (MEMORY MANAGEMENT)
دستور bzip2 فایلهای بزرگ را در قالب بلوکها فشرده میکند. اندازه بلوک هم بر ضریب فشردهسازی بهدستآمده و هم بر میزان حافظه مورد نیاز برای فشردهسازی و بازگشایی تأثیر میگذارد. پرچمهای -1 تا -9 به ترتیب اندازه بلوک را از ۱۰۰٬۰۰۰ بایت تا ۹۰۰٬۰۰۰ بایت (پیشفرض) تعیین میکنند. در زمان بازگشایی، اندازه بلوک استفادهشده برای فشردهسازی از سرآیند فایل فشرده خوانده میشود، و سپس bunzip2 دقیقاً به همان اندازه که برای بازگشایی فایل لازم است برای خود حافظه تخصیص میدهد. از آنجا که اندازههای بلوک در فایلهای فشرده ذخیره میشوند، در نتیجه پرچمهای -1 تا -9 به هنگام بازگشایی بیربط بوده و نادیده گرفته میشوند.
نیازمندیهای فشردهسازی و بازگشایی، بر حسب بایت، میتوانند به این صورت تخمین زده شوند:
Compression: 400 k + ( 8 x block size )
Decompression: 100 k + ( 4 x block size ), or
100 k + ( 2.5 x block size )
اندازههای بزرگتر بلوک بازده حاشیهای به سرعت کاهندهای دارند. بیشترین فشردهسازی از دویست یا سیصد کیلوبایت اولیه اندازه بلوک حاصل میشود؛ واقعیتی که هنگام استفاده از bzip2 روی سامانههای با حافظه کم باید در نظر داشت. همچنین درک این نکته حائز اهمیت است که نیاز حافظه برای بازگشایی، در زمان فشردهسازی و با انتخاب اندازه بلوک تعیین میشود.
برای فایلهای فشردهشده با اندازه بلوک پیشفرض ۹۰۰ کیلوبایت، bunzip2 به حدود ۳۷۰۰ کیلوبایت برای بازگشایی نیاز دارد. برای پشتیبانی از بازگشایی هر فایلی روی یک سامانه ۴ مگابایتی، bunzip2 گزینهای دارد تا با حدود نصف این مقدار حافظه، یعنی تقریباً ۲۳۰۰ کیلوبایت، عملیات بازگشایی را انجام دهد. سرعت بازگشایی نیز به نصف کاهش مییابد، بنابراین باید از این گزینه تنها در مواقع لزوم استفاده کنید. پرچم مربوطه -s است.
بهطور کلی، سعی کنید از بزرگترین اندازه بلوکی که محدودیتهای حافظه اجازه میدهد استفاده کنید، چرا که فشردهسازی بهدستآمده را به حداکثر میرساند. سرعت فشردهسازی و بازگشایی عملاً تحت تأثیر اندازه بلوک قرار نمیگیرد.
نکته مهم دیگر در مورد فایلهایی صدق میکند که در یک بلوک جا میشوند -- این شامل بیشتر فایلهایی است که در هنگام استفاده از اندازه بلوک بزرگ با آنها مواجه میشوید. میزان حافظه واقعی مورد استفاده متناسب با اندازه فایل است، چرا که فایل از یک بلوک کوچکتر است. برای مثال، فشردهسازی فایلی به طول ۲۰٬۰۰۰ بایت با پرچم -9 باعث میشود فشردهساز حدود ۷۶۰۰ کیلوبایت حافظه تخصیص دهد، اما تنها 400 k + 20000 * 8 = 560 کیلوبایت از آن را لمس کند. بهطور مشابه، برنامه بازگشایی ۳۷۰۰ کیلوبایت حافظه تخصیص میدهد اما تنها 100 k + 20000 * 4 = 180 کیلوبایت از آن را لمس مینماید.
در اینجا جدولی آمده است که حداکثر میزان مصرف حافظه را برای اندازههای مختلف بلوک خلاصه میکند. همچنین اندازه فشرده کل برای ۱۴ فایل مجموعه فشردهسازی متن کلگری (Calgary Text Compression Corpus) با مجموع ۳٬۱۴۱٬۶۲۲ بایت ثبت شده است. این ستون دیدی کلی از نحوه تغییر میزان فشردهسازی با اندازه بلوک ارائه میدهد. این ارقام مزیت اندازههای بزرگتر بلوک را برای فایلهای بزرگتر کمتر از واقع نشان میدهند، چرا که بیشتر فایلهای این مجموعه آزمایشی کوچک هستند.
Compress Decompress Decompress Corpus
Flag usage usage -s usage Size
-1 1200k 500k 350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642
بازیابی دادهها از فایلهای آسیبدیده (RECOVERING DATA FROM DAMAGED FILES)
دستور bzip2 فایلها را در قالب بلوکهایی که معمولاً ۹۰۰ کیلوبایت طول دارند فشرده میکند. هر بلوک به صورت مستقل مدیریت میشود. اگر خطای رسانه یا انتقال باعث آسیب دیدن یک فایل bz2. چندبلوکی شود، ممکن است بتوان دادهها را از بلوکهای سالم موجود در فایل بازیابی کرد.
نمایش فشرده هر بلوک با یک الگوی ۴۸-بیتی محدود شده است، که یافتن مرزهای بلوک را با اطمینان معقول امکانپذیر میسازد. هر بلوک همچنین CRC سیودو بیتی مخصوص به خود را دارد، بنابراین بلوکهای آسیبدیده را میتوان از بلوکهای دستنخورده تشخیص داد.
برنامه bzip2recover ابزار سادهای است که هدف آن جستجو برای بلوکها در فایلهای bz2. و نوشتن هر بلوک در فایل bz2. اختصاصی خود است. سپس میتوانید از bzip2 -t برای آزمایش یکپارچگی فایلهای حاصل استفاده کنید و فایلهایی را که آسیبی ندیدهاند بازگشایی نمایید.
برنامه bzip2recover تنها یک آرگومان میگیرد که نام فایل آسیبدیده است، و تعدادی فایل با نامهای "rec00001file.bz2" و "rec00002file.bz2" و غیره حاوی بلوکهای استخراجشده مینویسد. نامهای فایلهای خروجی به گونهای طراحی شدهاند که استفاده از نویسههای عمومی (wildcards) در پردازشهای بعدی -- به عنوان مثال "bzip2 -dc rec*file.bz2 > recovered_data" -- فایلها را به ترتیب صحیح پردازش کند.
ابزار bzip2recover بیشترین کاربرد را در برخورد با فایلهای بزرگ bz2. خواهد داشت، زیرا این فایلها حاوی بلوکهای زیادی هستند. بدیهی است که استفاده از آن روی فایلهای تکبلوکی آسیبدیده بیفایده است، زیرا یک بلوک آسیبدیده را نمیتوان بازیابی کرد. اگر مایل هستید هرگونه احتمال از دست رفتن داده ناشی از خطاهای رسانه یا انتقال را به حداقل برسانید، میتوانید فشردهسازی با اندازه بلوک کوچکتر را مد نظر قرار دهید.
نکات کارایی (PERFORMANCE NOTES)
مرحله مرتبسازی در فشردهسازی رشتههای مشابه را در فایل گرد هم میآورد. به همین دلیل، فایلهایی حاوی توالیهای بسیار طولانی از نمادهای تکراری مانند "aabaabaabaab ..." (که چند صد بار تکرار شده باشد) ممکن است کندتر از حد معمول فشرده شوند. نسخههای 0.9.5 و بالاتر در این زمینه بسیار بهتر از نسخههای قبلی عمل میکنند. نسبت بین بدترین حالت و زمان متوسط فشردهسازی در حدود ۱۰ به ۱ است. برای نسخههای پیشین این رقم بیشتر در حدود ۱۰۰ به ۱ بود. در صورت تمایل میتوانید از گزینه -vvvv برای نظارت بر پیشرفت با جزئیات بالا استفاده کنید.
سرعت بازگشایی تحت تأثیر این پدیدهها قرار نمیگیرد.
دستور bzip2 معمولاً چند مگابایت حافظه برای کار تخصیص میدهد و سپس به شکلی کاملاً تصادفی در سرتاسر آن پیمایش میکند. این بدان معناست که کارایی چه برای فشردهسازی و چه برای بازگشایی، تا حد زیادی توسط سرعتی که سامانه شما میتواند به خطاهای حافظه موقت (cache misses) سرویسدهی کند تعیین میشود. به همین دلیل، مشاهده شده است که تغییرات کوچک در کد برای کاهش نرخ عدم برخورد در حافظه موقت، بهبودهای بسیار چشمگیری در عملکرد به همراه دارد. به نظر میرسد bzip2 بهترین کارایی را روی رایانههایی با حافظه موقت (کش) بسیار بزرگ ارائه دهد.
نکات و هشدارها (CAVEATS)
پیامهای خطای ورودی/خروجی آنطور که میتوانستند کارآمد و مفید نیستند. bzip2 تلاش زیادی میکند تا خطاهای ورودی/خروجی را تشخیص داده و به تمیزی خارج شود، اما جزئیات مربوط به علت مشکل گاهی گمراهکننده به نظر میرسد.
این صفحه راهنما مربوط به نسخه 1.0.8 از bzip2 است. دادههای فشرده ایجادشده توسط این نسخه با انتشارهای عمومی پیشین، یعنی نسخههای 0.1pl2، 0.9.0، 0.9.5، 1.0.0، 1.0.1، 1.0.2 و بالاتر کاملاً سازگاری رو به جلو و رو به عقب دارد؛ اما با این استثنا: نسخه 0.9.0 و بالاتر میتواند چندین فایل فشرده الحاقشده را بهدرستی بازگشایی کند. نسخه 0.1pl2 نمیتواند این کار را انجام دهد؛ این نسخه تنها پس از بازگشایی اولین فایل موجود در جریان متوقف خواهد شد.
نسخههای bzip2recover پیش از 1.0.2 از اعداد صحیح ۳۲-بیتی برای نمایش موقعیتهای بیت در فایلهای فشرده استفاده میکردند، بنابراین نمیتوانستند فایلهای فشرده با حجم بیش از ۵۱۲ مگابایت را پردازش کنند. نسخههای 1.0.2 و بالاتر از مقادیر صحیح ۶۴-بیتی در برخی پلتفرمهایی که از آنها پشتیبانی میکنند (مقصدهای پشتیبانیشده توسط GNU و ویندوز) استفاده میکنند. برای مشخص شدن اینکه آیا bzip2recover با چنین محدودیتی کامپایل شده است یا خیر، آن را بدون آرگومان اجرا کنید. در هر حال در صورتی که بتوانید برنامه را با تنظیم MaybeUInt64 به عنوان یک عدد صحیح ۶۴-بیتی بدون علامت کامپایل مجدد کنید، میتوانید یک نسخه نامحدود برای خود بسازید.
نویسنده (AUTHOR)
Julian Seward, jseward@acm.org.
ایدههای پیادهسازیشده در bzip2 متعلق به افراد زیر (دستکم) است: Michael Burrows و David Wheeler (برای تبدیل مرتبسازی بلوکی)، David Wheeler (مجدداً برای کدگذار هافمن)، Peter Fenwick (برای مدل کدگذاری ساختاریافته در bzip اصلی، و اصلاحات فراوان)، و Alistair Moffat، Radford Neal و Ian Witten (برای کدگذار حسابی در bzip اصلی). نویسنده بابت کمک، پشتیبانی و مشاورههای آنها بسیار سپاسگزار است. برای دسترسی به مراجع اسناد، به راهنمای موجود در بسته توزیع کد منبع مراجعه کنید. Christian von Roques نویسنده را تشویق کرد تا برای افزایش سرعت فشردهسازی به دنبال الگوریتمهای مرتبسازی سریعتر باشد. Bela Lubkin نویسنده را تشویق کرد تا کارایی فشردهسازی در بدترین حالت را بهبود بخشد. Donna Robinson مستندات را به قالب XML تبدیل کرد. اسکریپتهای *bz از اسکریپتهای GNU gzip مشتق شدهاند. افراد بسیاری وصلهها (patches) ارسال کردند، در حل مشکلات سازگاری یاری رساندند، سیستمهایی برای آزمایش به امانت گذاشتند، مشاوره دادند و عموماً بسیار یاریرسان بودند.
گزارش باگها (REPORTING BUGS)
گزارش باگها و مشکلات به: https://sourceware.org/bzip2 یا پست الکترونیکی توسعهدهندگان.
حق نشر (COPYRIGHT)
حق نشر © 1996-2019
Julian R Seward. تمامی
حقوق محفوظ
است.
توزیع مجدد
و استفاده
به صورت
سورس یا
باینری، با
یا بدون
تغییر، تحت
شرایط مجوز
bzip2 مجاز است.