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 9Unix lab 7Unix lab 10Unix lab 3Unix lab 1Unix lab 5Unix lab 8Lab UNIX files and directories managementLab Wprowadzenie do systemu UNIXLab Introductin to UNIX SystemLab Wprowadzenie do systemu UNIXLab cpplab 2T2 Skrypt do lab OU Rozdział 6 Wiercenie 3IE RS lab 9 overviewlab pkm 3lab chemia korozjalab tsp 3więcej podobnych podstron