Notatki z zajęć z systemów operacyjnych PDF
Document Details
Uploaded by JollySagacity1916
Tags
Summary
Te notatki stanowią wprowadzenie do systemów operacyjnych, koncentrując się na podstawowych poleceniach systemu Linux. Zawierają informacje na temat poleceń login, logout, man, alias, gdzie wyjaśniony jest sposób ich działania i zastosowania. Notatki omawiają również takie operacje jak wyszukiwanie plików (find) oraz tworzenie i manipulowanie katalogami.
Full Transcript
Polecenie login Służy do logowania (rejestrowania się w systemie). Proces logowania wymaga podania nazwy użytkownika i hasła. login - system poprosi o nazwę użytkownika i hasło login nazwa\_użytkownika - system poprosi o hasło (program putty 'sam' wydaje polecenie login) Polecenie logout Służy d...
Polecenie login Służy do logowania (rejestrowania się w systemie). Proces logowania wymaga podania nazwy użytkownika i hasła. login - system poprosi o nazwę użytkownika i hasło login nazwa\_użytkownika - system poprosi o hasło (program putty 'sam' wydaje polecenie login) Polecenie logout Służy do wylogowania (zakończenia pracy z systemem). logout (program putty zakończy działanie) Powłoka Powłoka (ang shell) jest interfejsem użytkownika pozwalającym na wprowadzanie komend, ich interpretację oraz komunikację z niższymi warstwami Linuxa, w szczególności poprzez biblioteki i funkcje systemowe z jądrem systemu. Powłoka w UNIXie pełni funkcję zbliżoną do interpretatora poleceń COMMAND.COM w Dosie. Istnieje kilka powłok (sh, csh, bash). Najczęściej wykorzystywaną powłoką jest bash. Znak zachęty powłoki ma postać: \[użytkownik\@serwer bieżący\_katalog\]\$ W przypadku administratora systemu zamiast znaku '\$' występuje '\#'. Uzyskiwanie pomocy Polecenie man Polecenie man (ang. manual) wyświetla kompletny opis danego polecenia (zastosowanie, składnia, opcje) man nazwa\_polecenia\_lub\_programu przykłady: man man - wyświetla informacje o poleceniu man man cd -... o poleceniu cd man ls -... o poleceniu ls Wynikiem jest strona podręcznika zawierająca opis sposobu użytkowania polecenia. Po stronie tej można się przemieszczać (w górę i w dół) za pomocą strzałek. Wyjście z programu następuje po naciśnięciu znaku "q". Opis polecenia podzielony jest na kilka sekcji: - nazwa (ang. name) -- w sekcji tej jest podawana nazwa polecenia (programu), wraz ze skrótowym opisem - składnia (ang. synopsis) -- sposób wywoływania polecenia - opis (ang. description) -- szczegółowy sposób użytkowania polecenia oraz opis opcji - zobacz również (ang. see also) -- lista stron powiązanych tematycznie - znane błędy(ang. bugs) -- informacje o znanych błędach Pliki ze stron podręcznika znajdują się w podkatalogach katalogu "/usr/man", na przykład plik podręcznika do polecenia man: /usr/man/man1/man.1.gz Polecenia info, pinfo Są to polecenia alternatywne do man, czasem w systemie udostępniany jest tylko jeden system pomocy, dlatego warto wiedzieć o istnieniu innych możliwości. info nazwa\_polecenia\_lub\_programu Wyjście -- podobnie jak z man -- za pomocą 'q'. Opcja \--help Jedną z opcji każdego polecenia jest opcja \--help, umożliwiająca wyświetlenie pomocy kontekstowej: ls \-- help cd \-- help Polecenie find Służy do wyszukiwania plików o zadanej nazwie. Polecenie ma wiele opcji -- najważniejszą z nich jest opcja umożliwiająca podanie katalogu do przeszukania. W poleceniu można używać symboli maskujących: '\*' i '?'. find --name index.htm find --name in\*.htm Polecenie alias Polecenie alias tworzy synonim dla innego polecenia. Składnia dla polecenia alias, gdy chcemy utworzyć nowy synonim jest następująca: alias synonim=polecenie alias listuj=\'ls -l\' powyższe polecenie tworzy alias o nazwie listuj, który wykonuje polecenie ls -l (polecenie musi być w apostrofach jeżeli występują w nim spacje). Jedyną ważną opcją polecenia alias jest -p. Po wydaniu polecenia: alias -p wyprowadzone na ekran zostają wszystkie zdefiniowane synonimy. Polecenie whereis Polecenie to służy do szybkiego odnajdywania plików. W przeciwieństwie do find nie przeszukuje całego systemu plików, a jedynie wybrane foldery systemowe ("/usr/bin", "/usr/man", "usr/sbin"). Umożliwia szybkie wyszukanie plików będących poleceniami lub programami, plikami konfiguracyjnymi lub plikami pomocy. whereis find - odnajdzie program find Polecenia whatis, apropos Polecenia te dostarczają krótkich informacji na temat poleceń, na podstawie własnej bazy nazw poleceń i opisów. whatis przeszukuje tą bazę uwzględniając tylko nazwę polecenia, która musi być identyczna z podanym tekstem. Natomiast apropos przeszukuje również opisy poleceń. Sama baza danych (najczęściej znajduje się w pliku /var/cache/man/whatis) jest zwykłym plikiem tekstowym zbudowanym na podstawie stron manuala przy pomocy polecenia makewhatis. whatis tekst apropos tekst Parametr tekst określa nazwę polecenia którego opis zostanie wyświetlony, może to być lista poleceń rozdzielonych spacją. Uzyskiwanie informacji o użytkownikach Polecenie who W systemie linux może pracować naraz wielu użytkowników. Polecenie who wyświetla listę zalogowanych użytkowników. Jeżeli polecenie jest uruchomione bez parametrów, zostaną wyświetlone następujące informacje: nazwa użytkownika, linia terminalu i czas logowania. Jeżeli podano dwa parametry, które nie są opcjami wyświetlone zostaną informacje tylko o użytkowniku który wpisał komendę. Zwykle podaje się parametry \"am i\". Najważniejsze opcje polecenia who -q wypisuje tylko nazwy użytkowników oraz ich ilość -i wypisuje jak długo użytkownik nic nie robił -w wypisuje po nazwie użytkownika znak dotyczący przyjmowania komunikatów (write): '+' -- przyjmuje komunikaty; '-' -- nie przyjmuje Polecenie lastlog wyświetla datę i czas ostatniego logowania użytkowników. lastlog opcje Najważniejsze opcje polecenia lastlog: -u nazwa\_użytkownika - wyświetla czas i datę ostatniego logowania użytkownika -t n - wyświetla czas i datę ostatniego logowania użytkowników którzy logowali się w przeciągu ostatnich n dni Polecenie lastlog pobiera dane z pliku /var/log/lastlog. Przykładowe wywołanie polecenia lastlog: \[root\@localhost rc.d\]\# lastlog -t 4 Użytkownik Port Z Ostatnio ----------------- --- -------------------------------- root tty2 nie sie 10 02:03:37 +0200 2003 and3md tty1 nie sie 10 13:24:30 +0200 2003 Dodatkowe informacje dostępne są w systemie pomocy. Polecenia w, last, finger Są to polecenia o działaniu podobnym do who, różniące się zakresem zwracanych informacji i występowaniem w różnych wersjach systemu. Proszę zapoznać się z nimi samodzielnie. System plików -- podstawy - W systemie DOS napędy dysków adresowane są poprzez podanie litery przypisanej do danego napędu. Linux natomiast integruje wszystkie napędy dysków w jednym, wspólnym drzewie plików. Podstawą drzewa jest katalog główny, zwany z angielskiego \"root\" (korzeń) i oznaczany przez slash (/). W katalogu głównym umieszczane są podkatalogi i pliki z danymi. Struktura katalogu głównego jest następująca: /bin - wykonywalne pliki binarne, niezbędne do pracy zarówno w trybie wieloużytkownikowym, jak i w awaryjnym trybie jednego użytkownika, /boot - jądro systemu oraz pliki niezbędne przy jego uruchomieniu, /dev - pliki urządzeń, stanowiące interfejs do sterowników w jądrze, /etc - konfiguracja systemu /home - katalogi domowe użytkowników /lib - biblioteki systemowe /lost+found - pliki odnalezione podczas wykonywania testów dysku /mnt - katalog do którego zwykle mountowane są tymczasowe systemy plików takie jak dyskietka czy CD-ROM /proc - pseudosystem plików, odzwierciedlający stan procesów w systemie, /root - katalog domowy użytkownika root, /sbin - wykonywalne pliki binarne, niezbędne do pracy systemu zarówno w trybie wieloużytkownikowym, jak również w trybie jednego użytkownika. Zawiera polecenia administracyjne, /tmp - pliki tymczasowe, /usr - pliki użytkowników, dodatki doinstalowywane do systemu itp. /var - pliki często zmieniane, np logi czy poczta - Poszczególne napędy dysków jak i udostępnione zasoby sieciowe we wspólnej strukturze widoczne są jako katalogi umieszczone w dowolnym miejscu systemu plików. Administrator serwera decyduje, czy napęd CD-ROM dostępny dla użytkowników będzie jako np. katalog /cdrom czy jako /dyski/d lub nawet jako /home/student/katalog\_inny. Udostępnienie napędu w strukturze plików nazywamy montowaniem (mount). - w Linuxie katalogi i pliki rozdziela się znakiem slash (/) a nie backslash (\\) jak w DOS. - W systemie Unix/Linux rozróżniane są małe i duże litery, zatem /Etc i /etc to dwie, zupełnie różne nazwy. By uniknąć pomyłek zaleca się, by pliki nazywane były przy użyciu małych liter. - Maksymalna długość nazwy pliku to 255 znaków. W nazwie pliku nie mogą występować znaki: spacja, /, -, \*, ?, \[, \], \, & i ;. - W systemach Unix/Linux kropka nie stanowi elementu rozdzielającego nazwę od rozszerzenia. Kropka jest znakiem traktowanym na równi z każdym innym znakiem ASCII w nazwie pliku. Pliki z kropką jako pierwszym znakiem w nazwie traktowane są jako ukryte. - Katalog w Linuxie jest traktowany jako specjalny rodzaj pliku. Obok plików zwykłych oraz katalogów w systemie plików występuje jeszcze kilka innych rodzajów plików: linki (łącza) - omówione w dalszej części kursu, FIFO (potoki nazwane), gniazda (ang.: sockets), urządzenia o dostępie blokowym, urządzenia o dostępie znakowym. - Nazwy plików (ścieżki): Bezwzględne: /home/student/praca - zaczynają się od korzenia (/) Względne: student/praca - student jest tu podkatalogiem katalogu bieżącego - oznaczenie \"..\" reprezentujące katalog nadrzędny - oznaczenie \".\" reprezentujące bieżący katalog - Katalog domowy reprezentuje znak tyldy (\~). \~/praca - oznacza plik \"praca\" w domowym katalogu użytkownika \~kowal/praca - oznacza plik \"praca\" w domowym katalogu użytkownika 'kowal' - Aby jednym zapisem objąć więcej plików zastosować należy znaki specjalne. Do znaków specjalnych zaliczyć można: \*, ?, \[, \] - Gwiazdka (\*) zastępuje dowolny ciąg znaków w nazwie (w tym ciąg pusty) z wyjątkiem plików, których nazwa rozpoczyna się od kropki. Zatem: \* - oznacza wszystkie pliki z wyjątkiem plików, których nazwa rozpoczyna się od kropki.\* - oznacza wszystkie pliki, których nazwa rozpoczyna się od kropki - Znak zapytania (?) zastępuje dokładnie jeden znak w nazwie pliku, podobnie jak gwiazdka, nie zastępuje kropki w roli pierwszego znaku w nazwie pliku. - Aby zdefiniować kilka konkretnych znaków występujących w nazwie pliku należy posłużyć się nawiasami kwadratowymi \"\[\" i \"\]\". Pomiędzy nawiasami podać należy znaki z których jeden ma wystąpić w nazwie pliku. Znaki mogą być wypisane jeden po drugim (np. \[abc\]), mogą być oddzielone przecinkami (np. \[a,b,c\]) lub też przy pomocy myślnika może być podany zakres znaków (np. \[a-z\]). Podane techniki można łączyć. Przykłady: \[A,O,E\]la - oznacza pliki Ala, Ola i Ela \[abcdefghijklmnopqrstuvwxyz\] - oznacza dowolną małą literę \[a-z\] - j.w. \[a-zA-Z\] - oznacza dowolną literę \[a-zA-Z0-9\] - oznacza jeden znak alfanumeryczny Polecenie tree Pozwala na wyświetlenie wykresu pokazującego strukturę plików i katalogów na dysku. tree - od bieżącego katalogu tree /usr - od katalogu /usr opcja -d powoduje, że zostaną wyświetlone tylko katalogi (bez uwzględnienia plików) Polecenie cd Po zalogowaniu do systemu, katalogiem bieżącym jest katalog domowy użytkownika (znajdujący się w /home -- np.: /home/kowalski). Polecenie cd umożliwia zmianę bieżącego katalogu -- działa tak samo jak polecenie DOSowe o tej samej nazwie. Można korzystać z adresów względnych i bezwzględnych. cd - (bez parametrów) -- przejście do katalogu domowego cd \~ - jak wyżej cd kat - przejście do podkatalogu kat -- podano adres względny cd /kat - przejście do /kat (podkatalogu root'a) -- podano adres bezwzględny cd.. - przejście katalog wyżej Polecenie pwd Polecenie bezparametrowe -- wypisuje pełną nazwę bieżącego katalogu. Informacje skojarzone z plikiem -- polecenie ls Polecenie ls pozwala wyświetlić listę plików w katalogu, jak również informacje o pliku. Często posługujemy się składnią: "ls --l" wyświetlanie szczegółowych informacji o plikach. Przykład: \[markowskim\@sylvi markowskim\]\$ ls -l total 92 -rw\-\-\-\-\-\-- 1 markowsk inni 503808 Feb 22 14:24 core ------------------ --- ---------- ------ -------- -------------------------- -rw\-\-\-\-\-\-- 1 markowsk inni 426 Feb 18 01:00 dead.letter drwx\-\-\-\-\-- 2 markowsk inni 4096 Feb 18 00:55 mail -rw\-\-\-\-\-\-- 1 markowsk inni 564 Feb 28 11:30 mbox drwxr-xr-x 2 markowsk inni 4096 Feb 18 00:41 old\_www drwxr-xr-x 2 markowsk 943 4096 Feb 24 19:23 www \[markowskim\@sylvi markowskim\]\$ Opis informacji uzyskanych z ls: - 1 kolumna: Pierwszy znak -- typ pliku ('-' plik zwykły, 'd' katalog, 'l' link symboliczny,...) Kolejne 9 znaków -- prawa dla właściciela, grupy, wszystkich użytkowników - 2 kolumna -- ilość dowiązań (linków) twardych do pliku - 3 kolumna -- właściciel pliku - 4 kolumna -- grupa pliku - 5 kolumna -- wielkość pliku (w bajtach) - kolejne kolumny -- data i czas utworzenia pliku - ostatnia kolumna -- nazwa pliku Strumienie Każdy uruchomiony w Linuxie proces skądś pobiera dane, gdzieś wysyła wyniki swojego działania i komunikaty o błędach. Tak więc procesowi przypisane są trzy strumienie danych: - stdin (ang. standard input) czyli standardowe wejście, skąd proces pobiera dane, domyślnie jest to klawiatura - stdout (ang. standard otuput) to standardowe wyjście, gdzie wysyłany jest wynik działania procesu, domyślnie to ekran - stderr (ang. standard error) standardowe wyjście błędów, tam trafiają wszystkie komunikaty o błędach, domyślnie ekran Linux wszystko traktuje jako plik, niezależnie od tego czy to jest plik zwykły, katalog, urządzenie blokowe (klawiatura, ekran) itd. Nie inaczej jest ze strumieniami. Powłoka (np. bash) identyfikuje je za pomocą przyporządkowanych im liczb całkowitych ( od 0 do 2 ) tak zwanych deskryptorów plików: - 0 to plik z którego proces pobiera dane stdin - 1 to plik do którego proces pisze wyniki swojego działania stdout - 2 to plik do którego trafiają komunikaty o błędach stderr Za pomocą operatorów przypisania można manipulować strumieniami, poprzez przypisanie deskryptorów: 0, 1, 2 innym plikom, niż tym reprezentującym klawiaturę i ekran. Przełączanie standardowego wejścia Zamiast klawiatury jako standardowe wejście można otworzyć plik: \< plik program \< plik // program pobierze dane z pliku 'plik\' zamiast z klawiatury Przełączanie standardowego wyjścia Wynik jakiegoś polecenia można wysłać do pliku, a nie na ekran, do tego celu używa się operatora: \> plik ls -l /usr/bin \> \~/wynik //Rezultat działania polecenia trafi do pliku o nazwie wynik, jeśli wcześniej nie istniał plik o takiej samej nazwie, to zostanie utworzony, jeśli istniał cała jego poprzednia zawartość zostanie nadpisana. Jeśli chcemy aby dane wyjściowe dopisywane były na końcu pliku, bez wymazywania jego wcześniejszej zawartości, stosujemy operator \>\>: \>\> plik ls -l /usr/bin \>\> \~/wynik //rezultat zostanie dopisany na końcu pliku wynik, nie naruszając jego wcześniejszej zawartości. Przełączanie standardowego wyjścia błędów Do pliku można też kierować strumień diagnostyczny: ls --y 2\> plik //do 'plik\' trafią ewentualne informacje o błędach (np. gdy podano nieprawidłową opcję). Podstawowe polecenia systemu plików Tworzenie plików touch nazwa\_pliku -- polecenie służy do tworzenia pustego pliku (za pomocą tego polecenia można również zmienić datę istniejącego pliku -- pod warunkiem posiadania odpowiednich praw) \> nazwa\_pliku -- tworzenie nowego pliku za pomocą przekierowania wyjścia (pusty strumień przekierowujemy do pliku) cat \> nazwa\_pliku linia tekstu druga linia tekstu \^D -- za pomocą polecenia cat i strumieni możemy utworzyć nowy plik i od razu wypełnić go danymi. Koniec wpisywania danych następuje po wciśnięciu Ctrl-D (\^D -- znak końca pliku). Dowiązania -- linki ln źródło nazwa -- utworzenie dowiązania o nazwie 'nazwa' do pliku/katalogu 'źródło' Dowiązania dzielimy na twarde (hard links) i miękkie, zwane też symbolicznymi (soft/symbolic). Link twardy to nadanie innej nazwy istniejącemu plikowi. Każdy fizyczny plik posiada specjalne pole, przechowujące ilość twardych linków do danego pliku. Aby usunąć plik należy usunąć wszystkie twarde dowiązania. Podczas operacji usuwania twardego linku system operacyjny najpierw sprawdza wartość wspomnianego pola. Jeśli wartość ta większa jest od jedności, wówczas zmniejszana jest o 1 a z katalogu usuwany jest wpis linku twardego. Jeśli natomiast wartość ta równa jest jeden, wówczas dopiero usuwany jest fizyczny plik na dysku oraz odpowiadający mu wpis w katalogu. Twarde linki stosować można wyłącznie w obrębie jednego systemu plików. Link symboliczny jest specjalnym typem pliku, który \"wskazuje\" na inny - oryginalny plik poprzez jego nazwę (podobny do skrótu i Windows'ach). W odróżnieniu od linków twardych, link symboliczny nie modyfikuje licznika dowiązań do pliku. Co więcej, link miękki można utworzyć nie tylko do pliku, lecz również do katalogu (co w przypadku linków twardych było niemożliwe) jak również do nieistniejącego obiektu. Link symboliczny tworzy się w sposób analogiczny do linku twardego, dodając do polecenia ln opcję -s: ln -s źródło nazwa Tworzenie katalogów mkdir nazwa\_katalogu -- utworzenie katalogu Usuwanie rm nazwa\_pliku -- usunięcie pliku rm --r katalog -- usunięcie katalogu i całej jego zawartości (bardzo niebezpieczne polecenie) rmdir katalog -- usunięcie pustego katalogu podczas usuwania można używać znaków maskujących (?, \*) Kopiowanie, przenoszenie cp plik\_zrodlowy plik\_docelowy -- kopiowanie plików (można używać znaków ? i \* oraz znaku '.' -- kropki dla oznaczenia bieżącego katalogu) cp /home/nowak/\*. -- skopiowanie wszystkich plików z katalogu /home/nowak do katalogu bieżącego mv plik\_zrodlowy plik\_docelowy -- zmiana nazwy/przenoszenie plików (można używać znaków ? i \* oraz znaku '.' -- kropki dla oznaczenia bieżącego katalogu) mv \~/documents/dane2 \~/documents/wynik.txt -- zmiana nazwy pliku mv \~/documents/dane2 wynik.txt -- plik zostanie przeniesiony (ze zmienioną nazwą) do katalogu bieżącego Wyświetlanie zawartości pliku cat nazwa\_pliku -- wyświetlenie pliku na ekranie (zalecane dla małych plików) more nazwa\_pliku -- wyświetla plik i umożliwia nawigację za pomocą spacji (w dół) i 'b' (w górę). Wyjście po naciśnięciu 'q' lub wyświetleniu całego pliku. less nazwa\_pliku -- wyświetla plik i umożliwia nawigację za pomocą strzałek, nie kończy pracy po osiągnięciu końca pliku head --n 5 nazwa\_pliku -- wyświetla pierwsze linie pliku (tu: 5 pierwszych linii) tail --n 3 nazwa\_pliku -- wyświetla ostatnie linie pliku (tu: 3 ostatnie linie) wc nazwa\_pliku -- zlicza i wyświetla ilość linii, słów i bajtów w pliku (word count) Informacje o systemie plików du nazwa\_katalogu -- oblicza ile miejsca zajmuje katalog df -- wyświetla statystyki systemu plików/zamontowanych woluminów Potoki Potoki są przydatne, kiedy dane wyjściowe (będące wynikiem działania programu) chcemy przekazać jako dane wejściowe do innego programu. Operatorem do budowania potoku jest '\|'. Operacja potoku odbiera wynik od polecenia umieszczonego przed operatorem potoku i wysyła je jako dane wejściowe do polecenia umieszczonego za operatorem potoku. ls --l \| more -- informacje uzyskane w wyniku działania polecenia ls zostaną wyświetlone za pomocą polecenia more (opisanego dalej) -- co umożliwi m.in. przewijanie wyniku who \| wc -- przekazanie listy zalogowanych użytkowników do polecenia zliczającego linie Potoki możemy rozdzielić za pomocą polecenia tee, które czyta ze standardowego wejścia i przesyła kopię na standardowe wyjście oraz do pliku: who \| wc \| tee plik.txt -- wynik zostanie wyświetlony na ekranie i zapisany w pliku plik.txt Modyfikacja uprawnień i własności plików Zmiana właściciela/grupy chown Kazio plik -- zmienia właściciela pliku (nowym właścicielem pliku plik będzie Kazio). Aby móc zmienić właściciela pliku, trzeba posiada do niego odpowiednie prawa. chgrp inna\_grupa plik -- zmienia grupę pliku na inna\_grupa (wymagane prawa -- podobnie jak w chown) Prawa dostępu może modyfikować administrator (root) lub właściciel pliku (tylko w System V) ! Prawa dostępu do plików/katalogów - Prawo odczytu ( r ) -- umożliwia odczytanie zawartości pliku (co w przypadku katalogu oznacza możliwość odczytania listy plików znajdujących się w tym katalogu). - Prawo zapisu ( w ) - pozwala na dokonanie modyfikacji pliku (w tym dopisanie, zmiana lub usunięcie zawartości pliku. Przy czym usunięcie zawartości pliku nie jest tożsame z fizycznym usunięciem pliku). Dla katalogów to prawo oznacza możliwość tworzenia nowych i usuwania istniejących plików w katalogu. - Prawo wykonywania pliku ( x ) pozwala na uruchomienie pliku wykonalnego, a w przypadku katalogu oznacza prawo dostępu do plików wewnątrz katalogu. Zestaw praw niezbędnych do wykonania najważniejszych czynności przedstawia tabelka: Czynność Potrzebne prawa Potrzebne prawa do Prawa dostępu ustalane są osobno dla właściciela pliku, dla grupy właściciela oraz dla wszystkich pozostałych użytkowników. Przy określaniu praw dostępu do pliku grupuje się trójkami prawa \"r\", \"w\" i \"x\". Zatem efektywne prawa dostępu do pliku oznaczone jako: rwxrw\-\-\-- Oznaczają pełne prawa (odczyt, zapis/modyfikacja i wykonanie) dla właściciela pliku, odczyt i zapis/modyfikacja dla grupy właściciela pliku, pozostali użytkownicy nie posiadają żadnych praw do pliku. Wszystkie prawa dostępu zapisać również można w sposób numeryczny. Każde prawo ma swoją wagę liczbową. Sumując poszczególne wagi otrzymać można sumaryczne prawo dostępu. Wagi liczbowe poszczególnych praw: odczyt (r) = 4, zapis (w) = 2, wykonywanie (x) = 1. Prawa w postaci liczbowej podaje się jako liczbę trzycyfrową. Pierwsza cyfra oznacza prawa dostępu dla użytkownika, druga dla grupy użytkownika, a ostatnia - dla wszystkich pozostałych użytkowników. Zatem rwxrw można zapisać liczbowo jako 760, ponieważ: prawa właściciela: rwx = 4 + 2 + 1 = 7 prawa grupy: rw- = 4 + 2 + 0 = 6 prawa pozostałych =\> 0 + 0 + 0 = 0 Zestawiając poszczególne cyfry otrzymujemy 760. Zmiana praw dostępu Prawa dostępu może modyfikować właściciel pliku lub administrator (root) ! chmod 760 plik.txt - ustalenie dla pliku praw 760 Zmiany praw można również dokonać za pomocą zapisu symbolicznego: chmod podmiot operator prawa nazwa\_pliku pola podmiot, operator, prawa nie powinny być rozdzielone spacją. Dopuszczalne wartości pól: podmiot: 'u' właściciel pliku, 'g' grupa właściciela, 'o' pozostali użytkownicy, 'a' wszyscy operator: '+' dodanie praw, '-' odebranie praw, '=' nadanie praw przykłady: chmod g+x plik - nadanie grupie praw do wykonania (bez zmiany innych praw) chmod o-r plik - odebranie pozostałym użytkownikom prawa do odczytu chmod u=rw plik - nadanie właścicielowi praw do odczytu i zapisu. Jeśli właściciel miał prawo do wykonania, to zostanie ono odebrane. chmod ug=rwx,o=x plik - nadanie drupie i właścicielowi praw rwx, a innym użytkownikow prawa x Procesy Linux jest wielozadaniowym systemem operacyjnym. Oznacza to, że korzystając z systemu mamy wrażenie, że wiele programów działa jednocześnie. Działający w danej chwili program nazywany jest *procesem*. Przynajmniej jeden proces uruchamiany jest po wydaniu dowolnego polecenia, są również procesy systemowe, które działają nieprzerwanie, zapewniając prawidłowe funkcjonowanie systemu. Każdemu procesowi przypisany jest jednoznaczny numer zwany *identyfikatorem* *procesu*, lub *PID*, ponadto każdy proces, podobnie jak plik, ma swojego właściciela i grupę. Na podstawie informacji o właścicielu i grupie system operacyjny przydziela procesowi prawo do otwierania plików i urządzeń, przy zastosowaniu opisanych wcześniej praw dostępu. Większość procesów ma swojego rodzica; rodzicem procesu jest proces, który go uruchomił. Przykładowo, kiedy wydajemy polecenia w powłoce, to zarówno powłoka jest procesem, jak i każde z wykonanych poleceń. Rodzicem każdego uruchomionego w ten sposób procesu będzie powłoka. Proces może być wykonywany jako pierwszoplanowy (wówczas zajmuje on standartowe wejście i wyjście, czyli klawiaturę i monitor) lub jako proces tła (wówczas 'nie widać' jego działania a procesem pierwszoplanowym jest inny proces). Na ogół proces jest uruchamiany z prawami użytkownika, który proces uruchomił. Wyjątkiem są niektóre procesy systemowe, które uruchamiają się z szerszymi prawami. Rozpocząć wykonywanie procesu możemy na przykład poprzez wydanie dowolnej komendy. Proces możemy uruchomić w tle dodając znak '&' na końcu komendy, np.: *ls* *--l* *\|* *more* *&* Do wyświetlania listy procesów służą polecenia: Polecenie *jobs* - wyświetla procesy uśpione i procesy uruchomione w tle *\[markowskim\@sylvi* *markowskim\]\$* *jobs* *\[1\]-* *Stopped* *man* *kill* *\[2\]+* *Stopped* *ls* *\--color=tty* *-l* *\|* *more* Procesy mają przydzielony tzw. Numer zadania, wyszczególniony w pierwszej kolumnie w nawiasach kwadratowych. Znak '+' w drugiej kolumnie oznacza proces bieżący (domyślny dla komend). Polecenie *ps* -- wyświetla wszystkie procesy (łącznie z pierwszoplanowym), w zależności od użytych opcji wyświetla różne informacje o procesach. Znaczenie kolumn z informacjami: +-----------------------------------+-----------------------------------+ | kolumna | Znaczenie | +===================================+===================================+ | USER (UID) | Identyfikator użytkownika | | | będącego właścicielem procesu | +-----------------------------------+-----------------------------------+ | PID | Identyfikator procesu | +-----------------------------------+-----------------------------------+ | PPID | Identyfikator procesu rodzica | +-----------------------------------+-----------------------------------+ | \%CPU | Procentowe zużycie czasu | | | procesora przez proces | +-----------------------------------+-----------------------------------+ | \%MEM | Procentowe zużycie pamięci przez | | | proces | +-----------------------------------+-----------------------------------+ | VSZ | Rzeczywisty rozmiar procesu, w | | | kilobajtach | +-----------------------------------+-----------------------------------+ | RSS | Ilość fizycznej pamięci używanej | | | przez proces | +-----------------------------------+-----------------------------------+ | TTY | Terminal związany z procesem | +-----------------------------------+-----------------------------------+ | STAT | Status procesu; oto niektóre z | | | możliwych wartości: | | | | | | R - działający (Runnable) | | | | | | D - oczekujący na dostęp do dysku | | | (Disk wait) | | | | | | I - nieaktywny przez mniej niż 20 | | | sekund | | | | | | S - nieaktywny przez więcej niż | | | 20 sekund | | | | | | T - wstrzymany | | | | | | Z - Zombie, czyli proces | | | porzucony, który powinien zostać | | | zamknięty przez inny proces | | | | | | W - proces przeniesiony czasowo | | | do pliku wymiany | | | | | | N - wartość parametru Nice, | | | oznaczającego priorytet procesu | +-----------------------------------+-----------------------------------+ | START | Czas uruchomienia procesu | +-----------------------------------+-----------------------------------+ | TIME | Zużyty czas procesora | +-----------------------------------+-----------------------------------+ | COMMAND (CMD) | Polecenie (wraz z parametrami), | | | które spowodowało uruchomienie | | | procesu | +-----------------------------------+-----------------------------------+ *\[markowski\@s03* *markowski\]\$* *ps* *-u* *USER* *PID* *%CPU* *%MEM* *VSZ* *RSS* *TTY* *STAT* *START* *TIME* *COMMAND* -------- --------- -------- -------- --------------- --------- --------------------------------- ----- --------- -------- --------------------------- *943* *18431* *0.0* *0.2* *2144* *1180* *pts/1* *S* *09:56* *0:00* *-bash* *943* *18450* *0.0* *0.1* *1680* *752* *pts/1* *T* *09:56* *0:00* *man* *kill* *943* *18453* *0.0* *0.1* *1944* *772* *pts/1* *T* *09:56* *0:00* *sh* *-c* *(cd* */usr/sh* *943* *18454* *0.0* *0.1* *1944* *820* *pts/1* *T* *09:56* *0:00* *sh* *-c* *(cd* */usr/sh* *943* *18456* *0.0* *0.0* *1880* *340* *pts/1* *T* *09:56* *0:00* */usr/bin/gtbl* *943* *18458* *0.0* *0.1* *1936* *708* *pts/1* *T* *09:56* *0:00* */bin/sh* */usr/binusr/bin/less* *-is* *943* *18461* *0.0* *0.0* *1416* *452* *pts/1* *T* *09:56* *0:00* *more* *943* *18468* *0.0* *0.1* *2632* *696* *pts/1* *R* *09:57* *0:00* *ps* *-u* Kończenie (zabijanie) procesów Każdy proces w systemie Linuks może zostać zabity (zamknięty). Jako zwykły użytkownik możesz zabić tylko te procesy, które są twoja własnością. Wyjątkiem jest super-użytkownik (root), który może zabić dowolny proces. Do zamykania procesów służy polecenie *kill* lub *killall* : *kill* *123* - zabije proces o numerze PID równym 123 *kill* *%1* - zabije proces [o numerze zadania równym 1] *killall* *-v* *mozilla* - zabije procesy o nazwie *mozilla* Usypianie procesów Proces pierwszoplanowy może zostać uśpiony (system zawiesza jego wykonywanie pozostawiając go w pamięci) za pomocą kombinacji Ctrl-Z. Wznawianie wykonywania procesów tła Wykonywanie uśpionych procesów możemy wznowić za pomocą poleceń *bg* lub *fg*. Polecenie *bg* wznawia wykonywanie procesu jako procesu tła, natomiast *fg* wznawia wykonywanie procesu jako pierwszoplanowy. Polecenia wydane bez parametru odnoszą się do bieżących procesów (oznaczonych znakiem '+', np. po wydaniu komendy *jobs*). Jeżeli chcemy wznowić wykonywanie innego procesu, jako parametr podajemy numer zadania poprzedzony znakiem '%'). Środowisko pracy Zmienne systemowe Zmienne dzielimy na grupy : - zmienne lokalne - zmienne globalne - zmienne specjalne - zmienne programowe Zmienne lokalne określają konfigurację powłoki i są widoczne tylko dla shell\'a dla którego zostały zdefiniowane. Jeżeli chcemy odwołać się do nazwy zmiennej, to poprzedzamy ją znakiem '\$'. Przykładowe zmienne lokalne (środowiskowe): \$PATH -- zawiera spis katalogów, pośród których szukane są polecenia \$SHELL -- zawiera nazwę aktualnej powłoki (np. "/bin/bash", "/bin/csh" itp.) \$USERNAME -- zawiera nazwę aktualnego użytkownika \$HOSTNAME -- nazwa hosta \$HOME -- zawiera nazwę katalogu aktualnego użytkownika \$PS1 -- główny znak zachęty Szczegółowy opis wszystkich zmiennych środowiskowych można znaleźć w podręczniku systemowym powłoki bash (man bash). Należy pamiętać, iż nazwy większości zmiennych są składają się z wielkich liter !!! Listę wszystkich zmiennych środowiskowych i ich wartości można wyświetlić wydając komendę *set*. Zobaczyć ustawienie pojedynczej zmiennej możemy za pomocą polecenia *echo*, np.: *echo* *\$HOME* Do zdefiniowania nowej zmiennej lokalnej służy polecenie *export* z parametrem *-n* powodującym usunięcie atrybutu eksportu dla danej zmiennej : *export* *-n* *nazwa\_zmiennej=nowa\_wartość* *,*np.: *export* *-n* *EDITOR=mcedit* do usunięcia zmiennej służy polecenie: *unset* *nazwa\_zmiennej* Zmienne globalne są to zmienne widoczne w każdym podshellu. Aby ustalić nową zmienną lub przypisać inną wartość starej należy użyć polecenia : *export* *EDITOR=mcedit* Zmienne specjalne są definiowane przez system i w przeciwieństwie do innych zmiennych nie można zmieniać ich wartości. Najczęściej zmienne te wykorzystywane w skryptach do sterowania programem. Przykładowe zmienne specjalne to : \$\# - liczba parametrów przekazanych do programu \$0 - nazwa uruchomionego programu \$1,\$2 - kolejne parametry programu Zmienne programowe to zmienne definiowane przez użytkownika w skryptach powłoki. Definicja zmiennej programowej wygląda następująco : nazwa\_zmiennej=wartość np.: x=123 imie=\"Darek\" Polecenie *alias* Polecenie alias tworzy synonim dla innego polecenia. Składnia dla polecenia alias, gdy chcemy utworzyć nowy synonim jest następująca: *alias* *synonim=polecenie* *alias* *listuj=\'ls* *-l\'* powyższe polecenie tworzy alias o nazwie listuj, który wykonuje polecenie *ls* *-l* (polecenie musi być w apostrofach jeżeli występują w nim spacje). Jedyną ważną opcją polecenia alias jest *-p*. Po wydaniu polecenia: *alias* *-p* wyprowadzone na ekran zostają wszystkie zdefiniowane synonimy. Planowanie zadań Do zaplanowania jednokrotnego wykonania zadania służy komenda *at* (jeżeli chcemy, aby jakieś zadanie wykonywało się cyklicznie, musimy skorzystać z usług demona *cron*). Z komendą *at* związane są dwa pliki: */etc/at.allow* i */etc/at.deny*. Domyślnie nie są one tworzone dając tym samym możliwość odkładania (planowania) zadań wszystkim użytkownikom systemu. Jeśli jednak chcemy komuś zabronić, należy w pliku *deny* podać jego login. Ogólna składnia polecenia: *at* *czas/data* *polecenie* przykłady (zakładamy że bieżąca data to 4 marca 2004): *\#* *at* *18:21* *zadanie* *warning:* *commands* *will* *be* *executed* *using* *(in* *order)* *a)* *\$SHELL* *b)* *login* *shell* *c)* */bin/sh* *job* *3* *at* *2004-03-04* *18:21* polecenie informuje o kolejności wykonywania poleceń oraz o numerze zadania. *at* *18:23* *04.03.05* *zadanie* *warning:* *commands* *will* *be* *executed* *using* *(in* *order)* *a)* *\$SHELL* *b)* *login* *shell* *c)* */bin/sh* *job* *4* *at* *2004-03-05* *18:23* Można stosować znak \"+\" jako informacja, że czas(data) wykonania to suma dwóch czasów(dat). Np. za trzy dni o czwartej: *at* *4pm* *+* *3* *days* *zadanie* *warning:* *commands* *will* *be* *executed* *using* *(in* *order)* *a)* *\$SHELL* *b)* *login* *shell* *c)* */bin/sh* *job* *5* *at* *2004-03-07* *16:00* *at* *10am* *Jul* *31* *04* *warning:* *commands* *will* *be* *executed* *using* *(in* *order)* *a)* *\$SHELL* *b)* *login* *shell* *c)* */bin/sh* *at\>* */root/skaner.out* *&&* *cp* */root/skaner.log* */root/wazne* *at\>* *\* *job* *6* *at* *2004-07-31* *10:00* Jeżeli nie podamy zadania jako argumentu, to w następnych liniach rozpoczynających się od znaku zachęty \"at\>\" podajemy polecenia do wykonania. Można stosować \"pisane czasy i daty\" np. jutro o pierwszej w nocy: *at* *1am* *tomorrow* *zadanie* *at* *teatime* *+* *3* *days* *zadanie* Polecenie *atq* pokazuje oczekujące zadania użytkownika (w przypadku superużytkownika wyświetlane są zadania wszystkich użytkowników). Kolumny wierszy wynikowych: numer zadania, data, godzina, klasa zadania: *atq* *8* *1999-06-09* *13:04* *a* *9* *1999-06-26* *12:31* *a* Polecenie *atrm* usuwa zadania o zadanych identyfikatorach (numerach): *atrm* *8* *atrm* *8* *9* Polecenia informacyjne Polecenie *date* Polecenie wyświetla datę i czas systemowy (bez parametrów), pozwala też zmienić datę i czas (dostępne tylko dla superużytkownika). Polecenie *cal* Wyświetla kalendarz Przetwarzanie potokowe -- c.d. Polecenie *sort* *sort* *nazwa\_pliku* Służy do sortowania zawartości pliku: - domyślnie traktuje pozycje jako łańcuchy, po dodaniu opcji *--n* jako liczby - domyślnie sortuje rosnąco (od najmniejszego), po dodaniu opcji *--r* malejąco - domyślnie bierze pod uwagę tylko pierwszą kolumnę tekstu (kolumny są rozdzielone białymi znakami -- spacją lub tabulatorem), przy opcji *--k* *nr\_kolumny* sortowanie odbywa się według kolumny o podanym numerze (kolumny numerujemy od 1). Przykłady: *\$* *cat* *do\_sort* - wyświetla nieposortowaną zawartość pliku *dzik* *60* *45* *zajac* *30* *8* *jelen* *140* *90* *zyrafa* *350* *400* *krokodyl* *40* *300* *pies* *40* *25* *\$* *sort* *do\_sort* - plik posortowany (domyślnie wg. pierwszej kolumny) *dzik* *60* *45* *jelen* *140* *90* *krokodyl* *40* *300* *pies* *40* *25* *zajac* *30* *8* *zyrafa* *350* *400* *\$* *sort* *-r* *do\_sort* - plik posortowany malejąco *zyrafa* *350* *400* *zajac* *30* *8* *pies* *40* *25* *krokodyl* *40* *300* *jelen* *140* *90* *dzik* *60* *45* *\$* *sort* *-k* *2* *do\_sort* - plik posortowany wg. drugiej kolumny -- ale domyślnie sortowanie *jelen* *140* *90* na łańcuchach, więc *'140'* jest mniejsze od *'30'* *zajac* *30* *8* *zyrafa* *350* *400* *pies* *40* *25* *krokodyl* *40* *300* *dzik* *60* *45* *\$* *sort* *-n* *-k* *2* *do\_sort* - wg. drugiej kolumny -- sortowanie na liczbach *zajac* *30* *8* *krokodyl* *40* *300* *pies* *40* *25* *dzik* *60* *45* *jelen* *140* *90* *zyrafa* *350* *400* *\$* *sort* *-n* *-k* *3* *do\_sort* - wg. trzeciej kolumny *zajac* *30* *8* *pies* *40* *25* *dzik* *60* *45* *jelen* *140* *90* *krokodyl* *40* *300* *zyrafa* *350* *400* Polecenie *uniq* Usuwa powtarzające się linie -- warunek: powtarzające się linie muszą występować bezpośrednio po sobie, czyli plik musi być posortowany. Polecenie *wc* Polecenie zlicza linie, słowa i bajty pliku (strumienia). przykład (przetwarzanie potokowe): *\$* *sort* *-n* *-k* *3* *do\_sort* *\|* *uniq* *\|* *wc* - z posortowanej listy zostaną usunięte powtarzające się a następnie zostanie zliczona ilość linii (pozycji). Polecenie *cut* Służy do wycinania kolumn lub pól. Najważniejsze opcje: *-d* *znak* - określa znak rozdzielający kolumny -- domyślnie tabulator - *f* *kol,\[kol\[,kol...\]\]* -- określa, które kolumny wyświetlić Przykład: *who* *\|* *cut* *--d* *'* *'* *--f* *1,2* *\|* *sort* - wyświetli posortowaną listę nazw (pierwsza kolumna) i terminali (druga) zalogowanych użytkowników Polecenie grep Polecenie grep umożliwia odnajdowanie, we wskazanych plikach linii, zawierających określone słowo, czy zwrot. Składnia polecenia: *grep* *slowo* *nazwa\_pliku* gdzie: grep -- nazwa polecenia, slowo -- słowo, którego szukamy; polecenie grep wyświetli tylko te linie, z wskazanego pliku wejściowego, które zawieraj podane słowo nazwa\_pliku -- nazwa pliku wejściowego, w którym będzie wyszukiwane słowo. przykład (wyświetlanie z pliku "dlaczego\_UNIX?.txt" linii, które zawieraj słowo "UNIX"): *\$* *cat* *dlaczego\_UNIX?.txt* *UNIX* *to* *stabilny* *i* *bezpieczny* *system* *operacyjny.* *Linux* *to* *system* *z* *rodziny* *unix-ow.* *Zdaniem* *wielu* *laczenie* *w* *jednym* *zdaniu* *slow* *\"Windows\"* *i* *\"bezpieczenstwo\"* *jest* *nieporozumieniem.* *Serwery* *WWW* *i* *serwery* *baz* *danych* *w* *wiekszosci* *korzystaja* *z* *UNIX-a.* *Jezeli* *jeszcze* *nie* *przekonaliscie* *sie* *Panstwo* *do* *unix-ow,* *to* *trudno* *:(* - Można prowadzić wyszukiwanie w kilku plikach jednocześnie - Można wyszukać te linie, które zawierają szukane słowo, niezależnie od wielkości liter w słowie -- opcja "-i". - Jeżeli w wywołaniu polecenia grep nie podamy nazwy pliku wejściowego, polecenie przyjmie, że tym plikiem jest STDIN - dzięki temu polecenie grep można wykorzystać do pracy z potokami. *\$* *finger* *student* *Login:* *student* *Name:* *Student* *Directory:* */home/student* *Shell:* */bin/bash* *On* *since* *Fri* *Oct* *24* *20:23* *(CEST)* *on* *vc/1* *43* *minutes* *59* *seconds* *idle* *On* *since* *Fri* *Oct* *24* *20:23* *(CEST)* *on* *pts/0* *43* *minutes* *32* *seconds* *idle* *On* *since* *Fri* *Oct* *24* *20:23* *(CEST)* *on* *pts/1* *(messages* *off)* *No* *mail.* *No* *Plan.* *\$* *finger* *student* *\|* *grep* *Name* *Login:* *student* *Name:* *Student* - Można wyświetlić te linie, w których wskazane słowo nie występuje -- opcja "-v" - Numerowanie każdej ze znalezionych linii - opcja "-n" - Wyświetlenie nazw plików zawierających szukane słowo - opcja "-l".