دستورات ضروری CLI (Command Line Interface) برای مدیریت سرور، ستون فقرات هر مدیر سیستم حرفه‌ای محسوب می‌شوند و تسلط بر آنها، تفاوت بین یک مدیر مبتدی و یک مهندس زیرساخت باتجربه را می‌سازد. اکثر سرورهای لینوکس در محیط تولید، بدون رابط گرافیکی کار می‌کنند و مدیریت آنها تنها از طریق ترمینال و SSH امکان‌پذیر است. این مجموعه دستورات، از پیمایش فایل‌ها و مدیریت مجوزها تا پایش منابع، عیب‌یابی شبکه، مدیریت فرآیندها و خودکارسازی کارهای تکراری را پوشش می‌دهند و پایه هر فعالیت حرفه‌ای در حوزه DevOps و مدیریت زیرساخت را تشکیل می‌دهند. آستانه تسلط بر دستورات پایه معمولاً چند هفته تمرین مستمر است، اما بازده آن در بلندمدت، بهره‌وری را چند برابر می‌کند. تجربه‌های واقعی از پروژه‌های زیرساختی نشان می‌دهد که مهندسانی که بر CLI مسلط هستند، در مواجهه با بحران‌های سرور، در چند ثانیه تشخیص و اقدام می‌کنند؛ در حالی که هم‌تایان کمتر مسلط، دقایق یا ساعات ارزشمندی را در جستجوی راه‌حل از دست می‌دهند. این مقاله، چارچوبی عملی و دسته‌بندی‌شده از دستورات ضروری CLI برای مدیریت سرور ارائه می‌دهد: پیمایش و مدیریت فایل، مدیریت مجوزها، پایش منابع و فرآیندها، عیب‌یابی شبکه، مدیریت بسته‌ها، امنیت، پشتیبان‌گیری و خودکارسازی. همچنین، الگوهای ترکیب دستورات با Pipe، Aliasهای حرفه‌ای و اشتباهات رایج در این حوزه بررسی می‌شود.

در پروژه‌های متعدد زیرساختی، دیده‌ام که تسلط بر CLI، یکی از آن مهارت‌هایی است که به‌طور مستقیم بر سرعت تشخیص و حل بحران اثر می‌گذارد. مدیری که دستورات ضروری را به‌طور شهودی می‌شناسد، در لحظه‌های حساس، تصمیم‌های سریع‌تر و دقیق‌تری می‌گیرد.

چرا تسلط بر CLI برای مدیران سرور حیاتی است؟

مدیریت سرور در محیط تولید، تقریباً همیشه از طریق CLI (Command Line Interface) انجام می‌شود. این وابستگی، نه به دلیل سادگی CLI، بلکه به دلیل مزیت‌های ساختاری آن در محیط‌های حرفه‌ای است.

دلایل حیاتی بودن CLI در مدیریت سرور

  • سبکی و کارایی: CLI به منابع کمتری نیاز دارد و در سرورهای با منابع محدود نیز روان عمل می‌کند.
  • دسترسی از راه دور: با SSH (Secure Shell)، مدیریت سرور از هر نقطه جهان ممکن است.
  • خودکارسازی: هر دستور CLI قابل تبدیل به اسکریپت است و امکان خودکارسازی کارهای تکراری را فراهم می‌کند.
  • پایداری: دستورات پایه Unix در دهه‌ها تغییر اندکی کرده‌اند و دانش آنها پایدار می‌ماند.
  • یکپارچگی با ابزارهای DevOps: Ansible، Terraform، Docker و Kubernetes همگی بر پایه CLI عمل می‌کنند.
  • دقت و تکرارپذیری: یک دستور، دقیقاً همان عملیات را در هر بار اجرا تکرار می‌کند.

اثر تسلط بر CLI بر سرعت تشخیص بحران

در محیط‌های تولید، بحران‌های سرور معمولاً در لحظه‌های حساس رخ می‌دهند: بار سنگین، قطعی شبکه، مشکل دیسک یا نفوذ امنیتی. در این لحظه‌ها، هر ثانیه اهمیت دارد. مدیری که به‌طور شهودی دستورات ضروری را می‌شناسد، می‌تواند در چند ثانیه وضعیت سیستم را ارزیابی کند و اقدام مناسب را انجام دهد.

سطح تسلطزمان تشخیص بحرانزمان رفع مشکل
مبتدیدقایق تا ساعت‌هاساعت‌ها
متوسطچند دقیقهده‌ها دقیقه
حرفه‌ایچند ثانیهچند دقیقه
«در مدیریت سرور، هر ثانیه اهمیت دارد؛ تسلط بر CLI، تفاوت بین یک بحران کنترل‌شده و یک فاجعه طولانی است.»

برای درک عمیق‌تر مزایای CLI در بهره‌وری کلی توسعه، مقاله CLI چطور کارایی توسعه‌دهندگان را بالا می‌برد؟ را مطالعه کنید. همچنین برای درک چارچوب کلی مدیریت سرور، مقاله مدیریت سرور Linux برای مبتدیان از کجا باید شروع شود؟ نقطه شروع خوبی است.

پیمایش و مدیریت فایل

پیمایش و مدیریت فایل، اولین مهارتی است که هر مدیر سرور باید به آن تسلط داشته باشد. این دستورات، پایه هر عملیاتی در سیستم‌های لینوکسی محسوب می‌شوند.

دستورات پیمایش

  • pwd — نمایش مسیر فعلی.
  • ls — لیست محتویات پوشه.
  • ls -la — لیست با جزئیات و فایل‌های مخفی.
  • ls -lh — لیست با اندازه‌های خوانا (KB، MB، GB).
  • cd /path — تغییر پوشه.
  • cd .. — بازگشت به پوشه والد.
  • cd ~ — بازگشت به پوشه خانه.
  • tree — نمایش ساختار درختی پوشه‌ها.

دستورات مدیریت فایل

  • touch file.txt — ایجاد فایل خالی.
  • mkdir -p /path/to/dir — ایجاد پوشه با والدها.
  • cp source dest — کپی فایل.
  • cp -r source/ dest/ — کپی پوشه به‌صورت بازگشتی.
  • mv source dest — انتقال یا تغییر نام.
  • rm file.txt — حذف فایل.
  • rm -rf dir/ — حذف پوشه و محتوای آن (با احتیاط).
  • ln -s source dest — ایجاد لینک نمادین.

دستورات مشاهده و ویرایش محتوا

  • cat file.txt — نمایش محتوای فایل.
  • less file.txt — مشاهده با قابلیت پیمایش.
  • head -n 20 file.txt — نمایش ۲۰ خط اول.
  • tail -n 20 file.txt — نمایش ۲۰ خط آخر.
  • tail -f file.log — نمایش زنده فایل در حال نوشتن.
  • nano file.txt — ویرایش با ویرایشگر ساده.
  • vim file.txt — ویرایش با ویرایشگر پیشرفته.

دستورات جستجو

  • find /path -name \"*.log\" — جستجوی فایل بر پایه نام.
  • find /path -type f -size +100M — یافتن فایل‌های بزرگ.
  • find /path -mtime -7 — یافتن فایل‌های تغییر یافته در ۷ روز گذشته.
  • grep \"pattern\" file.txt — جستجوی الگو در فایل.
  • grep -r \"pattern\" /path — جستجوی بازگشتی در پوشه.
  • grep -i \"pattern\" file — جستجوی حساس به حروف کوچک و بزرگ.

دستورات فشرده‌سازی

  • tar -czf archive.tar.gz /path — ساخت آرشیو فشرده.
  • tar -xzf archive.tar.gz — استخراج آرشیو.
  • zip -r archive.zip /path — ساخت آرشیو ZIP.
  • unzip archive.zip — استخراج ZIP.
  • gzip file — فشرده‌سازی فایل.
  • gunzip file.gz — استخراج فایل فشرده.
«دستورات مدیریت فایل، الفبای کار با لینوکس هستند؛ بدون تسلط بر آنها، هیچ عملیات پیچیده‌تری امکان‌پذیر نیست.»

مدیریت مجوزها و مالکیت

مدیریت مجوزها یکی از مهم‌ترین و در عین حال حساس‌ترین حوزه‌های مدیریت سرور است. مجوزهای نادرست، می‌توانند به نفوذ امنیتی یا اختلال در عملکرد سرویس‌ها منجر شوند.

درک ساختار مجوزها

در لینوکس، هر فایل سه نوع مجوز دارد: خواندن (r)، نوشتن (w) و اجرا (x). این مجوزها برای سه گروه اعمال می‌شوند: مالک (User)، گروه (Group) و سایرین (Others).

نمادمقدار عددیمعنی
r۴خواندن
w۲نوشتن
x۱اجرا
rwx۷دسترسی کامل
rw-۶خواندن و نوشتن
r--۴فقط خواندن

دستورات مدیریت مجوزها

  • chmod 644 file.txt — مجوز خواندن و نوشتن برای مالک، خواندن برای سایرین.
  • chmod 755 script.sh — مجوز اجرا برای همه، نوشتن فقط برای مالک.
  • chmod +x script.sh — افزودن مجوز اجرا.
  • chmod -R 755 /path — اعمال بازگشتی مجوز.
  • chown user:group file — تغییر مالک و گروه.
  • chown -R user:group /path — اعمال بازگشتی مالکیت.
  • chgrp group file — تغییر گروه فایل.

مجوزهای رایج در سرور

نوع فایلمجوز پیشنهادیکاربرد
فایل‌های HTML۶۴۴خواندن برای همه
پوشه‌ها۷۵۵دسترسی اجرا برای همه
اسکریپت‌ها۷۵۵اجرا برای همه
wp-config.php۶۰۰فقط مالک دسترسی دارد
کلیدهای SSH۶۰۰فقط مالک
فایل‌های موقت۶۴۴خواندن و نوشتن

دستور sudo و su

  • sudo command — اجرای دستور با دسترسی root.
  • sudo -i — ورود به Shell با دسترسی root.
  • su - user — تغییر کاربر.
  • sudo -u user command — اجرای دستور با کاربر دیگر.

در پروژه‌های واقعی، دیده‌ام که بیشترین مشکلات امنیتی از مجوزهای نادرست ناشی می‌شود. یک فایل با مجوز ۷۷۷، به هر کاربری امکان نوشتن می‌دهد و در صورت ترکیب با اجرا، می‌تواند به نفوذ منجر شود. برای درک عمیق‌تر امنیت سرور، مقاله چگونه امنیت سرور را افزایش دهیم؟ را مطالعه کنید.

مدیریت فرآیندها

پایش و مدیریت فرآیندها، بخشی جدایی‌ناپذیر از مدیریت سرور است. فرآیندهای سرکش یا پرمصرف می‌توانند کل سرور را از کار بیندازند.

دستورات پایش فرآیندها

  • ps aux — نمایش تمام فرآیندهای فعال.
  • ps aux | grep nginx — یافتن فرآیند خاص.
  • top — نمایش زنده فرآیندها و منابع.
  • htop — نسخه گرافیکی و کاربرپسندتر top.
  • pgrep nginx — یافتن PID فرآیند.
  • pidof nginx — یافتن PID بر پایه نام.

دستورات مدیریت فرآیندها

  • kill PID — ارسال سیگنال خاتمه به فرآیند.
  • kill -9 PID — خاتمه اجباری (اجبار به توقف).
  • pkill nginx — خاتمه بر پایه نام.
  • killall nginx — خاتمه همه فرآیندهای با نام مشخص.
  • nice -n 10 command — اجرای دستور با اولویت پایین‌تر.
  • renice -n 5 -p PID — تغییر اولویت فرآیند در حال اجرا.

اجرای فرآیند در پس‌زمینه

  • command & — اجرای دستور در پس‌زمینه.
  • nohup command & — اجرا بدون وابستگی به Session.
  • jobs — نمایش فرآیندهای پس‌زمینه.
  • fg %1 — بازگرداندن فرآیند به پیش‌زمینه.
  • bg %1 — ارسال فرآیند به پس‌زمینه.
  • Ctrl+Z — توقف موقت فرآیند پیش‌زمینه.
  • Ctrl+C — خاتمه فرآیند پیش‌زمینه.

ابزارهای پایش پیشرفته

  • lsof -i :80 — یافتن فرآیند متصل به پورت.
  • strace -p PID — ردیابی System Callهای فرآیند.
  • iotop — پایش مصرف دیسک فرآیندها.
  • nethogs — پایش مصرف شبکه فرآیندها.
«هر فرآیند روی سرور، یک منبع مصرف می‌کند؛ مدیریت دقیق آنها، تفاوت بین سرور پایدار و سرور بحرانی است.»

پایش منابع سیستم

پایش منابع، بخشی جدایی‌ناپذیر از مدیریت سرور است. با پایش مستمر، می‌توان بحران‌ها را پیش از وقوع شناسایی کرد.

پایش CPU و حافظه

  • top — نمایش زنده CPU، حافظه و فرآیندها.
  • htop — نسخه بهبودیافته top.
  • free -h — نمایش حافظه به‌صورت خوانا.
  • vmstat 1 — آمار لحظه‌ای حافظه و CPU.
  • uptime — مدت زمان فعالیت و Load Average.
  • mpstat — آمار دقیق هر CPU.
  • nproc — تعداد CPUهای موجود.

پایش دیسک

  • df -h — نمایش فضای دیسک.
  • du -sh /path — اندازه یک پوشه.
  • du -h --max-depth=1 /path — اندازه زیرپوشه‌ها.
  • lsblk — نمایش ساختار دیسک‌ها.
  • iostat — آمار عملکرد دیسک.

پایش شبکه

  • ifconfig یا ip a — نمایش رابط‌های شبکه.
  • netstat -tulpn — نمایش پورت‌های فعال.
  • ss -tulpn — نسخه مدرن‌تر netstat.
  • iftop — پایش ترافیک لحظه‌ای.
  • nload — نمایش گرافیکی ترافیک.
  • vnstat — آمار ترافیک در بازه‌های زمانی.

پایش جامع با ابزارهای تخصصی

  • glances — ابزار جامع پایش منابع.
  • sar — تحلیل تاریخی عملکرد سیستم.
  • atop — پایش پیشرفته فرآیندها و منابع.
  • dstat — پایش ترکیبی CPU، دیسک و شبکه.
ابزارحوزه پایشمناسب برای
htopفرآیندها و CPUپایش روزمره
freeحافظهبررسی سریع
dfدیسکبررسی فضا
iftopشبکهپایش ترافیک
glancesهمه منابعپایش جامع
sarتاریخیتحلیل گذشته

دستورات شبکه و عیب‌یابی

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

دستورات پایه شبکه

  • ping host — بررسی اتصال به میزبان.
  • ping -c 4 host — ارسال ۴ بسته و خاتمه.
  • traceroute host — نمایش مسیر شبکه.
  • tracepath host — نسخه ساده‌تر traceroute.
  • mtr host — ترکیب ping و traceroute.
  • nslookup domain — جستجوی DNS.
  • dig domain — تحلیل دقیق DNS.
  • host domain — جستجوی ساده DNS.

دستورات اتصال و انتقال

  • curl -I https://example.com — دریافت فقط هدرها.
  • curl -o file.zip URL — دانلود فایل.
  • wget URL — دانلود با wget.
  • scp file user@host:/path — کپی امن از راه دور.
  • rsync -av source/ user@host:/dest/ — همگام‌سازی فایل‌ها.

دستورات پایش پورت و سرویس

  • netstat -tulpn — لیست پورت‌های در حال گوش دادن.
  • ss -tulpn — نسخه مدرن netstat.
  • lsof -i :80 — یافتن فرآیند روی پورت ۸۰.
  • nc -zv host port — بررسی دسترسی به پورت.
  • telnet host port — تست اتصال به پورت.

دستورات تحلیل ترافیک

  • tcpdump -i eth0 — ضبط بسته‌های شبکه.
  • tcpdump -i eth0 port 80 — فیلتر بر پایه پورت.
  • tshark — نسخه CLI از Wireshark.
  • ngrep — جستجوی الگو در بسته‌ها.

در پروژه‌های واقعی، دیده‌ام که مشکلات شبکه، اغلب از تنظیمات DNS یا مسدودسازی پورت‌ها ناشی می‌شود. برای درک عمیق‌تر عیب‌یابی DNS، مقاله عیب‌یابی مشکلات DNS در چند دقیقه را مطالعه کنید. همچنین مقاله DNS و نقش آن در دسترسی به اینترنت چارچوب مفهومی این حوزه را باز می‌کند.

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

مدیریت کاربران، یکی از جنبه‌های حیاتی امنیت سرور است. با مدیریت دقیق، می‌توان دسترسی‌ها را به حداقل رساند و از نفوذ جلوگیری کرد.

دستورات مدیریت کاربران

  • useradd username — ایجاد کاربر جدید.
  • useradd -m -s /bin/bash username — ایجاد کاربر با پوشه خانه و Shell.
  • userdel username — حذف کاربر.
  • usermod -aG group username — افزودن کاربر به گروه.
  • passwd username — تغییر رمز عبور.
  • chage -l username — نمایش اطلاعات انقضای رمز.
  • id username — نمایش UID، GID و گروه‌ها.
  • who — کاربران فعال.
  • last — تاریخچه ورودها.

مدیریت گروه‌ها

  • groupadd groupname — ایجاد گروه جدید.
  • groupdel groupname — حذف گروه.
  • groupmod -n newname oldname — تغییر نام گروه.
  • groups username — نمایش گروه‌های کاربر.

فایل‌های مهم کاربران

  • /etc/passwd — لیست کاربران.
  • /etc/shadow — رمزهای رمزنگاری‌شده.
  • /etc/group — لیست گروه‌ها.
  • /etc/sudoers — تنظیمات sudo.

رویکردهای امنیتی در مدیریت کاربران

  • استفاده از رمز عبور قوی و دوره‌ای.
  • محدودسازی دسترسی sudo به کاربران ضروری.
  • استفاده از SSH Key به‌جای رمز.
  • فعال‌سازی 2FA برای کاربران حیاتی.
  • پایش دوره‌ای لیست کاربران و حذف کاربران بی‌استفاده.
  • تنظیم انقضا برای رمز عبور.
  • محدودسازی دسترسی root مستقیم.

مدیریت بسته‌ها و نرم‌افزارها

مدیریت بسته‌ها، بخشی جدایی‌ناپذیر از نگهداری سرور است. با به‌روزرسانی منظم، می‌توان از آسیب‌پذیری‌های امنیتی جلوگیری کرد.

دستورات APT (Debian/Ubuntu)

  • apt update — به‌روزرسانی لیست بسته‌ها.
  • apt upgrade — ارتقاء بسته‌های نصب‌شده.
  • apt install package — نصب بسته جدید.
  • apt remove package — حذف بسته.
  • apt autoremove — حذف بسته‌های بی‌استفاده.
  • apt search keyword — جستجوی بسته.
  • apt show package — نمایش اطلاعات بسته.
  • dpkg -l — لیست بسته‌های نصب‌شده.

دستورات YUM/DNF (RHEL/CentOS/Fedora)

  • yum update یا dnf update — به‌روزرسانی.
  • yum install package — نصب بسته.
  • yum remove package — حذف بسته.
  • yum search keyword — جستجوی بسته.
  • rpm -qa — لیست بسته‌های نصب‌شده.

دستورات Snap و Flatpak

  • snap install package — نصب بسته Snap.
  • snap list — لیست بسته‌های Snap.
  • flatpak install package — نصب بسته Flatpak.
  • flatpak list — لیست بسته‌های Flatpak.

به‌روزرسانی امنیتی خودکار

  • unattended-upgrades — به‌روزرسانی خودکار امنیتی در Ubuntu.
  • dnf-automatic — به‌روزرسانی خودکار در Fedora.
  • yum-cron — به‌روزرسانی خودکار در CentOS.

در تجربه‌های واقعی، دیده‌ام که بسیاری از نفوذهای امنیتی، از به‌روزرسانی دیرهنگام ناشی می‌شود. برای درک عمیق‌تر امنیت سرور، مقاله بدافزار چیست و چگونه وارد سایت می‌شود؟ را مطالعه کنید.

مدیریت سرویس‌ها با systemd

systemd، سیستم مدیریت سرویس مدرن در لینوکس است که جایگزین SysVinit شده است. تسلط بر systemctl، بخشی از مهارت پایه مدیریت سرور محسوب می‌شود.

دستورات systemctl

  • systemctl start service — شروع سرویس.
  • systemctl stop service — توقف سرویس.
  • systemctl restart service — راه‌اندازی مجدد.
  • systemctl reload service — بارگذاری مجدد تنظیمات.
  • systemctl status service — نمایش وضعیت سرویس.
  • systemctl enable service — فعال‌سازی در بوت.
  • systemctl disable service — غیرفعال‌سازی در بوت.
  • systemctl list-units --type=service — لیست سرویس‌ها.
  • systemctl is-active service — بررسی فعال بودن سرویس.
  • systemctl is-enabled service — بررسی فعال بودن در بوت.

دستورات journalctl

  • journalctl -u service — لاگ‌های یک سرویس.
  • journalctl -u service -f — مشاهده زنده لاگ‌ها.
  • journalctl --since \"1 hour ago\" — لاگ‌های یک ساعت گذشته.
  • journalctl -p err — فقط خطاها.
  • journalctl --disk-usage — حجم لاگ‌ها.
  • journalctl --vacuum-time=7d — پاک‌سازی لاگ‌های قدیمی.

سرویس‌های رایج

سرویسکاربرددستور راه‌اندازی
nginxوب‌سرورsystemctl restart nginx
apache2وب‌سرورsystemctl restart apache2
mysqlپایگاه دادهsystemctl restart mysql
php-fpmPHPsystemctl restart php-fpm
redisکشsystemctl restart redis
sshدسترسی از راه دورsystemctl restart sshd
«systemctl، فرماندهی سرویس‌ها است؛ بدون تسلط بر آن، مدیریت سرور مدرن عملاً غیرممکن است.»

بررسی لاگ‌ها و عیب‌یابی

لاگ‌ها، اولین منبع اطلاعات برای عیب‌یابی مشکلات سرور هستند. تسلط بر دستورات بررسی لاگ، بخشی از مهارت پایه مدیریت محسوب می‌شود.

محل‌های رایج لاگ

  • /var/log/syslog — لاگ کلی سیستم (Debian/Ubuntu).
  • /var/log/messages — لاگ کلی سیستم (RHEL/CentOS).
  • /var/log/auth.log — لاگ احراز هویت.
  • /var/log/nginx/ — لاگ‌های Nginx.
  • /var/log/apache2/ — لاگ‌های Apache.
  • /var/log/mysql/ — لاگ‌های MySQL.

دستورات بررسی لاگ

  • tail -f /var/log/syslog — مشاهده زنده لاگ.
  • tail -n 100 /var/log/syslog — ۱۰۰ خط آخر.
  • grep \"error\" /var/log/syslog — جستجوی خطا.
  • grep -i \"failed\" /var/log/auth.log — جستجوی ورودهای ناموفق.
  • awk '{print $1}' access.log | sort | uniq -c | sort -rn | head — پرتکرارترین IPها.
  • zcat /var/log/syslog.1.gz — مشاهده لاگ فشرده‌شده.

ابزارهای تحلیل لاگ

  • GoAccess: تحلیل زنده لاگ‌های وب.
  • AWStats: تحلیل جامع ترافیک وب.
  • Logwatch: گزارش روزانه از لاگ‌ها.
  • lnav: مرورگر پیشرفته لاگ.

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

SSH و مدیریت از راه دور

SSH (Secure Shell)، پروتکل استاندارد برای دسترسی امن از راه دور به سرور است. تسلط بر آن، بخشی جدایی‌ناپذیر از مدیریت سرور محسوب می‌شود.

دستورات پایه SSH

  • ssh user@host — اتصال به سرور.
  • ssh -p 2222 user@host — اتصال با پورت خاص.
  • ssh -i ~/.ssh/key user@host — اتصال با کلید.
  • ssh user@host command — اجرای یک دستور از راه دور.
  • exit یا Ctrl+D — خاتمه اتصال.

کلیدهای SSH

  • ssh-keygen -t ed25519 -C \"comment\" — تولید جفت کلید.
  • ssh-copy-id user@host — کپی کلید عمومی به سرور.
  • ssh-add ~/.ssh/key — افزودن کلید به ssh-agent.
  • ssh-agent bash — فعال‌سازی ssh-agent.

پیکربندی SSH

فایل ~/.ssh/config، امکان تعریف میان‌بر برای اتصال‌های پرتکرار را فراهم می‌کند:

Host myserver
HostName 192.0.2.1
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519

پس از این پیکربندی، اتصال با ssh myserver انجام می‌شود.

انتقال فایل با SSH

  • scp file user@host:/path — کپی فایل به سرور.
  • scp -r folder/ user@host:/path — کپی بازگشتی پوشه.
  • scp user@host:/path/file . — دریافت فایل از سرور.
  • rsync -avz source/ user@host:/dest/ — همگام‌سازی فشرده.
  • sftp user@host — انتقال تعاملی.

تونل SSH

  • ssh -L 8080:localhost:80 user@host — تونل محلی.
  • ssh -R 8080:localhost:80 user@host — تونل راه دور.
  • ssh -D 1080 user@host — SOCKS Proxy.
«SSH، پنجره مدیریت سرور از هر نقطه جهان است؛ تسلط بر آن، تفاوت بین مدیر محلی و مدیر حرفه‌ای را می‌سازد.»

دستورات امنیتی و فایروال

امنیت سرور، یکی از حوزه‌های حیاتی مدیریت است. تسلط بر دستورات امنیتی و فایروال، بخشی از مسئولیت هر مدیر سرور محسوب می‌شود.

فایروال UFW

  • ufw status — نمایش وضعیت فایروال.
  • ufw enable — فعال‌سازی فایروال.
  • ufw allow 22 — اجازه به پورت ۲۲ (SSH).
  • ufw allow 80 — اجازه به پورت ۸۰ (HTTP).
  • ufw allow 443 — اجازه به پورت ۴۴۳ (HTTPS).
  • ufw deny from 192.0.2.1 — مسدودسازی IP.
  • ufw delete allow 80 — حذف قانون.

فایروال iptables

  • iptables -L — نمایش قوانین.
  • iptables -A INPUT -p tcp --dport 22 -j ACCEPT — اجازه به SSH.
  • iptables -A INPUT -j DROP — مسدودسازی پیش‌فرض.
  • iptables-save > rules.v4 — ذخیره قوانین.

Fail2Ban

  • fail2ban-client status — نمایش وضعیت.
  • fail2ban-client status sshd — وضعیت SSH Jail.
  • fail2ban-client set sshd unbanip IP — رفع مسدودسازی IP.
  • fail2ban-client set sshd banip IP — مسدودسازی دستی IP.

دستورات امنیتی متفرقه

  • last -a — آخرین ورودها با IP.
  • lastb — ورودهای ناموفق.
  • w — کاربران فعال و فعالیت‌ها.
  • sudo -l — دسترسی‌های sudo کاربر.
  • getenforce — وضعیت SELinux.
  • sestatus — اطلاعات SELinux.
  • aa-status — وضعیت AppArmor.

در تجربه‌های واقعی، دیده‌ام که سرورهای بدون فایروال فعال، در عرض چند ساعت هدف حملات خودکار قرار می‌گیرند. برای درک عمیق‌تر امنیت، مقاله امنیت VPS چگونه تامین می‌شود؟ را مطالعه کنید. همچنین مقاله چگونه حملات brute force را در وردپرس دفع کنیم؟ نکات عملی مهمی ارائه می‌دهد.

پشتیبان‌گیری و بازیابی

پشتیبان‌گیری، بیمه‌نامه هر سروری است. بدون بکاپ منظم، یک خرابی ساده می‌تواند به از دست رفتن داده‌های حیاتی منجر شود.

دستورات پشتیبان‌گیری

  • tar -czf backup.tar.gz /path — آرشیو فشرده پوشه.
  • rsync -av source/ /backup/ — همگام‌سازی محلی.
  • rsync -avz source/ user@host:/backup/ — همگام‌سازی از راه دور.
  • mysqldump -u user -p db > backup.sql — پشتیبان‌گیری MySQL.
  • pg_dump -U user db > backup.sql — پشتیبان‌گیری PostgreSQL.
  • tar -xzf backup.tar.gz -C /path — استخراج آرشیو.
  • mysql -u user -p db < backup.sql — بازیابی MySQL.

پشتیبان‌گیری خودکار با Cron

پیکربندی Cron برای پشتیبان‌گیری خودکار:

crontab -e

0 3 * * * /usr/bin/tar -czf /backup/site-$(date +\%F).tar.gz /var/www/html

این خط، هر روز ساعت ۳ بامداد از سایت پشتیبان می‌گیرد.

ابزارهای پشتیبان‌گیری تخصصی

  • BorgBackup: پشتیبان‌گیری افزایشی با فشرده‌سازی.
  • Restic: پشتیبان‌گیری رمزنگاری‌شده و چند‌مقصدی.
  • Duplicity: پشتیبان‌گیری رمزنگاری‌شده.
  • Bacula: راه‌حل سازمانی.

برای درک عمیق‌تر پشتیبان‌گیری وردپرس، مقاله چگونه از سایت وردپرسی بکاپ بگیریم؟ را مطالعه کنید. همچنین اگر با MySQL کار می‌کنید، مقاله پشتیبان گیری از mysql نکات عملی مهمی ارائه می‌دهد.

مدیریت دیسک و فضای ذخیره‌سازی

مدیریت دیسک، یکی از پرتکرارترین چالش‌های مدیریت سرور است. با پایش و بهینه‌سازی منظم، می‌توان از پر شدن ناگهانی دیسک جلوگیری کرد.

