System Operacyjny Linux
21.03.2015r.

1 System operacyjny Linux i jego dystrybucja
Linux  – rodzina uniksopodobnych systemów operacyjnych opartych na jądrze Linux. Linux jest jednym z przykładów wolnego i otwartego oprogramowania (FLOSS): jego kod źródłowy może być dowolnie wykorzystywany, modyfikowany i rozpowszechniany W skład dystrybucji, oprócz samego jądra, wchodzą podstawowe programy i usługi takie, jak powłoka, skrypty startowe, narzędzia konfiguracyjne, a także często duży zestaw aplikacji użytkowych. W obrębie dystrybucji używana jest jednolita organizacja plików konfiguracyjnych oraz wspólny mechanizm instalowania nowych aplikacji. Niekiedy terminem dystrybucja określa się także systemy zbudowane na bazie jąder innych niż Linux (np. GNU Hurd); szczególnie można tutaj wyróżnić klony dystrybucji uniksowych (np. Debian)

2 Jakie wady i zalety posiada system Linux
Zalety:
    1. Stabilność
    2. Bezpieczeństwo - posiadają minimalną ilość błędów, a odkryte błędy natychmiast są poprawiane
    3. Małe wymagania sprzętowe
    4. Wielodostępność - na jednym komputerze może pracować kilkaset użytkowników nie wpływając na siebie wzajemnie
    5. Wysoka konfigurowalność - właściwie każdy aspekt systemu można dostosować
    6. Wydajność - we wszelkich porównaniach jest na wysokich miejscach
    7. Doskonała sieciowość.

Wady:
    1. Niedobór driverów - ciężko o sterowniki do widowsowego sprzętu,
    2. Skomplikowany - przedtem było to zaletą, a teraz wadą - jest zbyt trudny dla leni
    3. Nie jest przystosowany dla użytkowników korzystających z gier
    4. Jego instalacja zajmuje dużo czasu
    5. Trudności w konfiguracji - przy braku znajomości języka angielskiego, który jest niezbędny , gdyż cała dokumentacja jest w tym języku

3 Jak zarządza się dyskietkami i partycjami w systemie Linux

Dyski i partycje
Partycje, na których znajdują się dyski logiczne w systemach typu windows są widziane od razu, jednakże w Linuxie tak nie jest. Dlaczego? Ponieważ lepiej jest gdy samemu się decyduje kiedy chcemy, aby były widziane dane dyski. W Linuxie zatem zanim zobaczymy jakiś dysk trzeba go najpierw zamontować.

Windows montuje automatycznie na samym początku ładowania systemu, robi to też automatycznie, gdy zmieniamy dyskietkę lub cd- rom. Jest jeszcze jedna różnica miedzy systemem windows a linux. W Windowsie (DOSie) wszystkie dyski są widoczne pod nazwami A: B: C: D: E: F: G: H: itd. Dyski dostają odpowiednią literkę w zależności od tego, który jest pierwszy. W linuxie jest zupełnie inna sytuacja. Na początku, przy włączaniu systemu montuje się główny system plików, który oczywiście ma jakieś katalogi. Aby zamontować jakiś dodatkowy dysk trzeba wybrać sobie, do którego katalogu w systemie plików mamy podmontować ten dysk. Może to być dowolny, pusty katalog. To daje nam pewną elastyczność co do nazw tych dysków. Możemy je nazywać jakkolwiek chcemy. W windows’ie tego nie możemy zrobić, muszą się nazywać jedną z literek alfabetu. Można jeszcze wspomnieć, że w tej chwili można już odpowiednio skonfigurować Linuxa do tego, aby zachowywał się tak, jak windows i montował automatycznie CD-ROMy i stacje dysków wtedy tylko, gdy chcemy je używać.

4 Budowa systemu operacyjnego Linux
Linux to system wielodostępny i wielozadaniowy, z pełnym zestawem narzędzi zgodnych z systemem UNIX. System plików pasuje do tradycyjnej semantyki uniksowej, zrealizowano też w pełni sieciowy standard systemu UNIX. Na wewnętrzne szczegóły projektu Linux wywarły duży wpływ kolejne jego powstawania. Dziś Linux może z powodzeniem działać na maszynie wieloprocesorowej z setkami megabajtów pamięci operacyjnej i wieloma gigabajtami przestrzeni dyskowej, a jednocześnie wciąż jest w stanie pracować poprawnie z pamięcią RAM mniejszą niż 4 MB. System Linux zaprojektowano tak, aby pozostawał w wyraźniej zgodzie z istotnymi opisami standardu POSIX. Oficjalne certyfikaty komitetu normalizacyjnego POSIX zdobyły co najmniej dwie dystrybucje systemu Linux. Na mocy ustaleń zastępczych, interfejs programisty w systemie Linux odpowiada semantyce systemu SVR4 UNIX, a nie zachowaniu systemu BSD. Do realizacji semantyki BSD w miejscach, gdzie oba sposoby działania istotnie się różnią, służy oddzielny zbiór bibliotek.

