My folder vip


Channel's geo and language: not specified, not specified
Category: not specified


آرشیو یادگیری هک/امنیت
اینجا فولدر شخصی من برای یادگیری و ثبت مطالب Linux، Networking و Cyber Security است.
🔐 LPIC | Network+ | CEH | SANS
🐧 Linux & System Administration
🌐 Networking & Troubleshooting
💻 Python & Security Tools
🧪 Labs | CTF | Prac

Related channels

Channel's geo and language
not specified, not specified
Category
not specified
Statistics
Posts filter


فصل هشتم - قسمت هفتاد و پنجم 🐧
2 : تنظیم شبکه در لینوکس
———————
اینجا می‌خواهیم یاد بگیریم تنظیمات شبکه در Linux کجا قرار دارند و امروزه چطور آن‌ها را مدیریت می‌کنیم.
نکته مهم این قسمت:
در Linuxهای جدید، NetworkManager نقش اصلی را در مدیریت شبکه دارد.

——————————-

1️⃣ قبلاً تنظیمات شبکه کجا بودند؟
بسته به Distribution فرق داشت.
🔴 Red Hat / CentOS قدیمی
در سیستم‌های قدیمی‌تر فایل‌های Interface معمولاً در:
/etc/sysconfig/network-scripts/
بودند.
مثلاً:
/etc/sysconfig/network-scripts/ifcfg-eth0
داخلش تنظیماتی مثل IP، Gateway و نوع دریافت IP قرار می‌گرفت.
مثلاً:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
——————-
🔵 Debian / Ubuntu قدیمی
در Debian و Ubuntu قدیمی معمولاً:
/etc/network/interfaces
استفاده می‌شد.
مثلاً:
auto eth0
iface eth0 inet static
address 192.168.1.20
netmask 255.255.255.0
gateway 192.168.1.1



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


—————

2️⃣ امروزه چه چیزی مهم است؟
امروزه در بسیاری از Distributionهای Desktop و Server:
NetworkManager
↓
مدیریت Network Interface
↓
IP / Gateway / DNS / Connection
ابزار اصلی خط فرمان آن:
nmcli
است.


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

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




—————


4️⃣ nmcli
اول وضعیت کلی NetworkManager:
nmcli general status
مثلاً:
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled ... enabled ...
یعنی NetworkManager فعال است و سیستم اتصال شبکه دارد.

——————————


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


————————-

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


——————————

7️⃣ بالا آوردن Connection
مثلاً:
nmcli connection up eth0
یعنی Connection مربوط به eth0 را فعال کن.
پایین آوردن:
nmcli connection down eth0

—————————-

8️⃣ تغییر IP
اینجا یکی از قسمت‌های مهم nmcli است.
فرض کنیم Connection ما اسمش eth0 است.
می‌خواهیم IP را:
192.168.1.20/24
قرار دهیم.
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.20/24
Gateway:
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1
DNS:
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8"
و مشخص می‌کنیم IP به صورت دستی تنظیم شود:
sudo nmcli connection modify eth0 ipv4.method manual
بعد Connection را دوباره فعال می‌کنیم:
sudo nmcli connection down eth0
sudo nmcli connection up eth0


—————————

9️⃣ DHCP با nmcli
اگر بخواهیم IP را DHCP بگیریم:
sudo nmcli connection modify eth0 ipv4.method auto
بعد:
sudo nmcli connection down eth0
sudo nmcli connection up eth0
حالا DHCP Server برای سیستم IP می‌فرستد.


———————-

🔟 یک مثال واقعی
فرض کن سرور Linux داری.
می‌خواهی:
IP → 192.168.1.50/24
Gateway → 192.168.1.1
DNS → 8.8.8.8
تنظیم کنیم:
sudo nmcli con mod eth0 ipv4.addresses 192.168.1.50/24
sudo nmcli con mod eth0 ipv4.gateway 192.168.1.1
sudo nmcli con mod eth0 ipv4.dns 8.8.8.8
sudo nmcli con mod eth0 ipv4.method manual
بعد:
sudo nmcli con down eth0
sudo nmcli con up eth0
بررسی:
ip addr
ip route
nmcli connection show



—————————


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



——————-

1️⃣2️⃣ وضعیت NetworkManager
سرویس:
systemctl status NetworkManager
ری‌استارت:
sudo systemctl restart NetworkManager
⚠️ چیزی که نوشتی:
systemctl restart networkmanager
ممکن است روی بعضی سیستم‌ها به خاطر نام Unit کار کند، اما نام استاندارد سرویس در سیستم‌های مبتنی بر NetworkManager معمولاً:
NetworkManager
است.


———————-

1️⃣3️⃣ /etc/resolv.conf
قبلاً خیلی وقت‌ها مستقیماً:
/etc/resolv.conf
را برای DNS تغییر می‌دادند.
مثلاً:
nameserver 8.8.8.8
اما در سیستم‌های جدید، این فایل ممکن است توسط یکی از سرویس‌های مدیریت شبکه مثل:
NetworkManager
systemd-resolved
مدیریت شود.
بنابراین ممکن است تغییر دستی آن دائمی نباشد.
📌 برای تنظیم DNS بهتر است از ابزار مدیریت شبکه خود سیستم استفاده کنی.
مثلاً با NetworkManager:
nmcli con mod eth0 ipv4.dns 8.8.8.8



—————————

1️⃣4️⃣ mtr چیست؟
mtr یکی از ابزارهای بسیار خوب برای Network Troubleshooting است.
ترکیبی از ایده‌های:
ping + traceroute
است.
مثلاً:
mtr google.com
مسیر Packet را نمایش می‌دهد و همزمان اطلاعاتی درباره Latency و Packet Loss هر Hop می‌دهد.
مثلاً:
HOST Loss% Snt Last Avg
192.168.1.1 0.0% 20 1ms 1ms
10.x.x.x 0.0% 20 5ms 5ms
...
google.com 0.0% 20 30ms 31ms
برای پیدا کردن مشکلات مسیر شبکه خیلی کاربردی است.





—————————

1️⃣5️⃣ dhclient چی شد؟
dhclient یک DHCP Client قدیمی و معروف بود.
مثلاً قبلاً ممکن بود ببینی:
dhclient eth0
برای گرفتن IP از DHCP.
اما نکته‌ای که گفتی را این‌طور حفظ کن:
در بسیاری از سیستم‌های جدید که NetworkManager مدیریت شبکه را بر عهده دارد، معمولاً نیازی نیست مستقیماً

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

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

————————

1️⃣6️⃣ Desktop Linux چطور؟
در Desktop معمولاً اصلاً لازم نیست Terminal باز کنی.
مثلاً در GNOME:
Settings
↓
Network
↓
Wired / Wi-Fi
↓
IPv4
↓
Automatic / Manual
و می‌توانی IP، Gateway و DNS را از رابط گرافیکی تنظیم کنی.
در KDE هم تنظیمات شبکه از رابط گرافیکی خودش انجام می‌شود.
اما پشت صحنه، در بسیاری از سیستم‌ها NetworkManager مدیریت اتصال را انجام می‌دهد.


فصل هشتم - قسمت هفتاد و چهارم 🐧
1 : آشنایی اولیه باشبکه
———————
هدف اصلی شبکه خیلی ساده است:
انتقال اطلاعات از یک دستگاه به دستگاه دیگر.

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


——————-

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


————————

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


————————

3️⃣ یک مثال واقعی؛ باز کردن Google
فرض کن در مرورگر می‌نویسی:
https://google.com
مرورگر اطلاعات را ایجاد می‌کند.
در لایه Application:
HTTP/HTTPS Data
سپس در Transport مثلاً TCP قرار می‌گیرد:
TCP Header
+
Application Data
بعد در Network:
IP Header
+
TCP Header
+
Application Data
بعد در Data Link:
Ethernet Header
+
IP Header
+
TCP Header
+
Application Data
و در نهایت اطلاعات به صورت Frame/Bits روی شبکه ارسال می‌شوند.
در سمت مقصد این فرآیند برعکس می‌شود و Headerهای مربوط به هر لایه بررسی و کنار گذاشته می‌شوند تا برنامه بتواند داده اصلی را دریافت کند.

————————

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


————

5️⃣ IPv4 و IPv6
دو نسخه اصلی IP داریم:
IPv4
مثلاً:
192.168.1.20
IPv4 دارای آدرس ۳۲ بیتی است.
IPv6
مثلاً:
2001:db8::1
IPv6 دارای آدرس ۱۲۸ بیتی است.
پس:
IPv4 → 32 bit
IPv6 → 128 bit

—————

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

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


——————

