Unix lab 4


MATERIAAY DO ĆWICZEC LABORATORYJNYCH
(4)
Przetwarzanie potokowe
Przetwarzanie potokowe polega na przekazywaniu strumienia danych wyjściowych z jednego
polecenia (jako jego wynik działania) do drugiego polecenia (jako jego dane wejściowe).
Symbolem przetwarzania potokowego jest symbol  | (pipe)
ls -l /usr | more Polecenie ls wysyła wyniki do programu more, który
wyświetla je strona po stronie.
ls -l | grep Mar Polecenie grep przetwarza wiersze generowane przez
polecenie ls i wyświetla tylko te wiersze, które
zawierają słowo Mar, czyli wyświetla pliki utworzone
w marcu. Polecenie grep w tym zastosowaniu jest
filtrem.
ls -l ~/.. | grep stud Wyświetlenie plików i katalogów z katalogu
nadrzędnego w stosunku do naszego katalogu
macierzystego należących do grupy stud.
who | sort Wyświetlenie posortowanej listy aktualnie
zalogowanych na stacji użytkowników.
Przekierowania  zmiana standardowych wejść i wyjść
Strumienie danych wejściowych, wyjściowych i diagnostyczny, związane z procesem, mogą
być skojarzone z plikami innymi niż domyślne na czas wykonywania się procesu. W
mechanizmie tym, zwanym przekierowaniem, wykorzystuje się następujące symbole (w
powłoce C):
> plik strumień danych wyjściowych kierowany jest do pliku.
Komunikaty o błędach (strumień diagnostyczny) nadal
kierowane są na ekran terminala.
>> plik strumień danych wyjściowych dopisywany jest na końcu pliku.
Komunikaty o błędach kierowane są na ekran terminala.
< plik strumień danych wejściowych kierowany jest do polecenia z
pliku (a nie z klawiatury). Komunikaty o błędach kierowane są
na ekran terminala.
>& plik strumień danych wyjściowych i diagnostyczny kierowany jest
do pliku.
Polecenie head  wyświetla określoną liczbę początkowych wierszy pliku.
Polecenie tail  wyświetla określoną liczbę końcowych wierszy pliku.
Polecenia head i tail są filtrami.
cd Utworzenie przykładowego pliku listap
ls -l > listap a następnie wyświetlenie początkowych wierszy
(domyślnie 10).
head listap
head -2 listap Wyświetlenie 2 początkowych wierszy pliku
listap
lub head -n 2 listap
tail listap Wyświetlenie końcowych wierszy pliku listap
(domyślnie 10)
tail -2 listap Wyświetlenie 2 końcowych wierszy pliku listap
tail +10 listap Wyświetlenie końcowych wierszy pliku listap.
Jeśli numer oznaczający początkowy wiersz
poprzedzony jest znakiem  + , wtedy numer ten
liczony jest od początku pliku. Jeśli numer ten
poprzedzony jest znakiem  - , wtedy liczony jest
od końca pliku.
head -n 10 listap | tail -5 Wyświetlenie wierszy pliku listap od 5 do 10-go.
Zadanie
Wyświetlić tylko trzeci wiersz pliku listap.
head -5 listap > p1 Zapisanie do pliku p1 pierwszych 5 wierszy pliku
listap a do pliku p2 - ostatnich 5 wierszy.
tail -5 listap > p2
cat p1 p2 | head -7 Polecenie cat skleja razem pliki p1 i p2. Zostanie
wyświetlony cały plik p1 i 2 początkowe wiersze
pliku p2.
Przeszukiwanie plików
grep [opcje] wyrażenie plik(i) Wyszukiwanie wzorca tekstowego, określonego przez
wyrażenie w plikach
grep Kolek historia.txt W pliku historia.txt zostaną wyszukane i wyświetlone
wszystkie wiersze zawierające słowo Kolek
Jeśli we wzorcu występuje spacja to ujmujemy go w
grep 2 Zaklad Maszyn2 historia.txt
apostrofy (prawe), lub w cudzysłowy
grep emulation /etc/* Wyszukanie, we wszystkich plikach katalogu /etc,
słowa emulation (do niektórych plików użytkownik
może nie mieć dostępu)
grep emulation /etc/* > xp Wyniki działania polecenia zostaną zapisane do pliku
xp, natomiast komunikaty o błędach są kierowane na
cat xp
ekran i nie zaśmiecają wyników (strumień danych
wyjściowych i strumień diagnostyczny o błędach są
rozdzielone)
Wyrażenia regularne
Elementarne wyrażenia regularne:
A c 2 ? 8 (pojedyncze znaki)
Zastosowanie symboli specjalnych:
[abc]  jeden znak z podanego zbioru znaków
[0-9]  jeden znak z podanego zakresu znaków dozwolonych (tu: dowolna cyfra)
[^0-9]  symbol ^ oznacza dopełnienie podanego zbioru znaków, czyli negację.
Przykład oznacza pojedynczy znak nie będący cyfrą
[^a-zA-Z]  dowolny znak oprócz liter
. (kropka)  dowolny znak np. 3, b
^ (poza nawiasami)  oznacza początek linii, np. ^K  wiersz zaczynający się na literę K
$  oznacza koniec linii, np. unix$  wiersz kończący się słowem  unix
*  operator powtórzenia (dowolną liczbę razy) wyrażenia znajdującego się
po lewej stronie, np.
w*  oznacza np. www, albo wwwww itp.
\{m,n\}  operator powtórzenia (co najmniej m razy i co najwyżej n razy) wyrażenia
znajdującego się po lewej stronie
\{m\}  Jeżeli występuje tylko m, oznacza to, że wyrażenie musi być dopasowane
dokładnie m razy
\{m,\} -Jeżeli podano m z przecinkiem, zaś pominięto n, to wyrażenie będzie
powtórzone co najmniej m razy
np. m[1-9]0\{0,1\} --> nazwy m1,m2,...,m10
Podany wzorzec pasuje np. do słów: przemysl,
grep 2 prze[nmos]2 historia.txt
przestrzeni, przeszli
Symbol  ^ oznacza zaprzeczenie tzn. zbiór znaków,
grep 2 la[^wbd]2 historia.txt
które nie mogą wystąpić w danej pozycji
Symbol ^ oznacza tu pierwszy znak w wierszu. Zostaną
grep 2 ^[Pp]2 historia.txt
wyświetlone więc wszystkie wiersze zaczynające się na
literę P lub p. (Symbol ^ umieszczony wewnątrz
nawiasów kwadratowych oznacza zaprzeczenie)
Zostaną wyświetlone wszystkie wiersze nie zaczynające
grep 2 ^[^Pp]2 historia.txt
się od litery P lub p.
Symbol $ oznacza koniec wiersza.. Zostaną więc
grep 2 roku $2 historia.txt
wyświetlone wszystkie wiersze kończące się słowem  roku 
Symbol  . (kropka) oznacza dowolny znak we wzorcu.
grep 2 w..d2 historia.txt
Wzorzec pasuje więc np. do słów  naukowo-
dydaktyczny .
Symbol  \ (backslash) wyłącza specjalne znaczenie
grep 2 prof\.2 historia.txt
kropki. Kropka będzie więc należała do ciągu
poszukiwanych znaków.
Ignorowane będą małe i duże litery
grep  i 2 masz2 historia.txt
Wyszukane zostaną wiersze, które nie zawierają
grep  v 2 prof2 historia.txt
podanego słowa.
Przy każdym wierszu zostaną podane ich numery.
grep  n 2 Masz2 historia.txt
grep  l ko * Wyszukanie plików zawierających podany napis
i wyprowadzenie tylko nazw plików.
Jeśli argumentem polecenia grep jest więcej niż jeden
grep 2 masz2 *
plik, wtedy każdy wyświetlany wiersz jest poprzedzany
nazwą pliku, z którego pochodzi.
grep byl historia.txt Wyszukanie wierszy, które zawierają napis  byl .
Znajdą się więc też linie zawierające słowa np.  bylej ,
 były itp.
grep -w byl historia.txt Wyszukanie pełnych słów. Wiersze ze słowami np.
 bylej ,  byly  będą odrzucone
find katalog [kryterium] [akcja] Poszukiwanie plików według zadanych kryteriów
find /etc -name profile -print Wyszukanie plików o nazwie profile podanej po
słowie kluczowym -name począwszy od katalogu
/etc, we wszystkich jego podkatalogach oraz
wypisanie lokalizacji tych plików (-print) na
ekranie terminala.
Słowo kluczowe (-print) jest opcjonalne i może
być opuszczone. W starszych wersjach Solarisa
jest obligatoryjne.
Zadanie
Przeszukać katalog /etc w celu odnalezienia pliku hosts
Wyszukanie wszystkich plików o nazwach
find ~ -name 2 t*2
zaczynających się literą  t w katalogu
macierzystym. Wzorzec nazw plików powinien
być zamaskowany przed interpretacją przez
powłokę (objęcie go w prawe apostrofy lub w
cudzysłów). Będzie interpretowany przez
program find.
cd ~/.. Wyszukanie wszystkich plików o nazwach
zawierających gdziekolwiek napis  est w
find d1 d2 d3 -name 2 *est*2
katalogach prywatnych użytkowników d1, d2,
d3 (zamiast katalogów d1, d2, d3 - podać
podać kilka katalogów domowych katalogi macierzyste kolegów pracujących na tej
użytkowników pracujących na tej
samej stacji np. m1, m2, m3 w zależności od
samej stacji np. m1 m2 ...
nazwy macierzystej stacji).
W przykładzie tym podano listę katalogów do
przeszukania, a nie pojedynczy katalog.
find / -group nazwa_grupy | more znalezienie wszystkich plików, które należą do
grupy użytkowników o podanej nazwie.
Aby wykonać to polecenie należy ustalić (przez
wydanie odpowiedniego polecenia np. id lub
groups) do jakiej grupy należymy
find . Jeśli nie podano jakie pliki należy szukać,
przyjmuje się, że wszystkie. Polecenie to
wypisze zatem na ekranie wszystkie pliki
w bieżącym katalogu (kropka) i w jego
podkatalogach
W następnych poleceniach, kryterium wyszukiwania plików związane jest z czasem
modyfikacji lub dostępu do pliku lub katalogu
find ~ -atime +10 Parametr  atime pozwala na wyszukiwanie
plików według czasu ostatniego odwołania
-atime +10  ponad 10 dni temu
(dostępu) do nich. Na przykład plików
-atime 10  dokładnie 10 dni temu
odczytywanych lub uruchamianych (jeśli są
-atime -10  mniej niż 10 dni temu
programami). Znak + przed liczbą 10 oznacza, że
-atime 0  dzisiaj
interesują nas pliki, do których odwoływano się
w czasie ponad 10 dni temu. Jeśli zamiast plusa
użyjemy minus, zostałyby wypisane nazwy
plików do których odwoływano się w ciągu
ubiegłych 10 dni.
find ~ -mtime 1 Polecenie wypisuje nazwy wszystkich plików,
których zawartość została zmieniona od wczoraj.
find ~ -ctime +10 To polecenie wypisuje nazwy wszystkich plików,
których i-węzeł nie został zmieniony w ciągu
ostatnich 10 dni. Chodzi więc o pliki dla których
nie zmienił się właściciel, grupa, prawa itp.
find / -user użytkownik Wyszukanie wszystkich plików należących do
podanego użytkownika począwszy od katalogu
głównego. Należy podać właściwą nazwę
Np. a1, a2,
użytkownika.
d1, d2, ...
find ~ -perm 777 Polecenie to wypisze listę wszystkich plików
w drzewie katalogów użytkownika, które mają
prawa dostępu ustawione na 777, tzn. są to pliki
do których wszyscy mają wszystkie prawa.
find . -size +100k Wyszukanie plików, których rozmiary
przekraczają 100 kB.
Wyszukanie plików o rozmiarach między 10 kB a
find . -size +10k -size -20k
20 kB. Symbol  + oznacza, dolną granicę
( więcej niż ), a  -  górną granicę ( mniej niż ).
Jeśli nie użyjemy znaków  + albo  - , to znaczy,
że chodzi nam o dokładny rozmiar.
find . -size 14c Wyszukanie plików o rozmiarze dokładnie 14
bajtów. Symbol  c oznacza znak (ang. character),
który ma rozmiar jednego bajta.
find /usr -type d -name  man[0-9] Istnieje możliwość łączenia kilku kryteriów
poszukiwania.
Opcja  -type d powoduje wyszukanie tylko
katalogów.
 -type l wyszukanie dowiązań symbolicznych
 -type f wyszukanie zwykłych plików
find ~ \( -name  *test*  o  name  *.txt \) Polecenie to znajduje wszystkie pliki
począwszy od katalogu
macierzystego, które spełniają
Znak \ wyłącza specjalne
Operator logiczny
podane warunki tzn. ich nazwy
znaczenie nawiasów (), które
alternatywy
zawierają słowo  test , lub kończą
w ten sposób nie będą
(logiczne  lub ,  or ).
interpretowane przez się na  .txt .
-a - operator
powłokę, lecz przez program
koniunkcji ( i ,  and )
find. Nawiasy obejmują
wyrażenie logiczne
find ~ -name  *.txt  exec ls  l {} \; Słowo kluczowe exec spowoduje, że na każdym
znalezionym pliku zostanie wykonane podane po
nim polecenie (ls -l). Parametr  exec wymaga
użycia sekwencji znaków {} \; jako argumentu
wywoływanego polecenia. Pomiędzy nawiasy
klamrowe, polecenie find podstawi aktualnie
znalezioną nazwę pliku. Średnik sygnalizuje, że w
tym miejscu kończą się argumenty polecenia find.
Średnik jest jednak znakiem specjalnym dla
powłoki, dlatego należy go zamaskować ( \ ).
find / -name xterm > wynik & Ponieważ wykonanie polecenia find może trwać
długo (w przykładzie, będzie przeszukiwany cały
dysk) więc wygodnie jest uruchomić to polecenie
w  tle (symbol &), a wynik zapisać w pliku
(wynik).
Praca programu  w tle nie blokuje terminala i
możliwe jest wykonywanie w tym czasie innych
poleceń.
Komunikaty o błędach wyprowadzane są jednak
w dalszym ciągu na ekran (symbol  > nie
dotyczy komunikatów o błędach)
cat wynik W pliku wynik zapisana jest lista znalezionych
plików xterm
find / -name xterm >& wynik & Symbol  >& kieruje obydwa strumienie: danych
wyjściowych oraz diagnostyczny (z komunikatami
o błędach) - do pliku.
Teraz jednak plik wynik może być duży.
cat wynik
cat wynik | grep xterm Odfiltrowanie interesującej nas informacji.
Wypisane zostaną tylko wiersze zawierające
słowo xterm
(find / -name xterm > wynik) >& bledy & To jest sposób na zapisanie
wyników w pliku wynik, a błędów
cat wynik
w pliku bledy. Użyte nawiasy -
cat bledy
grupują polecenia. Przeanalizować
to polecenie
(find / -name xterm > /dev/pts/1) >& /dev/null & Zastosowanie plików specjalnych:
/dev/pts/1 i /dev/null spowoduje,
że na ekranie zobaczymy tylko
wyniki, nie zaśmiecone przez
komunikaty o błędach.
Zamiast nazwy  /dev/pts/1 należy
użyć nazwę swojego terminala
przy którym pracujemy (polecenie
tty). Strumień komunikatów o
błędach skierowano do urządzenia
typu  czarna dziura
reprezentowanego przez plik
specjalny /dev/null.
Zadanie:
Wyszukać wszystkie nazwy (dowiązania sztywne) pliku compress
a) znalezć położenie pliku compress (za pomocą polecenia np. which lub find)
b) znalezć jego numer i-węzła (polecenie ls -i)
c) wyszukać wszystkie nazwy plików o tym samym numerze i-węzła (polecenie find
z opcją -inum)
d) sprawdzić, czy znalezione pliki należą do tego samego systemu plików (inaczej, będą
to różne pliki), (polecenie df -k)


Wyszukiwarka

Podobne podstrony:
Unix lab 9
Unix lab 7
Unix lab 10
Unix lab 3
Unix lab 1
Unix lab 5
Unix lab 8
Lab UNIX files and directories management
Lab Wprowadzenie do systemu UNIX
Lab Introductin to UNIX System
Lab Wprowadzenie do systemu UNIX
Lab cpp
lab 2
T2 Skrypt do lab OU Rozdział 6 Wiercenie 3
IE RS lab 9 overview
lab pkm 3
lab chemia korozja
lab tsp 3

więcej podobnych podstron