Home Dokumentacje Debian Reference (version 1) - Część 8 - Debianowe porady
21 | 10 | 2019
Debian Reference (version 1) - Część 8 - Debianowe porady Drukuj


[ powrót ] [ Spis treści ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ dalej ]


Debian Reference (version 1)
Część 8 - Debianowe porady


8.1 Uruchamianie systemu

Zajrzyj do LDP BootPrompt-HOWTO w celu uzyskania szczegółowych informacji na temat boot prompt.


8.1.1 „Zapomniałem hasła roota!” (1)

Możliwe jest uruchomienie systemu i zalogowanie się na konto administratora (root) bez znajomości hasła, jeżeli tylko posiadamy dostęp do lokalnej konsoli (zakładając, że nie zostało założone hasło na BIOS lub program ładujący system taki jak lilo).

Poniżej przedstawiono procedurę postępowania w takim przypadku, która nie wymaga posiadania dodatkowych narzędzi, jak choćby dyskietek czy płyt z systemem, ani modyfikacji ustawień BIOSu. Zakładamy, że „Linux” to etykieta podstawowego jądra systemu w domyślnej instalacji Debiana.

Gdy tylko pojawi się ekran startowy lilo oraz napis boot: (być może musisz przytrzymać klawisz shift podczas uruchamiania lilo aby zapobiec automatycznemu startowi systemu) wpisz:

     boot: Linux init=/bin/sh

To wymusza załadowanie jądra oraz uruchomienie /bin/sh w miejsce standardowego programu init. Dzięki temu uzyskujesz przywileje administratora oraz dostęp do konta root. Ponieważ system plików / jest zamontowany w trybie „tylko do odczytu”, a inne nie są zamontowane w ogóle, trzeba wykonać kilka operacji, aby uzyskać w pełni funkcjonujący system.

     init-2.03# mount -n -o remount,rw /
     init-2.03# mount -avt nonfs,noproc,nosmbfs
     init-2.03# cd /etc
     init-2.03# vi passwd
     init-2.03# vi shadow

(Jeżeli drugie pole danych zapisanych w /etc/passwd zawiera tylko literkę „x” dla każdego użytkownika, oznacza to, że Twój system używa osobnego pliku do przechowywania haseł i musisz edytować /etc/shadow.) Aby wyłączyć hasło dla konta root, wykasuj całą zawartość pola odpowiedzialnego za hasło (jest to drugie pole w pliku /etc/passwd lub /etc/shadow, jeżeli system go używa). Teraz możesz przeładować system i zalogować się na konto root bez hasła. Podczas inicjowania na poziomie startu równym 1 („runlevel 1”), Debian (od wersji Potato) wymaga hasła, czego niektóre starsze dystrybucje nie czynią.

Dobrym pomysłem jest mieć jakiś prosty edytor w /bin/ na wypadek, gdyby /usr/ było niedostępne (zobacz także Edytory awaryjne, Rozdział 11.2).

Możesz także rozważyć instalację pakietu sash. Jeśli system przestanie się uruchamiać, wykonaj:

     boot: Linux init=/bin/sash

sash jest interaktywnym zamiennikiem dla sh, nawet gdy /bin/sh jest niezdatny do użytku. sash jest łączony statycznie i zawiera wbudowane wiele typowych funkcji (wpisz „help” w linii poleceń, aby poznać jego możliwości).


8.1.2 „Zapomniałem hasła roota!” (2)

Uruchom system z zestawu dyskietek ratunkowych lub z płyty CD. Załóżmy, że /dev/hda3 to oryginalna, główna partycja (root). Poniższe polecenia pozwolą na równie łatwe, jak w poprzednim punkcie, wyedytowanie plików z użytkownikami i hasłami.

     # mkdir fixit

     # mount /dev/hda3 fixit
     # cd fixit/etc
     # vi shadow
     # vi passwd

Przewagą tej metody nad poprzednią jest to, że nie trzeba znać hasła do lilo (jeżeli jest takowe uaktywnione). Aczkolwiek wymaga to ingerencji w ustawienia BIOSu i włączenie możliwości startu systemu z CD czy też dyskietek.


8.1.3 System się nie uruchamia

To żaden problem, nawet jeśli zaniedbano przygotowawania dystkietki startowej. Jeśli lilo jest uszkodzone, użyj płyty startowej z zestawu płyt instalacyjnych Debiana (lub utwórz dyskietkę startową z obrazów zawartych na tejże płycie) i uruchom system przy jej pomocy.

Zakładamy, że główna partycja Twojej instalacji Linuksa to /dev/hda12 oraz że chcesz ustawić 3 poziom startu.

Gdy pojawi się komunikat startowy, wpisz:

     boot: rescue root=/dev/hda12 3

Po chwili otrzymujesz prawie w pełni funkcjonalny system wykorzystujący jądro z płytki/dyskietki startowej. Mogą jednak wystąpić pewne problemy wynikające z braku pewnych możliwości lub modułów w dystrybucyjnym jądrze.

Jeśli masz uszkodzony system zainteresuj się też rozdziałem Instalowanie pakietu w niestartującym systemie, Rozdział 6.3.6.

Jeżeli potrzebujesz specjalnie dostosowanej dyskietki startowej, przejrzyj plik readme.txt umieszczony na dysku ratunkowym.


8.1.4 Jak wyłączyć automatyczne uruchamianie Xów przy starcie?!

Ujarzmianie wersji unstable/sid może być zabawne, ale zawierający błędy xdm, gdm, kdm oraz wdm starujący przy uruchamianiu systemu może Ci dopiec.

Na początek zdobądź dostęp do konta administratora (root) wpisując poniższe polecenie podczas startu lilo:

     boot: Linux vga=normal s

Zakładamy, że Linux to etykieta jądra, które zazwyczaj uruchamiasz. Natomiast „vga=normal” sprawi, że lilo wystartuje w normalnym trybie VGA. Ostatni parametr -- „s” (lub „S”) sprawia, że init uruchamia system w trybie pojedynczego użytkownika. Teraz wystarczy wpisać hasło administratora (konto root).

Istnieje kilka sposobów na wyłączenie wszystkich demonów systemu X:

  • uruchom update-rc.d ?dm stop 99 1 2 3 4 5 6 .

  • wstaw „exit 0” na początek wszystkich plików /etc/init.d/?dm.

  • zmień nazwę wszystkich plików /etc/rc2.d/S99?dm na /etc/rc2.d/K99?dm.

  • usuń wszystkie pliki /etc/rc2.d/S99?dm.

  • uruchom :>/etc/X11/default-display-manager

W przykładach rc2.d oznacza aktualny poziom startu (runlevel) ustalony w /etc/inittab, zaś ?dm oznacza, że powinieneś uruchomić każdy z programów: xdm, gdm, kdm czy też wdm.

Tylko pierwsze z rozwiązań wymienionych na liście, jest „jedynie słuszną drogą” w systemie Debian. Ostatni ze sposobów jest łatwy, ale wymaga ponownego ustawienia menedżera ekranu używając później dpkg-reconfigure. Pozostałe to różne metody na wyłączenie demonów.

Po tych czynnościach nadal możesz uruchomić środowisko graficzne poleceniem startx wydanym na dowolnej konsoli tekstowej.


8.1.5 Inne triki stosowane podczas startu systemu

