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

gzip, gunzip, zcat - فشرده‌سازی یا باز کردن فایل‌ها

gzip [ -acdfhklLnNrtvV19 ] [-S suffix] [ name ... ]
gunzip [ -acfhklLnNrtvV ] [-S suffix] [ name ... ]
zcat [ -fhLV ] [ name ... ]

دستور gzip اندازه فایل‌های مشخص‌شده را با استفاده از کدگذاری لمپل-زیو (LZ77) کاهش می‌دهد. در صورت امکان، هر فایل با فایلی با پسوند .gz جایگزین می‌شود، در حالی که حالت‌های دسترسی و مالکیت، زمان‌های دسترسی و تغییر فایل حفظ می‌گردند. (پسوند پیش‌فرض برای سامانه‌های MSDOS، OS/2 FAT، Windows NT FAT و Atari برابر با z است.) اگر هیچ فایلی مشخص نشود، یا اگر نام فایل "-" باشد، ورودی استاندارد فشرده شده و در خروجی استاندارد نوشته می‌شود. دستور gzip تنها تلاش می‌کند فایل‌های معمولی را فشرده کند. به‌ویژه پیوندهای نمادین را نادیده می‌گیرد.

اگر نام فایل فشرده برای سامانه فایل مربوطه بیش از حد طولانی باشد، gzip آن را کوتاه می‌کند. دستور gzip تلاش می‌کند تنها بخش‌هایی از نام فایل را که بلندتر از ۳ نویسه هستند کوتاه کند. (بخش‌ها با نقطه جدا می‌شوند.) اگر نام تنها از بخش‌های کوتاه تشکیل شده باشد، طولانی‌ترین بخش‌ها کوتاه می‌شوند. برای مثال، اگر نام فایل‌ها به ۱۴ نویسه محدود باشد، gzip.msdos.exe به gzi.msd.exe.gz فشرده می‌شود. نام‌ها در سامانه‌هایی که محدودیتی روی طول نام فایل ندارند کوتاه نمی‌شوند.

به‌طور پیش‌فرض، gzip نام اصلی فایل و برچسب زمانی را درون فایل فشرده نگه می‌دارد. این اطلاعات هنگام باز کردن فایل با گزینه -N استفاده می‌شوند. این ویژگی زمانی مفید است که نام فایل فشرده کوتاه شده باشد یا برچسب زمانی پس از انتقال فایل حفظ نشده باشد.

فایل‌های فشرده را می‌توان با استفاده از gzip -d یا gunzip یا zcat به حالت اصلی بازگرداند. اگر نام اصلی ذخیره‌شده در فایل فشرده برای سامانه فایل مناسب نباشد، یک نام جدید از روی نام اصلی ساخته می‌شود تا معتبر گردد.

دستور gunzip فهرستی از فایل‌ها را روی خط فرمان دریافت کرده و هر فایلی را که نام آن به .gz، -gz، .z، -z یا _z ختم شود (بدون در نظر گرفتن بزرگی و کوچکی حروف) و با عدد جادویی (magic number) صحیح آغاز گردد، با یک فایل غیرفشرده بدون پسوند اصلی جایگزین می‌کند. gunzip همچنین پسوندهای ویژه .tgz و .taz را به ترتیب به عنوان کوتاه‌نوشت برای .tar.gz و .tar.Z تشخیص می‌دهد. هنگام فشرده‌سازی، در صورت نیاز gzip به جای کوتاه کردن فایلی با پسوند .tar، از پسوند .tgz استفاده می‌کند.

در حال حاضر gunzip می‌تواند فایل‌های ایجادشده توسط gzip، zip، compress، compress -H یا pack را از حالت فشرده خارج کند. تشخیص قالب ورودی به‌صورت خودکار انجام می‌شود. هنگام استفاده از دو قالب نخست، gunzip یک بررسی CRC ۳۲-بیتی انجام می‌دهد. برای pack و gunzip طول داده بازشده را بررسی می‌کند. قالب استاندارد compress برای بررسی سازگاری و صحت طراحی نشده بود. با این حال gunzip گاهی اوقات قادر است فایل Z. خراب را تشخیص دهد. اگر هنگام باز کردن یک فایل Z. با خطا مواجه شدید، صرفاً به این دلیل که uncompress استاندارد اعتراضی نکرده فرض نکنید فایل Z. سالم است. این معمولاً بدان معناست که uncompress استاندارد ورودی خود را بررسی نمی‌کند و داده‌های نامعتبر تولید می‌نماید. قالب SCO compress -H (روش فشرده‌سازی lzh) شامل CRC نیست اما برخی بررسی‌های سازگاری را امکان‌پذیر می‌سازد.

فایل‌های ایجادشده توسط zip تنها در صورتی توسط gzip قابل بازگشایی هستند که یک عضو واحد داشته باشند که با روش 'deflation' فشرده شده باشد. این ویژگی تنها برای کمک به تبدیل فایل‌های tar.zip به قالب tar.gz در نظر گرفته شده است. برای استخراج یک فایل zip با یک عضو واحد، از دستوری مانند 'gunzip <foo.zip' یا 'gunzip -S .zip foo.zip' استفاده کنید. برای استخراج فایل‌های zip با چندین عضو، به جای gunzip از unzip استفاده کنید.

دستور zcat کاملاً مشابه با gunzip -c است. (در برخی سامانه‌ها، zcat ممکن است به صورت gzcat نصب شود تا پیوند اصلی به compress حفظ شود.) zcat فهرستی از فایل‌ها در خط فرمان یا ورودی استاندارد خود را از حالت فشرده خارج کرده و داده‌های غیرفشرده را در خروجی استاندارد می‌نویسد. zcat فایل‌هایی را که دارای عدد جادویی صحیح باشند باز می‌کند، چه دارای پسوند .gz باشند و چه نباشند.

دستور gzip از الگوریتم لمپل-زیو مورد استفاده در zip و PKZIP استفاده می‌کند. میزان فشرده‌سازی به‌دست‌آمده به اندازه ورودی و توزیع زیررشته‌های مشترک بستگی دارد. به‌طور معمول، متونی مانند کد منبع یا زبان انگلیسی بین ۶۰ تا ۷۰ درصد کاهش حجم پیدا می‌کنند. فشرده‌سازی به‌طور کلی بسیار بهتر از روش‌های LZW (مورد استفاده در compress)، کدگذاری هافمن (مورد استفاده در pack)، یا کدگذاری هافمن تطبیقی (compact) است.

فشرده‌سازی همیشه انجام می‌شود، حتی اگر فایل فشرده اندکی بزرگ‌تر از فایل اصلی شود. بدترین حالت افزایش حجم، چند بایت برای سرآیند فایل gzip به‌علاوه ۵ بایت به ازای هر بلوک ۳۲ کیلوبایتی (32 KiB)، یا نسبت افزایشی برابر با ۰٫۰۱۵٪ برای فایل‌های بزرگ است. تعداد واقعی بلوک‌های دیسک مورد استفاده تقریباً هیچ‌گاه افزایش نمی‌یابد.

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

حالت متنی اسکی: تبدیل پایان خطوط بر اساس قراردادهای محلی. این گزینه تنها روی برخی سامانه‌های غیر یونیکس پشتیبانی می‌شود. برای MSDOS، هنگام فشرده‌سازی CR LF به LF تبدیل شده و هنگام باز کردن، LF به CR LF تبدیل می‌شود.
نوشتن خروجی در خروجی استاندارد؛ فایل‌های اصلی بدون تغییر باقی می‌مانند. اگر چندین فایل ورودی وجود داشته باشد، خروجی شامل دنباله‌ای از اعضای مستقل فشرده‌شده خواهد بود. برای دستیابی به فشرده‌سازی بهتر، تمام فایل‌های ورودی را پیش از فشرده‌سازی به یکدیگر متصل (concatenate) کنید.
از حالت فشرده خارج کردن (باز کردن فشرده‌سازی).
اجبار به فشرده‌سازی یا باز کردن حتی اگر فایل دارای چندین پیوند سخت باشد، یا فایل مقصد از قبل وجود داشته باشد، یا داده‌های فشرده از ترمینال خوانده یا در آن نوشته شوند. اگر داده‌های ورودی در قالبی نباشند که توسط gzip شناسایی شود، و گزینه --stdout نیز مشخص شده باشد، داده‌های ورودی را بدون تغییر در خروجی استاندارد کپی می‌کند؛ یعنی رفتار zcat مشابه cat می‌شود. اگر -f مشخص نشود و برنامه در پس‌زمینه اجرا نشده باشد، gzip برای تأیید رونویسی روی فایل موجود از کاربر سؤال می‌پرسد.
نمایش صفحه راهنما و خروج.
نگه‌داشتن (حذف نکردن) فایل‌های ورودی هنگام فشرده‌سازی یا باز کردن.
برای هر فایل فشرده، فیلدهای زیر را فهرست می‌کند:


