سرفصل‌های آموزشی
آموزش لینوکس
نمایی کلی از دایرکتوری های هوم در لینوکس

نمایی کلی از دایرکتوری های هوم در لینوکس

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

به طور کلی، در لینوکس هر کاربری دارای یک دایرکتوری 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/ دایرکتوری حاوی کامندهای قابل اجرا برای سیستم عامل

online-support-icon