Movatterモバイル変換


[0]ホーム

URL:


Přeskočit na obsah
WikipedieWikipedie: Otevřená encyklopedie
Hledání

Bash

Z Wikipedie, otevřené encyklopedie
Bash
Logo
Screenshot Bashe na OS Gentoo Linux
Screenshot Bashe na OSGentoo Linux
VývojářProjekt GNU aChet Ramey
Aktuální verze5.2.37 (23. září 2024)
Operační systémGNU/Linux
BSD
macOS
Microsoft Windows
GNU/Hurd
UN*X
cross-platform
Platformax86_64
i686
Vyvíjeno vC
Typ softwarusvobodný software
LicenceGNU General Public License, version 3.0 or later
Webwww.gnu.org/software/bash/
Některá data mohou pocházet zdatové položky.

Bash je vinformatice jeden zunixových shellů, kterýinterpretujepříkazový řádek. Bash naprogramovalBrian Fox pro projektGNU. Název jeakronym proBourneagainshell, což poukazuje na jeho základ v dříve nejpoužívanějším unixovém shelluBourne shell (sh). Někdy se tento název také uvádí jako slovní hříčka odkazující na křesťanské znovuzrození (anglickybornagain) nebo jako stlučení (anglickybashing) všech výhod sh,csh aksh.

Historie

[editovat |editovat zdroj]

Brian Fox začal pracovat na Bashi 10. ledna 1988 poté, co začal býtRichard Stallman nespokojený s pomalým postupem jeho hlavního vývojáře shellu. Stallman a celá jeho nadaceFree Software Foundation (FSF) považovaly volně šiřitelný bash, který dokáže zpracovat již existující skripty prosh, za tak klíčový a důležitý pro dokončení jejich volně šiřitelného systému postaveného na BSD a GNU kódu, že se tento projekt stal jedním z mála, které FSF financovala z vlastních zdrojů a Brian Fox se stal vedoucím tohoto projektu a zaměstnancem FSF. První betaverzi číslo .99 vydal Brian Fox 7. června 1989 a zůstal v pozici hlavního správce projektu Bash až do první poloviny roku 1994, kdy byl z FSF propuštěn a odpovědnost za projekt převzal jeho bývalý spolupracovník Chet Ramey.

Vlastnosti

[editovat |editovat zdroj]

Bash jePOSIX shell s řadou rozšíření. Je koncipován pro operační systémy založené na projektuGNU a je možné ho spustit na většiněunixových operačních systémů. Je používán jako implicitní příkazový interpret v systémech postavených nalinuxovém jádře, stejně jako i vMac OS X nebo v systémuDarvin. Je možné ho použít i v systémuMicrosoft Windows za použití subsystému pro unixové aplikace (SUA), nebo emulace POSIX pomocí softwaruCygwin aMSYS. ProjektDJGPP jej pak umožňuje pustit i v systémuDOS.

Základ syntaxe příkazů v Bashi je převzat z původního Bourne shellu. Také převážná většina sh skriptů je v Bashi spustitelná bez jakékoliv modifikace kódu až na pár výjimek, které vznikají jinou interpretací méně používané syntaxe příkazů nebo jinou implementací těchto systémových příkazů. Bash navíc převzal nápady zKorn shellu (ksh) aC shellu (csh), jako jsou například editace jednotlivých řádků,historii příkazů, proměnné$RANDOM a$PPID a POSIXové dynamické vkládání příkazů pomocí syntaxe$(…). Při psaní syntaxe nám pak práci nejvíce ulehčí stisk klávesytabulátor, čímž Bashautomaticky doplní konec napsaného příkazu, cesty k souboru nebo proměnné, případně nám ukáže všechny možnosti doplnění.

Na rozdíl od Bourne shellu má Bash mnoho rozšíření i v syntaxi příkazů. Například dokáže provádět celočíselné operace bez volaní externích procesů. Za tímto účelem byla vytvořena syntaxe((…)) (pro příkaz) a$((…)) (pro proměnnou). Bash také zjednodušil přesměrování vstupů a výstupů tak, jak to v tradičním Bourn shellu nebylo možné. Například přesměrovánístandardního výstupu astandardního chybového výstupu v tu samou chvíli lze udělat operátorem&>.

Bash podporuje takéhere dokumenty stejně jako Bourne shell. Nicméně od verze 2.05b dokáže Bash přesměrovatstandardní vstup z „here-řetězce“ pomocí operátoru<<<.

Bash verze 3.0 podporujeregulární výrazy se syntaxí podobnouPerlu.

Bash verze 4.0 podporujeasociativní pole, která umožňují vytvářet náhradu za vícerozměrná pole:

declare-Aa# deklaruje asociativní pole 'a'i=1;j=2# inicializuje nějaké proměnné s hodnotamia[$i,$j]=5# asociuje hodnotu "5" s klíči "$i,$j" (neboli "1,2")echo${a[$i,$j]}# vypíše uložené hodnoty na klíči "$i,$j"

Expanze závorek

[editovat |editovat zdroj]

Expanze závorek (anglickybrace expansion, též záměna) je vlastnost zkopírovaná zC shellu, která generuje množinu možných kombinací. Výsledky nemusí být v pořadí, jak je uvedeno v příkladu:

