آشنایی با Bash بخش اول

لینوکس شامل بسیاری دستور است.خط فرمان لینوکس و دستور های قابلیت کنترل کامل بر سیستم را دارند. دستور ها را می توان در قالب نام های مستعار یا Alias ها و توابع یا Function ها  و همچنین اسکریپت ها گشترش داد و آنها را به گونه دیگری استفاده کرد.در این پست و چندین پست دیگر شما را با ویژگی های Bash آشنا می کنیم.

Bash یکی از چندین پوسته لینوکسیست که دستورها را اجرا می کند. وظیف پوسته یا Shell دریافت دستور ها و تفسیر آنها توسط هسته سیستم عامل می باشد یعنی پوسته واسطی میان کاربر و سیستم عامل است.ویژگی هایی که در زیر بیان می شوند میان تمام پوسته های لینوکسی یکسان هستند :

دستور های لینوکس به کوچکی و بزرگی حساس هستند.یعنی در لینوکس دستور ls قابل قبول است ولی اگر LS یا Ls را بنویسید این قابل قبول نیست.

هر دستور از سه بخش بصورت زیر برای اجرا شدن تشکیل می شود :

cmd -options Arg

که در آن cmd خو دستور و options ها که ابتدای آنها یک – می اید و یا یک فاصله از خود دستور جدا می شوند امکانات بیشتر یا جزئیاتی بیششتر از دستور را نشان می دهند. مانند اینکه دستور ls بطور عادی فقط فایل های غیر پنهان  را لیست می کند اما با option یا گزینه –a فایل های مخفی را نیز نشان می دهد.گزینه های به دو صورت هستند: یا خلاصه شده هستند مانند a در مثال دستور ls  یا بصورت قابل درک یا Human Readable برای کاربر که در مثال دستور ls گزینه a مخفف all می باشد که برای کاربر راحتر درک می شود.فرمت گزینه های قابل درک بصورت زیر است یعنی بجای یک علامت – دوتا – جلوی option می آید

cmd –options Arg

Arg مخفف آرگومان است که با توجه به خود دستور می تواند نام و یا مسیر یک فایل یا دایرکتوری یا حتی یک دستور دیگر و یا همچنین یک متغر باشد.بطور مثال می میخواهیم تمام محتویات یک دایرکتوری به مسیر /home/amirnami/mydir را نشان دهیم. در این مثال مسیر /home/amirnami/mydir بعنوان آرگومان دستور ls خواهد بود.

لینوکس چگونه دستور ها را اجرا می کند ؟

نخست باید پست های مدیریت کاربران در لینوکس بخش اول و همچنین آشنایی با کاربر ریشه در لینوکس را بخوانید تا با متغیر PATH آشنا شوید.

وقتی شما دستوری را در خط فرمان اجرا می کنید ابتدا لینوکس محتوای متغیر PATH مربوط به کاربری که دستور را اجرا کرده را بررسی می کند. این متغیر برای هر کاربر دارای مقدار خاص همان کاربر است و ممکن است برای چندین کاربر یا برای همگی یکی باشد اما محتوای آن چیزی جز مسیر های منتهی به دایرکتوری هایی که شامل دستور ها هستند نمی باشد.هر دایرکتوری با یک علامت : از دیگری جدا شده است.یک نمونه از خروجی آن برای کاربر root در خط اول و یک نمونه از خروجی برای یک کاربر معمولی در به نام amirnami در خط دوم از دو خط زیر آمده است.

پس از بررسی این متغیر لینوکس می فهمد که آیا دستوری که اجرا کردید در مسیر هایی که در متغیر PATH شما وجود دارد یا نه ؟ اگر وجود نداست یک پیغام Command not found می دهد و این به آن معنی نیست که اصلن این دستور وجود ندارد یا نصب نیست بلکه در مسیر های متغیر PATH شما وجود ندارد.اما شاید هم اصلن بطور کلی هنوز این دستور در سیسستم نصب نشده باشد که شاید با نصب در جایی که شامل یکی از مسیر های PATH شما نصب شود و پس از نصب شما بتوانید آنرا اجرا کنید. اما دلیل دیگری هم برای عدم اجرا وجود دارد و آن نداشتن مجوز اجرایی است.(مطالعه پست مجوز های لینوکسی)

چگونه در لینوکس دستور ها را پیدا کنیم ؟

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

دستور apropos :

این دستور یک پایگاه داده به نام whatis را بر اساس یک کلمه که شما بعنوان آرگومان به آن می دهید جستجو می کند و بر اساس آن کلمه خروجی هایی مطابق با آنرا روی خروجی چاپ می کند.فرض کنید دستور زیر را برای یافتن هر آنچه در سیستم برای کلمه user وجود دارد اجرا کنید. دستور apropos پایگاه داده را جستجو کرده و هر آنچه که درباره user باشد را نشان می دهد.

apropos user

منظور از نوع دستور ها این است که اگر ما فرض کنیم هر چیزی که برای اجرا در خط فرمان می نویسیم و سپس Enter را می زنیم به چند دسته تقسیم می شوند :

دستور ها : دستور ها برنامه های باینری هستند که بطور معمول در مسیر هایی مانند /usr/bin و یا /usr/sbin  وجود دارند. دستور ها به دو دسته Built-in یا درونی Bash و غیر Built-in تفسیم می شوند. دستور های Built-in توسط خود Bash کنترل می شوند و وقتی شما آنها را اجرا می کنید والد یا پدید آورنده آنها خود دستور یا فرایند bash خواهد بود.

نام های مستعار یا Alias ها : برخی از دستور ها را که می خواهید اجرا کنید باید آنرا به همرا option های زیادی بنویسید و سپس اجرا کنید که هر بار که اجرا می کنید کسل کننده و خسته کننده هستند. نام های مستعار این کار را برای شما ساده کرده اند. با نام های مستعا شما به آن دستور و گزینه هایش که چندین حرف را شامل مش وند فقط یک کلمه کوچک اختصاص می دهید تا از این پس انجام آن دستور و گزینه هایش سلده شود.در پست های بعدی درباره Alias ها صحبت می کنم.

توابع یا Function ها : شما چندین دستور و دیگر بخش ها را در غالب یک نام گرداوری می کنید که این دستور ها و دیگر اجزا با یکدیگر در ارتباط هستند و همگی برای انجام یک کار خاص یا بهتر بگویم یک خروجی باهم کار می کنند.

اسکریپت ها : اسکریپت یک فایل است که چندین دستور یا در غالب یک تابع یا حتی بدون یک تابع باهم کار می کنند. دستور ها از بالا به پایین نوشته شده و به ترتیب بالا به پایین اجرا می شوند.

دستور compgen :

این دستور با دستور قبلی متفاوت است. اساس کار این دستور این است که دستور ها را بر اساس نوعشان روی خروجی بیاورد.

Option  های آن بصورت زیر هستند :

c- : با این option تمام دستور های درون سیستم نشان داده خواهد شد.

compgen -c | less

a- : تمام نام های مستعا را نشان می دهد.

k- : کلمات کلید یا Keyword ها را نشان می دهد.

b- : تمام دستور های built-in را نشان می دهد.

A- : تمام توابع را نشان می دهد.

compgen -A function

حالت کلی آن بصورت زیر است که تمام انواع را نشان خواهد داد.

compgen  -abckA function | less

یک ترفند ساده :

شماچه تعداد دستور را می توانید در سیستم اجرا کنید :

compgen -c | wc -l