توی این درس یاد میگیری برای بکاپگرفتن یا فرستادن چند فایل، اول همه را در یک فایل (آرشیو) جمع میکنی و بعد فشرده میکنی. tar فایلها را در یک بسته میگذارد؛ gzip (و bzip2 و xz) آن بسته را فشرده میکند؛ و zip هر دو کار را با هم و در قالبی که ویندوز و مک هم باز میکنند انجام میدهد. با tar -czf backup.tar.gz dir میسازی، با tar -tzf بدون باز کردن محتوا را میبینی، با tar -xzf باز میکنی، با zip -r و unzip هم همین را برای zip؛ و نام بکاپ را با تاریخ مینویسی. تمرین: از پوشهی یک پروژه بکاپ فشرده با تاریخ در اسم فایل بگیر.
مسئله: چند هزار فایل، یک کار
Section titled “مسئله: چند هزار فایل، یک کار”کپیکردن یک پوشهی هزار فایلی از راه شبکه یعنی هزار بار شروع و پایان؛ کند و پرخطا. همهی آنها را در یک فایل بگذاری، هم انتقال سریعتر میشود، هم دسترسیها و زمانها حفظ میشود، و اگر فشرده هم کنی، حجم کمتر میشود. این همان کاری است که هر بکاپ و هر انتشار نرمافزار میکند.
تشبیه: جعبهی اسبابکشی
Section titled “تشبیه: جعبهی اسبابکشی”tar مثل ریختن همهچیز در یک کارتن است (با یک فهرست از محتوا)؛ کارتن خودش جا را کم نمیکند. gzip مثل کیسهی وکیوم است که هوای اضافی را بیرون میدهد. .tar.gz یعنی «کارتن، داخل کیسهی وکیوم». و zip کارتنی است که از اول وکیومشده ساخته میشود و در هر کشوری (ویندوز، مک، لینوکس) باز میشود.
مثالهای عملی
Section titled “مثالهای عملی”یک «پروژهی نمونه» میسازم که همهی انواع محتوا را دارد: کد (قابلفشردهشدن)، یک فایل متنی بزرگ و تکراری، یک فایل تصادفی (که فشرده نمیشود)، یک پوشهی node_modules و یک لاگ (که در بکاپ نمیخواهیمشان)، و یک فایل با اسم فارسی:
mkdir -p arc/proj/src arc/proj/docs arc/proj/node_modules/lib arc/proj/logscd arcfor i in $(seq 1 200); do echo "line $i: the quick brown fox jumps over the lazy dog"; done > proj/src/app.jshead -c 300000 /dev/zero | tr '\0' 'a' > proj/docs/big.txthead -c 50000 /dev/urandom > proj/docs/random.binecho "x" > proj/node_modules/lib/index.jsecho "log" > proj/logs/app.logecho "سلام" > proj/docs/فارسی.txtdu -sh proj396K projمثال ۱: ساختن، دیدن و باز کردن، tar -czf، -tzf، -xzf
Section titled “مثال ۱: ساختن، دیدن و باز کردن، tar -czf، -tzf، -xzf”cd arcecho "--- ساختن (c = create، z = gzip، f = فایل خروجی):"tar -czf backup.tar.gz projls -l backup.tar.gz | awk '{print "حجم آرشیو:", $5, "بایت"}'echo "--- دیدن محتوا بدون باز کردن (t = list):"tar -tzf backup.tar.gzecho "--- جزئیات (v = verbose: دسترسی، مالک، حجم، تاریخ):"tar -tvzf backup.tar.gz | head -4--- ساختن (c = create، z = gzip، f = فایل خروجی):حجم آرشیو: 52472 بایت--- دیدن محتوا بدون باز کردن (t = list):proj/proj/node_modules/proj/node_modules/lib/proj/node_modules/lib/index.jsproj/docs/proj/docs/فارسی.txtproj/docs/random.binproj/docs/big.txtproj/logs/proj/logs/app.logproj/src/proj/src/app.js--- جزئیات (v = verbose: دسترسی، مالک، حجم، تاریخ):drwxr-xr-x ali/ali 0 2026-10-04 07:22 proj/drwxr-xr-x ali/ali 0 2026-10-04 07:22 proj/node_modules/drwxr-xr-x ali/ali 0 2026-10-04 07:22 proj/node_modules/lib/-rw-r--r-- ali/ali 2 2026-10-04 07:22 proj/node_modules/lib/index.jsحجم از حدود ۳۹۶ کیلوبایت به حدود ۵۱ کیلوبایت رسید؛ چرا همهچیز فشرده نشد؟ چون فایل تصادفی (۵۰ کیلوبایت) را نمیشود فشرده کرد (مثال ۴). حالا باز کردن (x = extract). -C مقصد را تعیین میکند (پوشه باید از قبل باشد) و با diff -r ثابت میکنم دقیقاً همان است:
cd arcmkdir restoretar -xzf backup.tar.gz -C restorels restore/projdiff -r proj restore/proj && echo "محتوا دقیقاً یکی است"docslogsnode_modulessrcمحتوا دقیقاً یکی استمثال ۲: فلگهای tar
Section titled “مثال ۲: فلگهای tar”tar فلگهایش را میشود پشت سر هم و بدون خطتیره (یا با آن) نوشت. یک «جمله»ی قابلیادآوری: -czf = create gzip file، -xzf = extract gzip file، -tzf = list gzip file.
| فلگ | معنی |
|---|---|
c |
ساختن آرشیو (create) |
x |
باز کردن (extract) |
t |
فقط فهرست محتوا (list) |
f |
نام فایل آرشیو؛ باید آخرین فلگ باشد و اسم فایل فوراً بعد از آن بیاید |
z |
با gzip (.tar.gz) |
j |
با bzip2 (.tar.bz2) |
J |
با xz (.tar.xz) |
v |
پرحرف: نام فایلها را چاپ کن |
C dir |
قبل از کار به این پوشه برو (برای باز کردن در مقصد) |
--exclude=الگو |
فایلهایی را که با الگو میخوانند نگذار |
p |
دسترسیها را همانطور نگه دار (برای root پیشفرض است) |
برای tar -x لازم نیست نوع فشردهسازی را بنویسی: tar -xf backup.tar.gz هم خودکار از روی فایل تشخیص میدهد. ولی برای ساختن باید بگویی.
مثال ۳: بکاپ با تاریخ در اسم فایل (تمرین اصلی)
Section titled “مثال ۳: بکاپ با تاریخ در اسم فایل (تمرین اصلی)”نام بکاپ باید تاریخ داشته باشد تا بدانی کدام قدیمیتر است. date +%F تاریخ را به شکل 2026-10-04 میدهد و $(...) آن را در اسم فایل میگذارد. ضمناً چیزهایی که در بکاپ نمیخواهی (node_modules، لاگها) را با --exclude کنار میگذارم:
cd arcname="backup-$(date +%F).tar.gz"tar -czf "$name" --exclude=node_modules --exclude='*.log' projecho "بکاپ: $name"ls -l "$name" | awk '{print $5, $9}'echo "--- محتوای آن (node_modules و لاگ نیست):"tar -tzf "$name"echo "--- سالم است؟ (فقط خواندن تا آخر؛ بدون خروجی یعنی سالم)"gzip -t "$name" && echo "سالم"بکاپ: backup-2026-10-04.tar.gz52384 backup-2026-10-04.tar.gz--- محتوای آن (node_modules و لاگ نیست):proj/proj/docs/proj/docs/فارسی.txtproj/docs/random.binproj/docs/big.txtproj/logs/proj/src/proj/src/app.js--- سالم است؟ (فقط خواندن تا آخر؛ بدون خروجی یعنی سالم)سالمقبل از اینکه به بکاپ اعتماد کنی، آزمایشش کن: tar -tzf (یا gzip -t) نشان میدهد آرشیو کامل و قابلخواندن است، و یک بار هم بازیابی را امتحان کن (مثال ۱). بکاپی که هرگز بازیابی نشده، فقط یک فایل امیدوارکننده است.
کدام دستور محتوای یک آرشیو tar.gz را بدون باز کردنش نشان میدهد؟
t یعنی list (فهرست)؛ x باز میکند و c میسازد. قبل از باز کردن یک آرشیو ناشناس همیشه tzf بزن.
مثال ۴: gzip، bzip2، xz و فایلهایی که فشرده نمیشوند
Section titled “مثال ۴: gzip، bzip2، xz و فایلهایی که فشرده نمیشوند”فرمتهای مختلف تعادل متفاوتی بین حجم و سرعت دارند: gzip سریع و معمولی، bzip2 کندتر و کوچکتر، xz کندترین و کوچکترین. برای مقایسهی منصفانه از یک مجموعهی متنی واقعی (پوشهی مجوزهای سیستم) استفاده میکنم، و برای مقایسه با دادهی غیرقابلفشرده یک فایل تصادفی:
cd arccp -r /usr/share/common-licenses corpustar -cf corpus.tar corpusfor c in "gzip -k" "bzip2 -k" "xz -k"; do $c corpus.tar; doneecho "--- متن واقعی: (حجم بایت، فایل)"ls -l corpus.tar corpus.tar.gz corpus.tar.bz2 corpus.tar.xz | awk '{print $5, $9}'echo "--- دادهی تصادفی (مثل عکس JPEG یا فایل zip که قبلاً فشرده است):"head -c 100000 /dev/urandom > random.datgzip -k random.datls -l random.dat random.dat.gz | awk '{print $5, $9}'--- متن واقعی: (حجم بایت، فایل)256000 corpus.tar46970 corpus.tar.bz266908 corpus.tar.gz44172 corpus.tar.xz--- دادهی تصادفی (مثل عکس JPEG یا فایل zip که قبلاً فشرده است):100000 random.dat100049 random.dat.gzمتن از ۲۵۶ کیلوبایت به حدود ۶۷ (gzip)، ۴۷ (bzip2) و ۴۴ (xz) کیلوبایت رسید؛ هرچه کندتر، کوچکتر. ولی دادهی تصادفی با فشردهسازی کوچک نشد و حتی کمی بزرگتر هم شد، چون الگوی تکراری ندارد. فایلهایی که از قبل فشردهاند (JPEG، MP4، zip، .gz) را دوباره فشرده نکن؛ فقط وقت تلف میکند. قاعدهی عمل: gzip پیشفرض (سریع و همهجا)، xz برای چیزی که یک بار فشرده و بارها دانلود میشود (مثل بستههای نرمافزار).
مثال ۵: gzip روی یک فایل، فایل اصلی را عوض میکند!
Section titled “مثال ۵: gzip روی یک فایل، فایل اصلی را عوض میکند!”برخلاف tar که فایلها را کپی میکند، gzip فایل را جایگزین میکند:
cd arcecho "سلام دنیا" > f.txtecho "--- gzip f.txt (فایل اصلی دیگر نیست):"gzip f.txtls f.txt*echo "--- gzip -l: حجم فشرده در برابر اصلی (یک فایل کوچک بزرگتر هم میشود!):"gzip -l f.txt.gzecho "--- zcat: خواندن بدون باز کردن:"zcat f.txt.gzecho "--- gunzip -k: باز کردن و نگهداشتن فایل فشرده (-k = keep):"gunzip -k f.txt.gzls f.txt*--- gzip f.txt (فایل اصلی دیگر نیست):f.txt.gz--- gzip -l: حجم فشرده در برابر اصلی (یک فایل کوچک بزرگتر هم میشود!): compressed uncompressed ratio uncompressed_name 45 18 -16.7% f.txt--- zcat: خواندن بدون باز کردن:سلام دنیا--- gunzip -k: باز کردن و نگهداشتن فایل فشرده (-k = keep):f.txtf.txt.gzgzip -k (و gunzip -k) هر دو فایل را نگه میدارد. zcat و zless متن فایل فشرده را بدون باز کردنش نشان میدهند. و gzip -l نشان داد فایل ۱۸ بایتی بعد از فشرده شدن ۴۵ بایت شد، یعنی از اصلی بزرگتر: سربار قالب فشرده برای فایلهای بسیار کوچک بیشتر از سودش است.
مثال ۶: zip و unzip
Section titled “مثال ۶: zip و unzip”zip برای وقتی است که گیرنده ممکن است ویندوز یا مک داشته باشد (همهی سیستمها بدون نصب چیزی باز میکنند). zip -r بازگشتی میگیرد و -x الگوها را کنار میگذارد:
cd arczip -r proj.zip proj -x 'proj/node_modules/*' | tail -3echo "--- محتوا (unzip -l):"unzip -l proj.zip | tail -6echo "--- باز کردن در یک پوشهی مشخص (-d):"mkdir uzunzip -q proj.zip -d uzls uz/proj adding: proj/logs/app.log (stored 0%) adding: proj/src/ (stored 0%) adding: proj/src/app.js (deflated 95%)--- محتوا (unzip -l): 0 2026-10-04 07:22 proj/logs/ 4 2026-10-04 07:22 proj/logs/app.log 0 2026-10-04 07:22 proj/src/ 10692 2026-10-04 07:22 proj/src/app.js--------- ------- 360705 9 files--- باز کردن در یک پوشهی مشخص (-d):docslogssrczip خروجی deflated 95% (فشردهشده) یا stored 0% (ذخیرهشده بدون فشردهسازی، مثل پوشهها) را برای هر فایل میگوید. فرق عملی با tar.gz: zip هر فایل را جدا فشرده میکند (دسترسی به یک فایل بدون باز کردن بقیه سریع است ولی فشردهسازی کلی ضعیفتر)، و دسترسیهای یونیکسی (مالک، گروه) را کامل نگه نمیدارد؛ برای بکاپ سیستم لینوکسی tar بهتر است.
مثال ۷: بازیابی انتخابی و --strip-components
Section titled “مثال ۷: بازیابی انتخابی و --strip-components”لازم نیست برای یک فایل کل آرشیو باز شود. اسم فایل داخل آرشیو را بنویس. با -O هم میتوانی محتوا را فقط روی صفحه بیاوری، بدون ساختن فایل. و --strip-components=1 بالاترین پوشهی داخل آرشیو (proj/) را کنار میگذارد:
cd arcecho "--- فقط یک فایل از آرشیو را روی صفحه (-O):"tar -xzf backup-*.tar.gz proj/src/app.js -O | head -2echo "--- جستجو در فهرست آرشیو بدون باز کردن:"tar -tzf backup-*.tar.gz | grep 'docs/'echo "--- بدون پوشهی بالایی (--strip-components=1):"mkdir strippedtar -xzf backup-*.tar.gz -C stripped --strip-components=1ls stripped--- فقط یک فایل از آرشیو را روی صفحه (-O):line 1: the quick brown fox jumps over the lazy dogline 2: the quick brown fox jumps over the lazy dog--- جستجو در فهرست آرشیو بدون باز کردن:proj/docs/proj/docs/فارسی.txtproj/docs/random.binproj/docs/big.txt--- بدون پوشهی بالایی (--strip-components=1):docslogssrcپشت پرده: tar چطور بستهبندی میکند؟
Section titled “پشت پرده: tar چطور بستهبندی میکند؟”tar از tape archive میآید؛ برای نوارهای مغناطیسی ساخته شد و هنوز از همان طرح بلوکبندی استفاده میکند: هر فایل یک سرآیند ۵۱۲ بایتی (نام، دسترسی، مالک، حجم، زمان) و سپس محتوا (که به مضرب ۵۱۲ بایت پر میشود) دارد، و آرشیو را معمولاً تا مضرب ۱۰۲۴۰ بایت (۲۰ بلوک) پر میکند. به همین دلیل یک فایل کوچک هم آرشیو دهکیلوبایتی میدهد:
cd arcecho a > tiny.txttar -cf tiny.tar tiny.txtecho "حجم آرشیو یک فایل ۲ بایتی: $(stat -c %s tiny.tar) بایت"echo "--- file نوع فایل را از روی محتوا میشناسد:"file backup-*.tar.gz corpus.tar | cut -c1-100echo "--- .tar.gz دو لایه است: gzip بیرون، tar داخل:"gzip -dc backup-*.tar.gz | file - | cut -c1-60حجم آرشیو یک فایل ۲ بایتی: 10240 بایت--- file نوع فایل را از روی محتوا میشناسد:backup-2026-10-04.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 368640corpus.tar: POSIX tar archive (GNU)--- .tar.gz دو لایه است: gzip بیرون، tar داخل:/dev/stdin: POSIX tar archive (GNU)پس .tar.gz یک فایل tar است که با gzip فشرده شده؛ میتوانی لایهها را جدا هم بسازی (tar -cf سپس gzip) یا یکجا (tar -czf). tar برای اینکه ترتیب و متادیتا را حفظ کند، فشردهسازی را روی کل جریان انجام میدهد؛ برای همین نسبت فشردهسازی tar.gz معمولاً از zip (که تکتک فایلها را فشرده میکند) بهتر است، و دسترسی تصادفی به یک فایل وسط آرشیو کندتر.
جدولهای مرجع
Section titled “جدولهای مرجع”| دستور | کار |
|---|---|
tar -czf backup.tar.gz dir |
ساختن آرشیو فشردهی gzip |
tar -tzf backup.tar.gz |
فهرست محتوا |
tar -xzf backup.tar.gz -C مقصد |
باز کردن در مقصد |
tar -xzf a.tar.gz مسیر/داخل/آرشیو |
بازیابی یک فایل |
tar -czf a.tar.gz --exclude=node_modules dir |
با کنار گذاشتن |
tar -cjf / tar -cJf |
bzip2 / xz |
gzip -k فایل / gunzip -k فایل.gz |
فشرده / باز، با نگهداشتن اصلی |
zcat فایل.gz |
خواندن بدون باز کردن |
gzip -t فایل.gz |
آزمایش سلامت |
zip -r a.zip dir -x 'dir/tmp/*' |
ساختن zip |
unzip -l a.zip / unzip a.zip -d مقصد |
فهرست / باز کردن |
| فرمت | سرعت | حجم | کاربرد |
|---|---|---|---|
gzip (.gz) |
سریع | متوسط | پیشفرض، بکاپ روزانه، وب |
bzip2 (.bz2) |
کندتر | کوچکتر | کمتر رایج امروز |
xz (.xz) |
کند | کوچکترین | یک بار فشرده، بارها دانلود (بستههای نرمافزار) |
zip |
متوسط | متوسط | تبادل با ویندوز/مک |
اشتباهات رایج
Section titled “اشتباهات رایج”۱) ترتیب فلگها: f باید آخر باشد
Section titled “۱) ترتیب فلگها: f باید آخر باشد”cd arctar -cfz wrong.tar.gz projecho "--- و فایلی که اشتباهاً ساخته شد:"ls -l zrm -f ztar: wrong.tar.gz: Cannot stat: No such file or directorytar: Exiting with failure status due to previous errors--- و فایلی که اشتباهاً ساخته شد:-rw-r--r-- 1 ali ali 378880 Oct 4 07:22 zf فلگی است که اسم بعدی را بهعنوان نام آرشیو میگیرد. در -cfz، حرف z بعد از f آمد، پس tar آرشیو را با نام z ساخت (بدون فشردهسازی) و wrong.tar.gz و proj را دو ورودی دید: proj داخل آرشیوی به اسم z رفت و برای wrong.tar.gz (که وجود ندارد) خطا داد. نتیجه: یک فایل عجیب به اسم z و آرشیوی که فکر میکردی ساختهای وجود ندارد. راهحل: f همیشه آخر و اسم آرشیو فوراً بعدش: tar -czf wrong.tar.gz proj.
۲) «Removing leading /»
Section titled “۲) «Removing leading /»”cd arctar -czf abs.tar.gz /home/ali/arc/proj/src 2>&1tar -tzf abs.tar.gz | head -2tar: Removing leading `/' from member nameshome/ali/arc/proj/src/home/ali/arc/proj/src/app.jstar مسیرهای مطلق را با حذف / ابتدایی ذخیره کرد (هشدار، نه خطا) تا هنگام باز کردن، فایلها ناگهان روی /home/... سیستم ننشینند. راهحل: این رفتار درست است؛ بهتر است از ابتدا مسیر نسبی بدهی یا با -C بسازی تا آرشیو تمیز باشد: tar -czf abs.tar.gz -C /home/ali/arc proj/src.
۳) tarbomb: آرشیو بدون پوشهی بالایی
Section titled “۳) tarbomb: آرشیو بدون پوشهی بالایی”cd arctar -czf bomb.tar.gz -C proj .mkdir work && echo "گزارش" > work/report.txtcd workecho "--- قبل از باز کردن:"lstar -xzf ../bomb.tar.gzecho "--- بعد (فایلها قاطی شدند!):"ls--- قبل از باز کردن:report.txt--- بعد (فایلها قاطی شدند!):docslogsnode_modulesreport.txtsrcآرشیو بدون یک پوشهی بالایی ساخته شده بود (با -C proj .)، پس محتوایش مستقیم داخل پوشهی جاری ریخته شد و با فایلهای خودت قاطی شد (و فایل همنام را بیخبر رونویسی میکرد). راهحل: قبل از باز کردن یک آرشیو ناشناس tar -tzf آرشیو | head را بزن؛ و همیشه در پوشهی تازه باز کن (tar -xzf a.tar.gz -C پوشهی-تازه). آرشیو خودت را هم بدون پوشهی بالایی نساز.
۴) tar -x فایلهای موجود را بیصدا رونویسی میکند
Section titled “۴) tar -x فایلهای موجود را بیصدا رونویسی میکند”cd arcecho "نسخهی تازهی من" > restore/proj/src/app.jstar -xzf backup-*.tar.gz -C restorehead -1 restore/proj/src/app.jsecho "--- با -k (--keep-old-files): رونویسی نکن"echo "نسخهی تازهی من" > restore/proj/src/app.jstar -xzkf backup-*.tar.gz -C restore 2>&1 | head -2head -1 restore/proj/src/app.jsline 1: the quick brown fox jumps over the lazy dog--- با -k (--keep-old-files): رونویسی نکنtar: proj/docs/فارسی.txt: Cannot open: File existstar: proj/docs/random.bin: Cannot open: File existsنسخهی تازهی منبازیابی روی پوشهی موجود، تغییرات تازهی تو را با نسخهی بکاپ بیاخطار عوض کرد. با -k رونویسی نمیکند (و خطای «File exists» میدهد). راهحل: بازیابی را در یک پوشهی تازه انجام بده و بعد دستی ادغام کن.
۵) فشردهکردن چیزی که قبلاً فشرده است، یا پاککردن مبدأ قبل از آزمایش
Section titled “۵) فشردهکردن چیزی که قبلاً فشرده است، یا پاککردن مبدأ قبل از آزمایش”مثال ۴: فایلهای تصادفی/فشرده کوچکتر نمیشوند. و هرگز پوشهی اصلی را پیش از آزمایش بکاپ (tar -tzf، بازیابی) پاک نکن.
آرشیو backup-*.tar.gz را فهرست کن و بشمار چند فایل (نه پوشه) دارد. (راهنمایی: خطهایی که با / تمام نمیشوند.)
دیدن جواب
cd arctar -tzf backup-*.tar.gz | grep -vc '/$'tar -tzf backup-*.tar.gz | grep -v '/$'4proj/docs/فارسی.txtproj/docs/random.binproj/docs/big.txtproj/src/app.jsتمرین اصلی: از پوشهی یک پروژه بکاپ فشرده با تاریخ در اسم فایل بگیر. ~/arc/proj را با نام proj-تاریخ-ساعت.tar.gz (با date +%F_%H%M) بکاپ بگیر، node_modules را کنار بگذار، سلامت را بررسی کن، در یک پوشهی تازه بازیابی کن و با diff -r ثابت کن (بدون node_modules) یکی است.
دیدن جواب
cd arcf="proj-$(date +%F_%H%M).tar.gz"tar -czf "$f" --exclude=node_modules projecho "ساخته شد: $f ($(stat -c %s "$f") بایت)"tar -tzf "$f" > /dev/null && echo "آرشیو قابلخواندن است"mkdir -p verify && tar -xzf "$f" -C verifydiff -r --exclude=node_modules proj verify/proj && echo "بازیابی دقیقاً یکی است"ساخته شد: proj-2026-10-04_0722.tar.gz (52424 بایت)آرشیو قابلخواندن استبازیابی دقیقاً یکی استچرخش بکاپ: فقط ۳ بکاپ آخر را نگه دار. پنج بکاپ با تاریخهای مختلف بساز (backup-2026-10-01.tar.gz تا -05)، سپس با ls -1t و tail -n +4 و xargs rm قدیمیترینها را پاک کن.
دیدن جواب
mkdir -p rot && cd rotfor d in 01 02 03 04 05; do tar -czf "backup-2026-10-$d.tar.gz" -C ../arc proj/src touch -d "2026-10-$d 02:00" "backup-2026-10-$d.tar.gz"doneecho "--- قبل (جدیدترین بالا):"ls -1t backup-*.tar.gzecho "--- پاککردن همه بهجز ۳ تای جدید (tail -n +4 از خط چهارم به بعد):"ls -1t backup-*.tar.gz | tail -n +4 | xargs rm -vecho "--- بعد:"ls -1t backup-*.tar.gz--- قبل (جدیدترین بالا):backup-2026-10-05.tar.gzbackup-2026-10-04.tar.gzbackup-2026-10-03.tar.gzbackup-2026-10-02.tar.gzbackup-2026-10-01.tar.gz--- پاککردن همه بهجز ۳ تای جدید (tail -n +4 از خط چهارم به بعد):removed 'backup-2026-10-02.tar.gz'removed 'backup-2026-10-01.tar.gz'--- بعد:backup-2026-10-05.tar.gzbackup-2026-10-04.tar.gzbackup-2026-10-03.tar.gzآزمونک
Section titled “آزمونک”تفاوت tar و gzip؟
.tar.gz یعنی اول tar (جمع) و بعد gzip (فشرده).
کدام دستور بکاپ فشردهی پوشهی site با تاریخ در نام میسازد؟
$(date +%F) تاریخ را مثل 2026-10-04 در نام میگذارد.
چرا tar -cfz a.tar.gz dir اشتباه است؟
نتیجه یک فایل عجیب به اسم z و خطای «a.tar.gz: Cannot stat» است.
قبل از باز کردن یک آرشیو ناشناس چه میزنی و چرا؟
آرشیو بدون پوشهی بالایی فایلها را داخل پوشهی جاری میریزد و رونویسی میکند؛ در پوشهی تازه باز کن (-C).
gzip فایل f.txt را اجرا کردی. چه شد؟
برخلاف tar، gzip روی یک فایل آن را عوض میکند.
چرا فشردهکردن یک عکس JPEG یا یک فایل zip فایدهای ندارد؟
فشردهسازی دوباره وقت تلف میکند.
جمعبندی
Section titled “جمعبندی”tarچند فایل را در یک آرشیو جمع میکند؛ باz(gzip)،j(bzip2) یاJ(xz) فشرده میشود.tar -czf a.tar.gz dirبساز،tar -tzfببین،tar -xzf a.tar.gz -C مقصدباز کن. فلگfآخر و اسم فایل فوراً بعدش.- بکاپ خوب: نام با تاریخ (
$(date +%F))،--excludeبرای چیزهای غیرلازم، آزمایش (tar -tzf،gzip -t، و یک بار بازیابی) و چرخش (نگهداشتن چند نسخهی آخر). gzipفایل را جایگزین میکند (-kبرای نگهداشتن)؛zcatبدون باز کردن میخواند؛xzکوچکتر ولی کندتر؛ دادهی فشرده یا تصادفی کوچک نمیشود.zip -r/unzipبرای تبادل با ویندوز و مک؛ برای بکاپ لینوکسیtarبهتر (دسترسیها و مالک را حفظ میکند).- مراقب باش: tarbomb (آرشیو بدون پوشهی بالایی؛ قبل از باز کردن
tar -tzf | head)، رونویسی بیصدا هنگام باز کردن (-k)، و پاکنکردن مبدأ قبل از آزمایش بکاپ.
| دستور | کاری که میکند |
|---|---|
tar -czf backup.tar.gz dir | ساختن آرشیو فشرده |
tar -tzf backup.tar.gz | فهرست محتوا |
tar -xzf backup.tar.gz -C مقصد | باز کردن در مقصد |
tar -xzf a.tar.gz مسیر/فایل -O | یک فایل روی صفحه |
tar -czf "b-$(date +%F).tar.gz" --exclude=node_modules dir | بکاپ با تاریخ و exclude |
tar -xzf a.tar.gz --strip-components=1 | بدون پوشهی بالایی |
gzip -k فایل / gunzip -k فایل.gz | با نگهداشتن اصلی |
zcat فایل.gz / gzip -t فایل.gz | خواندن / آزمایش سلامت |
zip -r a.zip dir -x "dir/tmp/*" | ساختن zip |
unzip -l a.zip / unzip a.zip -d مقصد | فهرست / باز کردن |
ls -1t backup-*.tar.gz | tail -n +4 | xargs rm | نگهداشتن ۳ بکاپ آخر |