compressed size: اندازه فایل فشرده
uncompressed size: اندازه فایل غیرفشرده
ratio: نسبت فشرده‌سازی (۰٫۰٪ در صورت نامشخص بودن)
uncompressed_name: نام فایل غیرفشرده

اندازه غیرفشرده برای فایل‌هایی که در قالب gzip نیستند (مانند فایل‌های فشرده Z.) برابر با -1 گزارش می‌شود. برای به‌دست آوردن اندازه غیرفشرده چنین فایلی، می‌توانید از این دستور استفاده کنید:


zcat file.Z | wc -c

در صورت همراه بودن با گزینه --verbose، فیلدهای زیر نیز نمایش داده می‌شوند:


method: روش فشرده‌سازی
crc: مقدار CRC ۳۲-بیتی داده‌های بازشده
date & time: برچسب زمان و تاریخ برای فایل بازشده

روش‌های فشرده‌سازی که در حال حاضر پشتیبانی می‌شوند شامل deflate، compress، lzh (SCO compress -H) و pack هستند. برای فایلی که در قالب gzip نیست، مقدار crc به‌صورت ffffffff نمایش می‌یابد.

با گزینه --name، نام غیرفشرده، تاریخ و زمان مواردی هستند که در فایل فشرده ذخیره شده‌اند (در صورت وجود).

با گزینه --verbose، جمع کل اندازه‌ها و نسبت فشرده‌سازی برای تمام فایل‌ها نیز نمایش داده می‌شود، مگر اینکه برخی اندازه‌ها نامشخص باشند. با گزینه --quiet، خطوط عنوان و مجموع‌ها نمایش داده نمی‌شوند.

نمایش مجوز gzip و خروج.
هنگام فشرده‌سازی، نام اصلی فایل و برچسب زمانی به‌طور پیش‌فرض ذخیره نمی‌شوند. (اگر نام کوتاه شده باشد، نام اصلی همواره ذخیره می‌گردد.) هنگام باز کردن، در صورت وجود نام اصلی فایل بازیابی نمی‌شود (تنها پسوند gzip از نام فایل فشرده حذف می‌شود) و برچسب زمانی اصلی نیز در صورت وجود بازیابی نمی‌شود (از فایل فشرده کپی می‌شود). این گزینه هنگام باز کردن فشرده‌سازی پیش‌فرض است.
هنگام فشرده‌سازی، همیشه نام اصلی فایل و بخش ثانیه‌های برچسب زمانی تغییر اصلی ذخیره می‌شود، در صورتی که فایل اصلی یک فایل معمولی باشد و برچسب زمانی آن حداقل ۱ (1970-01-01 00:00:01 UTC) و کمتر از 2**32 (2106-02-07 06:28:16 UTC با فرض در نظر نگرفتن ثانیه‌های کبیسه) باشد؛ این حالت پیش‌فرض است. هنگام باز کردن فشرده‌سازی، در صورت وجود نام فایل و برچسب زمانی از اطلاعات ذخیره‌شده بازیابی می‌شوند. این گزینه روی سامانه‌هایی که محدودیت طول نام فایل دارند یا زمانی که برچسب زمانی پس از انتقال فایل از دست رفته است، مفید خواهد بود.
ناکام گذاشتن و عدم نمایش تمام هشدارها (حالت بی‌صدا).
پیمایش بازگشتی ساختار دایرکتوری. اگر هر یک از نام‌های فایل مشخص‌شده در خط فرمان دایرکتوری باشند، gzip وارد دایرکتوری شده و تمام فایل‌های درون آن را فشرده می‌کند (یا در صورت استفاده از gunzip آن‌ها را باز می‌کند).
هنگام فشرده‌سازی، از پسوند suf. به جای gz. استفاده می‌کند. هر پسوند غیرخالی می‌تواند مشخص شود، اما برای جلوگیری از سردرگمی هنگام انتقال فایل‌ها به سامانه‌های دیگر، باید از پسوندهایی غیر از z. و gz. خودداری کرد.

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