Składowe systemu Linux:
    Jądro: Jest odpowiedzialne za realizację wszystkich istotnych abstrakcji systemu operacyjnego, łącznie z takimi elementami, jak pamięć wirtualna i procesy.
    Biblioteki systemowe: Definiują standardowy zbiór funkcji, za pomocą których aplikacje mogą współdziałać z jądrem i które realizują wiele właściwości systemu operacyjnego nie wymagających pełnych przywilejów kodu jądra.
    Pomoce systemowe: Są programami, które wykonują osobne, specjalizowane zadania administracyjne. Z niektórych pomocy systemowych można korzystać tylko jeden raz w celu zapoczątkowania i skonfigurowania pewnych elementów systemu; inne (w terminologii unixowej na-zywane demonami) mogą działać nieustannie, obsługując takie zadania, jak odpowiadanie na sygnały nadchodzące z sieci, przyjmowanie z terminali zamówień na rozpoczęcie sesji lub uaktualnianie plików z dziennikami zdarzeń systemowych.

Na rysunku 2.1 widać różne części, z których składa się system Linux. Najważniejsza linia podziału biegnie tu między jądrem a wszystkim innym. Cały kod jądra jest wykonywany w uprzywilejowanym trybie procesora, z pełnym dostępem do wszystkich fizycznych zasobów komputera. W systemie Linux ów uprzywilejowany tryb nazywa się trybem jądra (ang. Kornel mode) i jest równoważny trybowi monitora . W jądro systemu Linux nie jest wbudowany żaden kod działający w trybie użytkownika. Zamiast tego wszelki kod wspierający system operacyjny, a nie wymagający wykonywania w trybie jądra, umieszczono w bibliotekach systemowych.

rys.2.1.Składowe sytemu Linux
Cały kod jądra i wszystkie struktury danych są trzymane w jednej przestrzeni adresowej, więc gdy proces wywołuje funkcję systemu operacyjnego albo gdy sprzęt zgłosi przerwanie, nie ma potrzeby przełączania kontekstu. W tej samej przestrzeni adresowej przebywa nie tylko kod centralnego planowania i pamięci wirtualnej, lecz także cały kod jądra ze wszystkimi modułami obsługi urządzeń, systemami plików i oprogramowaniem sieci. Jądro systemu Linux może dynamicznie ładować (i rozładowywać) moduły podczas pracy. Jądro nie musi obowiązkowo wiedzieć z góry, które moduły będą potrzebne - są to elementy ładowalne w pełni niezależnie.

Jądro Linux tworzy rdzeń systemu operacyjnego Linux. Jądro realizuje całość cech wymaganych, aby zasłużyć na miano systemu operacyjnego. Jednak system operacyjny tworzony przez samo jądro Linux ma niewiele wspólnego z systemem UNIX. Interfejs systemu operacyjnego, widoczny dla wykonywanych aplikacji, nie jest bezpośrednio realizowany przez jądro. Zamiast tego programy użytkowe odwołują się do bibliotek systemowych (ang. system libraries), w których z kolei następują niezbędne odwołania do usług systemu operacyjnego.

Biblioteki systemowe dostarczają wielorakich działań. Na najprostszym poziomie pozwalają one aplikacjom zamawiać systemowe usługi jądra. Odwołanie do systemu wymaga przekazania sterowania z nieuprzywilejowanego trybu użytkownika do uprzywilejowanego trybu jądra. Szczegóły tego przejścia zmieniają się w zależności od rodzaju architektury. Biblioteki dopilnowują zbierania argumentów wywołań funkcji systemowych i w razie konieczności nadawania tym argumentom specjalnej postaci, niezbędnej do wykonania wywołania.

