خط فرمان لینوکس

ترجمه فارسی LinuxCommand.org

خط فرمان لینوکس

ترجمه فارسی LinuxCommand.org

ویرایش کردن اسکریپت‌ها

ویرایش کردن اسکریپت‌هایی که از قبل دارید

قبل از اینکه شما به نوشتن اسکریپت‌های جدید بپردازید، من می‌خواهم نشان بدهم که شما از قبل برخی اسکریپت‌های خودتان را دارید. این اسکریپت‌ها هنگامی که حساب کاربری شما ایجاد شده در دایرکتوری خانگی شما قرار داده شده‌اند، و برای پیکربندی نشست‌های شما در کامپیوتر به کار می‌روند. شما می‌توانید این اسکریپت‌ها را برای تغییر امور ویرایش نمایید.

در این درس، ما به دو تا از این اسکریپت‌ها نگاه خواهیم نمود و چند مفهوم جدیدِ مهم را در باره پوسته یاد می‌گیریم.

در جریان یک نشستِ شما، سیستم تعدادی از داده‌ها در باره نشست را در حافظه‌اش نگهداری می‌کند. این اطلاعات محیط نامیده می‌شوند. محیط شامل مواردی از قبیل path شما، نام کاربری شما، نام فایلی که پست شما به آنجا تحویل می‌شود، و بسیاری دیگر است. شما می‌توانید فهرست کاملی از آنچه را که در محیط شما هست با فرمان set مشاهده کنید.

دو نوع از فرمانها اغلب در محیط پیوست می‌شوند. آنها مستعارها و توابع پوسته هستند.

محیط چگونه برقرار می‌شود؟

وقتی شما به سیستم متصل می‌شوید، برنامه bash شروع می‌شود، و یک سری از اسکریپت‌های پیکربندی را که startup files(فایلهای راه‌اندازی) نامیده می‌شوند، می‌خواند. این فایلها محیط پیش فرض مشترک میان تمام کاربران را تعیین می‌کنند. این مورد با فایلهای راه‌اندازی دیگری در دایرکتوری خانگی شما که محیط شخصی شما را تعیین می‌کنند تعقیب می‌گردد. ترتیب دقیق آن به نوع نشست پوسته‌ای که شروع می‌شود بستگی دارد. دو نوع وجود دارد: یک نشست پوسته login و یک نشست پوسته بدون login. نشست پوسته login آن نشستی است که در آن اعلان ورود نام کاربری و کلمه عبور به ما داده می‌شود، به عنوان مثال، موقعی که ما یک نشست از کنسول مجازی را شروع می‌کنیم. یک نشست پوسته غیر login به طور نمونه موقعی رخ می‌‌دهد که ما در رابط گرافیکی کاربر یک نشست ترمینال راه‌اندازی می‌کنیم.

پوسته‌های لاگین یک یا چند فایل راه‌اندازی را به طوری که در ادامه نشان داده شده است می‌خوانند:

فایل محتویات
/etc/profile یک اسکریپت پیکربندی سراسری که بر تمام کاربران اِعمال می‌گردد.
~/.bash_profile یک فایل راه‌اندازی شخصی کاربر. می‌تواند برای گسترش یا باطل کردن تنظیمات اسکریپت پیکربندی سراسری استفاده شود.
~/.bash_login اگر ‎~/.bash_profile‎ پیدا نشود، bash تلاش می‌کند این اسکریپت را بخواند.
~/.profile در صورتیکه نه فایل ‎~/.bash_profile‎ پیدا شود و نه فایل ‎~/.bash_login آنوقت bash سعی در خواندن این فایل می‌کند. این پیش فرضِ توزیع‌های مبتنی بر دبیان از قبیل اوبونتو است.

نشست‌های پوسته بدون لاگین فایلهای راه‌اندازی زیر را می‌خوانند:

فایل محتویات
/etc/bash.bashrc یک اسکریپت پیکربندی سراسری که تمام کاربران را شامل می‌شود.
~/.bashrc یک فایل راه‌اندازی شخصی کاربر. می‌تواند برای برتری یافتن یا توسعه تنظیمات اسکریپت پیکربندی سراسری به کار برود.

علاوه بر خواندن فایلهای راه‌اندازی فوق، پوسته‌های بدون لاگین از پردازش پدر خود که معمولاً یک پوسته لاگین است محیط را به ارث می‌برند.

نگاهی به سیستم خود بیاندازید و ببینید کدام یک از این فایلهای راه‌اندازی را دارید. به خاطر بیاورید- چون نام اکثر فایلهای فهرست شده در بالا با یک نقطه شروع می‌شوند(به معنای اینکه آنها مخفی هستند)، لازم خواهد بود شما موقع استفاده از ls گزینه ‎-a‎ را به کار ببرید.

فایل ‎~/.bashrc‎ از نقطه نظر کاربر عادی احتمالاً مهمترین فایل راه‌اندازی است، چون تقریباً همیشه خوانده می‌شود. پوسته‌های بدون لاگین به طور پیش فرض آن را می‌خوانند و فایلهای راه‌اندازی اکثر پوسته‌های لاگین طوری نوشته می‌شوند که فایل ‎~/.bashrc‎ را هم بخوانند.

اگر به داخل یک فایل ‎.bash_profile‎ نمونه نگاه کنیم (این نمونه از یک سیستم ‎CentOS 4‎ اخذ گردیده است)، موردی مشابه این به نظر می‌رسد:

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

سطرهایی که با یک “#” شروع می‌شوند توضیحات هستند و به وسیله پوسته خوانده نمی‌شوند. اینها برای خوانایی انسانی در آنجا هستند. اولین مورد جالب در سطر چهارم با کد پایین رخ می‌دهد:

if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

این یک فرمان مرکب if نامیده می‌شود، که ما در یک درس دیگر به طور کامل پوشش خواهیم داد، اما در حال حاضر به این جمله ترجمه می‌کنیم:

در صورتیکه فایل ‎"~/.bashrc"‎ موجود است، آنوقت فایل ‎"~/.bashrc"‎ را بخوان.

می‌توانیم مشاهده کنیم که چگونگی دریافت کردن محتویات فایل ‎.bashrc‎ توسط پوسته لاگین، در این خُرده کُد است. مورد بعدی که فایل راه‌انداز ما انجام می‌دهد، تنظیم نمودن متغیر PATH برای اضافه کردن دایرکتوری ‎~/bin‎ به این متغیر است.

آخر از همه، داریم:  ‎export PATH

فرمان export به پوسته می‌گوید محتویات متغیر PATH را برای پردازشهای فرزند این پوسته قابل دسترس نماید.

مستعارها

یک مستعار روش آسانی برای تولید فرمان جدیدی است که به عنوان یک کوته‌نوشت برای فرمان بلندتر عمل می‌کند. دارای ترکیب دستوری به شکل زیر است:

alias name=value

که در آن name نام فرمان جدید است و value متنی است برای آنکه هرگاه name در خط فرمان وارد گردد، اجرا بشود.

بیایید یک مستعار به نام ‎"l"‎ ایجاد کنیم و آن را یک مخفف برای فرمان ‎"ls-l"‎ نماییم. اطمینان یابید که در دایرکتوری خانگی خود هستید. ویرایشگر متن مورد علاقه خود را به کار برده، و فایل ‎.bashrc‎ را باز کنید و این سطر را به انتهای فایل اضافه کنید:

alias l='ls -l'

با افزودن فرمان alias به فایل، ما یک فرمان جدید به نام ‎"l"‎ ایجاد نموده‌ایم که ‎"ls -l"‎ را انجام خواهد داد. برای امتحان فرمان جدیدتان، نشست ترمینال خود را بسته و نشست جدیدی آغاز کنید. با این کار فایل ‎.bashrc دوباره بارگیری می‌شود. با استفاده از این شگرد می‌توانید هر تعداد فرمان سفارشی برای خودتان ایجاد کنید. این هم یک مورد دیگر برای آزمایش کردن توسط شما:

alias today='date +"%A, %B %-d, %Y"'

این مستعار یک فرمان جدید به نام ‎"today"‎ ایجاد می‌کند که تاریخ امروز را با قالب‌بندی دلپذیر نمایش می‌دهد.

در ضمن، فرمان alias یک فرمان داخلی(builtin) دیگر پوسته است. شما می‌توانید مستعارهای خود را به طور مستقیم در اعلان فرمان ایجاد کنید، اما آنها فقط در خلال نشست فعلی پوسته اثر گذار خواهند بود. برای مثال:

[me@linuxbox me]$ alias l='ls -l'

توابع پوسته

مستعارها برای فرمانهای ساده مناسب هستند، اما در صورتیکه بخواهید مورد پیچیده‌تری ایجاد نمایید، شما باید توابع پوسته را آزمایش کنید. توابع پوسته را می‌توان به عنوان «اسکریپت داخل اسکریپت» یا اسکریپت‌های فرعی کوچک در نظر گرفت. اجازه بدهید یک مورد را امتحان کنیم. دوباره فایل ‎.bashrc‎ را با ویرایشگر متن خود باز کنید و مستعار ‎"today"‎ را با کد زیر تعویض کنید:

today() {
    echo -n "Today's date is: "
    date +"%A, %B %-d, %Y"
}

باور کنید یا نکنید، ‎()‎ نیز یک builtin پوسته است، و همچون alias، شما می‌توانید توابع پوسته را به طور مستقیم در اعلان فرمان وارد کنید.

[me@linuxbox me]$ today() {
> echo -n "Today's date is: "
> date +"%A, %B %-d, %Y"
> }
[me@linuxbox me]$

اگرچه، باز هم مانند alias، توابع پوسته‌ای که به طور مستقیم در خط فرمان تعریف شده‌اند تنها در زمان پوسته جاری دوام دارند.