دستورات پایش فضای دیسک

  • df -h — نمایش فضای دیسک‌ها.
  • df -i — نمایش تعداد Inodeهای استفاده‌شده.
  • du -sh /path — اندازه پوشه.
  • du -h --max-depth=1 /path — اندازه زیرپوشه‌ها.
  • du -sh /* 2>/dev/null | sort -h — اندازه پوشه‌های ریشه.
  • ncdu /path — تحلیل تعاملی فضای دیسک.
  • lsblk — نمایش دیسک‌های متصل.

یافتن فایل‌های بزرگ

  • find / -type f -size +1G 2>/dev/null — فایل‌های بزرگ‌تر از ۱ گیگابایت.
  • find /path -mtime +30 -type f — فایل‌های قدیمی‌تر از ۳۰ روز.
  • du -ah /path | sort -rh | head -20 — بزرگ‌ترین فایل‌ها.

پاک‌سازی فضای دیسک

  • apt autoremove — حذف بسته‌های بی‌استفاده.
  • apt clean — پاک‌سازی کش APT.
  • journalctl --vacuum-size=100M — محدودسازی حجم لاگ‌ها.
  • find /var/log -name \"*.gz\" -delete — حذف لاگ‌های فشرده قدیمی.
  • docker system prune -a — پاک‌سازی منابع Docker.

مدیریت پارتیشن‌ها

  • fdisk -l — لیست پارتیشن‌ها.
  • parted /dev/sda print — نمایش ساختار پارتیشن.
  • mount /dev/sdb1 /mnt — مانت پارتیشن.
  • umount /mnt — آن‌مانت.
  • mount -a — مانت تمام پارتیشن‌ها.

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

الگوهای ترکیب دستورات

ترکیب دستورات با Pipe و Redirect، یکی از قدرتمندترین ویژگی‌های CLI است که امکان ساخت جریان‌های کاری پیچیده را فراهم می‌کند.

مفهوم Pipe و Redirect

  • | — انتقال خروجی به ورودی دستور بعدی.
  • > — ذخیره خروجی در فایل (بازنویسی).
  • >> — افزودن خروجی به فایل.
  • 2> — هدایت خطا به فایل.
  • &> — هدایت خروجی و خطا به فایل.
  • 2>&1 — هدایت خطا به خروجی استاندارد.
  • < — خواندن از فایل.

الگوهای پرکاربرد

الگوی اول: پرتکرارترین IPهای بازدیدکننده

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

این دستور، ۱۰ IP پرتکرار در لاگ Nginx را نشان می‌دهد.

الگوی دوم: جستجو در فایل‌های PHP

find /var/www -name \"*.php\" -exec grep -l \"eval(\" {} \;

یافتن فایل‌های PHP که شامل eval هستند (نشانه احتمالی کد مخرب).

الگوی سوم: فایل‌های بزرگ‌تر از ۱۰۰ مگابایت

find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk '{print $5, $9}'

الگوی چهارم: پایش زنده خطاها

tail -f /var/log/syslog | grep -i error

الگوی پنجم: شمارش خطاهای ۴۰۴ در لاگ

grep \" 404 \" /var/log/nginx/access.log | wc -l

مثال‌های ترکیبی پیشرفته

  • تحلیل ترافیک ساعتی: awk '{print $4}' access.log | cut -d: -f2 | sort | uniq -c
  • یافتن فایل‌های تغییر یافته اخیر: find /var/www -mtime -1 -type f
  • پایش مصرف RAM فرآیندها: ps aux --sort=-%mem | head -10
  • پایش مصرف CPU فرآیندها: ps aux --sort=-%cpu | head -10
«قدرت واقعی CLI در ترکیب است؛ هر دستور یک آجر است و با Pipe، ساختمانی از جریان‌های کاری پیچیده ساخته می‌شود.»

Alias و توابع کاربردی

Aliasها و توابع Shell، ابزارهایی برای افزایش بهره‌وری در CLI هستند. با تعریف درست آنها، می‌توان دستورات طولانی را به میان‌برهای کوتاه تبدیل کرد.

Aliasهای پرکاربرد در مدیریت سرور

  • alias ll='ls -lah' — لیست با جزئیات.
  • alias ports='netstat -tulpn' — لیست پورت‌ها.
  • alias disk='df -h' — بررسی فضای دیسک.
  • alias mem='free -h' — بررسی حافظه.
  • alias cpu='top -o %CPU' — پایش CPU.
  • alias logs='tail -f /var/log/syslog' — پایش لاگ.
  • alias www='cd /var/www/html' — پیمایش سریع.

توابع Shell کاربردی

توابع Shell، امکان تعریف عملیات پیچیده‌تر را فراهم می‌کنند:

تابع بررسی خطا در لاگ

errors() {
tail -f /var/log/syslog | grep -i --color=auto \"error\|fail\|denied\"
}

تابع پشتیبان‌گیری سریع

backup() {
tar -czf ~/backup-$(date +\%F-\%H\%M).tar.gz "$1"
}

تابع بررسی فضای دیسک

diskcheck() {
df -h | awk '$5+0 > 80 {print $0}'
}

این تابع، پوشش‌هایی که بیش از ۸۰ درصد پر شده‌اند را نشان می‌دهد.

محل تعریف

Aliasها و توابع را در فایل‌های زیر تعریف کنید تا در هر Session فعال باشند:

  • ~/.bashrc — برای Bash.
  • ~/.zshrc — برای Zsh.
  • /etc/profile.d/custom.sh — برای همه کاربران.

اشتباهات رایج در استفاده از دستورات

اشتباهاثر عملیاتی
اجرای rm -rf در پوشه اشتباهحذف غیرقابل بازیابی داده‌ها
استفاده از chmod 777 برای همه فایل‌هاریسک امنیتی جدی
اجرای sudo بدون احتیاطتغییرات سیستمی ناخواسته
نادیده گرفتن بکاپ پیش از تغییراتعدم امکان بازیابی
استفاده از kill -9 به‌جای killعدم امکان خاتمه تمیز فرآیند
عدم بررسی df پیش از عملیات حجیمپر شدن دیسک در میانه کار
نادیده گرفتن کد خروج دستوراتعدم تشخیص خطا در اسکریپت‌ها
اجرای دستور از منبع نامطمئنخطر اجرای کد مخرب
بی‌توجهی به journalctlاز دست رفتن اطلاعات عیب‌یابی
نبود Alias برای دستورات پرکاربردهدر رفت زمان در تایپ مکرر
عدم استفاده از Pipeعدم بهره‌گیری از قدرت ترکیب CLI

در تجربه‌های واقعی، بیشترین فاجعه‌ها از اشتباه اول ناشی می‌شود. دستور rm -rf در مسیر اشتباه، می‌تواند به حذف غیرقابل بازیابی داده‌ها منجر شود. برای درک عمیق‌تر خطاهای رایج، مقاله چرا اشتباهات مدیریت سرور پروژه شما را می‌خواباند؟ را مطالعه کنید.

پرسش‌های پرتکرار درباره دستورات CLI سرور

چرا دستورات CLI برای مدیریت سرور حیاتی هستند؟

چون اکثر سرورهای لینوکس در محیط تولید بدون رابط گرافیکی کار می‌کنند و مدیریت آنها تنها از طریق ترمینال و SSH امکان‌پذیر است. CLI سریع‌تر، سبک‌تر و قابل خودکارسازی است.

چگونه دستورات ضروری CLI را یاد بگیرم؟

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

تفاوت sudo و su چیست؟

sudo امکان اجرای دستور با دسترسی root بدون تغییر کاربر را فراهم می‌کند، در حالی که su به تغییر کاربر منجر می‌شود. sudo توصیه‌شده‌تر است چون امکان کنترل دقیق دسترسی‌ها را فراهم می‌کند.

چگونه وضعیت سرور را به‌سرعت بررسی کنم؟

با ترکیب چند دستور: uptime برای Load Average، free -h برای حافظه، df -h برای دیسک، htop برای فرآیندها و ss -tulpn برای پورت‌ها.

چگونه فرآیندی که سرور را کند کرده پیدا کنم؟

با top یا htop که فرآیندها را بر پایه مصرف CPU و RAM مرتب می‌کنند. همچنین ps aux --sort=-%cpu | head و ps aux --sort=-%mem | head گزینه‌های سریعی هستند.

چگونه فضای دیسک را آزاد کنم؟

با ترکیب چند اقدام: apt autoremove، apt clean، journalctl --vacuum-size=100M، حذف لاگ‌های قدیمی و پاک‌سازی منابع Docker. برای تحلیل دقیق، از ncdu استفاده کنید.

چگونه سرویس‌های سرور را مدیریت کنم؟

با systemctl که دستورات آن شامل start، stop، restart، status، enable و disable است. برای مشاهده لاگ سرویس‌ها، از journalctl -u service استفاده کنید.

چگونه امنیت سرور را با CLI افزایش دهم؟

با فعال‌سازی فایروال UFW، نصب Fail2Ban، استفاده از SSH Key به‌جای رمز، محدودسازی دسترسی sudo، به‌روزرسانی منظم بسته‌ها و پایش دوره‌ای لاگ‌ها. برای جزئیات بیشتر، مقاله چگونه امنیت سرور را افزایش دهیم؟ را مطالعه کنید.

چگونه از سرور پشتیبان‌گیری خودکار کنم؟

با تنظیم Cron Job که به‌طور دوره‌ای از فایل‌ها و پایگاه داده پشتیبان می‌گیرد. برای راهنمای گام‌به‌گام، مقاله چرا پشتیبان‌گیری از سرور برای کسب‌وکار حیاتی است؟ را مطالعه کنید.

آیا باید همه دستورات CLI را حفظ کنم؟

خیر. تمرکز بر دستورات پرکاربرد و استفاده از تاریخچه Shell، ابزارهایی مانند tldr و explainshell، و تمرین روزانه کافی است. حتی مدیران باتجربه نیز همه دستورات را حفظ نمی‌کنند.

چگونه از راه دور سرور را مدیریت کنم؟

با SSH که امکان اجرای دستورات، انتقال فایل و تونل‌سازی را فراهم می‌کند. برای اتصال‌های پرتکرار، از فایل ~/.ssh/config استفاده کنید.

آیا CLI برای مدیریت سرورهای ویندوز هم مناسب است؟

بله، با PowerShell که معادل CLI در ویندوز است. بسیاری از دستورات PowerShell معادل دستورات Unix دارند و برای مدیریت سرورهای ویندوز استفاده می‌شوند.

آیا می‌توانم دستورات CLI را خودکار کنم؟

بله، هر دستور CLI را می‌توان در یک اسکریپت Bash، Shell یا PowerShell گنجاند و به‌طور خودکار اجرا کرد. این ویژگی، یکی از مزیت‌های اصلی CLI در محیط‌های حرفه‌ای است.

پایان‌بندی مهندسی

دستورات ضروری CLI برای مدیریت سرور، ستون فقرات هر فعالیت حرفه‌ای در حوزه زیرساخت و DevOps محسوب می‌شوند. تسلط بر این دستورات، تفاوت بین یک مدیر مبتدی و یک مهندس زیرساخت باتجربه را می‌سازد و به‌طور مستقیم بر سرعت تشخیص، دقت اقدام و پایداری سیستم اثر می‌گذارد. از پیمایش فایل و مدیریت مجوزها تا پایش منابع، عیب‌یابی شبکه، مدیریت سرویس‌ها و خودکارسازی، هر دسته از این دستورات نقشی مشخص در جریان کاری مدیریت سرور ایفا می‌کند.

از منظر مهندسی سطح ارشد، سه اصل در معماری استفاده از دستورات CLI سرور تعیین‌کننده است. نخست، طراحی یک لایه خودکارسازی (Automation Layer) که در آن، دستورات پرتکرار به اسکریپت‌های قابل اشتراک و نگهداری تبدیل شوند و از طریق Cron، Systemd Timer یا ابزارهای CI/CD اجرا گردند. دوم، پیاده‌سازی یک سیاست امنیتی چندلایه که در آن، فایروال، Fail2Ban، SSH Key، محدودسازی sudo و به‌روزرسانی منظم به‌عنوان رویه استاندارد تعریف شوند. سوم، استقرار یک مکانیزم پایش پیوسته که در آن، منابع حیاتی سرور (CPU، RAM، دیسک، شبکه) به‌طور مداوم رصد شوند و در صورت انحراف، هشدار ارسال گردد. رعایت این سه اصل، دستورات CLI را از یک مجموعه ابزار شخصی به یک قابلیت سازمانی تبدیل می‌کند که پایداری و امنیت زیرساخت را تضمین می‌نماید.

سازمانی که این اصول را جدی بگیرد، در مدیریت بحران، بهینه‌سازی عملکرد و حفظ امنیت سرور موفق‌تر عمل می‌کند. دستورات CLI، اگرچه در ظاهر مجموعه‌ای از دستورات متنی ساده به‌نظر می‌رسند، در واقع ابزارهای راهبردی مدیریت زیرساخت مدرن محسوب می‌شوند و تسلط بر آنها، بخشی از بلوغ فنی هر تیم فناوری است. برای درک عمیق‌تر نقش این دستورات در بهره‌وری کلی، مقاله CLI چطور کارایی توسعه‌دهندگان را بالا می‌برد؟ را مطالعه کنید. همچنین اگر روی بهینه‌سازی عملکرد سرور تمرکز دارید، مقاله بهبود FCP با بهینه‌سازی سرور چطور انجام می‌شود؟ نکات عملی مهمی ارائه می‌دهد.

اگر در پروژه‌های خود تجربه‌ای از مدیریت سرور با CLI داشته‌اید، برایتان جالب است بدانید کدام دسته از دستورات بیشترین اثر را در بهره‌وری شما داشت: پایش منابع، عیب‌یابی شبکه، مدیریت سرویس‌ها یا خودکارسازی با Cron. تجربه‌تان را در دیدگاه‌ها بنویسید؛ به‌ویژه اگر Alias یا تابع خلاقانه‌ای برای ساده‌سازی کارهای روزمره به کار برده‌اید که می‌تواند برای مدیران دیگر الهام‌بخش باشد. ⌨️