LPIC-1Linux

آموزش Lpic 1 لینوکس : مدیریت مقدماتی فایل ها در لینوکس file management

مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)

در این پست از سایت نکست ادمین که به آموزش دوره Lpic1 لینوکس مشغول هستیم قرار است مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management) را توضیح دهیم که در ادامه با دستوراتی برای جا به جایی فایل، حذف فایل، تغییر نام فایل، فشرده کردن و خارج کردن از حالت فشرده و کلی موضوع جذاب دیگه بپردازیم.

آموزش مدیریت مقدماتی فایل ها در لینوکس

دستور ls لینوکس برای لیست کردن فایل ها

نحوه ی استفاده از دستور ls | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)
نحوه ی استفاده از دستور ls | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)

دستور 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 برای کپی فایل ها و پوشه ها | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)
دستور cp برای کپی فایل ها و پوشه ها | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)

کپی کردن فایل در سیستم عامل ها یکی از معمولترین کارها می باشد که در محیط ترمینال لینوکس با دستور 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
-b (--backup) will make backups of overwritten files | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)
-b (–backup) will make backups of overwritten files | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)

سوئیچ 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 فقط آدرس مسیر عوض می شود پس در لحظه عمل می کند.

ساختار ابتدایی inode | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)
آی‌نود (inode) به ساختمان داده‌هایی گفته می‌شود که در سیستم‌فایل‌های شبیه به یونیکس مانند UFS استفاده می‌شود. یک inode اطلاعات پایه‌ای در مورد فایل‌ها، دایرکتوری‌ها و دیگر اشیاء موجود در فایل‌سیستم را در خود نگهداری می‌کند. یکی از قسمتهای مهم در سیستم‌فایل ساختمان‌های داده‌ای است که حاوی اطلاعاتی در مورد فایل‌ها هستند. هر فایل توسط یک inode شناسایی و قابل دسترس می‌شود. بطور پایه‌ای inode‌ها شامل اطلاعاتی در مورد فایل‌ها و دایرکتوری‌ها هستند. اطلاعاتی مانند مالکیت فایل (کاربر و گروهی که فایل متعلق به آن است)، شیوهٔ دسترسی (مجوزهای خواندن، نوشتن و اجرا) و نوع فایل. در اکثر سیستم‌فایل‌ها تعداد inode‌ها به تعداد مشخص و ثابتی در هنگام ایجاد آن فایل‌سیستم مشخص می‌شود که نشانگر تعداد فایل‌هایی است که آن سیستم‌فایل میتواند در خود نگه‌داری کند. مقدار فضای معمول برای نگه‌داری این inode‌ها در سیستم‌فایل چیزی در حدود ۱ درصد از کل فضای دیسک است. هستهٔ سیستم‌عامل توسط اطلاعات موجود در inode می‌تواند به محتویات اصلی یک فایل دسترسی پیدا کند. شمارهٔ inode هر فایل را می‌توان توسط دستور ls -i مشاهده کرد. دستور ls -l نیز بعضی از اطلاعات موجود در inode هر فایلی را نمایش می‌دهد. | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)

دستور 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/
حذف دایرکتوری | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)
حذف دایرکتوری | آموزش لینوکس: مدیریت مقدماتی فایل ها در لینوکس (Perform basic file management)

نکته ای که وجود دارد در لینوکس بیشتر دستوراتی که 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 یعنی تمام فایل هایی که سایز صفر دارند.

پیدا کردن فایل بر اساس زمان در لینوکس

به صورت کلی سه نوع زمان در لینوکس داریم:

  1. a یعنی (a time) آخرین زمانی که به فایل دسترسی پیدا شده (accessed)
  2. c یعنی (c time) زمانی که فایل تغییر کرده (changed) مثلا فایل را کپی کردن یا یوزرش عوض شده
  3. 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 می گیرد
-print در موارد خاص محتوا را به صورت مرتب شده نمایش می دهد

میتوان با گزینه exec- هر دستور دلخواهی را بر روی فایلهایی که دستور find پیدا کرده است، اجرا کنیم. عملیاتی که شما میتوانید بر روی فایلهای پیدا شده انجام دهید میتوانند این‌ها باشند:

  1. دستور rm برای پاک کردن
  2. دستور cp برای کپی کردن
  3. دستور mv برای تغییر نام یا جابه جایی
  4. دستور md5sum برای محاسبه الگوریتم md5sum
  5. دستور wc برای شمارش فایلها
  6. اجرای هر دستور دلخواه دیگر
  7. اجرای شل اسکریپتی که خودتان نوشته‌اید.

برای مثال با دستور زیر تمام فایل هایی که خالی هستن را اول پیدا می کند و سپس پاک می کند:

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



Shares:

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *