31
Ćwiczenia z systemów operacyjnych 1 Manipulacja strukturą plików i katalogów w systemie linux. pwd - wpisujemy, by się przekonać w jakim katalogu jesteśmy i będziemy mieć /home/students/user i to jest tak, że wszystko jest podkatalogiem katalogu głównego root i każdy plik czy katalog dostępny w systemie jest elementem takiego drzewa z korzeniem root, dlatego jest ten pierwszy ukośnik przed home i w katalogu home znajdują się katalogi domowe użytkowników, czyli takie katalogi, w których znajdują się użytkownicy po zalogowaniu, tam są jego pliki, które tam umieścił itp. U nas w katalogu home jest podkatalog students. ls wyświetli nam całą zawartość katalogu w którym się obecnie znajdujemy ls -a wyświetli wszystkie pliki, czyli też ukryte ls -l włącza długi format wyświetlania, czyli będą też szczegóły dotyczące pliku Działają połączenia typu ls -al , wtedy w każdej linii na początku będzie literka d lub minus, pierwsza wersja będzie oznaczała, że to plik w podkatalogu, a minus, że to jest plik zwykły cd - wchodzimy do katalogu mkdir tworzymy katalog cd .. to wejdziemy do katalogu wyżej (pamiętać o spacji!) touch nazwa_pliku to data ostatniej modyfikacji zmieni się na aktualną, jeśli wpiszemy jako nazwę plik, który nie istnieje to zostanie w katalogu stworzony plik zwykły o podanej nazwie o długości zero bajtów touch plik ls -l mkdir [przełączniki] nazwa_katalogu – tworzenie katalogów, np.: mkdir ./xyz – utworzenie katalogu xyz w katalogu bieżącym; mkdir ../xyz – utworzenie katalogu xyz w katalogu bezpośrednio nadrzędnym. rmdir [przełączniki] nazwa_katalogu – usuwanie katalogów, np.: rmdir ~/xyz usunięcie katalogu xyz z katalogu domowego; rmdir ./xyz usunięcie katalogu xyz z katalogu bieżącego. Dla poleceń rmdir i mkdir dostępny jest m.in. przełącznik -p, który pozwala odpowiednio, usuwać i tworzyć struktury katalogów, np.: rmdir -p abc/def/ghi – usunie katalogi ghi, def oraz abc, które tworzyły hierarchię. Edytor w systemach unixowych to vim, używamy gdy chcemy wpisać jakieś dane do pliku http://math.uni.lodz.pl/~polrola/strony/str-0607l-systopTM.html http://math.uni.lodz.pl/~polrola/strony/so/opis_vi.pdf zapoznać się z obsługa tego edytora Naciśnięcie dwukropka to przejście do stanu poleceń wierszowych :r nazwapliku i to insert i wpisujemy jak kończymy edycje to esc i w ten sposób wrócimy do trybu wydawania poleceń klawiszowych naciskamy : i znów tryb wierszowych potem wq czyli write i quit :w! pliczek to nadpisze lub stworzy jeśli plik istnieje :q wychodzimy z edytora jedziemy ls -l by zobaczyć, czy się faktycznie zmienił rozmiar pliku wyświetlić zawartość pliku na ekranie polecenie cat nazwa pliku vim /etc/passwd i tu znajduje się lista wszystkich użytkowników, którzy posiadają konta w tym systemie z pewnymi informacjami o tym użytkowniku i szukamy info o nas w tym celu naciskamy :/whiteros i nas znajdzie, bo samo / to polecenie wyszukania teraz chcemy zamienić wszystkie wystąpienia słowa bash w pliku na crash w tym celu najpierw przechodzimy na początek pliku pageup-em i wpisuję

Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Embed Size (px)

Citation preview

Page 1: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 1

Manipulacja strukturą plików i katalogów w systemie linux.

pwd - wpisujemy, by się przekonać w jakim katalogu jesteśmy i będziemy mieć /home/students/user i to jest tak, że wszystko jest podkatalogiem katalogu głównego root i każdy plik czy katalog dostępny w systemie jest elementem takiego drzewa z korzeniem root, dlatego jest ten pierwszy ukośnik przed home i w katalogu home znajdują się katalogi domowe użytkowników, czyli takie katalogi, w których znajdują się użytkownicy po zalogowaniu, tam są jego pliki, które tam umieścił itp. U nas w katalogu home jest podkatalog students.

ls wyświetli nam całą zawartość katalogu w którym się obecnie znajdujemyls -a wyświetli wszystkie pliki, czyli też ukryte ls -l włącza długi format wyświetlania, czyli będą też szczegóły dotyczące plikuDziałają połączenia typu ls -al , wtedy w każdej linii na początku będzie literka d lub minus, pierwsza wersja będzie oznaczała, że to plik w podkatalogu, a minus, że to jest plik zwykły cd - wchodzimy do katalogu mkdir tworzymy katalog cd .. to wejdziemy do katalogu wyżej (pamiętać o spacji!)touch nazwa_pliku to data ostatniej modyfikacji zmieni się na aktualną, jeśli wpiszemy jako nazwę plik, który nie istnieje to zostanie w katalogu stworzony plik zwykły o podanej nazwie o długości zero bajtówtouch plik ls -l

mkdir [przełączniki] nazwa_katalogu – tworzenie katalogów, np.:mkdir ./xyz – utworzenie katalogu xyz w katalogu bieżącym;mkdir ../xyz – utworzenie katalogu xyz w katalogu bezpośrednio nadrzędnym.

rmdir [przełączniki] nazwa_katalogu – usuwanie katalogów, np.:rmdir ~/xyz – usunięcie katalogu xyz z katalogu domowego;rmdir ./xyz – usunięcie katalogu xyz z katalogu bieżącego.Dla poleceń rmdir i mkdir dostępny jest m.in. przełącznik -p, który pozwalaodpowiednio, usuwać i tworzyć struktury katalogów, np.:rmdir -p abc/def/ghi – usunie katalogi ghi, def oraz abc, które tworzyłyhierarchię.

Edytor w systemach unixowych to vim, używamy gdy chcemy wpisać jakieś dane do pliku

http://math.uni.lodz.pl/~polrola/strony/str-0607l-systopTM.htmlhttp://math.uni.lodz.pl/~polrola/strony/so/opis_vi.pdfzapoznać się z obsługa tego edytora

Naciśnięcie dwukropka to przejście do stanu poleceń wierszowych :r nazwapliku i to insert i wpisujemy jak kończymy edycje to esc i w ten sposób wrócimy do trybu wydawania poleceń klawiszowych naciskamy : i znów tryb wierszowych potem wq czyli write i quit :w! pliczek to nadpisze lub stworzy jeśli plik istnieje :q wychodzimy z edytora jedziemy ls -l by zobaczyć, czy się faktycznie zmienił rozmiar pliku wyświetlić zawartość pliku na ekranie polecenie cat nazwa pliku

vim /etc/passwd i tu znajduje się lista wszystkich użytkowników, którzy posiadają konta w tym systemie z pewnymi informacjami o tym użytkowniku i szukamy info o nas w tym celu naciskamy :/whiteros i nas znajdzie, bo samo / to polecenie wyszukania

teraz chcemy zamienić wszystkie wystąpienia słowa bash w pliku na crash w tym celu najpierw przechodzimy na początek pliku pageup-em i wpisuję

Page 2: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 2

:s/bash/crash/g (s jest od zamień, a /g powoduje znalezienie wszystkich) :1$s/bash/crash/g i dwa entery i teraz esc i potem :q to edytor nam nie da wyjść, bo niezapisaliśmy naszych zmian chyba ze nie chcemy zapisywać wtedy :q!

Echo

man jak manual czyli podręcznik użytkownika man echo q by opuścić manuala echo wypisuje nam tekst vim i #!/bin/bash mówi ta linia tyle, że za każdym razem jak będę chciała wykonać ten plik to ma on uruchomić program który zinterpretuje komendy dalej występujące i piszemy echo to jest mój program, będzie o tym dalej pewnie koło strony 20

: by przejść znów w tryb wydawania poleceń wierszowych :w prog czyli wydajemy polecenie by zapisać plik jako prog :q pamiętać jak skończymy pisać po echo to esc chmod +x prog zmienia uprawnienia do pliku cat prog oznacza aktualny katalog /prog i enter czyli uruchom plik o nazwie prog z aktualnego katalogu i się te polecenia wykonają.

Podsumowując, musimy zapamiętać, że w systemie linux jest edytor tekstowy vim, którego używamy do komponowania plików tekstowych. Ponadto pliki tekstowe mogą zawierać komendy przeznaczone do wykonywana kolejno i takie pliki z zestawem komend możemy wykonywać. Najpierw nauczymy się podstawowych poleceń systemu linux i potem będziemy komponować zestawy poleceń, skrypty, które wykonane kolejno będą wykonywały zadania.Pamiętać o man, jeśli nie pamiętamy jaką czynność dane polecenie wykonuje, lub nie pamiętamy, jakie opcje możemy użyć

cp [przełączniki] nazwa_pliku nowa_nazwa_lub_katalog – kopiowanie pliku określonegoprzez pierwszy argument pod nazwę lub do katalogu określonego drugim argumentem, np.:cp abc.txt xyz.txt – kopiuje plik abc.txt pod nową nazwę xyz.txt w katalogubieżącym;cp /tmp/abc.txt ~ – kopiuje plik abc.txt z katalogu /tmp do katalogudomowego użytkownika;cp abc.txt ~/xyz.txt – kopiuje plik abc.txt z katalogu bieżącego pod nowąnazwę xyz.txt w katalogu domowym użytkownika.Przydatnym przełącznikiem polecenia cp jest przełącznik -r, który służy do kopiowaniacałych struktur katalogów.

rm [przełączniki] lista_plików –usuwanie plików podanych jako argumenty wywołania, np.:rm abc.txt xyz.txt – usuwa pliki abc.txt i xyz.txt w katalogu bieżącym;rm /tmp/abc.txt – usuwa plik abc.txt z katalogu /tmp;Przydatnym przełącznikiem polecenia rm jest przełącznik -r, który służy do usuwaniacałych struktur katalogów.● mv [przełączniki] nazwa_pliku nowa_nazwa – zmiana nazwy pliku określonego pierwszymargumentem wywołania na nazwę określoną drugim argumentem wywołania. Jeśli drugiargument wywołania jest katalogiem, to wówczas plik zostanie przeniesiony do tegokatalogu, np.:mv abc.txt xyz.txt – zmiana nazwy pliku abc.txt na nazwę xyz.txt w katalogubieżącym;mv /tmp/abc.txt ~ – przeniesienie pliku abc.txt z katalogu /tmp do katalogudomowego użytkownika

