Man i spółka. Jak efektywnie korzystać z Linuksowej dokumentacji?Około 10 minut

Każdemu dokumentacja przypomina na początku taką biblioteczkę...

Po dosyć ciężkim temacie konteneryzacji post dla bardziej początkujących. Przekonamy się, czym dla użytkownika Linuksa jest dokumentacja systemowa (w szczególności ta przeglądana za pomocą man), zaprezentuję też parę sztuczek usprawniających poruszanie się po niej i pomagających szybko znaleźć to, co nas w danej chwili najbardziej interesje.

Jak się to zaczyna?

W życiu każdego początkującego użytkownika Linuksa przychodzi taki moment, kiedy opuszcza wygodną i kolorową „strefę komfortu”, zwaną interfejsem graficznym i próbuje korzystać z terminala. Motywy tego postępowania są różne, jednak sprowadzają się zawsze do jednego: chcemy wycisnąć z systemu więcej. Znaleźliśmy lepsze sterowniki do karty graficznej, albo program, który wymagał skompilowania. Ściągnęliśmy ładniejszy zestaw ikon do naszego ulubionego środowiska graficznego. Problem może być (pozornie ;-)) trochę bardziej złożony: zaszła potrzeba przeniesienia/zmiany/wysłania miliona plików z różnych katalogów o danej nazwie lub formacie. Podejmujemy więc mniej lub bardziej udane próby przeklejania gotowych kawałków skryptów i poleceń ze Stack Overflow i wujka Google.

Ciężkie początki… ;-)
Bezmyślnie wklejane gotowce rozwiązują jednak dosyć wąską grupę problemów, a my chcemy móc samodzielnie rozwiązywać własne…

Jak zostać ninją

Podstawową umiejętnością potrzebną do sprawnego poruszania się w Linuksie jest umiejętność czytania. Linux stara się z nami komunikować, przekazuje na terminal masę informacji i porad, a ignorowanie ich sprawia, że dłużej szukamy rozwiązania.

Chyba wiem, o co ci chodzi...
Chyba wiem, o co ci chodzi…

Co mamy czytać, aby móc samodzielnie rozwiązywać bardziej skomplikowane problemy? Gdzie znajdziemy aktualne źródła wiedzy? Odpowiedź w przypadku użytkowników Linuksa jest tylko jedna:

RTFM – Read This F…riendly Manual

Linux dysponuje dziesiątkami tysięcy stron podręcznika systemowego man, który służy pomocą w każdej popularnej, pełnowymiarowej1 dystrybucji Linuksa. Porządny pakiet instaluje własne strony podręcznika man, więc baza jest bardzo bogata. Zdarza się także czasami, że nasz manual w systemie dzięki nieżyjącemu już Projektowi Tłumaczenia Manuali i jego kontunuatorom jest zupełnie po polsku. W ogólnym przypadku zbytnio się na to jednak nie nastawiajmy. Podstawowe użycie ogranicza się do polecenia:

man [komenda]

Warto wypróbować polecenie poprzez man man, który zawiera instrukcję korzystania. Jak można zauważyć, man, analogicznie do tradycyjnych podręczników, dzieli się on na rozdziały2:

  1. Programy i komendy powłoki
  2. Wywołania systemowe
  3. Funkcje bibliotek (strefa programisty ;-))
  4. Pliki specjalne
  5. Formaty plików & wszystko o /etc/passwd
  6. Gry
  7. Różności
  8. Komendy administratora systemowego

Początkowo w manual będziemy wczytywać się raczej „na ślepo” i bez problemu przeniesie nas on do strony, o którą nam chodzi. Rozróżnianie na rozdziały przydaje się później, kiedy chcemy zaznaczyć, że przy wyszukiwaniu dokumentacji chodzi nam na przykład o funkcję języka C, a nie wbudowane polecenie basha, czyli wtedy, kiedy wyszukiwane polecenie występuje w róznych kontekstach:

Różne oblicza read

Wtedy rozdział naprawdę zaczyna mieć znaczenie… Jak wyszczególnić man-owi że chodzi nam przykładowo o wywołanie systemowe? Poprzedzamy szukaną komendę numerem rozdziału:

man 2 read

Podręcznik po polsku, podręcznik po angielsku

Jak wspomnniałam wcześniej, strony man-a w języku polskim się zdarzają. Jest to skutek posiadania w systemie pakietu man-pages-pl/manpages-pl i z reguły bardzo pomaga użytkownikom mniej oswojonym z językiem angielskim. Zazwyczaj polski jest w systemach instalowanych z polską wersją językową domyślnym językiem man-a3. Niestety, doświadczenie wykazuje, że niektóre strony w języku polskim są przestarzałe i nie zawierają opisu np. wszystkich dostępnych przełączników w poleceniu, albo funkcji języka C (na co natknęłam się kiedyś osobiście pracując nad studenckimi projektami z programowania systemowego w Linuksie). W takim wypadku używamy musimy poinstruować man-a, że zależy nam na innej wersji językowej używając jednej z dwóch wersji:

man -L c [polecenie]
man --locale=c [polecenie]

