حال که به نظر میرسد به خوبی با اصول فایل سیستم در لینوکس آشنا شده ایم، اکنون نوبت به آشنایی با معماری فایل سیستم و ساختار دایرکتوری ها در لینوکس میرسد.
به طور کلی، در لینوکس هر کاربری دارای یک دایرکتوری home است که به طور معمول در مسیر home/ قرار میگیرد. این دایرکتوری معمولاً به عنوان یک فایل سیستم مجزا در پارتیشن اختصاصی خودش ماونت میشود.
پیش از این گفتیم که یکی از قابلیتهای کلیدی سیستم عامل گنو/لینوکس این است که در آن واحد، چندین کاربر به صورت همزمان میتوانند از یک سیستم عامل واحد استفاده کنند. در همین راستا، گاهی اوقات ممکن است نیاز داشته باشیم تا کاربران را به گروههای مختلفی بر اساس کاری که انجام میدهند تقسیمبندی کنیم و به هر کدام از این گروهها، یک دایرکتوری زیرشاخه ی منحصر به فرد اختصاص دهیم. در چنین شرایطی، میتوانیم در دایرکتوری هوم اقدام به ساخت دایرکتوری هایی اختصاصی برای تک تک گروههای کاربری کنیم.
برای مثال، فرض کنیم که در سکان آکادمی چند گروه کاربری داریم: یک گروه برای ادمین های سایت، یک گروه برای مولفین سایت و یک گروه هم برای توسعه دهندگان سایت. در چنین حالتی، میتوان دایرکتوری های فرضی زیر را برای تک تک گروههای کاربری سکان آکادمی در نظر گرفت:
/home/admins
/home/authors
/home/developers
به طور معمول، زمانی که یک توزیع لینوکسی -همچون اوبونتو- را نصب می کنیم، یک دایرکتوری پیش فرض تحت عنوان نام کاربری انتخابی شما در حین نصب ایجاد می گردد.
آشنایی با دایرکتوری های bin و sbin
دایرکتوری bin/ حاوی فایلهای باینری Executable (قابل اجرا) است که از آن جمله میتوان به کامندهای زیر اشاره کرد:
کامند کاربرد ps لیستی از فرایندهای مختلف سیستم به همراه وضعیت آنها ارائه می کند. ls لیستی از محتوایات یک دایرکتوری در اختیار ما قرار میدهد. cp به منظور کپی کردن فایلها مورد استفاده قرار میگیرد.
به منظور نمایش لیستی از برنامههایی که در دایرکتوری bin/ قرار دارند، میتوانیم دستور ls /bin را در ترمینال وارد کنیم. به عنوان خروجی این دستور داریم:
bash getfacl nisdomainname sync
bunzip2 grep ntfs-3g systemctl
busybox gunzip ntfs-3g.probe systemd
bzcat gzexe ntfs-3g.secaudit systemd-ask-password
bzcmp gzip ntfs-3g.usermap systemd-escape
bzdiff hciconfig ntfscat systemd-hwdb
bzegrep hostname ntfscluster systemd-inhibit
bzexe ip ntfscmp systemd-machine-id-setup
bzfgrep journalctl ntfsfallocate systemd-notify
bzgrep kbd_mode ntfsfix systemd-tmpfiles
bzip2 keyctl ntfsinfo systemd-tty-ask-password-agent
bzip2recover kill ntfsls tailf
bzless kmod ntfsmove tar
bzmore less ntfstruncate tempfile
cat lessecho ntfswipe touch
chacl lessfile open true
chgrp lesskey openvt udevadm
chmod lesspipe pidof ulockmgr_server
chown ln ping umount
chvt loadkeys ping6 uname
cp login plymouth uncompress
cpio loginctl ps unicode_start
dash lowntfs-3g pwd vdir
date ls rbash vmmouse_detect
dd lsblk readlink wdctl
df lsmod red which
dir mkdir rm whiptail
dmesg mknod rmdir ypdomainname
dnsdomainname mktemp rnano zcat
domainname more run-parts zcmp
dumpkeys mount sed zdiff
echo mountpoint setfacl zegrep
ed mt setfont zfgrep
efibootmgr mt-gnu setupcon zforce
egrep mv sh zgrep
false nano sh.distrib zless
fgconsole nc sleep zmore
fgrep nc.openbsd ss znew
findmnt netcat static-sh
fuser netstat stty
fusermount networkctl su
برخی کامندها هستند که در حین اجرای سیستم عامل ضروری نیستند که معمولاً در مسیر usr/bin/ قرار میگیرند اما این در حالی است که دایرکتوری sbin/ به منظور ذخیره سازی فایلهای باینری ضروری که مرتبط با مدیریت سیستم هستند -من جمله ifconfig و shutdown- مورد استفاده قرار میگیرد.
گاهی اوقات دایرکتوری usr/ یک فایل سیستم مجزا است که در سیستم عامل های تک کاربره (Single User Mode) غیر قابل دسترسی است و به همین خاطر است که کامندهای ضروری از کامندهای غیر ضروری مجزا شدهاند.
دایرکتوری dev/
دایرکتوری dev/ حاوی فایلهایی تحت عنوان Device Node است که توسط نرمافزارها و سخت افزارهای سیستم مورد استفاده قرار میگیرد. این دایرکتوری حاوی اطلاعاتی است که توسط سیستم udev که مسئول ساخت و مدیریت Device Node ها در لینوکس است تولید میشوند.
زمانی که هر دیوایسی -من جمله کارت صوتی، پرینتر و غیره- شناخته شود، فایلهای مرتبط با آن به صورت خودکار ساخته میشوند. این دایرکتوری حاوی آیتم هایی مشابه موارد زیر است (البته این آیتم ها بسته به نوع سیستم متفاوت اند):
- dev/sda1 (اولین پارتیشن روی اولین هارد دیسک)
- dev/lp1/ (دومین پرینتر)
- dev/dvd1/ (اولین DVD درایو)
دایرکتوری های var/ و etc/
دایرکتوری var/ حاوی فایلهایی است که در حین اجرای سیستم عامل، محتویات و بالتبع حجم آنها دستخوش تغییر میشود (var از ابتدای کلمه ی Variable به معنی «متغیر» گرفته شده است.) از جمله دایرکتوری هایی که محتویات آنها چنین ویژگیهایی دارد، میتوان به موارد زیر اشاره نمود:
- var/log/ (فایل های لاگ سیستمی)
- var/lib/ (فایل های مرتبط با دیتابیس ها و پکیج های نرم افزاری)
- var/spool/ (لیستی از گزینه هایی که منتظر پرینت شدن هستند)
- var/tmp/ (فایل های موقتی که پس از مدت زمان مشخصی پاک میشوند)
دایرکتوری var/ در فایل سیستم اختصاصی خود قرار میگیرد تا این اطمینال حاصل شود که با افزوده شدن حجم فایلهای قرار گرفته در این دایرکتوری، لطمه یی به سایر فایل سیستمها وارد نمی گردد. دایرکتوری های مرتبط با دیوایس های شبکه مثل var/ftp/ و var/www/ نیز داخل دایرکتوری var/ هستند.
دایرکتوری etc/ محلی برای ذخیره سازی فایلهای Configuration (پیکربندی) است و این در حالی است که هیچ نوع برنامه ی قابل اجرایی داخل این دایرکتوری قرار نمیگیرد.
برای مثال، فایل resolv.conf برای سیستم مشخص میسازد که برای به دست آوردن Host Name و DNS به کجای شبکه مراجعه کند. فایلهایی همچون passed، shadow و group هم که برای مدیریت اکانت های کاربران سیستم عامل مورد استفاده قرار میگیرند داخل دایرکتوری etc/ قرار دارند.
پیش از این گفتیم که این دایرکتوری حاوی فایلهای اجرایی نیست اما به هر حال یکسری اسکریپت های اجرایی هستند که در دایرکتوری های زیرشاخه ی etc/ یافت میشوند. برای مثال، دایرکتوری etc/rc2.d/ حاوی لینک هایی به اسکریپت هایی است که در سطح کل سیستم عامل اجرا میشوند (به نظر میرسد که rc مخفف واژگان Run Commands به معنی «کامندهای اجرایی» باشد.)
دایرکتوری boot/
دایرکتوری boot/ حاوی یکسری فایلهای ضروری است که به منظور بوت شدن کامل سیستم مورد استفاده قرار میگیرند که عبارتند از:
- vmlinuz: کرنل لینوکس فشرده شده که برای بوت شدن سیستم نیاز است.
- initramfs: فایل سیستم رم که برای بوت شدن نیاز است.
- config: فایل پیکربرندی کرنل لینوکس که صرفاً برای دیباگ کردن مورد استفاده قرار میگیرد.
- System.map: جدول دیتاهای مرتبط با کرنل لینوکس که برای فرایند دیباگ کردن مورد استفاده قرار میگیرد.
فایلهای Grand Unified Bootloader که به اختصار GRUB خوانده میشوند نیز در این دایرکتوری قرار دارند که از آن جمله میتوان به فایل grub.cfg اشاره کرد.
دایرکتوری های lib/ و media/
دایرکتوری lib/ حاوی لایبرری هایی -سورس کدی به اشتراک گذاشته شده برای اجرای پکیج های مختلف- برای راه اندازی اپلیکیشن های ضروری سیستم عامل است که در دایرکتوری های bin/ و sbin/ قرار دارند.
فایلهای قرار گرفته در این لایبرری ها معمولاً یا با ld و یا با lib شروع میشوند. بسیاری از این لایبرری ها تحت عنوان Dynamically Loaded Libraries یا Shared Libraries و یا Shared Objects شناخته میشوند. در برخی از توزیعهای لینوکسی یک دایرکتوری تحت عنوان lib64/ نیز وجود دارد که حاوی لایبرری های سازگار با سی پی یوهای ۶۴ بیتی است در حالی که دایرکتوری lib/ حاوی نسخه های ۳۲ بیتی لایبرری های مورد نیاز است.
درایورهای دیوایس های مختلف و کرنل لینوکس نیز تحت دایرکتوری lib/modules/ قرار دارند. دایرکتوری media/ زمانی که یک CD، DVD و یا Flash Memory را به دستگاه وصل میکنیم، اطلاعات آنها را در معرض دیدمان قرار می دهد. پس از شناخته شدن دیوایس های فوق الذکر، لینوکس به صورت خودکار آنها را در دایرکتوری media/ قرار میدهد.
سایر دایرکتوری های قرار گرفته در روت لینوکس
دایرکتوری کاربرد opt/ پکیج اپلیکیشن های مد نظر داخل این دایرکتوری قرار میگیرند. sys/ فایل سیستم مجازی که حاوی اطلاعاتی در مورد سیستم و سخت افزارش است در این دایرکتوری قرار میگیرد. فایلهای قرار گرفته در این دایرکتوری را میتوان به منظور اهداف دیباگ کردن و یا تغییر دادن پارامترهای سیستمی مورد استفاده قرار داد. tmp/ فایلهای موقت مورد نیاز سیستم در این دایرکتوری نگهداری میشوند. در برخی توزیعهای لینوکسی، پس از ریبوت شدن سیستم این دایرکتوری خالی میگردد. usr/ اپلیکیشن ها، ابزارها و دیتایی که توسط چندین کاربر سیستم عامل مورد استفاده قرار میگیرند در این دایرکتوری جای داده شده اند.
دایرکتوری usr/ حاوی اسکریپت ها و برنامههایی غیر ضروری است (منظور از غیر ضروری در اینجا این است که برای بوت شدن سیستم مورد استفاده قرار نمیگیرند) که حاوی دایرکتوری های زیرشاخه ی زیر است:
دایرکتوری کاربرد usr/include/ فایلهای هدر که به منظور کامپایل شدن اپلیکیشن ها مورد استفاده قرار میگیرند. usr/lib/ لایبرری هایی برای برنامههای قرار گرفته در دایرکتوری های usr/bin/ و usrn/sbin/ usr/lib64/ لایبرری هایی ۶۴ بیتی برای برنامههای ۶۴ بیتی که در دایرکتوری های usr/bin/ و usrn/sbin/ قرار دارند. usr/sbin/ فایلهای باینری غیر ضروری در این دایرکتوری قرار میگیرند. usr/share/ دیتای به اشتراک گذاشته شده که توسط اپلیکیشن های مختلف مورد استفاده قرار میگیرد. usr/src/ سورس کدهایی که معمولاً مورد استفاده ی کرنل لینوکس قرار می گیرند. usr/x11R6/ فایلهای پیکربندی X Window usr/local/ برنامهها و دیتای مرتبط با سیستم usr/bin/ دایرکتوری حاوی کامندهای قابل اجرا برای سیستم عامل