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
Media is too big
VIEW IN TELEGRAM
حل چالش های Bndit
قسمت اول
————--
از چالش 1 تا 10
——————-
سایت
https://overthewire.org/wargames
—————————-
بابت صدا معذرت میخوام توی ویدیو های بعدی بهتر میشه
این ویدیو دلی بود گفتم بگیرم شما هم بتونید استفاده کنید❤️


#bandit #linux
👏3🔥2❤1👍1🎉1
به نام خدا شروع فصل هفت لینوکس الپیک یک (102)
❤3🔥1
فصل هفتم — قسمت شصت و هفتم 🐧
مدیریت کردن سیستم — System Administration
——————-
فصل هفتم وارد بخش مدیریت واقعی یک Linux Server می‌شود. یعنی اینجا دیگر فقط با دستورات لینوکس کار نمی‌کنیم؛ یاد می‌گیریم یک سیستم را اداره و نگهداری کنیم.
چهار بخش اصلی این فصل:
System Administration
│
├── 👤 Users & Groups
├── 🕐 Time Management
├── 📋 Logs
└── 📧 Mail Transfer Agent


———————-

1️⃣ مدیریت کاربران و گروه‌ها 👤
در لینوکس هر کسی که وارد سیستم می‌شود یک User دارد.
مثلاً:
root
ali
admin

هر User می‌تواند عضو یک یا چند Group باشد.
مثلاً:
ali
├── users
├── developers
└── docker

چرا Group داریم؟
فرض کن ۱۰ نفر در یک شرکت داریم و همه باید به یک پوشه دسترسی داشته باشند.
به‌جای اینکه برای تک‌تک افراد Permission تنظیم کنیم:
ali
reza
mohammad
sara
...

یک گروه می‌سازیم:
developers

و همه را عضو آن می‌کنیم.

———————

دستورات مهمی که در این بخش خواهیم داشت:
useradd
usermod
userdel
passwd
id
who
whoami
groups
groupadd
groupmod
groupdel

فایل‌های مهم:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow

🧠 این چهار فایل را خیلی خوب یاد بگیر.

————————-

2️⃣ مدیریت زمان 🕐
این قسمت ادامه چیزی است که در فصل قبل خواندیم.
سرور باید ساعت صحیح داشته باشد.
چون زمان اشتباه باعث مشکل در:
Log
Authentication
Certificate
Kerberos
Cron
ارتباط بین سرورها
می‌شود.
ابزارهای مهم:
date
timedatectl

و مهم‌تر:
NTP

برای هماهنگ کردن ساعت سرور با Time Server.

——————
3️⃣ مدیریت Logها 📋
Log یعنی گزارش اتفاقاتی که در سیستم رخ داده است.
مثلاً:
SSH login
Failed login
Service started
Service stopped
Kernel error
Disk error

فرض کن SSH کار نمی‌کند.
به‌جای حدس زدن:
چرا SSH کار نمی‌کنه؟ 🤔

می‌رویم Logها را بررسی می‌کنیم.
در سیستم‌های Linux دو روش مهم داریم:
سیستم‌های سنتی
/var/log/

مثلاً:
/var/log/auth.log
/var/log/syslog

در بعضی توزیع‌ها:
/var/log/secure
/var/log/messages

systemd
ابزار بسیار مهم:
journalctl

مثلاً:
journalctl

یا برای SSH:
journalctl -u ssh



——————————

4️⃣ Mail Transfer Agent 📧
اینجا قرار نیست فعلاً Mail Server کامل بسازیم.
فقط مفهوم MTA را یاد می‌گیریم.
MTA چیست؟
Mail Transfer Agent
برنامه‌ای است که مسئول انتقال Email بین Mail Serverها است.
مثلاً:
User
↓
Mail Client
↓
Mail Server
↓
MTA
↓
Internet
↓
Destination Mail Server

نمونه MTAها:
Postfix
Sendmail
Exim

یکی از معروف‌ترین‌ها:
Postfix




——————

🧠 فرق Mail Client و MTA
مثلاً:
Thunderbird
یک Mail Client است.
یعنی کاربر با آن Email را می‌خواند و ارسال می‌کند.
اما:
Postfix
یک MTA است.
یعنی وظیفه انتقال Mail را برعهده دارد.

—————-
❤2🔥1
فصل هفتم — قسمت شصت و هشتم 🐧
مدیریت کاربران در لینوکس
——————-
در این قسمت می‌خواهیم بفهمیم User در لینوکس دقیقاً چیست، چطور ساخته می‌شود، کجا اطلاعاتش ذخیره می‌شود و چطور Permission و Group آن را مدیریت کنیم.

——————

1️⃣ چرا User ایجاد می‌کنیم؟
یکی از اشتباهات بزرگ در Linux این است که همه با root کار کنند.
root قدرت بسیار زیادی دارد:
root
↓
دسترسی تقریباً کامل به سیستم

مثلاً اگر با root اشتباهی بزنی:
rm -rf /some/path

ممکن است اطلاعات مهمی از بین برود.
پس برای هر شخص یا سرویس یک User جدا می‌سازیم.
مثلاً:
root
├── ali
├── reza
└── apache

هر User می‌تواند Permission متفاوتی داشته باشد.

——————

2️⃣ آیا Root را حذف می‌کنیم؟
❌ معمولاً root را حذف نمی‌کنیم.
Root یک حساب سیستمی ضروری است.
کاری که معمولاً انجام می‌دهیم این است که:
استفاده مستقیم از root را محدود می‌کنیم و به کاربران عادی در صورت نیاز دسترسی مدیریتی می‌دهیم.

مثلاً:
sudo usermod -aG wheel ali

در Red Hat و خانواده آن، گروه wheel معمولاً برای دسترسی sudo استفاده می‌شود.
در Debian/Ubuntu معمولاً گروه مهم:
sudo

است.
مثلاً:
sudo usermod -aG sudo ali



—————————-

3️⃣ User و Group
هر User یک UID دارد.
هر Group یک GID دارد.
مثلاً:
id ali

ممکن است ببینی:
uid=1000(ali) gid=1000(ali) groups=1000(ali),10(wheel)

یعنی:
UID → شناسه کاربر
GID → گروه اصلی
groups → گروه‌هایی که کاربر عضو آنهاست




——————-

4️⃣ دستور groups
برای دیدن گروه‌های کاربر:
groups ali

مثلاً:
ali : ali wheel developers


———————

5️⃣ دستور id
اطلاعات کامل‌تری می‌دهد:
id ali

مثلاً:
uid=1001(ali)
gid=1001(ali)
groups=1001(ali),10(wheel)

🧠 برای امتحان:
groups → گروه‌ها
id → UID + GID + Groups

————————-

6️⃣ Login Shell چیست؟
وقتی User ایجاد می‌شود، برای او یک Shell مشخص می‌شود.
مثلاً:
/bin/bash

اما بعضی Userها اصلاً برای Login کردن ساخته نشده‌اند.
مثلاً User مربوط به سرویس‌ها:
apache
nginx
mysql

ممکن است Shell آنها:
/usr/sbin/nologin

باشد.
یعنی:
این حساب برای اجرای سرویس است، نه ورود تعاملی کاربر.

مثلاً:
grep nginx /etc/passwd

ممکن است ببینی:
nginx:x:...:/usr/sbin/nologin


——————

7️⃣ ساخت User
دستور اصلی:
useradd ali

بعد برایش Password:
passwd ali

اما بهتر است هنگام ساخت User گزینه‌های موردنیاز را هم مشخص کنیم.
مثلاً:
useradd -m -s /bin/bash ali

یعنی:
-m → Home Directory بساز
-s → Shell مشخص کن

بعد:
passwd ali



——————
8️⃣ هنگام ساخت User چه اتفاقی می‌افتد؟
وقتی:
useradd -m ali

می‌زنی، چند اتفاق مهم می‌افتد.
1. UID ایجاد می‌شود
مثلاً:
1001

2. Group ساخته/تنظیم می‌شود
3. Home ساخته می‌شود:
/home/ali

4. فایل‌های اولیه از /etc/skel کپی می‌شوند.
5. اطلاعات User در فایل‌های سیستم ثبت می‌شود.
——————

9️⃣ /etc/skel چیست؟
skel مخفف Skeleton است.
یعنی یک قالب اولیه برای Home User.
مثلاً:
/etc/skel/
├── .bashrc
├── .profile
└── ...

وقتی User جدید می‌سازی:
useradd -m ali

فایل‌های موجود در /etc/skel معمولاً به:
/home/ali/

کپی می‌شوند.
🧠 مثال واقعی:
مثل این است که برای هر کارمند جدید، یک پوشه آماده با تنظیمات اولیه داشته باشی.


—————-

🔟 /etc/passwd
اطلاعات عمومی Userها در:
/etc/passwd

قرار دارد.
مثلاً:
cat /etc/passwd

یک خط ممکن است این شکلی باشد:
ali:x:1001:1001:Ali:/home/ali:/bin/bash

ساختار:
username
:
password placeholder
:
UID
:
GID
:
GECOS
:
Home
:
Shell

نکته مهم
در سیستم‌های مدرن، Password واقعی داخل /etc/passwd نیست.
آن x معمولاً یعنی اطلاعات Password در:
/etc/shadow

————————-

1️⃣1️⃣ /etc/shadow
این فایل اطلاعات حساس مربوط به Password را نگه می‌دارد.
sudo cat /etc/shadow

مثلاً:
ali:$6$........:...

Password به صورت Hash ذخیره می‌شود، نه Password خام.
⚠️ دسترسی این فایل بسیار محدود است.

——————-

1️⃣2️⃣ /etc/login.defs

مثلاً:
cat /etc/login.defs

می‌توانی تنظیماتی مربوط به:
محدوده UID
محدوده GID
عمر Password
تنظیمات Password
Home Directory
را در آن ببینی.

————

1️⃣3️⃣ useradd -D
برای دیدن Defaultهای useradd:
useradd -D

مثلاً ممکن است:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel

ببینی.
یعنی وقتی User جدید می‌سازی، useradd از این Defaultها استفاده می‌کند.

——————

1️⃣4️⃣ مدیریت Password با passwd
ساخت/تغییر Password:
passwd ali

چند Option مهم:
قفل کردن حساب:
passwd -l ali

باز کردن:
passwd -u ali

منقضی کردن Password:
passwd -e ali

دیدن وضعیت:
passwd -S ali

حذف Password:
passwd -d ali

⚠️ passwd -d یعنی Password حساب را حذف می‌کنی و از نظر امنیتی باید با احتیاط استفاده شود.


———————-

1️⃣5️⃣ usermod
برای تغییر مشخصات User:
usermod

مثلاً تغییر Shell:
sudo usermod -s /bin/bash ali

تغییر Home:
sudo usermod -d /home/newali -m ali

اضافه کردن User به Group:
sudo usermod -aG project42 ali

⚠️ نکته خیلی مهم
این:
-aG

یعنی User را به Groupهای اضافی اضافه کن.
حتماً -a را یادت باشد.
چون:
usermod -G project42 ali

ممکن است عضویت‌های قبلی کاربر در گروه‌های supplementary را جایگزین کند.

——————-

1️⃣6️⃣ ساخت Group
sudo groupadd project42

اگر بخواهی GID مشخص بدهی:
sudo groupadd -g 1042 project42

بررسی:
getent group project42



——————-

1️⃣7️⃣ اضافه کردن User به Group
مثلاً:
sudo usermod -aG project42 ali

بعد:
groups ali

یا:
id ali




——————-

1️⃣8️⃣ Wheel چیست؟
در سیستم‌های Red Hat / Fedora / AlmaLinux گروه:
wheel

معمولاً برای دسترسی مدیریتی با sudo استفاده می‌شود.
مثلاً:
sudo usermod -aG wheel ali

