Uniwersytet w Białymstoku

Wydział Matematyki i Informatyki

Instytut Informatyki

Materiały bazowe do zajęć z przedmiotu:

Systemy operacyjne

Laboratorium nr 01

Temat:

Systemy Operacyjne,

System unix/linux - wiadomości wstępne

mgr Adam Bonda

Białystok 2008

Cel laboratorium: Zapoznanie się z podstawowymi definicjami, przyswojenie ogólnej wiedzy na temat rozwoju systemów operacyjnych, wstępne zapoznanie się z strukturą systemu i podstawowe komendy Linux'a.

(1) Wiadomości ogólne:

System komputerowy – zestaw sprzętu (hardware) i „oŜywiającego” go oprogramowania (software). Oba te elementy tworzą zasoby systemu.

Zasoby systemu komputerowego to:

✔

procesor (ang. CPU – Central Processing Unit) – element wykonujący program

✔

pamięć operacyjna – umieszczane są w niej wykonywane programy

✔

program →

✔

dane

✔

urządzenia zewnętrzne: drukarki, terminale, pamięci dyskowe, taśmowe itp.

Program – zbiór instrukcji zrozumiałych dla komputera przechowywanych na odpowiednim nośniku danych i przenoszonych do pamięci operacyjnej na czas wykonywania programu.

Wykonywanie programu polega na postępowaniu zgodnie z zapisaną instrukcją (algorytmem).

Elementem umoŜliwiającym pracę całego systemu komputerowego jest pewien minimalny zestaw oprogramowania określany powszechnie mianem systemu operacyjnego (ang.

operating system – OS).

Do najbardziej znanych rodzin i typów systemów operacyjnych naleŜą:

✔

Amiga: AmigaOS, AROS Research Operating System (AROS), MorphOS

✔

Apple: Apple DOS, ProDOS, GS/OS, Mac OS, Mac OS X, Mac OS X Server, A/UX, Lisa OS

✔

Atari: Atari TOS, MultiTOS, FreeMiNT

✔

Be: BeOS, BeIA, NewOS/Haiku, yellowTAB Zeta

✔

DEC/Compaq: AIS, OS-8, RSTS/E, RSX, RT-11, TOPS: TOPS-10, TOPS-20, VMS

(później przemianowany na OpenVMS)

✔

IBM: OS/2, AIX, OS/400, OS/390, VM/CMS, DOS/VSE, DOS/360, OS/360, MFT,

MVT, PC-DOS, SVS, MVS, TPF, ALCS, z/OS

✔

ICL: EXEC, JEAN, MINIMOP, GEORGE

✔

Microsoft: MS-DOS (PC-DOS, DR-DOS, FreeDOS, DOS, QDOS), Microsoft Windows: 1.0, 2.0, 3.x, 95/98/98 SE/Me, CE, NT/2000/XP/2003/2008/FLP/Vista

✔

Novell: NetWare, Novell DOS

✔

NeXT: NeXTStep

✔

Unisys: MCP(Master Control Program), OS 2200.

✔

UNIX i jego pochodne: AIX, BSD, FreeBSD, NetBSD, OpenBSD, DragonFly BSD, DesktopBSD, PC-BSD, Digital UNIX, HP-UX, IRIX, Mac OS X, Minix, OSF/1, SCO

UNIX, Sun Solaris (dawniej SunOS), System V, QNX, Ultrix, Venix, Xenix, GNU/Linux (system GNU z jądrem Linux), GNU/Hurd (system GNU z jądrem

Hurd),, Linux

✔

systemy czasu rzeczywistego (ang. realtime systems): LynxOS, OS9, Phoenix-RTOS, QNX, Nut/OS, RT-Linux, SenseOS, VxWorks, Suse Linux Enterprise Real Time, MicroC/OS-II

Zadaniem kaŜdego systemu operacyjnego jest:

✔

efektywne wykorzystywanie sprzętu (procesora, pamięci itp.)

