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
تا رو فعلاً حفظ کن:
1️⃣ Redirection — انتقال خروجی و ورودی
>       خروجی → فایل (جایگزین)
>> خروجی → فایل (اضافه)
< ورودی ← فایل
2> خطا → فایل
2>> خطا → فایل (اضافه)

مثال:
ls > list.txt
echo hello >> list.txt
cat < list.txt
ls /abc 2> error.txt

================

2️⃣ Pipe | — اتصال دستورات
command1 | command2

یعنی:
خروجی دستور اول → ورودی دستور دوم
ls | grep txt
ps aux | grep ssh
cat /etc/passwd | grep root

حتی می‌توانی چندتا را زنجیره کنی:
cat /etc/passwd | grep bash | cut -d ":" -f 1

================

3️⃣ sed — تغییر متن ✏️
sed 's/old/new/' file

تغییر اولین مورد در هر خط.
sed 's/old/new/g' file

تغییر همه موارد.
sed -i 's/old/new/g' file

تغییر مستقیم داخل فایل.
حذف خط:
sed '3d' file

نمایش خط:
sed -n '3p' file

پس:
sed = جستجو + تغییر + حذف + نمایش متن

===================

4️⃣ xargs — دادن خروجی به دستور بعدی 📦
command1 | xargs command2

مثال:
echo "a.txt b.txt" | xargs rm

یعنی:
a.txt b.txt
↓
xargs
↓
rm

برای تعداد زیاد فایل:
find . -name "*.log" | xargs rm

روش امن‌تر برای اسم فایل‌های دارای فاصله:
find . -name "*.log" -print0 | xargs -0 rm

چند Option مهم:
-n  → تعداد ورودی در هر اجرا
-I → مشخص کردن جای ورودی
-0 → ورودی امن با Null
-P → اجرای موازی
-r → اگر ورودی خالی بود اجرا نکن

🔥 خلاصه نهایی
>       خروجی → فایل
| خروجی → دستور بعدی
sed ویرایش متن
xargs خروجی → Argument دستور

اگر همین چهار مفهوم را خوب یاد بگیری، بخش بزرگی از کار با Shell و Linux برات خیلی راحت‌تر میشه.
👏1
tr — تبدیل یا حذف کاراکترها 🔄
tr برای جایگزینی، تبدیل و حذف کاراکترها استفاده میشه.
تبدیل Space به ::
echo "ali reza" | tr " " ":"

خروجی:
ali:reza

تبدیل حروف کوچک به بزرگ:
echo "hello" | tr 'a-z' 'A-Z'

خروجی:
HELLO

حذف یک کاراکتر:
echo "hello123" | tr -d '0-9'

خروجی:
hello

حذف Space:
echo "ali reza" | tr -d ' '

مثال با فایل:
tr " " ":" < file.txt

🧠 مهم‌ترین‌ها:
tr "a" "b"     → جایگزینی
tr 'a-z' 'A-Z' → تبدیل حروف کوچک به بزرگ
tr -d "x" → حذف کاراکتر


==============================
tee — نمایش + ذخیره همزمان 📺

tee خروجی را هم روی صفحه نشان می‌دهد و هم داخل فایل می‌نویسد.
echo "hello" | tee test.txt

هم hello را می‌بینی، هم داخل test.txt ذخیره می‌شود.
اضافه کردن به انتهای فایل:
echo "hello" | tee -a test.txt

مثال:
ls | tee list.txt

خروجی ls هم نمایش داده می‌شود و هم داخل list.txt ذخیره می‌شود.
🧠 خلاصه:
tr    → تبدیل / جایگزینی / حذف کاراکتر
tee → نمایش خروجی + ذخیره در فایل

مثلاً این ترکیب خیلی خوبه:
cat file.txt | tr 'a-z' 'A-Z' | tee result.txt

