SYSTEMY OPERACYJNE
Sprawozdanie z ćwiczeń laboratoryjnych nr 3 i 4
Prowadzący: dr hab. inż. Antoni Donigiewicz
Wykonał: Szymon Puacz I6Y2S1
Data: 17.03.2008, 31.03.2008
LAB. 3
Ciąg dalszy poleceń systemu UNIX. Loguję się standardowo, podając nazwę użytkownika i hasło, po czym znajduję się w swoim katalogu roboczym, tj. /y2s1_1/.
ln - pozwala dowiązywać dodatkową nazwę do pliku (tzw. „twarde dowiązanie”) - tzn., jeśli zmienimy plik pierwotny, to zmiany zostaną zastosowane też do dowiązania i odwrotnie; twardego dowiązania nie widać bezpośrednio, dowiązanie jest widoczne jako plik; twardego dowiązania nie można zastosować do katalogów
użycie: ln plik1 nazwa2
ln plik1 plik2 katalog - tworzy twarde dowiązania plików w wybranym katalogu
tego polecenia można użyć także z opcją:
ln -s sciezka skrot - tzw. Łącznik miękki zastępujący ścieżkę, inaczej - tworzy skrót do podanej ścieżki, możemy teraz używać skrótu, np. przy operacjach kopiowania
użycie: ln -s /export/home/y2s1_1 dostep - tworzy skrót do katalogu
cp zzz dostep - przy operacji kopiowania pliku możemy posługiwać się skrótem i nie wpisywać cały czas pełnej ścieżki
Adresowanie we/wy - przekierowanie procesów
Dla procesu mamy standardowo 1 wejście - klawiaturę i wyjście (monitor).
Oznaczenia przekierowań:
> - przekierowanie do pliku
< - przekierowanie z pliku
>> - dołączenie na końcu pliku
polecenia:
ls -l > wykaz - wynik polecenia listowania zostaje przekierowany do pliku wykaz, a nie na ekran
sort wykaz - porządkuje zawartość pliku wykaz i wynik przekazuje na ekran
who |sort |wc -l - sortuje zalogowanych użytkowników i ich zlicza; do zliczania służy polecenie: wc
wc - zliczanie w pliku
postać: wc [opcje] plik
wc -l - zlicza linie w pliku (znaki nowej linii)
wc -w - zlicza słowa w pliku
wc -c - zlicza znaki w pliku
tee - czyta ze standardowego wejścia i zapisuje do standardowego wyjścia i/lub pliku; można powiedzieć, że "rozwidla procesy"
przykład: who |sort |tee kto |wc -l - zapisuje posortowaną listę użytkowników do pliku kto i zlicza w nim linie
grep - wyświetla pasujące (linie, pliki) zgodnie z opcją
postać: grep [opcje] wzorzec plik
opcje: -c - wyświetla liczbę wierszy, w których znajduje się podany znak
-l - wyświetla nazwy plików pasujących z wzorcem
-v - wyświetla wiersze nie pasujące do wzorca w pliku
-n - wyświetla w pliku wiersze pasujące do wzorca wraz z numerami
Informacje o procesach
Wpisując polecenie id można uzyskać informacje o bieżącym użytkowniku: uid (indywidualny numer użytkownika) i gid (numer grupy).
ps -f - wyświetla informacje o procesach użytkownika, tj.:
UID - nazwa, numer użytkownika
PID - identyfikator procesu
PPID - identyfikator procesu przodka
C - liczba nice, informuje o priorytecie procesu, zawiera się w przedziale <-20;19> i im niższa jej wartośc, tym wyższy priorytet procesu, początkowo liczba ta ma wartość 0
STIME - czas uruchomienia procesu
TTY - nazwa terminala związanego z procesem (np. pts/0)
TIME - czas wykorzystania procesora; procesy nie są absorbujące dla procesora, więc wyświetla się czas zerowy
CMD - polecenie, które uruchomiło proces
ps -e - wyświetla wszystkie procesy uruchomione na serwerze
ćw. Wśród wszystkich procesów odnaleźć swoje i przekierować do pliku
przykład rozwiązania: ps -ef |grep -n `y2s1_1'|sort |tee procesy - wśród procesów wszystkich użytkowników wybieram tylko własne po uid, sortuje je i zapisuje do pliku procesy oraz na ekran
Podglądanie procesów
Tworzę pusty plik `rrr':
cat > rur
i zapisuję w nim następujący skrypt:
echo `'\pPodaj imie: \t\c''
read A
echo `'\nWprowadzono: $A\n''
sleep 10
./rrr - uruchomienie skryptu
Skrypt po uruchomieniu wyświetla tekst `Podaj imie' i pobiera dane od użytkownika, a nastepnie wyświetla i czeka w stanie uśpienia przez 10 sekund; zadaniem jest uruchomić drugie okno i załogować się na serwerze i w tym czasie, gdy będzie wykonywał się skrypt w jednym oknie, w drugim podejrzeć procesy uruchomione.
Gdy system jest w stanie uśpienia, można zauważyć, że oprócz innych uruchomiony jest właśnie proces `sleep'.
Edytor vim
Edytor `vim' uruchamiamy poleceniem:
vim nazwa_pliku
Edytor pracuje w dwóch trybach: poleceń i edycji. W momencie otwarcia - w trybie poleceń.
Nawigacja i polecenia:
strzałki lub h j k l - poruszanie po tekście
0 - przejście na początek wiersza
$ - przejście na koniec wiersza
r - zmiana bieżącego znaku (r znak)
x - kasuje znak
dw - kasuje słowo
dd - kasuje bieżącą linię
D - kasuje linię od bieżącego położenia kursora do końca (kasowany tekst nie ginie - znajduje się w buforze)
p - wstawia tekst z bufora
yw - kopiowanie słowa (należy stanąć na początku słowa)
yy - kopiowanie linii
u - odwołanie ostatniego polecenia
a - wpisywanie tekstu za bieżącym położeniem kursora
i - wpisywanie tekstu przed bieżącym położeniem kursora
ENTER - przejście do nowej linii tekstu
esc - przejście do trybu poleceń
:w ENTER - zapisanie pliku
:wq ENTER - zapis i zakończenie
:q! ENTER - zakończenie bez zapisywania
LAB. 4
tr [opcje] ciag1 ciag2
-c - zastąpienie znaków niewymienionych w pierwszym ciągu
-d - usunięcie wszystkich znaków podanych w ciągu pierwszym
-s - zastąpienie powtórzonych znaków z ciągu pierwszego pojedynczymi
przykład:
tworzę plik o zawartości:
Jeden aaa na iks
Dwa bbb na igrek
Trzy ccc na zet
tr ''[a-z]'' ''[A-Z]'' <nazwa> rezultat - zamienia wszystkie małe litery na wielkie i zapisuje w pliku `rezultat'
tr abc xyz <nazwa> rezultat2 - zamienia wszystkie znaki a b c na x y z i zapisuje w pliku `rezultat2'
cut - wycięcie kolumny lub pól z pliku
cut -b nr_bajtu plik - wycięcie wszystkiego oprócz wymienionego bajtu
cut -c nr_znaku plik - wycina wszystko oprócz znaku o podanym numerze w pliku
cut -d separator -f nr_pola plik - wyświetla pola oddzielone separatorami od pola o podanym numerze do końca
uniq plik - usuwa sąsiednie powtarzające się linie w pliku
Zarządzanie procesami
Został uruchomiony proces man ps, kombinacją klawiszy ctrlZ zawieszam proces, jednak powłoka sshd nie obsługuje zawieszenia procesu, więc przechodzę na powłokę basha poleceniem bash.
Wówczas możliwe jest zatrzymanie procesu i pojawia się wiersz
[1]+ Stopped man ps - 1 oznacza nr procesu zatrzymanego, Stopped stan procesu, a man ps - proces, który został zatrzymany
Możliwe jest uruchomienie procesu w tle poleceniem
bg nr - czyli background i podajemy nr zatrzymanego procesu;
na ekranie objawia się to komunikatem
[1]+ man ps & - & oznacza, że jest to zadanie drugoplanowe
jobs -l wyświetla ukryte procesy i ich stany
fg nr - przywrócenie procesu o określonym numerze jako pierwszoplanowego
kill - przesłanie sygnału do procesu
kill -9 PID - żądanei natychmiastowego zakończenia procesu (zabicia) o podanym numerze identyfikacyjnym
Jako ćwiczenie należało uruchomić plik skryptowy proszący o podanie imienia i sprawdzić numer procesu sleep i zatrzymać go. Najpierw podczas działania procesu sleep sprawdziłem PID poleceniem ps -u uid , a nastepnie użyłem polecenia kill -9 pid.
Edytor strumieniowy SED
Edytor ten działa wierszami.
Schemat polecenia:
sed [opcje] komenda1 [komenda2 ….] [plik1 [plik2]]
W celu dalszego ćwiczenia utworzyłem plik `nast' z zawartością.
sed -e `1 d' <nast> wynik1 - usunięcie pierwszej linii z pliku, rezultat zapisujemy w pliku wynik1
sed -e `1,3 d' <nast.> wynik2 - usunięcie linii 1-3 w pliku, rezultat zapisujemy w pliku wynik2
sed `/[1-3]/ d' - usuwa linie zawierające znaki 1-3
`/^#/ d' - usuwa linie, które mają na początku #
`/#$/ d' - usuwa linie, które mają na końcu #
d w poleceniach oznacza usuwanie, a p wypisywanie
-n - opcja ta nakazuje nie wypisywanie
`/cz/ , /10/ p' - wyświetla od wiersza zawierającego `cz' do wiersza zawierającego `10'
sed -e `s/dwa/zero/' - zamienia łańcuch pierwszy na drugi
Wszystkie polecenia można zapisać w pliku i uruchamiać jako skrypt.
WNIOSKI
Na zajęciach poznaliśmy metody i zasady komunikacji i zarządzania procesami, co daje nam większe możliwości zarządzania systemem. Dzięki poznanym edytorom vim i sed jesteśmy w stanie napisać skrypt i zapisać go w pliku, który później zostanie wykonany
7
PROCES
0 wejście
(stdin) klawiatura
1 wyjście (stdout) monitor
2 wyjście diagnostyczne (stderr) monitor