برای مدیریت یک سرور لینوکس لازم نیست صدها دستور حفظ کنید. با حدود ۲۵ دستور می‌توانید بین فایل‌ها جابه‌جا شوید، لاگ‌ها را بخوانید، فضای دیسک را بررسی کنید، پروسس‌ها و سرویس‌ها را کنترل کنید، شبکه را عیب‌یابی کنید و دسترسی فایل‌ها را درست کنید. این مقاله همین دستورات لینوکس در ترمینال را بر اساس کاری که می‌خواهید انجام دهید دسته‌بندی کرده و برای هر کدام یک مثال واقعی آورده است.

همه‌ی مثال‌ها روی Ubuntu 24.04 آزمایش‌پذیرند و در بیشتر توزیع‌های دیگر (Debian، Rocky و…) هم با همین شکل کار می‌کنند. اگر هنوز به سرور وصل نشده‌اید، اول اتصال SSH و ساخت کلید را ببینید. در انتهای مقاله یک جدول خلاصه هست که می‌توانید نگهش دارید.

جابه‌جایی بین فایل‌ها و پوشه‌ها

bash
pwd                       # الان کجا هستم؟
ls -lah /var/www          # فهرست فایل‌ها با جزئیات، اندازه‌ی خوانا و فایل‌های مخفی
cd /etc/nginx             # رفتن به یک پوشه؛ cd - برمی‌گرداند به پوشه‌ی قبلی
cat /etc/os-release       # نمایش کامل یک فایل کوتاه
less /var/log/syslog      # خواندن فایل بلند؛ با / جست‌وجو و با q خروج

برای ساختن، کپی، جابه‌جا و حذف:

bash
mkdir -p /srv/app/releases     # ساخت پوشه به همراه پوشه‌های والد
cp -a config.php config.php.bak    # کپی با حفظ دسترسی‌ها و تاریخ
mv old.log archive/            # جابه‌جایی یا تغییر نام
rm -r /tmp/build-cache         # حذف پوشه

rm سطل بازیافت ندارد. پیش از هر rm -rf یک بار مسیر را با ls ببینید، مخصوصاً وقتی متغیری داخل مسیر است.

خواندن لاگ‌ها

بیشتر عیب‌یابی سرور یعنی خواندن لاگ. دو منبع اصلی دارید: فایل‌های داخل /var/log و ژورنال systemd.

bash
tail -n 100 /var/log/nginx/error.log      # ۱۰۰ خط آخر
tail -f storage/logs/laravel.log          # دنبال‌کردن زنده؛ با Ctrl+C خارج شوید
journalctl -u nginx --since "1 hour ago"  # لاگ یک سرویس در یک ساعت اخیر
journalctl -u php8.3-fpm -f               # دنبال‌کردن زنده‌ی لاگ یک سرویس
journalctl -p err -b                      # فقط خطاها از آخرین بوت

tail -f احتمالاً پرکاربردترین دستور عیب‌یابی است: آن را در یک پنجره باز بگذارید و در پنجره‌ی دیگر خطا را بازتولید کنید.

فضای دیسک

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

bash
df -h                                  # فضای آزاد هر پارتیشن
du -sh /var/log                        # حجم کل یک پوشه
du -h --max-depth=1 /var | sort -h     # کدام زیرپوشه بزرگ‌تر است؟

روش معمول پیدا کردن مقصر: با df -h ببینید کدام پارتیشن پر است، بعد با du و sort -h پله‌پله پایین بروید تا به پوشه‌ی بزرگ برسید. اگر ژورنال systemd زیاد جا گرفته، sudo journalctl --vacuum-size=200M آن را کوچک می‌کند.

پروسس‌ها و مصرف منابع

bash
top                         # نمای زنده‌ی CPU و RAM؛ با q خارج شوید
htop                        # نسخه‌ی خواناتر top (با sudo apt install htop)
free -h                     # مصرف RAM و swap
ps aux | grep php           # پیدا کردن پروسس‌های یک برنامه
kill 12345                  # درخواست مؤدبانه‌ی توقف پروسس با PID
kill -9 12345               # توقف اجباری، فقط وقتی kill معمولی جواب نداد

در free -h به ستون available نگاه کنید، نه free. لینوکس RAM آزاد را برای کش دیسک استفاده می‌کند و این طبیعی است.

kill بدون گزینه سیگنال SIGTERM می‌فرستد و به برنامه فرصت می‌دهد کارش را تمیز تمام کند. kill -9 (یعنی SIGKILL) این فرصت را نمی‌دهد، پس آخرین گزینه است. برای سرویس‌هایی که systemd مدیریت می‌کند، اصلاً kill نزنید؛ از systemctl استفاده کنید.

سرویس‌ها با systemctl

وب‌سرور، PHP-FPM، دیتابیس و workerهای صف همه سرویس‌های systemd هستند:

bash
systemctl status nginx              # وضعیت، PID و چند خط آخر لاگ
sudo systemctl restart nginx        # ری‌استارت
sudo systemctl reload nginx         # خواندن دوباره‌ی تنظیمات بدون قطع اتصال‌ها
sudo systemctl enable --now redis-server   # فعال در بوت و همین حالا روشن
systemctl --failed                  # کدام سرویس‌ها خطا داده‌اند؟

پیش از reload یا restart وب‌سرور، تنظیمات را آزمایش کنید: sudo nginx -t. یک خطای تایپی در فایل تنظیمات و یک restart عجولانه می‌تواند همه‌ی سایت‌های روی سرور را از دسترس خارج کند. اگر workerهای صف Laravel را با systemd اجرا می‌کنید، جزئیاتش را در کارهای کند را به صف بسپارید آورده‌ایم.

شبکه

bash
ss -tulpn                              # چه پروسسی روی چه پورتی گوش می‌دهد؟
curl -I https://example.com            # فقط هدرهای پاسخ HTTP
curl -sS localhost:8000/health         # آزمایش سرویس از داخل خود سرور
ping -c 4 1.1.1.1                      # آیا اصلاً به اینترنت دسترسی داریم؟
ip -br a                               # آدرس‌های IP کارت‌های شبکه
dig +short example.com                 # دامنه به چه IP اشاره می‌کند؟

ترتیب عیب‌یابی معمول وقتی سایت بالا نمی‌آید: با systemctl status ببینید سرویس روشن است، با ss -tulpn ببینید روی پورت درست گوش می‌دهد، با curl از داخل سرور آزمایشش کنید، و اگر از داخل کار کرد و از بیرون نه، سراغ دیوار آتش یا DNS بروید. برای DNS رکوردهای DNS به زبان ساده را ببینید. (dig در بسته‌ی bind9-dnsutils است.)

دسترسی‌ها و مالکیت

bash
chown -R deploy:www-data /var/www/app           # تغییر مالک و گروه
chmod 640 .env                                   # مالک بخواند و بنویسد، گروه فقط بخواند
chmod -R 775 storage bootstrap/cache             # پوشه‌هایی که وب‌سرور باید در آن‌ها بنویسد
sudo -u www-data php artisan cache:clear         # اجرای دستور با کاربر دیگر

عدد chmod سه رقم دارد: مالک، گروه، بقیه. هر رقم جمع ۴ (خواندن)، ۲ (نوشتن) و ۱ (اجرا) است؛ پس ۷ یعنی همه‌چیز، ۶ یعنی خواندن و نوشتن، ۴ فقط خواندن. هر وقت وسوسه شدید برای حل یک خطای دسترسی chmod 777 بزنید، دست نگه دارید: مشکل تقریباً همیشه مالک یا گروه اشتباه است، نه کمبود دسترسی.

فشرده‌سازی و آرشیو با tar

bash
tar -czf app-2026-10-09.tar.gz /var/www/app      # ساخت آرشیو فشرده
tar -tzf app-2026-10-09.tar.gz | head            # دیدن محتوا بدون باز کردن
tar -xzf app-2026-10-09.tar.gz -C /tmp/restore   # باز کردن در یک مسیر مشخص

حروف را این‌طور به خاطر بسپارید: c ساختن، x بازکردن، t فهرست، z فشرده‌سازی gzip و f نام فایل. آرشیو گرفتن هنوز بکاپ نیست تا وقتی که روی سرور دیگری هم نسخه داشته باشد؛ قاعده‌ی بکاپ ۳-۲-۱ را ببینید.

پیدا کردن فایل‌ها و متن

bash
find /var/www -name "*.log" -size +100M          # فایل‌های لاگ بزرگ‌تر از ۱۰۰ مگابایت
find /tmp -type f -mtime +7                      # فایل‌هایی که بیش از ۷ روز تغییر نکرده‌اند
grep -rn "DB_HOST" /var/www/app/config           # جست‌وجوی متن در همه‌ی فایل‌های یک پوشه
grep -i "error" storage/logs/laravel.log | tail  # آخرین خطاها، بدون حساسیت به حروف بزرگ و کوچک

grep با لوله (|) ترکیب‌پذیر است و همین قدرتش را چند برابر می‌کند. مثلاً این دستور ده IP پرتکرار در لاگ دسترسی nginx را نشان می‌دهد:

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

چند عادت که دردسر را کم می‌کند

  • پیش از ویرایش هر فایل تنظیمات، یک نسخه‌ی .bak بگیرید.
  • با کاربر غیر root کار کنید و فقط هر جا لازم است sudo بزنید. تنظیماتش را در ساعت اول یک سرور تازه نوشته‌ایم.
  • man و --help را فراموش نکنید: man tar یا ss --help از هر جست‌وجویی سریع‌تر جواب می‌دهد.
  • دستورهای تکراری را به اسکریپت یا cron تبدیل کنید.
  • با history | grep دستوری را که دیروز زدید پیدا کنید، و با Ctrl+R در تاریخچه جست‌وجو کنید.

جدول خلاصه: ۲۵ دستور پرکاربرد

دستور کاربرد مثال
pwd نمایش مسیر فعلی pwd
ls فهرست فایل‌ها ls -lah
cd تغییر پوشه cd /var/www
cat / less خواندن فایل less /var/log/syslog
cp کپی cp -a .env .env.bak
mv جابه‌جایی یا تغییر نام mv a.log old/
rm حذف rm -r build/
mkdir ساخت پوشه mkdir -p /srv/app
tail انتهای فایل و دنبال‌کردن زنده tail -f app.log
journalctl لاگ سرویس‌های systemd journalctl -u nginx -f
df فضای آزاد پارتیشن‌ها df -h
du حجم پوشه‌ها du -sh /var/log
free مصرف RAM free -h
top / htop نمای زنده‌ی منابع htop
ps فهرست پروسس‌ها ps aux
kill متوقف‌کردن پروسس kill 12345
systemctl مدیریت سرویس‌ها systemctl restart nginx
ss پورت‌های باز ss -tulpn
curl آزمایش HTTP curl -I https://example.com
ping آزمایش دسترسی شبکه ping -c 4 1.1.1.1
chmod تغییر دسترسی chmod 640 .env
chown تغییر مالک chown -R deploy:www-data app
tar آرشیو و فشرده‌سازی tar -czf app.tar.gz app/
find پیدا کردن فایل find / -name "*.conf"
grep جست‌وجوی متن grep -rn "error" logs/

جمع‌بندی

مدیریت سرور لینوکس بیشتر از آنکه به حفظ کردن دستورها نیاز داشته باشد، به دانستن «کدام ابزار برای کدام سؤال» نیاز دارد: لاگ را با tail و journalctl می‌خوانید، دیسک را با df و du، پروسس‌ها را با htop و ps، سرویس‌ها را با systemctl و شبکه را با ss و curl بررسی می‌کنید. همین ۲۵ دستور بخش بزرگی از کار روزمره را پوشش می‌دهد. با دقت از rm و chmod استفاده کنید، پیش از ری‌استارت تنظیمات را آزمایش کنید، و هر جا شک داشتید man را باز کنید.