System może być uruchamiany w wybranym poziomie startu (runlevel) oraz z określoną przez użytkownika konfiguracją. Wystarczy wykorzystać udostępnianą przez lilo możliwość podania parametrów przy uruchamianiu systemu. Szczegóły znajdziesz w BootPrompt-HOWTO (LDP).

Jeżeli chcesz uzyskać 4 poziom startu, spróbuj poniższego:

     boot: Linux 4

Jeśli natomiast chcesz uzyskać tryb pojedynczego użytkownika (single-user), a znasz hasło administratora, możesz użyć:

     boot: Linux S
     boot: Linux 1
     boot: Linux -s

W przypadku, gdy chcesz uruchomić system tak, aby wykorzystywał mniej pamięci, niż jest w rzeczywistości w komputerze (powiedzmy 48MB, podczas gdy komputer ma 64MB), użyj:

     boot: Linux mem=48M

Upewnij się, że nie podajesz wartości przewyższającej dostępną pamięć, gdyż wtedy jądro może ulec katastrofie! Jeżeli posiadamy więcej niż 64MB (przykładowo 128MB), do czasu aż podamy mem=128M podczas startu lub w /etc/lilo.conf, starsze jądra i/lub płyty główne ze starszym BIOSem mogą nie używać pamięci powyżej 64MB.


8.1.6 Ustawianie parametrów uruchomieniowych GRUB

GRUB jest to nowy zarządca startu systemu wywodzący się z projektu GNU Hurd. Jest on bardziej elastyczny niż lilo, jednakże występują tu drobne różnice w zakresie manipulowania parametrami startu systemu.

     grub> find /vmlinuz
     grub> root (hd0,0)
     grub> kernel /vmlinuz root=/dev/hda1
     grub> initrd /initrd
     grub> boot

Musisz być świadom nazw urządzeń pochodzących z Hurda:

     HURD/GRUB           Linux               MSDOS/Windows
      (fd0)               /dev/fd0            A:
      (hd0,0)             /dev/hda1           C: (zazwyczaj)
      (hd0,3)             /dev/hda4           F: (zazwyczaj)
      (hd1,3)             /dev/hdb4           ?

Zajrzyj do file:///usr/share/doc/grub/README.Debian.gz oraz file:///usr/share/doc/grub-doc/html/ po dokładniejsze informacje.


8.2 Rejestrowanie działań


8.2.1 Rejestrowanie poleceń powłoki

Administracja systemem pociąga za sobą o wiele więcej drobiazgowych zadań w Uniksie niż w zwykłych środowiskach komputerów osobistych. Upewnij się, że znasz przynajmniej podstawowe sposoby konfiguracji, na wypadek gdyby zaszła potrzeba odratowania systemu z problemów. Bazujące na graficznym interfejsie narzędzia konfiguracyjne wyglądają przyjemnie i wygodnie, jednakże zazwyczaj nie nadają się do użycia w stanie zagrożenia.

Tak więc, rejestrowanie działań poleceniami powłoki jest dobrym zwyczajem, szczególnie podczas pracy jako administrator (root).

Emacs: Użyj M-x shell aby rozpocząć nagrywanie do bufora oraz C-x C-w aby zapisać bufor na dysk.

Powłoka: Użyj polecenia screen oraz „^A H” jak opisano w Zmiana konsoli przy pomocy screena, Rozdział 8.6.27 lub skorzystaj z script.

     $ script nagranie
     Script started, file is nagranie
     $ ...
       ... Rób cokolwiek ...
       ... Na zakończenie naciśnij Ctrl+D ...
     Script done, file is nagranie
     $ col -bx <nagranie >raport
     $ vi raport

Poniższe polecenie może być użyte zamiast polecenia script:

     $ bash -i 2>&1 | tee nagranie


8.2.2 Rejestrowanie obrazu w Xach.

Jeżeli chcesz zarejestrować graficzny obraz aplikacji w środowisku X-Window, możesz użyć programu gimp (GUI). Potrafi on przechwytywać określone okna z osobna lub cały ekran. Innym rozwiązaniem jest zastosowanie programów takich jak: xwd (z pakietu xbase-clients), import (z pakietu imagemagick) oraz scrot (z pakietu scrot).


8.3 Kopiowanie oraz archiwizacja całych katalogów


8.3.1 Podstawowe polecenia do kopiowania całych podkatalogów

Jeżeli chcesz przearanżować strukturę położenia plików, skorzystaj na przykład z:

     Typowa metoda:
     # cp -a /początkowy/katalog /docelowy/katalog # wymaga narzędzia GNU cp
     # (cd /początkowy/katalog && tar cf - . ) | \
             (cd /docelowy/katalog && tar xvfp - )
     Jeżeli twarde dowiązania są wymagane, przydatna okaże się metoda:
     # cd /ścieżka/do/starego/katalogu
     # find . -depth -print0 | afio -p -xv -0a /punkt/montowania/nowego/katalogu
     Jeśli cel jest na odległej maszynie:
     # (cd /początkowy/katalog && tar cf - . ) | \
             ssh użytkownik@komputer.odległy (cd /docelowy/katalog && tar xvfp - )
     Jeżeli nie ma dowiązań do plików, wystarczy:
     # scp -pr użytkownik1@jeden.komputer:/początkowy/katalog \
               użytkownik2@drugi.komputer:/docelowy/katalog

W przykładach scp <==> rcp oraz ssh <==> rsh.

Powyższe sposoby kopiowania całych katalogów zostały zaprezentowane przez Manoja Srivastavę Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć. na liście dyskusyjnej Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć. .


8.3.2 cp

Tradycyjne narzędzie cp nie było dobrym kandydatem do takich zadań, gdyż nie wyłuskiwało symbolicznych dowiązań ani nie chroniło dowiązań twardych. Kolejną rzeczą wymagającą rozważenia były tzw. rzadkie (sparse) pliki (pliki z dziurami).

GNU cp przezwyciężyło te ograniczenia, jednakże na systemach niezgodnych z GNU, cp może wciąż sprawiać problemy. Możesz również nie móc tworzyć małych, przenośnych archiwów używając cp.

     % cp -a . newdir


8.3.3 tar

Tar przezwycięża kilka z problemów, które cp ma z symbolicznymi dowiązaniami. Jednakże, jakkolwiek cpio obsługuje specjalne pliki, to konwencjonalny tar nie.

W przypadku wielu dowiązań (hardlink) do jednego pliku, tar umieszcza na taśmie tylko jedną kopię; cpio umieszcza jedną kopię dla każdego dowiązania.

Polecenie tar zmieniło swoją opcję używaną dla plików .bz2 pomiędzy Potato a Woody, więc używaj w skryptach --bzip2 zamiast ich krótkiej formy -I (Potato) czy też -j (Woody).


8.3.4 pax

Nowe, wypasione narzędzie POSIX (IEEE Std 1003.2-1992, strony 380–388 (rozdział 4.48) oraz strony 936–940 (rozdział E.4.48)) o nazwie Portable ArchiveInterchange. pax potrafi czytać, zapisywać i wyświetlać zawartość pliku archiwum, jak również kopiować hierarchie katalogów. Operacje narzędzi pax są niezależne od określonego rodzaju archiwum i obsługują szeroką gamę różnorodnych formatów.

