مقدمه: چرا خط فرمان هنوز پادشاه سرورهاست؟
در عصری که رابطهای کاربری گرافیکی (GUI) بر دنیای کامپیوترها حکمرانی میکنند، ممکن است این سوال پیش بیاید که چرا مدیران سیستم و توسعهدهندگان حرفهای هنوز به یک پنجره سیاه و سفید متنی به نام خط فرمان (Command Line) وفادار ماندهاند. پاسخ در قدرت، سرعت و انعطافپذیری نهفته است. خط فرمان ابزاری است که به شما اجازه میدهد با دقت و کارایی بینظیر، سرور لینوکس خود را مدیریت کنید.
ریشههای این ابزار به دههها قبل و سیستمعامل یونیکس بازمیگردد. در آن زمان، کاربران از طریق ترمینالهای ساده (فقط یک کیبورد و یک صفحه نمایش متنی) به کامپیوترهای مرکزی متصل میشدند. به دلیل محدودیت منابع و سرعت پایین شبکهها، دستورات کوتاه، مختصر و متنی طراحی شدند تا با کمترین تعداد کاراکتر، بیشترین کارایی را داشته باشند. این میراث سادگی و قدرت، امروزه در لینوکس به تکامل رسیده است.
این مقاله یک راهنمای عملی برای معرفی دستورات ضروری است که هر فردی که با سرورهای لینوکس کار میکند، باید بداند. از ناوبری در فایلها گرفته تا نظارت بر سلامت سرور، این دستورات الفبای مدیریت سیستم شما هستند. بیایید با اولین و اساسیترین مهارت شروع کنیم: حرکت در سرور.
۱. اصول اولیه: ناوبری در سرور شما
قبل از انجام هر کاری روی سرور، باید بدانید کجا هستید و چگونه به مقصد مورد نظر خود بروید. درک موقعیت فعلی و ناوبری در ساختار درختی فایل سیستم لینوکس، پایه و اساس تمام عملیاتهای دیگر است. این مهارت مانند یادگیری خواندن نقشه قبل از شروع یک سفر است.
در ادامه، سه دستور بنیادی برای ناوبری معرفی شدهاند.
pwd (Print Working Directory)
این دستور به سادگی به شما میگوید که در حال حاضر در کدام دایرکتوری (پوشه) قرار دارید. pwd مسیر کامل دایرکتوری فعلی شما را از ریشه (/) نمایش میدهد.
مثال:
pwd
خروجی چیزی شبیه به این خواهد بود: /home/username
cd (Change Directory)
دستور cd ابزار اصلی شما برای جابجایی بین دایرکتوریها است. برای استفاده از آن، باید با دو مفهوم کلیدی آشنا باشید:
- مسیر مطلق (Absolute Path): مسیری که از ریشه فایل سیستم (
/) شروع میشود. مهم نیست در کجا قرار دارید، این مسیر همیشه شما را به یک مکان مشخص میبرد. - مسیر نسبی (Relative Path): مسیری که از دایرکتوری فعلی شما شروع میشود. برای مثال،
..به دایرکتوری والد (یک سطح بالاتر) اشاره دارد.
چند مثال کاربردی:
# رفتن به دایرکتوری etc با استفاده از مسیر مطلق
cd /etc
# از دایرکتوری فعلی، به دایرکتوری والد برگرد
cd ..
# رفتن مستقیم به دایرکتوری خانه کاربر فعلی
cd ~
# این دستور نیز شما را به دایرکتوری خانه بازمیگرداند
cd
فکر کنید ~ پایگاه اصلی و شخصی شما در سرور است؛ هر جا که باشید، این دستور شما را به خانه بازمیگرداند.
ls (List)
پس از اینکه به دایرکتوری مورد نظر خود رسیدید، با دستور ls میتوانید محتویات آن (فایلها و دایرکتوریهای دیگر) را مشاهده کنید. این دستور گزینههای بسیار مفیدی دارد که اطلاعات بیشتری در اختیار شما قرار میدهند.
ls -l: محتویات را به همراه جزئیات کامل مانند دسترسیها، مالک، اندازه و تاریخ آخرین تغییر نمایش میدهد.ls -a: تمام فایلها، از جمله فایلهای مخفی که نامشان با نقطه (.) شروع میشود را لیست میکند.
مثال:
# لیست کردن محتویات دایرکتوری فعلی با جزئیات
ls -l
# لیست کردن تمام فایلها (شامل مخفیها) در دایرکتوری خانه
ls -a ~
اکنون که میدانیم چگونه در سرور خود حرکت کنیم، وقت آن است که یاد بگیریم چگونه فایلها و دایرکتوریها را مدیریت کنیم.
۲. مدیریت فایلها و دایرکتوریها: ساختن و خراب کردن!
ایجاد، کپی، جابجایی و حذف فایلها و دایرکتوریها از طریق خط فرمان بسیار کارآمد است، به خصوص زمانی که نیاز به مدیریت چندین آیتم به صورت همزمان دارید. این دستورات به شما کنترل کاملی بر ساختار فایلهای سرورتان میدهند.
mkdir (Make Directory)
برای ایجاد یک دایرکتوری جدید از این دستور استفاده کنید.
# ایجاد یک دایرکتوری به نام projects
mkdir projects
اگر بخواهید چندین دایرکتوری تودرتو را به طور همزمان ایجاد کنید (مثلاً dir2 داخل dir1)، از گزینه -p استفاده کنید:
mkdir -p dir1/dir2
touch
این دستور یک فایل خالی جدید ایجاد میکند. اگر فایلی با آن نام از قبل وجود داشته باشد، فقط تاریخ آخرین تغییر آن بهروز میشود.
# ایجاد یک فایل خالی به نام report.txt
touch report.txt
cp (Copy)
برای کپی کردن یک فایل از یک مکان به مکان دیگر استفاده میشود.
# کپی کردن فایل report.txt به داخل دایرکتوری projects
cp report.txt projects/
mv (Move)
این دستور دو کاربرد اصلی دارد: جابجایی فایلها و تغییر نام آنها.
- برای جابجایی:
- برای تغییر نام:
rm (Remove) و rmdir (Remove Directory)
برای حذف فایلها از rm و برای حذف دایرکتوریهای خالی از rmdir استفاده میشود.
# حذف یک فایل
rm final_report.txt
# حذف یک دایرکتوری خالی
rmdir projects
⚠️ هشدار جدی: مراقب rm -r باشید!
دستور rm -r (یا rm -rf) به صورت بازگشتی (recursive) یک دایرکتوری و تمام محتویات درون آن را حذف میکند. این عمل غیرقابل بازگشت است و هیچ پیامی برای تأیید از شما نمیپرسد. یک اشتباه تایپی کوچک با این دستور میتواند منجر به از دست رفتن دادههای حیاتی شود. همیشه قبل از اجرای آن، مسیر را دو بار بررسی کنید.
پس از مدیریت ساختار فایلها، گام بعدی مشاهده و ویرایش محتوای آنهاست.
۳. مشاهده و ویرایش فایلها: پنجرهای به درون سرور
بخش بزرگی از مدیریت سرور شامل مشاهده فایلهای لاگ برای عیبیابی، بررسی فایلهای پیکربندی و ویرایش اسکریپتها میشود. ابزارهای خط فرمان زیر به شما اجازه میدهند به سادگی به محتوای فایلها نگاهی بیندازید یا آنها را ویرایش کنید.
مشاهده محتوای فایلها
cat(Concatenate): این دستور محتوای یک یا چند فایل را به طور کامل در ترمینال نمایش میدهد. برای فایلهای کوتاه بسیار مناسب است.less: برای مشاهده فایلهای طولانی،lessبهترین انتخاب است. این ابزار محتوا را به صورت صفحهبندی شده نمایش میدهد و به شما اجازه میدهد با کلیدهای جهتنما در متن بالا و پایین بروید. برای خروج، کلیدqرا فشار دهید.headوtail: این دو دستور به ترتیب برای نمایش چند خط اول و چند خط آخر یک فایل استفاده میشوند.- گزینه
tail -fفوقالعاده مفید است، زیرا به صورت زنده تغییرات یک فایل را نمایش میدهد. این قابلیت برای نظارت بر فایلهای لاگ در حال نوشتن، عالی است:
تمرکز ویژه بر ویرایشگر nano
برای ویرایش فایلها، ویرایشگرهای قدرتمندی مانند Vim وجود دارند، اما nano به دلیل سادگی و رابط کاربری واضح، گزینهای عالی برای مبتدیان است. برای باز کردن یک فایل موجود یا ایجاد یک فایل جدید، کافی است نام آن را بعد از دستور nano وارد کنید.
nano config.txt
برای ویرایش فایلهای سیستمی که نیاز به دسترسی مدیر دارند، از sudo استفاده کنید:
sudo nano /etc/nginx/nginx.conf
در پایین صفحه ویرایشگر، لیستی از میانبرهای پرکاربرد نمایش داده میشود. علامت ^ به معنای کلید Ctrl است.
| میانبر | کاربرد |
Ctrl + O |
ذخیره فایل (Write Out) |
Ctrl + X |
خروج از nano |
Ctrl + W |
جستجو (Where is) |
Ctrl + K |
بریدن (Cut) خط فعلی |
Ctrl + U |
چسباندن (Uncut) متن بریده شده |
Ctrl + \ |
جستجو و جایگزینی (Search and Replace) |
این ابزارها به شما امکان تعامل عمیق با فایلهای سرور را میدهند. اما قدرت واقعی خط فرمان زمانی آشکار میشود که دستورات را با هم ترکیب کنیم.
۴. قدرت پایپ (|): جستجو و پردازش متن
یکی از قدرتمندترین مفاهیم در خط فرمان لینوکس، پایپینگ (Piping) است. کاراکتر پایپ | خروجی استاندارد یک دستور را میگیرد و آن را به عنوان ورودی استاندارد به دستور بعدی هدایت میکند. این قابلیت به شما اجازه میدهد زنجیرهای از دستورات ساده را برای انجام وظایف پیچیده به هم متصل کنید.
معرفی grep (Global Regular Expression Print)
grep ابزاری فوقالعاده برای جستجوی الگوهای متنی است. میتوانید از آن برای جستجو در فایلها یا در خروجی دستورات دیگر (که از طریق پایپ به آن ارسال شده) استفاده کنید.
- جستجوی یک کلمه در فایل:
- گزینههای پرکاربرد
grep:-i: جستجوی غیر حساس به حروف بزرگ و کوچک.-v: نمایش خطوطی که شامل الگوی مورد نظر نیستند (جستجوی معکوس).-r: جستجوی بازگشتی در تمام فایلهای یک دایرکتوری.
- مثال ترکیبی با پایپ: فرض کنید میخواهید فرآیندهای مربوط به وبسرور Nginx را پیدا کنید.
- در این مثال، خروجی دستور
ps aux(که تمام فرآیندهای در حال اجرا را لیست میکند) بهgrepارسال میشود تا فقط خطوطی که شامل کلمه “nginx” هستند، نمایش داده شوند.
دستورات مفید دیگر برای پردازش متن
sort: خطوط ورودی را به ترتیب الفبایی مرتب میکند.uniq: خطوط تکراری پشت سر هم را حذف میکند (به همین دلیل معمولاً بعد ازsortاستفاده میشود).wc(Word Count): تعداد خطوط (-l)، کلمات (-w) و کاراکترها (-c) را میشمارد.
برای درک قدرت واقعی پایپینگ، این مثال ترکیبی را در نظر بگیرید که تعداد خطوط منحصربهفرد در یک فایل را میشمارد:
cat file.txt | sort | uniq | wc -l
cat file.txt: محتوای فایل را میخواند و به خروجی میفرستد.sort: خروجیcatرا دریافت و خطوط را مرتب میکند. (این کار باعث میشود خطوط تکراری کنار هم قرار گیرند)uniq: خروجیsortرا گرفته و خطوط تکراری مجاور را حذف میکند.wc -l: خروجیuniqرا دریافت کرده و تعداد خطوط باقیمانده را میشمارد.
با این ابزارها میتوانید دادههای متنی را به هر شکلی که میخواهید، پردازش کنید. اکنون بیایید ببینیم چگونه میتوانیم از وضعیت کلی سرور مطلع شویم.
۵. نظارت بر سلامت سرور: چه خبر است؟
برای حفظ پایداری و عملکرد سرور، نظارت مداوم بر منابع سیستم مانند پردازنده (CPU)، حافظه (RAM) و فضای دیسک ضروری است. ابزارهای زیر به شما یک نمای زنده از اتفاقات پشت صحنه سرور میدهند.
top: این دستور یک داشبورد زنده از فرآیندهای در حال اجرا و میزان مصرف منابع آنها را نمایش میدهد. خروجی آن به طور مداوم بهروز میشود. ستونهای کلیدی آن عبارتند از:PID: شناسه منحصر به فرد هر فرآیند (Process ID).%CPU: درصد استفاده از پردازنده توسط فرآیند.%MEM: درصد استفاده از حافظه (RAM) توسط فرآیند.COMMAND: نام دستوری که فرآیند را اجرا کرده است.
htop: یک جایگزین پیشرفتهتر و کاربرپسندتر برایtopاست.htopبا رابط کاربری رنگی، نمایش گرافیکی مصرف منابع و قابلیتهای تعاملی (مانند فیلتر کردن یا متوقف کردن فرآیندها با کلیدهای میانبر)، مدیریت فرآیندها را بسیار سادهتر میکند.ps(Process Status): این دستور یک “عکس فوری” از فرآیندهای فعال در لحظه اجرا را نمایش میدهد. برای مشاهده تمام فرآیندها با جزئیات کامل، معمولاً از دستور زیر استفاده میشود:kill: برای متوقف کردن یک فرآیند سرکش که منابع زیادی مصرف میکند، از این دستور به همراه شناسه فرآیند (PID) آن استفاده میشود.df(Disk Free): فضای استفاده شده و آزاد دیسکهای متصل به سیستم را نمایش میدهد. استفاده از گزینه-hخروجی را به فرمت خوانا (مانند KB، MB، GB) تبدیل میکند.free: میزان حافظه RAM و Swap استفاده شده و آزاد را نشان میدهد. در اینجا نیز گزینه-hبرای خوانایی بهتر توصیه میشود.
نظارت بر فرآیندها یک چیز است، اما مدیریت سرویسهایی که این فرآیندها را اجرا میکنند، گام بعدی است.
۶. مدیریت سرویسها و نرمافزارها
بسیاری از برنامههای مهم سرور، مانند وبسرور (Apache, Nginx)، پایگاه داده (MySQL) یا فایروال، به عنوان سرویس (Service) در پسزمینه اجرا میشوند. این سرویسها برای اجرای مداوم طراحی شدهاند و مدیریت آنها برای عملکرد صحیح سرور حیاتی است.
systemctl: مدیر مدرن سرویسها
در اکثر توزیعهای مدرن لینوکس (مانند Ubuntu, CentOS)، ابزار systemctl مسئول مدیریت سرویسها از طریق سیستم systemd است. تمام دستورات مدیریتی سرویسها نیاز به دسترسی sudo دارند.
در مثالهای زیر، <service> را با نام سرویس مورد نظر خود جایگزین کنید (مثلاً nginx):
- شروع به کار یک سرویس:
- متوقف کردن یک سرویس:
- راهاندازی مجدد (ریاستارت) یک سرویس: (معمولاً پس از تغییر فایل پیکربندی استفاده میشود)
- بررسی وضعیت یک سرویس: (برای دیدن اینکه آیا فعال است، آیا خطایی وجود دارد و مشاهده آخرین لاگها)
- فعال کردن اجرای خودکار سرویس هنگام بوت:
- غیرفعال کردن اجرای خودکار سرویس:
مدیریت بستههای نرمافزاری
برای نصب، بهروزرسانی یا حذف نرمافزارها، هر خانواده از توزیعهای لینوکس از یک مدیر بسته (Package Manager) استفاده میکند. برای سیستمهای مبتنی بر Debian (مانند Ubuntu)، ابزار اصلی apt است.
# نصب یک بسته نرمافزاری جدید (مثلاً htop)
sudo apt install htop
در آموزشهای قدیمیتر ممکن است با دستور apt-get مواجه شوید. apt نسخه جدیدتر و سادهشدهی آن است و استفاده از آن توصیه میشود.
مدیریت سرویسها و نرمافزارها مستقیماً با امنیت سرور در ارتباط است، همانطور که مدیریت کاربران و دسترسیهای آنها نیز چنین است.
۷. مدیریت کاربران و دسترسیها: چه کسی کلید را دارد؟
مدیریت دقیق کاربران و تعیین سطوح دسترسی برای هرکدام، یکی از پایههای اصلی امنیت سرور است. در لینوکس، کاربر root (یا superuser) بالاترین سطح دسترسی را دارد و میتواند هر کاری را در سیستم انجام دهد. برای جلوگیری از خطرات احتمالی، به جای ورود مستقیم با کاربر root، از دستور sudo برای اجرای دستورات با اختیارات مدیریتی استفاده میشود.
sudo: این دستور به کاربران مجاز اجازه میدهد تا یک دستور خاص را با دسترسیrootاجرا کنند.
دستورات اصلی مدیریت کاربران
useradd: برای ایجاد یک کاربر جدید.passwd: برای تنظیم یا تغییر رمز عبور یک کاربر.usermod: برای تغییر مشخصات یک کاربر موجود. یک کاربرد رایج، افزودن کاربر به یک گروه است. برای مثال، برای دادن دسترسیsudoبه کاربر جدید، او را به گروهsudoاضافه میکنیم:userdel: برای حذف یک کاربر.
دستورات اصلی مدیریت دسترسیها
chown(Change Owner): مالکیت یک فایل یا دایرکتوری را به کاربر یا گروه مشخصی تغییر میدهد.chmod(Change Mode): مجوزهای دسترسی به یک فایل یا دایرکتوری را تغییر میدهد. دسترسیها شامل خواندن (r=4)، نوشتن (w=2) و اجرا (x=1) برای سه دسته: مالک فایل (Owner)، گروه (Group) و دیگران (Others) است.- این اعداد برای هر دسته با هم جمع میشوند. برای مثال، در دستور
chmod 755 script.sh:- 7 برای مالک است:
4 (خواندن) + 2 (نوشتن) + 1 (اجرا) = 7(rwx) - 5 برای گروه است:
4 (خواندن) + 1 (اجرا) = 5(r-x) - 5 برای دیگران است:
4 (خواندن) + 1 (اجرا) = 5(r-x) بنابراین، مالک دسترسی کامل دارد، در حالی که گروه و دیگران فقط میتوانند فایل را بخوانند و اجرا کنند.
- 7 برای مالک است:
دانستن این دستورات ضروری است، اما برای کارآمدی واقعی، باید چند ترفند حرفهای را نیز یاد بگیرید.
۸. نکات حرفهای برای افزایش بهرهوری
دانستن دستورات کافی نیست؛ استفاده هوشمندانه از قابلیتهای شِل (Shell) میتواند سرعت کار شما را به شدت افزایش دهد و از تایپهای تکراری جلوگیری کند.
history: لیستی از دستوراتی که قبلاً اجرا کردهاید را نمایش میدهد. این قابلیت برای پیدا کردن یک دستور پیچیده که قبلاً استفاده کردهاید، عالی است.- جستجوی تاریخچه با
Ctrl + R: این یکی از مفیدترین میانبرهای خط فرمان است. کافی استCtrl + Rرا فشار دهید و شروع به تایپ بخشی از دستوری کنید که به دنبال آن هستید. شِل به صورت پویا آخرین دستور منطبق را به شما نشان میدهد. این میانبر به تنهایی روش کار شما در خط فرمان را متحول خواهد کرد! alias: با این دستور میتوانید برای دستورات طولانی و پرکاربرد، نام مستعار یا میانبر بسازید. این میانبرها را در فایل تنظیمات شِل خود (مانند~/.bashrc) قرار دهید تا دائمی شوند.man(Manual): بهترین دوست شما در خط فرمان. اگر در مورد کاربرد یا گزینههای یک دستور شک دارید، ازmanبرای مشاهده راهنمای کامل آن استفاده کنید.
جمعبندی
در این مقاله، مجموعهای از دستورات پایه و ضروری لینوکس را در دستههای مختلف پوشش دادیم: از ناوبری و مدیریت فایلها گرفته تا پردازش متن، نظارت بر سیستم، مدیریت سرویسها و کنترل کاربران. این دستورات، ابزارهای بنیادی برای هر کسی هستند که با سرورهای لینوکس سروکار دارد.
به یاد داشته باشید که تسلط بر خط فرمان یک مهارت تدریجی است و با تمرین و تکرار به دست میآید. این راهنما نقطه شروعی عالی برای مدیریت مؤثر و با اعتماد به نفس سرورهای شماست. هر زمان که در مورد دستوری سوال داشتید، از man استفاده کنید و از آزمایش کردن در یک محیط امن نترسید. با هر دستوری که یاد میگیرید، کنترل شما بر سیستم عمیقتر و کارایی شما بیشتر خواهد شد.