R13_05_SPR.PDF

(386 KB) Pobierz
Szablon dla tlumaczy
Rozdział 13.
Podbój powłoki BASH
Rozdział ten opisuje potęgę powłoki BASH zdecydowanie bardziej szczegółowo, niż to miało miejsce w
rozdziale 4. Przedstawione zostaną zmienne, skrypty i aliasy powłoki przygotowujące do zaawansowanej pracy
w systemie Linux.
Powłoka Linuksa
Poznałeś już wcześniej interpreter poleceń systemu Linux, czyli tzw. powłokę. Podobnie jak okno wiersza
poleceń trybu MS-DOS, powłoka pozwala wydawać polecenia, które są przez nią interpretowane i wykonywane.
Poprzez powłokę właśnie kontrolujesz system Linux i zarządzasz nim.
Różnorodność powłok
Powłoka systemu MS-DOS była przez cały czas w miarę niezmienna, na przykład między 3. wersją MS-DOS a
wersją 7. różnic (zmian) było niewiele. Inaczej jest w przypadku powłoki systemu Unix, która przeszła wiele
zmian oraz miała trochę inną drogę ewolucji niż konkurentka z MS-DOS. Obecnie możemy znaleźć wiele wersji
i odmian powłoki systemu Unix. Odmiany powłoki mają ze sobą dużo wspólnego, ale każda z nich ma na pewno
innego autora i historię powstania oraz sposób, w jaki współpracuje z nią użytkownik.
Linux posiada większość najpopularniejszych powłok systemu Unix; są one przedstawione w tabeli 13.1.
Najczęściej używaną z nich wszystkich jest właśnie powłoka BASH (Bourne Again Shell) opracowana na
podstawie oryginalnej powłoki Unix Bourne. Jest ona w dużym stopniu kompatybilna ze standardem POSIX,
który określa składnię i działanie standardowych powłok Uniksa i który został szeroko rozpowszechniony. Ze
względu na popularność tego standardu oraz na oczywiste korzyści płynące z pracy z powłokami, które są
zgodne z wieloma platformami komputerowymi, rozdział ten skupia się głównie na powłoce BASH. Większość
dystrybucji systemu Linux jest tak skonfigurowana, aby automatycznie uruchamiać tę powłokę zaraz po
zalogowaniu. Po więcej informacji na temat innych powłok systemu Linux zajrzyj na odpowiednie strony
podręcznika systemowego man.
Tabela 13.1. Powszechnie używane powłoki systemu Linux
Nazwa powłoki
Nazwa programu
Opis
Powłoka ASH
/bin/ash
/bin/bsh
Przypomina powłokę używaną przez System V firmy AT&T.
Powłoka BASH
/bin/bash
Standardowa powłoka Linuksa, powstała na bazie oryginalnej
powłoki Uniksa — Bourne. Według stron man dotyczących
tej powłoki BASH jest kompatybilna ze standardem POSIX.
/bin/bash2
Powłoka C
/bin/csh
Druga pod względem popularności powłoka Uniksa.
Zaprojektowana do interaktywnego użytkowania, posiada
wiele funkcji i właściwości. Jej składnia przypomina język
/bin/tcsh
21714174.003.png
programowania C.
Powłoka Korna
/bin/ksh
Połączenie powłoki C (część funkcji) i oryginalnej powłoki
Bourne’a. Trzecia w rankingu.
Powłoka Z
/bin/zsh
Powłoka oparta na powłoce Korna, posiada wiele
wbudowanych właściwości.
Dlaczego warto uczyć się poleceń powłoki?
Jeśli jesteś przyzwyczajony do używania graficznego interfejsu użytkownika, możesz zadawać sobie pytanie,
czy warto jest się uczyć powłoki Linuksa. Wielu bowiem początkujących użytkowników tego systemu twierdzi,
że praca z powłoką jest kłopotliwa, część z nich instaluje graficzny interfejs użytkownika i unika powłoki jak
ognia.
Prawdą jest, że interfejs tekstowy jest starszą formą interakcji użytkownika z komputerem, ale tak się składa, że
obecnie interfejs graficzny jest bardziej prymitywny niż znakowy. A to dlatego, że nie został jeszcze w pełni
rozwinięty. Jest on co prawda łatwiejszy w użyciu, częściej stosowany, ale nie jest tak wyrafinowany i wydajny
jak powłoka. Używanie graficznego interfejsu użytkownika przypomina czasami język migowy Indian
amerykańskich. Jeśli wiadomość, którą chcesz komuś przekazać, jest krótka i prosta jak np. „przybywam w
pokoju”, możesz ją wypowiedzieć przy użyciu kilku gestów. Natomiast jeśli chciałbyś komuś wytłumaczyć
różnice pomiędzy interfejsem graficznym a znakowym, mógłbyś mieć wiele problemów.
Każdy narodowy język migowy, używany głównie przez ludzi niesłyszących, jest bogatszy niż indiański język
migowy. Niestety programiści jeszcze nie potrafią stworzyć interfejsu graficznego o tak złożonej strukturze.
Projektant takiego interfejsu musi przewidywać wszystkie sposoby, jakimi użytkownik będzie komunikował się
z systemem, i dostarczyć odpowiednich metod (tylko za pomocą wskazywania i klikania myszką!), aby program
mógł prawidłowo reagować na żądania użytkownika. W związku z tym użytkownik jest właściwie zmuszany do
wykonywania ściśle określonych operacji i dlatego nie może zaadaptować programu interfejsu graficznego do
wykonywania nieprzewidzianych zadań i odpowiadania na nieokreślone okoliczności. Ze względu na dużą
odpowiedzialność za utrzymanie systemu i bezpieczeństwo danych, gdzie wciąż trzeba zmagać się z
nieprzewidywalnymi zdarzeniami i problemami, większość administratorów wykonuje swoje zadania przy
użyciu powłoki, a nie interfejsu graficznego.
Powłoka jest odzwierciedleniem filozofii systemu Unix, który dostarcza wielu małych i prostych narzędzi
(programów), z których każde wykonujące jedno zadanie. Kiedy zachodzi potrzeba wykonania złożonej
operacji, narzędzia współpracują ze sobą, wykonując działania jedno po drugim. Wiele narzędzi systemu Unix
manipuluje tekstem, a od czasu, kiedy Unix przechowuje dane w formie tekstu, a nie w formie binarnej,
narzędzia te idealnie zaczęły się nadawać do sterowania pracą samego systemu. Taką właściwość daje powłoka
— łączenie narzędzi do wspólnego wykonywania zadań systemowych, co stanowi o sile i wydajności wszystkich
systemów uniksowych. Dodatkowo powłoka jest rozszerzalna — możesz tworzyć skrypty powłoki, które
pozwalają przechowywać szereg poleceń do późniejszego wykonania, oszczędza to czas, który zmarnowałbyś
wpisując te polecenia za każdym razem, gdy zamierzasz wykonać konkretne zadanie.
Odwrotną filozofię można zaobserwować w systemie Microsoft Windows, który obsługuje monolityczne
programy, zawierające menu, podmenu i okna dialogowe. Takie programy nie mają jak ze sobą współpracować,
więc raczej niemożliwe jest wykonywanie złożonych zadań. Są łatwe w użyciu, ale tylko wtedy, gdy musisz
wykonać jedno zadanie, do którego zostały zaprojektowane, natomiast kiedy spróbujesz wykonać operację inną
drogą niż zaprogramowana, napotkasz same trudności.
Oczywiście nie wszyscy zgadzają się z tą opinią. Grupy dyskusyjne są przepełnione wiadomościami mówiącymi
o zaletach środowiska graficznego. Niektórzy z użytkowników takich grup postrzegają systemy Unix jako
zabytkowe zabawki. Nawet jeśli mają rację, to jedynie ucząc się poleceń i funkcji powłoki, przekonasz się sam,
do czego tak naprawdę przydatny jest obecnie taki system.
Zdanie autora jest jednoznaczne — kiedy wykonujesz proste, pojedyncze zadanie, możesz używać interfejsu
graficznego, który umili ci pracę, ale podczas wykonywania skomplikowanego zadania administracyjnego,
wymagającego od użytkownika wyobraźni i myślenia, stanowczo zalecam używanie powłoki (przekonaj się
sam!). Rozwiązania stworzone za pomocą funkcji i poleceń powłoki mogą być zapisane do pliku i wykorzystane
ponownie w przyszłości, niekoniecznie do wykonania tego samego zadania. Co ważniejsze, podczas
21714174.004.png
rozwiązywania powiązanych problemów, skrypty powłoki mogą zostać użyte do przypomnienia dawno
zapomnianych szczegółów.
Używanie powłoki
Powłoka systemu Linux została już przedstawiona w rozdziale 4. Jednakże wiele bardzo ważnych szczegółów
zostało w nim pominiętych ze względu na jej funkcje; rozdział umożliwiał szybkie uruchomienie systemu i
zapoznanie z podstawowymi operacjami. Rozszerzymy jednak zagadnienia dotyczące powłoki i opiszemy je w
szczegółowy sposób.
Wprowadzanie poleceń
Wpisując nazwy programów lub skryptów w wierszu poleceń, masz dostęp do miniedytora, który przypomina
program DOSKEY znany z systemu MS-DOS. Tabela 13.2 podsumowuje niektóre użyteczne skróty klawiszowe
interpretowane przez powłokę jako polecenia. Skróty te umożliwiają dostęp do ostatnio wydawanych poleceń
zapisanych w historii. Aby ponownie wydać polecenie, możesz kilkakrotnie nacisnąć klawisz kursora w górę i
po znalezieniu żądanego nacisnąć Enter .
Tabela 13.2. Użyteczne skróty klawiatury
Klawisz
Funkcja
Up
Przesuwa się o jedno polecenie wstecz na liście historii.
Down
Przesuwa się o jedno polecenie do przodu na liście historii.
Left
Przesuwa kursor o jeden znak do tyłu.
Right
Przesuwa kursor o jeden znak do przodu.
Esc f
Przesuwa kursor o jedno słowo do przodu.
Esc b
Przesuwa kursor o jedno słowo do tyłu.
Ctrl+A
Przenosi kursor na początek wiersza.
Ctrl+E
Przenosi kursor na koniec wiersza.
Ctrl+D
Kasuje znak nad kursorem.
Backspace
Kasuje pierwszy znak przed kursorem.
Esc d
Kasuje cały wyraz.
Ctrl+U
Kasuje od początku wiersza.
Esc k
Usuwa od końca wiersza.
Ctrl+Y
Odzyskuje ostatnio usunięty element (znak, wyraz).
Esc .
Wstawia ostatni wyraz poprzedniego polecenia.
Ctrl+L
Czyści ekran, ustawiając aktualny wiersz na samej górze ekranu.
Tab
Dopełnia słowa lub wyrazy, interpretując je jako nazwę pliku, nazwę użytkownika, nazwę
zmiennej, nazwę hosta lub polecenia zależnie od kontekstu.
Esc ?
Wyświetla listę możliwych dopełnień.
Jednym z bardziej użytecznych poleceń klawiatury jest Tab , który również może być stosowany do wydawania
poleceń. Jeśli na przykład wpiszesz pewną część nazwy pliku i wciśniesz klawisz Tab , powłoka postara się
zlokalizować plik, którego nazwa pokrywa się z wprowadzonymi znakami. Jeśli dokładnie jeden plik zostanie
znaleziony i w dodatku dokładnie jego się spodziewałeś, powłoka dopełni nazwę, a ty naciśnij Enter , aby
wykonać polecenie. Ta właściwość zwana jest dopełnieniem nazw plików lub dopełnieniem poleceń i znacznie
ułatwia używanie powłoki.
21714174.005.png
Oprócz powyższych skrótów klawiaturowych powłoka interpretuje jeszcze kilka innych sekwencji klawiszy,
które kontrolują operacje wykonywanych aktualnie programów. Tabela 13.3 opisuje sekwencje. Na przykład
jednoczesne wciśnięcie klawiszy Ctrl+C powoduje przerwanie działania programu i jego zakończenie.
Polecenie to jest pomocne, gdy samo wykonywanie programu zajmuje dużo czasu, a istnieją inne sposoby na
jego szybsze wykonanie.
Tabela 13.3. Klawisze kontrolne
Sekwencja klawiszy Funkcja
Ctrl+C
Wysyła do aktualnie wykonywanego polecenia sygnał przerwania, co generalnie
powoduje zakończenie działania programu.
Ctrl+D
Wysyła do aktualnie wykonywanego polecenia sygnał końca pliku. Blokuje wejście
konsoli.
Ctrl+Z
Zatrzymuje wykonywanie aktualnie aktywnego zadania.
Istnieje kilka innych specjalnych klawiszy kontrolujących działanie powłoki (patrz tabela 13.4). Znaki # i ;
często używanymi znakami w skryptach powłoki, o których przeczytasz jeszcze w tym rozdziale. Znak & jest
głównie używany do uruchamiania poleceń w tle.
Tabela 13.4. Inne specjalne znaki powłoki
Znak
Funkcja
#
Zaznacza polecenie jako komentarz, przez co interpreter powłoki ją ignoruje.
;
Oddziela polecenia i pozwala wpisywać kilka w jednym wierszu.
&
Znak umieszczony na końcu polecenia powoduje uruchomienie go w tle, tak że po naciśnięciu
klawisza Enter pojawia się natychmiast znak zachęty powłoki.
Polecenia i argumenty
Jak już zapewne wiesz, generalna składnia polecenia powłoki wygląda następująco:
polecenie opcje argumenty
W powyższym przykładzie polecenie określa operację, którą ma wykonać powłoka; opcje i argumenty
wpływają na przebieg działania i zakres operacji. Czasami polecenie oznacza plik programu do
uruchomienia. — wtedy polecenie nazywane jest poleceniem zewnętrznym. Linux przechowuje te pliki w
katalogach /bin, /usr/bin lub /usr/local/bin . Polecenia administracyjne są zazwyczaj przechowywane w katalogu
/sbin lub /usr/sbin . Kiedy polecenie określa plik programu, powłoka przekazuje wszystkie podane argumenty i
opcje do programu, który sprawdza je i interpretuje, następnie wprowadza wraz z poleceniem.
Jednakże niektóre polecenia nie są plikami programów, są za to wbudowane w strukturę powłoki i przez nią
tylko interpretowane. Sposób, w jaki powłoki obsługują wbudowane polecenia, jest jedną z cech, które różnią
powłoki od siebie. Jeszcze w tym rozdziale znajdziesz kilka poleceń wbudowanych w powłokę BASH.
Uogólnianie nazewnictwa plików (Filename globbing)
Zanim powłoka przekaże argumenty i opcje do zewnętrznego programu lub zinterpretuje wbudowane polecenie,
sprawdza wiersz poleceń, poszukując znaków specjalnych i wykonuje operację zwaną uogólnianiem
nazewnictwa plików ( filename globbing ). Jest to operacja przypominająca przetwarzanie symboli
wieloznacznych ( wildcards ) w systemie MS-DOS, ale o wiele bardziej złożona. Tabela 13.5 opisuje znaki
specjalne używane przy rozwijaniu nazewnictwa plików, zwane także metaznakami plikowymi.
Meta znak
Znaczenie
*
Dopasowuje łańcuch dowolnych znaków (nawet brak znaku jest dopuszczalny).
21714174.006.png 21714174.001.png
?
Dopasowuje dokładnie jeden znak.
[abc ...]
Dopasowuje każdy podany znak.
[a-z]
Dopasowuje każdy znak z podanego zakresu.
[!abc ...]
Dopasowuje każdy znak inny niż podane.
[!a-z]
Dopasowuje każdy znak nie podany w zakresie.
~
Oznacza katalog macierzysty aktualnego użytkownika.
~userid
Określa katalog macierzysty podanego użytkownika.
~+
Obecny katalog roboczy.
~-
Poprzedni katalog roboczy.
W operacji uogólniania nazewnictwa plików (zwanej też rozwijaniem nazewnictwa), podobnie jak przy
przetwarzaniu symboli wieloznacznych ( wildcards ) w systemie MS-DOS, powłoka przystępuje do zamiany
metaznaków pojawiających się jako argumenty polecenia w taki sposób, że argumenty te określają teraz nazwy
plików. Rozwijanie nazewnictwa plików ułatwia określanie nazw plików oraz grup plików.
Na przykład załóżmy, że aktualny katalog roboczy zawiera cztery pliki o nazwach: plik1 , plik2 , plik3 i plik04 .
Chcemy poznać rozmiar każdego z nich. Pomoże nam w tym następujące polecenie:
ls –l plik1 plik2 plik3 plik04
Jednakże poniższe polecenie wyświetli nam te same informacje, a w dodatku jest krótsze:
ls –l plik*
Jak pokazuje tabela 13.5, metaznak * odpowiada wszystkim znakom i łańcuchom znaków. Kolejny przykład:
ls –l plik?
Metaznak ? odpowiada tylko pojedynczemu znakowi (a nie łańcuchowi znaków). Wobec tego nie zobaczysz
informacji na temat plik04 .
Podobnie polecenie:
ls –l plik[2-3]
wyświetli tylko informacje o plikach: plik2 i plik3 , ponieważ tylko ich nazwy mieszczą się w zakresie
określonych znaków [2-3] .
Następną ważną cechą jest możliwość podania kilku metaznaków dla jednego argumentu. Rozważmy taki
przykład:
ls –l plik??
Polecenie to wyświetli informacje dotyczące plik04 , ponieważ każdy metaznak odpowiada dokładnie jednemu
brakującemu znakowi występującemu w nazwie pliku.
Większość poleceń pozwala podać kilka argumentów. Jeśli żaden plik nie pasuje do podanego argumentu,
polecenie ignoruje taki argument. Oto kolejne polecenie wyświetlające wszystkie cztery pliki:
ls –l file0* file[1-3]
Uwaga
Przypuśćmy, że polecenie posiada kilka argumentów, z których każdy zawiera kilka metaznaków. Jeśli żaden
z argumentów nie będzie pasował do żadnego pliku, powłoka przekaże argumenty z niezmienionymi
metaznakami do programu. Program spodziewający się ważnej nazwy pliku zwróci komunikat o
niespodziewanym błędzie.
Inny metaznak pozwala w prosty sposób odwołać się do katalogu macierzystego. Na przykład wydając
następujące polecenie:
21714174.002.png
Zgłoś jeśli naruszono regulamin