بعد کاربر ali می‌تواند در صورت تنظیم صحیح sudoers از sudo استفاده کند.
در Debian/Ubuntu معمولاً:
sudo usermod -aG sudo ali

🧠 حفظ کن:
Red Hat family → wheel
Debian family → sudo




————————
فصل هفتم — قسمت شصت و نهم 🐧
پیاده سازی su و sudo
————————————

در این قسمت دو مفهوم خیلی مهم برای مدیریت دسترسی کاربران داریم:
su
↓
تغییر کاربر

sudo
↓
اجرای یک دستور با دسترسی کاربر دیگر، معمولاً root



——————

1️⃣ su چیست؟
su مخفف Switch User است.
یعنی از یک User وارد User دیگری شویم.
مثلاً:
su ali

→ وارد حساب ali می‌شوی و Password او را می‌خواهد.
برای رفتن به root:
su -

→ وارد root می‌شوی و محیط Login مربوط به root را هم دریافت می‌کنی.
🧠 تفاوت مهم:
su
→ تغییر User

sudo
→ اجرای یک دستور با دسترسی User دیگر


—————————

2️⃣ sudo چیست؟
sudo یعنی:
این دستور را با دسترسی مدیریتی اجرا کن.

مثلاً کاربر ali کاربر معمولی است:
whoami

ali

ولی می‌خواهد یک Package نصب کند:
sudo dnf install nginx

دستور با دسترسی root اجرا می‌شود، ولی خود User تبدیل به root نمی‌شود.
مثلاً:
sudo systemctl restart sshd

فقط همان دستور با دسترسی مناسب اجرا می‌شود.
————————
3️⃣ چرا sudo بهتر از استفاده دائمی از root است؟
فرض کن:
ali → User معمولی

فقط زمانی که نیاز دارد:
sudo command

اجرا می‌کند.
بنابراین لازم نیست دائماً داخل root باشی.
این موضوع از نظر امنیت و Audit هم بهتر است.


————————

4️⃣ sudoers چیست؟
قوانین sudo در این قسمت مدیریت می‌شوند:
/etc/sudoers

اما ❌ نباید معمولاً با nano مستقیماً فایل را ویرایش کنیم.
از:
visudo

استفاده می‌کنیم.
visudo فایل sudoers را با بررسی Syntax ویرایش می‌کند.

———————-

5️⃣ ساختار یک قانون sudoers
مثلاً:
admin1 ALL=(ALL) NOPASSWD: ALL

یعنی:
admin1
↓
نام کاربر

ALL
↓
از هر Host

(ALL)
↓
می‌تواند به عنوان Userهای مجاز اجرا کند

NOPASSWD
↓
Password نمی‌خواهد

ALL
↓
تمام دستورات

پس:
admin1
می‌تواند تمام دستورات sudo را بدون درخواست Password اجرا کند.

⚠️ این دسترسی بسیار قدرتمند است و عملاً تقریباً معادل دسترسی کامل مدیریتی است.


——————

6️⃣ یک مثال محدودتر
مثلاً فقط اجازه بدهیم ali سرویس SSH را Restart کند:
ali ALL=(root) /usr/bin/systemctl restart sshd

یعنی:
ali
↓
sudo
↓
فقط systemctl restart sshd
↓
با دسترسی root

کاربر نمی‌تواند با همین Rule مثلاً این را اجرا کند:
sudo dnf install nginx




————-

7️⃣ یک مثال کاربردی دیگر
فرض کنیم کاربر backup فقط اجازه داشته باشد Backup را اجرا کند:
backup ALL=(root) /usr/local/bin/backup.sh

پس:
sudo /usr/local/bin/backup.sh

مجاز است، اما مثلاً:
sudo rm -rf /important

مجاز نیست.
🧠 این همان اصل Least Privilege است:
هر User فقط به اندازه‌ای که لازم دارد دسترسی داشته باشد.


————-

8️⃣ مثال برای dnf
Rule خودت:
admin2 ALL=(root) /usr/bin/dnf update

یعنی admin2 اجازه دارد:
sudo /usr/bin/dnf update

را با دسترسی root اجرا کند.
اما یک نکته مهم:
⚠️ مسیر Binary را دقیق بررسی کن
ممکن است در سیستم مسیر dnf متفاوت باشد.
با:
which dnf

مسیر واقعی را پیدا کن.
مثلاً:
/usr/bin/dnf

و همان را در sudoers بنویس.



—————
9️⃣ wheel در Red Hat
در خانواده Red Hat:
RHEL
Fedora
AlmaLinux
Rocky Linux

گروه معروف مدیریتی:
wheel

است.
مثلاً:
usermod -aG wheel ali

یعنی ali را عضو wheel کن.
بعد اگر sudoers سیستم اجازه داده باشد، ali می‌تواند از sudo استفاده کند.

————-

🔟 در Debian/Ubuntu
در Debian و Ubuntu معمولاً گروه:
sudo

است.
مثلاً:
usermod -aG sudo ali
فصل هفتم — قسمت هفتاد 🐧
Install Mail server
—————————

در قسمت قبل با MTA آشنا شدیم. اینجا یک قدم عملی‌تر می‌شویم و یک Mail Server ساده را با Postfix راه‌اندازی می‌کنیم.

————————-

1️⃣ ساختار کلی Mail Server
وقتی یک Email می‌فرستی، چند جزء می‌توانند درگیر باشند:
MUA → MTA → MTA → MDA

📩 MUA — Mail User Agent
برنامه‌ای که کاربر با آن Email را می‌خواند یا می‌فرستد.
مثلاً:
Thunderbird
Outlook
Webmail

یعنی رابط کاربر با سیستم Mail.

——————

🚚 MTA — Mail Transfer Agent
وظیفه‌اش انتقال Email بین Mail Serverها است.
مثلاً:
Postfix
Exim
Sendmail
OpenSMTPD

مثال:
MUA
↓
Postfix
↓
Internet
↓
Postfix مقص




———————-

📥 MDA — Mail Delivery Agent
وقتی Mail به سرور مقصد رسید، MDA آن را در محل مناسب Mailbox کاربر تحویل می‌دهد.
مثلاً:
MTA
↓
MDA
↓
Mailbox


———-

2️⃣ انتخاب MTA
در Linux چند MTA معروف داریم:
Postfix
Sendmail
Exim
OpenSMTPD

در این آموزش از:
⭐️ Postfix
استفاده می‌کنیم.
Postfix یکی از MTAهای معروف Linux است و برای ارسال و دریافت SMTP استفاده می‌شود.

——————————

3️⃣ نصب Postfix
در Red Hat / Fedora / AlmaLinux:
dnf install postfix

بعد سرویس را فعال و اجرا کن:
systemctl enable --now postfix

بررسی:
systemctl status postfix

——————

4️⃣ فایل تنظیمات Postfix
فایلی که باید بشناسی:
/etc/postfix/main.cf

⚠️ در جزوه‌ات نوشته بودی:
/etc/postfix/main.cfg

درستش:
/etc/postfix/main.cf

5️⃣ inet_interfaces
در:
nano /etc/postfix/main.cf

گزینه:
inet_interfaces = all

یعنی Postfix روی تمام Interfaceهای شبکه سیستم گوش بدهد.
مثلاً اگر سرور چند IP داشته باشد:
eth0 → 192.168.1.10
eth1 → 10.0.0.10

با:
inet_interfaces = all

Postfix روی Interfaceهای مناسب سیستم Listen می‌کند.
🧠 برای سرور واقعی باید این تنظیم را با توجه به نیاز و مدل شبکه انجام داد؛ باز گذاشتن سرویس SMTP روی همه Interfaceها بدون تنظیمات امنیتی می‌تواند خطرناک باشد.


—————
6️⃣ پورت SMTP
پروتکل اصلی ارسال Mail:
SMTP

پورت استاندارد:
25

برای Submission معمولاً:
587

و SMTPS:
465

در این قسمت فعلاً مفهوم اصلی را با 25 یاد بگیر.
بررسی:
ss -lntp | grep :25

ممکن است ببینی:
LISTEN ... :25

یعنی Postfix روی پورت SMTP در حال Listen است.
————————

7️⃣ Firewall
اگر سرور باید از بیرون SMTP دریافت کند، پورت موردنظر باید در Firewall مجاز باشد.
مثلاً در سیستم‌های دارای firewalld:
firewall-cmd --permanent --add-service=smtp
firewall-cmd --reload

بررسی:
firewall-cmd --list-services




——————

8️⃣ ارسال Email از Command Line
یکی از ابزارهای ساده:
s-nail

نصب:
dnf install s-nail

بعد می‌توانی Mail بفرستی.
مثلاً:
echo "Hello from Linux" | mail -s "Test Mail" user@example.com

ساختار:
echo
↓
متن Email
↓
mail
↓
Postfix
↓
SMTP

——————

9️⃣ Mail محلی در Linux
یکی از بهترین تمرین‌ها برای فهم Mail Server این است که اول Mail داخلی خود Linux را امتحان کنی.
مثلاً یک User بساز:
useradd ali
passwd ali

بعد:
echo "Hello Ali" | mail -s "Test" ali

اینجا Email از طریق Mail System محلی تحویل User می‌شود.
بعد با:
mail

می‌توانی Mailهای محلی را ببینی.


—————
10️⃣ لاگ Mail را کجا ببینیم؟
یکی از مهم‌ترین چیزها در عیب‌یابی Mail Server، Log است.
در Red Hat-basedها معمولاً:
/var/log/maillog

مثلاً:
tail -f /var/log/maillog

حالا در یک Terminal دیگر Mail بفرست:
echo "Test" | mail -s "Test Mail" ali

و در Terminal اول Log را ببین.
این فوق‌العاده مهم است چون می‌توانی ببینی:
Mail received
Mail queued
Mail delivered
Connection failed
Relay denied
Authentication failed



——————-

1️⃣1️⃣ در Debian/Ubuntu
ممکن است Mail Log را در این مسیر ببینی:
/var/log/mail.log

پس:
Red Hat
→ /var/log/maillog

Debian
→ /var/log/mail.log



————-
فصل هفتم — قسمت هفتاد و یکم 🐧
مدیریت لاگ‌ها در لینوکس

————————————
این قسمت خیلی مهمه، چون در لینوکس تقریباً هر اتفاق مهمی را می‌توان از روی Logها بررسی کرد؛ از ورود کاربر گرفته تا Crash شدن سرویس، خطای SSH یا مشکل شبکه.

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

1️⃣ Process چیست؟
Process یا پردازش یعنی یک برنامه‌ای که در حال اجراست.
مثلاً وقتی می‌زنی:
firefox

برنامه Firefox اجرا می‌شود و سیستم برای آن یک Process ایجاد می‌کند.
هر Process معمولاً یک PID دارد:
Firefox
↓
PID = 2451

برای دیدنش:
ps aux

یا:
top


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

2️⃣ Daemon چیست؟
Daemon یک Process است که معمولاً در پس‌زمینه اجرا می‌شود و منتظر درخواست یا رویداد می‌ماند.
مثلاً:
sshd
cron
systemd-journald
rsyslogd

مثال واقعی:
وقتی SSH Server اجراست:
sshd
↓
منتظر اتصال SSH
↓
کاربر وصل شد
↓
درخواست را پردازش می‌کند

پس:
Daemon = برنامه‌ای که معمولاً در پس‌زمینه اجرا می‌شود و یک سرویس را ارائه می‌دهد.

معمولاً اسم بسیاری از Daemonها به d ختم می‌شود:
sshd
rsyslogd
systemd-journald



————————-

3️⃣ Log چیست و چرا مهم است؟
Log یعنی گزارش اتفاقاتی که در سیستم رخ داده‌اند.
مثلاً:
18:30 → User ali وارد شد
18:31 → sshd اجرا شد
18:32 → Login ناموفق
18:35 → nginx Restart شد
18:40 → Disk error

مثال واقعی
فرض کن کاربر می‌گوید:
«من رمز SSH را درست می‌زنم ولی وارد نمی‌شوم.»

به جای حدس زدن:
journalctl -u sshd

را می‌زنی و Log را بررسی می‌کنی.
ممکن است مشخص شود:
Failed password

یا:
Connection refused

یا:
User not allowed

پس Log برای Troubleshooting، Security و Auditing بسیار مهم است.


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

4️⃣ ساختار کلی Logging در Linux
در Linux دو سیستم مهم را زیاد می‌بینی:
Traditional Syslog
↓
rsyslog

systemd
↓
systemd-journald
↓
journalctl

یعنی ممکن است سیستم هم از:
rsyslog

استفاده کند و هم:
systemd-journald




—————————

5️⃣ Syslog چیست؟
Syslog یک استاندارد و معماری برای ارسال و مدیریت پیام‌های Log است.
برنامه‌ها می‌توانند پیام‌های خودشان را به Syslog بفرستند.
مثلاً:
sshd ─────┐
nginx ────┤
cron ─────┤──→ rsyslog ──→ /var/log/...
kernel ───┘

یکی از پیاده‌سازی‌های معروف Syslog:
rsyslog

است.
فایل تنظیمات آن معمولاً:
/etc/rsyslog.conf

است.

——————————-

6️⃣ Facility چیست؟
Facility مشخص می‌کند Log مربوط به چه نوع بخشی از سیستم است.
چند نمونه:
auth
authpriv
cron
daemon
kern
mail
user
local0 ... local7

مثلاً:
auth

→ پیام‌های مربوط به Authentication
kern

→ پیام‌های Kernel
mail

→ پیام‌های Mail
cron

→ پیام‌های Cron

———————————

7️⃣ Severity چیست؟
Severity مشخص می‌کند شدت یا اهمیت یک Log چقدر است.
از کم‌اهمیت‌تر به بحرانی‌تر:
debug
info
notice
warning
err
crit
alert
emerg

مثلاً:
info

→ اطلاعات عادی
warning

→ هشدار
err

→ خطا
crit

→ خطای بسیار مهم
emerg

→ وضعیت اضطراری
🧠 برای دفتر:
Facility → این Log مربوط به کدام بخش است؟

Severity → این Log چقدر جدی است؟




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


8️⃣ Log Rotation چیست؟
فرض کن یک سرور داری و:
/var/log/messages

هر روز هزاران Log تولید می‌کند.
اگر این فایل را کنترل نکنی، ممکن است:
100 MB
↓
1 GB
↓
10 GB
↓
Disk Full 💀

اینجاست که Log Rotation وارد می‌شود.
ابزار معروف:
logrotate

است.
کارش این است که Logهای قدیمی را:
messages
messages.1
messages.2
messages.3.gz

مدیریت کند و در صورت نیاز فشرده یا حذف کند.
———————————————

9️⃣ فایل logrotate.conf
فایل اصلی تنظیمات:
/etc/logrotate.conf

و تنظیمات برنامه‌های مختلف معمولاً در:
/etc/logrotate.d/

قرار دارند.
مثلاً:
ls /etc/logrotate.d/


——————————

🔟 systemd-journald چیست؟
در سیستم‌های مبتنی بر systemd، سرویس:
systemd-journald

وظیفه جمع‌آوری و مدیریت Journalها را دارد.
یعنی:
Application
↓
systemd-journald
↓
Journal
↓
journalctl

———————

1️⃣1️⃣ فایل تنظیمات journald
فایل:
/etc/systemd/journald.conf

است.

——————————


1️⃣2️⃣ journalctl
مهم‌ترین ابزار برای خواندن Journal:
journalctl

است.
اگر فقط بزنی:
journalctl

تعداد زیادی Log نمایش داده می‌شود.

———————————

1️⃣3️⃣ آخرین 50 Log
journalctl -n 50

یعنی:
50 خط آخر Journal را نمایش بده.


————————

1️⃣4️⃣ دنبال کردن Log به صورت لحظه‌ای
journalctl -f

-f یعنی Follow.
مثل:
tail -f

مثلاً:
journalctl -f

حالا در Terminal دیگری SSH Login کن.
Log همان لحظه نمایش داده می‌شود.

———————-

1️⃣5️⃣ Log مربوط به یک سرویس
مثلاً SSH:
journalctl -u sshd

یعنی:
فقط Logهای Unit مربوط به sshd را نشان بده.

در Ubuntu ممکن است نام سرویس:
journalctl -u ssh

باشد.

————————-

1️⃣6️⃣ Log مربوط به Boot فعلی
journalctl -b

یعنی:
Logهای Boot فعلی سیستم را نمایش بده.

خیلی کاربردی است وقتی سیستم Boot شده ولی مثلاً یک سرویس بالا نیامده.


———————————


1️⃣7️⃣ فقط Errorها
journalctl -p err

یعنی فقط پیام‌هایی با Priority برابر یا بالاتر از err را نشان بده.
برای محدوده:
journalctl -p crit..err

یعنی Logهای:
crit
alert
emerg
err

را نمایش بده.

———————-

1️⃣8️⃣ Log از یک زمان مشخص
از دیروز:
journalctl --since yesterday

از دو ساعت قبل:
journalctl --since "2 hours ago"

مثلاً:
journalctl --since "2026-08-26 15:00"

→ Logهای بعد از ساعت 15 را نشان می‌دهد.


———————-

1️⃣9️⃣ ترکیب چند Filter
اینجا قدرت journalctl را می‌بینی.
مثلاً:
journalctl -u sshd --since yesterday

یعنی:
Logهای SSH از دیروز تا الان.

یا:
journalctl -u sshd -p err

یعنی:
خطاهای مهم سرویس SSH.

——————-

2️⃣0️⃣ تغییر Format خروجی
خروجی معمولی:
journalctl -o short

برای خروجی JSON:
journalctl -o json-pretty

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


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

2️⃣1️⃣ ابزار logger
با logger می‌توانیم خودمان یک پیام به Syslog ارسال کنیم.
مثلاً:
logger "Hello from Alireza"

بعد می‌توانی Log را پیدا کنی.
حتی Facility و Severity هم مشخص کنی:
logger -p user.info "Test message"

یعنی:
Facility → user
Severity → info

یک مثال امنیتی:
logger -p auth.warning "Suspicious login detected"



————————-


2️⃣2️⃣ systemd-cat
این ابزار خروجی یک برنامه را وارد Journal می‌کند.
مثلاً:
echo "Hello Journal" | systemd-cat

یا:
systemd-cat echo "Test message"

بعد:
journalctl

را بزن و پیام را پیدا کن.
حتی می‌توانی Priority بدهی:
echo "Something went wrong" | systemd-cat -p err




——————-

2️⃣3️⃣ /var/log
یکی از مهم‌ترین مسیرهای Log در Linux:
cd /var/log/

است.
برای دیدنش:
ls -lh /var/log/

ممکن است فایل‌هایی مثل این ببینی:
messages
secure
maillog
cron
boot.log

البته نام و محل Logها بسته به Distribution و تنظیمات سیستم متفاوت است.

————————
🧠 یک مثال واقعی خیلی مهم
فرض کن SSH کار نمی‌کند.
به جای اینکه کورکورانه تنظیمات را تغییر بدهی:
اول:
systemctl status sshd

بعد:
journalctl -u sshd -n 50
اگر فقط Error می‌خواهی:
journalctl -u sshd -p err
اگر مشکل بعد از Reboot ایجاد شده:
journalctl -b
این یعنی Log خواندن یکی از اصلی‌ترین مهارت‌های Linux Administrator است.

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

————————————
زمان در لینوکس فقط برای نمایش ساعت نیست؛ برای Logها، Cron، Certificateها، احراز هویت، Kerberos و ارتباط بین سرورها خیلی مهم است.
مثلاً اگر ساعت سرور ۱۰ دقیقه اشتباه باشد، ممکن است بررسی Logها یا حتی بعضی Authenticationها به مشکل بخورد.

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


1️⃣ دو نوع ساعت در سیستم
در لینوکس با دو مفهوم مهم روبه‌رو هستیم:
🖥 Hardware Clock
ساعتی که داخل سخت‌افزار/RTC سیستم نگهداری می‌شود.
Hardware Clock
→ ساعت سخت‌افزاری

حتی وقتی سیستم‌عامل خاموش است، RTC می‌تواند زمان را نگه دارد.


———————-


System Clock
ساعتی که Kernel لینوکس هنگام اجرای سیستم استفاده می‌کند.
System Clock
→ ساعت مورد استفاده Linux

پس:
Hardware Clock
↓
Linux Boot
↓
System Clock

————————-


2️⃣ hwclock
برای مشاهده و مدیریت Hardware Clock:
hwclock

مثلاً:
sudo hwclock --show

→ نمایش ساعت سخت‌افزاری.
برای نمایش دقیق‌تر:
sudo hwclock --verbose



تغییر Hardware Clock
مثلاً:
sudo hwclock --systohc

یعنی:
ساعت System را روی Hardware Clock بنویس.

برعکس:
sudo hwclock --hctosys

یعنی:
ساعت Hardware Clock را روی System Clock تنظیم کن.

🧠 حفظ کن:
systohc
system → hardware

hctosys
hardware → system




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

3️⃣ timedatectl
فرمان اصلی مدیریت زمان در سیستم‌های جدید Linux:
timedatectl

وضعیت زمان:
timedatectl status

مثلاً می‌بینی:
Local time
Universal time
RTC time
Time zone
System clock synchronized
NTP service
RTC in local TZ

—————————-

4️⃣ تنظیم Timezone
لیست Timezoneها:
timedatectl list-timezones

مثلاً:
timedatectl list-timezones | grep Tehran

تنظیم:
sudo timedatectl set-timezone Asia/Tehran

بعد:
timedatectl

را بزن.




—————————-

5️⃣ تنظیم دستی ساعت
اگر NTP فعال نباشد می‌توانی ساعت را دستی تنظیم کنی:
sudo timedatectl set-time "18:30:00"

یا:
sudo timedatectl set-time "2026-08-26 18:30:00"

اما در Server معمولاً بهتر است ساعت را دستی تنظیم نکنی و از NTP استفاده کنی.

——————————-

6️⃣ NTP چیست؟
NTP مخفف:
Network Time Protocol

است.
وظیفه‌اش این است که ساعت سیستم را از طریق شبکه با یک Time Server هماهنگ کند.
مثلاً:
Linux Server
↓
NTP Client
↓
NTP Server
↓
زمان دقیق

مثلاً چند سرور:
server1 → 18:30:01
server2 → 18:30:02
server3 → 18:30:01

NTP کمک می‌کند ساعت سیستم‌ها با یک مرجع زمانی هماهنگ بماند.


————————

7️⃣ چرا NTP مهم است؟
فرض کن 100 سرور داری.
اگر هر کدام ساعت متفاوتی داشته باشند:
Server 1 → 12:00
Server 2 → 12:05
Server 3 → 11:58
Server 4 → 12:10

حالا Logها را بررسی کنی، ترتیب واقعی اتفاقات ممکن است گیج‌کننده شود.
NTP باعث می‌شود سرورها زمان هماهنگ‌تری داشته باشند.


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





8️⃣ ntpsec چیست؟
احتمالاً منظورت از nptsec همان:
NTPsec

است.
NTPsec یک پیاده‌سازی مدرن‌تر و سخت‌گیری‌شده‌تر از NTP است که برای امنیت و سادگی بیشتر کد طراحی شده است.
اما در Linuxهای امروزی ممکن است اصلاً NTPsec استفاده نکنی.
دو گزینه بسیار رایج:
chrony
systemd-timesyncd

