برای مدیریت یک سرور لینوکس لازم نیست صدها دستور حفظ کنید. با حدود ۲۵ دستور میتوانید بین فایلها جابهجا شوید، لاگها را بخوانید، فضای دیسک را بررسی کنید، پروسسها و سرویسها را کنترل کنید، شبکه را عیبیابی کنید و دسترسی فایلها را درست کنید. این مقاله همین دستورات لینوکس در ترمینال را بر اساس کاری که میخواهید انجام دهید دستهبندی کرده و برای هر کدام یک مثال واقعی آورده است.
همهی مثالها روی Ubuntu 24.04 آزمایشپذیرند و در بیشتر توزیعهای دیگر (Debian، Rocky و…) هم با همین شکل کار میکنند. اگر هنوز به سرور وصل نشدهاید، اول اتصال SSH و ساخت کلید را ببینید. در انتهای مقاله یک جدول خلاصه هست که میتوانید نگهش دارید.
جابهجایی بین فایلها و پوشهها
pwd # الان کجا هستم؟
ls -lah /var/www # فهرست فایلها با جزئیات، اندازهی خوانا و فایلهای مخفی
cd /etc/nginx # رفتن به یک پوشه؛ cd - برمیگرداند به پوشهی قبلی
cat /etc/os-release # نمایش کامل یک فایل کوتاه
less /var/log/syslog # خواندن فایل بلند؛ با / جستوجو و با q خروج
برای ساختن، کپی، جابهجا و حذف:
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.
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 احتمالاً پرکاربردترین دستور عیبیابی است: آن را در یک پنجره باز بگذارید و در پنجرهی دیگر خطا را بازتولید کنید.
فضای دیسک
پرشدن دیسک یکی از رایجترین دلایل از کار افتادن ناگهانی سرور است: دیتابیس نمیتواند بنویسد، لاگها متوقف میشوند و سشنها ساخته نمیشوند.
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 آن را کوچک میکند.
پروسسها و مصرف منابع
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 هستند:
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 اجرا میکنید، جزئیاتش را در کارهای کند را به صف بسپارید آوردهایم.
شبکه
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 است.)
دسترسیها و مالکیت
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
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 نام فایل. آرشیو گرفتن هنوز بکاپ نیست تا وقتی که روی سرور دیگری هم نسخه داشته باشد؛ قاعدهی بکاپ ۳-۲-۱ را ببینید.
پیدا کردن فایلها و متن
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 را نشان میدهد:
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 را باز کنید.