HOME
DO_STR_GLOWNEJ_WYSZUKIWARKI
 
 
JAK DZIALA LINUX (1)

 

Pobierz spakowaną witrynę gorzow-wlkp.pl/linux

Jeżeli pragniesz poznać Linuksa Mandrake (obecnie Mandriva), to... dobrze trafiłeś. Witryna została zauważona przez twórców magazynu KOMPUTER ŚWIAT 5/2004(141) str. 46 poprzez umieszczenie linku oraz magazynu CHIP 4/2004 (str.114) poprzez umieszczenie artykułu opisującego ten serwis internetowy. Jak na hobbystyczną stronę o Linuksie to miłe ;) Acha... na stronie mandrakelinux.pl/informacje podano też link z opisem cytuję "duży zbiór praktycznych informacji o Mandrake" (mam ją w swoim archiwum - klub.chip.pl/twarogal).

Zapraszam do zadawania pytań na FORUM oraz mailem. Chętnie udzielę (bezpłatnie) odpowiedzi. Oficjalne ceny za jedną poradę na stronie MandrakeSoftPL (mam ją w moim archiwum z dnia 2.05.2004) wahają się od 20 do 350 zł.

 

*

 

Tematy związane z zarządzaniem:

 

Postanowiłem zrobić coś dla zupełnych nowicjuszy, czyli artykuł o tym jak działa komputer i osadzony w nim system operacyjny Linux. Czasami celowo ominąłem zaawansowane zagadnienia (np. rolę chipsetu na płycie głównej), gdyż chciałem przede wszystkim zachować prostotę i przejrzystość tekstu.

 


 

Komputer, to taka prostokątna skrzynka, monitor, klawiatura, myszka i urządzenia typu skaner, drukarka. We wspomnianej skrzynce znajduje się procesor połączony kabelkami z dyskiem twardym, kartą grafiki, kostkami pamięci RAM. Oczywiście z przyczyn czysto praktycznych kabelki zastąpiono specjalnymi cienkimi paskami miedzi umieszczonej na płycie głównej, ale to tylko kwestia celności rozwiązań technicznych. Procesor jest rodzajem układu scalonego, który w rytm swojego zegara przeadresowuje pakiety bitów, czyli zer i jedynek otrzymywanych z różnych urządzeń. Zero to brak impulsu elektrycznego w określonym przedziale czasowym (lub w kości pamięci, na dysku), a jeden to impuls elektryczny. Tak naprawdę, to procesor całe swoje życie tylko przyjmuje impulsy (słowa bitów), przeadresowuje je i wysyła nowe zapytania, umieszczając wyniki na monitorze lub w postaci plików na dysku twardym ;) . Aby zwiększyć szybkość pracy procesora wymyślono, że często powtarzające się pakiety będą przechowywane w pamięci podręcznej RAM, a nie na dysku twardym. Co to jest dysk twardy i pamięć podręczna? Dysk, to inaczej magnetofon, który zapisuje na taśmie o kształcie krążka zestaw zer i jedynek. Oczywiście ze względu na konieczność użycia silniczka jest to urządzenie stosunkowo powolne. Znacznie szybciej zapisuje się i odczytuje dane z kości pamięci. Pamięć RAM to w uproszczeniu miliony tranzystorków w jednym łebku. Ich jedynym zadaniem jest podtrzymywanie małego prądu w każdym tranzystorku (coś jakby minikondensator). Brak prądu oznacza zero, obecność ładunku elektrycznego oznacza jeden. W zależności od ułożenia ładunków mamy różne "dane". Ponieważ RAM nie umie długo utrzymywać wspomnianych ładunków w sobie, potrzebuje od czasu do czasu pobrać energię elektryczną w celu odświeżenia. Dane w pamięci RAM znikną, gdy odłączymy napięcie zasilające np. wciskając reset komputera.

