کدنگار

وبلاگ شخصی-آموزشی علی رشیدی

کدنگار

وبلاگ شخصی-آموزشی علی رشیدی

طبقه بندی موضوعی
پیوندهای روزانه
پیوندها

آموزش 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
چنین نامی که با / آغاز میشود، مسیر مطلق یا Absolute path نامیده میشود.
یک مسیر نسبی، همانگونه که از اسمش مشخص است، بر اساس دایرکتوری فعلی مشخص میشود. برای مثال اگر هم‌اکنون در پوشه ی lib باشیم و بخواهیم فایل fstab در پوشه ی init را مشخص کنیم:

init/fstab
نکته‌ای دیگر، وجود دو میانبر خاص است که در تمام دایرکتوری ها وجود دارند (البته / استثناء است). این دو میانبر . و .. هستند.
. به معنای پوشه ی فعلی و .. به معنی پوشه ی والد پوشه ی فعلی است. اکنون چند مثال میزنیم تا این موضوع روشن‌تر شود.
فرض کنیم فایل test به این صورت در هارد موجود باشد:



مسیر مطلق آن به این صورت است:

/home/ali_rnt/Documents/test
اگر اکنون ترمینال را باز کنیم و با دستور زیر به پوشه ی ali_rnt تغییر مسیر دهیم:

cd /home/ali_rnt
مسیر نسبی آن به این‌گونه است:

Documents/test
حالا به پوشه ی Documents تغییر مسیر میدهیم:

cd Documents
اما اگر بخواهیم به پوشه ی قبلی (Ali_rnt) برگردیم چه کنیم؟ همانگونه که گفته شد در هر دایرکتوری دو میانبر وجود دارند که یکی از آن‌ها .. است. چون دایرکتوری ali_rnt دایرکتوری والد Documents است (دایرکتوری Documents در ali_rnt قرار دارد) پس به راحتی مینویسیم:

cd ..
سؤالی که ممکن است پیش بیاید این است: پس میانبر . به چه درد میخورد؟
سؤال به جایی است چون به نظر کار احمقانه‌ای می‌آید که بخواهیم به دایرکتوری که هم‌اکنون در آن هستیم اشاره کنیم. اما این میانبر کاربرد های زیادی دارد. بسیاری از کاربرد های آن فراتر از سطح این آموزش اند اما یکی از آن‌ها را مورد بررسی قرار میدهیم:
همانطور که گفته شد فرمان‌های خارجی همان برنامه‌های اجرایی هستند. مانند nano. وقتی شما در ترمینال عبارت nano را مینویسید و اینتر را میزنید، شل، از آنجا که میداند این دستور داخلی نیست، در PATH جستجو میکند تا آنرا بیابد. خب، فرض کنید یک فایل اجرایی به نام prog داریم که در پوشه ی /home/ali_rnt قرار دارد. میخواهیم آنرا اجرا کنیم. اول به این دایرکتوری تغییر مسیر میدهیم:

cd /home/ali_rnt
خب، اولین ایده ای که به ذهنمان میرسد، این است که نام برنامه را تایپ کنیم. اما با تعجب میبینیم که با نوشتن prog و فشردن اینتر، شل به ما میگوید که این برنامه یافت نشد! علت چیست؟ گفتیم که شل، دستورات خارجی را در PATH (فعلاً فرض کنید که یک پوشه است) جستجو میکند. خب، فایل اجرایی prog ما که در PATH قرار ندارد. پس به شل باید بفهمانیم که prog را به جای PATH از پوشه ی فعلی اجرا کند. پس از میانبر . استفاده میکنیم:

./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
دایرکتوری Programs را در مسیر فعلی ایجاد میکند. اگر بخواهید یک دایرکتوری جدید، در یکی از دایرکتوری های موجو ایجاد کنید نیز میتوانید به این صورت عمل کنید. در این مثال فرض شده که دایرکتوری Documents وجود دارد و میخواهیم دایرکتوری testDir را درون آن بسازیم:

$ mkdir Documents/testDir
اما اگر دایرکتوری Documents هم‌اکنون وجود نداشته باشد چه؟ به این مثال دقت کنید: میخواهیم دایرکتوری به نام new در مسیر فعلی بسازیم و داخل آن نیز دایرکتوری dir را ایجاد کنیم. خب، دستور قبلی که بررسی شد، فقط برای دایرکتوری ای که هم‌اکنون وجود دارد جواب میدهد. میتوانیم این کار را انجام دهیم:
$ mkdir new
$ mkdir new/dir
اما یک راه ساده‌تر هم وجود دارد و آن استفاده از گزینه ی p- است. یعنی به جای دستور بالا میتوان نوشت:
$ mkdir -p new/dir
حالا برای حذف یک دایرکتوری، میتوانیم از rmdir استفاده کنیم. برای حذف دایرکتوری new در مثال قبل مینویسیم:
$ rmdir new
الگوهای جستجوی فایل

بعضی وقت‌ها نیاز داریم تا دستوری را برای فایل‌های خاصی به کار ببریم. مثلاً همه ی فایل‌هایی که با حرف p شروع می‌شوند حذف کنیم. یکی از راه‌های انجام اینکار کاراکتر * است. به جای این کاراکتر هررشته ای از حروف میتواند بنشیند. برای مثال، اگر فایل‌های زیر را داشته باشیم:
prog1/p.c
prog1/pop.c
prog1/push.c
prog1/main.c
اگر بخواهیم نام همه ی فایل‌هایی که با حرف p شروع می‌شوند ببینیم، مینویسیم:
$ echo prog1/p*
به تصویر دقت کنید:




میبینید که فایل main.c نمایش داده نمیشود. البته دقت داشته باشید که فایل‌های مخفی نادیده گرفته میشوند.
کاراکتر دیگر ؟ است. برخلاف ستاره که به جای آن یک رشته میتواند بنشیند، به جای علامت سؤال فقط یک کاراکتر میتواند بنشیند. همان مثال قبل:



در قسمت بعدی آموزش به ادامه ی بحث عملیات مربوط به فایل‌ها میپردازیم.

  • موافقین ۱ مخالفین ۰
  • ۹۵/۰۳/۱۵
  • ۳۶۹ نمایش
  • علی رشیدی

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی