Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.41 KB | None | 0 0
  1. Instrukcja do zadań:
  2.  
  3. We/wy procesów, przetwarzanie potokowe, filtry - instrukcja
  4. Przekierowywanie standardowego wejścia i wyjścia procesów
  5. Przetwarzanie potokowe
  6. Operacje na plikach z użyciem filtrów
  7. Wyrażenia regularne
  8. Standardowe wejście/wyjście
  9. Dla każdego procesu system tworzy:
  10.  
  11. - standardowy strumień wejściowy (ang.standard input), reprezentujący urządzenia wejściowe, np. klawiaturę i dysk,
  12.  
  13. - standardowy strumień wyjściowy (ang. standard output), którym może być terminal (monitor komputera) lub plik oraz
  14.  
  15. - strumień diagnostyczny (ang. standard error).
  16.  
  17. Strumienie wejściowy, wyjściowy i diagnostyczny oznaczane są odpowiednio: stdin, stdout, stderr. Każdy strumień ma odpowiadające mu wartości: stdin – 0, stdout – 1 i stderr – 2.
  18.  
  19. Standardowe strumienie procesów charakteryzują się następującymi cechami:
  20.  
  21. Dane odczytywane są poprzez standardowe wejście.
  22. Dane wypisywane są na standardowym wyjściu lub standardowym wejściu diagnostycznym.
  23. Raz przeczytanych danych nie można ponownie przeczytać.
  24. Działanie standardowych strumieni ilustruje program cat. Uruchomienie tego programu bez argumentów powoduje przepisanie tego, co zostanie wpisane z klawiatury na ekran.
  25.  
  26. Polecenie to można zakończyć za pomocą kombinacji Ctrl-D.
  27.  
  28. Przekierowanie wejścia/wyjścia procesów
  29. Istnieje możliwość przeadresowania strumieni wyjściowych i wejściowych. Zmianę standardowego wejścia, wyjścia i wyjścia diagnostycznego można dokonać za pomocą operatorów: >, <, >>, <<. Operator > powoduje przeadresowanie standardowego wyjścia, czyli utworzenie pliku i zapisanie w nim tego, co proces wypisałby na standardowym wyjściu. Jeśli wskazany plik już istnieje, zostanie on usunięty i utworzony na nowo.Przykład:
  30.  
  31. $ cat > plik.txt
  32. To jest plik.
  33. Ala ma kota.
  34. ^D (ctrl-d)
  35. Operator < powoduje przeadresowanie standardowego wejścia procesu, czyli pobranie danych wejściowych ze wskazanego pliku:
  36.  
  37. cat < plik.txt
  38. To jest plik.
  39. Ala ma kota.
  40. Operatory > i < można używać jednocześnie, przeadresowując zarówno wyjście jak i wejście.
  41. Przykład - skopiowanie zawartości pliku plik.txt do pliku plik_nowy.txt:
  42.  
  43. cat < plik.txt > plik_nowy.txt
  44. Operator >> przeadresowuje standardowe wyjście, dopisując wyniki działania programu na końcu istniejącego pliku:
  45.  
  46. cat >> plik.txt
  47. Kot ma Ale.
  48. ^D
  49. Operator << powoduje, że do procesu zostaną przekazane dane ze standardowego wejścia aż do napotkania wskazanego napisu:
  50.  
  51. cat << przerwa
  52. > Ala ma kota
  53. > Kot ma Ale
  54. > przerwa
  55. Ala ma kota
  56. Kot ma Ale.
  57. Niektóre polecenia równolegle z wyświetlanymi na standardowym wyjściu informacjami wysyłają dodatkowe informacje informujące o błędach przetwarzania na standardowe wyjście diagnostyczne. Istnieje możliwość niezależnego przekierowania strumienia diagnostycznego, poprzez operator > poprzedzony numerem wyjścia diagnostycznego, czyli 2:
  58.  
  59. cat plik1.txt plik2.txt 2> plik3.err
  60. Polecenie to spowoduje wyświetlenie zawartości plików plik1.txt i plik2.txt oraz zapisanie informacji o błędach do pliku plik3.err. W celu pominięcia komunikatów o błędach, wyjście diagnostyczne można przeadresować
  61.  
  62. do pliku /dev/null. Wszystko co zostaje wysłane do pliku null, znajdującego się w katalogu /dev zostanie utracone:
  63.  
  64. cat plik1.txt plik2.txt> plik3.txt 2> /dev/null
  65. Polecenie to spowoduje zapisanie zawartości plików plik1.txt i plik2.txt do pliku plik3.txt oraz jednocześnie zignoruje komunikaty o błędach. W przypadku gdy strumień diagnostyczny ma trafiać tam, gdzie strumień wyjściowy,
  66.  
  67. należy użyć zapisu 2>&1:
  68.  
  69. cat plik1.txt plik2.txt> plik3.txt 2>&1
  70. Przetwarzanie potokowe
  71. Standardowe wyjście jednego procesu możne być połączone ze standardowym wejściowym innego procesu, tworząc tzw. potok pomiędzy tymi procesami. Przetwarzanie potokowe polega na buforowaniu przez system danych produkowanych przez pierwszy proces i następnie odczytywaniu tych danych przez drugi proces. Innymi słowy proces w potoku czyta dane z wejścia, które zostało przeadresowane na wyjście procesu poprzedniego. W potoku może brać udział jednocześnie kilka procesów. Poniżej podano przykłady potoków:
  72.  
  73. Proces ls podaje wynik procesowi more, który w efekcie wyświetla listing strona po stronie:
  74. ls – al|more
  75. Proces who podaje wynik procesowi sort, podając posortowaną listę pracowników pracujących w systemie:
  76. who|sort
  77. Proces ps podaje wynik procesowi grep, wyszukując na liście procesów linii zawierających słowo csh:
  78. ps -ef|grep csh
  79. Proces ls podaje wynik procesowi sort, który następnie podaje wynik procesowi head, wyświetlając pierwszych 10 najmniejszych plików:
  80. ls -l /usr/bin|sort -bnr +4 -5|head.
  81. Filtry
  82. Istnieją programy, których zadaniem jest odczyt danych ze standardowego wejścia, przetworzenie tych danych i ich zapis na standardowe wyjście. Programy takie nazywane są filtrami i są szeroko wykorzystywane w przetwarzaniu potokowym. Poniżej przedstawiono najczęściej wykorzystywane filtry:
  83.  
  84. more – wyświetla zawartość pliku ze stronicowaniem.
  85. -n definiuje rozmiar strony (n linii)
  86. +n określa od której linii rozpocznie się wyświetlanie
  87. cat – najprostszy filtr, nie wprowadzający zmian do przetwarzanych danych. Użyteczne przełączniki (opcje):
  88. –s z paru pustych linii robi jedna
  89. –n numeruje wszystkie linie
  90. –b numeruje niepuste linie
  91. -A pokazuje znaki specjalne
  92. head – wyświetla początkową część pliku o podanej nazwie lub danych wejściowych otrzymanych z potoku gdy nazwa pliku nie jest podana. Standardowo wyświetlanych jest pierwszych 10 linii odczytanych danych. Używając przełączników liczbę tą można zmienić:
  93. –c pozwala określić liczbę wyświetlanych znaków
  94. –n pozwala określić liczbę wyświetlanych linii
  95. tail – wyświetla końcową część pliku o podanej nazwie lub danych wejściowych otrzymanych z potoku, gdy nazwa pliku nie jest podana,. Standardowo wyświetlanych jest ostatnich 10 linii danych. Używając przełączników liczbę tą można zmienić:
  96. –c pozwala określić liczbę wyświetlanych znaków
  97. –n pozwala określić liczbę wyświetlanych linii
  98. –f powoduje, że dane po zapisaniu ich do pliku są wyświetlane na standardowym wyjściu
  99. sort – służy do sortowania danych wejściowych, które domyślnie sortowane są leksykograficznie. Sortowanie danych odbywa się liniami. Najważniejsze przełączniki:
  100. –n pozwala sortować numerycznie
  101. –b ignoruje przy sortowaniu spacje znajdujące się na początku linii
  102. -t pozwala zmienić domyślny separator kolumn, którym są znaki tabulacji lub spacji
  103. -f pozwala ignorować przy sortowaniu wielkość liter
  104. -r odwraca kolejność sortowania
  105. +liczba pozwala by sortowanie odbywało się względem dowolnej kolumny (a nie początku linii). Liczba określa liczbę kolumn pominiętych przy sortowaniu
  106. -o nazwa_pliku zapisuje rezultat sortowania do pliku o podanej nazwie
  107. uniq – umozliwia usunięcie powtarzających się, sąsiadujących linii danych wejściowych.
  108. –d wyświetla z danych wejściowych tylko linie powtarzające się
  109. –u wyświetla z danych wejściowych tylko linie unikalne
  110. –c zlicza liczbę powtórzeń
  111. wc – zlicza znaki, słowa i linie w podanych danych wejściowych. Standardowo wyświetlane są wszystkie trzy wartości, ale można to zmienić:
  112.  
  113. –l pozwala zliczać tylko linie
  114. –w pozwala zliczać tylko słowa
  115. -c pozwala zliczać tylko znaki
  116. tr – pozwala zamienić łańcuchy tekstowe, które podawane są jako argumenty wejściowe. Znaki z pierwszego łańcuch zamieniane są na znaki z drugiego łańcucha. Dodatkowo, dzięki przełącznikom możliwe jest następujące przetwarzanie:
  117. –d usuwa podane po przełączniku znaki
  118. –s usuwa powtarzające się sąsiednie znaki
  119.  
  120. Przykład:
  121.  
  122. tr „a-z” „A-Z” < plik.txt - zamienia małe litery na duże podczas wysyłania zawartości pliku plik.txt na stdout
  123. cut – pozwala wyświetlić fragmenty wierszy danych wejściowych. Zwykle jest to wycinanie odpowiednich kolumn. Opcje:
  124.  
  125. –c pozwala określić pozycję znakowe wycinanych fragmentów wierszy, np. -c 1-72 wyświetla pierwsze 72 znaki każdego wiersza
  126. –f pozwala określić numery wycinanych kolumn, np. -f1,3-5,10 wyświetla pierwszą kolumnę, kolumny od 3 do 5 oraz kolumnę 10.
  127. –d pozwala zmienić domyślny separator kolumn, którym jest znak tabulacji
  128. grep [opcje] wyrażenie [lista_plików]- przeszukuje dane pochodzące ze standardowego wejścia lub pliki wyszczególnione na liście plików, wypisując tylko linie zawierające szukane wyrażenie. Szukane wyrażenie zapisywane jest za pomocą tzw. wyrażenia regularnego.Najważniejsze przełączniki:
  129.  
  130. -v wyszukuje linie nie zawierające szukanego wzorca
  131. -c podaje liczbę odszukanych wyrażeń
  132. -c podaje liczbę odszukanych wyrażeń
  133. -i ignoruje wielkość liter przy wyszukiwaniu
  134. -n wyświetla numery linii zawierających dany wzorzec
  135. -h przy wyświetlaniu linii zawierających szukany wzorzec pomija nazwy plików
  136. -r pozwala na przeszukiwanie rekurencyjne, np. grep wzorzec –r katalog
  137. -l pokazuje nazwy plików zawierających określony wzorzec
  138. -L pokazuje nazwy plików nie zawierających określonego wzorca
  139. Zasady konstrukcji podstawowych wyrażeń regularnych opisujących szukany wzorzec są następujące:
  140.  
  141. . reprezentuje dowolny znak
  142. [abc] oznacza jeden ze znaków a, b lub c
  143. [abc] oznacza jeden ze znaków a, b lub c
  144. [a-z] oznacza jeden ze znaków z podanego zbioru
  145. [^0-9] oznacza dopełnienie podanego zbioru
  146. * reprezentuje powtórzenie dowolną liczbę razy wyrażenia znajdującego się bezpośrednio po lewej stronie np. (A[a]* określa A, Aa, Aaa,Aaaaaaaaa, itd.), zatem:
  147. .* oznacza dowolny ciąg znaków
  148. ^ reprezentuje początek linii
  149. $ reprezentuje koniec linii
  150. a\{n\} oznacza n-krotne wystąpienie znaku występującego bezpośrednio po lewej stronie nawiasów
  151. a\{n, \} oznacza co najmniej n-krotne wystąpienie znaku występującego bezpośrednio po lewej stronie nawiasów
  152. a\{, m\} oznacza co najwyżej m-krotne wystąpienie znaku występującego bezpośrednio po lewej stronie nawiasów
  153. a\{n,m\} oznacza co najmniej n-krotne i co najwyżej m-krotne wystąpienie znaku występującego bezpośrednio po lewej stronie nawiasów
  154.  
  155. Dodatkowo istnieje specjalna grupa znaków mająca znaczenie specjalne. Do znaków tych należą: . * {} () ^ [ ] \ < > $ . W celu wykorzystania tych znaków jako zwykłych znaków, należy je poprzedzić znakiem “\”.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement