Bash (Bourne Again Shell)

botond küldte be 2018. 07. 11., sze – 19:53 időpontban

A Bash egy Unix shell és parancsnyelv, amelyet Brian Fox írt a GNU Projekt részeként a korábban használt Bourne shell lecserélésére. 1989-ben jelent meg először, majd a legtöbb Linux disztribúció, a Solaris 11 és az Apple macOS (korábban OS X) alapértelmezett parancsértelmezője lett. Továbbá a Windows 10 számára is készült verzió belőle.

A Bash egy parancsfeldolgozó, amely általában egy szöveges ablakban fut, ahol a felhasználó parancsok begépelésével hajthat végre különböző műveleteket (CLI). A Bash fájlokból is végre tudja hajtani a parancsokat, ezeket a fájlokat shell script-eknek hívják. Mint minden Unix shell, támogatja a fájlnév kiegészítést, csővezetékeket, az itt dokumentumokat, parancs helyettesítéseket, változókat, vezérlési szerkezeteket, feltételek ellenőrzését és a ciklusokat. A nyelv kulcsszavait, szintaktikáját, és más alapfunkcióit a Bourne Shell-ből örökölte. Más funkciókat, például az előzmények kezelését a csh-ból és a ksh-ból kapta. A Bash egy POSIX-kompatibilis shell, de számos kiterjesztéssel rendelkezik.

A shell neve egy mozaikszó, a Bourne Again Shell, amely a Bourne shell újraszületését (born again) jelenti.

2014 szeptemberében egy biztonsági rést fedeztek fel az 1.03-as verziójában (1989. augusztus), ami sok támadást eredményezett az interneten. A hibákat hamarosan kijavították, de nem frissítették minden számítógépen.

 

Futási módok

A körülményektől függően a Bash futtatható többféle módban.

Interaktív login mód

Interaktív login módról akkor beszélünk, amikor valaki felhasználónévvel és jelszóval (vagy nyilvános kulccsal) jelentkezik be a shellbe és interakcióba lép vele, tehát parancsokat ad a shellnek, programokat futtat, stb. Belépéskor a következő sorrendben hajtódnak végre a scriptek:

  1. /etc/profile (ha létezik)
  2. ~/.bash_profile (ha ez nincs, akkor a következő:)
  3. ~/.bash_login (ha ez nincs, akkor a következő:)
  4. ~/.profile

Tehát lefut az első, valamint az utolsó három közül a sorrendben az elsőt futtatja le, amelyik létezik. Ezekben a fájlokban kerülnek beállításra a felhasználó különböző környezeti változói (PATH, stb), a PROMPT és a többi olyan dolog, amit egyszer kell csak lefuttatni, amikor bejelentkezik a felhasználó a rendszerbe. Ilyenek lehetnek például a rendszerrel kapcsolatos állapotüzenetek, stb, amiknek nem kell például minden egyes terminál ablak nyitásnál megjelenniük.

Amikor kilép a felhasználó, akkor pedig lefut a ~/.bash_logout fájl, amennyiben létezik.

Interaktív (nem login) mód

Ebben a módban akkor indul el a Bash, amikor például már be vagyunk jelentkezve egy Linux-os számítógépen az asztali környezetbe, és innen nyitunk a menüből egy terminált. Ilyenkor nem futnak le a fenti scriptek, hanem a következők kerülnek végrehajtásra minden egyes terminálablak nyitásakor:

  1. /etc/bash.bashrc (ha létezik)
  2. ~/.bashrc (ha létezik)

Ezekben a fájlokban lehet beállítani például a környezeti változókat, a prompt-ot, alias-okat, és minden olyan dolgot, amire minden terminál ablak nyitásnál szükségünk lehet.

Nem interaktív (nem login) mód

Ebben a módban például az automatizált folyamatokból indul a Bash (például a cron-ból indul egy shell script), amikor nem feltételezhető, hogy kérhet-e a bemenetről (billentyűzet) adatokat, vagy valaki egyáltalán látni fogja-e a folyamat kimenetét. Ilyenkor a Bash kiolvassa a "BASH_ENV" környezeti változót, amennyiben talál benne értéket, fájlnévként értelmezve megpróbálja lefuttatni azt. Tehát, úgy viselkedik ilyenkor, mintha a következő parancs kerülne lefuttatásra:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

Azonban ilyenkor a PATH környezeti változó nem kerül felhasználásra a fájlnév megkereséséhez.

Itt még érdemes megjegyezni, hogyha egy nem interaktív shell-t használunk a "--login" opcióval, akkor a Bash megpróbálja lefuttatni a login shell indítófájljait. Ez akkor hasznos, ha például az automatikusan indított shell scriptekben is szeretnénk használni a login shell-eknél beállított környezeti változókat.

Nem interaktív (login) mód

Ez a működési mód olyankor jöhet létre, amikor például az ssh parancsnak bemenetként további parancsokat is megadunk. Ilyenkor a megadott parancsok lefutnak a távoli kiszolgálón egy nem interaktív, de login shellben, majd kilépéskor visszaadja azoknak a kimenetét. Ebben az esetben az ssh szabványos bemenete nem a billentyűzet, hanem a paraméterként, vagy akár csővezetékben megadott karakterlánc.

Ebben a módban nem futnak le például az alábbi indítófájlok:

  • ~/.bashrc: Illetve ez ha elindul, az elejében van egy ellenőrzés, ami nem interaktív mód esetén kilép a scriptből.
  • ~/.profile