Page 3: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 3

Ćwiczenia 2

Przypomnijmy, ze wszystko jest podkatalogiem katalogu root, czyli jest tylko jeden katalog główny i każdy nowy jest podpinany pod tą strukturę

cd / to znajdziemy się w katalogu głównym root i wtedy np ls i wyświetli zawartość katalogu root, jak chce wiedzieć o co chodzi z tymi katalogami to man 7 hier i będzie do czego służą poszczególne katalogi.

cd nazwa_katalogu to wejdę do tego katalogu to katalog aktualny, cd . to się nic nie stanie, bo jesteśmy w katalogu aktualnym . to katalog nadrzędny wobec tego w którym się znajdujemy pwd pokazuje nam gdzie jesteśmy, jeśli pokaże / to znaczy, że jesteśmy w katalogu głównym root ~ to katalog domowy aktualnie zalogowanego użytkownika, wiec cd ~ to wejdziemy do naszego katalogu w którym już tworzyliśmy pliki sobie, możemy je wyświetlić ls. Jak nie pamiętamy parametrów to możemy napisać np man ls i potem /-R i wyszuka. Okazuje się, że jest to polecenie wykonywane rekursywnie, czyli wykonywane jest polecenie ls na wszystkich plikach tego katalogu spróbujmy np.ls -alR ~ i wyświetli nam nie tylko zawartość katalogu domowego ale też zawartości katalogów które się w tym katalogu znajdują

mkdir nazwa_nowego_katalogu tworzenie nowego katalogu w naszym katalogu domowym rmdir katalog - usuwanie katalogu tworzenie pliku - otwieramy edytor i zapisujemy zawartość do pliku, lub touch nazwa cp plik_zrodlowy plik_docelowy kopiowanie zawartości plików, jeśli plik docelowy nie istnieje to go stworzy i umieści w nim tą samą zawartość jaka jest w pliku źródłowymmv plik_zodlowy plik_docelowy - przenoszenie pliku, wtedy plik docelowy będzie stworzony, umieści w nim zawartość źródłowego, a potem usunie źródłowyrm kasuje plik mv pliczek katalog to przeniesie nam plikczek do katalogu rmdir jak chcemy skasować katalog to skasujemy tylko pusty katalog, a skoro u nas jest juz pliczek to musimy napisać rm z odpowiednimi rzeczami wtedy skasujemy katalog z plikiem rm -r katalog to usunę katalog z zawartością, znowu podejście rekursywne, możemy rm -fr katalog to nie będziemy też o nic pytani

echo * to wyświetli listę plików i katalogów w aktualnym katalogu * jako znak specjalny jest różnie interpretowana echo *.txt to wyświetli te pliki, które mają rozszerzenie txt w bieżącym katalogu Jak chcemy wyświetlić znak specjalny to np echo "*" albo echo \* ale druga wersja tylko jak mam dokładnie jeden znak do wyświetlenia find gdzie_szukamy czego_szukamy przeszuka podkatalogi można szukać zaawansowanie czyli np wykorzystując kryterium czasu, opisane w pdf-ie z wazniaka.

W systemach unixowych katalog też jest nazywany plikiem

find ~ -exec polecenie {} \;find ~ -type f -name "*.txt"

f oznacza plik zwykły, więc chodzi o to , że to plik a nie katalog daliśmy "" by to find zinterpretowało *.txt a nie interpreter, czyli wyświetlam plik z mojego katalogu, który jest plikiem a nie katalogiem i o nazwie "*.txt".

Page 4: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 4

Jeśli bym wpisała bez „” to by wyświetlił tylko to co znalazł w katalogu głównym, a z „” wyświetli też to co jest w podkatalogach.

{} to kolejna znaleziona przez find pozycja exec zawsze kończymy \;find ~ -type f -name "*.txt" -exec cat {} \;cat wyswietla zawartość danego pliku

echo pawel ma psa > plik1.txt i wtedy sposób to polecenie zostanie wykonane nie na ekranie tylko na pliku plik1.txt czyli wpisze ten tekst do naszego pliku.

find ~ -type f -name "*.txt" -print -exec cat {} \;-print wyświetli znalezione pozycje, bo bez tego z samym exec I cat by nam tylko wyświetlił zawartość tego co znalazł, ale nie widzielibyśmy samych ścieżek.

Uprawnienia

r do odczytuw do zapisux executive czyli do wykonywania

te uprawnienia nadajemy userowi, grupie wszyscy_inni ls -l o zobaczymy te uprawnieniadla katalgow:

r to wypisanie wszystkich elementów jakie się znajdują w katalogu w to stworzenie nowej lub usuniecie startej pozycji w katalogux dla katalogu to wykonywanie katalogu czyli przechodzenie przez katalog np. możemy wejść do katalogu, zrobić cd tylko jak mamy to uprawnienie

chmod zmienia uprawnieniachmod uprawnienia które mają być nadane lub odebrane plik_ktorego_to_dotyczy możemy pisać chmod +r plik to zostaną dodane uprawnienia odczytu dla wszystkich 3 grupek chmod -w plikchmod g-x plik grupie chmod a-x plik wszystkim chmod u-x plik użytkownikowi odbieramy prawy do wykonywaniachmod o-x plik others

jak chcę mieć r-x r-- --- to jadę z tym binarnie 101 100 000 czyli na nasze 540 można też chmod 540 plik chmod 777 plik to wszystkim pozwoli na wszystko

Ćwiczenia 3

Dowiązania są twarde i miękkie.Twarde dowiązanie jest wtedy gdy w katalogu dwie nazwy nazwa1 i nazwa2 wskazują na ten sam i-węzeł. Czyli bez względu czy odczytuje nazwa1 czy nazwa2 to i tak odczytam ten sam obszar na dysku, zmodyfikuje ten sam obszar, bo jest ten sam i-węzeł.

Dowiązanie symboliczne to bardziej jak skrót w systemie Windows. Mamy katalog pierwsza nazwa w nim wskazuje na jeden i1-węzeł, druga nazwa na jakiś drugi i2-węzeł, ale w tym i2-węźle jest przekierowanie do i1-węzła.

Każda pozycja w katalogu ma ilość dowiązań.

Page 5: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 5

Różnica dla użytkownika jest żadna, ale dla systemu jest bo jeśli w pierwszym przypadku skasuję nazwa1, to nazwa2 będzie nadal funkcjonalnym plikiem odnoszącym się do i-węzła.Natomiast w drugim wypadku jeśli skasuję nazwa1, to nazwa2 straci swoja funkcjonalność bo wraz z nazwa1 się skasuje i1 węzeł.

ln - tworzę dowiązanie twardeln -s - tworzenie dowiązań miękkich, symbolicznych

Dowiązanie może być do dowolnego pliku, a do katalogu użytkownik może tworzyć tylko dowiązania miękkie, twardych nie ma możliwości.

touch plik11vim plik11wciskamy insert 3 cw z sys operacyjnychwychodzimy

ln cel nazwaczyli u nasln plik11 nazwadowiazanials -l i po uprawnieniach widzę dowiązania cat plik11 nazwadowiazania i wyjdzie mi dwa razy to samo

tworzymy link symboliczny do plik11ln -s plik11 dowiazaniesls -lpojawi sie kolejny plik i będzie miał różny, rozmiar niż plik11 czy nazwadowiazania, licznik dowiązań twardych do tego pliku wynosi 1, ponadto jeśli odwołamy sie do dowiazanies to powinniśmy znów zobaczyć ten sam tekst z mojego plik11 teraz usuwam rm plik11 ls -l to widzimy ze ten plik zniknął ze sie zmienił licznik dowiązań w nazwadwiazaniacat nazwadowiazania sie udacat dowiazanies juz sie nie uda, będzie komunikat o błędzie

Dowiązania twarde do katalogów istnieją mimo, że nie możemy ich robić ls -la (razem z ukrytymi) są dwa dowiązania do katalogu - jedno to sam ten katalog a drugie to cos z podkatalogami, bo chodzi o to, że jak mamy katalog i podkatalog to ten podkatalog ma dwa dowiązania twarde - jedno na samego siebie a drugie na katalog nadrzędny (plecenie ..)choć tu wersja prowadzącego się zmieniała, chyba katalog które nie mają podkatalogów to mają liczbę dowiązań dwa a inne mają 2+liczba podkatalogów, na tej wersji stanęło

ls –i dodaje przy wyświetlaniu jeszcze numer i-węzła

W domciu przetestować tworzenie linków do pliku dla polecenia ls istnieje parametr –i, który powoduje, że na początku pozycji odpowiadającej poszczególnym plikom jest dodawany numer i-wezla i sprawdzić ze faktycznie te dowiązania działają tak jak się spodziewamy

sprawdzić nr i wezla nowego katalogu, stworzyć tam podkatalog i sprawdzić, że w tym podlatalogu bedzie pozycja .. której odpowiadający nr i-wezla będzie ten sam co nr i-węzła katalogu nadrzędnego ls –ila

zadania 8-17 i 21-30 z wazaniaka

Id – identyfikator oraz grupy do których należę

Page 6: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 6

Każdy użytkownik systemu operacyjnego może także sprawdzić jaki identyfikator numeryczny id został mu przydzielony – należy wówczas zastosować polecenie:idktórego wynik może być następujący:

uid=1500(adam) gid=100(students) groups=100(students)gdzie uid (ang. user identifier) oznacza identyfikator użytkownika, w nawiasie znajduje się jego nazwa, gid (ang. group identifier) oznacza identyfikator grupy – każdy użytkownik należy do pewnej grupy, tzw. grupy podstawowej (dla powyższego przykładu jest to grupa o identyfikatorze 100 i nazwie students), dodatkowo każdy użytkownik może należeć do innych grup, są one wymienione po słowie groups.

Finger- (alternatywa: who) pokaże mi wszystkie osoby zalogowane do systemu w danej chwili, tyle że finger pokaże też imię i nazwisko a who tylko nick

mkdir kat1cd kat1