echoa{p,c,d,b}e# ape ace ade abeecho{a,b,c}{d,e,f}# ad ae af bd be bf cd ce cf

Toto rozšíření by nemělo být použito v přenositelných skriptech, protože Bourne shell nevytvoří stejný výstup.

# Klasický shell nevytvoří stejný výstup, expanzi nepodporujeechoa{p,c,d,b}e# a{p,c,d,b}e

Pokud je expanze použita v kombinaci se zástupnými znaky, nejdříve se provede expanze a poté se teprve nahradí zástupné znaky. Výpis souborů s obrázky typu JPEG a PNG pak může vypadat následovně:

ls*.{jpg,jpeg,png}# rozšíří na *.jpg *.jpeg *.png - a poté,# se vyhledají soubory odpovídající zástupným znakům

Startovací skripty

[editovat |editovat zdroj]

Když Bash startuje, vykoná příkazy v několika různých skriptech.

Pokud je spuštěn za účelem přihlášení uživatele (login shell), nejdříve vykoná příkazy ze souboru/etc/profile, pokud takovýto soubor existuje. Následně vyhledá skriptovací soubory~/.bash_profile,~/.bash_login a~/.profile (v tomto pořadí) a pokud je soubor nalezen a je povoleno z něj číst, provede příslušný skript.

Pokud je uživatel ze shellu odhlášen, vyhledá se a provede se skript ze souboru~/.bash_logout, pokud existuje.

Pokud je Bash spuštěn bez přihlášení uživatele, vykonají se skripty ze souboru~/.bashrc. Vykonávání tohoto skriptu lze zamezit parametrem--norc při spouštění Bashe. Parametrem--rcfile soubor pak donutíme Bash vykonat námi zvolený skriptsoubor místo standardního~/.bashrc.

Některé verze Unixu obsahují speciálně upravené systémové skripty pro Bash, které schválně změní pořadí zmiňovaných skriptů tím, že spustí některé skripty dříve nebo nakombinují spouštění Bashe se startovacími skripty z jiných shellů různými způsoby.

Přenositelnost

[editovat |editovat zdroj]

Shellové skripty napsané podle specifikací Bashe (bashisms) nebudou spolehlivě fungovat na systému, který využívá Bourne shell nebo nějakou z jeho náhražek, pokud nebude na takovém systému nainstalován také Bash a daný skript nebude na začátku obsahovat speciální příkaz (shebang) obsahující#!/bin/bash místo standardního#!/bin/sh (vizFHS).

Klávesové zkratky

[editovat |editovat zdroj]

Bash pro editování příkazového řádku využívá knihovnuGNU Readline, která nabízí pro editaci představenou sadu klávesových zkratek inspirovaných textovým editorEmacs. Příkazemset -o vi lze přepnout na přednastavenou sadu klávesových zkratek inspirovanou editoremVi.

K tomu má Bash navíc své vlastní klávesové zkratky, například Ctrl-c odesílá signálSIGINT právě probíhající úloze, který způsobí její přerušení a zavření, Ctrl-d odešle příznak EOF (End Of File), který (pokud není tato funkce vypnuta v nastavení) zavře právě aktivní shell (stejně jako příkazexit), a Ctrl-z odešle signálSIGTSTP právě probíhající úloze, který úlohu pozastaví. Pro zrušení pozastavení slouží příkazfg ['jméno nebo id procesu'].

Sám Bash obvykle běží jako součást terminálového programu, který může některé klávesové zkratky odchytávat a zpracovávat a Bashi je nepředat.

Bezpečnostní chyba „Shellshock“

[editovat |editovat zdroj]

V září 2014 byla v Bashi objevena závažnázranitelnost (v registruCVE označená identifikátoremCVE-2014-6271[1]) později označovaná jakoShellshock.[2] Kvůli této chybě Bash nesprávně provádí libovolný kód, pokud je zvláštním způsobem zapsán vproměnných prostředí. Jelikož se Bash používá pro provádění skriptů ve velkém množství internetových služeb, jako jsou napříkladwebové servery, a některým skriptům (např.CGI skriptům) se uživatelský vstup předává právě ve formě proměnných prostředí, znamená tato chyba, že kdokoli, kdo je schopen na zranitelný stroj poslat nějaký požadavek, může na tomto stroji provádět libovolné příkazy. Tato chyba navíc v Bashi existovala zhruba od roku 1992.[2]

Po urychleném vydání bezpečnostníchaktualizací následovalo odhalení dalších souvisejících zranitelností vsyntaktickém analyzátoru v Bashi a jejich postupné záplatování.

Reference

[editovat |editovat zdroj]
  1. CVE-2014-6271 vregistru NIST a vv registru CVE
  2. abPatch Bash NOW: 'Shellshock' bug blasts OS X, Linux systems wide open, The Register, 24. 9. 2014

Externí odkazy

[editovat |editovat zdroj]
Projekt GNU
HistorieGNU's not a Unix
Licence
Software
Stoupenci
Ostatní
Autoritní dataEditovat na Wikidatech
Citováno z „https://cs.wikipedia.org/w/index.php?title=Bash&oldid=23864076
Kategorie:
Skryté kategorie:

[8]ページ先頭

©2009-2025 Movatter.jp