پوسته فرمان چیست؟
همانطور که رابطهای گرافیکی کاربر امکان انجام امور روزمره را بر روی سیستم فراهم میکنند، پوسته فرمان نیز نوعی رابط کاربری ولی به صورت متنی است. تمامی اموری را که به صورت گرافیکی و با استفاده از رابطهای گرافیکی کاربر قابل انجام هستند را میتوانید توسط پوسته فرمان نیز انجام دهید.
برنامه های شبیه ساز ترمینال و ترمینال های مجازی خود برنامه های دیگری موسوم به مفسرهای خط فرمان را اجرا می کنند.در حقیقت این مفسرها هستند که دستورات ورودی توسط کاربر را تفسیر کرده و برای اجرا به سیستم منتقل می کند.و راهی برای اجرا کردن برنامه ها،کار کردن با فایل ها،کامپایل کردن برنامه ها و مدیریت را ایجاد می کند.
مفسر فرمانی که به صورت پیش گزیده در گنو/لینوکس استفاده می شود،Bash نام دارد.نام آن گرفته از Bourne Again Shell است.
استفاده از پوسته فرمان چه مزایایی دارد؟
استفاده از پوسته فرمان دارای مزایای بسیاری است که برخی از آنها را در زیر بر میشماریم:
در زیر به دو نمونه پرسش که با استفاده از دستورات Bash پاسخ داده می شود می پردازیم:
چطور می توانیم جدیدترین و قدیمی ترین فایل در یک دایرکتوری را پیدا کنیم؟
راه حل اغوا کننده،استفاده از ls برای برونداد نام فایل های موجود، و اخذ اولین نتیجه می باشد.به طور کلی رویکرد ls نمی تواند مناسب باشد و به خاطر احتمال برخورد با کاراکترهای اختیاری(شامل سطر جدید) موجود در نام فایل ها،هرگز نباید در اسکریپت ها به کار برود. بنابراین به شیوه های دیگری برای سنجش فوق داده های (metadata) فایل، نیاز داریم.
Bash و همه نگارش های متنوع ksh می توانند زمانهای ویرایش(mtime) را با استفاده از عملگرهای -nt و -ot در عبارت شرطی دستور مرکب،مقایسه کنند:
# bash/ksh
unset –v latest
for file in "$dir"/*;do
[[ $file –nt $latest ]] && latest =$file
done
یا برای یافتن قدیمی ترین:
# bash/ksh
unset –v oldest
for file in "$dir"/*;do
[[ $file –nt $ oldest ]] && oldest =$file
done
به خاطر داشته باشید که mtime در مورد دایرکتوری ها،مربوط به آن شاخه ای است، که آخرین افزودن،حذف یا تغییر نام فایل در آن انجام شده است.
چطور می توانیم سطر شماره n از یک فایل را چاپ کنیم؟
یک روش این است که جهت چاپ سطر $n از فرمان"p" استفاده کنیم و به دنبال آن "q" را برای خروج از اسکریپت استفاده کنیم :
Sed –n "$n{p;q; }" "$file"
راهکار دیگر، به کاربردن AWKاست:
awk" NR= =$n{print;exit}"file
در Bash نگارش 4،با استفاده از دستور داخلی mapfile یک راهکار فشرده مختص-bash می تواند حاصل شود. با همراه کردن شناسه –n این فرمان،بیش از یک سطر می تواند در آرایهMAPFILE خوانده شود:
Mapfile –ts $((n-1)) –n 1<" $file"
echo "${MAPFILE[0]}"
احدی