Powłoka Bourne-Again Przykład użycia Bash.
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.
„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ć.
Podobnie jak wszystkie skryptowe interpretery wiersza poleceń , Bash wykonuje cztery podstawowe operacje:
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.
Bash to powłoka, której można używać w trybie interaktywnym lub wsadowym:
„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.
Sesja jest zamykana poleceniem exitlub Ctrl+D(znak końca pliku w systemie Unix: użytkownik zamyka strumień odczytu interpretera).
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 EmacsMoż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.
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.
Każda interpretacja linii jest zgodna z następującymi ograniczeniami:
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:
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 .
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.
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:
Istnieją trzy sposoby ochrony znaku lub ciągu znaków:
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 CCią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 BashaMetaznaki, 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*"
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) |
Każde zamówienie jest powiązane z trzema przepływami:
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 |
Posługiwać się
Odwołania do zmiennych są poprzedzane znakiem $ (przykład echo $ HOME ).
Niektóre zmienne środowiskowe : USER , PID , HOME , PATH i SHELL .
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) ).
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.
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:
Akcja:
Wymiana wzoru:
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:
Edycja aktualnej linii: