Lekcja 1
Struktura systemu UNIX
Celem zajęć jest zaznajomienie słuchaczy ze strukturą systemu UNIX oraz prostymi komendami umożliwiającymi zapoznanie się z systemem.
1. System operacyjny UNIX
Unix jest wielozadaniowym, wielodostępnym i interaktywnym systemem operacyjnym o szerokim zakresie zastosowań.
Wielozadaniowość oznacza, że system może wykonywać jednocześnie wiele zadań (programów), w tym również na rzecz jednego użytkownika.
Wielodostępność oznacza, że z usług systemu może korzystać jednocześnie wielu użytkowników.
Interaktywność oznacza, że przy pomocy terminala (urządzenie zawierające monitor i klawiaturę) można przeprowadzać „dialog” z systemem, wprowadzając kolejne polecenia, które są natychmiast wykonywane.
Konfiguracje sprzętowe systemów komputerowych pracujących pod kontrolą systemu Unix mogą być bardzo różne. Do serwera unixowego można podłączać komputery z procesorami RISC, komputery PC, terminale znakowe lub graficzne (X-terminal). Ze względu na odległość terminali od serwera wyróżniamy łącza lokalne i zdalne. Łącza lokalne obejmują komputery podłączone do sieci lokalnej LAN lub łączem kablowym poprzez multiplekser. Łącze zdalne uzyskujemy głównie dzięki modemom i sieci telefonicznej. Przykładową konfigurację unixowego systemu komputerowego przedstawia rysunek.
2. Budowa systemu Unix
System Unix ma budowę warstwową. Centralnym elementem systemu jest sprzęt komputerowy (hardware). Bezpośrednio ze sprzętem komunikuje się jądro systemu (kernel), które pośredniczy pomiędzy urządzeniami komputerowymi a programami. Nad jądrem znajduje się powłoka (shell). Dopiero w shellu możemy uruchamiać programy i skrypty. System Unix umożliwia wykorzystywanie różnych shelli, które różnią się możliwościami, ilością komend, składnią. Najpopularniejsze to standardowy Bourne, rozszerzony Korn, C shell o składni języka C oraz rozpowszechniany z Linuxem shell Bash.
Hardware - sprzęt komputerowy
Kernel - jądro systemu obsługujące:
sprzęt komputerowy (procesor, pamięć, urządzenia zewnętrzne)
procesy wykonywane w systemie (deamons)
hierarchiczny system plików (file system)
Shell - powłoka systemu pośrednicząca pomiędzy użytkownikiem i jądrem, interpretująca polecenia użytkownika:
Bourne Shell
Korn Shell
C Shell
Bash Shell
3. Grupy i użytkownicy w systemie Unix
Użytkownicy rozpoczynający pracę w systemie rozpoznawani są za pomocą nazwy (login) i hasła (password). Każdy użytkownik musi należeć do wybranej grupy. Uprawnienia użytkowników i grup ustala administrator systemu (root). W systemie użytkownicy i grupy identyfikowane są przy pomocy numeru uid (user id) oraz gid (group id). Najniższy numer 0 należy do administratora.
Na rysunku przedstawiono cztery grupy użytkowników
nazwa grupy |
root |
naucz |
studenci |
class2 |
numer grupy gid |
0 |
1221 |
101 |
21 |
nazwy użytkowników |
root |
robert |
student1 ... studentf |
user1, user2 ... user20 |
numery użytkowników uid |
0 |
1003 |
80, 81, 82, 83, 84, 85 ... 96 |
50, 51, 52, 53, 54, 55 ... 60 |
4. Wydawanie poleceń w sytemie Unix
Użytkownik komunikuje się z systemem Unix poprzez wydawanie komend interpretowanych i realizowanych przez shell. Składnia polecenia w shellu wygląda następująco:
polecenie -opcje argumenty
Polecenie to jedna z wielu komend dostępnych w systemie Unix lub własny program użytkownika (skrypt).
Opcje modyfikują funkcjonowanie polecenia powodując, że wykonuje się ono w inny sposób niż bez podania opcji. Opcje w systemie Unix to najczęściej pojedyncze litery poprzedzone minusem ( - ). Opcje można łączyć umieszczając tylko jeden minus przed wszystkimi literowymi oznaczeniami opcji.
Argumenty to obiekty, na których wykonywane są polecenia: pliki, katalogi, urządzenia. Wprowadzenie kilku argumentów powoduje kilkukrotne wywołanie komendy z każdym z podanych parametrów.
Przykład wykorzystania komend:
ls |
komenda ls podana bez opcji i argumentów wyświetla zawartość bieżącego katalogu |
ls -a |
komanda ls wywołana z parametrem a wyświetla wszystkie (all) pliki z bieżącego katalogu |
ls -la |
komenda ls wywołana z dwiema opcjami a i l wyświetla wszystkie pliki z bieżącego katalogu w formie długiej (long) |
ls -la dane |
komenda ls wywołana z dwiema opcjami a i l oraz z argumentem dane wyświetla wszystkie pliki w formie długiej z podkatalogu dane |
ls dane teksty |
komenda ls wywołana z dwoma argumentami dane i teksty wyświetla zawartość obu podkatalogów dane i teksty |
Shell jest zawsze gotowy do przyjęcia nowego polecenia. Wprowadzenie ciągu znaków zakończonych naciśnięciem klawisza Enter jest sygnałem do pobrania wprowadzonego polecenia. Shell jest interpreterem poleceń co oznacza, że każde wprowadzone polecenie jest natychmiast analizowane, przekształcane na kod zrozumiały dla jądra i wykonywane. Shell pracuje więc w cyklu pobierz - analizuj - wykonaj, który można opisać następująco:
W systemie Unix można wprowadzić kilka komend w jednej linii oddzielonych średnikiem. Shell wykonuje je jedna po drugiej, jak gdyby wpisane były kolejno w nowych liniach.
5. Lista komend
Komendy wykorzystywane w bieżącej lekcji:
date - wyświetla czas oraz datę systemową
cal - wyświetla kalendarz
cal - wyświetla kalendarz na bieżący miesiąc
cal rok - wyświetla kalendarz na wybrany rok (rok podać czterocyfrowy np. 2002)
cal miesiąc rok - wyświetla kalendarz na wybrany miesiąc danego roku
echo - wyświetla podany tekst
echo „tekst”
banner - wyświetla tekst powiększonymi literami
banner „tekst”
clear - czyści okno terminala
man - wywołuje opis komendy z podręcznika elektronicznego (manuala)
man komenda
apropos - wyświetla wszystkie komendy związane z wprowadzonym tekstem
apropos tekst
logname - wyświetla nazwę pod jaką zalogowałeś się do systemu
whoami - podaje jako kto pracujesz w systemie
who am i - podaje oprócz nazwy użytkownika nr terminala i godzinę zalogowania
who - wyświetla listę użytkowników obecnie pracujących w systemie
nazwa użytkownika
terminal, z którego użytkownik jest podłączony
data i czas zalogowania użytkownika
adres IP komputera w sieci
id - wyświetla nazwę i numer użytkownika oraz jego grupy
tty - wyświetla nazwę bieżącego terminala
stty - wyświetla parametry terminala i umożliwia ich zmianę
uptime - wyświetla informacje o systemie: godzinę, czas pracy systemu, ilość zalogowanych użytkowników
w - wyświetla dokładne informacje o systemie (godzina, czas pracy systemu, ilość pracujących osób) oraz listę zalogowanych użytkowników
nazwa użytkownika
terminal, z którego użytkownik jest podłączony
data i czas zalogowania użytkownika
JCPU
PCPU
nazwa aktualnie wykonywanej komendy
uname - wyświetla nazwę systemu, w którym pracujesz
uname - a - wyświetla wszystkie (all) informacje o systemie
nazwa systemu operacyjnego
nazwa sieciowa identyfikująca system
numer wersji systemu operacyjnego
numer komputera i model
identyfikator komputera
licencja systemu operacyjnego
finger - wyświetla dokładne dane o użytkowniku
nazwa użytkownika
imię i nazwisko uzytkownika
terminal, z którego użytkownik jest podłączony
Idle
data i czas zalogowania użytkownika
adres IP komputera w sieci
finger użytkownik - wyświetla nazwę użytkownika,
jego imię i nazwisko,
katalog domowy
domyślny shell
czas zalogowania,
informacje o poczcie
informacje o planach i projektach,
(większość z tych informacji pobierana jest z pliku haseł - passwd)
W systemie Unix informacje o grupach i użytkownikach zapisane są w plikach systemowych:
grupy w pliku /etc/group
użytkownicy w pliku /etc/passwd
6. Ćwiczenia
Nawiąż połączenie z serwerem unix.wlodkowic.pl i zaloguj się swoim nazwiskiem i hasłem (patrz poprzednia lekcja). System powinien wyświetlić znak zgłoszenia shella Korna - $.
Uwaga! Obsługa terminala nie obejmuje polskich liter!
wprowadź swoje imię i zatwierdź klawiszem ENTER
andrzej ↵
ksh: andrzej: not found
jeżeli system nie zna wprowadzonego polecenia wyświetla nazwę shella, powtarza komendę i po dwukropku wyświetla komunikat not found (nie znaleziono)
wpisz komendę cal z parametrem -m
cal -m
cal: illegal option -m
usage: cal [[month] year]
jeżeli system rozpozna komendę ale nie rozpozna zastosowanej opcji to powtarza polecenie i wyświetla komunikat illegal option (zła opcja)
w kolejnej linii wyświetlana jest podpowiedź - komenda wraz z poprawnymi opcjami
wpisz kilka znaków i spróbuj je skasować
ala ma kota^H^H^H
standardowo jako klawisz kasujący omyłkowo wprowadzone dane zdefiniowany jest w terminalu klawisz Delete a nie Backspace (naciśnięcie klawisza Backspace powoduje wyświetlenie ciągu ^H co oznacza, że do tego klawisza przypisana jest kombinacja klawiszy Ctrl+H)
wyświetl bieżącą datę i godzinę z serwera
date ↵
wyświetl kalendarz na bieżący miesiąc
cal ↵
wyświetl kalendarz na cały rok 2000
cal 2000 ↵
wyświetl kalendarz na miesiąc grudzień 2002 roku
cal 12 2002 ↵
wyświetl jedną komendą bieżącą datę i kalendarz na bieżący miesiąc
date; cal ↵
przy pomocy „elektronicznego podręcznika” sprawdź czy komenda date nie ma opcji
man date ↵
do przeglądania wyświetlonego opisu wykorzystaj następujące klawisze:
Spacja - następna strona
Enter - następna linia
b - poprzednia strona (back)
f - nastepna strona (forward)
q - przerwanie przeglądania (quit)
chciałbyś dowiedzieć się, czy istnieje jakaś komenda wyświetlająca tekst na ekranie terminala. Jak to zrobić?
apropos text ↵
porównaj komendy echo i banner wyświetlając na ekranie słowo „cześć”
echo czesc ↵
banner czesc ↵
porównaj działanie powyższych komend na przykładzie napisu „dzień dobry” wpisanego w cudzysłowie i bez
echo „dzien dobry” ↵ banner „dzien dobry” ↵
echo dzien dobry ↵ banner dzien dobry ↵
W pierwszym przypadku (cudzysłów) komendy wyświetlają cały tekst w jednej linii (dla polecenia banner mieści się tylko 10 pierwszych znaków), w drugim przypadku (bez cudzysłowu) komendy wykonywane są dwa razy, oddzielnie dla tekstu „dzien” i „dobry”. Dlaczego występuje różnica w komendach echo i banner?
Komenda echo po zakończeniu działania nie przechodzi do nowej linii, co umożliwia tworzenie długich napisów składających się z pojedynczych tekstów umiesczonych kolejno w jednej linii. Komenda banner po zakończeniu wyświetlania przechodzi do nowej linii dlatego napisy umieszczone są w kolejnych liniach pod sobą.
wyczyść okno terminala
clear ↵
sprawdź jak jesteś podłączony do serwera
tty ↵
system wyświetla nazwę i numer urządzenie, które zostały Ci przydzielone podczas logowania /dev/ptsnr
dev - katalog z urządzeniami (devices)
ts - terminale (jeden z nich o numerze podanym dalej)
p - pseudoterminal, gdyż połączenie nastąpiło poprzez sieć komputerową, a nie bezpośrednio
nr - kolejny numer nadawany logującym się użytkownikom
wyświetl parametry terminala
stty ↵
wyświetl wszystkie parametry terminala
stty -a ↵
odczytasz m.in. zdefiniowane klawisze:
intr=^c (przerwanie komendy)
quit=^\ (rezygnacja)
erase=^? (kasowanie)
kill=^u (zakończenie)
eof=^d (koniec pliku)
werase=^w (kasowanie słowa)
(symbol ^ oznacza naciśnięcie klawisza Ctrl)
przedefiniuj, aby klawiszem kasującym był Backspace
stty erase Backspace ↵ (na ekranie ukaże się sekwencja ^H)
sprawdź, jak teraz zachowuje się system po wciśnięciu klawiszy Backspace i Delete
sprawdź pod jaką nazwą jesteś zalogowany w systemie
logname ↵
sprawdź jako kto pracujesz w systemie
whoami ↵
who am i ↵
druga wersja polecenia wyświetla pełniejszą informację:
nazwa użytkownika
numer terminala, na którym pracujesz
datę i czas zalogowania się do systemu
adres IP komputera, z którego podłączony jesteś do systemu
sprawdź kto jeszcze obecnie pracuje w systemie
who ↵
wyświetlona lista zawiera:
nazwa użytkowników
nazwa i numer terminala
data i czas zalogowania
adres IP komputera
sprawdź swój kod identyfikacyjny w systemie
id ↵
wyświetlane są kolejno:
numer użytkownika
nazwa użytkownika
numer grupy
nazwa grupy
Aby wyświetlić listę wszystkich użytkowników wydaj polecenie:
more /etc/passwd ↵
do przeglądania listy wykorzystaj klawisze omówione przy komendzie man
kolejne wiersze to rekordy zawierające dane użytkowników, oddzielone dwukropkiem pola oznaczają:
nazwa użytkownika
zakodowane hasło
identyfikator użytkownika (uid)
identyfikator grupy (gid)
komentarz, dowolna informacja o użytkowniku np. pełne imię i nazwisko
nazwa katalogu domowego
nazwa shella ładowanego podczas logowania się użytkownika
Aby wyświetlić listę wszystkich grup zdefiniowanych w systemie wydaj polecenie:
more /etc/group ↵
kolejne wiersze to rekordy zawierające dane grup, oddzielone dwukropkiem pola oznaczają:
nazwa grupy
hasło grupy
identyfikator grupy (gid)
lista użytkowników należących do tej grupy
wyświetl dokładne dane o użytkowniku robert
finger robert ↵
wyświetl nazwę systemu, w którym pracujesz
uname ↵
uname -a ↵
wyświetl dane o systemie, w którym jesteś zalogowany
uptime ↵
wyświetl dokładne dane o systemie i pracujących osobach
w ↵
sprawdź od kiedy pracuje (boot) serwer, na którym jesteś zalogowany
who -b ↵
7. Test sprawdzający
Czy wielodostęp oznacza?
jednoczesne uruchomienie systemu na wielu komputerach
jednoczesną, zdalną pracę kilku użytkowników na tym samym komputerze
jednoczesne uruchomienie kilku programów na jednym komputerze
jednoczesną pracę kilku komputerów w sieci połączonych z serwerem
Część systemu umożliwiająca wydawanie komend użytkownikowi to:
Sprzęt (Hardware)
Powłoka (Shell)
Logowanie (Login)
Jądro (Kernel)
Każdy użytkownik w systemie Unix ma swój unikatowy numer nazwany:
gid
login
uid
password
Która z podanych komend nie jest równoważna tej ls -la /dane
ls la /dane
ls -al /dane
ls -a-l /dane
ls -l-a /dane
Która z poniższych komend wywoła taki sam efekt jak komenda
echo kto; echo to?
echo kto to
banner kto to
echo „kto to”
echo kto
echo to
Którą komendą znajdziesz polecenia dotyczące katalogów?
directory
man katalog
apropos directory
man directory
Komenda w wyświetla dane o systemie i użytkownikach. Który z poniższych zapisów jest jej najbliższy?
who -w
uptime; who
uname; finger
finger; who
Aby sprawdzić do jakiej grupy należy użytkownik robert wydasz komendę:
........................................................
Wypisz wszystkie opcje komendy tty
........................................................
........................................................
........................................................
Jaką komendą wyświetlisz kalendarz na miesiąc lipiec bieżącego roku?
........................................................
$
pobierz polecenie
analizuj
wykonaj
odpowiedz
wysłanie znaku gotowości na terminal i oczekiwanie na polecenie użytkownika.
pobranie polecenia od użytkownika
zdekodowanie polecenia i odszukanie w katalogach odpowiadającego mu programu
przekazanie polecenia do jądra w celu utworzenia odpowiedniego procesu realizującego i oczekiwanie na jego zakończenie
przyjęcie odpowiedzi od jądra i przekazanie wyniku użytkownikowi
powrót do początku cyklu (pkt 1)