هستند.
در بسیاری از سرورهای RHEL/Fedora/AlmaLinux، chrony گزینه رایج است.




———————

9️⃣ Chrony چیست؟
Chrony یک مجموعه ابزار برای Synchronization زمان است.
معمولاً شامل:
chronyd
chronyc

است.
chronyd:
سرویس Daemon مربوط به زمان است.

chronyc:
ابزار Command Line برای بررسی و مدیریت Chrony است.

بررسی وضعیت:
chronyc tracking

یا:
chronyc sources



——————-

🔟 فعال کردن NTP با timedatectl
در سیستم‌هایی که سرویس NTP مناسب را فراهم کرده‌اند:
sudo timedatectl set-ntp true

بررسی:
timedatectl status

ممکن است ببینی:
System clock synchronized: yes
NTP service: active

یعنی:
NTP فعال است
↓
ساعت سیستم
↓
با Time Server هماهنگ می‌شود



—————————

1️⃣1️⃣ یک مثال واقعی
فرض کن سرور Ubuntu داری و ساعتش اشتباه است.
اول:
timedatectl

بررسی می‌کنی.
اگر Timezone اشتباه بود:
sudo timedatectl set-timezone Asia/Tehran

بعد:
sudo timedatectl set-ntp true

و دوباره:
timedatectl

بررسی می‌کنی که:
System clock synchronized: yes

باشد.
❤1
خب خب فصل هفت هم تموم شد
.
.
.
از فردا میریم سراغ فصل هشتم الپیک 1 قسمت 102
❤1
فصل هشتم - قسمت هفتاد و سوم 🐧
شبکه در لینوکس
———————
در فصل با قسمت های زیر اشنا میشویم

1 : آشنایی اولیه باشبکه

2 : تنظیم شبکه در لینوکس

3 : فرمان های اولیه در عیب یابی شبکه

4 : پیکربندی dns در لینوکس
❤1
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و چهارم 🐧
1 : آشنایی اولیه باشبکه
———————
هدف اصلی شبکه خیلی ساده است:
انتقال اطلاعات از یک دستگاه به دستگاه دیگر.

مثلاً وقتی در کامپیوترت می‌زنی:
google.com

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


——————-

1️⃣ چرا شبکه لایه‌ای طراحی شده؟
برای اینکه هر قسمت از ارتباط یک وظیفه مشخص داشته باشد.
مدل معروف:
OSI
دارای ۷ لایه است:
7. Application
6. Presentation
5. Session
4. Transport
3. Network
2. Data Link
1. Physical

در مقابل، مدل TCP/IP معمولاً به ۴ لایه تقسیم می‌شود:
Application
Transport
Internet
Network Access

📌 برای LPIC بیشتر باید مفهوم TCP/IP و وظایف لایه‌ها را بفهمی.


————————

2️⃣ هدر چیست؟
یکی از مهم‌ترین مفاهیم این قسمت همین است.
وقتی برنامه‌ای می‌خواهد اطلاعات بفرستد، داده در مسیر عبور از لایه‌ها، اطلاعات کنترلی دریافت می‌کند.
مثلاً:
Application
↓
Data
↓
Transport
↓
TCP Header + Data
↓
Network
↓
IP Header + TCP Header + Data
↓
Data Link
↓
Ethernet Header + IP Header + TCP Header + Data

به این اطلاعات اضافه‌شده در هر لایه، Header می‌گوییم.


————————

3️⃣ یک مثال واقعی؛ باز کردن Google
فرض کن در مرورگر می‌نویسی:
https://google.com

مرورگر اطلاعات را ایجاد می‌کند.
در لایه Application:
HTTP/HTTPS Data

سپس در Transport مثلاً TCP قرار می‌گیرد:
TCP Header
+
Application Data

بعد در Network:
IP Header
+
TCP Header
+
Application Data

بعد در Data Link:
Ethernet Header
+
IP Header
+
TCP Header
+
Application Data

و در نهایت اطلاعات به صورت Frame/Bits روی شبکه ارسال می‌شوند.
در سمت مقصد این فرآیند برعکس می‌شود و Headerهای مربوط به هر لایه بررسی و کنار گذاشته می‌شوند تا برنامه بتواند داده اصلی را دریافت کند.

————————

4️⃣ لایه Network
یکی از وظایف اصلی این لایه، انتقال Packet بین شبکه‌های مختلف است.
مهم‌ترین پروتکل این لایه:
IP

است.
IP به دستگاه‌ها آدرس می‌دهد و کمک می‌کند Packet بداند باید به کدام مقصد برود.


————

5️⃣ IPv4 و IPv6
دو نسخه اصلی IP داریم:
IPv4
مثلاً:
192.168.1.20

IPv4 دارای آدرس ۳۲ بیتی است.
IPv6
مثلاً:
2001:db8::1

IPv6 دارای آدرس ۱۲۸ بیتی است.
پس:
IPv4 → 32 bit
IPv6 → 128 bit


—————

6️⃣ Netmask چیست؟
Netmask مشخص می‌کند کدام قسمت IP مربوط به Network و کدام قسمت مربوط به Host است.
مثلاً:
IP:
192.168.1.20

Netmask:
255.255.255.0

یا به شکل CIDR:
192.168.1.20/24

در این مثال:
Network → 192.168.1
Host → 20

یعنی دستگاه 20 در شبکه 192.168.1.0/24 قرار دارد.
🧠 خیلی ساده:
Netmask مرز بین Network و Host را مشخص می‌کند.


——————

7️⃣ لایه Transport
این لایه وظیفه ارتباط بین برنامه‌ها و کنترل انتقال داده را بر عهده دارد.
دو پروتکل اصلی:
TCP
UDP

TCP
قابل‌اعتماد است.
ویژگی‌های مهم:
Connection-oriented
ترتیب داده‌ها را حفظ می‌کند
دریافت داده را تأیید می‌کند
در صورت نیاز داده را مجدداً ارسال می‌کند
مثلاً:
Client ───────→ Server
Data 1
Data 2
Data 3

اگر Data 2 گم شود، TCP می‌تواند آن را مجدداً درخواست/ارسال کند.


UDP
ساده‌تر و سریع‌تر است و تضمین تحویل مانند TCP ندارد.
مثلاً:
Client ───────→ Server
Data 1
Data 2
Data 3

اگر Data 2 از بین برود، UDP خودش تضمین نمی‌کند که آن را دوباره ارسال کند.
کاربردهای رایج:
DNS
VoIP
Streaming
Online Gaming

البته بعضی برنامه‌های
———————

8️⃣ Port چیست؟
IP مشخص می‌کند:
کدام دستگاه؟

Port مشخص می‌کند:
کدام سرویس/برنامه؟

مثلاً:
192.168.1.20:22

یعنی:
IP   → 192.168.1.20
Port → 22

پورت 22 معمولاً برای SSH استفاده می‌شود.



———————

9️⃣ Application Layer
اینجا جایی است که سرویس‌ها و پروتکل‌هایی که برنامه‌ها مستقیماً با آن‌ها کار می‌کنند قرار دارند.
مثلاً:
HTTP
HTTPS
DNS
DHCP
SSH
FTP
SMTP

ساختار کلی معمولاً به شکل Client/Server است:
Client
│
│ Request
↓
Server
│
│ Response
↓
Client



————————

🔟 DNS چیست؟
DNS یعنی:
Domain Name System
کارش تبدیل نام دامنه به IP است.
مثلاً:
google.com
↓
DNS
↓
IP Address

چرا؟
چون برای انسان راحت‌تر است بگوید:
google.com

تا اینکه یک IP را حفظ کند.


———————-

1️⃣1️⃣ DNS در عمل چه اتفاقی می‌اندازد؟
فرض کن مرورگر می‌خواهد به:
google.com

وصل شود.
ابتدا سیستم باید IP آن را پیدا کند.
تقریباً:
Browser
↓
DNS Resolver
↓
DNS Server
↓
IP Address
↓
Connection to Server

مثلاً نتیجه DNS می‌تواند یک یا چند IP باشد.
بعد مرورگر با IP مقصد ارتباط برقرار می‌کند.
📌 نکته مهم:
DNS خودش ارتباط HTTP را انجام نمی‌دهد؛ فقط نام را به آدرس تبدیل/Resolve می‌کند.





——————-

1️⃣2️⃣ DHCP چیست؟
DHCP مخفف:
Dynamic Host Configuration Protocol
است.
وظیفه DHCP این است که تنظیمات شبکه را به‌صورت خودکار به Client بدهد.
مثلاً کامپیوتر تازه وارد شبکه می‌شود و هنوز IP ندارد.
DHCP می‌تواند به آن بدهد:
IP Address
Subnet Mask
Default Gateway
DNS Server

————————
1️⃣3️⃣ روند DHCP
چهار مرحله معروف DHCP را حفظ کن:
DORA

D → Discover
Client می‌گوید:
آیا DHCP Serverای در شبکه هست؟

O → Offer
DHCP Server پیشنهاد IP می‌دهد.
R → Request
Client می‌گوید:
این IP را می‌خواهم.

A → Acknowledge
Server تأیید می‌کند:
این IP برای تو ثبت شد.

پس:
Discover
↓
Offer
↓
Request
↓
ACK

🧠 DORA را برای امتحان حتماً حفظ کن.




—————————

| سرویس        |   پورت پیش‌فرض   |
| ------------ | ----------------: |
| FTP Control | 21/TCP |
| FTP Data – Active | 20/TCP |
| SSH | 22/TCP |
| Telnet | 23/TCP |
| SMTP | 25/TCP |
| DNS | 53/TCP/UDP |
| DHCP Server | 67/UDP |
| DHCP Client | 68/UDP |
| HTTP | 80/TCP |
| POP3 | 110/TCP |
| NTP | 123/UDP |
| IMAP | 143/TCP |
| HTTPS | 443/TCP |
| SMB | 445/TCP |




📌 چند مورد مهم‌تر برای LPIC:
22  → SSH
25 → SMTP
53 → DNS
67 → DHCP Server
68 → DHCP Client
80 → HTTP
123 → NTP
443 → HTTPS
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و پنجم 🐧
2 : تنظیم شبکه در لینوکس
———————
اینجا می‌خواهیم یاد بگیریم تنظیمات شبکه در Linux کجا قرار دارند و امروزه چطور آن‌ها را مدیریت می‌کنیم.
نکته مهم این قسمت:
در Linuxهای جدید، NetworkManager نقش اصلی را در مدیریت شبکه دارد.

——————————-

1️⃣ قبلاً تنظیمات شبکه کجا بودند؟
بسته به Distribution فرق داشت.
🔴 Red Hat / CentOS قدیمی
در سیستم‌های قدیمی‌تر فایل‌های Interface معمولاً در:
/etc/sysconfig/network-scripts/

بودند.
مثلاً:
/etc/sysconfig/network-scripts/ifcfg-eth0

داخلش تنظیماتی مثل IP، Gateway و نوع دریافت IP قرار می‌گرفت.
مثلاً:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

——————-
🔵 Debian / Ubuntu قدیمی
در Debian و Ubuntu قدیمی معمولاً:
/etc/network/interfaces

استفاده می‌شد.
مثلاً:
auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
gateway 192.168.1.1




————-
🟢 openSUSE
در openSUSE هم روش‌های مخصوص خودش وجود داشته، اما در نسخه‌های جدیدتر مدیریت شبکه بیشتر به NetworkManager منتقل شده است.


—————

2️⃣ امروزه چه چیزی مهم است؟
امروزه در بسیاری از Distributionهای Desktop و Server:
NetworkManager
↓
مدیریت Network Interface
↓
IP / Gateway / DNS / Connection

ابزار اصلی خط فرمان آن:
nmcli

است.


