دستور tar در لینوکس — راهنمای جامع
در این مطلب، به طور کامل و از صفر تا صد، به دستور tar در لینوکس پرداخته شده است. در سیستمعاملهای «شبه یونیکس» (Unix-like)، از دستور tar برای ساخت، نگهداری، ویرایش و استخراج فایلهایی که در فرمت tar آرشیو شدهاند استفاده میشود. در این مطلب، نسخه گنو/لینوکس tar یا همان GNU tar مورد بررسی قرار گرفته است.
مقدمهای بر دستور tar در لینوکس
tar یک ابزار نرمافزاری کامپیوتری برای گردآوری فایلهای متعدد در یک فایل آرشیو است و از این قابلیت برای اهداف گوناگون شامل «توزیعهای نرمافزاری» (Software Distribution) یا تهیه نسخه پشتیبان استفاده میشود. عنوان «tar» از دو کلمه (tape (t و (archive (ar گرفته شده و در واقع یک فرمت فایل آرشیو است. tar در اصل برای نوشتن داده روی دستگاههای ورودی/خروجی (I/O) ترتیبی فاقد فایل سیستم اختصاصی خودشان، ساخته و توسعه داده شده بود.
فایلهای آرشیو ساخته شده با tar حاوی پارامترهای گوناگون فایل سیستم مانند «نام» (name)، «برچسب زمانی» (Timestamp)، «مالکیت» (Ownership)، «مجوزهای دسترسی به پرونده» (File Access Permissions) و «سازماندهی پوشهها» (Directory Organization) هستند. ابزار خط فرمان tar ابتدا در نسخه ۷ یونیکس در ژانویه سال ۱۹۷۹ معرفی شد. در آن هنگام، tar جایگزین برنامه tp شد. ساختار فایل مورد استفاده برای ذخیرهسازی اطلاعات tar در POSIX.1-1988 و بعدها در POSIX.1-2001 استاندارد شد. این امر موجب شد تا فرمت tar، به فرمت پشتیبانی شده توسط اغلب سیستمهای آرشیو فایل نوین، مبدل شود.
همانطور که پیش از این بیان شد، این فرمت فایل در روزهای ابتدایی یونیکس، با هدف تهیه «نسخه پشتیبان» (Back Up) از فایلها روی دستگاههای ذخیرهسازی نوار مانند، توسعه داده شده بود. بعدها، فرمت فایل tar به صورت رسمی، بخشی از استاندارد «پازیکس» (Portable Operating System Interface [for Unix] | POSIX) شد و امروزه برای گردآوری، توزیع و آرشیو فایلها در حالی مورد استفاده قرار میگیرد که از خصیصههای «فایل سیستم» (File System) مانند «کاربر» (User) و «دسترسیهای گروه» (Group Permissions)، دسترسی و ویرایش تاریخها و ساختار فایلها پشتیبانی میکند. در این مطلب، نسخه گنو tar آموزش داده شده است که در انواع نوین سیستمعامل لینوکس وجود دارد.
بنیان دستور tar
بسیاری از «درایوهای نواری» (Tape Drives) که بلوکهای داده با طول متغیر را میخوانند و مینویسند، فضای تلف شده قابل توجهی را بین بلوکها بر جای میگذارند. این کار بدین منظور انجام میشود که نوار به صورت فیزیکی حرکت خود را آغاز کند و پایان دهد.
برخی از درایوهای نواری و دیسکهای خام، تنها از بلوکهای داده با اندازه ثابت پشتیبانی میکنند. همچنین، هنگام نوشتن در هر رسانهای مانند یک فایل سیستم یا شبکه، برای نوشتن یک بلوک بزرگ نسبت به نوشتن تعداد زیادی بلوک کوچک، به زمان کمتری نیاز دارند. از این رو، دستور tar دادهها را در بلوکهای حاوی تعداد زیادی از رکوردهای ۵۱۲ بایتی مینویسد. کاربر میتواند «ضریب بلوکبندی» (Blocking Factor) را تعیین کند که تعداد رکوردها به ازای بلوک است. این مقدار به صورت پیشفرض برابر با ۲۰ است که منجر به تولید بلوکهای ۱۰ کیلوبایتی میشود.
پیادهسازیهای کلیدی از دستور tar
در طول تاریخ، سیستمهای بسیاری tar را پیادهسازی کردهاند. همچنین، آرشیو کنندههای فایل عمومی زیادی نیز وجود دارند که دستکم به طور جزئی از tar پشتیبانی و معمولا یکی از پیادهسازیهای معرفی شده در پایین را استفاده میکنند.
بسیاری از پیادهسازیهای tar، توانای خواندن و ساخت فرمتهای فایل cpio و pax را نیز دارند. پیادهسازیهای کلیدی tar، به ترتیب زمان ساخته و معرفی شدن، عبارتند از:
- Solaris tar: بر پایه tar موجود در یونیکس نسخه ۷ است و به عنوان نسخه پیشفرض در سیستمعامل سولاریس استفاده میشود.
- GNU tar: پیادهسازی پیشفرض در اغلب توزیعهای لینوکس است. این پیادهسازی از tar، بر پایه پیادهسازی دامنه عمومی pdtar است که کار ساخت آن در سال ۱۹۸۷ آغاز شد. نسخههای اخیر میتوانند از فرمتهای گوناگونی مانند pax، گنو و نسخه ۷ استفاده کنند.
- FreeBSD tar (همچنین، BSD tar): نسخه پیشفرض tar در اغلب سیستمعاملهای مبتنی بر توزیعهای نرمافزاری برکلی مانند Mac OS X است.
نحو دستور tar
در زیر، نمونهای از «نحو» (Syntax) دستور tar ارائه شده است.
tar [-] A --catenate --concatenate | c --create | d --diff --compare | --delete | r --append | t --list | --test-label | u --update | x --extract --get [options] [pathname ...]
عملیات
اولین آرگومان داده شده به دستور tar، باید تعیین کننده تابع مورد استفاده باشد؛ یعنی یکی از حروف u ،t ،r ،d ،c ،a یا x یا یکی از اسامی طولانیتر توابع، اولین آرگومان داده شده به دستور tar خواهد بود. نام تابع که با یک حرف یا اسامی طولانیتر مشخص میشود، باید با استفاده از «خط فاصله» (Dash | -) پیشوندگذاری شود.
همچنین، نام تابع ممکن است با دیگر گزینههای تک حرفی (دیگر توابع) ترکیب شود. یک نام تابع طولانی باید با دو علامت خط فاصله «--» مشخص شود. برخی از گزینهها (آپشنها | Options)، یک پارامتر میگیرند؛ در شکل تک حرفی، باید به آنها یک آرگومان جدا داده شود. در شکل طولانیتر، ممکن است "=value" به گزینه الحاق شود. برای مثال، دستورات زیر همه برابر هستند.
tar --create --file=archive.tar file1 file2
tar -c -f archive.tar file1 file2
tar -cf archive.tar file1 file2
tar cf archive.tar file1 file2
تابعها
تعیین یکی از تابعهای زیر، مشخص میکند که حالت اصلی tar چه خواهد بود.
A, --catenate, --concatenate: فایلهای tar را به یک آرشیو الحاق میکند.
c, --create: یک آرشیو جدید میسازد.
d, --diff, --compare: هر تفاوتی بین آرشیو و فایل سیستم را محاسبه میکند.
delete--: از آرشیو حذف میکند (این تابع روی نوارهای مغناطیسی کار نمیکند).
r, --append: فایلها را به انتهای آرشیو tar الحاق میکند.
t, --list: محتوای آرشیو را لیست میکند.
test-label--: برچسب آرشیو را تست میکند و خارج میشود.
u, --update: فایلها را الحاق میکند؛ اما تنها مواردی که جدیدتر از کپی موجود در آرشیو هستند.
x, --extract, --get: فایلها را از آرشیو استخراج میکند.
دیگر گزینههای دستور tar
گزینههای زیر روش عمل کردن دستور tar را مشخص میکنند.
[0-7][lmh]-: درایو و چگالی را تعیین میکند (افرادی که مفهوم چگالی را نمیدانند، نیازی به استفاده از آن هم نخواهند داشت).
a, --auto-compress-: از پسوند آرشیو برای تعیین برنامه فشردهسازی استفاده میکند. برای مثال، اگر این گزینه تعیین شود، یک آرشیو با افزونه tar.gz. همواره مانند حالتی مدیریت خواهد شد که گزینه gzip-- تعیین شده باشد (گزینه --gzip در زیر آمده است).
add-file=file--: با این حالت، file به آرشیو افزوده میشود. این گزینه به ویژه هنگامی مفید است که نام فایل با خط تیره شروع میشود.
anchored--: الگوهای نام فایل باید از ابتدای نام فایل مطابقت داشته باشند.
no-anchored--: الگوهای نام فایل ممکن است پس از «/» مطابقت داشته باشند (این پیشفرض فایلهای خارجی است؛ به دستور exclude-- که در ادامه آمده است رجوع شود).
atime-preserve--: زمان دسترسی در فایلهای آرشیو شده، با بازیابی زمان یا (اگر سیستمعامل از آن پشتیبانی میکند) تغییر ندادن آنها در وهله اولیه، حفظ میشود.
no-auto-compress--: به طور خودکار و با استفاده از پیشوند نام فایل آرشیو، برنامه فشردهسازی را انتخاب نکند.
b, --blocking-factor BLOCKS-: از BLOCKS x 512 بایت بر ثانیه هنگام دستکاری آرشیو استفاده میکند.
B, --read-full-records-: همه ورودیها را «بلوکبندی مجدد» میکند. این گزینه میتواند به خواندن آرشیوهای آسیب دیده کمک کند.
backup[=backup-method--: به جای حذف فایلها از فایل سیستم، tar، با استفاده از یک متد خاص تهیه نسخه پشتیبان با عنوان backup-method از آنها پشتیبان تهیه میکند. این متدها ممکن است یکی از موارد زیر باشند:
- t, numbered: همیشه نسخههای پشتیبان شمارهگذاری شده تهیه میکند.
- nil, existing: نسخههای پشتیبان شمارهگذاری شده از فایلهایی که در حال حاضر موجود است تهیه میکند و به سادگی از دیگر موارد نسخه پشتیبان تهیه میکند.
- never, simple: همیشه نسخه پشتیبان ساده تهیه میکند.
- اگر متد تهیه پشتیبان مشخص نشده باشد، backup-method به طور پیشفرض روی مقدار متغیر محیطی VERSION_CONTROL تنظیم میشود؛ اگر VERSION_CONTROL تعریف شده باشد، backup-method به طور پیشفرض روی حالت existing تنظیم میشود.
C, --directory DIR-: پیش از انجام هرگونه عملیاتی، به پوشه DIR تغییر مسیر میدهد.
check-device--: شمارههای دستگاه را هنگام ساخت آرشیوهای افزایشی بررسی میکند. این رفتار پیشفرض است.
no-check-device--: شمارههای دستگاهها را هنگام ساخت آرشیو افزایشی بررسی میکند.
checkpoint[=NUMBER]--: با استفاده از «checkpoints»، پیغام پیشرفت هر رکورد NUMBER را نمایش میدهد (پیشفرض روی ۱۰ است).
checkpoint-action=ACTION--: در این حالت، ACTION را در هر checkpoint اجرا میکند. ACTION ممکن است یکی از موارد زیر باشد:
- bell: یک زنگ شنیدنی را در کنسول اجرا میکند.
- . ,dot: یک نقطه تنها چاپ میکند.
- echo: یک پیام تصویری را در کنسول نمایش میدهد (برای خطای استاندارد).
- echo=string: در این حالت، رشته string را روی خطای استاندارد نمایش میدهد؛ پیش از خروجی، هر متاکاراکتری در این رشته بسط پیدا میکند.
- exec=command: دستور داده شده را اجرا میکند.
- sleep=time: برای ثانیههای زمانی صبر میکند.
- ttyout=string: رشته را روی کنسول کنونی به عنوان خروجی میدهد ('/dev/tty').
- چندین گزینه checkpoint-action-- قابل تعیین هستند. اعمال تعیین شده به ترتیب ظاهر شدنشان در دستور، در خط فرمان اجرا خواهند شد.
- استفاده از checkpoint-action-- بدون checkpoint--، موجب میشود تا فاصله checkpoint پیشفرض را ۱۰ رکورد فرض کند.
delay-directory-restore--: تنظیم زمانهای ویرایش و دسترسیهای فایلهای استخراج شده را تا هنگامی که استخراج پایان پیدا کند، به تاخیر میاندازد.
no-delay-directory-restore--: زمانهای ویرایش و دسترسیهای فایلها هنگامی تنظیم میشود که همه فایلها در این پوشه استخراج شده باشند. این حالت پیشفرض است.
exclude=PATTERN--: از عملیات روی فایلهایی که نام آنها با الگوی نام PATTERN تطابق دارد اجتناب میکند.
exclude-backups--: نسخه پشتیبان را استثنا و فایلها از همه عملیات را قفل میکند.
exclude-caches--: موجب میشود tar همه فایلهایی که حاوی یک تگ فایل cash هستند را استخراج کند. یک تگ دایرکتوری کش، یک فایل کوتاه با نام CACHEDIR.TAG و دارای یک هدر استاندارد است که در http://www.brynosaurus.com/cachedir/spec.html تعیین شده است. این گزینه همه محتواها را از پوشه استخراج میکند؛ اما خود پوشه و فایل CACHEDIR.TAG را آرشیو میکند.
exclude-caches-all--: فایلهای حاوی فایل CACHEDIR.TAG را به طور کلی حذف میکند.
exclude-caches-under--: همه چیز را در فایلهای حاوی یک فایل CACHEDIR.TAG استثنا میکند. اما فایل پوشه را آرشیو میکند.
exclude-tag=FILE--: محتوای همه فایلهایی که حاوی FILE هستند را استثنا میکند، اما دایرکتوری و فایل FILE را آرشیو میکند.
exclude-tag-all=FILE--: دایرکتوریهای حاوی FILE را به طور کامل حذف میکند.
exclude-tag-under=FILE--: همه چیزهای تحت پوشههای حاوی فایل FILE شامل فایل FILE را استثنا میکند. اما، پوشه را آرشیو میکند.
exclude-vcs--: زیرپوشههای کنترل نسخه را استثنا میکند. این گزینه فایلها و پوشههای استفاده شده توسط سیستمهای VCS که به طور گسترده مورد استفاده قرار میگیرند را تشخیص میدهد. فایلهای استثنا شده عبارتند از:
- CVS/, و همه چیزهای تحت آن
- RCS/,و همه چیزهای تحت آن
- SCCS/,و همه چیزهای تحت آن
- .git/,و همه چیزهای تحت آن
- gitignore.
- cvsignore.
- ,svn/.و همه چیزهای زیر آن
- .arch-ids/,و همه چیزهای زیر آن
- {arch}/,و همه چیزهای زیر آن
- RELEASE-ID=
- meta-update=
- update=
- bzr.
- bzrignore.
- bzrtags.
- hg.
- hgignore.
- hgrags.
- darcs_
f, --file=ARCHIVE-: از فایل (یا دستگاه) آرشیو ARCHIVE استفاده میکند.
F, --info-script, --new-volume-script=NAME-: اسکریپت NAME را در پایان هر نوار اجرا میکند (دلالت بر -M دارد).
force-local--: اجبار میکند که tar با فایل آرشیو به عنوان یک فایل محلی کار کند، حتی هنگامی که نام آن حاوی دو نقطه (:) باشد.
full-time--: رزولوشن همه زمانهای فایل را چاپ میکند.
G, --incremental-: پشتیبانهای افزایشی قدیمی GNU-format را اداره میکند.
group=NAME--: اجبار میکند که نام به عنوان گروه برای فایلهای افزوده شده باشد.
h, --dereference-: برای دنبال کردن symlink است. فایلهایی را که به آن اشاره دارند، آرشیو میکند.
H, --format=FORMAT-: از فایل فرمت داده شده آرشیو میسازد. FORMAT یکی از موارد زیر است.
- gnu: فرمت GNU tar 1.13.x.
- oldgnu: فرمت GNU استفاده شده در نسخههای ۱.۱۲ و پایینتر tar.
- pax: فرمت POSIX 1003.1-2001 ("pax").
- posix: مشابه با pax.
- ustar: فرمت POSIX 1003.1-1988 ("ustar").
- v7: فرمت tar نسخه قدیمی یونیکس 7 tar.
hard-dereference--: «لینکهای سخت» (Hard Links) را دنبال و فایلهایی که آنها بدان ارجاع دارند را آرشیو میکند.
i, --ignore-zeros-: بلوکهای صفر شده در آرشیو را در نظر نمیگیرد. به طور معمول، یک بلوک کامل از بایتها با یک مقدار صفر، نشانگر پایان آرشیو (end-of-archive) است. این گزینه به tar کمک میکند تا یک آرشیو آسیب دیده یا هر گونه آرشیو شکل گرفته به فرم عجیب با بلوکهایی از صفر در محتوای آن، مدیریت شود.
I, --use-compress-program=PROG-: از برنامه فشردهسازی خارجی PROG استفاده میکند. از این گزینه در صورتی استفاده میشود که کاربر در زمان کامپایل از برنامه فشردهسازی مرتبط با پیشوند راضی نیست و یا برنامه فشردهسازی دارد که GNU tar از آن پشتیبانی نمیکند. آرگومان برنامه باید یک دستور معتبر باشد که در خط فرمان نوشته میشود و گزینههای مورد نیاز را دارد. در صورت وجود فضای خالی (White Space) در آرگومان، باید آن را در "" قرار داد. PROG باید از دو قاعده پیروی کند.
اول آنکه، هنگامی که استناد کردن بدون فضای اضافی اتفاق میافتد، باید دادهها را از ورودی استاندارد بخواند و آنها را در خروجی استاندارد فشردهسازی کند. دوم آنکه اگر استناد با گزینه اضافی «d-» انجام شد، دقیقا باید برعکس آنچه گفته شده است، انجام شود. یعنی دادههای فشرده شده از ورودی استاندارد خوانده شوند و دادههای غیر فشرده در خروجی استاندارد تولید شوند. دادههای فشرده شده از ورودی استاندارد را بخواند و دادههای غیر فشرده را روی خروجی استاندارد تولید کند. مورد دومی بدین معنا است که نباید از گزینه «d-» به عنوان بخشی از خود فرمان PROG استفاده شود.
ignore-case--: حالت کاراکترها را هنگام تطبیق الگوها یا اسامی فایلها نادیده میگیرد.
no-ignore-case--: از الگوی حساس به بزرگی و کوچکی حروف و تطبیق نام فایل استفاده میکند (این حالت پیش فرض است).
ignore-command-error--: همه کدهای خروجی زیر فرایندها را نادیده میگیرد.
no-ignore-command-error--: با کدهای غیر صفر خروجی از زیر فرایند به عنوان خطا برخورد میکند.
ignore-failed-read--: صرفا به دلیل مواجهه با یک فایل غیر قابل خواندن خارج نمیشود.
index-file=FILE--: خروجی واژگان (Verbose Output) را برای استفادههای آتی به فایل FILE ارسال میکند.
j, --bzip2-: این گزینه به tar میگوید که آرشیوها را با استفاده از فشردهساز bzip2 بخواند یا بنویسد.
J, --xz-: به tar میگوید که آرشیوها را با استفاده از فشردهساز xz بنویسد یا بخواند.
k, --keep-old-files-: فایلهای موجود را هنگام استخراج فایل از یک آرشیو بازنویسی نمیکند و اگر چنین فایلی موجود باشد، پیغام خطا صادر میکند.
K, --starting-file=NAME-: این گزینه فقط استخراج را تحت تاثیر قرار میدهد؛ tar، تا هنگامی که فایلی که با NAME مطابقت پیدا کند را نیابد، از استخراج فایل صرف نظر میکند.
keep-newer-files--: فایل کنونی موجود را که جدیدتر از کپیهای آرشیو است جایگزین نمیکند.
l, --check-links-: تعداد لینکهایی که برای هر فایل پردازش شده روبَرداری (dumped) شدهاند را بررسی میکند. اگر این فایل با تعداد کل لینکهای سخت برای فایل مطابق نبود، یک پیغام هشدار چاپ میکند.
L, --tape-length=size[suf]-: نوار را پس از نوشتن تعداد مشخصی بایت تغییر میدهد. اگر suf تعیین نشده است، SIZE به عنوان کیلوبایت (۱۰۲۴) در نظر گرفته میشودکه برابر با تعیین suf به عنوان B است. suf ممکن است یکی از موارد زیر باشد.
level=n--: هنگام استفاده از گزینه listed-incremental--، یک نسخه پشتیبان افزایشی از سطح n را به اجبار انجام میدهد.
lzip--: آرشیوها را از طریق فشردهساز lzip میخواند و مینویسد.
lzma--: آرشیوها را از طریق فشردهساز lzma میخواند و مینویسد.
lzop--: آرشیوها را از طریق فشردهساز lzop میخواند و مینویسد.
m, --touch-: زمان ویرایش فایلهای استخراج شده را به جای آنکه برابر با زمان ویرایش دادههای ذخیره شده در آرشیو قرار دهد، برابر با زمان استخراج تنظیم میکند. به بیان دیگر، همه فایلهای استخراج شده را touch میکند.
M, --multi-volume-: لیست میسازد یا یا یک آرشیو چند جلدی (multi-volume) را استخراج میکند. چنین آرشیوهایی به بخشهایی شکسته شدهاند که روی رسانه خیلی کوچک متناسب میشوند و بدین شکل حاوی کل آرشیو خواهند بود.
mode=permissions--: هنگام افزودن فایل به یک آرشیو، به جای دسترسیهایی از فایل، tar «دسترسیهایی» (Permissions) را به اعضای آرشیو تخصیص میدهد. دسترسیها را میتوان به عنوان یک عدد در «مبنای هشت» (هشت هشتی | Octal Number) یا دسترسی نمادین به عنوان chmod تعیین کرد.
mtime=date--: هنگام افزودن فایلها به یک آرشیو، tar از date به جای زمان ویرایش واقعی آنها، به عنوان زمان ویرایش اعضا هنگام ساخت آرشیو استفاده میکند. مقدار date میتواند ارائه متنی از زمان یا نام یک فایل موجود باشد که با «/» یا «.» آغاز میشود و در آنها زمان ویرایش آن فایل استفاده شده است.
n, --seek-: فرض میشود که رسانه آرشیو، از جستجوی مکانهای دلخواه پشتیبانی میکند. معمولا، tar به طور خودکار تعیین میکند که آرشیو قابل جستجو است یا خیر. این گزینه در شرایطی که تشخیص با شکست مواجه شود، مورد استفاده قرار میگیرد. این حالت تنها زمانی ترتیب اثر پیدا میکند که آرشیو برای خواندن با گزینههای list-- یا extract-- باز شده باشد.
N, --newer, --after-date=date-: تنها فایلهایی را ذخیره میکند که دادهها یا وضعیت آنها پس از تاریخ تغییر کرده است. اگر date نام فایل است، date فایل مورد استفاده قرار میگیرد.
newer-mtime=date--: مانند after-time-- است، اما فقط به تاریخهای ویرایش نگاه میکند.
null--: هنگامی که tar از گزینه files-from-- استفاده میکند، این گزینه به tar دستور میدهد تا منتظر اسامی فایل خاتمه یافته با NULL باشد؛ بنابراین، tar میتواند به طور صحیحی با اسامی فایلهایی که حاوی خط جدید هستند کار کند.
no-null--: هر گزینه null-- تعیین شدهای را کنسل میکند.
numeric-owner--: همیشه از IDهای عددی به جای اسامی برای اطلاعات مالکیت کاربر/گروه استفاده میکند.
O, --to-stdout-: فایلها را در خروجیهای استاندارد استخراج میکند.
occurrence[=number]--: این گزینه همراه با یکی از زیر دستورات extract ،--diff ،--delete-- یا list--، هنگامی که یک لیست از فایلها در خط فرمان یا با گزینه -T داده شده است، قابل استفاده خواهد بود. این گزینه به tar دستور میدهد تا تنها دفعات وقوع هر file نامگذاری شده را پردازش کند. عدد به صورت پیشفرض برابر با ۱ است؛ بنابراین:
1tar -x -f archive.tar --occurrence filename
دستور بالا، اولین وقوع عضو «filename» را از «archive.tar» استخراج خواهد کرد و بدون اسکن کردن پایان آرشیو به کار خود پایان میدهد.
old-archive, --portability--: مشابه با format=v7-- است.
one-file-system--: از عبور کردن tar از مرزهای سیستمعامل هنگام آرشیو کردن جلوگیری میکند. این دستور با هرگونه عملیات نوشتنی قابل استفاده است.
overwrite--: فایل موجود را هنگام استخراج بازنویسی میکند.
overwrite-dir--: فرادادههای پوشههای موجود را در هنگام استخراج بازنویسی میکند (این رفتار پیشفرض است).
no-overwrite-dir--: فرادادههای پوشههای موجود را در هنگام استخراج حفظ میکند.
owner=user--: مشخص میکند که در هنگام ساخت فایل، به جای کاربر مرتبط با فایل منبع، tar باید از user به عنوان مالک اعضا استفاده کند. user میتواند یک نام کاربری یا شناسه عددی کاربر یا هر دو به صورت name:id باشد.
p, --preserve-permissions, --same-permissions-: هنگامی که tar یک آرشیو را استخراج میکند، به طور معمول، umask کاربر را از دسترسیهای تعیین شده در آرشیو کسر میکند و از آن عدد به عنوان دسترسی برای ساخت فایل مقصد استفاده میکند. تعیین این ویژگی به tar دستور میدهد که باید از دسترسیها به طور مستقیم از آرشیو استفاده کند.
P, --absolute-names-: «/» موجود در ابتدای نام فایل را از آن حذف نمیکند.
pax-option=keyword-list--: ساخت آرشیو را در فرمت POSIX.1-2001 امکانپذیر میسازد که در آن، keyword-list یک لیست جدا شده با کاما از گزینههای کلیدواژه مختص آن فرمت است.
posix--: مشابه با format=posix-- است.
preserve--: این مورد مشابه با تعیین هر دو --preserve-permissions و --same-order است.
quote-chars=STRING--: هنگام نمایش فایلها و دیگر اعضای یک آرشیو، tar با اسامی فایلها به طور خاصی برخورد میکند تا از ابهامات ایجاد شده به وسیله کاراکترهای خاصی که ممکن است در نام فایل به وقوع بپیوندند اجتناب کند؛ به این کار نقل قول کردن از اسم گفته میشود. گزینه quote-chars-- هر کاراکتری که در STRING به وقوع میپیوندد را نقل قول میکند.
no-quote-chars=STRING--: هنگام نقل قول اسم، tar هرگز هیچ یک از کاراکترهای موجود در STRING را نقل قول نمیکند.
quoting-style=STYLE--: هنگام نقل قول اسم، میتوان از استایل نقل قول اسم STYLE استفاده کرد. مقادیر معتبر STYLE عبارتند از: locale ،escape ،c ،shell-always ،shell ،literal و clocale. استایل نقل قول پیشفرض escape است؛ مگر اینکه در طول پیکربندی بسته نادیده گرفته شود.
R, --block-number-: با تعیین این گزینه، tar برای خطاهای خواندن با شماره بلاک در فایل آرشیو پیغام خطا چاپ میکند.
record-size=siz[suf]--: به tar دستور میدهد تا از size بایت در رکورد هنگام دسترسی به آرشیو استفاده کند. این آرگومان را میتوان با پسوند suffix، پسونددهی کرد. برای مثال: record-size=10K-- برای ۱۰ کیلوبایت.
recursion--: بازگشت در پوشهها را انجام میدهد (این حالت پیشفرض است).
no-recursion--: در زیرپوشهها هنگام آرشیو کردن بازگشت انجام نده.
recursive-unlink--: حذف سلسله مراتب پوشه موجود پیش از استخراج پوشههای دارای نام مشابه از آرشیو.
remove-files--: فایلها را پس از اضافه کردن آنها به آرشیو حذف میکند.
restrict: برخی از گزینههای مضر بالقوه tar را غیرفعال میکند. در حال حاضر این گزینه، shell invocation را غیرفعال میکند.
rmt-command=cmd--: در شرایطی که tar از یک سرور نوار راه دور استفاده کند، این گزینه به tar اطلاع میدهد که باید از cmd به عنوان برنامه سرور نوار راه دور به جای پیشفرض استفاده کند، /usr/libexec/rmt.
rsh-command=cmd--: در شرایطی که tar از یک شل راه دور برای ارتباط با دستگاههای غیرمحلی استفاده کند، این گزینه به tar اطلاع میدهد که باید از cmd به جای rsh پیشفرض استفاده کند.
s, --preserve-order, --same-order-: این گزینه هنگام پردازش لیست بزرگی از اسامی فایلها در ماشین با میزان کمی از حافظه مفید است. این لیست همراه با compare، --list-- یا extract-- مورد استفاده قرار میگیرد. گزینه same-order-- نیز به طور مشابه به tar میگوید که لیست اسامی فایلهای لیست یا استخراج شده، دارای ترتیبی مشابه با فایلهای موجود در آرشیو است. این کار امکان آن را فراهم میکند که یک لیست بزرگ از اسامی حتی در یک ماشین کوچک مورد استفاده قرار بگیرند؛ در غیر این صورت قادر نخواهد بود همه اسامی را در زمان واحدی در حافظه نگهداری کند. چنین لیست مرتب شدهای میتواند به سادگی با اجرای tar -t در آرشیو و ویرایش خروجی آن ساخته شود. این گزینه احتمالا هرگز در سیستمهای کامپیوتری مدرن مورد نیاز نیست.
S, --sparse-: این گزینه به tar دستور میدهد که هر فایل را از جهت پراکندگی (تنک بودن) پیش از تلاش برای آرشیو کردن آن، مورد بررسی قرار دهد. اگر فایل پراکنده تشخیص داده شود، با آن به شکل ویژهای برخورد میشود، بدین ترتیب امکان کاهش میزان فضای استفاده شده توسط image در آرشیو فراهم میشود. این گزینه تنها هنگام ساخت یا به روز رسانی آرشیوها معنادار است. این گزینه هیچ تاثیری روی استخراج ندارد.
same-owner--: تلاش میکند تا به فایلهای استخراج شده مالکیت مشابهی با فایلهای درون آرشیو بدهد (این مورد برای «اَبَر کاربر» (Super User) حالت پیشفرض است).
no-same-owner--: برای بازیابی مالکیت هنگام استخراج تلاش نمیکند. این حالت پیشفرض برای کاربران عادی است، بنابراین این گزینه تنها برای اَبَر کاربر موثر است.
no-same-permissions--: با این گزینه، umask کاربر هنگام استخراج دسترسیها از آرشیو اعمال میشود. این رفتار پیشفرض برای کاربران عادی است.
no-seek--: تلاش نمیکند تا یک مکان دلخواه را در آرشیو جستجو کند.
show-defaults--: حالت پیشفرض tar را نمایش میدهد. این مورد میتواند در برخی از شل اسکریپتها بسیار مفید باشد.
show-omitted-dirs--: هنگام لیست کردن یا استخراج، هر پوشهای که با معیار جستجو تطابق ندارد را لیست میکند.
show-transformed-names, --show-stored-names--: اسامی فایل یا اعضا را پس از اعمال هرگونه تغییر نامی نمایش میدهد. به طور کلی، هنگامی که همراه با یکی از عملیات ساخت آرشیو به کار میرود، به tar دستور میدهد تا اسامی اعضای ذخیره شده در آرشیو را به طور مخالف اسامی واقعی فایلها لیست کند.
sparse-version=version-number--: نسخه فرمت را برای استفاده هنگام آرشیو کردن فایلهای پراکنده تعیین میکند. دلالت بر sparse-- دارد.
strip-components=number--: یک عدد داده شده از مولفه پیشرو از اسامی فایل را پیش از استخراج، تهی (Strip) میکند. برای مثال، اگر archive.tar حاوی یک عضو نامگذاری شده /some/file/name باشد، اجرای دستور زیر موجب استخراج این فایل به فایل name میشود.
tar --extract --file archive.tar --strip-components=2
suffix=suffix--: پسوند اسم فایل suffix را هنگام تهیه نسخه پشتیبان از فایلها استفاده میکند. اگر suffix-- تعیین نشود، پسوند پیشفرض نسخه پشتیبان، مقدار متغیر محیطی DEFAULT_BACKUP_SUFFIX است و یا در صورت تعیین نشدن متغیر، برابر با «~» خواهد بود.
T, --files-from=file-: با این دستور، tar از محتوای فایل به عنوان یک لیست از اعضای آرشیو یا فایلها برای عملیات در آن، علاوه بر مواردی که در خط فرمان تعیین شدهاند، استفاده میکند.
to-command=command--: در طول استخراج، tar فایلهای استخراج شده را در ورودی استاندارد دستور اعمال میکند.
totals[=signum]--: کل بایتها را در هنگام پردازش یک آرشیو نمایش میدهد. اگر signum تعیین شده باشد، این کلها هنگامی نمایش داده میشوند که tar شماره سیگنال signum را دریافت میکند.
transform, --xform=sed-expr--: اسامی فایل را با عبارت جایگزینی sed-expr، جایگزین میکند. برای مثال، دستور زیر به فایلهایی archive.tar از پوشه جاری اضافه میکند و پیشوند اولیه /. را با /usr جایگزین میکند.
tar cf archive.tar --transform 's,^\./,usr/,'
-U, --unlink-first: یک فایل متناظر را پیش از استخراج آن از آرشیو و به جای بازنویسی آن، از فایل سیستم حذف میکند.
unquote--: خواندن اسامی فایلها را با استفاده از T-، بدون نقل قول میکند (این حالت پیشفرض است).
no-unquote--: خواندن اسامی فایلها را با T-، بدون نقل قول نمیکند.
utc--: همه زمانهای فایل را در UTC چاپ میکند (زمان جهانی).
v, --verbose-: به صورت «لفظی» (Verbosely) عمل میکند.
V, --label=name-: هنگام ساخت یک آرشیو، name را به عنوان رکورد نام در آرشیو مینویسد. هنگام استخراج یا لیست کردن آرشیو، tar فقط روی آرشیوهایی که دارای برچسبی هستند که با الگوی موجود در name تطبیق پیدا کرده است، عمل میکند.
volno-file=file--: همراه با multi-volume--، دستور tar به پیگیری اینکه کدام نسخه از آرشیو چند نسخهای در فایل file کار میکند میپردازد.
-w, --interactive, --confirmation: برای انجام هر کاری، درخواست تایید میکند.
-W, --verify: تلاش میکند تا آرشیو را پس از نوشتن آن تایید کند.
warning=keyword--: نمایش پیامهای هشدار تعیین شده با کلیدواژهها را کنترل میکند. اگر keyword با پیشوند -no شروع شود، چنین پیامهای سرکوب میشوند. در غیر این صورت، فعال میشوند.چندین مشخصه warning-- ممکن است مورد استفاده قرار بگیرند. کلیدواژههایی برای پیامهای هشدار گوناگون در tar وجود دارند. دو کلیدواژه سراسری عبارتند از:
- all: همه پیامهای هشدار را فعال میکند. این پیشفرض است.
- none: همه پیامهای خطا را غیرفعال کند.
wildcards--: از wildcards استفاده میکند.
wildcards-match-slash--: هنگامی که این ویژگی تعیین شد، یک wildcard مانند * در الگوها میتواند یک / را در نام تطبیق دهد. در غیر این صورت، / تنها با / تطبیق داده میشود. هنگامی که tar فایلها را استثنا میکند، این حالت پیشفرض است.
no-wildcards-match-slash--: / توسط یک wildcard قابل تطبیق نیست و تنها با / تطبیق پیدا میکند.
no-wildcards--: با این مورد، Wildcardها پذیرفته نمیشوند. اسامی فایلها ممکن است تنها به صورت تحتالفظی تطبیق داده شوند.
X, --exclude-from=file-: مشابه با exclude-- است، با این تفاوت که فایلهایی که با الگوهای لیست شده در فایل file تطابق دارند را استثنا میکند.
z, --gzip, --gunzip-: این گزینه به tar میگوید که آرشیوها را از طریق gzip بخواند و بنویسد. این کار به tar امکان عملیات مستقیم روی انواع آرشیوهای فشرده شده را به طور شفاف میدهد. این گزینه برای مثال هنگامی باید استفاده شود که روی فایلهایی با افزونه .tar.gz کار میکند.
Z, --compress, --uncompress-: با این گزینه، tar از برنامه compress هنگام عملیات روی فایلها استفاده میکند.
محیط
متغیرهای محیطی زیر عملیات tar را تحت تاثیر قرار میدهند.
SIMPLE_BACKUP_SUFFIX: پسوند نام فایل برای استفاده هنگام تهیه نسخه پشتیبان از فایل در صورتی است که suffix-- تعیین نشده باشد. پسوند پشتیبان پیشفرض برابر با ~ است.
TAR_OPTIONS: هر گزینه تعیین شدهای در این متغیر به گزینههای تعیین شده برای tar در خط فرمان اضافه میشود.
TAPE: برای استفاده از نوار آرشیو یا فایل در صورتی است که file-- تعیین نشده باشد. اگر این متغیر تعریف نشده باشد و هیچ --file نیز مشخص نشده باشد، tar از ورودی و خروجی استاندارد به جای آن استفاده میکند.
مثالهایی از دستور tar
tar -cf archive.tar file1 file2
آرشیو archive.tar حاوی فایلهای file1 و file2 ساخته میشود. در اینجا، c به tar میگوید که کاربر یک آرشیو خواهد ساخت. f به tar میگوید که گزینه بعدی (در اینجا archive.tar است) نام آرشیوی است که میسازد. file1 و file2، آرگومانهای نهایی و در واقع، فایلهایی هستند که آرشیو میشوند.
tar -tvf archive.tar
فایلهایی که در آرشیو archive.tar هستند را به صورت لفظی لیست میکند. در اینجا، t به tar میگوید که محتوای آرشیو را لیست کند. v به tar میگوید که به صورت لفظی عمل کند؛ و f نشان میدهد که آرگومان بعدی نام فایل آرشیو برای عملیات است.
tar -xf archive.tar
فایلها را از آرشیو archive.tar استخراج میکند. x به tar میگوید که فایلها را از آرشیو استخراج کند. f به tar میگوید که آرگومان بعدی نام آرشیو برای عملیات در آن است.
tar -xzvf archive.tar.gz
فایلها را از آرشیو gzip شده archive.tar.gz به طور لفظی استخراج میکند. در اینجا، z به tar میگوید که آرشیو با gzip فشرده میشود.
tar -cf archive.tar mydir/
یک آرشیو از پوشه mydir میسازد.
tar -czf archive.tar.gz mydir/
یک آرشیو فشرده شده gzip از پوشه mydir میسازد.
tar -zxvf myfile.tar.gz
محتوای myfile.tar.gz را در پوشه جاری استخراج میکند.
tar -xvf archive.tar documents/work/budget.doc
تنها فایل documents/work/budget.doc از آرشیو archive.tar استخراج میشود. خروجی لفظی تولید میشود.
tar -xvf archive.tar documents/work/
تنها، پوشه /documents/work و هر فایلی که در آن وجود دارد را از آرشیو archive.tar استخراج میکند. خروجی لفظی تولید میشود.
tar -xvf archive.tar --wildcards '*.doc'
تنها فایلهایی با پسوند .doc را از archive.tar استخراج میکند. گزینه wildcards-- به tar میگوید که wildcardها را در نام فایل تفسیر کند تا استخراج شوند. نام فایل (*.doc) در '' قرار گرفته است تا از wildcard (*) در مقابل بسط یافتن نادرست توسط شل محافظت شود.
1tar -rvf archive.tar documents/work/budget.doc
فایل documents/work/budget.doc را به آرشیو موجود archive.tar اضافه میکند. گزینه r مشابه با گزینه طولانی append-- است.
1tar -uvf archive.tar documents/work/budget.doc
فایل documents/work/budget.doc را تنها در صورتی به آرشیو archive.tar اضافه میکند که جدیدتر از نسخهای باشد که در حال حاضر در آرشیو وجود دارد (یا در آرشیو وجود ندارد). در اینجا، u مشابه گزینه طولانی update-- است.
1tar -cf - documents/work/ | wc -c
سایز فایل یک آرشیو از پوشه documents/work را تخمین میزند، اما فایل را نمیسازد. در اینجا، فایل آرشیو به عنوان خط تیره (Dash | -) تعریف شده است که به tar میگوید خروجی آرشیو شده را به جای دیسک، خروجی استاندارد ارسال کند. سپس، این خروجی به دستور WC، پایپ (Pipe) میشود که گزارش میدهد چه تعداد بایت (c-) در ورودی که دریافت کرده است وجود داشتهاند.
1tar -czf DogPhotos.tar.gz --exclude='kitty.jpg' MyPetPhotos
یک DogPhotos.tar.gz از همه فایلهای قرار گرفته در MyPetPhotos بدون تصویر kitty.jpg میسازد.
tar tf hope.tar.gz | grep myfile.txt
فایل hope.tar.gz را برای فایل myfile.txt جستجو و مسیر کامل فایل را لیست میکند. نتایج بازگردانده شده شبیه به خطی هستند که در زیر ارائه شده است.
computerhopehope/homedir/public_html/data/myfile.txt
1tar -zxvf hope.tar.gz computerhopehope/homedir/public_html/data/myfile.txt
در مثال بالا، دستور tar فایل myfile.txt را از hope.tar.gz استخراج میکند. مسیر کامل به این فایل با استفاده از مثالی که پیشتر نمایش داده شد تعیین میشود.
دستورات مرتبط
ar: فایلها را از آرشیو میسازد، ویرایش و استخراج میکند.
basename: اطلاعات پوشه و پسوندها را از اسامی فایل تهی (Strip) میکند.
cd: پوشه جاری را تغییر میدهد.
chown: مالکیت فایلها یا پوشهها را تغییر میدهد.
cpio: فایلها را از/به آرشیو کپی میکند.
dirname: نام فایل را از یک نام مسیر تهی میکند و تنها مولفه پوشه را بر جای میگذارد.
gzip: محتوای آرشیو زیپ گنو را میسازد، لیست و ویرایش میکند و همچنین فایلها را از آن استخراج میکند.
ls: محتوای پوشه یا پوشهها را لیست میکند.
mt: نوارهای مغناطیسی را کنترل میکند.
zcat: محتوای فشرده نشده فایلهای فشرده را پرینت میکند.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای لینوکس
- آموزش لینوکس مقدماتی – ساختار داخلی و ترمینال لینوکس
- آموزش نسخههای مختلف ویندوز
- باز کردن فایلهای فشرده tar.gz. یا tar.bz2. روی لینوکس — راهنمای کاربردی
- آموزش ترمینال لینوکس — راهنمای شروع به کار
- ۷ دلیل برای برنامهنویسی در لینوکس
- حذف فایل در لینوکس از طریق ترمینال — راهنمای کاربردی
^^