7️⃣ لایه Transport
این لایه وظیفه ارتباط بین برنامه‌ها و کنترل انتقال داده را بر عهده دارد.
دو پروتکل اصلی:
TCP
UDP
TCP
قابل‌اعتماد است.
ویژگی‌های مهم:
Connection-oriented
ترتیب داده‌ها را حفظ می‌کند
دریافت داده را تأیید می‌کند
در صورت نیاز داده را مجدداً ارسال می‌کند
مثلاً:
Client ───────→ Server
Data 1
Data 2
Data 3
اگر Data 2 گم شود، TCP می‌تواند آن را مجدداً درخواست/ارسال کند.


UDP
ساده‌تر و سریع‌تر است و تضمین تحویل مانند TCP ندارد.
مثلاً:
Client ───────→ Server
Data 1
Data 2
Data 3
اگر Data 2 از بین برود، UDP خودش تضمین نمی‌کند که آن را دوباره ارسال کند.
کاربردهای رایج:
DNS
VoIP
Streaming
Online Gaming
البته بعضی برنامه‌های
———————

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

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

مثلاً:
192.168.1.20:22
یعنی:
IP → 192.168.1.20
Port → 22
پورت 22 معمولاً برای SSH استفاده می‌شود.



———————

9️⃣ Application Layer
اینجا جایی است که سرویس‌ها و پروتکل‌هایی که برنامه‌ها مستقیماً با آن‌ها کار می‌کنند قرار دارند.
مثلاً:
HTTP
HTTPS
DNS
DHCP
SSH
FTP
SMTP
ساختار کلی معمولاً به شکل Client/Server است:
Client
│
│ Request
↓
Server
│
│ Response
↓
Client


————————

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


———————-

1️⃣1️⃣ DNS در عمل چه اتفاقی می‌اندازد؟
فرض کن مرورگر می‌خواهد به:
google.com
وصل شود.
ابتدا سیستم باید IP آن را پیدا کند.
تقریباً:
Browser
↓
DNS Resolver
↓
DNS Server
↓
IP Address
↓
Connection to Server
مثلاً نتیجه DNS می‌تواند یک یا چند IP باشد.
بعد مرورگر با IP مقصد ارتباط برقرار می‌کند.
📌 نکته مهم:
DNS خودش ارتباط HTTP را انجام نمی‌دهد؛ فقط نام را به آدرس تبدیل/Resolve می‌کند.





——————-

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

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

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

پس:
Discover
↓
Offer
↓
Request
↓
ACK
🧠 DORA را برای امتحان حتماً حفظ کن.




—————————

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



📌 چند مورد مهم‌تر برای LPIC:
22 → SSH
25 → SMTP
53 → DNS
67 → DHCP Server
68 → DHCP Client
80 → HTTP
123 → NTP
443 → HTTPS


فصل هشتم - قسمت هفتاد و سوم 🐧
شبکه در لینوکس
———————
در فصل با قسمت های زیر اشنا میشویم

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

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

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

4 : پیکربندی dns در لینوکس


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


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

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

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


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


———————-


System Clock
ساعتی که Kernel لینوکس هنگام اجرای سیستم استفاده می‌کند.
System Clock
→ ساعت مورد استفاده Linux
پس:
Hardware Clock
↓
Linux Boot
↓
System Clock
————————-


2️⃣ hwclock
برای مشاهده و مدیریت Hardware Clock:
hwclock
مثلاً:
sudo hwclock --show
→ نمایش ساعت سخت‌افزاری.
برای نمایش دقیق‌تر:
sudo hwclock --verbose


تغییر Hardware Clock
مثلاً:
sudo hwclock --systohc
یعنی:
ساعت System را روی Hardware Clock بنویس.

برعکس:
sudo hwclock --hctosys
یعنی:
ساعت Hardware Clock را روی System Clock تنظیم کن.

🧠 حفظ کن:
systohc
system → hardware

hctosys
hardware → system



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

3️⃣ timedatectl
فرمان اصلی مدیریت زمان در سیستم‌های جدید Linux:
timedatectl
وضعیت زمان:
timedatectl status
مثلاً می‌بینی:
Local time
Universal time
RTC time
Time zone
System clock synchronized
NTP service
RTC in local TZ
—————————-

4️⃣ تنظیم Timezone
لیست Timezoneها:
timedatectl list-timezones
مثلاً:
timedatectl list-timezones | grep Tehran
تنظیم:
sudo timedatectl set-timezone Asia/Tehran
بعد:
timedatectl
را بزن.




—————————-

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

——————————-

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

است.
وظیفه‌اش این است که ساعت سیستم را از طریق شبکه با یک Time Server هماهنگ کند.
مثلاً:
Linux Server
↓
NTP Client
↓
NTP Server
↓
زمان دقیق
مثلاً چند سرور:
server1 → 18:30:01
server2 → 18:30:02
server3 → 18:30:01
NTP کمک می‌کند ساعت سیستم‌ها با یک مرجع زمانی هماهنگ بماند.


————————

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


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





8️⃣ ntpsec چیست؟
احتمالاً منظورت از nptsec همان:
NTPsec
است.
NTPsec یک پیاده‌سازی مدرن‌تر و سخت‌گیری‌شده‌تر از NTP است که برای امنیت و سادگی بیشتر کد طراحی شده است.
اما در Linuxهای امروزی ممکن است اصلاً NTPsec استفاده نکنی.
دو گزینه بسیار رایج:
chrony
systemd-timesyncd
هستند.
در بسیاری از سرورهای RHEL/Fedora/AlmaLinux، chrony گزینه رایج است.




———————

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

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

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


——————-

🔟 فعال کردن NTP با timedatectl
در سیستم‌هایی که سرویس NTP مناسب را فراهم کرده‌اند:
sudo timedatectl set-ntp true
بررسی:
timedatectl status
ممکن است ببینی:
System clock synchronized: yes
NTP service: active
یعنی:
NTP فعال است
↓
ساعت سیستم
↓
با Time Server هماهنگ می‌شود


—————————

1️⃣1️⃣ یک مثال واقعی
فرض کن سرور Ubuntu داری و ساعتش اشتباه است.
اول:
timedatectl
بررسی می‌کنی.
اگر Timezone اشتباه بود:
sudo timedatectl set-timezone Asia/Tehran
بعد:
sudo timedatectl set-ntp true
و دوباره:
timedatectl
بررسی می‌کنی که:
System clock synchronized: yes
باشد.


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

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

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

1️⃣ Process چیست؟
Process یا پردازش یعنی یک برنامه‌ای که در حال اجراست.
مثلاً وقتی می‌زنی:
firefox
برنامه Firefox اجرا می‌شود و سیستم برای آن یک Process ایجاد می‌کند.
هر Process معمولاً یک PID دارد:
Firefox
↓
PID = 2451
برای دیدنش:
ps aux
یا:
top

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

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

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


————————-

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

به جای حدس زدن:
journalctl -u sshd
را می‌زنی و Log را بررسی می‌کنی.
ممکن است مشخص شود:
Failed password
یا:
Connection refused
یا:
User not allowed
پس Log برای Troubleshooting، Security و Auditing بسیار مهم است.


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

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

systemd
↓
systemd-journald
↓
journalctl
یعنی ممکن است سیستم هم از:
rsyslog
استفاده کند و هم:
systemd-journald



—————————

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

——————————-

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

———————————

7️⃣ Severity چیست؟
Severity مشخص می‌کند شدت یا اهمیت یک Log چقدر است.
از کم‌اهمیت‌تر به بحرانی‌تر:
debug
info
notice
warning
err
crit
alert
emerg
مثلاً:
info
→ اطلاعات عادی
warning
→ هشدار
err
→ خطا
crit
→ خطای بسیار مهم
emerg
→ وضعیت اضطراری
🧠 برای دفتر:
Facility → این Log مربوط به کدام بخش است؟

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



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


8️⃣ Log Rotation چیست؟
فرض کن یک سرور داری و:
/var/log/messages
هر روز هزاران Log تولید می‌کند.
اگر این فایل را کنترل نکنی، ممکن است:
100 MB
↓
1 GB
↓
10 GB
↓
Disk Full 💀
اینجاست که Log Rotation وارد می‌شود.
ابزار معروف:
logrotate
است.
کارش این است که Logهای قدیمی را:
messages
messages.1
messages.2
messages.3.gz
مدیریت کند و در صورت نیاز فشرده یا حذف کند.
———————————————

9️⃣ فایل logrotate.conf
فایل اصلی تنظیمات:
/etc/logrotate.conf
و تنظیمات برنامه‌های مختلف معمولاً در:
/etc/logrotate.d/
قرار دارند.
مثلاً:
ls /etc/logrotate.d/

——————————

🔟 systemd-journald چیست؟
در سیستم‌های مبتنی بر systemd، سرویس:
systemd-journald
وظیفه جمع‌آوری و مدیریت Journalها را دارد.
یعنی:
Application
↓
systemd-journald
↓
Journal
↓
journalctl
———————

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

——————————