استفاده از خروجی همگام (synchronous). با این گزینه، احتمال از دست رفتن داده‌های gzip در هنگام از کار افتادن سامانه (crash) کمتر می‌شود، اما سرعت اجرای برنامه ممکن است به‌طور چشمگیری کاهش یابد.
آزمون. بررسی صحت و یکپارچگی فایل فشرده و سپس خروج.
حالت باجزئیات. نمایش نام و درصد کاهش حجم برای هر فایل فشرده یا بازشده.
نسخه. نمایش شماره نسخه و گزینه‌های ترجمه/کامپایل و سپس خروج.
-# --fast --best
تنظیم سرعت فشرده‌سازی با استفاده از رقم مشخص‌شده #، که در آن -1 یا --fast نشان‌دهنده سریع‌ترین روش فشرده‌سازی (فشرده‌سازی کمتر) و -9 یا --best نشان‌دهنده کندترین روش فشرده‌سازی (بهترین فشرده‌سازی) است. سطح فشرده‌سازی پیش‌فرض -6 است (یعنی تمایل به فشرده‌سازی بالا به قیمت کاهش سرعت).
هنگامی که یک فایل فشرده را میان دو رایانه همگام‌سازی می‌کنید، این گزینه به rsync اجازه می‌دهد تا به جای کل بایگانی، تنها فایل‌هایی را که در بایگانی تغییر کرده‌اند منتقل کند. به‌طور معمول، پس از ایجاد تغییر در هر فایلی درون بایگانی، الگوریتم فشرده‌سازی ممکن است نسخه جدیدی از بایگانی تولید کند که با نسخه قبلی همخوانی ندارد. در این حالت، rsync تمام نسخه جدید بایگانی را به رایانه مقصد منتقل می‌کند. با این گزینه، rsync می‌تواند تنها فایل‌های تغییریافته را به همراه مقدار کمی فراداده (metadata) که برای به‌روزرسانی ساختار بایگانی در بخش تغییریافته لازم است، منتقل نماید.

چندین فایل فشرده را می‌توان به یکدیگر متصل کرد. در این حالت، gunzip تمام اعضا را یک‌باره استخراج می‌کند. برای مثال:


gzip -c file1 > foo.gz
gzip -c file2 >> foo.gz

سپس


gunzip -c foo

معادل است با


cat file1 file2

در صورت آسیب دیدن یکی از اعضای فایل gz.، سایر اعضا همچنان قابل بازیابی هستند (اگر عضو آسیب‌دیده حذف شود). با این حال، می‌توانید با فشرده‌سازی هم‌زمان همه اعضا به فشرده‌سازی بهتری دست یابید:


cat file1 file2 | gzip > foo.gz

فشرده‌سازی بهتری دارد نسبت به:


gzip -c file1 file2 > foo.gz

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


gzip -cd old.gz | gzip > new.gz

اگر یک فایل فشرده شامل چندین عضو باشد، اندازه غیرفشرده و CRC گزارش‌شده توسط گزینه --list تنها برای آخرین عضو اعمال می‌شود. اگر به اندازه غیرفشرده برای تمام اعضا نیاز دارید، می‌توانید استفاده کنید از:


gzip -cd file.gz | wc -c

