UNIX – POWŁOKA I POTOK
description
Transcript of UNIX – POWŁOKA I POTOK
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.
*BSD – Berkley Software Distribution
/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
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
Zlecenie jądru wykonanie odszukanego
programu
Przyjęcie od jądra odpowiedzi i
rozpoczęcie nowego cyklu
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ą:
Konieczne
ls, mkdir, rmchmod etc.
-l, -s, -a, o+w, -v, -C …
argument1 argument2 argument3 ...$ nazwapolecenia
plik1, plik2,plik3…plikn
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
STDERR
PROCES
HOST
STDIN
STDOUTTERMINAL
Strumień diagnostyczny – wyjście zawsze na ekran
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
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
Umieszcza wynik działaniaPolecenie w pliku plik (a nie jak to Ma miejsce domyślnie w terminalu)
Umieszcza wynik działaniaPolecenie w pliku plik (a nie jak to Ma miejsce domyślnie w terminalu)
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ć:
$ polecenie > plik lub $ polecenie >> plik
PROCES
HOST
TERMINALPLIKSTDIN STDOUT
STERR
Dołącza do poprzedniej zawartości pliku plik wynik działania polecenia
polecenie
Dołącza do poprzedniej zawartości pliku plik wynik działania polecenia
polecenie
Usuwa poprzednią zawartość pliku Jeśli plik o takiej nazwie jak podaliśmy
Już istniał
Usuwa poprzednią zawartość pliku Jeśli plik o takiej nazwie jak podaliśmy
Już istniał
Nie usuwa poprzedniej zawartości pliku.
Nie usuwa poprzedniej zawartości pliku.
UNIX – REDYREKCJA
KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. Polecenie z redyrekcją strumienia STDIN ma postać:
PROCES
HOST
TERMINALPLIKSTDOUT STDIN
STERR
$ 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)
Dane na których zostanie wykonane polecenie polecenie zostaną pobrane z pliku plik
(a nie jak domyślnie ze standardowego wejścia klawiatury)
UNIX – REDYREKCJA
KOJARZENIE STRUMIENIA WEJŚCIA WYJŚCIA. Polecenie z redyrekcją strumienia STDIN oraz STDOUT:
PROCES
HOST
TERMINAL
PLIKSTDIN
STERR
$ polecenie <plikin >plikout
Dane na których zostanie wykonane polecenie polecenie zostaną pobrane z pliku plikin, a wynik
Operacji zostanie zapisany w pliku plikuot
Dane na których zostanie wykonane polecenie polecenie zostaną pobrane z pliku plikin, a wynik
Operacji zostanie zapisany w pliku plikuot
STDOUT PLIK
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.
Polecenie: cat (domyślnie STDOUT=ekran, STDIN =klawiatura) Aby zamknąć STDIN w nowej linii wprowadź EOF (Ctrl-D)
Redyrekcja: cat >komentarz
STDIN = klawiatura STDOUT = plik komentarz
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
Rozwiązanie 2a.
Rozwiązanie 2b. cat >plik2 <plik1
cat >> plik3 (*)
(**)
(*) Konkatenacja dotyczy STDOUT ale w trybie
append (dołącz) stąd znak redyrekcji >>
(**) Konkatenacja dotyczy zarówno:
STDOUT skojarzone z koniec1 STDIN skojarzone z koniec0
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:
STDOUTSTDINPROCES
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
– STDIN to zawartość pliku alfawc <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)
UNIX – POTOKI
Wady, przedstawionego rozwiązania na poprzednim slajdzie, rozwiązania to: śmieć w postaci pliku o nazwie listahome w katalogu aktualnym
ZASTOSOWANIE POTOKÓW I FILTRÓW.
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.
PROCES1
STDOUT-1STDIN-1 PROCES2
STDOUT-2STDIN-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
Nie było konieczności tworzeniadodatkowego pliku!!!!!
STDIN polecenia wc STDOUT z polecenia ls (listuj) staje się
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 wc -l zlicza liczbę linii w pliku lub STDIN
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.
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
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" "
Potok, który jest rozwiązaniem poprzedniego zadania może zliczać wielokrotnie jednego użytkownika, gdy używa więcej niż jednej linii tty.
Stwórzmy zatem potok i zobaczmy jaki jest wynik
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.
who | cut -f1 -d" "
UNIX – POTOKI
ZASTOSOWANIE POTOKÓW I FILTRÓW.Rozwiązanie 2 – Etap 2
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).
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óre spowoduje przepisanie z STDIN na STDOUT tylko tych linii które się nie powtarzają.
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.
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
Na koniec musimy zliczyć odpowiednie linie ( wc -l )
ls –l /home
ls –l /home | grep ”^........w”
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 5Zlicz, 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
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
ls -l /home | grep "^d”
UNIX – SPRÓBUJ SAM
Zadanie 1
UNIX – POWŁOKA, REDYREKCJA, POTOK
KONIEC