هر کاری که با سرور لینوکسی میکنید — از دیدن یک لاگ ساده تا نجات سایتی که دیسکش پر شده — در نهایت به چند دستور در ترمینال ختم میشود. این مقاله حدود ۴۰ دستور پرکاربرد لینوکس را بر اساس «کاری که میخواهید انجام دهید» دستهبندی کرده است؛ برای هر کدام یک توضیح یکخطی و یک مثال واقعی آوردهایم تا همین امروز روی سرور خودتان قابل استفاده باشند، نه فقط قابل حفظکردن.
قبل از شروع: ترمینال چطور فکر میکند
ساختار تقریباً همهی دستورات لینوکس یکی است: دستور [سوییچها] [هدف]. مثلاً در 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
پنج اشتباه خطرناک که سرور را نابود میکند
rm -rfبا مسیر اشتباه. کلاسیکترین فاجعه:rm -rf /var/www /site(یک فاصلهی اضافی!) کل/var/wwwرا حذف میکند و بعد سراغ/siteمیرود. قبل از هرrm -rf، همان مسیر را اول باlsببینید.chmod -R 777برای «حل» مشکل دسترسی. یعنی هر کاربر و هر اسکریپتی اجازهی نوشتن در همهچیز را دارد — دعوتنامهی رسمی برای بدافزار. مشکل دسترسی را باchownدرست و اعداد استاندارد ۶۴۴/۷۵۵ حل کنید.- بستن فایروال روی خودتان. اگر روی SSH نشستهاید و قانون فایروال مینویسید، اول مطمئن شوید پورت SSH مجاز است (
ufw allow 22قبل ازufw enable). اگر هم قفل شدید، کنسول تحت وب پنل مهران هاست از مرورگر به سرور میرسد و راه نجات همیشگی است. - ویرایش کانفیگ بدون نسخهی پشتیبان. یک
cp nginx.conf nginx.conf.bakدو ثانیه وقت میگیرد؛ برگرداندن سرویسی که با کانفیگ خراب بالا نمیآید، دو ساعت. ابزارهای تست کانفیگ (مثلnginx -t) را هم قبل از ریاستارت اجرا کنید. - اجرای اسکریپتهای ناشناس با 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 | تست HTTP | curl -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 بالا بیاورید — در همان ده دقیقه از نیمی از دستورات این مقاله استفاده خواهید کرد — و بلافاصله ده قدم امنیتی سرور را پیاده کنید. هنوز سروری برای تمرین ندارید؟ ساختش کمتر از یک دقیقه طول میکشد.