✔

koordynowanie pracy sprzętu, programów i uŜytkowników

✔

ułatwienie uŜytkownikom korzystania z komputera

Poprzez realizację tych zadań OS kontroluje niemal wszystkie czynności komputera i urządzeń doń podłączonych. Decyduje w jaki sposób są wykorzystywane zasoby komputerowe, a więc i co wyświetlane jest na ekranie monitora.

Ze względu na wysoki stopień komplikacji budowy sprzętu komputerowego, zazwyczaj nie zezwala się programom na bezpośredni dostęp do zasobów sprzętowych, a jedynie poprzez OS. Rozwiązuje to wiele problemów np. umoŜliwia OS zachowanie kontroli nad pracą komputera, zwalnia z gruntownej znajomości zasad pracy komputera i urządzeń peryferyjnych programistów i uŜytkowników.

Budowa OS determinowana jest ich typem i przeznaczeniem. System operacyjny moŜe stanowić jeden program, lub kilka, czy kilkanaście, z których pewien wyróŜniony, bądź ich grupa nosi nazwę jądra systemu (ang. kernel). Kernel uruchamiany jest jako proces pierwotny i sprawując kontrolę nad całym systemem komputerowym. OS dostarczane są z pewnym zestawem programów usługowych, które wspomagają działanie jądra. Składają się na nie zarówno proste, odpowiedzialne za wykonywanie pojedynczych poleceń uŜytkownika, jak i bardziej rozbudowane programy o szerszym zastosowaniu (określane są one terminem aplikacji uŜytkowych lub oprogramowania aplikacyjnego)

Do końca lat 60-ych większość z powstałych przed Unix'em systemów operacyjnym dedykowana była określonemu typowi komputerów – wiązało się to z wysokimi nakładami kosztów i szybkim starzeniem się OS, wraz z unowocześnianiem konstrukcji sprzętowych.

Doprowadziło to do unifikacji (zmniejszenia róŜnorodności) konstrukcji sprzętu komputerowego i przystosowania systemów operacyjnych do pracy na całej rodzinie, a nie (jak do tej pory) na jednym typie komputerów.

Wprowadzono więc ujednolicenie koncepcyjne w zakresie danej rodziny komputerów, na których moŜna było uruchamiać OS jak i aplikacje uŜytkowe. Dana rodzina komputerów charakteryzuje się podobną architekturą (konstrukcją) oraz tym samym lub zbliŜonym typem zastosowanego procesora. Mówimy więc o platformie komputerów osobistych klasy PC, które bazują na procesorach typu x86 firmy Intel, zapoczątkowanych przez 16-bitowy procesor 8086, które z kolei wywodził się z 8-bitowego układu 8085. Nazwa architektury wywodzi się od nazw pierwszych modeli z tej rodziny, których numery kończyły się liczbą 86.

W zakresie unifikacji konstrukcji sprzętu najbardziej znaczącą rolę odegrały firmy DEC i IBM, natomiast w zakresie OS Laboratoria Bella w których opracowana system Unix i udostępniono go nieodpłatnie amerykańskim uniwersytetom. Zapoczątkowało to szybki rozwój Unixa i przystosowanie go do pracy z róŜnymi komputerami. Dalsze modyfikacje i migracja systemu moŜliwa była dzięki zastosowaniu języka C w znacznej części kodu (fragmenty assemblera – wewnętrzny język komputera – realizowały tylko te, najbardziej zaleŜne od sprzętu części kodu).

(2) Struktura systemu plików, powłoka systemowa i podstawowe komendy

Po zalogowaniu się do systemu, automatycznie uruchamiana jest powłoka systemu (ang.

shell). Najpopularniejszą obecnie stosowaną powłoką jest bash ( Bourne-Again Shell) jej

starczym odpowiednikiem jest sh ( Bourne Shell).

