Jesteś tutaj

Jak działa Linux

Jeśli chcesz poznać Linuksa "od środka" -- sięgnij po tę książkę

  • Poznaj mechanizmy uruchamiania i pracy systemu
  • Zobacz, jak realizowane są usługi systemowe i sieciowe
  • Naucz się administrować Linuksem

Jeśli korzystasz z Linuksa, to na pewno nie trzeba opisywać Ci jego zalet. Bez wątpienia doceniasz jego stabilność i szybkość działania. Dzięki stale zwiększającej się liczbie aplikacji, komputer z zainstalowanym Linuksem można wykorzystać do pełnienia wielu funkcji - od domowej stacji roboczej, aż do serwera sieciowego. Aby jednak w pełni wykorzystać jego możliwości, musisz poznać jego wewnętrzne mechanizmy rządzące uruchamianiem systemu oraz obsługą sieci i urządzeń peryferyjnych, a także zasady administrowania jego zasobami.

Książka "Jak działa Linux" zawiera wszystkie informacje dotyczące wnętrza systemu Linux oraz zasad korzystania z niego. Przedstawia zarówno zagadnienia podstawowe -- przebieg procesu uruchamiania systemu i mechanizmy obsługi sieci, jak i tematy zaawansowane, związane z administracją systemem, jego współpracą z urządzeniami zewnętrznymi oraz programowaniem.

  • Podstawy korzystania z Linuksa - polecenia, struktura plików i katalogów oraz dyski logiczne
  • Przebieg procesu uruchamiania Linuksa
  • Konfigurowanie i uruchamianie sieci i usług sieciowych
  • Pisanie własnych programów w języku powłoki oraz w C++
  • Kompilowanie programów
  • Konserwacja jądra systemu
  • Obsługa urządzeń peryferyjnych
  • Tworzenie kopii bezpieczeństwa

SPIS TREŚCI:

Przedmowa (11)
Rozdział 1. Podstawy (13)

  • 1.1. Słowo o /bin/sh (14)
  • 1.2. Korzystanie z powłoki (14)
  • 1.3. Polecenia podstawowe (16)
    • 1.3.1. ls (16)
    • 1.3.2. cp (16)
    • 1.3.3. mv (16)
    • 1.3.4. touch (17)
    • 1.3.5. rm (17)
    • 1.3.6. echo (17)
  • 1.4. Polecenia działające na katalogach (17)
    • 1.4.1. cd (18)
    • 1.4.2. mkdir (18)
    • 1.4.3. rmdir (18)
    • 1.4.4. Nazwy wieloznaczne (18)
  • 1.5. Polecenia pośredniczące (19)
    • 1.5.1. grep (19)
    • 1.5.2. more i less (20)
    • 1.5.3. pwd (21)
    • 1.5.4. diff (21)
    • 1.5.5. file (21)
    • 1.5.6. find (21)
    • 1.5.7. head i tail (22)
    • 1.5.8. sort (22)
  • 1.6. Zmienianie hasła i powłoki (22)
    • 1.6.1. chsh (22)
  • 1.7. Pliki z kropką (22)
  • 1.8. Zmienne środowiskowe i powłoki (23)
  • 1.9. Ścieżka poleceń (24)
  • 1.10. Znaki specjalne (24)
  • 1.11. Edycja wiersza poleceń (25)
  • 1.12. Edytory tekstu (26)
  • 1.13. Uzyskiwanie pomocy (27)
  • 1.14. Wejście i wyjście powłoki (28)
    • 1.14.1. Standardowy strumień błędów (29)
    • 1.14.2. Przekierowywanie standardowego wejścia (30)
  • 1.15. Prawidłowe odczytywanie komunikatów o błędach (30)
    • 1.15.1. Typowe błędy (31)
  • 1.16. Procesy (32)
    • 1.16.1. Przerywanie działania procesów (33)
    • 1.16.2. Kontrola zadań (34)
    • 1.16.3. Procesy działające w tle (34)
  • 1.17. Tryby plików i uprawnienia (35)
    • 1.17.1. Modyfikowanie uprawnień (36)
    • 1.17.2. Dowiązania symboliczne (38)
  • 1.18. Archiwizowanie i kompresowanie plików (39)
    • 1.18.1. Archiwa skompresowane (.tar.gz) (41)
    • 1.18.2. Inne narzędzia kompresujące (42)

