آرشیو کردن و بکاپ گرفتن در خط فرمان

یکی از وظایف اولیه هر مدیر سیستمی، نگهداری ایمن دادهها است. یکی از روشهای انجام این کار، بکاپگیری منظم فایلهای سیستم بر اساس جدول زمانی است.
حتی اگر که شما یک مدیر سیستم نیستید، گاها مفید است که از دادههایی که در سیستم خود دارید، کپی بگیرید و حتی مجموع عظیمی از دادههای خود را از یک دیوایس به دیوایس دیگر جابهجا کنید. در این درس و درسهای پیشِ رو نگاهی به رایجترین برنامههای موجود برای مدیریت مجموعهای از فایلها خواهیم انداخت.
بدین منظور از فرمانهای gzip، bzip2، tar، zip و rsync استفاده خواهیم کرد.
فشردهسازی
در تاریخچه کامپیوتر، همیشه تلاش میشده دادهها را تا کمترین اندازه ممکن کوچک کرد تا فضای کمتری را اشغال کند. این فضا میتواند حافظه Memory یا دیوایسهای ذخیرهسازی یا پهنای باند شبکه باشد، تفاوتی نمیکند. بسیاری از سرویسهای داده که امروزه از آنها استفاده میکنیم، مانند موزیکپلیرهای قابل حمل، تلویزیونهای با کیفیت بالا، یا پهنای باند اینترنت، وجود خود را مدیون تکنیکهای فشردهسازی تاثیرگذار هستند.
فشردهسازی داده، پروسه حذف افزونگی و حشو (redundancy) داده است. بگذارید یک مثال غیرواقعی را در نظر بگیریم. فرض کنید ما یک فایل تصویر کاملا سیاه داریم که ۱۰۰ پیکسل طول و ۱۰۰ پیکسل ارتفاع دارد. بهعبارتی ذخیرهسازی داده (۲۴ بیت یا همان ۳ بایت بر پیکسل)، تصویر ۳۰۰۰۰ بایت از فضا را اشغال میکند:
۳*۱۰۰*۱۰۰=۳۰۰۰۰
یک فایل تصویر که فقط دارای یک رنگ است، حاوی دادههای حشو و افزونگی بالایی است. اگر ما باهوش بودیم، بایستی داده را به نحوی Encode میکردیم که به سادگی این واقعیت را توصیف میکرد که ما یک بلوک ۳۰۰۰۰ پیکسلی رنگ سیاه داریم. پس بهجای استفاده از یک بلوک داده حاوی ۳۰۰۰۰ صفر (سیاه معمولا در فایلهای تصویر با عدد صفر تعیین میگردد)، میتوانستیم داده را با شماره ۳۰۰۰۰ تعیین کنیم و بهدنبال آن یک صفر که نشاندهنده رنگ سیاه ماست. این نوع طرح فشردهسازی داده run-length encoding به معنی کدگذاری با طول، نامیده میشود. که یکی از تکنیکهای فشردهسازی بنیادین است. تکنیکهای امروزه بسیار پیچیدهتر و پیشرفتهتر هستند ولی هدف اصلی همان قبلی اس. یعنی از شر افزونگی و حشو (همان دادههای تکراری) خلاص شویم.
الگوریتمهای فشردهسازی (تکنیکهای ریاضی که بهمنظور فشردهسازی استفاده میشوند) به دو دستهبندی اصلیlossless (به معنای بدون اتلاف) و lossy (به معنای با اتلاف) تقسیم میگردند.
فشردهسازی lossless از تمام دادههایی که در شکل اورجینال فایل وجود دارد، محافظت میکند و هیچ دادهای از دست نمیرود. بدین معنی که فایل بازیابی شده دقیقا همان فایل اصلی قبل از فشردهسازی است.
در مقابل، فشردهسازی lossy را داریم کهدر حین فشردهسازی، دادهها را حذف میکند تا فشردهسازی بیشتری صورت پذیرد و حجم داده کاهش یابد.
زمانی که یک فایل lossy بازیابی میشود، با نسخه اصلی آن برابری نمیکند! مثالهایی از فشردهسازی lossy تصاویر JPEG و فایلهای MP3 هستند.
در این مبحث ما به اختصار، درباره فشردهسازیهای lossless گفتگو خواهیم کرد. به این دلیل که اکثر دادههایی که بر روی کامپیوترها وجود دارند، تحمل از دست دادن داده را نخواهند داشت.
فرمان gzip (فشردهسازی یا بسط فایلها)
برنامه gzip بهمنظور فشردهسازی یک یا چند فایل، مورد استفاده قرار میگیرد. زمانی که gzip اجرا میشود، فایل اصلی با یک نسخه فشرده از فایل جایگزین میشود. برنامه مربوطه gunzip بهمنظور بازیابی فایلهای فشرده به شکل اورجینال خود مورد استفاده قرار میگیرند.
به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 |
[me@linuxbox ~]$ ls -l /etc > foo.txt [me@linuxbox ~]$ ls -l foo.* -rw-r--r-- 1 me me 15738 2012-10-14 07:15 foo.txt [me@linuxbox ~]$ gzip foo.txt [me@linuxbox ~]$ ls -l foo.* -rw-r--r-- 1 me me 3230 2012-10-14 07:15 foo.txt.gz [me@linuxbox ~]$ gunzip foo.txt [me@linuxbox ~]$ ls -l foo.* -rw-r--r-- 1 me me 15738 2012-10-14 07:15 foo.txt |
در این مثال، فایل متنی را با نام foo.txt ایجاد و سپس gzip را اجرا کردیم که فایل اصلی را با نسخه فشردهای با نام foo.txt.gz جایگزین میکند. با لیست کردن دایرکتوریها، مشاهده میکنیم که نسخه اصلی فایل با نسخه فشرده شده جایگزین میشود. به حجم فایل قبل و بعد از فشردهسازی، توجه نمایید: مشاهده میشود که حجم فایل فشرده شده، هفت برابر کاهش یافته است. سپس با استفاده از فرمان gzip فایل را مجددا از حالت فشرده خارج میکنیم. دوباره فایل اصلی، جایگزین نسخه فشرده میشود.
فرمان gzip دارای گزینههای زیادی است که در لیست زیر مشاهده میشود:
گزینه | توضیحات |
---|---|
-c | نوشتن خروجی در خروجی استاندارد و نگهداری فایلهای اصلی. همچنین ممکن است با --stdout و --to-stdout نیز تعیین شده باشد. |
-d | Decompress. موجب میشود که gzip مثل gunzip عمل کند. ممکن است بوسیله --decomperess یا --uncompress نیز تعیین شده باشد. |
-f | فشردهسازی اجباری حتی اگر یک نسخه فشرده از فایل اصلی هم اکنون موجود باشد. همچنین ممکن است بوسیله --force تعیین شده باشد. |
-h | نمایش اطلاعات کاربرد. همچنین ممکن است با --help تعیین شده باشد. |
-l | لیست کردن آمارهای فشردهسازی برای هر فایل فشرده. همچنین ممکن است با --list تعیین شده باشد. |
-r | اگر یکی از آرگومانها در خط فرمان پوشهها باشد، به صورت بازگشتی فایلهای درون آن را فشردهسازی کن. ممکن است با --recurdive نیز تعیین شده باشد. |
-t | آزمون یکپارچگی فایل فشرده. ممکن است با --test نیز تعیین شده باشد. |
-v | نمایش پیامهای طولانی در زمان فشردهسازی. ممن است --verbose نیز تعیین شده باشد. |
-number | تعیین میزان فشردهسازی. شماره یک عدد صحیح در محدوده 1 (سریعترین و کمترین فشردهسازی) تا عدد 9 (کندترین و بیشترین فشردهسازی) میباشد. |
مجددا نگاهی به مثال قبلی خواهیم انداخت:
1 2 3 4 |
[me@linuxbox ~]$ gzip foo.txt [me@linuxbox ~]$ gzip -tv foo.txt.gz foo.txt.gz: OK [me@linuxbox ~]$ gzip -d foo.txt.gz |
در اینجا فایل foo.txt را با یک نسخه فشرده foo.txt.gz جایگزین کردیم. سپس یکپارچگی فایل فشرده را با استفاده از گزینههای –t و –v سنجیدیم. در نهایت فایل را به شکل اصلی آن، بازگرداندیم.
علاوه بر این، میتوان gzip را در شیوههای جذابی از طریق خروجی و ورودی استاندارد، مورد استفاده قرار داد:
1 |
[me@linuxbox ~]$ ls -l /etc | gzip > foo.txt.gz |
این فرمان، نسخه فشردهای از لیست دایرکتوریها را در قالب فایل foo.txt.gz ایجاد میکند. فرمانgunzip که فایلهای gzip را از حالت فشرده خارج میکند، فرض میکند که اسامی فایلها با پسوند .gz پایان مییابند، پس ضرورتی ندارد که پسوند را هنگام استفاده از gunzip اضافه کنیم:
1 |
[me@linuxbox ~]$ gunzip foo.txt |
اگر هدف ما فقط نمایش محتوای فایل متنی فشرده باشد، میتوانیم این کار را از طریق پایپ کردن آن در فرمان less انجام دهیم.
1 |
[me@linuxbox ~]$ gunzip -c foo.txt | less |
به شیوهای دیگر، برنامهای با نام zcat عرضه شده که همان کار gunzip را به همراه گزینه –c انجام میدهد:
1 |
[me@linuxbox ~]$ zcat foo.txt.gz | less |
فرمانbzip2 (فشردهسازی بیشتر به قیمت کاهش سرعت)
فرمانbzip2 (که توسط Julian Seward ایجاد شده) مشابه gzip میباشد، ولی الگوریتم متفاوت فشردهسازی استفاده مینماید که سطوح بالاتری را از فشردهسازی (ولی به قیمت کاهش سرعت فشردهسازی فایل) کسب میکند. اما در اکثر زمینهها، بههمان شکل gzip عمل مینماید. فایلی که با bizp2 فشرده شده باشد، پسوند bz2 دریافت میکند:
1 2 3 4 5 6 7 |
[me@linuxbox ~]$ ls -l /etc > foo.txt [me@linuxbox ~]$ ls -l foo.txt -rw-r--r-- 1 me me 15738 2012-10-17 13:51 foo.txt [me@linuxbox ~]$ bzip2 foo.txt [me@linuxbox ~]$ ls -l foo.txt.bz2 -rw-r--r-- 1 me me 2792 2012-10-17 13:51 foo.txt.bz2 [me@linuxbox ~]$ bunzip2 foo.txt.bz2 |
همانطور که میبینیم bzip2 را میتوان به همان شیوه gzip بهکار برد. همه گزینههای gzip به غیر از -r در bzip2 هم پشتیبانی میشوند.
توجه داشته باشید که گزینه سطح فشردهسازی (-number) معنای متفاوتی در bzip2 دارد. bzip2 بهمنظور فشرده کردن فایلها از bunzip2 و bzcat استفاده میکند. همچنین bzip2 دارای برنامه bzip2recover بوده که تلاشی برای بازیابی فایلهای آسیبدیده bz2 را دارد.
منبع: لینوکسسیزن نوشته فرشید نوتاش حقیقت