پرش به محتویات

Find system files and place files in the correct location

هدف درس

در این درس با استاندارد ساختار فایل‌ها (FHS) و روش‌های یافتن فایل‌ها و دستورات در سیستم لینوکس آشنا می‌شویم؛ همچنین مکان‌های معمول فایل‌ها و دایرکتوری‌های مهم را بررسی خواهیم کرد.

دانش مورد نیاز

  • آشنایی با FHS
  • استفاده از ابزارهای: find, locate, updatedb, whereis, which, type

ساختار سلسله‌مراتبی فایل‌ها (FHS)

FHS سندی است که محل مناسب قرارگیری فایل‌ها و دایرکتوری‌ها را تعیین می‌کند. این شناخت به مدیر سیستم کمک می‌کند تا فایل‌ها را در محل‌های درست قرار دهد و سریع‌تر آن‌ها را پیدا کند.

نمونه‌ای از دایرکتوری‌های مهم:

  • / : ریشهٔ فایل‌سیستم
  • /bin : فایل‌های اجرایی ضروری
  • /boot : فایل‌های ایستا بوت‌لودر
  • /dev : فایل‌های دستگاه
  • /etc : تنظیمات مخصوص میزبان
  • /lib : کتابخانه‌های اشتراکی ضروری
  • /media : محل مونت‌کردن رسانه‌های قابل‌حمل
  • /mnt : محل موقت برای مونت‌ها
  • /opt : بسته‌های نرم‌افزاری الحاقی
  • /sbin : باینری‌های سیستمی ضروری
  • /srv : داده‌های سرویس‌های ارائه‌شده توسط سیستم
  • /tmp : فایل‌های موقت
  • /usr : سلسله‌مراتب ثانویه (قابل به اشتراک‌گذاری و فقط خواندنی)
  • /var : داده‌های متغیر (لاگ‌ها، spoolها، کش‌ها)
  • /home : دایرکتوری‌های خانگی کاربران

نکته: /usr معمولاً شامل داده‌های اشتراکی و قابل خواندن است؛ /var شامل فایل‌هایی است که تغییر می‌کنند (لاگ، اسپول، ...).


مسیر جستجوی فرمان‌ها (PATH)

شل با متغیر محیطی PATH دنبال باینری‌ها می‌گردد:

echo $PATH
# مثال: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

می‌توانید با export PATH=$PATH:/your/new/dir مسیر را موقتاً تغییر دهید یا در ~/.bashrc برای ماندگاری اضافه کنید.


ابزارهای یافتن فایل‌ها و دستورات

  • which — نشان می‌دهد کدام فایل اجرایی در PATH اجرا خواهد شد:
which mkfs     # /usr/bin/mkfs
which -a ping  # نمایش همهٔ مسیرهای موجود برای ping
  • type — عمومی‌تر از which است و می‌گوید یک نام، builtin یا keyword شل است یا باینری:
type cd    # cd is a shell builtin
type mkfs  # mkfs is /sbin/mkfs
  • whereis — مکان باینری، صفحات manual و سورس (در صورت وجود) را نمایش می‌دهد:
whereis mkfs   # mkfs: /usr/sbin/mkfs /usr/share/man/man8/mkfs.8.gz
  • find — جستجوی زنده در درخت فایل؛ بسیار انعطاف‌پذیر:
find /tmp -maxdepth 1 -user jadi
find . ! -user jadi    # فایل‌هایی که متعلق به کاربر jadi نیستند
find /etc -iname '*vmware*'
  • locate و updatedb — سریع‌تر از find چون از پایگاه داده استفاده می‌کنند. پایگاه داده با updatedb (یا به‌صورت خودکار توسط daemon/cron) به‌روز می‌شود:
locate networking
sudo updatedb   # بروزرسانی دیتابیس locate (نیاز به دسترسی روت)
cat /etc/updatedb.conf  # تنظیمات حذف مسیرها/نوع FS از ایندکس

هشدار: updatedb معمولاً به طور زمانبندی‌شده اجرا می‌شود؛ اجرای دستی آن در سیستم‌های با I/O حساس ممکن است بار زیادی بر دیسک وارد کند؛ فقط در صورت نیاز و با آگاهی اجرا کنید.


مثال‌ها و نکات عملی

  • با which -a می‌توانید بفهمید چند نسخه از یک ابزار در سیستم وجود دارد.
  • اگر which چیزی نشان نداد اما type بگوید builtin است، معمولاً نیازی به فایل اجرایی مجزا نیست.
  • locate فوق‌العاده سریع است اما ممکن است جدیدترین تغییرات را نشان ندهد تا زمانی که updatedb اجرا شود.

چک‌لیست (قبل از تغییر یا نصب فایل‌ها)

  1. آیا مکان انتخاب‌شده مطابق FHS است؟
  2. آیا فایل باید در /usr (قابل‌اشتراک/خواندنی) باشد یا در /opt یا /srv؟
  3. آیا نیاز است که PATH برای کاربران اضافه شود؟ مکان آن و مستندسازی را مشخص کنید.
  4. آیا مالکیت/اجازه‌های فایل مناسب تنظیم شده است؟ (با chown / chmod)

تمرین‌ها

  1. با which -a و type تفاوت بین ping موجود در /usr/bin و /bin را بیابید.
  2. با find تمام فایل‌های /tmp که متعلق به شما هستند را لیست کنید.
  3. locate را برای رشته‌ای اجرا کنید که قبلاً تغییر کرده — سپس updatedb را اجرا و نتیجه را دوباره بررسی کنید.

نکات کلیدی برای آزمون

  • بدانید FHS چه دایرکتوری‌هایی را برای چه مصارفی توصیه می‌کند (مثلاً /etc برای پیکربندی، /var برای داده‌های متغیر).
  • تفاوت which، type و whereis را تشخیص دهید.
  • بدانید find جستجوی زنده انجام می‌دهد و locate از دیتابیس استفاده می‌کند؛ و updatedb دیتابیس را به‌روز می‌کند.