Rozdział 2. Urządzenia, dyski, systemy plików i jądro systemu (43)

  • 2.1. Hierarchia katalogów (43)
    • 2.1.1. Najważniejsze katalogi (44)
    • 2.1.2. Pozostałe katalogi główne (45)
    • 2.1.3. Katalog /usr (45)
  • 2.2. Jądro systemu (46)
  • 2.3. Urządzenia (47)
    • 2.3.1. Polecenie dd i urządzenia (48)
    • 2.3.2. Podsumowanie nazewnictwa urządzeń (49)
    • 2.3.3. Tworzenie plików urządzeń (52)
    • 2.3.4. Partycjonowanie urządzeń dyskowych (53)
  • 2.4. Systemy plików (56)
    • 2.4.1. Typy systemów plików (56)
    • 2.4.2. Tworzenie systemu plików (57)
    • 2.4.3. Montowanie systemu plików (57)
    • 2.4.4. Buforowanie systemów plików (59)
    • 2.4.5. Opcje montowania systemów plików (59)
    • 2.4.6. Tabela systemów plików /etc/fstab (61)
    • 2.4.7. Pojemność systemu plików (63)
    • 2.4.8. Sprawdzanie i naprawianie systemów plików (64)
    • 2.4.9. Systemy plików o specjalnym znaczeniu (67)
  • 2.5. Przestrzeń wymiany i pamięć wirtualna (67)
    • 2.5.1. Wykorzystywanie partycji jako przestrzeni wymiany (68)
    • 2.5.2. Wykorzystywanie pliku jako przestrzeni wymiany (68)
    • 2.5.3. Jak wielkiej przestrzeni wymiany potrzebuję? (69)

Rozdział 3. Jak uruchamia się Linux? (71)

  • 3.1. Program init (72)
    • 3.1.1. Poziomy uruchomienia (runlevels) (72)
    • 3.1.2. Jak uruchamiane są procesy na różnych poziomach uruchomienia? (74)
    • 3.1.3. Dodawanie i usuwanie usług (75)
    • 3.1.4. Kontrolowanie programu init (76)
    • 3.1.5. Wyłączanie systemu (77)
  • 3.2. Programy rozruchowe (78)
    • 3.2.1. LILO (79)
    • 3.2.2. GRUB (79)
    • 3.2.3. Inne programy rozruchowe (81)
    • 3.2.4. Tryb pojedynczego użytkownika i uruchomienie awaryjne (81)
  • 3.3. Konsole wirtualne (82)

Rozdział 4. Kluczowe pliki systemowe, serwery i narzędzia (83)

  • 4.1. Dzienniki systemowe (84)
  • 4.2. Pierwsze spojrzenie na katalog /etc (85)
  • 4.3. Pliki zarządzania użytkownikami (86)
    • 4.3.1. Manipulowanie użytkownikami i hasłami (88)
    • 4.3.2. Praca z grupami (88)
  • 4.4. Programy getty i login (89)
  • 4.5. Ustawianie czasu (90)
    • 4.5.1. Strefy czasowe (91)
    • 4.5.2. Czas sieciowy (91)
  • 4.6. Planowanie powtarzalnych zadań w programie cron (92)
    • 4.6.1. Instalowanie plików crontab (93)
    • 4.6.2. Systemowe pliki crontab (93)
  • 4.7. Planowanie jednorazowych zadań w programie at (94)
  • 4.8. Śledzenie procesów (94)
    • 4.8.1. Wyszukiwanie otwartych plików programem lsof (95)
    • 4.8.2. Śledzenie działania programu poleceniami strace i ltrace (97)
  • 4.9. Nadawanie procesom priorytetów (99)
  • 4.10. Monitorowanie wydajności systemu (100)
  • 4.11. Uruchamianie poleceń przez superużytkownika (102)
    • 4.11.1. Rzeczywisty UID i efektywny UID (104)

Rozdział 5. Konfigurowanie sieci (105)

  • 5.1. Warstwy sieciowe (105)
  • 5.2. Warstwa internetowa (106)
    • 5.2.1. Więcej o podsieciach (107)
  • 5.3. Proste narzędzia protokołu ICMP (108)
  • 5.4. Konfigurowanie interfejsów i warstwy komputer-sieć (109)
  • 5.5. Konfigurowanie bramy domyślnej (111)
  • 5.6. Rozwiązywanie nazw komputerów (112)
  • 5.7. Korzystanie z klientów DHCP (114)
  • 5.8. Połączenia PPP (115)
    • 5.8.1. Testowanie portu szeregowego i modemu (116)
    • 5.8.2. Uruchamianie demona pppd z plikami opcji (117)
    • 5.8.3. Skrypty chat (119)
    • 5.8.4. Protokoły PAP i CHAP (120)
    • 5.8.5. Pliki opcji (121)
    • 5.8.6. Uprawnienia katalogu PPP (123)
  • 5.9. Połączenia szerokopasmowe (123)
    • 5.9.1. Routery (124)
    • 5.9.2. PPP over Ethernet (PPPoE) (125)
  • 5.10. Sieci Ethernet (126)
    • 5.10.1. Ethernet i protokół IP (127)
    • 5.10.2. Sieci prywatne (128)
  • 5.11. Konfigurowanie tras (129)
  • 5.12. Warstwa transportowa - TCP, UDP i usługi (131)
  • 5.13. Zapory sieciowe (132)
    • 5.13.1. Strategie tworzenia zapór sieciowych (135)
    • 5.13.2. Opcje programu iptables (136)
  • 5.14. Translacja adresów sieciowych (maskarada IP) (137)
  • 5.15. Ethernet bezprzewodowy (139)
    • 5.15.1. Wykład o bezpieczeństwie sieci bezprzewodowych (142)

Rozdział 6. Usługi sieciowe (143)

  • 6.1. Podstawy usług (143)
  • 6.2. Serwery autonomiczne (144)
  • 6.3. Demon inetd (145)
    • 6.3.1. Wrapper TCP: tcpd, /etc/hosts.allow, /etc/hosts.deny (146)
    • 6.3.2. xinetd (147)
  • 6.4. SSH (148)
    • 6.4.1. Instalowanie biblioteki OpenSSH (148)
    • 6.4.2. Serwer SSHD (149)
    • 6.4.3. Klient SSH (150)
  • 6.5. Narzędzia diagnostyczne (152)
    • 6.5.1. lsof (152)
    • 6.5.2. tcpdump (153)
    • 6.5.3. Netcat (155)
  • 6.6. Zdalne wywoływanie procedur (RPC) (156)
  • 6.7. Zabezpieczenie sieci (156)
    • 6.7.1. Bezpieczeństwo dystrybucji Linuksa (158)
    • 6.7.2. Typowe słabości (158)
    • 6.7.3. Skanowanie portów (159)
    • 6.7.4. Źródła danych o zabezpieczeniach (160)

Rozdział 7. Wprowadzenie do skryptów powłoki (161)

  • 7.1. Podstawy skryptów powłoki (161)
    • 7.1.1. Ograniczenia skryptów powłoki (162)
  • 7.2. Cudzysłowy (162)
  • 7.3. Zmienne specjalne (163)
    • 7.3.1. Zmienne $1, $2... (163)
    • 7.3.2. Zmienna $# (164)
    • 7.3.3. Zmienna $@ (164)
    • 7.3.4. Zmienna $0 (165)
    • 7.3.5. Zmienna $$ (165)
    • 7.3.6. Zmienna $? (165)
  • 7.4. Kody wyjścia (165)
  • 7.5. Wyrażenia warunkowe (166)
    • 7.5.1. Konstrukcje logiczne && i || (168)
    • 7.5.2. Sprawdzanie warunków (169)
    • 7.5.3. Porównywanie ciągów znaków instrukcją case (171)
  • 7.6. Pętle (172)
  • 7.7. Podmiana poleceń (173)
  • 7.8. Zarządzanie plikami tymczasowymi (174)
  • 7.9. Dokumenty miejscowe (175)
  • 7.10. Ważne narzędzia skryptów powłoki (176)
    • 7.10.1. Polecenie basename (176)
    • 7.10.2. Polecenie awk (177)
    • 7.10.3. Polecenie sed (177)
    • 7.10.4. Polecenie xargs (178)
    • 7.10.5. Polecenie expr (179)
    • 7.10.6. Polecenie exec (179)
  • 7.11. Podpowłoki (179)
  • 7.12. Włączanie do skryptów innych plików (180)
  • 7.13. Pobieranie danych od użytkowników (180)
  • 7.14. Za dużo? (180)

Rozdział 8. Narzędzia programistyczne (183)

  • 8.1. Kompilator języka C (183)
    • 8.1.1. Wiele plików źródłowych (184)
    • 8.1.2. Pliki i katalogi nagłówkowe (185)
    • 8.1.3. Konsolidacja z bibliotekami (187)
    • 8.1.4. Biblioteki współdzielone (188)
    • 8.1.5. Make (191)
  • 8.2. Debugery (197)
  • 8.3. Lex i Yacc (198)
  • 8.4. Języki skryptowe (198)
    • 8.4.1. Perl (200)
    • 8.4.2. Python (200)
    • 8.4.3. Pozostałe języki skryptowe (201)
  • 8.5. Java (201)
  • 8.6. Kod asemblerowy i zasada działania kompilatorów (202)

Rozdział 9. Kompilowanie programów z kodu źródłowego (205)

  • 9.1. Rozpakowywanie pakietów źródłowych (206)
    • 9.1.1. Od czego zacząć? (206)
  • 9.2. GNU Autoconf (207)
    • 9.2.1. Opcje skryptu configure (208)
    • 9.2.2. Zmienne środowiskowe (209)
    • 9.2.3. Cele tworzone przez system Autoconf (210)
    • 9.2.4. Pliki dziennika systemu Autoconf (211)
  • 9.3. Inne systemy (211)
    • 9.3.1. Ręcznie konfigurowane pliki Makefile (212)
    • 9.3.2. Imake (212)
    • 9.3.3. pkg-config (214)
  • 9.4. Praktyki instalacyjne (215)
    • 9.4.1. Gdzie instalować? (216)
  • 9.5. Stosowanie poprawek (219)
  • 9.6. Rozwiązywanie problemów z kompilowaniem i instalowaniem (220)
    • 9.6.1. Częste błędy (221)

Rozdział 10. Konserwacja jądra systemu (223)

  • 10.1. Czy muszę kompilować jądro własnego systemu? (224)
  • 10.2. Czego potrzeba do kompilacji jądra systemu? (224)
  • 10.3. Pobieranie kodu źródłowego (225)
    • 10.3.1. Rozpakowywanie archiwum z kodem źródłowym (225)
    • 10.3.2. Przegląd kodu źródłowego jądra (226)
    • 10.3.3. Jądra w różnych dystrybucjach (226)
  • 10.4. Konfigurowanie i kompilowanie jądra (227)
    • 10.4.1. Opcje konfiguracyjne (229)
    • 10.4.2. Kompilowanie jądra i modułów (237)
    • 10.4.3. Instalowanie modułów (239)
    • 10.4.4. Parametry jądra (239)
  • 10.5. Instalowanie jądra za pomocą programu rozruchowego (240)
    • 10.5.1. Który program rozruchowy wybrać? (241)
    • 10.5.2. GRUB (241)
    • 10.5.3. LILO (243)
    • 10.5.4. Początkowe RAM-dyski (245)
  • 10.6. Testowanie jądra (246)
  • 10.7. Dyskietki startowe (246)
  • 10.8. Praca z ładowalnymi modułami jądra (247)
    • 10.8.1. Program ładujący moduły jądra (248)
    • 10.8.2. Konfiguracja programu modprobe (248)

Rozdział 11. Konfigurowanie i manipulowanie urządzeniami peryferyjnymi (251)

  • 11.1. Napędy dyskietek (251)
    • 11.1.1. Obrazy dyskietek (252)
    • 11.1.2. Formatowanie dyskietek na niskim poziomie (252)
  • 11.2. Nagrywarki płyt CD (253)
    • 11.2.1. Sprawdzanie sprzętu (253)
    • 11.2.2. Tworzenie obrazu systemu plików i zapisywanie go na płycie CD (254)
  • 11.3. Wprowadzenie do USB (255)
    • 11.3.1. System plików i narzędzia urządzeń USB (256)
    • 11.3.2. Urządzenia wejściowe USB (256)
    • 11.3.3. Aparaty cyfrowe, zewnętrzne nośniki pamięci Flash i dyski zewnętrzne (257)
  • 11.4. Dyski IEEE 1394/FireWire (258)
  • 11.5. Obsługa włączania w czasie pracy (hotplug) (259)
  • 11.6. Karty PC (PCMCIA) (259)
    • 11.6.1. Gdy włożymy kartę do czytnika (261)
    • 11.6.2. Program cardctl (263)
  • 11.7. Obsługa innych urządzeń (264)

Rozdział 12. Drukowanie (267)

  • 12.1. PostScript (268)
  • 12.2. Serwery wydruku (268)
  • 12.3. Filtry wydruku (269)
  • 12.4. Klienty drukowania (269)
    • 12.4.1. Drukowanie w sieci (270)
  • 12.5. CUPS (271)
    • 12.5.1. Konfigurowanie demona cupsd (272)
    • 12.5.2. Zabezpieczenia systemu CUPS (272)
    • 12.5.3. Uruchamianie systemu CUPS (274)
    • 12.5.4. Dodawanie i edytowanie drukarek (274)
    • 12.5.5. Urządzenia drukarek (specyfikacje backendów) (276)
    • 12.5.6. Pliki PPD (278)
    • 12.5.7. Określanie filtra (279)
    • 12.5.8. Filtr Foomatic (drukarki nieobsługujące PostScriptu) (282)
    • 12.5.9. Przegląd poleceń administracyjnych (283)
    • 12.5.10. Kontrola dostępu do serwera (284)
    • 12.5.11. Automatyczne wykrywanie (285)
    • 12.5.12. Współpraca z serwerem zgodnym z LPD (286)
    • 12.5.13. Usuwanie problemów (286)
  • 12.6. Ghostscript (289)
    • 12.6.1. Opcje wiersza poleceń (290)
    • 12.6.2. Więcej operacji w programie Ghostscript (291)
    • 12.6.3. Serwer drukarek HP InkJet (292)
  • 12.7. Inne opisy systemów drukowania (292)

Rozdział 13. Kopie bezpieczeństwa (293)

  • 13.1. Co powinno znaleźć się w archiwum? (293)
  • 13.2. Sprzęt (294)
  • 13.3. Archiwa pełne i przyrostowe (294)
  • 13.4. Stosowanie programu tar (295)
    • 13.4.1. Tworzenie archiwów (295)
    • 13.4.2. Przyrostowe archiwa tworzone programem tar (296)
    • 13.4.3. Rozpakowywanie archiwów (297)
  • 13.5. Zapisywanie archiwów na nietradycyjne nośniki (298)
    • 13.5.1. Zapisywanie archiwów na dyski twarde (298)
  • 13.6. Napędy taśmowe (299)
    • 13.6.1. Praca z napędami taśmowymi (300)
    • 13.6.2. Tworzenie archiwów na taśmie (301)
    • 13.6.3. Odczytywanie archiwów z taśmy (302)
    • 13.6.4. Rozpakowywanie archiwów (303)
    • 13.6.5. Przewijanie taśmy w przód i w tył (303)
    • 13.6.6. Polecenia i status programu mt (304)
    • 13.6.7. Bezpośredni dostęp do plików (305)
  • 13.7. Inne programy do archiwizacji (306)
    • 13.7.1. Programy dump i restore (306)
    • 13.7.2. Program cpio (308)
    • 13.7.3. System Amanda (310)
  • 13.8. Inne źródła informacji (310)

Rozdział 14. Współdzielenie plików za pomocą pakietu Samba (313)

  • 14.1. Konfigurowanie serwera (314)
    • 14.1.1. Kontrola dostępu do serwera (314)
    • 14.1.2. Hasła (315)
  • 14.2. Uruchamianie serwera (316)
  • 14.3. Diagnostyka i pliki dziennika (317)
  • 14.4. Współdzielenie plików (317)
    • 14.4.1. Katalogi domowe (318)
  • 14.5. Współdzielenie drukarek (318)
    • 14.5.1. Współdzielenie pojedynczej drukarki (319)
  • 14.6. Korzystanie z klientów Samby (319)
    • 14.6.1. Dostęp do plików (320)
    • 14.6.2. Drukowanie przez udział systemu Windows (321)

Rozdział 15. Przesyłanie plików w sieci (323)

  • 15.1. Podstawy polecenia rsync (324)
    • 15.1.1. Tworzenie dokładnych kopii struktury katalogów (325)
    • 15.1.2. Jak używać końcowego ukośnika? (326)
    • 15.1.3. Pomijanie plików i katalogów (327)
  • 15.2. Sumy kontrolne i tryb informacyjny (327)
  • 15.3. Kompresja (328)
  • 15.4. Ograniczanie przepustowości (329)
  • 15.5. Przesyłanie plików do naszego komputera (329)
  • 15.6. Więcej informacji o programie rsync (329)

