GZIP(1) General Commands Manual 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 تنها تلاش می‌کند فایل‌های عادی (regular) را فشرده کند. به‌طور ویژه، پیوندهای نمادین نادیده گرفته می‌شوند.

اگر نام فایل فشرده برای سیستم‌فایل آن بیش از حد طولانی باشد، 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 در صورت نیاز از پسوند .tgz استفاده می‌کند، به جای آنکه فایلی با پسوند .tar را کوتاه کند.

در حال حاضر gunzip می‌تواند فایل‌های ایجادشده توسط gzip، zip، compress، compress -H یا pack را از حالت فشرده خارج کند. تشخیص قالب ورودی به‌طور خودکار انجام می‌شود. هنگام استفاده از دو قالب نخست، gunzip یک CRC ۳۲-بیتی را بررسی می‌کند. برای pack دستور gunzip طول فایل غیرفشرده را بررسی می‌کند. قالب استاندارد compress طوری طراحی نشده بود که امکان بررسی یکپارچگی را فراهم کند. با این حال gunzip گاهی می‌تواند یک فایل .Z آسیب‌دیده را شناسایی کند. اگر هنگام باز کردن یک فایل .Z با خطا مواجه شدید، تصور نکنید که فایل .Z تنها به این دلیل سالم است که دستور استاندارد uncompress پیام خطایی نمی‌دهد. این مسئله معمولاً به این معنی است که دستور استاندارد 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، به علاوه ۵ بایت به ازای هر بلوک ۳۲ کیلوبایتی، یا نسبت افزایش ۰٫۰۱۵٪ برای فایل‌های بزرگ است. تعداد واقعی بلوک‌های دیسک استفاده‌شده تقریباً هرگز افزایش نمی‌یابد.

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

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


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

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


zcat file.Z | wc -c

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


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

روش‌های فشرده‌سازی که در حال حاضر پشتیبانی می‌شوند عبارتند از deflate، compress، lzh (SCO compress -H) و pack. مقدار crc برای فایلی که در قالب gzip نباشد 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 در زمان خرابی یا فروپاشی سیستم کمتر است، اما ممکن است به میزان قابل توجهی کُندتر باشد.
آزمون. بررسی یکپارچگی فایل فشرده و سپس خروج.
حالت پرحرف. نمایش نام و درصد کاهش حجم برای هر فایل فشرده‌شده یا بازشده.
نسخه. نمایش شمارهٔ نسخه و گزینه‌های ترجمه و سپس خروج.
-# --fast --best
تنظیم سرعت فشرده‌سازی با استفاده از رقم مشخص‌شدهٔ #، که در آن -1 یا --fast نشان‌دهندهٔ سریع‌ترین روش فشرده‌سازی (فشرده‌سازی کمتر) و -9 یا --best نشان‌دهندهٔ کُندترین روش فشرده‌سازی (بهترین فشرده‌سازی) است. سطح فشرده‌سازی پیش‌فرض -6 است (یعنی تمایل به فشرده‌سازی بالا به بهای سرعت).
هنگام همگام‌سازی یک فایل فشرده میان دو رایانه، این گزینه به rsync اجازه می‌دهد تا تنها فایل‌هایی را که در بایگانی تغییر کرده‌اند به جای کل بایگانی منتقل کند. معمولاً، پس از اعمال تغییر در هر فایل داخل بایگانی، الگوریتم فشرده‌سازی می‌تواند نسخهٔ جدیدی از بایگانی تولید کند که با نسخهٔ پیشین مطابقت ندارد. در این حالت، rsync تمام نسخهٔ جدید بایگانی را به رایانهٔ مقصد منتقل می‌کند. با این گزینه، rsync می‌تواند تنها فایل‌های تغییریافته و مقدار کمی متادیتا را که برای به‌روزرسانی ساختار بایگانی در بخش تغییریافته لازم است، منتقل کند.

چندین فایل فشرده را می‌توان به یکدیگر متصل کرد. در این حالت، 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 در سند زیر مشخص شده است: P. Deutsch, GZIP file format specification version 4.3, https://www.ietf.org/rfc/rfc1952.txt, Internet RFC 1952 (May 1996). قالب فشرده‌سازی zip در سند زیر مشخص شده است: P. Deutsch, DEFLATE Compressed Data Format Specification version 1.3, https://www.ietf.org/rfc/rfc1951.txt, Internet RFC 1951 (May 1996).

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

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


zcat file > recover

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

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

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

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

Copyright © 1998-1999, 2001-2002, 2012, 2015-2022 Free Software Foundation, Inc.
Copyright © 1992, 1993 Jean-loup Gailly

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

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

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

local