# فصل دوم: ساختار فایل سیستم لینوکس

## Linux Filesystem Structure

یکی از مهم‌ترین مفاهیمی که هر کاربر لینوکس باید به صورت عمیق یاد بگیرد، ساختار فایل سیستم است.

در سیستم‌عامل‌های مختلف، نحوه سازمان‌دهی فایل‌ها و پوشه‌ها متفاوت است. برای مثال، در ویندوز کاربران معمولاً با مفهوم درایوهایی مانند C و D کار می‌کنند.

اما لینوکس از چنین ساختاری استفاده نمی‌کند.

در لینوکس تمام فایل‌ها، پوشه‌ها، دستگاه‌ها و منابع سیستم در یک ساختار درختی واحد قرار دارند که از یک نقطه اصلی به نام **Root Directory** آغاز می‌شود.

---

# Root Directory چیست؟

در لینوکس بالاترین سطح فایل سیستم با علامت زیر نمایش داده می‌شود:
```bash
/
```
این مسیر را **Root Directory** می‌نامند.

Root Directory نقطه شروع تمام مسیرهای موجود در سیستم است.

تمام فایل‌ها و پوشه‌های لینوکس، چه فایل‌های مربوط به سیستم و چه فایل‌های شخصی کاربران، در نهایت زیرمجموعه این مسیر قرار می‌گیرند.

ساختار ساده فایل سیستم:
```bash
/
|
├── home
├── etc
├── bin
├── usr
├── var
└── tmp
```
---

# تفاوت Root Directory و Root User

یکی از اشتباهات رایج کاربران تازه‌کار، یکی دانستن Root Directory و Root User است.

این دو مفهوم کاملاً متفاوت هستند.

## Root Directory

Root Directory یک مسیر در فایل سیستم است:
```bash
/
```
این مسیر نشان‌دهنده بالاترین سطح ساختار فایل‌ها در لینوکس است.

---

## Root User

Root User یک حساب کاربری قدرتمند در لینوکس است.

این کاربر بالاترین سطح دسترسی را در سیستم دارد و می‌تواند عملیات‌های مدیریتی مانند نصب نرم‌افزار، تغییر تنظیمات سیستم، مدیریت کاربران و تغییر فایل‌های حساس را انجام دهد.

به زبان ساده:

/ یعنی محل شروع فایل سیستم.

root یعنی کاربر قدرتمند سیستم.

---

# ساختار استاندارد پوشه‌های لینوکس

یک سیستم لینوکسی دارای پوشه‌های استانداردی در مسیر Root است.

مهم‌ترین این پوشه‌ها:
```bash
/bin
/boot
/dev
/etc
/home
/lib
/media
/mnt
/opt
/proc
/root
/run
/sbin
/sys
/tmp
/usr
/var
```
هرکدام از این مسیرها وظیفه مشخصی دارند.

---

# پوشه Home

مسیر:
```bash
/home
```
محل ذخیره فایل‌های کاربران عادی سیستم است.

هر کاربر معمولاً یک پوشه اختصاصی در این مسیر دارد.

برای مثال:
```bash
/home/asa
```
این مسیر شامل فایل‌های شخصی کاربر است:

- Documents
- Downloads
- Pictures
- Videos
- پروژه‌ها
- فایل‌های شخصی

زمانی که کاربر وارد سیستم می‌شود، معمولاً در Home Directory خود قرار می‌گیرد.

برای مشاهده مسیر فعلی از دستور زیر استفاده می‌کنیم:
```bash
pwd
```
---

# پوشه Root

مسیر:
```bash
/root
```
خانه اختصاصی کاربر Root است.

این مسیر با Root Directory یعنی `/` متفاوت است.

تفاوت:
```bash
/  
Root Directory

/root  
Home Directory کاربر root
```
---

# پوشه Etc

مسیر:
```bash
/etc
```
محل نگهداری فایل‌های تنظیمات سیستم است.

بسیاری از تنظیمات مهم لینوکس در این مسیر قرار دارند.

نمونه فایل‌ها:
```bash
/etc/passwd
```
```bash
/etc/hosts
```
```bash
/etc/fstab
```
برای مثال:
```bash
/etc/passwd
```
اطلاعات کاربران سیستم را نگهداری می‌کند.

---

# پوشه Bin

مسیر:
```bash
/bin
```
شامل دستورات ضروری سیستم است.

برخی از دستورات معروف:
```bash
ls
```
```bash
cp
```
```bash
mv
```
```bash
rm
```
```bash
cat
```
```bash
echo
```
این ابزارها باید حتی در شرایط خاص مانند تعمیر سیستم نیز قابل استفاده باشند.

---

# پوشه Sbin

مسیر:
```bash
/sbin
```
شامل ابزارهای مدیریتی سیستم است.

این ابزارها معمولاً برای مدیریت بخش‌های حساس سیستم استفاده می‌شوند.

نمونه‌ها:
```bash
shutdown
```
```bash
reboot
```
```bash
fdisk
```
---

# پوشه Usr

مسیر:
```bash
/usr
```
یکی از بزرگ‌ترین بخش‌های فایل سیستم لینوکس است.

بسیاری از برنامه‌ها، کتابخانه‌ها و فایل‌های نرم‌افزاری در این مسیر قرار دارند.

نمونه مسیرها:
```bash
/usr/bin

/usr/lib

/usr/share
```
---

# پوشه Var

مسیر:
```bash
/var
```
برای اطلاعاتی استفاده می‌شود که دائماً تغییر می‌کنند.