Zad 9.W katalogu kat1 utwórz jednym poleceniem strukturę katalogów kat2/kat3/kat4.mkdir -p kat2/kat3/kat4 bo wtedy będzie robił tak by to były podkatalogi, rodzice itp

cd kat2

Zad 10.Usuń jednym poleceniem cała strukturę katalogów kat3/kat4.

rmdir -p kat3/kat4 czyli usunie kat4 i jego rodzica czyli u mnie kat3 lub można też rm –r kat3 o dziwo efekt będzie ten sam

touch plik.txt touch plik.c

Zad 12.Skopiuj jednym poleceniem wszystkie pliki z katalogu domowego z rozszerzeniem .txt dokatalogu kat1.

cp *.txt kat1 – skopiuje wszystko z rozszerzeniem txt z miejsca w którym jesteśmy do katalogu kat1, TU NIE WOLNO NAPISAĆ Z „”

Zad 13.Skopiuj jednym poleceniem wszystkie pliki z katalogu domowego z rozszerzeniem .c dokatalogu kat2.

cp *.c kat1/kat2

Zad 14.Skopiuj całą strukturę katalogów kat1 tworząc analogiczną strukturę o nazwie kat1b.

cp -r kat1 kat1b – skopiuje rekursywnie czyli wraz z cala struktura to co jest jako kat1 do katalogu o nazwie kat1b

Page 7: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 7

Zad 15Usuń wszystkie plik z katalogu kat1/kat2.

