فشرده سازی یکی از مباحث مهم در کار با رایانه است. در خیلی از مواقع ما نیاز داریم یک پرونده یا پوشه را به صورت فشرده در آوریم که این کار دارای مزایایی است. در ویندوز ما با استفاده از نرم افزارهای گرافیکی مثل WinRar یا ۷Zip این کار را انجام میدهیم که کاری بسیار ساده است. اما در لینوکس ما میتوانیم با خط فرمان و دستورات آن عمل فشرده سازی و یا از حالت فشرده خارج کردن را انجام دهیم. اصلاً کار سختی نیست! ما در این نوشته فشرده سازی در لینوکس با دستور tar را آموزش خواهیم داد.
دلایل زیادی برای استفاده از دستور tar برای فشرده سازی وجود دارد که میتوان به موارد زیر اشاره کرد:
- تهیۀ پشتیبان از اطلاعات و اسناد
- جابهجا کردن اطلاعات و اسناد از روی یک سرور به سرور یا رایانهای دیگر
- تهیۀ بایگانی از اطلاعات و اسناد
- مدیریت راحتتر چندین پرونده با تبدیل آن به یک پروندۀ فشرده شده
- عدم تغییرات در پروندۀ فشرده شده
دستور tar پر استفادهترین دستور برای امر فشرده سازی در لینوکس به حساب آمده و ما باید با طریقۀ کار کردن آن آشنا باشیم. به همین دلیل ما آموزش نمونههایی از طریقۀ استفاده از این دستور را در این مقاله از سایت وبنولوژی به شما آموزش خواهیم داد. اول بهتر است بدانید خود عبارت tar از دو کلمۀ Tape Archive به معنای “بایگانی نواری” گرفته شده است. منظور از نوار همان نوارهای مغناطیسی است که قبلاً روی آن اطلاعات رایانهای را ذخیره میکردند.
حتماً شما هم پروندههایی را با پسوند tar، tar.gz، gzip و bzip دیدید. در لینوکس ما میتوانیم همۀ آنها را با دستور tar بسازیم یا آن نوع پروندۀ فشرده شده را از حالت فشرده خارج کنیم. به مانند هر دستور دیگر لینوکس، tar هم دارای جنبههای مختلف کاربردی است که با دستور man میتوانید این جنبهها را خودتان بیاموزید. اما ما در اینجا به کاربردهای مهم آن اشاره خواهیم کرد.
ساخت یک پروندۀ فشرده شده از نوع tar
دستور زیر میخواهد از پوشۀ مسیر /home/webnology یک بایگانی با نام webnology-16-09-12.tar تهیه کند و آن را در مسیری که همینک در آنجا قرار دارد ذخیره کند.
# tar -cvf webnology-16-09-12.tar /home/webnology/
/home/webnology/
/home/webnology/cleanfiles.sh
/home/webnology/openvpn-2.1.4.tar.gz
/home/webnology/tecmint-14-09-12.tar
/home/webnology/phpmyadmin-2.11.11.3-1.el5.rf.noarch.rpm
/home/webnology/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
مثل هر دستور دیگر کار با با tar شروع کردیم و از سه تا مشخصه استفاده کردیم که توضیح خواهم داد هر کدام چه کاری را برای ما انجام میدهند.
- c : یک سند فشردۀ جدید از نوع tar میسازد. پس استفاده از آن حیاتی است.
- v : توضیحات مراحل فشرده سازی را در نتیجۀ خط فرمان به ما نشان میدهد.
- f : نوع نام سند فشرده را میتوانید تعیین کنید. پس زدن این مشخصه هم ضروری است که پس از آن باید نام سند فشردۀ نهایی به همراه پسوند آن را وارد کنید.
در انتهای دستور بالا هم باید مسیری که قرار است خود آن به همراه پوشهها و پروندههای زیرین آن فشرده شوند را تعیین کنید. این مسیر میتواند هم به صورت نسبی باشد و هم به صورت مطلق. برای اینکه بدانید مطلق و نسبی چیست، باید به آموزشهای دیگر ما مراجعه کنید. ولی همین را بدانید که منظور از یک نشانی مطلق، شروع نشانی یا مسیر از ریشه است. مثلاً زمانی که یک نشانی را ما از / شروع میکنیم، یعنی داریم از یک نشانی مطلق برای یک مسیر استفاده میکنیم. چیز پیچیدهای نیست؛ فقط باید درک کنید.
ساخت یک پروندۀ فشرده شده از نوع tar.gz
برای ساخت یک پروندۀ فشرده شده از نوع gzip باید از مشخصۀ z استفاده کنیم. به عنوان مثال در دستور زیر ما از مسیر /home/webnology یک پروندۀ فشرده با نام webnology-16-09-12.tar.gz خواهیم ساخت. دقت داشته باشید که پسوندهای tar.gz و tgz هر دو یک مفهوم را دارند.
tar -cvzf webnology-16-09-12.tar.gz /home/webnology یا tar -cvzf webnology-16-09-12.tgz /home/webnology
ساخت یک پروندۀ فشرده شده از نوع tar.bz2
فشرده سازی با قابلت bz2 حجم پروندۀ فشرده شده را کمتر از gzip خواهد کرد. به همین دلیل هم شاید مدت زمان بیشتری لازم باشد تا صبر کنید تا فشرده سازی انجام گیرد. مخصوصاً اگر یک پوشۀ بسیار حجیم را میخواهید با این روش فشرده کنید. اگر خواسته باشید پروندۀ شما خیلی فشرده شود، باید از مشخصۀ j استفاده کنید.
tar -cvfj webnology-16-09-12.tar.bz2 /home/webnology یا tar -cvfj webnology-16-09-12.tar.tbz /home/webnology یا tar -cvfj webnology-16-09-12.tar.tb2 /home/webnology
از حالت فشرده خارج کردن پروندۀ tar
برای خارج کردن یک پروندۀ tar از حالت فشرده (Untar) شما باید از مشخصۀ x استفاده کنید. برای تعیین محل خارج شدن از حالت فشرده به دو حالت میتوانید اقدم کنید. حالت اول اینکه بدون اینکه از مشخصۀ خاصی استفاده کنید، پروندهها و پوشهها در مسیر جاری از حالت فشرده خارج شود. حالت دوم این است که از مشخصۀ -C استفاده کنید و تعیین کنید که باید این کار کجا صورت بگیرد.
## خارج کردن از حالت فشرده در پوشۀ جاری ## # tar -xvf webnology-16-09-12.tar ## خارج کردن از حالت فشرده در پوشۀ تعیین شده با مشخصۀ C ## # tar -xvf webnology-16-09-12.tar -C /home/public_html/videos/
از حالت فشرده خارج کردن پروندۀ tar.gz
برای خارج کردن یک پروندۀ tar.gz از حالت فشرده باید از ساختار دستور زیر استفاده کنید و دقیقاً مثل نمونه کد قبلی برای خروج در محل دلخواه باید از مشخصۀ -C استفاده کنید. توجه کنید که نام پرونده باید عیناً وارد کنید. اگر در حروف آن کم و کسری وجود داشته باشد، سیستم به شما اخطار خواهد داد.
# tar -xvf webnology-16-09-12.tar.gz
از حالت فشرده خارج کردن پروندۀ tar.bz2
برای خارج کردن پروندۀ بیش از حد فشرده شدۀ tar.bz2 باید از ساختار دستور زیر بهره ببرید.
# tar -xvf videos-16-09-12.tar.bz2
فهرست کردن محتوای داخل یک پروندۀ tar
تا اینجا شاید فکر کنید که تمامی کاربردهای دستور tar را یاد گرفته باشید. اما کارهای بیشتری را میتوان با این دستور انجام داد. یکی از آنها آگاه شدن از فهرست محتویات موجود در یک پروندۀ فشرده یا tar است. گاهی از اوقات ممکن است قبل از اینکه خواسته باشید یک سند فشرده شده را از حالت فشرده خارج کنید، اول ببینید که اصلاً متحویات درون آن چیست. برای این منظور باید از مشخصۀ t استفاده کنید.
# tar -tvf webnology-16-09-12.tar
فهرست کردن محتوای داخل یک پروندۀ tar.gz
به نظر میرسد که نباید با دستور قبلی تفاوتی داشته باشد. به غیر از اینکه نام پروندهای که مد نظر ماست فرق خواهد کرد.
# tar -tvf webnology-16-09-12.tar.gz
فهرست کردن محتوای داخل یک پروندۀ tar.bz2
من دیگه حرفی ندارم!!
# tar -tvf webnology-16-09-12.tar.bz2
خارج کردن یک سند از داخل یک پروندۀ فشردۀ tar
حالا اگر خواسته باشید فقط یک سند را از داخل یک پروندۀ فشرده خارج کنیم تکلیف چیست؟ شاید یک پروندۀ فشردۀ خیلی سنگین داشته باشیم که از داخل آن فقط یک سند را بخواهیم! در این حالت باید نام سند مربوطه را در آخر دستور بزنید. این طوری:
# tar -xvf webnology-16-09-12.tar files.sh یا # tar --extract --file=webnology-16-09-12.tar files.sh
در حالت دوم که در بالا نشان داده شده است، ما از مشخصهها بلند به جای مشخصههای کوتاه استفاده کردیم. مثلاً به جای مشخصۀ f- میتوانیم از file– استفاده کنیم. اینها همگی در بخش man هر دستور به صورت کامل توضیح داده شده است، که حالا شاید نیاز نباشد شما همۀ آنها را یاد داشته باشید.
خارج کردن یک سند از داخل یک پروندۀ فشردۀ tar.gz
برای خارج کردن سند webnology.xml از درون webnology.tar.gz میتوانید از حالتهای زیر استفاده کنید.
# tar -zxvf webnology.tar.gz webnology.xml یا # tar --extract --file=webnology.tar.gz webnology.xml
خارج کردن یک سند از داخل یک پروندۀ فشردۀ tar.bz2
با دستور زیر ما میخواهید سند home/php/index.php را از داخل webnology.tar.bz2 استخراج کنیم.
# tar -jxvf webnology.tar.bz2 /home/php/index.php یا # tar --extract --file=webnology.tar.bz2 /home/php/index.php
خارج کردن چندین سند از داخل یک پروندۀ tar، tar.gz و tar.bz2
در یک دستور میتوانید به هر تعداد سند که خواسته باشید از حالت فشرده خارج کنید. به این صورت که نام آنها را داخل “” قرار دهید و هر کدام را با یک فاصلۀ خالی جدا نمایید. البته فراموش نکنید بسته به نوع پروندۀ بایگانی باید از مشخصۀ خاص همان هم استفاده کنید. به نمونۀ زیر دقت کنید:
# tar -xvf webnology-16-09-12.tar "file 1" "file 2" # tar -zxvf webnology-16-09-12.tar.gz "file 1" "file 2" # tar -jxvf webnology.tar.bz2 "file 1" "file 2"
خارج کردن گروهی از پروندهها با نویسههای WildCard
نویسههای wildcard معمولاً برای اشاره به نوعی از سند دارند. مثلاً اگر ما خواسته باشیم همۀ پروندهها از نوع php را از درون یک پروندۀ فشرده خارج کنیم، باید از این نویسهها استفاده کنیم.
# tar -xvf webnology.tar --wildcards '*.php' # tar -zxvf webnology.tar.gz --wildcards '*.php' # tar -jxvf webnology.tar.bz2 --wildcards '*.php'
افزودن پرونده یا پوشه به داخل بایگانی tar
حالا میرسیم به یک نظریۀ دیگر؛ اگر خواسته باشیم یک پرونده یا پوشه را وارد یک پروندۀ فشرده از نوع tar کنیم باید چه کار کنیم؟ در این حالت باید از مشخصۀ r استفاده کنیم و نام پرونده یا پوشۀ الحاقی را باید در انتهای دستور بزنیم. آن پرونده یا پوشه باید در مسیر جاری باشد. به این صورت:
# tar -rvf webnology-16-09-12.tar xyz.txt # tar -rvf webnology-16-09-12.tar php
افزودن پرونده یا پوشه به داخل بایگانیهایی از نوع tar.gz و tar.bz2
کاری که در مرحلۀ قبلی برای پروندههای tar انجام دادیم، حالا باید اینجا هم تکرار کنیم. خیلی ساده است. برای اطمینان از انجام الحاق میتوانید طبق نمونههای بالا از محتویات آن پروندۀ فشرده یک فهرست تهیه کنید.
# tar -rvf webnology-16-09-12.tar.gz xyz.txt # tar -rvf webnology.tar.bz2 xyz.txt
بازبینی پروندههای tar، tar.gz و tar.bz2
منظور از بازبینی همان Verify است که بررسی میکند پروندهای که به صورت فشرده شده است، مشکلی ندارد یا دارد. این کار را باید با مشخصۀ W انجام دهید. البته باید توجه داشته باشید که انواع *.tar.gz, *.tar.bz2 قابلیت بازبینی کردن را ندارند.
# tar tvfW webnology-16-09-12.tar
بررسی حجم پروندههای tar، tar.gz و tar.bz2
این هم یکی دیگر از انواع مفید دستور tar است که با آن میتوانیم حجم پروندۀ فشردۀ خود را ببینیم. البته این کار را به کمک دستور wc انجام خواهیم داد. این دستور کارش برگرداندن حجم، تعداد کلمات و خط یک سند است.
# tar -czf - webnology-16-09-12.tar | wc -c # tar -czf - webnology-16-09-12.tar.gz | wc -c # tar -czf - webnology.tar.bz2 | wc -c
کاربرد مشخصهها در یک نگاه
حالا در انتهای این آموزش میخواهیم با یک نگاه کلی ببینیم هر مشخصه در دستور tar برای ما چه کاری را انجام میداد.
- c : یک پروندۀ فشرده میسازد.
- x : از حالت فشرده خارج میکند.
- v : مراحل انجام کار را به صورت متنی نشان میدهد. در تمامی دستورات بالا میتوانید این مشخصه را حذف کنید. اما باید کاملاً تا زمان اتمام کارِ سیستم صبر کنید.
- f : نام پرونده یا بایگانی فشرده شده.
- t : دیدن محتوای موجود در پروندۀ فشرده.
- j : فیلتر (صافی) محتویات درون پروندۀ bzip2
- z : فیلتر (صافی) محتویات درون پروندۀ gzip
- r : الحاق یا به روز کردن محتویات درون یک پروندۀ فشرده
- w : یک پروندۀ فشرده را بازبینی (Verify) میکند.
- wildcards : یک الگوی خاص برای استفاده در دستور tar لینوکس
بدین ترتیب شما به صورت تقریباً کامل با دستور tar لینوکس آشنا شدید که حالا چه در حال کار کردن روی سرور لینوکس باشید یا رایانۀ شخصیِ لینوکس، به هر حال به راحتی میتوانید از پس فشرده سازی و از حالت فشرده خارج کردن پروندهها و پوشههای خود برآیید. این دستور خیلی به درد شما خواهد خورد. با آموزشهای بعدی و قبلی مدیریت سرور لینوکس همراه با وبنولوژی باشید تا بفهمید چرا.
سلام مرسی از سایت خوبتان میشه مطلبی در باره ی gzip و chahe داخل سایت قرار بدید؟
سلام؛ نوبت به آن هم خواهد رسید. هنوز مقالات آموزشیِ مدیریت سرور لینوکس مونده…
سلام
همچنان منتظر آموزشهای فوق العاده و کاربردیتون هستیم آقا جمال!
سلام؛ ما هم منتظریم مشکلات کمی سبک بشه، شروع کنیم.
سلام
من مقاله های شما را مرحله به مرحله مطالعه کردم خیلی برام جالب بود چون به این کار طراحی سایت و مدیریت سرور لینوکس علاقه زیادی دارم فقط سوالی دارم اینه که ، در سرور لینوکس ، پس پوشه تنظیمات آپاچی کجاست ؟ چطوری محتوای سایت را روی سرور لینوکس آپلود می کنیم ؟ پایگاه داده چطور نصب می شه و….البته منظور با کمک خط فرمان لینوکس هستش ، مقالات شما تموم شد یا اینکه ادامه داره ؟ چون واقعا این مقالات از خیلی از سایت های مشابه بهتر و کاملتر هستش حیف است که ادامه ندهید
سلام؛ این مباحثی که شما گفتید توی مراحل بعدی آموزشی گفته میشه. فعلاً توی مقدماتش موندیم. به دلیل مشکلاتی که پیش اومده توی انتشار این آموزش ها وقفه ایجاد شده!