——————
3️⃣ NetworkManager چیست؟
NetworkManager یک سرویس برای مدیریت اتصال‌های شبکه است.
می‌تواند مواردی مثل:
Ethernet
Wi-Fi
IP
Gateway
DNS
VPN
Connection Profiles
را مدیریت کند.
پس این دو را قاطی نکن:
NetworkManager
→ سرویس مدیریت شبکه

nmcli
→ ابزار Command Line برای کنترل NetworkManager





—————


4️⃣ nmcli
اول وضعیت کلی NetworkManager:
nmcli general status

مثلاً:
STATE      CONNECTIVITY  WIFI-HW  WIFI  WWAN-HW  WWAN
connected full enabled ... enabled ...

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

——————————


5️⃣ نمایش Connectionها
nmcli connection show

این دستور تمام Connection Profileها را نشان می‌دهد.
مثلاً:
NAME    UUID                                  TYPE      DEVICE
eth0 xxxx-xxxx-xxxx-xxxx ethernet eth0



————————-

6️⃣ فقط Connectionهای فعال
دستوری که خودت نوشتی:
nmcli connection show --active

یا کوتاه‌تر:
nmcli con show --active

فقط اتصال‌های فعال را نمایش می‌دهد.


——————————

7️⃣ بالا آوردن Connection
مثلاً:
nmcli connection up eth0

یعنی Connection مربوط به eth0 را فعال کن.
پایین آوردن:
nmcli connection down eth0


—————————-

8️⃣ تغییر IP
اینجا یکی از قسمت‌های مهم nmcli است.
فرض کنیم Connection ما اسمش eth0 است.
می‌خواهیم IP را:
192.168.1.20/24

قرار دهیم.
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.20/24

Gateway:
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1

DNS:
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8"

و مشخص می‌کنیم IP به صورت دستی تنظیم شود:
sudo nmcli connection modify eth0 ipv4.method manual

بعد Connection را دوباره فعال می‌کنیم:
sudo nmcli connection down eth0
sudo nmcli connection up eth0



—————————

9️⃣ DHCP با nmcli
اگر بخواهیم IP را DHCP بگیریم:
sudo nmcli connection modify eth0 ipv4.method auto

بعد:
sudo nmcli connection down eth0
sudo nmcli connection up eth0

حالا DHCP Server برای سیستم IP می‌فرستد.


———————-

🔟 یک مثال واقعی
فرض کن سرور Linux داری.
می‌خواهی:
IP      → 192.168.1.50/24
Gateway → 192.168.1.1
DNS → 8.8.8.8

تنظیم کنیم:
sudo nmcli con mod eth0 ipv4.addresses 192.168.1.50/24
sudo nmcli con mod eth0 ipv4.gateway 192.168.1.1
sudo nmcli con mod eth0 ipv4.dns 8.8.8.8
sudo nmcli con mod eth0 ipv4.method manual

بعد:
sudo nmcli con down eth0
sudo nmcli con up eth0

بررسی:
ip addr
ip route
nmcli connection show




—————————


1️⃣1️⃣ nmtui
یک ابزار جالب دیگر:
nmtui

برخلاف nmcli که Command Line است، nmtui یک رابط متنی تعاملی دارد.
یعنی داخل Terminal یک محیط منویی می‌بینی.
مثلاً:
┌───────────────────────────┐
│ NetworkManager TUI │
│ │
│ Edit a connection │
│ Activate a connection │
│ Set system hostname │
└───────────────────────────┘

برای کسی که نمی‌خواهد تمام Syntaxهای nmcli را حفظ کند، خیلی راحت است.



——————-

1️⃣2️⃣ وضعیت NetworkManager
سرویس:
systemctl status NetworkManager

ری‌استارت:
sudo systemctl restart NetworkManager

⚠️ چیزی که نوشتی:
systemctl restart networkmanager

ممکن است روی بعضی سیستم‌ها به خاطر نام Unit کار کند، اما نام استاندارد سرویس در سیستم‌های مبتنی بر NetworkManager معمولاً:
NetworkManager

است.


———————-

1️⃣3️⃣ /etc/resolv.conf
قبلاً خیلی وقت‌ها مستقیماً:
/etc/resolv.conf

را برای DNS تغییر می‌دادند.
مثلاً:
nameserver 8.8.8.8

اما در سیستم‌های جدید، این فایل ممکن است توسط یکی از سرویس‌های مدیریت شبکه مثل:
NetworkManager
systemd-resolved

مدیریت شود.
بنابراین ممکن است تغییر دستی آن دائمی نباشد.
📌 برای تنظیم DNS بهتر است از ابزار مدیریت شبکه خود سیستم استفاده کنی.
مثلاً با NetworkManager:
nmcli con mod eth0 ipv4.dns 8.8.8.8




—————————

1️⃣4️⃣ mtr چیست؟
mtr یکی از ابزارهای بسیار خوب برای Network Troubleshooting است.
ترکیبی از ایده‌های:
ping + traceroute

است.
مثلاً:
mtr google.com

مسیر Packet را نمایش می‌دهد و همزمان اطلاعاتی درباره Latency و Packet Loss هر Hop می‌دهد.
مثلاً:
HOST              Loss%   Snt   Last   Avg
192.168.1.1 0.0% 20 1ms 1ms
10.x.x.x 0.0% 20 5ms 5ms
...
google.com 0.0% 20 30ms 31ms

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





—————————

1️⃣5️⃣ dhclient چی شد؟
dhclient یک DHCP Client قدیمی و معروف بود.
مثلاً قبلاً ممکن بود ببینی:
dhclient eth0

برای گرفتن IP از DHCP.
اما نکته‌ای که گفتی را این‌طور حفظ کن:
در بسیاری از سیستم‌های جدید که NetworkManager مدیریت شبکه را بر عهده دارد، معمولاً نیازی نیست مستقیماً

dhclient
را اجرا کنیم.

NetworkManager خودش DHCP را مدیریت می‌کند.
مثلاً:
nmcli con mod eth0 ipv4.method auto
nmcli con up eth0


————————

1️⃣6️⃣ Desktop Linux چطور؟
در Desktop معمولاً اصلاً لازم نیست Terminal باز کنی.
مثلاً در GNOME:
Settings
↓
Network
↓
Wired / Wi-Fi
↓
IPv4
↓
Automatic / Manual

و می‌توانی IP، Gateway و DNS را از رابط گرافیکی تنظیم کنی.
در KDE هم تنظیمات شبکه از رابط گرافیکی خودش انجام می‌شود.
اما پشت صحنه، در بسیاری از سیستم‌ها NetworkManager مدیریت اتصال را انجام می‌دهد.
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و ششم 🐧
3 : فرمان های اولیه در عیب یابی شبکه
———————
اینجا وارد بخش Network Troubleshooting می‌شویم؛ یعنی وقتی شبکه مشکل دارد، بتوانیم مرحله‌به‌مرحله بفهمیم مشکل دقیقاً کجاست.

———————


1️⃣ ping — اولین ابزار عیب‌یابی
ping برای بررسی دسترسی و ارتباط IP استفاده می‌شود.
مثلاً:
ping 8.8.8.8

یا:
ping google.com

اگر جواب بگیری:
64 bytes from ...

یعنی ارتباط برقرار است.
مثال واقعی
فرض کن سرور اینترنت ندارد.
اول:
ping 192.168.1.1

اگر Gateway جواب داد، شبکه داخلی احتمالاً سالم است.
بعد:
ping 8.8.8.8

اگر این هم جواب داد، اینترنت از نظر IP در دسترس است.
بعد:
ping google.com

اگر این آخری جواب نداد ولی 8.8.8.8 جواب داد، احتمالاً مشکل DNS است.
🧠 این سه تست خیلی مهم‌اند:
ping Gateway
↓
ping IP Internet
↓
ping Domain


—————————-

2️⃣ traceroute — مسیر Packet را ببین
فرمان:
traceroute google.com

نشان می‌دهد Packet برای رسیدن به مقصد از چه Hopهایی عبور می‌کند.
مثلاً:
1   192.168.1.1
2 10.10.0.1
3 ...
4 ...
5 google.com

هر خط تقریباً یک Router/Hop در مسیر است.
مثال واقعی
فرض کن:
ping google.com

داریم ولی Latency خیلی بالاست.
با:
traceroute google.com

می‌توانیم ببینیم تأخیر از کدام بخش مسیر بیشتر شده است.
📌 در بعضی سیستم‌ها ممکن است لازم باشد نصبش کنی:
sudo apt install traceroute


——————-

3️⃣ dig — بررسی DNS
dig یکی از ابزارهای حرفه‌ای DNS است.
مثلاً:
dig google.com

اطلاعاتی درباره DNS Query و پاسخ DNS نشان می‌دهد.
اگر بخواهی مستقیماً از یک DNS خاص سؤال کنی:
dig @8.8.8.8 google.com

یعنی:
از DNS Server

8.8.8.8
درباره

google.com
سؤال کن.



———————

4️⃣ host
ساده‌تر از dig است:
host google.com

مثلاً:
google.com has address xxx.xxx.xxx.xxx

برای بررسی سریع DNS خیلی کاربردی است.





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

5️⃣ nslookup
یکی دیگر از ابزارهای DNS:
nslookup google.com

مثلاً:
Server: 8.8.8.8
Name: google.com
Address: xxx.xxx.xxx.xxx

پس:
dig
host
nslookup

هر سه برای DNS Troubleshooting کاربرد دارند، ولی dig معمولاً جزئیات بیشتری می‌دهد.



———————————

6️⃣ iftop — چه کسی دارد ترافیک مصرف می‌کند؟
iftop برای مشاهده مصرف شبکه به صورت لحظه‌ای استفاده می‌شود.
مثلاً:
sudo iftop

می‌توانی ببینی:
Client A  → Server
Client B → Server
Client C → Server

و چه مقدار Traffic بین آن‌ها ردوبدل می‌شود.
مثال واقعی
فرض کن سرورت ناگهان اینترنت زیادی مصرف می‌کند.
به جای حدس زدن:
sudo iftop

را اجرا می‌کنی و می‌بینی کدام ارتباط‌ها بیشترین Traffic را دارند.
📌 نصب در Debian/Ubuntu:
sudo apt install iftop



———————

7️⃣ netstat
فرمانی که نوشتی:
natstat

احتمالاً منظورت:
netstat

است.
netstat برای مشاهده اطلاعات شبکه استفاده می‌شد؛ مثل:
Connectionها
Portهای باز
Listening Serviceها
Routing Table
Interface Statistics
مثلاً:
netstat -tuln

یعنی Portهایی که در حال Listen هستند را ببین.
مثلاً:
Proto Local Address
tcp 0.0.0.0:22
tcp 0.0.0.0:80

یعنی سرویس‌هایی روی پورت‌های 22 و 80 در حال Listen هستند.
⚠️ netstat در سیستم‌های جدید تا حد زیادی با ss جایگزین شده است.


——————
8️⃣ ss — نسخه مدرن‌تر
امروزه بیشتر از:
ss

استفاده می‌کنیم.
مثلاً:
ss -tuln

برای مشاهده TCP/UDPهای Listening.
معنی:
-t → TCP
-u → UDP
-l → Listening
-n → نمایش عددی

برای دیدن Connectionهای فعال:
ss -tun

و برای اینکه بفهمیم کدام Process از Port استفاده می‌کند:
sudo ss -tulpn

این یکی را خیلی خوب یاد بگیر. 👌


————————-

9️⃣ nc یا Netcat

Netcat یکی از ابزارهای بسیار کاربردی برای تست Connection و Port است.
مثلاً:
nc -vz 192.168.1.10 22

یعنی:
ببین آیا می‌توانم به پورت 22 این سیستم وصل شوم؟

اگر پورت باز باشد معمولاً چیزی شبیه:
Connection to 192.168.1.10 22 port [tcp/ssh] succeeded!

