دستور 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 در لینوکس

هنگام نوشتن دستور 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 ساخته شده‌اند. تفاوت حجم این فایل‌ها را با یکدیگر مقایسه کنید:

مثالی از آرشیو‌های تولید شده به کمک دستور tar در لینوکس

حذف فایل‌ها پس از ساخت آرشیو

بسیاری از مواقع پس از تهیه آرشیو از فایل‌ها و دایرکتوری‌ها می‌خواهیم فایل‌های اصلی را حذف کنیم. این عمل معمولا بخشی از فرآیند تهیه نسخه پشتیبان از گزارش‌های سیستمی است. برای این که فایل‌ها و دایرکتوری‌هایی که در آرشیو ذخیره می‌شوند به صورت خودکار پس از ساخته شدن فایل آرشیو حذف شوند از نشانه --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

جستجوی یک فایل در آرشیو

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

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

هنگام استفاده از نشانه -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

در تصویر زیر نتیجه‌ اجرای دستور فوق در ترمینال لینوکس را می‌بینیم:

استفاده از دستور tar در لینوکس برای جستجوی فایل در آرشیو

همچنین از دستور 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 گزینه‌های مختلفی را برای انجام این کار در اختیارمان قرار می‌دهد.

ذخیره و انتقال آرشیوهای فشرده که به کمک دستور 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/f مطالب درسی...
ما را در سایت مطالب درسی دنبال می کنید

برچسب : نویسنده : خنجی darsi بازدید : 53 تاريخ : يکشنبه 14 آبان 1402 ساعت: 20:51

خبرنامه