در این پست از سایت نکست ادمین که به آموزش دوره Lpic1 لینوکس مشغول هستیم قرار است مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management) را توضیح دهیم که در ادامه با دستوراتی برای جا به جایی فایل، حذف فایل، تغییر نام فایل، فشرده کردن و خارج کردن از حالت فشرده و کلی موضوع جذاب دیگه بپردازیم.
آموزش مدیریت مقدماتی فایل ها در لینوکس
دستور ls لینوکس برای لیست کردن فایل ها
دستور ls یکی از دستورات پایه ی لینوکس می باشد که هر کاربر لینوکسی باید بلد باشد. این دستور به منظور لیست کردن اطلاعات مربوط به فایل ها و دایرکتوری ها استفاده می شود. ابزار ls به همراه هسته ی GNU وجود دارد که به همین دلیل بر روی تمامی توزیع های لینوکس و حتی سیستم عامل مک او اس نیز قرار دارد.
root@ubuntu:~# ls -l total 48 drwxr-xr-x 2 saeed saeed 4096 Aug 20 14:09 Desktop drwxr-xr-x 2 saeed saeed 4096 Jun 23 21:33 Documents drwxr-xr-x 2 saeed saeed 4096 Jun 23 21:33 Downloads -rw-r--r-- 1 saeed saeed 8980 Jun 23 21:26 examples.desktop drwxr-xr-x 2 saeed saeed 4096 Jun 23 21:33 Music drwxr-xr-x 2 saeed saeed 4096 Jun 23 21:33 Pictures drwxr-xr-x 2 saeed saeed 4096 Jun 23 21:33 Public drwxr-xr-x 2 saeed saeed 4096 Jun 23 21:33 Templates -rw-r--r-- 1 root root 940 Aug 16 15:06 test drwxr-xr-x 2 saeed saeed 4096 Jun 23 21:33 Videos
در زیر چند مورد از پراستفاده ترین سوئیچ های ls را قرار داده ایم:
- سئویچ 1- به صورت یک خطی نمایش می دهد.
- سئویچ l- به صورت Long نمایش می دهد یعنی اطلاعات بیشتری را به ما نمایش می دهد.
- سئویچ ا- به صورت human readable sizes نمایش می دهد، یعنی بجای این که سایز ها را به صورت بایت نمایش دهد به صورت مگ و گیگ نمایش می دهد.
- سئویچ t- به صورت sort شده بر روی زمان فایل ها نمایش می دهد.
- سئویچ r- معمولا با سوئیچ t- میاد برای این که فایل ها را به صورت reverse time کرده و sort کند، یعنی فایل های جدید پایین قرار می گیرند.
- سئویچ S- به صورت sort شده بر روی سایز فایل ها نمایش می دهد.
پس یکی از پر استفاده ترین ها سوئیچ های ترکیبی ltrh- می باشد:
root@ubuntu:~# ls -ltrh
total 48K
-rw-r--r-- 1 saeed saeed 8.8K Jun 23 21:26 examples.desktop
drwxr-xr-x 2 saeed saeed 4.0K Jun 23 21:33 Videos
drwxr-xr-x 2 saeed saeed 4.0K Jun 23 21:33 Templates
drwxr-xr-x 2 saeed saeed 4.0K Jun 23 21:33 Public
drwxr-xr-x 2 saeed saeed 4.0K Jun 23 21:33 Pictures
drwxr-xr-x 2 saeed saeed 4.0K Jun 23 21:33 Music
drwxr-xr-x 2 saeed saeed 4.0K Jun 23 21:33 Downloads
drwxr-xr-x 2 saeed saeed 4.0K Jun 23 21:33 Documents
-rw-r--r-- 1 root root 940 Aug 16 15:06 test
drwxr-xr-x 2 saeed saeed 4.0K Aug 20 14:09 Desktop
نکته: برای مثال drwxr-xr-x مواردی که اولش d دارد یعنی یک دایرکتوری هستن و آن هایی که -rw-r–r– خط اولش – دارد یعنی فایل هستن.
دستور cp و mv و rm در لینوکس برای کپی کردن، پاک کردن و حذف فایل ها
دستور cp
کپی کردن فایل در سیستم عامل ها یکی از معمولترین کارها می باشد که در محیط ترمینال لینوکس با دستور cp انجام پذیر می باشد.
حالت کلی این دستور به صورت زیر می باشد:
cp source destination
برای مثال myfile را بر روی thatfile کپی کردیم:
root@ubuntu:~# cp myfile thatfile
در صورتی که می خواهید چند فایل را به یک دایرکتوری منتقل کنید به شکل زیر وارد می کنیم:
$ cp item1 item2 item3 directory
عملا دستور cp به صورت پیشفرض یک فایل را overwrite می کند در فایل دیگر، حالا بعضی سیستم ها برای کاربر روت به صورت پیشفرض از سوئیچ i- یا (interactive–) استفاده می کنند که قبل از overwrite از شما سوال می کند، اگر می خواهید بدون سوال کردن این کار را بکند (معمولا به همین صورت سیستم عمل می کند) از سوئیچ f- یا (force–) استفاده کنید.
همچنین اگر می خواهید از یک فایل زمان cp کردن و overwrite شدن Backup بگیرید می توانید از سوئیچ b- یا (backup–) استفاده کنید، با این کار یک فایل جدید با همان نام قبلی ولی با علامت ~ در آخرش برای شما به عنوان فایل بک آپ ساخته می شود. برای مثال ما فایل myfile را بر روی thatfile کپی کردیم ولی گفتیم از thatfile یک بک آپ بساز
root@ubuntu:~# cp -b myfile thatfile
سوئیچ p- نیز تمام attributes شامل دسترسی ها و زمان و هر attributes دیگری را در زمان انتقال آن را نیز منتقل می کند.
دستور mv
دستور mv هم برای شما برای عملیات move کردن و جا به جایی فایل قابل استفاده است و هم تغییر نام فایل، برای مثال ما می خواهیم فایل های old و new را به دایرکتوری dir انتقال دهیم:
$ root@ubuntu:~# mv old new dir
و یا می خواهیم نام فایل old را به next تغییر دهیم:
$ root@ubuntu:~# mv old next
نکته مهم: این کار به دلیل اتفاق می افتد که دستور mv فقط اسم فایل را در inode (مسیر فایل در فایل سیستم) تغییر می دهد، برای مثال اگه یک فایل سنگین را با دستور cp تغییر نام بدید عملا زمان بر است زیرا فایل اول از هارد خوانده می شود و سپس بر روی هارد نوشته می شود ولی با دستور mv فقط آدرس مسیر عوض می شود پس در لحظه عمل می کند.
دستور rm
این دستور تو حالت پیشفرض یک فایل را حذف می کند:
root@ubuntu:~# rm test
نحوه حذف کردن چندین فایل در Linux
برای حذف چندین فایل در یک لحظه، نام فایل هایتان را یک به یک وارد کرده (برای مثال file1 file2) یا از یک pattern (الگو) برای حذف چندین فایل (برای مثال فایل هایی که انتهای آنها با .txt تمام میشوند) با یک حرکت استفاده کنید.
[root@localhost]# rm mohammad.txt maryam.txt
[root@localhost]# rm *.txt
نحوه حذف یک دایرکتوری در Linux
برای حذف یک دایرکتوری، شما میتوانید از سوئیچ های “r-” یا “R-” برای حذف یک دایرکتوری و زیرشاخه هایش (به همراه محتوای داخل آن) استفاده کنید.
[root@localhost]# rm habili_doc/
rm: cannot remove ‘habili_doc/’: Is a directory
[root@localhost]#
[root@localhost]# rm -R habili_doc/
نحوه تاییدیه گرفتن قبل از حذف فایل ها
برای گرفتن تاییدیه به هنگام حذف یک فایل، همانند زیر از آپشن “i-” استفاده کنید.
# rm -i maryam.txt
نحوه تاییدیه گرفتن هنگام حذف دایرکتوری ها
برای گرفتن تاییدیه هنگام حذف یک دایرکتوری به همراه sub-directory های آن، همانند زیر از آپشن “R-” و “i-” استفاده کنید.
# rm -Ri test-file/
نحوه حذف حتمی فایل یا دایرکتوری ها بدون پرسش و نیاز به تایید
برای force کردن عملیات حذف یک دایرکتوری، شما میتوانید از آپشن “f-” برای force کردن عملیات حذف و بدون تاییدیه گرفتن استفاده کنید. برای مثال اگر یک فایلی غیرقابل خواندن باشد، rm از شما تاییدیه میخواهد که این فایل را حذف کند یا خیر، که برای جلوگیری کردن از این کار کافیست از آپشن “f-” در دستور زیر استفاده کنید.
# rm -f habili.txt
هنگامیکه شما آپشن های “r-” و “f-” را با هم ترکیب کنید، به این معنی میباشد که یک دایرکتوری را به همراه تمام زیر شاخه هایش و به صورت force (بدون تاییدیه گرفتن) حذف میکند.
# rm -rf test_file/
نحوه نمایش اطلاعات در حین حذف شدن
برای نمایش اطلاعات بیشتر هنگام حذف یک فایل یا دایرکتوری، از آپشن “v-” را برای نمایش کارها یا اتفاقات انجام شده، در خروجی استفاده کنید.
rm -rv test_file/
یاد گرفتن دستور rm -Rf /
شما همیشه باید به خاطر بسپارید که “rm -rf” یکی از دستورات خطرناک میباشد، که شما میتوانید آنرا روی یک سیستم لینوکسی مخصوصا با یوزر root اجرا نکنید. دستور زیر همه چیز را در پارتیشن root (/) حذف خواهد کرد و مجبور میشوید از اول سیستم عامل را نصب و راه اندازی کنید. :)
# rm -rf /
ایجاد Alias برای دستور rm در Linux
به عنوان یک اقدام امنیتی، شما میتوانید rm را طوری تنظیم کنید که همیشه از شما برای عملیات حذف تاییدیه بگیرد، هر زمانیکه شما بخواهید یک فایل یا دایرکتوری را حذف کنید، از آپشن “i-” استفاده میکند. برای دائمی کردن این دستور alias زیر را به فایل $HOME/.bashrc اضافه کنید.
alias rm="rm -i"
تغییرات را ذخیره کنید و از فایل خارج شوید. سپس فایل .bashrc خودتان را همانند زیر source کنید یا اینکه یک ترمینال جدید برای اعمال شدن آخرین تغییرات باز کنید.
# source $HOME/.bashrc
وقتی که شما دستور rm را اجرا میکنید، به طور پیش فرض با آپشن “i-” اجرا خواهد شد. (در صورت استفاده از آپشن “f-” این تنظیمات overwrite خواهند شد)
# rm maryam.txt
# rm mohammad.txt
آیا rm یک فایل را حذف میکند؟
در واقع، دستور rm هرگز یک فایل را حذف نخواهد کرد، بلکه آنرا از روی دیسک unlink میکند، اما هنوز دیتا بر روی دیسک میباشد و میتوانید با ابزارهایی مانند PhotoRec, Scalpel یا Foremost آنرا recovery کنید.
اگر شما واقعا میخواهید دایرکتوری یا فایلی را به صورت دائمی حذف کنید، شما میتوانید از ابزار کامند لاینی shred برای overwrite یک فایل به نحوی که محتوای آن مخفی شود، استفاده کنید.
ساخت دارکتوری و حذف دایرکتوری در لینوکس
برای ساخت یک دارکتوری در لینوکس از دستور mkdir استفاده می کنیم:
$ mkdir dirA
اگه بخوایم چند دایرکتوری بسازی به صورت زیر عمل می کنیم:
$ mkdir dirA dirB
ولی اگر بخواهیم یک فلدر تو در تو بسازی به صورت newDir/insideNew/lastDir باید از سوئیچ p- به منظور ساخت دایرکتوری های والد آن نیز استفاده کنیم:
$ mkdir -p newDir/insideNew/lastDir
حال فکر کنید نیاز دارید که دارکتوری به صورت زیر ایجاد کنید که تمام فلدر ها و زیر فلدر ها همه با هم ایجاد شود:
movies/
├── action
├── horror
├── otder
│ ├── 2016
│ ├── 2017
│ ├── 2018
│ └── 2019
└── scifi
برای این که تمام فلدر های بالا رو همزمان با یک دستور ایجاد کنید باید به صورت زیر عمل کنید:
root@ubuntu:~# mkdir -p movies/{horror/,action/,scifi/,otder/{2016/,2017/,2018/,2019/}}
حذف دایرکتوری
حال اگر بخواهیم یک دارکتوری را پاک کنیم از دستور rmdir استفاده می کنیم ولی نکته ای که دارد این دستور برای حذف یک دارکتوری خالی قابل استفاده است، یعنی اگر دارکتوری تو در توی بالا را بخواهیم حذف کنیم امکان ندارد مگر از دستور rm با سوئیچ r- استفاده کنیم که اول فایل های داخل دارکتوری را پاک می کند و سپس خود دارکتوری را هم حذف می کند:
root@ubuntu:~# rm -r movies/
نکته ای که وجود دارد در لینوکس بیشتر دستوراتی که r- یا R- دارند معمولا منظور Recursive است یعنی هر چیزی که داخل آن هست را تکرار کن برای یک دستور، برای مثال شما می توانید از سوئیچ r یا R در cp یا rm یا ls و کلی دستور دیگه استفاده کنید.
$ ls
howcool.sort newDir uses.sort
$ ls -R
.:
howcool.sort newDir uses.sort
./newDir:
insideNew TestFile
./newDir/insideNew:
lastDir
./newDir/insideNew/lastDir:
دستور Touch در لینوکس
دستورات Touch برای ایجاد فایل های خالی و نیز تغییر timestamp فایل های موجود بر روی سیستم عامل لینوکس و یونیکس به کار می رود. تغییر timestamp در این مقاله به معنای به روزرسانی دسترسی و اصلاح زمان فایل ها و دایرکتوری هاست.
ما بک فایل به نام myfile داریم که تاریخ Jan 8 17:47 برایش ثبت شده است:
/touch$ ls -l
total 0
-rw-rw-r-- 1 jadi jadi 0 Jan 8 17:47 myfile
حالا اگه فایل رو touch کنیم زمان آن به زمان فعنی تغییر می کند:
/touch$ touch myfile #after a minute
/touch$ ls -l
total 0
-rw-rw-r-- 1 jadi jadi 0 Jan 8 17:48 myfile
برخی از سوئیچ ها و روش های تغییر زمان:
[ian@echidna lpi103-2]$ touch -t 200908121510.59 f3
[ian@echidna lpi103-2]$ touch -d 11am f4
[ian@echidna lpi103-2]$ touch -d "last fortnight" f5
[ian@echidna lpi103-2]$ touch -d "yesterday 6am" f6
[ian@echidna lpi103-2]$ touch -d "2 days ago 12:00" f7
[ian@echidna lpi103-2]$ touch -d "tomorrow 02:00" f8
[ian@echidna lpi103-2]$ touch -d "5 Nov" f9
[ian@echidna lpi103-2]$ ls -lrt f*
-rw-rw-r--. 1 ian ian 0 2009-07-31 18:31 f5
-rw-rw-r--. 1 ian ian 0 2009-08-12 12:00 f7
-rw-rw-r--. 1 ian ian 0 2009-08-12 15:10 f3
-rw-rw-r--. 1 ian ian 0 2009-08-13 06:00 f6
-rw-rw-r--. 1 ian ian 0 2009-08-14 11:00 f4
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:27 f2
-rw-rw-r--. 1 ian ian 0 2009-08-15 02:00 f8
-rw-rw-r--. 1 ian ian 0 2009-11-05 00:00 f9
[ian@echidna lpi103-2]$ date
Fri Aug 14 18:33:48 EDT 2009
[ian@echidna lpi103-2]$ date -r f1
Fri Aug 14 18:25:50 EDT 2009
[ian@echidna lpi103-2]$ touch -r f1 f1a
[ian@echidna lpi103-2]$ ls -l f1*
-rw-rw-r--. 1 ian ian 4 2009-08-14 18:25 f1
-rw-rw-r--. 1 ian ian 0 2009-08-14 18:25 f1a
همچنین اگه از دستور touch استفاده کنیم و فایل مورد نظر بر روی سیستم موجود نباشد، آن را ایجاد می کند.
وایلدکاردها یا کاراکترهای ویژه در لینوکس
وایلدکاردها در لینوکس کدامند؟ قبل از اینکه شروع به استفاده از دستورات کنیم، بایستی درباره یک ویژگی از دستورات صحبت کنیم که آنها را قدرتمند می سازد.
وایلدکاردها در لینوکس
به دلیل اینکه Shell از نام فایل برای دستورات زیاد استفاده می کند، کاراکترهای ویژه برای تعیین اسامی فایل به کار می آید. این کاراکترهای ویژه را وایلدکاردها (Wildcards) می نامند. استفاده از وایلدکاردها به شما کمک می کند تا اسامی فایل را بر اساس الگوی خاصی از کاراکترها انتخاب کنید.
*
هر کاراکتری?
هر تک کاراکتری[ABC]
یعنی هرچی اول کاراکترهای A یا B یا C رو داشت.[a-k]
هر چیزی از a تا k (تمام حروف بزرگ و کوچک را شامل می شود)[0-9a-z]
با تمام اعداد و حروف های مچ می شود[!x]
زمانی که ! میزاریم یعنی بجز این باشد.
command | meaning |
---|---|
rm * | تمام فایل ها را پاک می کند |
ls A*B | هر چیزی که با A شروع و با B تموم می شود |
cp ???.* /tmp | کپی کن هر چیز سه حرفی که بعدش یک . (نقطه) است در مسیر tmp |
rmdir [a-z]* | تمام دارکتوری هایی که از a تا z هست را پاک کن |
پیدا کردن فایل در لینوکس (Finding files)
دستور find
یک دستور پر استفاده در لینوکس دستور find است که برای پیدا کردن فایل مورد استفاده قرار می گیرد، اگر شما دستور find رو با سوئیچ name- استفاده کنید دقیقا فایل شما رو با حساسیت بر روی بزرگ و کوچک بودن اسم آن پیدا می کند ولی اگر می خواهید به بزرگ و کوچک بودن اسم توجه نکند از سوئیچ iname- استفاده می کنیم که در زیر ما تمام فایل هایی که با a تا j شروع می شود و بعدش هر چیزی بود را نمایش داده ایم:
$ find . -iname "[a-j]*"
./howcool.sort
./alldata
./mydir/howcool.sort
./mydir/newDir/insideNew
./howcool
همچنین می توانید با سوئچ f- بر اساس نوع سرچ کنید، برای مثال ما میخواهیم فقط دارکتوری هایی که داخلش my داره رو پیدا کنیم:
$ find . -type f -iname "*my*"
./myfiles
./mydata.noenter
./mydata
./mydir/hereisMYfile.txt
./touch/myfile
./mydata.tab
به صورت کلی سه type مهم داریم:
-type f
پیدا کن فایل ها را-type d
پیدا کن دارکتوری ها را-type l
پیدا کن لینک ها را
پیداکردن فایل بر اساس حجم در لینوکس
اگر بخواهیم بر اساس سایز پیدا کنیم به صورت زیر عمل می کنیم:
command | meanint |
---|---|
-size 100c | 100 کاراکتر یا 100 بایت باشد (c معادل b نیز می باشد) |
-size +100k | سایزش بیشتر از 100 کلیوبایت باشد |
-size -20M | سایزش کمتر از 20 مگابایت باشد |
-size +2G | سایزش بیشتر از 2 گیگابایت باشد |
برای نمونه تمام فایل هایی که اخرش tmp دارد و حجمش بیشتر از 1 مگ و کمتر از 100 مگ باشد:
find /var -iname '*tmp* -size +1M -size -100M
find . -size 0b
و find . -empty
یعنی تمام فایل هایی که سایز صفر دارند.
پیدا کردن فایل بر اساس زمان در لینوکس
به صورت کلی سه نوع زمان در لینوکس داریم:
- a یعنی (a time) آخرین زمانی که به فایل دسترسی پیدا شده (accessed)
- c یعنی (c time) زمانی که فایل تغییر کرده (changed) مثلا فایل را کپی کردن یا یوزرش عوض شده
- m یعنی (m time) زمانی که محتوای فایل تغییر کرده است (modified)
چند مورد از حالت هایی که از آن ها استفاده می شود:
switch | meanint |
---|---|
-atime -6 | یعنی کمتر از 6 روز * 24 ساعت به این فایل access شده یعنی شیش روز قبل |
-ctime +6 | یعنی فایل هایی که در بیشتر از 6 روز قبل تغییر کردن |
-mtime -6 | یعنی فایل هایی که در 6 روز قبل محتوای آن ها تغییر کرده است |
-mmin -90 | یعنی فایل هایی که در 90 دقیقه قبل محتوای آن ها تغییر کرده است |
-amin, -cmin | مانند mmin به دقیقه دو تایم a و c است |
تمام دستورات بالا زمان را از لحظه فعلی برای مثال 6 روز قبل حساب می کند ولی با سوئیچ daystart- زمان دقیقا 24 ساعت قبل حساب می شود.
خود دستور find دو سوئیچ زیر را نیز دارد:
switch | meanint |
---|---|
-ls | به صورت پیش فرض ls -dils می گیرد |
در موارد خاص محتوا را به صورت مرتب شده نمایش می دهد |
میتوان با گزینه exec- هر دستور دلخواهی را بر روی فایلهایی که دستور find پیدا کرده است، اجرا کنیم. عملیاتی که شما میتوانید بر روی فایلهای پیدا شده انجام دهید میتوانند اینها باشند:
- دستور rm برای پاک کردن
- دستور cp برای کپی کردن
- دستور mv برای تغییر نام یا جابه جایی
- دستور md5sum برای محاسبه الگوریتم md5sum
- دستور wc برای شمارش فایلها
- اجرای هر دستور دلخواه دیگر
- اجرای شل اسکریپتی که خودتان نوشتهاید.
برای مثال با دستور زیر تمام فایل هایی که خالی هستن را اول پیدا می کند و سپس پاک می کند:
find . -empty -exec rm '{}' \;
و یا دستور زیر تمام فایل هایی که با نقطه htm تمام می شود را پیدا می کند و سپس آن ها را به نقطه html تغییر میدهد:
find . -name "*.htm" -exec mv '{}' '{}l' \;
دستور file در لینوکس
دستور file یک دستور ساده است که به ما می گوید فایل مورد نظر چیست:
$ file mydata.tab
mydata.tab: ASCII text
$ file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=cb63ec0718f2022619814c04a5b6cd8a36752a83, stripped
$ file mydata.tab
mydata.tab: ASCII text
$ file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=cb63ec0718f2022619814c04a5b6cd8a36752a83, stripped
$ file -i mydir
mydir: inode/directory; charset=binary
فشرده سازی در لینوکس (Compressing files)
لینوکس و یونیکس شامل دستورات متنوعی برای فشرده سازی (Compress) و از فشرده خارج کردن (Extract) فایل ها می باشند. برای فشرده سازی فایل ها شما از دستورات gzip ،bzip2 و zip استفاده می کنید. برای باز کردن فایل ها نیز شما می توانید از gzip –d، bunzip2(bzip2 –d) ،unzip استفاده کنید.
فشرده سازی با gzip در لینوکس
Gzip حجم فایل ها را با استفاده از (Lempel-Ziv (LZ77 کد گذاری می کند. هر فایل توسط یک extension با نام .gz جایگزین می شود.
ما یک فایل زیرنویس داریم که میخواهیم gzip کنیم:
$ ls * -ltrh
-rw-r--r-- 1 jadi jadi 79K Dec 22 11:52 The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt
به راحتی با دستور زیر این کار را می کنیم:
$ gzip The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt
$ ls * -ltrh
-rw-r--r-- 1 jadi jadi 30K Dec 22 11:52 The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt.gz
حال برای حارج کردن فایل gzip از حالت فشرده از دستور gunzip
استفاده می کنیم:
$ gunzip The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt.gz
$ ls * -ltrh
-rw-r--r-- 1 jadi jadi 79K Dec 22 11:52 The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt
- gzip تایم را نگه میدارد
- gzip اسم فایل اصلی را نگه میدارد ولی خود فایل اصلی را پاک می کند
نرم افزار Bzip2 ، فایل ها را با استفاده از الگوریتم burrows-wheeler (که در حقیقت الگوریتم فشرده سازی و مرتب سازی بلاک می باشد) و همچنین کدینگ هافمن (Huffman coding) فشرده می کند. فشرده سازی به طور کلی به طور قابل توجهی بهتر از bzip که بر پایه LZ77/LZ78 است کار می کند. هر فایل با پسوند .bz2 فشرده می شود.
دقیقا مثل قبل عمل میکنیم ولی با دستور bzip2:
$ ls * -ltrh
-rw-r--r-- 1 jadi jadi 79K Dec 22 11:52 The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt
$ bzip2 The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt
حال یک فایل فشرده شده داریم:
$ ls * -ltrh
-rw-r--r-- 1 jadi jadi 22K Dec 22 11:52 The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt.bz2
با دستور زیر هم از حالت فشرده خارجش میکنیم:
$ bunzip2 The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt.bz2
$ ls * -ltrh
-rw-r--r-- 1 jadi jadi 79K Dec 22 11:52 The.Equalizer.2014.1080p.BluRay.x264.anoXmous_eng.srt
آرشیو کردن فایل در لینوکس (Archiving files)
از آنجایی که دستورات gzip و bzip2 قادر نیستند شاخه ها و یا چندین فایل را همزمان فشرده سازند بنابراین برای فشرده سازی چندین فایل باید ابتدا آنها را آرشیو و سپس فشرده کنیم. همچنین جهت تهیه پشتیبان از فایل های مختلف می توان از فرامین مربوط به آرشیوگیری فایل ها استفاده کرد. از جمله ابزارهای مرسوم فشرده سازی فرمان tar است که شکل کلی آن به صورت زیر است:
tar [option] file_name or Directory
فایل هایی که با این دستور آرشیو می شوند دارای پسوند .tar هستند.
برخی از پرکاربردترین سوئیچ های این دستور در زیر آورده شده اند:
- -c : یک فایل آرشیو می سازد.
- -x : فایل را از حالت آرشیو خارج می سازد.
- -u : فایل آرشیو را به روز رسانی می کند.
- -t : محتویات فایل آرشیو را لیست می کند.
- -z : فایل آرشیو را با فرمت .gz فشرده می سازد.
- -j : فایل آرشیو را با فرمت .bz2 فشرده می سازد.
همانطور که مشاهده می کنید می توان در حین آرشیوگیری از شاخه ها و فایل های مختلف اقدام به فشرده سازی آنها نیز کرد. به طور مثال جهت آرشیوگیری و فشرده سازی از محتویات شاخه ای مانند /etc به صورت زیرعمل می کنیم:
$ tar cvfz etc_archive.tar.gz
خروجی فرمان فوق فایل etc_archive.tar.gz است.
switch | meanint |
---|---|
-cf myarchive.tar | ساخت فایل با اسم myarchive.tar |
-xf myarchive.tar | extract کردن فایل myarchive.tar |
-z | بعد از آرشیو کردن با gzip فشرده هم میکند |
-b | بعد از آرشیو کردن با bzip2 فشرده هم میکند |
-v | یعنی verbose به معنیه این که تمام اتفاقات را می نویسد |
-r | برای appeng کردن یا اضافه کردن یک فایل جدید به یک فایل از قبل آرشیو شده استفاده می شود |
فرمان زیر نیز عملکردی مانند دستور ذکر شده دارد که خروجی آرشیو شده چند فایل را به عنوان ورودی به فرمان gzip می دهد.
$ tar cvf fill1,fill2,…. | gzip -9 > total.tar.gz
استخراج کردن فایل های آرشیو شده
سوئیچی که در فرمان tar از آن جهت استخراج فایل های آرشیو شده استفاده می شود، -x یا همان –extarct است. از سوئیچ های z و j نیز به شکل همزمان می توان جهت خارج کردن آرشیوها از حالت فشرده نیز استفاده کرد.
$ tar xvfz total.tar.gz
یکی دیگر از ابزارهای پشتیبان گیری در توزیع های مختلف گنو/ لینوکسی cpio است که مرسوم ترین شکل استفاده آن جهت آرشیو گیری و استخراج آرشیوها به شکل زیر هستند:
$ find /directory name | cpio -o archive name.cpio
$ cpio -idvB < archive_name.cpio
و یا به صورت زیر:
find . -name "*" | cpio -o > myarchivefind.cpio
برای decompress کردن نیز از دستور زیر استفاده می کنیم:
mkdir extract
mv myarchivefind.cpio extract
cd extract
cpio -id < myarchivefind.cpio
دستور dd در لینوکس
عملا مثل دستور cp برای کپی می باشد ولی با قدرتی بیشتر:
$ dd if=howcool of=newcool
0+1 records in
0+1 records out
30 bytes (30 B) copied, 0.0227904 s, 1.3 kB/s
در مثال بالا ما گفتیم ورودی (if) فایل howcool است و آن را بریز بر روی خروجی که (of) فایل newcool است، در عمل مثل cp بود ولی کاربرد های بیشتر دارد. با این ابزار می توانید فایل بک آپ درست کنید و یا یک USB قابل بوت بسازید.
برای مثال ما ایمیج ubuntu را بر روی یک USB با بلاک های 4096 رایت کردیم:
# dd if=ubuntu.iso of=/dev/sdb bs=4096
و یا می توانید کل هارد sda
را بک آپ بگیرید:
# dd if=/dev/sda of=backup.dd bs=4096
و یا فایل بک آپ را فشرده هم بکنید:
# dd if=/dev/sda | gzip >backup.dd.gzip
برای ریست کردن بک آپ هم برعکس روش اول را انجام می دهیم:
# dd if=backup.dd of=/dev/sda bs=4096