قسمت هشتم آموزش لینوکس - File Commands
by amin Ghorbani
مدیریت فایلها
یکی از چیزایی که موقع کار با سیستم های لینوکسی زیاد بهش بر میخوریم کار با فایل هاست.
wildcards
اول از همه قبل از اینکه یادبگیریم چجوری در Terminal فایل های سیستم رو مدیریت کنیم چند تا wildcard رو در لینوکس خوبه یاد بگیریم:
*: معنیش همه رشته هاست مثلا*aمعنیش همه رشته هایی است که با a شروع میشه?: معنیش اینه هر کاراکتری ، خب فرقش با بالایی چیه اینجا هر ? فقط یه کاراکتره یعن ?a معنیش میشه تمام رشته های دو حرفی که a شروع میشن.[abc]: معنیش میشه یا a یا b یا c[a-k]: معنیش میشه حروف بین دو کاراکتر a و k یعنی a,b,c,d,e,f,g,h,i,j[!x]: معنیش میشه هرچیزی جز x
دستور ls
- دستور زیر همه فایل ها را لیست میکند :
ls * - میتوانیم از wildcard ها استفاده کنیم و ترکیب های مختلف بسازیم مثلا:
ls a???
یعنی تمام فایل های 4 کاراکتری که با a شروع میشن رو برام لیست کن.
- .. به معنی یک پوشه عقب تر است فرض کنید ما در مسیر /var/log/journal/ هستیم برای ls گرفتن از / میتوانیم یکی از دو دستور زیر را بزنیم:
ls /
ls ../../..
- اگر بخواهیم به صورت recursive لیست فایل ها را بدست آوریم از سوییچ R- استفاده میکنیم
ls -R
- برای اینکه جزییات بیشتری رو ببینیم
ls -l - سوییچی که معمولا به کار میره lthr- که در آن l به معنای long که جزییات بیشتری میدهد، t براساس time فایل ها را sort میکند، h یعنی human readable خروجی بده و در نهایت r یعنی آنچه sort کردی رو برعکس کن یعنی از بالا به پایین ، قدیمی ترین فایل ها به سمت جدیدترین فایل ها را نشان بده
ls -lthr
دستورات جابهجایی
- دستور cp : دستور کپی کردن فایل است.
- دستور mv: فایل را move میکند معادل همان cut کردن است.
- دستور rm: دستور پاک کردن فایل است.
cp /tmp/file ..
mv /tmp/file /tmp/file2
rm log*
دستور touch
دستور touch به منظور ایجاد یک فایل به کار میرود یعنی شما با دستور زیر یک فایل خالی با نام note را میسازید.
touch note
اما اگر فایل با نام note وجود داشته باشد چی؟ اون وقت زمان ایجاد را تغییر میدهد و زمان الان را برایش set میکند
همچنین با سوییچ های مختلف میتوانید زمان مورد نظر خود را روی فایل set کنید
touch -d "5 nov" note

[!Warning] نکته امنیتی شما میدانید که گاهی مهاجمین برای اینکه شما نتوانید زمان دقیق ایجاد فایلهایشان را تشخیص دهید و یا زمان فایل ایجاد شده را با فایل های کناریش یکسان کند از این دستور استفاده میکند
دستور file
دستور file میتواند file type دقیقا به ما بدهد این دستور برای تشخیص و تمییز انواع فایل از txt، binary,…. است.

دستور dd
دستور dd یکی از ابزارهای قدرتمند و خطرناک لینوکس است که برای کپی، تبدیل و نوشتن دادهها در سطح بایت استفاده میشود
dd if=<input_file> of=<output_file> [options]
sudo dd if=/dev/sda of=/dev/sdb bs=4M status=progress
دستور بالا محتوای کامل دیسک /dev/sda را روی /dev/sdb کپی میکند.
منظور از bs طول بلوک هایی است که کپی میشود.
خب حالا فرض کنید من بخواهم یه سیستم را از wipe کنم:
sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress
در اینجا تمام پارتیشن sdb به صورت غیر قابل بازگشت wipe میشود.
[!warning] چرا میگیم غیر قابل بازگشت دیسکها داده را بهصورت بیتها (۰ و ۱) در سکتورهایی ذخیره میکنند.
وقتی فایلی را حذف میکنی، سیستمعامل معمولاً فقط آدرس آن فایل در جدول فایلها (File Table) را پاک میکند — نه خود داده را! ولی با dd داریم در سکتورهای هارد zero مینویسیم یعنی فایل هست اما محتوا NULL شده است.
دستور find
دستور find برای پیدا کردن فایل ها به کار میرود دستور زیر را در نظر بگیرید همه فایل ها را فارغ از اینکه hidden هستند یا خیر برای ما پیدا و لیست میکند (به صورت recursive از مسیری که هستیم داخل تک تک پوشه ها میرود)
find .
میتوانیم اینجا فیلترهایی بنویسیم مثلا فرض کنید قصد داریم فایل هایی پیدا کنیم که در اسم آن ها با log تمام میشود.
find . -iname "*log"
سوییچ دیگری که در این دستور به کار میرود type است فرض کنید من قصد دارم تمام symbolic linkها را پیدا کنم
find . -type l
و اما یه سوییچ خیلی خوبه دیگه ای که برای این دستور هست سوییچ ls هست که خروجی رو به صورت ls نشون میده :
find . -type l -ls

فشرده سازی فایل ها
دستور gz
دستورات مختلفی برای فشرده سازی فایل ها در لینوکس وجود دارد که ما اینجا میخواهیم درباره gzip صحبت کنیم. این دستور خیلی ساده است برای اینکه یه فایل را فشرده کنید کافیه دستور زیر را بزنید
gzip filename
پسوند این فایل ها gz. است. نکته مهم این است که این دستور فایل جدید نمیسازد و همان فایل قبلی را فشرده میکند و دیگر خود فایل وجود ندارد.
برای اینکه فایل را از حالت فشرده خارج کنیم از دستور gunzip استفاده میکنیم.
gunzip filename.gz
دستور tar
مشکل تا اینجا کجاست؟ این ها برای یه فایل بود فکر کنید میخواهیم دوتا فایل file1 و file2 را فشرده کنیم
tar cf myfile.tar file1 file2
اینجا cf به معنی create file است یعنی فایل جدیدی ساخته میشود به نام myfile.tar حالا داخلش چی هست file1 و file2
خب حالا برای extract کردن فایل هم از دستور زیر استفاده میکنیم
tar xf myfile.tar
میتونستیم به جای cf از cfz استفاده کنیم یعنی فایل ها رو با gzip فشرده هم بکن
tar cfz myfile.tar.gz file1 file2
دستور cpio
| این دستور فشرده سازی لیست فایل ها را با | (pipe) دریافت میکنه اما به شکل عجیبی خروجی رو در فایل نمینویسه و فقط print میکنه برای اینکه فایل فشرده رو بسازیم از < استفاده میکنیم. سوییچ o در این دستور به معنی فشرده سازی است |
ls | cpio -o > file.cpio
حالا اگر بخواهیم از فشرده بودن خارج کنیم
cpio -id < file.cpio
سوییچ i ، به معنی extract و d به معنی ساخت پوشه هاست در صورت وجود.
tags: linux - dd - find - gzip - tar