To, jaka powłoka jest automatycznie uruchamiana podczas logowania określone jest w następującej lokalizacji:

/etc/passwd

Aby, móc jednak wyświetlić zawartości plików potrzebna jest znajomość:

✔

zestawu komend umoŜliwiających sprawne poruszanie się po systemie plików,

✔

narzędzi do podglądu,

✔

wiedzy o strukturze drzewa katalogów systemów Unix'owych, w tym Linux'a (aktualnie uŜywanej dystrybucji).

Pomoc systemowa

Systemy Unix oferują pomoc systemową (man, apropos, whatis) w postaci tekstowych dokumentów opisujących działanie, składnię wywołania programów i narzędzi zainstalowanych w systemie. Dokumentacja dostępna jest po wpisaniu polecenia man (ang. manual) i podaniu jako pierwszego argumentu nazwy programu, usługi, lub pliku (systemowego), dla którego pomoc chcemy uzyskać, np.:

man passwd

Dokumentacja podzielona jest na sekcje, których ilość zaleŜy upodobań twórcy.

Główne części opisu to:

NAME: zawiera zwięzły opis działania polecenia

SYNOPIS: składnia poleceniach

AVAILABILITY: platforma sprzętowa, na której dostępne jest polecenie

DESCRIPTION: pełny opis wywoływanego polecenia

EXAMPLES: przykłady uŜycia polecenia

FILES: pliki np.: konfiguracyjne

SEE ALSO: powiązania, polecenia pokrewne

więcej na temat samej pomocy moŜna dowiedzieć się wpisując:

man man

Nawigacja stron pomocy kontrolowana jest poleceniem more przy pomocy następujących skrótów: spacja (kolejna strona), Ctrl+B (poprzednia strona), q – zamknięcie i opuszczenie przeglądarki, / - wyszukiwanie tekstu w przód lub ? w tył, n,N – przejście do następnego (n) lub poprzedniego (N) wystąpienia poszukiwanego wyraŜenia

Zadanie 1:

Zapoznaj się z zawartymi powyŜej poleceniami. Sprawdź jak nazywa się przedostatnia sekcja dokumentacji man, podaj nazwę pierwszego powiązania występującego w tej sekcji. Jaka komenda wyświetla ostatni rozdział tego powiązania?

Struktura drzewa katalogów

Rodzinę systemów Unix'owych cechuje hierarchiczna (drzewiasta) struktura plików i katalogów przypominająca odwrócone drzewo. Skoro występuje tu jakieś „drzewo” to musi być i korzeń (ang. root). W rzeczy samej Unix'y posiadają korzeń, jest nim katalog główny (ang. Root directory) oznaczany symbolem „/” (ang. slash). UŜyte sformułowania

„hierarchiczna” nie jest do końca ścisłe, poniewaŜ występować mogą tutaj dowiązania danego pliku do róŜnych katalogów, jak i plików do plików.

Na ogół system plików (ang. file system – fs) głównego katalogu większości dystrybucji Linux'owych posiada następującą strukturę:

/

— katalog główny ( root dir)

|—/bin

— katalog bazowego zestawu poleceń

|—/boot

— katalog plików rozruchu systemu

|—/dev

— katalog plików specjalnych, reprezentujących urządzenia

|—/etc

— katalog plików konfiguracyjnych systemu

|—/home

