11 bash.DOC

(164 KB) Pobierz









Rozdział 11.
bash









E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\11.DOC              223










Rozdzia³ 11. ¨ bash              223

Rick McMullin i Tim Parker

W tym rozdziale:

u                                             Po co komu interpreter poleceń             

u                                             Powłoka Bourne Again Shell             

u                                             Dostosowywanie interpretera bash             

u                                             Polecenia powłoki bash – podsumowanie             

Ten i dwa następne rozdziały pozwolą Ci poznać różne typy interpreterów poleceń dostępnych w systemie Linux: bash, pdksh i tcsh. Zaczniemy od omówienia powłoki bash (Bourne Again Shell), ponieważ jest ona w systemie Linux powłoką domyślną, w związku z czym korzysta z niej większość nowych użytkowników. Przyjrzymy się najczęściej wykorzystywanym poleceniom i zmiennym środowiskowym powłoki bash. Po przeczytaniu tego rozdziału będziesz potrafił pracować z tym interpreterem szybciej i wydajniej.

Po co komu interpreter poleceń

Czym tak właściwie jest interpreter poleceń powłoki? Jest to termin używany w systemie Linux bardzo często, ale jego znaczenie jest często mgliste dla początkujących (a czasem również bardziej zaawansowanych) użytkowników. Ten podrozdział wyjaśni Ci, co to takiego i dlaczego jest taki ważny.

Co to jest interpreter poleceń powłoki?

Interpreter poleceń powłoki to interfejs pomiędzy Tobą (czyli użytkownikiem) a Linuxem (albo bardziej precyzyjnie: jądrem systemu operacyjnego). Rysunek 11.1 obrazuje powiązania pomiędzy użytkownikiem, interpreterem poleceń powłoki (zwanym również
 

Rysunek 11.1.

Powiązania pomiędzy użytkownikiem, interpreterem poleceń i systemem operacyjnym

 

krócej powłoką lub interpreterem poleceń) i systemem operacyjnym. Każde polecenie, jakie wydajesz, używając Linuxa, jest interpretowane przez powłokę, a następnie przekazywane do jądra systemu.

 

Jeśli znasz system MS-DOS, dostrzegasz na pewno podobieństwo tych relacji do relacji pomiędzy użytkownikiem systemu DOS i programem COMMAND.COM. Jedyną różnicą jest fakt, że w systemie DOS interpreter poleceń jest scalony z jądrem systemu.

Interpreter poleceń obsługuje pewną liczbę poleceń wewnętrznych (ang. built-in). Umożliwia również uruchomienie wszystkich aplikacji i programów użytkowych dostępnych w systemie.

Wprowadzone przez użytkownika polecenie zawsze jest interpretowane przez powłokę. Na przykład w poprzednich rozdziałach, gdy wydawałeś polecenia, ucząc się zarządzać plikami i katalogami, powłoka interpretowała je, a następnie wykonywała albo uruchamiała odpowiednie programy.

Niektóre z poleceń (np. pwd) są wewnętrznymi poleceniami interpretera, inne to programy, które znajdują w katalogach gdzieś w systemie plików (na przykład rm lub cp). Z punktu widzenia użytkownika rozróżnienie takie nie jest istotne. Rysunek 11.2 pokazuje, w jaki sposób powłoka interpretuje polecenia.

Rysunek 11.2 ilustruje kroki podejmowane przez powłokę w celu zinterpretowania poleceń wydawanych przez użytkownika. Najpierw sprawdza ona, czy polecenie nie jest jednym z poleceń wewnętrznych (jak np. pwd). Jeśli nie, próbuje znaleźć i uruchomić odpowiedni program. Może to być zarówno standardowe polecenie Linuxa, jak ls czy rm, lub też jakaś aplikacja komercyjna, na przykład xv.

Interpreter poleceń szuka programów w katalogach zawartych w ścieżce przeszukiwania. Jak wspomnieliśmy w jednym z wcześniejszych rozdziałów, ścieżka przeszukiwania zawiera listę katalogów, w których można znaleźć pliki wykonywalne. Jeśli jednak przeszukiwanie nie zakończy się sukcesem (i oczywiście polecenie nie jest jednym z wewnętrznych poleceń powłoki), wyświetlony zostanie komunikat:

$ zrobto
zrobto: not found

Rysunek 11.2.

Interpretacja poleceń przez powłokę

 

Ostatnim etapem wykonania polecenia (jeśli może ono być zinterpretowane) jest rozbicie go na wywołania funkcji systemowych, przekazywane do jądra systemu.

