لینوکس

دستورات پرکاربرد لینوکس برای مدیریت سرور — مرجع کامل با مثال

ترمینال لینوکس با دستورات پرکاربرد مدیریت سرور مانند ls و grep و systemctl و rsync

هر کاری که با سرور لینوکسی می‌کنید — از دیدن یک لاگ ساده تا نجات سایتی که دیسکش پر شده — در نهایت به چند دستور در ترمینال ختم می‌شود. این مقاله حدود ۴۰ دستور پرکاربرد لینوکس را بر اساس «کاری که می‌خواهید انجام دهید» دسته‌بندی کرده است؛ برای هر کدام یک توضیح یک‌خطی و یک مثال واقعی آورده‌ایم تا همین امروز روی سرور خودتان قابل استفاده باشند، نه فقط قابل حفظ‌کردن.

قبل از شروع: ترمینال چطور فکر می‌کند

ساختار تقریباً همه‌ی دستورات لینوکس یکی است: دستور [سوییچ‌ها] [هدف]. مثلاً در ls -lh /var/log، دستور ls است، سوییچ -lh و هدف پوشه‌ی /var/log. سه عادت از همان روز اول کارتان را چند برابر سریع‌تر می‌کند:

  • Tab بزنید. اسم فایل و پوشه را نصفه بنویسید و Tab بزنید تا خودش کامل کند — هم سریع‌تر است هم جلوی غلط تایپی را می‌گیرد.
  • فلش بالا بزنید. دستورهای قبلی برمی‌گردند؛ با history هم کل سابقه را می‌بینید.
  • راهنمای داخلی را بشناسید. man ls راهنمای کامل و ls --help خلاصه‌ی سوییچ‌ها را نشان می‌دهد. لازم نیست چیزی را حفظ کنید که همیشه یک دستور با شما فاصله دارد.

اگر هنوز به سرور وصل نشده‌اید، اول آموزش اتصال با SSH را ببینید و برگردید — همه‌ی مثال‌های این مقاله داخل همان ترمینال اجرا می‌شوند.

جابه‌جایی و کار با فایل‌ها

پرکاربردترین گروه از دستورات لینوکس؛ روزی ده‌ها بار سراغ‌شان می‌روید.

pwd و cd و ls — کجا هستم و چه چیزی این‌جاست

pwd مسیر فعلی را نشان می‌دهد، cd جابه‌جا می‌شود و ls محتوا را فهرست می‌کند:

cd /var/www        # رفتن به مسیر مشخص
cd ..              # یک پوشه بالاتر
cd ~               # خانه‌ی کاربر فعلی
ls -lh             # فهرست با جزئیات و حجم خوانا
ls -lah            # همان + فایل‌های مخفی (شروع‌شده با نقطه)

در خروجی ls -lh ستون اول دسترسی‌ها، ستون سوم و چهارم مالک و گروه، و ستون پنجم حجم است — کمی جلوتر در بخش دسترسی‌ها همین ستون‌ها را رمزگشایی می‌کنیم.

mkdir و cp و mv — ساختن، کپی، جابه‌جایی

mkdir -p /var/www/site/logs   # ساخت پوشه، حتی تو در تو
cp config.php config.php.bak  # کپی (بهترین بیمه قبل از هر ویرایش!)
cp -r /var/www/site /root/    # کپی کل پوشه با محتوا
mv old-name.txt new-name.txt  # تغییر نام
mv report.pdf /root/docs/     # جابه‌جایی

rm — حذف، بدون سطل زباله

در سرور لینوکس «Undo» وجود ندارد؛ rm file.txt فایل و rm -r folder/ پوشه را برای همیشه حذف می‌کند. سوییچ -f یعنی «بدون سؤال» — ترکیب rm -rf را فقط وقتی بنویسید که مسیر را دو بار خوانده باشید (در بخش اشتباهات خطرناک به آن برمی‌گردیم).

find — پیدا کردن سوزن در انبار کاه

find /var/www -name "*.log"            # همه‌ی فایل‌های log
find /var/log -size +100M              # فایل‌های بزرگ‌تر از ۱۰۰ مگابایت
find /var/www -mtime -1                # تغییر‌یافته در ۲۴ ساعت اخیر
💡 نکته: find /var/log -size +100M اولین دستوری است که وقت پرشدن دیسک باید اجرا کنید — در ۹۰ درصد موارد مقصر یک فایل لاگ چاق است.

دیدن و ویرایش فایل‌ها

cat و less و head و tail — خواندن بدون ویرایشگر

cat /etc/hostname              # چاپ کل فایل (برای فایل‌های کوتاه)
less /var/log/syslog           # ورق‌زدن فایل بزرگ؛ خروج با q، جستجو با /
head -n 20 access.log          # بیست خط اول
tail -n 50 error.log           # پنجاه خط آخر

ستاره‌ی این گروه tail -f است که فایل را «زنده» دنبال می‌کند — لاگ خطای سایت را باز بگذارید و همان لحظه که صفحه را رفرش می‌کنید خطا را ببینید:

tail -f /var/log/nginx/error.log

nano — ویرایشگری که آدم را اذیت نمی‌کند

nano /etc/nginx/nginx.conf فایل را باز می‌کند؛ ذخیره با Ctrl+O و Enter، خروج با Ctrl+X. ویرایشگر vim قدرتمندتر است، اما برای شروع nano کاملاً کافی است و هیچ‌وقت داخلش گیر نمی‌کنید.

grep — جستجوی متن داخل فایل‌ها

grep "error" /var/log/nginx/error.log      # خط‌های حاوی error
grep -i "timeout" error.log                # بدون حساسیت به بزرگی حروف
grep -rn "db_password" /var/www/           # جستجو در کل پوشه با شماره خط
grep -c "Failed password" /var/log/auth.log  # فقط شمارش نتیجه‌ها

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

منابع و پردازش‌ها: سرور الان چه حالی دارد؟

top و htop — داشبورد زنده‌ی سرور

top مصرف CPU و رم هر پردازش را زنده نشان می‌دهد (خروج با q). نسخه‌ی خوش‌دست‌ترش htop است که با sudo apt install htop نصب می‌شود: رنگی، قابل مرتب‌سازی با کلیک و با نوار مصرف هر هسته.

ps و kill — پیدا کردن و بستن پردازش

ps aux | grep nginx    # همه‌ی پردازش‌های nginx با شناسه (PID)
kill 1234              # درخواست مودبانه‌ی خاتمه به پردازش 1234
kill -9 1234           # خاتمه‌ی اجباری — فقط وقتی kill معمولی جواب نداد

free و df و du — رم و دیسک به زبان آدمیزاد

free -h
#                total   used   free   buff/cache   available
# Mem:           3.8Gi   1.2Gi  0.3Gi  2.3Gi        2.4Gi

عدد مهم ستون available است، نه free — لینوکس عمداً رم خالی را صرف کش می‌کند و هر وقت برنامه‌ای نیاز داشته باشد پس می‌دهد. کم بودنِ free نگران‌کننده نیست؛ کم بودنِ available هست.

df -h                      # فضای هر پارتیشن
du -sh /var/www/*          # حجم تک‌تک پوشه‌ها — مقصر پرشدن دیسک را لو می‌دهد
du -sh /var/log/* | sort -h  # همان، مرتب‌شده از کوچک به بزرگ

uptime — ضربان‌سنج یک‌خطی

uptime نشان می‌دهد سرور چند وقت است روشن است و سه عدد load average را می‌دهد. قاعده‌ی سرانگشتی: اگر load از تعداد هسته‌های CPU بیشتر باشد، سرور زیر فشار است.

شبکه: از آی‌پی تا تست اتصال

ip a                       # آی‌پی و وضعیت کارت‌های شبکه
ping -c 4 mehranhost.cloud # تست دسترسی و تأخیر (۴ بسته و تمام)
ss -tlnp                   # چه سرویسی روی چه پورتی گوش می‌دهد؟

خروجی ss -tlnp پاسخ سؤال همیشگی «چرا سایتم بالا نمی‌آید؟» است — اگر Nginx در لیست نباشد یعنی اصلاً اجرا نشده، و اگر پورت ۸۰ را پردازش دیگری گرفته باشد همین‌جا می‌بینید:

State   Local Address:Port   Process
LISTEN  0.0.0.0:22           users:(("sshd",pid=812,fd=3))
LISTEN  0.0.0.0:80           users:(("nginx",pid=1420,fd=6))

curl و wget — مرورگرِ ترمینال

curl -I https://example.com    # فقط هدرهای پاسخ: کد 200؟ ریدایرکت؟ نوع سرور؟
wget https://example.com/backup.tar.gz   # دانلود فایل

curl -I برای عیب‌یابی طلاست: کد 301 یعنی ریدایرکت، 502 Bad Gateway یعنی وب‌سرور بالاست ولی PHP پاسخ نمی‌دهد (عیب‌یابی کاملش را در راهنمای رفع خطای 502 نوشته‌ایم)، و curl: (7) Failed to connect یعنی اصلاً چیزی روی آن پورت گوش نمی‌دهد یا فایروال بسته است.

scp و rsync — جابه‌جایی فایل بین دو سیستم

scp backup.tar.gz [email protected]:/root/       # کپی ساده روی SSH
rsync -avz --progress /var/www/ [email protected]:/var/www/

تفاوت مهم: scp همیشه همه‌چیز را از نو می‌فرستد، ولی rsync فقط تفاوت‌ها را منتقل می‌کند — برای انتقال سایت یا بکاپ‌های تکراری برنده‌ی قاطع است. سناریوی کامل بکاپ با rsync را در آموزش بکاپ‌گیری از سرور لینوکس نوشته‌ایم.

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

ساخت کاربر و sudo

adduser mehran             # ساخت کاربر جدید (با سؤال‌های تعاملی)
usermod -aG sudo mehran    # دادن حق sudo (در آلمالینوکس: گروه wheel)
passwd mehran              # تغییر رمز

sudo یعنی «این یک دستور را با دسترسی مدیر اجرا کن». کار روزمره با کاربر عادی + sudo، از کار دائم با root بسیار امن‌تر است — یک غلط تایپی root می‌تواند کل سرور را ببرد.

chmod و chown — چه کسی چه کاری می‌تواند بکند

هر فایل سه سطح دسترسی دارد (مالک، گروه، بقیه) و هر سطح سه حق (خواندن r=۴، نوشتن w=۲، اجرا x=۱). جمع این اعداد همان عددهای معروف را می‌سازد:

chmod 644 index.html   # مالک: خواندن+نوشتن، بقیه: فقط خواندن — استاندارد فایل‌های وب
chmod 755 script.sh    # مالک: کامل، بقیه: خواندن+اجرا — استاندارد پوشه‌ها و اسکریپت‌ها
chmod 600 id_ed25519   # فقط مالک — الزامی برای کلیدهای SSH
chown -R www-data:www-data /var/www/site   # تغییر مالکیت کل پوشه

خطای معروف Permission denied تقریباً همیشه به همین دو دستور برمی‌گردد: یا دسترسی فایل اشتباه است، یا مالکش کاربری نیست که برنامه با آن اجرا می‌شود (مثلاً وب‌سرور با www-data کار می‌کند ولی فایل‌ها مال root است).

سرویس‌ها و لاگ‌ها: systemctl و journalctl

هر نرم‌افزار دائمی سرور — وب‌سرور، دیتابیس، ربات شما — یک «سرویس» systemd است و با یک جفت دستور مدیریت می‌شود:

systemctl status nginx     # وضعیت: active است یا failed؟ + آخرین لاگ‌ها
systemctl restart nginx    # ری‌استارت
systemctl reload nginx     # بارگذاری مجدد کانفیگ بدون قطعی
systemctl enable nginx     # اجرای خودکار بعد از هر ریبوت
systemctl disable --now apache2   # غیرفعال + همین حالا خاموش

و برای دیدن لاگ همان سرویس:

journalctl -u nginx -n 50        # پنجاه خط آخر لاگ سرویس
journalctl -u nginx -f           # دنبال‌کردن زنده (مثل tail -f)
journalctl -u nginx --since "10 min ago"
💡 نکته: عادت طلایی عیب‌یابی: هر وقت سرویسی بالا نیامد، اول systemctl status بعد journalctl -u NAME -n 50. جواب تقریباً همیشه در همین دو خروجی است — همان متن انگلیسی خطا را گوگل کنید.

نصب و به‌روزرسانی بسته‌ها

در اوبونتو و دبیان با apt و در آلمالینوکس و راکی با dnf:

# اوبونتو / دبیان
apt update                 # به‌روزرسانی فهرست بسته‌ها (اول همیشه این!)
apt install htop           # نصب
apt upgrade                # ارتقای همه‌ی بسته‌های نصب‌شده
apt remove apache2         # حذف

# آلمالینوکس / راکی
dnf install htop
dnf update

اگر E: Unable to locate package گرفتید، معمولاً یعنی apt update را فراموش کرده‌اید یا اسم بسته در آن توزیع فرق دارد. تفاوت خانواده‌ی دبیان و ردهت را در مقاله‌ی بهترین سیستم‌عامل برای سرور مجازی باز کرده‌ایم.

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

فرمت استاندارد جابه‌جایی پوشه‌ها در لینوکس tar.gz است. دو دستور کافی است:

tar czf site-backup.tar.gz /var/www/site    # ساخت آرشیو فشرده
tar xzf site-backup.tar.gz                  # باز کردن در مسیر فعلی
tar tzf site-backup.tar.gz | less           # فقط دیدن محتوا، بدون باز کردن

ترفند حفظ‌کردنش: create برای ساختن، extract برای باز کردن، z یعنی gzip و f یعنی اسم فایل بعدش می‌آید.

ترکیب‌های حرفه‌ای: پایپ و ریدایرکت

قدرت واقعی ترمینال لینوکس این‌جاست: خروجی هر دستور می‌تواند ورودی دستور بعدی شود.

  • | (پایپ) خروجی را به دستور بعد می‌دهد: ps aux | grep php
  • > خروجی را در فایل می‌نویسد (محتوای قبلی پاک می‌شود!): df -h > disk-report.txt
  • >> به انتهای فایل اضافه می‌کند: echo "test" >> notes.txt
  • && دستور دوم را فقط در صورت موفقیت اولی اجرا می‌کند: apt update && apt upgrade -y

چند ترکیب که ارزش ذخیره‌کردن دارند:

# ده آی‌پی پرترافیک لاگ وب‌سرور
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# پرحجم‌ترین پوشه‌های کل سرور
du -h / --max-depth=2 2>/dev/null | sort -rh | head -15

# فقط خطاهای امروز یک سرویس
journalctl -u nginx --since today | grep -i error

پنج اشتباه خطرناک که سرور را نابود می‌کند

  1. rm -rf با مسیر اشتباه. کلاسیک‌ترین فاجعه: rm -rf /var/www /site (یک فاصله‌ی اضافی!) کل /var/www را حذف می‌کند و بعد سراغ /site می‌رود. قبل از هر rm -rf، همان مسیر را اول با ls ببینید.
  2. chmod -R 777 برای «حل» مشکل دسترسی. یعنی هر کاربر و هر اسکریپتی اجازه‌ی نوشتن در همه‌چیز را دارد — دعوت‌نامه‌ی رسمی برای بدافزار. مشکل دسترسی را با chown درست و اعداد استاندارد ۶۴۴/۷۵۵ حل کنید.
  3. بستن فایروال روی خودتان. اگر روی SSH نشسته‌اید و قانون فایروال می‌نویسید، اول مطمئن شوید پورت SSH مجاز است (ufw allow 22 قبل از ufw enable). اگر هم قفل شدید، کنسول تحت وب پنل مهران هاست از مرورگر به سرور می‌رسد و راه نجات همیشگی است.
  4. ویرایش کانفیگ بدون نسخه‌ی پشتیبان. یک cp nginx.conf nginx.conf.bak دو ثانیه وقت می‌گیرد؛ برگرداندن سرویسی که با کانفیگ خراب بالا نمی‌آید، دو ساعت. ابزارهای تست کانفیگ (مثل nginx -t) را هم قبل از ری‌استارت اجرا کنید.
  5. اجرای اسکریپت‌های ناشناس با root. الگوی curl … | bash را فقط برای منابع کاملاً معتبر به کار ببرید؛ هر چیز دیگری را اول دانلود کنید، با less بخوانید، بعد اجرا کنید.
💡 نکته: بهترین جای تمرین این دستورها سرور اصلی نیست! یک سرور ابری ساعتی بسازید، هر بلایی خواستید سرش بیاورید و آخر شب حذفش کنید — کل هزینه‌ی یک عصر تمرین، از یک چای بیرون کمتر می‌شود.

جدول مرجع: ۲۰ دستور که باید در خون‌تان باشد

دستورکارمثال پرکاربرد
lsفهرست فایل‌هاls -lah
cdجابه‌جایی بین مسیرهاcd /var/www
cpکپیcp -r site/ backup/
mvجابه‌جایی / تغییر نامmv a.txt b.txt
rmحذف (بدون بازگشت)rm -r old-folder/
findجستجوی فایلfind / -size +100M
grepجستجوی متنgrep -rn "error" .
tailانتهای فایل / لاگ زندهtail -f error.log
lessورق‌زدن فایل بزرگless syslog
nanoویرایش فایلnano /etc/hosts
htopمانیتور زنده‌ی منابعhtop
psفهرست پردازش‌هاps aux | grep php
dfفضای دیسکdf -h
duحجم پوشه‌هاdu -sh *
freeوضعیت رمfree -h
ssپورت‌های بازss -tlnp
curlتست HTTPcurl -I https://site.ir
systemctlمدیریت سرویس‌هاsystemctl restart nginx
journalctlلاگ سرویس‌هاjournalctl -u nginx -f
tarآرشیو و فشرده‌سازیtar czf b.tar.gz site/

سؤالات پرتکرار

از کجا شروع کنم؟ حفظ‌کردن این همه دستور ممکن نیست!

لازم هم نیست. ده دستور اول جدول بالا ۸۰ درصد کار روزمره را پوشش می‌دهند؛ بقیه با تکرار خودشان در انگشتان‌تان می‌نشینند. برای هر چیز فراموش‌شده هم man و --help همیشه هستند.

فرق دستورات اوبونتو و آلمالینوکس چقدر است؟

حدود ۹۵ درصد دستورات این مقاله در هر دو یکسان است. تفاوت اصلی مدیر بسته است (apt در برابر dnf) و چند جزئیات مثل نام گروه sudo (در آلمالینوکس wheel) و نام کاربر وب‌سرور.

دستوری زدم و ترمینال قفل شد؛ چه کنم؟

Ctrl+C اجرای دستور فعلی را قطع می‌کند. اگر در less یا man گیر کرده‌اید، q خارج می‌شود؛ اگر ناخواسته وارد vim شدید، :q! و Enter. اگر کل اتصال SSH یخ زده، Enter و بعد ~. (مد و نقطه) اتصال را می‌بندد.

خطای command not found یعنی چه؟

یا غلط تایپی دارید، یا آن ابزار نصب نیست (مثلاً htop را اول باید نصب کنید)، یا دستور هست ولی در مسیر کاربر شما نیست — در این حالت اجرای همان دستور با sudo یا مسیر کامل (مثل /usr/sbin/nginx) مشکل را نشان می‌دهد.

قدم بعدی

این دستورات جعبه‌ابزار شماست؛ مهارت واقعی از استفاده در یک پروژه‌ی واقعی می‌آید. پیشنهاد ما: یک وب‌سایت با Nginx بالا بیاورید — در همان ده دقیقه از نیمی از دستورات این مقاله استفاده خواهید کرد — و بلافاصله ده قدم امنیتی سرور را پیاده کنید. هنوز سروری برای تمرین ندارید؟ ساختش کمتر از یک دقیقه طول می‌کشد.

آموزش‌های مرتبط

آماده‌ی تمرین عملی هستید؟

سرور ابری ساعتی مهران هاست در ۶۰ ثانیه تحویل می‌شود — تمرین کنید و فقط بابت همان ساعت‌ها پرداخت کنید. هزینه را پیش از ثبت‌نام با محاسبه‌گر برآورد کنید.