می‌بینی.
مثال واقعی
فرض کن SSH به سرور وصل نمی‌شود.
اول:
ping 192.168.1.10

بعد:
nc -vz 192.168.1.10 22

اگر Ping جواب دهد ولی nc روی 22 شکست بخورد، احتمالاً مشکل مربوط به SSH Service، Firewall یا Port است.

——————-

🔟 Wireshark
حالا می‌رسیم به یکی از معروف‌ترین ابزارهای Network Troubleshooting:
Wireshark
Wireshark به ما اجازه می‌دهد Packetهای شبکه را Capture و تحلیل کنیم.
مثلاً وقتی:
Computer
↓
Network Card
↓
Packet
↓
Network

اطلاعات ردوبدل می‌شود، Wireshark می‌تواند Packetها را Capture کند.
مثلاً می‌توانی ببینی:
Source IP
Destination IP
Protocol
Port
Packet Size
TCP Flags


——————

1️⃣1️⃣ مثال Wireshark
فرض کن:
ping 8.8.8.8

می‌زنی.
در Wireshark می‌توانی Packetهای:
ICMP Echo Request
ICMP Echo Reply

را ببینی.
یا مثلاً وقتی وارد یک سایت HTTPS می‌شوی، می‌توانی ارتباطات TCP و TLS را مشاهده کنی.
📌 نکته مهم:
Wireshark فقط برای دیدن «اینترنت» نیست؛ برای تحلیل پروتکل‌ها و فهمیدن اینکه واقعاً روی شبکه چه اتفاقی می‌افتد استفاده می‌شود.

—————-

🧠 یک سناریوی واقعی Troubleshooting
فرض کن کاربر می‌گوید:
«سرورم اینترنت نداره.»

تو این ترتیب را برو:
مرحله 1 — Interface
ip addr

مرحله 2 — Gateway
ip route

مرحله 3 — Gateway را Ping کن
ping 192.168.1.1

مرحله 4 — IP اینترنت
ping 8.8.8.8

مرحله 5 — DNS
ping google.com

مرحله 6 — مسیر
traceroute google.com

مرحله 7 — بررسی DNS
dig google.com

مرحله 8 — بررسی Port
nc -vz google.com 443

مرحله 9 — بررسی Connectionها
ss -tulpn

مرحله 10 — اگر هنوز مشکل پیدا نشد
برو سراغ:
Wireshark

و Packetها را بررسی کن.

——————
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و هفتم 🐧
4 : پیکربندی dns در لینوکس
———————
اینجا می‌خواهیم یاد بگیریم لینوکس از کجا می‌فهمد برای تبدیل google.com به IP باید از چه DNS Serverای استفاده کند.

به‌طور کلی دو روش مهمی که در جزوه‌ات گفتی:
روش سنتی با /etc/resolv.conf
استفاده از systemd-resolved

————————

1️⃣ روش سنتی؛ /etc/resolv.conf
فایل:
/etc/resolv.conf

یکی از معروف‌ترین مکان‌های تنظیم DNS در Linux است.
مثلاً:
nameserver 8.8.8.8
nameserver 1.1.1.1

یعنی سیستم برای DNS Query می‌تواند از این Serverها استفاده کند.
مثلاً وقتی می‌زنی:
ping google.com

سیستم ابتدا باید IP google.com را پیدا کند و برای این کار DNS را Query می‌کند.

———————

2️⃣ مشکل روش سنتی چیست؟
در Linuxهای جدید، /etc/resolv.conf ممکن است توسط یک سرویس دیگر مدیریت شود.
مثلاً:
NetworkManager
systemd-resolved

بنابراین ممکن است دستی بنویسی:
nameserver 8.8.8.8

ولی بعد از Restart یا تغییر Connection، تنظیماتت دوباره تغییر کند.
🧠 پس:
resolv.conf
را بشناس، ولی در سیستم‌های جدید بهتر است بفهمی چه سرویسی آن را مدیریت می‌کند.



——————-
3️⃣ systemd-resolved چیست؟
systemd-resolved یک سرویس برای مدیریت و Resolve کردن DNS در سیستم‌های Linux مبتنی بر systemd است.
به زبان ساده:
Application
↓
systemd-resolved
↓
DNS Server
↓
IP Address

مثلاً:
google.com
↓
systemd-resolved
↓
8.8.8.8
↓
IP


—————-

4️⃣ فعال کردن systemd-resolved
دستوری که نوشتی:
systemctl --now enable systemd-resolved

درست است.
این دستور دو کار انجام می‌دهد:
enable
→ سرویس را برای Bootهای بعدی فعال می‌کند.

--now
→ همین الان هم سرویس را Start می‌کند.

می‌توانی وضعیتش را ببینی:
systemctl status systemd-resolved




———————-

5️⃣ تنظیم DNS در systemd-resolved
در سیستم‌های جدید می‌توان تنظیمات را در مسیرهای مربوط به systemd-resolved قرار داد.
یک مسیر مهم:
/etc/systemd/resolved.conf

و برای تنظیمات Drop-in می‌توان از:
/etc/systemd/resolved.conf.d/

استفاده کرد.
مثلاً:
/etc/systemd/resolved.conf.d/dns_servers.conf

————————

6️⃣ مثال تنظیم DNS
مثلاً:
sudo mkdir -p /etc/systemd/resolved.conf.d

بعد:
sudo nano /etc/systemd/resolved.conf.d/dns_servers.conf

و مثلاً:
[Resolve]
DNS=8.8.8.8 1.1.1.1

بعد سرویس را Restart می‌کنیم:
sudo systemctl restart systemd-resolved


—————-

7️⃣ resolvectl

resolvectl

است.
این ابزار برای تعامل با systemd-resolved استفاده می‌شود.
——————-
8️⃣ دیدن DNS فعلی
resolvectl dns

مثلاً ممکن است ببینی:
Link 2 (ens33)
Current Scopes: DNS
DNS Servers: 192.168.1.1

یعنی Interface ens33 از DNS Server مشخص‌شده استفاده می‌کند.

———————

9️⃣ دیدن Domain
فرمان:
resolvectl domain

اطلاعات مربوط به DNS Domainهایی که برای Linkها تنظیم شده‌اند را نشان می‌دهد.
همچنین:
resolvectl status

یکی از بهترین دستورها برای دیدن وضعیت کلی DNS است.
مثلاً:
Global
Protocols: -LLMNR -mDNS
resolv.conf mode: stub

Link 2 (ens33)
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1


————————

🔟 تست DNS با resolvectl
مثلاً:
resolvectl query google.com

یعنی:
google.com
را Resolve کن و IP آن را نشان بده.

این برای Troubleshooting خیلی خوب است.




——————-

1️⃣1️⃣ DNS برای یک Interface خاص
یکی از قابلیت‌های جالب resolvectl این است که می‌توانی DNS را برای یک Interface تنظیم کنی.
مثلاً:
sudo resolvectl dns ens33 8.8.8.8

یعنی DNS مربوط به Interface ens33 را روی:
8.8.8.8

قرار بده.
برای Domain Search هم می‌توان تنظیماتی انجام داد، مثلاً:
sudo resolvectl domain ens33 example.local


————-

1️⃣2️⃣ چرا DNS برای VPN مهم است؟
این قسمت خیلی کاربردی است.
فرض کن VPN وصل شده‌ای و VPN یک DNS داخلی دارد:
10.10.10.10

و شبکه VPN شامل Domainهای داخلی است:
server.company.local

اگر DNS درست تنظیم نشود، ممکن است:
ping server.company.local

کار نکند، حتی اگر خود VPN کاملاً وصل باشد.
پس:
VPN
↓
Network Interface
↓
DNS
↓
Internal Domain

باید درست تنظیم شود.

——————

1️⃣3️⃣ DNS روی Proxy چه ارتباطی دارد؟
اینجا یک نکته مهم وجود دارد:
Proxy و DNS یکی نیستند.
مثلاً Proxy می‌تواند ترافیک HTTP/HTTPS را عبور دهد، اما DNS ممکن است همچنان از DNS معمولی سیستم استفاده کند.
پس باید مشخص کنیم DNS Query کجا انجام می‌شود:
Application
↓
Proxy
↓
Internet

یا:
Application
↓
DNS Query
↓
DNS Server

در بعضی VPNها و Proxyها قابلیت‌هایی برای Remote DNS Resolution وجود دارد؛ یعنی به جای اینکه سیستم خودش نام دامنه را Resolve کند، Query از مسیر Proxy/VPN انجام می‌شود.
این موضوع برای جلوگیری از DNS Leak هم اهمیت دارد.

——————-

🧠 یک مثال واقعی
فرض کن:
VPN Interface → tun0
DNS Server → 10.10.10.1

و یک سایت داخلی داری:
git.company.local

بدون DNS مناسب:
ping git.company.local

ممکن است:
Name or service not known

بدهد.
اما وقتی DNS مربوط به VPN درست تنظیم شود:
git.company.local
↓
10.10.10.1
↓
IP داخلی

سیستم می‌تواند Server را پیدا کند.
❤1
خب خب فصل هشت هم کامل تموم شد

به امید خدا از فردا فصل 9 دوره الپیک 1 قسمت 102 رو شروع میکنیم
❤1🔥1
فصل نهم - قسمت هفتاد و هشتم 🐧
مقدمه - intro ( شل اسکریپتینگ)
———————
در فصل با قسمت های زیر اشنا میشویم

1 : نوشتن اولیه شکل اسکریپت

2 : خودکار سازی شل اسکریپت
My folder vip
فصل نهم - قسمت هفتاد و هشتم 🐧 مقدمه - intro ( شل اسکریپتینگ) ——————— در فصل با قسمت های زیر اشنا میشویم 1 : نوشتن اولیه شکل اسکریپت 2 : خودکار سازی شل اسکریپت
فصل نهم - قسمت هفتاد و نهم 🐧
متغیر ها در خط فرمان
———————

این قسمت خیلی مهمه، چون Variableها پایه‌ی کار با Shell و Bash هستند و در اسکریپت‌نویسی هم زیاد ازشان استفاده می‌کنیم.

_————————————-

1️⃣ Variable چیست؟
Variable یعنی یک نام که یک مقدار را در خودش نگه می‌دارد.
مثلاً:
name=ali

اینجا:
name → نام متغیر
ali → مقدار متغیر

برای نمایش مقدار:
echo $name

خروجی:
ali

🧠 علامت $ یعنی:
مقدار این Variable را به من بده.

———————-

2️⃣ ساخت Variable در Bash
مثلاً:
name=ali
age=25
city=kashan

نمایش:
echo $name
echo $age
echo $city

خروجی:
ali
25
kashan



——————————

⚠️ فاصله اطراف = ممنوع
این درست است:
name=ali

این غلط است:
name = ali

چون Bash آن را به عنوان یک Command و Argument تفسیر می‌کند.

—————————

3️⃣ Variable را با echo بخوانیم
مثلاً:
name=ali

بعد:
echo $name

یا:
echo "My name is $name"

خروجی:
My name is ali




—————————

4️⃣ Local Variable چیست؟
وقتی Variable را به صورت معمولی ایجاد می‌کنی:
name=ali

این Variable در Shell فعلی وجود دارد.
مثلاً:
name=ali
echo $name

جواب:
ali

اما اگر یک Shell جدید باز کنیم:
bash

و بزنیم:
echo $name

معمولاً چیزی نمایش داده نمی‌شود.
چرا؟
چون name یک Local Shell Variable بوده و به محیط Shell جدید Export نشده است.


————————-

5️⃣ Environment Variable چیست؟
اگر بخواهیم یک Variable به Shellهای فرزند هم منتقل شود، از:
export

استفاده می‌کنیم.
مثلاً:
name=ali
export name

حالا:
bash

و داخل Shell جدید:
echo $name

خروجی:
ali

