فصل نهم - قسمت نود و دوم🐧
اجرای فرمان در حالت خاص با
———————
است.
کارش این است که یک برنامه را طوری اجرا کنیم که با بستهشدن 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 یا سرویس مدیریتی در میان باشد.
فصل دهم - قسمت نود و ششم🐧
اسکن کردن سیستم
———————
قبل از اینکه یک مهاجم سیستم ما را بررسی کند، خودمان باید سیستم خودمان را بررسی کنیم.
هدف:
سرویسهای غیرضروری را پیدا و غیرفعال کنیم.
پورتهای باز را بررسی کنیم.
سرویسهایی که روی پورتها Listen میکنند را شناسایی کنیم.
اتصالهای IPv4 و IPv6 را بررسی کنیم.
سطح حمله سیستم را کاهش دهیم.
——————-
1️⃣ اسکن TCP با Nmap
دستور:
آدرس Loopback است و به خود سیستم اشاره میکند.
یعنی:
TCP Connect Scan است.
Nmap تلاش میکند یک اتصال TCP واقعی به پورت ایجاد کند تا وضعیت آن را مشخص کند.
مثلاً ممکن است خروجی چیزی شبیه این باشد:
یعنی مثلاً روی سیستم:
در حال Listen هستند.
—————————-
2️⃣ اسکن UDP
در متن شما نوشته شده:
اما ⚠️ گزینه صحیح Nmap برای UDP این است:
حروف گزینه مهم هستند؛
مثلاً:
برای بررسی سرویسهای UDP استفاده میشود.
—————-
3️⃣ بررسی پورتهای Listen با netstat
دستور:
یا شکل کوتاه:
اگر UDP هم بخواهیم:
معنی:
پس:
یعنی:
——————-
4️⃣ بررسی با
امروزه
دستور شما:
معنی:
مثلاً:
——————-
⭐️ نکته مهم امنیتی:
اگر ببینی:
یعنی سرویس روی تمام Interfaceهای IPv4 سیستم Listen میکند.
اما:
یعنی فقط از طریق Loopback قابل دسترسی است.
پس این دو با هم فرق دارند:
—————-
5️⃣ بررسی با
دستور:
میتوانیم بفهمیم کدام Process یک پورت TCP را در اختیار دارد.
مثلاً:
اینجا میفهمیم:
—————
6️⃣ بررسی پورت 22
دستور:
این دستور نشان میدهد چه Processهایی از TCP Port 22 استفاده میکنند.
مثلاً:
پس متوجه میشویم SSH توسط
7️⃣ دستور
TCP Port 22
یعنی:
مثلاً:
———————
8️⃣ بررسی UDP
در متن شما:
یعنی Processهایی که از UDP Port 822 استفاده میکنند را بررسی کن.
اگر منظورتان پورت دیگری بوده، فقط شماره پورت را تغییر میدهیم:
——————-
9️⃣ چرا IPv6 مهم است؟ 🌐
یکی از نکات مهم این قسمت همین است.
ممکن است شما IPv4 را بررسی کنی و مثلاً ببینی:
اما سرویس از طریق IPv6 هم در دسترس باشد.
مثلاً:
پس هنگام بررسی Listening Socketها باید IPv4 و IPv6 را هم در نظر بگیری.
در
و برای دیدن جزئیات بیشتر:
همچنین میتوانی خانواده آدرس را در خروجی ببینی:
اولی IPv4 و دومی IPv6 است.
——————————-
🛡 رویکرد امنیتی این قسمت
فرض کن یک سرور Linux داری.
اول:
میزنی.
میبینی:
حالا سؤال مهم:
اگر مثلاً MySQL فقط باید توسط برنامهای روی همان سرور استفاده شود، بهتر است نیازی به Public Listening نداشته باشد.
یا اگر یک سرویس کاملاً غیرضروری است:
این همان مفهوم Hardening است.
اسکن کردن سیستم
———————
قبل از اینکه یک مهاجم سیستم ما را بررسی کند، خودمان باید سیستم خودمان را بررسی کنیم.
هدف:
سرویسهای غیرضروری را پیدا و غیرفعال کنیم.
پورتهای باز را بررسی کنیم.
سرویسهایی که روی پورتها Listen میکنند را شناسایی کنیم.
اتصالهای IPv4 و IPv6 را بررسی کنیم.
سطح حمله سیستم را کاهش دهیم.
🔐 این دستورات را روی سیستم خودت، سرور خودت یا محیطی که اجازه تستش را داری اجرا کن.
——————-
1️⃣ اسکن TCP با Nmap
دستور:
nmap -sT 127.0.0.1
127.0.0.1 چیست؟آدرس Loopback است و به خود سیستم اشاره میکند.
یعنی:
سیستم خودم → اسکن → خود سیستم
-sT چیست؟TCP Connect Scan است.
Nmap تلاش میکند یک اتصال TCP واقعی به پورت ایجاد کند تا وضعیت آن را مشخص کند.
مثلاً ممکن است خروجی چیزی شبیه این باشد:
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
یعنی مثلاً روی سیستم:
22 → SSH80 → HTTP443 → HTTPSدر حال Listen هستند.
—————————-
2️⃣ اسکن UDP
در متن شما نوشته شده:
nmap -su 127.0.0.1
اما ⚠️ گزینه صحیح Nmap برای UDP این است:
nmap -sU 127.0.0.1
حروف گزینه مهم هستند؛
-sU یعنی:UDP Scan
مثلاً:
nmap -sU 127.0.0.1
برای بررسی سرویسهای UDP استفاده میشود.
—————-
3️⃣ بررسی پورتهای Listen با netstat
دستور:
netstat --tcp --listening
یا شکل کوتاه:
netstat -tl
اگر UDP هم بخواهیم:
netstat -tul
معنی:
-t → TCP
-u → UDP
-l → Listening
پس:
netstat -tul
یعنی:
پورتهای TCP و UDP که در حالت Listening هستند را نشان بده.
——————-
4️⃣ بررسی با
ssامروزه
ss معمولاً انتخاب بهتری نسبت به netstat است.دستور شما:
ss -ltu
معنی:
-l → Listening
-t → TCP
-u → UDP
مثلاً:
Netid State Local Address:Port
tcp LISTEN 0.0.0.0:22
tcp LISTEN 127.0.0.1:631
udp UNCONN 0.0.0.0:68
——————-
⭐️ نکته مهم امنیتی:
0.0.0.0اگر ببینی:
0.0.0.0:22
یعنی سرویس روی تمام Interfaceهای IPv4 سیستم Listen میکند.
اما:
127.0.0.1:22
یعنی فقط از طریق Loopback قابل دسترسی است.
پس این دو با هم فرق دارند:
127.0.0.1:PORT
↓
فقط Local
0.0.0.0:PORT
↓
تمام IPv4 Interfaceها
—————-
5️⃣ بررسی با
lsofدستور:
lsof -iTCP -sTCP:LISTEN
میتوانیم بفهمیم کدام Process یک پورت TCP را در اختیار دارد.
مثلاً:
COMMAND PID USER FD TYPE DEVICE NODE NAME
sshd 850 root 3u IPv4 ... TCP *:ssh (LISTEN)
اینجا میفهمیم:
sshd
↓
PID 850
↓
TCP Port 22
↓
LISTEN
—————
6️⃣ بررسی پورت 22
دستور:
lsof -i tcp:22
این دستور نشان میدهد چه Processهایی از TCP Port 22 استفاده میکنند.
مثلاً:
sshd 850 root TCP *:ssh (LISTEN)
پس متوجه میشویم SSH توسط
sshd روی پورت 22 فعال است.7️⃣ دستور
fuserfuser هم برای پیدا کردن Processهایی که از یک فایل، Socket یا پورت استفاده میکنند کاربرد دارد.TCP Port 22
fuser -vn tcp 22
یعنی:
چه Processهایی از TCP Port 22 استفاده میکنند؟
مثلاً:
USER PID ACCESS COMMAND
22/tcp root 850 F.... sshd
———————
8️⃣ بررسی UDP
در متن شما:
fuser -vn udp 822
یعنی Processهایی که از UDP Port 822 استفاده میکنند را بررسی کن.
اگر منظورتان پورت دیگری بوده، فقط شماره پورت را تغییر میدهیم:
fuser -vn udp PORT
——————-
9️⃣ چرا IPv6 مهم است؟ 🌐
یکی از نکات مهم این قسمت همین است.
ممکن است شما IPv4 را بررسی کنی و مثلاً ببینی:
0.0.0.0:8080
اما سرویس از طریق IPv6 هم در دسترس باشد.
مثلاً:
[::]:8080
پس هنگام بررسی Listening Socketها باید IPv4 و IPv6 را هم در نظر بگیری.
در
ss:ss -lnt
و برای دیدن جزئیات بیشتر:
ss -lntup
همچنین میتوانی خانواده آدرس را در خروجی ببینی:
tcp LISTEN 0.0.0.0:22
tcp LISTEN [::]:22
اولی IPv4 و دومی IPv6 است.
——————————-
🛡 رویکرد امنیتی این قسمت
فرض کن یک سرور Linux داری.
اول:
ss -lntup
میزنی.
میبینی:
22 ssh
80 nginx
3306 mysql
8080 unknown-service
حالا سؤال مهم:
آیا واقعاً به همه این سرویسها نیاز دارم؟
اگر مثلاً MySQL فقط باید توسط برنامهای روی همان سرور استفاده شود، بهتر است نیازی به Public Listening نداشته باشد.
یا اگر یک سرویس کاملاً غیرضروری است:
پیدا کردن سرویس
↓
بررسی نیاز
↓
غیرفعال کردن سرویس
↓
کاهش سطح حمله
این همان مفهوم Hardening است.
فصل دهم - قسمت نود و هفتم🐧
امن سازی دسترسی و رمز عبور
———————
امنسازی دسترسی و رمز عبور
هدف این قسمت اینه که یاد بگیریم در لینوکس:
رمز عبور کاربران کجا نگهداری میشود؟
چطور رمز کاربر را تنظیم یا تغییر دهیم؟
چطور حساب کاربری را Lock کنیم؟
گروههای
چطور دسترسی sudo را بهصورت امن تنظیم کنیم؟
——————————-
1️⃣ محل ذخیره رمز عبور کجاست؟
در لینوکس اطلاعات مربوط به حساب کاربران در:
قرار دارد.
اما رمز عبور واقعی در
هش رمز عبور معمولاً در:
ذخیره میشود.
مثلاً:
فایل
ساختار کلی یک خط:
مقدار مربوط به رمز، Hash است، نه خود Password به صورت Plain Text.
🎯 نکته امتحانی
———————
2️⃣ چرا رمز در
اگر Hash رمز داخل
به همین دلیل اطلاعات حساس به:
منتقل شده و دسترسی به آن محدودتر است.
————————
3️⃣ تنظیم یا تغییر رمز عبور
برای تغییر رمز کاربر فعلی:
سیستم از شما رمز فعلی و سپس رمز جدید را میخواهد.
برای تغییر رمز یک کاربر دیگر، معمولاً باید دسترسی مدیریتی داشته باشید:
مثلاً:
————————
4️⃣ Lock کردن کاربر 🔒
برای Lock کردن حساب:
مثلاً:
برای باز کردن Lock:
یعنی:
——————
روش دیگر با
میتوان از:
برای Lock استفاده کرد.
و:
برای Unlock.
نکته
این دستورات با تغییر وضعیت رمز/حساب کار میکنند؛ برای مسدودسازی کامل دسترسی یک حساب در همه روشهای احراز هویت، باید سیاستهای سرویس و سیستم را هم در نظر گرفت.
————————-
5️⃣ گروه
در توزیعهایی مثل Debian و Ubuntu، گروه:
معمولاً برای دادن دسترسی اجرای دستورات با
مثلاً:
حالا کاربر
بررسی عضویت:
یا:
————————-
6️⃣ گروه
در بسیاری از توزیعهای Red Hat مانند:
RHEL
CentOS
Fedora
AlmaLinux
گروه:
برای دسترسی مدیریتی از طریق
مثلاً:
بعد از Login مجدد، کاربر میتواند طبق تنظیمات sudo از دسترسی مدیریتی استفاده کند.
⭐️ تفاوت مهم
البته این یک قاعده رایج است، نه یک قانون مطلق؛ تنظیمات واقعی
—————————-
7️⃣
تنظیمات مربوط به اینکه چه کسی چه دستورات مدیریتی را با sudo اجرا کند در:
تعریف میشود.
مثلاً ممکن است قوانینی برای:
وجود داشته باشد.
⚠️ فایل
یک Syntax اشتباه میتواند باعث شود
——————————
8️⃣ چرا
به جای اینکه مستقیم بنویسیم:
روش استاندارد این است:
یعنی اگر اشتباه Syntax داشته باشیم، احتمال خراب شدن تنظیمات sudo کمتر میشود.
🎯 نکته امتحانی خیلی مهم
———————
9️⃣ مثال ساده
فرض کنیم میخواهیم گروه
با:
تنظیمات مربوط به گروه را بررسی یا تنظیم میکنیم.
در بسیاری از سیستمهای RHEL-like ممکن است خطی شبیه این وجود داشته باشد:
معنی کلی:
⚠️ این یک دسترسی بسیار قدرتمند است؛ روی سرور واقعی باید فقط به کاربر/گروهی داده شود که واقعاً نیاز دارد.
—————————
🔐 یک سناریوی واقعی
فرض کن یک سرور Linux داری و کاربر:
نباید با
بهجای دادن Password مربوط به
این مدل معمولاً مدیریت دسترسی را بهتر میکند.
امن سازی دسترسی و رمز عبور
———————
امنسازی دسترسی و رمز عبور
هدف این قسمت اینه که یاد بگیریم در لینوکس:
رمز عبور کاربران کجا نگهداری میشود؟
چطور رمز کاربر را تنظیم یا تغییر دهیم؟
چطور حساب کاربری را Lock کنیم؟
گروههای
sudo و wheel چه کاربردی دارند؟چطور دسترسی sudo را بهصورت امن تنظیم کنیم؟
visudo چیست؟——————————-
1️⃣ محل ذخیره رمز عبور کجاست؟
در لینوکس اطلاعات مربوط به حساب کاربران در:
/etc/passwd
قرار دارد.
اما رمز عبور واقعی در
/etc/passwd ذخیره نمیشود.هش رمز عبور معمولاً در:
/etc/shadow
ذخیره میشود.
مثلاً:
sudo cat /etc/shadow
فایل
/etc/shadow شامل اطلاعات حساس مربوط به احراز هویت است و دسترسی آن باید محدود باشد.ساختار کلی یک خط:
username:$hash:...
مقدار مربوط به رمز، Hash است، نه خود Password به صورت Plain Text.
🎯 نکته امتحانی
/etc/passwd
→ اطلاعات عمومیتر حساب کاربران
/etc/shadow
→ اطلاعات حساس احراز هویت و Hash رمز عبور
———————
2️⃣ چرا رمز در
/etc/shadow است؟اگر Hash رمز داخل
/etc/passwd بود، با توجه به اینکه /etc/passwd معمولاً برای کاربران قابل خواندن است، امنیت پایینتر میآمد.به همین دلیل اطلاعات حساس به:
/etc/shadow
منتقل شده و دسترسی به آن محدودتر است.
————————
3️⃣ تنظیم یا تغییر رمز عبور
برای تغییر رمز کاربر فعلی:
passwd
سیستم از شما رمز فعلی و سپس رمز جدید را میخواهد.
برای تغییر رمز یک کاربر دیگر، معمولاً باید دسترسی مدیریتی داشته باشید:
sudo passwd username
مثلاً:
sudo passwd ali
————————
4️⃣ Lock کردن کاربر 🔒
برای Lock کردن حساب:
sudo passwd -l username
مثلاً:
sudo passwd -l ali
-l یعنی:Lock
برای باز کردن Lock:
sudo passwd -u ali
یعنی:
Unlock
——————
روش دیگر با
usermodمیتوان از:
sudo usermod -L ali
برای Lock استفاده کرد.
و:
sudo usermod -U ali
برای Unlock.
نکته
این دستورات با تغییر وضعیت رمز/حساب کار میکنند؛ برای مسدودسازی کامل دسترسی یک حساب در همه روشهای احراز هویت، باید سیاستهای سرویس و سیستم را هم در نظر گرفت.
————————-
5️⃣ گروه
sudoدر توزیعهایی مثل Debian و Ubuntu، گروه:
sudo
معمولاً برای دادن دسترسی اجرای دستورات با
sudo استفاده میشود.مثلاً:
sudo usermod -aG sudo ali
حالا کاربر
ali عضو گروه sudo میشود.بررسی عضویت:
groups ali
یا:
id ali
————————-
6️⃣ گروه
wheelدر بسیاری از توزیعهای Red Hat مانند:
RHEL
CentOS
Fedora
AlmaLinux
گروه:
wheel
برای دسترسی مدیریتی از طریق
sudo استفاده میشود.مثلاً:
sudo usermod -aG wheel ali
بعد از Login مجدد، کاربر میتواند طبق تنظیمات sudo از دسترسی مدیریتی استفاده کند.
⭐️ تفاوت مهم
Debian / Ubuntu
→ sudo
RHEL / CentOS / Fedora / AlmaLinux
→ wheel
البته این یک قاعده رایج است، نه یک قانون مطلق؛ تنظیمات واقعی
/etc/sudoers تعیین میکند چه گروهی چه دسترسیای داشته باشد.—————————-
7️⃣
sudoers چیست؟تنظیمات مربوط به اینکه چه کسی چه دستورات مدیریتی را با sudo اجرا کند در:
/etc/sudoers
تعریف میشود.
مثلاً ممکن است قوانینی برای:
USER
GROUP
COMMAND
HOST
وجود داشته باشد.
⚠️ فایل
sudoers بسیار حساس است.یک Syntax اشتباه میتواند باعث شود
sudo درست کار نکند.——————————
8️⃣ چرا
visudo؟به جای اینکه مستقیم بنویسیم:
sudo nano /etc/sudoers
روش استاندارد این است:
sudo visudo
visudo فایل sudoers را با بررسی Syntax ویرایش میکند.یعنی اگر اشتباه Syntax داشته باشیم، احتمال خراب شدن تنظیمات sudo کمتر میشود.
🎯 نکته امتحانی خیلی مهم
visudo
↓
ویرایش امنتر /etc/sudoers
↓
بررسی Syntax
———————
9️⃣ مثال ساده
visudoفرض کنیم میخواهیم گروه
wheel دسترسی sudo داشته باشد.با:
sudo visudo
تنظیمات مربوط به گروه را بررسی یا تنظیم میکنیم.
در بسیاری از سیستمهای RHEL-like ممکن است خطی شبیه این وجود داشته باشد:
%wheel ALL=(ALL) ALL
معنی کلی:
%wheel
↓
گروه wheel
ALL
↓
روی همه Hostها
(ALL)
↓
بهعنوان کاربران مجاز
ALL
↓
تمام Commandها
⚠️ این یک دسترسی بسیار قدرتمند است؛ روی سرور واقعی باید فقط به کاربر/گروهی داده شود که واقعاً نیاز دارد.
—————————
🔐 یک سناریوی واقعی
فرض کن یک سرور Linux داری و کاربر:
ali
نباید با
root مستقیماً کار کند، اما باید بتواند بعضی کارهای مدیریتی انجام دهد.بهجای دادن Password مربوط به
root:ali
↓
sudo
↓
دستور مدیریتی
↓
احراز هویت
↓
اجرای دستور با سطح دسترسی مناسب
این مدل معمولاً مدیریت دسترسی را بهتر میکند.
فصل دهم - قسمت نود و هشتم🐧
استفاده از ssh - SSH hardening
———————
1️⃣ چرا SSH؟
SSH = Secure Shell
برای اتصال امن و Remote به یک سیستم لینوکس استفاده میشود.
مثلاً از کامپیوتر خودمان:
به سرور وصل میشویم.
SSH ارتباط را رمزنگاری میکند؛ بنابراین اطلاعاتی مثل دستورات و اطلاعات احراز هویت در مسیر بهصورت ساده ارسال نمیشوند.
پورت پیشفرض SSH:
——————-
2️⃣ احراز هویت با Password
روش ساده:
بعد سیستم Password میخواهد:
اما برای سرورهای مهم، استفاده از SSH Key Authentication معمولاً امنتر و مناسبتر است.
————————-
3️⃣ SSH Key چیست؟
SSH از یک جفت کلید استفاده میکند:
به این مدل میگوییم:
Public/Private Key Pair
———————-
4️⃣ Private Key 🔴
Private Key باید محرمانه بماند.
مثلاً:
یا در بعضی سیستمها:
⚠️ Private Key را نباید برای کسی ارسال کنیم.
مثلاً:
———————
5️⃣ Public Key 🟢
Public Key برخلاف Private Key میتواند روی سرور مقصد قرار بگیرد.
مثلاً:
ساختار کلی:
Private Key روی Client میماند.
Public Key روی Server قرار میگیرد.
———————
6️⃣ ساخت SSH Key
در متن شما نوشته شده:
اما دستور صحیح:
مثلاً روش پیشنهادی امروزی:
بعد ممکن است بپرسد:
و سپس:
——————-
7️⃣ Passphrase چیست؟
Passphrase یک رمز برای محافظت از Private Key است.
یعنی:
پس دو مفهوم را قاطی نکن:
Password
رمز حساب کاربری روی سرور.
Passphrase
رمزی که میتواند Private Key را روی سیستم خودت محافظت کند.
———————————
8️⃣ فعال کردن SSH Key روی سرور
بعد از ساخت Key، باید Public Key را روی سرور قرار دهیم.
روش راحت:
بعد از وارد کردن Password، Public Key در فایل:
روی سرور قرار میگیرد.
——————————
9️⃣ اتصال با SSH Key
حالا:
SSH از Private Key موجود در سیستم Client استفاده میکند و Public Key موجود روی Server برای احراز هویت استفاده میشود.
ساختار:
در واقع Private Key به سرور ارسال نمیشود؛ کلاینت با آن در فرآیند احراز هویت اثبات میکند که کلید خصوصی مربوط به Public Key را در اختیار دارد.
—————————-
🔟 تغییر پورت SSH
فایل تنظیمات SSH Server:
باز کردن:
پیدا کردن:
و مثلاً تغییر به:
بعد بررسی تنظیمات:
اگر خطایی نداد، سرویس را Reload/Restart میکنیم:
در بعضی توزیعها نام سرویس:
است.
⚠️ نکته مهم
قبل از تغییر پورت روی سرور Remote، مطمئن شو Firewall هم پورت جدید را اجازه میدهد و Session فعلی SSH را تا زمان تست اتصال جدید نبند؛ وگرنه ممکن است دسترسی خودت را قطع کنی.
—————————-
1️⃣1️⃣ غیرفعال کردن Password Authentication 🔐
این همان چیزی است که پرسیدی.
وقتی مطمئن شدی SSH Key Login درست کار میکند، میتوانی Password Authentication را غیرفعال کنی.
فایل:
این گزینه را تنظیم کن:
سپس:
اگر Syntax صحیح بود:
یا در برخی سیستمها:
از این به بعد احراز هویت با Password برای SSH غیرفعال میشود و روشهای دیگری که در تنظیمات مجاز ماندهاند میتوانند استفاده شوند.
————————————
⭐️ گزینه مهم دیگر:
در بعضی سیستمها، فقط گذاشتن:
برای سیاست موردنظر کافی نیست؛ چون ممکن است احراز هویت تعاملی Keyboard/Challenge هنوز فعال باشد.
اگر هدفت این است که احراز هویت تعاملی رمز عبور هم غیرفعال شود، بسته به نسخه OpenSSH میتوانی:
را نیز تنظیم کنی.
در سیستمهای قدیمیتر ممکن است گزینهای مثل:
دیده شود.
پس برای Hardening باید روشهای Authentication فعال روی همان سیستم را بشناسی، نه اینکه فقط یک خط را کورکورانه تغییر بدهی.
————————-
1️⃣2️⃣ جلوگیری از Login مستقیم Root
یکی دیگر از تنظیمات مهم SSH:
در:
این باعث میشود Login مستقیم
مثلاً:
مدل امنتر:
بهجای:
—————————————-
🛡 SSH Hardening بهصورت خلاصه
برای یک سرور، معمولاً این موارد را بررسی میکنیم:
نکته: تغییر پورت 22 به یک پورت دیگر بهتنهایی یک کنترل امنیتی قوی نیست؛ بیشتر باعث کاهش اسکنهای خودکار و Noise میشود. کنترلهای اصلیتر، احراز هویت کلیدی، محدودسازی دسترسی و Hardening تنظیمات SSH هستند.
استفاده از ssh - SSH hardening
———————
1️⃣ چرا SSH؟
SSH = Secure Shell
برای اتصال امن و Remote به یک سیستم لینوکس استفاده میشود.
مثلاً از کامپیوتر خودمان:
ssh ali@192.168.1.100
به سرور وصل میشویم.
SSH ارتباط را رمزنگاری میکند؛ بنابراین اطلاعاتی مثل دستورات و اطلاعات احراز هویت در مسیر بهصورت ساده ارسال نمیشوند.
پورت پیشفرض SSH:
TCP/22
——————-
2️⃣ احراز هویت با Password
روش ساده:
ssh ali@192.168.1.100
بعد سیستم Password میخواهد:
ali@192.168.1.100's password:
اما برای سرورهای مهم، استفاده از SSH Key Authentication معمولاً امنتر و مناسبتر است.
————————-
3️⃣ SSH Key چیست؟
SSH از یک جفت کلید استفاده میکند:
Public Key
+
Private Key
به این مدل میگوییم:
Public/Private Key Pair
———————-
4️⃣ Private Key 🔴
Private Key باید محرمانه بماند.
مثلاً:
~/.ssh/id_ed25519
یا در بعضی سیستمها:
~/.ssh/id_rsa
⚠️ Private Key را نباید برای کسی ارسال کنیم.
مثلاً:
❌ Telegram
❌ GitHub
❌ ارسال برای شخص دیگر
———————
5️⃣ Public Key 🟢
Public Key برخلاف Private Key میتواند روی سرور مقصد قرار بگیرد.
مثلاً:
~/.ssh/id_ed25519.pub
ساختار کلی:
Client
│
├── Private Key 🔴
│
└── Public Key 🟢
↓
Server
Private Key روی Client میماند.
Public Key روی Server قرار میگیرد.
———————
6️⃣ ساخت SSH Key
در متن شما نوشته شده:
ssh-keyen
اما دستور صحیح:
ssh-keygen
مثلاً روش پیشنهادی امروزی:
ssh-keygen -t ed25519
بعد ممکن است بپرسد:
Enter file in which to save the key:
و سپس:
Enter passphrase:
——————-
7️⃣ Passphrase چیست؟
Passphrase یک رمز برای محافظت از Private Key است.
یعنی:
Private Key
↓
Passphrase
↓
استفاده امنتر از Key
پس دو مفهوم را قاطی نکن:
Password
رمز حساب کاربری روی سرور.
Passphrase
رمزی که میتواند Private Key را روی سیستم خودت محافظت کند.
———————————
8️⃣ فعال کردن SSH Key روی سرور
بعد از ساخت Key، باید Public Key را روی سرور قرار دهیم.
روش راحت:
ssh-copy-id ali@192.168.1.100
بعد از وارد کردن Password، Public Key در فایل:
~/.ssh/authorized_keys
روی سرور قرار میگیرد.
——————————
9️⃣ اتصال با SSH Key
حالا:
ssh ali@192.168.1.100
SSH از Private Key موجود در سیستم Client استفاده میکند و Public Key موجود روی Server برای احراز هویت استفاده میشود.
ساختار:
Client Server
Private Key 🔴 ────────→ Public Key 🟢
│
↓
authorized_keys
در واقع Private Key به سرور ارسال نمیشود؛ کلاینت با آن در فرآیند احراز هویت اثبات میکند که کلید خصوصی مربوط به Public Key را در اختیار دارد.
—————————-
🔟 تغییر پورت SSH
فایل تنظیمات SSH Server:
/etc/ssh/sshd_config
باز کردن:
sudo nano /etc/ssh/sshd_config
پیدا کردن:
#Port 22
و مثلاً تغییر به:
Port 2222
بعد بررسی تنظیمات:
sudo sshd -t
اگر خطایی نداد، سرویس را Reload/Restart میکنیم:
sudo systemctl restart ssh
در بعضی توزیعها نام سرویس:
sudo systemctl restart sshd
است.
⚠️ نکته مهم
قبل از تغییر پورت روی سرور Remote، مطمئن شو Firewall هم پورت جدید را اجازه میدهد و Session فعلی SSH را تا زمان تست اتصال جدید نبند؛ وگرنه ممکن است دسترسی خودت را قطع کنی.
—————————-
1️⃣1️⃣ غیرفعال کردن Password Authentication 🔐
این همان چیزی است که پرسیدی.
وقتی مطمئن شدی SSH Key Login درست کار میکند، میتوانی Password Authentication را غیرفعال کنی.
فایل:
sudo nano /etc/ssh/sshd_config
این گزینه را تنظیم کن:
PasswordAuthentication no
سپس:
sudo sshd -t
اگر Syntax صحیح بود:
sudo systemctl reload ssh
یا در برخی سیستمها:
sudo systemctl reload sshd
از این به بعد احراز هویت با Password برای SSH غیرفعال میشود و روشهای دیگری که در تنظیمات مجاز ماندهاند میتوانند استفاده شوند.
————————————
⭐️ گزینه مهم دیگر:
KbdInteractiveAuthenticationدر بعضی سیستمها، فقط گذاشتن:
PasswordAuthentication no
برای سیاست موردنظر کافی نیست؛ چون ممکن است احراز هویت تعاملی Keyboard/Challenge هنوز فعال باشد.
اگر هدفت این است که احراز هویت تعاملی رمز عبور هم غیرفعال شود، بسته به نسخه OpenSSH میتوانی:
KbdInteractiveAuthentication no
را نیز تنظیم کنی.
در سیستمهای قدیمیتر ممکن است گزینهای مثل:
ChallengeResponseAuthentication no
دیده شود.
پس برای Hardening باید روشهای Authentication فعال روی همان سیستم را بشناسی، نه اینکه فقط یک خط را کورکورانه تغییر بدهی.
————————-
1️⃣2️⃣ جلوگیری از Login مستقیم Root
یکی دیگر از تنظیمات مهم SSH:
PermitRootLogin no
در:
/etc/ssh/sshd_config
این باعث میشود Login مستقیم
root از طریق SSH ممنوع شود.مثلاً:
PermitRootLogin no
PasswordAuthentication no
مدل امنتر:
User
↓
SSH Key
↓
Login
↓
sudo
↓
Administrative command
بهجای:
root
↓
Password
↓
SSH
—————————————-
🛡 SSH Hardening بهصورت خلاصه
برای یک سرور، معمولاً این موارد را بررسی میکنیم:
1. استفاده از SSH Key
2. Private Key را محرمانه نگه داشتن
3. استفاده از Passphrase
4. غیرفعال کردن Password Authentication در صورت امکان
5. بررسی KbdInteractiveAuthentication
6. جلوگیری از Root Login مستقیم
7. تغییر پورت در صورت نیاز
8. محدود کردن دسترسی Firewall
9. بررسی کاربران مجاز
10. نگهداری امن Private Key
نکته: تغییر پورت 22 به یک پورت دیگر بهتنهایی یک کنترل امنیتی قوی نیست؛ بیشتر باعث کاهش اسکنهای خودکار و Noise میشود. کنترلهای اصلیتر، احراز هویت کلیدی، محدودسازی دسترسی و Hardening تنظیمات SSH هستند.
فصل دهم- قسمت آخر - قسمت نود و نهم🐧
رمزنگاری فایل ها در لینوکس
———————
رمزنگاری فایلها در لینوکس با GPG
GPG = GNU Privacy Guard
یکی از ابزارهای معروف لینوکس برای:
رمزنگاری فایل
رمزگشایی فایل
ساخت کلید
امضای دیجیتال
بررسی امضای دیجیتال
است.
—————————
1️⃣ سناریوی عملی بین دو Host
فرض کنیم دو سرور داریم:
میخواهیم:
———————
2️⃣ روش اول: رمزنگاری با Password
این سادهترین روش GPG است.
روی Host 1 یک فایل بساز:
حالا رمزنگاری:
GPG از شما یک Password میخواهد.
بعد فایل زیر ساخته میشود:
حالا:
ممکن است ببینی:
———————-
3️⃣ انتقال فایل از Host 1 به Host 2
مثلاً با
روی Host 1:
حالا فایل رمزنگاریشده روی Host 2 قرار دارد.
—————————
4️⃣ رمزگشایی در Host 2
روی Host 2:
یا برای اینکه فایل خروجی را مشخص کنیم:
بعد:
و محتوای اصلی را میبینیم.
نکته مهم
در روش Symmetric:
بنابراین هر دو طرف باید رمز مشترک را داشته باشند.
——————————
5️⃣ روش دوم: Public Key / Private Key 🔐
این روش برای ارتباط Host 1 و Host 2 بسیار مهمتر است.
در این روش:
فرض کنیم:
ما میخواهیم Host 1 فایلی را برای Host 2 رمزنگاری کند.
——————-
6️⃣ ساخت Key در Host 2
روی Host 2:
GPG چند سؤال میپرسد، مثل:
در نهایت Key Pair ساخته میشود:
7️⃣ مشاهده کلیدها
برای مشاهده Public Key:
برای مشاهده Private Key:
پس:
8️⃣ Export کردن Public Key در Host 2
چون Host 1 باید Public Key مربوط به Host 2 را داشته باشد، روی Host 2:
یا میتوان از Key ID استفاده کرد.
فایل:
حالا میتوانیم آن را به Host 1 منتقل کنیم:
9️⃣ Import کردن Public Key در Host 1
روی Host 1:
بررسی:
حالا Host 1 Public Key مربوط به Host 2 را دارد.
————————————————-
🔟 رمزنگاری فایل در Host 1
فرض کنیم:
داریم.
روی Host 1:
یا کوتاهتر:
فایل جدید:
ساخته میشود.
چه اتفاقی افتاد؟
—————-
1️⃣1️⃣ انتقال فایل رمزنگاریشده به Host 2
حالا فایل رمزنگاریشده روی Host 2 است.
———————-
1️⃣2️⃣ رمزگشایی در Host 2
روی Host 2:
یا:
GPG از Private Key مربوط به Host 2 استفاده میکند.
اگر برای Private Key Passphrase تعیین کرده باشی، آن را میخواهد.
برای ذخیره خروجی:
حالا:
فایل اصلی را خواهیم داشت.
—————————————-
⭐️ نکته بسیار مهم
در رمزنگاری Public/Private:
پس:
——————————-
1️⃣3️⃣ چرا Private Key را منتقل نمیکنیم؟ 🔴
فرض کن Host 2 این را دارد:
این کلید نباید برای Host 1 ارسال شود.
Host 1 فقط باید داشته باشد:
بنابراین:
1️⃣4️⃣ یک نکته امنیتی خیلی مهم: اعتماد به Public Key
فقط اینکه یک Public Key را از Host 2 دریافت کردهای، لزوماً ثابت نمیکند که واقعاً متعلق به Host 2 است.
برای اطمینان میتوان Fingerprint کلید را بررسی کرد.
مثلاً:
Fingerprint را از یک کانال مورد اعتماد با Fingerprint واقعی مقایسه میکنیم.
————————
1️⃣5️⃣ امضای دیجیتال
GPG فقط برای Encrypt کردن نیست.
میتوانیم فایل را Sign کنیم.
مثلاً:
ممکن است فایلی مثل:
ایجاد شود.
طرف مقابل میتواند امضا را بررسی کند:
اینجا هدف اصلی:
نیست؛ بلکه:
است.
یعنی بتوانیم بررسی کنیم فایل تغییر نکرده و امضا با کلید مورد انتظار ایجاد شده است.
———————————-
🧠 تفاوت SSH و GPG
این دو را قاطی نکن:
SSH
برای:
مثلاً:
GPG
برای:
مثلاً:
رمزنگاری فایل ها در لینوکس
———————
رمزنگاری فایلها در لینوکس با GPG
GPG = GNU Privacy Guard
یکی از ابزارهای معروف لینوکس برای:
رمزنگاری فایل
رمزگشایی فایل
ساخت کلید
امضای دیجیتال
بررسی امضای دیجیتال
است.
—————————
1️⃣ سناریوی عملی بین دو Host
فرض کنیم دو سرور داریم:
Host 1 Host 2
------- -------
192.168.1.10 192.168.1.20
Sender Receiver
میخواهیم:
Host 1
│
│ فایل محرمانه
↓
GPG Encryption
│
↓
encrypted.gpg
│
│ انتقال
↓
Host 2
│
↓
GPG Decryption
│
↓
فایل اصلی
———————
2️⃣ روش اول: رمزنگاری با Password
این سادهترین روش GPG است.
روی Host 1 یک فایل بساز:
echo "This is a secret file" > secret.txt
حالا رمزنگاری:
gpg -c secret.txt
-c یعنی:symmetric encryption
GPG از شما یک Password میخواهد.
بعد فایل زیر ساخته میشود:
secret.txt.gpg
حالا:
ls
ممکن است ببینی:
secret.txt
secret.txt.gpg
———————-
3️⃣ انتقال فایل از Host 1 به Host 2
مثلاً با
scp:روی Host 1:
scp secret.txt.gpg user@192.168.1.20:/home/user/
حالا فایل رمزنگاریشده روی Host 2 قرار دارد.
—————————
4️⃣ رمزگشایی در Host 2
روی Host 2:
gpg -d secret.txt.gpg
-d یعنی:decrypt
یا برای اینکه فایل خروجی را مشخص کنیم:
gpg -o secret.txt -d secret.txt.gpg
بعد:
cat secret.txt
و محتوای اصلی را میبینیم.
نکته مهم
در روش Symmetric:
Host 1
│
│ Password
↓
Encrypt
↓
secret.txt.gpg
│
↓
Host 2
│
│ همان Password
↓
Decrypt
بنابراین هر دو طرف باید رمز مشترک را داشته باشند.
——————————
5️⃣ روش دوم: Public Key / Private Key 🔐
این روش برای ارتباط Host 1 و Host 2 بسیار مهمتر است.
در این روش:
Public Key → قابل انتشار
Private Key → محرمانه
فرض کنیم:
Host 2 = Receiver
Host 1 = Sender
ما میخواهیم Host 1 فایلی را برای Host 2 رمزنگاری کند.
——————-
6️⃣ ساخت Key در Host 2
روی Host 2:
gpg --full-generate-key
GPG چند سؤال میپرسد، مثل:
Key type
Key size
Expiration
Real name
Passphrase
در نهایت Key Pair ساخته میشود:
Public Key
Private Key
7️⃣ مشاهده کلیدها
برای مشاهده Public Key:
gpg --list-keys
برای مشاهده Private Key:
gpg --list-secret-keys
پس:
gpg --list-keys
→ Public Keys
gpg --list-secret-keys
→ Secret/Private Keys
8️⃣ Export کردن Public Key در Host 2
چون Host 1 باید Public Key مربوط به Host 2 را داشته باشد، روی Host 2:
gpg --export --armor user@example.com > host2-public.asc
یا میتوان از Key ID استفاده کرد.
--armor باعث میشود خروجی به شکل متنی ASCII قابل انتقال باشد.فایل:
host2-public.asc
حالا میتوانیم آن را به Host 1 منتقل کنیم:
scp host2-public.asc user@192.168.1.10:/home/user/
9️⃣ Import کردن Public Key در Host 1
روی Host 1:
gpg --import host2-public.asc
بررسی:
gpg --list-keys
حالا Host 1 Public Key مربوط به Host 2 را دارد.
————————————————-
🔟 رمزنگاری فایل در Host 1
فرض کنیم:
secret.txt
داریم.
روی Host 1:
gpg --encrypt --recipient user@example.com secret.txt
یا کوتاهتر:
gpg -e -r user@example.com secret.txt
فایل جدید:
secret.txt.gpg
ساخته میشود.
چه اتفاقی افتاد؟
Host 1
secret.txt
│
↓
Public Key مربوط به Host 2
│
↓
Encryption
│
↓
secret.txt.gpg
—————-
1️⃣1️⃣ انتقال فایل رمزنگاریشده به Host 2
scp secret.txt.gpg user@192.168.1.20:/home/user/
حالا فایل رمزنگاریشده روی Host 2 است.
———————-
1️⃣2️⃣ رمزگشایی در Host 2
روی Host 2:
gpg --decrypt secret.txt.gpg
یا:
gpg -d secret.txt.gpg
GPG از Private Key مربوط به Host 2 استفاده میکند.
اگر برای Private Key Passphrase تعیین کرده باشی، آن را میخواهد.
برای ذخیره خروجی:
gpg -o secret.txt -d secret.txt.gpg
حالا:
cat secret.txt
فایل اصلی را خواهیم داشت.
—————————————-
⭐️ نکته بسیار مهم
در رمزنگاری Public/Private:
رمزنگاری:
Public Key گیرنده
↓
Encrypt
رمزگشایی:
Private Key گیرنده
↓
Decrypt
پس:
با Public Key رمزنگاری میکنیم و با Private Key متناظر رمزگشایی میکنیم.
——————————-
1️⃣3️⃣ چرا Private Key را منتقل نمیکنیم؟ 🔴
فرض کن Host 2 این را دارد:
Private Key 🔴
این کلید نباید برای Host 1 ارسال شود.
Host 1 فقط باید داشته باشد:
Public Key 🟢
بنابراین:
Host 2
├── Public Key → میتواند به Host 1 بدهد
└── Private Key → محرمانه، فقط Host 2
1️⃣4️⃣ یک نکته امنیتی خیلی مهم: اعتماد به Public Key
فقط اینکه یک Public Key را از Host 2 دریافت کردهای، لزوماً ثابت نمیکند که واقعاً متعلق به Host 2 است.
برای اطمینان میتوان Fingerprint کلید را بررسی کرد.
مثلاً:
gpg --fingerprint user@example.com
Fingerprint را از یک کانال مورد اعتماد با Fingerprint واقعی مقایسه میکنیم.
————————
1️⃣5️⃣ امضای دیجیتال
GPG فقط برای Encrypt کردن نیست.
میتوانیم فایل را Sign کنیم.
مثلاً:
gpg --detach-sign file.txt
ممکن است فایلی مثل:
file.txt.sig
ایجاد شود.
طرف مقابل میتواند امضا را بررسی کند:
gpg --verify file.txt.sig file.txt
اینجا هدف اصلی:
Confidentiality ❌
نیست؛ بلکه:
Integrity
+
Authenticity
است.
یعنی بتوانیم بررسی کنیم فایل تغییر نکرده و امضا با کلید مورد انتظار ایجاد شده است.
———————————-
🧠 تفاوت SSH و GPG
این دو را قاطی نکن:
SSH
برای:
Remote Login
Secure Connection
Authentication
مثلاً:
ssh user@server
GPG
برای:
File Encryption
File Decryption
Digital Signature
Key Management
مثلاً:
gpg -e -r user@example.com secret.txt
خب خب فصل 10 هم تمام شد
الپیک 1 که به دو قسمت 101 و 102 بود کلا تمام شد
به امید خدا از فردا پایتون مقدماتی رو استارت میزنیم
الپیک 1 که به دو قسمت 101 و 102 بود کلا تمام شد
به امید خدا از فردا پایتون مقدماتی رو استارت میزنیم
❤1🔥1🎉1
دوتا دوره تمام شده به ترتیب
👇👇👇👇
1️⃣: دوره نتورک پلاس از اول
———————————————————
———————————————————
2️⃣: دوره الپیک1 از اول
———————————————————
———————————————————
3️⃣: دوره پایتون مقدماتی
———————————————————
———————————————————
4️⃣: دوره MCSA
👇👇👇👇
1️⃣: دوره نتورک پلاس از اول
———————————————————
———————————————————
2️⃣: دوره الپیک1 از اول
———————————————————
———————————————————
3️⃣: دوره پایتون مقدماتی
———————————————————
———————————————————
4️⃣: دوره MCSA
Telegram
My folder vip
شروع درس نتورک پلاس
انواع شبکه از کوچک به بزرگ
| نام | مخفف | محدوده |
| --- | ------------------------- | ------------------- |
| PAN | Personal Area Network | چند متر |
| LAN | Local Area Network …
انواع شبکه از کوچک به بزرگ
| نام | مخفف | محدوده |
| --- | ------------------------- | ------------------- |
| PAN | Personal Area Network | چند متر |
| LAN | Local Area Network …
❤2
فصل اول - دوره پایتون مقدماتی - برنامه نویسی چیست؟
————————————-
1. برنامهنویسی چیست؟
خیلی ساده:
برنامهنویسی یعنی نوشتن دستوراتی که کامپیوتر بتواند آنها را اجرا کند.
مثلاً به کامپیوتر میگوییم:
کامپیوتر باید بفهمد:
خروجی:
————————
2. کامپیوتر چطور دستور ما را میفهمد؟
اینجا میرسیم به مهمترین قسمت:
کامپیوتر در پایینترین سطح با 0 و 1 کار میکند.
به اینها میگوییم:
Binary / باینری
مثلاً:
برای کامپیوتر این یک الگوی بیت است که میتواند معنای مشخصی داشته باشد.
اما ما انسانها نمیخواهیم برای انجام هر کاری 0 و 1 بنویسیم 😂
مثلاً تصور کن بخواهی برای جمع 1 و 2 مستقیماً دستورهای ماشین را بنویسی!
پس زبانهای برنامهنویسی به وجود آمدند.
ما مینویسیم:
و ابزارهای مختلف آن را به چیزی تبدیل میکنند که کامپیوتر بتواند اجرا کند.
—————————-
3. اصلاً برنامهنویسی چطور به وجود آمد؟
در ابتدا برنامهنویسی خیلی نزدیک به زبان ماشین بود.
بعد زبانهای سطح پایینتر مثل Assembly به وجود آمدند.
بعد زبانهای سطح بالاتر ایجاد شدند؛ مثل:
C
C++
Java
Python
JavaScript
و...
هدف این بود که انسان بتواند به شکل سادهتری به کامپیوتر دستور بدهد.
مثلاً به جای کار مستقیم با دستورهای ماشین، در Python مینویسیم:
————————-
4. کامپایلر چیست؟ 🛠
Compiler (کامپایلر) برنامهای است که کد منبع ما را قبل از اجرا، به کدی تبدیل میکند که ماشین بتواند اجرا کند.
به شکل ساده:
مثلاً در زبان C:
کامپایلر کد را بررسی و ترجمه میکند و در نهایت معمولاً یک فایل اجرایی تولید میشود.
نکته مهمی که استاد گفت:
اگر در مرحله کامپایل خطای جدی وجود داشته باشد، معمولاً برنامه اجرایی ساخته نمیشود یا نسخه قابلاجرای جدید تولید نمیشود.
مثلاً:
کد اشتباه است.
کامپایلر خطا میدهد و باید آن را اصلاح کنیم.
——————————
5. Interpreter یا مفسر چیست؟ 🧠
Interpreter (مفسر) روشی/برنامهای است که کد را هنگام اجرا تفسیر میکند.
به صورت ساده:
مثلاً در Python وقتی مینویسیم:
مفسر Python این دستور را پردازش میکند تا اجرا شود.
یک نکته مهم ⚠️
این جمله که:
برای آموزش مقدماتی بد نیست، ولی کاملاً دقیق نیست.
Python را هم نباید صرفاً «یک زبان کاملاً Interpreter شده» در نظر گرفت؛ پیادهسازی استاندارد CPython ابتدا کد Python را به Bytecode تبدیل میکند و سپس ماشین مجازی Python آن را اجرا میکند.
پس فعلاً این مدل ذهنی را داشته باش:
—————————————-
6. Python چیست؟ 🐍
Python یک زبان برنامهنویسی سطح بالا، عمومی و چندمنظوره است.
یعنی با آن میتوانیم کارهای مختلفی انجام دهیم:
🌐 Web Development
ساخت وبسایت و API
📊 Data Analysis
تحلیل داده
🤖 Artificial Intelligence
هوش مصنوعی و Machine Learning
🛡 Cyber Security
اتوماسیون امنیتی، تحلیل لاگ، کار با شبکه، ساخت ابزار و...
⚙️ Automation
خودکارسازی کارهای تکراری
———————————-
7. Python را چه کسی ساخت؟
Python توسط:
Guido van Rossum
ساخته شد.
5
توسعه Python در اواخر دهه 1980 شروع شد و اولین انتشار عمومی آن در سال 1991 انجام شد.
اسم Python هم از مار گرفته نشده 😄؛ نامگذاری آن به برنامه طنز بریتانیایی Monty Python's Flying Circus مربوط است.
———————————
8. Python روی چه پلتفرمهایی کار میکند؟
Python تقریباً روی تمام سیستمعاملهای اصلی قابل استفاده است:
🪟 Windows
🐧 Linux
🍎 macOS
و پلتفرمهای دیگر
یعنی مثلاً اگر روی Ubuntu کار کنی:
و روی Windows Python نصب کرده باشی، میتوانی از آن استفاده کنی.
این موضوع برای مسیر امنیتی تو خیلی مهم است، چون بعداً همزمان با Linux + Python + Network کار خواهیم کرد.
—————————-
9. Library چیست؟ 📚
Library یا کتابخانه مجموعهای از کدهای آماده است که دیگران نوشتهاند و ما میتوانیم در برنامه خودمان استفاده کنیم.
مثلاً به جای اینکه خودمان از صفر همه الگوریتمهای ریاضی را بنویسیم، میتوانیم از کتابخانه استفاده کنیم.
مثلاً:
خروجی:
——————————
10. دو Library مهم در هوش مصنوعی 🤖
اگر بخواهیم دو مورد خیلی معروف را نام ببریم:
① NumPy
برای محاسبات عددی و کار با آرایهها بسیار مهم است.
② PyTorch
یکی از مهمترین کتابخانهها/فریمورکهای یادگیری ماشین و Deep Learning است.
البته در AI کتابخانههای مهم دیگری مثل TensorFlow و scikit-learn هم داریم.
————————————
11. Python در تحلیل داده 📊
اینجا اسم مهمی که استاد گفت:
Pandas
Pandas برای کار با دادههای جدولی و تحلیل داده بسیار پرکاربرد است.
مثلاً:
بعد میتوانیم اطلاعات یک فایل CSV را بخوانیم:
و دادهها را تحلیل کنیم.
مثلاً:
Pandas کمک میکند با چنین دادههایی راحت کار کنیم.
———————————
12. Python در Cyber Security 🛡
این قسمت برای مسیر خودت خیلی مهمه.
Python در امنیت سایبری کاربردهای زیادی دارد.
مثلاً:
🔎 Network
کار با IP، Port و Socket
📄 Log Analysis
تحلیل لاگهای سیستم و سرور.
⚙️ Automation
مثلاً به جای اینکه 100 سرور را دستی بررسی کنیم، اسکریپتی بنویسیم که این کار را انجام دهد.
🌐 HTTP
کار با Web/API:
🔐 Security Tools
ساخت ابزارهای ساده برای:
بررسی سرویسها
تحلیل فایلها
پردازش لاگ
اتوماسیون تستهای امنیتی مجاز
Network Automation
اینجاست که Network+ + Linux + Python کنار هم خیلی ارزشمند میشوند.
———————-
13. Python را از کجا دانلود کنیم؟
بهترین و امنترین منبع:
سایت رسمی Python
python.org
برای Windows معمولاً از بخش Downloads نسخه مناسب را دریافت میکنی.
هنگام نصب روی Windows یک گزینه بسیار مهم وجود دارد:
✅ بهتر است آن را فعال کنی.
بعد از نصب میتوانی در CMD بررسی کنی:
یا:
مثلاً:
————————————-
1. برنامهنویسی چیست؟
خیلی ساده:
برنامهنویسی یعنی نوشتن دستوراتی که کامپیوتر بتواند آنها را اجرا کند.
مثلاً به کامپیوتر میگوییم:
print(1 + 2)
کامپیوتر باید بفهمد:
عدد اول 1 است،
عملگر
+یعنی جمع،
عدد دوم 2 است،
نتیجه میشود 3،
و آن را نمایش بده.
خروجی:
3
————————
2. کامپیوتر چطور دستور ما را میفهمد؟
اینجا میرسیم به مهمترین قسمت:
کامپیوتر در پایینترین سطح با 0 و 1 کار میکند.
به اینها میگوییم:
Binary / باینری
مثلاً:
01000001
برای کامپیوتر این یک الگوی بیت است که میتواند معنای مشخصی داشته باشد.
اما ما انسانها نمیخواهیم برای انجام هر کاری 0 و 1 بنویسیم 😂
مثلاً تصور کن بخواهی برای جمع 1 و 2 مستقیماً دستورهای ماشین را بنویسی!
پس زبانهای برنامهنویسی به وجود آمدند.
ما مینویسیم:
1 + 2
و ابزارهای مختلف آن را به چیزی تبدیل میکنند که کامپیوتر بتواند اجرا کند.
—————————-
3. اصلاً برنامهنویسی چطور به وجود آمد؟
در ابتدا برنامهنویسی خیلی نزدیک به زبان ماشین بود.
بعد زبانهای سطح پایینتر مثل Assembly به وجود آمدند.
بعد زبانهای سطح بالاتر ایجاد شدند؛ مثل:
C
C++
Java
Python
JavaScript
و...
هدف این بود که انسان بتواند به شکل سادهتری به کامپیوتر دستور بدهد.
مثلاً به جای کار مستقیم با دستورهای ماشین، در Python مینویسیم:
x = 10
y = 20
print(x + y)
————————-
4. کامپایلر چیست؟ 🛠
Compiler (کامپایلر) برنامهای است که کد منبع ما را قبل از اجرا، به کدی تبدیل میکند که ماشین بتواند اجرا کند.
به شکل ساده:
Source Code
↓
Compiler
↓
Machine Code / Executable
↓
CPU
مثلاً در زبان C:
printf("Hello");کامپایلر کد را بررسی و ترجمه میکند و در نهایت معمولاً یک فایل اجرایی تولید میشود.
نکته مهمی که استاد گفت:
اگر در مرحله کامپایل خطای جدی وجود داشته باشد، معمولاً برنامه اجرایی ساخته نمیشود یا نسخه قابلاجرای جدید تولید نمیشود.
مثلاً:
int x = ;
کد اشتباه است.
کامپایلر خطا میدهد و باید آن را اصلاح کنیم.
——————————
5. Interpreter یا مفسر چیست؟ 🧠
Interpreter (مفسر) روشی/برنامهای است که کد را هنگام اجرا تفسیر میکند.
به صورت ساده:
Source Code
↓
Interpreter
↓
اجرا
مثلاً در Python وقتی مینویسیم:
print("Hello")مفسر Python این دستور را پردازش میکند تا اجرا شود.
یک نکته مهم ⚠️
این جمله که:
«کامپایلر اگر خروجی خوب نشه اجرا نمیکنه ولی Interpreter اجرا میکنه»
برای آموزش مقدماتی بد نیست، ولی کاملاً دقیق نیست.
Python را هم نباید صرفاً «یک زبان کاملاً Interpreter شده» در نظر گرفت؛ پیادهسازی استاندارد CPython ابتدا کد Python را به Bytecode تبدیل میکند و سپس ماشین مجازی Python آن را اجرا میکند.
پس فعلاً این مدل ذهنی را داشته باش:
C
Source → Compiler → Executable → CPU
Python
Source → Python Interpreter/Runtime → Execution
—————————————-
6. Python چیست؟ 🐍
Python یک زبان برنامهنویسی سطح بالا، عمومی و چندمنظوره است.
یعنی با آن میتوانیم کارهای مختلفی انجام دهیم:
🌐 Web Development
ساخت وبسایت و API
📊 Data Analysis
تحلیل داده
🤖 Artificial Intelligence
هوش مصنوعی و Machine Learning
🛡 Cyber Security
اتوماسیون امنیتی، تحلیل لاگ، کار با شبکه، ساخت ابزار و...
⚙️ Automation
خودکارسازی کارهای تکراری
———————————-
7. Python را چه کسی ساخت؟
Python توسط:
Guido van Rossum
ساخته شد.
5
توسعه Python در اواخر دهه 1980 شروع شد و اولین انتشار عمومی آن در سال 1991 انجام شد.
اسم Python هم از مار گرفته نشده 😄؛ نامگذاری آن به برنامه طنز بریتانیایی Monty Python's Flying Circus مربوط است.
———————————
8. Python روی چه پلتفرمهایی کار میکند؟
Python تقریباً روی تمام سیستمعاملهای اصلی قابل استفاده است:
🪟 Windows
🐧 Linux
🍎 macOS
و پلتفرمهای دیگر
یعنی مثلاً اگر روی Ubuntu کار کنی:
python3
و روی Windows Python نصب کرده باشی، میتوانی از آن استفاده کنی.
این موضوع برای مسیر امنیتی تو خیلی مهم است، چون بعداً همزمان با Linux + Python + Network کار خواهیم کرد.
—————————-
9. Library چیست؟ 📚
Library یا کتابخانه مجموعهای از کدهای آماده است که دیگران نوشتهاند و ما میتوانیم در برنامه خودمان استفاده کنیم.
مثلاً به جای اینکه خودمان از صفر همه الگوریتمهای ریاضی را بنویسیم، میتوانیم از کتابخانه استفاده کنیم.
مثلاً:
import math
print(math.sqrt(25))
خروجی:
5.0
——————————
10. دو Library مهم در هوش مصنوعی 🤖
اگر بخواهیم دو مورد خیلی معروف را نام ببریم:
① NumPy
برای محاسبات عددی و کار با آرایهها بسیار مهم است.
import numpy as np
② PyTorch
یکی از مهمترین کتابخانهها/فریمورکهای یادگیری ماشین و Deep Learning است.
import torch
البته در AI کتابخانههای مهم دیگری مثل TensorFlow و scikit-learn هم داریم.
————————————
11. Python در تحلیل داده 📊
اینجا اسم مهمی که استاد گفت:
Pandas
Pandas برای کار با دادههای جدولی و تحلیل داده بسیار پرکاربرد است.
مثلاً:
import pandas as pd
بعد میتوانیم اطلاعات یک فایل CSV را بخوانیم:
data = pd.read_csv("users.csv")و دادهها را تحلیل کنیم.
مثلاً:
Name Age
Ali 25
Reza 30
Sara 22
Pandas کمک میکند با چنین دادههایی راحت کار کنیم.
———————————
12. Python در Cyber Security 🛡
این قسمت برای مسیر خودت خیلی مهمه.
Python در امنیت سایبری کاربردهای زیادی دارد.
مثلاً:
🔎 Network
کار با IP، Port و Socket
import socket
📄 Log Analysis
تحلیل لاگهای سیستم و سرور.
⚙️ Automation
مثلاً به جای اینکه 100 سرور را دستی بررسی کنیم، اسکریپتی بنویسیم که این کار را انجام دهد.
🌐 HTTP
کار با Web/API:
import requests
🔐 Security Tools
ساخت ابزارهای ساده برای:
بررسی سرویسها
تحلیل فایلها
پردازش لاگ
اتوماسیون تستهای امنیتی مجاز
Network Automation
اینجاست که Network+ + Linux + Python کنار هم خیلی ارزشمند میشوند.
———————-
13. Python را از کجا دانلود کنیم؟
بهترین و امنترین منبع:
سایت رسمی Python
python.org
برای Windows معمولاً از بخش Downloads نسخه مناسب را دریافت میکنی.
هنگام نصب روی Windows یک گزینه بسیار مهم وجود دارد:
Add Python to PATH
✅ بهتر است آن را فعال کنی.
بعد از نصب میتوانی در CMD بررسی کنی:
python --version
یا:
py --version
مثلاً:
Python 3.x.x
Python.org
Welcome to Python.org
The official home of the Python Programming Language
❤1
فصل دوم - پایتون مقدماتی - نصب پایتون در VSCODE
————————————-
🐍 فصل دوم — نصب و راهاندازی Python در VS Code
1. VS Code چیست؟
Visual Studio Code (VS Code) یک ویرایشگر کد است که برای نوشتن و اجرای برنامهها استفاده میشود.
ما میتوانیم داخلش کد Python بنویسیم، اجرا کنیم، خطاها را ببینیم و پروژههایمان را مدیریت کنیم.
———————-
2. چیزهایی که نیاز داریم
برای شروع فقط دو چیز لازم داریم:
🐍 Python
خود زبان و محیط اجرای Python
💻 VS Code
محیطی که داخل آن کد مینویسیم.
——————————-
3. نصب Python
اول Python را از سایت رسمی دانلود میکنیم:
دانلود Python از سایت رسمی
در Windows نسخه مناسب را دانلود کن.
هنگام نصب، این گزینه را حتماً تیک بزن:
بعد:
را بزن.
————————-
4. بررسی نصب Python
بعد از نصب، CMD را باز کن و بزن:
اگر درست نصب شده باشد، چیزی شبیه این میبینی:
همچنین میتوانی بزن:
——————-
5. نصب VS Code
حالا VS Code را دانلود میکنیم:
دانلود Visual Studio Code از سایت رسمی
نسخه Windows را دانلود و نصب کن.
در هنگام نصب، اگر گزینههایی مثل اضافه کردن VS Code به PATH یا Open with Code را دیدی، فعال کردنشان میتواند کار با VS Code را راحتتر کند.
—————————-
6. اتصال Python به VS Code 🔗
حالا VS Code را باز کن.
از سمت چپ وارد:
Extensions
شو.
یا کلیدهای زیر را بزن:
در قسمت Search بنویس:
افزونه رسمی Python منتشرشده توسط Microsoft را نصب کن.
این افزونه امکاناتی مثل:
اجرای Python
تشخیص خطا
پیشنهاد کد
Debug
انتخاب Interpreter
را در اختیارمان قرار میدهد.
———————————
7. انتخاب Python Interpreter
این قسمت خیلی مهمه.
در VS Code:
را بزن.
بعد جستجو کن:
روی آن کلیک کن.
حالا نسخه Python نصبشده روی سیستم را انتخاب کن.
مثلاً:
یا هر نسخهای که نصب کردهای.
Interpreter یعنی چی؟
خیلی ساده:
Interpreter همان برنامهای است که کد Python ما را اجرا میکند.
مثلاً ممکن است روی سیستم چند Python داشته باشیم:
با Select Interpreter به VS Code میگوییم:
———————————-
8. ساخت اولین پروژه 🐍
یک پوشه بساز، مثلاً:
بعد در VS Code:
و پوشه
حالا یک فایل جدید بساز:
پسوند:
یعنی این فایل، فایل Python است.
————————————
9. اولین برنامه Python 🎉
داخل
حالا میتوانی از دکمه ▶️ بالای صفحه آن را اجرا کنی.
خروجی:
————————-
10. اجرای Python از Terminal
میتوانیم بدون دکمه Run هم برنامه را اجرا کنیم.
در VS Code:
بعد بنویس:
خروجی:
این روش برای تو خیلی مهمه چون بعداً در Linux و Cyber Security زیاد با Terminal کار خواهیم کرد.
—————————-
11. یک تست سادهتر
فایل
اجرا کن:
خروجی:
🎯 این یعنی ارتباط Python و VS Code درست انجام شده.
————————
⚠️ اگر Python در VS Code اجرا نشد
اول در Terminal بزن:
اگر Python پیدا نشد، احتمالاً مشکل PATH داریم.
اگر Python نصب است ولی VS Code نسخه اشتباهی را انتخاب کرده:
———————————-
————————————-
🐍 فصل دوم — نصب و راهاندازی Python در VS Code
1. VS Code چیست؟
Visual Studio Code (VS Code) یک ویرایشگر کد است که برای نوشتن و اجرای برنامهها استفاده میشود.
ما میتوانیم داخلش کد Python بنویسیم، اجرا کنیم، خطاها را ببینیم و پروژههایمان را مدیریت کنیم.
نکته: VS Code خودش Python نیست.
VS Code محیطی برای کار کردن با Python است و باید Python را جداگانه نصب کنیم.
———————-
2. چیزهایی که نیاز داریم
برای شروع فقط دو چیز لازم داریم:
🐍 Python
خود زبان و محیط اجرای Python
💻 VS Code
محیطی که داخل آن کد مینویسیم.
——————————-
3. نصب Python
اول Python را از سایت رسمی دانلود میکنیم:
دانلود Python از سایت رسمی
در Windows نسخه مناسب را دانلود کن.
هنگام نصب، این گزینه را حتماً تیک بزن:
☑️ Add python.exe to PATH
بعد:
Install Now
را بزن.
————————-
4. بررسی نصب Python
بعد از نصب، CMD را باز کن و بزن:
python --version
اگر درست نصب شده باشد، چیزی شبیه این میبینی:
Python 3.x.x
همچنین میتوانی بزن:
py --version
——————-
5. نصب VS Code
حالا VS Code را دانلود میکنیم:
دانلود Visual Studio Code از سایت رسمی
نسخه Windows را دانلود و نصب کن.
در هنگام نصب، اگر گزینههایی مثل اضافه کردن VS Code به PATH یا Open with Code را دیدی، فعال کردنشان میتواند کار با VS Code را راحتتر کند.
—————————-
6. اتصال Python به VS Code 🔗
حالا VS Code را باز کن.
از سمت چپ وارد:
Extensions
شو.
یا کلیدهای زیر را بزن:
Ctrl + Shift + X
در قسمت Search بنویس:
Python
افزونه رسمی Python منتشرشده توسط Microsoft را نصب کن.
این افزونه امکاناتی مثل:
اجرای Python
تشخیص خطا
پیشنهاد کد
Debug
انتخاب Interpreter
را در اختیارمان قرار میدهد.
———————————
7. انتخاب Python Interpreter
این قسمت خیلی مهمه.
در VS Code:
Ctrl + Shift + P
را بزن.
بعد جستجو کن:
Python: Select Interpreter
روی آن کلیک کن.
حالا نسخه Python نصبشده روی سیستم را انتخاب کن.
مثلاً:
Python 3.13.x
یا هر نسخهای که نصب کردهای.
Interpreter یعنی چی؟
خیلی ساده:
Interpreter همان برنامهای است که کد Python ما را اجرا میکند.
مثلاً ممکن است روی سیستم چند Python داشته باشیم:
Python 3.11
Python 3.12
Python 3.13
با Select Interpreter به VS Code میگوییم:
«برای اجرای این پروژه از این Python استفاده کن.»
———————————-
8. ساخت اولین پروژه 🐍
یک پوشه بساز، مثلاً:
Python-Course
بعد در VS Code:
File → Open Folder
و پوشه
Python-Course را انتخاب کن.حالا یک فایل جدید بساز:
hello.py
پسوند:
.py
یعنی این فایل، فایل Python است.
————————————
9. اولین برنامه Python 🎉
داخل
hello.py بنویس:print("Hello World")حالا میتوانی از دکمه ▶️ بالای صفحه آن را اجرا کنی.
خروجی:
Hello World
————————-
10. اجرای Python از Terminal
میتوانیم بدون دکمه Run هم برنامه را اجرا کنیم.
در VS Code:
Terminal → New Terminal
بعد بنویس:
python hello.py
خروجی:
Hello World
این روش برای تو خیلی مهمه چون بعداً در Linux و Cyber Security زیاد با Terminal کار خواهیم کرد.
—————————-
11. یک تست سادهتر
فایل
test.py بساز:name = "Ali"
age = 25
print(name)
print(age)
اجرا کن:
python test.py
خروجی:
Ali
25
🎯 این یعنی ارتباط Python و VS Code درست انجام شده.
————————
⚠️ اگر Python در VS Code اجرا نشد
اول در Terminal بزن:
python --version
اگر Python پیدا نشد، احتمالاً مشکل PATH داریم.
اگر Python نصب است ولی VS Code نسخه اشتباهی را انتخاب کرده:
Ctrl + Shift + P
↓
Python: Select Interpreter
↓
انتخاب Python صحیح
———————————-
Python.org
Download Python
The official home of the Python Programming Language
🐍 فصل دوم — پایتون مقدماتی — Variable و Data Type
——————————————
1. Variable یا متغیر چیست؟
خیلی ساده:
متغیر یک اسم برای نگهداری یک مقدار در حافظه است.
مثلاً:
اینجا:
یعنی به زبان ساده:
حالا هر وقت بنویسیم:
خروجی:
——————————
2. String چیست؟ 🔤
اگر چیزی داخل کوتیشن قرار بگیرد، Python آن را String در نظر میگیرد.
مثلاً:
یا:
هر دو String هستند.
حتی اگر داخل کوتیشن عدد بنویسیم:
این دیگر عدد نیست؛ String است.
پس:
عدد است.
اما:
رشته یا String است.
تفاوت خیلی مهم:
—————————————
3. Integer چیست؟ 🔢
عددهای صحیح بدون اعشار در Python از نوع:
Integer یا
هستند.
مثلاً:
همه
—————————
4. Float چیست؟ 🔢
اعداد اعشاری از نوع:
Float یا
هستند.
مثلاً:
——————————-
5. None چیست؟
گاهی میخواهیم بگوییم:
برای این کار از
حالا:
خروجی:
⚠️ یک نکته:
یعنی این دو متفاوتاند:
و:
اولی مقدار ویژه
——————————
6. نوع داده را چطور بفهمیم؟ 🔍
با تابع:
مثلاً:
خروجی:
یعنی
مثلاً:
خروجی:
و:
خروجی:
پس:
نوع داده متغیر
—————————————-
7. قوانین نامگذاری متغیرها
میتوانیم بنویسیم:
یا:
اما مثلاً این اشتباه است:
چون نام متغیر نباید با عدد شروع شود.
اما میتواند شامل عدد باشد:
نام متغیر میتواند شامل:
حروف
عدد
باشد.
مثلاً:
——————————-
8. بزرگ و کوچک بودن حروف مهم است ⚠️
Python به Case حساس است.
یعنی:
با:
متفاوت است.
حتی:
سه متغیر متفاوت هستند.
مثلاً:
خطا میگیریم، چون
———————————-
9. تبدیل Data Type یا Type Casting
حالا یکی از مهمترین قسمتهای این فصل 👇
فرض کن:
اگر بنویسیم:
❌ خطا میگیریم.
چرا؟
چون Python نمیتواند مستقیماً:
را انجام دهد.
———————————-
تبدیل String به Integer
میتوانیم از:
استفاده کنیم.
مثلاً:
اینجا:
مقدار
پس:
نتیجه:
——————————-
10. تبدیل موقت با
این نکتهای که استاد گفت خیلی مهمه.
وقتی مینویسیم:
فقط همان لحظه مقدار
خود
مثلاً:
خروجی:
—————————
11. تبدیل دائمی مقدار متغیر
اگر بخواهیم خود
مثلاً:
حالا خروجی:
یعنی مقدار جدید را دوباره داخل
این مفهوم را خوب یاد بگیر:
یعنی:
ولی:
یعنی:
————————-
——————————————
1. Variable یا متغیر چیست؟
خیلی ساده:
متغیر یک اسم برای نگهداری یک مقدار در حافظه است.
مثلاً:
age = 25
اینجا:
age → نام متغیر= → مقداردهی25 → مقدار متغیریعنی به زبان ساده:
مقدار 25 را در متغیری به نام
ageقرار بده.
حالا هر وقت بنویسیم:
print(age)
خروجی:
25
——————————
2. String چیست؟ 🔤
اگر چیزی داخل کوتیشن قرار بگیرد، Python آن را String در نظر میگیرد.
مثلاً:
name = "Ali"
یا:
name = 'Ali'
هر دو String هستند.
حتی اگر داخل کوتیشن عدد بنویسیم:
name = "25"
این دیگر عدد نیست؛ String است.
پس:
age = 25
عدد است.
اما:
age = "25"
رشته یا String است.
تفاوت خیلی مهم:
a = 10
b = "10"
a عدد است ولی b متن است.—————————————
3. Integer چیست؟ 🔢
عددهای صحیح بدون اعشار در Python از نوع:
Integer یا
intهستند.
مثلاً:
age = 25
score = 100
number = -10
همه
int هستند.—————————
4. Float چیست؟ 🔢
اعداد اعشاری از نوع:
Float یا
floatهستند.
مثلاً:
a = 4.6
b = 10.5
c = 3.14
——————————-
5. None چیست؟
گاهی میخواهیم بگوییم:
این متغیر فعلاً هیچ مقداری ندارد.
برای این کار از
None استفاده میکنیم:result = None
حالا:
print(result)
خروجی:
None
⚠️ یک نکته:
None به معنی String "None" نیست.یعنی این دو متفاوتاند:
result = None
و:
result = "None"
اولی مقدار ویژه
None است، دومی یک String است.——————————
6. نوع داده را چطور بفهمیم؟ 🔍
با تابع:
type()
مثلاً:
a = 4.6
print(type(a))
خروجی:
<class 'float'>
یعنی
a از نوع Float است.مثلاً:
a = 20
print(type(a))
خروجی:
<class 'int'>
و:
a = "Ali"
print(type(a))
خروجی:
<class 'str'>
پس:
type(a)
نوع داده متغیر
a را مشخص میکند.—————————————-
7. قوانین نامگذاری متغیرها
میتوانیم بنویسیم:
name = "Ali"
یا:
_name = "Ali"
اما مثلاً این اشتباه است:
2name = "Ali"
چون نام متغیر نباید با عدد شروع شود.
اما میتواند شامل عدد باشد:
name2 = "Ali"
نام متغیر میتواند شامل:
حروف
عدد
_باشد.
مثلاً:
user_name = "Ali"
age25 = 25
——————————-
8. بزرگ و کوچک بودن حروف مهم است ⚠️
Python به Case حساس است.
یعنی:
age = 25
با:
Age = 25
متفاوت است.
حتی:
name
Name
NAME
سه متغیر متفاوت هستند.
مثلاً:
age = 25
print(Age)
خطا میگیریم، چون
Age با age یکی نیست.———————————-
9. تبدیل Data Type یا Type Casting
حالا یکی از مهمترین قسمتهای این فصل 👇
فرض کن:
a = 20
b = "4"
a یک Integer است ولی b یک String.اگر بنویسیم:
print(a + b)
❌ خطا میگیریم.
چرا؟
چون Python نمیتواند مستقیماً:
Integer + String
را انجام دهد.
———————————-
تبدیل String به Integer
میتوانیم از:
int()
استفاده کنیم.
مثلاً:
a = 20
b = "4"
print(a + int(b))
اینجا:
int(b)
مقدار
"4" را به عدد 4 تبدیل میکند.پس:
20 + 4
نتیجه:
24
——————————-
10. تبدیل موقت با
int(b)این نکتهای که استاد گفت خیلی مهمه.
وقتی مینویسیم:
int(b)
فقط همان لحظه مقدار
b را به Integer تبدیل میکنیم.خود
b هنوز String است.مثلاً:
b = "4"
print(int(b))
print(type(b))
خروجی:
4
<class 'str'>
—————————
11. تبدیل دائمی مقدار متغیر
اگر بخواهیم خود
b از این به بعد Integer باشد:b = int(b)
مثلاً:
b = "4"
b = int(b)
print(type(b))
حالا خروجی:
<class 'int'>
یعنی مقدار جدید را دوباره داخل
b ذخیره کردیم.این مفهوم را خوب یاد بگیر:
int(b)
یعنی:
مقدار تبدیلشده را بده.
ولی:
b = int(b)
یعنی:
مقدار تبدیلشده را داخل خود
bذخیره کن.
————————-
🐍 فصل سوم — پایتون مقدماتی — عملگرها
—————————————-
Operator یا عملگر یعنی نمادی که به Python میگوید چه عملی روی دادهها انجام دهد.
مثلاً:
علامت
———————
1. عملگرهای حسابی — Arithmetic Operators
فرض کنیم:
جمع
خروجی:
——————————-
تفریق
خروجی:
——————
ضرب
خروجی:
————————-
تقسیم
خروجی:
⚠️ نکته مهم:
—————————
تقسیم صحیح
خروجی:
یعنی قسمت اعشاری را کنار میگذارد.
——————————-
باقیمانده
خروجی:
چون:
سه تا 3 میشود 9 و 1 باقی میماند.
این عملگر خیلی کاربردی است؛ مثلاً برای تشخیص زوج و فرد:
اگر نتیجه
—————————-
2. عملگرهای مقایسهای — Comparison Operators
اینجا نتیجه مقایسه همیشه یکی از این دو است:
مثلاً:
خروجی:
——————
یعنی:
⚠️ خیلی مهم:
با:
فرق دارد.
——————————-
یعنی:
یعنی:
مثلاً:
یعنی:
یعنی:
در جزوه نوشته بود:
❌ اشتباه است.
درست:
مثلاً:
—————————
3. نتیجه Comparison چه Data Typeای دارد؟
مثلاً:
خروجی:
نوع داده:
Boolean (
است.
Boolean فقط دو مقدار دارد:
———————-
4. Assignment Operators
Assignment یعنی مقداردهی یا تغییر مقدار متغیر.
مثلاً:
حالا:
یعنی:
پس:
خروجی:
———————
روش کوتاهتر
به جای:
میتوانیم بنویسیم:
یا
تفریق:
یا
ضرب:
یا
تقسیم:
یا
تقسیم صحیح:
یا
باقیمانده:
نتیجه یکی است.
———————————-
5. Logical Operators 🧠
این قسمت همان:
AND / OR / NOT
است.
این عملگرها معمولاً برای ترکیب چند شرط استفاده میشوند.
—————————
AND
مثلاً:
شرط اول:
شرط دوم:
پس:
خروجی:
مثال دیگر:
اینجا:
پس:
———————-
OR
مثلاً:
داریم:
چون یکی True است:
————————————
NOT
مثلاً:
اول:
پس:
بعد not آن را برعکس میکند:
not True → False
پس خروجی:
False
—————————————-
Operator یا عملگر یعنی نمادی که به Python میگوید چه عملی روی دادهها انجام دهد.
مثلاً:
x + y
علامت
+ یک عملگر است.———————
1. عملگرهای حسابی — Arithmetic Operators
فرض کنیم:
x = 10
y = 3
جمع
+print(x + y)
خروجی:
13
——————————-
تفریق
-print(x - y)
خروجی:
7
——————
ضرب
*print(x * y)
خروجی:
30
————————-
تقسیم
/print(x / y)
خروجی:
3.3333333333333335
⚠️ نکته مهم:
/ نتیجه را به صورت Float برمیگرداند.—————————
تقسیم صحیح
//print(x // y)
خروجی:
3
یعنی قسمت اعشاری را کنار میگذارد.
10 ÷ 3 = 3.333...
10 // 3 = 3
——————————-
باقیمانده
%print(x % y)
خروجی:
1
چون:
10 ÷ 3
سه تا 3 میشود 9 و 1 باقی میماند.
این عملگر خیلی کاربردی است؛ مثلاً برای تشخیص زوج و فرد:
number = 10
print(number % 2)
اگر نتیجه
0 باشد، عدد زوج است.—————————-
2. عملگرهای مقایسهای — Comparison Operators
اینجا نتیجه مقایسه همیشه یکی از این دو است:
True
False
مثلاً:
a = 8
b = 8
print(a == b)
خروجی:
True
——————
== برابر بودنa = 8
b = 8
print(a == b)
یعنی:
آیا a و b برابر هستند؟
⚠️ خیلی مهم:
=
با:
==
فرق دارد.
= برای Assignment است.== برای مقایسه است.——————————-
> بزرگترprint(a > b)
یعنی:
آیا a از b بزرگتر است؟
< کوچکترprint(a < b)
یعنی:
آیا a از b کوچکتر است؟
!= نابرابرa != b
مثلاً:
print(a != b)
یعنی:
آیا a و b با هم برابر نیستند؟
<= کوچکتر یا مساویprint(a <= b)
یعنی:
آیا a کوچکتر یا مساوی b است؟
>= بزرگتر یا مساویدر جزوه نوشته بود:
a => b
❌ اشتباه است.
درست:
a >= b
مثلاً:
print(a >= b)
—————————
3. نتیجه Comparison چه Data Typeای دارد؟
مثلاً:
a = 8
b = 8
c = a < b
print(c)
print(type(c))
خروجی:
False
<class 'bool'>
نوع داده:
Boolean (
bool)است.
Boolean فقط دو مقدار دارد:
True
False
———————-
4. Assignment Operators
Assignment یعنی مقداردهی یا تغییر مقدار متغیر.
مثلاً:
x = 10
حالا:
x = x + 5
یعنی:
10 + 5 = 15
پس:
print(x)
خروجی:
15
———————
روش کوتاهتر
به جای:
x = x + 5
میتوانیم بنویسیم:
x += 5
یا
تفریق:
x -= 5
یا
ضرب:
x *= 5
یا
تقسیم:
x /= 5
یا
تقسیم صحیح:
x //= 5
یا
باقیمانده:
x %= 5
نتیجه یکی است.
———————————-
5. Logical Operators 🧠
این قسمت همان:
AND / OR / NOT
است.
این عملگرها معمولاً برای ترکیب چند شرط استفاده میشوند.
—————————
AND
and یعنی:هر دو شرط باید True باشند.
مثلاً:
x = 5
print(x > 3 and x < 10)
شرط اول:
5 > 3 → True
شرط دوم:
5 < 10 → True
پس:
True AND True → True
خروجی:
True
مثال دیگر:
x = 5
print(x > 6 and x < 10)
اینجا:
5 > 6 → False
5 < 10 → True
پس:
False AND True → False
———————-
OR
or یعنی:حداقل یکی از شرطها True باشد.
مثلاً:
x = 5
print(x > 6 or x < 10)
داریم:
5 > 6 → False
5 < 10 → True
چون یکی True است:
False OR True → True
————————————
NOT
not نتیجه را برعکس میکند.مثلاً:
x = 5
print(not(x > 3 and x < 10))
اول:
x > 3 → True
x < 10 → True
پس:
True AND True → True
بعد not آن را برعکس میکند:
not True → False
پس خروجی:
False
🐍 فصل چهارم — پایتون مقدماتی — ورودی و خروجی ها
—————————————-
1. Output چیست؟
Output یعنی خروجی برنامه؛ یعنی برنامه اطلاعاتی را به کاربر نمایش دهد.
مهمترین دستور برای خروجی گرفتن:
مثلاً:
خروجی:
———————
2. Escape Character چیست؟ 🔤
گاهی میخواهیم داخل یک String کار خاصی انجام دهیم؛ مثلاً:
رفتن به خط بعد
ایجاد فاصله Tab
نمایش کوتیشن
نمایش
برای این کار از Escape Character استفاده میکنیم.
علامت اصلی آن:
است.
—————
مثلاً:
چون بیرون String از
اما اگر بخواهیم خود String با
خروجی:
———————
3.
خروجی:
یعنی:
——————-
4.
خروجی تقریباً:
یعنی:
———————
5.
به صورت پیشفرض
مثلاً:
خروجی:
اما میتوانیم رفتار پایان
خروجی:
چون به جای رفتن به خط بعد،
————————
6. Input چیست؟ ⌨️
Input یعنی گرفتن اطلاعات از کاربر.
برای این کار از:
استفاده میکنیم.
مثلاً:
برنامه منتظر میماند تا کاربر چیزی وارد کند.
—————————-
7. ذخیره کردن Input در Variable
اگر بخواهیم ورودی کاربر را نگه داریم:
حالا اطلاعات داخل متغیرها ذخیره شدهاند.
میتوانیم نمایششان بدهیم:
——————
⚠️ نکته خیلی مهم درباره input
هر چیزی که با
مثلاً:
اگر کاربر وارد کند:
مقدار
است.
نه:
پس اگر بخواهیم با آن محاسبات ریاضی انجام دهیم، باید تبدیلش کنیم.
_———————-
8. ساخت ماشینحساب ساده 🧮
در جزوهات نوشتی:
اما اینجا یک نکته مهم وجود دارد.
فرض کنیم کاربر وارد کند:
و:
چون هر دو String هستند:
میشود:
و نتیجه:
❌ نه 30!
————————
راه درست
باید ورودی را تبدیل کنیم:
اگر کاربر وارد کند:
خروجی:
اینجا:
یعنی:
_—————————-
9. f-string چیست؟ 🔥
یکی از بهترین روشهای نمایش متغیرها داخل متن، f-string است.
مثلاً:
خروجی:
قسمت مهم:
حرف
و متغیر را داخل:
قرار میدهیم.
_————————
10. روش قدیمیتر
در جزوهات این را هم داشتی:
اینجا:
این روش قدیمیتر است.
امروزه معمولاً f-string خواناتر و راحتتر است:
پس برای Python جدید، f-string را خوب یاد بگیر.
————————
11. ترکیب Input + تبدیل نوع داده
مثال کامل:
فرض کن کاربر وارد کند:
خروجی:
اینجا:
یعنی سن را به Integer تبدیل کردیم.
و:
یعنی نمره را به Float تبدیل کردیم.
—————————————-
1. Output چیست؟
Output یعنی خروجی برنامه؛ یعنی برنامه اطلاعاتی را به کاربر نمایش دهد.
مهمترین دستور برای خروجی گرفتن:
print()
مثلاً:
print("Hello Ali")خروجی:
Hello Ali
———————
2. Escape Character چیست؟ 🔤
گاهی میخواهیم داخل یک String کار خاصی انجام دهیم؛ مثلاً:
رفتن به خط بعد
ایجاد فاصله Tab
نمایش کوتیشن
نمایش
\برای این کار از Escape Character استفاده میکنیم.
علامت اصلی آن:
\
است.
—————
\" نمایش Double Quoteمثلاً:
print('ali reza "python" nima')چون بیرون String از
' استفاده کردهایم، مشکلی نداریم.اما اگر بخواهیم خود String با
" باشد:print("ali reza \"python\" nima")خروجی:
ali reza "python" nima
\" یعنی:این
"را به عنوان بخشی از متن در نظر بگیر.
———————
3.
\n رفتن به خط بعدprint('ali reza "python" \nnima')خروجی:
ali reza "python"
nima
یعنی:
\n = New Line
——————-
4.
\t ایجاد Tabprint('ali reza "python" \tnima')خروجی تقریباً:
ali reza "python" nima
یعنی:
\t = Tab
———————
5.
end در printبه صورت پیشفرض
print() بعد از نمایش متن به خط بعد میرود.مثلاً:
print("Ali")
print("Reza")خروجی:
Ali
Reza
اما میتوانیم رفتار پایان
print را با end تغییر دهیم:print("Ali", end=" . ")
print("Reza")خروجی:
Ali . Reza
چون به جای رفتن به خط بعد،
end مشخص کردهایم:end=" . "
————————
6. Input چیست؟ ⌨️
Input یعنی گرفتن اطلاعات از کاربر.
برای این کار از:
input()
استفاده میکنیم.
مثلاً:
input("Enter your name: ")برنامه منتظر میماند تا کاربر چیزی وارد کند.
—————————-
7. ذخیره کردن Input در Variable
اگر بخواهیم ورودی کاربر را نگه داریم:
first_name = input("Enter your name: ")
last_name = input("Enter your lastname: ")
age = input("Enter age: ")حالا اطلاعات داخل متغیرها ذخیره شدهاند.
میتوانیم نمایششان بدهیم:
print("Your name:", first_name)
print("Lastname:", last_name)
print("Your age:", age)——————
⚠️ نکته خیلی مهم درباره input
هر چیزی که با
input() دریافت میکنیم، به صورت String (str) وارد برنامه میشود.مثلاً:
age = input("Enter age: ")اگر کاربر وارد کند:
25
مقدار
age در واقع:"25"
است.
نه:
25
پس اگر بخواهیم با آن محاسبات ریاضی انجام دهیم، باید تبدیلش کنیم.
_———————-
8. ساخت ماشینحساب ساده 🧮
در جزوهات نوشتی:
x = input("num1")
y = input("num2")
print("my answer:", x + y)اما اینجا یک نکته مهم وجود دارد.
فرض کنیم کاربر وارد کند:
10
و:
20
چون هر دو String هستند:
x + y
میشود:
"10" + "20"
و نتیجه:
1020
❌ نه 30!
————————
راه درست
باید ورودی را تبدیل کنیم:
x = int(input("num1: "))
y = int(input("num2: "))
print("My answer:", x + y)اگر کاربر وارد کند:
10
20
خروجی:
My answer: 30
اینجا:
int(input())
یعنی:
ورودی را بگیر و آن را به Integer تبدیل کن.
_—————————-
9. f-string چیست؟ 🔥
یکی از بهترین روشهای نمایش متغیرها داخل متن، f-string است.
مثلاً:
name = "Ali"
age = 25
score = 19.7
print(f"name: {name} and age: {age} and score: {score}")
خروجی:
name: Ali and age: 25 and score: 19.7
قسمت مهم:
f"... {name} ..."حرف
f به Python میگوید:داخل این String ممکن است Expression یا Variable داشته باشیم.
و متغیر را داخل:
{ }قرار میدهیم.
_————————
10. روش قدیمیتر
%در جزوهات این را هم داشتی:
print("name: %s, age: %d" % (name, age))اینجا:
%s → String
%d → Integer
این روش قدیمیتر است.
امروزه معمولاً f-string خواناتر و راحتتر است:
print(f"name: {name}, age: {age}")پس برای Python جدید، f-string را خوب یاد بگیر.
————————
11. ترکیب Input + تبدیل نوع داده
مثال کامل:
name = input("Enter your name: ")
age = int(input("Enter your age: "))
score = float(input("Enter your score: "))
print(f"name: {name}")
print(f"age: {age}")
print(f"score: {score}")فرض کن کاربر وارد کند:
Ali
25
19.7
خروجی:
name: Ali
age: 25
score: 19.7
اینجا:
age = int(input(...))
یعنی سن را به Integer تبدیل کردیم.
و:
score = float(input(...))
یعنی نمره را به Float تبدیل کردیم.
🧠 یک مثال واقعی برای مسیر امنیت
فرض کن بعداً میخواهیم ابزار امنیتی بنویسیم که IP از کاربر بگیرد:
کاربر:
برنامه:
بعداً همین Input را میتوانیم وارد بخشهای شبکه، Socket و ابزارهای امنیتی کنیم. 🔥
فرض کن بعداً میخواهیم ابزار امنیتی بنویسیم که IP از کاربر بگیرد:
ip = input("Enter target IP: ")
print(f"Target IP is: {ip}")کاربر:
192.168.1.10
برنامه:
Target IP is: 192.168.1.10
بعداً همین Input را میتوانیم وارد بخشهای شبکه، Socket و ابزارهای امنیتی کنیم. 🔥
🔥1
🐍 فصل پنجم — پایتون مقدماتی — ساختار داده
—————————————-
1️⃣ لیست —
لیست را زمانی استفاده میکنیم که بخواهیم چند مقدار را کنار هم نگه داریم و امکان تغییر آنها را داشته باشیم.
مثلاً سن چند نفر:
هر عضو یک Index دارد.
⚠️ نکته مهم: شمارهگذاری از 0 شروع میشود.
پس:
خروجی:
و:
خروجی:
🔹 داخل List چه چیزی میتوانیم قرار دهیم؟
تقریباً هر نوع دادهای:
حتی میتوانیم لیست داخل لیست داشته باشیم.
2️⃣ اضافه کردن به List
اگر بخواهیم چیزی را به انتهای لیست اضافه کنیم:
اگر بخواهیم در یک Index مشخص چیزی اضافه کنیم:
یعنی
3️⃣ حذف از List
اگر Index را بدانیم:
عضو Index شماره 2 را حذف میکند.
اگر Index را ندانیم ولی خود مقدار را بدانیم:
اولین مقدار
پس تفاوت:
یعنی:
ولی:
یعنی:
—————————————
مثال کاربردی — محاسبه نمرات
فرض کنیم میخواهیم نمرات 4 درس را از کاربر بگیریم.
ولی یک نکته مهم وجود دارد.
ما اصلاً لازم نیست برای تعداد درسها عدد
از
———————————————
5️⃣ تابع
مثلاً:
خروجی:
بنابراین:
یعنی:
این روش بهتر است چون اگر بعداً 5 نمره داشتیم، لازم نیست
—————————
6️⃣ Tuple — تاپل
Tuple شبیه List است، اما یک تفاوت بسیار مهم دارد:
مثلاً:
میتوانیم:
اما نمیتوانیم بگوییم:
و Python خطا میدهد.
چرا Tuple؟
وقتی اطلاعاتی داریم که نباید تغییر کنند.
مثلاً:
اگر این اطلاعات قرار است ثابت باشند، Tuple انتخاب مناسبی است.
———————————-
7️⃣ Tuple Unpacking
یکی از قابلیتهای جالب Tuple، Unpacking است.
مثلاً:
میتوانیم مقدارها را جداگانه داخل متغیرها بریزیم:
حالا:
خروجی:
یعنی:
⚠️ تعداد متغیرها باید با تعداد مقادیر هماهنگ باشد.
مثلاً این اشتباه است:
چون 3 مقدار داریم ولی فقط 2 متغیر.
————————-
8️⃣ Packing
برعکس Unpacking را میتوانیم به شکل ساده Packing در نظر بگیریم.
یعنی چند مقدار را در یک Tuple قرار دهیم:
Python آن را به شکل Tuple در نظر میگیرد:
البته بهتر است برای خوانایی بنویسیم:
—————————
9️⃣ Set — مجموعه
Set برای نگهداری مجموعهای از دادهها استفاده میشود که:
ترتیب مشخصی ندارند
عضو تکراری نگه نمیدارند
قابل تغییر هستند
مثلاً:
نتیجه:
عدد
کاربرد واقعی
مثلاً از یک سیستم لاگ گرفتهایم و IPهای مختلف داریم:
اگر بخواهیم فقط IPهای منحصربهفرد را داشته باشیم، Set خیلی مناسب است.
—————————————-
🔟 اضافه کردن به Set
با
نتیجه:
1️⃣1️⃣ حذف از Set
عدد
اما اگر
اگر
اگر وجود نداشته باشد:
⚠️ در جزوهات
است.
1️⃣2️⃣ اجتماع Setها — Union
فرض کنیم:
با:
اجتماع دو مجموعه را میگیریم:
یعنی:
1️⃣3️⃣ اشتراک — Intersection
با:
اعضای مشترک را پیدا میکنیم.
نتیجه:
یعنی فقط چیزهایی که هم در A هستند و هم در B.
1️⃣4️⃣ تفاضل — Difference
یعنی:
نتیجه:
اما اگر بنویسیم:
نتیجه:
پس ترتیب مهم است.
1️⃣5️⃣ Dictionary — دیکشنری
دیکشنری یکی از مهمترین ساختارهای Python است.
در Dictionary اطلاعات به صورت:
ذخیره میشوند.
مثلاً:
اینجا:
1️⃣6️⃣ دسترسی به Dictionary
مثلاً:
خروجی:
یا:
خروجی:
————————————————
—————————————-
1️⃣ لیست —
listلیست را زمانی استفاده میکنیم که بخواهیم چند مقدار را کنار هم نگه داریم و امکان تغییر آنها را داشته باشیم.
مثلاً سن چند نفر:
ages = [20, 10, 1, 15, 16]
هر عضو یک Index دارد.
⚠️ نکته مهم: شمارهگذاری از 0 شروع میشود.
Index: 0 1 2 3 4
Value: 20 10 1 15 16
پس:
print(ages[0])
خروجی:
20
و:
print(ages[1])
خروجی:
10
🔹 داخل List چه چیزی میتوانیم قرار دهیم؟
تقریباً هر نوع دادهای:
data = [10, "Ali", 19.5, True]
حتی میتوانیم لیست داخل لیست داشته باشیم.
2️⃣ اضافه کردن به List
append()اگر بخواهیم چیزی را به انتهای لیست اضافه کنیم:
ages.append("Reza")2️⃣insert()اگر بخواهیم در یک Index مشخص چیزی اضافه کنیم:
ages.insert(0, "Zahra")
یعنی
"Zahra" را در Index شماره 0 قرار بده.3️⃣ حذف از List
pop()اگر Index را بدانیم:
ages.pop(2)
عضو Index شماره 2 را حذف میکند.
remove()اگر Index را ندانیم ولی خود مقدار را بدانیم:
ages.remove(10)
اولین مقدار
10 را پیدا میکند و حذف میکند.پس تفاوت:
ages.pop(2)
یعنی:
عضو شماره 2 را حذف کن.
ولی:
ages.remove(10)
یعنی:
مقدار 10 را پیدا کن و حذف کن.
—————————————
مثال کاربردی — محاسبه نمرات
فرض کنیم میخواهیم نمرات 4 درس را از کاربر بگیریم.
scores = []
score_1 = int(input("1 score: "))
score_2 = int(input("2 score: "))
score_3 = int(input("3 score: "))
score_4 = int(input("4 score: "))
scores.append(score_1)
scores.append(score_2)
scores.append(score_3)
scores.append(score_4)
result = score_1 + score_2 + score_3 + score_4
print(result / 4)
ولی یک نکته مهم وجود دارد.
ما اصلاً لازم نیست برای تعداد درسها عدد
4 را دستی بنویسیم.از
len() استفاده میکنیم.———————————————
5️⃣ تابع
len()len() تعداد اعضای یک ساختار داده را به ما میدهد.مثلاً:
scores = [18, 19, 20, 17]
print(len(scores))
خروجی:
4
بنابراین:
print(result / len(scores))
یعنی:
مجموع نمرات را بر تعداد نمرات تقسیم کن.
این روش بهتر است چون اگر بعداً 5 نمره داشتیم، لازم نیست
4 را دستی تغییر دهیم.—————————
6️⃣ Tuple — تاپل
Tuple شبیه List است، اما یک تفاوت بسیار مهم دارد:
Tuple بعد از ساخته شدن قابل تغییر نیست.
مثلاً:
colors = ("red", "blue", "white", "black")میتوانیم:
print(colors[0])
اما نمیتوانیم بگوییم:
colors[0] = "green"
و Python خطا میدهد.
چرا Tuple؟
وقتی اطلاعاتی داریم که نباید تغییر کنند.
مثلاً:
server_info = ("192.168.1.10", 22, "SSH")اگر این اطلاعات قرار است ثابت باشند، Tuple انتخاب مناسبی است.
———————————-
7️⃣ Tuple Unpacking
یکی از قابلیتهای جالب Tuple، Unpacking است.
مثلاً:
student = ("Ali", 25, 19.5)میتوانیم مقدارها را جداگانه داخل متغیرها بریزیم:
name, age, score = student
حالا:
print(name)
print(age)
print(score)
خروجی:
Ali
25
19.5
یعنی:
student
↓
("Ali", 25, 19.5)
↓ Unpacking
name = "Ali"
age = 25
score = 19.5
⚠️ تعداد متغیرها باید با تعداد مقادیر هماهنگ باشد.
مثلاً این اشتباه است:
name, age = ("Ali", 25, 19.5)چون 3 مقدار داریم ولی فقط 2 متغیر.
————————-
8️⃣ Packing
برعکس Unpacking را میتوانیم به شکل ساده Packing در نظر بگیریم.
یعنی چند مقدار را در یک Tuple قرار دهیم:
student = "Ali", 25, 19.5
Python آن را به شکل Tuple در نظر میگیرد:
("Ali", 25, 19.5)البته بهتر است برای خوانایی بنویسیم:
student = ("Ali", 25, 19.5)—————————
9️⃣ Set — مجموعه
Set برای نگهداری مجموعهای از دادهها استفاده میشود که:
ترتیب مشخصی ندارند
عضو تکراری نگه نمیدارند
قابل تغییر هستند
مثلاً:
numbers = {1, 2, 3, 4, 4, 5}نتیجه:
{1, 2, 3, 4, 5}عدد
4 فقط یک بار باقی میماند.کاربرد واقعی
مثلاً از یک سیستم لاگ گرفتهایم و IPهای مختلف داریم:
ips = {
"192.168.1.10",
"192.168.1.20",
"192.168.1.10",
"192.168.1.30"
}اگر بخواهیم فقط IPهای منحصربهفرد را داشته باشیم، Set خیلی مناسب است.
—————————————-
🔟 اضافه کردن به Set
با
add():numbers.add(6)
نتیجه:
{1, 2, 3, 4, 5, 6}1️⃣1️⃣ حذف از Set
remove()numbers.remove(2)
عدد
2 حذف میشود.اما اگر
2 در Set وجود نداشته باشد، خطا میدهد.discard()numbers.discard(7)
اگر
7 وجود داشته باشد، حذف میشود.اگر وجود نداشته باشد:
هیچ خطایی نمیدهد.
⚠️ در جزوهات
dicard نوشته شده؛ دستور صحیح:discard()
است.
1️⃣2️⃣ اجتماع Setها — Union
فرض کنیم:
a = {1, 2, 3, 4, 5}
b = {1, 3, 4, 5, 6, 9}با:
print(a | b)
اجتماع دو مجموعه را میگیریم:
{1, 2, 3, 4, 5, 6, 9}یعنی:
همه اعضای A و B، بدون تکرار.
1️⃣3️⃣ اشتراک — Intersection
با:
print(a & b)
اعضای مشترک را پیدا میکنیم.
نتیجه:
{1, 3, 4, 5}یعنی فقط چیزهایی که هم در A هستند و هم در B.
1️⃣4️⃣ تفاضل — Difference
print(a - b)
یعنی:
چیزهایی که در A هستند ولی در B نیستند.
نتیجه:
{2}اما اگر بنویسیم:
print(b - a)
نتیجه:
{6, 9}پس ترتیب مهم است.
1️⃣5️⃣ Dictionary — دیکشنری
دیکشنری یکی از مهمترین ساختارهای Python است.
در Dictionary اطلاعات به صورت:
key : value
ذخیره میشوند.
مثلاً:
student = {
"name": "Alireza",
"age": 20,
"score": 19.5
}اینجا:
key value
----------------
name Alireza
age 20
score 19.5
1️⃣6️⃣ دسترسی به Dictionary
مثلاً:
print(student["name"])
خروجی:
Alireza
یا:
print(student["age"])
خروجی:
20
————————————————
My folder vip
🐍 فصل پنجم — پایتون مقدماتی — ساختار داده —————————————- 1️⃣ لیست — list لیست را زمانی استفاده میکنیم که بخواهیم چند مقدار را کنار هم نگه داریم و امکان تغییر آنها را داشته باشیم. مثلاً سن چند نفر: ages = [20, 10, 1, 15, 16] هر عضو یک Index دارد. ⚠️ نکته…
1️⃣7️⃣
روش دیگر برای گرفتن مقدار:
خروجی:
تفاوت مهم این دو:
اگر
اما:
اگر وجود نداشته باشد، بهصورت پیشفرض:
برمیگرداند.
حتی میتوانیم مقدار جایگزین تعیین کنیم:
اگر
————————————
1️⃣8️⃣ تغییر مقدار Dictionary
مثلاً:
حالا:
میشود:
—————————-
1️⃣9️⃣ اضافه کردن Key جدید
مثلاً:
حالا Dictionary شامل
نکته جالب:
اگر Key از قبل وجود داشته باشد:
مقدار قبلی تغییر میکند.
اگر Key وجود نداشته باشد:
یک مورد جدید اضافه میشود.
——————————-
2️⃣0️⃣ حذف از Dictionary
با
Key و مقدار مربوط به آن حذف میشوند.
میتوانیم مقدار حذفشده را هم دریافت کنیم:
یعنی:
————————————
🔥 حالا مهمترین سؤال: کِی از کدام استفاده کنیم؟
این قسمت را خیلی خوب یاد بگیر:
🟢 List
وقتی:
مثلاً:
—————————
🔵 Tuple
وقتی:
مثلاً:
———————-
🟡 Set
وقتی:
مثلاً:
IP تکراری حذف میشود.
—————————————-
🔴 Dictionary
وقتی:
مثلاً:
خیلی راحت میتوانیم بگوییم:
——————————-
🧠 یک مثال امنیتی که هر 4 تا را با هم ببینیم
فرض کن اطلاعات یک سرور را داریم:
اینجا:
این دقیقاً جایی است که Data Structures در پروژههای واقعی شبکه و امنیت کاربرد پیدا میکند. 🔥
get()روش دیگر برای گرفتن مقدار:
print(student.get("age"))خروجی:
20
تفاوت مهم این دو:
student["phone"]
اگر
phone وجود نداشته باشد، KeyError میگیریم.اما:
student.get("phone")اگر وجود نداشته باشد، بهصورت پیشفرض:
None
برمیگرداند.
حتی میتوانیم مقدار جایگزین تعیین کنیم:
print(student.get("phone", "Not Found"))اگر
phone وجود نداشته باشد:Not Found
————————————
1️⃣8️⃣ تغییر مقدار Dictionary
مثلاً:
student["name"] = "Reza"
حالا:
print(student["name"])
میشود:
Reza
—————————-
1️⃣9️⃣ اضافه کردن Key جدید
مثلاً:
student["phone"] = "09132565464"
حالا Dictionary شامل
phone هم میشود.نکته جالب:
اگر Key از قبل وجود داشته باشد:
student["age"] = 25
مقدار قبلی تغییر میکند.
اگر Key وجود نداشته باشد:
student["phone"] = "..."
یک مورد جدید اضافه میشود.
——————————-
2️⃣0️⃣ حذف از Dictionary
با
del:del student["age"]
Key و مقدار مربوط به آن حذف میشوند.
pop()میتوانیم مقدار حذفشده را هم دریافت کنیم:
a = student.pop("phone")
print("a is", a)یعنی:
phoneرا حذف کن و مقدارش را داخل
aقرار بده.
————————————
🔥 حالا مهمترین سؤال: کِی از کدام استفاده کنیم؟
این قسمت را خیلی خوب یاد بگیر:
🟢 List
وقتی:
چند داده داریم، ترتیب برایمان مهم است و میخواهیم بتوانیم آنها را تغییر دهیم.
مثلاً:
servers = ["server1", "server2", "server3"]
—————————
🔵 Tuple
وقتی:
چند داده داریم، ترتیب مهم است ولی نمیخواهیم دادهها تغییر کنند.
مثلاً:
server = ("192.168.1.10", 22, "SSH")———————-
🟡 Set
وقتی:
فقط اعضای منحصربهفرد برایمان مهم هستند و تکراری نمیخواهیم.
مثلاً:
blocked_ips = {
"1.1.1.1",
"2.2.2.2",
"1.1.1.1"
}IP تکراری حذف میشود.
—————————————-
🔴 Dictionary
وقتی:
میخواهیم هر داده یک اسم/کلید داشته باشد.
مثلاً:
server = {
"ip": "192.168.1.10",
"port": 22,
"service": "SSH"
}خیلی راحت میتوانیم بگوییم:
server["ip"]
——————————-
🧠 یک مثال امنیتی که هر 4 تا را با هم ببینیم
فرض کن اطلاعات یک سرور را داریم:
server = {
"name": "WebServer",
"ip": "192.168.1.10",
"ports": [22, 80, 443],
"protocols": ("SSH", "HTTP", "HTTPS"),
"users": {"ali", "reza", "ali"}
}اینجا:
dict → اطلاعات کلی سرورlist → پورتها چون ترتیب/لیستبودن و تغییرپذیری میتواند مهم باشدtuple → پروتکلهای ثابتset → کاربران بدون تکراراین دقیقاً جایی است که Data Structures در پروژههای واقعی شبکه و امنیت کاربرد پیدا میکند. 🔥
🐍 فصل ششم — پایتون مقدماتی — control flow
—————————————-
Control Flow یعنی کنترل جریان اجرای برنامه.
تا قبل از این، برنامه معمولاً خطبهخط اجرا میشد:
اما با شرطها میتوانیم بگوییم:
=================
1️⃣
مثلاً میخواهیم نمره را بررسی کنیم:
یعنی:
⚠️ دو نکته مهم
در جزوه نوشته بودی:
❌ اشتباه است.
باید
و دستور داخل
===============
2️⃣
اگر بخواهیم برای حالت غلط هم کاری انجام دهیم:
یعنی:
اگر بنویسیم:
یعنی:
پس خود
تفاوت:
====================
3️⃣ Nested If — شرط تو در تو
مثالی که نوشتی مربوط به Login بود:
اینجا دو شرط داریم.
اول:
اگر Username درست بود، میرود سراغ Password:
اگر هر دو درست باشند:
اگر Username درست باشد ولی Password اشتباه باشد:
و اگر Username اشتباه باشد:
==================
4️⃣
گاهی بیشتر از دو حالت داریم.
مثلاً میخواهیم بر اساس نمره Grade تعیین کنیم:
⚠️ یک اشتباه در جزوه:
نوشته بودی:
❌ اشتباه
درست:
🧠
Python شرطها را از بالا به پایین بررسی میکند.
مثلاً:
اول بررسی:
درست است →
دیگر سراغ:
نمیرود.
یعنی وقتی یک شرط درست شد، آن شاخه اجرا میشود و زنجیره شرط تمام میشود.
🔥 چرا ترتیب
مثلاً این کد را ببین:
اینجا
پس همان اول
بنابراین باید از بزرگترین شرط به کوچکترین شرط برویم:
=================
5️⃣ Short-Hand If — شرط یکخطی
برای شرطهای ساده میتوانیم از حالت کوتاه استفاده کنیم.
مثلاً:
چون:
غلط است، نتیجه:
ساختار کلی:
مثلاً:
یعنی:
===================
—————————————-
Control Flow یعنی کنترل جریان اجرای برنامه.
تا قبل از این، برنامه معمولاً خطبهخط اجرا میشد:
print("A")
print("B")
print("C")اما با شرطها میتوانیم بگوییم:
اگر این اتفاق افتاد، این کار را انجام بده؛ وگرنه کار دیگری انجام بده.
=================
1️⃣
if — شرطمثلاً میخواهیم نمره را بررسی کنیم:
score = int(input("Enter your score: "))
if score > 50:
print("Afarin")یعنی:
اگر
scoreبزرگتر از 50 بود،
Afarinرا چاپ کن.
⚠️ دو نکته مهم
در جزوه نوشته بودی:
if score > 50;
❌ اشتباه است.
باید
: باشد:if score > 50:
و دستور داخل
if باید Indentation داشته باشد:if score > 50:
print("Afarin")
===============
2️⃣
if / elseاگر بخواهیم برای حالت غلط هم کاری انجام دهیم:
score = int(input("Enter your score: "))
if score > 50:
print("Afarin")
else:
print("Niyaz be talash")یعنی:
اگر score > 50
↓
آفرین
در غیر این صورت
↓
نیاز به تلاش
>=اگر بنویسیم:
if score >= 50:
یعنی:
بزرگتر از 50 یا مساوی 50
پس خود
50 هم قبول میشود.تفاوت:
> 50 → خود 50 قبول نیست
>= 50 → خود 50 هم قبول است
====================
3️⃣ Nested If — شرط تو در تو
مثالی که نوشتی مربوط به Login بود:
user = input("Enter user: ")
password = input("Enter pass: ")
if user == "admin":
if password == "1234":
print(f"Welcome {user}")
else:
print("Password eshtebah")
else:
print("User eshtebah")اینجا دو شرط داریم.
اول:
if user == "admin":
اگر Username درست بود، میرود سراغ Password:
if password == "1234":
اگر هر دو درست باشند:
Welcome admin
اگر Username درست باشد ولی Password اشتباه باشد:
Password eshtebah
و اگر Username اشتباه باشد:
User eshtebah
==================
4️⃣
elifگاهی بیشتر از دو حالت داریم.
مثلاً میخواهیم بر اساس نمره Grade تعیین کنیم:
score = int(input("Enter your score: "))
grade = ""
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"
print(grade)⚠️ یک اشتباه در جزوه:
نوشته بودی:
elif score => 80:
❌ اشتباه
درست:
elif score >= 80:
🧠
elif چطور کار میکند؟Python شرطها را از بالا به پایین بررسی میکند.
مثلاً:
score = 95
اول بررسی:
score >= 90
درست است →
Aدیگر سراغ:
elif score >= 80
elif score >= 70
نمیرود.
یعنی وقتی یک شرط درست شد، آن شاخه اجرا میشود و زنجیره شرط تمام میشود.
🔥 چرا ترتیب
elif مهم است؟مثلاً این کد را ببین:
score = 95
if score >= 70:
grade = "C"
elif score >= 80:
grade = "B"
elif score >= 90:
grade = "A"
اینجا
95 >= 70 درست است.پس همان اول
C میشود! 😄بنابراین باید از بزرگترین شرط به کوچکترین شرط برویم:
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"
=================
5️⃣ Short-Hand If — شرط یکخطی
برای شرطهای ساده میتوانیم از حالت کوتاه استفاده کنیم.
مثلاً:
age = 20
status = "old" if age >= 50 else "young"
print(status)
چون:
20 >= 50
غلط است، نتیجه:
young
ساختار کلی:
value_if_true if condition else value_if_false
مثلاً:
result = "Pass" if score >= 50 else "Fail"
یعنی:
اگر نمره حداقل 50 بود
Pass، وگرنه
Fail.
===================
My folder vip
🐍 فصل ششم — پایتون مقدماتی — control flow —————————————- Control Flow یعنی کنترل جریان اجرای برنامه. تا قبل از این، برنامه معمولاً خطبهخط اجرا میشد: print("A") print("B") print("C") اما با شرطها میتوانیم بگوییم: اگر این اتفاق افتاد، این کار را انجام بده؛…
🔐 مثال کاربردی برای مسیر امنیت
فرض کن میخواهیم بررسی کنیم یک IP در لیست IPهای مجاز هست یا نه:
اینجا شرط داریم:
که نتیجهاش
این نوع منطق را بعداً در اسکریپتهای شبکه و امنیت خیلی زیاد میبینی.
فرض کن میخواهیم بررسی کنیم یک IP در لیست IPهای مجاز هست یا نه:
allowed_ips = {
"192.168.1.10",
"192.168.1.20",
"192.168.1.30"
}
ip = input("Enter IP: ")
if ip in allowed_ips:
print("Access Granted")
else:
print("Access Denied")اینجا شرط داریم:
ip in allowed_ips
که نتیجهاش
True یا False میشود.این نوع منطق را بعداً در اسکریپتهای شبکه و امنیت خیلی زیاد میبینی.