— katalog kont uŜytkowników (poza root'em)

|—/lib

— katalog bibliotek systemowych i plików nagłówkowych

|—/mnt

— punkt mount'owania systemu plików i urządzeń

|—/opt

— katalog instalacji oprogramowania zewnętrznego

|—/proc

— katalog specjalny, informacje systemowe (wirtualny fs)

|—/lost+found — pliki odzyskane podczas sprawdzania spójności fs

|—/root

— katalog domowy administratora

|—/sbin

— katalog programów systemowych

|—/tmp

— katalog plików tymczasowych

|—/usr

— katalog podkatalogów systemowych

|—/bin

— podkatalog uzupełniającego zestawu poleceń

|—/lib

— podkatalog bibliotek narzędziowych

|—/sbin

— podkatalog uzupełniających programów systemowych

|—/tmp

— podkatalog plików tymczasowych

/var

— katalog zmieniających się plików systemowych (logi, kolejki)

Unix posiada 3 rodzaje plików:

(a) zwykłe pliki dyskowe (ang. files) są to pliki binarnej lub tekstowej.

(b) katalogi (ang. directory) zawierają (lub nie) pliki dowolnego z wymienionych typów.

(c) pliki specjalne (ang. special files) – mogą dotyczyć:

●

urządzeń zewnętrznych zainstalowanych w komputerze (dyski,

karty muzyczne itp.)

●

łączy nazwanych (pliki FIFO) słuŜących do porozumiewania się procesów niespokrewnionych. Łącze musi zostać jawnie utworzone, jako plik specjalny poprzez funkcję mknod(). Dalsze mechanizmy porozumiewania się są analogiczne jak w przypadku plików. Usunięcie łącza następuje poprzez funkcję unlink()

Nazwy rozpoczynające się ukośnikiem „/” określają pełną ścieŜkę (ang. absolute pathname) do pliku:

/etc/passwd

określa, Ŝe plik passwd znajduje się w katalog etc, do którego dostęp jest bezpośrednio z głównego katalogu. Jeśli w linii nie było by pierwszego ukośnika:

etc/passwd

to o pliku passwd wiedzielibyśmy tylko tyle, Ŝe znajduje się w katalogu (ang. relative pathname) etc. Gdyby był to jakiś mniej charakterystyczny katalog i plik to jedyną nadzieją na znalezienie znajdującego się nim pliku byłoby skorzystanie z programu umoŜliwiającego wyszukiwanie.

Prócz charakterystycznego symbolu / oznaczającego katalog główny, uŜywa się takŜe innych symboli dla określenia wybranych katalogów:

. - oznacza katalog bieŜący,

.. - oznacz katalog bezpośrednio nadrzędny;

~ - oznacz katalog domowy uŜytkownika.

Nazwa pliku zwykłego i katalogu moŜe składać się z dowolnego ciągu znaków ASCII.

Wielkie i małe litery są rozróŜnialne. Ze względu na specjalne znaczenie niektórych znaków dla shella, zaleca się uŜywanie w nazwach tylko znaków przenaszalnych: liter, cyfr, podkreślenia i kropki. Znaki o specjalnym znaczeniu dla powłoki (zwane metaznakami) to:

* ? ; | & \ < > [ ] ` ' ”

uŜycie ich w nazwach plików wiąŜe się z tym, Ŝe w poleceniach odwołujących się do takich nazwa muszą być „cytowane” z uŜyciem:

znaku backslash \, apostrofów ' lub cudzysłowów ”.

Jeśli nazwa pliku zaczyna się od znaku kropki, to dla pewnej grupy poleceń plik jest traktowany jako ukryty.

Poruszanie się po systemie plików

pwd (ang. print working directory)

– wyświetla nazwę aktualnego katalogu roboczego

cd arg (ang. change directory)

– zmienia katalog na podany w argumencie (o ile

istnieje)

mkdir arg (ang. make directory)

– tworzy katalog podany w argumencie (o ile nie

istnieje)

rmdir arg (ang. remove directory) – usuwa katalog podany w argumencie (o ile istnieje) mv arg1 arg2 (ang. move)

– przenosi, bądź zmienia nazwę, jako pierwszy

argument podaje się przenoszony pliku/katalog, jako

drugi miejsce lub docelową nazwę

ls (ang. list)

– listuje standardową zawartość bieŜącego katalogu

Przykłady:

login@nazwa:~$ pwd

wyświetla aktualny kat. roboczy

/home/login

wychodzi do katalogu

login@nazwa:~$ cd ..

nadrzędnego

login@nazwa:/home$ pwd

/home

login@nazwa:/home$ mkdir ./login/test01

tworzy katalog test01 w kat.

login@nazwa:/home$ cd ~/test01

domowym przy uŜyciu ścieŜki

login@nazwa:~/test01$ pwd

bezwzględnej

/home/login/test01

login@nazwa:~/test01$ cd /

wychodzi o głównego kat.

login@nazwa:/$ pwd

/

zmienia nazwę kat. test01

login@nazwa:/$ mv ~/test01 ~/test02

znajdującego się w kat.

domowym na test02

login@nazwa:/$ mkdir ~/test02/x1

tworzy podkatalog x1, a

login@nazwa:/$ mv ~/test02/x1 ~/x1

następnie przenosi go katalogu

domowego

login@nazwa:/$ cd /home/login/test02

login@nazwa:~test02$ pwd

/home/login/test02

login@nazwa:~test02$ rmdir ../test02 ~/x1

usuwa zarówno katalog test02,

login@nazwa:~$ cd ..

jak i x1

login@nazwa:~$ cd test02

-bash: cd: test02: No such file or directory

Zadanie 2:

Przy uŜyciu pojedynczej komendy wyjdź do głównego katalogu. Wejdź do katalogu domowego uŜywając ścieŜki bezwzględnej. Stwórz katalog o nazwie wg wzoru dzien'miesiąc`pierwszaliteranazwiska|pierwszeliteraimienia

np.: 1'10`B|A

wejdź do stworzonego tego katalogu i wyświetl nazwę aktualnego katalogu roboczego, a następnie wyjdź do katalogu nadrzędnego i wyświetl listę wszystkich! plików i katalogów.

UŜywając ścieŜki bezwzględnej, jednym poleceniem stwórz w wewnątrz ostatnio powstałego katalogu podkatalog o nazwie test, a następnie usuń go w ten sam sposób.

Działania na plikach (katalogach)

* zastępuje ciąg dowolnych znaków

? zastępuje dokładnie jeden znak

[lista] – zastępuje dokładnie jeden znak z podanej listy znaków w nawiasie kwadratowym

[abc] – na określonej pozycji nazwy pliku moŜe wystąpić tylko jedna z liter a, b lub c

[a-z] – na określonej pozycji nazwy pliku mogą wystąpić liter od a do z

[19] – na określonej pozycji nazwy pliku moŜe wystąpić tylko cyfra 1 lub 9

touch arg1

tworzy plik o podanej nazwie, lub zmienia datę stworzenia pliku

login@nazwa:~$ touch plik1

login@nazwa:~$ ls

plik1

head arg1

wyświetla 10 pierwszych linii pliku podanego jako argument

-c, --bytes=[-]ILE wypisanie pierwszych ILE bajtów z kaŜdego pliku

-n, --lines=[-]ILE wypisanie pierwszych ILE linii zamiast 10

z `-' - wypisanie wszystkich oprócz ostatnich ILE bajtów/linii kaŜdego pliku tail arg1

wyświetla 10 ostatnich linii pliku podanego jako argument

-c, --bytes=N wypisanie ostatnich N bajtów

-f, --follow[={name|descriptor}] wypisywanie nowych danych kiedy plik rośnie;

-f, --follow i --follow=descriptor są równowaŜne

-n, --lines=N wypisanie ostatnich N linii zamiast ostatnich 10

cat arg1 arg2 ...

wyświetla zawartość pliku(ów) podanego(ych) jako argument(y)

-b,

numeracja niepustych linii

more arg1 arg2...

wyświetla zawartość pliku(ów) podanego(ych) jako argument(y)

stronami

Po wyświetleniu ekranu z zawartością pliku, program oczekuje instrukcji od uŜytkownika: h

wyświetla help

<spacja> to samo co f

przewija ekran do dołu

<enter>

przewija linię w dół

3b

przewija 3 ekrany do tyłu

q

kończy pracę przeglądarki more

less arg1 arg2...

podobny do more, pozwalającym na poruszanie się w tył w pliku

tak samo jak w przód

Zmiana standardowych wyjść i wejść (przekierowania)

W czasie wykonywania danego polecenia strumienie danych wyjściowych, wejściowych i diagnostycznych mogą zostać skojarzone z innymi wejściami, wyjściami niŜ domyślne, dla określonego polecenia.

Strumień danych wyjściowych przekierowany jest do argumentu (moŜe to być plik lub urządzenie), natomiast potencjalne błędy (strumień diagnostyczny) w dalszym ciągu kierowane będą na ekran.

login@nazwa:~$ cat plik1 > plik2

Zawartość pliku plik1 przekierowana została to stworzonego automatycznie pliku plik2

JeŜeli plik2 juŜ istniał i posiadał jakieś informacje to zostały one nadpisane!

login@nazwa:~$ cat plik1 plik2 plik3 > plik4

Strumień danych wyjściowych przekierowany jest do argumentu i dopisywany jest na jego końcu (w przypadku pliku). Strumień diagnostyczny wędruje na ekran terminala.

login@nazwa:~$ cat plik1 >> plik2

Strumień danych wejściowy przekierowany jest z argumentu (pliku) do polecenia, a błędy kierowane są na ekran.

login@nazwa:~$ mail -s „temat” do_kogo@com.pl < zawartosc

Na określony adres pocztowy z podanym tematem, zostanie wysłana wiadomość znajdująca się pliku zawartosc.

Strumień zarówno danych wyjściowych i diagnostyczny przekierowane są do argumentu login@nazwa:~$ cat plik1 >& plik2

Symbol potoku „|” stosuje się do przetwarzania strumieni danych. MoŜliwe jest tworzenie łańcuchów poleceń, które wzajemnie przerabiają dane.

login@nazwa:~$ ls -l /etc/* | more

Bez uŜycia przekierowania wyników komendy ls do more, moŜna by było zobaczyć tylko ostatni ekran wyniku listowania zawartości katalogu /etc/. Jeszcze lepszym rozwiązaniem jest zastąpienie komendy more przez less, dlaczego?

Zadanie 3: W stworzonym poprzednio katalogu utworzyć plik o nazwie test03. Umieścić w tym pliku listę wszystkich plików kończących się na litery „g” i „h” z katalogu /etc, a następnie dopisać do tego pliku listę wszystkich urządzeń z katalogu /dev w nazwach których dwie pierwsze litery to „hd”.

Usunąć wszystkie pliki i katalogi tworzone podczas tego laboratorium.

Wreszcie moŜna się przekonać jakiej domyślnej powłoki uŜywamy:

login@nazwa:~$ cat /etc/passwd | less

...

jas:x:1000:1000:jas,,,:/root:/bin/bash

...

Plik ten ma następującą konstrukcję:

login_name:hasło:uid:gid:imie_nazwisko:katalog_domowy:powłoka

login_name

nazwa uŜytkownika w systemie

hasło

zakodowane hasło przypisane do login_name, jeśli w tym miejscu stoi

„x” oznacza to, Ŝe hasło znajduje się w zaszyfrowanej postaci w pliku

/etc/shadow, do którego dostęp mają tylko administratorzy.

uid

liczbowy identyfikator uŜytkownika

gid

identyfikator grupy do której uŜytkownik naleŜy

imię_nazwisko

dane teleadresowe, uŜywane głównie przez programy pocztowe

katalog_domowy macierzysty katalog uŜytkownika, tworzony podczas zakładania konta powłoka

domyślnie uruchamiana powłoka podczas logowania do systemu (nie

kaŜdy uŜytkownik musi mieć shellowy dostęp do systemu, czasem jest

to tylko poczta, lub ftp i w tym miejscu jest to określone)