1️⃣2️⃣ journalctl
مهم‌ترین ابزار برای خواندن Journal:
journalctl
است.
اگر فقط بزنی:
journalctl
تعداد زیادی Log نمایش داده می‌شود.

———————————

1️⃣3️⃣ آخرین 50 Log
journalctl -n 50
یعنی:
50 خط آخر Journal را نمایش بده.


————————

1️⃣4️⃣ دنبال کردن Log به صورت لحظه‌ای
journalctl -f
-f یعنی Follow.
مثل:
tail -f
مثلاً:
journalctl -f
حالا در Terminal دیگری SSH Login کن.
Log همان لحظه نمایش داده می‌شود.

———————-

1️⃣5️⃣ Log مربوط به یک سرویس
مثلاً SSH:
journalctl -u sshd
یعنی:
فقط Logهای Unit مربوط به sshd را نشان بده.

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

————————-

1️⃣6️⃣ Log مربوط به Boot فعلی
journalctl -b
یعنی:
Logهای Boot فعلی سیستم را نمایش بده.

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


———————————


1️⃣7️⃣ فقط Errorها
journalctl -p err
یعنی فقط پیام‌هایی با Priority برابر یا بالاتر از err را نشان بده.
برای محدوده:
journalctl -p crit..err
یعنی Logهای:
crit
alert
emerg
err
را نمایش بده.

———————-

1️⃣8️⃣ Log از یک زمان مشخص
از دیروز:
journalctl --since yesterday
از دو ساعت قبل:
journalctl --since "2 hours ago"
مثلاً:
journalctl --since "2026-08-26 15:00"
→ Logهای بعد از ساعت 15 را نشان می‌دهد.


———————-

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

یا:
journalctl -u sshd -p err
یعنی:
خطاهای مهم سرویس SSH.

——————-

2️⃣0️⃣ تغییر Format خروجی
خروجی معمولی:
journalctl -o short
برای خروجی JSON:
journalctl -o json-pretty
JSON برای زمانی مفید است که بخواهی Log را با ابزارها و برنامه‌ها پردازش کنی.


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

2️⃣1️⃣ ابزار logger
با logger می‌توانیم خودمان یک پیام به Syslog ارسال کنیم.
مثلاً:
logger "Hello from Alireza"
بعد می‌توانی Log را پیدا کنی.
حتی Facility و Severity هم مشخص کنی:
logger -p user.info "Test message"
یعنی:
Facility → user
Severity → info
یک مثال امنیتی:
logger -p auth.warning "Suspicious login detected"


————————-


2️⃣2️⃣ systemd-cat
این ابزار خروجی یک برنامه را وارد Journal می‌کند.
مثلاً:
echo "Hello Journal" | systemd-cat
یا:
systemd-cat echo "Test message"
بعد:
journalctl
را بزن و پیام را پیدا کن.
حتی می‌توانی Priority بدهی:
echo "Something went wrong" | systemd-cat -p err



——————-

2️⃣3️⃣ /var/log
یکی از مهم‌ترین مسیرهای Log در Linux:
cd /var/log/
است.
برای دیدنش:
ls -lh /var/log/
ممکن است فایل‌هایی مثل این ببینی:
messages
secure
maillog
cron
boot.log
البته نام و محل Logها بسته به Distribution و تنظیمات سیستم متفاوت است.

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

—————————


فصل هفتم — قسمت هفتاد 🐧
Install Mail server
—————————

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

————————-

1️⃣ ساختار کلی Mail Server
وقتی یک Email می‌فرستی، چند جزء می‌توانند درگیر باشند:
MUA → MTA → MTA → MDA
📩 MUA — Mail User Agent
برنامه‌ای که کاربر با آن Email را می‌خواند یا می‌فرستد.
مثلاً:
Thunderbird
Outlook
Webmail
یعنی رابط کاربر با سیستم Mail.

——————

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



———————-

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

———-

2️⃣ انتخاب MTA
در Linux چند MTA معروف داریم:
Postfix
Sendmail
Exim
OpenSMTPD
در این آموزش از:
⭐️ Postfix
استفاده می‌کنیم.
Postfix یکی از MTAهای معروف Linux است و برای ارسال و دریافت SMTP استفاده می‌شود.

——————————

3️⃣ نصب Postfix
در Red Hat / Fedora / AlmaLinux:
dnf install postfix
بعد سرویس را فعال و اجرا کن:
systemctl enable --now postfix
بررسی:
systemctl status postfix
——————

4️⃣ فایل تنظیمات Postfix
فایلی که باید بشناسی:
/etc/postfix/main.cf
⚠️ در جزوه‌ات نوشته بودی:
/etc/postfix/main.cfg
درستش:
/etc/postfix/main.cf
5️⃣ inet_interfaces
در:
nano /etc/postfix/main.cf
گزینه:
inet_interfaces = all
یعنی Postfix روی تمام Interfaceهای شبکه سیستم گوش بدهد.
مثلاً اگر سرور چند IP داشته باشد:
eth0 → 192.168.1.10
eth1 → 10.0.0.10
با:
inet_interfaces = all
Postfix روی Interfaceهای مناسب سیستم Listen می‌کند.
🧠 برای سرور واقعی باید این تنظیم را با توجه به نیاز و مدل شبکه انجام داد؛ باز گذاشتن سرویس SMTP روی همه Interfaceها بدون تنظیمات امنیتی می‌تواند خطرناک باشد.


—————
6️⃣ پورت SMTP
پروتکل اصلی ارسال Mail:
SMTP
پورت استاندارد:
25
برای Submission معمولاً:
587
و SMTPS:
465
در این قسمت فعلاً مفهوم اصلی را با 25 یاد بگیر.
بررسی:
ss -lntp | grep :25
ممکن است ببینی:
LISTEN ... :25
یعنی Postfix روی پورت SMTP در حال Listen است.
————————

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



——————

8️⃣ ارسال Email از Command Line
یکی از ابزارهای ساده:
s-nail
نصب:
dnf install s-nail
بعد می‌توانی Mail بفرستی.
مثلاً:
echo "Hello from Linux" | mail -s "Test Mail" user@example.com
ساختار:
echo
↓
متن Email
↓
mail
↓
Postfix
↓
SMTP
——————

9️⃣ Mail محلی در Linux
یکی از بهترین تمرین‌ها برای فهم Mail Server این است که اول Mail داخلی خود Linux را امتحان کنی.
مثلاً یک User بساز:
useradd ali
passwd ali
بعد:
echo "Hello Ali" | mail -s "Test" ali
اینجا Email از طریق Mail System محلی تحویل User می‌شود.
بعد با:
mail
می‌توانی Mailهای محلی را ببینی.


—————
10️⃣ لاگ Mail را کجا ببینیم؟
یکی از مهم‌ترین چیزها در عیب‌یابی Mail Server، Log است.
در Red Hat-basedها معمولاً:
/var/log/maillog
مثلاً:
tail -f /var/log/maillog
حالا در یک Terminal دیگر Mail بفرست:
echo "Test" | mail -s "Test Mail" ali
و در Terminal اول Log را ببین.
این فوق‌العاده مهم است چون می‌توانی ببینی:
Mail received
Mail queued
Mail delivered
Connection failed
Relay denied
Authentication failed


——————-

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

Debian
→ /var/log/mail.log


————-


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

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

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


——————

1️⃣ su چیست؟
su مخفف Switch User است.
یعنی از یک User وارد User دیگری شویم.
مثلاً:
su ali
→ وارد حساب ali می‌شوی و Password او را می‌خواهد.
برای رفتن به root:
su -
→ وارد root می‌شوی و محیط Login مربوط به root را هم دریافت می‌کنی.
🧠 تفاوت مهم:
su
→ تغییر User

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

—————————

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

مثلاً کاربر ali کاربر معمولی است:
whoami
ali
ولی می‌خواهد یک Package نصب کند:
sudo dnf install nginx
دستور با دسترسی root اجرا می‌شود، ولی خود User تبدیل به root نمی‌شود.
مثلاً:
sudo systemctl restart sshd
فقط همان دستور با دسترسی مناسب اجرا می‌شود.
————————
3️⃣ چرا sudo بهتر از استفاده دائمی از root است؟
فرض کن:
ali → User معمولی
فقط زمانی که نیاز دارد:
sudo command
اجرا می‌کند.
بنابراین لازم نیست دائماً داخل root باشی.
این موضوع از نظر امنیت و Audit هم بهتر است.


————————

4️⃣ sudoers چیست؟
قوانین sudo در این قسمت مدیریت می‌شوند:
/etc/sudoers
اما ❌ نباید معمولاً با nano مستقیماً فایل را ویرایش کنیم.
از:
visudo
استفاده می‌کنیم.
visudo فایل sudoers را با بررسی Syntax ویرایش می‌کند.

———————-

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

ALL
↓
از هر Host

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

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

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

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


——————

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



————-

