UNIX POWŁOKA I POTOK WYKŁAD 5 Powłoka, redyrekcja, potok UNIX POWŁOKA POWŁOKA ( ang. SHELL) - to program interpretujący polecenia użytkownika. nazywamy powłoką. Powłoka przyjmuje polecenia od użytkownika, analizuje je i przekazuje jądru życzenia użytkownika. Bezpośrednio po zgłoszeniu się użytkownika do Systemu UNIX następuje automatyczne uruchomienie interpretera(inaczej powłoki), który rozpoczyna pracę na rzecz użytkownika (każdy użytkownik otrzymuje własny i odrębny egzemplarz procesu powłoki). Powłoka od razu sygnalizuje na ekranie terminala( powłoka Bourne a znakiem $) gotowość przyjęcia polecenia. Pojawienie się tego znaku rozpoczyna cykl, w jakim pracuje powłoka. /bin/sh (powłoka Bourne'a) - pierwsza, zapewnia dużą mobilność między systemami, wykorzystywana głównie w kryptach administracyjnych bin/csh - powłoka C, składnia zbliżona do języka C, domyślna powłoka systemu SOLARIS, niezgodna z powłoką Bourne'a /bin/ksh - odpowiedź AT&T na powłokę C (BSD*), zgodna z powłoką Bourne'a, standard systemów AIX, HP-UX, SOLARIS, na początku w systemach licencjonowanych /bin/bash - rozbudowana, zgodna z powłoką Bourne'a, wolna od licencji, najpopularniejsza /bin/ash - zgodna z powłoką sh, domyślna powłoka środowiska Cygwin *BSD Berkley Software Distribution 1
UNIX POWŁOKA Dlaczego warto wiedzieć w jaki sposób posługiwać się i w pełni wykorzystywać możliwości powłoki?? W systemach operacyjnych Linux, Mac OS X powłoka jest ważnym źródłem komunikacji pomiędzy komputerem i użytkownikiem Powłoka doskonale nadaje się do automatyzacji zadań administracyjnych i konfiguracyjnych (np. zakładanie kont użytkowników) Aktualizacja a także pobór wielu aplikacji systemu Linux dostępna jest tylko i wyłączne z poziomu powłoki To powłoka wykonuje większą część operacji w systemie, wliczając w to zadania inicjowane poprzez interfejs graficzny UNIX POWŁOKA Powłoka pracuje w cyklu. Na jeden cykl powłoki składają się: Wypisanie znaku zachęty (Bourne - $) Czekanie na wprowadzenie tekstu polecenia przez użytkownika Analiza wiersza pleceń, wyszukiw. odpow. programu realizującego polecenie Przyjęcie od jądra odpowiedzi i rozpoczęcie nowego cyklu Zlecenie jądru wykonanie odszukanego programu Przerwanie powtarzania cykli powłoki może nastąpić jeśli polecenie użytkownika brzmi: exit lub zostanie naciśnięta na klawiaturze kombinacja klawiszy Ctrl-D, co oznacza, że użytkownik nie ma zamiaru kontynuować wprowadzania dalszych poleceń. Powłoka zleca wtedy jądru zamknięcie sesji użytkownika. 2
UNIX POWŁOKA UOGÓLNIONA POSTAĆ POLECEŃ POWŁOKI SYSTEMU UNIX Wszystkie polecenia rozpoznawane przez powłokę mają taką samą postać ogólną: $ nazwapolecenia argument1 argument2 argument3... ls, mkdir, rm chmod etc. -l, -s, -a, o+w, -v, -C plik1, plik2,plik3 plikn Konieczne Opcjonalne Argumenty polecenia mogą być 2 różnych typów: opcjami (najczęściej są oznaczane symbolami literowymi poprzedzonymi znakiem - np. w poleceniu ls -l) nazwami plików UNIX POWŁOKA STANDARDOWE STRUMIENIE I PLIKI. prawie każde polecenie powłoki realizuje swoje funkcje na zasadzie przetwarzania(przekształcania) strumienia informacji napływającej(w sposób określony przez treść polecenia) w strumień informacji przetworzonej. Każdemu procesowi w chwili uruchomienia przypisuje się standardowy strumień wejściowy i standardowy strumień wyjściowy. Domyślny strumień wejściowy -klawiatura Domyślny strumień wyjściowy ekran terminalu Większość programów wypisujących informacje wpisuje je do standardowego strumienia wyjściowego i pobiera dane ze standardowego strumienia wejściowego STDIN TERMINAL STDOUT STDERR HOST Strumień diagnostyczny wyjście zawsze na ekran 3
UNIX POWŁOKA STANDARDOWE STRUMIENIE I PLIKI. przykład Znak zachęty Polecenie: cal 9 2000 ma za zadanie przywołać kalendarz września roku 2000 STDIN - klawiatura STDOUT- terminal KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. Jeżeli użytkownik uzna, że standardowe skojarzenie strumieni wejścia/wyjścia (STDIN, STDOUT) nie odpowiada jego potrzebom, może spowodować skojarzenie alternatywne. Tę czynność zwykło się nazywać redyrekcją. Polecenie z redyrekcją strumienia STDOUT ma postać: Usuwa poprzednią zawartość pliku Jeśli plik o takiej nazwie jak podaliśmy Już istniał $ polecenie > plik lub $ polecenie >> plik Umieszcza wynik działania Poleceniew plikuplik (a nie jak to Ma miejsce domyślnie w terminalu) Nie usuwa poprzedniej zawartości pliku. Dołącza do poprzedniej zawartości pliku plik wynik działania polecenia polecenie TERMINAL STDIN STDOUT PLIK STERR HOST 4
KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. Polecenie z redyrekcją strumienia STDIN ma postać: $ polecenie < plik Dane na których zostanie wykonane polecenie polecenie zostaną pobrane z pliku plik (a nie jak domyślnie ze standardowego wejścia klawiatury) TERMINAL STDOUT STDIN PLIK STERR HOST KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. Polecenie z redyrekcją strumienia STDIN oraz STDOUT: $ polecenie <plikin >plikout Dane na których zostanie wykonane polecenie polecenie zostaną pobrane z pliku plikin, a wynik Operacji zostanie zapisany w pliku plikuot STDIN PLIK TERMINAL STERR HOST STDOUT PLIK 5
KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. przykład Polecenie: cal 9 2000 ma za zadanie przywołać kalendarz września roku 2000 STDOUT to jest ekran REDYREKCJA dla STDOUT: cal 9 2000 > wrzesien2000 ma za zadanie przywołać kalendarz września roku 2000 ale zapisać go w pliku o nazwie wrzesien2000 STDOUTto jest plik Zawartość pliku podglądamy poleceniem more wrzesien2000 KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. Polecenie: cat (domyślnie STDOUT=ekran, STDIN =klawiatura) Aby zamknąć STDIN w nowej linii wprowadź EOF (Ctrl-D) Redyrekcja: cat >komentarz STDOUT = plik komentarz STDIN = klawiatura Zadanie1: Połącz pliki komentarzi wrzesien2000 w jeden plik koniec0, a potem sprawdź wynik. Sprawdzenie zawartości pliku komentarz: more komentarz Zadanie2: Dopisz swoje imię i nazwisko na koniec pliku koniec0, umieść następnie wynik w pliku koniec1używając polecenia cat, a potem sprawdź wynik. 6
KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. Rozwiązanie 1. cat plik1 plik2 > plik3 Rozwiązanie 2b. cat >plik2 <plik1 (**) Rozwiązanie 2a. cat >> plik3 (*) (*) Konkatenacja dotyczy STDOUT ale w trybie append(dołącz) stąd znak redyrekcji >> (**)Konkatenacja dotyczy zarówno: STDIN skojarzone z koniec0 STDOUT skojarzone z koniec1 Kolejność argumentów dowolna!! Proces może być rozumiany jako pewne przekształcenie strumienia informacji, zgonie z poniższym schematem: polecenie filtruje informację napływającą (STDIN) w informację przekształconą (STDOUT) w sposób określony przez twórcę programu Przykład Polecenie wc filtruje informację ze strumienia STDIN przekazując tę informację w formie przetworzonej(stdout). cal 2000 > alfa przygotowanie pliku alfa z kalendarzem na rok 2000 wc <alfa STDIN to zawartość pliku alfa STDOUT to zestaw odpowiednio przetworzonych informacji ze strumienia STDIN: 40 linii, 463 wyrazy, 1778 znaków 7
Przykład Jak szybko się dowiedzieć, ile obiektów znajduje się we wskazanym katalogu (w przykładzie jest to katalog /home ). ls /home > listahome przygotowanie pliku listahome zawierającego listę obiektów w katalogu /home wc-w <listahome STDIN zawartość pliku listahome STDOUT ciąg liczb określających cechy informacji ze strumienia STDIN, czyli cechy tekstu zapisanego w pliku listahome more listahome wyświetla ono zawartość pliku listahome, która jest listą obiektów w katalogu /home (wykonano tutaj tylko dla sprawdzenia) Wady, przedstawionego rozwiązania na poprzednim slajdzie, rozwiązania to: śmieć w postaci pliku o nazwie listahome w katalogu aktualnym aby uzyskać jedną liczbę trzeba wykonać co najmniej 3 polecenia PYTANIE : Czy istnieje możliwość skrócenia tej operacji? ODPOWIEDŹ: TAK! Służy temu pojęcie POTOKU POTOK jest to sposób zapisu szeregu poleceń (minimum dwóch), w którym wyjście poprzedzającego procesu jest kierowane bezpośrednio na wejście procesu kolejnego. IDEA!!! 1 2 polecenie1argumenty polecenie2argumenty 8
Poprzedni przykład (wykorzystajmy potok) Jak szybko się dowiedzieć, ile obiektów znajduje się we wskazanym katalogu (w przykładzie jest to katalog /home ). ROZWIAZANIE POPRZEDNIE przygotowanie pliku listahome zliczenie ilości wyrazów w listahome usunięcie pliku listahome 3 Polecenia ROZWIAZANIE NOWE - POTOK STDIN polecenia wc STDOUTz polecenia ls(listuj) staje się 1 Polecenie Nie było konieczności tworzenia dodatkowego pliku!!!!! Zadanie 1 Zlicz ilu użytkowników w danym momencie pracuje w systemie. Wykorzystaj do tego celu poznane zagadnienie potoku. 9
Zadanie 2 Zlicz, ilu różnych użytkowników aktualnie pracuje w systemie cyfrowym rat. Wykorzystaj rozwiązanie zadania 1. Zadanie 3 Sprawdź czy użytkownik o określonym identyfikatorze np. szczurjest aktualnie w systemie, i jakiej/-ich linii tty używa. 10
Zadanie 4 Zlicz, ile plików we katalogu /home jest dostępne do zapisu dla wszystkich użytkowników z grupy others Zadanie 5 Zlicz, ile katalogów w katalogu /home to katalogi których właścicielem jest użytkownik o identyfikatorze root Rozwiązanie 5 11
UNIX POWŁOKA, REDYREKCJA, POTOK KONIEC 12