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.
My folder vip
فصل نهم - قسمت هشتاد و ششم 🐧 اعمال ریاضی در خط فرمان ——————— در Bash میتوانیم عملیات ریاضی را انجام دهیم و نتیجه را داخل یک متغیر ذخیره کنیم. 1. روش قدیمی با $[ ] مثلاً: result=$[5+3] echo $result خروجی: 8 یعنی: 5 + 3 = 8 نکته: $[ ] روش قدیمی است و در Bash…
فصل نهم - قسمت هشتاد و هفتم 🐧
فرمان test
———————
فرمان
فرمان
مثلاً میخواهیم بفهمیم:
آیا یک فایل وجود دارد؟
آیا یک پوشه وجود دارد؟
آیا دو عدد برابرند؟
آیا یک رشته خالی است؟
آیا یک فایل قابل اجراست؟
——————————-
1.
ساختار کلی:
مثلاً:
خروجی:
یعنی شرط درست است.
اگر:
خروجی غیرصفر میشود؛ یعنی شرط غلط است.
پس:
———————
2. براکت
در Bash میتوانیم به جای
استفاده کنیم.
مثلاً:
این از نظر مفهومی همان:
است.
⚠️ نکته خیلی مهم
بنابراین فاصلهها مهماند:
درست:
غلط:
———————-
3. بررسی فایلها 📁
این قسمت خیلی مهم است.
بررسی میکند چیزی با این نام وجود دارد یا نه:
بررسی میکند آیا فایل معمولی (Regular File) است:
بررسی میکند آیا Directory است:
آیا فایل قابل خواندن است؟
آیا فایل قابل نوشتن است؟
آیا فایل قابل اجرا است؟
آیا فایل وجود دارد و حجم آن بیشتر از صفر است؟
————————
مثال واقعی
فرض کن میخواهیم ببینیم فایل وجود دارد یا نه:
چون
———————-
5. مقایسه اعداد 🔢
برای اعداد از این عملگرها استفاده میکنیم:
عملگر:
معنی:
مثلاً:
یعنی:
یا:
یعنی:
مثال کاربردی:
—————-
6. مقایسه رشتهها 📝
برای Stringها میتوانیم از:
و:
استفاده کنیم.
مثلاً:
شرط درست است.
یا:
این هم درست است.
——————-
7. بررسی خالی بودن String
اگر String خالی باشد، True است:
اگر String خالی نباشد، True است:
مثلاً:
——————-
8. ترکیب شرطها
AND →
هر دو شرط باید درست باشند:
OR →
حداقل یکی درست باشد:
9. NOT →
برای برعکس کردن نتیجه:
یعنی:
مثال:
———————
فرمان test
———————
فرمان
testفرمان
test یکی از مهمترین دستورها در Shell Scripting است، چون برای بررسی شرطها استفاده میشود.مثلاً میخواهیم بفهمیم:
آیا یک فایل وجود دارد؟
آیا یک پوشه وجود دارد؟
آیا دو عدد برابرند؟
آیا یک رشته خالی است؟
آیا یک فایل قابل اجراست؟
——————————-
1.
test چیست؟ساختار کلی:
test CONDITION
مثلاً:
test 5 -eq 5
echo $?
خروجی:
0
یعنی شرط درست است.
اگر:
test 5 -eq 10
echo $?
خروجی غیرصفر میشود؛ یعنی شرط غلط است.
پس:
0 → شرط درست
غیر 0 → شرط غلط
———————
2. براکت
[ چیست؟در Bash میتوانیم به جای
test از:[ CONDITION ]
استفاده کنیم.
مثلاً:
[ 5 -eq 5 ]
echo $?
این از نظر مفهومی همان:
test 5 -eq 5
است.
⚠️ نکته خیلی مهم
[ در واقع یک دستور (command) است و ] آرگومان پایانی آن محسوب میشود.بنابراین فاصلهها مهماند:
درست:
[ 5 -eq 5 ]
غلط:
[5 -eq 5]
———————-
3. بررسی فایلها 📁
این قسمت خیلی مهم است.
-eبررسی میکند چیزی با این نام وجود دارد یا نه:
[ -e file.txt ]
-fبررسی میکند آیا فایل معمولی (Regular File) است:
[ -f file.txt ]
-dبررسی میکند آیا Directory است:
[ -d /home ]
-rآیا فایل قابل خواندن است؟
[ -r file.txt ]
-wآیا فایل قابل نوشتن است؟
[ -w file.txt ]
-xآیا فایل قابل اجرا است؟
[ -x script.sh ]
-sآیا فایل وجود دارد و حجم آن بیشتر از صفر است؟
[ -s file.txt ]
————————
مثال واقعی
فرض کن میخواهیم ببینیم فایل وجود دارد یا نه:
#!/bin/bash
if [ -f "/etc/passwd" ]; then
echo "File exists"
else
echo "File not found"
fi
چون
/etc/passwd یک فایل معمولی است:File exists
———————-
5. مقایسه اعداد 🔢
برای اعداد از این عملگرها استفاده میکنیم:
عملگر:
معنی:
-eq
برابر
-ne
نابرابر
-gt
بزرگتر
-ge
بزرگتر یا مساوی
-lt
کوچکتر
-le
کوچکتر یا مساوی
مثلاً:
[ 10 -eq 10 ]
یعنی:
10 = 10
یا:
[ 10 -gt 5 ]
یعنی:
10 > 5
مثال کاربردی:
read -p "Enter your age: " age
if [ "$age" -ge 18 ]; then
echo "Adult"
else
echo "Under 18"
fi
—————-
6. مقایسه رشتهها 📝
برای Stringها میتوانیم از:
=
و:
!=
استفاده کنیم.
مثلاً:
name="Ali"
[ "$name" = "Ali" ]
شرط درست است.
یا:
[ "$name" != "Reza" ]
این هم درست است.
——————-
7. بررسی خالی بودن String
-zاگر String خالی باشد، True است:
[ -z "$name" ]
-nاگر String خالی نباشد، True است:
[ -n "$name" ]
مثلاً:
name=""
if [ -z "$name" ]; then
echo "Name is empty"
fi
——————-
8. ترکیب شرطها
AND →
&&هر دو شرط باید درست باشند:
[ "$age" -ge 18 ] && [ "$age" -le 60 ]
OR →
||حداقل یکی درست باشد:
[ "$age" -lt 18 ] || [ "$age" -gt 60 ]
9. NOT →
!برای برعکس کردن نتیجه:
[ ! -f file.txt ]
یعنی:
اگر
file.txtوجود نداشته باشد یا فایل معمولی نباشد.
مثال:
if [ ! -f "/tmp/test.txt" ]; then
echo "File does not exist"
fi
———————
فصل نهم - قسمت هشتاد و هشتم 🐧
استفاده از if
———————
ساختار اصلی:
یعنی:
——————-
مثال ۱ — تشخیص عدد بزرگتر و کوچکتر
اگر کاربر بزند:
خروجی:
اگر بزند:
خروجی:
اگر بخواهیم سه حالت داشته باشیم:
ساختار:
———————-
مثال ۲ — بررسی وجود فایل
میخواهیم ببینیم
چون
بررسی فایل دلخواه:
مثلاً:
استفاده از if
———————
if چیست؟if برای بررسی یک شرط و اجرای دستورات بر اساس نتیجه آن استفاده میشود.ساختار اصلی:
if [ CONDITION ]; then
command
fi
یعنی:
اگر شرط درست بود
دستورات را اجرا کن
پایان if
——————-
مثال ۱ — تشخیص عدد بزرگتر و کوچکتر
#!/bin/bash
read -p "Enter a number: " num
if [ "$num" -gt 10 ]; then
echo "Number is greater than 10"
else
echo "Number is less than or equal to 10"
fi
اگر کاربر بزند:
15
خروجی:
Number is greater than 10
اگر بزند:
7
خروجی:
Number is less than or equal to 10
اگر بخواهیم سه حالت داشته باشیم:
if [ "$num" -gt 10 ]; then
echo "Greater than 10"
elif [ "$num" -eq 10 ]; then
echo "Equal to 10"
else
echo "Less than 10"
fi
ساختار:
if
↓
شرط اول
elif
↓
شرط دوم
else
↓
اگر هیچکدام درست نبود
fi
↓
پایان
———————-
مثال ۲ — بررسی وجود فایل
میخواهیم ببینیم
/etc/passwd وجود دارد یا نه:#!/bin/bash
if [ -f /etc/passwd ]; then
echo "File exists"
else
echo "File does not exist"
fi
چون
/etc/passwd یک فایل معمولی است:File exists
بررسی فایل دلخواه:
read -p "Enter filename: " file
if [ -f "$file" ]; then
echo "File exists"
else
echo "File not found"
fi
مثلاً:
Enter filename: test.txt
File exists
فصل نهم - قسمت هشتاد و نهم 🐧
استفاده از
———————
1.
وقتی چند انتخاب مختلف داریم،
ساختار:
————————
مثال شبکهای که گفتی 🔥
میخواهیم کاربر یکی از اینها را وارد کند:
و دستور مربوطه اجرا شود.
اگر کاربر بنویسد:
اجرا میشود:
اگر بنویسد:
اجرا میشود:
و:
اجرا میشود:
——————-
2.
مثلاً:
وقتی اجرا کنی، Bash چیزی شبیه این نشان میدهد:
کاربر مثلاً:
و
تفاوت:
استفاده از
case و select———————
1.
case چیست؟وقتی چند انتخاب مختلف داریم،
case معمولاً از چندین if/elif خواناتر است.ساختار:
case "$variable" in
option1)
commands
;;
option2)
commands
;;
*)
commands
;;
esac
esac پایان case است.————————
مثال شبکهای که گفتی 🔥
میخواهیم کاربر یکی از اینها را وارد کند:
ip
link
route
و دستور مربوطه اجرا شود.
#!/bin/bash
read -p "Enter command (ip/link/route): " choice
case "$choice" in
ip)
ip addr
;;
link)
ip link
;;
route)
ip route
;;
*)
echo "Invalid option"
;;
esac
اگر کاربر بنویسد:
ip
اجرا میشود:
ip addr
اگر بنویسد:
link
اجرا میشود:
ip link
و:
route
اجرا میشود:
ip route
* یعنی:هیچکدام از گزینههای بالا نبود.
——————-
2.
select چیست؟select برای ساختن منوی انتخابی ساده در Bash استفاده میشود.مثلاً:
#!/bin/bash
select choice in ip link route exit
do
case "$choice" in
ip)
ip addr
;;
link)
ip link
;;
route)
ip route
;;
exit)
break
;;
*)
echo "Invalid option"
;;
esac
done
وقتی اجرا کنی، Bash چیزی شبیه این نشان میدهد:
1) ip
2) link
3) route
4) exit
#?
کاربر مثلاً:
#? 2
و
ip link اجرا میشود.تفاوت:
case
→ خودت ورودی را از کاربر میگیری و بررسی میکنی.
select
→ Bash خودش یک منوی شمارهدار میسازد.
فصل نهم - قسمت نودم🐧
استفاده از حلقهها
———————
چیست؟
حلقه یعنی:
مثلاً به جای اینکه ۱۰ بار بنویسیم:
از حلقه استفاده میکنیم.
——————-
مثلاً:
خروجی:
و:
خروجی:
—————
حلقه
مثلاً:
خروجی:
ساختار:
————————
🔥 پورت اسکنر خیلی ساده
برای محیطی که مالک آن هستی یا اجازه تستش را داری، میتوانیم یک TCP port checker ساده با Bash بسازیم.
مثلاً:
مثلاً:
ممکن است:
این یک Port Scanner بسیار ابتدایی است و قابلیتهای ابزارهایی مثل Nmap را ندارد.
——————
استفاده از حلقهها
———————
چیست؟
حلقه یعنی:
یک دستور یا مجموعهای از دستورات را چند بار اجرا کنیم.
مثلاً به جای اینکه ۱۰ بار بنویسیم:
echo 1
echo 2
echo 3
...
از حلقه استفاده میکنیم.
——————-
seqseq برای تولید یک دنباله از اعداد استفاده میشود.مثلاً:
seq 1 5
خروجی:
1
2
3
4
5
و:
seq 10 15
خروجی:
10
11
12
13
14
15
—————
حلقه
forمثلاً:
for i in $(seq 1 5)
do
echo "Number: $i"
done
خروجی:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
ساختار:
for
↓
مقدار بگیر
↓
دستور را اجرا کن
↓
مقدار بعدی
↓
...
↓
done
————————
🔥 پورت اسکنر خیلی ساده
برای محیطی که مالک آن هستی یا اجازه تستش را داری، میتوانیم یک TCP port checker ساده با Bash بسازیم.
مثلاً:
#!/bin/bash
read -p "Enter target IP: " target
read -p "Start port: " start
read -p "End port: " end
for port in $(seq "$start" "$end")
do
if timeout 1 bash -c "</dev/tcp/$target/$port" 2>/dev/null; then
echo "Port $port is OPEN"
fi
done
مثلاً:
Enter target IP: 192.168.1.10
Start port: 20
End port: 25
ممکن است:
Port 22 is OPEN
Port 25 is OPEN
این یک Port Scanner بسیار ابتدایی است و قابلیتهای ابزارهایی مثل Nmap را ندارد.
——————
فصل نهم - قسمت نود و دوم🐧
اجرای فرمان در حالت خاص با
———————
است.
کارش این است که یک برنامه را طوری اجرا کنیم که با بستهشدن Session/ترمینال، تا حد امکان به SIGHUP وابسته نباشد و ادامه دهد.
مثلاً:
اینجا دو مفهوم داریم:
خروجی معمولاً به فایلی مثل:
میرود، مگر اینکه خودمان Redirect کنیم.
مثلاً:
خیلی کاربردی برای SSH است.
مثلاً:
بعد SSH را قطع میکنی و Script میتواند ادامه پیدا کند.
⭐️ نکته
—————————-
فصل نهم — قسمت ۹۲ 🐧
این قسمت برای مدیریت Linux خیلی مهم است.
دو ابزار داریم:
——————-
1.
مثلاً:
بعد داخل محیط
و در پایان:
یعنی:
————————
اجرای یک Script با
مثلاً:
یعنی:
پس نکتهای که در جزوهات نوشتهای درست است:
——————-
2.
مثلاً:
برای مدیریت Cron کاربر:
——————-
ساختار Cron
ساختار استاندارد پنج فیلد زمانی:
مثلاً:
یعنی:
مثال:
یعنی:
———————-
اجرای فرمان در حالت خاص با
nohup———————
nohup مخفف:No Hang Up
است.
کارش این است که یک برنامه را طوری اجرا کنیم که با بستهشدن Session/ترمینال، تا حد امکان به SIGHUP وابسته نباشد و ادامه دهد.
مثلاً:
nohup ./backup.sh &
اینجا دو مفهوم داریم:
nohup → جلوگیری از توقف معمول برنامه هنگام قطع Session
& → اجرای برنامه در Background
خروجی معمولاً به فایلی مثل:
nohup.out
میرود، مگر اینکه خودمان Redirect کنیم.
مثلاً:
nohup ./backup.sh > backup.log 2>&1 &
خیلی کاربردی برای SSH است.
مثلاً:
ssh server
nohup ./backup.sh > backup.log 2>&1 &
بعد SSH را قطع میکنی و Script میتواند ادامه پیدا کند.
⭐️ نکته
nohup به معنی «برنامه حتماً تحت هر شرایطی اجرا میماند» نیست؛ فقط اثر Hangup را مدیریت میکند. خطاهای دیگر، Kill شدن پردازش و موارد مشابه همچنان میتوانند آن را متوقف کنند.—————————-
فصل نهم — قسمت ۹۲ 🐧
cron و atاین قسمت برای مدیریت Linux خیلی مهم است.
دو ابزار داریم:
at
cron
——————-
1.
atat برای اجرای یکباره یک دستور در زمان مشخص است.مثلاً:
at 18:00
بعد داخل محیط
at مینویسیم:echo "Backup started" >> /tmp/backup.log
و در پایان:
Ctrl+D
یعنی:
این دستور یک بار در ساعت ۱۸ اجرا شود.
————————
اجرای یک Script با
atمثلاً:
at -f backup.sh 18:00
یعنی:
فایل
backup.shرا در ساعت ۱۸ اجرا کن.
پس نکتهای که در جزوهات نوشتهای درست است:
-f
→ مشخص کردن فایل حاوی دستورات برای at
——————-
2.
croncron برای اجرای زمانبندیشده و تکرارشونده استفاده میشود.مثلاً:
هر روز ساعت ۲
هر دوشنبه
هر ماه
هر ۵ دقیقه
برای مدیریت Cron کاربر:
crontab -e
——————-
ساختار Cron
ساختار استاندارد پنج فیلد زمانی:
┌──── دقیقه 0-59
│ ┌── ساعت 0-23
│ │ ┌─ روز ماه 1-31
│ │ │ ┌─ ماه 1-12
│ │ │ │ ┌─ روز هفته 0-7
│ │ │ │ │
* * * * *
مثلاً:
0 6 * * * /home/ali/backup.sh
یعنی:
هر روز ساعت ۶ صبح
backup.shاجرا شود.
مثال:
*/5 * * * * /home/ali/check.sh
یعنی:
هر ۵ دقیقه Script اجرا شود.
———————-
فصل نهم - قسمت نود و سوم🐧
استفاده از GitHub
———————
GitHub یک پلتفرم برای نگهداری، اشتراکگذاری و مدیریت پروژههای نرمافزاری با Git است.
در دنیای Linux و Security خیلی کاربرد دارد، چون میتوانی:
Scriptهای خودت را نگهداری کنی.
پروژهها را Version Control کنی.
پروژههای Open Source را ببینی.
Scriptهای دیگران را بررسی کنی.
تغییرات پروژه را دنبال کنی.
مثلاً برای یک پروژه:
بعد:
و در صورت داشتن Repository روی GitHub، آن را به Remote متصل میکنی.
استفاده از GitHub
———————
GitHub یک پلتفرم برای نگهداری، اشتراکگذاری و مدیریت پروژههای نرمافزاری با Git است.
در دنیای Linux و Security خیلی کاربرد دارد، چون میتوانی:
Scriptهای خودت را نگهداری کنی.
پروژهها را Version Control کنی.
پروژههای Open Source را ببینی.
Scriptهای دیگران را بررسی کنی.
تغییرات پروژه را دنبال کنی.
مثلاً برای یک پروژه:
mkdir my-tool
cd my-tool
git init
بعد:
git add .
git commit -m "Initial commit"
و در صورت داشتن Repository روی GitHub، آن را به Remote متصل میکنی.
خب خب فصل نهم هم تمام شد
از فردا فصل دهم دوره الپیک1 قسمت 102 رو داریم
که فصل اخر الپیک1 و پایان دوره الپیک هستش
از فردا فصل دهم دوره الپیک1 قسمت 102 رو داریم
که فصل اخر الپیک1 و پایان دوره الپیک هستش
فصل دهم - قسمت نود و چهارم🐧
intro » امن سازی لینوکس
———————
در این فصل روی امنیت لینوکس تا حد کم کار میکنیم و در سطح سیستم و لینوکس کار میکنیم
1: انجام وظایف امنیتی توسط مدیر
2: برسی امنیت در سطح هاست
3: امن سازی داده ها با رمزنگاری
4: صحبت پایانی و ادامه مسیر
intro » امن سازی لینوکس
———————
در این فصل روی امنیت لینوکس تا حد کم کار میکنیم و در سطح سیستم و لینوکس کار میکنیم
1: انجام وظایف امنیتی توسط مدیر
2: برسی امنیت در سطح هاست
3: امن سازی داده ها با رمزنگاری
4: صحبت پایانی و ادامه مسیر
فصل دهم - قسمت نود و پنجم🐧
برسی ورود به سیستم
———————
بررسی ورود به سیستم
در لینوکس میتوانیم ببینیم:
چه کاربرانی الان وارد سیستم هستند
هر کاربر از چه ترمینالی وصل شده
از چه زمانی وارد شده
چه کاری در حال انجام است
چه کسانی قبلاً وارد سیستم شدهاند
حتی ورودهای مربوط به یک کاربر خاص مثل
————————-
1️⃣ فرمان
فرمان
مثلاً:
معنی ستونها:
نکته مهم
————————-
2️⃣
برای نمایش اطلاعات کاملتر:
یا:
اطلاعات بیشتری درباره Sessionها و وضعیت Login نمایش میدهد.
🎯 نکته امتحانی:
→ کاربران فعلی
→ اطلاعات کاملتر Login/Session
——————————
3️⃣ فرمان
فرمان
مثلاً:
مهمترین تفاوت:
فقط وضعیت Login کاربران را بررسی میکند.
علاوه بر Login، نشان میدهد کاربر الان چه کاری انجام میدهد.
مثلاً:
پس برای بررسی سریع سیستم،
—————
4️⃣ فرمان
تا اینجا
اما
مثلاً:
یعنی
————————
5️⃣
اگر بخواهیم فقط ورودهای کاربر
این دستور فقط رکوردهای مربوط به کاربر
مثلاً:
کاربرد امنیتی 🔐
این دستور برای بررسی ورودهای مشکوک به
مثلاً اگر ببینی:
و این IP برای خودت نیست، باید بررسی بیشتری انجام بدهی.
البته وجود یک Login از IP ناشناس بهتنهایی اثبات نفوذ نیست؛ ممکن است NAT، VPN، Bastion یا سرویس مدیریتی در میان باشد.
برسی ورود به سیستم
———————
بررسی ورود به سیستم
در لینوکس میتوانیم ببینیم:
چه کاربرانی الان وارد سیستم هستند
هر کاربر از چه ترمینالی وصل شده
از چه زمانی وارد شده
چه کاری در حال انجام است
چه کسانی قبلاً وارد سیستم شدهاند
حتی ورودهای مربوط به یک کاربر خاص مثل
root————————-
1️⃣ فرمان
whoفرمان
who نشان میدهد چه کاربرانی در حال حاضر وارد سیستم هستند.who
مثلاً:
ali pts/0 2026-09-03 18:20 (192.168.1.10)
root pts/1 2026-09-03 18:25 (192.168.1.20)
معنی ستونها:
USER TTY LOGIN TIME FROM
نکته مهم
who بیشتر برای پاسخ به این سؤال است:الان چه کسانی روی سیستم Login هستند؟
————————-
2️⃣
who --allبرای نمایش اطلاعات کاملتر:
who --all
یا:
who -a
اطلاعات بیشتری درباره Sessionها و وضعیت Login نمایش میدهد.
🎯 نکته امتحانی:
who
→ کاربران فعلی
who -a
→ اطلاعات کاملتر Login/Session
——————————
3️⃣ فرمان
wفرمان
w هم کاربران Login شده را نشان میدهد، ولی اطلاعات بیشتری درباره فعالیت فعلی آنها میدهد.w
مثلاً:
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ali pts/0 192.168.1.10 18:20 2:00 0.10s 0.02s bash
root pts/1 192.168.1.20 18:25 0.00s 0.05s 0.01s top
مهمترین تفاوت:
whoفقط وضعیت Login کاربران را بررسی میکند.
wعلاوه بر Login، نشان میدهد کاربر الان چه کاری انجام میدهد.
مثلاً:
root → top
ali → bash
پس برای بررسی سریع سیستم،
w خیلی کاربردی است.—————
4️⃣ فرمان
lastتا اینجا
who و w وضعیت فعلی را بررسی میکردند.اما
last برای مشاهده Loginهای قبلی است.last
مثلاً:
ali pts/0 192.168.1.10 Thu Sep 3 18:20 still logged in
root pts/1 192.168.1.20 Thu Sep 3 17:10 - 17:45
ali pts/0 192.168.1.15 Wed Sep 2 22:10 - 23:30
یعنی
last تاریخچه Login/Logout را نمایش میدهد.————————
5️⃣
last rootاگر بخواهیم فقط ورودهای کاربر
root را ببینیم:last root
این دستور فقط رکوردهای مربوط به کاربر
root را نمایش میدهد.مثلاً:
root pts/0 192.168.1.20 Thu Sep 3 17:10 - 17:45
root pts/1 192.168.1.30 Wed Sep 2 12:00 - 12:30
کاربرد امنیتی 🔐
این دستور برای بررسی ورودهای مشکوک به
root بسیار مفید است.مثلاً اگر ببینی:
root pts/0 185.x.x.x
و این IP برای خودت نیست، باید بررسی بیشتری انجام بدهی.
البته وجود یک Login از IP ناشناس بهتنهایی اثبات نفوذ نیست؛ ممکن است NAT، VPN، Bastion یا سرویس مدیریتی در میان باشد.