بررسی دقیقتر کامند ls
کامند ls شاید پرکاربردترین کامندی باشد که در توزیعهای لینوکسی وجود دارد. همانطور که قبلاً دیدیم، این کامند
محتوای دایرکتوریها را لیست میکند و همانطور که در این درس خواهیم دید، با استفاده از آرگومانها و آپشنهای
متعددی که برای این کامند وجود دارد، میتوانیم اطلاعات مهمی را در مورد فایلها و دایرکتوریهای لیستشده
دریافت کنیم.
اجرای کامند ls به صورت خشک و خالی (یعنی بدون هیچ آرگومان و آپشن) باعث میشود که محتوای دایرکتوری جاری نمایش
داده شود.
$ ls
Desktop Documents Music Pictures Public Templates Videos
در مثال بالا، کامند ls را در حالی اجرا کردهایم که در دایرکتوری home خود قرار داشتیم و در نتیجه، نام فایلها
و دایرکتوریهای موجود در این دایرکتوری (که البته همگی از نوع دایرکتوری هستند) نمایش داده شده است. اما اگر
بخواهیم محتوای یک دایرکتوری دیگر غیر از دایرکتوری جاری را ببینیم، کافیست مانند مثال زیر آدرس دایرکتوری مورد
نظر را به عنوان آرگومان کامند ls وارد کنیم:
$ ls /usr
bin games include lib local sbin share src
به علاوه، میتوانیم با استفاده از یک آپشن -l کاری کنیم که فرمت خروجی تغییر کند و اطلاعات بیشتری در مورد
محتوای دایرکتوری نمایش داده شود:
$ ls -l
total 56
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Desktop
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Documents
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Music
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Pictures
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Public
drwxrwxr-x 2 me me 4096 2024-10-26 17:20 Templates
drwxrwxr-x 2 me me 4096 2024-10-26 17:20 Videos
در واقع، با اضافهکردن آپشن -l از کامند ls میخواهیم که محتوا را در فرمت Long نمایش دهد. در این فرمت، هر خط
شامل اطلاعات مربوط به یک فایل یا دایرکتوری است که با چند و چون این اطلاعات در ادامه آشنا خواهیم شد.
در لینوکس هر چیزی فایل است
این جمله یک مفهوم اساسی و کلیدی و بخشی از فلسفهی لینوکس محسوب میشود که هرچه بیشتر در دنیای لینوکس به سر
ببرید، آن را به شکل عمیقتری درک خواهید کرد. به بیان ساده، این جمله به این معناست که در لینوکس هر چیزی از
فایلهای متنی و تصاویر گرفته تا دستگاههای سختافزاری و حتی پراسسها (برنامههای در حال اجرا) در
سیستمعامل به صورت فایل نمایش داده میشوند. دایرکتوریها هم نوعی فایل هستند که برای سازماندهی فایلهای
دیگر استفاده میشوند. یکپارچگی و انسجام Filesystem، انعطافپذیری و تسهیل فرایند اتوماسیون مزایایی هستند که
بهواسطهی پیادهسازی این فلسفه در لینوکس حاصل شدهاند. ابزارهای خط فرمان قدرتمندی که برای مدیریت فایلها
طراحی شدهاند، در واقع میتوانند هر چیزی را مدیریت کنند. چرا؟ چون در لینوکس هر چیزی یک فایل است.
آرگومانها و آپشنها
اکثر کامندها دارای یک یا جند آرگومان و چند سوئیچ یا آپشن (option) هستند که حالتهای مختلفی را برای یک کامند
ایجاد میکنند. مثلاً دیدیم که کامند ls وقتی به همراه آپشن -l به کار گرفته شود، خروجی را در فرمت Long نمایش
میدهد یا کامند cd وقتی یک مسیر را به عنوان آرگومان دریافت کند، از دایرکتوری جاری به آن مسیر منتقل میشود.
در واقع، فرم کلی یک کامند لینوکسی به این صورت است:
$ command -options arguments
یک آپشن میتواند دارای یکی از فرمهای زیر باشد:
-
فرمت کوتاه یا short format که در آن آپشن به صورت یک حرف بعد از کاراکتر خط تیره (dash) میآید. مثل ls -l
-
فرمت طولانی یا long format که در آن آپشن به صورت یک کلمه بعد از دو کاراکتر خط تیره میآید. مثل ls
--reverse
فرمت long ریشه در پروژهی GNU دارد و اکثر کامندهایی که از این فرمت پشتیبانی میکنند، متعلق به پروژهی GNU
هستند. در این فرمت، اگر نام یک آپشن بیش از یک کلمه باشد به صورت --word1-word2 خواهد بود. بهعلاوه، در مورد
فرمت short، اکثر کامندها اجازه میدهند که چند آپشن پشت سر هم بیایند. مثلاً بهجای ls -l -a میتوان از ls
-la استفاده کرد.
توجه داشته باشید که نام آپشنها مانند نام فایلها در لینوکس نسبت به بزرگی و کوچکی حروف حساس یا اصطلاحاً case
sensitive است.
خوب، برگردیم سراغ کامند ls و تعدادی از مهمترین و پرکاربردترین آپشنهای این کامند را ببینیم. جدول زیر این
آپشنها را در دو فرم short و long لیست کرده و توضیح مختصری راجع به هر یک آورده است.
آپشن short |
آپشن long |
توضیح |
-a |
--all |
همهی فایلها را لیست میکند، از جمله فایلهای مخفی که نامشان با یک کاراکتر نقطه (period) شروع میشود و
در حالت عادی لیست نمیشوند.
|
-A |
--almost-all |
مانند آپشن -a عمل میکند با این تفاوت که دایرکتوریهای . و .. را لیست نمیکند.
|
-d |
--directory |
استفاده از این آپشن به همراه -l باعث میشود که بهجای لیست کردن محتویات یک دایرکتوری، جزئیاتی در مورد
خود دایرکتوری ارائه شود.
|
-F |
--classify |
این آپشن یک کاراکتر به انتهای فایلهای لیستشده اضافه میکند که نوع آن فایل را نشان میدهد. برای مثال،
به دایرکتوریها یک کاراکتر / اضافه میکند یا به فایلهای اجرایی یک کاراکتر * اضافه میکند.
|
-h |
--human-readable |
استفاده از این آپشن باعث میشود که در فرمت Long سایز آیتمها بهجای بایت بر حسب فرمتهای مناسبتری نمایش
داده شود.
|
-l |
|
نتایج را در فرمت Long نمایش میدهد.
|
-r |
--reverse |
ترتیب نمایش آیتمها را که در حالت پیشفرض صعودی است، معکوس میکند.
|
-S |
|
ترتیب نمایش آیتمها را از روی سایز آنها تعیین میکند.
|
-t |
|
ترتیب نمایش آیتمها را از روی زمان ویرایش آنها تعیین میکند.
|
نگاهی دقیقتر به فرمت Long
گفتیم و دیدیم که آپشن -l باعث میشود که خروجی دستور ls در فرمت Long نمایش داده شود که با ارائهی جزئیات و
اطلاعات زیادی در مورد آیتمهای لیستشده همراه است. یک بار دیگر به خروجی کامند ls -l در دایرکتوری home یک
یوزر با نام me نگاه کنید:
$ ls -l
total 56
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Desktop
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Documents
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Music
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Pictures
drwxrwxr-x 2 me me 4096 2024-07-26 17:20 Public
drwxrwxr-x 2 me me 4096 2024-10-26 17:20 Templates
drwxrwxr-x 2 me me 4096 2024-10-26 17:20 Videos
هر سطر اطلاعات مربوط به یک فایل را نشان میدهد. در اینجا همهی فایلها از نوع دایرکتوری هستند. جدول زیر
توضیح میدهد که اطلاعات سطر اول چه معنایی دارند.
فیلد |
معنی |
drwxrwxr-x |
این رشته از ۱۰ کاراکتر تشکیل شده که اولی نشاندهندهی نوع فایل است. در مورد دایرکتوریها حرف d و در مورد
فایلهای معمولی یک کاراکتر خط تیره به عنوان اولین کاراکتر این رشته دیده میشود. ۹ کاراکتر بعدی را باید
در قالب سه گروه سهتایی ببینیم که مجوز دسترسی به فایل را بهترتیب، برای یوزر مالک فایل، اعضای گروه مالک
فایل و سایر افراد نمایش میدهند. برای درک جزئیات مربوط به این رشته باید تا فصل نهم صبر کنید.
|
2 |
تعداد لینکهای Hard مربوط به فایل را نمایش میدهد. در بخش پایانی همین درس با لینکهای Hard و Soft آشنا
خواهیم شد.
|
me |
نام کاربری مالک فایل |
me |
نام گروه مالک فایل |
4096 |
سایز آیتم بر اساس بایت |
2024-07-29-17:20 |
تاریخ و زمان آخرین دستکاری فایل |
Desktop |
نام فایل |
تعیین نوع فایل با کامند file
همانطور که قبلاً هم گفتیم، در لینوکس نام یک فایل لزوماً نشاندهندهی محتوای آن نیست. برای اطلاع از نوع
محتوای یک فایل، از کامندی به نام file استفاده میکنیم. این کامند دارای فرم کلی file filename است که اطلاعاتی
را در مورد نوع فایل filename در خروجی نمایش میدهد.
$ file picture.jpeg
picture.jpg: JPEG image data, JFIF standard 1.01
$ file /etc/passwd
/etc/passwd: ASCII text
در مثال بالا، خروجی کامند file را برای یک فایل تصویری و یک فایل متنی میبینید.
مشاهده محتوای فایل با کامند less
کامند less برنامهای است برای مشاهدهی محتوای فایلهای متنی. در لینوکس خیلی از فایلها از نوع فایلهای متنی
هستند و less محتوای این فایلها را به شکلی مناسب نمایش میدهد. در سیستمهای لینوکسی ابزارهای قدرتمندی هم
برای ویرایش فایلهای متنی وجود دارد که فعلاً موضوع بحث ما نیستند. الان فقط میخواهیم در مورد مشاهدهی محتوای
فایلهای متنی صحبت کنیم؛ یعنی همان کاری که کامند less انجام میدهد. فرم کلی کامند less به صورت زیر است:
$ less fiename
پس، کافیست آدرس فایل مورد نظر را به عنوان آرگومان کامند less وارد کنیم. less در واقع، یک ابزار Pager است؛
چنین ابزارهایی امکان جابجایی بین صفحات را در فایلهای متنی که بیش از یک صفحه هستند، فراهم میکنند. جدول زیر
چند کامند کیبورد را لیست کرده که در برنامهی less قابل استفاده هستند.
کامند کیبورد |
کاربرد |
b |
اسکرول به صفحهی قبل |
space |
اسکرول به صفحهی بعد |
↑ |
اسکرول به خط قبل |
↓ |
اسکرول به خط بعد |
G |
انتقال به انتهای فایل |
g |
انتقال به ابتدای فایل |
/characters |
جستجوی رو به جلو برای عبارت characters. منظور از جستجوی رو به جلو این است که کل فایل جسجتجو نمیشود،
بلکه از جایی که هستیم تا انتهای فایل ملاک جستجو خواهد بود.
|
n |
اگر عبارت جستجو شده در کامند قبل بیش از یک بار در متن آمده باشد، با فشردن کلید n میتوان به مورد بعدی
منتقل شد.
|
h |
نمایش صفحهی help |
q |
خروج از less |
Less Is More!
این یک شعار در طراحی و معماری مدرن است. ارتباطش با بحث ما این است که ابزار less یک نسخهی توسعهیافته از
یک ابزار Pager قدیمیتر با نام more است که بخشی از پروژهی GNU بود. بر خلاف less که امکان حرکت رو به جلو و
عقب بین صفحات را میدهد، ابزار more تنها قادر به حرکت رو به جلو بود.
مهمترین دایرکتوریهای لینوکس
بسایر خوب، ما حالا ابزار لازم برای سفر در سیستم لینوکسی خودمان را داریم و میتوانیم به بخشهای مختلف آن سر
بزنیم. این تور لینوکسگردی دو مزیت برای ما دارد: یکی اینکه با مهمترین دایرکتوریهای Filesystem آشنا میشویم
و دیگری اینکه کامندهای معرفیشده را تمرین میکنیم. البته من در این سفر همراه شما نخواهم بود. توضیحات لازم را
در خصوص مکانهایی که باید ببینید، در قالب یک جدول به شما خواهم داد و شما را تنها میگذارم. جسور باشید و در
دنیای لینوس کاوش کنید و نگران چیزی نباشید. در لینوکس رازی وجود ندارد و این معنای واقعی آزادی در این سیستم
عامل است.
طراحی Filesystem در لینوکس مشابه با سایر سیستمهای Unix-like است. علت این شباهت این است که استانداردی وجود
دارد به نام Filesystem Hierarchy Standard یا FHS که همهی توزیعهای لینوکسی آن را تقریباً به طور کامل
پیادهسازی کردهاند. جدول زیر مهمترین دایرکتوریهایی را که استاندارد FHS معرفی کرده به همراه توضیحی از نقش
هر دایرکتوری آورده است. ممکن است بسته به توزیعی که از آن استفاده میکنید، به تفاوتهایی بربخورید که چیز مهمی
نیست.
نام دایرکتوری |
نقش دایرکتوری |
/ |
دایرکتوری root که ریشهی درخت یا نقطهی شروع Filesystem است.
|
/bin |
شامل فایلهای باینری (برنامههای اجرایی) است.
|
/boot |
شامل کرنل لینوکس و boot loader است.
|
/dev |
این دایرکتوری جایی است که کرنل یک لیست از همهی دستگاههایی که میشناسد را به صورت فایل نگه میدارد.
|
/etc |
شامل همهی فایلهای کانفیگ سیستمی است و علاوه بر آن، چندین اسکریپت را نگه میدارد که سرویسهای سیستمی را
در زمان بوت راهاندازی میکنند. اینجا فایلهای مهم زیادی وجود دارد که یکی از آنها فایل /etc/passwd است
که شامل اطلاعات اکانتهای کاربری است.
|
/home |
در پیکربندی نرمال، به هر یوزر یک دایرکتوری در /home اختصاص داده میشود که دایرکتوری home آن یوزر گفته
میشود و همنام با نام یوزر است. مثلاً دایرکتوری home برای یوزری به نام me دایرکتوری /home/me است. یک
یوزر معمولی فقط در دایرکتوری home خود قادر به انجام عملیات نوشتن (write operation) است.
|
/lib |
شامل فایلهای کتابخانهای اشتراکی است که توسط برنامههای سیستمی استفاه میشوند. این فایلها مشابه
فایلهای .dll در ویندوز هستند.
|
/lost+found |
هر دستگاه یا پارتیشن فرمتشده که از یک Filesystem مثل ext4 استفاده میکند، دارای این دایرکتوری است. این
دایرکتوری در صورت نیاز به ریکاوری ناشی از خرابی بخشی از Filesystem استفاده میشود و جز در مواردی که
اتفاق بدی برای سیستمتان افتاده باشد، خالی است.
|
/media |
در سیستمهای لینوکسی مدرن، این دایرکتوری حاوی نقاط اتصال (mount points) برای دستگاههای جداشدنی
(Removable) مانند فلشهای USB یا CD-ROM است که به صورت خودکار هنگام اتصال نصب میشوند.
|
/mnt |
در سیستمهای لینوکسی قدیمیتر، دستگاههای Removable به طور خودکار mount نمیشدند، بلکه باید آنها را به
صورت دستی به دایرکتوری /mnt متصل یا mount میکردیم.
|
/opt |
این دایرکتوری به عنوان یک مخزن برای نرمافزارهای اضافی و اختیاری (optional) که بخشی از سیستمعامل
نیستند، در نظر گرفته شده است. مثلاً اگر ویرایشگر vim را نصب کنید، معمولاً فایلهای نرمافزار در
دایرکتوری /opt/vim نصب میشوند.
|
/proc |
هر پراسس در حال اجرا یک دایرکتوری جداگانه در /proc دارد که شامل اطلاعاتی مانند وضعیت پراسس، منابعی که
مصرف میکند و موارد دیگر است. محتوای دایرکتوری /proc نه در دیسک بلکه در RAM ذخیره میشود، چون محتوای این
دایرکتوری به صورت دینامیک تعیین میشود و با تغییر پراسسهای در حال اجرا تغییر میکند. از اینرو، این
دایرکتوری یک دایرکتوری مجازی محسوب میشود و عملاً بخشی از Filesystem نیست.
|
/root |
دایرکتوری home برای یوزر root است.
|
/sbin |
این دایرکتوری شامل باینریهای سیستمی است؛ یعنی برنامههایی که کارهای حیاتی مربوط به سیستم را انجام
میدهند و فقط توسط یوزر ادمین قابل اجرا هستند.
|
/tmp |
این دایرکتوری برای ذخیرهی فایلهای موقت تولید شده توسط برنامهها طراحی شده است. معمولاً تنظیمات
سیستمها بهگونهای باشد که این دایرکتوری با هر ریاستارت، خالی شود.
|
/usr |
بزرگترین دایرکتوری در یک سیستم لینوکسی است که شامل همهی برنامه ها و فایلهای مورد استفاده توسط کاربران
عادی است.
|
/usr/bin |
شامل برنامههای اجرایی نصبشده توسط توزیع لینوکسی است. معمولاً این دایرکتوری شامل هزاران فایل است.
|
/usr/lib |
شامل کتابخانههای اشتراکی است که توسط برنامههای موجود در /usr/bin استفاده میشوند.
|
/usr/local |
برنامههایی که برای استفادهی کل سیستم در نظر گرفته شدهاند، در این دایرکتوری قرار میگیرند. این
دایرکتوری در ابتدا خالی است تا زمانی که مدیر سیستم چیزی به آن اضافه کند.
|
/usr/sbin |
شامل برنامههای سیستمی در سطح ادمین است.
|
/usr/share |
حاوی تمام دادههای مشترک استفادهشده توسط برنامههای موجود در /usr/bin است. مثلاً فایلهای کانفیگ،
آیکونها و فایلهای صوتی در این دایرکتوری هستند.
|
/usr/share/doc |
اکثر برنامههای نصبی شامل نوعی مستندات هستند که آنها را میتوانیم در این دایرکتوری پیدا کنیم.
|
/var |
دادههایی که مستعد تغییر هستند (مثل دیتابیسها، فایلهای spool، ایمیل کاربر و غیره) در این دایرکتوری
نگهداری میشوند.
|
/var/log |
این دایرکتوری حاوی فایلهای log است که سوابق فعالیتهای سیستم را نشان میدهند. دسترسی به برخی از این
گزارشات به مجوز ادمین نیاز دارد.
|
آشنایی با لینکهای Soft و Hard
خروجی زیر را برای کامند ls -l در نظر بگیرید:
lrwxrwxrwx 1 root root 11 2024-06-11 07:34 foo -> foo-2.6
یادآوری میکنم که اولین حرف از رشتهی ۱۰ کاراکتری ابتدای خروجی کامند ls -l نشاندهندهی نوع فایل است که در
مورد فایلهای معمولی کاراکتر dash و در مورد دایرکتوریها d است. در مثال بالا، این حرف l است که از عبارت link
گرفته شده و به این معناست که فایل مورد نظر یک لینک به فایلی دیگر است. نام این لینک foo است که به فایلی با
نام foo-2.6 اشاره میکند. نحوهی ایجاد لینکها را بعداً خواهیم دید اما الان میخواهیم بدانیم استفاده از
لینکها چه لطفی دارد.
فرض کنید فایلی داریم با نام foo که در چندین برنامه از آن استفاده میشود. از طرفی این فایل در طول زمان تغییر
میکند و یک نسخهی جدید از آن ارائه میشود. وقتی ورژن این فایل مثلاً از 2.6 به 2.7 تغییر میکند، باید این
تغییر را روی همهی برنامههایی که از این فایل استفاده میکنند، اعمال کنیم که کاری است پر زحمت و مستعد خطا.
اینجاست که لینکهای Soft به کمک ما میآیند.
ما لینکی به نام foo به ورژن فعلی ایجاد میکنیم و در برنامهها به جای فایل از این لینک استفاده میکنیم. حالا
هر بار که ورژن فایل تغییر کند، کافیست فقط لینک موجود را حذف کنیم و یک لینک به فایل جدید ایجاد کنیم. با این
کار، اولاً فقط نیاز به انجام یک تغییر وجود دارد و ثانیاً میتوانیم نسخههای قبلی را هم نگه داریم تا اگر به
هر دلیلی (مثل وجود یک باگ در نسحهی جدید) خواستیم به نسخهی قبلی برگردیم، این کار به سادگی ممکن باشد.
نوع دیگری از لینکها هم وجود دارند که با نام لینک Hard شناخته میشوند. در مورد این لینکها و تفاوتی که با
لینکهای Soft دارند و همینطور در مورد نحوهی ایجاد لینکها در درس بعد صحبت خواهیم کرد.