در محیط خط فرمان (Command Line Interface یا CLI)، هر دستوری که اجرا میکنید از یک الگوی مشخص پیروی میکند. درک این ساختار، اولین قدم برای کار با هر سیستمعامل یونیکسمبنا (لینوکس، macOS) یا حتی ویندوز (از طریق PowerShell یا CMD) است.
ساختار کلی یک دستور به این شکل است:
command [options] [arguments]
-
command: نام برنامه یا دستوری که میخواهید اجرا کنید (اجباری).
-
options (یا flags): نحوهٔ عملکرد دستور را تغییر میدهند (اختیاری).
-
arguments (یا parameters): هدف یا دادهٔ اصلی که دستور روی آن کار میکند را مشخص میکنند (اغلب اختیاری، اما در بسیاری از دستورات ضروری است).
مثال ساده
ls -l /home/user
| بخش | نوع | توضیح |
|---|---|---|
ls | Command | خود دستور که برای «لیست گرفتن از محتویات دایرکتوری» استفاده میشود. |
-l | Option / Flag | یک پرچم که به ls میگوید خروجی را با جزئیات کامل (Long format) نمایش بده. |
/home/user | Argument | مسیری که میخواهیم محتویات آن را ببینیم. (اگر این آرگومان را ندهیم، ls بهطور پیشفرض روی دایرکتوری فعلی کار میکند.) |
Command (دستور)
Command هستهٔ اصلی خط فرمان است. این نام یک برنامهٔ اجرایی (Executable) یا یک دستور توکار در خودِ شل (Built-in) است که به سیستم میگوید «چه کاری را میخواهم انجام دهم».
انواع دستورات از نظر منبع
-
دستورات اجرایی (External Commands)
برنامههایی هستند که در یکی از مسیرهای متغیر محیطی$PATHسیستم نصب شدهاند. با تایپ نام آنها، سیستم فایل مربوطه را پیدا کرده و اجرا میکند.which ls # خروجی: /usr/bin/ls
-
دستورات توکار (Built-in Commands)
این دستورات مستقیماً در خودِ برنامهٔ شل (مثل Bash) ساخته شدهاند و برای اجرا به یک فایل جداگانه در سیستم نیاز ندارند. معمولاً برای مدیریت خودِ شل استفاده میشوند.type cd # خروجی: cd is a shell builtin
-
Alias (نام مستعار)
کاربران یا سیستم میتوانند برای یک دستور طولانی، یک نام کوتاهتر (Alias) تعریف کنند. این نامها قبل از اجرا توسط شل به دستور اصلی تبدیل میشوند.alias ll='ls -alF' ll # این معادل اجرای دستور ls -alF است
Option (گزینه) و Flag (پرچم)
این دو واژه معمولاً بهجای یکدیگر استفاده میشوند، اما تفاوت ظریفی با هم دارند. وظیفهٔ آنها تغییر چگونگی انجام کار توسط دستور اصلی است.
۱. Flag (پرچم)
پرچمها معمولاً بهصورت سوئیچهای خاموش/روشن (Boolean) عمل میکنند؛ یعنی یا فعال هستند یا نیستند.
-
فرم کوتاه (Short Form): با یک خط تیره (
-) و یک حرف شروع میشوند.ls -l # نمایش جزئیات ls -R # نمایش زیرشاخهها بهصورت بازگشتی
-
ترکیب پرچمها: میتوانید چند پرچم تکحرفی را پشت سر هم بنویسید.
ls -l -R -t # (مرتبسازی بر اساس زمان) # معادل: ls -lRt # ترکیب همه در یک -lRt
-
فرم بلند (Long Form): با دو خط تیره (
--) و یک کلمه کامل شروع میشوند. خوانایی بیشتری دارند.ls --all # نمایش فایلهای مخفی (معادل -a)
۲. Option (گزینه)
آپشنها علاوه بر حالت خاموش/روشن، میتوانند یک مقدار (Value) نیز دریافت کنند. به عبارت دیگر، گزینهها پارامتری هستند که به دستور میگویند با چه «مقداری» کار کند.
مثال معروف، گزینهٔ -p در دستور docker run برای تعیین پورت است (به بخش «چگونه گزینهها مقدار میگیرند» در ادامه مراجعه کنید). یا در دستور find:
find / -name "myfile.txt" # -name یک گزینه است که مقدار "myfile.txt" را میگیرد
چگونه گزینهها مقدار میگیرند؟
-
با فاصله: (رایجترین روش در فرم بلند و برخی فرمهای کوتاه)
docker run -p 8080:80 nginx # گزینه -p با مقدار 8080:80
-
با علامت مساوی (=): (بسیار رایج در فرم بلند)
git log --since="2024-01-01" # گزینه --since با مقدار تاریخ
-
چسبیده به خود گزینه (بدون فاصله): (در فرم کوتاه بسیار رایج است)
mysql -uroot -p123456 # -u به معنای username با مقدار root # -p به معنای password با مقدار 123456
Argument (آرگومان)
آرگومانها (یا پارامترها) هدف اصلی عملیات دستور هستند. در حالی که گزینهها میگویند «چگونه انجام بده»، آرگومانها میگویند «روی چه چیزی انجام بده».
انواع آرگومانها
-
فایل یا مسیر (File/Directory Path):
بیشتر آرگومانها، نام یک فایل یا مسیر یک دایرکتوری هستند.cat myfile.txt # آرگومان: myfile.txt rm -rf /tmp/cache/ # آرگومان: /tmp/cache/
-
متن یا رشته (String):
ورودیهایی که دادهی متنی هستند، مثل جستجو یا تغییر نام.echo "Hello World" # آرگومان: "Hello World" grep "error" log.txt # دو آرگومان: رشتهی "error" و فایل log.txt
-
آرگومانهای متعدد (Multiple Arguments):
بسیاری از دستورات از چندین آرگومان پشت سر هم پشتیبانی میکنند.cp source.txt destination.txt # دو آرگومان: مبدا و مقصد mkdir dir1 dir2 dir3 # سه آرگومان برای ساخت سه پوشه
جمعبندی نهایی و نکات پیشرفته
ترتیب قرارگیری
اگرچه خیلی از دستورات انعطافپذیر هستند، اما قاعدهٔ کلی این است:
command [options] [arguments]
با این حال، بعضی دستورات (مثل find) اجازه میدهند آرگومانها در جای خاصی بیایند یا بعضی (مثل ssh) گزینهها را فقط قبل از آرگومان اصلی قبول میکنند. اما در ۹۰٪ موارد، قاعدهٔ بالا صادق است.
استاندارد POSIX
در سیستمهای یونیکس، یک استاندارد به نام POSIX وجود دارد که میگوید:
-
گزینههای تکحرفی (Short) با
-شروع شوند و اگر مقدار داشته باشند، میتوانند با فاصله یا بدون فاصله بیایند. -
گزینههای بلند (Long) با
--شروع شوند و اگر مقدار داشته باشند، ترجیحاً با=مقداردهی شوند. -
برای پایان دادن به لیست گزینهها و جلوگیری از اشتباه گرفتن یک آرگومان با گزینه، از
--(دو خط تیره تنها) استفاده میشود.
مثال کاربردی از --: اگر فایلی به نام -f دارید و میخواهید محتوای آن را با cat ببینید، دستور cat -f باعث اشتباه میشود چون cat فکر میکند -f یک گزینه است. برای رفع این مشکل:
cat -- -f # -- به cat میگوید که دیگر گزینهای وجود ندارد و بقیه آرگومانها هستند
تفاوت خلاصه
| مفهوم | نقش | آیا مقدار میگیرد؟ | مثال |
|---|---|---|---|
| Command | چه کاری انجام بدهم | خیر (خودش مجری است) | git، docker، ls |
| Flag | فعال/غیرفعال کردن یک ویژگی | خیر | -l، -R، --all |
| Option | تعیین یک پارامتر با مقدار مشخص | بله | -p 8080، --name=myapp |
| Argument | هدف/موضوع عملیات | خیر (خودش داده است) | myfile.txt، /home/user |