Biblioteki mogą również dostarczać bardziej złożonych wersji podstawowych funkcji systemowych. Na przykład wszystkie funkcje buforowanych działań na plikach w języku C są zrealizowane w bibliotekach systemowych, umożliwiając bardziej zaawansowane sterowanie plikowymi operacjami wejścia-wyjścia niż to zapewniają podstawowe funkcje systemowe jądra. Biblioteki zawierają także podprogramy, które nie mają odpowiedników w odwołaniach do systemu, takie jak algorytmy sortowania, funkcje matematyczne i operacje na napisach. Wszystkie funkcje niezbędne do wspierania działań aplikacji standardu UNIX lub POSIX są zaimplementowane właśnie w bibliotekach systemowych. System Linux zawiera ponadto szeroki repertuar programów działających w trybie użytkownika - zarówno pomocy systemowych, jak i narzędzi dla użytkowników. W skład pomocy systemowych wchodzą wszystkie programy niezbędne do rozpoczęcia pracy systemu, takie jak programy do konfigurowania urządzeń sieciowych lub do ładowania modułów jądra. Programy serwerów pracujące nieustannie też zalicza się do pomocy systemowych. Obsługują one rozpoczynanie sesji przez użytkowników, sygnały nadchodzące z sieci oraz kolejki do drukarek.

Środowisko użytkownika systemu UNIX zawiera dużą liczbę standardowych pomocy do wykonywanych prostych, codziennych prac, takich jak wyprowadzenie zawartości katalogów, przemieszczanie i usuwanie plików lub wyświetlanie zawartości pliku. Bardziej skomplikowane narzędzia mogą przetwarzać teksty, na przykład porządkować dane tekstowe lub poszukiwać w tekście wejściowym zadanych wzorców. Łącznie pomoce te tworzą standardowy zestaw narzędziowy, którego użytkownicy mogą się spodziewać w każdym systemie uniksowym. Choć nie wykonują one żadnej funkcji systemu operacyjnego, pozostają ważną częścią podstawowego systemu Linux.

5 Założyciel Linuxa, rok powstania, wersja systemu
Historia Linuksa rozpoczęła się w 1991 roku, kiedy to fiński programista, Linus Torvalds poinformował o hobbystycznym tworzeniu przez siebie niedużego, wolnego systemu operacyjnego, przeznaczonego dla procesorów z rodzin i386 oraz i486. Linus stworzył jednak tylko jądro, pełny system operacyjny potrzebował jeszcze powłoki systemowej, kompilatora, bibliotek itp. W roli większości z tych narzędzi użyto oprogramowania GNU, co jednak w przypadku niektórych komponentów systemu wymagało poważnych zmian, niekiedy finansowanych przez Projekt GNU, niekiedy dokonanych już wcześniej przez Linusa Torvaldsa. Dużo pracy wymagało także zintegrowanie systemu do postaci dystrybucji, które umożliwiały zainstalowanie go w stosunkowo prosty sposób. Jednymi z pierwszych były opublikowany 16 lipca 1993 Slackware Linux czy założony miesiąc później Debian, nazywający siebie GNU/Linux

6 Najważniejsze cechy systemu
Wielozadaniowość
Linux jest systemem wielozadaniowym – co umożliwia mu równoczesne wykorzystywanie więcej niż jednego procesu (proces to egzemplarz wykonywanego programu, posiadający własną przestrzeń adresową). Za realizację wielozadaniowości odpowiedzialne jest jądro systemu operacyjnego (kernel).
Wielozadaniowość zapewniona jest przez program nazywany planistą, który realizuje algorytm szeregowania zadań w kolejce do przyznania czasu procesora. Linux może wykorzystywać wiele procesorów. Gdy system ma mniej dostępnych procesorów niż zadań to czas działania procesora jest dzielony pomiędzy wszystkie zadania.
Linux operuje także tzw. wywłaszczenie, które polega na przerwaniu wykonywania procesu, odebraniu mu procesora i przekazaniu sterowania do planisty.

Do wyświetlania listy uruchomionych procesów służy polecenie ps. Polecenia tego może używać każdy użytkownik, jednak wyświetlane będą tylko te procesy, których jest właścicielem. Najważniejszą spośród wyświetlanych informacji to:
    PID – identyfikator procesu
    TTY – identyfikator konsoli, z której proces został uruchomiony
    TIME – czas procesora wykorzystany do tej pory
    CMD – polecenie, którym uruchomiono proces
Listę procesów można wyświetlać za pomocą komendy: ps -A lub jeżeli chcemy wyświetlić procesy wg tego jak obciążają system możemy użyć polecenia top.

Wielodostępność
Linux jest systemem wielodostępnym. Oznacza to, że wielu użytkowników może jednocześnie z niego korzystać.
Każdy użytkownik ma przydzielone zasoby:
    pamięć
    czas procesora
    miejsce na dysku