نام Var از کلمه Variable گرفته شده است.

نمونه اطلاعات:

- فایل‌های Log
- کش برنامه‌ها
- اطلاعات سرویس‌ها

یکی از مهم‌ترین مسیرها:
```bash
/var/log
```
است که گزارش‌های سیستم در آن ذخیره می‌شوند.

---

# پوشه Tmp

مسیر:
```bash
/tmp
```
برای نگهداری فایل‌های موقت استفاده می‌شود.

برنامه‌ها هنگام اجرا ممکن است فایل‌های موقتی ایجاد کنند.

این فایل‌ها معمولاً دائمی نیستند و ممکن است پس از خاموش شدن سیستم حذف شوند.

---

# پوشه Dev

مسیر:
```bash
/dev
```
شامل فایل‌های مربوط به دستگاه‌های سخت‌افزاری است.

در لینوکس بسیاری از سخت‌افزارها مانند فایل نمایش داده می‌شوند.

برای مثال:
```bash
/dev/sda
```
ممکن است مربوط به یک حافظه ذخیره‌سازی باشد.

یکی از فلسفه‌های معروف لینوکس:

Everything is a file

است.

یعنی بسیاری از منابع سیستم از طریق فایل‌ها قابل مدیریت هستند.

---

# پوشه Proc

مسیر:
```bash
/proc
```
یک فایل سیستم مجازی است.

این مسیر اطلاعات مربوط به پردازش‌های در حال اجرا و وضعیت داخلی Kernel را نمایش می‌دهد.

نمونه‌ها:
```bash
/proc/cpuinfo
```
اطلاعات پردازنده را نمایش می‌دهد.
```bash
 /proc/meminfo
```
اطلاعات حافظه را نمایش می‌دهد.

---

# پوشه Boot

مسیر:
```bash
/boot
```
شامل فایل‌های مورد نیاز برای راه‌اندازی سیستم است.

مانند:

- Kernel
- Bootloader

بدون این بخش، سیستم ممکن است نتواند به درستی اجرا شود.

---

# مسیرها در لینوکس

برای کار با فایل‌ها باید مفهوم مسیر یا Path را به خوبی یاد بگیریم.

در لینوکس دو نوع مسیر وجود دارد:

- Absolute Path
- Relative Path

---

# Absolute Path چیست؟

مسیر کامل یک فایل که از Root شروع می‌شود.

مثال:
```bash
/home/username/Documents/file.txt
```
این مسیر مکان دقیق فایل را مشخص می‌کند.

---

# Relative Path چیست؟

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

برای مثال اگر در مسیر زیر باشیم:
```bash
/home/username
```
مسیر:
```bash
Documents/file.txt
```
به معنی:
```bash
/home/username/Documents/file.txt
```
خواهد بود.

---

# نقطه و دو نقطه

دو علامت مهم در مسیرهای لینوکس وجود دارد.

## نقطه
```bash
.
```
به مسیر فعلی اشاره می‌کند.

مثال:
```bash
./script.sh
```
یعنی اجرای فایل script.sh در مسیر فعلی.

---

## دو نقطه
```bash
..
```
به پوشه والد اشاره می‌کند.

مثال:

اگر در مسیر زیر باشیم:
```bash
/home/username/Documents
```
با استفاده از:
```bash
..
```
به مسیر زیر بازمی‌گردیم:
```bash
/home/username
```
---

# مشاهده فایل‌ها و پوشه‌ها

برای مشاهده محتویات یک مسیر از دستور ls استفاده می‌کنیم.

نمایش اطلاعات بیشتر:
```bash
ls -l
```
نمایش فایل‌های مخفی:
```bash
ls -a
```
نمایش کامل:
```bash
ls -la
```
---

# فلسفه فایل سیستم لینوکس

ساختار فایل سیستم لینوکس بر اساس نظم و استاندارد طراحی شده است.

هر پوشه وظیفه مشخصی دارد و قرار دادن فایل‌ها در مسیر مناسب باعث می‌شود سیستم قابل مدیریت‌تر باشد.

یک کاربر حرفه‌ای لینوکس باید بداند:

- فایل‌های تنظیمات کجا قرار دارند.
- برنامه‌ها در چه مسیرهایی نصب می‌شوند.
- گزارش‌های سیستم کجا ذخیره می‌شوند.
- فایل‌های کاربران در چه محلی قرار دارند.

---

# تمرین‌های فصل دوم

## تمرین اول

مسیر فعلی خود را مشاهده کنید.

دستور:
```bash
pwd
```
---

## تمرین دوم

محتویات مسیر فعلی را مشاهده کنید.

دستور:
```bash
ls
```
---

## تمرین سوم

محتویات Root Directory را بررسی کنید.

دستور:
```bash
ls /
```
---

## تمرین چهارم

پوشه کاربران را مشاهده کنید.

دستور:
```bash
ls /home
```
---

# جمع‌بندی

در این فصل با ساختار فایل سیستم لینوکس آشنا شدیم.

یاد گرفتیم:

- لینوکس از یک ساختار درختی واحد استفاده می‌کند.
- نقطه شروع فایل سیستم / است.
- هر پوشه وظیفه مشخصی دارد.
- مسیرهای Absolute و Relative تفاوت دارند.
- بسیاری از منابع سیستم در قالب فایل مدیریت می‌شوند.

شناخت فایل سیستم، یکی از پایه‌ای‌ترین مهارت‌ها برای تبدیل شدن به یک کاربر حرفه‌ای لینوکس است.

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