در این مطلب که بیشتر برای ارجاع خودم در آینده آماده شده شیوهی مدیریت فایلها در ترمینال را تشریح میکنم.
چرا باید از ترمینال بریم سراغ فایلها؟
به دلایل مختلفی ممکنه بخوایم از ترمینال به مدیریت فایلها بپردازیم
- گاهی اوقات فایل منیجر در دسترس نیست؛ مثلا وقتی با SSH به یه دسکتاپ یا سرور وصل میشیم یا وقتی برنامه فایل منیجر رو دسکتاپ نداریم یا اینکه مشکلی داره!
- اجرای بعضی دستورات در فایل منیجر ممکن نیست یا گاهی وقتگیره (مثلا دریافت لیست کامل محتویات دایرکتوری و سابدایرکتوریها یا جستجو در فایلها)
توضیحات این صفحه به هیچ عنوان کامل نیست :) من فقط نکاتی که به نظرم کاربردی بودن رو اینجا گفتم.
۱- نمایش فهرست فایلها و دایرکتوریها در ترمینال
قاعدتا اولین دستور ls
هست برای فهرست کردن فایلهای موجود. برای نمایش توضیحات این دستور، ls --help
رو وارد میکنیم اما آرگیومنتهای پرکاربرد اینها هستن:
آرگیومنت | توضیحات |
-l |
نمایش هر فایل در یک خط با توضیحات اضافه شامل نوع فایل، دسترسیها، اندازه فایلها و زمان آخرین ویرایش |
-F |
نمایش / در انتهای نام دایرکتوریها |
-S |
مرتب سازی بر اساس اندازه فایل از بزرگترین به کوچکترین |
-r |
برعکس کردن ترتیب فایلها |
-lh |
نمایش سایز فایلها در فرمت قابل خوانش (مگابایت، گیگابایت و...) |
-a |
نمایش فایلها و دایرکتوریهای مخفی (که نامشان با . شروع میشود) |
-R |
نمایش فایلهای موجود در سابدایرکتوریها |
معمولا دستور زیر یه خروجی مناسب و کاربردی بهم میده:
ls -lha
اما بر فرض محال، در شرایط خاص اگه عجله داشته باشم و بخوام یه لیست کامل از تمام محتویات یه دایرکتوری خاص دربیارم این دستور رو اجرا میکنم:
ls -lharFRS > ~/list.txt
۲- تغییر دایرکتوری در ترمینال
برای تغییر دایرکتوری از cd استفاده میکنیم :) توضیحات خاصی نداره!
-
cd
به تنهایی ما رو به user home directory منتقل میکنه -
cd ~
هم باز ما رو به user home directory هدایت میکنه اما اگه بعد از ~ یه یوزرنیم وارد کنیم به home directory مربوط به همون کاربر منتقل میشیم -
cd -
ما رو به آخرین دایرکتوری برمیگردونه! مثلا اگه در/home/usr/Downloads
باشیم بعد دستورcd ~/Music
رو بزنیم به/home/usr/Music
منتقل میشیم و حالا باcd -
به/home/usr/Downloads
برمیگردیم.
۳- جستجو در فایلها در ترمینال
در استفاده از این دستور مراقب باشید، مثلا find ~ -delete
میتونه همهی فایلهای شخصی رو حذف کنه!
کلیت دستور find به این شکله:
find [options] [path] [expression]
که در options
تعریف میکنیم چه رفتاری با پیوندهای نمادین (symbolic links) داشته باشه؟ بعد در path
تعریف میکنیم که جستجو رو باید از کجا شروع کنه؟ و نهایتا در expression
تعریف میکنیم که دنبال چه چیزی بگرده و باهاش چه کار کنه؟
البته این کلیت دستور هست و این بخشها الزامی نیستند، حالا توضیحات تفصیلیتر:
در بخش options
در این بخش رفتار مطلوب در مقابل symbolic links رو تعریف میکنیم.
-P |
حالت پیشفرض: پیوندهای نمادین را دنبال نکرده و اطلاعات مربوط به خودِ پیوند مرجع میشود. |
-L |
همواره پیوند نمادین را دنبال کرده و همچنین اطلاعات مربوط به مقصد پیوند مورد ارجاع قرار گیرد. |
-H |
پیوند نمادین را دنبال نمیکند اما برای دستورات CLI، اطلاعات مقصد پیوند مرجع خواهند بود. |
-D |
چاپ موارد مربوط به دیباگ برنامهی find |
در بخش expression
عمده دستکاریهای ما در این بخش هستند! اینجا تعریف میکنیم دنبال چه فایلی میگردیم یا چه بلایی میخوایم سرش بیاریم :)
نکته: هر کجا از عدد در دستور استفاده کنیم میتونیم +
یا -
قبل از عدد بیاریم که به معنای بیشتر یا کمتر از اون عدد خواهد بود.
جستجو بر اساس نام یا پسوند فایل در ترمینال
|
جستجو بر اساس نام یا پسوند با حساسیت به حروف کوچک و بزرگ |
|
جستجو بر اساس نام یا پسوند بدون حساسیت به حروف کوچک و بزرگ |
find ~ -name name.txt find ~ -iname name.txt find ./ -name "*name*" find ./ -iname "*name*" find ./ -name "*.ext" find ./ -iname "*.ext"
جستجو بر اساس سایز فایل در ترمینال
|
جستجو بر اساس سایز |
ما میتونیم برای سایز واحد تعریف کنیم: c
برای بایت؛ k
برای کیلوبایت؛ M
برای مگابایت و G
برای گیگابایت.
تمام فایلهایی که دقیقا ۱ گیگابایت حجم دارند | find -type f -size 1G |
فایلهایی با پسوند txt که بیش از ۵۰ کیلوبایت حجم دارند |
find -type f -name '*.txt' -size +50k |
فایلهایی با حجم بین ۵ تا ۱۵ مگابایت در دانلودها | find ~/Downloads -type f -size +5M -size -15M |
جستجو و حذف فایلها و دایرکتوریها در ترمینال
|
حذف فایلهای یافت شده! |
دقت کنید که چون find
از چپ به راست اجرا میشه -delete
رو همیشه در انتها قرار بدین.
حذف فایلها و دایرکتوریهای خالی | find ~ -empty -delete |
حذف تمام فایلها در پوشه دانلودها و نه سابدایرکتوریها | find ~/Downloads -type f -maxdepth 0 -delete |
حذف هر فایلی با نام test.txt در دانلودها و سابدایرکتوریها | find ~/Downloads name test.txt -delete |
جستجوی فایل و اجرای دستور در ترمینال
ما میتونیم از find بخوایم هر دستوری (خارج از تعریفات خود برنامه) روی فایلهای یافت شده اجرا کنه:
-exec command {} \; |
اجرای command روی فایلها و دایرکتوریهای یافت شده بدون کسب اجازه |
-ok command {} \; |
اجرای command روی فایلها و دایرکتوریهای یافت شده با کسب اجازه |
پیشنهاد میکنم همیشه قبل از اجرای هر دستوری روی فایلها اول یه بار دستور ls رو اجرا کنید تا لیستی از فایلهایی که قراره تغییر کنن ببینید و احتمال اشتباه کمتر بشه:
find -exec ls {} \;
چند مثال تکمیلی:
تغییر مجوز دسترسی به تمام فایلهای .php
در دایرکتوری /var/www
و سابدایرکتوریها:
find /var/www -iname '*.php' -exec chmod 664 {} \;
جابجا کردن تمام فایلهای .PDF
از دایرکتوری دانلودها (و نه سابدایرکتوریها) به /home/PDFs
:
find ~/Downloads -iname '*.pdf' -exec mv {} /home/PDFs/ \;
حذف فایلهای خالی با دستور rm
:
find ~ -type f -empty -ok rm {} \;
حذف فایلهای با حجم بالاتر از ۲ گیگابایت با کسب اجازه:
find ~ -type f -size +2G -ok rm{} \;
یافتن تمام فایلها به جز فایلهای .png در دانلودها و ذخیره سازی نتیجه در یک فایل txt:
find ~/Downloads -type f -not -iname '*.png' > ~/myfile.txt find ~/Downloads -type f -not -iname '*.png' -fls ~/myfile.txt
۴- باز کردن فایل از ترمینال
برای باز کردن یک فایل خاص در ترمینال از دستور xdg-open
استفاده میکنیم؛ این دستور فایل رو با برنامه پیشفرض باز میکنه، در صورتی که برنامه پیشفرض تعریف نشده باشه ارور میده و در صورتی که به جای آدرس فایل، آدرس وبسایت وارد کنیم، اونو با مرورگر پیشفرض باز میکنه.
xdg-open '~/Downloads/file.txt' => text editor xdg-open 'https://matinu.ir' => Browser