پرش به محتویات

۵.۱ کار با خط فرمان

پوسته ی خط فرمان

پوسته ی خط فرمان یا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
وبرای دسترسی به راهنمای دستوراتexternal ؛ از دستور man استفاده می‌شود.
  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 جا به جایی کاراکتر زیر مکان نما با کاراکتر قبلی