7️⃣ یک مثال کاربردی دیگر
فرض کنیم کاربر backup فقط اجازه داشته باشد Backup را اجرا کند:
backup ALL=(root) /usr/local/bin/backup.sh
پس:
sudo /usr/local/bin/backup.sh
مجاز است، اما مثلاً:
sudo rm -rf /important
مجاز نیست.
🧠 این همان اصل Least Privilege است:
هر User فقط به اندازه‌ای که لازم دارد دسترسی داشته باشد.


————-

8️⃣ مثال برای dnf
Rule خودت:
admin2 ALL=(root) /usr/bin/dnf update
یعنی admin2 اجازه دارد:
sudo /usr/bin/dnf update
را با دسترسی root اجرا کند.
اما یک نکته مهم:
⚠️ مسیر Binary را دقیق بررسی کن
ممکن است در سیستم مسیر dnf متفاوت باشد.
با:
which dnf
مسیر واقعی را پیدا کن.
مثلاً:
/usr/bin/dnf
و همان را در sudoers بنویس.



—————
9️⃣ wheel در Red Hat
در خانواده Red Hat:
RHEL
Fedora
AlmaLinux
Rocky Linux
گروه معروف مدیریتی:
wheel
است.
مثلاً:
usermod -aG wheel ali
یعنی ali را عضو wheel کن.
بعد اگر sudoers سیستم اجازه داده باشد، ali می‌تواند از sudo استفاده کند.

————-

🔟 در Debian/Ubuntu
در Debian و Ubuntu معمولاً گروه:
sudo
است.
مثلاً:
usermod -aG sudo ali


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

——————

1️⃣ چرا User ایجاد می‌کنیم؟
یکی از اشتباهات بزرگ در Linux این است که همه با root کار کنند.
root قدرت بسیار زیادی دارد:
root
↓
دسترسی تقریباً کامل به سیستم
مثلاً اگر با root اشتباهی بزنی:
rm -rf /some/path
ممکن است اطلاعات مهمی از بین برود.
پس برای هر شخص یا سرویس یک User جدا می‌سازیم.
مثلاً:
root
├── ali
├── reza
└── apache
هر User می‌تواند Permission متفاوتی داشته باشد.

——————

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

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


—————————-

3️⃣ User و Group
هر User یک UID دارد.
هر Group یک GID دارد.
مثلاً:
id ali
ممکن است ببینی:
uid=1000(ali) gid=1000(ali) groups=1000(ali),10(wheel)
یعنی:
UID → شناسه کاربر
GID → گروه اصلی
groups → گروه‌هایی که کاربر عضو آنهاست



——————-

4️⃣ دستور groups
برای دیدن گروه‌های کاربر:
groups ali
مثلاً:
ali : ali wheel developers

———————

5️⃣ دستور id
اطلاعات کامل‌تری می‌دهد:
id ali
مثلاً:
uid=1001(ali)
gid=1001(ali)
groups=1001(ali),10(wheel)
🧠 برای امتحان:
groups → گروه‌ها
id → UID + GID + Groups
————————-

6️⃣ Login Shell چیست؟
وقتی User ایجاد می‌شود، برای او یک Shell مشخص می‌شود.
مثلاً:
/bin/bash
اما بعضی Userها اصلاً برای Login کردن ساخته نشده‌اند.
مثلاً User مربوط به سرویس‌ها:
apache
nginx
mysql
ممکن است Shell آنها:
/usr/sbin/nologin
باشد.
یعنی:
این حساب برای اجرای سرویس است، نه ورود تعاملی کاربر.

مثلاً:
grep nginx /etc/passwd
ممکن است ببینی:
nginx:x:...:/usr/sbin/nologin

——————

7️⃣ ساخت User
دستور اصلی:
useradd ali
بعد برایش Password:
passwd ali
اما بهتر است هنگام ساخت User گزینه‌های موردنیاز را هم مشخص کنیم.
مثلاً:
useradd -m -s /bin/bash ali
یعنی:
-m → Home Directory بساز
-s → Shell مشخص کن
بعد:
passwd ali


——————
8️⃣ هنگام ساخت User چه اتفاقی می‌افتد؟
وقتی:
useradd -m ali
می‌زنی، چند اتفاق مهم می‌افتد.
1. UID ایجاد می‌شود
مثلاً:
1001
2. Group ساخته/تنظیم می‌شود
3. Home ساخته می‌شود:
/home/ali
4. فایل‌های اولیه از /etc/skel کپی می‌شوند.
5. اطلاعات User در فایل‌های سیستم ثبت می‌شود.
——————

9️⃣ /etc/skel چیست؟
skel مخفف Skeleton است.
یعنی یک قالب اولیه برای Home User.
مثلاً:
/etc/skel/
├── .bashrc
├── .profile
└── ...
وقتی User جدید می‌سازی:
useradd -m ali
فایل‌های موجود در /etc/skel معمولاً به:
/home/ali/
کپی می‌شوند.
🧠 مثال واقعی:
مثل این است که برای هر کارمند جدید، یک پوشه آماده با تنظیمات اولیه داشته باشی.


—————-

🔟 /etc/passwd
اطلاعات عمومی Userها در:
/etc/passwd
قرار دارد.
مثلاً:
cat /etc/passwd
یک خط ممکن است این شکلی باشد:
ali:x:1001:1001:Ali:/home/ali:/bin/bash
ساختار:
username
:
password placeholder
:
UID
:
GID
:
GECOS
:
Home
:
Shell
نکته مهم
در سیستم‌های مدرن، Password واقعی داخل /etc/passwd نیست.
آن x معمولاً یعنی اطلاعات Password در:
/etc/shadow
————————-

1️⃣1️⃣ /etc/shadow
این فایل اطلاعات حساس مربوط به Password را نگه می‌دارد.
sudo cat /etc/shadow
مثلاً:
ali:$6$........:...
Password به صورت Hash ذخیره می‌شود، نه Password خام.
⚠️ دسترسی این فایل بسیار محدود است.

——————-

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

مثلاً:
cat /etc/login.defs
می‌توانی تنظیماتی مربوط به:
محدوده UID
محدوده GID
عمر Password
تنظیمات Password
Home Directory
را در آن ببینی.

————

1️⃣3️⃣ useradd -D
برای دیدن Defaultهای useradd:
useradd -D
مثلاً ممکن است:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
ببینی.
یعنی وقتی User جدید می‌سازی، useradd از این Defaultها استفاده می‌کند.

——————

1️⃣4️⃣ مدیریت Password با passwd
ساخت/تغییر Password:
passwd ali
چند Option مهم:
قفل کردن حساب:
passwd -l ali
باز کردن:
passwd -u ali
منقضی کردن Password:
passwd -e ali
دیدن وضعیت:
passwd -S ali
حذف Password:
passwd -d ali
⚠️ passwd -d یعنی Password حساب را حذف می‌کنی و از نظر امنیتی باید با احتیاط استفاده شود.


———————-

1️⃣5️⃣ usermod
برای تغییر مشخصات User:
usermod
مثلاً تغییر Shell:
sudo usermod -s /bin/bash ali
تغییر Home:
sudo usermod -d /home/newali -m ali
اضافه کردن User به Group:
sudo usermod -aG project42 ali
⚠️ نکته خیلی مهم
این:
-aG
یعنی User را به Groupهای اضافی اضافه کن.
حتماً -a را یادت باشد.
چون:
usermod -G project42 ali
ممکن است عضویت‌های قبلی کاربر در گروه‌های supplementary را جایگزین کند.

——————-

1️⃣6️⃣ ساخت Group
sudo groupadd project42
اگر بخواهی GID مشخص بدهی:
sudo groupadd -g 1042 project42
بررسی:
getent group project42


——————-

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



——————-

1️⃣8️⃣ Wheel چیست؟
در سیستم‌های Red Hat / Fedora / AlmaLinux گروه:
wheel
معمولاً برای دسترسی مدیریتی با sudo استفاده می‌شود.
مثلاً:
sudo usermod -aG wheel ali
بعد کاربر ali می‌تواند در صورت تنظیم صحیح sudoers از sudo استفاده کند.
در Debian/Ubuntu معمولاً:
sudo usermod -aG sudo ali
🧠 حفظ کن:
Red Hat family → wheel
Debian family → sudo



————————


فصل هفتم — قسمت شصت و هفتم 🐧
مدیریت کردن سیستم — System Administration
——————-
فصل هفتم وارد بخش مدیریت واقعی یک Linux Server می‌شود. یعنی اینجا دیگر فقط با دستورات لینوکس کار نمی‌کنیم؛ یاد می‌گیریم یک سیستم را اداره و نگهداری کنیم.
چهار بخش اصلی این فصل:
System Administration
│
├── 👤 Users & Groups
├── 🕐 Time Management
├── 📋 Logs
└── 📧 Mail Transfer Agent

———————-

