0

Bash چیست ؟ ( بش) +آموزش دستورات 0 تا 100 توضیحات/ 2022

Bash چیست ؟ ( بش) +آموزش دستورات 0 تا 100 توضیحات/ 2022
بازدید 157


Bash چیست بَش (Bash) یک پوسته یونیکس است که توسط برایان فاکس آزادانه برای پروژه گنو نوشته شده است تا جایگزین پوسته Bourne شود. این پوسته برای اولین بار در سال ۱۹۸۹ معرفی شد و به عنوان یک پوسته ورودی در بسیاری از نسخه های لینوکس و MacAvaS، Solaris و Baseless توزیع شده است. نسخه ای از بَش نیز در ویندوز ۱۰ موجود است.

Bash چیست یک پردازشگر فرمان است که معمولاً در یک پنجره ترمینال اجرا می شود. این پوسته مانند تمام پوسته های یونیکس می تواند دستورات خود را از یک فایل دریافت کند. همچنین کلمات اساسی، قواعد دستور زبان و سایر ویژگی های ضروری را از پوسته Bourne کپی می کند. سایر ویژگی ها، مانند تاریخچه، از پوسته C و ذرت پوسته کپی شده است. بَش با استاندارد PASIX مطابقت دارد.

بَش نام انگلیسی Bourne-again shell است که بازی با کلمات و ابهام است و هم به پوسته Bourne و هم به کلمه born again اشاره دارد که به معنای “دوباره متولد شده” است.

یک حفره امنیتی در پوسته بَش از نسخه ۱.۰۳ (اوت ۱۹۸۹) که به “شوک پوسته” معروف است، در سپتامبر ۲۰۱۴ کشف شد و به سرعت باعث ایجاد یک سری حملات سایبری شد. پس از یافتن سایت باگ، تغییرات به‌روزرسانی سریع انجام شد و مشکل برطرف شد.

 Bash چیست

تاریخ bash چیست ؟

تاریخچه bash چیست برایان فاکس در ۱۰ ژانویه ۱۹۸۸ توسط ریچارد استالمن استخدام شد. استالمن و بنیاد نرم‌افزار آزاد، پروژه بَش را آنقدر مهم و استراتژیک می‌دانستند که خودشان بودجه و بودجه پروژه را تأمین می‌کردند.

فاکس نسخه ۰.۹۹ را به عنوان نسخه آزمایشی در ژوئن ۱۹۸۹ منتشر کرد و تا زمانی که توسط بنیاد نرم افزار آزاد اصلاح شد، نگهدارنده اصلی پوسته بود. او بعداً مسئولیت یکی دیگر از توسعه دهندگان اولیه بَش، Chat Rami را بر عهده گرفت.

از آن زمان، بَش به محبوب ترین پوسته در بین کاربران یونیکس تبدیل شده است، تا حد زیادی محبوب ترین. اکنون به عنوان پوسته پیش فرض در بسیاری از نسخه های لینوکس و سیستم عامل مک در دسترس است.

در Bash سه مفهوم مهم داریم که به صورت زیر می باشد

  1. Stdin:منظور از آن Standard input یا ورودی استاندارد می باشد که در فایل تشریحی مقدار ۰ به آن تخصیص می یابد که به آن STDIN نیز گفته میشود. هر سیستم یونیکس یا لینوکس مقدار پیش فرض ورودی را از STDIN میخواند.
  2. stdout: منظور از آن Standard Output خروجی استانداردی است که مقدار ۱ به آن در فایل توصیفی اختصاص داده می شود که STDOUT نیز نامیده می شود. هر سیستم یونیکس یا لینوکس مقدار خروجی استاندارد پیش فرض را به STDOUT می نویسد.
  3. stderr: منظور از آن Standard Error یا خطای استاندارد که به آن مقدار ۲ در فایل توصیفی اختصاص داده می شود که STDERR نیز نامیده می شود. هر سیستم یونیکس یا لینوکس پیام خطای پیش بارگذاری را در STDERR می نویسد.

بعداً با مفاهیم و مثال های بهتر توضیح خواهیم داد که این سه حالت برای چیست.

نکته ای که هنگام کار با هر قطعه ای باید بدانید تفاوت بین یوزر معمولی و روت است. وقتی خط فرمان شما $ است، به این معنی است که با کاربری غیر از root وارد شده اید، اما زمانی که # باشد، به این معنی است که با یک کاربر root و بالاترین سطح دسترسی وارد شده اید. به شما دستور داده شده است

user@nextadmin:~$ 
root@nextadmin:~#

برای این که بدانید با چه یوزری لاگین کرده اید می توانید از دستور whoami استفاده کنید.

