آموزش Linux Essentials - قسمت هفتم
شنبه, ۱۵ خرداد ۱۳۹۵، ۰۹:۳۹ ق.ظ
در این قسمت برخی از عملیات مهم مربوط به فایل و پوشه را به شما یاد خواهم داد.
نام فایلها در لینوکس
شما میتوانید از هر کاراکتری که میخواهید استفاده کنید. اما برخی از کاراکتر ها غیر مجازند چون در سیستم عامل معنای خاصی دارند. دو کارکتر کاملاً غیر مجاز، / و بایت صفر (کاراکتری که در کد اسکی مقدار ۰ را دارد یا همان نول) هستند. شما میتوانید از فاصله و نقطه و … نیز استفاده کنید. اما دقت کنید که این کار توصیه نمیشود چون مشکلاتی در زمینه ی قابلیت انتقال دارد (Portability). برای مثال در ویندوز \ یک کاراکتر غیر مجاز است در حالی که در لینوکس اینگونه نیست.
طول نام فایل بستگی به سیستم فایل پارتیشنی دارد که فایل در آن ذخیره شده، اما میتوانید آنرا ۲۵۵ کاراکتر در نظر بگیرید چون برخی سیستم فایلها مانند NTFS بیش از این مقدار را پشتیبانی نمیکنند.
تفاوت مهم دیگر هم این است که برخلاف ویندوز که نوع فایل را از پسوند فایل تشخیص میدهد، لینوکس اصلاً به پسوند توجهی نمیکند. درواقع اگر فایل متنی به نام textFile داشته باشید، برای لینوکس فرقی نمیکند که آنرا به نام textFile ذخیره کنید یا textFile.txt ، اکثر افراد ترجیح میدهند برای فایلهای متنی معمولی پسوندی انتخاب نکنند.
در لینوکس نام فایلهای مخفی با . شروع میشود. یعنی برای مخفی کردن فایل کافیست ابتدای نام آن یک . قرار دهید تا مخفی شود. و همچنین اندروید.
همانگونه که گفتیم برای اینکه در قابلیت انتقال مشکلی پیش نیاید بهتر است از کاراکتر های خاص استفاده نکنید. برای همین یک لیست از کاراکتر ها تعریف شده که اگر از آنها استفاده کنید میتوانید مطمئن باشید که نام فایل در همه ی سیستم عامل ها مورد قبول خواهد بود.
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789+-._
به چند مثال توجه کنید و سپس به کار با پوشه ها میپردازیم.
نام های زیر برای فایلها کاملاً مجازند:
X-files foo.txt.bak 50.something 7_of_9
1: -10°F 2: .profile 3: 3/4-metre 4: Smörrebröd
در لینوکس دایرکتوری ها همان فایلها هستند، گرچه شما نمیتوانید تمامی عملیاتی را که روی فایلهای معمولی انجام میدادید روی دایرکتوری ها انجام دهید. بنابراین، نام دیرکتوری ها از همان قوانین مربوط به نام فایلها تبعیت میکند. هر ایرکتوری میتواند شامل دایرکتوری های دیگر باشد و بدین ترتیب یک ساختار درختی تشکیل میشود. در لینوکس، دایرکتوری که بالاترین سطح را دارد / نام دارد و دایرکتوری ریشه (root) نام دارد. البته توجه داشته باشید که این root هیچ ربطی با کاربر root ندارد.
مسیر مطلق و مسیر نسبی
هر فایل با اسمی مشخص میشود که با یک / شروع میشود و با عنوان کردن تمام دایرکتوری ها به آن فایل میرسد. برای مثال، اگر فایل stdlib.h در پوشه یinclude، پوشه ی include در پوشه ی usr و پوشه ی usr در دایرکتوری ریشه (/) قرار داشته باشد، این فایل اینگونه مشخص میشود:
/usr/include/stdlib.h
یک مسیر نسبی، همانگونه که از اسمش مشخص است، بر اساس دایرکتوری فعلی مشخص میشود. برای مثال اگر هماکنون در پوشه ی lib باشیم و بخواهیم فایل fstab در پوشه ی init را مشخص کنیم:
init/fstab
. به معنای پوشه ی فعلی و .. به معنی پوشه ی والد پوشه ی فعلی است. اکنون چند مثال میزنیم تا این موضوع روشنتر شود.
فرض کنیم فایل test به این صورت در هارد موجود باشد:
مسیر مطلق آن به این صورت است:
/home/ali_rnt/Documents/test
cd /home/ali_rnt
Documents/test
cd Documents
cd ..
سؤال به جایی است چون به نظر کار احمقانهای میآید که بخواهیم به دایرکتوری که هماکنون در آن هستیم اشاره کنیم. اما این میانبر کاربرد های زیادی دارد. بسیاری از کاربرد های آن فراتر از سطح این آموزش اند اما یکی از آنها را مورد بررسی قرار میدهیم:
همانطور که گفته شد فرمانهای خارجی همان برنامههای اجرایی هستند. مانند nano. وقتی شما در ترمینال عبارت nano را مینویسید و اینتر را میزنید، شل، از آنجا که میداند این دستور داخلی نیست، در PATH جستجو میکند تا آنرا بیابد. خب، فرض کنید یک فایل اجرایی به نام prog داریم که در پوشه ی /home/ali_rnt قرار دارد. میخواهیم آنرا اجرا کنیم. اول به این دایرکتوری تغییر مسیر میدهیم:
cd /home/ali_rnt
./prog
/home/ali_rnt/prog
قرار بود که دستور cd را اینجا یاد بگیرید اما به دلایلی مجبور شدم که کمی قبل آنرا مطرح کنم. فهمیدید که این دستور دایرکتوری فعلی را به دایرکتوری داده شده تغییر میدهد.
اگر خواستید بدانید که هماکنون در چه مسیری هستید، از دستور pwd استفاده کنید. (Print Working Directory)
لیست کردن فایلها و دایرکتوری ها – ls
در محیط گرافیکی با وارد شدن به یک پوشه محتوای آنرا میبینید، اما در شل، وقتی به یک دایرکتوری تغییر مسیر میدهید محتویات آنرا برای شما نمایش نمیدهد، تا وقتی که از شل بخواهید. برای اینکار از ls استفاده میکنیم. سادهترین شکل استفاده از این فرمان، یعنی نوشتن آن بدون هیچ آرگومان و پارامتری، فقط نام فایلها را لیست میکند. جدول زیر برخی از مهمترین آپشن های این دستور را نشان میدهد:
گزینه (آپشن) |
نتیجه |
-a ( --all) |
فایلهای مخفی نیز لیست میشوند. |
-i (--inode) |
شماره ی منحصر به فرد هر فایل (inode number) را نیز نشان میدهد. |
-l (--format=long) |
اطلاعات کامل تری را نمایش میدهد |
-o (--no-color) |
خروجی به صورت رنگی نمایش داده نمیشود. |
-r (--reverse) |
ترتیب نمایش را برعکس میکند. |
-R (--recursive) |
محتویات دایرکتوری های فرعی (زیر پوشه ها) را نیز نمایش میدهد. |
-S (--sort=size) |
فایلها بر اساس اندازه مرتب میشوند. (از حجیم ترین به کم حجم ترین) |
-t (--sort=time) |
فایلها بر اساس زمان ایجاد مرتب میشوند (از جدید به قدیمی) |
-X (--sort=extension) |
فایلها بر اساس نوعشان مرتب میشوند. |
ایجاد و حذف دایرکتوری ها
برای ایجاد یک دایرکتوری از دستور mkdir استفاده میکنیم و نام دایرکتوری را به عنوان آرگومان به آن میدهیم. مثلاً دستور زیر:
$ mkdir Programs
$ mkdir Documents/testDir
$ mkdir new $ mkdir new/dir
$ mkdir -p new/dir
$ rmdir new
بعضی وقتها نیاز داریم تا دستوری را برای فایلهای خاصی به کار ببریم. مثلاً همه ی فایلهایی که با حرف p شروع میشوند حذف کنیم. یکی از راههای انجام اینکار کاراکتر * است. به جای این کاراکتر هررشته ای از حروف میتواند بنشیند. برای مثال، اگر فایلهای زیر را داشته باشیم:
prog1/p.c prog1/pop.c prog1/push.c prog1/main.c
$ echo prog1/p*
میبینید که فایل main.c نمایش داده نمیشود. البته دقت داشته باشید که فایلهای مخفی نادیده گرفته میشوند.
کاراکتر دیگر ؟ است. برخلاف ستاره که به جای آن یک رشته میتواند بنشیند، به جای علامت سؤال فقط یک کاراکتر میتواند بنشیند. همان مثال قبل:
در قسمت بعدی آموزش به ادامه ی بحث عملیات مربوط به فایلها میپردازیم.
- ۹۵/۰۳/۱۵
- ۳۹۲ نمایش