5. Linux - powłoka
Transkrypt
5. Linux - powłoka
5. Linux - powłoka 5.1. Kilka słów o powłoce Powłoka (shell) jest interpretatorem poleceń przeczytanych z klawiatury lub pliku - jest czymś w rodzaju command.cnm w systemach windowsowych. Każde polecenie wpisane z klawiatury zostaje zamienione przez powłokę na język zrozumiały dla jądra systemu, które może odpowiednio zareagować na to polecenie. Linuks posiada kilka powłok: bash, sh, csh, tcsh, ale najczęściej stosowanym jest bash, więc na nim się skupimy. 5.2. Zmienne systemowe Zmienne można podzielić na cztery grupy: • • • • zmienne lokalne zmienne globalne zmienne specjalne zmienne programowe Zmienne lokalne określają konfigurację powłoki i są widoczne tylko dla shell'a, dla którego zostały zdefiniowane. Aby zobaczyć ustawienia zmiennych lokalnych możemy wydać polecenie: set Ważniejsze zmienne to: BASH=/bin/bash - nazwa naszej powłoki BASH_VERSION=1.14.7(1) - wersja naszej powłoki COLUMNS=80 - liczba kolumn znaków na naszym ekranie LINES=25 - liczba linii na ekranie HOME=/home/student - nasz katalog domowy LOGNAME=student - nasz login OSTYPE=Linux - typ systemu PATH=/usr/bin:/sbin:/bin:/usr/sbin - domyślna ścieżka dostępu PS1=[\u@\h \W]\$ - ustawienie znaku zachęty PWD=/home/student - nasz aktualny katalog roboczy SHELL=/bin/bash - nazwa naszej powłoki USERNAME=student - nazwa użytkownika, który jest aktualnie zalogowany w systemie EDITOR=vim - nazwa domyślnego edytora tekstu HISTFILE=/home/student/.bash_history - plik zawierający historię poleceń MAIL=/var/spool/mail/$USER - określa plik, do którego dopisywane są listy przychodzące na nasze konto Jeśli chcemy zobaczyć ustawienie pojedynczej zmiennej wydajemy polecenie: echo $HOME Systemy operacyjne - Linux - powłoka 1 Aby zdefiniować zmienną lokalną służy, należy wydać polecenie: nazwa_zmiennej=nowa_wartość np.: EDITOR=mcedit I już. Od tej pory w tym shellu możemy używać tej zmiennej, ale tylko w nim, bo taka deklaracja jest deklaracją lokalną. Zmienne globalne są to zmienne widoczne w każdym podshellu. Aby przekopiować wartość lokalnej zmiennej pod globalną należy wydać polecenie: export nazwa_zmiennej np.: export EDITOR Można też ją od razu przypisać, np: export EDITOR=mcedit Polecenia te stosujemy w plikach konfiguracyjnych, np.: .bashrc w katalogu domowym. Są one (zmienne globalne) wtedy widoczne dla każdego shell'a, który jest startowany. Jeśli ustawimy zmienną globalną w danym procesie shell'a, to jest ona widoczna dla tego procesu shell'a i dla wszystkich jego podprocesów, czyli procesów z niego wyprowadzonych (polecenia wywołane z procesu tej powłoki). Jeśli nie istnieje dla danego konta plik .bashrc, to należy go stworzyć, po czym umieścić w nim odpowiednie instrukcje, jakie mają być wczytane i wykonane podczas startu powłoki. Ponieważ zazwyczaj podczas startu powłoki wykonywany jest jedynie plik .bash_profile, który znajduje się w katalogu domowym użytkownika wywołującego powłokę, to aby również plik .bashrc był wykonany, muszą znajdować się w .bash_profile następujące linie: if [-f ~/.bashrc ]; then source ~/.bashrc fi powodują one wywołanie pliku .bashrc, pod warunkiem, że istnieje on w katalogu domowym użytkownika. Jeśli plik .bash_profile nie istnieje, należy go utworzyć. Jeśli nie zawiera on powyższych linii, należy je dopisać. Zmienne specjalne są definiowane przez system i w przeciwieństwie do innych zmiennych nie można zmieniać ich wartości. Najczęściej zmienne te wykorzystywane w skryptach do sterowania programem. Przykładowe zmienne specjalne to: $# - liczba parametrów przekazanych do programu Systemy operacyjne - Linux - powłoka 2 #? - kod zakończenia polecenia lub programu wywołanego z programu powłoki $0 - pod zmienna tą kryje się nazwa uruchomionego programu $1,$2 - kolejne parametry programu Zmienne programowe to zmienne definiowane przez użytkownika w skryptach powłoki. Definicja zmiennej programowej wygląda następująco: nazwa_zmiennej=wartość np.: x=123 imie="Darek" Pod zmienna programową można podstawić również wynik dowolnego polecenia, np.: sciezka=`pwd` Do zmiennej odwołujemy się poprzez podanie jej nazwy poprzedzonej znakiem $, np.: echo $imie 5.3. Znak zachęty Znak zachęty to tekst, który informuje użytkownika, że system czeka na wprowadzenie przez niego danych. W powłoce bash istnieją dwa poziomy znaku zachęty - pierwszy, który otrzymamy zaraz po zalogowaniu informuje nas, że system czeka na wprowadzenie polecenia. Drugi poziom jest wyświetlany gdy interpreter potrzebuje dodatkowych danych, które musimy wprowadzić. Jest on przechowywany w zmiennej PS2 i standardowo ma postać ">". Można go zmienić, ale takie rozwiązanie jest wygodne, więc zajmiemy się tylko konfiguracją znaku zachęty pierwszego poziomu, który opisany jest w zmiennej PS1. Jeśli wydamy polecenie: export PS1="To mój komputer" wtedy nasz znak zachęty będzie wyglądał: To mój komputer. Nie jest to jednak rozwiązanie ani wygodne, ani estetyczne. Lepiej utworzyć znak zachęty przedstawiający dynamicznie zmieniające się dane jak na przykład czas, bieżący katalog, numer aktualnego polecenia itp. Zerknijmy na standardową zmienną PS1. U mnie ma ona postać: PS1="[\u@\h \W]\\$ " Przyjrzyjmy się bliżej temu, co zawarte jest w cudzysłowiu. Pierwszy znak [ - jest znakiem statycznym, dzięki niemu dane przedstawione są w estetycznej formie, kod \u wyświetla identyfikator użytkownika, @ to następny znak statyczny, \h pokazuje nazwę komputera, a \W wyświetla podstawową nazwę katalogu. Następnie znak ] zamyka nawias, a Systemy operacyjne - Linux - powłoka 3 po nim następuje kod \$, który wyświetla znak # gdy jesteśmy zalogowani jako root, lub $ gdy jako zwykły user. Spacje są spacjami wyświetlanymi na ekranie. Oto lista kodów specjalnych, które mogą zostać użyte do konfiguracji znaku zachęty: \! - wyświetla numer polecenia historii, \# - wyświetla numer aktualnego polecenia, \$ - wyświetla # dla root`a i $ dla zwykłego użytkownika \\ - wyświetla znak \ \d - wyświetla datę \t - wyświetla czas \h - wyświetla nazwę komputera \n - przechodzi do nowego wiersza \nnn - wyświetla znak, który odpowiada wartości ósemkowej nnn \s - wyświetla nazwę powłoki \u - wyświetla login użytkownika \W - wyświetla podstawową nazwę bieżącego katalogu \w - wyświetla nazwę bieżącego katalogu 5.4. Historia poleceń Powłoka bash posiada zdolność przywoływania wcześniej wydawanych poleceń przez użycie klawiszy kursora. Bash rejestruje je w pliku .bash_history , który znajduje się w katalogu domowym użytkownika. Historię poleceń określają dwa parametry: HISTFILE - wskazuje na plik zawierający wywołane wcześniej polecenia HISTSIZE - określa ile ostatnio wydanych poleceń ma być przechowywanych w pliku historii Aby obejrzeć listę ostatnio wydawanych poleceń bez otwierania powyższego pliku należy skorzystać z polecenia history z parametrem określającym liczbę wierszy, które mają być wyświetlone: history 10 pokaże 10 ostatnio użytych poleceń. Aby powtórzyć wcześniej wydane polecenie można użyć następującej komendy: !3 gdzie 3 jest trzecią komendą z listy wyświetlonej poleceniem history . 5.5. Aliasy Bash daje nam ciekawy mechanizm aliasów umożliwiających zastępowanie złożonych poleceń krótszymi, łatwiejszymi do zapamiętania nazwami. Aliasy tworzymy korzystając z polecenia alias, którego składnia jest następująca: alias 'nasza_definicja'='polecenie' Systemy operacyjne - Linux - powłoka 4 np.: alias 'p'='ps -aux' Teraz poprzez wydanie polecenia p otrzymamy listę wszystkich procesów. Zdefiniowane aliasy możemy zlikwidować poleceniem unalias: unalias p Zdefiniowane w ten sposób aliasy "żyją" tylko do czasu zamknięcia przez nas sesji shella. Aby były zdefiniowane na stałe, należy je wpisać do pliku .bashrc w katalogu domowym. 5.6. Dowiązania stałe i symboliczne Mechanizm dowiązań (linków) ułatwia dostęp do plików ukrytych głęboko w strukturze katalogów lub umożliwia zgromadzenie potrzebnych plików w jednym katalogu. Linki dzielimy na stałe i symboliczne. Dowiązania stałe charakteryzują się tym, że posiadają ten sam i-węzeł co wskazywany plik. W praktyce oznacza to, że dowiązanie takie zawiera pełną informację o pliku i w razie skasowania oryginalnego pliku dowiązanie nadal będzie zawierać informacje o tym pliku (jego zawartość). Dowiązanie stałe tworzymy poleceniem: ln plik_lub_katalog link Dowiązania symboliczne służą jedynie do wskazywania na jakiś plik. Umożliwiają one prace na danym pliku poprzez jego dowiązanie. W przypadku skasowania pliku, do którego prowadzi link symboliczny niemożliwe staje się korzystanie z tego dowiązania (nie zawiera on wówczas żadnych informacji). Dowiązania symboliczne tworzymy poleceniem: ln -s plik_lub_katalog link 5.7. Przekierowania wejścia i wyjścia Przekierowania zazwyczaj wykorzystywane są do odczytania danych z jakiegoś urządzenia lub pliku albo do wysłania danych na urządzenie lub plik. Do przekierowań danych służą specjalne znaki: < dane na wejście > dane z wyjścia Najprostszym przykładem przekierowania może być wyświetlenie zawartości jakiegoś pliku poleceniem: cat < plik.txt Aby utworzyć nowy plik i wpisać do niego dowolny tekst możemy użyć przekierowania danych z wyjścia: Systemy operacyjne - Linux - powłoka 5 cat > plik.txt Polecenie to utworzy nam plik plik.txt i umieści w nim tekst wpisany z klawiatury. Jeśli będziemy chcieli ponownie dodać jakiś tekst do tego pliku należy użyć polecenia: cat >> plik.txt Spowoduje to dodanie następnych wierszy z informacją do pliku (bez kasowania poprzedniej zawartości). Innym przykładem przekierowań może być zapisanie do pliku zawartości jakiegoś katalogu: ls -la > plik.txt 5.8. Łączenie poleceń za pomocą potoków Połączenie poleceń za pomocą potoków oznacza wysłanie wyniku z jednego polecenia na wejście drugiego polecenia. Potoki są bardzo często wykorzystywane podczas pisania wszelakich skryptów. Polecenie : ls -la | less łączy ze sobą dwa polecenia : ls -la - listuje zawartość katalogu less - umożliwia przeglądanie dużych plików za pomocą klawiszy kursora. Wynikiem tego połączenia jest możliwość obejrzenia zawartości dużego katalogu za pomocą klawiszy kursora. 5.9. Metaznaki - powtórzonko :-) Meta-znaki to pewien zbiór znaków pełniący specjalne funkcje w powłoce Linuksa. Znaczenia meta-znaków : * - oznacza dowolną sekwencję, dowolną ilość znaków ? - oznacza dowolny pojedynczy znak [qwA1] - oznacza dowolny pojedynczy znak, wymieniony w nawiasach [a-z] - oznacza dowolną małą literę [A-G] - oznacza dowolną dużą literę od A do G [a-zA-Z0-9] - oznacza dowolną małą lub dużą literę i dowolną cyfrę Meta-znaki najczęściej wykorzystywane są do listowania zawartości katalogów : ls * - wyświetla wszystkie pliki w katalogu z wyjątkiem zaczynających się od '.' kropki (są to pliki ukryte) ls *.* - wyświetla wszystkie pliki zawierające w nazwie '.' Systemy operacyjne - Linux - powłoka 6 ls [A-B]* - wyświetla wszystkie pliki zaczynające się od A lub B ls ??1 - wyświetla pliki, których nazwa składa się z dwóch dowolnych liter i jedynki na końcu. 5.10. Polecenie echo i znaki cytowania Do wyświetlenia tekstu lub wartości zmiennych na ekranie służy polecenie echo. Polecenie to może być stosowane z kilkoma opcjami : -n - nie wyświetlaj nic i przejdź do następnej linii -e - włącz interpretację następujących komend występujących po \ : \a - dzwonek \b - kasuj ostatni znak \c - przechodź do następnej linii \n - nowa linia \t - tabulator \\ - znak \ Powłoka Bash odróżnia i inaczej interpretuje trzy rodzaje znaków cytowania : • cudzysłów " " - umożliwia wyświetlenie tekstu, zmiennej ($), zacytowanie polecenia (``) lub użycie znaków specjalnych występujących po \ • apostrof ' ' - wszystko to co zawarte jest między apostrofami interpretowane jest jako zwykły tekst • odwrotny apostrof ` ` - przydaje się w sytuacji gdy chcemy podstawić lub zacytować jakieś polecenie 5.11. Zmiana powłoki logowania Powłokę, którą system przydziela nam po zalogowaniu ustawia administrator podczas procesu tworzenia nowego użytkownika. Jako zwykły użytkownik mamy jednak możliwość zmiany przydzielonej nam powłoki dzięki poleceniu: chsh -s nowa_powłoka Należy jednak pamiętać, że powłoka, którą chcemy wybrać musi być wyszczególniona w pliku /etc/shells. Aby szybko go wyświetlić, wystarczy wydać: chsh -l 5.12. Zarządzanie zadaniami Każdy program uruchomiony z konsoli może zostać przeniesiony w tło, co oznacza, że będzie on widoczny jedynie jako działający proces zwalniając wiersz poleceń i umożliwiając dalszą pracę na konsoli. Aby uruchomić jakiś program lub polecenie w tle należy skorzystać ze znaku & i umieścić go na końcu nazwy programy lub polecenia: ps -aux > procesy & Systemy operacyjne - Linux - powłoka 7 Istnieje również możliwość przeniesienia w tło już uruchomionego zadania, poprzez zatrzymanie go: [Ctrl]+[z] i przeniesienie w tło poleceniem : bg numer_zadania gdzie: numer_zadania to liczba pojawiająca się w nawiasie kwadratowym przy nazwie zatrzymanego programu. Aby wyświetlić listę z uruchomionymi w tle lub zatrzymanymi zadaniami należy użyć polecenia: jobs Każde zadanie przeniesione w tło możemy z powrotem umieścić na pierwszym planie używając polecenia: fg numer_zadania 5.13. Pliki związane z powłoką Przed uruchomieniem powłoki system sprawdza pliki konfiguracyjne shell'a z katalogu /etc/ i z katalogu macierzystego użytkownika. Główne pliki konfiguracyjne z katalogu /etc/ : bashrc , profile - podstawowe ustawienia powłoki inputrc - konfiguracja edytora poleceń basha Pliki konfiguracyjne z katalogu użytkownika : .bash_profile , .bashrc - wykonywane podczas uruchamiania powłoki .bash_logout - wykonywane podczas zamykania powłoki Zadania 1. Utwórz zmienną lokalną o nazwie IMIE, która będzie przechowywała Twoje imię. 2. Przekonaj się, że nie jest ona widoczna w innym procesie konsoli. 3. Skonfiguruj pliki domowe tak, by przy starcie shell'a wczytywana była zmienna globalna IMIE, która będzie przechowywała Twoje imię. 4. Zmień znak zachęty na następujący format: [data,czas-identyfikator użytkownika,nazwa bieżącego katalogu]nazwa shell'a> 5. Przejrzyj plik .bash_history 6. Wyświetl 20 ostatnio wydanych komend i wykonaj jeszcze raz, tą która Ci się najbardziej spodoba. 7. Dodaj alias (na stałe) tak aby pod znakiem l ukryte było polecenie 'ls -la' 8. Przekonaj się, że alias działa nawet po ponownym zalogowaniu się. Systemy operacyjne - Linux - powłoka 8 9. Stwórz alias o nazwie p na czas życia procesu shell'a, pod którym będzie kryło się polecenie pwd. 10. Wywołaj p, po czym usuń alias. 11. W katalogu domowym stwórz katalog Wazne, a w nim kolejny katalog o nazwie Bardzo. W Bardzo stwórz plik o nazwie najwazniejsze i treści "Tu są bardzo ważne informacje". 12. Do pliku najwazniejsze stwórz link stały w katalogu domowym o nazwie skrot1 i link symboliczny o nazwie skrot2. Wyświetl ich zawartość. 13. Skasuj plik najwazniejsze. Teraz spróbuj ponownie wyświetlić zawartość linków skrot1 i skrot2. 14. Stwórz plik plik.moj i napisz w nim "Hej! To ja!" 15. Dopisz do niego "Papapapa!" 16. Przekonaj się, że w pliku plik.moj jest cały tekst: "Hej! To ja! Papapapa!" 17. Posortuj zawartość katalogu /etc (sort - polecenie do sortowania). Ma być możliwość poruszania się strzałkami (góra - dół) po wyniku polecenia. 18. Zmień powłokę logowania na jedną z możliwych, ale inną od bash. 19. Wykonaj polecenie links w tle. Przekonaj się, że jest uruchomione w tle. Przenieś je na pierwszy plan. Po czym znów uśpij. Systemy operacyjne - Linux - powłoka 9