45.714285714285715% Complete

ساختار فایل‌ها و دایرکتوری‌ها

امیدوارم حالا که به اینجای کتاب رسیده‌اید، با مفهوم فایل و دایرکتوری آشنا باشید. فایل‌ها مانند برگه‌های کاغذی هستن که روی آن‌ها اطلاعات مورد نظر چاپ شده و دایرکتوری‌ها مانند کشوها یا پوشه‌هایی که فایل‌ها در داخل آن‌ها قرار گرفته‌اند. در لینوکس این موضوع هم مانند بسیاری چیزهای دیگر از یک استاندارد پیروی می‌کند. استاندارد ناظر بر فایل‌ها و دایرکتوری‌ها استاندارد سلسله مراتب فایل‌سیستم یا به اختصار 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/

این دایرکتوری و دایرکتوری‌های درون آن حاوی کتابخانه‌های برنامه نویسی، اسناد، برنامه‌ها و حتی سورس برنامه‌هایی هستند که در سیستم نصب شده. زیردایرکتوری‌های این شاخه، معمولا به شکل زیر مرتب شده‌اند:

usr/bin/ برنامه‌های غیر ضروری سیستم مانند ابزارهایی مورد استفاده کاربران عمومی. چیزهایی مانند آفیس یا مرورگر وب
usr/include/ فایل‌های هدر برنامه‌نویسی
usr/lib/ کتابخانه‌های برنامه نویسی مورد استفاده عموم کاربران
usr/local/ برنامه‌های سیستمی غیرضروری. چیزهایی مثل سرویس‌های شبکه یا پرینترها اینجا قرار می‌گیرند.
usr/src/ کد متن برنامه‌ها در صورت نصب شدن در اینجا قرار می‌گیرند.
usr/X11R6/ بالاتر گفتیم که X11 لایه پایینی سیستم گرافیکی لینوکس است. فایل‌های اجرایی آن در اینجا قرار دارند.

var/ این دایرکتوری همانطور که از نام آن یعنی variable می‌شود حدس زد، حاوی فایل‌هایی است که انتظار می‌رود دائما در طول کارکرد مرسوم سیستم تغییر کنند. چیزهایی مانند لاگ‌های سیستم، فایل‌های سرور، ایمیل‌های در حال ارسال و اسناد منتظر پرینت شدن و دیتابیس‌ها. این دایرکتوری معمولا حاوی زیرشاخه‌هایی به شکل زیر است:

var/cache/ در صورتی که نرم‌افزاری نیاز به ذخیره موقت به شکل کش داشته باشد، در این مسیر برای خودش یک دایرکتوری می‌سازد. انتظار می‌رود که همیشه فایل‌های کش بدون صدمه زدن به سیستم قابل پاک کردن باشند.
var/lib/ فایل‌های نشان دهنده وضعیت اینجا هستند. اطلاعاتی که توسط برنامه‌ها تغییر می‌کنند ولی باید همیشه در دسترس بمانند. چیزهایی مانند دیتابیس‌ها، اطلاعات مربوط به مدیر بسته و غیره.
var/lock/ فایل‌های قفل. اینها ساخته می‌شوند تا یک پروسه بداند که آیا پروسه مشابهی در این لحظه در حال اجرا است یا نه. برای مثال در صورتی که مدیر بسته apt را اجرا کنید در طول زمان اجرایش، فایلی در اینجا می‌سازد تا به بقیه مدیربسته‌هایی که ممکن است اجرا شوند، حضور خود را یادآوری کند.
var/mail/ ایمیل‌های داخلی کاربران در اینجا قرار می‌گینرد. توجه کنید که این ایمیل معمولا با ایمیل مرسومی که شما روی یکی از سرویس دهنده ‌ها دارید نامرتبط است.
var/opt/ اطلاعات تغییر کننده ای که توسط برنامه‌های وندورهای دیگر (مثلا اوراکل) ایجاد می‌شوند.
var/run/ اطلاعاتی در مورد سیستم از زمان بوت تا به حال به همراه اطلاعاتی در مورد کاربران وارد شده و دامون‌های در حال اجرا. بله! این دایرکتوری کپی run/ است! یک کپی واقعی! در بسیاری سیستم‌ها این دو دایرکتوری عملا یک چیز هستند و فقط تصویری از یکدیگر.
var/spool/ سطلی از کارهایی که منتظرند کسی آن‌ها را بردارد. برای مثال وقتی دستور چاپ یک صفحه را می‌دهید، برنامه درخواست چاپ را در این دایرکتوری می‌گذارد تا سیستم چاپ سر فرصت آن را بردارد و چاپ کند. همین اتفاق برای ارسال ایمیل نیز می‌افتد. در صورت درخواست ارسال یک ایمیل داخلی، فایلی در اینجا ساخته می‌شود و برنامه ارسال ایمیل که دائما در حال نگاه به این دایرکتوری است، آن را برداشته، ارسال می‌کند.
var/tmp/ فایل‌های موقتی که کاربران یا برنامه‌ها ایجاد می‌کنند. تفاوت این دایرکتوری با tmp/ این است که این دایرکتوری بین دو ریبوت سیستم پاک نمی‌شود در حالی که tmp/ در بسیاری سیستم‌ها در هنگام بوت، خالی می‌شود.

نگران نباشید! دوبار مرور منطقی فهرست و درک دلایل نامگذاری دایرکتوری‌ها به راحتی باعث خواهد شد موضوع در ذهن شما بماند. البته اگر واقعا فکر می کنید نمی‌توانید همه جریان را در خاطر داشته باشید، فقط یادتان نگهداری که تنظیمات در ‌etc هستند و لاگ‌ها در var/log/ و tmp هم همیشه می‌تواند جای کار موقتی باشد که به زودی پاک خواهد شد.

منابع برای مطالعه بیشتر

45.714285714285715% Complete

فهرست درباره این کتاب اصول و مقدمات فلسفه آزادی نرم‌افزار تاریخچه گنو/لینوکس چرا گنو/لینوکس کاربردهای لینوکس لینوکس ویندوز نیست لینوکس روزمره مفهوم توزیع و منابع معماری های لینوکس انتخاب دسکتاپ و توزیع استفاده از لینوکس با دیسک زنده نصب لینوکس قدم های مرسوم بعد از نصب لینوکس دسکتاپ نصب نرم افزارها نرم‌افزارهای روزمره مهاجرت از ویندوز به لینوکس مباحث پیشرفته

ساختار فایل‌ها و دایرکتوری‌ها

آشنایی با خط فرمان دستورات معمول خط فرمان استفاده از پروکسی در خط فرمان مباحث پیشرفته خط فرمان چگونه یک دامین و یک هاست را به یکدیگر متصل کنیم جامعه لینوکس کمک گرفتن و ادامه راه زندگی حرفه‌ای لینوکس به عنوان شغل آیا به دانشگاه بروم رزومه آیا شرکت خوبی هست که قدر من رو بدونه انتخاب مسیر حرفه ای دیتاسنترها چگونه در انگلیسی پیشرفت کنیم آیا خواهید تونست [بدون تخصص] از اینترنت درآمد کسب کنید؟ راهنمای انتخاب زبان برنامه نویسی بیانیه هکرها چگونه هکر شویم چگونه فلان چیز رو یاد بگیرم ایجاد انگیزه و تمرکز