بش یک فایل دارد به ادرس /etc/profile که تمام تنظیمات اولیه در آن قرار دارد و هر کاربر هم در صفحه home خود یک profile./~ دارد که بعد اجاری تنظیمات اولیه خود بش تنظیمات کاربر اجرا می شود.

همچنین فایلی به اسم bash_profile./~ نیز داریم که آن هم به بش اضافه می شود. یک فایل هم به نام bash_logout./~ داریم که در زمان logout اجرا می شود

آموزش دستورات Bash

دستور echo: یک دستور ساده است که هر ورودی بهش بدید همان را برای شما نمایش می دهد مانند زیر.

$ echo Hello lpic
Hello lpic

نکته اینجاست که اگر از # در متن استفاده کنید که یک کاراکتر خاص است و برای نوشتن توضیحات (comments) استفاده می شود و در دستور شما اجرا نمی شود.

$ echo Hello lpic #just a simple hi
Hello lpic

کارکترها و کلید های خاص در bash

Tab ↹ دو کاربرد اصلی دارد، اگر چند کاراکتر اول دستورمان را بنویسیم و یک تب را بزنیم، دستور را برایمان کامل می‌کند و اگر دوبار آن را بزنیم، تمام دستوراتی را که ممکن است در ادامه داشته باشیم نمایش می‌دهد.

نمونه‌ای از تکمیل خط فرمان در بش | کار در خط فرمان

↵ Enter: شما هر زمان در خط فرمان ↵ Enter کنید به خط جدید منتقل می شوید.

در بش و مخصوصا برنامه نویسی ما یکسری کاراکتر خاص داریم که بعضی از آن ها را در زیر آورده ایم:

ESCAPE SEQUENCE FUNCTION
a Alert (bell)
b Backspace
c Suppress trailing newline (same function as -n option)
f Form feed (clear the screen on a video display)
n New line
r Carriage return
t Horizontal tab

هر جا که بخواهیم شخصیت خاصی مثل & یا; برای استفاده از اینکه منظور ما یک عملگر خاص نیست، باید آن را پشت سر بگذاریم.

$ echo but this 
is another 
usage

دقیقا برابر است با:

$ echo but this is another usage

لیست کاراکترهای خاص در Bash

کاراکتر کاربرد
# برای کامنت‌گذاری استفاده می‌شود به غیر از مواقعی که به‌صورت # و یا !# در ابتدای یک اسکریپت استفاده شود.
در انتهای یک خط استفاده می‌شود تا ادامهٔ اسکریپت به خط بعد را اعلام کند.
; هر دستوری که پس از این علامت قرار گیرد، به‌عنوان یک دستور جدید تلقی خواهد شد. یعنی دستور اول را اجرا کن و سپس دستور دوم را اجرا کن
$ هر چیزی که پس از این علامت قرار گیرد (مثلاً sname$) به‌عنوان یک متغیر شناخته می‌شود.
| یعنی خروجی دستور اول را به ورودی دستور دوم بده
&& یعنی دستور اول را اجرا کن اگر بدون خطا اجرا شد دستور دوم را هم اجرا کن
|| یعنی اگر دستور اول اجرا نشد برود دستور دوم را اجرا کند نکته ای که دارد این است که اگر دستور اول اجرا شد دیگر دستور دوم را اجرا نمی کند
$ echo line 1;echo line 2; echo line 3
line 1
line 2
line 3

$ echo line 1&&echo line 2&&echo line 3
line 1
line 2
line 3

$ echo line 1||echo line 2; echo line 3
line 1
line 3

خروج از bash

Ctrl+d یک نشانگر EOF ارسال کنید که خط فرمان فعلی را ببندد (معادل دستور exit). (این فقط زمانی اتفاق می افتد که هیچ متنی در خط فعلی وجود نداشته باشد.) عملاً از این راه خارج می شویم.

دستور exec نیز باعث می شود که ابتدا دستور ما اجرا شود و پس از اجرا، bash را می بندد. برای مثال در زیر دستور ls bash پس از اجرا بسته می شود.

متغیرهای محیطی در بش

NAME FUNCTION
USER یوزر لاگین شده را نمایش می دهد
UID ای دی یوزر لاگین شده را نمایش می دهد
HOME مسیر خانه کاربر
PWD جایی که هستین را نمایش می دهد
SHELL نام شل که لاگین کردید
$ پروسس ای دی کاربر لاگین شده را نمایش میدهد
PPID پروسس ای دی بالا دستی را نمایش می دهد
? اخرین دستور با چی خارج شده است، هر چیزی بجز صفر یعنی اشتباه خارج شده است
$ echo $USER $UID
user 1000
$SHELL $HOME $PWD
/bin/bash /home/user /home/user/lpic
$ (exit 0);echo $?;(exit 4);echo $?
۰
۴
$ echo $$ $PPID
۲۵۵۹ ۲۵۵۸

برای اضافه کردن یک متغیر به بش به صورت زیر عمل می کنیم:

user@funlife:~$ MYMOOD=happy
user@funlife:~$ echo I am $MYMOOD
I am happy

برای این که باقی ابزار ها هم به متغیر ما دسترسی داشته باشند باید از دستور export استفاده کنیم:

user@funlife:~$ export MYMOOD=happy

دستور env تمام متغیرهای موجود رو نمایش می دهد.

دستور unset هم متغیر تعریف شده را پاک می کند.

با دستور set می توانید کمی تغییرات در شل ایجاد کرد، برای مثال اگر –بزنیم تنظیمات فعلی رو نمایش می دهد که himBH است.

$ echo $-
himBH

در حالت پیشفرض اگر یک متغیر الکی بنویسیم بدون جواب نمایش داده می شود:

$ echo $VAR1

ولی اگه set -u استفاده کنیم به ما در صورت نبود یک متغیر پیغام نمایش می دهد:

$ set -u;echo $-
himuBH
$ echo $VAR1
-bash: VAR1: unbound variable
$ VAR1=v1;echo $VAR1
v1
$ unset VAR1;echo $VAR1
-bash: VAR1: unbound variable

میانبرهای صفحه‌کلید در BASH

Tab : تکمیل خودکار از جایی که مکان‌نما وجود دارد.

Ctrl+a : انتقال مکان‌نما به ابتدای خط (معادل کلید Home)

Ctrl+e : انتقال مکان‌نما به انتهای خط (معادل کلید End)

Ctrl+p: فراخوانی فرمان قبلی (معادل کلید )

Ctrl+n: فراخوانی فرمان بعدی (معادل کلید )

Ctrl+r: جستجوی آخرین فرمانی که دارای کارکتر (های) مشخصی باشد. زدن دوبارهٔ این کلید در هنگام جستجو، به فرمان قبلی‌تر رجوع می‌کند.

Ctrl+o: اجرای فرمانی که در جستجو یافته شد.

Ctrl+l: پاک کردن محتویات صفحه‌نمایش (معادل فرمان clear).

Ctrl+u: پاک کردن محتویاتی از خط که قبل از مکان‌نما وجود دارند و کپی کردن آن‌ها درون بریده‌دان.

Ctrl+k: پاک کردن محتویاتی از خط که بعد از مکان‌نما وجود دارند و کپی کردن آن‌ها درون بریده‌دان.

Ctrl+w: پاک کردن کلمهٔ قبل از مکان‌نما و کپی کردن آن درون بریده‌دان.

Ctrl+y: چسباندن محتویات بریده‌دان از جایی که مکان‌نما وجود دارد.

Ctrl+d: ارسال یک نشانگر EOF که باعث بسته شدن خط فرمان فعلی می‌شود (معادل دستور exit). (تنها در زمانی این اتفاق می‌افتد که متنی در خط فعلی موجود نباشد)

Ctrl+c: ارسال یک سیگنال از نوع SIGINT به پروسهٔ فعلی، که باعث پایان اجرا و بسته شدن آن می‌شود.

Ctrl+z: ارسال یک سیگنال از نوع SIGTSTP به پروسهٔ فعلی، به باعث به تعلیق درآمدن آن می‌شود؛ که برای برگشت دادن آن می‌توان از دستور fg process-name-or-job-id استفاده کرد.

Ctrl+x Ctrl+e: ویرایش خط فعلی در ادیتوری که توسط متغیر EDITOR$ تعریف شده‌است.

Alt+f: حرکت به جلو به اندازهٔ یک واژه.

Alt+b: حرکت به عقب به اندازهٔ یک واژه.

Alt+Del: برش کلمهٔ واقع در قبل از مکان‌نما

Alt+d: برش کلمهٔ واقع در بعد از مکان‌نما

Alt+u: تبدیل تمام حروف کوچک به بزرگ، واقع در بعد از مکان‌نما تا انتهای کلمهٔ فعلی

Alt+l: تبدیل تمام حروف بزرگ به کوچک، واقع در بعد از مکان‌نما تا انتهای کلمهٔ فعلی

Alt+c: تبدیل حرف واقع در زیر مکان‌نما از کوچک به بزرگ و رفتن به انتهای کلمهٔ فعلی

Alt+r: انصراف تغییرات و برگرداندن محتویات خط فعلی به همان شکلی که در تاریخچهٔ خط فرمان موجود بود.

۱
۲
۳
۴
۵
میانگین امتیازات ۵ از ۵
از مجموع ۱ رای

نظرات کاربران

  •  چنانچه دیدگاهی توهین آمیز باشد و متوجه نویسندگان و سایر کاربران باشد تایید نخواهد شد.
  •  چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.
  •  چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.
  •  چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.
  • چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بیشتر بخوانید