UNIX – POWŁOKA I POTOK

28
UNIX – POWŁOKA I POTOK WYKŁAD 5 Powłoka, redyrekcja, potok

description

UNIX – POWŁOKA I POTOK. WYKŁAD 5. Powłoka, redyrekcja, potok. UNIX – POWŁOKA. - PowerPoint PPT Presentation

Transcript of UNIX – POWŁOKA I POTOK

Page 1: UNIX – POWŁOKA I POTOK

UNIX – POWŁOKA I POTOK

WYKŁAD 5

Powłoka, redyrekcja, potok

Page 2: UNIX – POWŁOKA I 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

Page 3: UNIX – POWŁOKA I POTOK

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

Page 4: UNIX – POWŁOKA I POTOK

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.

Page 5: UNIX – POWŁOKA I POTOK

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

Page 6: UNIX – POWŁOKA I POTOK

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

Page 7: UNIX – POWŁOKA I POTOK

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

Page 8: UNIX – POWŁOKA I POTOK

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

Page 9: UNIX – POWŁOKA I POTOK

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.

Page 10: UNIX – POWŁOKA I POTOK

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)

Page 11: UNIX – POWŁOKA I POTOK

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

Page 12: UNIX – POWŁOKA I POTOK

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

Page 13: UNIX – POWŁOKA I POTOK

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

Page 14: UNIX – POWŁOKA I POTOK

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.

Page 15: UNIX – POWŁOKA I POTOK

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 !!

Page 16: UNIX – POWŁOKA I POTOK

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

Page 17: UNIX – POWŁOKA I POTOK

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)

Page 18: UNIX – POWŁOKA I POTOK

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

Page 19: UNIX – POWŁOKA I POTOK

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

Page 20: UNIX – POWŁOKA I POTOK

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

Page 21: UNIX – POWŁOKA I POTOK

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" "

Page 22: UNIX – POWŁOKA I POTOK

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

Page 23: UNIX – POWŁOKA I POTOK

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" "

Page 24: UNIX – POWŁOKA I POTOK

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

Page 25: UNIX – POWŁOKA I POTOK

UNIX – POTOKI

ZASTOSOWANIE POTOKÓW I FILTRÓW.

Rozwiązanie 4 – przykładowe wywołanie potoku

Page 26: UNIX – POWŁOKA I POTOK

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”

Page 27: UNIX – POWŁOKA I POTOK

UNIX – SPRÓBUJ SAM

Zadanie 1

Page 28: UNIX – POWŁOKA I POTOK

UNIX – POWŁOKA, REDYREKCJA, POTOK

KONIEC