🔹 MAC Spoofing چیست؟
MAC Address آدرس سختافزاری کارت شبکه است؛ مثلاً:
در MAC Spoofing، دستگاه کاری میکند که کارت شبکه با یک MAC Address دیگر خودش را معرفی کند.
مثلاً:
کاربردهای رایج:
تست امنیت شبکه
دور زدن بعضی محدودیتهای مبتنی بر MAC
تست احراز هویت شبکه
حفظ حریم خصوصی در بعضی شرایط
📌 MAC Spoofing → بیشتر مرتبط با Layer 2
——————-
🔹 ARP Spoofing چیست؟
ARP وظیفه دارد در شبکه محلی مشخص کند:
مثلاً:
در ARP Spoofing، مهاجم پیامهای ARP جعلی به دستگاهها میفرستد تا آنها فکر کنند:
در نتیجه ترافیک ممکن است به جای اینکه مستقیم به روتر برود، ابتدا به سیستم مهاجم برسد:
این تکنیک میتواند برای ایجاد Man-in-the-Middle (MITM) در شبکه محلی استفاده شود.
📌 ARP Spoofing → سوءاستفاده از ARP در Layer 2
———————————
🧠 برای حفظ کردن
MAC Spoofing:
ARP Spoofing:
و یک نکته مهم: ARP Spoofing الزاماً به معنی MAC Spoofing نیست؛ مهاجم میتواند با MAC واقعی خودش، ARPهای جعلی ارسال کند.
MAC Address آدرس سختافزاری کارت شبکه است؛ مثلاً:
00:1A:2B:3C:4D:5Eدر MAC Spoofing، دستگاه کاری میکند که کارت شبکه با یک MAC Address دیگر خودش را معرفی کند.
مثلاً:
MAC واقعی: AA:AA:AA:AA:AA:AA
MAC جعلی: BB:BB:BB:BB:BB:BB
کاربردهای رایج:
تست امنیت شبکه
دور زدن بعضی محدودیتهای مبتنی بر MAC
تست احراز هویت شبکه
حفظ حریم خصوصی در بعضی شرایط
📌 MAC Spoofing → بیشتر مرتبط با Layer 2
——————-
🔹 ARP Spoofing چیست؟
ARP وظیفه دارد در شبکه محلی مشخص کند:
IP Address → MAC Address
مثلاً:
192.168.1.1 → AA:AA:AA:AA:AA:AA
در ARP Spoofing، مهاجم پیامهای ARP جعلی به دستگاهها میفرستد تا آنها فکر کنند:
IP روتر → MAC مهاجم
در نتیجه ترافیک ممکن است به جای اینکه مستقیم به روتر برود، ابتدا به سیستم مهاجم برسد:
Client
↓
Attacker
↓
Router
این تکنیک میتواند برای ایجاد Man-in-the-Middle (MITM) در شبکه محلی استفاده شود.
📌 ARP Spoofing → سوءاستفاده از ARP در Layer 2
———————————
🧠 برای حفظ کردن
MAC Spoofing:
«من MAC دیگری دارم.»
ARP Spoofing:
«IP فلانی، MAC من است!» 😈
و یک نکته مهم: ARP Spoofing الزاماً به معنی MAC Spoofing نیست؛ مهاجم میتواند با MAC واقعی خودش، ARPهای جعلی ارسال کند.
👏1
فصل سوم — مقدمه 🐧 - intro
———————————
در فصل سوم با راهاندازی و مدیریت سختافزار و دیسک در لینوکس آشنا میشویم.
بخشهای فصل سوم:
1️⃣ مراحل راهاندازی Linux
BIOS / UEFI
Bootloader
Kernel
Init / systemd
اجرای سرویسها
2️⃣ سختافزار در Linux
شناسایی CPU
RAM
Disk
کارت شبکه
USB و سایر تجهیزات
ابزارهای شناسایی Hardware
3️⃣ مدیریت دیسک
Partition
LVM
RAID
Filesystem
Mount
4️⃣ ساختار دیسک
نامگذاری Diskها
Partitionها مثل
MBR و GPT
Mount Pointها
🎯 هدف فصل: یاد بگیریم لینوکس هنگام Boot چگونه بالا میآید و چطور Hardware و Storage سیستم را مدیریت میکند.
========================
فصل سوم — قسمت سی و یکم - مراحل بودت در لینوکس 🐧
———————-
مراحل Boot در Linux 🐧
🔥 مراحل Boot از روشن شدن تا اجرای Linux
ترتیب کلی:
————————-
1️⃣ BIOS / UEFI چیست؟
BIOS اولین Firmwareای است که بعد از روشن شدن سیستم اجرا میشود و Hardware را بررسی و Boot را شروع میکند.
UEFI نسل جدیدتر BIOS است و امکانات بیشتری دارد.
EFI استاندارد/فناوریای است که UEFI بر پایه آن توسعه پیدا کرده است.
———————
2️⃣ GRUB چیست؟
GRUB مخفف GRand Unified Bootloader است.
وظیفه اصلی آن:
در سیستمهای Linux معمولاً با GRUB منوی انتخاب سیستمعامل یا Kernel را میبینیم.
————————————-
📁 دایرکتوریهای مهم Hardware
محل Device Fileها:
مثلاً:
————————-
یک فایلسیستم مجازی است که اطلاعات مربوط به Processها و Kernel را در اختیارمان قرار میدهد.
مثلاً:
———————-
یک فایلسیستم مجازی برای نمایش اطلاعات Kernel و Hardware/Devices است.
——————————-
🔎 دستورات شناسایی Hardware
نمایش Deviceهای سیستم و اطلاعات مرتبط با آنها:
ممکن است در بعضی توزیعها نصب نباشد.
————————-
نمایش Disk و Partitionها:
مثلاً:
—————————-
نمایش تجهیزات متصل به PCI/PCIe:
مثلاً:
———————-
نمایش تجهیزات USB:
——————-
📄 فایلهای مهم
اطلاعات RAM و Memory:
——
اطلاعات CPU:
——
لیست Interruptهای سیستم:
——
منابع I/O Portهای سیستم:
——--
وضعیت RAID نرمافزاری Linux یعنی Software RAID (md):
———-
🧠 اطلاعات RAM
نمایش اطلاعات Memory و Memory Blockها:
———-
نمایش وضعیت RAM:
خواناتر:
———-
⚙️ اطلاعات CPU
اطلاعاتی مثل:
————-
🛠 اطلاعات کامل Hardware
نمایش اطلاعات سختافزار:
خلاصهتر:
———
🧠 جمعبندی سریع
———————————
در فصل سوم با راهاندازی و مدیریت سختافزار و دیسک در لینوکس آشنا میشویم.
بخشهای فصل سوم:
1️⃣ مراحل راهاندازی Linux
BIOS / UEFI
Bootloader
Kernel
Init / systemd
اجرای سرویسها
2️⃣ سختافزار در Linux
شناسایی CPU
RAM
Disk
کارت شبکه
USB و سایر تجهیزات
ابزارهای شناسایی Hardware
3️⃣ مدیریت دیسک
Partition
LVM
RAID
Filesystem
Mount
4️⃣ ساختار دیسک
/devنامگذاری Diskها
sda, sdbPartitionها مثل
sda1MBR و GPT
Mount Pointها
🎯 هدف فصل: یاد بگیریم لینوکس هنگام Boot چگونه بالا میآید و چطور Hardware و Storage سیستم را مدیریت میکند.
========================
فصل سوم — قسمت سی و یکم - مراحل بودت در لینوکس 🐧
———————-
مراحل Boot در Linux 🐧
🔥 مراحل Boot از روشن شدن تا اجرای Linux
ترتیب کلی:
Power On
↓
BIOS / UEFI
↓
Bootloader (GRUB)
↓
Linux Kernel
↓
initramfs
↓
systemd (PID 1)
↓
Services
↓
Login
————————-
1️⃣ BIOS / UEFI چیست؟
BIOS اولین Firmwareای است که بعد از روشن شدن سیستم اجرا میشود و Hardware را بررسی و Boot را شروع میکند.
UEFI نسل جدیدتر BIOS است و امکانات بیشتری دارد.
BIOS → قدیمیتر
UEFI → جدیدتر
EFI استاندارد/فناوریای است که UEFI بر پایه آن توسعه پیدا کرده است.
———————
2️⃣ GRUB چیست؟
GRUB مخفف GRand Unified Bootloader است.
وظیفه اصلی آن:
انتخاب Kernel
↓
Load کردن Kernel
↓
شروع Boot Linux
در سیستمهای Linux معمولاً با GRUB منوی انتخاب سیستمعامل یا Kernel را میبینیم.
————————————-
📁 دایرکتوریهای مهم Hardware
/devمحل Device Fileها:
ls /dev
مثلاً:
/dev/sda
/dev/sda1
/dev/null
/dev/tty
————————-
/procیک فایلسیستم مجازی است که اطلاعات مربوط به Processها و Kernel را در اختیارمان قرار میدهد.
مثلاً:
cat /proc/cpuinfo
cat /proc/meminfo
———————-
/sysیک فایلسیستم مجازی برای نمایش اطلاعات Kernel و Hardware/Devices است.
ls /sys
——————————-
🔎 دستورات شناسایی Hardware
lsdevنمایش Deviceهای سیستم و اطلاعات مرتبط با آنها:
lsdev
ممکن است در بعضی توزیعها نصب نباشد.
————————-
lsblkنمایش Disk و Partitionها:
lsblk
مثلاً:
sda
├─sda1
└─sda2
—————————-
lspciنمایش تجهیزات متصل به PCI/PCIe:
lspci
مثلاً:
Ethernet controller
VGA controller
Audio controller
———————-
lsusbنمایش تجهیزات USB:
lsusb
——————-
📄 فایلهای مهم
/proc/proc/meminfoاطلاعات RAM و Memory:
cat /proc/meminfo
——
/proc/cpuinfoاطلاعات CPU:
cat /proc/cpuinfo
——
/proc/interruptsلیست Interruptهای سیستم:
cat /proc/interrupts
——
/proc/ioportsمنابع I/O Portهای سیستم:
cat /proc/ioports
——--
/proc/mdstatوضعیت RAID نرمافزاری Linux یعنی Software RAID (md):
cat /proc/mdstat
———-
🧠 اطلاعات RAM
lsmemنمایش اطلاعات Memory و Memory Blockها:
lsmem
———-
نمایش وضعیت RAM:
free
خواناتر:
free -h
-h یعنی Human Readable.———-
⚙️ اطلاعات CPU
lscpu
اطلاعاتی مثل:
CPU(s)
Architecture
Core(s)
Thread(s)
Model
————-
🛠 اطلاعات کامل Hardware
lshwنمایش اطلاعات سختافزار:
lshw
خلاصهتر:
lshw -short
———
🧠 جمعبندی سریع
/dev → Deviceها
/proc → Process + اطلاعات Kernel
/sys → Hardware + Kernel
lsblk → Disk / Partition
lspci → PCI/PCIe
lsusb → USB
lsdev → Deviceها
lshw → Hardware
lscpu → CPU
lsmem → RAM
free -h → RAM مصرفی
/proc/cpuinfo → CPU
/proc/meminfo → Memory
/proc/interrupts → Interrupt
/proc/ioports → I/O Port
/proc/mdstat → Software RAID
👏1
فصل سوم — قسمت سی و سه 🐧 - ماژولها در لینوکس
—————————-
ماژولها در Linux
Kernel Module قطعهای از کد است که میتوان آن را در زمان اجرا به Kernel اضافه یا از آن حذف کرد، بدون اینکه لازم باشد کل Kernel را دوباره Compile کنیم.
🔹 دو روش اضافه کردن قابلیت به Kernel
روش Module معمولاً بهتر و انعطافپذیرتر است، چون لازم نیست برای هر تغییر کل Kernel را دوباره Compile کنیم.
—————————-
نمایش Moduleهای فعال Kernel:
—————————-
نمایش اطلاعات یک Module:
مثلاً:
اطلاعاتی مثل نام، نسخه، توضیحات، نویسنده و وابستگیها را نشان میدهد.
——————
برای اضافه یا حذف Module استفاده میشود و Dependencyهای آن را هم مدیریت میکند.
اضافه کردن:
حذف:
مثلاً:
———————
یک فایل Module مشخص را مستقیماً وارد Kernel میکند:
تفاوت مهم:
به همین دلیل معمولاً
————————-
🧠 خلاصه
فایل Moduleها معمولاً در این مسیر قرار دارند:
برای دیدن Kernel فعلی:
——————————
حالا اومدیمو نفهمیدم ماژول چیه باید چیکار کنیم
این قسمت به دردت میخوره
——————————
🧩 ماژول دقیقاً چیه؟
ماژول = یک قابلیت قابل اضافه شدن به Kernel لینوکس
مثلاً Kernel خودش باید بتواند با سختافزارهای مختلف کار کند:
لازم نیست همه این قابلیتها همیشه داخل خود Kernel باشند. خیلی از آنها به شکل Module قرار میگیرند.
مثلاً:
🔥 یک مثال واقعی
فرض کن یک کارت شبکه داری و Linux برایش Driver دارد.
Driver میتواند به شکل Module باشد:
مثلاً ممکن است چیزی مثل:
ببینی.
یعنی این Module مربوط به Driver کارت شبکه در Kernel Load شده.
———————
مثلاً:
یعنی:
———————
اگر بخواهی درباره یک Module اطلاعات بیشتری بگیری:
اطلاعاتی مثل:
میدهد.
یعنی مثلاً:
——————-
مثلاً:
یعنی:
و:
یعنی:
——————-
🧠 پس خیلی ساده حفظ کن:
Module = قابلیت/Driver قابل Load شدن در Kernel
مثلاً اگر Wi-Fi کار نمیکند، یکی از چیزهایی که در لینوکس بررسی میکنی این است که Driver/Module مربوط به Wi-Fi Load شده یا نه.
—————————-
ماژولها در Linux
Kernel Module قطعهای از کد است که میتوان آن را در زمان اجرا به Kernel اضافه یا از آن حذف کرد، بدون اینکه لازم باشد کل Kernel را دوباره Compile کنیم.
🔹 دو روش اضافه کردن قابلیت به Kernel
1. Compile کردن قابلیت داخل Kernel
2. استفاده از Kernel Module
روش Module معمولاً بهتر و انعطافپذیرتر است، چون لازم نیست برای هر تغییر کل Kernel را دوباره Compile کنیم.
—————————-
lsmodنمایش Moduleهای فعال Kernel:
lsmod
—————————-
modinfoنمایش اطلاعات یک Module:
modinfo module_name
مثلاً:
modinfo loop
اطلاعاتی مثل نام، نسخه، توضیحات، نویسنده و وابستگیها را نشان میدهد.
——————
modprobeبرای اضافه یا حذف Module استفاده میشود و Dependencyهای آن را هم مدیریت میکند.
اضافه کردن:
modprobe module_name
حذف:
modprobe -r module_name
مثلاً:
modprobe loop
———————
insmodیک فایل Module مشخص را مستقیماً وارد Kernel میکند:
insmod module.ko
تفاوت مهم:
insmod → فقط Module مشخص را Load میکند
modprobe → Module + Dependencyها را مدیریت میکند
به همین دلیل معمولاً
modprobe انتخاب مناسبتری است.————————-
🧠 خلاصه
lsmod → نمایش Moduleهای فعال
modinfo → اطلاعات Module
modprobe → اضافه/حذف Module + Dependency
insmod → Load مستقیم فایل .ko
فایل Moduleها معمولاً در این مسیر قرار دارند:
/lib/modules/$(uname -r)/
برای دیدن Kernel فعلی:
uname -r
——————————
حالا اومدیمو نفهمیدم ماژول چیه باید چیکار کنیم
این قسمت به دردت میخوره
——————————
🧩 ماژول دقیقاً چیه؟
ماژول = یک قابلیت قابل اضافه شدن به Kernel لینوکس
مثلاً Kernel خودش باید بتواند با سختافزارهای مختلف کار کند:
کارت شبکه
USB
هارد
Wi-Fi
Filesystem
Sound Card
...
لازم نیست همه این قابلیتها همیشه داخل خود Kernel باشند. خیلی از آنها به شکل Module قرار میگیرند.
مثلاً:
Kernel
│
├── قابلیتهای اصلی
│
├── Module کارت شبکه
├── Module USB
├── Module Filesystem
└── Module Wi-Fi
🔥 یک مثال واقعی
فرض کن یک کارت شبکه داری و Linux برایش Driver دارد.
Driver میتواند به شکل Module باشد:
lsmod
مثلاً ممکن است چیزی مثل:
e1000e
ببینی.
یعنی این Module مربوط به Driver کارت شبکه در Kernel Load شده.
———————
lsmod دقیقاً چه اطلاعاتی میدهد؟lsmod
مثلاً:
Module Size Used by
e1000e ... 1
یعنی:
Module → اسم ماژولSize → مقدار حافظهای که اشغال کردهUsed by → چند بخش دیگر از Kernel از آن استفاده میکنند———————
modinfo چی میگه؟اگر بخواهی درباره یک Module اطلاعات بیشتری بگیری:
modinfo e1000e
اطلاعاتی مثل:
filename
description
author
license
version
depends
میدهد.
یعنی مثلاً:
این Module چه کاری انجام میدهد؟
فایلش کجاست؟
نسخهاش چیست؟
چه Dependencyهایی دارد؟
——————-
modprobe چی کار میکند؟مثلاً:
modprobe e1000e
یعنی:
این قابلیت/Driver را به Kernel اضافه کن.
و:
modprobe -r e1000e
یعنی:
این Module را از Kernel خارج کن.
——————-
🧠 پس خیلی ساده حفظ کن:
Module = قابلیت/Driver قابل Load شدن در Kernel
lsmod → چه Moduleهایی الان فعالند؟
modinfo → این Module دقیقاً چیه؟
modprobe → Module رو اضافه/حذف کن
insmod → یک فایل Module رو مستقیم Load کن
مثلاً اگر Wi-Fi کار نمیکند، یکی از چیزهایی که در لینوکس بررسی میکنی این است که Driver/Module مربوط به Wi-Fi Load شده یا نه.
❤1👏1
فصل سوم — قسمت سی و چهارم 🐧 - هارد دیسک ها
———————
Hard Disk، Partition، LVM و RAID
این قسمت خیلی مهمه، چون از اینجا وارد مدیریت Storage در Linux میشیم.
———————————
1️⃣ هارد دیسک در Linux چطور دیده میشود؟
Linux تقریباً همه Storageها را بهصورت Device در
مثلاً:
ممکنه ببینی:
یعنی:
انواع Storage
در سیستمها با موارد مختلفی روبهرو میشوی:
مثلاً در VMware ممکن است هارد مجازی داشته باشی، ولی Linux باز هم آن را بهعنوان یک Block Device میبیند.
——————
2️⃣ MBR و GPT چیست؟
قبل از Partition کردن دیسک، باید نوع Partition Table را مشخص کنیم.
دو مدل معروف:
———-
MBR
مدل قدیمیتر است.
محدودیتهای مهم:
GPT
مدل جدیدتر و استاندارد امروزی است.
مزیتها:
🧠 خیلی ساده:
——————
3️⃣ Partition چیست؟
فرض کن یک هارد 1TB داری.
میتوانی آن را تقسیم کنی:
به این قسمتها Partition میگوییم.
در Linux مثلاً:
—————
4️⃣ LVM چیست؟ ⭐️
اینجا قضیه جذاب میشود.
LVM = Logical Volume Manager
LVM به ما اجازه میدهد Storage را انعطافپذیرتر از Partition معمولی مدیریت کنیم.
فرض کن:
و بعداً یک Disk دیگر:
میتوانیم با LVM آنها را در یک ساختار Storage مدیریت کنیم.
ساختار اصلی LVM:
مثال واقعی:
چرا LVM خوب است؟
مثلاً
یک Disk جدید اضافه میکنی و میتوانی فضای Logical Volume را افزایش بدهی، بدون اینکه الزاماً ساختار Storage را از صفر بسازی.
پس:
———————
5️⃣ RAID چیست؟
RAID = Redundant Array of Independent Disks
یعنی چند Disk را با هم ترکیب میکنیم تا به یکی از این اهداف برسیم:
RAID با LVM فرق دارد.
———-
6️⃣ RAID 0
حداقل:
داده بین Diskها تقسیم میشود.
مزیت:
🚀 سرعت بالا
عیب:
❌ هیچ Redundancy ندارد.
اگر یک Disk خراب شود، کل Array از بین میرود.
—————-
7️⃣ RAID 1
حداقل:
داده روی هر دو Disk کپی میشود.
اگر یکی خراب شود، دیگری اطلاعات را دارد.
مزیت:
🛡 Redundancy بالا
عیب:
نصف ظرفیت قابل استفاده است.
———————
8️⃣ RAID 2
امروزه تقریباً استفاده نمیشود و بیشتر تاریخی/آموزشی است.
از روشهای خاص Error Correction استفاده میکرد.
—————
9️⃣ RAID 3
داده را Strip میکند و یک Disk را برای Parity اختصاص میدهد.
امروزه بسیار کمکاربرد و عمدتاً تاریخی است.
——————
🔟 RAID 4
مشابه RAID 3 است، اما Striping در سطح Block انجام میشود.
این هم امروزه تقریباً استفاده نمیشود.
—————-
RAID 5 ⭐️
حداقل:
داده + Parity بین Diskها پخش میشوند.
اگر یک Disk خراب شود، Array میتواند ادامه دهد.
اما:
❌ فقط خرابی یک Disk را تحمل میکند.
——————-
RAID 6
حداقل:
مانند RAID 5 است ولی دو Parity دارد.
بنابراین میتواند خرابی:
را تحمل کند.
——————
RAID 10 ⭐️⭐️⭐️
ترکیب:
یا:
حداقل:
مثلاً:
مزیت:
🚀 سرعت خوب
🛡 Redundancy خوب
عیب:
ظرفیت قابل استفاده تقریباً:
——————-
🎯 چیزی که برای LPIC خیلی مهمه:
و یک نکته خیلی مهم:
RAID جای Backup نیست.
RAID برای Availability و تحمل خرابی Disk است؛ Backup برای برگرداندن اطلاعات حذفشده یا خرابشده است.
———————
Hard Disk، Partition، LVM و RAID
این قسمت خیلی مهمه، چون از اینجا وارد مدیریت Storage در Linux میشیم.
———————————
1️⃣ هارد دیسک در Linux چطور دیده میشود؟
Linux تقریباً همه Storageها را بهصورت Device در
/dev میبیند.مثلاً:
lsblk
ممکنه ببینی:
sda
├─sda1
└─sda2
sdb
└─sdb1
یعنی:
/dev/sda → دیسک اول
/dev/sdb → دیسک دوم
/dev/sda1 → پارتیشن اول دیسک اول
انواع Storage
در سیستمها با موارد مختلفی روبهرو میشوی:
HDD
SSD
NVMe
USB Storage
Virtual Disk
مثلاً در VMware ممکن است هارد مجازی داشته باشی، ولی Linux باز هم آن را بهعنوان یک Block Device میبیند.
——————
2️⃣ MBR و GPT چیست؟
قبل از Partition کردن دیسک، باید نوع Partition Table را مشخص کنیم.
دو مدل معروف:
MBR
GPT
———-
MBR
مدل قدیمیتر است.
محدودیتهای مهم:
حدود 2TB برای دیسک
حداکثر 4 Primary Partition
GPT
مدل جدیدتر و استاندارد امروزی است.
مزیتها:
پشتیبانی از دیسکهای بزرگتر
Partitionهای بسیار بیشتر
مناسب سیستمهای UEFI
اطلاعات پارتیشن مقاومتر در برابر خرابی
🧠 خیلی ساده:
MBR → قدیمی
GPT → جدید و پیشنهادی
——————
3️⃣ Partition چیست؟
فرض کن یک هارد 1TB داری.
میتوانی آن را تقسیم کنی:
1TB Disk
│
├── 100GB → /
├── 200GB → /home
└── 700GB → Data
به این قسمتها Partition میگوییم.
در Linux مثلاً:
/dev/sda
├── /dev/sda1
├── /dev/sda2
└── /dev/sda3
—————
4️⃣ LVM چیست؟ ⭐️
اینجا قضیه جذاب میشود.
LVM = Logical Volume Manager
LVM به ما اجازه میدهد Storage را انعطافپذیرتر از Partition معمولی مدیریت کنیم.
فرض کن:
Disk = 500GB
و بعداً یک Disk دیگر:
Disk = 500GB
میتوانیم با LVM آنها را در یک ساختار Storage مدیریت کنیم.
ساختار اصلی LVM:
Physical Disk
↓
Physical Volume (PV)
↓
Volume Group (VG)
↓
Logical Volume (LV)
↓
Filesystem
↓
Mount Point
مثال واقعی:
/dev/sda1
↓
PV
↓
VG
↓
LV
↓
ext4/xfs
↓
/data
چرا LVM خوب است؟
مثلاً
/data پر شده:/data → 100GB
یک Disk جدید اضافه میکنی و میتوانی فضای Logical Volume را افزایش بدهی، بدون اینکه الزاماً ساختار Storage را از صفر بسازی.
پس:
LVM برای مدیریت انعطافپذیر فضای Storage است.
———————
5️⃣ RAID چیست؟
RAID = Redundant Array of Independent Disks
یعنی چند Disk را با هم ترکیب میکنیم تا به یکی از این اهداف برسیم:
Performance ↑
Redundancy ↑
Capacity
RAID با LVM فرق دارد.
LVM → مدیریت انعطافپذیر Storage
RAID → ترکیب چند Disk برای Performance/Redundancy
———-
6️⃣ RAID 0
حداقل:
2 Disk
داده بین Diskها تقسیم میشود.
Disk 1 → A C E G
Disk 2 → B D F H
مزیت:
🚀 سرعت بالا
عیب:
❌ هیچ Redundancy ندارد.
اگر یک Disk خراب شود، کل Array از بین میرود.
RAID 0 = Speed
—————-
7️⃣ RAID 1
حداقل:
2 Disk
داده روی هر دو Disk کپی میشود.
Disk 1 → A B C D
Disk 2 → A B C D
اگر یکی خراب شود، دیگری اطلاعات را دارد.
مزیت:
🛡 Redundancy بالا
عیب:
نصف ظرفیت قابل استفاده است.
RAID 1 = Mirror
———————
8️⃣ RAID 2
امروزه تقریباً استفاده نمیشود و بیشتر تاریخی/آموزشی است.
از روشهای خاص Error Correction استفاده میکرد.
RAID 2 → تقریباً منسوخ
—————
9️⃣ RAID 3
داده را Strip میکند و یک Disk را برای Parity اختصاص میدهد.
امروزه بسیار کمکاربرد و عمدتاً تاریخی است.
RAID 3 → Striping + Dedicated Parity
——————
🔟 RAID 4
مشابه RAID 3 است، اما Striping در سطح Block انجام میشود.
RAID 4 → Block Striping + Dedicated Parity
این هم امروزه تقریباً استفاده نمیشود.
—————-
RAID 5 ⭐️
حداقل:
3 Disk
داده + Parity بین Diskها پخش میشوند.
اگر یک Disk خراب شود، Array میتواند ادامه دهد.
RAID 5
Performance 👍
Capacity 👍
Redundancy 👍
اما:
❌ فقط خرابی یک Disk را تحمل میکند.
——————-
RAID 6
حداقل:
4 Disk
مانند RAID 5 است ولی دو Parity دارد.
بنابراین میتواند خرابی:
2 Disk
را تحمل کند.
RAID 6 = RAID 5 + Parity بیشتر
——————
RAID 10 ⭐️⭐️⭐️
ترکیب:
RAID 1 + RAID 0
یا:
Mirror + Stripe
حداقل:
4 Disk
مثلاً:
RAID 10
/ \
Mirror Mirror
/ \ / \
D1 D2 D3 D4
مزیت:
🚀 سرعت خوب
🛡 Redundancy خوب
عیب:
ظرفیت قابل استفاده تقریباً:
50%
——————-
🎯 چیزی که برای LPIC خیلی مهمه:
Partition
↓
LVM:
PV → VG → LV → Filesystem
RAID:
0 → Speed
1 → Mirror
5 → Parity + 1 Disk failure
6 → Parity + 2 Disk failure
10 → Mirror + Stripe
و یک نکته خیلی مهم:
RAID جای Backup نیست.
RAID برای Availability و تحمل خرابی Disk است؛ Backup برای برگرداندن اطلاعات حذفشده یا خرابشده است.
👏1
فصل سوم — قسمت سیوپنجم- fdisk 🐧
—————-
یسک با
در Linux برای استفاده از یک دیسک معمولاً ۳ مرحله داریم:
مثلا
——————
1️⃣ اضافه کردن هارد در VMware
در VMware از:
VM Settings → Hard Disk → Add→ SATA
مثلاً سه دیسک اضافه میکنیم:
/dev/sda → 10GB
/dev/sdb → 10GB
/dev/sdd → 10GB
بعد در Linux بررسی میکنیم:
—————
2️⃣ فرمت کردن یک دیسک
مثلاً
⚠️ دقت کن: این کار اطلاعات روی
بعد برای استفاده از آن:
بررسی:
میبینیم:
یعنی دیسک روی
——————
برای دیدن فضای Filesystemهای Mount شده:
مثلاً:
یعنی میتوانی ببینی:
—————
3️⃣ شروع کار با
حالا میخواهیم
داخل
🧠 فعلاً همینها را حفظ کن.
——————
4️⃣ ساخت Partition معمولی
با دستور زیر :
fdisk /dev/sda
داخل
میپرسد:
من اینطوری ست کردم :
یعنی:
برای:
Enter میزنیم تا مقدار پیشفرض انتخاب شود.
برای حجم:
یعنی:
در نهایت:
————————
5️⃣ Extended Partition
دوباره:
و:
مثلاً:
چرا Extended؟
در ساختار قدیمی MBR، تعداد Primary Partitionها محدود بود.
Extended میتوانست بهعنوان Container برای Logical Partitionها استفاده شود.
——————-
6️⃣ ساخت Logical Partition
حالا دوباره:
چون فضای Primary/Extended را داریم،
مثلاً:
نتیجه:
پس ساختار ما میشود:
—————
7️⃣ ذخیره Partitionها
تا اینجا تغییرات هنوز روی Disk نوشته نشدهاند.
برای ذخیره:
برای خروج بدون ذخیره:
بعد:
و Partitionها را میبینیم.
——————
8️⃣ Format کردن Partition
حالا مثلاً
یعنی:
بعد:
بررسی:
میبینیم:
——————
9️⃣ حذف Partition
اول اگر Partition Mount است:
بعد:
و برای دیدن وضعیت:
حذف:
بعد شماره Partition را انتخاب میکنیم.
مثلاً:
در نهایت:
برای ذخیره.
—————-
🔟 ساخت GPT با
حالا فرض کنیم
داخل
پیامی مثل:
میبینیم.
یعنی Partition Table دیسک به GPT تبدیل/ایجاد شده است.
بعد میتوانیم:
بزنیم و Partition بسازیم.
تفاوت مهم
در GPT دیگر ساختار قدیمی:
مثل MBR مطرح نیست.
———————
1️⃣1️⃣ تغییر Type Partition
فرض کن Partition ساختهایم:
میخواهیم Type آن را Linux LVM کنیم.
داخل:
بزن:
برای دیدن Typeها:
یا مستقیماً میتوانیم alias مناسب را وارد کنیم، مثلاً:
نتیجه:
یعنی این Partition برای استفاده در LVM علامتگذاری شده است.
⚠️ این کار بهتنهایی LVM نمیسازد؛ فقط Partition Type را مشخص میکند. در قسمت بعدی واقعاً LVM میسازیم.
————————
پاک کردن Signatureهای Disk با
اگر بخواهیم Signatureهای Filesystem/Partition Table را از یک Disk پاک کنیم:
⚠️ بسیار خطرناک است.
روی Disk اشتباه اجرا کنی، ممکن است اطلاعات و ساختار قبلی آن را از دست بدهی.
مثلاً:
بعد از پاک شدن ممکن است فقط خود Disk را ببینی:
———————
🧠 جمعبندی قسمت ۳۵
مسیر کلی کار با Disk:
—————-
🎯 مثال واقعی
فرض کن یک سرور داری و یک هارد جدید 100GB اضافه کردی:
حالا
قسمت بعدی → LVM:
—————-
یسک با
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 را اینطوری حفظ کن:
مثلاً:
————
1️⃣ دیدن Diskها
دو روش ساده:
یا:
———————
2️⃣ ساخت Physical Volume —
فرض کنیم دو Disk داریم:
برای وارد کردن آنها به LVM:
برای وارد کردن آنها به LVM:
اگر
حالا:
مثلاً:
یعنی دو Disk ما تبدیل به Physical Volume شدهاند.
جزئیات بیشتر:
🧠 مثال واقعی
مثل این است که دو هارد 10GB داری و به Linux میگویی:
——————
3️⃣ ساخت Volume Group —
حالا PVها را داخل یک Volume Group قرار میدهیم.
مثلاً اسمش را
حالا:
مثلاً:
یعنی:
برای اطلاعات کاملتر:
————
4️⃣ ساخت Logical Volume —
حالا از Volume Group خودمان میتوانیم فضا به شکل Logical Volume اختصاص دهیم.
مثلاً 3GB:
یعنی:
حالا:
میبینیم:
و:
چیزی شبیه این:
—————-
5️⃣ حالا LV را قابل استفاده کنیم
در این مرحله هنوز Filesystem نداریم.
مثلاً XFS:
یا با ext4:
بعد یک Mount Point بساز:
و Mount کن:
بررسی:
حالا
——————-
6️⃣ افزایش حجم LV —
اینجا یکی از مهمترین مزیتهای LVM را میبینیم.
فرض کن:
ولی بعداً فهمیدی به 5GB نیاز داری.
اگر داخل VG فضای آزاد داشته باشیم:
یعنی:
بعد:
میبینی:
اما یک نکته خیلی مهم:
بزرگ کردن LV الزاماً Filesystem را بزرگ نمیکند.
پس بسته به Filesystem باید آن را هم Grow کنیم.
برای XFS:
برای ext4:
پس:
راه سادهتر
برای بعضی سناریوها میتوانی از:
استفاده کنی.
———————-
7️⃣ حذف LVM
این قسمت خیلی مهم است:
همیشه از پایین به بالا حذف کن:
اگر LV ما این باشد:
اول:
بعد LV:
بعد VG:
بعد PV:
🧠 چرا از پایین به بالا؟
چون نمیتوانی VG را حذف کنی وقتی هنوز LV داخلش داری.
و نمیتوانی PV را از LVM خارج کنی وقتی هنوز عضو VG است.
پس حفظ کن:
——————
🧠 خلاصه طلایی LVM
——————
دستورات اصلی:
————-
🎯 مثال واقعی
فرض کن روی یک سرور دو هارد 100GB داری و میخواهی برای Mail Server یک فضای 50GB بسازی:
بعداً Mail Server بزرگ شد:
و اگر در VG فضای آزاد داشته باشی، میتوانی LV را بدون Partitionبندی مجدد دیسک بزرگ کنی. 🔥
نکته: در محیط واقعی بهتر است بهجای تبدیل کل
——————-
در قسمت قبل گفتیم:
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 Server بزرگ شد:
50GB → 100GB
و اگر در VG فضای آزاد داشته باشی، میتوانی LV را بدون Partitionبندی مجدد دیسک بزرگ کنی. 🔥
نکته: در محیط واقعی بهتر است بهجای تبدیل کل
/dev/sda و /dev/sdb به PV، معمولاً Partitionهای مشخصی مثل /dev/sda1 و /dev/sdb1 را برای LVM اختصاص بدهی؛ مخصوصاً روی سیستمهایی که دیسک ساختار دیگری هم دارد.👏1
تکمیلی قسمت سی وشش
——————————-
حتماً. این قسمت LVM اولش یکم گیجکنندهست، ولی اگر ساختار رو بفهمی دیگه این دستورات خیلی ساده میشن.
فرض کن دو تا هارد داری:
LVM اینها رو به چند لایه تبدیل میکنه:
1. PV چیست؟ — Physical Volume
PV = Physical Volume
یعنی یک دیسک یا پارتیشن را به LVM معرفی میکنیم.
مثلاً:
حالا:
یعنی به LVM گفتیم:
برای دیدنش:
یا:
——————-
2. VG چیست؟ — Volume Group
VG = Volume Group
VG مثل یک مخزن بزرگ از فضا است که PVها را داخلش قرار میدهیم.
مثلاً:
حالا داریم:
فرض کن:
پس VG تقریباً:
فضای قابل استفاده دارد.
برای دیدنش:
یا:
——————-
3. LV چیست؟ — Logical Volume
LV = Logical Volume
حالا از داخل VG، هر مقدار فضایی که بخواهیم به عنوان یک Volume منطقی ایجاد میکنیم.
مثلاً:
یعنی:
ساختار میشود:
برای دیدن LVها:
یا:
————————-
حالا دستورات حذف را بفهمیم
تو داشتی:
این یعنی:
چون:
بعد:
یعنی:
اما معمولاً اول باید LVهای داخلش را حذف کنی.
بعد:
یعنی:
ترتیب حذف را حفظ کن 🧠
ساختن:
حذف کردن برعکس:
یعنی:
دقیقاً به همین دلیل دستورات تو این ترتیب را دارند.
——————————-
حتماً. این قسمت 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 چون کمی گیج کنندست به دو صورت توضیح داده شده که همدیگه رو تکمیل میکنن
توضیح LVM چون کمی گیج کنندست به دو صورت توضیح داده شده که همدیگه رو تکمیل میکنن
فصل سوم — قسمت سی و هفتم 🐧 - پیادهسازی RAID
——————
1. RAID چیست؟
RAID یعنی ترکیب چند دیسک برای رسیدن به یکی از این اهداف:
افزایش سرعت ⚡️
افزایش امنیت اطلاعات 🛡
یا ترکیبی از هر دو
مثلاً اگر دو هارد 10GB داشته باشیم، میتوانیم با RAID 1 کاری کنیم که اطلاعات روی هر دو هارد یکسان ذخیره شود.
————————-
2. بررسی RAID در لینوکس
برای دیدن وضعیت RAIDهای فعلی:
اگر RAID نداشته باشیم معمولاً چیزی شبیه این میبینیم:
——————
برای RAID نرمافزاری لینوکس میتوانیم ماژول مربوطه را بارگذاری کنیم:
بررسی:
نکته:
———————
4. نصب
ابزار اصلی مدیریت Software RAID در لینوکس:
Debian / Ubuntu
AlmaLinux / RHEL
—————-
5. ساخت RAID 1
فرض کنیم دو دیسک داریم:
ابتدا بررسی:
حالا RAID1 میسازیم:
یعنی:
—————
6. بررسی وضعیت RAID
یا:
مثلاً:
یعنی RAID سالم است.
—————-
7. فرمت کردن RAID
RAID ساخته شده، اما هنوز فایلسیستم ندارد.
مثلاً:
یا:
—————
8. Mount کردن RAID
ابتدا یک پوشه:
سپس:
بررسی:
یا:
حالا هر فایلی که داخل
——————-
9. مثال واقعی RAID 1 🧠
دو هارد داریم:
RAID1 میسازیم:
ظرفیت قابل استفاده تقریباً:
نه 20GB.
چون اطلاعات روی هر دو دیسک Mirror میشود.
اگر
اطلاعات همچنان روی
—————
10. دیدن جزئیات RAID
برای دیدن همه RAIDهای سیستم:
—————
11. اضافه کردن دیسک به RAID
فرض کنیم یک دیسک جدید داریم:
ابتدا:
و وضعیت را بررسی میکنیم:
——————-
12. شبیهسازی خرابی یک دیسک
برای اینکه به RAID بگوییم یک دیسک خراب شده:
بررسی:
حالا معمولاً میبینیم RAID در وضعیت degraded قرار گرفته.
——————
دیسک خراب
بعد از Fail کردن:
حالا دیسک از RAID خارج شده.
اگر دیسک جدید جایگزین کرده باشیم:
و RAID شروع به Rebuild میکند.
برای مشاهده:
—————
14. توقف RAID
اگر بخواهیم RAID را متوقف کنیم:
ابتدا Unmount:
بعد:
—————
15. حذف کامل RAID
بعد از Stop کردن:
این کار Metadata مربوط به RAID را از دیسکها پاک میکند.
بعد میتوانیم دوباره از دیسکها برای پارتیشنبندی یا 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 یعنی دایرکتوریهایی که لزوماً یک دیسک فیزیکی جدا نیستند، اما سیستمعامل آنها را در ساختار درختی فایلها به شکل یک دایرکتوری در اختیار ما قرار میدهد.
ساختار کلی لینوکس را میتوان با این دستور دید:
مثلاً:
نکته مهم:
همه این مسیرها لزوماً روی یک پارتیشن یا دیسک نیستند.
——————
2. تقسیم ساختار بین دو دیسک
مثلاً فرض کن:
کاربر همچنان فقط این را میبیند:
ولی پشت صحنه
این همان قدرت Mount در لینوکس است.
——————-
3.
با
مثلاً:
حالا:
حالا اگر بزنیم:
محتوای
یعنی:
مهم: این دستور فایلها را کپی نمیکند؛ فقط همان دایرکتوری را در یک مسیر دیگر قابل دسترسی میکند.
برای حذف این Bind Mount:
—————-
4.
به ما میگوید فایلسیستمها چقدر فضا دارند و چقدر از آن استفاده شده است.
خواناتر:
مثلاً:
یعنی:
🧠 حفظ کن:
———————
5.
برخلاف
مثلاً:
خواناتر:
برای جمع کل:
مثلاً:
یعنی
—————
6. فرق
فرض کن یک انبار داری.
میپرسد:
میپرسد:
پس:
—————
چند دستور مهم
حجم یک پوشه:
حجم تکتک محتویات:
مرتبسازی بر اساس حجم:
این یکی در عیبیابی خیلی کاربردی است؛ مثلاً وقتی سرور میگوید Disk Full، سریع میتوانی بفهمی کدام پوشه بیشترین فضا را گرفته.
———————
جلسه آخر فصل سوم
————————-
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 → حجم 20GB8GB → استفاده شده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
فصل چهارم - قسمت سی و نهم - مدیریت کردن فایل ها - intro
——————
بخش اول مدیریت فایل
بخش دوم فشرده سازی و ارشیو کردن و فایل و لینک
بخش سوم سطح دسترسی به فایل ها
بهش چهارم فرمان های جستجور در لینوکس
🧠 نقشه فصل چهار
این فصل خیلی مهمه؛ مخصوصاً Permission + find + tar چون هم در کار واقعی لینوکس زیاد استفاده میشن و هم برای LPIC مهماند
——————
بخش اول مدیریت فایل
بخش دوم فشرده سازی و ارشیو کردن و فایل و لینک
بخش سوم سطح دسترسی به فایل ها
بهش چهارم فرمان های جستجور در لینوکس
🧠 نقشه فصل چهار
فصل ۴
│
├── 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. ساخت فایل با
سادهترین روش ساخت یک فایل خالی:
حالا:
فایل
————
2. ساخت فایل با ویرایشگر
مثلاً با
داخلش متن بنویس و ذخیره کن.
پس فایل همزمان ساخته و ویرایش میشود.
———————
3. ساخت فایل با
این هم روشی است که قبلاً یاد گرفتیم:
یک فایل خالی میسازد.
یا:
هم فایل را ایجاد میکند و هم داخلش متن مینویسد.
⚠️ اگر فایل از قبل وجود داشته باشد،
برای اضافه کردن متن:
—————-
4. ساخت فایل با
مثلاً:
یک فایل جدید به نام
اما
یعنی اسم
————-
5.
نمایش مسیر فعلی:
مثلاً:
یعنی الان در این Directory هستی.
——————
6.
نمایش محتویات Directory:
نمایش فایلهای مخفی:
نمایش جزئیات:
هر دو:
———————-
Wildcard چیست؟ ⭐️
این قسمت خیلی مهمه.
مثلاً:
یعنی:
مثلاً:
یک مثال دیگر:
یعنی فایلهایی که با
————-
8.
مثلاً:
میتواند پیدا کند:
ولی:
را پیدا نمیکند، چون بین
—————-
دو تا
یعنی:
مثلاً:
—————-
9.
برای انتخاب یک کاراکتر از بین گزینههای مشخص:
یعنی:
پس:
را پیدا میکند.
اما:
نه.
——————
10. ترکیب Wildcard با
مثلاً:
یعنی:
——————
11. ساخت Directory با
یک Directory به نام
——————-
ساخت چند Directory تو در تو
نتیجه:
——————
12. حذف Directory
برای Directory خالی:
⚠️
اگر داخلش فایل داشته باشد، خطا میدهد.
برای حذف Directory همراه محتویات:
——————
13. کپی Directory با
برای کپی کردن Directory باید
یعنی Directory
در نتیجه:
به اینجا کپی میشود:
—————
14. حذف فایلها با
یک فایل:
چند فایل:
با Wildcard:
——————-
⚠️ دستور خطرناک
یعنی:
خیلی مراقب این دستور باش.
قبلش حتماً:
را بزن تا مطمئن شوی در مسیر درست هستی.
و یادت باشد
—————-
🧠 جمعبندی قسمت ۴۰
ساخت:
دیدن:
کپی و انتقال:
حذف:
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 و بقیه نوع فایلها.
مدیریت فایلها — بخش اول
————
در این قسمت میخوایم یاد بگیریم چطور فایل و 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 با
mkdirmkdir 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
نکته: معمولاً
————————
1️⃣ gzip
مثلاً:
حالا:
ساخته میشود و فایل اصلی
برای خارج کردن از حالت فشرده:
یا:
——————-
2️⃣ bzip2
نتیجه:
باز کردن:
یا:
————————
3️⃣ xz
نتیجه:
باز کردن:
یا:
———————
4️⃣ zip
اینجا تفاوت مهمی داریم:
فایل اصلی باقی میماند.
برای خارج کردن:
——————
👀 دیدن محتویات بدون خارج کردن از حالت فشرده
این خیلی کاربردیه:
gzip
مثلاً:
bzip2
xz
مثلاً:
یعنی لازم نیست اول فایل را از حالت فشرده خارج کنیم.
———————
⚡️ چند دستور کاربردی
فقط حجم فایلها:
تعداد خطوط:
نمایش حجم خوانا:
—————-
🧠 خلاصه برای حفظ کردن
و برای خواندن مستقیم:
یک نکته مهم: این ابزارها عمدتاً برای فشردهسازی یک فایل هستند. برای اینکه چندین فایل و پوشه را یکجا بستهبندی کنیم، معمولاً در قسمت بعد میرسیم به
فشردهسازی فایلها و ابزارهای آن
———————-
در لینوکس چند ابزار معروف برای کم کردن حجم فایلها داریم:
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 فایل را جداگانه جابهجا کنی، میتوانی آنها را داخل یک فایل قرار بدهی.
مثلاً:
تبدیل میشود به:
⚠️ آرشیو با فشردهسازی فرق دارد.
ترکیبشان → مثلاً
——————————-
1️⃣ tar — مهمترین ابزار
ساخت آرشیو
مثلاً:
معنی گزینهها:
حالا داریم:
دیدن محتویات
خارج کردن آرشیو
مهمترین گزینههای tar
4️⃣ استخراج در یک مسیر خاص
مثلاً:
یعنی محتویات را داخل
————————-
🔥 tar + gzip
حالا میتوانیم آرشیو را همزمان فشرده کنیم:
باز کردن:
——————-
tar + bzip2
باز کردن:
——————
tar + xz
باز کردن:
🧠 این سه تا را حفظ کن:
————————-
2️⃣ cpio
مثلاً:
اینجا:
برای استخراج:
گزینهها:
مثال واقعی
فرض کن:
میزنیم:
حالا یک فایل داریم:
نکته:
—————————
3️⃣ dd — کپی سطح پایین
اینجا یک تفاوت خیلی مهم داریم.
ولی
مثلاً یک دیسک داریم:
میتوانیم از آن Image بگیریم:
یعنی:
پس:
برگرداندن Image
⚠️ این دستور خیلی خطرناک است؛ اگر
——————
💾 یک مثال کاربردی دیگر با dd
گرفتن Image از یک فلش:
برگرداندن Image به فلش:
——————-
یک مثال خیلی ساده برای ذهن:
tar:
cpio:
dd:
و یادت باشه:
برای دوره LPIC،
آرشیو کردن و 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
🔥 حالا
اینجا میرسیم به قسمت مهم Incremental Backup.
فرض کن یک سرور داری:
امروز از همه Backup میگیری.
فردا فقط
آیا منطقیه دوباره کل 100GB رو Backup کنیم؟
❌ نه.
اینجا Incremental Backup استفاده میکنیم.
————————-
فایل
مثلاً:
اینجا:
Backup دوم
فرض کن فردا فقط یک فایل تغییر کرده:
این بار
——————
🧠 مثال واقعی
روز اول:
Backup:
روز دوم:
Backup:
پس به جای اینکه دوباره 100GB ذخیره کنیم، فقط تغییرات را ذخیره میکنیم.
——————-
⚠️ یک نکته خیلی مهم
فایل
یعنی:
اگر
——————
🔥 Full و Incremental
در
Full Backup
Incremental Backup
در عمل
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 در لینوکس
لینک در لینوکس یعنی یک راه دسترسی به یک فایل از طریق نام یا مسیر دیگر.
مثلاً یک فایل داریم:
حالا میتوانیم یک لینک به آن بسازیم که اسم دیگری داشته باشد.
—————————-
1️⃣ inode چیست؟
هر فایل در لینوکس یک inode دارد.
inode اطلاعاتی مثل اینها را نگه میدارد:
مالک فایل
سطح دسترسی
اندازه فایل
زمانها
محل بلوکهای فایل روی دیسک
تعداد لینکها
اما اسم فایل داخل inode ذخیره نمیشود.
میتوانی inode را ببینی:
مثلاً:
یعنی
————————-
2️⃣ stat
برای دیدن اطلاعات کامل فایل:
مثلاً:
چهار زمان مهم:
Access —
آخرین باری که فایل خوانده/دسترسی شده.
Modify —
آخرین باری که محتوای فایل تغییر کرده.
مثلاً:
Change —
آخرین تغییر در Metadata فایل.
مثلاً:
محتوا تغییر نکرده، ولی Metadata تغییر کرده؛ پس
Birth —
زمان ایجاد فایل؛ البته پشتیبانی و نمایش آن به فایلسیستم و سیستمعامل بستگی دارد.
———————
3️⃣ Hard Link
فرض کن:
حالا:
دو اسم داریم:
بررسی:
مثلاً:
میبینی که inode هر دو یکی است.
یعنی
———————
4️⃣ Soft Link / Symbolic Link
حالا:
ساختار:
این بار
ببین:
مثلاً:
اگر:
محتوای
چون هر دو به همان inode و همان داده اشاره میکنند.
———————-
مثال واقعی
اگر:
و بعد:
اما اگر:
حالا
——————-
5️⃣ فرمان
Hard Link
Soft Link
————————-
6️⃣ readlink
برای فهمیدن لینک به چه چیزی اشاره میکند:
مثلاً:
اگر بخواهی مسیر کامل مقصد را ببینی:
مثلاً:
——————
🎯 برای حفظ کردن
Hard Link:
Soft Link:
inode:
انواع لینک ها درلینوکس
————————-
🔗 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️⃣ فرمان
lnHard 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
فصل چهارم — قسمت چهل و پنجم 🐧
سطح دسترسی ها در لینوکس
—————-
🔐 سطح دسترسیها در لینوکس
در لینوکس هر فایل و دایرکتوری مشخص میکند چه کسی اجازه دارد چه کاری روی آن انجام دهد.
مثلاً:
ممکن است ببینی:
بخش مهم اول:
—————-
1️⃣ سه سطح مالکیت
لینوکس دسترسیها را برای سه گروه بررسی میکند:
مثلاً:
——————-
2️⃣ سه نوع دسترسی
سه Permission اصلی داریم:
برای فایل
برای دایرکتوری
اینجا یک نکته خیلی مهم داریم:
—————————-
3️⃣ تغییر مالک فایل
دستور درست:
نه
مثلاً:
یعنی مالک فایل شود:
——————
تغییر مالک و گروه همزمان
یعنی:
————-
4️⃣ تغییر فقط Group
برای تغییر گروه از:
استفاده میکنیم:
یا با
—————
5️⃣ Permission عددی
احتمالاً اینها را زیاد میبینی:
ارزش Permissionها:
پس:
مثلاً:
یعنی:
پس:
—————-
چند Permission مهم
مثلاً:
——————
6️⃣ umask چیست؟
ببین:
مثلاً:
یعنی سیستم هنگام ساخت فایل/دایرکتوری، بعضی دسترسیها را حذف میکند.
مثلاً معمولاً:
با
پس معمولاً:
میتواند چیزی شبیه:
ایجاد کند.
و:
چیزی شبیه:
ایجاد میکند.
———————
7️⃣
مثلاً:
ممکن است:
برگرداند.
یا:
مثلاً:
—————
🔥 8️⃣ SUID
SUID یعنی:
مثال معروف:
ممکن است ببینی:
اینجا بهجای:
داریم:
این
چرا؟
چون کاربر عادی باید بتواند رمز عبور خودش را تغییر دهد، در حالی که فایلهای مربوط به تغییر رمز عبور نیاز به دسترسیهای خاص دارند.
—————
فعال کردن SUID
یا عددی:
عدد:
—————
🔥 9️⃣ SGID
SGID دو کاربرد دارد، ولی برای دایرکتوریها کاربرد بسیار مهمی دارد.
در دایرکتوری اگر SGID فعال باشد:
مثلاً:
حالا:
گروهش
اگر
گروه فایل هم میتواند:
باشد.
فعال کردن SGID:
یا:
عدد:
—————-
🔥 10️⃣ Sticky Bit
Sticky Bit بیشتر روی دایرکتوریهای اشتراکی استفاده میشود.
مثال معروف:
معمولاً چیزی شبیه:
آخرش:
میبینی.
یعنی کاربران مختلف میتوانند داخل
مثلاً:
Ali نمیتواند همینطوری
فعال کردن Sticky Bit:
یا:
عدد:
——————
🎯 خلاصه کل قسمت
و یک نکته مهم برای LPIC: Permission روی فایل و دایرکتوری یک معنی کاملاً یکسان ندارد؛ مخصوصاً
سطح دسترسی ها در لینوکس
—————-
🔐 سطح دسترسیها در لینوکس
در لینوکس هر فایل و دایرکتوری مشخص میکند چه کسی اجازه دارد چه کاری روی آن انجام دهد.
مثلاً:
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
ایجاد میکند.
umaskPermission اضافه نمیکند؛ فقط 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
———————
تا اینجا با
فرض کن فایل
یعنی:
صاحب فایل →
گروه →
بقیه → هیچ دسترسی ندارند.
حالا میخواهیم یک کاربر خاص به اسم reza هم فقط بتواند فایل را بخواند.
اینجاست که ACL به درد میخورد.
—————-
ACL = Access Control List
یعنی میتوانیم برای کاربرها و گروههای خاص، دسترسی جداگانه تعریف کنیم؛ بدون اینکه ساختار اصلی
مثال واقعی 🧠
فرض کن:
با
—————————-
1️⃣ دیدن ACL
فرمان:
مثلاً:
قسمت مهم:
یعنی کاربر
————————
2️⃣ اضافه کردن ACL برای یک کاربر
مثلاً:
یا:
حالا:
و میبینیم:
——————-
3️⃣ دادن دسترسی کامل به یک کاربر
یعنی
را دارد.
——————-
4️⃣ حذف ACL یک کاربر
یعنی ACL مربوط به
———-
5️⃣ ACL برای گروه
مثلاً گروه
—————-
6️⃣ حذف ACL گروه
7️⃣ ACL روی دایرکتوری
اینجا ACL خیلی جذابتر میشود.
فرض کن:
میخواهیم
حالا
دارد.
————————
8️⃣ ACL پیشفرض ⭐️
یک نکته مهم:
اگر روی یک دایرکتوری ACL بگذاری، فایلهایی که بعداً داخلش ساخته میشوند لزوماً ACL موردنظر را نمیگیرند.
برای این کار از Default ACL استفاده میکنیم:
حالا فایلها و دایرکتوریهای جدید داخل
دیدنش:
مثلاً:
_____________
9️⃣ Mask چیست؟ ⚠️
در ACL یک مفهوم مهم داریم:
Mask حداکثر دسترسیای را که برای کاربرهای ACL و گروهها میتوان اعمال کرد مشخص میکند.
مثلاً:
ما به
پس دسترسی مؤثر
برای دیدن دسترسی مؤثر:
ممکن است ببینی:
یعنی ACL نوشته
————————
🔟 حذف تمام ACLها
اگر بخواهیم ACLهای اضافی فایل را پاک کنیم:
——————————————————-
نصب ابزار ACL
اگر
Debian / Ubuntu
RHEL / Fedora
————————————-
سطح دسترسی با 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
فصل چهارم — قسمت آخر - قسمت چهل و هفتم 🐧
جستجو در لینوکس
——————
در لینوکس چند فرمان مهم برای پیدا کردن برنامه، فایل و مسیر فایلها داریم. مهمترینها:
—————-
1️⃣
وقتی میزنیم:
مثلاً:
یعنی وقتی بنویسیم:
سیستم از این فایل استفاده میکند.
مثال:
🧠 which = این برنامهای که اجرا میکنم کجاست؟
——————-
2️⃣
ممکن است بدهد:
یعنی میتواند محلهای مختلف مربوط به برنامه، مثل:
فایل اجرایی
Source
را نشان دهد.
مثلاً:
🧠 فرق ساده:
—————————
3️⃣
مثلاً دنبال
ممکن است کلی نتیجه بدهد:
مزیت
چرا؟
چون معمولاً از یک Database استفاده میکند و کل دیسک را همان لحظه نمیگردد.
———————
4️⃣
ساختار کلی:
مثلاً:
یعنی:
———————
پیدا کردن فایل با اسم
یا:
یعنی تمام فایلهای
—————
جستجو بدون حساسیت به حروف
———————
پیدا کردن دایرکتوری
———-
——————
پیدا کردن فایل بر اساس حجم
مثلاً فایلهای بزرگتر از 100MB:
یا فایلهای کوچکتر از 10MB:
——————-
پیدا کردن فایل بر اساس زمان
مثلاً فایلهایی که در 1 روز گذشته تغییر کردهاند:
یا:
یعنی فایلهایی که بیشتر از 30 روز از آخرین تغییرشان گذشته.
——————-
پیدا کردن فایل و اجرای دستور روی آن ⭐️
اینجا
مثلاً:
یعنی:
⚠️ این مدل دستورها را روی مسیرهای مهم مثل
——————-
ترکیب
مثلاً:
اینجا:
و:
————————
فصل چهارم هم با همین مفاهیم بسته میشود: مدیریت فایل → فشردهسازی → آرشیو → لینکها → Permission → ACL → جستجو. 🐧🔥
جستجو در لینوکس
——————
در لینوکس چند فرمان مهم برای پیدا کردن برنامه، فایل و مسیر فایلها داریم. مهمترینها:
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