فصل هفتم — قسمت شصت و هشتم 🐧
مدیریت کاربران در لینوکس
——————-
در این قسمت میخواهیم بفهمیم User در لینوکس دقیقاً چیست، چطور ساخته میشود، کجا اطلاعاتش ذخیره میشود و چطور Permission و Group آن را مدیریت کنیم.
——————
1️⃣ چرا User ایجاد میکنیم؟
یکی از اشتباهات بزرگ در Linux این است که همه با
مثلاً اگر با root اشتباهی بزنی:
ممکن است اطلاعات مهمی از بین برود.
پس برای هر شخص یا سرویس یک User جدا میسازیم.
مثلاً:
هر User میتواند Permission متفاوتی داشته باشد.
——————
2️⃣ آیا Root را حذف میکنیم؟
❌ معمولاً root را حذف نمیکنیم.
Root یک حساب سیستمی ضروری است.
کاری که معمولاً انجام میدهیم این است که:
مثلاً:
در Red Hat و خانواده آن، گروه
در Debian/Ubuntu معمولاً گروه مهم:
است.
مثلاً:
—————————-
3️⃣ User و Group
هر User یک UID دارد.
هر Group یک GID دارد.
مثلاً:
ممکن است ببینی:
یعنی:
——————-
4️⃣ دستور
برای دیدن گروههای کاربر:
مثلاً:
———————
5️⃣ دستور
اطلاعات کاملتری میدهد:
مثلاً:
🧠 برای امتحان:
————————-
6️⃣ Login Shell چیست؟
وقتی User ایجاد میشود، برای او یک Shell مشخص میشود.
مثلاً:
اما بعضی Userها اصلاً برای Login کردن ساخته نشدهاند.
مثلاً User مربوط به سرویسها:
ممکن است Shell آنها:
باشد.
یعنی:
مثلاً:
ممکن است ببینی:
——————
7️⃣ ساخت User
دستور اصلی:
بعد برایش Password:
اما بهتر است هنگام ساخت User گزینههای موردنیاز را هم مشخص کنیم.
مثلاً:
یعنی:
بعد:
——————
8️⃣ هنگام ساخت User چه اتفاقی میافتد؟
وقتی:
میزنی، چند اتفاق مهم میافتد.
1. UID ایجاد میشود
مثلاً:
2. Group ساخته/تنظیم میشود
3. Home ساخته میشود:
4. فایلهای اولیه از
5. اطلاعات User در فایلهای سیستم ثبت میشود.
——————
9️⃣
یعنی یک قالب اولیه برای Home User.
مثلاً:
وقتی User جدید میسازی:
فایلهای موجود در
کپی میشوند.
🧠 مثال واقعی:
مثل این است که برای هر کارمند جدید، یک پوشه آماده با تنظیمات اولیه داشته باشی.
—————-
🔟
اطلاعات عمومی Userها در:
قرار دارد.
مثلاً:
یک خط ممکن است این شکلی باشد:
ساختار:
نکته مهم
در سیستمهای مدرن، Password واقعی داخل
آن
————————-
1️⃣1️⃣
این فایل اطلاعات حساس مربوط به Password را نگه میدارد.
مثلاً:
Password به صورت Hash ذخیره میشود، نه Password خام.
⚠️ دسترسی این فایل بسیار محدود است.
——————-
1️⃣2️⃣
مثلاً:
میتوانی تنظیماتی مربوط به:
محدوده UID
محدوده GID
عمر Password
تنظیمات Password
Home Directory
را در آن ببینی.
————
1️⃣3️⃣
برای دیدن Defaultهای useradd:
مثلاً ممکن است:
ببینی.
یعنی وقتی User جدید میسازی،
——————
1️⃣4️⃣ مدیریت Password با
ساخت/تغییر Password:
چند Option مهم:
قفل کردن حساب:
باز کردن:
منقضی کردن Password:
دیدن وضعیت:
حذف Password:
⚠️
———————-
1️⃣5️⃣
برای تغییر مشخصات User:
مثلاً تغییر Shell:
تغییر Home:
اضافه کردن User به Group:
⚠️ نکته خیلی مهم
این:
یعنی User را به Groupهای اضافی اضافه کن.
حتماً
چون:
ممکن است عضویتهای قبلی کاربر در گروههای supplementary را جایگزین کند.
——————-
1️⃣6️⃣ ساخت Group
اگر بخواهی GID مشخص بدهی:
بررسی:
——————-
1️⃣7️⃣ اضافه کردن User به Group
مثلاً:
بعد:
یا:
——————-
1️⃣8️⃣ Wheel چیست؟
در سیستمهای Red Hat / Fedora / AlmaLinux گروه:
معمولاً برای دسترسی مدیریتی با
مثلاً:
بعد کاربر
در Debian/Ubuntu معمولاً:
🧠 حفظ کن:
————————
مدیریت کاربران در لینوکس
——————-
در این قسمت میخواهیم بفهمیم 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
————————————
در این قسمت دو مفهوم خیلی مهم برای مدیریت دسترسی کاربران داریم:
——————
1️⃣
یعنی از یک User وارد User دیگری شویم.
مثلاً:
→ وارد حساب
برای رفتن به root:
→ وارد root میشوی و محیط Login مربوط به root را هم دریافت میکنی.
🧠 تفاوت مهم:
—————————
2️⃣
مثلاً کاربر
ولی میخواهد یک Package نصب کند:
دستور با دسترسی root اجرا میشود، ولی خود User تبدیل به root نمیشود.
مثلاً:
فقط همان دستور با دسترسی مناسب اجرا میشود.
————————
3️⃣ چرا
فرض کن:
فقط زمانی که نیاز دارد:
اجرا میکند.
بنابراین لازم نیست دائماً داخل root باشی.
این موضوع از نظر امنیت و Audit هم بهتر است.
————————
4️⃣
قوانین
اما ❌ نباید معمولاً با
از:
استفاده میکنیم.
———————-
5️⃣ ساختار یک قانون sudoers
مثلاً:
یعنی:
پس:
⚠️ این دسترسی بسیار قدرتمند است و عملاً تقریباً معادل دسترسی کامل مدیریتی است.
——————
6️⃣ یک مثال محدودتر
مثلاً فقط اجازه بدهیم
یعنی:
کاربر نمیتواند با همین Rule مثلاً این را اجرا کند:
————-
7️⃣ یک مثال کاربردی دیگر
فرض کنیم کاربر
پس:
مجاز است، اما مثلاً:
مجاز نیست.
🧠 این همان اصل Least Privilege است:
————-
8️⃣ مثال برای
Rule خودت:
یعنی
را با دسترسی root اجرا کند.
اما یک نکته مهم:
⚠️ مسیر Binary را دقیق بررسی کن
ممکن است در سیستم مسیر
با:
مسیر واقعی را پیدا کن.
مثلاً:
و همان را در sudoers بنویس.
—————
9️⃣
در خانواده Red Hat:
گروه معروف مدیریتی:
است.
مثلاً:
یعنی
بعد اگر sudoers سیستم اجازه داده باشد،
————-
🔟 در Debian/Ubuntu
در Debian و Ubuntu معمولاً گروه:
است.
مثلاً:
پیاده سازی 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️⃣ مثال برای
dnfRule خودت:
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 — Mail User Agent
برنامهای که کاربر با آن Email را میخواند یا میفرستد.
مثلاً:
یعنی رابط کاربر با سیستم Mail.
——————
🚚 MTA — Mail Transfer Agent
وظیفهاش انتقال Email بین Mail Serverها است.
مثلاً:
مثال:
———————-
📥 MDA — Mail Delivery Agent
وقتی Mail به سرور مقصد رسید، MDA آن را در محل مناسب Mailbox کاربر تحویل میدهد.
مثلاً:
———-
2️⃣ انتخاب MTA
در Linux چند MTA معروف داریم:
در این آموزش از:
⭐️ Postfix
استفاده میکنیم.
Postfix یکی از MTAهای معروف Linux است و برای ارسال و دریافت SMTP استفاده میشود.
——————————
3️⃣ نصب Postfix
در Red Hat / Fedora / AlmaLinux:
بعد سرویس را فعال و اجرا کن:
بررسی:
——————
4️⃣ فایل تنظیمات Postfix
فایلی که باید بشناسی:
⚠️ در جزوهات نوشته بودی:
درستش:
5️⃣
در:
گزینه:
یعنی Postfix روی تمام Interfaceهای شبکه سیستم گوش بدهد.
مثلاً اگر سرور چند IP داشته باشد:
با:
Postfix روی Interfaceهای مناسب سیستم Listen میکند.
🧠 برای سرور واقعی باید این تنظیم را با توجه به نیاز و مدل شبکه انجام داد؛ باز گذاشتن سرویس SMTP روی همه Interfaceها بدون تنظیمات امنیتی میتواند خطرناک باشد.
—————
6️⃣ پورت SMTP
پروتکل اصلی ارسال Mail:
پورت استاندارد:
برای Submission معمولاً:
و SMTPS:
در این قسمت فعلاً مفهوم اصلی را با 25 یاد بگیر.
بررسی:
ممکن است ببینی:
یعنی Postfix روی پورت SMTP در حال Listen است.
————————
7️⃣ Firewall
اگر سرور باید از بیرون SMTP دریافت کند، پورت موردنظر باید در Firewall مجاز باشد.
مثلاً در سیستمهای دارای firewalld:
بررسی:
——————
8️⃣ ارسال Email از Command Line
یکی از ابزارهای ساده:
نصب:
بعد میتوانی Mail بفرستی.
مثلاً:
ساختار:
——————
9️⃣ Mail محلی در Linux
یکی از بهترین تمرینها برای فهم Mail Server این است که اول Mail داخلی خود Linux را امتحان کنی.
مثلاً یک User بساز:
بعد:
اینجا Email از طریق Mail System محلی تحویل User میشود.
بعد با:
میتوانی Mailهای محلی را ببینی.
—————
10️⃣ لاگ Mail را کجا ببینیم؟
یکی از مهمترین چیزها در عیبیابی Mail Server، Log است.
در Red Hat-basedها معمولاً:
مثلاً:
حالا در یک Terminal دیگر Mail بفرست:
و در Terminal اول Log را ببین.
این فوقالعاده مهم است چون میتوانی ببینی:
——————-
1️⃣1️⃣ در Debian/Ubuntu
ممکن است Mail Log را در این مسیر ببینی:
پس:
————-
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
↓
↓
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های محلی را ببینی.
—————
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 اجرا میشود و سیستم برای آن یک Process ایجاد میکند.
هر Process معمولاً یک PID دارد:
برای دیدنش:
یا:
—————————————
2️⃣ Daemon چیست؟
Daemon یک Process است که معمولاً در پسزمینه اجرا میشود و منتظر درخواست یا رویداد میماند.
مثلاً:
مثال واقعی:
وقتی SSH Server اجراست:
پس:
معمولاً اسم بسیاری از Daemonها به
————————-
3️⃣ Log چیست و چرا مهم است؟
Log یعنی گزارش اتفاقاتی که در سیستم رخ دادهاند.
مثلاً:
مثال واقعی
فرض کن کاربر میگوید:
به جای حدس زدن:
را میزنی و Log را بررسی میکنی.
ممکن است مشخص شود:
یا:
یا:
پس Log برای Troubleshooting، Security و Auditing بسیار مهم است.
————————————-
4️⃣ ساختار کلی Logging در Linux
در Linux دو سیستم مهم را زیاد میبینی:
یعنی ممکن است سیستم هم از:
استفاده کند و هم:
—————————
5️⃣ Syslog چیست؟
Syslog یک استاندارد و معماری برای ارسال و مدیریت پیامهای Log است.
برنامهها میتوانند پیامهای خودشان را به Syslog بفرستند.
مثلاً:
یکی از پیادهسازیهای معروف Syslog:
است.
فایل تنظیمات آن معمولاً:
است.
——————————-
6️⃣ Facility چیست؟
Facility مشخص میکند Log مربوط به چه نوع بخشی از سیستم است.
چند نمونه:
مثلاً:
→ پیامهای مربوط به Authentication
→ پیامهای Kernel
→ پیامهای Mail
→ پیامهای Cron
———————————
7️⃣ Severity چیست؟
Severity مشخص میکند شدت یا اهمیت یک Log چقدر است.
از کماهمیتتر به بحرانیتر:
مثلاً:
→ اطلاعات عادی
→ هشدار
→ خطا
→ خطای بسیار مهم
→ وضعیت اضطراری
🧠 برای دفتر:
————————————
8️⃣ Log Rotation چیست؟
فرض کن یک سرور داری و:
هر روز هزاران Log تولید میکند.
اگر این فایل را کنترل نکنی، ممکن است:
اینجاست که Log Rotation وارد میشود.
ابزار معروف:
است.
کارش این است که Logهای قدیمی را:
مدیریت کند و در صورت نیاز فشرده یا حذف کند.
———————————————
9️⃣ فایل
فایل اصلی تنظیمات:
و تنظیمات برنامههای مختلف معمولاً در:
قرار دارند.
مثلاً:
——————————
🔟 systemd-journald چیست؟
در سیستمهای مبتنی بر systemd، سرویس:
وظیفه جمعآوری و مدیریت Journalها را دارد.
یعنی:
———————
1️⃣1️⃣ فایل تنظیمات journald
فایل:
است.
——————————
1️⃣2️⃣
مهمترین ابزار برای خواندن Journal:
است.
اگر فقط بزنی:
تعداد زیادی Log نمایش داده میشود.
———————————
1️⃣3️⃣ آخرین 50 Log
یعنی:
————————
1️⃣4️⃣ دنبال کردن Log به صورت لحظهای
مثل:
مثلاً:
حالا در Terminal دیگری SSH Login کن.
Log همان لحظه نمایش داده میشود.
———————-
1️⃣5️⃣ Log مربوط به یک سرویس
مثلاً SSH:
یعنی:
در Ubuntu ممکن است نام سرویس:
باشد.
————————-
1️⃣6️⃣ Log مربوط به Boot فعلی
یعنی:
خیلی کاربردی است وقتی سیستم Boot شده ولی مثلاً یک سرویس بالا نیامده.
———————————
1️⃣7️⃣ فقط Errorها
یعنی فقط پیامهایی با Priority برابر یا بالاتر از
برای محدوده:
یعنی Logهای:
را نمایش بده.
———————-
1️⃣8️⃣ Log از یک زمان مشخص
از دیروز:
از دو ساعت قبل:
مثلاً:
→ Logهای بعد از ساعت 15 را نشان میدهد.
———————-
1️⃣9️⃣ ترکیب چند Filter
اینجا قدرت
مثلاً:
یعنی:
یا:
یعنی:
——————-
2️⃣0️⃣ تغییر Format خروجی
خروجی معمولی:
برای خروجی JSON:
JSON برای زمانی مفید است که بخواهی Log را با ابزارها و برنامهها پردازش کنی.
——————————————
2️⃣1️⃣ ابزار
با
مثلاً:
بعد میتوانی Log را پیدا کنی.
حتی Facility و Severity هم مشخص کنی:
یعنی:
یک مثال امنیتی:
————————-
2️⃣2️⃣
این ابزار خروجی یک برنامه را وارد Journal میکند.
مثلاً:
یا:
بعد:
را بزن و پیام را پیدا کن.
حتی میتوانی Priority بدهی:
——————-
2️⃣3️⃣
یکی از مهمترین مسیرهای Log در Linux:
است.
برای دیدنش:
ممکن است فایلهایی مثل این ببینی:
البته نام و محل Logها بسته به Distribution و تنظیمات سیستم متفاوت است.
————————
🧠 یک مثال واقعی خیلی مهم
فرض کن SSH کار نمیکند.
به جای اینکه کورکورانه تنظیمات را تغییر بدهی:
اول:
بعد:
journalctl -u sshd -n 50
اگر فقط Error میخواهی:
journalctl -u sshd -p err
اگر مشکل بعد از Reboot ایجاد شده:
journalctl -b
این یعنی Log خواندن یکی از اصلیترین مهارتهای Linux Administrator است.
—————————
مدیریت لاگها در لینوکس
————————————
این قسمت خیلی مهمه، چون در لینوکس تقریباً هر اتفاق مهمی را میتوان از روی 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
user
local0 ... local7
مثلاً:
auth
→ پیامهای مربوط به Authentication
kern
→ پیامهای Kernel
→ پیامهای 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 سیستم نگهداری میشود.
حتی وقتی سیستمعامل خاموش است، RTC میتواند زمان را نگه دارد.
———————-
System Clock
ساعتی که Kernel لینوکس هنگام اجرای سیستم استفاده میکند.
پس:
————————-
2️⃣
برای مشاهده و مدیریت Hardware Clock:
مثلاً:
→ نمایش ساعت سختافزاری.
برای نمایش دقیقتر:
تغییر Hardware Clock
مثلاً:
یعنی:
برعکس:
یعنی:
🧠 حفظ کن:
————————————
3️⃣
فرمان اصلی مدیریت زمان در سیستمهای جدید Linux:
وضعیت زمان:
مثلاً میبینی:
—————————-
4️⃣ تنظیم Timezone
لیست Timezoneها:
مثلاً:
تنظیم:
بعد:
را بزن.
—————————-
5️⃣ تنظیم دستی ساعت
اگر NTP فعال نباشد میتوانی ساعت را دستی تنظیم کنی:
یا:
اما در Server معمولاً بهتر است ساعت را دستی تنظیم نکنی و از NTP استفاده کنی.
——————————-
6️⃣ NTP چیست؟
NTP مخفف:
است.
وظیفهاش این است که ساعت سیستم را از طریق شبکه با یک Time Server هماهنگ کند.
مثلاً:
مثلاً چند سرور:
NTP کمک میکند ساعت سیستمها با یک مرجع زمانی هماهنگ بماند.
————————
7️⃣ چرا NTP مهم است؟
فرض کن 100 سرور داری.
اگر هر کدام ساعت متفاوتی داشته باشند:
حالا Logها را بررسی کنی، ترتیب واقعی اتفاقات ممکن است گیجکننده شود.
NTP باعث میشود سرورها زمان هماهنگتری داشته باشند.
—————————————
8️⃣
احتمالاً منظورت از
است.
NTPsec یک پیادهسازی مدرنتر و سختگیریشدهتر از NTP است که برای امنیت و سادگی بیشتر کد طراحی شده است.
اما در Linuxهای امروزی ممکن است اصلاً NTPsec استفاده نکنی.
دو گزینه بسیار رایج:
هستند.
در بسیاری از سرورهای RHEL/Fedora/AlmaLinux، chrony گزینه رایج است.
———————
9️⃣ Chrony چیست؟
Chrony یک مجموعه ابزار برای Synchronization زمان است.
معمولاً شامل:
است.
بررسی وضعیت:
یا:
——————-
🔟 فعال کردن NTP با
در سیستمهایی که سرویس NTP مناسب را فراهم کردهاند:
بررسی:
ممکن است ببینی:
یعنی:
—————————
1️⃣1️⃣ یک مثال واقعی
فرض کن سرور Ubuntu داری و ساعتش اشتباه است.
اول:
بررسی میکنی.
اگر Timezone اشتباه بود:
بعد:
و دوباره:
بررسی میکنی که:
باشد.
مدیریت زمان در لینوکس
————————————
زمان در لینوکس فقط برای نمایش ساعت نیست؛ برای 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 : آشنایی اولیه باشبکه
2 : تنظیم شبکه در لینوکس
3 : فرمان های اولیه در عیب یابی شبکه
4 : پیکربندی dns در لینوکس
شبکه در لینوکس
———————
در فصل با قسمت های زیر اشنا میشویم
1 : آشنایی اولیه باشبکه
2 : تنظیم شبکه در لینوکس
3 : فرمان های اولیه در عیب یابی شبکه
4 : پیکربندی dns در لینوکس
❤1
My folder vip
فصل هشتم - قسمت هفتاد و سوم 🐧 شبکه در لینوکس ——————— در فصل با قسمت های زیر اشنا میشویم 1 : آشنایی اولیه باشبکه 2 : تنظیم شبکه در لینوکس 3 : فرمان های اولیه در عیب یابی شبکه 4 : پیکربندی dns در لینوکس
فصل هشتم - قسمت هفتاد و چهارم 🐧
1 : آشنایی اولیه باشبکه
———————
هدف اصلی شبکه خیلی ساده است:
مثلاً وقتی در کامپیوترت میزنی:
اطلاعات از کامپیوتر تو عبور میکند، وارد شبکه محلی و بعد اینترنت میشود و در نهایت به سرور مقصد میرسد.
اما این انتقال یکدفعه انجام نمیشود؛ اطلاعات لایهبهلایه پردازش میشوند.
——————-
1️⃣ چرا شبکه لایهای طراحی شده؟
برای اینکه هر قسمت از ارتباط یک وظیفه مشخص داشته باشد.
مدل معروف:
OSI
دارای ۷ لایه است:
در مقابل، مدل TCP/IP معمولاً به ۴ لایه تقسیم میشود:
📌 برای LPIC بیشتر باید مفهوم TCP/IP و وظایف لایهها را بفهمی.
————————
2️⃣ هدر چیست؟
یکی از مهمترین مفاهیم این قسمت همین است.
وقتی برنامهای میخواهد اطلاعات بفرستد، داده در مسیر عبور از لایهها، اطلاعات کنترلی دریافت میکند.
مثلاً:
به این اطلاعات اضافهشده در هر لایه، Header میگوییم.
————————
3️⃣ یک مثال واقعی؛ باز کردن Google
فرض کن در مرورگر مینویسی:
مرورگر اطلاعات را ایجاد میکند.
در لایه Application:
سپس در Transport مثلاً TCP قرار میگیرد:
بعد در Network:
بعد در Data Link:
و در نهایت اطلاعات به صورت Frame/Bits روی شبکه ارسال میشوند.
در سمت مقصد این فرآیند برعکس میشود و Headerهای مربوط به هر لایه بررسی و کنار گذاشته میشوند تا برنامه بتواند داده اصلی را دریافت کند.
————————
4️⃣ لایه Network
یکی از وظایف اصلی این لایه، انتقال Packet بین شبکههای مختلف است.
مهمترین پروتکل این لایه:
است.
IP به دستگاهها آدرس میدهد و کمک میکند Packet بداند باید به کدام مقصد برود.
————
5️⃣ IPv4 و IPv6
دو نسخه اصلی IP داریم:
IPv4
مثلاً:
IPv4 دارای آدرس ۳۲ بیتی است.
IPv6
مثلاً:
IPv6 دارای آدرس ۱۲۸ بیتی است.
پس:
—————
6️⃣ Netmask چیست؟
Netmask مشخص میکند کدام قسمت IP مربوط به Network و کدام قسمت مربوط به Host است.
مثلاً:
یا به شکل CIDR:
در این مثال:
یعنی دستگاه
🧠 خیلی ساده:
——————
7️⃣ لایه Transport
این لایه وظیفه ارتباط بین برنامهها و کنترل انتقال داده را بر عهده دارد.
دو پروتکل اصلی:
TCP
قابلاعتماد است.
ویژگیهای مهم:
Connection-oriented
ترتیب دادهها را حفظ میکند
دریافت داده را تأیید میکند
در صورت نیاز داده را مجدداً ارسال میکند
مثلاً:
اگر Data 2 گم شود، TCP میتواند آن را مجدداً درخواست/ارسال کند.
UDP
سادهتر و سریعتر است و تضمین تحویل مانند TCP ندارد.
مثلاً:
اگر Data 2 از بین برود، UDP خودش تضمین نمیکند که آن را دوباره ارسال کند.
کاربردهای رایج:
البته بعضی برنامههای
———————
8️⃣ Port چیست؟
IP مشخص میکند:
Port مشخص میکند:
مثلاً:
یعنی:
پورت 22 معمولاً برای SSH استفاده میشود.
———————
9️⃣ Application Layer
اینجا جایی است که سرویسها و پروتکلهایی که برنامهها مستقیماً با آنها کار میکنند قرار دارند.
مثلاً:
ساختار کلی معمولاً به شکل Client/Server است:
————————
🔟 DNS چیست؟
DNS یعنی:
Domain Name System
کارش تبدیل نام دامنه به IP است.
مثلاً:
چرا؟
چون برای انسان راحتتر است بگوید:
تا اینکه یک IP را حفظ کند.
———————-
1️⃣1️⃣ DNS در عمل چه اتفاقی میاندازد؟
فرض کن مرورگر میخواهد به:
وصل شود.
ابتدا سیستم باید IP آن را پیدا کند.
تقریباً:
مثلاً نتیجه DNS میتواند یک یا چند IP باشد.
بعد مرورگر با IP مقصد ارتباط برقرار میکند.
📌 نکته مهم:
DNS خودش ارتباط HTTP را انجام نمیدهد؛ فقط نام را به آدرس تبدیل/Resolve میکند.
——————-
1️⃣2️⃣ DHCP چیست؟
DHCP مخفف:
Dynamic Host Configuration Protocol
است.
وظیفه DHCP این است که تنظیمات شبکه را بهصورت خودکار به Client بدهد.
مثلاً کامپیوتر تازه وارد شبکه میشود و هنوز IP ندارد.
DHCP میتواند به آن بدهد:
————————
1️⃣3️⃣ روند DHCP
چهار مرحله معروف DHCP را حفظ کن:
D → Discover
Client میگوید:
O → Offer
DHCP Server پیشنهاد IP میدهد.
R → Request
Client میگوید:
A → Acknowledge
Server تأیید میکند:
پس:
🧠 DORA را برای امتحان حتماً حفظ کن.
—————————
📌 چند مورد مهمتر برای LPIC:
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 کجا قرار دارند و امروزه چطور آنها را مدیریت میکنیم.
نکته مهم این قسمت:
——————————-
1️⃣ قبلاً تنظیمات شبکه کجا بودند؟
بسته به Distribution فرق داشت.
🔴 Red Hat / CentOS قدیمی
در سیستمهای قدیمیتر فایلهای Interface معمولاً در:
بودند.
مثلاً:
داخلش تنظیماتی مثل IP، Gateway و نوع دریافت IP قرار میگرفت.
مثلاً:
——————-
🔵 Debian / Ubuntu قدیمی
در Debian و Ubuntu قدیمی معمولاً:
استفاده میشد.
مثلاً:
————-
🟢 openSUSE
در openSUSE هم روشهای مخصوص خودش وجود داشته، اما در نسخههای جدیدتر مدیریت شبکه بیشتر به NetworkManager منتقل شده است.
—————
2️⃣ امروزه چه چیزی مهم است؟
امروزه در بسیاری از Distributionهای Desktop و Server:
ابزار اصلی خط فرمان آن:
است.
——————
3️⃣ NetworkManager چیست؟
NetworkManager یک سرویس برای مدیریت اتصالهای شبکه است.
میتواند مواردی مثل:
Ethernet
Wi-Fi
IP
Gateway
DNS
VPN
Connection Profiles
را مدیریت کند.
پس این دو را قاطی نکن:
—————
4️⃣
اول وضعیت کلی NetworkManager:
مثلاً:
یعنی NetworkManager فعال است و سیستم اتصال شبکه دارد.
——————————
5️⃣ نمایش Connectionها
این دستور تمام Connection Profileها را نشان میدهد.
مثلاً:
————————-
6️⃣ فقط Connectionهای فعال
دستوری که خودت نوشتی:
یا کوتاهتر:
فقط اتصالهای فعال را نمایش میدهد.
——————————
7️⃣ بالا آوردن Connection
مثلاً:
یعنی Connection مربوط به
پایین آوردن:
—————————-
8️⃣ تغییر IP
اینجا یکی از قسمتهای مهم
فرض کنیم Connection ما اسمش
میخواهیم IP را:
قرار دهیم.
Gateway:
DNS:
و مشخص میکنیم IP به صورت دستی تنظیم شود:
بعد Connection را دوباره فعال میکنیم:
—————————
9️⃣ DHCP با nmcli
اگر بخواهیم IP را DHCP بگیریم:
بعد:
حالا DHCP Server برای سیستم IP میفرستد.
———————-
🔟 یک مثال واقعی
فرض کن سرور Linux داری.
میخواهی:
تنظیم کنیم:
بعد:
بررسی:
—————————
1️⃣1️⃣
یک ابزار جالب دیگر:
برخلاف
یعنی داخل Terminal یک محیط منویی میبینی.
مثلاً:
برای کسی که نمیخواهد تمام Syntaxهای
——————-
1️⃣2️⃣ وضعیت NetworkManager
سرویس:
ریاستارت:
⚠️ چیزی که نوشتی:
ممکن است روی بعضی سیستمها به خاطر نام Unit کار کند، اما نام استاندارد سرویس در سیستمهای مبتنی بر NetworkManager معمولاً:
است.
———————-
1️⃣3️⃣
قبلاً خیلی وقتها مستقیماً:
را برای DNS تغییر میدادند.
مثلاً:
اما در سیستمهای جدید، این فایل ممکن است توسط یکی از سرویسهای مدیریت شبکه مثل:
مدیریت شود.
بنابراین ممکن است تغییر دستی آن دائمی نباشد.
📌 برای تنظیم DNS بهتر است از ابزار مدیریت شبکه خود سیستم استفاده کنی.
مثلاً با NetworkManager:
—————————
1️⃣4️⃣
ترکیبی از ایدههای:
است.
مثلاً:
مسیر Packet را نمایش میدهد و همزمان اطلاعاتی درباره Latency و Packet Loss هر Hop میدهد.
مثلاً:
برای پیدا کردن مشکلات مسیر شبکه خیلی کاربردی است.
—————————
1️⃣5️⃣
مثلاً قبلاً ممکن بود ببینی:
برای گرفتن IP از DHCP.
اما نکتهای که گفتی را اینطور حفظ کن:
NetworkManager خودش DHCP را مدیریت میکند.
مثلاً:
————————
1️⃣6️⃣ Desktop Linux چطور؟
در Desktop معمولاً اصلاً لازم نیست Terminal باز کنی.
مثلاً در GNOME:
و میتوانی IP، Gateway و DNS را از رابط گرافیکی تنظیم کنی.
در KDE هم تنظیمات شبکه از رابط گرافیکی خودش انجام میشود.
اما پشت صحنه، در بسیاری از سیستمها NetworkManager مدیریت اتصال را انجام میدهد.
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️⃣
مثلاً:
یا:
اگر جواب بگیری:
یعنی ارتباط برقرار است.
مثال واقعی
فرض کن سرور اینترنت ندارد.
اول:
اگر Gateway جواب داد، شبکه داخلی احتمالاً سالم است.
بعد:
اگر این هم جواب داد، اینترنت از نظر IP در دسترس است.
بعد:
اگر این آخری جواب نداد ولی
🧠 این سه تست خیلی مهماند:
—————————-
2️⃣
فرمان:
نشان میدهد Packet برای رسیدن به مقصد از چه Hopهایی عبور میکند.
مثلاً:
هر خط تقریباً یک Router/Hop در مسیر است.
مثال واقعی
فرض کن:
داریم ولی Latency خیلی بالاست.
با:
میتوانیم ببینیم تأخیر از کدام بخش مسیر بیشتر شده است.
📌 در بعضی سیستمها ممکن است لازم باشد نصبش کنی:
——————-
3️⃣
مثلاً:
اطلاعاتی درباره DNS Query و پاسخ DNS نشان میدهد.
اگر بخواهی مستقیماً از یک DNS خاص سؤال کنی:
یعنی:
———————
4️⃣
سادهتر از
مثلاً:
برای بررسی سریع DNS خیلی کاربردی است.
———————————-
5️⃣
یکی دیگر از ابزارهای DNS:
مثلاً:
پس:
هر سه برای DNS Troubleshooting کاربرد دارند، ولی
———————————
6️⃣
مثلاً:
میتوانی ببینی:
و چه مقدار Traffic بین آنها ردوبدل میشود.
مثال واقعی
فرض کن سرورت ناگهان اینترنت زیادی مصرف میکند.
به جای حدس زدن:
را اجرا میکنی و میبینی کدام ارتباطها بیشترین Traffic را دارند.
📌 نصب در Debian/Ubuntu:
———————
7️⃣
فرمانی که نوشتی:
احتمالاً منظورت:
است.
Connectionها
Portهای باز
Listening Serviceها
Routing Table
Interface Statistics
مثلاً:
یعنی Portهایی که در حال Listen هستند را ببین.
مثلاً:
یعنی سرویسهایی روی پورتهای 22 و 80 در حال Listen هستند.
⚠️
——————
8️⃣
امروزه بیشتر از:
استفاده میکنیم.
مثلاً:
برای مشاهده TCP/UDPهای Listening.
معنی:
برای دیدن Connectionهای فعال:
و برای اینکه بفهمیم کدام Process از Port استفاده میکند:
این یکی را خیلی خوب یاد بگیر. 👌
————————-
9️⃣
Netcat یکی از ابزارهای بسیار کاربردی برای تست Connection و Port است.
مثلاً:
یعنی:
اگر پورت باز باشد معمولاً چیزی شبیه:
میبینی.
مثال واقعی
فرض کن SSH به سرور وصل نمیشود.
اول:
بعد:
اگر Ping جواب دهد ولی
——————-
🔟 Wireshark
حالا میرسیم به یکی از معروفترین ابزارهای Network Troubleshooting:
Wireshark
Wireshark به ما اجازه میدهد Packetهای شبکه را Capture و تحلیل کنیم.
مثلاً وقتی:
اطلاعات ردوبدل میشود، Wireshark میتواند Packetها را Capture کند.
مثلاً میتوانی ببینی:
——————
1️⃣1️⃣ مثال Wireshark
فرض کن:
میزنی.
در Wireshark میتوانی Packetهای:
را ببینی.
یا مثلاً وقتی وارد یک سایت HTTPS میشوی، میتوانی ارتباطات TCP و TLS را مشاهده کنی.
📌 نکته مهم:
Wireshark فقط برای دیدن «اینترنت» نیست؛ برای تحلیل پروتکلها و فهمیدن اینکه واقعاً روی شبکه چه اتفاقی میافتد استفاده میشود.
—————-
🧠 یک سناریوی واقعی Troubleshooting
فرض کن کاربر میگوید:
تو این ترتیب را برو:
مرحله 1 — Interface
مرحله 2 — Gateway
مرحله 3 — Gateway را Ping کن
مرحله 4 — IP اینترنت
مرحله 5 — DNS
مرحله 6 — مسیر
مرحله 7 — بررسی DNS
مرحله 8 — بررسی Port
مرحله 9 — بررسی Connectionها
مرحله 10 — اگر هنوز مشکل پیدا نشد
برو سراغ:
و Packetها را بررسی کن.
——————
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 — بررسی DNSdig یکی از ابزارهای حرفهای 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 یا NetcatNetcat یکی از ابزارهای بسیار کاربردی برای تست 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 در لینوکس
———————
اینجا میخواهیم یاد بگیریم لینوکس از کجا میفهمد برای تبدیل
بهطور کلی دو روش مهمی که در جزوهات گفتی:
روش سنتی با
استفاده از systemd-resolved
————————
1️⃣ روش سنتی؛
فایل:
یکی از معروفترین مکانهای تنظیم DNS در Linux است.
مثلاً:
یعنی سیستم برای DNS Query میتواند از این Serverها استفاده کند.
مثلاً وقتی میزنی:
سیستم ابتدا باید IP
———————
2️⃣ مشکل روش سنتی چیست؟
در Linuxهای جدید،
مثلاً:
بنابراین ممکن است دستی بنویسی:
ولی بعد از Restart یا تغییر Connection، تنظیماتت دوباره تغییر کند.
🧠 پس:
——————-
3️⃣
به زبان ساده:
مثلاً:
—————-
4️⃣ فعال کردن systemd-resolved
دستوری که نوشتی:
درست است.
این دستور دو کار انجام میدهد:
میتوانی وضعیتش را ببینی:
———————-
5️⃣ تنظیم DNS در systemd-resolved
در سیستمهای جدید میتوان تنظیمات را در مسیرهای مربوط به
یک مسیر مهم:
و برای تنظیمات Drop-in میتوان از:
استفاده کرد.
مثلاً:
————————
6️⃣ مثال تنظیم DNS
مثلاً:
بعد:
و مثلاً:
بعد سرویس را Restart میکنیم:
—————-
7️⃣
است.
این ابزار برای تعامل با
——————-
8️⃣ دیدن DNS فعلی
مثلاً ممکن است ببینی:
یعنی Interface
———————
9️⃣ دیدن Domain
فرمان:
اطلاعات مربوط به DNS Domainهایی که برای Linkها تنظیم شدهاند را نشان میدهد.
همچنین:
یکی از بهترین دستورها برای دیدن وضعیت کلی DNS است.
مثلاً:
————————
🔟 تست DNS با
مثلاً:
یعنی:
این برای Troubleshooting خیلی خوب است.
——————-
1️⃣1️⃣ DNS برای یک Interface خاص
یکی از قابلیتهای جالب
مثلاً:
یعنی DNS مربوط به Interface
قرار بده.
برای Domain Search هم میتوان تنظیماتی انجام داد، مثلاً:
————-
1️⃣2️⃣ چرا DNS برای VPN مهم است؟
این قسمت خیلی کاربردی است.
فرض کن VPN وصل شدهای و VPN یک DNS داخلی دارد:
و شبکه VPN شامل Domainهای داخلی است:
اگر DNS درست تنظیم نشود، ممکن است:
کار نکند، حتی اگر خود VPN کاملاً وصل باشد.
پس:
باید درست تنظیم شود.
——————
1️⃣3️⃣ DNS روی Proxy چه ارتباطی دارد؟
اینجا یک نکته مهم وجود دارد:
Proxy و DNS یکی نیستند.
مثلاً Proxy میتواند ترافیک HTTP/HTTPS را عبور دهد، اما DNS ممکن است همچنان از DNS معمولی سیستم استفاده کند.
پس باید مشخص کنیم DNS Query کجا انجام میشود:
یا:
در بعضی VPNها و Proxyها قابلیتهایی برای Remote DNS Resolution وجود دارد؛ یعنی به جای اینکه سیستم خودش نام دامنه را Resolve کند، Query از مسیر Proxy/VPN انجام میشود.
این موضوع برای جلوگیری از DNS Leak هم اهمیت دارد.
——————-
🧠 یک مثال واقعی
فرض کن:
و یک سایت داخلی داری:
بدون DNS مناسب:
ممکن است:
بدهد.
اما وقتی DNS مربوط به VPN درست تنظیم شود:
سیستم میتواند Server را پیدا کند.
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️⃣
resolvectlresolvectl
است.
این ابزار برای تعامل با
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 رو شروع میکنیم
به امید خدا از فردا فصل 9 دوره الپیک 1 قسمت 102 رو شروع میکنیم
❤1🔥1
فصل نهم - قسمت هفتاد و هشتم 🐧
مقدمه - intro ( شل اسکریپتینگ)
———————
در فصل با قسمت های زیر اشنا میشویم
1 : نوشتن اولیه شکل اسکریپت
2 : خودکار سازی شل اسکریپت
مقدمه - intro ( شل اسکریپتینگ)
———————
در فصل با قسمت های زیر اشنا میشویم
1 : نوشتن اولیه شکل اسکریپت
2 : خودکار سازی شل اسکریپت
My folder vip
فصل نهم - قسمت هفتاد و هشتم 🐧 مقدمه - intro ( شل اسکریپتینگ) ——————— در فصل با قسمت های زیر اشنا میشویم 1 : نوشتن اولیه شکل اسکریپت 2 : خودکار سازی شل اسکریپت
فصل نهم - قسمت هفتاد و نهم 🐧
متغیر ها در خط فرمان
———————
این قسمت خیلی مهمه، چون Variableها پایهی کار با Shell و Bash هستند و در اسکریپتنویسی هم زیاد ازشان استفاده میکنیم.
_————————————-
1️⃣ Variable چیست؟
Variable یعنی یک نام که یک مقدار را در خودش نگه میدارد.
مثلاً:
اینجا:
برای نمایش مقدار:
خروجی:
🧠 علامت
———————-
2️⃣ ساخت Variable در Bash
مثلاً:
نمایش:
خروجی:
——————————
⚠️ فاصله اطراف
این درست است:
این غلط است:
چون Bash آن را به عنوان یک Command و Argument تفسیر میکند.
—————————
3️⃣ Variable را با
مثلاً:
بعد:
یا:
خروجی:
—————————
4️⃣ Local Variable چیست؟
وقتی Variable را به صورت معمولی ایجاد میکنی:
این Variable در Shell فعلی وجود دارد.
مثلاً:
جواب:
اما اگر یک Shell جدید باز کنیم:
و بزنیم:
معمولاً چیزی نمایش داده نمیشود.
چرا؟
چون
————————-
5️⃣ Environment Variable چیست؟
اگر بخواهیم یک Variable به Shellهای فرزند هم منتقل شود، از:
استفاده میکنیم.
مثلاً:
حالا:
و داخل Shell جدید:
خروجی:
چون Variable به عنوان Environment Variable Export شده است.
———————-
6️⃣ روش کوتاهتر Export
میتوانی از ابتدا اینطور بنویسی:
بعد:
خروجی:
———————-
متغیر ها در خط فرمان
———————
این قسمت خیلی مهمه، چون 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 است.
مثلاً وقتی مینویسی:
Shell دستور را دریافت و اجرا میکند.
معروفترین Shellها:
اما در LPIC-1، Bash اهمیت بیشتری دارد.
—————————
مهم
اگر در دوره گفته شده «سه مدل Shell»، معمولاً منظور Shellهای معروف Unix/Linux است؛ مثلاً:
Bash
یکی از رایجترین Shellها.
sh
Shell استاندارد/سازگار با POSIX که در سیستمهای مختلف ممکن است به Shell دیگری لینک باشد.
مثلاً در بعضی Debianها:
Zsh
یک Shell پیشرفته با امکانات زیاد.
📌 اما تعداد Shellها محدود به سه تا نیست؛ Linux میتواند Shellهای مختلفی داشته باشد.
—————————-
3️⃣ Shell فعلی را چطور بفهمیم؟
مثلاً:
اما یک نکته مهم:
برای دیدن Process مربوط به Shell فعلی:
مثلاً:
——————
4️⃣ Shell کاربران کجا ثبت میشود؟
اطلاعات Userها در:
قرار دارد.
مثلاً:
قسمت آخر:
Login Shell کاربر است.
اگر:
باشد، معمولاً کاربر برای Login عادی اجازه ورود ندارد.
——————-
5️⃣ فایلهای تنظیمات Shell
قسمت مهم این جلسه همین است.
Bash برای تنظیم محیط خودش فایلهای مختلفی را میخواند.
مهمترینها:
اما همه این چهار فایل پشت سر هم خوانده نمیشوند.
برای Login Shell، Bash این ترتیب را بررسی میکند:
یعنی از بین سه فایل User معمولاً اولین فایلی که وجود داشته باشد خوانده میشود.
————————-
6️⃣
تنظیمات عمومی برای Userها:
یعنی تنظیمات مربوط به محیط Login که میتواند برای کاربران سیستم اعمال شود.
————————-
7️⃣
فایل:
تنظیمات Login Shell مخصوص همان User است.
مثلاً:
———————
8️⃣
اگر:
وجود نداشته باشد، Bash به سراغ:
میرود.
———————
9️⃣
اگر دو فایل قبلی وجود نداشته باشند:
خوانده میشود.
پس این ترتیب را حفظ کن:
❗️ نکته امتحانی:
Bash از فایلهای
———————
🔟 Interactive Shell چیست؟
Interactive یعنی Shell مستقیماً با کاربر در تعامل است.
مثلاً Terminal را باز میکنی:
و میبینی:
بعد میتوانی دستور بزنی:
این یک Interactive Shell است.
————————-
1️⃣1️⃣ Non-Interactive Shell
در Non-interactive، Shell برای اجرای یک Script یا Command اجرا میشود و منتظر وارد کردن دستور از کاربر نمیماند.
مثلاً:
یا:
در این حالت Shell برای اجرای دستورات استفاده شده، نه برای تعامل مستقیم با کاربر.
————————
1️⃣2️⃣ Subshell چیست؟
Subshell یعنی یک Shell فرزند که از Shell فعلی ایجاد شده است.
مثلاً:
ساختار:
میتوانی PIDها را ببینی:
بعد:
دوباره:
PID تغییر میکند.
برای خروج:
_————————
1️⃣3️⃣ نکته مهم Variable و Subshell
فرض کن:
این یک Shell Variable است.
اگر:
اجرا کنی:
ممکن است چیزی نمایش داده نشود.
اما اگر:
کنی:
میبینی:
چون Variable به Environment منتقل شده است.
———————
1️⃣5️⃣ Alias چیست؟
Alias یعنی یک نام کوتاه برای یک Command.
مثلاً:
حالا:
تقریباً مثل:
اجرا میشود.
1️⃣6️⃣ دیدن Aliasها
تمام Aliasهای تعریفشده را نشان میدهد.
مثلاً:
1️⃣7️⃣ حذف Alias
حالا:
دیگر Alias نیست.
برای حذف همه Aliasها:
1️⃣8️⃣ Alias دائمی
اگر فقط بنویسی:
معمولاً فقط برای همان Shell Session است.
برای دائمی کردن در Bash میتوانی آن را در:
قرار دهی.
مثلاً:
اضافه کن:
بعد برای اعمال بدون Logout:
یا:
⚠️
این یکی را خیلی خوب حفظ کن.
ولی برای Interactive non-login Bash معمولاً:
خوانده میشود.
پس:
خیلی از
⭐️ خلاصه قسمت ۸۰ برای دفتر
Shell
معروفها:
Shell کاربر:
یا:
فایلهای Login Bash
⚠️ از سه فایل User فقط اولین فایل موجود انتخاب میشود.
Interactive
Non-Interactive
Subshell
ایجاد:
خروج:
Alias
ساخت:
نمایش:
حذف:
دائمی کردن:
~/.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
————————-
انواع شل
———————
این قسمت ادامهی 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 را داخل یک فایل قرار بدهیم تا بتوانیم آنها را یکجا و خودکار اجرا کنیم.
مثلاً بهجای اینکه هر روز اینها را جداگانه بزنیم:
میتوانیم همه را داخل یک فایل قرار دهیم:
و فقط اجرا کنیم:
یعنی Shell Script مثل یک برنامه کوچک برای خودکارسازی کارهای Linux است.
————————
2️⃣ Shellهای مناسب برای Script
از Shellهای مختلف میتوان Script نوشت.
مهمترینها:
در دوره LPIC-1 تمرکز اصلی معمولاً روی:
است.
مثلاً:
یعنی این Script با Bash اجرا شود.
————————-
3️⃣ اجرای چند Command با
با
مثلاً:
هر سه دستور اجرا میشوند.
نکته مهم:
مثلاً:
حتی اگر
ساختار:
—————————
4️⃣ اجرای شرطی با
مثلاً:
اگر
اما اگر ساخت Directory شکست بخورد، دستور دوم اجرا نمیشود.
مثال کاربردی:
اگر Ping موفق شود:
نمایش داده میشود.
🧠 حفظ کن:
—————————
5️⃣ اجرای شرطی با
یعنی:
مثلاً:
اگر
نمایش داده میشود.
مثال دیگر:
اگر Ping موفق شود:
و اگر شکست بخورد:
————————————-
مثال:
⬅️ همیشه
⬅️ فقط در صورت موفقیت
⬅️ فقط در صورت شکست
———————
7️⃣ Pipe یا
Pipe برای انتقال خروجی یک Command به ورودی Command بعدی استفاده میشود.
مثلاً:
اینجا:
یعنی خروجی
مثلاً:
یعنی خروجی
——————-
8️⃣ Pipe با چند Command
Pipe میتواند چند مرحله داشته باشد:
ساختار:
یعنی:
Processها را نمایش بده.
موارد مربوط به SSH را فیلتر کن.
تعداد خطوط را بشمار.
————————————
9️⃣ تفاوت
خیلی مهم:
Pipe:
یعنی:
AND:
یعنی:
پس این دو کاملاً متفاوتاند.
————————-
مقدمه ای بر شل اسکریپتینگ
———————
فصل نهم - قسمت هشتاد و یکم 🐧
مقدمه ای بر شل اسکریپتینگ
———————
این قسمت یکی از مهمترین قسمتهای فصل نهمه، چون از اینجا وارد 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 اجرا شود:
این خط را Shebang میگوییم.
———————-
2️⃣ ساخت یک فایل خالی
مثلاً:
فایل ساخته میشود:
پسوند
———————
3️⃣ ویرایش فایل
مثلاً با
و داخلش بنویس:
ذخیره کن.
————————
4️⃣ روش اول اجرای Script
اگر مجوز Execute نداشته باشد:
حالا:
اجرا میشود.
——————-
5️⃣
این دستور:
یعنی:
مقایسه:
—————————
6️⃣ چرا
وقتی مینویسیم:
اگر فقط بنویسی:
ممکن است Bash فایل را پیدا نکند، چون دایرکتوری فعلی معمولاً در
——————-
7️⃣ روش اجرای بدون
حتی اگر فایل Execute نباشد، میتوانی مستقیماً به Bash بدهی:
یا:
در این حالت Bash فایل را میخواند و اجرا میکند.
اموزش اولیه شل اسکریپتینگ
———————
آموزش اولیه 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 فایل را میخواند و اجرا میکند.
فصل نهم - قسمت هشتاد و سوم 🐧
نمایش پیام به کاربر
———————
نمایش پیام به کاربر با
1.
دستور
مثلاً:
خروجی:
یا:
خروجی:
———————————
2. استفاده از متن ساده
اگر متن فاصله داشته باشد، بهتر است آن را داخل کوتیشن قرار دهیم:
اما حتی این هم کار میکند:
خروجی هر دو:
ولی استفاده از
—————————
3. Double Quote یا
وقتی متن را داخل دابل کوتیشن قرار میدهیم:
Shell محتوای داخل آن را بررسی میکند و متغیرها را Expand میکند.
مثلاً:
خروجی:
یعنی:
مثال کاربردی:
خروجی:
——————-
4. Single Quote یا
وقتی از Single Quote استفاده کنیم:
Shell مقدار متغیر را جایگزین نمیکند.
خروجی مثلاً:
یعنی
مقایسه مهم
خروجی:
⭐️ نکته امتحانی
مثلاً:
مقدار
اما:
خود عبارت
——————————
5. متغیرها در
در Bash برای استفاده از مقدار متغیر از
مثلاً:
خروجی:
یا:
خروجی:
⚠️ نکته مهم درباره جزوه
اگر نوشته شده:
برای Bash اشتباه است.
در Bash باید بنویسی:
مثلاً:
———————-
6. متغیرهای آماده سیستم
خود Linux تعدادی Environment Variable دارد.
مثلاً:
نام کاربر فعلی را نشان میدهد.
مسیر Home کاربر را نشان میدهد.
مسیر دایرکتوری فعلی را نشان میدهد.
Shell پیشفرض کاربر را نشان میدهد.
مثلاً ممکن است:
———————-
7. ترکیب چند متغیر
مثلاً:
خروجی:
یا همه را در یک خط:
————————
8. استفاده از
گاهی باید متغیر را داخل
مثلاً:
خروجی:
چرا؟
چون Bash باید بفهمد نام متغیر
اگر بنویسیم:
Bash تصور میکند اسم متغیر:
است.
پس:
بهتر است.
—————————————
9. استفاده از Argument در
این قسمت خیلی مهمه.
وقتی یک Script را اجرا میکنیم، میتوانیم بعد از اسم فایل، اطلاعاتی به آن بدهیم.
مثلاً:
در Script:
خروجی:
اینجا:
یعنی اولین Argument.
————————
مثال با چند Argument
فایل:
محتوا:
اجرا:
خروجی:
یعنی:
————————
10.
متغیر خاص:
تعداد Argumentهایی که به Script داده شده را نشان میدهد.
مثلاً:
اجرا:
خروجی:
—————
11.
مثلاً:
اجرا:
خروجی:
12.
یک مورد خیلی مهم دیگر:
نام Script را نشان میدهد.
مثلاً:
اگر اجرا کنیم:
خروجی:
———————-
13. یک مثال واقعی و خیلی خوب 🔥
فرض کن میخواهیم Scriptی داشته باشیم که اسم کاربر را بگیرد و به او خوشآمد بگوید.
فایل:
محتوا:
اجرا:
خروجی مثلاً:
اینجا چند مفهوم را با هم استفاده کردیم:
———————
14. چاپ
یک نکته جالب:
اگر بنویسی:
متغیر Expand میشود.
اما:
خود
پس Single Quote برای مواقعی که میخواهیم
———————
نمایش پیام به کاربر
———————
نمایش پیام به کاربر با
echo1.
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 برای مواقعی که میخواهیم
$ و سایر کاراکترها تفسیر نشوند مفید است.———————
فصل نهم - قسمت هشتاد و چهارم 🐧
گرفتن متغیر از کاربر
———————
1. دستور
دستور:
برای گرفتن اطلاعات از کاربر استفاده میشود.
یعنی Script متوقف میشود، منتظر میماند کاربر چیزی تایپ کند و Enter بزند، سپس آن مقدار را داخل یک متغیر ذخیره میکند.
مثلاً:
اگر کاربر وارد کند:
خروجی:
ساختار کلی:
مثلاً:
یعنی:
————————-
2. چرا
در حالت عادی:
بعد از چاپ متن،
اما:
گزینه
بنابراین کاربر میتواند در همان خط جواب بدهد:
—————
3. استفاده از
اما یک روش تمیزتر وجود دارد.
به جای:
میتوانیم بنویسیم:
یعنی:
مثال:
کاربر:
خروجی:
⭐️ نکته امتحانی
این:
تقریباً معادل:
است.
———————
4. گرفتن سن از کاربر
مثال جزوه شما:
اگر کاربر وارد کند:
محاسبه:
خروجی:
البته برای محاسبات Bash امروزی بهتر است از این روش استفاده کنیم:
——————
5.
این یکی مهم است.
گزینه:
برای تعیین Timeout در
یعنی به کاربر فقط یک مدت مشخص فرصت میدهیم که ورودی را وارد کند.
مثلاً:
یعنی:
اگر در ۵ ثانیه ورودی وارد نشود،
مثال کاربردی:
کاربرد واقعی
مثلاً Scriptی داری که میگوید:
نمیخواهی Script برای همیشه منتظر کاربر بماند.
میتوانی بگویی:
کاربر ۱۰ ثانیه فرصت دارد.
⭐️ حفظ کن:
—————
6.
گزینه:
باعث میشود ورودی کاربر روی صفحه نمایش داده نشود.
است.
مهمترین کاربردش گرفتن Password است.
مثلاً:
کاربر رمز را تایپ میکند، اما چیزی روی صفحه دیده نمیشود.
مثلاً:
کاربر تایپ میکند:
ولی روی صفحه چیزی مثل:
نمایش داده نمیشود؛ معمولاً حتی ستاره هم نمیبینی.
بعد:
⚠️ نکته امنیتی
مثلاً:
مقدار همچنان در متغیر:
وجود دارد.
—————————-
7. ترکیب
خیلی کاربردی:
چرا
چون
فقط برای رفتن به خط بعد است.
8. ترکیب
حتی میتوانیم چند Option را با هم استفاده کنیم.
مثلاً:
یعنی:
—————————-
9. یک مثال کاملتر 🔥
یک Script ساده برای Login:
مثلاً:
رمز هنگام تایپ نمایش داده نمیشود.
——————-
11. چند ورودی با یک
میتوانیم چند متغیر را همزمان بگیریم:
اگر کاربر بزند:
آنگاه:
مثلاً:
خروجی:
———————
12. مثال کاربردی برای کار امنیتی 🛡
فرض کن میخواهیم IP را از کاربر بگیریم:
اجرا:
حالا میتوانیم آن را وارد یک دستور کنیم:
یا در محیط آزمایشگاهی مجاز:
پس
——————-
گرفتن متغیر از کاربر
———————
1. دستور
read چیست؟دستور:
read
برای گرفتن اطلاعات از کاربر استفاده میشود.
یعنی Script متوقف میشود، منتظر میماند کاربر چیزی تایپ کند و Enter بزند، سپس آن مقدار را داخل یک متغیر ذخیره میکند.
مثلاً:
#!/bin/bash
echo -n "Hi, your name: "
read name
echo "Hello $name, welcome to my program"
اگر کاربر وارد کند:
Alireza
خروجی:
Hi, your name: Alireza
Hello Alireza, welcome to my program
ساختار کلی:
read VARIABLE
مثلاً:
read name
یعنی:
ورودی کاربر را بگیر و داخل متغیر
nameقرار بده.
————————-
2. چرا
echo -n؟در حالت عادی:
echo "Enter your name:"
بعد از چاپ متن،
echo به خط بعد میرود.اما:
echo -n "Enter your name: "
گزینه
-n باعث میشود Enter/خط جدید چاپ نشود.بنابراین کاربر میتواند در همان خط جواب بدهد:
Enter your name: Alireza
—————
3. استفاده از
read -pاما یک روش تمیزتر وجود دارد.
به جای:
echo -n "Enter your name: "
read name
میتوانیم بنویسیم:
read -p "Enter your name: " name
یعنی:
-p → پیام را نمایش بده
name → ورودی را داخل این متغیر ذخیره کن
مثال:
#!/bin/bash
read -p "Please enter your name: " name
echo "Hello $name"
کاربر:
Please enter your name: Alireza
خروجی:
Hello Alireza
⭐️ نکته امتحانی
این:
read -p "Enter name: " name
تقریباً معادل:
echo -n "Enter name: "
read name
است.
———————
4. گرفتن سن از کاربر
مثال جزوه شما:
read -p "Please enter your age: " age
days=$[$age * 365]
echo "You are $days days old"
اگر کاربر وارد کند:
25
محاسبه:
25 × 365 = 9125
خروجی:
You are 9125 days old
البته برای محاسبات Bash امروزی بهتر است از این روش استفاده کنیم:
days=$((age * 365))
——————
5.
read -t چیست؟ ⏱️این یکی مهم است.
گزینه:
-t
برای تعیین Timeout در
read استفاده میشود.یعنی به کاربر فقط یک مدت مشخص فرصت میدهیم که ورودی را وارد کند.
مثلاً:
read -t 5 -p "Enter your name: " name
یعنی:
کاربر فقط ۵ ثانیه فرصت دارد اسمش را وارد کند.
اگر در ۵ ثانیه ورودی وارد نشود،
read با خطا/کد خروجی غیرصفر تمام میشود.مثال کاربردی:
#!/bin/bash
read -t 5 -p "Enter your name within 5 seconds: " name
echo "Hello $name"
کاربرد واقعی
مثلاً Scriptی داری که میگوید:
Do you want to continue?
نمیخواهی Script برای همیشه منتظر کاربر بماند.
میتوانی بگویی:
read -t 10 -p "Continue? " answer
کاربر ۱۰ ثانیه فرصت دارد.
⭐️ حفظ کن:
read -t 5
↑
Timeout
—————
6.
read -s چیست؟ 🔐گزینه:
-s
باعث میشود ورودی کاربر روی صفحه نمایش داده نشود.
-s مخفف:silent
است.
مهمترین کاربردش گرفتن Password است.
مثلاً:
read -s -p "Enter password: " password
کاربر رمز را تایپ میکند، اما چیزی روی صفحه دیده نمیشود.
مثلاً:
Enter password:
کاربر تایپ میکند:
123456
ولی روی صفحه چیزی مثل:
******
نمایش داده نمیشود؛ معمولاً حتی ستاره هم نمیبینی.
بعد:
echo "Password received"
⚠️ نکته امنیتی
read -s باعث میشود رمز در ترمینال echo نشود؛ ولی این به معنی رمزنگاری یا امنشدن خود متغیر نیست.مثلاً:
read -s password
مقدار همچنان در متغیر:
$password
وجود دارد.
—————————-
7. ترکیب
-s و -pخیلی کاربردی:
read -s -p "Enter password: " password
echo
echo "Password received."
چرا
echo گذاشتیم؟چون
read -s معمولاً بعد از Enter به خط جدید نمیرود؛ بنابراین:echo
فقط برای رفتن به خط بعد است.
8. ترکیب
-t و -sحتی میتوانیم چند Option را با هم استفاده کنیم.
مثلاً:
read -s -t 10 -p "Enter password within 10 seconds: " password
یعنی:
-s → ورودی نمایش داده نشود
-t 10 → فقط 10 ثانیه فرصت
-p → نمایش پیام
—————————-
9. یک مثال کاملتر 🔥
یک Script ساده برای Login:
#!/bin/bash
read -p "Username: " username
read -s -p "Password: " password
echo
echo "Welcome $username"
مثلاً:
Username: Alireza
Password:
Welcome Alireza
رمز هنگام تایپ نمایش داده نمیشود.
——————-
11. چند ورودی با یک
readمیتوانیم چند متغیر را همزمان بگیریم:
read -p "Enter name and age: " name age
اگر کاربر بزند:
Alireza 25
آنگاه:
$name → Alireza
$age → 25
مثلاً:
echo "Name: $name"
echo "Age: $age"
خروجی:
Name: Alireza
Age: 25
———————
12. مثال کاربردی برای کار امنیتی 🛡
فرض کن میخواهیم IP را از کاربر بگیریم:
#!/bin/bash
read -p "Enter target IP: " ip
echo "Target is: $ip"
اجرا:
Enter target IP: 192.168.1.10
Target is: 192.168.1.10
حالا میتوانیم آن را وارد یک دستور کنیم:
ping -c 1 "$ip"
یا در محیط آزمایشگاهی مجاز:
nmap "$ip"
پس
read یکی از پایههای ساخت Toolkitهای امنیتی تعاملی است.——————-
🙏1
فصل نهم - قسمت هشتاد و پنجم 🐧
نمایش وضعیت اجرای فرمان — Exit Status
———————
م1. Exit Status چیست؟
هر دستوری که در Linux اجرا میشود، در پایان یک کد وضعیت (Exit Status) برمیگرداند که نشان میدهد اجرای دستور موفق بوده یا نه.
برای دیدن Exit Status آخرین دستور:
مهمترین حالتها:
⚠️ پس دقیقتر این است که نگوییم فقط
مثال:
اگر
اما:
اگر
—————————-
2. یک مثال خیلی ساده
اگر ساخت پوشه موفق باشد:
حالا:
اگر اجازه ساخت نداشته باشی، مثلاً:
یا یک کد غیرصفر دیگر دریافت میکنی.
——————————
3. نکته مهم درباره
مثلاً:
اینجا
ولی اگر بزنیم:
اینجا
——————————
4. دستور
مثلاً:
یعنی:
و:
یعنی:
————————
5.
اگر بنویسی:
یعنی:
مثلاً:
بعد از اجرای Script:
خروجی:
یعنی Script خودش اعلام کرده که با کد
⭐️ نکته مهم
خود برنامهنویس میتواند برای خطاهای مختلف کدهای مختلف تعریف کند:
مهم این است که:
——————-
6. مثال کاربردی 🔥
فرض کن Script بررسی میکند که یک فایل وجود دارد یا نه:
اگر فایل وجود داشته باشد:
و:
میشود:
اگر فایل وجود نداشته باشد:
و:
میشود:
اینجا
نمایش وضعیت اجرای فرمان — Exit Status
———————
م1. Exit Status چیست؟
هر دستوری که در Linux اجرا میشود، در پایان یک کد وضعیت (Exit Status) برمیگرداند که نشان میدهد اجرای دستور موفق بوده یا نه.
برای دیدن Exit Status آخرین دستور:
echo $?
مهمترین حالتها:
0 → اجرای موفق
غیر 0 → اجرای ناموفق / خطا
⚠️ پس دقیقتر این است که نگوییم فقط
1 یعنی خطا؛ هر عدد غیر از صفر معمولاً نشاندهنده خطا یا وضعیت غیرموفق است.مثال:
ls
echo $?
اگر
ls موفق باشد:0
اما:
ls /abc
echo $?
اگر
/abc وجود نداشته باشد، یک عدد غیرصفر برمیگردد.—————————-
2. یک مثال خیلی ساده
mkdir test
echo $?
اگر ساخت پوشه موفق باشد:
0
حالا:
mkdir /root/test
echo $?
اگر اجازه ساخت نداشته باشی، مثلاً:
1
یا یک کد غیرصفر دیگر دریافت میکنی.
——————————
3. نکته مهم درباره
$?$? همیشه وضعیت آخرین دستور اجراشده را نشان میدهد.مثلاً:
ls
echo $?
اینجا
$? مربوط به ls است.ولی اگر بزنیم:
ls
pwd
echo $?
اینجا
$? مربوط به pwd است، نه ls.——————————
4. دستور
exit چیست؟exit برای خارج شدن از Shell یا Script و برگرداندن یک Exit Status مشخص استفاده میشود.مثلاً:
exit 0
یعنی:
Script با موفقیت تمام شد.
و:
exit 1
یعنی:
Script با وضعیت خطا تمام شد.
————————
5.
exit 10 چطور کار میکند؟اگر بنویسی:
exit 10
یعنی:
از Script خارج شو و Exit Status را برابر
10قرار بده.
مثلاً:
#!/bin/bash
echo "Hello"
exit 10
بعد از اجرای Script:
echo $?
خروجی:
10
یعنی Script خودش اعلام کرده که با کد
10 خارج شده است.⭐️ نکته مهم
10 لزوماً معنی خاص و جهانی ندارد.خود برنامهنویس میتواند برای خطاهای مختلف کدهای مختلف تعریف کند:
exit 1
exit 2
exit 10
exit 20
مهم این است که:
0 → موفق
1-255 → وضعیت غیرموفق/کد وضعیت
——————-
6. مثال کاربردی 🔥
فرض کن Script بررسی میکند که یک فایل وجود دارد یا نه:
#!/bin/bash
if [ -f "/tmp/test.txt" ]; then
echo "File exists"
exit 0
else
echo "File not found"
exit 10
fi
اگر فایل وجود داشته باشد:
File exists
و:
echo $?
میشود:
0
اگر فایل وجود نداشته باشد:
File not found
و:
echo $?
میشود:
10
اینجا
10 را خودمان بهعنوان کد مخصوص File Not Found انتخاب کردهایم.
My folder vip
فصل نهم - قسمت هشتاد و پنجم 🐧 نمایش وضعیت اجرای فرمان — Exit Status ——————— م1. Exit Status چیست؟ هر دستوری که در Linux اجرا میشود، در پایان یک کد وضعیت (Exit Status) برمیگرداند که نشان میدهد اجرای دستور موفق بوده یا نه. برای دیدن Exit Status آخرین دستور:…
فصل نهم - قسمت هشتاد و ششم 🐧
اعمال ریاضی در خط فرمان
———————
در Bash میتوانیم عملیات ریاضی را انجام دهیم و نتیجه را داخل یک متغیر ذخیره کنیم.
1. روش قدیمی با
مثلاً:
خروجی:
یعنی:
——————-
2. روش پیشنهادی:
خروجی:
مثال:
خروجی:
——————————
4. یک مثال کاربردی با
مثلاً سن کاربر را میگیریم:
اگر وارد کند:
خروجی:
اعمال ریاضی در خط فرمان
———————
در Bash میتوانیم عملیات ریاضی را انجام دهیم و نتیجه را داخل یک متغیر ذخیره کنیم.
1. روش قدیمی با
$[ ]مثلاً:
result=$[5+3]
echo $result
خروجی:
8
یعنی:
5 + 3 = 8
نکته:
$[ ]روش قدیمی است و در Bash امروزی بهتر است از
$(( ))استفاده کنیم.
——————-
2. روش پیشنهادی:
$(( ))result=$((5+3))
echo $result
خروجی:
8
مثال:
a=10
b=5
result=$((a+b))
echo "$result"
خروجی:
15
——————————
4. یک مثال کاربردی با
readمثلاً سن کاربر را میگیریم:
read -p "Enter your age: " age
days=$((age*365))
echo "You are approximately $days days old."
اگر وارد کند:
25
خروجی:
You are approximately 9125 days old.