My folder vip
76 subscribers
202 photos
82 videos
622 files
499 links
آرشیو یادگیری هک/امنیت

اینجا فولدر شخصی من برای یادگیری و ثبت مطالب Linux، Networking و Cyber Security است.

🔐 LPIC | Network+ | CEH | SANS
🐧 Linux & System Administration
🌐 Networking & Troubleshooting
💻 Python & Security Tools
🧪 Labs | CTF | Prac
Download Telegram
فصل سوم — قسمت سی‌وپنجم- fdisk 🐧
—————-

یسک با fdisk
در Linux برای استفاده از یک دیسک معمولاً ۳ مرحله داریم:

1️⃣ Partition → تقسیم‌بندی دیسک
2️⃣ Format → ساخت Filesystem
3️⃣ Mount → قابل استفاده کردن دیسک


مثلا
/dev/sda
↓
Partition
↓
/dev/sda1
↓
mkfs.ext4
↓
mount
↓
/mnt


——————

1️⃣ اضافه کردن هارد در VMware

در VMware از:
VM Settings → Hard Disk → Add→ SATA
مثلاً سه دیسک اضافه می‌کنیم:
/dev/sda → 10GB
/dev/sdb → 10GB
/dev/sdd → 10GB
بعد در Linux بررسی می‌کنیم:
lsblk

lsblk لیست Block Deviceها مثل Disk و Partition را نشان می‌دهد.
—————
2️⃣ فرمت کردن یک دیسک
مثلاً /dev/sdb را مستقیماً با ext4 فرمت می‌کنیم:
mkfs.ext4 /dev/sdb

⚠️ دقت کن: این کار اطلاعات روی /dev/sdb را از بین می‌برد.
بعد برای استفاده از آن:
mount /dev/sdb /mnt

بررسی:
lsblk

می‌بینیم:
sdb   10G   disk   /mnt

یعنی دیسک روی /mnt Mount شده.
——————

df -h
برای دیدن فضای Filesystemهای Mount شده:
df -h

مثلاً:
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc1 19G 4.5G 14G 26% /
/dev/sdb 9.8G 2.1M 9.3G 1% /mnt

یعنی می‌توانی ببینی:
Size → حجم
Used → استفاده‌شده
Avail → فضای آزاد
Use% → درصد استفاده
Mounted on → محل Mount
—————

3️⃣ شروع کار با fdisk
حالا می‌خواهیم /dev/sda را Partition کنیم:
fdisk /dev/sda

داخل fdisk چند دستور مهم داریم:
p → نمایش Partitionها
n → ساخت Partition
d → حذف Partition
t → تغییر Type
g → ساخت GPT
w → ذخیره تغییرات
q → خروج بدون ذخیره

🧠 فعلاً همین‌ها را حفظ کن.
——————

4️⃣ ساخت Partition معمولی
با دستور زیر :
fdisk /dev/sda

داخل fdisk:
Command (m for help): n

می‌پرسد:
p → Primary
e → Extended

من اینطوری ست کردم :
p
1

یعنی:
یک Primary Partition شماره 1 بساز.

برای:
First sector

Enter می‌زنیم تا مقدار پیش‌فرض انتخاب شود.
برای حجم:
+5G

یعنی:
یک Partition با حجم 5GB بساز.

در نهایت:
/dev/sda1   5G   Linux

————————

5️⃣ Extended Partition
دوباره:
n

و:
e

مثلاً:
/dev/sda1 → 5G Primary

/dev/sda2 → 5G Extended

چرا Extended؟
در ساختار قدیمی MBR، تعداد Primary Partitionها محدود بود.
Extended می‌توانست به‌عنوان Container برای Logical Partitionها استفاده شود.

——————-

6️⃣ ساخت Logical Partition
حالا دوباره:
n

چون فضای Primary/Extended را داریم، fdisk ممکن است پیشنهاد دهد:
Adding logical partition 5

مثلاً:
+2G

نتیجه:
/dev/sda1 → 5G Primary
/dev/sda2 → 5G Extended
/dev/sda5 → 2G Logical

پس ساختار ما میشود:
/dev/sda
├── sda1 → 5G
├── sda2 → Extended
└── sda5 → 2G Logical

—————

7️⃣ ذخیره Partitionها
تا اینجا تغییرات هنوز روی Disk نوشته نشده‌اند.
برای ذخیره:
w

برای خروج بدون ذخیره:
q

بعد:
lsblk

و Partitionها را می‌بینیم.
——————

8️⃣ Format کردن Partition
حالا مثلاً sda1 را می‌خواهیم XFS کنیم:
mkfs.xfs /dev/sda1

یعنی:
روی

/dev/sda1
یک Filesystem از نوع XFS بساز.

بعد:
mount /dev/sda1 /mnt

بررسی:
lsblk

می‌بینیم:
sda
├─sda1 5G part /mnt
├─sda2
└─sda5 2G part


——————
9️⃣ حذف Partition
اول اگر Partition Mount است:
umount /mnt

بعد:
fdisk /dev/sda

و برای دیدن وضعیت:
p

حذف:
d

بعد شماره Partition را انتخاب می‌کنیم.
مثلاً:
1

در نهایت:
w

برای ذخیره.
—————-

🔟 ساخت GPT با fdisk
حالا فرض کنیم /dev/sdd یک Disk جدید است:
fdisk /dev/sdd

داخل fdisk:
g

پیامی مثل:
Created a new GPT disklabel

می‌بینیم.
یعنی Partition Table دیسک به GPT تبدیل/ایجاد شده است.
بعد می‌توانیم:
n

بزنیم و Partition بسازیم.
تفاوت مهم
در GPT دیگر ساختار قدیمی:
Primary

Extended

Logical

مثل MBR مطرح نیست.

———————

1️⃣1️⃣ تغییر Type Partition
فرض کن Partition ساخته‌ایم:
/dev/sdd1

می‌خواهیم Type آن را Linux LVM کنیم.
داخل:
fdisk /dev/sdd

بزن:
t

برای دیدن Typeها:
L

یا مستقیماً می‌توانیم alias مناسب را وارد کنیم، مثلاً:
lvm

نتیجه:
/dev/sdd1   5G   Linux LVM

یعنی این Partition برای استفاده در LVM علامت‌گذاری شده است.
⚠️ این کار به‌تنهایی LVM نمی‌سازد؛ فقط Partition Type را مشخص می‌کند. در قسمت بعدی واقعاً LVM می‌سازیم.

————————

پاک کردن Signatureهای Disk با wipefs
اگر بخواهیم Signatureهای Filesystem/Partition Table را از یک Disk پاک کنیم:
wipefs -af /dev/sda

⚠️ بسیار خطرناک است.
روی Disk اشتباه اجرا کنی، ممکن است اطلاعات و ساختار قبلی آن را از دست بدهی.
مثلاً:
lsblk

بعد از پاک شدن ممکن است فقط خود Disk را ببینی:
sda   10G   disk


———————

🧠 جمع‌بندی قسمت ۳۵
مسیر کلی کار با Disk:

Disk
↓
fdisk
↓
Partition
↓
mkfs
↓
Filesystem
↓
mount
↓
استفاده از Disk

—————-

🎯 مثال واقعی
فرض کن یک سرور داری و یک هارد جدید 100GB اضافه کردی:
هارد جدید
↓
lsblk
↓
fdisk
↓
/dev/sdb1
↓
mkfs.xfs
↓
mount
↓
/data

حالا /data می‌تواند محل ذخیره Backup، فایل‌های سایت، لاگ‌ها یا Database باشد.
قسمت بعدی → LVM: PV → VG → LV → Filesystem → Mount 🔥
👏1
فصل سوم — قسمت سی‌وششم 🐧 - پیاده‌سازی LVM

——————-
در قسمت قبل گفتیم:
LVM یعنی مدیریت انعطاف‌پذیر فضای دیسک

ساختار LVM را این‌طوری حفظ کن:
Disk / Partition
↓
PV
↓
VG
↓
LV
↓
Filesystem
↓
Mount

مثلاً:
/dev/sda ──┐
├── PV → VG → LV → XFS → /data
/dev/sdb ──┘


————

1️⃣ دیدن Diskها
دو روش ساده:
lsblk

یا:
fdisk -l

lsblk ساختار Disk و Partition را مرتب‌تر نشان می‌دهد و fdisk -l جزئیات Partition Table را هم نمایش می‌دهد.

———————
2️⃣ ساخت Physical Volume — PV
فرض کنیم دو Disk داریم:
/dev/sda → 10GB
/dev/sdb → 10GB

برای وارد کردن آن‌ها به LVM:
برای وارد کردن آن‌ها به LVM:
pvcreate /dev/sda /dev/sdb

اگر pvcreate پیدا نشد:
apt update

apt install lvm2

حالا:
pvs

مثلاً:
PV         VG   Fmt  Attr  PSize   PFree
/dev/sda lvm2 --- 10.00g 10.00g
/dev/sdb lvm2 --- 10.00g 10.00g

یعنی دو Disk ما تبدیل به Physical Volume شده‌اند.
جزئیات بیشتر:
pvdisplay

🧠 مثال واقعی
مثل این است که دو هارد 10GB داری و به Linux می‌گویی:
این دو هارد قرار است وارد سیستم مدیریت LVM شوند.

——————

3️⃣ ساخت Volume Group — VG
حالا PVها را داخل یک Volume Group قرار می‌دهیم.
مثلاً اسمش را malireza می‌گذاریم:
vgcreate malireza /dev/sda /dev/sdb

