280 likes | 460 Views
UNIX – POWŁOKA I POTOK. WYKŁAD 5. Powłoka, redyrekcja, potok. UNIX – POWŁOKA.
E N D
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
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
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 UNIX – POWŁOKA Powłoka pracuje w cyklu. Na jeden cykl powłoki składają się: 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.
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 PROCES TERMINAL STDOUT STDERR HOST Strumień diagnostyczny – wyjście zawsze na ekran
UNIX – POWŁOKA STANDARDOWE STRUMIENIE I PLIKI. • przykład Polecenie: cal 9 2000 ma za zadanie przywołać kalendarz września roku 2000 Znak zachęty STDIN - klawiatura STDOUT- terminal
UNIX – POWŁOKA STANDARDOWE STRUMIENIE I PLIKI. • przykład Polecenie: cal 9 2000 ma za zadanie przywołać kalendarz września roku 2000 Znak zachęty STDIN - klawiatura STDOUT- terminal
UNIX – REDYREKCJA 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ł Nie usuwa poprzedniej zawartości pliku. $ polecenie > plik lub $ polecenie >> plik Umieszcza wynik działania Polecenie w pliku plik (a nie jak to Ma miejsce domyślnie w terminalu) Dołącza do poprzedniej zawartości pliku plik wynik działania polecenia polecenie PLIK STDIN STDOUT PROCES TERMINAL STERR HOST
UNIX – REDYREKCJA 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) PLIK STDOUT STDIN PROCES TERMINAL STERR HOST
UNIX – REDYREKCJA 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 PLIK STDIN PROCES TERMINAL PLIK STDOUT STERR HOST
UNIX – REDYREKCJA 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 STDOUT to jest plik • Zawartość pliku podglądamy poleceniem more wrzesien2000
UNIX – REDYREKCJA 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 STDOUT to jest plik • Zawartość pliku podglądamy poleceniem more wrzesien2000
UNIX – REDYREKCJA KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. Aby zamknąć STDIN w nowej linii wprowadź EOF (Ctrl-D) Polecenie: cat (domyślnie STDOUT=ekran, STDIN =klawiatura) Redyrekcja: cat >komentarz STDOUT = plik komentarz STDIN = klawiatura Sprawdzenie zawartości pliku komentarz: more komentarz Zadanie1: Połącz pliki komentarz i wrzesien2000 w jeden plik koniec0 , a potem sprawdź wynik. Zadanie2: Dopisz swoje imię i nazwisko na koniec pliku koniec0, umieść następnie wynik w pliku koniec1 używając polecenia cat, a potem sprawdź wynik.
UNIX – REDYREKCJA KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. (**) Rozwiązanie 1. cat plik1 plik2 > plik3 cat >plik2 <plik1 Rozwiązanie 2b. 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 !!
UNIX – REDYREKCJA ZASTOSOWANIE POTOKÓW I FILTRÓW. • Proces może być rozumiany jako pewne przekształcenie strumienia informacji, • zgonie z poniższym schematem: PROCES STDIN STDOUT • 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
UNIX – REDYREKCJA ZASTOSOWANIE POTOKÓW I FILTRÓW. 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)
PROCES 1 STDIN-1 STDOUT-1 UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. 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 !!! PROCES 2 STDIN-2 STDOUT-2 polecenie1 argumenty | polecenie2 argumenty
UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. 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 • STDINpolecenia wc • STDOUTz polecenia ls (listuj) staje się Nie było konieczności tworzenia dodatkowego pliku!!!!! 1 Polecenie
UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. Zadanie 1 Zlicz ilu użytkowników w danym momencie pracuje w systemie. Wykorzystaj do tego celu poznane zagadnienie potoku. Rozwiązanie 1 • Polecenie who produkuje listę użytkowników, którzy używają choć 1 linię tty, ale jeśli użytkownik używa ich więcej niż jedną, to i tak wszystkie są prezentowane w liście. • Polecenie wc -l zlicza liczbę linii w pliku lub STDIN • Wystarczy stworzyć potok który poda poszukiwaną wartość who | wc -l
UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. Zadanie 2 Zlicz, ilu różnych użytkowników aktualnie pracuje w systemie cyfrowym rat. Wykorzystaj rozwiązanie zadania 1. Rozwiązanie 2 – Etap 1 • Potok, który jest rozwiązaniem poprzedniego zadania może zliczać wielokrotnie jednego użytkownika, gdy używa więcej niż jednej linii tty. • Musimy znaleźć taki filtr, który przed zliczeniem linii tty w liście przygotowanej przez • polecenie who, usunie wielokrotnie powtarzającą się linię z identyfikatorem użytkownika. • Rozpoczynamy od wycięcia z każdej linii listy przygotowanej przez polecenie who tylko identyfikatora użytkownika. Polecenie, które wycina z każdej linii pierwsze pole zakończone delimiterem spacją ma następującą postać: cut -f1 -d" " • Stwórzmy zatem potok i zobaczmy jaki jest wynik who |cut -f1 -d" "
UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. Rozwiązanie 2 – Etap 2 • W celu obliczenia ilości użytkowników, musimy usunąć z poprzednio przygotowanej listy identyfikatory, które się powtarzają. Wykorzystamy do tego polecenie: uniq, którespowoduje przepisanie z STDIN na STDOUT tylko tych linii które się nie powtarzają. • Warunkiem właściwego zadziałania polecenia uniq, jest to by powtarzające się linie następowały po sobie. W tym celu musimy przesortować STDIN, za pomocą polecenia sort -r (-r odwrotna kolejność sortowania - aby widać było efekt). • Potok dający listę unikalnych • identyfikatorów użytkowników ma postać. who |cut -f1 -d" "| sort -r | uniq • Rozwiązanie zadania: who |cut -f1 -d" "| sort | uniq | wc -l
UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. Zadanie 3 Sprawdź czy użytkownik o określonym identyfikatorze np. szczur jest aktualnie w systemie, i jakiej/-ich linii tty używa. Rozwiązanie 3 • Polecenie who podaje listę wszystkich aktywnych użytkowników • Z tej listy musimy wybrać tylko takie linie gdzie występuje podany identyfikator użytkownika np. szczur. W tym celu wykorzystamy polecenie: grep " ^szczur " Wytnie z STDIN i przekopiuje na STDOUT linie w których identyfikator szczur pojawi się na początku linii • Rozwiązanie zadania: who |grep " ^szczur "| cut -f1-6-d" "
UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. Zadanie 4 Zlicz, ile plików we katalogu /home jest dostępne do zapisu dla wszystkich użytkowników z grupy others Rozwiązanie 4 • Polecenie ls -l /home listuje zawartość katalogu /home. Jeśli w polu 9 ( 9-ty znak linii) jest litera w to użytkownicy z grupy others mają prawo zapisu w odniesieniu do tego pliku. ls –l /home • Z tej listy musimy wybrać tylko takie linie, gdzie w polu 9 jest litera w Polecenie: • grep "^.......w" właśnie to wykona w odniesieniu do STDIN ls –l /home | grep ”^........w” • Na koniec musimy zliczyć odpowiednie linie ( wc -l ) ls –l /home | grep ”^........w” | wc -l
UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. Rozwiązanie 4 – przykładowe wywołanie potoku
UNIX – POTOKI ZASTOSOWANIE POTOKÓW I FILTRÓW. 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 • Polecenie ls -l /home listuje zawartość katalogu /home. Jeśli w polu 1 ( 1-szy znak linii) jest litera d to jest to opis katalogu • Z tej listy musimy wybrać tylko takie linie, gdzie w polu 1 jest litera d ls -l /home |grep "^d” • Wybieramy tylko takie, gdzie pojawia się w polu właściciela nazwa root. Wcześniej obetnijmy listę do pozycji właściciela • filtrem cut , i dopiero wybierajmy linie zawierające root ls -l /home |grep "^d" | cut –f1-6 –d” ” | grep„root” | wc -l
UNIX – SPRÓBUJ SAM Zadanie 1