چون Variable به عنوان Environment Variable Export شده است.


———————-

6️⃣ روش کوتاه‌تر Export
می‌توانی از ابتدا این‌طور بنویسی:
export name=ali

بعد:
bash
echo $name

خروجی:
ali


———————-
My folder vip
فصل نهم - قسمت هفتاد و هشتم 🐧 مقدمه - intro ( شل اسکریپتینگ) ——————— در فصل با قسمت های زیر اشنا میشویم 1 : نوشتن اولیه شکل اسکریپت 2 : خودکار سازی شل اسکریپت
فصل نهم - قسمت هشتاد 🐧
انواع شل
———————

این قسمت ادامه‌ی Variableهاست و برای LPIC-1 مهمه، چون باید بفهمی وقتی User وارد Linux می‌شود، Shell چطور تنظیم می‌شود و تفاوت Interactive / Non-interactive / Subshell چیست.

———————-

1️⃣ Shell چیست؟
Shell واسطه بین کاربر و Kernel است.
User
↓
Shell
↓
Kernel
↓
Hardware

مثلاً وقتی می‌نویسی:
ls

Shell دستور را دریافت و اجرا می‌کند.
معروف‌ترین Shellها:
Bash
Zsh
Ksh
Fish
Tcsh

اما در LPIC-1، Bash اهمیت بیشتری دارد.

—————————

مهم
اگر در دوره گفته شده «سه مدل Shell»، معمولاً منظور Shellهای معروف Unix/Linux است؛ مثلاً:
Bash
/bin/bash

یکی از رایج‌ترین Shellها.
sh
/bin/sh

Shell استاندارد/سازگار با POSIX که در سیستم‌های مختلف ممکن است به Shell دیگری لینک باشد.
مثلاً در بعضی Debianها:
/bin/sh → dash

Zsh
/bin/zsh

یک Shell پیشرفته با امکانات زیاد.
📌 اما تعداد Shellها محدود به سه تا نیست؛ Linux می‌تواند Shellهای مختلفی داشته باشد.

—————————-

3️⃣ Shell فعلی را چطور بفهمیم؟
echo $SHELL

مثلاً:
/bin/bash

اما یک نکته مهم:
$SHELL معمولاً Login Shell تعریف‌شده برای User را نشان می‌دهد، نه الزاماً Shellی که همین لحظه در حال اجرای آن هستی.
برای دیدن Process مربوط به Shell فعلی:
ps -p $$ -o comm=

مثلاً:
bash


——————

4️⃣ Shell کاربران کجا ثبت می‌شود؟
اطلاعات Userها در:
/etc/passwd

قرار دارد.
مثلاً:
ali:x:1000:1000:Ali:/home/ali:/bin/bash

قسمت آخر:
/bin/bash

Login Shell کاربر است.
اگر:
/sbin/nologin

باشد، معمولاً کاربر برای Login عادی اجازه ورود ندارد.

——————-

5️⃣ فایل‌های تنظیمات Shell
قسمت مهم این جلسه همین است.
Bash برای تنظیم محیط خودش فایل‌های مختلفی را می‌خواند.
مهم‌ترین‌ها:
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile

اما همه این چهار فایل پشت سر هم خوانده نمی‌شوند.
برای Login Shell، Bash این ترتیب را بررسی می‌کند:
/etc/profile
↓
~/.bash_profile
↓
اگر نبود:
~/.bash_login
↓
اگر نبود:
~/.profile

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

————————-

6️⃣ /etc/profile
تنظیمات عمومی برای Userها:
/etc/profile

یعنی تنظیمات مربوط به محیط Login که می‌تواند برای کاربران سیستم اعمال شود.

————————-

7️⃣ .bash_profile
فایل:
~/.bash_profile

تنظیمات Login Shell مخصوص همان User است.
مثلاً:
export PATH="$PATH:$HOME/bin"

———————

8️⃣ .bash_login
اگر:
~/.bash_profile

وجود نداشته باشد، Bash به سراغ:
~/.bash_login

می‌رود.


———————

9️⃣ .profile
اگر دو فایل قبلی وجود نداشته باشند:
~/.profile

خوانده می‌شود.
پس این ترتیب را حفظ کن:
/etc/profile

↓

~/.bash_profile
OR
~/.bash_login
OR
~/.profile

❗️ نکته امتحانی:
Bash از فایل‌های .bash_profile، .bash_login و .profile فقط اولین فایل موجود را برای Login Shell می‌خواند.

———————

🔟 Interactive Shell چیست؟
Interactive یعنی Shell مستقیماً با کاربر در تعامل است.
مثلاً Terminal را باز می‌کنی:
bash

و می‌بینی:
user@linux:~$

بعد می‌توانی دستور بزنی:
ls
pwd
whoami

این یک Interactive Shell است.

————————-

1️⃣1️⃣ Non-Interactive Shell
در Non-interactive، Shell برای اجرای یک Script یا Command اجرا می‌شود و منتظر وارد کردن دستور از کاربر نمی‌ماند.
مثلاً:
bash script.sh

یا:
bash -c 'echo Hello'

در این حالت Shell برای اجرای دستورات استفاده شده، نه برای تعامل مستقیم با کاربر.

————————

1️⃣2️⃣ Subshell چیست؟
Subshell یعنی یک Shell فرزند که از Shell فعلی ایجاد شده است.
مثلاً:
bash

ساختار:
Shell اصلی
│
└── bash
│
└── Subshell

می‌توانی PIDها را ببینی:
echo $$

بعد:
bash

دوباره:
echo $$

PID تغییر می‌کند.
برای خروج:
exit






_————————

1️⃣3️⃣ نکته مهم Variable و Subshell
فرض کن:
name=ali

این یک Shell Variable است.
اگر:
bash

اجرا کنی:
echo $name

ممکن است چیزی نمایش داده نشود.
اما اگر:
export name=ali

کنی:
bash
echo $name

می‌بینی:
ali

چون Variable به Environment منتقل شده است.

———————

1️⃣5️⃣ Alias چیست؟
Alias یعنی یک نام کوتاه برای یک Command.
مثلاً:
alias ll='ls -l'

حالا:
ll

تقریباً مثل:
ls -l

اجرا می‌شود.
1️⃣6️⃣ دیدن Aliasها
alias

تمام Aliasهای تعریف‌شده را نشان می‌دهد.
مثلاً:
alias ll='ls -l'
alias la='ls -la'

1️⃣7️⃣ حذف Alias
unalias ll

حالا:
ll

دیگر Alias نیست.
برای حذف همه Aliasها:
unalias -a

1️⃣8️⃣ Alias دائمی
اگر فقط بنویسی:
alias ll='ls -l'

معمولاً فقط برای همان Shell Session است.
برای دائمی کردن در Bash می‌توانی آن را در:
~/.bashrc

قرار دهی.
مثلاً:
nano ~/.bashrc

اضافه کن:
alias ll='ls -l'

بعد برای اعمال بدون Logout:
source ~/.bashrc

یا:
. ~/.bashrc

⚠️ .bashrc چه فرقی دارد؟
این یکی را خیلی خوب حفظ کن.
Login Shell
↓
/etc/profile
↓
~/.bash_profile

ولی برای Interactive non-login Bash معمولاً:
~/.bashrc

خوانده می‌شود.
پس:
.bash_profile
→ Login Shell

.bashrc
→ Interactive Shell

خیلی از .bash_profileها هم .bashrc را Source می‌کنند:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

⭐️ خلاصه قسمت ۸۰ برای دفتر
Shell
Shell
→ واسطه User و Kernel

معروف‌ها:
bash
sh
zsh

Shell کاربر:
cat /etc/passwd

یا:
echo $SHELL

فایل‌های Login Bash
/etc/profile
↓
~/.bash_profile
↓
اگر نبود ~/.bash_login
↓
اگر نبود ~/.profile

⚠️ از سه فایل User فقط اولین فایل موجود انتخاب می‌شود.
Interactive
Terminal
↓
Interactive Shell

Non-Interactive
Script
↓
Non-Interactive Shell

Subshell
Parent Shell
↓
Child Shell

ایجاد:
bash

خروج:
exit

Alias
ساخت:
alias ll='ls -l'

نمایش:
alias

حذف:
unalias ll

دائمی کردن:
~/.bashrc
اعمال تغییرات:
source ~/.bashrc
🧠 سه نکته طلایی امتحان
/etc/profile
→ تنظیمات عمومی Login

~/.bash_profile
→ تنظیمات Login کاربر

~/.bashrc
→ تنظیمات Interactive Bash
و مهم‌تر از همه:
Login بودن با Interactive بودن یکی نیست. یک Shell می‌تواند Login باشد یا نباشد، و همچنین Interactive باشد یا نباشد؛ این دو ویژگی مستقل از هم هستند.



—————————
1️⃣5️⃣ Alias چیست؟
Alias یعنی یک نام کوتاه برای یک Command.
مثلاً:
alias ll='ls -l'
حالا:
ll
تقریباً مثل:
ls -l
اجرا می‌شود.
1️⃣6️⃣ دیدن Aliasها
alias
تمام Aliasهای تعریف‌شده را نشان می‌دهد.
مثلاً:
alias ll='ls -l'
alias la='ls -la'
1️⃣7️⃣ حذف Alias
unalias ll
حالا:
ll
دیگر Alias نیست.
برای حذف همه Aliasها:
unalias -a
1️⃣8️⃣ Alias دائمی
اگر فقط بنویسی:
alias ll='ls -l'
معمولاً فقط برای همان Shell Session است.
برای دائمی کردن در Bash می‌توانی آن را در:
~/.bashrc
قرار دهی.
مثلاً:
nano ~/.bashrc
اضافه کن:
alias ll='ls -l'
بعد برای اعمال بدون Logout:
source ~/.bashrc
یا:
. ~/.bashrc




————————-
My folder vip
فصل نهم - قسمت هفتاد و هشتم 🐧 مقدمه - intro ( شل اسکریپتینگ) ——————— در فصل با قسمت های زیر اشنا میشویم 1 : نوشتن اولیه شکل اسکریپت 2 : خودکار سازی شل اسکریپت
فصل نهم - قسمت هشتاد و یکم 🐧
مقدمه ای بر شل اسکریپتینگ
———————

فصل نهم - قسمت هشتاد و یکم 🐧
مقدمه ای بر شل اسکریپتینگ
———————
این قسمت یکی از مهم‌ترین قسمت‌های فصل نهمه، چون از اینجا وارد Shell Script نویسی می‌شیم. برای LPIC-1 باید منطق اجرای دستورات رو خوب بلد باشی.

————————-


1️⃣ Shell Scripting چیست؟
خیلی ساده:
Shell Script یعنی چند دستور Linux را داخل یک فایل قرار بدهیم تا بتوانیم آنها را یکجا و خودکار اجرا کنیم.
مثلاً به‌جای اینکه هر روز این‌ها را جداگانه بزنیم:
mkdir backup
cp file.txt backup/
date

می‌توانیم همه را داخل یک فایل قرار دهیم:
backup.sh

و فقط اجرا کنیم:
./backup.sh

یعنی Shell Script مثل یک برنامه کوچک برای خودکارسازی کارهای Linux است.

————————

2️⃣ Shellهای مناسب برای Script
از Shellهای مختلف می‌توان Script نوشت.
مهم‌ترین‌ها:
Bash
Ksh
Sh
Zsh

در دوره LPIC-1 تمرکز اصلی معمولاً روی:
Bash

است.
مثلاً:
#!/bin/bash

یعنی این Script با Bash اجرا شود.

————————-

3️⃣ اجرای چند Command با ;
با ; می‌توانیم چند دستور را در یک خط بنویسیم.
مثلاً:
pwd; ls; whoami

هر سه دستور اجرا می‌شوند.
نکته مهم:
; به موفق یا ناموفق بودن دستور قبلی کاری ندارد.
مثلاً:
ls /abc; echo Hello

حتی اگر /abc وجود نداشته باشد، echo Hello اجرا می‌شود.
ساختار:
Command 1
↓
اجرا
↓
Command 2
↓
اجرا

—————————

4️⃣ اجرای شرطی با &&
&& یعنی:
دستور دوم فقط زمانی اجرا شود که دستور اول با موفقیت اجرا شده باشد.

مثلاً:
mkdir test && cd test

اگر mkdir test موفق شود، cd test اجرا می‌شود.
اما اگر ساخت Directory شکست بخورد، دستور دوم اجرا نمی‌شود.
مثال کاربردی:
ping -c 1 8.8.8.8 && echo "Internet OK"

اگر Ping موفق شود:
Internet OK

نمایش داده می‌شود.
🧠 حفظ کن:
&& → اگر اولی موفق شد، دومی را اجرا کن


—————————

5️⃣ اجرای شرطی با ||
|| تقریباً برعکس && است.
یعنی:
دستور دوم فقط زمانی اجرا شود که دستور اول شکست بخورد.

مثلاً:
cd /backup || echo "Backup directory not found"

اگر /backup وجود نداشته باشد:
Backup directory not found

نمایش داده می‌شود.
مثال دیگر:
ping -c 1 192.168.1.100 && echo "UP" || echo "DOWN"

اگر Ping موفق شود:
UP

و اگر شکست بخورد:
DOWN


————————————-
مثال:
command1 ; command2

⬅️ همیشه command2 اجرا می‌شود.
command1 && command2

⬅️ فقط در صورت موفقیت command1.
command1 || command2

⬅️ فقط در صورت شکست command1.


———————
7️⃣ Pipe یا |
Pipe برای انتقال خروجی یک Command به ورودی Command بعدی استفاده می‌شود.
مثلاً:
ls | grep txt

اینجا:
ls
↓
خروجی
↓
|
↓
grep txt

یعنی خروجی ls به grep داده می‌شود.
مثلاً:
ps aux | grep ssh

یعنی خروجی ps aux را به grep بده و فقط موارد مربوط به ssh را پیدا کن.



——————-
8️⃣ Pipe با چند Command
Pipe می‌تواند چند مرحله داشته باشد:
ps aux | grep ssh | wc -l

ساختار:
ps aux
↓
grep ssh
↓
wc -l

یعنی:
Processها را نمایش بده.
موارد مربوط به SSH را فیلتر کن.
تعداد خطوط را بشمار.

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

9️⃣ تفاوت | با &&
خیلی مهم:
Pipe:
command1 | command2

یعنی:
خروجی Command 1 را به ورودی Command 2 بده.

AND:
command1 && command2

یعنی:
اگر Command 1 موفق شد، Command 2 را اجرا کن.

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

————————-
فصل نهم - قسمت هشتاد و دوم 🐧
اموزش اولیه شل اسکریپتینگ
———————
آموزش اولیه Shell Scripting
این قسمت در واقع می‌خواد ساختار اولیه یک Shell Script و روش اجرای آن رو یاد بده.
1️⃣ یک Shell از نوع Bash
اول مشخص می‌کنیم Script با Bash اجرا شود:
#!/bin/bash

این خط را Shebang می‌گوییم.

———————-


2️⃣ ساخت یک فایل خالی
مثلاً:
touch ali.sh

فایل ساخته می‌شود:
ali.sh

پسوند .sh معمولاً نشان می‌دهد فایل یک Shell Script است، ولی خود پسوند به‌تنهایی باعث اجرای Script نمی‌شود.


———————

3️⃣ ویرایش فایل
مثلاً با nano:
nano ali.sh

و داخلش بنویس:
#!/bin/bash

echo "Hello Ali"

ذخیره کن.

————————

4️⃣ روش اول اجرای Script
اگر مجوز Execute نداشته باشد:
chmod +x ali.sh

حالا:
./ali.sh

اجرا می‌شود.

——————-

5️⃣ chmod u+x یعنی چه؟
این دستور:
chmod u+x ali.sh

یعنی:
فقط برای User/Owner فایل، مجوز Execute را اضافه کن.

مقایسه:
+x    → اضافه کردن Execute
u+x → اضافه کردن Execute برای Owner
g+x → اضافه کردن Execute برای Group
o+x → اضافه کردن Execute برای Others

—————————

6️⃣ چرا ./ali.sh؟
وقتی می‌نویسیم:
./ali.sh

./ یعنی:
فایل

ali.sh
را از دایرکتوری فعلی اجرا کن.

اگر فقط بنویسی:
ali.sh

ممکن است Bash فایل را پیدا نکند، چون دایرکتوری فعلی معمولاً در PATH نیست.


——————-

7️⃣ روش اجرای بدون chmod
حتی اگر فایل Execute نباشد، می‌توانی مستقیماً به Bash بدهی:
bash ali.sh

یا:
/bin/bash ali.sh

در این حالت Bash فایل را می‌خواند و اجرا می‌کند.
فصل نهم - قسمت هشتاد و سوم 🐧
نمایش پیام به کاربر
———————
نمایش پیام به کاربر با echo
1. echo چیست؟
دستور echo برای نمایش متن، متغیرها و خروجی‌های ساده در ترمینال استفاده می‌شود.
مثلاً:
echo "Hello World"

خروجی:
Hello World

یا:
echo "Welcome to Linux"

خروجی:
Welcome to Linux


———————————

2. استفاده از متن ساده
اگر متن فاصله داشته باشد، بهتر است آن را داخل کوتیشن قرار دهیم:
echo "Hello Ali"

اما حتی این هم کار می‌کند:
echo Hello Ali

خروجی هر دو:
Hello Ali

ولی استفاده از " " در اسکریپت‌نویسی خواناتر و مطمئن‌تر است.

—————————

3. Double Quote یا " "
وقتی متن را داخل دابل کوتیشن قرار می‌دهیم:
echo "Hello"

Shell محتوای داخل آن را بررسی می‌کند و متغیرها را Expand می‌کند.
مثلاً:
USER="Ali"
echo "Hello $USER"

خروجی:
Hello Ali

یعنی:
$USER
↓
Ali

مثال کاربردی:
NAME="Alireza"
AGE=25

echo "My name is $NAME"
echo "I am $AGE years old"

خروجی:
My name is Alireza
I am 25 years old



——————-
4. Single Quote یا ' '
وقتی از Single Quote استفاده کنیم:
echo 'Hello $USER'

Shell مقدار متغیر را جایگزین نمی‌کند.
خروجی مثلاً:
Hello $USER

یعنی $USER دقیقاً همان‌طور که نوشته شده چاپ می‌شود.
مقایسه مهم
USER="Ali"

echo "Hello $USER"
echo 'Hello $USER'

خروجی:
Hello Ali
Hello $USER

⭐️ نکته امتحانی
" "  → Variable Expansion انجام می‌شود

' ' → محتوا تقریباً Literal چاپ می‌شود

مثلاً:
echo "$USER"

مقدار USER را چاپ می‌کند.
اما:
echo '$USER'

خود عبارت $USER را چاپ می‌کند.

——————————

5. متغیرها در echo
در Bash برای استفاده از مقدار متغیر از $ استفاده می‌کنیم.
مثلاً:
NAME="Ali"

echo $NAME

خروجی:
Ali

یا:
echo "My name is $NAME"

خروجی:
My name is Ali

⚠️ نکته مهم درباره جزوه
اگر نوشته شده:
&USER

برای Bash اشتباه است.
در Bash باید بنویسی:
$USER

مثلاً:
echo "$USER"

———————-
6. متغیرهای آماده سیستم
خود Linux تعدادی Environment Variable دارد.
مثلاً:
echo "$USER"

نام کاربر فعلی را نشان می‌دهد.
echo "$HOME"

مسیر Home کاربر را نشان می‌دهد.
echo "$PWD"

مسیر دایرکتوری فعلی را نشان می‌دهد.
echo "$SHELL"

Shell پیش‌فرض کاربر را نشان می‌دهد.
مثلاً ممکن است:
$USER
alireza

$HOME
/home/alireza

$PWD
/home/alireza/Desktop

$SHELL
/bin/bash



———————-


7. ترکیب چند متغیر
مثلاً:
NAME="Ali"
JOB="Security"

echo "Hello $NAME"
echo "Your job is $JOB"

خروجی:
Hello Ali
Your job is Security

یا همه را در یک خط:
echo "Hello $NAME, your job is $JOB"


————————

8. استفاده از ${}
گاهی باید متغیر را داخل ${} قرار دهیم.
مثلاً:
NAME="Ali"

echo "${NAME}reza"

خروجی:
Alireza

چرا؟
چون Bash باید بفهمد نام متغیر NAME است.
اگر بنویسیم:
echo "$NAMEreza"

Bash تصور می‌کند اسم متغیر:
NAMEreza

است.
پس:
"${NAME}reza"

بهتر است.




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

9. استفاده از Argument در echo
این قسمت خیلی مهمه.
وقتی یک Script را اجرا می‌کنیم، می‌توانیم بعد از اسم فایل، اطلاعاتی به آن بدهیم.
مثلاً:
./ali.sh Alireza

در Script:
echo "$1"

خروجی:
Alireza

اینجا:
$1

یعنی اولین Argument.



————————

مثال با چند Argument
فایل:
ali.sh

محتوا:
#!/bin/bash

echo "Argument 1: $1"
echo "Argument 2: $2"
echo "Argument 3: $3"

اجرا:
./ali.sh Ali 25 Tehran

خروجی:
Argument 1: Ali
Argument 2: 25
Argument 3: Tehran

یعنی:
$1 → Ali
$2 → 25
$3 → Tehran

————————

10. $# تعداد Argumentها
متغیر خاص:
$#

تعداد Argumentهایی که به Script داده شده را نشان می‌دهد.
مثلاً:
#!/bin/bash

echo "Number of arguments: $#"

اجرا:
./ali.sh Ali 25 Tehran

خروجی:
Number of arguments: 3

—————

11. $@ تمام Argumentها
$@ یعنی تقریباً تمام Argumentها.
مثلاً:
#!/bin/bash

echo "Arguments: $@"

اجرا:
./ali.sh Ali 25 Tehran

خروجی:
Arguments: Ali 25 Tehran

12. $0 چیست؟
یک مورد خیلی مهم دیگر:
$0

نام Script را نشان می‌دهد.
مثلاً:
#!/bin/bash

echo "Script name: $0"

اگر اجرا کنیم:
./ali.sh Ali

خروجی:
Script name: ./ali.sh

———————-
13. یک مثال واقعی و خیلی خوب 🔥
فرض کن می‌خواهیم Scriptی داشته باشیم که اسم کاربر را بگیرد و به او خوش‌آمد بگوید.
فایل:
welcome.sh

محتوا:
#!/bin/bash

echo "========================"
echo " Welcome"
echo "========================"

echo "Hello $1"
echo "You are using: $SHELL"
echo "Your home directory: $HOME"
echo "Current directory: $PWD"

اجرا:
./welcome.sh Alireza

خروجی مثلاً:
========================
Welcome
========================
Hello Alireza
You are using: /bin/bash
Your home directory: /home/alireza
Current directory: /home/alireza

اینجا چند مفهوم را با هم استفاده کردیم:
$1     → Argument
$SHELL → Environment Variable
$HOME → Environment Variable
$PWD → Environment Variable



———————
14. چاپ $ به صورت واقعی
یک نکته جالب:
اگر بنویسی:
echo "$USER"

متغیر Expand می‌شود.
اما:
echo '$USER'

خود $USER چاپ می‌شود.
پس Single Quote برای مواقعی که می‌خواهیم $ و سایر کاراکترها تفسیر نشوند مفید است.
———————