Powłoka zawiera również potężny, interpretowany język programowania, zbliżony nieco do języka znanego z DOS-owych plików wsadowych, ale o wiele bardziej elastyczny. Obsługuje on większość konstrukcji, które dostępne są w językach wysokiego poziomu, takich jak pętle, funkcje, zmienne czy tablice.

Jak uruchamia się interpreter poleceń

Wiesz już, że interpreter poleceń jest podstawową metodą porozumiewania się użytkownika i jądra systemu. Jak jednak uruchamiany jest ten program? W systemie Linux jest on uruchamiany w momencie, gdy użytkownik zaloguje się do systemu. Zazwyczaj interpreter poleceń pozostaje uruchomiony aż do wylogowania.

Każdemu użytkownikowi przypisany jest domyślny interpreter poleceń. Informacja o nim znajduje się w pliku zawierającym hasła, czyli /etc/passwd. Zawiera on (miedzy innymi) identyfikator użytkownika, zakodowaną wersję hasła i nazwę programu, który należy uruchomić po zalogowaniu. Nie musi to być (choć prawie zawsze jest) interpreter poleceń Linuxa.

Najczęściej używane powłoki

W systemach linuxowych i UNIX-owych dostępnych jest kilka rodzajów powłok. Najpopularniejsze z nich to Bourne Shell (sh), C Shell (csh) i Korn Shell (ksh). Każda ma swoje wady i zalety.

Powłoka sh, której autorem jest Steven Bourne, jest podstawowym interpreterem poleceń w systemach UNIX-owych i jest dostępna w każdym z nich. Ma dość duże możliwości jeśli chodzi o obsługę skryptów, ale praca interaktywna nie jest jej najmocniejszą stro.

Powłoka C Shell (csh), której autorem jest Billy Joy, jest o wiele wygodniejsza pod względem pracy interaktywnej (posiada na przykład takie ułatwienia jak automatyczne dokańczanie poleceń). Jeśli chodzi o programowanie, nie jest tak dobra jak sh, ale wielu programistów używa jej ze względu na fakt, że składnia poleceń jest zbliżona do składni języka C (stąd zresztą pochodzi jej nazwa).

Interpreter ksh, którego autorem jest Dave Korn, łączy w sobie zalety obu poprzednich powłok – jest wygodny zarówno jeśli chodzi o pracę interaktywną, jak i programowanie. Ponadto jest całkowicie kompatybilny z powłoką sh.

 

Na rynku dostępnych jest wiele dobrych książek o trzech wymienionych wyżej interpreterach poleceń. Jeśli chcesz ich używać, powinieneś zaopatrzyć się w którąś z nich. Ponieważ jednak większość użytkowników poprzestaje na powłokach rozprowadzanych z Linuxem, w dalszej części skupimy się właśnie na nich.

Poza wyżej wymienionymi, powstało wiele innych powłok, które dziedziczą podstawowe własności po jednym lub więcej interpreterze, tworząc jego nową wersję. Z większością dystrybucji Linuxa rozprowadzane są powłoki tcsh (rozszerzona wersja csh), bash (Bourne Again Shell, rozszerzona wersja powłoki sh) i pdksh (Public Domain Korn Shell, wersja powłoki ksh), które zostaną omówione bliżej w tym i dwóch następnych rozdziałach.

Powłoka Bourne Again Shell

Jak sama nazwa wskazuje, Bourne Again Shell to wersja powłoki Bourne Shell (sh). bash jest z nią całkowicie kompatybilny, ale zawiera wiele rozszerzeń i nowych rozwiązań. Przejął również niektóre zalety powłok csh i ksh. Jest to interpreter potężny i elastyczny jeśli chodzi o programowanie, a także przyjazny dla użytkownika pod względem pracy interaktywnej.

Dlaczego warto używać powłoki bash zamiast sh? Głównym powodem jest poprawiona obsługa interfejsu użytkownika. Wydawanie poleceń w interpreterze sh nie jest zbyt wygodne, jeśli więc regularnie i często wydajesz dużą liczbę poleceń, bash ma kilka cech mogących znacznie ułatwić Ci pracę.

Dokańczanie poleceń

Podczas wydawania polecenia jego pełne brzmienie często nie jest koniecznie do zrozumienia i prawidłowego zinterpretowania go. Dla przykładu załóżmy, że katalog bieżący zawiera następujące podkatalogi:

 

News/              bin/              games/              mail/              test/

Jeśli chcesz przejść do podkatalogu test, możesz wydać polecenie

 

cd test