حالا:
vgs

مثلاً:
VG        #PV  #LV  VSize   VFree
malireza 2 0 19.99g 19.99g

یعنی:
/dev/sda ──┐
├── malireza → حدود 20GB
/dev/sdb ──┘

برای اطلاعات کامل‌تر:
vgdisplay malireza


————

4️⃣ ساخت Logical Volume — LV
حالا از Volume Group خودمان می‌توانیم فضا به شکل Logical Volume اختصاص دهیم.
مثلاً 3GB:
lvcreate -n mail -L 3G malireza

یعنی:
-n mail → اسم LV = mail
-L 3G → حجم = 3GB
malireza → Volume Group

حالا:
lvs

می‌بینیم:
LV    VG        LSize
mail malireza 3.00g

و:
lsblk

چیزی شبیه این:
sda
sdb
└─malireza-mail 3G lvm

—————-

5️⃣ حالا LV را قابل استفاده کنیم
در این مرحله هنوز Filesystem نداریم.
مثلاً XFS:
mkfs.xfs /dev/malireza/mail

یا با ext4:
mkfs.ext4 /dev/malireza/mail

بعد یک Mount Point بساز:
mkdir /mail

و Mount کن:
mount /dev/malireza/mail /mail

بررسی:
lsblk
df -h

حالا /mail فضای 3GB ماست.

——————-

6️⃣ افزایش حجم LV — lvextend ⭐️
اینجا یکی از مهم‌ترین مزیت‌های LVM را می‌بینیم.
فرض کن:
/mail = 3GB

ولی بعداً فهمیدی به 5GB نیاز داری.
اگر داخل VG فضای آزاد داشته باشیم:
lvextend -L +2G /dev/malireza/mail

یعنی:
2GB به LV اضافه کن.

بعد:
lvs

می‌بینی:
mail → 5G

اما یک نکته خیلی مهم:
بزرگ کردن LV الزاماً Filesystem را بزرگ نمی‌کند.
پس بسته به Filesystem باید آن را هم Grow کنیم.
برای XFS:
xfs_growfs /mail

برای ext4:
resize2fs /dev/malireza/mail

پس:
lvextend
↓
بزرگ شدن LV
↓
Grow کردن Filesystem
↓
فضای جدید قابل استفاده می‌شود

راه ساده‌تر
برای بعضی سناریوها می‌توانی از:
lvextend -r -L +2G /dev/malireza/mail

استفاده کنی.
-r تلاش می‌کند Filesystem را هم همزمان Resize کند.
———————-

7️⃣ حذف LVM
این قسمت خیلی مهم است:
همیشه از پایین به بالا حذف کن:
Filesystem
↓
LV
↓
VG
↓
PV

اگر LV ما این باشد:
/dev/malireza/mail

اول:
umount /mail

بعد LV:
lvremove /dev/malireza/mail

بعد VG:
vgremove malireza

بعد PV:
pvremove /dev/sda
pvremove /dev/sdb

🧠 چرا از پایین به بالا؟
چون نمی‌توانی VG را حذف کنی وقتی هنوز LV داخلش داری.
و نمی‌توانی PV را از LVM خارج کنی وقتی هنوز عضو VG است.
پس حفظ کن:
lvremove
↓
vgremove
↓
pvremove

——————

🧠 خلاصه طلایی LVM
/dev/sda ──┐
├── PV
/dev/sdb ──┘
↓
VG
↓
LV
↓
mkfs.xfs
↓
mount


——————

دستورات اصلی:
pvs             # وضعیت PV
pvdisplay # جزئیات PV
pvcreate # ساخت PV

vgs # وضعیت VG
vgdisplay # جزئیات VG
vgcreate # ساخت VG

lvs # وضعیت LV
lvcreate # ساخت LV
lvextend # افزایش LV
lvremove # حذف LV

pvremove # حذف PV
vgremove # حذف VG

————-

🎯 مثال واقعی
فرض کن روی یک سرور دو هارد 100GB داری و می‌خواهی برای Mail Server یک فضای 50GB بسازی:
2 × 100GB Disk
↓
PV
↓
VG = 200GB
↓
LV = 50GB
↓
XFS
↓
/mail

بعداً Mail Server بزرگ شد:
50GB → 100GB

و اگر در VG فضای آزاد داشته باشی، می‌توانی LV را بدون Partition‌بندی مجدد دیسک بزرگ کنی. 🔥
نکته: در محیط واقعی بهتر است به‌جای تبدیل کل /dev/sda و /dev/sdb به PV، معمولاً Partitionهای مشخصی مثل /dev/sda1 و /dev/sdb1 را برای LVM اختصاص بدهی؛ مخصوصاً روی سیستم‌هایی که دیسک ساختار دیگری هم دارد.
👏1
تکمیلی قسمت سی وشش

——————————-

حتماً. این قسمت LVM اولش یکم گیج‌کننده‌ست، ولی اگر ساختار رو بفهمی دیگه این دستورات خیلی ساده می‌شن.

فرض کن دو تا هارد داری:
/dev/sda
/dev/sdb


LVM این‌ها رو به چند لایه تبدیل می‌کنه:
هارد / پارتیشن
↓
PV
↓
VG
↓
LV
↓
Filesystem
↓
Mount


1. PV چیست؟ — Physical Volume
PV = Physical Volume
یعنی یک دیسک یا پارتیشن را به LVM معرفی می‌کنیم.
مثلاً:
pvcreate /dev/sda1

pvcreate /dev/sdb1

حالا:
/dev/sda1 ──→ PV

/dev/sdb1 ──→ PV

یعنی به LVM گفتیم:
این پارتیشن‌ها را به عنوان فضای قابل استفاده در LVM در نظر بگیر.

برای دیدنش:
pvs

یا:
pvdisplay

——————-

2. VG چیست؟ — Volume Group
VG = Volume Group
VG مثل یک مخزن بزرگ از فضا است که PVها را داخلش قرار می‌دهیم.
مثلاً:
vgcreate malireza /dev/sda1 /dev/sdb1

حالا داریم:
/dev/sda1 ──→ PV ──┐
├──→ VG: malireza
/dev/sdb1 ──→ PV ──┘

فرض کن:
sda1 = 10GB
sdb1 = 20GB

پس VG تقریباً:
malireza = 30GB

فضای قابل استفاده دارد.
برای دیدنش:
vgs

یا:
vgdisplay

——————-

3. LV چیست؟ — Logical Volume
LV = Logical Volume
حالا از داخل VG، هر مقدار فضایی که بخواهیم به عنوان یک Volume منطقی ایجاد می‌کنیم.
مثلاً:
lvcreate -L 10G -n mail malireza

یعنی:
از VG به نام

malireza
، یک LV ده گیگابایتی به نام

mail
بساز.

ساختار می‌شود:
/dev/sda1 ──→ PV ──┐
│
/dev/sdb1 ──→ PV ──┤
↓
VG: malireza
│
├── LV: mail (10GB)
├── LV: web (5GB)
└── LV: db (10GB)

برای دیدن LVها:
lvs

یا:
lvdisplay

————————-

حالا دستورات حذف را بفهمیم
تو داشتی:
lvremove /dev/malireza/mail

این یعنی:
LV به نام

mail
را از VG به نام

malireza
حذف کن.

چون:
/dev/malireza/mail
↑ ↑
VG LV

بعد:
vgremove /dev/malireza

یعنی:
خود VG به نام

malireza
را حذف کن.

اما معمولاً اول باید LVهای داخلش را حذف کنی.
بعد:
pvremove /dev/sda
pvremove /dev/sdb

یعنی:
این دیسک‌ها/پارتیشن‌ها را از حالت PV خارج کن.

ترتیب حذف را حفظ کن 🧠
ساختن:
PV
↓
VG
↓
LV

حذف کردن برعکس:
LV
↓
VG
↓
PV

یعنی:
lvremove ...
vgremove ...
pvremove ...


دقیقاً به همین دلیل دستورات تو این ترتیب را دارند.
👏1
نکته
توضیح LVM چون کمی گیج کنندست به دو صورت توضیح داده شده که همدیگه رو تکمیل میکنن
فصل سوم — قسمت سی و هفتم 🐧 - پیاده‌سازی RAID

——————

1. RAID چیست؟
RAID یعنی ترکیب چند دیسک برای رسیدن به یکی از این اهداف:
افزایش سرعت ⚡️
افزایش امنیت اطلاعات 🛡
یا ترکیبی از هر دو
مثلاً اگر دو هارد 10GB داشته باشیم، می‌توانیم با RAID 1 کاری کنیم که اطلاعات روی هر دو هارد یکسان ذخیره شود.
RAID جایگزین Backup نیست.


————————-
2. بررسی RAID در لینوکس
برای دیدن وضعیت RAIDهای فعلی:
cat /proc/mdstat

اگر RAID نداشته باشیم معمولاً چیزی شبیه این می‌بینیم:
Personalities :
unused devices: <none>

——————

برای RAID نرم‌افزاری لینوکس می‌توانیم ماژول مربوطه را بارگذاری کنیم:
modprobe raid1

بررسی:
lsmod | grep raid

نکته: modprobe raid1 خودش RAID نمی‌سازد؛ فقط قابلیت RAID1 را در کرنل فعال می‌کند.

———————

4. نصب mdadm
ابزار اصلی مدیریت Software RAID در لینوکس:
Debian / Ubuntu
apt update

apt install mdadm

AlmaLinux / RHEL
dnf install mdadm

—————-

5. ساخت RAID 1
فرض کنیم دو دیسک داریم:
/dev/sdb

/dev/sdc

ابتدا بررسی:
lsblk

حالا RAID1 می‌سازیم:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

یعنی:

/dev/md0       ← دیوایس RAID
--level=1 ← RAID 1
--raid-devices=2
← دو دیسک


—————

6. بررسی وضعیت RAID
cat /proc/mdstat

یا:
mdadm --detail /dev/md0

مثلاً:
Raid Level : raid1
Raid Devices : 2
State : clean

یعنی RAID سالم است.

—————-
7. فرمت کردن RAID
RAID ساخته شده، اما هنوز فایل‌سیستم ندارد.
مثلاً:
mkfs.ext4 /dev/md0

یا:
mkfs.xfs /dev/md0

—————
8. Mount کردن RAID
ابتدا یک پوشه:
mkdir /mnt/raid

سپس:
mount /dev/md0 /mnt/raid

بررسی:
lsblk

یا:
df -h

حالا هر فایلی که داخل /mnt/raid قرار بدهیم، در ساختار RAID ذخیره می‌شود.
——————-

9. مثال واقعی RAID 1 🧠
دو هارد داریم:
sdb = 10GB
sdc = 10GB

RAID1 می‌سازیم:
        /dev/md0
RAID 1
/ \
/dev/sdb /dev/sdc
10GB 10GB

ظرفیت قابل استفاده تقریباً:
10GB

نه 20GB.
چون اطلاعات روی هر دو دیسک Mirror می‌شود.
اگر sdb خراب شود:
sdb ❌
sdc ✅

اطلاعات همچنان روی sdc وجود دارد.
—————

10. دیدن جزئیات RAID
mdadm --detail /dev/md0

برای دیدن همه RAIDهای سیستم:
mdadm --detail --scan

—————

11. اضافه کردن دیسک به RAID
فرض کنیم یک دیسک جدید داریم:
/dev/sdd

ابتدا:
mdadm --add /dev/md0 /dev/sdd

و وضعیت را بررسی می‌کنیم:
cat /proc/mdstat


——————-

12. شبیه‌سازی خرابی یک دیسک
برای اینکه به RAID بگوییم یک دیسک خراب شده:
mdadm --manage /dev/md0 --fail /dev/sdb

بررسی:
cat /proc/mdstat

حالا معمولاً می‌بینیم RAID در وضعیت degraded قرار گرفته.
——————
دیسک خراب
بعد از Fail کردن:
mdadm --manage /dev/md0 --remove /dev/sdb

حالا دیسک از RAID خارج شده.
اگر دیسک جدید جایگزین کرده باشیم:
mdadm --manage /dev/md0 --add /dev/sdd

و RAID شروع به Rebuild می‌کند.
برای مشاهده:
cat /proc/mdstat

—————

14. توقف RAID
اگر بخواهیم RAID را متوقف کنیم:
ابتدا Unmount:
umount /mnt/raid

بعد:
mdadm --stop /dev/md0

—————

15. حذف کامل RAID
بعد از Stop کردن:
mdadm --zero-superblock /dev/sdb
mdadm --zero-superblock /dev/sdc

این کار Metadata مربوط به RAID را از دیسک‌ها پاک می‌کند.
بعد می‌توانیم دوباره از دیسک‌ها برای پارتیشن‌بندی یا LVM استفاده کنیم.

—————

ترتیب کلی کار را این‌طوری حفظ کن:
دیسک‌ها
↓
mdadm
↓
RAID
↓
/dev/md0
↓
mkfs
↓
mount
↓
استفاده از فضای ذخیره‌سازی

نکته مهم: در RAID نرم‌افزاری لینوکس، mdadm ابزار اصلی مدیریت RAID است و /dev/md0 مثل یک دیسک مجازی در اختیار سیستم قرار می‌گیرد.
👏1
فصل سوم — قسمت سی و هشتم 🐧 - پیاده‌سازی df du -
جلسه آخر فصل سوم
————————-
1. Virtual Directory چیست؟
در لینوکس Virtual Directory یعنی دایرکتوری‌هایی که لزوماً یک دیسک فیزیکی جدا نیستند، اما سیستم‌عامل آن‌ها را در ساختار درختی فایل‌ها به شکل یک دایرکتوری در اختیار ما قرار می‌دهد.
ساختار کلی لینوکس را می‌توان با این دستور دید:
man hier

مثلاً:
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib64
├── proc
├── sys
├── tmp
├── usr
└── var


نکته مهم:
همه این مسیرها لزوماً روی یک پارتیشن یا دیسک نیستند.
——————

2. تقسیم ساختار بین دو دیسک
مثلاً فرض کن:
Disk 1
/
├── home
├── etc
└── var

Disk 2
└── lib64

کاربر همچنان فقط این را می‌بیند:
/
└── lib64

ولی پشت صحنه /lib64 می‌تواند روی یک دیسک جدا باشد.
این همان قدرت Mount در لینوکس است.

——————-

3. mount --bind چیست؟
با --bind می‌توانیم یک دایرکتوری موجود را در یک مسیر دیگر هم در دسترس قرار دهیم.
مثلاً:
mkdir /alireza

حالا:
mount --bind /lib64 /alireza

حالا اگر بزنیم:
ls /alireza

محتوای /lib64 را می‌بینیم.
یعنی:
/lib64
│
└──────► /alireza

مهم: این دستور فایل‌ها را کپی نمی‌کند؛ فقط همان دایرکتوری را در یک مسیر دیگر قابل دسترسی می‌کند.

برای حذف این Bind Mount:
umount /alireza


—————-

4. df چیست؟
df مخفف Disk Free است.
به ما می‌گوید فایل‌سیستم‌ها چقدر فضا دارند و چقدر از آن استفاده شده است.
df

خواناتر:
df -h

مثلاً:
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1 20G 8G 12G 40% /
/dev/sdb1 50G 20G 30G 40% /home

یعنی:
/dev/sda1 → حجم 20GB
8GB → استفاده شده
12GB → آزاد
/ → محل Mount
🧠 حفظ کن:
df می‌پرسد: «این دیسک/فایل‌سیستم چقدر جا دارد؟»


———————

5. du چیست؟
du مخفف Disk Usage است.
برخلاف df، می‌آید بررسی می‌کند فایل‌ها و دایرکتوری‌ها چقدر فضا مصرف کرده‌اند.
مثلاً:
du /home

خواناتر:
du -h /home

برای جمع کل:
du -sh /home

مثلاً:
8.2G    /home

یعنی /home حدود 8.2GB فضا مصرف کرده.

—————
6. فرق df و du خیلی ساده 🧠
فرض کن یک انبار داری.
df
می‌پرسد:
کل انبار چقدر جا دارد و چقدرش پر شده؟

df -h

du
می‌پرسد:
چه چیزی داخل انبار این‌همه فضا گرفته؟

du -sh /home/*

پس:
df → وضعیت Filesystem
du → مصرف فایل‌ها و Directoryها


—————

چند دستور مهم du
حجم یک پوشه:
du -sh /var

حجم تک‌تک محتویات:
du -sh /var/*

مرتب‌سازی بر اساس حجم:
du -sh /var/* | sort -h

این یکی در عیب‌یابی خیلی کاربردی است؛ مثلاً وقتی سرور می‌گوید Disk Full، سریع می‌توانی بفهمی کدام پوشه بیشترین فضا را گرفته.

———————
👏1
خب سلام مجدد
فصل سه رو تموم کردیم
وارد فصل چهارم میشیم به امید خدا
👏2👍1
فصل چهارم - قسمت سی و نهم - مدیریت کردن فایل ها - intro
——————

بخش اول مدیریت فایل
بخش دوم فشرده سازی و ارشیو کردن و فایل و لینک
بخش سوم سطح دسترسی به فایل ها
بهش چهارم فرمان های جستجور در لینوکس



🧠 نقشه فصل چهار
فصل ۴
│
├── 1. مدیریت فایل و Directory
│ ├── cp
│ ├── mv
│ ├── rm
│ ├── mkdir
│ └── stat / file
│
├── 2. Archive / Compression / Link
│ ├── tar
│ ├── gzip
│ ├── bzip2
│ ├── xz
│ ├── zip
│ └── ln
│
├── 3. Permission
│ ├── chmod
│ ├── chown
│ ├── chgrp
│ └── umask
│
└── 4. Search
├── find
├── locate
├── which
├── whereis
└── grep

این فصل خیلی مهمه؛ مخصوصاً Permission + find + tar چون هم در کار واقعی لینوکس زیاد استفاده می‌شن و هم برای LPIC مهم‌اند
👏1
فصل چهارم — قسمت چهلم 🐧
مدیریت فایل‌ها — بخش اول
————

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

—————--

1. ساخت فایل با touch
ساده‌ترین روش ساخت یک فایل خالی:
touch alireza

حالا:
ls

فایل alireza را می‌بینی.
touch
اگر فایل وجود نداشته باشد آن را ایجاد می‌کند؛ اگر وجود داشته باشد معمولاً Timestamp آن را تغییر می‌دهد.

————

2. ساخت فایل با ویرایشگر
مثلاً با nano:
nano alireza2

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

———————

3. ساخت فایل با >
این هم روشی است که قبلاً یاد گرفتیم:
> alireza3

یک فایل خالی می‌سازد.
یا:
echo "Hello Linux" > alireza3

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

⚠️ اگر فایل از قبل وجود داشته باشد، > محتوای قبلی را پاک و جایگزین می‌کند.
برای اضافه کردن متن:
echo "New line" >> alireza3

—————-

4. ساخت فایل با cp و mv
مثلاً:
cp test.txt backup.txt

یک فایل جدید به نام backup.txt ایجاد می‌شود.
اما mv معمولاً فایل جدید ایجاد نمی‌کند؛ فایل را جابه‌جا یا Rename می‌کند:
mv passwd alireza88

یعنی اسم passwd به alireza88 تغییر می‌کند.

————-
5. pwd
نمایش مسیر فعلی:
pwd

مثلاً:
/home/alireza

یعنی الان در این Directory هستی.

——————

6. ls
نمایش محتویات Directory:
ls

نمایش فایل‌های مخفی:
ls -a

نمایش جزئیات:
ls -l

هر دو:
ls -la


———————-

Wildcard چیست؟ ⭐️
این قسمت خیلی مهمه.
* یعنی:
هر تعداد کاراکتر

مثلاً:
ls *.txt

یعنی:
همه فایل‌هایی که با

.txt
تمام می‌شوند.

مثلاً:
ali.txt
test.txt
password.txt


یک مثال دیگر:
ls c*

یعنی فایل‌هایی که با c شروع می‌شوند:
cat
config
cpuinfo

————-

8. ? چیست؟
? یعنی دقیقاً یک کاراکتر.
مثلاً:
ls b?t

می‌تواند پیدا کند:
bat
bet
bit
bot

ولی:
boot

را پیدا نمی‌کند، چون بین b و t سه کاراکتر داریم.

—————-

دو تا ?
ls b??d

یعنی:
b + دو کاراکتر + d

مثلاً:
bond
bird
bard


—————-

9. [ ] چیست؟
برای انتخاب یک کاراکتر از بین گزینه‌های مشخص:
ls b[eio]t

یعنی:
b + یکی از e/i/o + t

پس:
bet
bit
bot

را پیدا می‌کند.
اما:
bat

نه.

——————

10. ترکیب Wildcard با mv
مثلاً:
mv *.txt ../

یعنی:
تمام فایل‌های

.txt
را به Directory یک سطح بالاتر منتقل کن.

.. یعنی Directory والد.

——————

11. ساخت Directory با mkdir
mkdir test

یک Directory به نام test می‌سازد.

——————-

ساخت چند Directory تو در تو
mkdir -p 1/2/3

نتیجه:
1/

└── 2/

    └── 3/

-p باعث می‌شود Directoryهای والد هم در صورت نبودن ساخته شوند.

——————

12. حذف Directory
برای Directory خالی:
rmdir test

⚠️ rmdir فقط Directory خالی را حذف می‌کند.
اگر داخلش فایل داشته باشد، خطا می‌دهد.
برای حذف Directory همراه محتویات:
rm -r test

——————

13. کپی Directory با cp
برای کپی کردن Directory باید -r استفاده کنیم:
cp -R /etc/ssh /

یعنی Directory ssh و محتویاتش را به / کپی کن.
در نتیجه:
/etc/ssh

به اینجا کپی می‌شود:
/ssh

—————

14. حذف فایل‌ها با rm
یک فایل:
rm test.txt

چند فایل:
rm file1 file2 file3

با Wildcard:
rm *.txt


——————-
⚠️ دستور خطرناک
rm -rf *

یعنی:
تمام فایل‌ها و Directoryهای معمولی موجود در مسیر فعلی را به‌صورت بازگشتی و بدون سؤال حذف کن.

خیلی مراقب این دستور باش.
قبلش حتماً:
pwd

ls

را بزن تا مطمئن شوی در مسیر درست هستی.
و یادت باشد * معمولاً فایل‌های مخفی که با . شروع می‌شوند را شامل نمی‌شود.
—————-

🧠 جمع‌بندی قسمت ۴۰
ساخت:
touch file
nano file
> file
echo "text" > file
mkdir dir
mkdir -p 1/2/3

دیدن:
pwd
ls
ls -la

کپی و انتقال:
cp file backup
cp -r dir backup
mv file newname

حذف:
rm file
rmdir dir
rm -r dir

Wildcard:
* → هر تعداد کاراکتر
? → دقیقاً یک کاراکتر
[abc] → یکی از a یا b یا c
مثلاً:
ls *.txt
ls b?t
ls b??d
ls b[eio]t
این قسمت در واقع پایه‌ی مدیریت فایل در لینوکسه؛ قسمت بعدی می‌تونیم بریم سراغ file، stat و تفاوت دقیق فایل معمولی، Directory، Link و بقیه نوع فایل‌ها.
👏1
فصل چهارم — قسمت چهل‌ویکم 🐧
فشرده‌سازی فایل‌ها و ابزارهای آن
———————-

در لینوکس چند ابزار معروف برای کم کردن حجم فایل‌ها داریم:

gzip
bzip2
xz
zip

نکته: معمولاً xz بیشترین فشرده‌سازی را بین این‌ها انجام می‌دهد، ولی ممکن است کندتر باشد. پس «بهتر» بودن به سرعت و میزان فشرده‌سازی بستگی دارد.

————————

1️⃣ gzip
مثلاً:
cp syslog syslog1
gzip syslog1

حالا:
syslog1.gz

ساخته می‌شود و فایل اصلی syslog1 حذف می‌شود.
برای خارج کردن از حالت فشرده:
gunzip syslog1.gz

یا:
gzip -d syslog1.gz


——————-

2️⃣ bzip2
cp syslog syslog2
bzip2 syslog2

نتیجه:
syslog2.bz2

باز کردن:
bunzip2 syslog2.bz2

یا:
bzip2 -d syslog2.bz2


————————

3️⃣ xz
cp syslog syslog3
xz syslog3

نتیجه:
syslog3.xz

باز کردن:
unxz syslog3.xz

یا:
xz -d syslog3.xz


———————

4️⃣ zip
cp syslog syslog4
zip syslog4.zip syslog4

اینجا تفاوت مهمی داریم:
syslog4
syslog4.zip

فایل اصلی باقی می‌ماند.
برای خارج کردن:
unzip syslog4.zip

——————

👀 دیدن محتویات بدون خارج کردن از حالت فشرده
این خیلی کاربردیه:
gzip
zcat file.gz

مثلاً:
zcat syslog1.gz

bzip2
bzcat file.bz2

xz
xzcat file.xz

مثلاً:
xzcat syslog3.xz

یعنی لازم نیست اول فایل را از حالت فشرده خارج کنیم.
———————
⚡️ چند دستور کاربردی
فقط حجم فایل‌ها:
ls -lh

تعداد خطوط:
wc -l file

نمایش حجم خوانا:
ls -lh

—————-

🧠 خلاصه برای حفظ کردن
gzip  → .gz   → gunzip
bzip2 → .bz2 → bunzip2
xz → .xz → unxz
zip → .zip → unzip

و برای خواندن مستقیم:
.gz   → zcat
.bz2 → bzcat
.xz → xzcat

یک نکته مهم: این ابزارها عمدتاً برای فشرده‌سازی یک فایل هستند. برای اینکه چندین فایل و پوشه را یکجا بسته‌بندی کنیم، معمولاً در قسمت بعد می‌رسیم به tar؛ مثلاً tar.gz.
👏1
فصل چهارم — قسمت چهل‌ودوم و قسمت چهل‌وسوم 🐧
آرشیو کردن و Backup در لینوکس

———————

📦 آرشیو یعنی چی؟
فرض کن داخل یک پوشه 100 تا فایل داری. می‌خواهی همه را یکجا نگه داری یا منتقل کنی.
به‌جای اینکه 100 فایل را جداگانه جابه‌جا کنی، می‌توانی آن‌ها را داخل یک فایل قرار بدهی.
مثلاً:
project/
├── a.txt
├── b.txt
├── c.txt
└── image.png

تبدیل می‌شود به:
project.tar

⚠️ آرشیو با فشرده‌سازی فرق دارد.
tar → چند فایل را داخل یک فایل جمع می‌کند.
gzip / bzip2 / xz → حجم فایل را کم می‌کنند.
ترکیبشان → مثلاً tar.gz

——————————-

1️⃣ tar — مهم‌ترین ابزار
tar برای آرشیو کردن فایل‌ها و پوشه‌ها استفاده می‌شود.
ساخت آرشیو
مثلاً:
tar -cvf backup.tar /home/alireza

معنی گزینه‌ها:
-c → create      ساخت آرشیو
-v → verbose نمایش فایل‌ها
-f → file نام فایل آرشیو

حالا داریم:
backup.tar

دیدن محتویات
tar -tf backup.tar

-t یعنی لیست کردن محتویات.
خارج کردن آرشیو
tar -xvf backup.tar

-x یعنی Extract.


مهم‌ترین گزینه‌های tar
-c   Create       ساخت آرشیو
-x Extract خارج کردن
-t List نمایش محتویات
-v Verbose نمایش جزئیات
-f File مشخص کردن نام فایل
-z gzip استفاده از gzip
-j bzip2 استفاده از bzip2
-J xz استفاده از xz
-C Change dir مشخص کردن محل استخراج


4️⃣ استخراج در یک مسیر خاص
مثلاً:
mkdir /backup
tar -xvf backup.tar -C /backup

یعنی محتویات را داخل /backup استخراج کن.


————————-

🔥 tar + gzip
حالا می‌توانیم آرشیو را همزمان فشرده کنیم:
tar -czvf backup.tar.gz /home/alireza

-z یعنی استفاده از gzip.
باز کردن:
tar -xzvf backup.tar.gz


——————-

tar + bzip2
tar -cjvf backup.tar.bz2 /home/alireza

باز کردن:
tar -xjvf backup.tar.bz2


——————

tar + xz
tar -cJvf backup.tar.xz /home/alireza

باز کردن:
tar -xJvf backup.tar.xz

🧠 این سه تا را حفظ کن:
tar.gz   → z
tar.bz2 → j
tar.xz → J


————————-

2️⃣ cpio
cpio هم برای آرشیو کردن فایل‌ها استفاده می‌شود، ولی روش کارش کمی متفاوت است.
مثلاً:
find /home/alireza -type f | cpio -ov > backup.cpio

اینجا:
find
↓
فایل‌ها را پیدا می‌کند
↓
cpio
↓
آنها را داخل backup.cpio قرار می‌دهد

برای استخراج:
cpio -iv < backup.cpio

گزینه‌ها:
-o → ساخت آرشیو
-i → استخراج
-v → نمایش فایل‌ها


مثال واقعی
فرض کن:
/home/alireza/
├── a.txt
├── b.txt
└── c.txt

می‌زنیم:
find /home/alireza -type f | cpio -ov > backup.cpio

حالا یک فایل داریم:
backup.cpio

نکته: cpio را بیشتر در سیستم‌های قدیمی، بکاپ‌ها و بعضی ابزارهای سیستمی می‌بینی؛ برای کارهای معمول امروزی معمولاً tar کاربردی‌تر است.

—————————

3️⃣ dd — کپی سطح پایین
اینجا یک تفاوت خیلی مهم داریم.
tar با فایل‌ها و پوشه‌ها کار می‌کند.
ولی dd می‌تواند داده را بلوک‌به‌بلوک کپی کند.
مثلاً یک دیسک داریم:
/dev/sda

می‌توانیم از آن Image بگیریم:
dd if=/dev/sda of=/backup/sda.img

یعنی:
if = input file
of = output file

پس:
/dev/sda
↓
↓ dd
↓
sda.img

برگرداندن Image
dd if=/backup/sda.img of=/dev/sda


⚠️ این دستور خیلی خطرناک است؛ اگر of را اشتباه بزنی، ممکن است کل دیسک را overwrite کنی.
——————

💾 یک مثال کاربردی دیگر با dd
گرفتن Image از یک فلش:
dd if=/dev/sdb of=flash.img bs=4M status=progress

برگرداندن Image به فلش:
dd if=flash.img of=/dev/sdb bs=4M status=progress

bs=4M یعنی داده‌ها را در بلوک‌های ۴ مگابایتی منتقل کن.
status=progress هم میزان پیشرفت را نشان می‌دهد.
——————-

یک مثال خیلی ساده برای ذهن:
tar:
«این 500 تا فایل رو بذار داخل یک بسته.»

cpio:
«فایل‌هایی که

find
پیدا کرده رو بگیر و آرشیو کن.»

dd:
«هرچی روی این دیسک هست، دقیقاً بلوک‌به‌بلوک کپی کن.»

و یادت باشه:
tar → فایل و پوشه

cpio → فایل‌ها + ورودی از pipe

dd → دیسک، پارتیشن، Image و داده خام

برای دوره LPIC، tar از این سه تا مهم‌تر و کاربردی‌تره و حتماً باید گزینه‌های c / x / t / v / f / z / j / J رو مسلط بشی.
🔥1👏1
🔥 حالا snar چیست؟
اینجا می‌رسیم به قسمت مهم Incremental Backup.
فرض کن یک سرور داری:
/home/
├── ali.txt
├── test.txt
├── photo.jpg
└── video.mp4

امروز از همه Backup می‌گیری.
فردا فقط ali.txt تغییر کرده.
آیا منطقیه دوباره کل 100GB رو Backup کنیم؟
❌ نه.
اینجا Incremental Backup استفاده می‌کنیم.
————————-

snar. چیست؟
فایل .snar یک Snapshot File برای tar است.
tar داخل آن اطلاعاتی درباره وضعیت فایل‌ها نگه می‌دارد تا در Backup بعدی بفهمد:
«کدام فایل‌ها از دفعه قبل تغییر کرده‌اند؟»

مثلاً:
tar -cvf backup-full.tar --listed-incremental=backup.snar /home

اینجا:
backup-full.tar
↓
Backup

backup.snar
↓
اطلاعات وضعیت فایل‌ها



Backup دوم
فرض کن فردا فقط یک فایل تغییر کرده:
tar -cvf backup-inc.tar --listed-incremental=backup.snar /home

این بار tar با استفاده از backup.snar متوجه می‌شود چه چیزهایی نسبت به Backup قبلی تغییر کرده‌اند و فقط همان‌ها را وارد Backup می‌کند.


——————

🧠 مثال واقعی
روز اول:
100GB اطلاعات

Backup:
backup-full.tar

روز دوم:
فقط 2GB تغییر کرده

Backup:
backup-inc.tar

پس به جای اینکه دوباره 100GB ذخیره کنیم، فقط تغییرات را ذخیره می‌کنیم.

——————-

⚠️ یک نکته خیلی مهم
فایل .snar خودش Backup اطلاعات نیست.
یعنی:
backup.tar     ← اطلاعات Backup
backup.snar ← اطلاعات لازم برای تشخیص تغییرات

اگر .snar را گم کنی، tar وضعیت قبلی را نمی‌داند و مدیریت Incremental Backup به مشکل می‌خورد.

——————

🔥 Full و Incremental
در tar می‌توانیم سطح Backup را هم مشخص کنیم.
Full Backup
tar -cvf full.tar \
--listed-incremental=backup.snar \
/home



Incremental Backup
tar -cvf inc.tar \
--listed-incremental=backup.snar \
/home

در عمل tar با توجه به فایل snapshot تشخیص می‌دهد چه چیزهایی باید در آرشیو بعدی قرار بگیرند.
❤1👏1
فصل چهارم — قسمت چهل و چهارم 🐧
انواع لینک ها درلینوکس


————————-

🔗 Link در لینوکس
لینک در لینوکس یعنی یک راه دسترسی به یک فایل از طریق نام یا مسیر دیگر.
مثلاً یک فایل داریم:
touch alireza

حالا می‌توانیم یک لینک به آن بسازیم که اسم دیگری داشته باشد.
—————————-
1️⃣ inode چیست؟
هر فایل در لینوکس یک inode دارد.
inode اطلاعاتی مثل این‌ها را نگه می‌دارد:
مالک فایل
سطح دسترسی
اندازه فایل
زمان‌ها
محل بلوک‌های فایل روی دیسک
تعداد لینک‌ها
اما اسم فایل داخل inode ذخیره نمی‌شود.
می‌توانی inode را ببینی:
ls -i alireza

مثلاً:
123456 alireza

یعنی alireza به inode شماره 123456 اشاره می‌کند.

————————-

2️⃣ stat
برای دیدن اطلاعات کامل فایل:
stat alireza

مثلاً:
Access: 2026-08-18 18:00
Modify: 2026-08-18 17:30
Change: 2026-08-18 17:30
Birth: 2026-08-18 17:30


چهار زمان مهم:
Access — atime
آخرین باری که فایل خوانده/دسترسی شده.
Modify — mtime
آخرین باری که محتوای فایل تغییر کرده.
مثلاً:
echo hello >> alireza

Change — ctime
آخرین تغییر در Metadata فایل.
مثلاً:
chmod 600 alireza

محتوا تغییر نکرده، ولی Metadata تغییر کرده؛ پس ctime تغییر می‌کند.
Birth — btime
زمان ایجاد فایل؛ البته پشتیبانی و نمایش آن به فایل‌سیستم و سیستم‌عامل بستگی دارد.

———————

3️⃣ Hard Link
فرض کن:
echo "Hello" > alireza

حالا:
ln alireza ali

دو اسم داریم:
alireza

ali

  ↓

inode مشترک

  ↓

محتوای فایل

بررسی:
ls -li alireza ali

مثلاً:
12345 -rw-r--r-- 2 root root ... alireza
12345 -rw-r--r-- 2 root root ... ali

می‌بینی که inode هر دو یکی است.
یعنی ali یک کپی از فایل نیست؛ یک نام دیگر برای همان فایل است.

———————

4️⃣ Soft Link / Symbolic Link
حالا:
ln -s alireza ali

ساختار:
ali
↓
alireza
↓
inode
↓
datadata

این بار ali خودش یک فایل مستقل است که مسیر فایل اصلی را نگه می‌دارد.
ببین:
ls -l

مثلاً:
ali -> alireza

اگر:
echo "Bye" >> ali

محتوای alireza هم تغییر می‌کند.
چون هر دو به همان inode و همان داده اشاره می‌کنند.

———————-
مثال واقعی
اگر:
ln alireza ali

و بعد:
rm alireza

ali هنوز فایل را دارد.
اما اگر:
ln -s alireza ali
rm alireza

حالا ali تبدیل به Broken Symbolic Link می‌شود.
——————-

5️⃣ فرمان ln

Hard Link
ln alireza ali



Soft Link
ln -s alireza ali


————————-

6️⃣ readlink
برای فهمیدن لینک به چه چیزی اشاره می‌کند:
readlink alireza43439

مثلاً:
alireza

اگر بخواهی مسیر کامل مقصد را ببینی:
readlink -f alireza43439

مثلاً:
/home/alireza

——————

🎯 برای حفظ کردن
Hard Link:
«اسم دوم برای همان فایل»

Soft Link:
«میانبر/آدرس به فایل دیگر»

inode:
«شناسه و اطلاعات اصلی فایل در فایل‌سیستم»

stat:
«اطلاعات و زمان‌های مهم فایل»

readlink:
«این لینک به کجا اشاره می‌کند؟»
❤1👏1
فصل چهارم — قسمت چهل و پنجم 🐧
سطح دسترسی ها در لینوکس

—————-
🔐 سطح دسترسی‌ها در لینوکس
در لینوکس هر فایل و دایرکتوری مشخص می‌کند چه کسی اجازه دارد چه کاری روی آن انجام دهد.
مثلاً:
ls -l sana.txt

ممکن است ببینی:
-rw-r--r-- 1 alireza users 120 Aug 18 18:00 sana.txt

بخش مهم اول:
-rw-r--r--

—————-

1️⃣ سه سطح مالکیت
لینوکس دسترسی‌ها را برای سه گروه بررسی می‌کند:
Owner   → صاحب فایل
Group → گروه فایل
Others → بقیه کاربران


مثلاً:
-rw-r--r--
│ │ │
│ │ └── Others
│ └───── Group
└──────── Owner


——————-

2️⃣ سه نوع دسترسی
سه Permission اصلی داریم:
r = Read    خواندن
w = Write نوشتن
x = Execute اجرا

برای فایل
r → محتویات فایل را بخواند
w → محتویات فایل را تغییر دهد
x → فایل را اجرا کند

برای دایرکتوری
اینجا یک نکته خیلی مهم داریم:
r → لیست محتویات دایرکتوری
w → ایجاد/حذف/تغییر نام فایل‌ها
x → ورود/دسترسی به داخل دایرکتوری


—————————-

3️⃣ تغییر مالک فایل
دستور درست:
chown

نه chowan.
مثلاً:
sudo chown alireza sana.txt

یعنی مالک فایل شود:
alireza


——————

تغییر مالک و گروه همزمان
sudo chown alireza:users sana.txt

یعنی:
Owner → alireza

Group → users

————-

4️⃣ تغییر فقط Group
برای تغییر گروه از:
chgrp

استفاده می‌کنیم:
sudo chgrp users sana.txt

یا با chown:
sudo chown :users sana.txt


—————

5️⃣ Permission عددی
احتمالاً این‌ها را زیاد می‌بینی:
000
644
755
777

ارزش Permissionها:
r = 4
w = 2
x = 1

پس:
rwx = 4+2+1 = 7
rw- = 4+2 = 6
r-x = 4+1 = 5
r-- = 4 = 4
-w- = 2
--x = 1
--- = 0

مثلاً:
chmod 755 test

یعنی:
Owner  → rwx = 7
Group → r-x = 5
Others → r-x = 5

پس:
755 = rwxr-xr-x


—————-
چند Permission مهم

000 → هیچ دسترسی
600 → rw-------
644 → rw-r--r--
700 → rwx------
755 → rwxr-xr-x
777 → rwxrwxrwx


مثلاً:
chmod 644 sana.txt


——————

6️⃣ umask چیست؟
umask مشخص می‌کند فایل یا دایرکتوری جدید به‌صورت پیش‌فرض چه Permissionهایی نداشته باشد.
ببین:
umask

مثلاً:
0022

یعنی سیستم هنگام ساخت فایل/دایرکتوری، بعضی دسترسی‌ها را حذف می‌کند.
مثلاً معمولاً:
File       → 666

Directory  → 777

با umask 022:
666 - 022 → 644

777 - 022 → 755

پس معمولاً:
touch test

می‌تواند چیزی شبیه:
-rw-r--r--

ایجاد کند.
و:
mkdir testdir

چیزی شبیه:
drwxr-xr-x

ایجاد می‌کند.
umask
Permission اضافه نمی‌کند؛ فقط Permissionهای پیش‌فرض را محدود می‌کند.


———————

7️⃣ which چیست؟
which مسیر اجرای یک command را پیدا می‌کند.
مثلاً:
which ls

ممکن است:
/usr/bin/ls

برگرداند.
یا:
which python3

مثلاً:
/usr/bin/python3



—————

🔥 8️⃣ SUID
SUID یعنی:
یک فایل اجرایی با Permission صاحب فایل اجرا شود، نه با Permission کاربری که آن را اجرا کرده.

مثال معروف:
ls -l /usr/bin/passwd

ممکن است ببینی:
-rwsr-xr-x

اینجا به‌جای:
-rwx

داریم:
-rws

این s یعنی SUID فعال است.
چرا؟
چون کاربر عادی باید بتواند رمز عبور خودش را تغییر دهد، در حالی که فایل‌های مربوط به تغییر رمز عبور نیاز به دسترسی‌های خاص دارند.

—————

فعال کردن SUID
chmod u+s file

یا عددی:
chmod 4755 file

عدد:
4xxx → SUID


—————

🔥 9️⃣ SGID
SGID دو کاربرد دارد، ولی برای دایرکتوری‌ها کاربرد بسیار مهمی دارد.
در دایرکتوری اگر SGID فعال باشد:
فایل‌های جدیدی که داخل آن ساخته می‌شوند، گروه دایرکتوری را به ارث می‌برند.

مثلاً:
mkdir project
chown :developers project
chmod 2775 project

حالا:
project/

گروهش developers است.
اگر ali داخل آن فایل بسازد:
project/test.txt

گروه فایل هم می‌تواند:
developers

باشد.
فعال کردن SGID:
chmod g+s project

یا:
chmod 2775 project

عدد:
2xxx → SGID

—————-

🔥 10️⃣ Sticky Bit
Sticky Bit بیشتر روی دایرکتوری‌های اشتراکی استفاده می‌شود.
مثال معروف:
ls -ld /tmp

معمولاً چیزی شبیه:
drwxrwxrwt

آخرش:
t

می‌بینی.
یعنی کاربران مختلف می‌توانند داخل /tmp فایل بسازند، اما هر کاربر معمولاً نمی‌تواند فایل کاربر دیگری را حذف کند.
مثلاً:
/tmp
├── ali.txt ← Ali
├── reza.txt ← Reza
└── test.txt ← Test


Ali نمی‌تواند همین‌طوری reza.txt را حذف کند.
فعال کردن Sticky Bit:
chmod +t directory

یا:
chmod 1777 directory

عدد:
1xxx → Sticky Bit



——————

🎯 خلاصه کل قسمت
Owner  → صاحب
Group → گروه
Others → بقیه

r = 4
w = 2
x = 1

chmod → تغییر Permission
chown → تغییر Owner
chgrp → تغییر Group
umask → Permission پیش‌فرض
which → پیدا کردن مسیر command

4xxx → SUID
2xxx → SGID
1xxx → Sticky Bit



و یک نکته مهم برای LPIC: Permission روی فایل و دایرکتوری یک معنی کاملاً یکسان ندارد؛ مخصوصاً x روی دایرکتوری یعنی امکان عبور/دسترسی به آن، که بعداً در بحث Permissionها خیلی به کارت می‌آید.
👏1
فصل چهارم — قسمت چهل و ششم 🐧
سطح
دسترسی با ACL

———————

تا اینجا با rwx کار کردیم؛ ولی یک مشکل داریم:
فرض کن فایل report.txt این شکلی باشد:
-rw-r----- 1 ali developers report.txt

یعنی:
صاحب فایل → ali
گروه → developers
بقیه → هیچ دسترسی ندارند.
حالا می‌خواهیم یک کاربر خاص به اسم reza هم فقط بتواند فایل را بخواند.
اینجاست که ACL به درد می‌خورد.

—————-

ACL = Access Control List
یعنی می‌توانیم برای کاربرها و گروه‌های خاص، دسترسی جداگانه تعریف کنیم؛ بدون اینکه ساختار اصلی owner/group/other را خراب کنیم.
مثال واقعی 🧠
فرض کن:
report.txt
│
├── ali → rw
├── developers → r
├── reza → r
└── سایر کاربران → ---


با chmod به‌تنهایی این مدل مدیریت دقیق سخت است، ولی ACL دقیقاً برای همین ساخته شده.

—————————-

1️⃣ دیدن ACL
فرمان:
getfacl report.txt

مثلاً:
# file: report.txt
# owner: ali
# group: developers
user::rw-
user:reza:r--
group::r--
mask::r--
other::---

قسمت مهم:
user:reza:r--

یعنی کاربر reza اجازه خواندن فایل را دارد.

————————

2️⃣ اضافه کردن ACL برای یک کاربر
مثلاً:
setfacl -m u:reza:r report.txt

یا:
setfacl -m u:reza:r-- report.txt

u یعنی user.
حالا:
getfacl report.txt

و می‌بینیم:
user:reza:r--



——————-

3️⃣ دادن دسترسی کامل به یک کاربر
setfacl -m u:reza:rwx report.txt

یعنی reza:
r → خواندن

w → نوشتن

x → اجرا

را دارد.

——————-

4️⃣ حذف ACL یک کاربر
setfacl -x u:reza report.txt

یعنی ACL مربوط به reza حذف شود.

———-

5️⃣ ACL برای گروه
مثلاً گروه security را می‌خواهیم به فایل دسترسی بدهیم:
setfacl -m g:security:r-- report.txt

g یعنی group.

—————-

6️⃣ حذف ACL گروه
setfacl -x g:security report.txt

7️⃣ ACL روی دایرکتوری
اینجا ACL خیلی جذاب‌تر می‌شود.
فرض کن:
mkdir /project

می‌خواهیم reza داخل این دایرکتوری بتواند فایل ایجاد کند:
setfacl -m u:reza:rwx /project

حالا reza روی /project دسترسی:
r → دیدن محتویات

w → ایجاد/حذف فایل

x → ورود به دایرکتوری

دارد.

————————

8️⃣ ACL پیش‌فرض ⭐️
یک نکته مهم:
اگر روی یک دایرکتوری ACL بگذاری، فایل‌هایی که بعداً داخلش ساخته می‌شوند لزوماً ACL موردنظر را نمی‌گیرند.
برای این کار از Default ACL استفاده می‌کنیم:
setfacl -d -m u:reza:rwx /project

حالا فایل‌ها و دایرکتوری‌های جدید داخل /project ACL پیش‌فرض را به ارث می‌برند.
دیدنش:
getfacl /project

مثلاً:
default:user:reza:rwx

_____________

9️⃣ Mask چیست؟ ⚠️
در ACL یک مفهوم مهم داریم:
mask

Mask حداکثر دسترسی‌ای را که برای کاربرهای ACL و گروه‌ها می‌توان اعمال کرد مشخص می‌کند.
مثلاً:
setfacl -m u:reza:rwx,m:r-- report.txt

ما به reza گفتیم rwx، ولی mask فقط r-- است.
پس دسترسی مؤثر reza می‌شود:
r--

برای دیدن دسترسی مؤثر:
getfacl report.txt

ممکن است ببینی:
user:reza:rwx        #effective:r--

یعنی ACL نوشته rwx ولی Mask اجازه بیشتر از r-- نمی‌دهد.

————————

🔟 حذف تمام ACLها
اگر بخواهیم ACLهای اضافی فایل را پاک کنیم:
setfacl -b report.txt

-b یعنی حذف ACLهای اضافی.

——————————————————-
نصب ابزار ACL
اگر setfacl یا getfacl نداشتی:
Debian / Ubuntu
apt install acl

RHEL / Fedora
dnf install acl


————————————-
👏1
فصل چهارم — قسمت آخر - قسمت چهل و هفتم 🐧
جستجو در لینوکس

——————


در لینوکس چند فرمان مهم برای پیدا کردن برنامه، فایل و مسیر فایل‌ها داریم. مهم‌ترین‌ها:
which

whereis

locate

find


—————-

1️⃣ which — برنامه از کجا اجرا می‌شود؟
وقتی می‌زنیم:
which bash

مثلاً:
/usr/bin/bash

یعنی وقتی بنویسیم:
bash

سیستم از این فایل استفاده می‌کند.
مثال:
which python3
which ls
which nano
which ssh

🧠 which = این برنامه‌ای که اجرا می‌کنم کجاست؟


——————-

2️⃣ whereis — اطلاعات بیشتری درباره برنامه
whereis bash

ممکن است بدهد:
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz

یعنی می‌تواند محل‌های مختلف مربوط به برنامه، مثل:
فایل اجرایی
Source
man page
را نشان دهد.
مثلاً:
whereis ls
whereis ssh
whereis python3

🧠 فرق ساده:
which   → مسیر برنامه‌ای که اجرا می‌شود
whereis → محل‌های مختلف مرتبط با برنامه



—————————

3️⃣ locate — جستجوی سریع فایل ⚡️
مثلاً دنبال passwd هستیم:
locate passwd

ممکن است کلی نتیجه بدهد:
/etc/passwd
/etc/pam.d/passwd
/usr/bin/passwd
/usr/share/man/man1/passwd.1.gz
...


مزیت locate این است که خیلی سریع است.
چرا؟
چون معمولاً از یک Database استفاده می‌کند و کل دیسک را همان لحظه نمی‌گردد.

———————

4️⃣ find — حرفه‌ای‌ترین جستجو 🔥
find خودش واقعاً فایل‌سیستم را می‌گردد و می‌توانی شرط برای جستجو تعیین کنی.
ساختار کلی:
find [مسیر] [شرط]

مثلاً:
find /etc -name passwd

یعنی:
داخل

/etc
بگرد و فایلی به نام

passwd
پیدا کن.


———————

پیدا کردن فایل با اسم
find / -name "test.txt"

یا:
find /home -name "*.txt"

یعنی تمام فایل‌های .txt داخل /home.

—————

جستجو بدون حساسیت به حروف
find /home -iname "alireza.txt"

-iname نسبت به بزرگ/کوچک بودن حروف حساس نیست.

———————

پیدا کردن دایرکتوری
find /home -type d -name "test"

d یعنی:
directory

———-

find /home -type f -name "*.txt"

f یعنی:
file


——————

پیدا کردن فایل بر اساس حجم
مثلاً فایل‌های بزرگ‌تر از 100MB:
find / -type f -size +100M

یا فایل‌های کوچک‌تر از 10MB:
find / -type f -size -10M


——————-

پیدا کردن فایل بر اساس زمان
مثلاً فایل‌هایی که در 1 روز گذشته تغییر کرده‌اند:
find /home -type f -mtime -1

یا:
find /home -type f -mtime +30

یعنی فایل‌هایی که بیشتر از 30 روز از آخرین تغییرشان گذشته.

——————-

پیدا کردن فایل و اجرای دستور روی آن ⭐️
اینجا find خیلی قدرتمند می‌شود.
مثلاً:
find /tmp -type f -name "*.log" -delete

یعنی:
فایل‌های

.log
داخل

/tmp
را پیدا کن و حذف کن.

⚠️ این مدل دستورها را روی مسیرهای مهم مثل / بدون بررسی اجرا نکن.

——————-

ترکیب find با exec
مثلاً:
find /tmp -type f -name "*.log" -exec ls -lh {} \;

اینجا:

{} 
↓
فایلی که find پیدا کرده



و:

\;
↓
پایان دستور exec



————————

فصل چهارم هم با همین مفاهیم بسته می‌شود: مدیریت فایل → فشرده‌سازی → آرشیو → لینک‌ها → Permission → ACL → جستجو. 🐧🔥
👏1
فصل چهار هم تموم شد


به امید خدا از فردا فصل 5 رو شروع میکنیم
فصل پنجم — قسمت چهل و هشتم - INTRO 🐧
راه اندازی اولیه و مجازی سازی

————————-
در فصل پنجم می‌خواهیم ببینیم وقتی یک سیستم لینوکسی روشن می‌شود چه اتفاقی می‌افتد و چطور می‌توانیم روند Boot را مدیریت کنیم. همچنین با مجازی‌سازی در لینوکس آشنا می‌شویم.

—————-

1️⃣ تغییر در راه‌اندازی سیستم و Reboot
یاد می‌گیریم:
سیستم چطور Boot می‌شود؟
reboot و shutdown
تغییر وضعیت سیستم
مدیریت سرویس‌ها در زمان Boot
Runlevel / Target
بررسی وضعیت Boot

——————-

2️⃣ نصب و مدیریت Boot Manager
اینجا با Boot Manager آشنا می‌شویم.
مهم‌ترین چیزی که در لینوکس می‌بینیم:
GRUB

مثلاً وقتی سیستم روشن می‌شود و صفحه‌ای می‌بینی که می‌توانی بین چند Kernel یا سیستم‌عامل انتخاب کنی، معمولاً GRUB در این قسمت نقش دارد.

————————

3️⃣ مجازی‌سازی در لینوکس 🖥
می‌بینیم Virtualization چیست و لینوکس چطور می‌تواند:
Linux Host
│
├── VM 1 → Debian
├── VM 2 → Ubuntu
└── VM 3 → Fedora

را اجرا کند.
با مفاهیمی مثل:
KVM
QEMU
Virtual Machine
Host / Guest
Hypervisor
آشنا می‌شویم.

——————

4️⃣ مراحل راه‌اندازی سیستم 🚀
از لحظه‌ای که دکمه Power را می‌زنیم تا رسیدن به Login:
Power ON
↓
BIOS / UEFI
↓
Bootloader (GRUB)
↓
Linux Kernel
↓
initramfs
↓
systemd
↓
Services
↓
Login

این بخش خیلی مهم است چون در فصل‌های قبلی هم با بعضی از این مفاهیم برخورد کردیم.
👏1
فصل پنجم — قسمت چهل و نهم 🐧
مراحل
راه اندازی در لینوکس
————————-

وقتی دکمه Power را می‌زنیم، لینوکس یک‌دفعه اجرا نمی‌شود؛ چند مرحله پشت سر هم اتفاق می‌افتد.

🧠 تصویر کلی
Power ON
↓
BIOS / UEFI
↓
Bootloader (GRUB)
↓
Kernel
↓
initramfs
↓
systemd
↓
Services
↓
Login

حالا مرحله‌به‌مرحله 👇

————-

1️⃣ روشن شدن سیستم → BIOS / UEFI
اول سیستم روشن می‌شود و Firmware سخت‌افزار را بررسی می‌کند.
مثلاً:
CPU
RAM
Disk
Keyboard
Network
...

در سیستم‌های قدیمی‌تر معمولاً BIOS و در سیستم‌های جدیدتر UEFI داریم.

——————

2️⃣ Bootloader → GRUB
بعد Firmware دنبال یک Bootloader می‌گردد.
در بیشتر سیستم‌های Linux:
GRUB

وظیفه GRUB این است که Kernel لینوکس را پیدا و اجرا کند.
اگر چند سیستم‌عامل داشته باشی، GRUB می‌تواند منوی انتخاب هم نشان دهد:
Ubuntu
Advanced options for Ubuntu
Windows


————-

3️⃣ Kernel وارد کار می‌شود 🧠

GRUB، Kernel لینوکس را در حافظه قرار می‌دهد و اجرا می‌کند.

Kernel مسئول مدیریت چیزهایی مثل:

CPU
RAM
Disk
Network
Hardware
Processها

است.

—————-

4️⃣ initramfs
قبل از اینکه سیستم فایل اصلی / کاملاً در دسترس قرار بگیرد، معمولاً یک محیط موقت به نام:
initramfs

راه‌اندازی می‌شود.
مثلاً اگر برای پیدا کردن Root Filesystem به یک Driver یا ابزار خاص نیاز باشد، initramfs می‌تواند آن را فراهم کند.
بعد سیستم به Root Filesystem اصلی منتقل می‌شود.

——————

systemd 🚀
در سیستم‌های مدرن Linux معمولاً:
systemd

اولین Process اصلی سیستم است.
PID آن معمولاً:
ps -p 1

و می‌بینی:
PID 1

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


——————-
🔎 دیدن پیام‌های Kernel با dmesg
بعد از Boot می‌توانی پیام‌هایی که Kernel ثبت کرده را ببینی:
dmesg

مثلاً:
dmesg | less

برای جستجو:
dmesg | grep -i usb

یعنی پیام‌های مربوط به USB را پیدا کن.
یا:
dmesg | grep -i error

🧠 dmesg = پیام‌های مربوط به Kernel و Hardware
——————

📖 journalctl چیست؟
در سیستم‌هایی که systemd دارند، journal لاگ‌های سیستم را جمع‌آوری می‌کند.
برای دیدن لاگ‌ها:
journalctl

لاگ‌های Boot فعلی:
journalctl -b

لاگ Boot قبلی:
journalctl -b -1

فقط خطاهای Boot:
journalctl -b -p err

و برای دیدن Kernel:
journalctl -k

فرق مهم:
dmesg
↓
پیام‌های Kernel

journalctl
↓
لاگ‌های systemd و سرویس‌ها + Kernel و بخش‌های مختلف سیستم



———————-

📁 لاگ Boot کجاست؟
این قسمت را یک مقدار اصلاح کنیم:
در Debian/Ubuntu ممکن است بعضی لاگ‌های مربوط به Boot در:
/var/log/

باشند، اما وجود /var/log/boot به‌صورت ثابت و یکسان در همه نسخه‌ها را نباید فرض کرد.
در سیستم‌های جدید، برای بررسی Boot بهتر است از:
journalctl -b

استفاده کنی.
در بعضی سیستم‌های RHEL/Fedora ممکن است فایل‌هایی مثل:
/var/log/boot.log



——————-


🖥 آیا سیستم با UEFI Boot شده؟
یک روش خیلی ساده:
ls /sys/firmware/efi

اگر این مسیر وجود داشته باشد، معمولاً یعنی سیستم با UEFI Boot شده.
مثلاً:
ls /sys/firmware/efi

اگر پوشه‌هایی مثل این دیدی:
efivars

fw_platform_size

runtime

...

یعنی:
UEFI ✅

اگر مسیر وجود نداشت:
No such file or directory

معمولاً سیستم با حالت Legacy BIOS بوت شده است.
👏1
فصل پنجم — قسمت پنجاهم 🐧
نگاهی به بوت لودر


—————————-
قبل از GRUB یک نکته را یاد بگیریم:
🧠 Bootloader چیست؟
Bootloader یک برنامه کوچک است که بعد از BIOS/UEFI اجرا می‌شود و سیستم‌عامل را برای اجرا آماده می‌کند.
در لینوکس معروف‌ترین Bootloader:
GRUB

است.
مثال واقعی:
Power ON
↓
BIOS / UEFI
↓
GRUB ← اینجا
↓
Linux Kernel
↓
Linux



———————-

1️⃣ تاریخچه GRUB
اول نسخه قدیمی‌تر را داشتیم:
GRUB Legacy

بعد نسخه جدیدتر آمد:
GRUB 2

امروزه تقریباً تمام توزیع‌های مدرن Linux از GRUB 2 استفاده می‌کنند.

——————-

2️⃣ GRUB Legacy چیست؟
GRUB Legacy نسخه قدیمی GRUB است.
ساختار تنظیمات اصلی آن معمولاً:
/boot/grub/menu.lst

بود.
مثلاً در آن می‌توانستیم مشخص کنیم:
کدام Kernel اجرا شود؟
Root filesystem کجاست؟
چه Kernel Parameterهایی ارسال شوند؟



——————-

3️⃣ GRUB 2 چیست؟
GRUB 2 ساختار جدیدتر و قدرتمندتری دارد.
یکی از تفاوت‌های مهم:
GRUB Legacy
↓
menu.lst

ولی در:
GRUB 2
↓
grub.cfg

قرار داریم.
مسیر معمول:
/boot/grub/grub.cfg

در سیستم‌های UEFI ممکن است فایل‌های مربوط به GRUB را در مسیرهایی مثل:
/boot/efi/

هم ببینی.

———————-
4️⃣ فایل grub.cfg چیست؟
فایل اصلی‌ای که GRUB هنگام Boot از آن برای منوی Boot و تنظیمات استفاده می‌کند:
/boot/grub/grub.cfg

مثلاً داخلش ممکن است اطلاعاتی مربوط به:
Kernel
initrd
root
boot parameters

ببینی.
⚠️ نکته مهم: معمولاً نباید grub.cfg را مستقیم و دستی ویرایش کنیم.
چرا؟
چون این فایل معمولاً تولیدشده (generated) است و با تغییر تنظیمات اصلی دوباره ساخته می‌شود.

——————-
5️⃣ تنظیمات اصلی GRUB کجاست؟
یکی از مهم‌ترین فایل‌ها:
/etc/default/grub

مثلاً:
cat /etc/default/grub

ممکن است چیزی شبیه این ببینی:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

معنی:
GRUB_DEFAULT=0

اولین گزینه Boot به صورت پیش‌فرض انتخاب شود.
GRUB_TIMEOUT=5

پنج ثانیه منتظر بمان.
GRUB_CMDLINE_LINUX_DEFAULT

پارامترهایی که هنگام اجرای Kernel ارسال می‌شوند.
————-

6️⃣ تغییر تنظیمات GRUB
مثلاً:
nano /etc/default/grub

فرض کن:
GRUB_TIMEOUT=5

را تغییر بدهیم:
GRUB_TIMEOUT=10

یعنی منوی GRUB به‌جای ۵ ثانیه، ۱۰ ثانیه نمایش داده شود.
اما هنوز کار تمام نشده!
باید تنظیمات جدید را به grub.cfg اعمال کنیم.
در Debian/Ubuntu:
update-grub

این فرمان معمولاً فایل:
/boot/grub/grub.cfg

را دوباره تولید می‌کند.

———————-

🔥 چند دستور کاربردی
دیدن GRUB:
ls /boot/grub

دیدن تنظیمات:
cat /etc/default/grub

جستجوی Kernel در GRUB:
grep menuentry /boot/grub/grub.cfg

تولید مجدد در Debian/Ubuntu:
update-grub
👏1
فصل پنجم — قسمت پنجاه و یکم 🐧
راه اندازی دستی لینوکس


———————
راه‌اندازی دستی لینوکس
گاهی فایل تنظیمات GRUB مشکل پیدا می‌کند یا سیستم نمی‌تواند به‌صورت عادی بوت شود. در این حالت می‌توانیم از خود GRUB به‌صورت دستی سیستم‌عامل را بالا بیاوریم.
1. ورود به محیط GRUB
هنگام روشن شدن سیستم، در منوی GRUB معمولاً با فشردن Shift یا در بعضی سیستم‌ها Esc می‌توان منوی GRUB را نمایش داد.
سپس:
کلید e → ویرایش Entry مربوط به لینوکس.
———————-

2. دستورات insmod
در محیط GRUB می‌توان ماژول‌های موردنیاز را بارگذاری کرد:
insmod linux
insmod gzip
insmod lvm


linux → پشتیبانی از کرنل لینوکس
gzip → برای فایل‌های فشرده
lvm → برای دسترسی به Logical Volumeهای LVM

———————
3. دستور ls
با:
ls

می‌توان دیسک‌ها و پارتیشن‌هایی که GRUB شناسایی کرده را مشاهده کرد.
مثلاً:
(hd0) (hd0,msdos1) (hd0,msdos2)

حالا می‌توانیم بررسی کنیم کدام پارتیشن شامل فایل‌های لینوکس است:
ls (hd0,msdos1)/

ممکن است چیزهایی مثل این ببینیم:
boot/
etc/
home/
usr/
var/


——————-

4. تعیین Root
اگر پارتیشن موردنظر hd0,msdos1 باشد:
set root=(hd0,msdos1)

یعنی به GRUB می‌گوییم:
«از این پارتیشن به‌عنوان محل فایل‌های سیستم استفاده کن.»


———————-

5. ساخت مجدد فایل تنظیمات GRUB
برای ساخت مجدد فایل grub.cfg در سیستم لینوکسی، دستور درست این است:

grub2-mkconfig > /boot/grub2/grub.cfg
👏1