Rozdział 16. Środowiska użytkowników (331)

  • 16.1. Odpowiednie pliki uruchomieniowe (331)
  • 16.2. Elementy plików uruchamiających powłokę (332)
    • 16.2.1. Ścieżka wyszukiwania poleceń (332)
    • 16.2.2. Ścieżka stron podręcznika man (333)
    • 16.2.3. Symbol zachęty (334)
    • 16.2.4. Aliasy (335)
    • 16.2.5. Maska uprawnień (335)
  • 16.3. Kolejność plików uruchomieniowych i przykłady (336)
    • 16.3.1. Powłoka bash (336)
    • 16.3.2. Powłoka tcsh (338)
  • 16.4. Domyślne ustawienia użytkownika (339)
    • 16.4.1. Powłoka (340)
    • 16.4.2. Edytor (341)
    • 16.4.3. Program stronicujący (341)
  • 16.5. Pułapki w plikach uruchomieniowych (341)
  • 16.6. Dalsze informacje (341)

Rozdział 17. Sprzęt dla Linuksa (343)

  • 17.1. Składniki podstawowe (344)
    • 17.1.1. Płyta główna i procesor (344)
    • 17.1.2. Pamięć (345)
    • 17.1.3. Dysk twardy (346)
    • 17.1.4. Karty sieciowe i infrastruktura sieciowa (347)
    • 17.1.5. Sprzęt graficzny (348)
  • 17.2. Inne elementy sprzętowe (349)
    • 17.2.1. Monitory (349)
    • 17.2.2. Klawiatury (350)
    • 17.2.3. Myszy (350)
    • 17.2.4. Modemy (351)
    • 17.2.5. Drukarki (351)
  • 17.3. Słowo o unowocześnianiu sprzętu (352)
  • 17.4. Oszczędzanie pieniędzy (353)
    • 17.4.1. Procesory (353)
    • 17.4.2. Dyski twarde (355)
    • 17.4.3. Obudowy komputera (355)
    • 17.4.4. Karty wideo (355)
  • 17.5. Komputery typu notebook (355)
  • 17.6. Mniejsze projekty (356)

Rozdział 18. Pozostałe wskazówki (357)
 

  • 18.1. Kolejne tematy (357)
  • 18.2. Przemyślenia końcowe (359)

Dodatek A Klasyfikacja poleceń (361)
Bibliografia (367)
Skorowidz (371)

openSuSE Linux

openSuSE jest dystrybucją Linuksa sponsorowaną przez firmę Novell. Jest to Linux doskonale sprawdzający się jako system serwerowy, choć głównym zamierzeniem jego twórców było stworzenie Linuksa typu desktop. OpenSuSE Linux jest doskonałą alternatywą dla systemów Microsoft. Zawiera dopracowane graficzne narzędzia konfiguracyjne YaST i SaX2. Doskonale nadaje się dla początkujących użytkowników Linuksa.

Mandriva Linux

Mandriva Linux jest jedną z najpopularniejszych dystrybucji ogólnego użytku ostatnich lat. Dzięki swojej innowacyjności zdobyla uznanie zarówno początkujących jak i zaawansowanych użytkowników Linuksa. W kolejnych, wydawanych cyklicznie w odstępach półrocznych wersjach Mandriva Linux jest liderem we wprowadzaniu nowych narzędzi i funkcjonalności, niedostępnych jeszcze w innych dystrybucjach Linuksa.

Slackware Linux

Slackware Linux jest jedną z najstarszych dystrybucji Linuksa, rozwijaną aktywnie aż do chwili obecnej. Pierwsza wersja Slackware Linux została wydana w lipcu 1993 roku jako dystrybucja dla zaawansowanych użytkowników. Do chwili obecnej, jako jedna z niewielu dystrybucji, Slackware Linux wykorzystuje podczas instalacji tekstową wersję instalatora, przez co uznawana jest niesłusznie za trudniejszą w instalacji niż inne popularne dystrybucje.

Copyright 2003-2011 PHU Altkomp

stat4u