Do jego zasobów nie nikt dostępu chyba, ze sam je udostępni. Wyjątkiem jest administrator.

Użytkownik jest niezależny i odizolowany od innych. Aby zalogować się do systemu możemy skorzystać z klawiatury podłączonej do komputera, lub sieci komputerowej. Po zalogowaniu się uzyskujemy dostęp do konsoli. W linuxie zdefiniowanych jest wiele konsoli tekstowych, na których mogą logować się różni użytkownicy.

KONSOLA – LOGOWANIE
[Ctrl] + [Alt] + [Fn] np. [Ctrl] + [Alt] + [Fn] – aby zalogować się do pierwszej konsoli.
[Ctrl] + [Alt] + [F7] – powrót do środowiska graficznego.

KONTO
whoami – sprawdza z jakiego konta aktualnie korzystamy.
who – kto aktualnie jest zalogowany w systemie.

WIADOMOŚCI PRZESYŁANE POMIĘDZY UŻYTKOWNIKAMI
write – polecenie służy do wysyłania wiadomości do innego użytkownika.
wall – polecenie służy do przesyłania wiadomości do wszystkich zalogowanych
użytkowników.

KONSOLA TOMKA PODCZAS WYSYŁANIA
[tomek@localhost ~]$ write wojtek
Witam. Jestem Tomek. Pozdrawiam.

KONSOLA WOJTKA PODCZAS ODCZYTU
[wojtek@localhost ~]$
message from tomek@localhost on pts/3 at 19:21 …
Witam. Jestem Tomek. Pozdrawiam.
EOF

7 Na czym polega wywłaszczenie
Wywłaszczenie – technika używana w środowiskach wielozadaniowych, w której algorytm szeregujący (scheduler) może wstrzymać aktualnie wykonywane zadanie (np. proces lub wątek), aby umożliwić działanie innemu. Dzięki temu rozwiązaniu zawieszenie jednego procesu nie powoduje blokady całego systemu operacyjnego. W systemach bez wywłaszczenia, zadania jawnie informują scheduler, w którym momencie chcą umożliwić przejście do innych zadań. Jeżeli nie zrobią tego w odpowiednim czasie, system zaczyna działać bardzo wolno. Oprócz tego wywłaszczanie umożliwia szczegółowe określanie czasu, w jakim dany proces może korzystać z procesora. Wywłaszczanie w niektórych systemach operacyjnych może dotyczyć nie tylko programów, ale także samego jądra – przykładem takiego systemu jest Linux.

Wywłaszczanie jest często ograniczane, na przykład procedury odpowiedzialne za obsługę przerwań sprzętowych są zwykle niewywłaszczalne, co znacznie upraszcza ich konstrukcje, ale wymusza też zadbanie o to, żeby szybko ulegały zakończeniu umożliwiając działanie innym procesom. W jądrze Linuksa przed wersją 2.6 niemożliwe było wywłaszczenie procesu, który znajdował się w trybie jądra, co w pewnych sytuacjach mogło być powodem bardzo wolnej reakcji na działania użytkownika.

 

8. Jakie systemy plików obsługuje Linux

Linux obsługuje kilka typów systemów plików. Najważniejszymi z nich są:

    minix - najstarszy, uważany[przez kogo?] za najbardziej niezawodny, jednak posiada znaczne ograniczenia (brakuje niektórych znaczników czasu, nazwy plików mogą mieć maksymalnie 30 znaków, system plików może mieć co najwyżej 64 MB).

    xia - zmodyfikowana wersja systemu minix, w której zostały podniesione limity: maksymalnej długości nazwy oraz rozmiaru systemu plików. Żadne nowości nie zostały wprowadzone. Nie jest obsługiwany od wersji 2.1.21.

    ReiserFS - bardzo szybki i stabilny system plików, szczególnie dobrze radzi sobie z dużą liczbą małych plików. Obecnie w wersji 3.6, na ukończeniu są natomiast prace nad następcą Reiser4.

    XFS - również szybki system plików, głównie za sprawą tego, iż wiele informacji przechowuje w pamięci RAM. Niestety jest przez to podatny na awaryjne przerwanie działania systemu.

    ext4 – następca ext3, obecnie jeden z najpopularniejszych systemów plików dla Linuksa.

    ext3 - w zasadzie jest to ext2 z tą różnicą, że ma mechanizmy księgowania operacji przez co wzrosła stabilność tego systemu plików i odporność na awaryjne przerwanie działania systemu. Można go jednak zamontować jako ext2 (bez księgowania).

    ext2 - nie zawiera księgowania, wyparty przez ext3.

    ext - starsza wersja ext2, nie jest zgodna wzwyż. Aktualnie nie używany. Nie jest obsługiwany od wersji 2.1.21.

 