Oczywiście działa ono prawidłowo. bash pozwala jednak zrobić to nieco szybciej i wygodniej. Ponieważ test to jedyny podkatalog zaczynający się na literę t, bash powinien domyślić się, że właśnie o ten katalog chodzi, gdy wpiszesz:

 

cd t

Jedynym podkatalogiem, do którego może odnosić się litera t, jest test. Jeśli chcesz, by bash dokończył polecenie za Ciebie, wciśnij klawisz Tab:

 

cd t<Tab>

Gdy to zrobisz, dokończone polecenie pojawi się na ekranie. Nie zostanie ono wykonane, dopóki nie zatwierdzisz go klawiszem Enter, dzięki czemu można sprawdzić, czy chodziło właśnie o to, co dopisał interpreter.

Przy wydawaniu krótkich poleceń (tak jak w powyższym przykładzie) korzystanie z tej możliwości nie ma większego sensu – może nawet wydłużyć czas ich wydawania. Dopiero gdy nabierzesz wprawy, a wydawane przez Ciebie polecenia staną się dłuższe, będziesz się zastanawiał, jak mogłeś wcześniej obejść się bez dokańczania poleceń.

Co się jednak stanie, gdy od litery t zaczynać się będzie nazwa więcej niż jednego podkatalogu? Stworzy to pewien problem, gdy będziesz chciał użyć dokańczania poleceń. Zobaczmy, jak potoczą się wypadki, gdy w katalogu bieżącym znajdują się następujące podkatalogi:

 

News/              bin/              mail/              test/              tools/              working/

W katalogu bieżącym znajdują się teraz dwa podkatalogi o nazwach zaczynających się na literę t. Jak używając dokańczania poleceń przejść do podkatalogu test? Jeśli wpiszesz jak poprzednio cd t<Tab>, bash nie będzie potrafił rozstrzygnąć, o który katalog chodzi.

W takim przypadku interpreter wygeneruje krótki dźwięk, który ma oznajmić, że potrzebne są dokładniejsze informacje. Wiersz poleceń nie zostanie zmieniony, dzięki czemu nie musisz ponownie wpisywać polecenia. Powinieneś teraz dopisać literę e i ponownie wcisnąć klawisz Tab. Powłoka potrafi już określić, który z katalogów miałeś na myśli. Jeśli chcesz wejść do podkatalogu tools, zamiast litery e powinieneś oczywiście dopisać o:

 

cd to<tab>

Gdy podczas wpisywania polecenia wciśnięty zostanie klawisz Tab, bash próbuje dokończyć polecenie. Jeśli nie jest to możliwe, dopisywane są znaki co do których nie ma wątpliwości, a następnie generowany jest dźwięk oznaczający konieczność podania dodatkowych informacji. Można następnie wpisać dodatkowe litery i ponownie wcisnąć klawisz Tab, powtarzając ten proces aż do chwili, gdy powłoka będzie potrafiła dokończyć polecenie.

Symbole wieloznaczne

Innym ułatwieniem dla użytkownika jest możliwość stosowania w wierszu poleceń symboli wieloznacznych. bash obsługuje trzy ich rodzaje:

*               zastępuje dowolny znak lub ciąg znaków,

?               zastępuje dowolny pojedynczy znak,

[...]               zastępuje dowolny znak zawarty pomiędzy nawiasami.

Znak * może być używany w sposób podobny do dokańczania poleceń. Załóżmy na przykład, że w katalogu bieżącym znajdują się następujące podkatalogi:

 

News/              bin/              mail/              test/              working/

Jeśli chcesz przejść do katalogu test, możesz wydać polecenie cd test, użyć mechanizmu dokańczania poleceń:

 

cd t<tab>

lub użyć symbolu *:

 

cd t*

Symbol * zastępuje dowolny znak lub ciąg znaków, więc interpreter w miejsce t* podstawia nazwę test (jest to jedyna nazwa podkatalogu w katalogu bieżącym, która pasuje do wzorca).

Metoda ta działa prawidłowo wtedy, gdy tylko jedna nazwa podkatalogu zaczyna się na literę t. Jeśli jest ich więcej, wzorzec t* zostanie zastąpiony przez listę plików i podkatalogów rozpoczynających się na literę t. Polecenie cd spowoduje przejście do pierwszego katalogu z tej listy, niekoniecznie do tego, o który chodziło.

Bardziej praktyczne zastosowanie znaku * to wykonywanie poleceń na kilku plikach jednocześnie. Przykładowo, niech bieżący katalog zawiera następujące pliki:

 

ch1.doc              ch2.doc              ch3.doc              chimp              config              mail/              test/              tools/

Jeśli chcesz wydrukować wszystkie pli...

Zgłoś jeśli naruszono regulamin