W chwili włączenia prądu następuje działanie, w swoim schemacie przypominające labirynt, po którym biegnie prąd. Labirynt, gdzie niektóre ścianki można przesuwać (zgodnie z parametrami BIOSu) narzucając naszemu prądowi odpowiedni kierunek. No, ale do rzeczy... Włączając komputer, pozwalamy napięciu odwiedzić transformator, który zamieni 230V na kilka mniejszych np. ok 2V, 12V itd. Teraz nastapi najciekawsze: zgodnie z ustawieniami BIOSu prądy popłyną tam, gdzie im BIOS pozwolił, czyli między innymi do procesora. Procesor zacznie odbierać ładunki elektryczne zawierające bity informacji i automatycznie będzie je przekierowywać do różnych urządzeń w celu odczytu danych startowych. Zostanie wykonany: TEST PAMIĘCI, TEST URZĄDZEŃ WEWNĘTRZNYCH, SKANOWANIE SPRZĘTU W POSZUKIWANIU URZĄDZEŃ PCI, SKANOWANIE URZĄDZEŃ GOTOWYCH DO ROZRUCHU. Jeżeli w BIOSie ustawiłeś opcję bootowania z dysku twardego, to zgodnie z tym procesor zostanie zmuszony do wysłania impulsów szukających danych w MBR dysku twardego (ewentualnie stacji dyskietek 1,44 lub w czytniku CD-ROM).

Co to jest MBR? Master BootRecord to obszar pierwszych 512 bajtów dysku twardego (cylinder 0, głowica 0, sektor 1). Zawiera bootstrap, czyli program utworzony podczas zakładania partycji, który w trakcie startu komputera (współpracując z BIOSem) uruchamia dane z aktywnej partycji. W MBR są ponadto: tablica partycji dysku (informacje o lokalizacji i typie partycji), informacje dotyczące rozmiaru klastrów i wielkości sektorów systemowych (np. tablicy FAT32) w obszarze fizycznym danych. W MBR Linux umieszcza LILO (ewentualnie GRUB), czyli swój program startowy (Boot Loader). Więcej na ten MBR w magazynie CHIP 8/2005 (str. 86-89) oraz Komputer Świat EXPERT 2/2007 (str. 36-38).

Po odczytaniu danych z MBR procesor wysyła odpowiednie (zgodne z parametrami LILO) zapytania do innych obszarów dysku twardego i uruchamia system operacyjny Linux.

Słowo o BIOSie.

BIOS czyli Basic Input Output System (podstawowy system wejścia-wyjścia) to pierwszy program uruchamiany jeszcze przed startem systemu operacyjnego. Zadaniem BIOSu jest inicjowanie (uaktywnianie) urządzeń wejścia (np. klawiatury) i wyjścia (np. karty grafiki), ustalenie parametrów pracy płyty głównej (taktowanie szyny systemowej, ustawianie mnożnika zegara dla procesora, parametrów pracy pamięci RAM) oraz aktywacja wybranych przez użytkownika funkcji (np. zarządzania energią). Fizycznie BIOS jest zapisem danych w postaci tzw. "bramek" (mikrourządzeń przepuszczających lub blokujących przejście ładunków elektrycznych) w pamięci ROM (czyli rodzajem pamięci stałej, nie wymagającej odświeżania dodatkowym napięciem). Uwaga: niedomyślne parametry BIOSu (np. data, godzina, hasło itp.) są zapisane w sąsiedniej, specjalnie podłączonej do BIOSu pamięci CMOS. Utrzymuje ona swoje dane dzięki okrągłej, błyszczącej bateryjce umieszczonej w płycie głównej. Jeżeli wyjmiesz wspomnianą bateryjkę, to BIOS uruchomi się w wg fabrycznych parametrów ROMu (bez hasła, właściwej daty itd.).

 


 

Linux to Kernel (jądro systemu) plus ZBIÓR oprogramowania. Nie ma jednego systemu Linux, a tylko Kernel jest ustandaryzowany. W przeciwieństwie do znanego powszechnie Windows , Linux działa bez okienek. Wynika to zreszta z historii systemu, który pierwotnie był dostępny tylko w wersji tekstowej i wymagał znajomości komend unixowych. Okienka (np. KDE, Gnome) są są więc dodatkowym oprogramowaniem, tzw. "nakładką" na powłokę tekstową (shella).