1️⃣ مدیریت کاربران و گروه‌ها 👤
در لینوکس هر کسی که وارد سیستم می‌شود یک User دارد.
مثلاً:
root
ali
admin
هر User می‌تواند عضو یک یا چند Group باشد.
مثلاً:
ali
├── users
├── developers
└── docker
چرا Group داریم؟
فرض کن ۱۰ نفر در یک شرکت داریم و همه باید به یک پوشه دسترسی داشته باشند.
به‌جای اینکه برای تک‌تک افراد Permission تنظیم کنیم:
ali
reza
mohammad
sara
...
یک گروه می‌سازیم:
developers
و همه را عضو آن می‌کنیم.

———————

دستورات مهمی که در این بخش خواهیم داشت:
useradd
usermod
userdel
passwd
id
who
whoami
groups
groupadd
groupmod
groupdel
فایل‌های مهم:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
🧠 این چهار فایل را خیلی خوب یاد بگیر.

————————-

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

——————
3️⃣ مدیریت Logها 📋
Log یعنی گزارش اتفاقاتی که در سیستم رخ داده است.
مثلاً:
SSH login
Failed login
Service started
Service stopped
Kernel error
Disk error
فرض کن SSH کار نمی‌کند.
به‌جای حدس زدن:
چرا SSH کار نمی‌کنه؟ 🤔
می‌رویم Logها را بررسی می‌کنیم.
در سیستم‌های Linux دو روش مهم داریم:
سیستم‌های سنتی
/var/log/
مثلاً:
/var/log/auth.log
/var/log/syslog
در بعضی توزیع‌ها:
/var/log/secure
/var/log/messages
systemd
ابزار بسیار مهم:
journalctl
مثلاً:
journalctl
یا برای SSH:
journalctl -u ssh


——————————

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



——————

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

—————-


به نام خدا شروع فصل هفت لینوکس الپیک یک (102)


Video is unavailable for watching
Show in Telegram
حل چالش های Bndit
قسمت اول
————--
از چالش 1 تا 10
——————-
سایت
https://overthewire.org/wargames
—————————-
بابت صدا معذرت میخوام توی ویدیو های بعدی بهتر میشه
این ویدیو دلی بود گفتم بگیرم شما هم بتونید استفاده کنید❤️


#bandit #linux


خب خب فصل شش کاملا و کلا امروز تموم شد.

از فردا به امید خدا فصل هفت رو استارت میزنیم


فصل ششم —قسمت اخر - قسمت شصت و ششم 🐧
time and printer
- زمان و پرینتر
——————-
در این قسمت دو موضوع مهم داریم:

🕐 مدیریت زمان در لینوکس
🖨 مدیریت پرینتر در لینوکس

———————

🕐 بخش اول — زمان در لینوکس
1️⃣ date
برای نمایش تاریخ و ساعت فعلی سیستم:
date
مثلاً:
Mon Aug 24 20:10:30 +0330 2026
یعنی سیستم تاریخ، ساعت و Time Zone را نشان می‌دهد.

——————-

2️⃣ date +%s
این یکی خیلی مهم است.
date +%s
یک عدد بزرگ می‌دهد، مثلاً:
1787582430
این عدد Unix Timestamp است.
یعنی تعداد ثانیه‌هایی که از:
1970-01-01 00:00:00 UTC
گذشته است.
🧠 چرا 1970؟
سیستم‌های Unix یک نقطه شروع استاندارد برای شمارش زمان انتخاب کردند که به آن:
Unix Epoch
می‌گوییم.
مثلاً:
1970
↓
شروع شمارش
↓
1 ثانیه
2 ثانیه
3 ثانیه
...
به همین دلیل در برنامه‌نویسی و سیستم‌ها خیلی زیاد Timestamp می‌بینی.
مثلاً:
date +%s
یا در PHP:
time();
———-

3️⃣ دستور time
اینجا یک اشتباه رایج وجود دارد:
time
با date فرق دارد.
time برای اندازه‌گیری مدت زمان اجرای یک دستور است.
مثلاً:
time ls
خروجی ممکن است چیزی شبیه این باشد:
real 0m0.005s
user 0m0.001s
sys 0m0.004s
یعنی می‌گوید اجرای ls چقدر زمان برده.
مثال واقعی
اگر بخواهی ببینی یک اسکریپت چقدر طول می‌کشد:
time ./backup.sh
🧠 پس:
date → الان ساعت چند است؟
time → این برنامه چقدر طول کشید؟
——————-

4️⃣ timedatectl
یکی از مهم‌ترین ابزارهای مدیریت زمان در Linux است.
timedatectl
اطلاعاتی مثل:
Local time
Universal time
RTC time
Time zone
NTP
را نمایش می‌دهد.


———————

تغییر Time Zone
اول Time Zoneهای موجود:
timedatectl list-timezones
مثلاً:
sudo timedatectl set-timezone Asia/Tehran
بعد:
timedatectl
را بزن.

————

🌍 Local Time و UTC
در لینوکس معمولاً چند مفهوم زمانی داریم:
Local Time
UTC
RTC
Local Time
زمان محلی سیستم.
مثلاً:
20:30
UTC
زمان استاندارد جهانی.
مثلاً:
17:00 UTC
RTC
Real-Time Clock
ساعتی است که در سخت‌افزار سیستم وجود دارد و حتی وقتی سیستم‌عامل خاموش است، زمان را نگه می‌دارد.


—————-

🧠 5️⃣ NTP چیست؟
NTP = Network Time Protocol
وظیفه‌اش این است که ساعت سیستم را با یک Time Server هماهنگ کند.
مثلاً:
Linux Server
│
│ NTP
↓
Time Server
│
↓
زمان صحیح
چرا مهم است؟
چون ساعت اشتباه می‌تواند باعث مشکلاتی مثل:
اشتباه بودن زمان Logها
مشکل Certificate
مشکل Authentication
مشکل Kerberos
مشکل هماهنگی سرورها
شود.
برای دیدن وضعیت NTP:
timedatectl
ممکن است ببینی:
System clock synchronized: yes
NTP service: active
——————

🖨 بخش دوم — Printer در Linux
حالا برویم سراغ پرینتر.
در لینوکس سیستم معروفی برای مدیریت پرینتر وجود دارد:
CUPS
CUPS = Common UNIX Printing System
CUPS سیستم اصلی چاپ در بسیاری از توزیع‌های Linux و Unix است.
ساختار ساده:
Application
↓
CUPS
↓
Printer
مثلاً Firefox می‌خواهد یک صفحه را چاپ کند:
Firefox
↓
CUPS
↓
Printer



—————-

🖨 نصب CUPS
در Debian/Ubuntu:
sudo apt install cups
فعال کردن سرویس:
sudo systemctl enable --now cups
بررسی:
systemctl status cups
———

📋 دیدن پرینترها
یکی از ابزارهای مهم CUPS:
lpstat
مثلاً:
lpstat -p
برای دیدن Printerهای موجود.
و:
lpstat -a
برای دیدن Printerهایی که درخواست‌های چاپ را قبول می‌کنند.

—————

دستور:
lp file.txt
یعنی فایل را برای چاپ ارسال کن.
مثلاً:
lp report.pdf


—————

❌ حذف یک Job چاپ
اگر اشتباهی فایل بزرگی را برای چاپ فرستادی:
cancel JOB-ID
مثلاً:
cancel printer-123
برای دیدن Jobها:
lpstat -o



—————

🌐 پنل گرافیکی CUPS
CUPS یک Web Interface هم دارد.
معمولاً:
http://localhost:631
در آن می‌توانی:
Printer اضافه کنی
Printer حذف کنی
Jobها را ببینی
Printer پیش‌فرض تعیین کنی
وضعیت Printer را بررسی کنی


فصل ششم — قسمت شصت و پنجم 🐧
Remote Desktop — اتصال گرافیکی از راه دور به لینوکس
——————-
در این قسمت می‌خواهیم یاد بگیریم چطور از یک کامپیوتر دیگر به محیط گرافیکی لینوکس وصل شویم.
مثلاً:
Windows / Linux
│
│ Network
↓
Linux Server
│
└── GUI

————-

Remote Desktop چیست؟
یعنی به‌جای اینکه جلوی خود سرور باشیم، از کامپیوتر خودمان به آن وصل شویم و محیط گرافیکی آن را ببینیم و کنترل کنیم.
مثلاً:
PC خودت
↓
Remote Connection
↓
Linux Server
↓
GNOME / KDE / XFCE



——————

2️⃣ X11 چیست؟
X11 یکی از سیستم‌های قدیمی و معروف Linux/Unix برای نمایش GUI است.
نکته مهم:
X11 خودش «Remote Desktop» نیست؛ ولی قابلیت اجرای برنامه‌های گرافیکی از راه دور را دارد.

مثلاً روی سرور:
gedit
و پنجره برنامه روی کامپیوتر کلاینت نمایش داده شود.


