بررسی خط فرمان سیستم عامل لینوکس (Prompt)
در این مطلب به
بررسی خط فرمان در سیستم عامل لینوکس می پردازیم.
Prompt عبارتی است که در زمان انتظار سیستم، برای دریافت دستور از کاربر به نمایش در می آید.
تغییر در شکل خط فرمان با استفاده از متغیرهای محیطی PS1,PS2,PS3,PS4 انجام می گیرد. اکنون به بررسی این چهار متغیر می پردازیم.[masih@linux etc]$
- masih = نام کاربر
- @ = علامتی برای جدا نمودن نام کاربر و نام ماشین
- linux = نام ماشین
- etc =دایرکتوری جاری
- $ = $ علامت
در مثال زیر با اجرای ناقص دستور echo، خط فرمان متغیر PS2 به نمایش در می آید.
$ echo “Learn
>
>Linux
>”
Learn
linux
$
دستور echo منتظر دریافت علامت ” میباشد. در این حالت هر بار زدن کلید Enter سبب نمایش خط فرمان متغیر PS2 می شود.
در مثال زیر نحوه فراخوانده شدن متغیر PS3 را می بینیم.
$ cat mycity.sh
select city in Tehran Abadan Noor Exit
do
case $city in
Tehran) echo "Tehran";;
Abadan) echo "Abadan";;
Noor) echo "Noor";;
Exit) exit;;
esac
done
$ ./mycity.sh
1) Tehran
2) Abadan
3) Noor
4) Exit
#? 2
Abadan
#? 4
$
& متغیر PS4 : برای Trace دستورات استفاده میشود. دستورات، قبل از اجرا توسط Shell به نمایش در می آیند. مقدار متغیر PS4 در حالت پیشفرض، علامت + می باشد.
در مثال زیر نحوه فراخوانده شدن متغیر PS4 نشان داده شده است.
$ set -x
$ cd /etc
+ cd /etc
$
هر کاربر میتواند متغیرهای محیطی PS1,PS2,PS3,PS4 را مطابق با سلیقه ی خود مقداردهی نماید.
تنظیم خط فرمان اصلی در Shell هایbash ،ksh,sh با تغییر متغیر PS1 و برای Shell هایcsh ،tcsh,zsh با تغییر متغیر prompt، انجام می گیرد.
& با دستور زیر میتوان خط فرمان را به عبارت دلخواه تغییر داد.
export PS1="(LearnLinux) -> "
(LearnLinux)->
نکته : با اجرای دستور بالا شکل خط فرمان تغییر خواهد کرد، اما باید توجه داشت که این تغییر دائمی نبوده و فقط در این Session قابل مشاهده است. برای پایداری این تغییر باید این دستور در یکی از فایلهای Bash Login نظیر bashrc و bash_profile قرار داد:
vi ~/.bashrc
export PS1="(LearnLinux) -> "
با یکی از روش های زیر این تغییر اعمال می شود.
1. ایجاد Bash جدید ( بستن Session فعلی و ایجاد Session جدید )
2. اجرای یکی از دستورات زیر
source ~/.bashrc Or . ~/.bashrc
(LearnLinux) ->
& برای تنظیم Prompt، میتوان از کاراکترهای ویژه ی در جدول زیر نیز استفاده نمود.
شکل خط فرمان |
نحوه استفاده |
عملکرد |
Value |
masih |
PS1=" \u" |
نمایش نام کاربر |
u\ |
linux |
PS1="\h" |
نمایش نام ماشین |
h\ |
etc |
PS1="\W" |
نمایش نام دایرکتوری جاری |
W\ |
etc/sysconfig/ |
PS1="\w" |
نمایش مسیر |
w\ |
Wed Mar 06 |
PS1="\d" |
نمایش تاریخ با فرمت (تاریخ روز نام ماه نام روز) |
d\ |
19:48:36 |
PS1="\t" |
نمایش ساعت با فرمت 24 ساعته (ثانیه:دقیقه:ساعت ) |
t\ |
07:48:36 |
PS1="\T" |
نمایش ساعت با فرمت 12 ساعته (ثانیه:دقیقه:ساعت ) |
T\ |
19:48 |
PS1="\A" |
نمایش ساعت با فرمت 24 ساعته (دقیقه:ساعت ) |
A\ |
07:48 PM |
PS1="\@" |
نمایش ساعت با فرمت 12 ساعته و نمایش AM/PM |
@\ |
$ or # |
PS1="\$" |
برای کاربران عادی کاراکتر $ و برای کاربر root کاراکتر # می باشد |
$\ |
0 |
PS1="\j" |
نمایش تعداد Job های در حای اجرا |
j\ |
317 |
PS1="\!" |
نمایش شماره Job بعدی در History |
!\ |
- |
PS1="\n" |
رفتن به سطر بعد |
n\ |
& برای دیدن مقدار فعلی متغیر PS1 از دستور زیر استفاده می کنیم.
echo $PS1
[\u@\h \W]\$
& تغییر خط فرمان با استفاده از کاراکترهای ویژه :
تعریف متغیر PS1 بصورت زیر سبب نمایش نام کاربر به همراه کاراکتر < در خط فرمان می شود.
vi ~/.bashrc
export PS1=" \u > "
masih >
تعریف متغیر PS1 بصورت زیر سبب نمایش عبارت مورد نظر و آدرس مکان فعلی می شود.
PS1=" Address = \w > "
Address = /home/masih/Desktop >
نوع دیگری از تنظیم خط فرمان با استفاده از کاراکترهای ویژه را در زیر می بینیم.
PS1='\d \t Job=\j \W \u \n > '
Thu Mar 07 13:47:13 Job=0 tmp masih
>
& تغییر خط فرمان با استفاده از سایر متغیرهای سیستمی :
نمایش مدت زمان در دسترس بودن یک Shell برحسب ثانیه برای یک کاربر
PS1=’\u Session Is Active $SECONDS Seconds Ago > '
masih Session Is Active 1023 Seconds Ago >
نکته : با هر بار نمایش خط فرمان، زمان Update خواهد شد.
& تغییر خط فرمان با استفاده از خروجی دستورات :
نمایش تعداد محتویات دایرکتوری فعلی در خط فرمان
PS1='Number Of Contents \w = $( ls | wc -l ) > '
Number Of Contents /etc = 267 >
نمایش ساختار ماشین در خط فرمان
PS1='$(arch) > '
x86_64 >
به روش زیر نیز میتوان از خروجی یک دستور بعنوان ورودی خط فرمان استفاده نمود.
PS1='`uptime`\n \u $ '
15:04:02 up 1:32, 2 users, load average: 0.35, 0.40, 0.37
masih $
& افزودن رنگ و Style به خط فرمان :
خط فرمان در حالت پیشفرض با رنگ سفید و بدون حالت می باشد. کاربر میتواند از رنگها در تنظیم خط فرمان استفاده نماید. بطور مثال برای کاربران مبتدی، تنظیم یک رنگ خاص در زمان دسترسی به کاربر root توصیه می شود.
برای تنظیم رنگ و حالت خط فرمان میتوان از روش زیر استفاده کرد.
عبارت ابتدایی = \[\e[شماره رنگ متن;شماره حالت;شماره رنگ پس زمینهm\]
عبارت انتهایی = \[\e[0m\]
اعداد زیر برای تنظیم رنگ متن، در خط فرمان استفاده می شود.
رنگ متن |
رنگ پس زمینه |
حالت متن |
30 = سیاه |
40 = سیاه |
0 = Normal |
31 = قرمز |
41 = قرمز |
1 = Bold |
32 = سبز |
42 = سبز |
2 = Italic |
33 = زرد |
43 = زرد |
3 = Dark |
34 = آبی |
44 = آبی |
4 = Underline |
35 = بنفش |
45 = بنفش |
|
36 = فیروزه ایی |
46 = فیروزه ایی |
|
37 = سفید |
47 = سفید |
|
بصورت زیر می توان رنگ Prompt را به قرمز تبدیل کرد.
PS1='\[\e[31m\]\t > \[\e[0m\]'
14:05:33 >
نکته : در صورت عدم استفاده از عبارت انتهایی در تعریف متغیر، سبب تغییر رنگ خط فرمان، دستورات ورودی بهمراه خروجی شان می شود.
PS1='\[\e[31m\]\t > '
مثال دیگری از تغییر رنگ خط فرمان
PS1='\[\e[44;1;37m\]\u \[\e[0m\]\[\e[4;31m\] \t\[\e[0m\] $ '
masih 14:56:21 $
با دستور بالا نام کاربر با رنگ سفید در پس زمینه آبی بصورت Bold و زمان سیستم به رنگ قرمز و بصورت Underline و در انتها علامت $ قرار می گیرد.
& تغییر خط فرمان با استفاده از حالت شرطی (if else) :
با تعیین مقدار زیر برای متغیر PS1، شکل خط فرمان وابسته به وضعیت اجرای دستور کاربر می شود. بدین معنی که با اجرای صحیح دستور، در ابتدای Prompt شکلک خندان به رنگ سبز به نمایش در مییابد و در صورت وجود خطا نوع شکلک تغییر می کند.
PS1='$(if [[ $? == 0 ]]; then echo "\[\e[32m\]:)"; else echo "\[\e[31m\]:("; fi)\[\e[0m\] \u \w $ '
:) masih ~ $ cd /etc
:) masih /etc $
:) masih /etc $ llll
-bash: llll: command not found
:( masih /etc $
در زیر نوع دیگری از تعریف متغیر PS1 را با حالت شرطی می بینیم.
PS1="\`if [ \$? = 0 ]; then echo \[\e[32m\]✔\[\e[0m\]; else echo \[\e[31m\]✘\[\e[0m\]; fi\` \u \w $ "
✔ isastar ~ $ cd /etc
✔ masih /etc $
✔ masih /etc $ llll
-bash: llll: command not found
✘ masih /etc $
& چند مثال از تغییر خط فرمان سیستم :
* نمایش میزان حافظه آزاد برحسب مگابایت
vi ~/.bashrc
free_mem()
{
awk '/^Mem/ {print $4}' <(free -m)
}
export PS1='Free Mem : $(free_mem) MB > '
Free Mem : 3062 MB >
or
vi ~/.bashrc
pp="\$(awk '/^Mem/ {print \$4}' <(free -m))"
export PS1='Free Mem : '$pp' MB > '
Free Mem : 3062 >
* نمایش میزان روشن بودن سیستم
vi ~/.bashrc
export PS1='`uptime -p | cut -f 1-2 -d ","` $ '
up 1 day, 7 hours $
* نمایش تعداد کاربران فعال سیستم
vi ~/.bashrc
export PS1='`uptime | cut -f 3 -d ","` $ '
2 users $
* نمایش پارامتر SID در سیستمهایی که بانک Oracle بر روی آنها قرار دارد. (برای کاربر Oracle)
vi ~/.bashrc
export PS1='\u@\h \W SID : $ORACLE_SID $ '
oracle@Linux ~ SID : mokhader $
* نمایش تعداد فایل و فولدر مکان فعلی و حجم کل آنها
vi ~/.bashrc
export PS1="\[\e[32;1m\]\W \$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\]) > \[\e[0m\]"
etc 267 files, 2.0Mb) >
* نمایش آدرس IP سیستم
vi ~/.bashrc
export PS1='$(hostname -I) > '
10.47.52.25 >