rm kat1/kat2/* lepiej zrobić samo * (a nie *.*), bo tak to usuwam tylko te pliki, które mają kropkę w nazwie

Zad 16.Usuń jednym poleceniem całą strukturę katalogów kat1b.

rm -r kat1b – z niezrozumiałych przyczyn mimo wszystko usunie ten katalog pomimo tego, że to polecenie jest od plików przecież…usunie go rekursywnie czyli wraz z całą jego zawartością

Zad 17Zmień nazwę dowolnego pliku w katalogu kat1.

mv plik1.txt pl1.txt - zmiana nazwy plik1.txt na pl1.txt

Zad 18Przenieś katalog kat1/kat2 do katalogu domowego tworząc w ten sposób katalog kat2b.

Uwaga twórczość własna:Najpierw przenosze czyli np. wchodze do kat1 i piszę:Mv kat2 ~Potem wchodze do mojego katalogu czyli Cd .. i mv kat2 kat2bMożna to zapisać w jednej linijce po średnikach i też będzie działać ;D

Zad 21Korzystając z programu find znajdź wszystkie pliki, które posiadają w nazwie słowo mozillai znajdują się w podkatalogach katalogu /usr.

find /usr -type f -name "*mozilla*" pamiętać koniecznie o tych "" by ta * była interpretowana przez find a nie przez interpreter poleceń.

Zad 22. Korzystając z programu find znajdź wszystkie katalogi o nazwie bin, które znajdują się wkatalogu /usr.

find /usr -type d -name bin

Zad 23 Skopiuj wszystkie pliki zwykłe o rozmiarze pomiędzy 10 a 100 bajtów z katalogu /usr/bin dokatalogu kat1/kat2 (wykorzystaj polecenie find z parametrem -exec).

-exec na każdej znalezionej pozycji on zrobi to co napiszemy po spacji czyli-exec cp {} kat1 \; znalezioną pozycję skopiuj do kat1

find /usr/bin/ koniecznie ten drugi ukośnik!!!

find usr/bin/ -type f -size +10 -size -100 -exec cp {} ~/kat1/kat2 \; ostrożnie tutaj ze spacjami!

chmod g+w plik.txt – dodaje prawo zapisu dla grupy do pliku plik.txt w katalogu bieżącym

Page 8: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 8

ls -l plik.txt – sprawdzam, czy dobrze wyszłochmod 644 plik1.txt to ustawi tak jak było na początku tj 110 (czyli 6), 100 (stąd jest 4) i znów 100.

Zad 30Utwórz dowiązanie symboliczne do katalogu kat1/kat2 o nazwie abc w katalogu domowym.Jestem w katalogu ~ i piszę twórczość własną ;>Ln –s kat1/kat2 abc Bez trudu mogę sprawdzić, że to faktycznie działa, wystarczy włączyć potem ls kat1/kat2 oraz ls abc.

Ćwiczenia 4

Na proces składa się obraz pliku wykonywanego. Init to proces systemowy pierwszy proces i ten proces uruchamia inne procesy, a te mogą też uruchamiać proces

pstree - wyświetla drzewo procesów w systemie środowisko procesu - zestaw zmiennych, które użytkownik może ustawić, a proces z nich korzystać np modyfikować swoje działanie w zależności od tych zmiennych standardowy strumień wyjścia to oczywiście konsola -wypisanie danych na ekranie, a wejścia to klawiatura, czyli program wczytuje dane od użytkownika z klawiatury.

ps - wyświetla procesy aktualnie działające w systemie, posiada dużo parametrów, domyślnie wyświetla dwa procesy - samego siebie i program bash - interpreter poleceń

ps -f - rozszerzy informacje o procesach, wtedy będzie PPID i będzie ładnie widać, że PS jest uruchomiony przez Bash - nr PPID ps jest nr PID bash-a.

ps f - kreseczka, forma drzewa...

ps fx to zobaczymy jeszcze proces sshd, to jest serwer, który na nasze życzenie uruchamia sam siebie....i basha

Usuwanie procesuUżytkownik który uruchomił proces może wysyłać sygnały do procesu i może go zabić poleceniem kill.

kill -s sygnal KILL pid - s jest od sygnał, a zamiast słowa sygnał możemy napisać np KILL pid uruchomiamy polecenie cat, gdy uruchomiliśmy tylko je(w sensie piszemy cat i naciskamy enter), to ono odczytuje standardowe wejście - klawiaturę i wszystko co odczyta to wypisze na ekran, sprawdźmy ctrl + d to będzie oznaczało, że plik z którego odczytywaliśmy się skończył, ale nie wciskamy tego bo nie chcemy zakończyć tego procesu tylko go zastopować czyli naciskamy:

ctrl + z powoduje wysłanie do aktualnie działającego pierwszoplanowego procesu sygnału stop teraz ps fx to zobaczymy ze proces bash uruchomił proces ps i proces cat Odczytujemy PID procesu cat i piszemy kill -s KILL nr_pid

Page 9: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 9

Priorytety procesuIm dłużej proces działa tym ma niższy priorytet. Użytkownik nie ma bezpośredniej możliwości zabawy tym, ale możemy ustawiać liczbę nice, która przydaje się do obliczania procesu, Im mniejsza wartość liczby nice tym wyższy priorytet procesu nice

Zarządzanie procesami& wymusza uruchomienie przez interpreter poleceń procesu w tle sleep 20s - polecenie sleep będzie czekało 20s i potem dopiero przerwie swoje działanie, przez ten czas nie wykonamy żadnej komendyjobs fg - pierwszy plan bg - tło uruchamiamy znów catctrl+z (zatrzymujemy proces), czyli cat będzie w bg a bash w fgjobsfg - jak nie podamy argumentu i działa tylko jedno polecenie czyli u nas cat to on je wsadzi na główny plan ctrl +d by skończyć

nice find / - czyli uruchamiamy z większym priorytetem polecenie find by wypisywał wszystkie pliki jakie znajdzie w systemiectrl+z - zawieszamyteraz chcemy wznowić ten proces, ale by nie był na pierwszym planie fs fx kill -s CONT PID - wysyłamy sygnał kontynuacji poleceniem kill wtedy będzie kłopot, znów dużo info na ekranie, a ctrl+z go nie zatrzyma, bo ten sygnał idzie do pierwszoplanowego więc logujemy się raz jeszcze wtedy klikamy ps fx i w ten drugiej konsoli go zabijamy ale ładniej:kill -s TERM pid - nie pójdzie, jeśli proces się zakończy

vimctrl +zkill -s CONT pid wtedy będzie tak dziwnie , ze zatrzyma pracę, bo on wymaga pełnej interakcji z użytkownikiem kill -s KILL pid

Status zakończenia procesuProces może zwrócić kod zakończenia procesu: 0 jeśli zakończył się poprawne lub co innego jeśli błędnie, kod ostatnio zakończonego procesu można wyświetlić:echo $? - wartość zmiennej znak zapytania ls beee/ i potem echo to nie będzie zera bo ls nie zadziałał bo u nas nie ma folderu bleee

polecenie_pierwsze && polecenie_drugie to interpreter zrozumie to tak: wykona pierwsze polecenie i jeśli kod błędu zwrócony przez nie będzie równe 0, to uruchomi polecenie drugiepolecenie1 || polecenie2 - uruchomi się pierwsze, gdy pierwsze zwróci NIEzerowy kod błędy to uruchomi się polecenie 2.polecenie1 ; polecenie2 - uruchomi się pierwsze a potem bezwarunkowo drugie polecenie mkdir A ls A/ - wyświetl zawartość katalogu A ls A/ && echo udalo sie - u nas sie uda ;) ls AB/ && echo udalo sie || echo nie udalo sie = u nas nie ma AB wiec wyświetli sie nie udalo się ls AB/ || echo nie udalo sie && echo udalo sie = czyli zamieniliśmy kolejność, wtedy pojawiły się oba komunikaty, to logiczne ;)

nawias pozwala grupować polecenia do wykonania

Page 10: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 10

polecenie1 && (polecneie2; polecenie3)

` znak który znajduje sie na klawiszu z tyldą,polecenie1 `polecenie2` wtedy interpreter wykona polecenie 2 najpierw , wyniki działania polecenie 2 (wszystko wyrzucone na ekran) zostanie wstawione w miejsce polecenia2 np date pokaze nam aktualna echo dzis jest `date`

polecenie1 > plik wtedy to co polecenie1 wyrzuca na ekran wyrzuci do pliku date > plikcat plikecho date > polecenie

Można zagnieżdżać , ale wtedy muszę mieć \ przed wewnętrznym odwróconym apostrofem np:echo dzis jest `\`cat polecenie\``echo dzis jest $(date) - to inny sposób zagnieżdżania

test - sprawdzi nam to co będziemy kazali np data ostatniej modyfikacji pliku, albo skonstruujemy warunki dotyczące liczb całkowitych itp. test ustawia tez kod błędu 0 jakwarunek jest spełniony i 1 jak nie jest...test 5 -lt 8 (less then)echo $?

-f sprawdza warunek czy to co jest podane po parametrze -f istnieje i jest plikiem zwykłym test -f plik && cat plik

expr 5 + 3 – wyświetli wynik tego dodawaniaexpr 5 '*' 3 bo * jest znakiem specjalnymexpr 5 \* 3 cat /proc/sys/net/ipv4/ip_forward to miejsce które pokazuje czy ten komp jest ruterem cos takiego...-eq od equal czy jest równetest `cat /proc/sys/net/ipv4/ip_forward` -eq 1 && echo "jestes routerem" || echo "nie jestes"

http://math.uni.lodz.pl/~jakubo/sysopy/zadanka.htm

-nt is newer

Ćwiczenia 5

Zad1.Wyświetl nowszy plik spośród plików /etc/hosts, /etc/resolv.conf

test plik1 -nt plik2 - jeśli pierwszy plik faktycznie będzie nowszy, to polecenie testzwróci kod błędu zero - oznaczenie że wszystko oktest plik1 -nt plik2 && cat plik1 || cat plik2ls -l /etc/hosts – by sprawdzić, jak to wygląda dla tego pliku

zad2Dla ustalonego pliku. Wyświetl plik bądź komunikat, że jest to link symboliczny, a następnie zawartość pliku, do którego ten link wskazuje.

Page 11: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 11

przypomnijmy, że cat plik to wyświetli plikcat dowiązanie to wyświetli zawartość pliku, do którego jest to dowiązanietest -L plik to sprawdzi czy ten plik istnieje i jest linkiem symbolicznymtest -L dowiazanies && echo to jest link symboliczny ; cat dowiazanies (u mnie dowiazanies jest linkiem symbolicznym). Średnik wiąże słabiej, czyli (test...echo..) ; polecenieman bash - opis interpretera poleceń i jak tam wejdziemy to wpisujemy /&& i spacja szukamy Lists - tam będzie opis średników i innych znaków.

zad 3Dla ustalonego pliku. Jeżeli możesz czytać plik (bądź katalog) wyświetl jego zawartość.

test -r plik && (test -d plik && ls plik || cat plik)czyli najpierw sprawdzam -r czy mamy uprawnienia odczytu, jeśli tak to sprawdzam czy mamy do czynienia z plikiem czy z katalogiem tzn. -d i wyświetlamy odpowiednio ls dla katalogu i cat dla pliku. Nawiasy są sensowne, bo gdyby pierwszy test zwrócił niezerowy kod błędu to i tak byłaby próba wykonania polecenia po ||

Zad 4Przy założeniu ze w plikach: liczba1 i liczba2 znajdują się dwie liczby całkowite, zapisz do pliku iloczyn wartość ich iloczynu.

expr `cat liczba1` \* `cat liczba2` > iloczynnie trzeba juz tworzyć pliku wynikowego, pamiętać o cytowaniu gwiazdki

zad 5Jak wyżej; przy założeniu że liczba2 jest większa od 0 i nie mniejsza od liczba1, w pliku iloraz zapisz iloraz tych liczb zaokrąglony (w dół) do trzech miejsc po przecinku.

echo 0, ; expr `cat liczba1` \* 1000 / $(cat liczba2)`` i $() to jest to samoMnożymy przez 1000, by otrzymać wartość numeryczną tych naszych trzech miejsc po przecinku, a dlatego jest z echo by wyświetlił odpowiednio ;) Zauważmy, że expr domyśliło się, że ma wykonać dwa działania, ale jak coś można było wsadzićto jeszcze w nawiasychyba / nie jest po prostu znakiem specjalnym takim jak *

echo 0, ; expr \(`cat liczba1` \* 1000 \) / $(cat liczba2)jak zostawimy tą wersję, to echo po tym co napisał dokłada znak nowej liniidlatego piszemy jeszcze -n

(echo -n 0, ; expr \( `cat liczba1` \* 1000 \) / $(cat liczba2)) > ilorazuważać, który nawias cytujemy, cytujemy jak potrzeba nam kolejnościodpowiedniej, a nie cytujemy gdy ma grupować polecenia. Wypowiedź prowadzącego:

Nawiasy nie są cytowany tylko wtedy jezeli mają być rozumiane przez interpreter poleceń jako znaki grupujące listę polecen do wykonania np.:polecenie1 && ( polecenie2 ; polecenie3; ... )

Ewentualnie gdy są częscią innego znaku specjalnego interpretera poleceń np.: echo Dzis jest $(date)Nawias nie jest cytowany bo jest częscią znaku specjalnego $( ... )

Page 12: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 12

Nawiasy zawsze są cytowane jeżeli są argumentem polecenia np.:echo Mama, Tata \(i Ja\)expr \( 5 + 3 \) \* 4

Nawias jest w tych przykładach przekazywany programowi echo (expr) i to sam program decyduje co ten nawias dla niego oznacza.Gdyby nie cytowanie interpreter poleceń chciałby wykonywać polecenia: i z argumentem Ja oraz 5 z argumentami + 3

nie robimy początku tego zadania...

zad 6Dla ustalonego pliku. Jeżeli ilość znaków w pliku nie jest podzielna przez 3 zapisz resztę z dzielenia w pliku reszta. Uwaga: przyjmujemy, że ustalony plik ten nie zawiera znaku nowego wiersza.

test $(expr \(length "$(cat plik)"\) % 3) -eq 0 || expr \( length "$(cat plik)" \) % 3 >resztacudzysłów jest od tego by spacje rozumiał jako część pliku, by też je liczył

wc - word count wc -c plik - to liczy ilosc znaków, bo c to char, ale u nas to nie działało…

Zad 7Przy założeniu że liczba2 jest większa od 0 i nie mniejsza od liczba1, w pliku iloraz zapisz iloraz tych liczb zaokrąglony do trzech miejsc po przecinku.

Wypowiedź prowadzącego:mnożymy liczbę 1 przez 10000 i sprawdzamy czy ostatnia cyfra wyniku jest <6 (reszta z dzielenia przez 10), jeżeli nie dodajemy jeszcze jeden (zaokrąglamy w góre)

echo -n 0,; test $(expr \( \( $(cat liczba1) \* 10000 \) / $(cat liczba2)\) % 10) -lt 6 && expr \( $(cat liczba1) \* 1000 \) / $(cat liczba2) || expr \( $(cat liczba1) \* 1000 \) / $(cat liczba2) + 1

Cwiczenia 6

Zad 8.Wyświetl listę pustych katalogów w katalogu startowym użytkownika.

korzystamy z polecenia find, którego struktura byla:find gdzie_szukamy czego_szukamyu nas bedzie:find ~ -type d –empty

zamiast ~ można pełną ścieżkę tj. find /home/students/whiterosskoro potrzebujemy czegoś pustego, to możemy napisać man find i potem by znaleźćto o co nam chodzi to napiszmy /empty i znajdzie lub /-empty

Zad 9.Zapisz komendę, która sprawdzi czy dwa ustalone pliki są swoimi dowiązaniami twardymi.

Page 13: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 13

Wsk.: ls –i, a następnie poleceniem expr możesz wyłuskać potrzebną informację.

jak zrobimy ls -i plik.txt , potem ls -i dowiazanie_twarde to otrzymamy te same numery węzłów, a w expr jest cos takiego jak substr - wyciąga początkowy ciąg znaków

expr substr pozycja początkowa długośćexpr substr $(ls -i plik.txt) 1 7błąd, bo jesli chcemy podać argument który zawiera spacje to musimy wziąć ten argument w " "expr substr "$(ls -i plik.txt)" 1 7wiec teraz juz tylko np przy pomocy test porównujemy, skoro to są dość duże wartościnumeryczne to będziemy porównywać to jako ciągi znaków

test $(expr substr "$(ls -i plik.txt)" 1 7) = $(expr substr "$(ls -i dowiaznie_twarde)" 1 7) && echo to jest ten sam plik || echo nie sa te same

tu nie musi być " " bo zwróci nam numer czyli nie będzie spacji w tym co nam zwróci

Mozna to było zrobić prościejman findpotem /-samefile

find ~ -samefile plik.txti faktycznie wyświetli nam plik.txt oraz jego dowiązanie twarde bo mają ten sam numeri węzła

mozna też takfind ~ -samefile plik.txt -name dowiazanie_twardei wtedy wyświetli tylko dowizanie_twarde jeśli faktycznie ma on ten sam nr i węzła co plik.txt

find ~ -maxdepth 1 -samefile plik.txt -name dowiazanie_twarde

argument maxdepth sprawdzi, czy czasem w jakimś głębszym katalogu nie ma tego, o co nam chodzi, gdy ustawimy 1 tak jak w powyższym przykładzie to znaczy, że ma tylko ten katalog sprawdzić, w którym jesteśmy i nie wchodzić głębiej

Zad 10.Sporządź kopie zapasowe wszystkich plików z rozszerzeniem .txt w katalogu bieżącym dokładając do nazwy rozszerzenie ".bak".

Z . poniżej chodzi o to ze będziemy szukać w katalogu głównym, który przecież znajdujemy jako .find . -maxdepth 1 -name "*.txt" -exec cp {} {}.bak \;

czyli mówimy skopiuj kolejną znalezioną pozycję do pliku o tej samej nazwie tylko jeszcze z rozszerzeniem .bak i faktycznie jest wszystko ok

Zad 11.Znajdź wszystkie pliki w katalogach ~ oraz /etc/, które mogą być czytane przez wszystkich użytkowników bądź wykonywane przez jakiegokolwiek użytkownika.

przypomnijmy, że to szło tak, że jak wpiszemy ls -l

Page 14: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 14

to pierwszy znak to typ czyli czy to jest file czy folder, potem mamy 3 grupy po 3 bity i albo widzimy to uprawnienie albo go nie ma i mamy - . Pierwsza trojka to user, druga to grup a trzecia to pozostali

man find potem /-perm jak nie rozumiem co napisał, to strzałką szukam dalej, może niżej coś jestno czyli mogę mieć -perm upr lub -perm -uprpowiedzmy ze chcę rw- r-- --- czyli będę miała liczbę 640

-perm -444zwrócić uwagę tylko na to co ma być ustawione, jeśli będzie cos więcej ustawione to ok

-perm /111 tzn. że co najmniej jeden z bitów ustawionych tutaj musi być ustawiony dla którejś z pozycji, czyli pierwsza wersja mówi, że WSZYSTKIE grupy muszą móc czytać i ewentualnie robić coś jeszcze, a druga wersja mówi nam, że przynajmniej jedna z grup musi mieć możliwość wykonywania

find ~ /etc -perm -444 -or -perm /111po find wymieniliśmy po prostu te katalogi, które chcemy przeszukać

Zad 12.Zapisz w pliku bydlaki listę, postaci „nazwa, rozmiar” , plików z twojego katalogu domowego o rozmiarze większym niż 100 bajtów. Wsk.: użyj opcji –fprintf.

find ~ -type f -size +100c+100c to znaczy, że chodzi nam o te większe niż 100bajtów

-print powoduje, że nazwa znalezionej pozycji zostanie napisana na ekranie to jest przełącznik polecenia find, jest tez:

- fprintf - zapisuje do wskazanego pliku listę znalezionych pozycji, za to odpowiada pierwsze f jak file, a to drugie f oznacza tyle, że ta lista może zostać sformatowana przez żądany przez nas sposób i ten sposób jest opisany przy pomocy printffind ~ -type f -size +100c -fprintf plik format

find ~ -type f -size +100c -fprintf bydlaki "%p, %s \n"%p to nazwa %s to rozmiar

Zad 13.Zapisz komendę, która wyświetli komunikat:Plik konfiguracyjny serwera www:a następnie wyświetli zawartość pliku /etc/apache2/httpd.conf. Jeżeli taki plik nie istnieje (wystąpi błąd) wyświetli: plik /etc/apache/httpd.conf. Jeżeli taki plik również nie istnieje, wyświetli komunikat„Pliku konfiguracyjnego szukaj pośród": i wyświetli listę plików z katalogów /etc/apache i /etc/apache2 zawierających w nazwie ciąg znaków "conf".

echo Plik konfiguracyjny serwera www ; jest średnik bo musimy wyświetlić ten komunikat a potem zrobić coś bezwarunkowo dalejw katalogu /etc znajdują się pliki konfiguracyjne. Przyjmujemy, że plik nie istnieje, gdy polecenie cat zwraca kod błędu różny od zera, czyli że nie udaje się go wyświetlić, a jeśli sięwszystko nie powiedzie to wyświetlamy pliki z rozszerzeniem conf z tych dwóch katalogów

Page 15: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 15

echo Plik konfiguracyjny serwera www ; cat /etc/apache2/apache2.conf || cat /etc/apache/httpd.conf || (echo Plikow konfiguracyjncyh szukaj posrod ; ls /etc/apache/*.conf /etc/apache2/*.conf)

po tym co nam wypluł to widzimy, ze nie ma apache w wersji 1 jest tylko w wersji 2. Jest ls pierwszy_katalog drugi_katalog czyli po prostu wypisaliśmy po spacji to co chcemy by było argumentem polecenia ls.

Ćwiczenia 7

stdin - to wejście z klawiatury który idzie do procesustdout - standardowy strumień wyjścia związany z tym co wychodzi z procesu, czyli toco wypluwa na konsolęstderr - standardowy strumień błędów, też ewentualnie wypluwa coś na konsolęIstnieje możliwość przekierowania tych standardowych strumieni danych główne polecenie to cat ono odczytuje kolejną linię ze standardowego wejścia, czyli póki nie naciśniemy enter, a gdy to nastąpi to on wypluje to na ekran. Proces cat będzie tak długo czytał stdin jak długo nie napotka końca pliku co u nas byłoby ctrl D bo najpierw naciskamycat potem enter i potem wypisujemy

Chcemy przekierować te strumienie, już to trochę robiliśmy poprzez ls > plikAle wtedy jeśli już cos w tym pliku było, to on to skasuje, a NIE dopisze.

jest też znak >> np ls / >> plik to mówi o tym ze jeśli plik nie istnieje to zrobi to co zawsze, a jeśli istnieje to nie kasuje tego co było tylko dopisze do tego co juz jest, ls / to wyświetlenie zawartości katalogu głównego

Można też przekierować standardowy strumień wejścia.Cat < plik

Cat << STOP to będzie czytał tak długo aż napotka to co jest po prawej stronie czyli będzie wczytywał póki nie naciśniemy stop.

Mechanizm potoków

Jeśli napiszemy polecenie 1 | polecenie2 (WAŻNE SPACJE), polecenie pierwsze będzie czytało standardowy strumień wejścia, czyli klawiaturę, a to co jest standardowym strumieniem wyjściowym procesu pierwszego nazywane jest potokiem i to właśnie będzie standardowe wejście dla polecenia 2 i dopiero jego standardowy strumień wyjścia trafi na ekran. Czyli to takie połączenie tych dwóch procesów.

Ls –R / | lessLs –R czyli wyświetlamy katalog i zawartości podkatalogów tego katalogu, u nas to katalog główny, less je ładnie uporządkuje, by nam było łatwo je obejrzeć, jest też opcja more, manual z niego korzysta.

Ls –1 | sortLs –1 powoduje ze dane są wyświetlane w formacie 1 plik na linięCzyli odczyta kolejne linie ze standardowego wejścia, sortuje i wyświetla

Cat /etc/passwd | grep

Page 16: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 16

Powiedzmy, ze chcemy zajrzeć do pliku, gdzie są przechowywane konta użytkowników czyli /etc/passwdGrep odczytuje kolejne linie strumienia wejściowego i wybiera te które pasują do określonego wzorca i zapisujemy w je w postaci wyrażeń regularnych. Jak wpiszemy ciąg znaków to grep znajdzie te linie, które wpiszemy jako argument.

Filtry – przeczytalismy z wazniakaCat plik | head –n 10

Leksykograficznie to znaczy zgodnie z alfabetem

GrepWyrażenie regularne – to tego typu co było z * itp. Budujemy je tak: podstawowym znakiem jest kropka i zastępuje ona dowolny znak. Np.k.t to wyrażenie to dopasuje wszystkie linie zawierające taki ciąg znaków(kit, kat, kot). Tu * oznacza już nie dowolny ciąg znaków, tylko powtórzenie dowolną ilość razy wyrażenia, które znajduje się po lewej stronie gwiazdki. Dlatego .* oznacza dowolna ilość znaków bo . oznacza dowolny znak i jest on powtórzony dowolną ilość razy.

^Ala to wyświetla się wszystkie linie zaczynające się od Ala.Kota$ to wyświetlą się wszystkie te które kończą się na ‘kota’. [] powoduje, że zostaje dopasowany dowolny znak wymieniony wewnątrz nawiasu np.k[ao]t to do takiego wyrażenia będą pasowały wszystkie linie zawierające ciąg znaków kot albo kat, ale np. kit już nie. K[^ao]t to będzie odwrotnie czyli wszystkie dopasuje poza tymi w nawiasie, czyli już tu kot będzie źle, ale kit będzie ok.() znaczy po prostu do grupowaniak(ab)* to do tego będą dopasowane linie kab potem kabab potem kababab itp.

Zadania z wazniaka

Zadanie 0.Wyświetl plik /etc/passwd z podziałem na strony przyjmując, że strona ma 5 linii tekstu.Twórczość Krzysia: more -5 –c /etc/passwd

Zadanie 1.Korzystając z polecenia cat utwórz plik tekst3, który będzie składał się z zawartości plikutekst1, ciągu znaków podanego ze standardowego wejścia (klawiatury) i pliku tekst2.

Wyświetliliśmy manuala dla cat to tam jest ze jeśli nie ma argumentu lub jest – to znaczy ze jest czytane standardowe wejście więc:

Cat plik1 – plik2 > plik

Przekierowanie standardowego strumienia diagnostycznegoLs –R / > plik to komunikaty o charakterze diagnostycznym czyli np. stwierdzenie ze nie mamy do czegoś uprawnień tez będą wyświetlone. Jeśli napiszemyLs –R / PLIK 2> PLIK2 wtedy komunikaty o błędach będą w osobnym pliku, a jeśli nas te komunikaty nie interesują, to możemy wsadzić je do kosza czyli do pliku /dev/null

Zadanie 2Wyświetl po 5 pierwszych linii wszystkich plików w swoim katalogu domowym w taki sposób, aby nie były wyświetlane ich nazwy.

Page 17: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 17

Head –qn 5 *.txt q jest po to by nie wyświetlał nazw. Jak zrobimy z .txt to nic nie wyświetli, bo akurat ja mam takie pliki że w nich nic nie ma. Jak zrobię samo * to będzie krzyczał bo wyświetli nie tyko pliki ale katalogi też, więc wypadałoby napisać

Find . –type f –exec head –qn 5 {} \;Find odszuka nie tylko pliki w katalogu ale też w jego podkatalogach, dlatego dorzucamy jeszcze

Find . –maxdepth 1 –type f –exec head –qn 5 {} \;

Zadanie 3Wyświetl linie o numerach 3, 4 i 5 z pliku /etc/passwd

Są to linie, które tworzą spójny blok w sensie są kolejne, a nie jakieś np. 2 ,5,7.

Cat –n /etc/passwd | head –n 5 | tail –n 3Pierwsze –n jest po to by cat ponumerowało linie, byśmy wiedzieli, czy nam faktycznie ładnie wyświetlił.

Zadanie 4Wyświetl linie o numerach 7, 6 i 5 od końca pliku /etc/passwd

Cat –n /etc/passwd | tail –n 7 | head –n 3

Zadanie 5Wyświetl zawartość /etc/passwd w jednej linii

Twórczość własna (każę mu wyświetlić w ten sposób, ze zamieniam entery na spacje):Cat /etc/passwd | tr „\n” „ „

Zadanie 6Za pomocą filtru tr wykonaj modyfikację pliku, polegającą na umieszczeniu każdego słowa wosobnej linii

tr jest od translate\t znak tabulacji\n znak nowej linii u nas jest dwa razy by i spacja i tabulacja były zamienione, jeśli napiszemy tylko jedno \n to też będzie ok.

cat plik | tr „ \t” „\n\n”

Ładnie widać zastosowanie to polecenia na pliku w którym jest tylko dzisiejsza data.

Zadanie 7Zlicz wszystkie pliki znajdujące się w katalogu /etc i jego podkatalogach

Wc - Word Count, a -l jest od czytania linii

Find /etc/ | wc –l

Page 18: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 18

Zadanie 8Napisać polecenie zliczające sumę znaków z pierwszych trzech linii pliku /etc/passwd

Czyli ten plik wrzucimy w potok, potem będziemy chcieli wyłuskać te trzy linie, a na koniec zliczyć znaki.

Cat /etc/passwd | head –n 3 | wc –c

-c by zliczał znakiAle ono zlicza też spacje i entery, a to nam się nie podoba, wiec może usuńmy te znaki?

Cat /etc/passwd | head –n 3 | tr –d “ \n” | wc –c

Zadanie 9Wyświetl listę plików z aktualnego katalogu, zamieniając wszystkie małe litery na duże.

Poszłoby ls | tr abcd..z ABC..Z tylko trzeba by było je wszystkie wymienić, by było łatwiej to Ls | tr a-z A-Z

Zadanie 10Wyświetl listę praw dostępu do plików w aktualnym katalogu, ich rozmiar i nazwę

Zauważmy, że jak napiszemy ls –l to polecenie to wyświetla w kolumnach wszystkie informacje, kolumny są od siebie oddzielone spacjami, a my chcemy tylko niektóre te kolumny

-f mówi nam o tym która kolumna mnie interesuje ale domyślnym separatorem kolumn jest znak tabulacji, a u nas to nie jest tabulacja tylko spacja dlatego używamy –d

ls –l | cut –f 1,5,9 –d “ “

Ale wtedy gdy on ma dwie spacje pod rząd to się wszystko psuje, bo myśli że po jednej spacji jednak jest kolejna kolumna.

ls –l | tr –s “ “ | cut –f 1,5,9 –d “ “

Tyle że nam się znów formatowanie rozjechało…Zamieńmy więc wszystkie spacje na znak tabulacji

ls –l | tr –s “ “ | cut –f 1,5,9 –d “ “ | tr “ “ “\t”

Ćwiczenia 8

Przetwarzanie potokowe ciąg dalszy

Zadanie 10 inna wersjaWyświetl listę praw dostępu do plików w aktualnym katalogu, ich rozmiar i nazwę

Inna wersja niż ls -l | cut

find . -maxdepth 1 -printf "%M %s %p \n"

Page 19: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 19

printf wyświetla dane sformatowane i teraz po prawej stronie wyświetlamy sposób formatowania

M od mode w sensie prawa dostępus jak sizep chyba jak nazwa

skoro są spacje to dlatego jest ""\n by wszystko było w nowej linii

Zadanie 11Wyświetl listę plików w aktualnym katalogu, posortowaną według rozmiaru pliku

ls -l | tr -s " " | sort -k 5 -n | cut -f 9 -d " "

rozmiar jest w piątej kolumnie, stad -k 5 man sort potem -t jest od separatora kolumn, nie używamy, bo boimy się, że wtedy nie poradzi sobie ze spacjami wielokrotnymi, domyślnie jest przejście ze znaku białego na inny niż biały, ale nie wiadomo co z tego...najpierw ściągamy wielokrotne spacje by jakoś to poszło po to jest tr, inaczej by nie wiedziałile jest kolumn, gdyby było dużo spacjisortowanie takie jednak stosuje kolejność leksykograficzną, a my chcemy inaczej po to jest-n by sortował wartości numeryczne zgodnie z naturalnym porządkiem liczbowyma potem jest cut by wyświetlił tylko 9 kolumnę, wcześniejsze wycina

Zadanie 12Wyświetl zawartość pliku /etc/passwd posortowaną wg numerów UID w kolejności odnajwiększego do najmniejszego

sort -n -k 3 -t : /etc/passwd | less

sort -n -k 3 oznacza sortuj numerycznie względem 3 kolumny -t " " by to był domyślny separator

Zadanie 13Wyświetl zawartość pliku /etc/passwd posortowaną najpierw wg numerów GID wkolejności od największego do najmniejszego, a następnie UID

sort -n -k 3 -t : /etc/passwd | sort -ns -k 4 -t : | more

-s jest od tego by sortowanie było stabilne czyli by kolejne sortowanie nie psuło poprzedniego

Zadanie 19Wyświetl nazwy tych użytkowników, którzy domyślnie używają innego interpretera niżbash

.*\.txtpisze tak bo to wyrażenie regularne i chodzi o to ze .* oznacza dowolna ilość dowolnychznaków potem jest zacytowana kolejna kropka jako .txt a zacytowana bo jest znakiem specjalnym znaczy co innego niż ta pierwsza kropka

cat /etc/passwd | grep -v /bin/bash$ | cut -f 1 -d :

Page 20: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 20

-v sprawi ze grep wybierze linie NIE pasujące do wzorca, a my chcemy wyświetlić wszystkoco nie zawiera /bin/bash na końcu jest $, by wiedział, że te linie sie maja tak kończyćmożna dać :/bin/bash w sensie że teoretycznie mogłoby być tak, że bez tego dwukropkaznajdują sie jedni, a z dwukropkiem drudzy choć u nas ta nie ma

a końcówka mówi ze ma zostać wycięte wszystko poza pierwszą kolumną i że separatoremkolumn jest :, a nie domyślna spacja

Zadanie 14Podaj liczbę plików każdego użytkownika

uniq - jeśli po sobie pojawi sie wielokrotnie ta sama linia to polecenie to ściśnie to do jednej linii

najpierw zobaczmy o co chodzi:cat > pplikAlaAlamamakotakotactrl + d

a teraz cat plik | uniq

i faktycznie wypluje tylko pojedyncze, a oczywiście nie zmieni wejściowego plikuno i mamy do uniq przełącznik -c który zlicza ilość powtórzeń

chcemy wiec, by jedna linia odpowiadała jednemu plikowi użytkownika, czyli chybabędziemy sortować tez po identyfikatorach użytkownika by to było sensowne

Opis tego co niżej:ls -l po to by był też identyfikator użytkownika/ oznacza katalog głównyR to przełącznik powoduje działanie ls rekursywnectrl + c zatrzyma2> to było standardowe wyjście diagnostyczne (błędy, te sprawy)/dev/null to kosz, nie można z niego czytać ale można zapisywaćgrep... ma mi usunąć puste linie czy spacje czy cos takiego, potem znów wyrzucam to co mi jest niepotrzebne, bo to co nas interesuje nigdy nie zaczyna sie /, bo zaczyna sie bajtempełnym sekwencji uprawnieńA potem mamy dowolna ilość znaków które kończą sie dwukropkiem na końcu liniichyba"" by sie przydały ael nie jest to pewnewyrzucam potem tez to co sie zaczyna od total bo on tak to zawsze to wyświetla a niepotrzebnie nam z tych danych które mam chcemy tylko 3 kolumne-k było przy sortowaniu a -f przy wycinaniuściągamy tez spacje na wszelki wypadekspacje można tez cytować \dwa razy jest sort by było ładniej

Page 21: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 21

ls -lR /home/students 2>/dev/null | grep -v ^$ | grep -v "^/.*:$" | grep -v ^total | tr -s " " | cut -f 3 -d " " | sort | uniq -c | sort

w większości w wyniku ostatniego polecenia dostaniemy 1 bo nie mamy uprawnieńby zobaczyć pliki innych użytkowników i widzimy tylko ich ten główny katalog

dane sa posortowane numerycznie względem ilości plików, ale wypadało napisać -npo postu tu tak wyszło bo to kwestia sortowania (konsultacje)

można to było zrobić prościej: mówimy by znalazł w katalogu głównym cokolwiek, żadnych augmentówpiszemy by wyświetlił to w sposób formatowany%U jak user

find / -printf "%U\n" | sort | uniq -c | sort

Poniżej moja radosna twórczość czyli praca domowa;

Zad 15Sporządź statystykę praw dostępu (dla każdego z praw dostępu podaj ile razy zostało ono przydzielone).

Po konsultacjach doszłam do wniosku, że chodzi o :Ls –l | cut –f 1 –d „ „ | sort | uniq -c

Zad 16Podaj nazwy trzech najmniejszych plików w katalogu posortowane wg nazwy

ls –l ~ | grep ^- | tr -s " " | sort -k 5 -n | head -n 3 | sort -k 9 | cut -f 9 -d " " | sort

Zad 17Podaj pięciu użytkowników o największej liczbie uruchomionych procesów

ps -au | tr -s " " | cut -f 1 -d " " | uniq -c | sort -nr | head -n 5 | tr -s " " | cut -f 3 -d " "

wersja z ćwiczeń

ps -au | cut -f 1 -d " " | sort | uniq -c | sort -n | tail -n 5

Zad 18Wyświetl zawartość 3 największych podkatalogów katalogu bieżącego

ls `ls -l | grep ^d | tr -s " " | sort -rk 5 | head -n 3 | cut -f 9 -d " "`

Zad 21Wyświetl statystykę używanych komend (bez argumentów) w postaci posortowanej listy : ilość komenda

History | tr –s „ „ | cut –f 3 –d „ „ | sort | uniq –c

Zad 22

Page 22: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 22

W podanym katalogu utwórz podkatalogi wszystkim użytkownikom ze swojego roku I dodatkowo zapisz w pliku o nazwie users.txt posortowana listę tych użytkowników.

Zad 23Sprawdź, czy któryś z użytkowników jest zalogowany w systemie więcej niż jeden raz. Dla każdego takiego użytkownika należy wyświetlić jego identyfikator i listę terminali na których pracuje.

Ćwiczenia 9

Dane utracone, próba odzyskania…Oto polecenie które facet kazał nam wykonać

Wyświetl listę wszystkich skrytpów powłoki z katalogu ~ i jego podkatalogów

Twórczość Krzysia:find ~ -type f -printf "%p:" -exec head -n 1 {} \; | egrep ':#!/bin/bash' | cut -f 1 -d : egrep to to samo co grep –E I uzywamy go wtedy gdy następuije potem wyrazenie regularne u nas ‘’natomiast printf jest z find i %p oznacza nazwę pliku

Zadanie 20Wyświetl nazwy wszystkich plików nagłówkowych posortowane wykorzystywanych wplikach bieżącego katalogu

find ~ -maxdepth 1 -type f -exec cat {} \; | grep ^#include\ \< | cut -f2 -d \< | cut -f1 -d \> | sort | uniq

Zatem interesują nas pliki, które mają w swoim nagłówku coś na kształt #include<stdio.h>, gdzie za nagłówek uważamy stdio.h.Czyli chodzi o to by szukał w katalogu użytkownika na głębokość równą 1(czyli tylko w omawianym katalogu, już nie przeszukiwał jego podkatalogów). Brał pod uwagę tylko pliki stąd jest type f i wyświetlał to co znajdzie. Wrzucamy to w potok. Z tego grepujemy, czyli wypisujemy na ekran tylko interesujące nas linie z owych plików takie, które zaczynają się od #include (tu chyba prowadzący uznał że po include jest spacja, a zatem musimy ją zacytować…). Następnie z tego potoku wycinamy druga kolumnę stąd jest f2, gdzie za separator uważamy <, bo prowadzącemu chodzi o to, ze może być pomiędzy < tekst dużo spacji… następnie to samo robimy z prawą stroną. Na koniec całość sortujemy, by móc skorzystać z polecenia uniq, które sprawi, że nawet jeśli jakiś nagłówek będzie popularny i wystąpi w wielu plikach, to i tak przy sortowaniu uwzględni wszystkiego jego wystąpienia i a potem polecenie uniq wszystkie powtarzające się linie ścieśni do jednej. Musimy też cytować znaki takie jak < czy >. Nie powinien nam niczego wyświetlić, ponieważ w naszych plikach nie ma żadnego z takimi nagłówkami.

Fajne jest polecenieHistoryKtóre w sumie pokazuje historię większości tego co zrobił dany użytkownik na irecie.

Zacznijmy najpierw od tego, że jak naciśniemy Bash

Page 23: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 23

i potem enter, to tak naprawdę uruchomimy drugiego basha co możemy sprawdzić poleceniem wyświetlającym strukturę drzewiastąps fxWychodzimy z tego basha poleceniem exit

Możemy dalej napisać coś takiego:a=1czyli jakby stworzyliśmy zmienną a i nadaliśmy jej wartość 1. By ją wyświetlić wpisujemyecho $a

Działają operacje matematyczne np.Expr $a + 1

To wszystko jednak miało miejsce w podstawowej pierwszej powłoce basha. Jeśli otworzymy drugą, czyli wpiszemy bash i naciśniemy enter, to już wywołanie echo $a nam niczego nie zwróci. By to zmienić, należy wpisaćexport aI wtedy jak otworzę znów bash kolejnego I wpiszę echo $a to już mi wyświetli aktualną wartość tej zmiennej.

Działają także rzeczy takie jak (tylko uwaga bardzo na spacje!)a=`expr $a + 1`czyli ten rodzaj cytowania, lub poniższy (po to by zmiennej po lewej stronie nadać wartość wyrażenia musze przed nawiasy wsadzić $, bez tego drugiego $ też ładnie działa. Działa także (( a = a + 1 )), czyli po prostu w (()) mogę wykonywać obliczenia.

a=$(($a+1))

Wpisywaliśmy też coś takiego jakSet – wyświetla wartości wszystkich zmiennych środowiskowych cokolwiek to oznacza…

Wyrażenia warunkowe

if test 1 -eq 1; then ls; fi

Lub zapisane równoważnie poniżej (przypominam że test zwracało kod czy wyrażenie po nim następujące jest poprawne czy nie)

If warunekThenInstrukcjafi

Odpowiednikiem test jest nawias kwadratowy jak poniżej UWAŻAĆ NA SPACJE!

if [ 1 -eq 1 ]; then ls; fi

Oczywiście takich rzeczy jak powyżej można używać też bez wyrażeń warunkowych np.

[ 1 -eq 3 ] || ls

Page 24: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 24

Może w wyrażeniu warunkowym być zwykła instrukcja, wtedy wyrażenie wykona się, gdy dostanie odpowiedni kod błędu, który mówi, że wszystko wykonało się poprawnie, jak poniżej.

if ls ; then echo udalosie; fiif ls ble ; then echo udalosie; fiif ls ble ; then echo yuio; else echo nie; fi

Działają tez poniższe rzeczy znów w jednym z dwóch możliwych zapisów. I jest to iterator po In piszemy zakres, możemy wymienić lub napisać seq

for i in 1 2 3 ; do echo $a; done

for i in `seq 1 10` do echo mama done

Tak jak mamy powyżej, to wyświetli 10 razy słowo mama. Można napisać `seq 1 10 2`, gdzie ostatnia liczba jest krokiem.Ciekawa jest wersja poniższa, wówczas wykona echo tyle razy ile jest takich plików w bieżącym folderze (u mnie jest aktualnie jeden).

for i in *.txt; do echo mama; done

Poniżej kolejna pętla, znów dwie możliwości zapisu, wariant –lt to less then, jeśli wstukamy to co poniżej to pętla będzie nieskończona, bo zawsze 6 które jest pod a będzie mniejsze od 10, nigdzie tu nie zwiększamy naszego a

while [ $a -lt 10 ]; do echo mama; done

Było jeszcze coś tego typuwhile ! [ $1 = "" ]

czyli nieprawda że…

SKRYPTYStworzymy skrypt:

vim skryptinsert by móc wpisywać i poniższą treść. Zaczynam ZAWSZE od tej linijki, którą napisałamponiżej, bo to ona oznacza, że to jest skrypt, czyli taki jakby mały programik, którego instrukcje wykonują się sekwencyjnie po włączeniu. Zrobiliśmy tu wypisywanie parametrów, które były podane podczas uruchamiania skryptu, o tym będzie dalej.

#!/bin/bashecho podales parametryfor i in $@doecho $idoneecho drugi parametr $2

Page 25: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 25

Następnie esc :wq i jest dobrze ;) Teraz musimy zmienić uprawnienia, by ten plik mógł być wykonywany, najprędzej będzie zrobić go wykonywalnym dla wszystkich tj.

chmod +x skrypt

A potem już uruchamiamy, zawsze zaczynamy od ./nazwaskryptu argumenty skryptu

./skrypt 2 3

./skrypt Ala ma kota

Na koniec wpisaliśmyman bash/PROMPTI popatrzyliśmy co i jak, bo chodzi nam o to by zmienić znak zachęty na taki jakiego wzorzec widać poniżej. Gdy się wylogujemy i zalogujemy ponownie, znak zachęty będzie taki jak zawsze.

nazwa uzytkkownika@nazwa hosta data godziny enter katalog aktualny > chodzi o stworzenie swojego znaku zachęty, po prostu wpisuje to co poniżej i już

PS1="\u@\H \d \t\n\w >"

\u user\H host\t time\d data\n by poszedł do kolejnej linii\w katalog aktualny

ls -a wyświetli wszystkie pliki nawet ukryte, jeden z nich to .bashrc a drugi .bash_profile.

Powiedzmy, że chcemy zawsze po zalogowaniu wykonać jakieś polecenia w tym celu musimy napisać skrypt w jednym z tych plików vim .bash_profile i tu to polecenie np echo witaj na irecie i faktycznie jak sie wylogujemy i zalogujemy to to zobaczymy ;)

Shift przesuwa parametry w prawo

#!/bin/bash

licznik=0

for i in `cut -f 3 -d : /etc/passwd | sort -n`do if (( $((i)) >= 3356 && $((i)) <= 4976 )) then ((licznik++)) fidoneecho $licznik

liczy użytkowników o 3356 <= UID <= 4976

vim skrypt#!/bin/bash

Page 26: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 26

for f in "$@" // kolejne argumenty pozycyjne, chodzi tez o interpretcje spacjidoecho trzy najczesciej powtarzajace sie slowa[ -f "$f" ] && cat $f | tr " \t" \\n | sort | grep -v ^$ | uniq -c | tail -n 3done

-f plik zwykły jest i istniejespacje i tabulacje zamieniamy na znak nowej linii by mieć statystykę slow

potem esc :wqchmod +x skrypt./skrypt skrypt

#!/bin/bash

s="stop"c=4read awhile (( $((a)) != $((s)) ))do echo $((a)) read adone

#!/bin/bash

zm=$1shiftfor i in "$@"do cp $zm `echo -n $i ; echo -n "/" ; echo -n $zm`done

if [ -z "$1" ]jeśli warunek prawdziwy to argument pustyif [ -n "$1" ]jeśli warunek prawdziwy to argument niepusty

teraz mamy napisać skrypt, który w nieskończonej pętli będzie wypisywał słowo pingale z odpowiednimi spacjami bo tak...

vim skrypt

#!/bin/bashwhile [ 1 ]do

for i in a a ado

echo -en "ping \a" sleep 1

doneecho -e "\n"done

Page 27: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 27

\a zmusza by został wydany dźwięk-e blokuje by echo nie przepisywało wszystkiego , tylko interpretowało literkępoprzedzaną ukośnikiem-n po to by nie dodawał domyślnie znaku nowej linii do wyświetlanego ciągu znaków

sleep by było fajniea potem ctrl + c by zakończyć

trap polecenie sygnał chodzi o to ze jak interpreter otrzyma sygnał to wykona polecenie, to takie przechwytywanie

przechwyć sygnał wykonując polecenie:

trap "echo BYE; exit" SIGINT

Dopisuje je na samym początku w moim skrypcie zaraz po linii #!...SIGINT to przechwycenie sygnału zakończenia, jeśli wpiszemy ctr+z, czyli zastopujemy tylko to sie nasze bye nie wyświetli

teraz napiszemy skrypt którym możemy sterować z zewnątrzSIGUSR1SIGUSR2użytkownik ma możliwość zdefiniowania domyślnej akcji, jaką wykonuje program jak dostanie taki sygnał.kiedyś robiliśmy tak:kill -s SIGUSR1 PIDale to wymagało od nas ps i przepisania tego PID, wiec uprośćmy to. Nasz skrypt będzie tworzył plik tymczasowy w katalogu użytkownika w którym będzie tworzył swój numer pid

test -d ~/.maszynaping || mkdir ~/.

czyli tworzymy ten katalog jesli nie istniej. oznacza ze katalog jest ukryty

if [ -f ~/.maszynaping/pid] // czyli jeśli istnieje juz taki plik to wyświetlimy komunikatthen

echo maszyna jest juz uruchomionaexit

fi

$$ wyśle nam ten numer PID

echo $$ > ~/.maszynaping/pid

trap "TRYB=ping" SIGUSR1trap "TRYB=pong" SIGUSR2trap "zatrzymaj"SIGINT

TRYB=ping // czyi definiuje domyslna wartosc

i teraz definiuję zatrzymaj, a poniższe –f jest chyba po to by nie pytał nas czy na pewno chcemy usunąć czy jakoś tak

Page 28: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 28

function nazwa () polecenie lub blok poleceń w klamrze czy oddzielnych średnikami

function zatrzymaj () {rm -f ~/.maszynaping/pid echo -e "\n Maszyna konczy dzialanie"

exit}

while [ 1 ]do

echo -en "\r \r"//\r to powrót karetki, czyli u nas powrót kursora na początek linii\\spacje sa o to by wyczyścić

for i in a b 84do

echo -en "\a $TRYB \a" sleep 1

donedone

całokształt w skrypt1

$TRYB t zawartość zmiennej tryb

uruchamiamy kolejna sesje putty, w tamtym interpreterze poleceń działa sobie nasze pingkill -s SIGUSR2 `cat ~/.maszynaping/pid`-s jest od tego ze wysyłam sygnał a nie cos innego i działa :D

w domciu napisać skrypt który jako argument przyjmuje tryb w który maszyna zostanie ustawiona, sprawdzić czy maszyna ta jest uruchomiona

teraz myślimy jak przyśpieszyć ta maszynęmożna sleep $N i np przed programem chyba N=1ale wtedy przy trap może byc kłopot...

man sleep i można by wpisać ułamkowa część sekundy

czyli teraz mamy jeden tryb...

N=1while [ 1 ]do

echo -en "\r \r"for i in a b 84

doecho -en "\a ping \a" sleep $N

donedone

przy cytowaniu \ czy * traca swoja normalne znaczenie a np $ nie traci

Page 29: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 29

jak napiszemy "$1" to jest ok., dlatego cytujemy inaczej, apostrofem, nei odwróconym tylko zwykłymcalsc w sk2wtedy dowolny ciąg znaków jest traktowany zawsze dosłownie!o tyle przy trap zawsze tak jest lepiejlae prosciej byloby trap 'up' SIGUSR1trap 'down' SIGUSR2function up () {ifcos tam....

poznaliśmy potok nienazwany: program1 | program2Istnieją specjalne pliki, które jeśli mają odpowiednie uprawnienia, są takimi jakby programikami, potokami takim innymi:

stwórzmy potok, to co pierwsze wpisane jest jak pierwsze odczytane czyli taka zwykła kolejka FIFo

mkfifo nazwa i pojaw sie on jako element systemu plików co można zobaczyć po ls -l,będzie innym kolorkiem i w pierwszej linii nie jest ani linia ani d, tylko p jak potok

mkfifo potok

echo hello > potok// wtedy proces związany z echo się blokuje, czeka póki inny proces nie odczyta tych danych z potoku, wiec przechodzimy do drugiej konsoli i tam piszemy:

cat < potok

//i będzie wszystko ok

jeśli znów w konsoli z cat napiszemy to samo czylicat < potok, to cat nas zawiesi, bo chce wziąć z potoku ale tam juz nic nie ma , wiec wracamy do konsoli z potokiem i tam cos wpiszemy to on je pobierze, czyli mamy komunikację między potokami. Możemy potokom przyznawać uprawnienia tak jak innym plikom

teraz napiszemy 2 skrypty, które będą się wymieniać informacjami za pomocą potoków nazwanych. Będziemy chcieli napisać grę kamień, papier , nożyczki, czyli mamy 2 graczy, każdy z nich wybiera jedna z trzech możliwości i w zależności od kombinacji jakie gracze wybiorą mamy werdykt kto wygrał, sytuacja będzie niesymetryczna

pierwszy skryptstworzy odpowiednie potoki A i B, będzie nimi zarządzał, odczytywał dane z potoków podejmowałdecyzje1. Stworzy dwa potoki, Potok A wysyła dane od klienta do serwera, a potok B w drugą stronę2 pobierze od użytkownika wybór KamienPapaierNozyczki3. odczyta wybór klienta z potoku A4. wyśle nasz wybór do klienta (wynik rozgrywki będzie jednoczenie obliczany przez klienta i serwera) przez potok B5. Oblicza i wyświetla wynik rundy6. zapisujemy informacje o rozgrywce plik dziennika

Page 30: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 30

7. wracamy do punktu drugiego, koniec skryptu serwera gry

Użytkownicy unixa nie mówią serwer tylko demon

piszemy cp ~jakubo/kpnd ~

wchodzimy do tego pliku i omawiamy linia p linii

najpierw jest zadeklarowana funkcja o nazwie akcja, wrócimy do tego bloku instrukcji późniejpotem jest definicja 3 zmiennych, potem komunikat powitalny echodalej komenda wyświetlająca tekst warunkowoprzechodzimy strzałką niżej!!!linia 37 jest najpierw test w formie [ ] czy znajduje sie tam katalog KPN, jeśli nie t ozmieniamy by nie nękać użytkownika komunikatami tylko tworzymy ten skrypt w jego katalogu domowym (było ze średnikiem b tak było z nawiasami i exit, a teraz juz średniki sa niepotrzebne, nawias tez nie#to komentarz poza wyjątkowa linia #!bin/bashdalej w tym katalogu KPN tworzymy dwa potoki -m jest po to by byly z gory potokowiprzypisane uprawnienia i 622 oznacza ze do potoku A my jako właściciele mamy odczyt i zapis, a wszyscy pozostali mogą tylko pisać do pliku potok A

pomiędzy do i done w while-u mamyread CHOICE wtedy read wczytuje ze standardowego wejścia, czyi domyślne z klawiatury ciąg znaków i przypisuje go zmiennej wskazanej jako argumentpotem case czyli skrtowy zapis na ciąg poleceń ifpo case jest wstawiana wartość zmiennej choice powinno to byc ujęte w "" bo użytkownikmoże być głupi i wpisać pusty ciąg znaków, jeśli choice bedzie mala lub wielka litera k to wykonujemy blok instrukcji akcja z argumentem 0sa dwa ;; bo taka jest struktura case

to co nie jest istotne wyrzucamy do śmietnika bo nasz wybór mamy potem wysyłamy quit do klienta i pewne oboje zakończymy działanieecho wyświetla aktualna date godzinę w formacie określonym dla polecenia date, potem statystyki ile wygrał, przegrał itpdalej usuwamy póki A i B bo nie są potrzebne, program skończył działaniekomunikat pożegnalnypolecenie exit kończy wykonywane skryptu* wykonuje działanie domyślne, czyli co ma interpreter zrobić jeśli będzie np defaultkończymy case poleceniem esac

teraz patrzymy na blok instrukcji akcjawczytujemy do zmiennej OP_Data (opnen t data, zyl nfomacje od przeciwnika) przekierowanie standardowego wejscia z potoku Anad od nadawca ta zmienna przyjmie wartość tego co sie pojawia do pierwszej spacjinazwa_oponenta numer wyboru (0,1,2) czyli zmiennej nad przypisujemy nazwę oponenta, chodzi o to ze jeśli by dwóch klientów chciało z nami grac tego będziemy grac tylko z pierwszym, po to zapamiętujemy w zmiennej op jak sie nazywa nasz prawdziwy oponentdat rozpoczęcia partiisprawdzamy za każdym razem czy nadawca wiadomości jest naszym oponentem jeśli tak to$1 to wysyłamy do potoku B, to ten wybór, który wysyłam klientowi, d pliku dziennika

Page 31: Manipulacja strukturą plików i katalogów w systemie linux.kolos.math.uni.lodz.pl/~archive/Systemy operacyjne/cwiczenia calosc... · Ćwiczenia z systemów operacyjnych 1 Manipulacja

Ćwiczenia z systemów operacyjnych 31

w zmiennej pop_choice chcemy przechować wybór taki jak został nam wysłany przez klienta, dlatego wycinamyseria if blcza wynik partiiliczniki sie odpowiednio zmieniają

wartość zmiennej won możemy zmienić albo ak jak dawnej tj won=`expr $won + 1`albo ta jak w skrypcie musza bc dwa nawias b jeden zacza cytowanie polecenia a my chcemy obliczyć

skrypt serwer tworzy w katalogu domowym użytkownika plik chyba i tam potoki,czyli potrzeba odwołania sie do plików w katalogach domowych innej użytkownika, czyi musza być odpowiednie uprawnienia, ael to juz wiemy ze jest ok, a dokładniej potoki maja ok uprawnienia, ale miejsce gdzie sie znajdują tez musza byc z dostępem czyli katalog w którym sa mus mieć uprawnienia x by dało se wyświetlić w ogole cd

w naszym katalogu domowym tworzymy mkdir KPN, wielkość lier jest ważna wiec w naszym katalogu domowym piszemy ls -l patrzymy czy na pewno dla KPN jest -xdla użytkownika ale jeszcze użytkownicy inni musza moc przechodzić przez nasz katalog domowy, jak chce zobaczyć jakie uprawnienia ma katalog (NIE jego zawartość) to piszels -l -d ~moglsmy napisać tez ls -la wtedy by sie wypsalo wszystko lacznie z pikami ukrytymitj plikiem . czyl właśnie nasz katalog dokladam wiec xchmod +x ~potem by sie teg ostatniego x pozbyć to piszemy chmod 7 1 0 ~ lub chmod o-x ~kpnd sprawdzam czy ma uprawnienia do wykowania./kpndwystarczy jak ja mam serwer a n klienta

skrypt 2 klient, będzie ze stworzonych przez skrypt serwera potoków korzystał, a drugiemu graczowitylko wyświetlałPrzeanalizwac

skrypt klienta$1 to pierwszy argumentomijamy akcja

wyświetlenie komunikatu powitalnegosprawdzamy warunek czyli możemy kontynuować gre tylko jesl podany został uzytkowik tk ktry w swoim serwerze nas wywołał -o oznacza algernatywe -z zerwy warunek, czyli czy pusta jest zawartość argumentu skryptu czyli jesli użytkownik argumentu skryptu nie podal alb podal argument skryptu który nie jest poprawna nazwa użytkownika (sprawdzam czy Nie istnieje czyli ! katalog o podanej nazwie uzytkownka) NIE wiemy po co jest zacytowany nawias....w sensie po co w ogóle jest zbo zxa cytpwan to musi byc, nie może byc nie zacytowany skoro jest argumentem dla tet