یعنی:
فایل → تبدیل حروف به بزرگ → نمایش روی صفحه → ذخیره در result.txt.
👏1
شروع فصل دوم
================
قسمت نوزده - مقدمه
———————-
در این فصل ما نصب برنامه ها رو یاد میگیریم
مخصوصا zabbix و mux

==================
قسمت بیست - مفاهیم نصب
———-
1️⃣ دسته‌بندی توزیع‌ها
دو خانواده مهم:
Red Hat → AlmaLinux, Rocky, RHEL, Fedora
Debian → Debian, Ubuntu, Linux Mint

2️⃣ نصب Online و Offline
Online  → دانلود Package از Repository
Offline → نصب Package موجود روی سیستم

3️⃣ Repository (مخزن)
جایی که Packageها و اطلاعات مربوط به آن‌ها نگهداری می‌شوند.
مثلاً در Debian:
/etc/apt/sources.list

4️⃣ Source Code
کد اصلی برنامه که انسان می‌تواند آن را بخواند و در صورت نیاز Compile کند.
Source Code
↓
Compiler
↓
Binary

5️⃣ Binary
فایل قابل اجرای برنامه است که سیستم می‌تواند مستقیماً اجرا کند.
مثلاً:
/usr/bin/ls

🧠 خلاصه
Repository → محل دریافت Package
Package → بسته نرم‌افزاری
Source Code → کد اصلی برنامه
Binary → فایل قابل اجرای برنامه
Online → دریافت از اینترنت
Offline → نصب از فایل موجود

نکته مهم: در لینوکس معمولاً نرم‌افزار را مستقیماً از سایت‌های مختلف دانلود نمی‌کنیم؛ بهتر است از Package Manager و Repository معتبر توزیع استفاده کنیم.
==============
👏1
قسمت بیست‌ویک — نصب نرم‌افزار از Source 🐧
————————————

tmux چیست؟

tmux یک Terminal Multiplexer است؛ اجازه می‌دهد چند Session و Terminal را داخل یک اتصال SSH مدیریت کنیم و اگر SSH قطع شد، برنامه‌ها همچنان اجرا بمانند.
⚠️ برای تمرین بهتره روی VM تستی نصب کنید، نه سرور اصلی.


1️⃣ تشخیص سیستم‌عامل
cat /etc/os-release

اطلاعات توزیع، نسخه و نام سیستم‌عامل را نمایش می‌دهد.

2️⃣ نصب ابزارهای لازم
dnf install git

نصب git.

dnf groupinstall "Development Tools"

ابزارهای لازم برای Compile کردن Source Code را نصب می‌کند.
مثلاً gcc، make و ابزارهای توسعه.

برای automake:
dnf install automake


3️⃣ دریافت Source Code
git clone URL

یک Repository را از Git دریافت می‌کند.
مثلاً:
git clone https://github.com/tmux/tmux.git
cd tmux


4️⃣ آماده‌سازی و نصب از Source
معمولاً روند کلی:
Source Code
↓
Configure
↓
make
↓
make install

در پروژه‌هایی مثل tmux ممکن است ابتدا نیاز باشد:
sh autogen.sh

سپس:
./configure
make
sudo make install

configure → بررسی سیستم و ساخت تنظیمات نصب
make → Source Code را Compile می‌کند
make install → فایل‌های ساخته‌شده را نصب می‌کند

5️⃣جستجوی Package با dnf
dnf search tmux

برای جستجوی Packageهای مرتبط با tmux در Repositoryهاست.

برای دیدن اطلاعات یک Package:
dnf info tmux

و برای نصب:
dnf install tmux

🧠 خلاصه
cat /etc/os-release → تشخیص سیستم‌عامل
git clone → دریافت Source
dnf search → جستجوی Package
./configure → آماده‌سازی
make → Compile
make install → نصب


نکته:
نصب با dnf install tmux با نصب از Source فرق دارد؛ در حالت اول Package Manager نسخه آماده را از Repository نصب می‌کند، اما در حالت دوم خودت Source Code را Compile می‌کنی.

==========================

قسمت بیست و دو — rpm and deb 🐧
————————
دو فرمت اصلی Package در لینوکس:
Red Hat → .rpm
Debian → .deb

ساختار کلی:
package-name-version-release.architecture.rpm
package-name-version-release.architecture.deb

مثلاً:
tmux-3.x.x-1.x86_64.rpm

دانلود Package بدون نصب

در AlmaLinux / Red Hat:
dnf download tmux

فایل .rpm مربوط به سیستم را دانلود می‌کند و نصبش نمی‌کند.

برای Debian معمولاً:
apt download tmux

فایل .deb را دانلود می‌کند.

نصب RPM
rpm -ivh package.rpm

یا روش پیشنهادی:
dnf install ./package.rpm

نصب DEB
dpkg -i package.deb

یا:
apt install ./package.deb


sudo -i
چیست؟ 👑
sudo -i

یک Login Shell با دسترسی Root باز می‌کند.

یعنی بعد از اجرای آن:
whoami

خروجی:
root

تفاوت مهم:
sudo command   → فقط همان دستور با دسترسی root

sudo -i → وارد محیط root می‌شوی

برای خروج:
exit

🧠 خلاصه:
.rpm → Red Hat / AlmaLinux
.deb → Debian / Ubuntu

rpm → مدیریت مستقیم RPM
dpkg → مدیریت مستقیم DEB

dnf → Package Manager در AlmaLinux
apt → Package Manager در Debian/Ubuntu

sudo -i → ورود به Shell با دسترسی root


==================
👏1
قسمت بیست و سه — install debian 🐧
————————————————

اول مخازن را به‌روز می‌کنیم:
apt update

نصب Package:
apt install tmux

نصب بدون پرسش:
apt install -y tmux

حذف:
apt remove tmux

حذف کامل همراه Configuration:
apt purge tmux

آپدیت Packageها:
apt upgrade

جستجوی Package:
apt search tmux

اطلاعات Package:
apt show tmux

لیست Packageهای نصب‌شده:
apt list --installed

——————————
2️⃣ نصب بدون Repository با dpkg
اگر فایل .deb داشته باشیم:
dpkg -i package.deb

اگر Dependency کم بود:
apt install -f

حذف Package:
dpkg -r tmux

حذف کامل:
dpkg -P tmux

بررسی نصب بودن:
dpkg -l tmux

جستجو بین Packageهای نصب‌شده:
dpkg -l | grep tmux

نمایش اطلاعات:
dpkg -s tmux

نمایش فایل‌هایی که یک Package نصب کرده:
dpkg -L tmux

بررسی اینکه یک فایل متعلق به کدام Package است:
dpkg -S /usr/bin/tmux

——————-

3️⃣ su -l چیست؟ 👑
su -l

برای ورود به حساب کاربر دیگر با محیط Login کامل است.
برای ورود به Root:
su -l

یا کوتاه‌تر:
su -

بعد رمز Root را می‌خواهد.
بررسی:
whoami

خروج:
exit

تفاوت:
su -l       → ورود به Root با محیط Login
sudo -i → ورود به Root با sudo

——————————

4️⃣ اگر apt update خطا داد
یکی از علت‌های رایج در Debian این است که Repository مربوط به DVD/ISO فعال باشد.
فایل مخازن:
nano /etc/apt/sources.list

اگر خطی شبیه این دیدی:
deb cdrom:[Debian ...]

آن را Comment کن:
# deb cdrom:[Debian ...]

یعنی # اول خط بگذار.
بعد:
apt update

————————-

🧠 خلاصه:
apt     → مدیریت Package از Repository
dpkg → مدیریت مستقیم فایل .deb
apt update → بروزرسانی لیست مخازن
apt install → نصب
apt remove → حذف
apt purge → حذف کامل
dpkg -i → نصب .deb
dpkg -r → حذف
dpkg -l → لیست/وضعیت Package
dpkg -L → فایل‌های Package
su -l → ورود به کاربر با Login کامل


