دستور tar در لینوکس چیست؟ – توضیح کاربرد و استفاده + ۱۸ مثال و ترفند
دستور tar در لینوکس پرکاربردترین دستور برای مدیریت آشیوهاست. این دستور ابزار قدرتمندی برای ساخت، فشردهسازی و استخراج آرشیوها است. نام دستور tar از عبارت «Tape archive» گرفته شده است که اشاره به کاربرد اولیه این دستور برای ساخت آرشیو روی نوارهای مغناطیسی دارد. کارکرد اصلی دستور tar در لینوکس تجمیع چند فایل و دایرکتوری در یک فایل آرشیو است. به این ترتیب میتوان فایل آرشیو ایجاد شده را فشردهسازی کرد تا حافظه کمتری را اشغال کند، همچنین انتقال فایل آرشیو نیز به این صورت سریعتر و راحتتر انجام میشود. در نهایت از دستور tar برای استخراج فایلهای آرشیو، بررسی محتویات آنها و یا افزودن فایل جدید به آرشیو موجود نیز استفاده میشود. هر کاربر لینوکس لازم است بداند دستور tar در لینوکس چیست و چطور باید از آن استفاده کرد.
کاربران لینوکس میتوانند به کمک این دستور از حافظه سیستم خود به صورت کارآمدتری استفاده کنند، و انتقال فایلها را به شیوه سریعتری انجام دهند. همچنین تسلط بر دستور tar به آنها این امکان را میدهد که کارهای تکراری مانند پشتیبان گیری از فایلها و تنظیمات سیستم را به صورت خودکار انجام دهند و وقت کمتری برای آنها صرف کنند.
در این مقاله پس از آشنایی با ساختار دستور tar و معرفی گزینههای پرکاردی که این دستور از آنها پشتیبانی میکند، ۱۸ مثال کاربردی را بررسی و اجرا خواهیم کرد تا با قابلیتهای اساسی این دستور آشنا شویم و در عمل آنها را به کار بگیریم. در این مثالها با شیوههای ساخت و استخراج آرشیو با دستور tar آشنا میشویم و همچنین آرشیوهایی که ایجاد میکنیم را به روشهای مختلف فشردهسازی میکنیم و آنها را با همدیگر مقایسه میکنیم. سپس در مثالهای پیشرفتهتر از عبارات باقاعده برای انتخاب فایلهای آرشیو استفاده میکنیم و ملاحظات امنیتی در باره شیوه حفظ مالکیت و مجوزهای دسترسی فایلهای آرشیو را مرور میکنیم.
ساختار دستور tar در لینوکس
ساختار کلی دستور tar در لینوکس به صورت زیر است:
tar [operation mode] [options] [archive] [files or locations]
ورودیهای این دستور همان طور که میبینید به چهار دسته تقسیم میشوند.
- operation mode: نشانههایی که در این قسمت درج میشوند تعیین کننده این هستند که چه عملیاتی روی فایلهایی که در قسمتهای بعدی ورودی انجام میشود. دستور tar در هربار اجرا شدن تنها یک عملیات را انجام میدهد، به این ترتیب نمیتوان از چند نشانه مربوط به این قسمت به طور همزمان استفاده کرد.
- options: نشانههای که در این قسمت قرار میگیرند جزئیاتی را در مورد نحوه انجام عملیات مشخص میکنند. این قسمت ضروری نیست.
- archive: نام و پسوند فایل آرشیو که عملیات باید با استفاده از آن انجام شود.
- files or locations: لیستی از فایلها و دایرکتوریها که برای استخراج یا فشرده سازی باید از آنها استفاده شود. فایلهای این لیست را با کاراکتر فاصله از یکدیگر تفکیک میکنیم.
سبکهای مختلف نوشتن دستور tar در لینوکس
هنگام نوشتن دستور tar قسمتهای operation mode و options را به سه سبک متفاوت میتوانید درج کنید. در ادامه این مقاله همه مثالها با سبک گزینههای کوتاه UNIX نوشته شدهاند اما برای این که با هر سه سبک نوشتن دستور tar آشنا شوید در اینجا به سبکهای مختلف نوشتن دستورهای tar اشاره میکنیم؛
شیوه سنتی
در این شیوه نگارش دستورها نشانههای مختلف بدون کاراکتر خط فاصله یا «- » پشت سر هم قرار میگیرند. به عنوان مثالی از این شیوه نگارش اگر بخواهیم در قسمت operation mode از نشانه c و در قسمت options از نشانههای f و v استفاده کنیم دستور tar را به صورت زیر مینویسیم:
tar cfv [archive] [files or locations]
شیوه گزینههای کوتاه UNIX
در این شیوه نگارش دستورهای لینوکس پیش از قرار دادن نشانهها از یک کاراکتر خط فاصله «-» استفاده میکنیم و پس از آن نشانهها را پشت سر هم مینویسیم. مثلا اگر بخواهیم دستور بالا را به این شیوه بازنویسی کنیم باید بنوسیم:
tar -cfv [archive] [files or locations]
همچنین در این سبک نگارش دستورهای لینوکس میتوانیم پیش از هر نشانه یک خط فاصله قرار دهیم و به این صورت نشانههای مختلف را از همدیگر تفکیک کنیم. مانند مثال زیر:
tar -c -f -v [archive] [files or locations]
شیوه گزینههای بلند UNIX
بسیاری از دستورهای لینوکس از این شیوه نگارش پشتیبانی میکنند. در این شیوه نگارش به جای استفاده از نشانههای کوتاه از نشانههای بلند که معمولا کارکردشان را توضیح میدهند استفاده میکنیم و پیش از نوشتن نشانه از دو کاراکتر خط فاصله پشت سر هم «-- » استفاده میکنیم. بیشتر نشانههای کوتاه در دستورهای لینوکس یک معادل بلند هم دارند که میتوانیم از آنها برای نگارش دستورها با شیوه گزینههای بلند UNIX استفاده کنیم. استفاده از این شیوه نگارش باعث به ویژه در اسکریپتهای شل باعث میشود دستورها برای سایر افراد خواناتر باشند و حتی افرادی که با ساختار یک دستور آشنا نیستند بتوانند کارکرد نشانههای به کار گرفته شده را حدس بزنند. بازنویسی دستور فوق با شیوه گزینههای بلند UNIX به این صورت خواهد بود:
tar --create --file [archive] --verbose [files or locations]
استفاده از هر سه سبک نگارش دستور در یک دستور tar امکانپذیر است اما اغلب از این کار پرهیز میکنیم چراکه خوانایی دستورها را کاهش میدهد.
نشانههای دستور tar
در جدول زیر به طور خلاصه نشانههای پرکاربرد دستور tar را معرفی میکنیم. همچنین نشانه مورد استفاده برای شیوه نگارش گزینههای بلند UNIX را نیز در زیر نشانه کوتاه میبینید:
نشانه | نقش | توضیحات |
-c
--create | operation mode | ساخت آرشیو جدید |
-t
--list | operation mode | نمایش محتویات فایل آرشیو |
-x
--extract | operation mode | استخراج یک یا چند فایل از فایل آرشیو |
-r
--append | operation mode | الحاق فایل به فایل آرشیو |
-A
--concatenate | operation mode | الحاق یک فایل آرشیو به فایل آرشیو دیگر |
-d
--compare --diff | operation mode | مقایسه محتویات آرشیو با فایلهای سیستم |
--delete | operation mode | حذف فایلی از محتویات فایل آرشیو |
-u
--update | operation mode | به روزرسانی آرشیو با فایلهای جدید. افزودن فایلها به آرشیو تنها در صورتی که از قبل در آرشیو موجود نباشند یا نسخه جدیدی نسبت به نسخه موجود در آرشیو باشند. |
-f [archive]
--file [archive] | option | فایل آرشیو که عملیات باید روی آن انجام شود را مشخص میکند. |
-C | option | تغییر دایرکتوری |
-v
--verbose | option | نمایش فایلی که دستور tar در حال کار با آن است حین اجرای دستور. |
--wildcard | option | ترجمه جستجو به صورت wildcard |
-j
--bzip2 | option | خواندن و نوشتن آرشیوهای فشردهسازی شده از طریق فرمت bzip2 |
-z
--gzip | option | خواندن و نوشتن آرشیوهای فشردهسازی شده از طریق فرمت gzip |
-J
--xz | option | خواندن و نوشتن آرشیوهای فشردهسازی شده از طریق فرمت xz |
در مثالهایی که در قسمت بعد خواهیم دید دستور tar در لینوکس را با استفاده از این نشانهها اجرا میکنیم و با کارکرد آنها آشنا میشویم.
مثالهایی از کاربرد دستور tar
برای اجرای مثالهایی که در این قسمت خواهیم دید به تعدادی فایل و دایرکتوری احتیاج داریم که از آنها در دستور tar استفاده کنیم. برای این که بتوانید از مثالها دقیقا همانطور که در این مقاله آمدهاند استفاده کنید این فایلها و دایرکتوریها را دقیقا مطابق دستورهای زیر ایجاد کنید.
دستور زیر را در ترمینال لینوکس اجر کنید تا یک دایرکتوری به نام tar_examples بسازید و سپس با استفاده از دستور cd در لینوکس این دایرکتوری را به عنوان دایرکتوری فعال کنونی انتخاب کنید:
mkdir tar_examples && cd tar_examples
حالا در دایرکتوری tar_examples یک دایرکتوری دیگر با نام files بسازید و آن را به عنوان دایرکتوری فعال کنونی انتخاب کنید:
mkdir files && cd files
با اجرا کردن دستور زیر تعدادی فایل در دایرکتوری files بسازید. از این فایلها برای ساخت آرشیو به کمک دستور tar در لینوکس استفاده خواهیم کرد:
touch file{0..100}.txt
به کمک دستور ls در لینوکس میتوانید فایلهای ساخته شده را بررسی کنید:
ls -l
در نهایت با اجرای دستور زیر به دایرکتوری والد برگردید و مثالهای زیر را در آنجا اجرا کنید:
cd ..
ساخت آرشیو با دستور tar در لینوکس
برای ساخت آرشیو به کمک دستور tar در لینوکس باید در قسمت operation mode از نشانه -c یا --create استفاده کنیم.
ساخت آرشیو tar
در آرشیوهای tar که با عنوان tarball نیز شناخته میشوند فایلها و دایرکتوریها تنها در یک فایل آرشیو تجمیع شدهاند و فشردهسازی روی آنها اعمال نشده است. این فایلها با پسوند .tar ذخیره میشوند. شکل دستوری زیر برای ساخت آرشیوهایی از این دست به کار میرود:
tar -cf [archive name].tar [file(s) or location(s)]
به طور مثال برای ساخت یک فایل آرشیو از دایرکتوری files که پیش از این ساختیم از دستور زیر استفاده میکنیم:
tar -cf files.tar files
دستور بالا دایرکتوری files و همه محتویات آن را در یک فایل آرشیو با نام files.tar ذخیره میکند. به کمک دستور ls میتوانید این فایل را ببینید:
ls -lh
ساخت آرشیو فشرده tar.gz
با افزودن نشانه -z یا --gzip در قسمت options میتوانید فایلهای آرشیو را به شیوه GNUZip فشردهسازی کنید. فایلهای آرشیو فشردهسازی شده به صورت GNUZip با پسوند tar.gz ذخیره میشوند. برای ساخت فایلهای آرشیو که به این روش فشردهسازی شده باشند از شکل دستوری زیر استفاده میکنیم:
tar -czf [archive name].tar.gz [file(s) or location(s)]
به عنوان مثال برای ذخیره دایرکتوری files در یک فایل آرشیو و فشردهسازی آن با شیوه GNUZip از دستور زیر استفاده میکنیم:
tar -czf files.tar.gz files
با اجرای دستور ls میتوانید تفاوت حجم فایل files.tar.gz و فایل files.tar را مشاهده کنید. تفاوت حجم این دو فایل ناشی از اعمال فشردهسازی در فایل files.tar.gz است.
ساخت آرشیو فشرده tar.bz2
bzip2 یک ابزار فشردهسازی است که میتوان به عنوان جایگزین gzip از آن استفاده کرد. برای ساخت یک آرشیو tar.bz2 از نشانه -j یا --bzip2 در قسمت options استفاده میکنیم. شکل کلی دستور tar برای ساخت این فایلهای آرشیو به صورت زیر است:
tar -cjf [archive name].tar.bz2 [file(s) or location(s)]
مثلا برای ساخت آرشیو فشرده سازی با bzip2 از دایرکتوری files از دستور زیر استفاده میکنیم:
tar -cjf files.tar.bz2 files
دقت کنید که ابزار bzip2 ممکن است به صورت پیشفرض در سیستم شما نصب نشده باشد، چنانچه پس از اجرا کردن دستور بالا پیام خطا دریافت کردید به این معنی است که این ابزار روی سیستم شما نصب نشده است. برای نصب bzip2 میتوانید از ابزار apt یا هر ابزار مدیریت پکیج دیگری استفاده کنید:
sudo apt-get install bzip2
ساخت آرشیو فشرده tar.xz
استفاده از نشانه -J (به بزرگ بودن حرف J دقت کنید) یا --xz در قسمت options دستور tar در لینوکس به ما امکان ساخت فایلهای tar.xz را میدهد. شیوه فشردهسازی xz زمانی بیشتر از روشهای GNUZip و bzip2 صرف میکند اما از آنجا که نسبت فشردهسازی بیشتری در کار با فایلهای حجیم دارد استفاده از آن میتواند بسیار کاربردی باشد. شکل کلی استفاده از دستور tar برای به کار گرفتن شیوه فشردهسازی xz به این صورت است:
tar -cJf [archive name].tar.xz [file(s) or location(s)]
به عنوان مثال برای تهیه یک آرشیو tar.xz از دایرکتوری files دستور زیر را باید در ترمینال لینوکس وارد کنیم:
tar -cJf files.tar.xz files
در تصویر زیر میبینید که چهار فایل آرشیو به شیوهای که در مثالها ذکر شدند از دایرکتوری files ساخته شدهاند. تفاوت حجم این فایلها را با یکدیگر مقایسه کنید:
حذف فایلها پس از ساخت آرشیو
بسیاری از مواقع پس از تهیه آرشیو از فایلها و دایرکتوریها میخواهیم فایلهای اصلی را حذف کنیم. این عمل معمولا بخشی از فرآیند تهیه نسخه پشتیبان از گزارشهای سیستمی است. برای این که فایلها و دایرکتوریهایی که در آرشیو ذخیره میشوند به صورت خودکار پس از ساخته شدن فایل آرشیو حذف شوند از نشانه --remove-files در انتهای دستور tar استفاده میکنیم. شکل کلی به کار گرفتن این نشانه در دستور tar در لینوکس به صورت زیر است:
tar cf [archive] [file(s) or location(s)] --remove-files
به عنوان مثال برای این که عملکرد این نشانه را بررسی کنیم ابتدا یک کپی از دایرکتوری files با نام files-2 میسازیم:
cp -r files files-2
با استفاده از دستور ls میتوانید ساخته شدن دایرکتوری جدید را تایید کنید. حالا برای تهیه آرشیو از دایرکتوری files-2 و سپس حذف این دایرکتوری از سیستم از دستور زیر استفاده کنید:
tar -cf files-2.tar files-2 --remove-files
به کمک دستور ls میتوانید تایید کنید که پس از اجرای دستور فوق فایل آرشیو files-2.tar ساخته شده و دایرکتوری files-2 حذف میشود.
استخراج فایلها از آرشیو
با استفاده از نشانههای -x یا --extract در قسمت operation mode دستور tar در لینوکس عملیات استخراج فایل از آرشیو را انجام میدهیم. به کمک نشانههای دیگر که در قسمت options درج میشوند میتوانیم نوع فایل و محل ذخیرهسازی فایلهای استخراج شده را مشخص کنیم.
استخراج فایلها از آرشیو tar
شکل کلی به کارگیری دستور tar برای استخراج همه فایلهای آرشیو tar به این صورت است:
tar -xf [archive name].tar
به صورت پیشفرض دستور tar همه محتویات آرشیو را در دایرکتوری کنونی استخراج و ذخیرهسازی میکند. برای اینکه صراحتا محل ذخیرهسازی فایلهایی که استخراج میشوند را مشخص کنید باید نشانه -C (به بزرگ بودن حرف c دقت کنید) را به دستوری که اجرا میکنید اضافه کنید و پس از مشخص کردن فایل آرشیو، مسیر ذخیرهسازی فایلهایی که استخراج میشوند را مشخص کنید:
tar -xf [archive name].tar -C [path]
به عنوان مثال با استفاده از دستور زیر یک دایرکتوری با نام extracted_tar میسازیم و فایلهای استخراج شده از آرشیو fiels.tar را در آن ذخیره میکنیم:
mkdir extracted_tar && tar -xf files.tar -C extracted_tar
استخراجفایلها از آرشیو tar.gz
دقیقا مانند همان زمان که از دستور tar برای ساخت آرشیو استفاده میکنیم، برای مشخص کردن شیوه فشردهسازی GNUZip در عملیات استخراج نیز از نشانه -z یا --gzip استفاده میکنیم. به این ترتیب شکل کلی استفاده از دستور tar در استخراج آرشیوهای tar.gz به این صورت است:
tar -xzf [archive name].tar.gz
برای مشخص کردن محل ذخیرهسازی فایلها پس از استخراج نیز از نشانه -C استفاده میکنیم. به طور مثال برای این که یک دایرکتوری با نام extracted_gz بسازیم و فایلهای استخراج شده از آرشیو files.tar.gz را در آن ذخیره کنیم دستور زیر را در ترمینال لینوکس وارد میکنیم:
mkdir extracted_gz && tar -xzf files.tar.gz -C extracted_gz
در مقایسه با دیگر آرشیوهایی که فشردهسازی روی آنها اعمال شده است، استخراج آرشیوهای tar.gz در زمان کوتاهتری انجام میشود. زمانی که میخواهید شیوه فشردهسازی آرشیوها را انتخاب کنید باید به این موضوع فکر کنید و بر اساس این که نسبت فشردهسازی و زمان فشردهسازی و استخراج اطلاعات هرکدام تا چه اندازه در کارهای شما موثر خواهند بود شیوه فشردهسازی آرشیوها را انتخاب کنید.
استخراج فایلها از آرشیو tar.bz2
نشانههای -j یا --bzip2 برای استخراج فایلها از آرشیو tar.bz2 مورد استفاده قرار میگیرند. همچنین در زمان استخراج فایلهای tar.bz2 نیز مانند سایر فایلهای آرشیو با استفاده از نشانه -C میتوانیم محل ذخیرهسازی فایلهایی که استخراج میشوند را مشخص کنیم. به این ترتیب شکل کلی استفاده از دستور tar برای استخراج آرشیوهای tar.bz2 بدون مشخص کردن محل ذخیرهسازی فایلهایی که استخراج میشوند به این صورت خواهد بود:
tar -xjf [archive name].tar.bz2
در صورتی که محل ذخیرهسازی فایلها پس از استخراج مشخص شوند نیز دستور tar با شکل کلی زیر به کار گرفته میشود:
tar -xjf [archive name].tar.bz2 -C [location]
مانند مثالهای قبل برای ساخت یک دایرکتوری با نام extracted_bz2 و ذخیره محتویات آرشیو files.tar.bz2 در آن از دستور tar به شکل زیر استفاده میکنیم:
mkdir extracted_bz2 && tar -xjf files.tar.bz2 -C extracted_bz2
استخراج فایلها از آرشیو tar.xz
با افزودن نشانههای -J یا --xz به قسمت options دستور tar در لینوکس هنگام استخراج فایلهای آرشیو، آرشیوهای tar.xz را از حالت فشرده خارج کرده و محتویات آنها را استخراج میکنیم. شکل کلی کاربرد دستور tar برای استخراج فایلهای tar.xz را در زیر میبینید:
tar -xJf [archive name].tar.xzهمچنین شکل به کارگیری این دستور برای استخراج فایلهای آرشیو در محل مشخص نیز به صورت زیر خواهد بود:
tar -xJf [archive name].tar.xz -C [location]
با اجرای دستور زیر در ترمینال لینوکس یک دایرکتوری با نام extracted_xz میسازیم و محتویات آرشیو files.tar.xz را در آن استخراج میکنیم:
mkdir extracted_xz && tar -xJf files.tar.xz -C extracted_xz
زمان استخراج آرشیوهای tar.xz بین زمان صرف شده برای استخراج آرشیوهای فشردهسازی شده با دو شیوه GNUZip و bzip2 قرار میگیرد.
مدیریت فایلهای مشابه
چنانچه نام فایلهای درون آرشیو مشابه فایلهایی باشند که پیش از این در محل ذخیرهسازی فایلهای استخراج شده موجود بودند با یک مشکل مواجه میشویم. در این شرایط واضح است که نمیتوانیم هر دو فایل را با نام یکسان و در مسیر یکسان حفظ کنیم. در این شرایط دستور tar برای تعیین چگونگی مواجهه با این مشکل سه گزینه در اختیار ما قرار میدهد.
ذخیره فایلهای آرشیو روی فایلهای موجود
با افزودن نشانه --overwrite در انتهای دستور tar فایلهایی که استخراج میشوند بر روی فایلهایی که از قبل موجود هستند ذخیره میشوند. شکل کلی استفاده از دستور tar همراه این نشانه به صورت زیر است:
tar -xf [archive] -C [location] --overwrite
در نظر داشته باشید همانطور که در قسمت قبل دیدیم استفاده از نشانه -C ضروری نیست و تنها در صورتی که بخواهیم محل ذخیرهسازی فایلها را پس از استخراج مشخص کنیم از آن استفاده میکنیم.
حفظ فایلهای موجود
رفتار دیگری که دستور tar در مواجهه با این شرایط میتواند نشان دهد این است که از ذخیرهسازی فایلهایی که نامشان با نام فایلهای موجود در سیستم تداخل دارد صرفنظر کند و فایلهای موجود در سیستم را دست نخورده باقی بگذارد. برای انجام این کار باید از نشانه --keep-old-files در انتهای دستور tar در لینوکس استفاده کنیم. به این ترتیب شکل کلی استفاده از دستور tar برای اینکه فایلهای موجود در سیستم را حفظ کنیم به صورت است:
tar -xf [archive] -C [location] --keep-old-files
حفظ فایل جدیدتر
رویکرد سوم به مشکل تداخل نام فایلها در آرشیو و فایلهای موجود در سیستم این است که از تاریخ ایجاد شدن فایلها برای تصمیمگیری در مورد اینکه کدام فایل حفظ شود و کدام فایل حذف شود استفاده کنیم. با قرار دادن نشانه --keep-newer-files در انتهای دستور tar، این دستور تاریخ ساخت فایلهایی که در آرشیو ذخیره شدهاند را با تاریخ ساخت فایلهای همنام که در سیستم وجود دارند مقایسه میکند و هرکدام که جدیدتر بود را حفظ میکند. برای استفاده از این قابلیت در زمان استخراج فایلها دستور tar را به شکل زیر به کار میبریم:
tar -xf [archive] -C [location] --keep-newer-files
بررسی محتویات آرشیو
دستور زیر شکل کلی استفاده از دستور tar برای مشاهده محتویات یک فایل آٰشیو را نشان میدهد:
tar -tf [archive]
با استفاده از این دستور میتوانید بدون استخراج فایلها از آرشیو محتویات آرشیو را بررسی کنید. برای انجام این عملیات نیازی به مشخص کردن نوع فشردهسازی آرشیو نیست. میتوانید با استفاده از دستور فوق محتویات هرکدام از فایلهای files.tar.gz، files.tar.xz، files.tar.bz2 یا files.tar را بررسی کنید بدون این که نیاز باشد تغییری در نشانههای دستور tar ایجاد کنید. به عنوان مثال با وارد کردن دستور زیر در ترمینال محتویات آرشیو files.tar.gz چاپ خواهد شد:
tar -tf files.tar.gz
جستجوی یک فایل در آرشیو
برای بررسی وجود یک فایل خاط در آرشیو به دو شیوه میتوانیم عمل کنیم.
هنگام استفاده از نشانه -t برای بررسی محتوای آرشیو اگر پس از نام آرشیو نام فایلی که به دنبال آن میگردیم را وارد کنیم دستور tar وجود آن فایل در آرشیو را مورد بررسی قرار میدهد و در صورتی که آن را بیابد مسیر ذخیرهسازی آن فایل را در خروجی نمایش میدهد. در صورتی که فایل مورد بررسی در آرشیو یافت نشود دستور tar به وسیله یک پیام خطا این موضوع را به کاربر اطلاع میدهد. همچنین میتوانید به این روش جستجو را برای چند فایل انجام دهید، فقط کافیست نام فایلها را با یک کاراکتر فاصله از همدیگر جدا کنید. شکل عمومی استفاده از دستور tar برای جستجوی فایلهای آرشیو به این صورت است:
tar -tf [archive] [file(s)]
به عنوان مثال با استفاده از دستور زیر میتوانید فایلهای files/file330.txt و files/file0.txt را در آرشیو files.tar.gz جستجو کنید:
tar -tf files.tar.gz files/file330.txt files/file0.txt
در تصویر زیر نتیجه اجرای دستور فوق در ترمینال لینوکس را میبینیم:
همچنین از دستور grep نیز برای جستجوی فایلها در آرشیو میتوانیم استفاده کنیم. شکل عمومی استفاده از دستور grep برای جستجوی فایل در آرشیو به صورت زیر است:
tar -tf [archive] | grep [filename]
در این روش نیازی نیست مسیر کامل فایل را بدانیم. در واقع از این روش میتوانیم برای یافتن مسیر یک فایل استفاده کنیم. مثلا برای یافتن مسیر فایل با نام file0.txt در آرشیو files.tar.bz2 دستور زیر را در ترمینال لینوکس وارد میکنیم:
tar -tf files.tar.bz2 | grep file0.txt
یافتن فایلهایی با الگوی نام مشابه در آرشیو
برای جستجوی فایلها بر اساس یک الگوی نام مشابه از نشانه --wildcards استفاده میکنیم. مثلا برای یافتن همه فایلهایی که نام آنها شامل file5 شود دستور زیر را وارد میکنیم:
tar -tf files.tar.gz --wildcards files/file5*.txt
از این شیوه به ویژه برای انتخاب فایلها با پسوند مشخص استفاده میکنیم. مثلا اگر از عبارت *.txt استفاده کنیم جستجو را برای همه فایلها با پسوند txt انجام میدهیم. برای این که از همه قابلیتهای wildcards استفاده کنید باید با عبارات باقاعده آشنا باشید.
حذف کردن فایلها در ساخت آرشیو
ساختار دستوری زیر برای حذف فایلهایی با الگوی مشخص در زمان ساخت آرشیو استفاده میشود:
tar -cf [archive] --exclude='[pattern]' [files(s) or location(s)]
به عنوان مثال برای ساخت آرشیوی از دایرکتوری files که فایلهای با پسوند txt در آن ذخیره نشده باشند از دستور زیر استفاده میکنیم:
tar -cf files2.tar --exclude='*.txt' filesبا وارد کردن دستور زیر میتوانید محتویات این آرشیو را ببینید:
tar -tf files2.tar
استخراج یک فایل از آرشیو
اگر به تنها یکی از فایلهای موجود در آرشیو نیاز دارید نیازی نیست که تمام محتویات آرشیو را استخراج کنید. به کار گرفتن دستور tar با شکل عمومی زیر به شما این امکان را میدهد که تنها فایل یا فایلهایی که به آنها نیاز دارید را از آرشیو استخراج کنید:
tar -xf [archive name] -C [location] [list of files to extract]
مثلا برای ساخت یک دایرکتوری با نام selected_files و استخراج فایلهای file0.txt و file1.txt از آرشیو files.tar در این دایرکتوری دستور زیر را وارد میکنیم:
mkdir selected_files && tar -xf files.tar -C selected_files files/file0.txt files/file1.txt
دقت کنید که برای این کار باید مسیر فایلهایی که میخواهیم استخراج کنیم را بدانیم. اگر از مسیر فایلها مطمئن نبودیم میتوانیم با استفاده از نشانه -t در دستور tar در لینوکس و دستور grep همانطور که در مثالهای قبل دیدیم مسیر فایلها را پیدا کنیم. برای بررسی فایلهای استخراج شده در این مثال دستور زیر را در ترمینال وارد کنید:
ls selected_files/files/
لازم به ذکر است برای استخراج فایلهای مشخص شده از آرشیوهای فشرده باید نوع فشردهسازی آرشیو را با استفاده از نشانه متناسب مشخص کنیم.
نمایش اطلاعات مربوط به اجرای دستور tar
با اضافه کردن نشانه -v یا --verbose در قسمت options دستور tar در لینوکس میتوانیم اطلاعاتی درباره اجرای دستور را در ترمینال ببینیم. این نشانه را میتوانیم حین انجام همه انواع عملیات به دستور tar اضافه کنیم. به عنوان مثال با اضافه کردن این نشانه به دستور مربوط به ساخت آرشیو نام فایلها را همزمان که به آرشیو افزوده میشوند میبینیم. برای این که در عمل نتیجه افزودن این نشانه را ببینید دستور زیر را در ترمینال وارد کنید:
tar -cvf files.tar files
همچنین اگر از این نشانه دوبار استفاده کنید در بعضی از عملیات اطلاعات بیشتری را میتوانید ببینید. مثلا در زمان ساخت آرشیوها اگر از دستور زیر استفاده کنید میبینید که فایلها به همراه مشخصات مربوط به مالکیت و مجوزهای دسترسیشان نمایش داده میشوند:
tar -cvvf files.tar files
همانطور که در خروجی دستور فوق میبینید دستور tar هنگام ساخت آرشیو مالکیت و مجوزهای دسترسی فایلها را خفظ میکند.
حذف فایل از آرشیو
با استفاده از نشانه --delete میتوانید یک یا چند فایل را از یک آرشیو حذف کنید. به عنوان مثال با اجرای دستور زیر فایل file100.txt را از آرشیو files.tar حذف میکنیم:
tar --delete -f files.tar files/file100.txt
با استفاده از دستور زیر میتوانیم تایید کنیم که فایل file100.txt از آرشیو files.tar حذف شده است:
tar -tf files.tar files/file100.txt
برای حذف فایلها از آرشیو باید مسیر دقیق آنها را بدانیم. همانطور که در مثالهای قبل دیدیم با استفاده از ابزار grep میتوانیم مسیر یک فایل در آرشیو را پیدا کنیم. در نظر داشته باشید حذف فایلها از آرشیوهایی که فشردهسازی شدهاند امکانپذیر نیست.
الحاق فایل به آرشیو
با استفاده از دستور زیر فایل file100.txt را به آرشیو files.tar الحاق کنید:
tar -rf files.tar files/file100.txt
مانند مثال قبل میتوانید افزوده شدن فایل جدید به آرشیو را تایید کنید. آرشیوهای فشرده قابل بهروزرسانی نیستند به همین دلیل این عمل نیز مانند حذف فایل از آرشیو تنها بر روی آرشیوهای tar قابل انجام است.
ترکیب چند آرشیو
برای اینکه محتویات یک یا چند آرشیو به یک آرشیو دیگر افزوده شود باید از نشانه -A یا --concatenate در قسمت operation mode دستور tar در لینوکس استفاده کنیم. شکل کلی دستور tar برای ترکیب چند آرشیو به این شکل است:
tar -Af [archive to extend] [archives to extend with]
برای این که عملکرد دستور tar در ترکیب چند آرشیو را ببینیم ابتدا دو فایل آرشیو جداگانه میسازیم. در ابتدا با استفاده از دستور زیر همه فایلهایی که نام آنها با file1 شروع میشود را با استفاده از دستور زیر در یک آرشیو با نام files-1.tar ذخیره میکنیم:
tar -cf files-1.tar files/file1*.txt
سپس دستور زیر را وارد میکنیم تا سایر فایلها را در یک آرشیو جداگانه ذخیره کنیم:
tar -cf files-other.tar --exclude='fiels/file1*.txt' files
با استفاده از نشانه -t میتوانید هرکدام از آرشیوهای ساخته شده را بررسی کنید. در نهایت با استفاده از دستور زیر محتویات آرشیو files-other.tar را به آرشیو files-1.tar اضافه کنید:
tar -Af files-1.tar files-other.tar
در نهایت با وارد کردن دستور زیر و بررسی خروجی آن میتوانید تایید کنید که آرشیو files-1.tar حالا حاوی تمام محتویات دایرکتوری files است:
tar -tf files-1.tar
بررسی تفاوت محتویات آرشیو و فایلهای موجود
به کمک یکی از نشانههای -d ، --diff یا --compare میتوانیم محتویات آرشیو و فایلها و دایرکتوریهای موجود در سیستم را مقایسه کنیم. در این حالت دستور tar فایلهای موجود در آرشیو را با فایلهای موجود در سیستم تطبیق میدهد و چنانچه تفاوتی را پیدا کند آن را در خروجی نمایش میدهد. شکل کلی استفاده از این دستور را در زیر میبینیم:
tar -df [archive name]
برای این که عملکرد این دستور را در یک مثال بررسی کنیم ابتدا یکی از فایلهای موجود در دایرکتوری files را با استفاده از دستور زیر تغییر میدهیم:
echo 'Hello' >> files/file0.txt
حالا با وارد کردن دستور زیر میبینیم که دستور tar در لینوکس تغییر زمان بهروزرسانی و حجم فایل file0.txt را تشخیص خواهد داد:
tar -df files.tar
در صورتی که این دستور خروجی چاپ نکند به این معنی است که از زمان ساخت آرشیو تا به الان تغییری در فایلها رخ نداده است. از این دستور برای بررسی بهروز بودن آرشیوها استفاده میکنیم.
بهروزرسانی فایلها در آرشیو
نشانه -u یا --update برای بهروزرسانی آرشیو مطابق با تغییراتی که در فایلهای موجود در سیستم اعمال شدهاند به کار میرود. شکل کلی استفاده از دستور tar در لینوکس برای بهروزرسانی فایلها در آرشیو را در زیر میبینیم:
tar -uf [archive] [file(s) or location(s)]
اگر مثال قبل را اجرا کرده باشید، در این مرحله با اجرای دستور زیر میتوانید تغییراتی که در فایل file0.txt اعمال کردید را به آرشیو منتقل کنید:
tar -uvf files.tar files
در مثال بالا از نشانه -v استفاده کردیم تا فایلهایی که در آرشیو نوشته میشوند را ببینیم. در نظر داشته باشید که این عملیات تنها بر روی آرشیوهای فشردهسازی نشده قابل انجام است. با استفاده از عملیات بهروزرسانی میتوانید بدون نیاز به ساخت مجدد آرشیو به طور منظم از فایلهای خود آرشیو تهیه کنید تا در صورت از دست رفتن اطلاعات، بتوانید آنها را از آرشیو بازیابی کنید.
دستکاری زمان بهروزرسانی فایلها
دیدیم که دستور tar در لینوکس برای انجام عملیات بهروزرسانی، تشخیص تفاوت محتویات آرشیو و فایلهای موجود و همچنین در مواجهه با مشکل تداخل نام فایلها از تاریخ آخرین بهروزرسانی فایلها استفاده میکند. به دلایل مختلف ممکن است بخواهیم هنگام ساخت یا استخراج آرشیو تاریخ آخرین بهروزرسانی فایلها را تغییر بدهیم. دستور tar گزینههای مختلفی را برای انجام این کار در اختیارمان قرار میدهد.
با به کار گرفتن نشانه --mtime و درج یک تاریخ با فرمت YYYY-MM-DD میتوانیم تاریخ آخرین بهروزرسانی فایلهایی که در آرشیو ذخیره میشوند را تغییر دهیم. شکل کلی استفاده از دستور tar برای انجام این کار را میبینیم:
tar -cf [archive] [file(s) or location(s)] --mtime=YYYY-MM-DD
مثلا برای ساخت یک آرشیو از محتویات دایرکتوری files و تنظیم تاریخ آخرین بهروزرسانی فایلهای آن به تاریخ 1999/01/01 از دستور زیر استفاده میکنیم:
tar -cf files.tar files --mtime=1999-01-01
و پس از آن با وارد کردن دستور زیر در ترمینال میتوانیم تنظیم صحیح تاریخ آخرین بهروزرسانی برای فایلها در آرشیو را تایید کنیم:
tar -tvf files.tar
همچنین با استفاده از نشانه -m یا --touch میتوانیم هنگام استخراج آرشیو از حفظ تاریخ آخرین بهروزرسانی فایلها صرف نظر کنیم. به این ترتیب تاریخ فعلی به عنوان تاریخ آخرین بهروزرسانی فایلها تنظیم میشود. میتوانید با استفاده از دستور زیر آرشیوی که در مرحله قبل ساختید را استخراج کرده و پس از آن از دستور ls برای بررسی تاریخ آخرین بهروزرسانی فایلها استفاده کنید:
mkdir modified_date && tar -xf files.tar -C modified_date
برای بررسی مشخصات فایلهایی که استخراج کردید دستور زیر را وارد کنید:
ls -l modified_date/files
یکی از قابلیتهای کاربردی دستور tar در لینوکس این است که امکان استخراج فایلها بر اساس تاریخ آخرین بهروزرسانی را فراهم میکند. با استفاده از نشانه --newer-mtime میتوانیم تنها فایلهایی را که تاریخ آخرین بهروزرسانی آنها جدیدتر از یک تاریخ خاص باشد را استخراج کنیم. این قابلیت برای بازیابی اطلاعات از آرشیوهای پشتیبان بسیار راهگشا است. شکل کلی استفاده از این نشانه عبارتست از:
tar -xf [archive] -C [location] --newer-mtime=YYYY-MM-DD
مجوزهای دسترسی
در صورتی که بخواهیم مجوزهای دسترسی فایلهای آرشیو پس از استخراج بر روی فایلهای جدیدی که ذخیره میشوند نیز دقیقا به همان صورت که بودند اعمال شوند از نشانه --preserve-permissions استفاده میکنیم. رفتار پیشفرض دستور tar در بیشتر سیستمها به همین صورت است اما برای اطمینان از حفظ مجوزهای دسترسی میتوانیم از این نشانه در زمان استخراج فایلها استفاده کنیم. به این ترتیب برای استخراج آرشیو دستور tar را به این صورت مینویسیم:
tar -xf [archive name] --preserve-permissions
از سوی دیگر بسیاری از مواقع نمیخواهیم مجوزهای دسترسی پیش از ساخت آرشیو را حفظ کنیم. مثلا زمانی که فایل آرشیو توسط شخص ثالثی تهیه شده است و این نگرانی وجود دارد که مجوزهای دسترسی اصلی که در آرشیو مشخص شدهاند سیستم را در معرض آسیبپذیریهای امنیتی قرار دهد. برای تغییر مجوزهای دسترسی پس از استخراج مطابق با تنظیمات پیشفرض سیستم از نشانه --no-same-permissions در زمان استخراج آرشیو استفاده میکنیم. به این صورت:
tar -xf [archive name] --no-same-permissions
مالکیت فایلها در آرشیو
دستور tar در لینوکس امکان مشخص کردن کاربر و گروه مالک فایلها را در زمان ساخت آرشیو فراهم میکند. شکل کلی استفاده از این قابلیت را در ادامه میبینیم:
tar -cf [archive] [file(s) or location(s)] --owner=[value] --group=[value]
دقت کنید که مقادیر مورد استفاده در این دستور برای مشخص کردن کاربر و گروه شناسه کاربر و شناسه گروه هستند نه نام آنها. مثلا برای ساخت آرشیو از محتویات دایرکتوری files انتخاب کاربر root به عنوان مالک فایلهای آرشیو باید این دستور را در ترمینال لینوکس وارد کنیم:
tar -cf files.tar files --owner=0 --group=0
همچنین هنگام استخراج آرشیو برای حفظ اطلاعات مالکیت فایلها از نشانه --same-owner استفاده میکنیم. به این صورت:
tar -xf files.tar --same-owner
در استفاده از این نشانه به ویژه هنگام استخراج آرشیوهایی که توسط شخص ثالث تهیه شدهاند بسیار دقت کنید. تنها زمانی از آن استفاده کنید که ضرورتی برای انجام این کار وجود داشته باشد و کاملا ریسکهای احتمالی را در نظر گرفتهاید.
جمعبندی
دیدیم که به کمک دستور tar در لینوکس میتوانیم چندین فایل و دایرکتوری را در یک فایل آرشیو ذخیره کنیم. همچنین با شیوههای مختلف فشردهسازی فایلهای آرشیو نیز آشنا شدیم و با اجرای مثالها توانستیم نسبت فشردهسازی آنها را با یکدیگر مقایسه کنیم. میتوانید همان مثالها را با فایلهای حجیمتر یا تعداد فایلهای بیشتری نیز تکرار کنید. از آنجا که شیوههای فشردهسازی مختلف در نسبت فشردهسازی یا فضایی که صرفهجویی میکنند، مدت زمان فشردهسازی و مدت زمان استخراج با یکدیگر تفاوت دارند، هرکدام در سناریوهای خاصی برتری دارند. با بررسی تفاوت آنها میتوانید برای انتخاب شیوه فشردهسازی آرشیوها آگاهانهتر تصمیمگیری کنید. همچنین دیدیم که از دستور tar در لینوکس برای استخراج آرشیوها نیز استفاده میشود و گزینههای مختلفی که برای استخراج فایلها میتوانیم به کار بگیریم را بررسی کردیم. به این ترتیب به کمک مثالهایی که اجرا کردیم دیدیم دستور tar در لینوکس چیست و چه قابلیتهایی دارد.
یکی از مهمترین کاربردهای این دستور تهیه نسخههای پشتیبان از اطلاعات مهم است. میتوانید برای این کار اسکریپتهای شل بنویسید تا به صورت خودکار و دورهای نسخههای پشتیبان بهروزرسانی شوند. همه دستورهایی که در مثالهای بالا با آنها آشنا شدیم را میتوانید در اسکریپتهای شل به کار بگیرید.
مانند سایر دستورهای لینوکس برای این که اطلاعات جزئیتری درمورد عملکرد دستور tar در لینوکس و گزینههایی که پشتیبانی میکند به دست آورید کافیست به راهنمای دستور مراجعه کنید. راهنمای دستور tar در ترمینال لینوکس با استفاده از دستور man tar قابل دسترسی است.