Implementacje programu pax są ciągle nowe i siermiężne.

     # apt-get install pax
     $ pax -rw -p e . nowy_katalog
      lub
     $ find . -depth  | pax -rw -p e  nowy_katalog

8.3.5 cpio

cpio kopiuje pliki do lub z archiwum programu cpio albo programu tar. Archiwum może być plikiem na dysku, taśmą magnetyczną czy też potokiem.

     $ find . -depth -print0 | cpio --null --sparse -pvd new-dir

8.3.6 afio

afio jest lepszym wyborem w zakresie obsługi archiwów w formacie cpio. Jest zdecydowanie szybszy niż cpio, udostępnia więcej opcji obsługi taśmy magnetycznej oraz zachowuje się o wiele wdzięczniej w przypadku uszkodzenia danych wejściowych. Obsługuje wieloczęściowe archiwa podczas interaktywnych operacji. afio może tworzyć kompresowane archiwa, które są o wiele bezpieczniejsze niż kompresowane produkty tara lub cpio. afio jest używane jako „archiwizujący silnik” w skryptach do tworzenia kopii zapasowych.

     $ find . -depth -print0 | afio -px -0a new-dir

8.4 Kopia różnicowa oraz synchronizacja danych

Kopie różnicowe oraz synchronizacja danych mogą być wykonane różnymi metodami:

  • rcs: kopia oraz historia, tylko tekst

  • rdiff-backup: kopia oraz historia. symboliczne dowiązania .

  • pdumpfs: kopia oraz historia w granicach systemu plików. symlink OK

  • rsync: jednokierunkowa synchronizacja

  • unison: dwukierunkowa synchronizacja

  • arch: wielotorowa synchronizacja z serwerem, kopia oraz historia, brak takich rzeczy jak „roboczy katalog”.

  • subversion: wielotorowa synchronizacja z serwerem, kopia oraz historia, Apache.

Połączenie jednej z tych metod z archiwizacją opisaną tutaj: Kopiowanie oraz archiwizacja całych katalogów, Rozdział 8.3 oraz automatycznym wykonywaniem zadań o określonym czasie (Harmonogram działań (cron, at), Rozdział 8.6.26) pozwoli stworzyć miły system kopii bezpieczeństwa.

Poniżej opiszę trzy łatwe w użyciu narzędzia.


8.4.1 Kopia różnicowa z użyciem rdiff

rdiff-backup pozwala przyjemnie i prosto utworzyć kopię bezpieczeństwa wraz z historią zmian, obsługując dowolne typy plików, włączając w to dowiązania symboliczne. Aby zarchiwizować ~/ do /mnt/kopia, zastosuj:

     $ rdiff-backup --include ~/tmp/keep --exclude ~/tmp  ~/ /mnt/kopia

Aby przywrócić dane sprzed trzech dni do ~/stare, użyj:

     $ rdiff-backup -r 3D /mnt/kopia ~/stare

Poczytaj też podręcznik systemowy: rdiff-backup(1).


8.4.2 Codzienna kopia z użyciem pdumpfs

pdumpfs to prosty system tworzenia codziennych kopii zapasowych, zbliony do dumpfs. Możesz korzystać z dostępu do wcześniejszych kopii w dowolnym momencie. Spróbuj uruchomić kopię bezpieczeństwa swojego katalogu domowego z wykorzystaniem pdumpfs oraz crona!

pdumpfs tworzy archiwum YYYY/MM/DD w docelowym katalogu. Przy pierwszym uruchomieniu pdumpfs wszystkie źródłowe pliki są kopiowane do docelowego katalogu. Za kolejnymi uruchomieniami kopiowane są jedynie te pliki, które zostały zmodyfikowane lub utworzone od ostatniego uruchomienia programu pdumpfs, natomiast pozostające bez zmian są przedstawiane w postaci dowiązania do ich odpowiedników we wcześniejszych kopiach celem zaoszczędzenia miejsca na dysku.

     $ pdumpfs kat_źródłowy kat_docelowy [nazwa docelowa]

Zobacz także: pdumpfs(8).


8.4.3 Regularne kopie różnicowe wykonywane z użyciem RCS

Changetrack regularnie rejestruje zmiany w tekstowych plikach konfiguracyjnych. Zobacz także: changetrack(1).

     # apt-get install changetrack
     # vi changetrack.conf


8.5 Przywracanie po zawieszeniu systemu


8.5.1 Usuwanie procesów

Uruchom top aby zobaczyć, które procesy zużywają największą ilość zasobów. Naciśnij „P” aby posortować wg zużycia mocy procesora, „M” wg zużycia pamięci oraz „k” aby usunąć proces. Alternatywnie, możesz użyć ps aux | less (sposób BSD) lub ps -efH | less (sposób System-V). Ta druga składnia pokazuje identyfikatory procesów nadrzędnych. (PPID), co pozwala na ubicie zombie (niefunkcjonujących procesów potomnych).

Użyj polecenia kill aby usunąć proces (lub wysłać do niego sygnał) według ID procesu. killall działa analogicznie, ale możliwe jest podanie nazwy procesu. Najczęściej używane sygnały:

      1: HUP,  uruchom ponownie demona
     15: TERM, normalne zakończenie pracy
      9: KILL, bezkompromisowe usunięcie

8.5.2 Alt-SysRq

Jądro pozwala się zabezpieczyć przed wadliwym działaniem systemu za pomocą opcji „Magic SysRq key” podawanej przy jego kompilacji. Wciśnięcie na architekturze i386 Alt-SysRq, a za nim jeden z klawiszy r 0 k e i s u b czyni cuda.

Klawisz `r' przywróci stan klawiatury po takich niespodziankach jak zawieszenie się serwera X. Zmiana poziomu logowania na konsoli na `0' zmniejsza ilość wyświetlanych komunikatów o błędach. sa'k' (z ang. system attention key) zabija wszystkie procesy na danej konsoli wirtualnej. `e' zabija wszystkie procesy na danym terminalu poza procesem init. `i' zabija wszystkie procesy poza procesem init.

`S'ync, `u'mount i re`b'oot służą do wychodzenia z najcięższych kłopotów.

Szczegółowe instrukcje znajdziesz w pliku: /usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz lub /usr/src/kernel-version/Documentation/sysrq.txt.gz.


8.6 Warte zapamiętania polecenia


8.6.1 Przeglądarka treści tekstowych

less jest domyślną przeglądarką zawartości plików. Klawisz „h” przywołuje pomoc. Program potrafi o wiele więcej niż more. less może być „podrasowany” przez wykonanie polecenia eval $(lesspipe) lub eval $(lessfile) w skryptach startowych powłoki. Zobacz więcej: file:///usr/share/doc/less/LESSOPEN. Opcja -R umożliwia wykorzystywanie nieobrobionego wyjścia oraz włącza sekwencje ANSI sterujące kolorami. Zobacz także: less(1).

w3m może być użyteczny jako alternatywna przeglądarka w przypadku niektórych systemów kodowania (np. EUC).


8.6.2 Wolna pamięć

free oraz top stanowią dobry sposób uzyskania informacji na temat pamięci. Nie zwracaj uwagi na wartość „used” w linii „Mem:”, ale skorzystaj z liczby umieszczonej poniżej (w przykładzie jest to 38792).

     $ free -k # dla komputera z pamięcią o rozmiarze 256MB 
                  total       used       free     shared    buffers cached
     Mem:        257136     230456      26680      45736     116136 75528
     -/+ buffers/cache:      38792     218344
     Swap:       264996          0     264996

Ścisły rozmiar fizycznej pamięci może być sprawdzony poleceniem grep '^Memory' /var/log/dmesg, które w przypadku z przykładu powyżej daje komunikat: „Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)”.

     Total         = 262144k = 256M (1k=1024, 1M=1024k)
     Free to dmesg = 256984k = Total - kernel - reserved - data - init
     Free to shell = 257136k = Total - kernel - reserved - data

Około 5MB jest nieużyteczne dla systemu, ponieważ jądro tego używa.


8.6.3 Ustawianie czasu (BIOS)

     # date MMDDhhmmCCYY
     # hwclock --utc --systohc
     # hwclock --show

Powyższe polecenia ustawiają sprzętowy zegar na wartość: MM/DD hh:mm, CCYY. Czas jest pokazywany zgodnie z lokalną strefą czasową, jednak sprzętowy zegar jest ustawiany według czasu uniwersalnego (UTC).


8.6.4 Ustawianie czasu (NTP)

Zaglądnij też do: Managing Accurate Date and Time HOWTO.


8.6.4.1 Ustawianie czasu w przypadku stałego łącza z Internetem

Ustaw czas systemu automatycznie według odległego serwera:

     # ntpdate serwer

Dobrym rozwiązanie jest umieszczenie tego w pliku /etc/cron.daily/ jeżeli Twój system ma stałe łącze z Internetem, a dokładniej, z wskazanym serwerem.


8.6.4.2 Ustawianie czasu przy czasowych połączeniach z siecią

Użyj pakietu chrony.


8.6.5 Jak kontrolować funkcje konsoli, takie jak wygaszacz ekranu

W celu wyłączenia wygaszacza ekranu w konsoli tekstowej, należy wykonać:

     # setterm -powersave off

Możesz uruchomić konsolę kon2 (kanji) używając:

     # kon -SaveTime 0

Mając uruchomieny X Window System:

     # xset s off
      lub
     # xset -dpms
      lub
     # xscreensaver-command -prefs

Przeczytaj odpowiednie strony podręcznika systemowego na temat obsługi innych funkcji konsoli. Zobacz także stty(1). Znajdziesz tam nieco na temat sprawdzania oraz zmiany ustawień linii komend.


8.6.6 Przeszukiwanie administracyjnych baz danych

Glibc umożliwia wykorzystanie: getent(1) do wyszukiwania wpisów w administracyjnych bazach danych, takich jak passwd, group, hosts, services, protocols czy networks.

     getent baza_danych [klucz ...]

8.6.7 Wyłączenia dźwięków (brzęczyk)

Najprościej odłączyć głośniczek ;-). Albo, dla basha:

     echo "set bell-style none">> ~/.inputrc

8.6.8 Komunikaty o błędach na ekranie konsoli

Aby wyłączyć komunikaty o błędach wysyłane na konsolę tekstową, zaglądnij do /etc/init.d/klogd. Ustaw KLOGD="-c 3" w tym skrypcie oraz uruchom /etc/init.d/klogd restart. Inna metoda, to uruchomienie dmesg -n3.

Poziomy raportowania błędów są następujące:

  • 0: KERN_EMERG, system jest bezużyteczny

  • 1: KERN_ALERT, reakcja musi być natychmiastowa

  • 2: KERN_CRIT, krytyczna sytuacja (critical conditions)

  • 3: KERN_ERR, błędna sytuacja (error conditions)

  • 4: KERN_WARNING, ostrzeżenie (warning conditions)

  • 5: KERN_NOTICE, normalna, choć ważna sytuacja (significant condition)

  • 6: KERN_INFO, informacyjne

  • 7: KERN_DEBUG, komunikaty odpluskwiania

Jeśli denerwuje Cię jeden, specyficzny, bezużyteczny komunikat o błędzie, zastanów się nad zastosowaniem trywialnej łatki na jądro, takiej jak shutup-abit-bp6 (dostępna w podkatalogu z przykładami).

Możesz także zaglądnąć do /etc/syslog.conf; sprawdź czy jakieś komunikaty nie są wysyłane do urządzenia powiązanego z konsolą.


8.6.9 Ustawienie właściwego typu konsoli

Ekran konsoli w systemach uniksowych jest zazwyczaj obsługiwany przez bilioteki (n)curses. Zapewniają one niezależne od rodzaju terminala metody obsługi ekranu. Sprawdź: ncurses(3X) oraz terminfo(5).

W systemie Debian, jest nieco wstępnie zdefiniowanych wartości:

     $ toe | less                  # wszystkie wartości
     $ toe /etc/terminfo/ | less   # wartości dające się modyfikować przez użytkowników

Wyeksportuj Twój wybór jako zmienną środowiskową TERM.

Jeżeli wartość terminfo dla xterm nie działa właściwie z xtermami nie pochodzącymi z Debiana, zmień rodzaj terminala z „xterm” na jedną z wersji posiadających ograniczenia funkcjonalności, jak np.„xterm-r6” podczas zdalnego logowania do Debiana. Zobacz także: file:///usr/share/doc/libncurses5/FAQ. „dumb” jest najniższą wspólną definicją dla terminfo.


8.6.10 Przywracanie konsoli do rozsądnego stanu

Jeśli ekran stanie się nieczytelny po wykonaniu polecenia cat jakiś-plik-binarny (możesz nie widzieć poleceń, jakie wpisujesz), zastosuj:

     $ reset

8.6.11 Konwersja plików ze stylu dosowego na uniksowy

Przekształcanie dosowego pliku tekstowego (koniec-linii = ^M^J) na format uniksowy (koniec-linii = ^J):

     # apt-get install sysutils
     $ dos2unix plik_dosowy

8.6.12 Zastępowanie przy pomocy wyrażeń regularnych

Zamiana wszystkich wystąpień WYRAŻENIE_POCZĄTKOWE na WYRAŻENIE_KOŃCOWE we wszystkich plikach PLIKI ...:

     $ perl -i -p -e 's/WYRAŻENIE_POCZĄTKOWE/WYRAŻENIE_KOŃCOWE/g;' PLIKI ...

-i służy do „in-place editing”, -p wymusza przetwarzanie w pętli, każdy plik z podanych jako PLIKI ... Jeśli zastępowanie jest złożone, możesz zabezpieczyć się przed błędami używając parametru -i.bak zamiast -i; to zachowa oryginalne pliki dodając do ich nazwy .bak.


8.6.13 Edytowanie plików przez skrypt

Poniższy skrypt usunie linie 5–10 oraz 16–20.

     #!/bin/bash
     ed $1 <<EOF
     16,20d
     5,10d
     w
     q
     EOF

Polecenia ed są takie same jak polecenia vi w trybie wydawania poleceń. Modyfikacja pliku od tyłu ułatwia jego edycję w skryptach.


8.6.14 Odnajdywanie różnic i scalanie uaktualnień w pliku źródłowym

Poniższa procedura odnajduje różnice pomiędzy dwoma plikami i tworzy zunifikowane pliki „diff”: plik.łatka0 lub plik.łatka1:

     $ diff -u plik.stary plik.nowy1 > plik.łatka0

     $ diff -u stary/plik nowy1/plik > plik.łatka1

Pliki „diff”, nazywane także łatkami (patch) są używane do przesyłania uaktualnień kodów źródłowych programów. Po odebraniu takiego pliku, można go zaaplikować na posiadany stary plik używając poleceń:

     $ patch -p0 plik.stary < plik.łatka0

     $ patch -p1 plik.stary < plik.łatka1

Jeśli masz wszystkie trzy wersje kodów źródłowych, możesz je połączyć używając narzędzia diff3:

     $ diff3 -m plik.mój plik.stary plik.twój > plik


8.6.15 Przekształcanie dużego pliku w kilka małych

     $ split -b 650m plik   # podział pliku na kawałki 650 MB 
     $ cat x* > dużyplik     # łączenie plików w jeden duży


8.6.16 Wyłuskiwanie danych z tekstowych tabel

Rozpatrzymy plik nazwany DPL w którym zachowywane są wszystkie nazwiska przywódców projektu Debian oraz daty rozpoczęcia ich działalności. Dane oddzielone są przerwami.

     Ian     Murdock   August  1993
     Bruce   Perens    April   1996
     Ian     Jackson   January 1998
     Wichert Akkerman  January 1999
     Ben     Collins   April   2001
     Bdale   Garbee    April   2002
     Martin  Michlmayr March   2003

Najczęsciej używanym narzędziem do takich zadań jest Awk.

     $ awk '{ print $3 }' <DPL                   # Miesiące
     August
     April
     January
     January
     April
     April
     March
     $ awk '($1=="Ian") { print }' <DPL          # przywódca zwany Ian
     Ian     Murdock   August  1993
     Ian     Jackson   January 1998
     $ awk '($2=="Perens") { print $3,$4 }' <DPL # Kiedy rozpoczął Perens 
     April 1996

Powłoka taka jak Bash również może zostać użyta do obrabiania tego typu plików:

     $ while read first last month year; do 
         echo $month
       done <DPL
     ... taki sam efekt jak w pierwszym przykładzie z Awk

W tym przypadku wbudowane polecenie read używa znaków z $IFS (wewnętrzne separatory pól) by podzielić linie na słowa.

Jeśli zmienisz IFS na ":" będziesz mógł bezproblemowo z powłoką obrabiać plik /etc/passwd:

     $ oldIFS="$IFS"   # zapisuje starą wartość
     $ IFS=":"

     $ while read user password uid gid rest_of_line; do
         if [ "$user" = "osamu" ]; then
           echo "$user's ID is $uid"
         fi
       done < /etc/passwd
     osamu's ID is 1001
     $ IFS="$oldIFS"   # przywraca starą wartość

(Jeśli chcesz użyć Awk do tego samego skorzystaj z FS=":" by ustawić separator pól.)

IFS jest również używane przez powłokę do rozdzielania wyników dopełniania parametrów, podmian poleceń i dopełniania arytmetycznego. To nie dotyczy wyrazów w podwójnym lub pojedynczym cudzysłowiu. Domyślną wartością IFS jest kombinacja następujących znaków <spacja>, <tabulator> i <znak nowej linii>.

Uważaj używając trików z IFS w powłoce. Dziwne rzeczy się mogą dziać kiedy powłoka zinterpretuje część skryptu jako swoje wejście.

     $ IFS=":,"                        # użyj ":" i "," jako IFS
     $ echo IFS=$IFS,   IFS="$IFS"     # echo jest wbudowane w Basha 
     IFS=  , IFS=:,
     $ date -R                         # zwykłe wyjście polecenia
     Sat, 23 Aug 2003 08:30:15 +0200
     $ echo $(date -R)                 # pod-powłoka --> wejście do głównej powłoki
     Sat  23 Aug 2003 08 30 36 +0200
     $ unset IFS                       # przywrócenie domyślnej wartości IFS
     $ echo $(date -R)
     Sat, 23 Aug 2003 08:30:50 +0200


8.6.17 Kawałki kodu przekierowywania poleceń

Poniższe skrypty wspólnie tworzą piękną całość jeśli są połączone potokiem (ang. pipe).

     find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
                          # znajduje wszystkie pliki w /usr z wyłączeniem pewnych
     plików
     xargs -n 1 polecenie  # uruchamia polecenia dla każdego z elementu ze standardowego wejścia
     xargs -n 1 echo |    # dzieli elementy oddzielone białymi znakami na linie
     xargs echo      |    # łączy wszystkie linie w jedną
     grep -e wzorzec|     # wyciąga linie zawierające dany wzorzec

     cut -d: -f3 -|       # wyciąga trzecie pole oddzielone znakiem : (np. plik passwd)
     awk '{ print $3 }' | # wyciąga trzecie pole oddzielone białymi znakami
     awk -F'\t' '{ print $3 }' |        # wyciąga trzecie pole oddzielone tabulatorem
     col -bx |            # usuwa backspace i rozwija tabulacje na spacje
     expand -|            # rozwija tabulacje
     sort -u|             # sortuje i usuwa powtórzenia
     
     tr '\n' ' '|         # usuwa znaki LF (wysuń wiersz)
     tr '\r' ''|          # usuwa znaki CR (powrót karetki)
     tr 'A-Z' 'a-z'|      # przekształca wielkie litery w małe
     sed 's/^/# /'|       # zmienia każdą linię na komentarz (zaczyna się od #)
     sed 's/\.ext//g'|     # usuwa .ext
     sed  -n -e 2p|       # wypisuje drugą linię
     head -n 2 -|         # wypisuje pierwsze 2 linie
     tail -n 2 -|         # wypisuje ostatnie 2 linie

8.6.18 Skrypty działające w pętli na każdym pliku

Poniższe sposoby pętli działającej na plikach z rozszerzeniem *.ext zapewniają prawidłową obsługę dziwnych nazw plików na przykład ze spacjami:

  • Pętla w powłoce:

         for x in *.ext; do
           if test -f "$x"; then
             command "$x"
    
           fi
         done
    
  • find w kombinacji z xargs:

         find . -type f -maxdepth 1 -name '*.ext' -print0 | \
          xargs -0 -n 1 command
    
    
  • find z opcją -exec w poleceniu:

         find . -type f -maxdepth 1 -name '*.ext' \
          -exec command '{}' \;
    
    
  • find z opcją -exec i krótkim skryptem powłoki:

         find . -type f -maxdepth 1 -name '*.ext' \
          -exec sh -c "command '{}' && echo 'successful'" \;
    
    

8.6.19 Szaleństwo krótkich skryptów Perla

Jakkolwiek każdy skrypt Awk może zostać automatycznie przekształcony do postaci perlowej z użyciem a2p(1), to jednolinijkowe skrypty Awk najwygodniej przekształcać do jednolinijkowych skryptów Perla ręcznie. Przykładowo:

     awk '($2=="1957") { print $3 }' |

może być zapisany jak poniżej:

     perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |
     perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |
     perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |
     perl -lane 'print $F[2] if $F[1] eq "1957"' |

Teraz usuwamy wszystkie białe znaki oraz wykorzystujemy przewagę automatycznej konwersji pomiędzy liczbami a ciągami tekstowymi:

     perl -lane 'print$F[2]if$F[1]eq+1957' |

Zobacz też do: perlrun(1). Wiele równie, lub bardziej szalonych skrytów Perla znajdziesz tutaj: http://perlgolf.sourceforge.net.


8.6.20 Pobieranie tekstu oraz archiwów list dyskusyjnych ze stron WWW

Poniższe polecenia zczytają stronę WWW do pliku tekstowego. Przydatne na przykład do skopiowania konfiguracji ze strony WWW.

     $ lynx -dump http://www.odległa-strona.pl/plik.html >plik.txt

links i w3m mogą być również analogicznie użyte, z dokładnością do niewielkich różnic.

Jeśli to jest archiwum listy dyskusyjnej, użyj munpack aby uzyskać zawartość mime.


8.6.21 Estetyczne wydruki stron WWW

Poniższe polecenia wydrukują stronę WWW do drukarki/pliku PostScript:

     $ apt-get install html2ps
     $ html2ps URL | lpr

Zobacz także lpr/lpd, Rozdział 3.6.1 oraz sprawdź pakiety: a2ps oraz mpage służące do tworzenia PostScriptu.


8.6.22 Estetyczne wydruki stron podręcznika systemowego

Poniższe polecenia wydrukują stronę podręcznika systemowego do drukarki/pliku PostScript:

     $ man -Tps jakaś-strona-podręcznika | lpr
     $ man -Tps jakaś-strona-podręcznika | mpage -2 | lpr


8.6.23 Łączenie dwóch plików w formacie PostScript lub PDF

Możesz połączyć pliki w formacie PostScript lub PDF:

     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \
       -sOutputFile=bla.ps -f foo1.ps foo2.ps

     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
       -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf

8.6.24 Czas trwania

Wyświetlanie czasu trwania danego polecenia.

     # time jakieś-polecenie >/dev/null
     real    0m0.035s       # czas, jaki upłynął na zegarku ściennym (czas rzeczywisty)
     user    0m0.000s       # czas spędzony w trybie użytkownika
     sys     0m0.020s       # czas spędzony w trybie jądra

8.6.25 Polecenie nice

Użyj polecenia nice (z pakietu GNU shellutils) by ustawić podczas startu „przyjazność” programu w stosunku do innych. renice (z bsdutils) lub top może zmienić tą wartość. Wartość równa 19 oznacza najniższy priorytet procesu. Wartość ujemna jest uważana za „nieprzyjazną” - wartość -20 oznacza wysoki priorytet procesu. Tylko superużytkownik może ustawiać ujemne wartości nice.

     # nice  -19 top # bardzo „miły” dla innych procesów
     # nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # bardzo szybki

Czasami ekstremalne wartości nice sprawiają więcej kłopotu niż pożytku, dlatego używaj tego polecenia bardzo uważnie.


8.6.26 Harmonogram działań (cron, at)

Użyj pakietu cron lub at aby zaplanować zadania w systemie GNU/Linux. Zobacz: at(1), crontab(5), crontab(8).

Wykonaj polecenie crontab -e edytujące zawartość spisu zadań („crontab”). Przykładowa zawartość takiego pliku:

     # użyj /bin/sh do wykonywania poleceń, niezależnie od zapisu w /etc/passwd 
     SHELL=/bin/sh
     # prześlij standardowe wyjście poleceń do `pawel', niezależnie od tego, 
     # czyj zestaw poleceń jest wykonywany
     MAILTO=pawel
     # Min Godzina DzieńMiesiąca Miesiąc DzieńTygodnia polecenie 
     # (DzieńTygodnia i DzieńMiesiąca są połączone spójnikiem LUB)
     # wykonaj o 00:05 każdego dnia
     5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
     # wykonaj o 14:15 pierwszego dnia każdego miesiąca -- wynik wysylany do Pawła
     15 14 1  * *   $HOME/bin/monthly
     # wykonaj o 22:00 każdego dnia tygodnia (1-5), wkurzamy Joe. 
     # % to nowa linia, ostatni % to cc:
     0 22 *   * 1-5 mail -s "Jest 10 wieczór" joe%Joe,%%Czy wiesz, gdzie są twoje dzieciaki?%.%%
     23 */2 1 2 *   echo "wykonane 23 minuty po godzinie 0, 2, 4 ..., dnia 1 lutego"

     5  4 *   * sun echo "wykonane 04:05 każdej niedzieli"
     # Wykonaj o 03:40 w pierwszy poniedziałek miesiąca
     40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args