نکته:
در Debian امروزی معمولاً تنظیمات Repositoryها ممکن است علاوه بر /etc/apt/sources.list در فایل‌های داخل /etc/apt/sources.list.d/ هم باشند.
👏1
قسمت بیست و چهار — install redhat 🐧
———————

حالا همین مباحث قسمت قبل را در AlmaLinux / Red Hat انجام می‌دهیم.
1️⃣ نصب از Repository با dnf
آپدیت مخازن:
dnf check-update

نصب:
dnf install tmux

حذف:
dnf remove tmux

جستجو:
dnf search tmux

اطلاعات Package:
dnf info tmux

آپدیت Packageها:
dnf update

لیست Packageهای نصب‌شده:
dnf list installed


———————————-

2️⃣ مدیریت مستقیم RPM با rpm
نصب فایل .rpm:
rpm -ivh package.rpm

آپدیت:
rpm -Uvh package.rpm

حذف:
rpm -e package-name

بررسی نصب بودن:
rpm -q tmux

نمایش اطلاعات:
rpm -qi tmux

نمایش فایل‌های نصب‌شده توسط Package:
rpm -ql tmux

پیدا کردن اینکه یک فایل متعلق به کدام Package است:
rpm -qf /usr/bin/tmux

نمایش Packageهای نصب‌شده:
rpm -qa


————————-

🧠 تفاوت مهم
Red Hat / AlmaLinux

dnf → مدیریت Package و Dependency از Repository
rpm → مدیریت مستقیم فایل‌های .rpm

مثلاً:
dnf install tmux

از Repository نصب می‌کند.
اما:
rpm -ivh tmux.rpm

مستقیماً فایل RPM را نصب می‌کند.
مقایسه با Debian
Debian              Red Hat

apt install dnf install
dpkg -i rpm -ivh
apt remove dnf remove
apt search dnf search
dpkg -l rpm -qa
dpkg -L rpm -ql
dpkg -S rpm -qf

نکته مهم LPIC: در Red Hatهای جدید مثل AlmaLinux، dnf ابزار اصلی مدیریت Package است؛ yum در بسیاری از سیستم‌ها به dnf اشاره می‌کند.

———————————

در AlmaLinux / Red Hat فایل‌های Repository معمولاً اینجا هستند:
/etc/yum.repos.d/

دیدن Repositoryها
ls /etc/yum.repos.d/

معمولاً فایل‌هایی با پسوند .repo می‌بینی.
برای ویرایش:
nano /etc/yum.repos.d/almalinux.repo

یا اگر فایل دیگری بود:
nano /etc/yum.repos.d/اسم-فایل.repo

بعد از تغییر Repository:
dnf clean all
dnf makecache
dnf update

🧠 حفظ کن:
Debian:
/etc/apt/sources.list
/etc/apt/sources.list.d/

Red Hat:
/etc/yum.repos.d/*.repo

اگر AlmaLinux 9 داری و dnf خطای Repository می‌دهد، اول این را بزن:
dnf repolist

تا ببینی کدام Repository مشکل دارد.
👏1
قسمت بیست و پنج - snap and app image

——————————-

گاهی نرم‌افزار در Repository رسمی توزیع وجود ندارد؛ چند روش دیگر داریم:
1️⃣ Repository خود پروژه
بعضی پروژه‌ها Repository اختصاصی دارند.
Repository رسمی Linux
↓
Repository خود پروژه
↓
نصب Package

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

2️⃣ نصب از Source Code
کد برنامه را دریافت و خودمان Compile می‌کنیم:
Source Code
↓
configure
↓
make
↓
make install

———————-

3️⃣ Snap چیست؟
Snap یک سیستم Package Management است که توسط Canonical ساخته شده.
برنامه‌ها به‌صورت Snap Package نصب می‌شوند و وابستگی‌های موردنیازشان را تا حد زیادی همراه خود دارند.
نصب:
snap install tmux

دیدن Packageها:
snap list

حذف:
snap remove tmux

————————

4️⃣ ابزارهای مشابه Snap
سیستم‌های دیگری هم برای نصب نرم‌افزار وجود دارند، مثل:
Snap
Flatpak
AppImage

مثلاً Flatpak:
flatpak install flathub org.gimp.GIMP


————————

5️⃣ AppImage چیست؟
AppImage یک روش اجرای نرم‌افزار است که معمولاً بدون نصب سنتی Package اجرا می‌شود.
مثلاً:
chmod +x program.AppImage
./program.AppImage

یعنی:
AppImage
↓
Executable File
↓
اجرا

🧠 خلاصه
Repository        → نصب از مخزن
Source Code → دریافت کد و Compile
Snap → Package مستقل
Flatpak → Package مستقل
AppImage → فایل اجرایی قابل حمل


نکته:
Snap و Flatpak بیشتر روی محیط‌های Desktop دیده می‌شوند، ولی در بعضی سرورها هم قابل استفاده‌اند. برای سرورهای Linux معمولاً اولویت با Package Manager رسمی مثل dnf و apt است.

======================
👏1
قسمت بیست و شش - install zabbix
————————--

قسمت بیست‌وشش — نصب Zabbix Server 🐧
Zabbix چیست؟
Zabbix یک سیستم Monitoring است که برای نظارت روی Server، Network، CPU، RAM، Disk، Traffic، Serviceها و... استفاده می‌شود.
ساختار کلی:
Zabbix Agent
↓
Zabbix Server
↓
Database (MySQL/MariaDB)
↓
Zabbix Frontend
↓
Web Browser

پیش‌نیازها
قبل از نصب Zabbix Server معمولاً نیاز داریم:
Linux
Web Server → Apache/Nginx
PHP
Database → MySQL/MariaDB
Zabbix Server
Zabbix Agent

نکته: MySQL لازم نیست حتماً از قبل نصب شده باشد؛ می‌توانیم آن را به‌عنوان یکی از مراحل نصب Zabbix نصب و تنظیم کنیم.
=================

1️⃣ نصب Database
در AlmaLinux:
dnf install mariadb-server mariadb

فعال‌سازی:
systemctl enable --now mariadb

امن‌سازی:
mysql_secure_installation

ورود به MySQL/MariaDB:
mysql -u root -p

———————

2️⃣ ساخت Database برای Zabbix
داخل MariaDB:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

ساخت User:
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'StrongPassword';

دادن دسترسی:
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';

سپس:
FLUSH PRIVILEGES;
EXIT;


————————-

3️⃣ نصب Repository زبیکس
برای Zabbix باید Repository متناسب با نسخه Zabbix و نسخه AlmaLinux/RHEL را اضافه کنیم.
بعد از اضافه شدن Repository:
dnf clean all
dnf repolist

و سپس Packageهای Zabbix نصب می‌شوند.

————————-

4️⃣ نصب Zabbix Server و Frontend
به‌صورت کلی Packageهای موردنیاز:
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent

—————————
5️⃣ Import کردن Database
Schema اولیه Zabbix باید داخل Database وارد شود. بسته به نسخه Zabbix، فایل SQL داخل Packageهای Zabbix قرار دارد.
به‌صورت کلی:
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix

⚠️ مسیر و نام فایل ممکن است بین نسخه‌های Zabbix متفاوت باشد.
————————-

6️⃣ تنظیم Zabbix Server
فایل اصلی:
nano /etc/zabbix/zabbix_server.conf

قسمت Database را تنظیم می‌کنیم:
DBName=zabbix
DBUser=zabbix
DBPassword=StrongPassword


——————-

7️⃣ راه‌اندازی سرویس‌ها
systemctl enable --now zabbix-server
systemctl enable --now zabbix-agent

بررسی:
systemctl status zabbix-server
systemctl status zabbix-agent


——————————

8️⃣ Web Server
برای Frontend به Apache/Nginx و PHP نیاز داریم. اگر Apache استفاده کنیم:
systemctl enable --now httpd


————————

9️⃣ ورود به پنل Zabbix
بعد از نصب، از مرورگر وارد Frontend می‌شویم:
http://SERVER-IP/zabbix

در Wizard نصب، اطلاعات Database را وارد می‌کنیم:
Database: MySQL
Database name: zabbix
User: zabbix
Password: ********

بعد از تکمیل Wizard وارد پنل Zabbix می‌شویم.

———————-

🔟 پورت‌های مهم
10050 → Zabbix Agent
10051 → Zabbix Server
80 → HTTP
443 → HTTPS

اگر Firewall فعال است، پورت‌های لازم را باز می‌کنیم.

—————————-

🧠 ساختار کامل نصب
AlmaLinux
↓
MariaDB / MySQL
↓
Database: zabbix
↓
Zabbix Repository
↓
Zabbix Server
↓
Zabbix Agent
↓
Apache + PHP
↓
Zabbix Frontend
↓
Browser

نکته مهم برای دوره: برای آموزش بهتر است Zabbix Server را روی یک VM جداگانه نصب کنید، نه روی سرور اصلی؛ مخصوصاً چون بعداً Agent، Monitoring، Database و Alerting را روی همین محیط تست می‌کنیم.
👏1
اگر درست نصب کنید وارد پنل میشید
👏1
قسمت بیست‌وهفتم — LDD و Chroot 🐧

————————
chroot چیست؟
chroot مخفف Change Root است؛ ریشه‌ی فایل‌سیستم یک Process را به یک پوشه تغییر می‌دهد.
یعنی کاربر داخل یک محیط محدود و جداشده از فایل‌سیستم اصلی قرار می‌گیرد.
⚠️

chroot
به‌تنهایی Sandbox امنیتی کامل نیست و برای ایزوله‌سازی قوی باید از Container یا روش‌های امنیتی دیگر استفاده کرد.


—————————

1️⃣ ساخت محیط
mkdir -p /home/test/dev

ساخت مسیر /home/test/dev.
—————————
2️⃣ ساخت Device Fileها
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8

این‌ها Device Fileهای لازم برای بعضی برنامه‌ها هستند:

null → دور ریختن خروجی
tty → ارتباط با Terminal
zero → تولید داده صفر
random → تولید داده تصادفی

c یعنی Character Device.
—————————
3️⃣ تنظیم Permission
chown root:root /home/test
chmod 0755 /home/test
ls -ld /home/test

مالک را root و Permission را 755 می‌کند.
—————————
4️⃣ انتقال Bash
mkdir bin
which bash
cp -v /bin/bash /home/test/bin

which bash مسیر Bash را پیدا می‌کند.
—————————
5️⃣ ldd چیست؟
ldd /bin/bash

وابستگی‌های Dynamic برنامه را نشان می‌دهد.

مثلاً:
libc.so.6
libtinfo.so.6
ld-linux-x86-64.so.2

یعنی Bash برای اجرا به این Libraryها نیاز دارد.
—————————

6️⃣ کپی Libraryها
mkdir -p /home/test/lib64
cd /home/test/lib64

سپس Libraryهایی که ldd نشان داده را داخل محیط Chroot قرار می‌دهیم.
مثلاً:
cp /lib64/libtinfo.so.6 .
cp /lib/x86_64-linux-gnu/libc.so.6 .
cp /lib64/ld-linux-x86-64.so.2 .

نکته: مسیر Libraryها به توزیع و معماری سیستم بستگی دارد؛ همیشه اول خروجی ldd /bin/bash را بررسی کنید.
(.) در انتهای دستور یعنی پوشه فعلی.(منظور همان نقطه است)

—————————
7️⃣ ساخت User
useradd ali
passwd ali

—————————

8️⃣ ساخت فایل‌های User داخل Chroot
cd /home/test
mkdir etc

cp -v /etc/passwd /home/test/etc/
cp -v /etc/group /home/test/etc/

—————————

9️⃣ فعال کردن Chroot برای User
فایل SSH:
nano /etc/ssh/sshd_config

اضافه می‌کنیم:
Match User ali
ChrootDirectory /home/test

سپس:
systemctl restart sshd

حالا User ali هنگام SSH وارد /home/test می‌شود.
—————————

🔟 چرا ls کار نمی‌کند؟
چون داخل Chroot فقط فایل‌هایی را داریم که خودمان ساخته‌ایم.
پس:
mkdir -p /home/test/usr/bin
cp /usr/bin/ls /home/test/usr/bin/

اما فقط کپی کردن ls کافی نیست؛ ls هم مثل Bash وابستگی‌های خودش را دارد. باید Libraryهای موردنیاز آن را با ldd /usr/bin/ls پیدا و داخل Chroot قرار دهیم.


🧠 مفهوم کلی
سیستم اصلی
│
└── /home/test
│
├── bin/bash
├── usr/bin/ls
├── lib / lib64
├── etc/passwd
└── dev/

به این ساختار Chroot Environment می‌گوییم.
یعنی برای کاربر یک محیط محدود می‌سازیم و مشخص می‌کنیم چه فایل‌ها و برنامه‌هایی داخل آن در دسترس باشند.
👏2
قسمت بیست و هشتم — top and ps 🐧

————————
پردازش (Process) چیست؟
هر برنامه‌ای که در حال اجراست، یک Process ایجاد می‌کند.
هر Process یک شناسه دارد:
PID

یعنی Process ID؛ شماره‌ای که سیستم‌عامل برای شناسایی هر Process اختصاص می‌دهد.
———————————-

ps چیست؟
برای مشاهده Processهای در حال اجرا استفاده می‌شود.
ps

Processهای مربوط به Terminal فعلی را نشان می‌دهد.
برای مشاهده تقریباً تمام Processها:
ps aux

اطلاعات مهم:
USER → اجراکننده Process
PID → شناسه Process
%CPU → مصرف CPU
%MEM → مصرف RAM
STAT → وضعیت Process
COMMAND → دستور/برنامه

مثلاً پیدا کردن یک Process:
ps aux | grep ssh

———————————

top چیست؟
برای مانیتور لحظه‌ای Processها و منابع سیستم:
top

اطلاعاتی مثل:
CPU
RAM
Load Average
Processes
PID
%CPU
%MEM

را به‌صورت زنده نمایش می‌دهد.
برای خروج:
q

——————————————

htop
نسخه‌ی راحت‌تر و تعاملی‌تر top است:
htop

اگر نصب نبود:
dnf install htop

یا در Debian:
apt install htop

داخل htop معمولاً می‌توان Processها را راحت‌تر مشاهده، مرتب و مدیریت کرد.

—————————

خلاصه
Process → برنامه در حال اجرا
PID → شماره شناسایی Process

ps → نمایش Processها
ps aux → نمایش گسترده Processها
top → مانیتور لحظه‌ای Processها
htop → نسخه تعاملی‌تر top

چند دستور مهم برای تمرین:
ps aux
ps aux | grep ssh
top
htop


=======================

قسمت بیست و نهم — tmux 🐧
————————
tmux چیست؟
tmux یک Terminal Multiplexer است؛ یعنی می‌توانیم یک ترمینال را به چند بخش تقسیم کنیم و چند برنامه را هم‌زمان اجرا کنیم.
مهم‌ترین کاربردش روی SSH است؛ اگر اتصال SSH قطع شود، Session می‌تواند همچنان فعال بماند.

————————-
اجرای tmux
tmux

ساخت Session با نام:
tmux new -s test

دیدن Sessionها:
tmux ls

اتصال دوباره:
tmux attach -t test

خروج از Session بدون بستن آن:
Ctrl + B → D

بستن Session:
tmux kill-session -t test

———————

تقسیم صفحه
داخل tmux:
Ctrl + B → %

تقسیم عمودی
Ctrl + B → "

تقسیم افقی
جابجایی بین پنجره‌ها:
Ctrl + B → Arrow Keys

ساخت Window جدید:
Ctrl + B → C

رفتن به Window بعدی:
Ctrl + B → N

—————————-

screen چیست؟
screen هم مانند tmux یک Terminal Multiplexer است.
اجرای آن:
screen

ساخت Session:
screen -S test

دیدن Sessionها:
screen -ls

اتصال مجدد:
screen -r test

جدا شدن بدون بستن:
Ctrl + A → D

—————————————————
🧠 خلاصه فصل
tmux   → Terminal Multiplexer جدیدتر و قدرتمند
screen → Terminal Multiplexer قدیمی‌تر

tmux new -s test → ساخت Session
tmux ls → مشاهده Session
Ctrl+B D → جدا شدن
tmux attach → اتصال مجدد

نکته طلایی: برای کارهای طولانی روی سرور و مخصوصاً اتصال SSH، tmux یکی از ابزارهای خیلی کاربردی لینوکس است.

=====================
👏1
قسمت سی ام — Kill 🐧
جلسه اخر فصل دوم

————————
Job چیست؟
Job پردازشی است که از داخل Shell اجرا شده و Shell آن را مدیریت می‌کند.
مشاهده Jobها:
jobs

اجرای برنامه در Background:
command &

مثلاً:
sleep 100 &

برگرداندن Job به Foreground:
fg

فرستادن Job به Background:
bg

متوقف کردن موقت برنامه:
Ctrl + Z

——————————-


& چیست؟
وقتی & آخر دستور قرار می‌دهیم، برنامه در Background اجرا می‌شود و Terminal آزاد می‌ماند:
sleep 100 &

——————————

kill چیست؟
برای ارسال Signal به Process استفاده می‌شود.
kill PID

مثلاً:
kill 1234

اگر Process با Signal معمولی بسته نشد:
kill -9 1234

———————————

Signal چیست؟
Signal یک پیام کنترلی است که به Process ارسال می‌شود.

چند Signal مهم:

SIGHUP
1
قطع ارتباط/Reload در برخی برنامه‌ها

SIGINT
2
Interrupt؛ مشابه Ctrl+C

SIGQUIT
3
خروج همراه با Core Dump

SIGKILL
9
توقف اجباری

SIGTERM
15
درخواست خاتمه محترمانه

SIGSTOP
19
توقف اجباری Process

SIGCONT
18
ادامه Process متوقف‌شده

————————

دیدن همه Signalها:
kill -l

به‌طور معمول اول از:
kill PID

استفاده می‌کنیم که SIGTERM است؛ kill -9 آخرین راه است چون برنامه فرصت Cleanup ندارد.

—————————-

killall
بر اساس نام Process عمل می‌کند:
killall firefox

یعنی Processهای دارای این نام را هدف می‌گیرد.

————————

pkill
برای ارسال Signal بر اساس نام یا الگوی Process:
pkill firefox

مثلاً:
pkill -9 firefox

————————-

🧠 جمع
jobs       → مشاهده Jobها
& → اجرای Background
Ctrl + Z → توقف موقت
bg → ادامه در Background
fg → آوردن به Foreground

kill PID → ارسال Signal به PID
killall → بر اساس نام
pkill → بر اساس نام/Pattern

SIGTERM → خاتمه محترمانه
SIGKILL → خاتمه اجباری
SIGSTOP → توقف
SIGCONT → ادامه
👏1
خب خب فصل دو هم تمام شد

کم کم وارد فصل سه خواهیم شد
👏2❤1
🔹 MAC Spoofing چیست؟
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️⃣ ساختار دیسک
/dev
نام‌گذاری Diskها
sda, sdb
Partitionها مثل sda1
MBR و 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
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 در /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 🐧
—————-

یسک با 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 چون کمی گیج کنندست به دو صورت توضیح داده شده که همدیگه رو تکمیل میکنن