—————


3️⃣ X11 Forwarding چیست؟
یعنی اتصال گرافیکی یک برنامه را از طریق SSH منتقل کنیم.
ساختار:
Client
│
│ SSH
↓
SSH Server
│
↓
X11 Application
مثلاً:
ssh -X ali@192.168.1.10
بعد روی سرور:
xclock
اگر X11 Forwarding درست تنظیم شده باشد، پنجره xclock روی سیستم کلاینت نمایش داده می‌شود.


—————-


4️⃣ فعال کردن X11 Forwarding در SSH
روی سرور فایل:
nano /etc/ssh/sshd_config
را باز کن.
دنبال این گزینه بگرد:
X11Forwarding yes
اگر # اولش بود:
#X11Forwarding yes
به:
X11Forwarding yes
تغییر بده.
بعد:
systemctl restart sshd



—————-

نصب X11 روی سیستم
در Debian/Ubuntu ممکن است نیاز داشته باشی:
apt install xauth
بعد از کلاینت:
ssh -X user@server-ip
یا در بعضی شرایط:
ssh -Y user@server-ip
🧠 تفاوت ساده:
-X → X11 Forwarding معمولی
-Y → Trusted X11 Forwarding


——————
5️⃣ Remmina چیست؟
Remmina یک برنامه GUI برای اتصال Remote به سیستم‌های دیگر است.
می‌تواند با پروتکل‌هایی مثل:
RDP
SSH
VNC
SPICE
کار کند.
مثلاً در Ubuntu:
sudo apt install remmina
بعد Remmina را باز می‌کنی:
Remmina
↓
New Connection
↓
Protocol: RDP
↓
Server: 192.168.1.10
↓
Username
↓
Password
↓
Connect

——————-

6️⃣ Remote Desktop واقعی با RDP
اگر می‌خواهی کل Desktop لینوکس را از راه دور ببینی، X11 Forwarding انتخاب مناسبی نیست.
برای این کار می‌توانی از RDP استفاده کنی.
مثلاً روی بعضی سیستم‌های Linux می‌توانی xrdp نصب کنی:
sudo apt install xrdp
سپس:
systemctl enable --now xrdp
بعد از Windows می‌توانی برنامه:
Remote Desktop Connection
را باز کنی و IP لینوکس را وارد کنی.


——————-

7️⃣ X11 Forwarding vs Remote Desktop
این تفاوت را حتماً بفهم:
X11 Forwarding
فقط یک یا چند برنامه گرافیکی را اجرا می‌کنی:
SSH
↓
xclock
↓
پنجره xclock روی Client
Remote Desktop
کل محیط دسکتاپ را می‌بینی:
RDP
↓
Linux Desktop
├── Files
├── Terminal
├── Browser
└── Settings





——————-


فصل ششم — قسمت شصت و چهارم 🐧
مفهوم
localization
——————-

Localization یا بومی‌سازی یعنی سیستم‌عامل بداند کاربر در چه زبان، کشور و منطقه‌ای کار می‌کند و اطلاعات را متناسب با آن نمایش دهد.
مثلاً:
زبان: فارسی
کشور: ایران
تقویم/فرمت تاریخ: متناسب با تنظیمات منطقه
فرمت عدد: متناسب با Locale
کیبورد: فارسی / انگلیسی

—————

🌍 Locale چیست؟
Locale مجموعه‌ای از تنظیمات مربوط به زبان و منطقه کاربر است.
در لینوکس این اطلاعات معمولاً از طریق Environment Variableها مشخص می‌شوند.
برای دیدن Locale فعلی:
locale
مثلاً ممکن است ببینی:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=


——————

🧠 مهم‌ترین متغیرها
LANG
تنظیم پیش‌فرض Locale سیستم/کاربر است.
echo $LANG
مثلاً:
en_US.UTF-8
یعنی:
en → English
US → United States
UTF-8 → Encoding


—————

LC_ALL
اگر مقدار داشته باشد، می‌تواند تنظیمات سایر LC_*ها را override کند.
مثلاً:
echo $LC_ALL
معمولاً بهتر است برای تنظیم دائمی بی‌دلیل از آن استفاده نکنیم.


———————

LC_TIME
فرمت نمایش زمان و تاریخ:
echo $LC_TIME
LC_NUMERIC
فرمت اعداد:
echo $LC_NUMERIC
LC_MONETARY
فرمت پول:
echo $LC_MONETARY
LC_MESSAGES
زبان پیام‌های برنامه‌ها:
echo $LC_MESSAGES
—————-

🔤 حالا Encoding چیست؟
اینجا باید یک تفاوت مهم را بفهمی:
Locale ≠ Encoding
Locale می‌گوید:
«سیستم از چه زبان و منطقه‌ای استفاده کند؟»

Encoding می‌گوید:
«کاراکترها را چطور به داده قابل ذخیره در کامپیوتر تبدیل کنیم؟»


————-

1️⃣ ASCII
قدیمی‌ترین ساختار معروف برای نمایش کاراکترهاست.
مثلاً:
A → 65
B → 66
C → 67
ASCII عمدتاً برای حروف انگلیسی، اعداد و تعدادی علامت طراحی شده.
❌ مشکل:
فارسی، عربی، چینی و بسیاری زبان‌های دیگر را پوشش نمی‌دهد.



2️⃣ ISO-8859
برای گسترش ASCII مجموعه‌هایی از استانداردهای 8 بیتی ایجاد شدند.
مثلاً:
ISO-8859-1
برای بسیاری از کاراکترهای زبان‌های اروپای غربی استفاده می‌شد.
اما هر نسخه مجموعه متفاوتی از کاراکترها را پوشش می‌دهد.
پس هنوز مشکل چندزبانه بودن کامل وجود داشت.



3️⃣ Unicode
Unicode آمد تا برای تقریباً تمام زبان‌های دنیا یک استاندارد واحد برای کاراکترها داشته باشیم.
مثلاً:
A
ش
中
😀
همگی می‌توانند در Unicode تعریف شوند.
🧠 خیلی ساده:
ASCII یک محله بود؛ Unicode یک شهر خیلی بزرگ برای کاراکترهای زبان‌های مختلف است. 😄




4️⃣ UTF
اینجا یک نکته خیلی مهم:
Unicode و UTF یکی نیستند.
Unicode مشخص می‌کند چه کاراکتری چه کدی دارد.
UTF مشخص می‌کند این اطلاعات چطور در حافظه/فایل به صورت بایت ذخیره یا منتقل شود.
معروف‌ترین آن:
UTF-8
مثلاً:
LANG=en_US.UTF-8
یعنی Locale انگلیسی آمریکا با Encoding مبتنی بر UTF-8.






——————

🔍 در لینوکس چطور ببینیم؟
مهم‌ترین دستور:
locale
برای دیدن Localeهای موجود:
locale -a
مثلاً:
C
C.utf8
en_US.utf8
و برای دیدن مقدار یک متغیر:
echo $LANG
یا:
echo $LC_ALL


فصل ششم — قسمت شصت و سوم 🐧
Accessibility - برای افراد با مشکلات بینایی


——————-
Accessibility یعنی قابلیت‌هایی که کمک می‌کنند افراد دارای محدودیت‌های بینایی، شنوایی یا حرکتی راحت‌تر با کامپیوتر کار کنند.
اینجا تمرکز ما روی Keyboard Accessibility است.

—————-

⌨️ Keyboard Accessibility چیست؟
فرض کن کسی نمی‌تواند به‌راحتی چند کلید را همزمان فشار دهد.
مثلاً برای:
Ctrl + Alt + Delete
باید سه کلید را با هم بگیرد.
Accessibility می‌تواند این کار را راحت‌تر کند.

—————

1️⃣ Sticky Keys
یکی از مهم‌ترین قابلیت‌هاست.
با Sticky Keys لازم نیست کلیدهای ترکیبی را همزمان نگه داری.
مثلاً به‌جای:
Ctrl + Alt + T
می‌توانی:
Ctrl
↓
Alt
↓
T
را جداگانه فشار بدهی.
سیستم متوجه می‌شود که Ctrl و Alt همچنان در ترکیب هستند.
🧠 مثال واقعی:
اگر فردی مشکل حرکتی داشته باشد، به‌جای اینکه سه انگشتش را همزمان روی کیبورد بگذارد، کلیدها را یکی‌یکی می‌زند.

——————-

2️⃣ Slow Keys
Slow Keys باعث می‌شود سیستم فشارهای خیلی سریع یا اتفاقی روی کلیدها را نادیده بگیرد.
مثلاً اگر دستت روی کیبورد کشیده شود:
aaaaaaaaaaaa
سیستم می‌تواند تنظیم شود که کلید باید مدت مشخصی نگه داشته شود تا ثبت شود.
مناسب افرادی است که کنترل حرکتی دست برایشان سخت است.

——————-

3️⃣ Bounce Keys
اگر یک کلید را چند بار پشت سر هم به‌صورت ناخواسته فشار بدهی، Bounce Keys می‌تواند فشارهای تکراری سریع را نادیده بگیرد.
مثلاً:
aaaaaaaa
به دلیل چند بار لرزش انگشت ایجاد شده؛ سیستم می‌تواند جلوی ثبت همه آن‌ها را بگیرد.


—————

4️⃣ Toggle Keys
وقتی کلیدهایی مثل:
Caps Lock
Num Lock
Scroll Lock
را فشار می‌دهی، Toggle Keys می‌تواند با صدای متفاوت فعال یا غیرفعال شدن آن‌ها را اعلام کند.
مثلاً:
Caps Lock ON → 🔊
Caps Lock OFF → 🔊
این برای کسی که نمی‌تواند وضعیت چراغ‌های کیبورد را ببیند مفید است.

———————

🔄 5️⃣ Switch / Switching
در Accessibility مفهوم Switch Access هم وجود دارد.
یعنی کاربر می‌تواند به‌جای استفاده از ماوس و کیبورد معمولی، با یک یا چند کلید یا وسیله ورودی ساده بین گزینه‌ها جابه‌جا شود.
مثلاً:
[Firefox] [Terminal] [Files]

↓
Switch

[Terminal] انتخاب شد
سیستم گزینه‌ها را یکی‌یکی Highlight می‌کند و کاربر با فشار یک کلید انتخاب می‌کند.


—————
🌍 اول یک نکته مهم: تغییر زبان Accessibility نیست
تغییر زبان کیبورد معمولاً در بخش Keyboard / Input Sources تنظیم می‌شود، نه Accessibility.
مثلاً می‌خواهی بین:
🇮🇷 فارسی
🇺🇸 English
سوییچ کنی.
در GNOME معمولاً از:
Settings
↓
Keyboard
↓
Input Sources
↓
Add Input Source
زبان فارسی و انگلیسی را اضافه می‌کنی.
بعد معمولاً با:
Super + Space
بین زبان‌ها جابه‌جا می‌شوی.
در بعضی محیط‌ها میانبر می‌تواند متفاوت باشد.

—————-


👁 1. قابلیت‌های مربوط به بینایی
Screen Reader
صفحه را برای کاربر می‌خواند.
مثلاً کاربر روی یک آیکون می‌رود:
Firefox
Screen Reader اعلام می‌کند:
Firefox، application

در GNOME معمولاً ابزار معروف آن Orca است.


—————

🔍 Zoom / Magnification
قسمتی از صفحه را بزرگ می‌کند.
مثلاً:
عادی:
[ Settings ]

Zoom:
[ SETTINGS ]
برای افرادی که دید ضعیف دارند بسیار کاربردی است.

——————-
📝 Large Text

اندازه نوشته‌ها را بزرگ می‌کند.

🎨 High Contrast

تضاد رنگ‌ها را بیشتر می‌کند تا نوشته‌ها و عناصر صفحه راحت‌تر دیده شوند.

——————

👂 2. قابلیت‌های مربوط به شنوایی
برای افرادی که مشکل شنوایی دارند، بعضی سیستم‌ها می‌توانند به‌جای تکیه بر صدا، نمایش بصری ارائه کنند.
مثلاً:
Notification Sound
↓
Visual Flash
یعنی اتفاقی که با صدا اعلام می‌شد، به‌صورت تصویری هم مشخص شود.

—————-
🖱 4. قابلیت‌های مربوط به Mouse
مثلاً Mouse Keys اجازه می‌دهد با صفحه‌کلید، نشانگر ماوس را کنترل کنی.
یعنی به‌جای حرکت دادن فیزیکی ماوس:
Keyboard
↓
Mouse Pointer
همچنین می‌توان سرعت حرکت ماوس و مدت نگه‌داشتن کلیک را تنظیم کرد.

————-

🧠 5. Switch Access
برای افرادی که نمی‌توانند به‌راحتی از ماوس و کیبورد معمولی استفاده کنند.
سیستم گزینه‌ها را یکی‌یکی انتخاب می‌کند:
Firefox
↓
Terminal
↓
Files
↓
Settings
و کاربر با یک Switch یا ورودی ساده گزینه موردنظر را انتخاب می‌کند.

—————-

🖥 6. Accessibility در محیط‌های مختلف
ممکن است اسم و محل این گزینه‌ها در:
GNOME
KDE
XFCE
Cinnamon
MATE
کمی متفاوت باشد.
ولی مفهوم کلی یکی است:
👁 Vision
👂 Hearing
⌨️ Keyboard
🖱 Mouse
🗣 Speech / Reading



——————


فصل ششم — قسمت شصت و دوم 🐧
قابلیتهای استاندارد در محیط های gui
————————————

حالا که فهمیدیم GUI چیست، ببینیم یک Desktop Environment از چه قسمت‌هایی تشکیل شده.
————-
🖥 1. Desktop Settings
بخش تنظیمات دسکتاپ.
مثلاً:
Settings
├── Display
├── Network
├── Sound
├── Keyboard
├── Mouse
└── Background
یعنی جایی که ظاهر و رفتار سیستم را تنظیم می‌کنیم.

———————

🖥 2. Display Manager
قبل از ورود به دسکتاپ، صفحه Login را نمایش می‌دهد.
مثلاً:
Username
Password
↓
Login
↓
Desktop
نمونه‌ها:
GDM → معمولاً GNOME
SDDM → معمولاً KDE
LightDM → سبک و قابل استفاده با محیط‌های مختلف
🧠 Display Manager با Window Manager فرق دارد.
Display Manager → ورود به سیستم
Window Manager → مدیریت پنجره‌ها

——————-

📁 3. File Manager
برای مدیریت فایل و پوشه‌ها.
مثلاً:
Home
├── Documents
├── Downloads
├── Pictures
└── Videos
نمونه‌ها:
GNOME → Files / Nautilus
KDE → Dolphin
XFCE → Thunar
Cinnamon → Nemo
MATE → Caja

—————-

🔹 4. Icon
آیکون‌ها میانبرهای گرافیکی برای برنامه‌ها، فایل‌ها و پوشه‌ها هستند.
مثلاً:
🗑 Trash
📁 Home
🌐 Firefox

———————-

🧩 5. Widget
ابزارهای کوچک روی دسکتاپ یا پنل.
مثلاً:
CPU: 20%
RAM: 45%
Weather: 25°C
Clock: 18:40

—————-

⭐️ 6. Favorite Bar / Dock
برنامه‌های مورد علاقه را سریع در اختیارمان می‌گذارد.
مثلاً در GNOME می‌توانی برنامه‌های پرکاربرد را در Dash/Dock قرار بدهی.
——————-

🚀 7. Launcher
برای اجرای سریع برنامه‌ها.
مثلاً:
Super
↓
Firefox
یا جستجو می‌کنی:
terminal
و Terminal را اجرا می‌کنی.

——————-

📋 8. Menu
منوی برنامه‌ها.
مثلاً:
Applications
├── Internet
├── Office
├── System
├── Utilities
└── Settings


————-

📊 9. Panel
نوارهایی در بالا یا پایین صفحه که معمولاً اطلاعات و ابزارهای مختلف را نشان می‌دهند.
مثلاً:
┌──────────────────────────────────────┐
│ Applications Network 🔊 🔋 18:40│
└──────────────────────────────────────┘

—————-

🪟 10. Window Manager
مسئول مدیریت پنجره‌هاست.
مثلاً:
باز کردن پنجره
بستن
Minimize
Maximize
جابجایی
Resize

———————

🟠 GNOME
GNOME ظاهر مدرن و ساده‌ای دارد.
7
ویژگی مهم:
ساده و تمیز
Activities Overview
جستجوی سریع
مناسب لپ‌تاپ و دسکتاپ
قابلیت گسترش با Extensions

🔵 KDE Plasma
6
KDE خیلی قابل تنظیم است.
مثلاً می‌توانی:
پنل را جابه‌جا کنی
ظاهر را تغییر بدهی
Widget اضافه کنی
رفتار پنجره‌ها را تغییر بدهی
🧠 اگر GNOME را ساده و مینیمال بدانیم، KDE بیشتر قابل شخصی‌سازی است.


🟢 Cinnamon
6
ظاهرش برای کسی که از Windows آمده بسیار آشناست:
┌─────────────────────────┐
│ │
│ Desktop │
│ │
├─────────────────────────┤
│ Menu Apps Clock │
└─────────────────────────┘



🟡 XFCE
7
سبک و کم‌مصرف است.
برای:
سیستم‌های قدیمی
VMها
سیستم‌هایی با RAM کم
انتخاب خوبی است.




🟣 MATE
5

MATE هم سبک و کلاسیک است و ساختار سنتی دسکتاپ را حفظ می‌کند.




—————————-


🧩 GNOME Extensions
یکی از قابلیت‌های جذاب GNOME همین Extensions است.
با Extension می‌توانیم امکانات جدید به GNOME اضافه کنیم.
مثلاً:
GNOME
↓
Extension
↓
قابلیت جدید
مثلاً:
اضافه کردن پنل
نمایش CPU/RAM
تغییر رفتار پنجره‌ها
اضافه کردن Dock
تغییر ظاهر Shell
🧠 مثل افزونه مرورگر است؛ ولی برای محیط GNOME.


———————


فصل ششم — قسمت شصت‌ویکم 🐧
نصب و پیکربندی محیط GUI

——————-
🖥
اول GUI چیست؟
GUI = Graphical User Interface
یعنی محیط گرافیکی که با ماوس، پنجره، آیکون و منو با لینوکس کار می‌کنیم.
مثلاً به‌جای:
mkdir test
در GUI می‌توانی با کلیک راست → New Folder پوشه بسازی.

—————-

2️⃣ Window Manager چیست؟
اینجا یک لایه پایین‌تر داریم.
Window Manager مسئول مدیریت پنجره‌هاست؛ مثلاً:
پنجره را کجا قرار بده؟
پنجره را Maximize کن
پنجره را Minimize کن
پنجره را ببند
برای محیط‌های مختلف:
GNOME → Mutter
KDE → KWin
Cinnamon → Muffin
MATE → Marco
Metacity هم Window Manager قدیمی GNOME بود.
پس خیلی ساده:
Desktop Environment
↓
Window Manager
↓
پنجره‌ها

——————

3️⃣ XFree86 چیست؟
XFree86 یکی از پیاده‌سازی‌های قدیمی سیستم X Window System بود.
در گذشته وظیفه‌اش فراهم کردن زیرساخت نمایش گرافیکی در سیستم‌های Unix/Linux بود.
بعداً X.Org جایگزین اصلی آن شد.

—————

4️⃣ X.Org چیست؟
X.Org Server یکی از پیاده‌سازی‌های سیستم X Window System است.
به زبان ساده:
برنامه‌ها می‌خواهند چیزی روی مانیتور نمایش دهند؛ X.Org واسطه‌ای بین برنامه‌ها، ورودی‌ها و سخت‌افزار گرافیکی است.

ساختار ساده:
Application
↓
Desktop Environment
↓
X.Org
↓
GPU / Display

—————

5️⃣ Wayland چیست؟
Wayland یک معماری جدیدتر برای سیستم نمایش گرافیکی است که برای بسیاری از سناریوها جایگزین X11/X.Org می‌شود.
ساختار آن ساده‌تر است:
Application
↓
Wayland Compositor
↓
Display
مثلاً در GNOME، Mutter می‌تواند نقش compositor مربوط به Wayland را هم انجام دهد.
🧠 پس تفاوت اصلی را این‌طور حفظ کن:
قدیمی‌تر:
XFree86 → X.Org / X11

جدیدتر:
Wayland


—————-


6️⃣ نصب GUI در Red Hat / Fedora
اگر از سیستم‌های مبتنی بر Red Hat استفاده می‌کنی، ابتدا می‌توانی گروه‌های نرم‌افزاری را ببینی:
dnf group list
مثلاً برای نصب محیط GUI:
dnf group install "Server with GUI"
یا در بعضی نسخه‌ها:
dnf group install "Workstation"
⚠️ اسم دقیق Group ممکن است بین نسخه‌های Fedora/RHEL/AlmaLinux متفاوت باشد؛ اول با dnf group list بررسی کن.

—————

فعال کردن GUI هنگام Boot
بعد از نصب:
systemctl set-default graphical.target
بعد:
reboot
حالا سیستم به‌جای محیط متنی، به محیط گرافیکی می‌رود.
برای دیدن Target فعلی:
systemctl get-default
اگر دیدی:
graphical.target
یعنی GUI به‌عنوان حالت پیش‌فرض انتخاب شده.

——————

7️⃣ نصب GUI در Debian / Ubuntu
اول معمولاً Repositoryها باید درست باشند.
برای X.Org:
apt install xorg
برای GNOME:
apt install gnome
یا بسته‌های دسکتاپ مناسب نسخه تو، مثلاً:
apt install ubuntu-desktop
برای X11 authentication هم:
apt install xauth
نکته مهم درباره دستورهای نوشته‌شده
این‌هایی که نوشتی احتمالاً اشتباه تایپی دارند:
apt-get install unmtu-desktop
apt-get install gnome-desktop-environmaent
این اسم‌ها به این شکل صحیح نیستند.
مثلاً:
apt install ubuntu-desktop
و برای GNOME بسته/Task دقیق را متناسب با توزیع بررسی می‌کنیم.

———————-


فصل ششم — قسمت شصتم 🐧
محیط GUI در لینوکس

————————

در این فصل از محیط متنی (CLI) فاصله می‌گیریم و وارد محیط گرافیکی (GUI) لینوکس می‌شویم.

🖥 GUI چیست؟
GUI یعنی:
Graphical User Interface
یعنی محیطی که به‌جای اینکه همه‌چیز را با دستور انجام بدهیم، با پنجره، آیکون، منو و ماوس کار می‌کنیم.
مثلاً در CLI:
mkdir test
cd test
ولی در GUI می‌توانیم با کلیک راست و انتخاب New Folder پوشه بسازیم.

———————-

1️⃣ Desktop Environment چیست؟
لینوکس خودش یک محیط دسکتاپ مشخص ندارد.
ما می‌توانیم Desktop Environment نصب کنیم.
چند مورد معروف:
GNOME
محیط پیش‌فرض بسیاری از توزیع‌ها، مخصوصاً Fedora و Ubuntu.
KDE Plasma
ظاهر بسیار قابل تنظیم و شبیه‌تر به محیط‌های کلاسیک دسکتاپ.
XFCE
سبک و کم‌مصرف؛ مناسب سیستم‌های ضعیف‌تر.
Cinnamon
محیطی ساده و شبیه دسکتاپ سنتی.
MATE
سبک و کلاسیک.
LXQt
خیلی سبک و مناسب سیستم‌های ضعیف.
مثلاً:
Linux
├── GNOME
├── KDE Plasma
├── XFCE
├── Cinnamon
├── MATE
└── LXQt
🧠 نکته:
توزیع لینوکس و Desktop Environment یکی نیستند.
مثلاً:
Ubuntu + GNOME
Ubuntu + KDE
Ubuntu + XFCE
همه Ubuntu هستند ولی ظاهر و محیط دسکتاپشان متفاوت است.

——————

2️⃣ نصب محیط GUI
مثلاً در Debian/Ubuntu می‌توانیم GNOME نصب کنیم:
sudo apt install task-gnome-desktop
در سیستم‌های Red Hat مانند Fedora:
sudo dnf group install "GNOME Desktop Environment"
بعد می‌توانیم Target گرافیکی را فعال کنیم:
systemctl set-default graphical.target
و برای ورود فوری به محیط گرافیکی:
systemctl isolate graphical.target

——————————-

3️⃣ Accessibility چیست؟
Accessibility یعنی امکاناتی که استفاده از سیستم را برای افراد با نیازهای متفاوت راحت‌تر می‌کند.
مثلاً:
بزرگ کردن نوشته‌ها
Screen Reader
بزرگ‌نمایی صفحه
کیبورد مجازی
High Contrast
تنظیم سرعت ماوس
تنظیم Sticky Keys
مثلاً فردی که دید ضعیف دارد می‌تواند:
Settings
↓
Accessibility
↓
Large Text
را فعال کند.
🧠 خیلی ساده:
Accessibility یعنی سیستم را طوری تنظیم کنیم که افراد مختلف راحت‌تر بتوانند از آن استفاده کنند.


————————


4️⃣ تنظیم زبان
در محیط GUI می‌توانیم زبان سیستم را تغییر دهیم.
مثلاً:
Settings
↓
Region & Language
↓
Language
زبان روی مواردی مثل:
منوها
پیام‌های سیستم
تاریخ
بعضی برنامه‌ها
تأثیر می‌گذارد.

——————

5️⃣ تنظیم جغرافیا و Region
Region مشخص می‌کند سیستم از چه قواعد منطقه‌ای استفاده کند.
مثلاً:
Language → English
Region → Iran
این موارد می‌توانند روی:
فرمت تاریخ
فرمت ساعت
واحد پول
فرمت اعداد
اولین روز هفته
تأثیر داشته باشند.

————

6️⃣ تنظیم Time Zone
مثلاً:
timedatectl
برای دیدن وضعیت زمان سیستم.
مثلاً:
timedatectl set-timezone Asia/Tehran
و برای دیدن Time Zoneهای موجود:
timedatectl list-timezones

20 last posts shown.