اگر مایلید یک فایل بایگانی منفرد با چندین عضو ایجاد کنید تا اعضا بعداً بتوانند به‌طور مستقل استخراج شوند، از یک بایگان‌ساز مانند tar یا zip استفاده کنید. GNU tar از گزینه -z برای فراخوانی شفاف gzip پشتیبانی می‌کند. gzip به عنوان مکملی برای tar طراحی شده است، نه به عنوان جایگزین آن.

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

به جای آن می‌توانید از نام مستعار (alias) یا اسکریپت استفاده کنید. برای مثال، اگر gzip در دایرکتوری /usr/bin قرار دارد، می‌توانید $HOME/bin را به ابتدای PATH خود اضافه کنید و یک اسکریپت اجرایی به نام $HOME/bin/gzip شامل محتوای زیر بسازید:


#! /bin/sh
export PATH=/usr/bin
exec gzip -9 "$@"

znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), zip(1), unzip(1), compress(1)

قالب فایل gzip در RFC 1952 اینترنت (مه ۱۹۹۶) توسط P. Deutsch با عنوان «GZIP file format specification version 4.3» در نشانی https://www.ietf.org/rfc/rfc1952.txt مشخص شده است. قالب فشرده‌سازی zip (deflation) در RFC 1951 اینترنت (مه ۱۹۹۶) توسط P. Deutsch با عنوان «DEFLATE Compressed Data Format Specification version 1.3» در نشانی https://www.ietf.org/rfc/rfc1951.txt مشخص شده است.

وضعیت خروج در حالت عادی ۰ است؛ در صورت بروز خطا، وضعیت خروج ۱ است. در صورت بروز هشدار، وضعیت خروج ۲ خواهد بود.

گزینه‌های نامعتبر در خط فرمان مشخص شده‌اند.
فایل مشخص‌شده برای gunzip فشرده نشده است.
فایل فشرده آسیب دیده است. داده‌ها تا نقطه خرابی را می‌توان با استفاده از دستور زیر بازیابی کرد:


zcat file > recover

فایل (File) (با استفاده از LZW) توسط برنامه‌ای فشرده شده است که می‌توانست با بیت‌های بیشتری نسبت به کد بازگشایی فشرده‌سازی در این دستگاه کار کند. فایل را با gzip که فشرده‌سازی بهتری ارائه می‌دهد و حافظه کمتری مصرف می‌کند، دوباره فشرده کنید.
فرض بر این است که فایل از قبل فشرده شده است. نام فایل را تغییر دهید و دوباره تلاش کنید.
اگر می‌خواهید فایل خروجی جایگزین شود "y" و در غیر این صورت "n" را پاسخ دهید.
یک خطای نقض دسترسی حافظه (SIGSEGV) شناسایی شد که معمولاً به معنای خراب بودن فایل ورودی است.
(تنها برای -v و -l مرتبط است.)
هنگامی که فایل ورودی یک فایل معمولی یا دایرکتوری نباشد (مانند پیوند نمادین، سوکت، FIFO، فایل دستگاه)، دست‌نخورده باقی می‌ماند.
فایل ورودی دارای پیوند است؛ دست‌نخورده رها می‌شود. برای اطلاعات بیشتر به ln(1) مراجعه کنید. از پرچم -f برای اجبار به فشرده‌سازی فایل‌های دارای چندین پیوند استفاده کنید.

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

در برخی موارد نادر، گزینه --best فشرده‌سازی ضعیف‌تری نسبت به سطح فشرده‌سازی پیش‌فرض (-6) ارائه می‌دهد. روی برخی فایل‌های با تکرار بسیار بالا، compress فشرده‌سازی بهتری نسبت به gzip انجام می‌دهد.

نوشته شده توسط Jean-loup Gailly برای کد و Mark Adler برای بخش بازگشایی فشرده‌سازی.

گزارش باگ‌ها به: bug-gzip@gnu.org
صفحه اصلی GNU gzip: https://www.gnu.org/software/gzip
راهنمای عمومی استفاده از نرم‌افزارهای گنو: https://www.gnu.org/gethelp

حق نشر © 1998-1999, 2001-2002, 2012, 2015-2022 بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.).
حق نشر © 1992, 1993 Jean-loup Gailly

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

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

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

2023-04-07 GNU gzip 1.12