9 Jak wygląda struktura katalogów systemu Linux
Katalog główny (nazywany również root - z angielskiego korzeń), gdzie znajdują się wszystkie katalogi i pliki systemu Linux oznaczony jest symbolem "/" (slash). Mówiąc jeszcze prościej - na partycji "/" instalowany jest system Linux. W systemie Linux tworzone są określone katalogi przechowujące określone pliki niezbędne do prawidłowej pracy sytemu. Tworzy się ich określona liczna o zdefiniowanych nazwach. W poszczególnych dystrybucjach budowa ta może się różnić, co nie zmienia faktu, że katalogi te istnieją i pełnią takie same funkcje. Przedstawię ich nazwy i uproszczoną charakterystykę (Szczegółowe informacje wraz z opisem zawartości podkatalogów czytelnik znajdzie pod tym linkiem):
/bin - zawiera w sobie pliki binarne (wykonywalne) podstawowych narzędzi systemowych, które są niezbędne do pracy w trybie wieloużytkownikowym.
/boot - zawiera w sobie pliki odpowiedzialne za bootowanie (uruchamianie) systemu oraz jądro systemu
/cdrom - zazwyczaj jest to katalog dowiązany do katalogu media lub mnt (w zależności od dystrybucji)
/dev - zawiera w sobie pliki odpowiedzialne za obsługiwanie urządzeń jak np. cdrom. Generalnie pliki w tym katalogu odpowiadają za komunikację system - urządzenia komputera.
/etc - zawiera w sobie globalne pliki konfiguracyjne, ustawienia systemowe
/home - jest miejscem, w którym tworzy się katalog domowy użytkownika lub użytkowników (/home/nazwa_użytkownika), a w nim dodatkowo podkatalogi jak: dokumenty, muzyka, obrazy. Możemy tworzyć również swoje własne według potrzeb.
/lib - zawiera w sobie skompilowane biblioteki niezbędne do uruchamiania systemu a także moduły jądra systemu
/lost+found - pliki odnalezione podczas wykonywania testów dysku
/media - miejsce montowania (podłączania) nośników wymiennych jak pendrive, dyskietka, karty pamięci, czy napędy cdrom
/mnt - miejsce montowani dysków - systemów plików (w niektórych dystrybucjach np. Ubuntu, dyski montowane są w katalogu /media)
/opt - Katalog do instalowania dodatkowego oprogramowania nie wchodzącego w skład systemu (wykorzystywany głównie w dystrybucji SUSE). Obecnie, w niektórych dystrybucjach służy on do instalacji oprogramowania trzeciego jak np. oracle'a. Folder ten wychodzi z użycia na rzecz /usr/local
/proc - wirtualny system plików. Tworzy się podczas uruchamiania systemu. Zawiera w sobie pliki z informacjami o procesach
/root - katalog superużytkownika "root" - mówiąc w skrócie, jest to konto administracyjne. Bez niego nie możemy używać np. narzędzia "sudo" czy dokonywać żadnych zmian w systemie wymagających hasła administratora np. aktualizacji systemu.
/sbin - zawiera w sobie pliki wykonywalne poleceń, dostępne tylko dla administratora (root)
/srv - katalog dla serwerów
/sys - interfejs zmiany parametrów jądra (od jądra w wersji 2.6)
/tmp - zawiera w sobie pliki tymczasowe (również te, zapisujące się na dysku przy przeglądaniu Internetu)
/usr - zawiera w sobie narzędzia i aplikacje (programy) zainstalowane na komputerze dostępne dla zwykłego użytkownika oraz administratora.
/var - zawiera w sobie logi systemowe, pliki pocztowe czy kolejki drukarki.

10. Definicja interpretatora poleceń

Interpreter (interpretator) poleceń (ang. command processor) – część systemu operacyjnego odpowiedzialna za tłumaczenie i wykonywanie poleceń systemowych wprowadzanych przez użytkownika w trybie konwersacyjnym lub w trybie wsadowym. W czasach komputerów 8-bitowych interpreterem poleceń był często interpreter języka BASIC, który wbudowywano w pamięć ROM, i który był automatycznie uruchamiany przy starcie urządzenia.