Powłoka Bourne-Again

Powłoka Bourne-Again Opis tego obrazu, również skomentowany poniżej Przykład użycia Bash. Informacja
Twórca Brian Fox
Opracowany przez Projekt GNU
Pierwsza wersja 8 czerwca 1989
Ostatnia wersja 5,1 (7 grudnia 2020 r)
Kaucja git.savannah.gnu.org/cgit/bash.git
Napisane w VS
System operacyjny GNU / Linux , BSD ( d ) , macOS i Microsoft Windows
Środowisko X86_64 oraz i686 ( d )
Czytaj formaty Skrypt Bash ( d )
Języki Angielski i francuski
Rodzaj Interfejs systemu
Interpreter poleceń
Licencja GPL-3.0 + ( d )
Dokumentacja www.gnu.org/software/bash/manual
Stronie internetowej www.gnu.org/software/bash

Bash (akronim dla powłoki Bourne-Again ) to podobny do skryptu interpreter wiersza poleceń. Jest to uniksowa powłoka projektu GNU .

Opierając się na powłoki Bourne , Bash przynosi wiele usprawnień do tego, zwłaszcza z powłoki Korna i powłoki C . Bash jest wolnym oprogramowaniem udostępnianym na licencji GNU General Public License . Jest to domyślny interpreter w wielu wolnych Uniksach , zwłaszcza w systemach GNU / Linux . Była to również domyślna powłoka dla systemu Mac OS X , zastąpiona przez macOS Catalina (10.15) przez zsh . Został po raz pierwszy przeniesiony do Microsoft Windows przez projekt Cygwin , a ponieważ Windows 10 jest opcją samą w sobie, nazwaną Windows Subsystem for Linux systemu operacyjnego.

Historia

„Bourne again” to gra słów z muszli Bourne'a . Dosłownie Bourne ponownie oznacza „Bourne ponownie”, ale jest również wymawiane prawie jak urodzony na nowo , co oznacza „narodzony na nowo” lub „reinkarnowany”. Ponadto, bash oznacza po angielsku „mocno uderzać”.

Brian Fox opublikował w 1988 roku pierwszą implementację Bash w imieniu Free Software Foundation . Później przekazał go Chet Ramey. Oryginalny Bourne shell , z którego Bash został zainspirowany został napisany przez Stephena Bourne'a w 1977 roku wersja 3.0 z datamiLipiec 2004i wersja 4.0 Luty 2009.

Plik 24 września 2014, poważna luka w zabezpieczeniach jest upubliczniana, umożliwiając włamanie się do Bash za pomocą skryptów CGI . Jego użytkownicy są następnie proszeni o łatanie go, aby się przed nim chronić.

Posługiwać się

Podobnie jak wszystkie skryptowe interpretery wiersza poleceń , Bash wykonuje cztery podstawowe operacje:

  1. Zawiera listę poleceń do obsługi komputera (uruchamianie programów, kopiowanie plików itp.);
  2. Pozwala na zgrupowanie tych poleceń w jednym pliku zwanym skryptem  ;
  3. Sprawdza wiersz poleceń podczas jego wykonywania lub podczas ewentualnej procedury weryfikacyjnej i zwraca komunikat o błędzie w przypadku błędu składniowego  ;
  4. W przypadku walidacji każda linia poleceń jest interpretowana , to znaczy tłumaczona na język zrozumiały dla systemu operacyjnego, który następnie ją wykonuje.

Skrypty to krótkie programy, które na ogół są łatwe do zbudowania. Bash zapewnia usługę zarządzania przepływem , to znaczy umożliwia przekazanie wyniku jednego skryptu (danych wyjściowych) do innego skryptu (dane wejściowe). W ten sposób można „łączyć” skrypty, z których każdy wykonuje jedno, dobrze zdefiniowane zadanie.

Skrypty mogą być wykonywane ręcznie przez użytkownika lub automatycznie przez system. Na przykład w dystrybucji GNU / Linux Ubuntu katalog resume.dzawiera wiele skryptów, które są wykonywane automatycznie po ponownym uruchomieniu systemu, czyli po zakończeniu uśpienia systemu. Te skrypty są używane do ponownego uruchamiania różnych programów, które zostały przerwane przez stan wstrzymania.

Operacja

Bash to powłoka, której można używać w trybie interaktywnym lub wsadowym:

Sesja interaktywna

„Sesja” to zbiór działań wykonywanych przez użytkownika systemu komputerowego od momentu połączenia się z nim do chwili odłączenia się od niego.

Bash jest najczęściej używany domyślnie do logowania w dystrybucjach GNU / Linux. Został również znaleziony jako domyślna powłoka w systemie MacOS X, aż do wersji Catilina w 2019 roku.

Zamknij w trybie interaktywnym

Sesja jest zamykana poleceniem exitlub Ctrl+D(znak końca pliku w systemie Unix: użytkownik zamyka strumień odczytu interpretera).

Skrypty wykonywane podczas uruchamiania bash

readline i edytując wiersz poleceń

Bash korzysta z biblioteki, readline która umożliwia mu, podobnie jak powłoka C , automatyczne uzupełnianie (autouzupełnianie) nazw poleceń i plików podczas wpisywania klawisza Tab i znacznie przyspiesza pracę. Klawisze w górę i w dół umożliwiają łatwe poruszanie się po historii poleceń.

Edycja wiersza poleceń w trybie vi lub Emacs

Możliwe jest również wybranie do edycji wiersza poleceń zachowania podobnego do tego z edytora tekstu vi lub do tego z Emacsa . Jest więc konieczne stosowanie poleceń set -oi set +omodyfikujących opcji powłoki. Ich zachowanie jest sprzeczne z intuicją, ponieważ set -oaktywuje opcję, jednocześnie set +oją dezaktywując.

set -o emacsuruchamia edycję wiersza poleceń w trybie emacs i set -o vivi. Od wersji 2.0, nowa komenda wewnętrzny został dodany do konfiguracji zachowania powłoki: shopt. Ma na celu zastąpienie konfiguracji opcji set. Działanie shopt -ojest podobne do set -oi w shopt +ocelu set +ozapewnienia ciągłości set.

Interpretacja i realizacja zamówień

Aby zinterpretować linię, Bash dzieli ją na słowa. Pierwsze słowo w linii jest uważane za nazwę polecenia. Następnie umieszczamy „argumenty”, które są również nazywane „parametrami” polecenia, czyli dane, które będzie przetwarzać, na przykład plik. Na koniec możemy dodać „opcje”, które zmodyfikują standardowe zachowanie polecenia. Opcje te są poprzedzone „-”, krótkim łącznikiem, a następnie nazwą opcji lub pojedynczą literą jako skrótem. Nie umieszczamy spacji między myślnikiem a nazwą opcji.

Interpretacja

Każda interpretacja linii jest zgodna z następującymi ograniczeniami:

  • pierwsze słowo z linii jest interpretowane jako nazwa polecenia, inne słowa są jego parametry lub opcje;
  • każde słowo jest oddzielone jednym lub kilkoma znakami separatora . Domyślnie te znaki to spacja i tabulacja (można je modyfikować za pomocą zmiennej Internal Field Separator (IFS);
  • koniec polecenia jest oznaczony znakiem „; »(Jeśli chcesz umieścić kilka poleceń w tej samej linii) lub przez znak końca wiersza.

Istnieje kilka typów nazw poleceń powiązanych z różnymi stopniami priorytetu. Podążając za malejącym porządkiem priorytetów, interpretując to pierwsze słowo, znajdujemy:

  • ps  : są słowa zdefiniowane jako synonimy innego (grupy) słowa (ów). W takim przypadku interpreter rozpoczyna od zastąpienia słowa jego odpowiednikiem. Przykładem wspólnego aliasu jest to, alias ll='ls -alh'że pozwala dzwonić ls -alhtylko przez wprowadzenie ll ;
  • polecenia wewnętrzne  : są to polecenia zdefiniowane w tłumaczu. Nie są przedmiotem odrębnego programu. Na przykład cd( zmień katalog ) lub setsą wewnętrznymi poleceniami powłoki. Dlatego which setnie zwracaj lokalizacji pliku binarnego odpowiadającego temu poleceniu, ponieważ jest on częścią programu Bash;
  • polecenia zewnętrzne , to znaczy programy (lub plik poleceń, ogólnie nazywany „skryptem”) przechowywane na dysku maszyny. Na przykład lsto polecenie, które wyświetla listę plików zawartych w danym katalogu; which lspodaje lokalizację pliku binarnego ls.

Jeśli Bash nie znajdzie dopasowania w aliasach, poleceniach wewnętrznych lub poleceniach zewnętrznych z pierwszym słowem w wierszu, zwraca komunikat o błędzie ze command not foundsłowem wpisanym na początku wiersza poprzedzającego go .

Wykonanie

W przypadku polecenia zewnętrznego, powłoka musi znaleźć program odpowiadający temu poleceniu, zanim będzie można go wykonać. Wyczerpujące przeszukiwanie dla każdego polecenia w całym systemie plików zajęłoby zbyt dużo czasu i uczyniłoby system bezużytecznym w praktyce. Podczas wyszukiwania programu umożliwiającego wykonanie polecenia przeglądany jest faktycznie tylko niewielki zestaw katalogów. Te katalogi są zdefiniowane w zmiennej środowiskowej o nazwie „  $ PATH  ”. Jeśli polecenie nie zostanie znalezione w żadnym z katalogów wymienionych w tej zmiennej, „the PATH”, wykonanie spowoduje wyświetlenie komunikatu o błędzie tego typu command not found.

W przeciwieństwie do tego, co dzieje się w systemie Windows, ze względów bezpieczeństwa powłoki systemu Unix, w tym Bash, nie zawierają niejawnie bieżącego katalogu w PATH, ale można go tam umieścić bezpośrednio. Ma to na celu zapobieżenie zainstalowaniu przez osobę fizyczną szkodliwego programu w bieżącym katalogu, który o tej samej nazwie, co polecenie zewnętrzne, mógłby zostać uruchomiony w jego miejsce, gdyby użytkownik wpisał to polecenie.

Składnia

Metaznaki powłoki

Metaznak to postać, która ma znaczenie inne niż jego dosłownym znaczeniu. „*” Nie oznacza dla Bash znaku gwiazdy, odczytuje go jako reprezentujący dowolną sekwencję znaków lub brak znaków. Metaznaki są podzielone na dwie klasy, te, które zastępują inne znaki i te, które pozwalają na ochronę postaci. Te, użyte samodzielnie, jak w przypadku odwrotnego ukośnika, lub w parach, zmuszają Basha do dosłownego czytania znaków, to znaczy, że jeśli jest chroniony, znak „*” traci swój status metaznaku, aby stać się „gwiazdą " jeszcze raz.

Istnieją dwa zastępcze metaznaki:

  1. *: dopasowuje dowolny znak, dowolny znak lub zestaw znaków;
  2. ? : jest odpowiednikiem dowolnego znaku.

Istnieją trzy sposoby ochrony znaku lub ciągu znaków:

  1. \: zapobiega specjalnej interpretacji metaznaku;
  2. `: Odwrócone cytaty ( małe cudzysłowy , klawisze AltGr+7na klawiaturze francuskiej) powodują interpretacji łańcucha znaków zawarty między dwoma z tych znaków jako polecenie. Przykład for file in `ls` :;
  3. ': wszystkie znaki zawarte między dwoma z tych znaków są interpretowane jako tekst.

Znak ucieczki: ukośnik odwrotny „\”

Ukośnik odwrotny na końcu wiersza

Na końcu wiersza odwrócony ukośnik oznacza, że ​​polecenie jest kontynuowane w następnym wierszu. Ta funkcja jest szczególnie przydatna w przypadku dużych zamówień, aby były bardziej czytelne.

Ukośnik odwrotny, aby utworzyć jeden ze znaków specjalnych C

Ciągi mające format podobny do tego $'\n', w którym zauważamy obecność ukośnika odwrotnego, są interpretowane przez Bash w szczególny sposób. Zwróć uwagę, że po odwrotnym ukośniku następuje litera, a grupa jest otoczona apostrofami. W tym przypadku nie chodzi o ucieczkę od znaczenia metaznaku. Jest to sposób na wskazanie Bashowi, że połączenie ukośnika odwrotnego i litery reprezentuje specjalny znak języka C , który ma być interpretowany zgodnie z zasadami określonymi przez ANSI . W ten sposób 'echo $'\a'wywoła „  sygnał dźwiękowy  ”.

W poniższej tabeli wymieniono te znaki specjalne:

Wyczerpuj
odwrotny ukośnik
Transformacja Basha
\w Brzęczyk
\ b Odstępy z tyłu
\ e Wydechowy
\ f Podział strony (angielska nazwa tego znaku to form feed )
\nie Przerwanie linii
\ r Powrót karetki
\ t Znak tabulacji poziomej
\ v Znak tabulacji pionowej
\\ Ukośnik wsteczny
\ ' Apostrof (angielska nazwa tej postaci to cytat )
\ nnn Znak 8-bitowy, którego wartość ósemkowa to nnn
\ xHH 8-bitowy znak, którego wartość szesnastkowa to HH
\ cx Znak Control-X

Zobacz ASCII

Ukośnik odwrotny przed jednym z metaznaków Basha

Metaznaki, w tym „*” (gwiazda), nie są interpretowane przez Bash jako dosłowne, co w niektórych przypadkach jest niewygodne. Polecenia find , sed ilustrują ten delikatny punkt. Jeśli korzystaliśmy z polecenia find, chcieliśmy przeszukać bieżący katalog, reprezentowany przez „. ", I jego podkatalogi, wszystkie pliki, których nazwa zaczyna się od" my ", można by pokusić się o napisanie następującego wiersza poleceń find . -name my*Ale polecenie zwróci Find: Les chemins doivent précéder l'expression.

W rzeczywistości Bash zamieni ciąg "my *" na listę plików zawartych w bieżącym katalogu, który jest findtraktowany jako lista ścieżek, które muszą być określone jako pierwsze, a nie jako nazwa plików do wyszukania.

Jednym z rozwiązań jest użycie ukośnika odwrotnego przed znakiem „*”, aby go uniknąć i zmusić Bash do zinterpretowania go jako literału. Co daje find . -name my\*.

Innym rozwiązaniem byłoby użycie cudzysłowów. Moglibyśmy na przykład pisaćfind . -name "my*"

Zarządzanie procesem

Zamówienia Operacje Wyjaśnienia
A & Utwórz nowy proces, wydając polecenie A ( zależne od konsoli), umożliwiając wprowadzanie innych poleceń w tej samej konsoli.
( A & ) To samo co powyższe polecenie, ale tym razem utworzony proces jest niezależny od konsoli.
A && B Logiczne AND ( && ) Wykonaj B, jeśli A się powiedzie .

B jeśli A OK

A || B Wykonaj B tylko wtedy, gdy A zawiedzie .

B, jeśli A KO

A `B` parametry dynamiczne A wykorzystuje wyniki działania B
A $(B)

Zarządzanie przepływem

Każde zamówienie jest powiązane z trzema przepływami:

  1. standardowe wejście (lub „  wejście  ” lub nawet stdin ) (wejście 0);
  2. standardowe wyjście (lub „  wyjście  ” lub nawet standardowe wyjście ) (wejście 1);
  3. standardowe wyjście błędów ( stderr ) (wejście 2)

Opcjonalnie z poleceniem można skojarzyć dodatkowe deskryptory plików .

SPOSÓB UŻYCIA:

Zamówienia Operacje Wyjaśnienia
A > fichier wyjście ( > ) Wykonaj polecenie A i przekieruj jego standardowe wyjście ( stdout ) do pliku , nadpisując jego zawartość lub tworząc plik, jeśli nie istnieje
A >> fichier wyjście ( >> ) Wykonaj polecenie A i przekieruj jego standardowe wyjście na koniec pliku
A 2> fichier wyjście ( 2> ) Wykonaj polecenie A i przekieruj jego standardowe wyjście błędów ( stderr ) do pliku , nadpisując jego zawartość lub tworząc plik, jeśli nie istnieje
A 2>> fichier wyjście ( 2 >> ) Wykonaj polecenie A i przekieruj jego standardowe wyjście błędu na koniec pliku
A 2>&1 wyjście ( 2> i 1 ) Wykonaj polecenie A i przekieruj jego standardowe wyjście błędu na jego standardowe wyjście
A < fichier wpis ( < ) Wykonaj polecenie A, przekazując mu zawartość pliku na jego standardowe wejście ( stdin )
A | B wyjście, wejście ( | ) Wykonaj A i wyślij zawartość jego standardowego wyjścia na standardowe wejście B

Przekierowanie wejścia i obu wyjść

Posługiwać się

  • > aby przekierować standardowe wyjście ( stdout ) polecenia;
  • 2> w przypadku przekierowania wyjścia błędu ( stderr );
  • n> umożliwia przekierowanie n-tego deskryptora pliku;
  • &>, aby przekierować standardowe wyjście i wyjście błędów w tym samym czasie.

Zmienne powłoki

Odwołania do zmiennych są poprzedzane znakiem $ (przykład echo $ HOME ).

Niektóre zmienne środowiskowe  : USER , PID , HOME , PATH i SHELL .

Zastępowanie zamówień

W wierszu poleceń zastępujemy polecenie jako argument jego wynikiem (w stdout ), otaczając je odwrotnymi cudzysłowami „ nazwa polecenia ” lub używając $ () ( $ (nazwa polecenia) ).

Wyrażenie

Regularne wyrażenia lub wyrażenia regularne są używane do opisania ciągów znaków. Wśród nich można wyróżnić dwie kategorie. W literałami , które są typowe postacie traktowane jako taki i dzikie karty , które to symbole mające znaczenie dla wyszukiwania. Omówiliśmy już powyżej postacie *i ?. Istnieje możliwość doprecyzowania opisu szukanego wzoru oraz określenia jego lokalizacji.

Oznacza ^to początek wiersza i $koniec. Na przykład ^terreprezentuje wszystkie wiersze zaczynające się teri ter$kończące się na ter.

Metaznaki również reprezentują klasy znaków. Na przykład w sci[ea]ncetreści nawiasów reprezentuje logiczne LUB. Są reprezentowani sciencei sciance. Za pomocą nawiasów można również zdefiniować interwały, należy dodać myślnik. Wynika z tego, że [0-9]równa się wszystkim cyfrom od 0 do 9, [a-z]wszystkim małym literom i [A-Z]wszystkim dużym literom. W nawiasach można łączyć kilka klas znaków: na przykład epsilon[0-9A-Z]określa, po których epsilonmoże następować liczba z przedziału od 0 do 9 lub wielka litera.

^ Wewnątrz nawiasów kwadratowych oznacza negację. Zatem [^eo]( ^jest drugim znakiem) nie definiuje ani „e”, ani „o”.

Wyrażeń w nawiasach kwadratowych nie można używać do opisu ciągu znaków, odpowiadają one tylko pojedynczemu znakowi. Aby opisać ciąg, musisz użyć nawiasów, które są zwykłym wyrażeniem podrzędnym. Rury | wskazuje wtedy alternatywy. lou(p|ch)eropisano także louperjako loucher.

Skróty klawiaturowe w trybie Emacsa

  • TAB  : automatyczne uzupełnianie słowa z pozycji kursora.
  • CTRL + a  : przesuń kursor na początek linii (odpowiednik klawisza start ).
  • CTRL + c  : wysyła sygnał SIGINT do zadania pierwszego planu, które go przerywa.
  • CTRL + d  : na początku linii zamyka bieżącą powłokę (odpowiednik polecenia exit ). Jeśli wprowadzono polecenie start, usuń (usuń) znak za kursorem.
  • CTRL + e  : ( end ) przenosi kursor na koniec linii (odpowiednik klawisza end ).
  • CTRL + p  : ( poprzednie ) przywołuje poprzednie polecenie (odpowiednik klawisza strzałki w górę ).
  • CTRL + n  : ( next ) przywołuje następne polecenie (odpowiednik klawisza strzałki w dół ).
  • CTRL + r  : ( research ) przywołuje ostatnie polecenie zawierające określone znaki (odpowiednik vim ~ / .bash_history ). 2 nd CTRL + R przypomina następne poprzednie polecenie odpowiadającą wyszukiwania. CTRL + s  : przywołuje następujące polecenie wyszukiwania (uważaj, aby nie uruchomić go z terminala, ponieważ to polecenie wywołałoby jego XOFF). CTRL + o  : wykonaj polecenie znalezione w wyszukiwaniu.
  • CTRL + l  : czyści zawartość ekranu (odpowiednik polecenia wyczyść ).
  • CTRL + u  : czyści zawartość linii przed kursorem i umieszcza ją w schowku .
  • CTRL + k  : czyści zawartość linii za kursorem i umieszcza ją w schowku.
  • CTRL + w  : usuwa zawartość kursora na początku słowa poprzedzającego go i umieszcza w schowku.
  • CTRL + y  : ( yank ) dodaje zawartość schowka z pozycji kursora.
  • CTRL + z  : wysyła sygnał SIGTSTP do zadania pierwszoplanowego, co powoduje jego zawieszenie. Aby wyświetlić go ponownie, możesz wpisać fg „nazwa procesu” .
  • CTRL + x CTRL + x  : (ponieważ x ma kształt krzyża) zmienia kursor na jego starą pozycję.
  • CTRL + x CTRL + e  : ( edytor, ponieważ pobiera zmienną $ EDITOR z powłoki) edytuje bieżący wiersz w edytorze tekstu.
  • CTRL + _  : anuluje ostatnią modyfikację.
  • ALT + f lub ESC + f  : (do przodu ) przesuwa kursor na koniec następnego słowa.
  • ALT + b lub ESC + b  : ( wstecz ) przenosi kursor z powrotem na początek słowa przed nim.
  • ALT + BS lub ESC + BS  : wytnij tekst do początku słowa poprzedzającego kursor.
  • ALT + d lub ESC + d  : wytnij tekst do końca słowa następującego po kursorze.
  • ALT + u lub ESC + u  : przekształca litery na wielkie do końca słowa następującego po kursorze.
  • ALT + l lub ESC + l  : zamienia litery na małe litery do końca słowa następującego po kursorze.
  • ALT + c lub ESC + c  : zaczynając od kursora, umieść pierwszą napotkaną literę wielką, a kolejne małe, aż do końca znalezionego słowa.
  • ALT + r lub ESC + r  : anuluje zmiany i resetuje wiersz tak, jak był w historii.

Skróty klawiaturowe w trybie vi

Tryb vi jest aktywowany poleceniem set -o vii wyłączany przez set +o vi. Na początku linii znajdujesz się w trybie wstawiania , aby przejść do trybu poleceń , musisz nacisnąć klawisz Escape .

Oto podsumowanie poleceń, pełny opis znajduje się na stronie vi .

Przemieszczenie:

  • $: przejście na koniec wiersza
  • ^: przejście na początek wiersza
  • j i k: aby wyświetlić następne i poprzednie polecenie
  • h i l: przesuwanie kursora w lewo iw prawo
  • w: umieść kursor na pierwszym znaku następnego słowa
  • b: umieść kursor na pierwszym znaku poprzedniego słowa

Akcja:

  • u: anuluj poprzednią akcję
  • D: usuń koniec linii od kursora
  • yy: skopiuj bieżącą linię (i skopiuj ją do bufora)
  • dd: usuń bieżącą linię (i skopiuj ją do bufora)
  • yw: skopiuj słowo następujące po kursorze w buforze
  • dw: wytnij słowo za kursorem i skopiuj je do bufora
  • y $: kopia kursora na końcu linii w buforze
  • d ^: usuń od początku linii do kursora i skopiuj go do bufora
  • p: Wklej za kursorem
  • P: wklej przed kursorem
  • e: wywołaj edytor wiersza poleceń, normalnie vi lub vim
W trybie edytora

Wymiana wzoru:

  • : s: zamień jeden ciąg znaków na inny. Na przykład: s / przed / po / zastępuje słowo „przed” słowem „po” w bieżącym wierszu. Formatem wyrażenia regularnego jest perl.
  • /: wyszukuje ciąg znaków za kursorem.

Naciśnięcie klawisza „n” powoduje powtórzenie wyszukiwania / podstawienia przy następnym wystąpieniu, „N” umożliwia powtórzenie / zastąpienie poprzedniego wystąpienia.


Powtórz polecenia:

  • : 33: przesuń kursor do linii 33.
  • 5x: usuń bieżący znak 5 razy

Edycja aktualnej linii:

  • ESC: wq: wyjdź i zapisz.
  • ESC: q! : Wyjdź bez zapisywania

Zobacz też

Powiązane artykuły

Linki zewnętrzne

Uwagi i odniesienia

Uwagi
  1. Do podziału strony, zobacz (w) Podział strony
  2. (en) znajdź
Bibliografia
  1. Chet Ramey ( d ) , Dostępna wersja Bash-5.1  " ,7 grudnia 2020 r(dostęp 23 grudnia 2020 )
  2. Patch Bash TERAZ: błąd „Shell Shock” atakuje Linuksa, systemy OS X szeroko otwarte , Rejestr , 24 września 2014 r.
  3. Skrócona instrukcja Bash