در این مقاله از رهام کلود، میخوایم مهمترین دستورات لینوکس برای مدیریت سرور رو از پایه و با زبان ساده یاد بگیریم.
از جابهجایی بین پوشهها و مدیریت فایلها، تا موضوعاتی مثل بررسی منابع، مدیریت سرویسها، شبکه، کاربران، دسترسیها و پیدا کردن خطاهای سرور.
هدف اینه که حتی اگه تازه وارد دنیای لینوکس شدید، بعد از خوندن این راهنما بدونید هر دستور چه کاری انجام میده و در چه شرایطی باید ازش استفاده بشه.
پس با ما تا انتهای این مقاله همراه باشید.
ترمینال لینوکس
ترمینال محیطیه که داخلش دستور مینویسیم و به سرور میگیم چه کاری انجام بده.
برخلاف ویندوز که بیشتر کارها با کلیک انجام میشن، در سرور لینوکسی معمولا مدیریت اصلی از طریق خط فرمان انجام میشه.
مثلا وقتی دستور زیر رو وارد میکنید:
pwd
سرور مسیر پوشهای که الان داخلش هستید رو نشون میده.
در بیشتر سرورها، اتصال از طریق SSH انجام میشه. برای نمونه، از ویندوز یا لینوکس میتونید با دستور زیر به سرور وصل بشید:
ssh root@192.0.6.43
به جای IP نمونه باید آدرس واقعی سرور خودتون رو بنویسید. بعد از وارد کردن رمز عبور، وارد محیط خط فرمان سرور میشید.
شناخت مسیرها و پوشهها در لینوکس
اولین چیزی که باید یاد بگیرید، جابهجایی بین مسیرهاست. در لینوکس همه چیز از مسیر اصلی “/” شروع میشه.
برای مشاهده مسیر فعلی:
pwd
این دستور میگه که الان دقیقا داخل کدوم پوشه هستید.
برای دیدن فایلها و پوشهها:
ls
نمایش جزئیات بیشتر:
ls -l
دیدن فایلهای مخفی:
ls -la
نکته: فایلهای مخفی در لینوکس معمولا با نقطه شروع میشن، مثل “bashrc.”.
رفتن به یک پوشه:
cd /var/www
برگشتن به پوشه قبلی:
.. cd
برای برگشتن به پوشه اصلی کاربر:
~ cd
برای برگشت سریع به مسیر قبلی که داخلش بودید:
– cd
این چند دستور ساده، پایه کار با بیشتر دستورات لینوکس هستن.
ساخت فایل و پوشه
برای ساخت یک پوشه جدید از `mkdir` استفاده میکنیم:
mkdir backups
اگر بخواید چند پوشه تو در تو رو یکجا بسازید:
mkdir -p /var/backups/website/daily
ساخت یک فایل خالی:
touch test.txt
نکته: این دستور فایل test.txt رو میسازه. اگر فایل از قبل وجود داشته باشه، محتوای اون رو پاک نمیکنه.
کپی، انتقال و تغییر نام فایلها
برای کپی کردن یک فایل از دستور cp استفاده میکنیم:
cp config.php config-backup.php
کپی کردن یک پوشه همراه با تمام محتویاتش:
cp -r website website-backup
انتقال فایل:
/mv file.txt /var/backups
دستور mv برای تغییر نام هم استفاده میشه:
mv old-name.txt new-name.txt
یعنی اگه مقصد یک نام جدید باشه، فایل تغییر نام پیدا میکنه و اگر مقصد یک پوشه باشه، فایل به اون پوشه منتقل میشه.
حذف فایل و پوشه (با احتیاط کامل انجام بشه)
برای حذف یک فایل:
rm file.txt
حذف یک پوشه خالی :
rmdir empty-folder
حذف پوشه همراه با تمام فایلهای داخلش:
rm -r folder-name
گاهی دستور زیر رو هم میبینید:
rm -rf folder-name
گزینه f- یعنی بدون پرسیدن تایید، حذف انجام بشه.
این دستور قدرت زیادی داره و اگر مسیر رو اشتباه وارد بشه، ممکنه اطلاعات مهم سرور پاک بشه. قبل از اجرای اون، حتما مسیر فعلی و نام پوشه رو خوب بررسی کنید.
مشاهده محتوای فایلها
برای دیدن کل محتوای یک فایل کوچک:
cat file.txt
اگر فایل طولانیه ، بهتره از less استفاده کنید:
less /var/log/messages
با کلیدهای جهتدار میتونید جابهجا بشید و با زدن q خارج بشید.
دیدن چند خط اول فایل:
head file.txt
۲۰ خط اول:
head -n 20 file.txt
و دیدن چند خط آخر:
tail file.txt
مشاهده لحظهای تغییرات یک فایل لاگ:
tail -f /var/log/messages
این دستور برای مدیران سرور خیلی کاربردیه، چون میتونید همزمان با رخ دادن یک مشکل، پیامهای جدید لاگ رو ببینید.
برای خروج از حالت دنبال کردن فایل، کلیدهای Ctrl + C رو بزنید.
ویرایش فایلها در لینوکس
یکی از ویرایشگرهای ساده لینوکس nano هست:
nano /etc/hosts
نکته: بعد از تغییر فایل، برای ذخیره کردن Ctrl + O و برای خروج Ctrl + X رو بزنید.
ویرایشگر معروف دیگه vi یا vim هست:
vi /etc/hosts
برای شروع ویرایش داخل vi، کلید i رو بزنید. بعد از انجام تغییرات، کلید Esc رو بزنید و برای ذخیره و خروج بنویسید:
wq:
و برای خروج بدون ذخیره تغییرات:
!q:
اگر تازهکار هستید ، معمولا nano راحتتره. ولی یاد گرفتن چند فرمان اصلی vi برای مدیریت سرور خیلی مفیده، چون تقریبا روی بیشتر سرورها وجود داره.
پیدا کردن فایلها و پوشهها
برای پیدا کردن یک فایل در کل سرور میتونید از find استفاده کنید:
find / -name “wp-config.php” 2>/dev/null
در این دستور، جستوجو از مسیر اصلی سرور شروع میشه. بخش 2</dev/null هم خطاهای دسترسی رو مخفی میکنه تا خروجی شلوغ نشه.
برای جستوجوی فایلها داخل یک مسیر مشخص:
“find /var/www -name “*.php
این دستور تمام فایلهایی که پسوند PHP دارن رو نمایش میده.
جستوجوی متن داخل فایلها از grep استفاده میکنیم:
grep “error” application.log
جستوجوی یک عبارت داخل تمام فایلهای یک پوشه:
/grep -R “database” /var/www
اینکه بزرگی و کوچکی حروف مهم نباشه :
/grep -Ri “error” /var/log
بررسی فضای دیسک سرور
برای مشاهده وضعیت کلی دیسک:
df -h
گزینه -h باعث میشه حجمها به شکل قابل فهم، مثلا گیگابایت و مگابایت نمایش داده بشن.
اگر فضای دیسک پر شده، میتونید حجم یک پوشه رو بررسی کنید:
du -sh /var/log
دیدن حجم پوشههای داخل یک مسیر:
du -sh /var/* 2>/dev/null
مرتب کردن پوشهها بر اساس حجم:
du -sh /var/* 2>/dev/null | sort -h
این دستور کمک میکنه سریعتر بفهمید کدوم پوشه فضای بیشتری مصرف کرده.
بررسی RAM و پردازنده
برای مشاهده مقدار حافظه مصرفشده و آزاد:
free -h
در لینوکس ممکنه مقدار حافظه آزاد کم به نظر برسه، چون سیستم از بخشی از RAM برای کش استفاده میکنه.
معمولا ستون available معیار بهتری برای بررسی حافظه قابل استفاده است.
برای مشاهده پردازشهای در حال اجرا:
top
ابزار خواناتری هم به نام htop وجود داره:
htop
اگر نصب نبود، در اوبونتو و دبیان میتونید نصبش کنید:
apt install htop -y
در AlmaLinux ،Rocky Linux یا CentOS:
dnf install htop -y
داخل top یا htop میتونید ببینید کدوم برنامه بیشتر از CPU یا RAM استفاده میکنه.
مشاهده و متوقف کردن پردازشها
برای دیدن پردازشهای مربوط به یک برنامه:
ps aux | grep nginx
هر پردازش یک شماره به نام PID داره . برای متوقف کردن عادی یک پردازش:
kill 1234
اگر پردازش متوقف نشد ، میشه با اجبار بستش:
kill -9 1234
نکته: استفاده از kill -9 باید آخرین گزینه باشه، چون برنامه فرصت ذخیره اطلاعات یا بستن درست فایلها رو پیدا نمیکنه.
برای بستن پردازشها بر اساس نام:
pkill nginx
قبل از اجرای این دستور مطمئن بشید که واقعاً قصد متوقف کردن تمام پردازشهای اون برنامه رو دارید.
مدیریت سرویسها با systemctl
در بیشتر توزیعهای جدید لینوکس ، سرویسها با systemctl مدیریت میشن .
برای مشاهده وضعیت یک سرویس:
systemctl status nginx
راهاندازی سرویس:
systemctl start nginx
توقف سرویس:
systemctl stop nginx
ریاستارت کردن:
systemctl restart nginx
اگر فقط فایل تنظیمات تغییر کرده و نمیخواید سرویس کامل قطع و وصل بشه:
systemctl reload nginx
اینکه سرویس بعد از روشن شدن سرور خودکار اجرا بشه:
systemctl enable nginx
غیرفعال کردن اجرای خودکار:
systemctl disable nginx
یکی از اشتباهات رایج اینه که بعد تغییر تنظیمات، سرویس بدون بررسی ری-استارت بشه.
مثلا، قبل ری-استارت Nginx بهتره تنظیمات رو تست کنید:
nginx -t
اگر پیام موفقیت دیدید، بعد سرویس رو ریاستارت کنید.
خواندن لاگهای سیستم
وقتی یک سرویس اجرا نمیشه، فقط ری-استارت کردن اون کافی نیست. باید ببینید چرا مشکل ایجاد شده.
برای دیدن لاگ یک سرویس:
journalctl -u nginx
دیدن آخرین پیامها:
journalctl -u nginx -n 50
مشاهده زنده لاگها:
journalctl -u nginx -f
دیدن خطاهای مهم از زمان روشن شدن سرور:
journalctl -p err -b
این دستورات مخصوصا وقتی یک سرویس در وضعیت failed قرار گرفته، خیلی کاربردی هستن.
بررسی IP و وضعیت شبکه
برای مشاهده IPهای سرور:
ip addr
نسخه کوتاهتر:
ip a
دیدن مسیر پیشفرض و Gateway:
ip route
تست ارتباط با یک IP یا دامنه:
ping 8.8.8.8 یا ping google.com
اگر IP پینگ میشه ولی دامنه نه، احتمالا مشکل از DNS سروره.
متوقف کردن پینگ:
Ctrl + C
و برای دیدن مسیر عبور بستهها تا مقصد:
traceroute google.com
نکته: ممکنه traceroute بهصورت پیشفرض نصب نباشه.
بررسی پورتهای باز و برنامههای در حال گوش دادن
برای دیدن پورتهایی که روی سرور در حال استفاده هستن:
ss -tulpn
مثلا برای بررسی پورت 80:
‘ss -tulpn | grep ‘:80
و برای بررسی پورت SSH:
‘ss -tulpn | grep ‘:22
این دستور به شما میگه چه برنامهای روی یک پورت مشخص در حال گوش دادنه.
مثلا اگه سایت باز نمیشه، با بررسی پورتهای 80 و 443 میتونید مطمئن بشید وبسرور اجرا شده یا نه.
دانلود فایل با wget و curl
برای دانلود یک فایل:
wget https://example.com/file.zip
مشخص کردن نام فایل خروجی:
wget -O backup.zip https://example.com/file.zip
با curl هم میتونید فایل دانلود کنید:
curl -O https://example.com/file.zip
بررسی پاسخ یک سایت بدون دانلود کامل محتوا:
curl -I https://example.com
این دستور اطلاعاتی مثل کد پاسخ، نوع سرور و ریدایرکتها رو نمایش میده.
و برای مشاهده محتوای پاسخ :
curl https://example.com
فشردهسازی و استخراج فایلها
برای ساخت فایل فشرده tar.gz:
tar -czf backup.tar.gz /var/www/html
استخراج اون:
tar -xzf backup.tar.gz
فشرده کردن با ZIP:
zip -r website.zip website/
و برای استخراج ZIP:
unzip website.zip
این دستورات برای گرفتن بکاپ، انتقال سایت و نگهداری فایلها خیلی کاربردی هستن.
مدیریت کاربران لینوکس
برای ساخت یک کاربر جدید:
adduser ali
در بعضی توزیعها میتونید از این دستور هم استفاده کنید:
useradd -m ali
تعیین یا تغییر رمز عبور:
passwd ali
اضافه کردن کاربر به گروه مدیریتی در اوبونتو:
usermod -aG sudo ali
در AlmaLinux و Rocky Linux معمولاً گروه مدیریتی wheel هست:
usermod -aG wheel ali
دیدن اطلاعات یک کاربر:
id ali
حذف کاربر:
userdel ali
و برای حذف کاربر همراه با پوشه خانگی اون:
userdel -r ali
قبل از حذف کاربر ، مطمئن بشید فایل مهمی داخل پوشه شخصی اون باقی نمونده.
مالکیت و سطح دسترسی فایلها
هر فایل در لینوکس یک مالک ، یک گروه و یک سطح دسترسی داره.
برای مشاهده این اطلاعات:
ls -l
تغییر مالک فایل:
chown user:user file.txt
تغییر مالکیت یک پوشه و تمام محتویاتش:
chown -R user:user /var/www/example
و تغییر سطح دسترسی:
chmod 644 file.txt
و برای پوشهها معمولاً سطح دسترسی زیر رایجه:
chmod 755 folder
عدد 644 معمولا یعنی مالک اجازه خواندن و نوشتن داره و بقیه فقط میتونن فایل رو بخونن. عدد 755 هم برای پوشهها اجازه ورود و خواندن رو فراهم میکنه.
از دادن دسترسی 777 بدون دلیل خودداری کنید. این دسترسی به همه اجازه نوشتن میده و میتونه یک خطر امنیتی جدی ایجاد کنه .
نصب و حذف برنامهها
در اوبونتو و دبیان ، برای بهروزرسانی لیست بستهها :
apt update
برای ارتقای برنامهها :
apt upgrade -y
نصب یک برنامه :
apt install nginx -y
حذف برنامه :
apt remove nginx -y
در AlmaLinux ، Rocky Linux و سیستمهای مشابه :
dnf update -y
برای نصب :
dnf install nginx -y
و برای حذف :
dnf remove nginx -y
نکته: قبل از انجام آپدیت گسترده روی سرورهای مهم، بهتره بکاپ داشته باشید و تغییرات بستهها رو بررسی کنید.
اتصال و انتقال فایل با SSH و SCP
برای اتصال به سرور:
ssh root@192.0.2.10
اگر SSH روی پورت متفاوتی اجرا میشه:
ssh -p 2222 root@192.0.2.10
انتقال یک فایل از سیستم خودتون به سرور:
scp backup.zip root@192.0.2.10:/root/
دانلود یک فایل از سرور :
scp root@192.0.2.10:/root/backup.zip .
برای انتقال یک پوشه کامل:
scp -r website root@192.0.2.10:/var/www/
نکته: نقطه “.” در لینوکس یعنی مسیر فعلی.
انتقال حرفهای فایلها با rsync
برای فایلها و پوشههای بزرگ ، rsync معمولا از scp کاربردیتره، چون فقط بخشهای تغییرکرده رو منتقل میکنه.
rsync -avz website/ root@192.0.2.10:/var/www/website/
گزینه a- ساختار و دسترسی فایلها رو تا حد زیادی حفظ میکنه ، v- جزئیات رو نمایش میده و -z اطلاعات رو هنگام انتقال فشرده میکنه.
و برای دیدن نتیجه دستور بدون انتقال:
rsync -avzn website/ root@192.0.2.10:/var/www/website/
گزینه n- یک اجرای آزمایشی انجام میده. این روش قبل از انتقال یا حذف فایلهای مهم خیلی مفیده.
ترکیب دستورات با Pipe
علامت | خروجی یک دستور رو به دستور بعدی میفرسته. مثلا:
ps aux | grep mysql
دستور اول تمام پردازشها رو نمایش میده و دستور دوم فقط خطهایی که شامل `mysql` هستن جدا میکنه .
مثال دیگه:
du -sh /var/* 2>/dev/null | sort -h
اینجا حجم پوشهها گرفته میشه و بعد بر اساس اندازه مرتب میشن.
ترکیب دستورات یکی از مهمترین مهارتها برای استفاده حرفهایتر از دستورات لینوکس محسوب میشه.
ذخیره خروجی دستورات داخل فایل
برای ذخیره خروجی داخل یک فایل:
df -h > disk-report.txt
اگر فایل وجود داشته باشه، محتوای قبلی اون جایگزین میشه.
اضافه کردن خروجی به انتهای فایل:
date >> disk-report.txt
ذخیره خطاها داخل یک فایل:
command 2> errors.txt
و برای ذخیره هم خروجی عادی و هم خطاها:
command > output.txt 2>&1
این روش برای بررسی اسکریپتها و جمعآوری گزارشهای عیبیابی خیلی کاربردیه.
اجرای چند دستور پشت سر هم
برای اجرای دستور دوم فقط وقتی دستور اول موفق بوده:
apt update && apt upgrade -y
اجرای دستور دوم در هر صورت:
command1 ; command2
و برای اجرای دستور دوم فقط وقتی دستور اول خطا داده:
command1 || command2
مثلا:
systemctl restart nginx || systemctl status nginx
اگر ریاستارت Nginx ناموفق باشه، وضعیت سرویس نمایش داده میشه.
زمانبندی کارها با Cron
Cron برای اجرای خودکار دستورات در زمان مشخص استفاده میشه. مثلا میتونید بکاپ رو هر شب اجرا کنید.
برای ویرایش برنامههای زمانبندیشده کاربر فعلی:
crontab -e
و برای دیدن Cronهای ثبتشده:
crontab -l
نمونه اجرای یک اسکریپت هر روز ساعت 3 صبح:
0 3 * * * /root/backup.sh
اگر اسکریپت اجرا نمیشه، اول مطمئن بشید مسیر فایل کامله، دسترسی اجرا داره و دستورات داخل اسکریپت هم با مسیر کامل نوشته شدن.
بررسی اطلاعات سیستم
برای مشاهده نام سیستم:
hostname
دیدن اطلاعات کاملتر سیستم عامل و کرنل:
uname -a
نسخه سیستم عامل:
cat /etc/os-release
مدتزمان روشن بودن سرور و مقدار Load:
uptime
و دیدن تاریخ و ساعت:
date
و برای بررسی تنظیمات زمانی سرور:
timedatectl
مثالی برای درک مدیریت لینوکس
مدیریت سرور لینوکسی شبیه مدیریت یک ساختمان بزرگه.
بعضی دستورات میگن الان کجای ساختمانید، بعضیا برای باز یا بستن اتاقها هستن، بعضی مصرف برق و آب رو میگن و بعضی هم میگن چه کسی اجازه ورود به هر بخش رو داره.
لازم نیست از روز اول تمام جزئیات ساختمان رو حفظ باشید؛ مهم اینه بدونید برای هر مشکل باید سراغ کدوم ابزار برید و قبل از انجام تغییرهای حساس، وضعیت فعلی رو بررسی کنید.
فرض کنید کاربران میگن سایت باز نمیشه. بهتره بدون برنامه شروع به ریاستارت کردن همه چیز نکنید.
اول بررسی کنید سرور روشن و قابل دسترسی هست یا نه:
ping 192.0.2.10
بعد ببینید وبسرور اجرا شده یا نه:
systemctl status nginx
پورتهای سایت رو بررسی کنید:
ss -tulpn | grep -E ‘:80|:443’
وضعیت دیسک رو هم ببینید:
df -h
اگر سرویس خطا داشت، آخرین لاگها رو بررسی کنید:
journalctl -u nginx -n 50
این روش مرحلهای باعث میشه به جای حدس زدن، دلیل واقعی مشکل رو پیدا کنید.
چند نکته مهم برای اجرای امن دستورات لینوکس
قبل از اجرای دستورهایی که فایل حذف میکنن، دسترسی تغییر میدن یا سرویس مهمی رو متوقف میکنن، مسیر و نام فایل رو دوباره بخونید.
اگر دستور جدیدی رو از اینترنت کپی کردید، اول بفهمید هر بخشش چه کاری انجام میده و بعد اجراش کنید.
برای تغییر فایلهای مهم، بهتره اول یک نسخه پشتیبان بسازید:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
وقتی از راه دور تنظیمات شبکه یا SSH رو تغییر میدید، اتصال فعلی رو نبندید تا مطمئن بشید تنظیم جدید کار میکنه.
یک اشتباه کوچک در این قسمت ممکنه دسترسی شما به سرور رو قطع کنه.
نتیجهگیری
یاد گرفتن دستورات لینوکس به معنی حفظ کردن صدها فرمان نیست؛ چیزی که بیشتر اهمیت داره، شناخت گروههای اصلی دستورات و استفاده درست از اونهاست.
باید بدونید چطور بین پوشهها جابهجا بشید، فایلها رو مدیریت کنید، منابع سرور رو ببینید، سرویسها رو کنترل کنید و هنگام بروز خطا سراغ لاگها برید.
برای شروع، دستورهایی مثل cd ،ls ،cp ،mv ،df ،free ،systemctl و journalctl رو تمرین کنید.
بعد کمکم سراغ ابزارهایی مثل grep ،find ،rsync ،Pipe و Cron برید.
با تمرین روی یک سرور آزمایشی، خیلی زود میتونید بیشتر کارهای روزمره مدیریت سرور رو بدون سردرگمی انجام بدید.
سوالات متداول
برای یادگیری دستورات لینوکس از کجا شروع کنیم؟
بهتره اول جابهجایی بین مسیرها، مشاهده فایلها، کپی، انتقال و ویرایش فایل رو یاد بگیرید. بعد از اون سراغ بررسی منابع، مدیریت سرویسها و خواندن لاگها برید.
آیا همه دستورات روی اوبونتو و AlmaLinux یکسان هستن؟
بیشتر فرمانهای پایه مثل ls ،cd ،cp ،systemctl و journalctl یکسان هستن.
تفاوت اصلی معمولا در مدیریت بستههاست؛ اوبونتو از apt و AlmaLinux از dnf استفاده میکنه.
چطور بفهمیم یک دستور چه کاری انجام میده؟
میتونید قبل از اجرا از man یا گزینه help– استفاده کنید:
man command یا command –help
آیا کار کردن با کاربر root خطرناکه؟
اگر دستور اشتباهی اجرا بشه، کاربر root محدودیتی نداره و میتونه فایلهای مهم سیستم رو حذف یا تغییر بده.
بهتره برای کارهای روزمره از یک کاربر معمولی با دسترسی sudo استفاده کنید.
اگر یک سرویس اجرا نشد، اولین کار چیه؟
اول با دستور زیر وضعیت سرویس رو ببینید:
systemctl status service-name
بعد آخرین لاگهای اون رو با این دستور بررسی کنید:
journalctl -u service-name -n 50
چطور بفهمیم فضای سرور چرا پر شده؟
ابتدا با df -h پارتیشن پر رو پیدا کنید. بعد با du حجم پوشهها رو بررسی کنید:
du -sh /var/* 2>/dev/null | sort -h
آیا میشه دستورها رو قبل از اجرای واقعی آزمایش کرد؟
بعضی ابزارها گزینه آزمایشی دارن. مثلا در rsync میتونید از -n استفاده کنید.
برای دستورهای حذف فایل معمولا حالت آزمایشی وجود نداره، پس باید مسیر رو با ls و pwd بررسی کنید.
مهمترین دستور برای پیدا کردن خطای سرور چیه؟
یک دستور ثابت برای همه مشکلات وجود نداره، اما systemctl status و journalctl معمولا بهترین نقطه شروع برای بررسی سرویسهای خراب هستن.