در لینوکس ما برنامه های gzip, bip2 و xz رو برای فشرده سازی داریم.
gzip از الگوریتم LZ77 و bzip2 از الگوریتم Burrows-Wheeler و xz از الگوریتم LZMA استفاده میکنه.
الگوریتم deflate هم که در فشرده سازی صفحات وب استفاده میشه ترکیبی از دو الگوریتم هافمن و LZ77 هست.
هر کدوم از این الگوریتم های مزایا و معایب خودشون رو دارن.
با استفاده از برنامه های gzip ,bzip2 و xz در لینوکس میتونید فایلهاتون رو با الگوریتم مورد نظر فشرده کنید.
برنامه های gzip و bzip2 مولتی ترد نیستن، نسخه مولتی ترد اونها pigz و pbzip2
در برنامه xz میتونید با سوییچ T- و قرار دادن تعداد تردهای دلخواه، عملیات فشرده سازی یا استخراج رو به صورت مولتی ترد انجام بدید.
مقایسه سرعت و میزان فشرده سازی
برای مقایسه این الگوریتم ها، ما یک فایل متنی با حجم ۲.۱ گیگابایت که حاوی تعدادی دامین بودند رو با هرکدوم از این برنامه ها فشرده و دوباره استخراج کردیم که این نتایجش هست
به طور خلاصه
- gzip کمترین درصد فشرده سازی، سریعترین عملکرد در فشرده سازی، سریعترین عملکرد در استخراج فایل فشرده شده
- bzip2 مقام دوم در درصد فشرده سازی ، مقام دوم در مدت زمان فشرده سازی با اختلاف زیاد نسبت به مقام سوم یعنی xz، مقام سوم در مدت زمان استخراج فایل فشرد شده
- xz بیشترین درصد فشرده سازی، کندترین عملکرد در فشرده سازی، مقام دوم در مدت زمان استخراح فایل فشرده شده
اینجا هم مقایسه دیگه ای بین این الگوریتمها انجام شده
این مقایسه هم بین نسخه مولتی ترد برنامه ها هست
tar
برای مدیریت آرشیو ها، بهتره به جای برنامه های بالا از tar استفاده کنید که هر سه الگورینم بالا رو داره
با tar میتونیم یک ارشیو درست کنیم
1 |
$ tar cvf data.tar data.txt |
- f- مشخص کردن نام فایل خروجی
- c- ساختن فایل فشرده - فشرده سازی
- v- نمایش لیست فایلهایی که در حال پردازش هست
فایل خروجی فشرده سازی نشده، برای فشرده سازی یکی از ۳ الگوریتم اشاره شده رو داریم
1 2 3 |
$ tar zcvf data.tar.gz data.txt $ tar jcvf data.tar.bz2 data.txt $ tar Jcvf data.tar.xz data.tx |
برای مشخص کردن نوع برنامه فشرده ساز داریم
- z برای gzip
- j برای bzip2
- J برای xz
بعد از اینکه نام فایل خروجی رو مشخص کردیم میتونیم هر چند تا فایل یا دایرکتوری رو برای فشرده سازی انتخاب کنیم برای مثال
1 |
$ tar zcvf data.tar.gz data.txt data2.txt ../data2 |
tar برخلاف برنامه های بالا به صورت پیش فرض فایل رو بعد از فشرده سازی پاک نمیکنه
یه راه دیگه استفاده از سوییچ a هست که نوع آرشیو مورد نظر رو بر اساس پسوند فایل تشخیص میده
1 |
$ tar acvf data.tar.gz data.txt data2.txt ../data2 |
برای استخراج باید سوییچ x رو به همراه سوییچ نوع آرشیو ارسال کنیم
1 2 3 |
$ tar xzvf data.tar.gz $ tar jxvf data.tar.bz2 $ tar Jxvf data.tar.xz |
اگه سخه tar سیستمتون بالاتر از 1.22 باشه دیگه لازم نیست نوع آرشیو رو مشخص کنید
1 |
$ tar xvf data.tar.gz |
برای اینکه مطمئن بشید ارشیوی که ایجاد کردید درست ساخته شده و یا برای دیدن محتویات آرشیو
1 |
$ tar tf data.tar.gz |
- t- لیست کردن فایل های داخل آرشیو
- f- مشخص کردن نام فایل ورودی
tar مولتی ترد نیست اما میشه کاری کرد که از یک برنامه خاص برای فشرده سازی و استخراج استفاده کنه یعنی از برنامه های pigz و pbzip2
روش اول استفاده از سوییچ I , --use-compress-program- هست
1 2 3 |
$ tar -I 'pigz -p 32' -cvf data.tar.gz data.txt $ tar -I 'pbzip2 -p32' -cvf data.tar.bzip2 data.txt $ tar -I 'xz -T0' -cvf data.tar.xz data.txt |
و روش دوم
1 2 3 |
$ tar cf - data.txt | pigz -p 32 > data.tar.gz $ tar cf - data.txt | pbzip2 -p4 > data.tar.bz2 $ tar cf - data.txt | xz -T0 > data.tar.xz |
وقتی خروجی رو - میزارید یعنی تو stdout قرار بده که با اپراتور پایپ ارسال میشه به برنامه فشرده ساز
در برنامه pigz تعداد تردها با سوییچ p- مشخص میشه، اگه این سوییچ رو ارسال نکنید برابر تعداد هسته های CPU ترد ایجاد خواهد شد.
در برنامه pbzip2 سوییچ p- مشخص میکنه از چه تعداد هسته CPU استفاده کنه (با قبلی فرق داره)، اگه این سوییچ رو ارسال نکنید از تمام هسته های CPU استفاده میکنه.
در برنامه xz تعداد تردها با سوییچ T- مشخص میشن، اگه ۰ بزارید برابر تعداد هسته های CPU ترد ایجاد خواهد شد.
tar فقط آرشیو هایی که توسط خودش ایجاد شده رو میتونه پردازش کنه
برای اطلاعات بیشتر راهنمای رسمی tar رو ببینید.
منابع