ساختار فایل سیستم لینوکس
ساختار فایل سیستم لینوکس
سیستم عامل لینوکس یک سیستم عامل بر مبنا فایل (File Based) میباشد . وقتی یک سیستم عامل بر مبنا فایل است یعنی همه چیز (تاکید میکنم هممممه چیز) از نظر سیستم عامل یک فایل است . مواردی همچون برنامه اجرایی و پوشه و تصویری و صوتی و عکس و راه های ارتباطی با سخت افزار و هرچیز دیگری به عنوان یک فایل در سیستم عامل تعریف میشوند .
اولین باری که مفهوم دسته بندی فایل ها در دنیای IT مطرح شد در سیستم عامل یونیکس بود . در این سیستم عامل واژه جدیدی به نام دایرکتوری (پوشه) به ساختار بدنه سیستم عامل اضافه شد که به کمک آن میتوان سایر فایل ها را دسته بندی کرد . اینکه ما بتوانیم تمامی فایل ها را بر اساس سلیقه خود یا نوع آنها و یا هر مولفه ای از آنها دسته بندی کنیم جهشی بسیار بزرگ در ساختار سیستم عامل ها بود که توانست ساختار مرتب و منظمی به آنها بدهد . لازم است بدونید که حتی دایرکتوری ها هم فایل هایی هستند از نوع دایرکتوری .
ساختار فایل سیستم در لینوکس به این صورت است که یک دایرکتوری اصلی به نام “/” وجود دارد که تمامی سیستم عامل داخل این دایرکتوری جای دارد . در تصویر زیر ساختار عمومی فایل سیستم لینوکس آمده است که در ادامه به توضیح این تصویر میپردازم .
جالب است بدانید که در تمامی لینوکس ها فارغ از اینکه این لینوکس در یک کامپیوتر شخصی است یا یک ابر سرور یا یک ربات یا یک گوشی همراه یا یک پرینتر یا یک صفینه فضایی یا خودرو شخصی شما و یا هر جای دیگر این ساختار وجود دارد . البته برخی دایرکتوری ها میتوانند کم یا زیاد باشند ولی در کلیت قضیه همگی سیستم عامل های لینوکس دارای ساختار مشابه هستند .
زیر مجموعه دایرکتوری “/” تعدادی دایرکتوری هست که در ادامه به توضیح آنها میپردازم
- دایرکتوری bin
این دایرکتوری که اول عبارت binaries هست شامل فایل های اجرایی است . برای نمونه دستورات لینوکس همگی باید یک فایل اجرایی داشته باشند که برخی از اون فایل ها در این دایرکتوری وجود دارد . - دایرکتوری boot
هرچیزی که لینوکس برای بووت شدن لازم دارد در این دایرکتوری قرار دارد . از لحظه ای که bios یا همان Basic Input Output Supervisor/Service ادامه کار را به boot loader لینوکسی میدهد تا لحظه ای که مدیریت به systemd/init تحویل داده شود همه چیز در این دایرکتوری است . - دایرکتوری dev
در لینوکس تمامی سخت افزار های حقیقی و مجازی متصل باید یک فایل ارتباطی داشته باشند که تمامی این فایل ها در این دایرکتوری است . برای نمونه میتوان به cdrom و usb و هارد های متصل و کارت صدا و کارت شبکه و … اشاره کرد . عبارت dev بیانگر کلمه devices میباشد . - دایرکتوری etc
برای نام این دایرکتوری بین دو عبارت Etcetera و Editable Text Configuration اختلاف وجود دارد که از نظر من هردو میتواند درست باشد . چون این دایرکتوری هم شامل تمامی فایل های تنظیمات لینوکس میباشد و هم در این دایرکتوری میتوان فایل هایی دید که هیچ ربطی به تنظیمات ندارند . - دایرکتوری home
چون لینوکس یک سیستم عامل چند کاربره (مالتی یوزر) هست یعنی اینکه چندین کاربر میتوانند به صورت همزمان با سیستم عامل کار کنند پس تمامی این کاربر ها نیاز دارند به یک جایی که فایل های شخصی خود را در آنجا نگه دارند که مابقی کاربر ها به آن جا دسترسی نداشته باشند . معادل این حریم امن در دنیای واقعی میتوان به خانه اشاره کرد . پس هرکاربری نیاز به یک خانه دارد که در آنجا احساس امنیت کند . تمامی خانه های مربوط به کاربران در این دایرکتوری تعریف میشوند . - دایرکتوری lib
تمامی برنامه های زیرمجموعه لینوکس نیاز دارند که با سایر برنامه ها یا سخت افزار ها ارتباط برقرار کنند و یا از آنها استفاده کنند . برای نمونه یک نرم افزار پخش فایل صوتی که با زبان c نوشته شده است نیاز دارد با کارت صدا و کامپایلر c و چند نرم افزار دیگر ارتباط برقرار کند راه های ارتباطی این نرم افزار ها با یکدیگر در این دایرکتوری وجود دارند . - دایرکتوری media
این دایرکتوری معمولا برای سخت افزار های اضافه شده مانند usb و cdrom و … استفاده میشود . این دایرکتوری ممکن است در بعضی از نسخه ها وجود نداشته باشد . - دایرکتوری mnt
این دایرکتوری برای mount کردن استفاده میشود . گرچه عملیات mount در هرجای سیستم عامل قابل انجام است . - دایرکتوری opt
این دایرکتوری که نام کامل آن optional است به صورت باز به عهده کاربر است و کاربر میتواند هرطور که دوست دارد از این دایرکتوری استفاده کند . - دایرکتوری proc
این دایرکتوری که از عبارت processes ساخته شده است وضعیت در لحظه فرآیندهای سیستم عامل را نشان میدهد . - دایرکتوری root
این دایرکتوری خانه کاربر اصلی root است که کاربر اصلی سیستم عامل لینوکس است . به دلایل امنیتی که کاملا صحیح میباشد خانه کاربر root از سایر کاربر ها جدا باید باشد . - دایرکتوری sbin
این دایرکتوری که درواقع system binaries است جایگاه اصلی فایل ها و نرم افزار های سیستمی است . - دایرکتوری srv
این دایرکتوری که serve directory است برای نگهداری فایل های قابل سرو توسط سرویس ها استفاده میشود . برای نمونه یک ftp سرور رو درنظر بگیرید که نیاز داره برای سرو یک سری فایل . - دایرکتوری tmp
این دایرکتوری که کوتاه شده عبارت temporary است برای نگهداری فایل های موقت استفاده میشود . نکته ای که در مورد این دایرکتوری باید درنظر بگیریم این است که تمامی کاربر ها در این دایرکتوری مجوز کامل دارند و میتواند مشکل امنیتی بوجود بیاورد . - دایرکتوری usr
این دایرکتوری نیز مانند دایرکتوری etc در انتخاب نام اختلافهایی دارد . بین نامهای users programs و unix system resources اختلاف هایی است که هردو صحیح میباشد . این دایرکتوری در برگیرنده برنامه های کاربردی کاربران میباشد که در خود لینوکس نیست و بعدا اضافه شده است . - دایرکتوری var
این دایرکتوری که از عبارت variables گرفته شده است شامل تمامی اطلاعات متغییر میباشد . برای نمونه تمامی لاگ فایل ها که ممکن است در لحظه تغییر کنند و یا هر فایلی که ممکن است تغییر کند در این دایرکتوری جای دارد
چند نکته مهم
در ادامه به چند نکته مهم اشاره میکنم
- تمامی این دایرکتوری ها به صورت قراردادی و استاندارد لینوکس هستند . ما میتوانیم در هرجا که دوست داریم هر کاری را انجام دهیم . برای نمونه به راحتی میتوانیم خانه یک کاربر را به جای اینکه در دایرکتوری home قرار دهیم در دایرکتوری tmp بسازیم و یا اینکه فایل های تنظیمات را در opt قرار دهیم .
- تفاوت bin و sbin در این است که یک سری فایل های اجرایی و دستورات اجرایی مخصوص هسته لینوکس هست مانند mv که این نوع فایل ها که مخصوص کرنل هست و مربوط به دستورات داخلی لینوکس میباشد داخل دایرکتوری bin هست ولی دستوراتی مانند ifconfig که داخل کرنل نیستند و به صورت نرم افزار بعدا اضافه میشوند در دایرکتوری sbin قرار دارند .
- اینکه ممکن است در نسخه های متفاوت لینوکس این ساختار متفاوت باشد و یک یا چند دایرکتوری اضافه یا کم باشند .