Dlaczego akurat c? Jest to standaryzowany, domyślny skrót języka en_us.utf8 dla każdego Linuksa. Nic nie stoi na przeszkodzie, żeby zamiast c na systemach anglojęzycznych wpisać sobie pl, żeby upewnić się, czy dobrze zrozumieliśmy angielską instrukcję, czy też jakiś inny język, jeśli mamy zainstalowany stosowny pakiet.

Poruszanie się do stronach

Strony podręcznika systemowego man potrafią być naprawdę długie (przykładowo man do Basha mieści się na 42 stronach A4). Przeglądanie całej takiej strony w poszukiwaniu jednego przełącznika może być bardzo czasochłonne, nie mówiąc już o fakcie, że w takiej lawinie tekstu najprawdopodobniej i tak go przeoczymy. W takiej sytuacji, aby uprościć nawigację, pomogą nam klawisze:

  • /[slowo] oraz nN, żeby przeszukiwać wystąpienie danego słowa, odpowiednio, do przodu i do tyłu,
  • g oraz G, aby szybko przenieść się, kolejno, na początek lub koniec strony,
  • q, aby daną stronę zamknąć,
  • Strzałki lub scroll – aby stronę przewinąć.

K jak keyword, czyli nie wiem, czego szukam

Sytuacja, w której wiemy, czego szukamy i jakie polecenie rozwiąże nam konkretny problem jest względnie prosta. Problem zaczyna się w momencie, kiedy jesteśmy w sytuacji: „wiem, że to polecenie dotyczy X, ale nie mam bladego pojęcia, jak może się nazywać”. W tym momencie do akcji powinien wkroczyć:

man -k [słowo_kluczowe}

Dobre słowo kluczowe powinno wskazać nam grupę poleceń i funkcji, które mają z tematem najwięcej wspólnego i drastycznie zawęzić nam grupę do dalszych przeszukiwań. ;-)

Nie ma man-a! Co robić? Jak żyć?

Napisałam wyżej, że strony podręcznika man powinien instalować każdy „porządny” program. Czasami jednak zdarza się, że po wpisaniu man [polecenie] wyskakuje nam No manual entry, albo strona wygląda na niezbyt pomocną. Należy się wtedy pochylić nad paroma kwestiami:

  • Czy wyszukiwany program jest zainstalowany?
  • Czy strony podręcznika są zainstalowane? Standardowy man pozwala na przeglądanie stron programów fizycznie zainstalowanych na dysku. Ponadto, istnieją programy, których strony podręcznika man są oddzielnym pakietem – w takim wypadku warto sprawdzić, czy nie ma w repozytoriach pakietu o nazwie: [program]-doc lub [program]-docs.
  • Czy to, co wyszukujemy jest na pewno programem? Istnieje kilkadziesiąt poleceń, które nie są samodzielnymi programami, a wbudowanymi poleceniami powłoki (Basha) i nie posiadają oddzielnej dokumentacji. Zawierają się one wszystkie w manualu do Basha oraz stronie zatytułowanej BASH_BUILTINS, która w sekcji NAME będzie mieć kilkadziesiąt nazw oddzielonych przecinkiem. Wygodniejszym sposobem przeszukiwania instrukcji do takich poleceń jest help [polecenie]

Jeśli stwierdziliśmy, że dany program na pewno nie posiada stron mani nie jest Bashowym poleceniem wbudowanym, to zawsze pozostaje nam wywołanie pomocy programu. Nawet jeśli twórcy naszego programu byli na tyle leniwi, że nie przygotowali oddzielnych stron podręcznika, to zazwyczaj użyli bibliotek, które opisują parametry i sposób obsługi swojego programu. Tradycyjnie dostaniemy się do nich poprzez:

[program] -h
[program] --help

Może także zdarzyć się wersja [program] -help, chociaż do najelegantszych, moim zdaniem, nie należy4.

Podsumowanie

Sztuką w nauce Linuksa jest nie tyle znajomość wszystkich komend i parametrów, co wiedza GDZIE i JAK szybko dotrzeć do interesującego nas kawałka wiedzy. Z dnia na dzień będzie okazywało się, że musimy szukać coraz mniej, a każde nowe polecenie będzie do opanowania dzięki wyćwiczonym wcześniej schematom. I tego Wam (oraz sobie) życzę i zachęcam do samodzielnego przećwiczenia rozwiązań z tego posta. :)


  1. Istnieje wiele obrazów dystrybucji dla których priorytetem jest niewielki rozmiar systemu (chociażby PuppyLinux), w których strony podręcznika man nie występują jako instalowane fizycznie na dysku – kwestia oszczędności miejsca. 
  2. Nie wszystkie rozdziały mogą występować w każdej dystrybucji, ponadto man w konkretnym systemie może mieć także dodatkowe rozdziały i podrozdziały, np. 3pm do modułów Perla, lub 3x do biblioteki ncurses. 
  3. Jest to efekt ustawienia zmiennej środowiskowej $LANG i/lub $LC_MESSAGES, ciekawskich odsyłam do przyjrzenia się wynikowi wywołania polecenia locale a także man 5 locale
  4. W klasyczych bibliotekach parsujących parametry istnieje rozróżnienie na opcje krótkie (shortopt), składające się z pojedynczego myślnika i litery (np. -a, oraz opcje długie (longopt), składające się z dwóch myślników i słowa (np. --interval, inny sposób parsowania jest dozwolony, ale mało naturalny (zawsze trafię na niego za trzecim razem ;-)).