ساختار فایلها و دایرکتوریها
امیدوارم حالا که به اینجای کتاب رسیدهاید، با مفهوم فایل و دایرکتوری آشنا باشید. فایلها مانند برگههای کاغذی هستن که روی آنها اطلاعات مورد نظر چاپ شده و دایرکتوریها مانند کشوها یا پوشههایی که فایلها در داخل آنها قرار گرفتهاند. در لینوکس این موضوع هم مانند بسیاری چیزهای دیگر از یک استاندارد پیروی میکند. استاندارد ناظر بر فایلها و دایرکتوریها استاندارد سلسله مراتب فایلسیستم یا به اختصار FHS نامیده میشود. نسخه ابتدایی این استاندارد در سال ۱۹۹۴ تنظیم شده بود و نسخه فعلی در سوم ژوئن ۲۰۱۵ منتشر شده است.
در استاندارد FHS، تمام فایلها و دایرکتوریهای روی یک سیستم با در یک دایرکتوری ریشه که با / نشان داده میشود نگهداری شوند. حتی اضافه کردن یک دیسک سخت افزاری جدید یا متصل کردن یک هارد اکسترنال یا ماونت کردن یک دیسک روی شبکه هم تنها باعث اختصاص یک دایرکتوری به آن میشود. این کار ممکن است به صورت خودکار یا دستی انجام شود ولی در نهایت برای دسترسی به هر سخت مکان ذخیره فایل، کاربر باید وارد یکی از دایرکتوریهایی شود که جایی در زیر دایرکتوری ریشه ساخته شده است.
پس دیدیم که در لینوکس (که فرزند خلف یونیکس و استانداردهایش است) همه چیز تحت دایرکتوری / که به آن دایرکتوری ریشه یا Root Directory می گوییم قرار دارد. بگذارید نگاهی به دایرکتوریهای درون آن بیندازیم:
jadi@wonderland:~$ ls / bin etc initrd.img.old lost+found opt run sys var boot home lib media proc sbin tmp vmlinuz dev initrd.img lib64 mnt root srv usr vmlinuz.oldالبته بگذارید از دستور قشنگتر tree استفاده کنم که ساختار درختی فایلها را هم نشان میدهد. سوییچ L مشخص میکند که چند لایه تو در تو نمایش داده شود (در اینجا ۱؛ یعنی فقط همین دایرکتوری) و سوییچ d درخواست میکند که فقط دایرکتوریها به نمایش در بیایند و فایلها نشان داده نشوند.
jadi@wonderland:~$ tree / -L 1 -d / ├── bin ├── boot ├── dev ├── etc ├── home ├── lib ├── lib64 ├── lost+found ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── sys ├── tmp ├── usr └── var
این تقریبا همان چیزی است که استاندارد FHS مشخص کرده. هر سیستم عامل مبتنی بر یونیکس ( از جمله لینوکس) حاوی دایرکتوری بندی مشابهی است و درک این دایرکتوری بندی یکی از اولین قدمهای جدی برای تبدیل شدن به یک متخصص لینوکس است. چرا؟ چون دانستن اینکه هر چیزی در کجا قابل پیدا شدن است، باعث میشود شما حتی در مواردی که اطلاعات دقیقی هم ندارید، بتوانید قدمهای اول را بردارید. مثلا اگر بدانید که همه تنظیمات در دایرکتوری etc/
هستند و مدیرتان از شما بخواهد تنظیمات برنامه vsftpd را تغییر دهید، میتوانید انتظار داشته باشید که این تنظیمات در در etc/vsftpd/
یافت شوند یا اگر کسی گلایه کند که پروکسیاش کار نمیکنید تنها چیزی که برای شروع عملیات لازم دارید دانستن این است که همه لاگهای سیستم در /var/log/
هستند و با رفتن به آنجا میتوانید به دنبال ریشه مشکلات بگردید.
پس بگذارید نگاهی دقیقتر به دایرکتوریهای بالا بیندازیم و ببینیم در ریشه یک سیستم لینوکس، چه چیزهایی یافت میشوند.
دایرکتوری | کاربرد | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/ | همانطور که گفته شد، این دایرکتوری ریشه است که همه فایلها و دایرکتوری ها (و دستگاه های متصل به سیستم که به شکل یک فایل یا دایرکتوری شناخته میشوند) در آن قرار دارند | ||||||||||||||||
bin/ | فایلهای اجرایی مهم در اینجا هستند. بخصوص دستوراتی که باید حتی در حالت تک کاربره و مشکلیابی نیز در دسترس باشند یا آنهایی که توسط همه کاربران مورد استفاده قرار میگیرند؛ چیزهایی مثل دستور cat یا ls یا cp | ||||||||||||||||
boot/ | اینجا مجموعه فایلهای مرتبط با بوت لودر قرار گرفتهاند که وظیفه بوت اولیه سیستم را بر عهده دارند. چیزهایی مانند کرنل و initrd و بوت کننده grub. | ||||||||||||||||
dev/ | ابزارهای اساسی اینجا قرار گرفتهاند. در لینوکس همه چیز یا پروسه است یا فایل و همین فلسفه باعث شده که تک تک ابزارهای سخت افزاری متصل به سیستم هم در این دایرکتوری به شکل یک فایل شناخته شوند. برای مثال dev/video0/ میتواند نشان دهنده وبکم و dev/random/ ابزاری باشد که هربار از آن بخوانید، یک عدد اتفاقی به شما تحویل میدهد. | ||||||||||||||||
etc/ | این دایرکتوری یکی از اصلیترین مکانهای مورد مراجعه هر لینوکس کار است. کلیه تنظیمات سیستمی در اینجا قرار میگیرند. معمولا هر برنامه در این دایرکتوری برای خود یک دایرکتوری می سازد و تنظیمات مورد پذیرش در کل سیستم را آنجا میگذارد. در برخی موارد هم که برنامهها کوچکتر هستند و تنها یکی دو فایل تنظیم دارند، فقط با استفاده از اسم خود و بدون ساخت زیرشاخه، تنظیمات را در این مکان ذخیره میکنند. به عنوان یک نمونه، etc/X11/ حاوی تنظیمات مربوط به محیط گرافیکی (که X11 نامید میشود) است. این دایرکتوری مهم همچنین شامل تنظیماتی است که مربوط به برنامههایی میشود که در هر مرحله از بوت شدن سیستم باید اجرا شوند و تنظیماتی که به شکل دورهای برنامههایی را اجرا میکنند (کرون ها). در مستندات اولیه یونیکس آزمایشگاههای بل، کلمه etc به عنوان مخفف etcetera عنوان شده که به معنی متفرقه است و نشان دهنده آنکه برنامههای متفرقه (به جز خود لینوکس) تنظیمات خود را در اینجا ذخیره میکنند. مستندات جدیدتر گاهی از آن با عنوان تنظیمات قابل ویرایش (Editable Text Configuration) یا گنجه ابزارهای اضافی (Extended Tool Chest) هم نام میبرند که مخفف با معناتری است. |
||||||||||||||||
home/ | دایرکتوری شخصی کاربران در اینجا قرار دارد. برای مثال اگر شما در سیستم کاربری به نام jadi بسازید، دایرکتوری home/jadi/ به فایلهای شخصی، تنظیمات فردی و چیزهای دیگری اختصاص مییابد که این کاربر بر روی سیستم ذخیره میکند. هر کاربر در خانه شخصی خود حق نوشتن، خواندن و اجرای فایلها را دارد. | ||||||||||||||||
lib/ | کتابخانههای برنامه نویسی که توسط فایلهای اجرایی مانند آنهایی که در bin یا sbin هستند در اینجا قرار میگیرد. | ||||||||||||||||
media/ | دایرکتوریای موقت برای ماونت کردن ابزارهای جانبی. مثلا اگر شما jadi باشید و یک دیسک یو اس بی به نام myusbdisk به کامپیوتر لینوکس دسکتاپ خود متصل کنید، آن را در مسیر media/jadi/myusbdisk/ خواهید یافت. این مسیر برای بقیه ابزارهای ذخیره سازی جداشونده از جمله سیدی درایوها نیز استفاده میشود. | ||||||||||||||||
mnt/ | مسیری است عمومی برای ماونت کردن ابزارهای ذخیره سازی. این مسیر بر خلاف مسیر media/ معمولا تنها توسط مدیرسیستم یا روت برای متصل کردن ابزارهای جانبی استفاده میشود. | ||||||||||||||||
opt/ | این مسیر معمولا برای نصب برنامههای وندورهای مستقل استفاده میشود. برای مثال در صورتی که برنامهای مانند اوراکل را خریداری کنید، برنامه در مسیر opt/ که مخفف کلمات optional است نصب خواهد شد. | ||||||||||||||||
proc/ | تکرار میکنم که همه چیز در لینوکس یا فایل است یا پروسه و اضافه میکنم که این دایرکتوری برخورد این دو با یکدیگر است. در این دایرکتوری که عملا یک فایل سیستم مجازی است، هر پروسه در حال اجرا در سیستم و اطلاعاتی مربوط به وضعیت سیستم به شکل یک فایل به نمایش درمی آید. | ||||||||||||||||
root/ | این دایرکتوری خانه کاربر روت است و فایلهای شخصی یا تنظیمات اختصاصی کاربر روت در این مکان ذخیره میشود. توجه نمایید که علی رغم شباهت اسمی، این دایرکتوری هیچ ربطی به / که دایرکتوری روت خوانده میشود ندارد. | ||||||||||||||||
run/ | اطلاعاتی مربوط به سیستم از زمان آخرین بوت. چیزهایی مانند کاربران وارد شده به سیستم و دامونهای در حال اجرا در اینجا قابل دسترسی هستند. توجه داشته باشید که اینبار لازم ندیدم تذکر بدهم که همه چیز یا فایل است یا پروسه و این دایرکتوری نشان دهنده پروسهها، به شکل فایل. | ||||||||||||||||
sbin/ | فایلهای اجرایی حیاتی در اینجا قرار میگیرند. چیزهایی مانند init و mount. | ||||||||||||||||
tmp/ | فایلهای موقتی که برنامهها یا کاربران آنها را ساختهاند. از این دایرکتوری نباید انتظار امنیت یا حتی پایداری داشت. همه کاربران به این دایرکتوری دسترسی دارند و ممکن است بعد از بوت کاملا پاک شود. | ||||||||||||||||
usr/ | این دایرکتوری و دایرکتوریهای درون آن حاوی کتابخانههای برنامه نویسی، اسناد، برنامهها و حتی سورس برنامههایی هستند که در سیستم نصب شده. زیردایرکتوریهای این شاخه، معمولا به شکل زیر مرتب شدهاند:
| ||||||||||||||||
var/ | این دایرکتوری همانطور که از نام آن یعنی variable میشود حدس زد، حاوی فایلهایی است که انتظار میرود دائما در طول کارکرد مرسوم سیستم تغییر کنند. چیزهایی مانند لاگهای سیستم، فایلهای سرور، ایمیلهای در حال ارسال و اسناد منتظر پرینت شدن و دیتابیسها. این دایرکتوری معمولا حاوی زیرشاخههایی به شکل زیر است:
|
نگران نباشید! دوبار مرور منطقی فهرست و درک دلایل نامگذاری دایرکتوریها به راحتی باعث خواهد شد موضوع در ذهن شما بماند. البته اگر واقعا فکر می کنید نمیتوانید همه جریان را در خاطر داشته باشید، فقط یادتان نگهداری که تنظیمات در etc هستند و لاگها در var/log/ و tmp هم همیشه میتواند جای کار موقتی باشد که به زودی پاک خواهد شد.