Uruchom polecenie at aby wykonać jednorazowe zadanie:

     $ echo 'polecenie -argumenty'| at 3:40 monday

8.6.27 Zmiana konsoli przy pomocy screena

Program screen umożliwia uruchomienie wielu pozornych terminali, każdy ze swoją własną powłoką, na pojedynczym fizycznym terminalu lub emulatorze terminala. Nawet jeśli używasz wirtualnych konsoli Linuksa lub wielu x-terminali, program screen jest wart zainteresowania z uwagi na bogaty zbiór możliwości, takich jak np.:

  • przewijany dostęp do historii poleceń,

  • kopiowanie i wklejanie,

  • zapisywanie stanu wyjścia (logowanie),

  • digraph entry oraz

  • możliwość odłączenia sesji całego programu screen od terminala i ponowne jej przyłączenie później. Pozwala to na zdalne uruchomienie czasochłonnego zadania, rozłączenie i powrócenie do niego, gdy już się wykona.


8.6.27.1 Scenariusz zdalnego dostępu

Jeśli często podłączasz się do systemu ze zdalnego terminala lub korzystając z programu emulującego terminal w trybie VT100, screen uczyni Twoje życie łatwiejszym :-) dzięki opcji detach.

  • jesteś połączony przez łącze wdzwaniane i masz uruchomiony program screen ze sporą ilością sesji zawierających różne programy

  • nagle musisz porzucić terminal, ale nie chcesz stracić swojej dotychczasowej pracy po rozłączeniu

  • wpisujesz więc Ctrl+A d aby odłączyć sesje od terminala, a następnie przerywasz podłączenie do systemu. (lub szybciej: wpisując Ctrl+A DD zmuszając program screen jednocześnie do odłączenia sesji i zakończenia połączenia)

  • gdy ponownie przyłączysz się do systemu, wpisz polecenie screen -r, a screen magicznie przyłączy się ponownie i wszystkie sesje zostaną przywrócone.


  • 8.6.27.2 Podstawowe polecenia screena

    Gdy uruchomisz program screen, wszystkie naciskane klawisze są wysyłane do aktualnej sesji, za wyjątkiem kombinacji wywołującej system poleceń screena. Domyślnie jest to Ctrl+A. Wszystkie polecenia programu screen są wpisywane przy użyciu Ctrl+A a następnie pojedynczych klawiszy. Użyteczne polecenia:

         ^A ?     pomoc do programu 
         ^A c     utwórz nową sesję i przełącz się do niej
         ^A n     następna sesja
         ^A p     poprzednia sesja
         ^A 0     idź do sesji numer 0
         ^A w     wyświetl listę sesji
         ^A a     Wyślij Ctrl+A do aktualnej sesji (normalne Ctrl+A jest przechwytywane)
         ^A h     zapisz kopię aktualnej sesji do pliku
         ^A H     rozpocznij/zakończ przechwytywanie aktualnej sesji do pliku
         ^A ^X    zabezpiecz terminal (ochrona hasłem)
         ^A d     odłącz sesje od terminala 
         ^A DD    odłącz sesje od terminala, a terminal od systemu
    

    To tylko niewielki podzbiór poleceń programu screen. Jeśli istnieje coś, co chciał(a)byś wykonać przy użyciu screena zapewne jest to możliwe!

    Zobacz także: screen(1).


    8.6.27.3 Backspace i/lub Ctrl+H w sesji screena

    Jeśli zauważysz, że backspace i/lib Ctrl+H nie działają dobrze podczas działania programu screen, wyedytuj plik /etc/screenrc, znajdź linię:

         bindkey -k kb stuff "\177"
    

    i zakomentuj ją (np. dodaj „#” jako pierwszy znak tej linii).


    8.6.28 Podstawy testowania sieci

    Zainstaluj pakiety: netkit-ping, traceroute, dnsutils, ipchains (dla jądra 2.2), iptables (dla jądra 2.4), oraz net-tools i wykonaj:

         $ ping www.google.com       # sprawdź połączenie z www.google.com
         $ traceroute www.google.com # sprawdź trasę pakietów
         $ ifconfig                  # sprawdź ustawienia komputera
         $ route -n                  # sprawdź ustawienia tras pakietów
         $ dig [@serwer-dns.pl] host.dom [{a|mx|any}] |less
               # sprawdź wpisy DNS dla host.dom zapisane w dns-server.com
    
               # typy rekorów to: {a|mx|dowolne}
         $ ipchains  -L -n |less     # sprawdź filtry pakietów (jądro 2.2)
         $ iptables -L -n |less      # check packet filter (jądro 2.4)
         $ netstat -a                # znajdź wszystkie otwarte porty
         $ netstat -l --inet         # znajdź nasłuchujące porty
         $ netstat -ln --tcp         # znajdź nasłuchujące porty TCP (numerycznie)
    

    8.6.29 Wypychanie przesyłek z lokalnej kolejki

    Aby wypchnąć listy z lokalnej kolejki, możesz użyć:

         # exim -q    # wypchnij czekające listy
         # exim -qf   # wypchnij wszystkie listy
         # exim -qff  # wypchnij nawet zamrożone przesyłki
    

    -qff może być użyteczną opcją w skrypcie /etc/ppp/ip-up.d/exim.


    8.6.30 Usuwanie zamrożonych przesyłek z lokalnej kolejki

    Aby usunąć zamrożone przesyłki z lokalnej kolejki, wysyłając jednocześnie komunikat o błędzie, wykonaj:

         # exim -Mg `mailq | grep frozen | awk '{ print $3 }'`
    

    8.6.31 Ponownie dostarczanie zawartości mboksa

    Jeśli Twój katalog domowy został zapełniony i procmailowi nie udało się dokonać swego dzieła, musisz ręcznie przenieść pocztę do posortowanych skrzynek w Twoim katalogu domowym z pliku /var/mail/nazwa_użytkownika. Po zwolnieniu miejsca w katalogu domowym wykonaj poniższe czynności:

         # /etc/init.d/exim stop
         # formail -s procmail </var/mail/nazwa_użytkownika
         # /etc/init.d/exim start
    

    8.6.32 Usuwanie zawartości plików

    W celu usunięcia zawartości plików takich jak dzienniki systemowe, nie używaj polecenia rm do usunięcia pliku i nie twórz pustego od nowa, ponieważ pomiędzy tymi operacjami, jakaś część systemu może chcieć dokonać zapisków do takiego pliku. Poniżej pokazano sposób na bezpieczne usuwanie zawartości pliku:

         $ :>plik-do-wyczyszczenia
    

    8.6.33 Sztuczne pliki

    Poniższe polecenia utworzą sztuczne lub puste pliki:

         $ dd if=/dev/zero    of=nazwa_pliku bs=1k count=5 # 5KB samych zer
         $ dd if=/dev/urandom of=nazwa_pliku bs=1M count=7 # 7MB losowej zawartości
         $ touch nazwa_pliku #  pusty plik, jeśli nie istnieje
    
    

    Przykładowo, poniższe polecenie, wykonane z powłoki dyskietki startowej systemu Debian usunie całkowicie zawartość dysku twardego /dev/hda:

         # dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda
    

    8.6.34 chroot

    Program chroot, chroot(8), pozwala na uruchomienie różnych instancji środowiska GNU/Linux na jednym systemie bez ponownego uruchomiania go.

    Można też uruchamiać zasobożerne programy takie jak apt-get czy dselect w środowisku chroot na szybkim komputerze mając zamontowane na wolniejszym komputerze zasób NFS na prawach r/w, który to zasób jest głównym punktem montowania na wolniejszym komputerze.


    8.6.34.1 Uruchamianie innej dystrybucji Debiana przy użyciu chroot

    Debianowe środowisko chroot można łatwo stworzyć przy pomocy debootstrap w Woodym. Na przykład jeśli chcesz utworzyć chroota z Sidem w katalogu /sid-root mając szybki dostęp do Internetu:

         main # cd / ; mkdir /sid-root
         main # debootstrap woody /sid-root http://ftp.debian.org/debian/
         ... obserwuj jak program ściąga całą podstawę systemu
         main # echo "proc-sid /sid-root/proc proc none 0 0" >> /etc/fstab
         main # mount proc-sid /sid-root/proc -t proc
         main # cp /etc/hosts /sid-root/etc/hosts
         main # chroot /sid-root /bin/bash
         chroot # cd /dev; /sbin/MAKEDEV generic ; cd -
         chroot # apt-setup # ustawianie /etc/apt/sources.list
         chroot # vi /etc/apt/sources.list # wskaż źródła na unstable
         chroot # dselect  # możesz też użyć aptitude, zainstaluj mc i vima :-)
    
    

    W tej chwili powinieneś posiadać w pełni funkcjonalny system Debian, w którym możesz mieszać bez strachu, że coś popsujesz w Twojej głównej dystrybucji.

    Ta sztuczka z debootstrap może też być użyta do instalcji Debiana bez użycia dysku instalacyjnego Debiana lecz przy wykorzystaniu innej dystrybucji GNU/Linux. Zobacz też http://www.debian.org/releases/stable/i386/apcs04.


    8.6.34.2 Ustawianie loginu dla chroot

    Wpisanie chroot /sid-root /bin/bash jest proste, ale zostawia to wiele zmiennych środowiskowych walających się po pamięci, a które nie są potrzebne lub nawet są niepożądane. Dużo lepszym sposobem jest uruchomienie kolejnego procesu login na oddzielnym terminalu wirtualnym, z którego możesz się bezpośrednio logować do systemu chroot.

    Ponieważ domyślnie w systemie Debian terminale tty1 do tty6 są przeznaczone na konsole Linuksa, a tty7 na sesję X Window System, użyjemy konsoli tty8 jako konsoi chroot. Po utworzeniu środowiska chroot tak jak to zostało opisane w Uruchamianie innej dystrybucji Debiana przy użyciu chroot, Rozdział 8.6.34.1, wpisz będąc rootem w głównym systemie:

         main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\
                "/sbin/getty 38400 tty8"  >> /etc/inittab
         main # init q    # przeładowanie init
    
    

    8.6.34.3 Ustawianie Xów do działania w chroot

    Chcesz bezpiecznie uruchamiać najnowsze Xy i GNOME w środowisku chroot? Jest to możliwe! Poniższy przykład uruchomi GDM na wirtualnym terminalu vt9.

    Najpierw zainstaluj system chroot wg. opisu w Uruchamianie innej dystrybucji Debiana przy użyciu chroot, Rozdział 8.6.34.1. Z głównego systemu skopiuj kluczowe pliki konfiguracyjne do systemu chroot.

         main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4
         main # chroot /sid-root # lub użyj konsoli chroot
         chroot # cd /dev; /sbin/MAKEDEV generic ; cd -
         chroot # apt-get install gdm gnome x-window-system
         chroot # vi /etc/gdm/gdm.conf # wykonaj s/vt7/vt9/ w sekcji [servers]
         chroot # /etc/init.d/gdm start
    

    Plik /etc/gdm/gdm.conf został tak zmieniony, by pierwszą konsolą była konsola vt9, a nie vt7.

    Teraz możesz bez problemu przełączać się między funkcjonalnymi środowiskami X systemu głównego i systemu chroot przez proste przełączanie wirtualnych terminali Linuksa, np. za pomocą kombinacji klawiszy Ctrl-Alt-F7 i Ctrl-Alt-F9. Miłej zabawy!

    [FIXME] Dodaj komentarz i dowiązanie do skryptu init z chrootowanego gdm.


    8.6.34.4 Uruchamianie innych dystrybucji w środowisku chroot

    Środowisko chroot dla innej dystrybucji można utworzyć całkiem prosto. Instalujesz system na oddzielnej partycji korzystając z instalatora danej dystrybucji, i wykonujesz poniższe polecenia (przy założeniu, że główna partycja innej dystrybucji to /dev/hda9):

         main # cd / ; mkdir /other-dist
         main # mount -t ext3 /dev/hda9 /other-dist
         main # chroot /other-dist /bin/bash
    
    

    Następnie postępuj tak jak opisano to w Uruchamianie innej dystrybucji Debiana przy użyciu chroot, Rozdział 8.6.34.1, Ustawianie loginu dla chroot, Rozdział 8.6.34.2 oraz Ustawianie Xów do działania w chroot, Rozdział 8.6.34.3.


    8.6.34.5 Budowanie pakietu w środowisku chroot

    pbuilder jest bardziej wyspecjalizowanym narzędziem przygotowującycm środowisko chroot i budującym w nim pakiet. Jest to idealny system sprawdzający, czy zależności budowania są poprawne oraz do upewnienia się, że niepotrzebne i niepoprawne zależności budowania nie znajdą się w pakiecie wynikowym.


    8.6.35 Jak weryfikować dowiązania (hardlink)

    Możesz sprawdzić czy dwa pliki są tym samym plikiem z dwoma dowiązaniami:

         $ ls -li plik_1 plik_2
    

    8.6.36 Montowanie obrazów systemów plików

    Jeżeli plik.img zawiera obraz zawartości twardego dysku, zaś oryginalny twardy dysk ma konfigurację dającą: xxxx = (bajtów/sektor) * (sektorów/cylinder), wtedy możesz taki obraz zamontować do katalogu /mnt poleceniem:

         # mount -o loop,offset=xxxx plik.img /mnt
    
    

    Zauważ, że większość twardych dysków ma 512 bajtów/sektor.


    8.6.37 Samba

    Przykładowy dostęp do plików serwowanych przez Windows:

    • montowanie zasobów Windows do Linuksa:

                # mount -t smbfs -o username=moja_nazwa,uid=mój_uid,gid=mój_gid \
                        //serwer/dzielony_zasób /mnt/smb
      
    • inny sposób na montowanie zasobów Windows do Linuksa:

                # smbmount //serwer/dzielony_zasób /mnt/smb \
                        -o "username=moja_nazwa,uid=mój_uid,gid=mój_gid"
      
    • lista udostępnianych zasobów na wskazanym serwerze:

                # smbclient -L 192.168.1.2
      
      

    Otoczenie sieciowe Samby może być sprawdzane spod GNU/Linuksa:

         # smbclient -N -L adres_ip_twojego_komputera | less
         # nmblookup -T "*"
    

    8.6.38 Narzędzia do obsługi obcych systemów plików

    Obsługa wielu obcych systemów plików jest wspierana obecnie przez linuksowe jądro, a więc mogą być one dostępne w prosty sposób, poprzez zamontowanie urządzeń je zawierających. Dla niektórych systemów plików są dostępne także specjalne narzędzia umożliwiające dostęp do nich bez montowania urządzeń. Są one dostępne jako programy pracujące w przestrzeni użytkownika, a zatem wsparcie ze strony jądra nie jest potrzebne.

    • mtools: system plików MSDOS (MS-DOS, Windows)

    • cpmtools: system plików CP/M

    • hfsutils: system plików HFS (native Macintosh)

    • hfsplus: system plików HFS+ (modern Macintosh)

    Do tworzenia i weryfikacji systemu plików MS-DOS FAT użyteczne może być narzędzie: dosfstools.


    8.7 Typowe błędy

    Poniżej przedstawiamy kilka przykładów niebezpiecznych działań. Niebezpieczeństwo jest jeszcze większe, jeśli używasz konta uprzywilejowanego (root).


    8.7.1 rm -rf .*

    W poleceniu ,,rm -rf .*'', ,,.*'' jest rozwijane w taki sposób, że zawiera także katalogi ,,.'' oraz ,,..''. Jeśli więc posiadasz uprawnienia zapisu do katalogu nadrzędnego, to polecenie to usunie także wszystkie katalogi znajdujące się obok aktualnego katalogu.

    • "rm -rf ." : usuwa wszystko w głąb bieżącego katalogu oraz również ten katalog.

    • "rm -rf *" : usuwa wszystkie pliki i katalogi, poza rozpoczynającymi się znakiem kropki leżące w bieżącym katalogu.

    • "rm -rf .[^.]*" : usuwa wszystkie pliki i katalogi, których nazwy rozpoczynają się znakiem kropki

    • "rm -rf .*" : usuwa wszystko znadujące się w nadrzędnym katalogu oraz sam nadrzędny katalog.


    8.7.2 rm /etc/passwd

    Utrata kilku ważnych plików, takich jak /etc/passwd na skutek głupiej pomyłki bywa problematyczne. Debian wykonuje regularne kopie tych plików w /var/backup/. Kiedy przywrócisz te pliki, musisz ręcznie ustawić odpowiednie prawa.

           	 # cp /var/backup/passwd /etc/passwd
           	 # chmod 644 /etc/passwd
    

    Przeczytaj także Przywracanie danych wyboru pakietów, Rozdział 6.3.4.


    [ powrót ] [ Spis treści ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ dalej ]


    Debian Reference (version 1)

    This translation is based on old version of Debian Reference (English, version 1.x), well before Sat, 26 Jan 2008.

    Osamu Aoki osamu#at#debian.org
    Koordynator tłumaczenia: Bartosz Feński aka fEnIo Adres poczty elektronicznej jest chroniony przed robotami spamującymi. W przeglądarce musi być włączona obsługa JavaScript, żeby go zobaczyć.
    Autorzy, Rozdział A.1

     
    Linki sponsorowane

    W celu realizacji usług i funkcji na witrynach internetowych ZUI "ELPRO" stosujemy pliki cookies. Korzystanie z witryny bez zmiany ustawień dotyczących plików cookies oznacza, że będą one zapisywane w urządzeniu wyświetlającym stronę internetową. Więcej szczegółów w Polityce plików cookies.

    Akceptuję pliki cookies z tej witryny.