۵.۱ کار با خط فرمان
پوسته ی خط فرمان¶
پوسته ی خط فرمان یاshell یک برنامه ساده بین کاربر و سیستم عامل است که محیطی را فراهم میکند تا کاربر با زدن دستورات بتواند با کرنل ارتباط برقرار کند.
پوسته معولا جز سیستم عامل محسوب نمیشود ولی کانال ارتباطی کاربر و سیستم عامل است.
پوسته به دو صورت خط فرمانCLI و گرافیکی GUI وجود دارد. معروف ترین پوسته های خط فرمان عبارتند از:
پوسته Bourne-Again shell یاbash
پوسته Korn shellیا ksh
پوسته C shellیاcsh
پوسته Z shell یا zsh
پوسته bash در سال 1987 توسط Brian Fox نگارش شد و از سال 1990 توسط Chet Ramey مدیریت می شود.نگارنده bash سعی کرده ویژگی های برتر پوسته های Born,C,Korn را در این پوسته بوجود آورد.
پوسته bash متداولترین پوسته در سیستم عامل لینوکس و همچنین Mac OSXاست.
هر کدام از این خطوط فرمان امکانات خاصی را برای کاربر فراهم میکنند که البته bash اکثراً پیشفرض است.
پوسته خط فرمان شامل ویژگیهای شاخص زیر است:
خط فرمان به حروف کوچک و بزرگ حساس است.(casesensitive)
نام هر فایل بیش از 255 کاراکتر نمیتواند باشد.
در صورتی که اسم فایلی با . شروع شود؛مخفی میشود . جدول زیر اسمی کاراکتر هایی که نباید در نام گذاری فایلها از آنها استفاده کرد را نشان میدهد .
کاراکتر | پیشنهاد |
/ | ممنوع |
\ | بهتر است استفاده نشود یا (scape) شود. |
- | در اول اسم فایل و پس از فاصله استفاده نشود. |
[] {} | بهتر است استفاده نشود یا(scape) شود. |
? * | بهتر است استفاده نشود یا (scape) شود. |
' " | بهتر است استفاده نشود یا (scape) شود. |
انواع دستورات در خط فرمان¶
دستورات در خط فرمان به سه دسته تقسیم میشوند که براساس ترتیب اجرا به صورت زیر هستند:
alias :دستورات مجازی هستند که با تعریف آنها دستورات واقعی اجرا میشوند. درواقع شبیه shortcut عمل میکنند .(نرم افزاری برای اجرای آنها نیست .)
دستورات داخلی یا Builtin command : دستوراتی هستند که در داخل محیط bash قرار دارند و خود bashآنها را اجرا میکند .(شامل نرمافزار خارجی نیستند .)
دستورات خارجی یا External command : دستورات خارج از bas}که با فراخوانی نرم افزارهای خارجی اجرا میشوند.
برای فهمیدن نوع هریک از دستورات ؛ از دستور زیر استفاده میشود .
Type command
مثال:
$ type ls
در صورتی که خروجی این دستور به صورت مسیر باشد دستور از نوعlexternal است و جز bashنیست.
برای دسترسی به راهنمای دستورات Builtin ؛ از دستور helpاستفاده میشود .
Help command
Man command
دستور man¶
نحوه ی استفاده از این دستور به صورت زیر است:
man [options] [section] name
گزینه های options این دستور شامل موارد زیر است :
-a : با این گزینه در صورتی که دستور در چندین section راهنما داشته باشد پس از خروج از هریک؛ راهنمای بعدی باز میشود.
-k: با این گزینه یک کلمه را در راهنما جستوجو میکند.
-w: با این گزینه مسیر راهنما مشخص میشود. بخشهای sections این دستور شامل نه بخش مختلف است که البته یک دستور ممکن است در چند بخش دارای راهنما باشد.
بخش | توضیحات |
۱ | برنامههای اجرا شونده یا shell commands |
۲ | دستوراتی که توسط سیستم فراخوانی می شوند |
۳ | دستوراتی که در خلال اجرای کتابخانهها اجرا میشوند |
۴ | فایلهای خاصی که معمولاً در مسیر dev قرار دارند |
۵ | ساختار فایلها مانند: eg /etc/passwd |
۶ | بازیها |
۷ | دستورات مختلفی شامل ساختار بسته ها |
۸ | دستورات مخصوص کاربر ریشه |
۹ | دستورات معمولی کرنل |
$ man -wa ip
/usr/share/man/man8/ip.8.gz
/usr/share/man/man7/ip.7.gz
حال برای فراخوانی تنها یک بخش خاص به صورت زیر عمل میشود:
$ man 8 ip
تعیین اولویت های دستور man از طریق یک متغیر به نام MANSECT انجام میشود که ترتریب اولویت ها با : از هم جدا میشوند.
مقدار پیشفرض این متغیر به صورت زیر است:
$ echo $MANSECT
1:8:2:3:4:5:6:7:9:tcl:n:l:p:o
مثالی برای جست وجو در یک موضوع خاص با استفاده از این دستور:
$ man -k player
smplayer(1) -The best GUI fronted for mplayer
ffplay(1) -FFplay media player
gmplayer(1) -movie player
gnash(1) -GNU Flash (SWF) Player
gtk-gnash(1) -GNU Flash (SWF) Player
totem(1) -GNOME desktop movie player based on GStreamer
vlc(1) -The VLC media player
دستور info نیز برای دستورات خارجی استفاده میشود که تفاوت آن با دستور man این است که چون دستور info ساختاری صفحه به صفحه دارد دستورات طولانی در info قرار دارند.
کار بر روی خط فرمان¶
پوسته خط فرمان یک محیط تعاملی است به این معنا که قابلیت برنامه نویسی و خودکارسازی را برای کاربر فراهم می کند.
متغیرها¶
به مثال زیر توجه کنید:
$ lpi=test
مقدار متغیر lpi را برابر با test قرار میدهد.
برای دیدن محتوای هر متغیر میتوان از دستور echo استفاده کرد:
$ echo $lpi
که علامت $ در ابتدای نام متغیر؛معرف محتویات آن متغیر است.
متغیرهای محیطی (Enviroment variable)¶
متغیر PATH : مسیر دستورات خارجی را مشخص میکند.
$ echo $PATH
/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
در صورتی که بخواهیم به مسیرهای بالا مسیری اضافه کنیم؛به صورت زیر عمل میکنیم:
$ echo $PATH:/home/user/bin
به یاد داشته باشید مسیر فایلهای اجرایی شامل چهار مورد زیر است:
/bin
/sbin
/usr/bin
/usr/sbin
متغیر PS1 :شکل prompt خط فرمان را مشخص میکند.
$ echo $PS1
\u@\h:\w\$
که کارکتر u به معنی نمایش نام کاربر؛h به معنی نام کامپیوتر؛ w نمایش شاخه جاری و $ زمانی که کاربر ریشه (root) باشد علامت# و در غیر این صورت علامت $ را نمایش میدهد.
در جدول زیر لیست چند کارکتر ویژه که همراه با این متغیر استفاده میشوند نمایش داده شده است :
کاراکتر ویژه | توضیحات |
w \ | مسیر شاخه جاری |
W \ | نام شاخه جاری |
$ \ | کاربر ریشه را با # و مابقی را با $ نشان میدهد |
! \ | شماره دستور در این پوشه را نشان میدهد |
t \ | زمان را با فرمتHH:MM:SS در 24 ساعت نشان میدهد |
T \ | زمان را با فرمتHH:MM:SS در12 ساعت نشان میدهد |
n \ | خط بعدی |
d \ | نمایش تاریخ |
متغیر PS2 : مربوط به زمانی است که bash ورودی ها را در چند خط دریافت کند.
برای در دسترس بودن یک متغیر از دستور export استفاده میشود.
Export variabale
پس از اجرای این دستور ؛ این متغیر یک متغییر محیطی است و در برنامههای اجرا شده وsubshell ها نیز قابل دسترسی میباشد .
دستور set و unset¶
با زدن دستور set در خط فرمان ؛لیست تمامی متغیر های محیطی قابل رویت میباشد. همچنین از دستور unset برای پاک کردن متغیر ها استفاده میشود.
ساختار دستورات در لینوکس¶
هر دستور در لینوکس شامل چهاربخش زیر است:
خود دستور(داخلی یا خارجی)
گزینه های (option) آن دستور که معمولاً با - یا-- شروع میشوند.(البته میتواند بدون آنها نیز باشد.)
ورودی های (argument) دستور
کلید Enter
برای اجرای پشت سر هم چند دستور از علامت “;” و برای اجرای یک دستور در چندین خط از علامت “< “ استفاده میشود.
$ ls ; ps
$ echo “This is test for multiple-line
> command interactively
>”
This is test for multiple-line
command interactively
تاریخچه دستورات¶
تاریخچه با دستور history قابل رویت است.که درواقع در فایل ~/.bash_history نگهداری میشود.
تعداد آن در یک متغیر محیطی به نام HISTSIZE تعیین میشود. که با گزینه -c کاملاً پاک میشود.
در جدول زیر چند نمونه از کاراکترهای این دستور آورده شده اند:
دستور | توضیحات |
!! | تکرار آخرین دستور |
n! | دستور شماره n در history را اجرا میکند |
!-n | شماره دستور جاری منهای n را اجرا میکند |
String! | آخرین دستوری که با string شروع میشود |
String?! | آخرین دستوری که \lr{string} در آن استفاده شده است |
string1^string2 | در آخرین دستور string1 را با string2 جایگزین میکند . |
Arrow key | حرکت بین دستورات |
ctrl+r | جستوجو در history |
ctrl+s | جستوجو از اول به آخر history (زمانی جواب میدهد که stty -ixon اجرا شده باشد)جستوجو در history |
دستورات مورد استفاده در خط فرمان¶
دستور | توضیحات |
ctrl+l | پاک کردن صفحه |
ctrl+k | cut کردن از محل مکان نما تا آخر خط |
Ctrl+ u | cut کردن از محل مکان نما تا ابتدای خط |
ctrl+y | چسباندن یا همان paste |
_ +ctrl | undo |
ctrl+e | رفتن به انتهای دستور |
ctrl+a | رفتن به ابتدای دستور |
ctrl+d | cut کردن کلمه به سمت انتهای خط |
ctrl+w | cut کردن کلمه به سمت ابتدای خط |
ctrl+t | جا به جایی کاراکتر زیر مکان نما با کاراکتر قبلی |