Linux. Receptury. Najważniejsze umiejętności użytkownika i administratora. Wydanie II - ebook
Linux. Receptury. Najważniejsze umiejętności użytkownika i administratora. Wydanie II - ebook
Dawny Linux był niezawodny w działaniu, ale nie miał efektownego wyglądu i wymagał mozolnej konfiguracji, aby dostosować go do potrzeb użytkowników. Trzeba było znać wiele poleceń, skryptów i plików konfiguracyjnych. Zarządzanie systemem i siecią kosztowało sporo ręcznej pracy. Dzisiejszy Linux jest o wiele łatwiejszy w użytkowaniu. Poszczególne elementy zostały zmienione i usprawnione bez utraty tego, z czego Linux słynął od dawna: niezawodności, wydajności i bezpieczeństwa.
Ta książka przyda się początkującym i średnio zaawansowanym użytkownikom tego systemu. Dzięki niej nauczysz się korzystać z narzędzi graficznych i tych działających w powłoce. Poznasz również podstawy administrowania systemami linuksowymi i przygotujesz się do tego, by sprawnie rozpocząć z nimi pracę. W poszczególnych rozdziałach znajdziesz ponad 250 gotowych receptur, które pomagają poradzić sobie z większością wyzwań stojących przed użytkownikami i administratorami systemów Linux. Plusem publikacji jest to, że zawiera zarówno podstawowe zadania - takie jak instalacja i uruchamianie systemu czy zarządzanie usługami, plikami i katalogami - jak i operacje związane z konfiguracją i zabezpieczaniem sieci. Dodatkowo umieszczono tu rozdział poświęcony instalacji Linuksa na płytce Raspberry Pi, a także szeroki wybór receptur poświęconych rozwiązywaniu typowych problemów tym systemem.
W książce między innymi:
- korzystanie z systemd
- tworzenie i konfiguracja zapór sieciowych
- zarządzanie użytkownikami i grupami i kontrola dostępu do plików
- sprawdzanie komponentów komputera i monitorowanie jego stanu
- instalacja Linuksa i Windowsa na jednym komputerze
- zarządzanie systemami plików i partycjonowanie dysków
...a więc twierdzisz, że dobrze znasz swojego Linuksa?
Spis treści
Wprowadzenie
Rozdział 1. Instalowanie systemu Linux
- Uruchamianie z nośnika instalacyjnego
- Skąd pobrać Linuksa?
- Najlepsza dystrybucja Linuksa dla początkujących
- 1.1. Wejście do oprogramowania typu firmware BIOS lub UEFI
- 1.2. Pobieranie obrazu instalacyjnego dystrybucji Linuksa
- 1.3. Tworzenie za pomocą narzędzia UNetbootin nośnika instalacyjnego USB zawierającego Linuksa
- 1.4. Tworzenie za pomocą narzędzia K3b nośnika instalacyjnego DVD zawierającego Linuksa
- 1.5. Używanie polecenia wodim w celu utworzenia rozruchowej płyty CD lub DVD
- 1.6. Tworzenie za pomocą polecenia dd nośnika instalacyjnego USB zawierającego Linuksa
- 1.7. Wypróbowanie prostej procedury instalacyjnej Ubuntu
- 1.8. Partycjonowanie niestandardowe
- 1.9. Zachowywanie istniejących partycji
- 1.10. Wybór instalowanych pakietów
- 1.11. Instalacja wielu dystrybucji Linuksa na dysku
- 1.12. Instalacja Linuksa na dysku zawierającym system Windows
- 1.13. Odzyskiwanie klucza produktu Windows 8 lub 10 w wersji OEM
- 1.14. Montowanie obrazu ISO w Linuksie
Rozdział 2. Zarządzanie programem rozruchowym GRUB
- 2.1. Ponowne utworzenie pliku konfiguracyjnego GRUB
- 2.2. Odkrywanie ukrytego menu programu rozruchowego GRUB
- 2.3. Uruchamianie Linuksa za pomocą innej wersji jądra
- 2.4. Pliki konfiguracyjne GRUB
- 2.5. Utworzenie minimalnej wersji pliku konfiguracyjnego GRUB
- 2.6. Wybór własnego obrazu tła dla menu GRUB
- 2.7. Zmiana koloru czcionki w menu GRUB
- 2.8. Zastosowanie motywu w menu GRUB
- 2.9. Używanie powłoki GRUB do naprawy uszkodzonego systemu
- 2.10. Używanie powłoki ratunkowej GRUB do naprawy uszkodzonego systemu
- 2.11. Ponowna instalacja konfiguracji GRUB
Rozdział 3. Uruchamianie, zatrzymywanie, ponowne uruchamianie i usypianie Linuksa
- 3.1. Zamknięcie systemu za pomocą polecenia systemctl
- 3.2. Używanie polecenia shutdown do zamknięcia systemu, zamknięcia systemu po upływie określonego czasu lub do ponownego uruchomienia systemu
- 3.3. Zamknięcie systemu lub jego ponowne uruchomienie za pomocą poleceń halt, reboot i poweroff
- 3.4. Różne tryby usypiania systemu za pomocą polecenia systemctl
- 3.5. Rozwiązywanie problemu za pomocą skrótu klawiszowego Ctrl+Alt+Delete
- 3.6. Wyłączanie, włączanie i konfigurowanie skrótu klawiszowego Ctrl+Alt+Delete w powłoce Linuksa
- 3.7. Używanie mechanizmu cron do zdefiniowania harmonogramu wyłączania systemu
- 3.8. Definiowanie harmonogramu automatycznego uruchamiania z wykorzystaniem funkcjonalności wbudowanej w UEFI
- 3.9. Definiowanie harmonogramu automatycznego uruchamiania z wykorzystaniem funkcjonalności budzenia na podstawie zegara czasu rzeczywistego
- 3.10. Konfiguracja zdalnego budzenia za pomocą Wake-on-LAN poprzez Ethernet
- 3.11. Konfiguracja zdalnego budzenia za pomocą sieci Wi-Fi (WoWLAN)
Rozdział 4. Zarządzanie usługami za pomocą systemd
- 4.1. Sprawdzanie, czy Twoja dystrybucja Linuksa używa systemd
- 4.2. Proces o identyfikatorze 1 - matka wszystkich procesów
- 4.3. Wyświetlanie usług i informacji o ich stanie za pomocą polecenia systemctl
- 4.4. Sprawdzanie stanu wybranych usług
- 4.5. Uruchamianie i zatrzymywanie usługi
- 4.6. Włączanie i wyłączanie usługi
- 4.7. Zatrzymywanie problematycznych procesów
- 4.8. Zarządzanie poziomami działania za pomocą menedżera systemd
- 4.9. Diagnozowanie wolnego uruchamiania systemu
Rozdział 5. Zarządzanie użytkownikami i grupami
- 5.1. Ustalanie identyfikatorów użytkownika i grupy
- 5.2. Tworzenie konta użytkownika fizycznego za pomocą polecenia useradd
- 5.3. Tworzenie konta użytkownika systemowego za pomocą polecenia useradd
- 5.4. Zmiana ustawień domyślnych polecenia useradd
- 5.5. Dostosowanie do własnych potrzeb katalogów dla dokumentów, muzyki, wideo, zdjęć i pobranych plików
- 5.6. Tworzenie grup użytkownika i systemu za pomocą polecenia groupadd
- 5.7. Dodawanie użytkowników do grup za pomocą polecenia usermod
- 5.8. Tworzenie użytkownika za pomocą polecenia adduser w Ubuntu
- 5.9. Tworzenie użytkownika systemowego za pomocą polecenia adduser w Ubuntu
- 5.10. Tworzenie grupy użytkownika i systemowej za pomocą polecenia addgroup
- 5.11. Sprawdzanie spójności pliku haseł
- 5.12. Wyłączanie konta użytkownika
- 5.13. Usunięcie użytkownika za pomocą polecenia userdel
- 5.14. Usunięcie użytkownika za pomocą polecenia deluser w Ubuntu
- 5.15. Usunięcie grupy za pomocą polecenia delgroup w Ubuntu
- 5.16. Wyszukiwanie wszystkich plików użytkownika i zarządzanie nimi
- 5.17. Używanie polecenia su w celu uzyskania uprawnień użytkownika root
- 5.18. Uzyskiwanie ograniczonych możliwości użytkownika root za pomocą polecenia sudo
- 5.19. Zmiana czasu ważności polecenia sudo
- 5.20. Tworzenie konfiguracji sudoers dla poszczególnych użytkowników
- 5.21. Zarządzanie hasłem użytkownika root
- 5.22. Zmiana sposobu działania polecenia sudo, aby nie trzeba było podawać hasła użytkownika root
Rozdział 6. Zarządzanie plikami i katalogami
- 6.1. Tworzenie plików i katalogów
- 6.2. Szybkie tworzenie wielu plików do testów
- 6.3. Praca ze względnymi i bezwzględnymi ścieżkami dostępu
- 6.4. Usuwanie plików i katalogów
- 6.5. Kopiowanie, przenoszenie plików i katalogów oraz zmienianie ich nazw
- 6.6. Używanie polecenia chmod do definiowania uprawnień pliku za pomocą notacji ósemkowej
- 6.7. Używanie polecenia chmod do definiowania uprawnień katalogu za pomocą notacji ósemkowej
- 6.8. Używanie atrybutów specjalnych dla przypadków specjalnych
- 6.9. Usunięcie atrybutu specjalnego w notacji ósemkowej
- 6.10. Używanie polecenia chmod do definiowania uprawnień pliku za pomocą notacji symbolicznej
- 6.11. Ustawianie atrybutów specjalnych za pomocą polecenia chmod i notacji symbolicznej
- 6.12. Używanie polecenia chmod do nadawania uprawnień wielu plikom
- 6.13. Zdefiniowanie właściciela pliku lub katalogu za pomocą polecenia chown
- 6.14. Używanie polecenia chown do zmiany właściciela wielu plików
- 6.15. Definiowanie uprawnień domyślnych za pomocą polecenia umask
- 6.16. Tworzenie skrótów do plików i katalogów
- 6.17. Ukrywanie plików i katalogów
Rozdział 7. Używanie poleceń rsync i cp do tworzenia kopii zapasowej i przywracania z niej danych
- 7.1. Wybór plików przeznaczonych do umieszczenia w kopii zapasowej
- 7.2. Wybór plików przywracanych z kopii zapasowej
- 7.3. Używanie najprostszej metody tworzenia lokalnej kopii zapasowej
- 7.4. Automatyzacja tworzonej lokalnie prostej kopii zapasowej
- 7.5. Tworzenie lokalnej kopii zapasowej za pomocą rsync
- 7.6. Bezpieczne kopiowanie plików przez SSH za pomocą polecenia rsync
- 7.7. Automatyzacja transferów rsync za pomocą SSH i mechanizmu cron
- 7.8. Wykluczenie plików z kopii zapasowej
- 7.9. Dołączanie wybranych plików do kopii zapasowej
- 7.10. Zarządzanie plikami dołączanymi do kopii zapasowej za pomocą listy elementów zapisanej w zwykłym pliku tekstowym
- 7.11. Zarządzanie plikami dodawanymi do kopii zapasowej i wykluczanymi z niej za pomocą pliku listy wykluczeń
- 7.12. Ograniczanie przepustowości łącza używanej przez polecenie rsync
- 7.13. Utworzenie serwera kopii zapasowej bazującego na rsync
- 7.14. Ograniczanie dostępu do modułów rsyncd
- 7.15. Tworzenie komunikatu dnia dla rsyncd
Rozdział 8. Zarządzanie partycjonowaniem dysku za pomocą parted
- Wprowadzenie
- 8.1. Odmontowanie partycji przed użyciem parted
- 8.2. Wybór trybu pracy programu parted
- 8.3. Wyświetlanie informacji o istniejących dyskach i partycjach
- 8.4. Tworzenie partycji GPT na dysku nieprzeznaczonym do uruchamiania systemu operacyjnego
- 8.5. Tworzenie partycji przeznaczonych do instalowania na nich systemu Linux
- 8.6. Usunięcie partycji
- 8.7. Odzyskanie usuniętej partycji
- 8.8. Powiększanie partycji
- 8.9. Zmniejszanie partycji
Rozdział 9. Zarządzanie partycjami i systemami plików za pomocą narzędzia GParted
- 9.1. Wyświetlanie partycji, systemów plików i wolnego miejsca
- 9.2. Tworzenie nowej tablicy partycji
- 9.3. Usunięcie partycji
- 9.4. Tworzenie nowej partycji
- 9.5. Usunięcie systemu plików bez usuwania partycji
- 9.6. Odzyskanie usuniętej partycji
- 9.7. Zmiana wielkości partycji
- 9.8. Przenoszenie partycji
- 9.9. Kopiowanie partycji
- 9.10. Zarządzanie systemami plików za pomocą programu GParted
Rozdział 10. Pobieranie dokładnych informacji o komputerze
- 10.1. Pobieranie informacji dotyczących komputera za pomocą polecenia lshw
- 10.2. Filtrowanie danych wyjściowych wygenerowanych przez polecenie lshw
- 10.3. Pobieranie za pomocą polecenia hwinfo informacji o komponentach, m.in. o monitorach i macierzach RAID
- 10.4. Wykrywanie kart PCI za pomocą polecenia lspci
- 10.5. Poznajemy dane wyjściowe polecenia lspci
- 10.6. Filtrowanie danych wyjściowych polecenia lspci
- 10.7. Używanie polecenia lspci do wyszukiwania modułów jądra
- 10.8. Wyświetlanie urządzeń USB za pomocą polecenia lsusb
- 10.9. Wyświetlanie partycji i dysków twardych za pomocą polecenia lsblk
- 10.10. Pobieranie informacji o procesorze
- 10.11. Ustalanie architektury sprzętowej komputera
Rozdział 11. Tworzenie systemów plików i zarządzanie nimi
- Ogólne omówienie systemu plików
- 11.1. Wyświetlanie listy obsługiwanych systemów plików
- 11.2. Identyfikacja istniejących systemów plików
- 11.3. Zmiana wielkości systemu plików
- 11.4. Usuwanie systemu plików
- 11.5. Używanie nowego systemu plików
- 11.6. Tworzenie automatycznie montowanego systemu plików
- 11.7. Tworzenie systemu plików ext4
- 11.8. Konfiguracja trybu księgowania dla systemu plików ext4
- 11.9. Określanie dziennika, do którego jest dołączony system plików ext4
- 11.10. Poprawianie wydajności za pomocą dziennika zewnętrznego dla systemu plików ext4
- 11.11. Zwolnienie miejsca zajmowanego przez zarezerwowane bloki w systemie plików ext4
- 11.12. Tworzenie nowego systemu plików XFS
- 11.13. Zmiana wielkości systemu plików XFS
- 11.14. Tworzenie systemu plików exFAT
- 11.15. Tworzenie systemów plików FAT16 i FAT32
- 11.16. Tworzenie systemu plików Btrfs
Rozdział 12. Bezpieczny zdalny dostęp za pomocą OpenSSH
- 12.1. Instalowanie serwera OpenSSH
- 12.2. Wygenerowanie nowych kluczy hosta
- 12.3. Konfiguracja serwera OpenSSH
- 12.4. Sprawdzanie składni konfiguracji OpenSSH
- 12.5. Konfigurowanie uwierzytelniania na podstawie hasła
- 12.6. Pobieranie odcisku palca klucza
- 12.7. Uwierzytelnianie za pomocą klucza publicznego
- 12.8. Zarządzanie wieloma kluczami publicznymi
- 12.9. Zmiana hasła chroniącego klucz
- 12.10. Automatyczne zarządzanie hasłami za pomocą pęku kluczy
- 12.11. Używanie pęku kluczy w celu udostępniania haseł mechanizmowi cron
- 12.12. Bezpieczne tunelowanie sesji środowiska graficznego za pomocą SSH
- 12.13. Uruchomienie sesji SSH i wydanie polecenia w jednym wierszu
- 12.14. Montowanie całego zdalnego systemu plików za pomocą polecenia sshfs
- 12.15. Dostosowanie do własnych potrzeb znaku zachęty bash podczas pracy z SSH
- 12.16. Wyświetlenie obsługiwanych algorytmów szyfrowania
Rozdział 13. Bezpieczny zdalny dostęp za pomocą OpenVPN
- Ogólne omówienie OpenVPN
- 13.1. Instalowanie OpenVPN, serwera i klienta
- 13.2. Konfiguracja prostego połączenia testowego
- 13.3. Konfiguracja łatwego szyfrowania dzięki użyciu kluczy statycznych
- 13.4. Instalowanie EasyRSA w celu zarządzania PKI
- 13.5. Tworzenie infrastruktury PKI
- 13.6. Dostosowanie do własnych potrzeb opcji domyślnych EasyRCA
- 13.7. Tworzenie konfiguracji serwera i klienta oraz ich testowanie
- 13.8. Nadzorowanie OpenVPN za pomocą polecenia systemctl
- 13.9. Łatwiejsze udostępnianie plików konfiguracyjnych klienta za pomocą plików .ovpn
- 13.10. Zabezpieczanie serwera OpenVPN
- 13.11. Konfigurowanie sieci
Rozdział 14. Tworzenie zapory sieciowej w Linuksie za pomocą firewalld
- Ogólne omówienie zapory sieciowej
- 14.1. Sprawdzanie, która zapora sieciowa jest uruchomiona w systemie
- 14.2. Instalowanie firewalld
- 14.3. Ustalanie używanej wersji firewalld
- 14.4. Konfiguracja iptables lub nftables jako backendu dla zapory sieciowej firewalld
- 14.5. Wyświetlanie wszystkich stref i wszystkich usług zarządzanych przez poszczególne strefy
- 14.6. Wyświetlanie usług i pobieranie informacji o nich
- 14.7. Wybór strefy i jej konfigurowanie
- 14.8. Zmiana strefy domyślnej w firewalld
- 14.9. Dostosowanie do własnych potrzeb strefy firewalld
- 14.10. Tworzenie nowej strefy
- 14.11. Integracja menedżera sieci z zaporą sieciową firewalld
- 14.12. Zezwolenie lub zablokowanie dostępu do określonych portów
- 14.13. Blokowanie adresu IP za pomocą opcji rich rules
- 14.14. Zmiana domyślnego celu strefy
Rozdział 15. Drukowanie w Linuksie
- Ogólne omówienie drukowania w Linuksie
- 15.1. Używanie CUPS za pomocą interfejsu przeglądarki WWW
- 15.2. Instalowanie drukarki podłączonej lokalnie
- 15.3. Nadawanie drukarce użytecznej nazwy
- 15.4. Instalowanie drukarki sieciowej
- 15.5. Używanie drukarki bez sterownika
- 15.6. Współdzielenie drukarki nieposiadającej obsługi sieci
- 15.7. Usunięcie komunikatu błędu typu "Forbidden"
- 15.8. Instalowanie sterowników drukarki
- 15.9. Modyfikowanie zainstalowanej drukarki
- 15.10. Zapisywanie dokumentów przez ich wydruk do pliku PDF
- 15.11. Rozwiązywanie problemów
Rozdział 16. Zarządzanie lokalnymi usługami nazw za pomocą Dnsmasq i pliku hosts
- 16.1. Proste ustalanie nazw na podstawie pliku /etc/hosts
- 16.2. Używanie pliku /etc/hosts podczas testów i do blokowania wybranych hostów
- 16.3. Wyszukiwanie wszystkich serwerów DNS i DHCP w sieci lokalnej
- 16.4. Instalowanie serwera Dnsmasq
- 16.5. Zapewnianie bezproblemowej współpracy systemd-resolved i menedżera sieci z serwerem Dnsmasq
- 16.6. Konfiguracja Dnsmasq jako serwera DNS sieci lokalnej
- 16.7. Konfigurowanie zapory sieciowej firewalld w celu zezwolenia na działanie DNS i DHCP
- 16.8. Testowanie serwera Dnsmasq z poziomu komputera klienta
- 16.9. Zarządzanie DHCP za pomocą Dnsmasq
- 16.10. Rozgłaszanie przez DHCP dostępności ważnych usług
- 16.11. Tworzenie stref DHCP dla podsieci
- 16.12. Przypisywanie statycznego adresu IP na podstawie DHCP
- 16.13. Konfiguracja klienta DHCP w celu automatycznego pobierania wpisów DNS
- 16.14. Zarządzanie rejestrowaniem danych przez Dnsmasq
- 16.15. Konfigurowanie domen wieloznacznych
Rozdział 17. Zarządzanie datą i godziną za pomocą ntpd, chrony i timesyncd
- 17.1. Ustalenie klienta NTP używanego przez Twój system Linux
- 17.2. Używanie timesyncd do prostej synchronizacji czasu
- 17.3. Samodzielne ustawianie daty i godziny za pomocą polecenia timedatectl
- 17.4. Używanie chrony jako klienta NTP
- 17.5. Używanie chrony jako serwera daty i godziny w sieci lokalnej
- 17.6. Wyświetlanie danych statystycznych chrony
- 17.7. Używanie ntpd jako klienta NTP
- 17.8. Używanie demona ntpd jako serwera NTP
- 17.9. Zarządzanie strefami czasowymi za pomocą polecenia timedatectl
- 17.10. Zarządzanie strefami czasowymi bez użycia polecenia timedatectl
Rozdział 18. Tworzenie zapory sieciowej i routera w Raspberry Pi
- Ogólne omówienie Raspberry Pi
- 18.1. Uruchamianie i wyłączanie Raspberry Pi
- 18.2. Wyszukiwanie sprzętu i dokumentów typu HOWTO
- 18.3. Chłodzenie Raspberry Pi
- 18.4. Instalowanie systemu operacyjnego Raspbian za pomocą narzędzi Imager i dd
- 18.5. Instalowanie Raspberry Pi za pomocą NOOBS
- 18.6. Połączenie z monitorem bez złącza HDMI
- 18.7. Uruchamianie RPi w trybie ratunkowym
- 18.8. Dodawanie drugiego interfejsu Ethernet
- 18.9. Konfiguracja współdzielenia połączenia internetowego i zapory sieciowej firewalld
- 18.10. Uruchamianie Raspberry Pi w trybie headless
- 18.11. Tworzenie serwera DNS/DHCP na bazie Raspberry Pi
Rozdział 19. Tryby awaryjne i ratunkowe systemu oferowane przez dystrybucję SystemRescue
- 19.1. Tworzenie nośnika rozruchowego SystemRescue
- 19.2. Rozpoczęcie pracy z dystrybucją SystemRescue
- 19.3. Dwa ekrany rozruchowe dystrybucji SystemRescue
- 19.4. Opcje rozruchowe dystrybucji SystemRescue
- 19.5. Identyfikowanie systemów plików
- 19.6. Zerowanie hasła użytkownika w systemie Linux
- 19.7. Włączanie SSH w SystemRescue
- 19.8. Kopiowanie plików przez sieć za pomocą poleceń scp i sshfs
- 19.9. Naprawa programu rozruchowego GRUB za pomocą SystemRescue
- 19.10. Wyzerowanie hasła w systemie Windows
- 19.11. Ratowanie za pomocą GNU ddrescue uszkodzonego dysku
- 19.12. Zarządzanie partycjami i systemami plików za pomocą SystemRescue
- 19.13. Tworzenie partycji danych w napędzie USB typu pendrive zawierającym dystrybucję SystemRescue
- 19.14. Trwałe zachowanie zmian wprowadzonych w dystrybucji SystemRescue
Rozdział 20. Rozwiązywanie problemów z Linuksem
- Ogólne omówienie rozwiązywania problemów z Linuksem
- 20.1. Wyszukiwanie użytecznych informacji w plikach dzienników zdarzeń
- 20.2. Konfigurowanie journald
- 20.3. Tworzenie serwera rejestrowania danych za pomocą systemd
- 20.4. Monitorowanie temperatury, wentylatorów i napięcia za pomocą czujników lm-sensors
- 20.5. Dodawanie interfejsu graficznego dla czujników lm-sensors
- 20.6. Monitorowanie stanu dysku twardego za pomocą smartmontools
- 20.7. Konfiguracja narzędzia smartmontools w celu wysyłania raportów za pomocą poczty elektronicznej
- 20.8. Diagnozowanie wolnego działania systemu za pomocą polecenia top
- 20.9. Wyświetlanie za pomocą polecenia top jedynie wybranych procesów
- 20.10. Opuszczenie zawieszonego środowiska graficznego
- 20.11. Rozwiązywanie problemów sprzętowych
Rozdział 21. Rozwiązywanie problemów z siecią
- Diagnostyka sprzętu
- 21.1. Sprawdzanie za pomocą ping możliwości nawiązania połączenia
- 21.2. Profilowanie sieci za pomocą poleceń fping i nmap
- 21.3. Wyszukiwanie za pomocą polecenia arping powielających się adresów IP
- 21.4. Testowanie za pomocą polecenia httping przepustowości HTTP i opóźnienia sieci
- 21.5. Używanie polecenia mtr w celu wyszukania sprawiających problemy routerów
Dodatek A. Zarządzanie oprogramowaniem
Kategoria: | Systemy operacyjne |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-8766-9 |
Rozmiar pliku: | 14 MB |