Kolejność czynności podczas startu systemu:

  1. Pierwszy uruchamiany jest program LILO (ew. GRUB) Dane tam zawarte pozwalają procesorowi na ustawienie ekranu, uruchomienie właściwego Kernela itp.
  2. Zostaje odpalony pierwszy proces Kernela, czyli init. Zawsze ma on identyfikator procesu PID o wartości 1. Większość dystrybucji Linuksa (w tym opisywany tutaj Mandrake/Mandriva) używa init w oparciu o parametry zapisane w pliku /etc/inittab. Proces init odpala proces getty
  3. Proces init montuje systemy plików (np. dysk twardy) zgodnie z danymi w pliku /etc/fstab, a to co zamontował odnotowuje w pliku /etc/mtab
  4. Następnie są czytane skrypty startowe w katalogach /etc/rc.d/rc?.d/ (będą wówczas włączone demony w ramach osobnych procesów) oraz plik /etc/rc.d/sysinit .
  5. W zależności od widzimisie admina niektóre programy mogą być uruchomione za pomocą skryptów w katalogu /etc/xinetd/ . Mamy wówczas do czynienia z pracą programu nie w osobnym procesie (te zostały włączone podczas startu systemu za pośrednictwem w/w skryptów /etc/rc.d/rc?.d/*), a pod kontrolą nadserwera inetd (lub xinetd)
  6. Uruchamiany jest skrypt /etc/rc.d/rc.local . W nim możemy (na końcu!) umieszczać odwołania do własnych, autorskich skryptów (np. uruchomienie połączenia SDI - patrz ostatnie wiersze pliku).
  7. Gdy system zakończy ładowanie np. w 3 levelu (w powłoce tekstowej), to automatycznie zostanie włączony program login umożliwiający zalogowanie do systemu. Po zalogowaniu zostaną uruchomione skrypty konfigurujące shella.
  8. Jeżeli system odpalił w 3 levelu (w powłoce tekstowej), a użytkownik zechce pracować w okienkach np. KDE, to wielki finał wykona skrypt /usr/bin/X11/startx (uruchamiany poprzez wpisanie zlecenia startx i wciśnięcie klawisza ENTER).

Oczywiście ładowanie systemu nie odbywa się w sposób schematycznie liniowy. Kilka elementów jest inicjowanych na samym początku startu systemu, ale zakńczenie odbywa się na końcu - na przykład schemat uruchamiania shella danego usera:

  • W pierwszej kolejności proces init zgodnie z danymi w pliku /etc/inittab uruchamia proces getty. Proces getty może mieć różne numery, ale domyślnie ma ich od 1 do 6 (zgodnie z wpisem do pliku /etc/initab). Efekty działania procesu getty1 widzimy na konsoli nr 1 widzianej po wciśnięciu klawiszy CTRL ALT F1.
  • Proces getty wykonuje podstawowe czynności inicjujące, a następnie pod koniec ładowania systemu uruchamia program login.
  • Po zalogowaniu system odczytuje rodzaj shella przypisanego dla danego usera. Uruchamiane są skrypty konfigurujące shella. Dopiero teraz mamy powłokę tekstową przygotowaną do odbierania poleceń.
  • Jako ciekawostkę podam, że po wylogowaniu np. z konsoli 1 następuje wyłączenie procesu getty1, następnie ponownie w oparciu o plik /etc/initab program init uruchamia na nowo program getty i powtarzają się etapy konfiguracji konsoli, a na jej bazie shella.


Teraz po kolei opiszę w/w etapy startu systemu.

Acha... zapamiętaj na razie jedną rzecz: usługi internetowe mogą być uruchamiane za pomocą programu init (/etc/rc.d/init.d/ oraz /etc/rc.d/) lub nadserwera inetd (xinetd). Wyjaśnienia poniżej.






1) LILO


LILO to program (bootloader) uruchamiający system Linux. Innym, choć na razie mniej popularnym bootloaderem jest GRUB. LILO jest umieszczane standardowo na dyskietce 1,44 lub w MBR dysku twardego, zaś konfig LILO czyli plik lilo.conf na dysku twardym, w katalogu /etc.

Więcej na ten temat na sąsiedniej stronie.






2) INIT


Gdy program LILO ustawi parametry startowe, nastąpi uaktywnienie pierwszego procesu Kernela pod nazwą init, którego opcje są zapisane w pliku /etc/inittab . Oto przykład tego pliku (patrz tekst zaznaczony na niebiesko):


#(Tu decydujemy, czy załadują się okienka 5 lub czy system zatrzyma ładowanie na powłoce tekstowej 3. Więcej informacji umieściłem poniżej. W naszym przykładzie system wystartuje w okienkach (5)
id:5:initdefault:

#(wskazanie miejsca położenia pliku rc.sysinit - jest to skrypt konfigurujący  niektóre parametry startowe systemu)
si::sysinit:/etc/rc.d/rc.sysinit

#(Co ma zrobić system, gdy user wciśnie klawisze CTRL ALT DELETE - przeczytaj artykuł na sąsiedniej stronie. W naszym przykładzie nastąpi restart systemu. Uwaga: w okienkach pierw zabijamy okienka klawiszami CTRL ALT BACKSPACE, a potem dopiero restartujemy system CTRL ALT DELETE)
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

#(czas podtrzymywania napięcia przez UPS po zaniku prądu - tu 2 minuty, potem zostanie zatrzymany system)
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

#(anulowanie powyższego przygotowania do zatrzymania systemu, o ile pojawi się napięcie w wyznaczonym czasie tu 2 minut)
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Uruchamianie gettys w standardowych poziomach startowych (runlevels).
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Wyjaśnienie: respawn oznacza wywołanie procesu lub demona. Proces getty 1 daje efekt w postaci powłoki tekstowej widzianej jako tty1 (CTRL ALT F1).



Jak zauważyłeś głównym zadaniem pliku /etc/inittab jest wskazanie poziomu startowego runlevel w wierszu id:5:initdefault: . Oczywiście możemy narzucić inny niż 5 poziom. Oto ich lista:

0 - halt, czyli zatrzymaj system (nie ustawiaj tego jako domyślny poziom ;)
1 - system jednoużytkownikowy (będzie działać tylko pod jednym userem), bez funkcji sieciowych
2 - wieloużytkownikowy system (tak jak poziom 3), ale z wyłączoną funkcją sieciową
3 - wieloużytkownikowy system z funkcjami sieciowymi
4 - unused (nieużywane )
5 - tak jak poziom 3, ale w okienkach (serwer X11)
6 - reboot czyli restart systemu (nie ustawiaj tego jako domyślny poziom ;)

Poziom 0 i 6 jest używany przez system do zwykłego restartu lub zatrzymania, więc nie powinno się go wpisywać do pliku /etc/inittab w wierszu id:?:initdefault: . Zobaczysz ten runlevel, gdy wydasz zwykłe zlecenie halt, reboot lub np. init 6, telinit 6.

Informację o aktualnym numerze poziomu uzyskasz też za pomocą zlecenia runlevel.





3) Skrypty startowe /etc/rc.d/rc?.d/*


Już wiesz jaki runlevel wybrałeś podczas startu systemu. Przyjmijmy dla własnej wygody, że jest to poziom 3, czyli powłoka tekstowa. Będziesz pracował w czystym shellu, a okienka uruchomisz zleceniem startx.

Należy wiedzieć, że w zależności od tego czy system załaduje się w powłoce tekstowej, czy w okienkach (np. KDE) - są wykorzystywane inne pliki autostartu. Jeżeli wybraliśmy domyślny poziom działania nr 3, to automatycznie zmusiliśmy system, by w czasie startu odczytał zawartość katalogu /etc/rc.d/rc3.d/ (który działa podobnie jak autostart w windowsowm menu START- PROGRAMY- AUTOSTART). W przypadku startu systemu w okienkach (czyli poziomie 5), system odczyta zawartość katalogu /etc/rc.d/rc5.d/ . Znajdują się w nim linki do plików startowych demonów. Mają one w nazwie literkę S (czyli plik startowy) lub K (kill - koniec, zabity), nr oznaczający kolejność uruchomienia i nazwę demona.   Skróty te można śmiało ręcznie kasować (zamiast usuwania można zmienić nazwę, dopisując na początku dolną kreskę "_") lub dodawać w zależności od potrzeb. Skąd się tam biorą? Ano, podczas instalacji programu np sshd, w katalogu /etc/rc.d/init.d/ zostanie utworzony plik sshd umożliwiający uruchomienie danego demona. To właśnie do niego jest dowiązany skrót w /etc/rc.d/rc3.d/.

Więcej o autostarcie napisałem na sąsiedniej stronie. USŁUGI (czyli serwisy systemowe) są to programy uruchamiane w celu dostarczenia pewnych usług. Programy uruchamiane w celu dostarczenia pewnych usług za pośrednictwem inetd (xinetd) nazywamy usługami lub serwisami systemowymi, natomiast programy działające samodzielnie (standalone) nazywamy demonami. Listę usług zamieściłem na stronie pt. ZARZĄDZANIE. Uwaga: demon to program, który nie jest dołączony do żadnego terminala (działa w tle).






4) Superserwer inetd (xinetd)


Superserwer inetd (xinetd) to narzędzie bardzo przydatne w systemie Linux. Jego zaletą jest umiejętność nasłuchiwania na wybranych portach i uruchamiania danej usługi w razie potrzeby. Weźmy przykład: sshd. Można go odpalić jako osobny proces standalone - wówczas sshd będzie pracował jako demon i zostanie aktywny CAŁY CZAS, nawet gdy nie będzie prób nawiązania połączenia. Z punktu widzenia oszczędności zasobami komputera, to rozrzutne choć umożliwiające natychmiastową reakcję rozwiązanie. Można też uruchomić sshd pod inetd (xinetd) i wówczas nasz superserwer będzie się czaił na porcie 22, a gdy usłyszy nawoływanie do połączenia - samoczynnie uruchomi nieaktywnego dotychczas demona sshd. Niestety, wydłuża się wówczas czas oczekiwania na uruchomienie i reakcję. Serwer inetd (xinetd) ustala nr portu pobierając dane z pliku /etc/services. Plik ten zawiera listę wszystkich usług sieciowych wraz z odpowiadającymi im portami.

Podczas instalowania demonów (np. proftpd, sshd itd.) tworzone są w katalogu /etc/xinetd.d pliki konfiguracyjne o tytułach zawierających nazwę demona. Po wyedytowaniu dowolnego pliku, znajdziesz parametr disable (wyłączone). Decyduje on, czy demon będzie podporządkowany xinetd (opcja no) lub czy włączy się jako jako samodzielny proces (opcja yes). Demona np. sshd pracującego pod xinetd uruchomimy (po dokonaniu zmian w katalogu /etc/xinetd.d) resetując superserwer zleceniem:
kilall -HUP xinetd
lub
/etc/rc.d/xinetd restart
Acha... w innych Linuksach niż Mandrake możesz spotkać inetd z plikiem konfiguracyjnym /etc/inetd.conf .

Aby zobaczyć jakie usługi są obecnie uruchamiane przez inetd wydajemy komendę:
grep -v '^#' /etc/inetd.conf
Aby inetd nie był uruchamiany przy starce systemu należy usunąć atrybut wykonywalny pliku /etc/rc.d/rc.inetd.
chmod 660 /etc/rc.d/rc.inetd

Przypominam, że programy uruchamiane w celu dostarczenia pewnych usług za pośrednictwem inetd (xinetd) nazywamy usługami lub serwisami systemowymi, natomiast programy działające samodzielnie (standalone) nazywamy demonami. Uwaga: demon to program, który nie jest dołączony do żadnego terminala (działa w tle). Listę usług zamieściłem na stronie pt. ZARZĄDZANIE.

Znalazłem pod adresem ftp://ftp.helion.pl/online/libezp/libezp-3.pdf fragment książki wydawnictwa Helion w formacie pdf zawierający ciekawe informacje o xinetd.






5) Skrypt /etc/rc.d/rc.local


Mamy włączony system. Działają demony, interfejsy. Został ostatni główny skrypt startowy rc.local, w którym informatycy opiekujący się daną dystrybucją Linuksa (tu Mandrake/Mandriva)  umieszczają ostatnie szlifujące konfigurację zlecenia. Ponieważ z każdą nową wersją Mandrake mamy inną zawartość pliku rc.local nie będę opisywał jego zawartości. Jeżeli masz swoje autorskie skrypty i chcesz je automatycznie uruchamiać podczas startu systemu, to na końcu pliku dopisz prosty wiersz będący ścieżką dostępu np.

/etc/rc.d/rc.his

Pamiętaj, ze takie autorskie skrypty muszą mieć prawo do wykonania.






6) Skrypty konfigurujące shella



Proces uruchamiania shella dla danego usera jest skomplikowany. Wspomniałem o tym na początku strony. Nas interesuje co się dzieje od chwili, gdy program getty zaczyna proces przygotowania konsoli do użycia uruchamiając odpowiednie programy. Program login pozwolił wpisać nazwę usera i sprawdził hasło.

Z pliku /etc/passwd oraz passwd- jest pobierany rodzaj shella przypisany danemu userowi (plik /etc/shells zawiera listę wszystkich, dostępnych, systemowych shelli). Po ustaleniu rodzaju shella (w naszym przypadku bash) jest czytany plik /etc/profile
Następnie ustalana jest zmienna PATH zgodnie z zawartością pliku ~/ .bash_profile
lub jeżeli go nie ma, to w pliku ~/bash_login
lub jeżeli ich nie ma to w pliku ~/.profile
Pozostaje jeszcze plik ~/ bashrc , który współpracuje z plikiem /etc/bashrc

Wyjanienie: znaczek ~/ ozancza katalog domowy np. /home/antek/
Kropka przed nazwą pliku .profile oznacza, że ma atrybut "ukryty".

Inne pliki shella:
~/ .bash_history zawiera zapis historii wydawanych poleceń. Kilka słów o tym pliku na sąsiedniej stronie.
~/ bash_logout zawiera polecenia do wykonania podczas wylogowania
Powyższe wzory plików konfiguracyjnych basha są pobrane z mojego Mandrake 9.0

Więcej o konfiguracji shella BASH znajdziesz na sąsiedniej stronie.






7) Skrypt /usr/bin/X11/startx


Przyjmuję, że jesteśmy zalogowani w 3 levelu, czyli działamy w powłoce tekstowej. Jeżeli mamy prawa do odpowiednich plików, to możemy zleceniem startx uruchomić okienka.

Więcej na temat X-Window znajdziesz na sąsiedniej stronie.



 
twarogal@wp.pl

Uwaga: z powodu namnożenia się różnych złodziejskich witryn www, które kopiują moje strony i umieszczają je u siebie wraz z komercyjnymi reklamami (na których zarabiają) informuję, że wszelkie prawa są zastrzeżone.

Uwaga. Aby uniknąć zasysania całej witryny gorzow-wlkp.pl/linux za pomocą programów typu TeleportPro, WebCopier itd. informuję, że udostępniłem spakowaną wersję (w formacie RAR).

 
 

 

 

Witryna była dostępna pod adresami: strony.wp.pl/wp/twarogal , strony.wp.pl/wp/linuxtwarka , twarogal.republika.pl , klub.chip.pl/twarogal oraz gorzow-wlkp.net (w latach 2003/04).

 

 

gorzow-wlkp.pl

Informacje o odwiedzających są rejestrowane i publicznie udostępniane na pod adresem: http://gorzow-wlkp.pl/licznik/