Zdobywanie pomocy, czyli klasyczne RTFM

Największym problemem programisty czy administratora (programisty, bo w bashu da się pisać programy - skrypty, admina - bo ten powinien umieć się posłużyć konsolą) jest nie jak zrobić XXX, a gdzie i jak szukać informacji o XXX. Każdy, kto pisał programy czy mieszał w systemie przyzna, że zawsze da się samemu wymyślić algorytm/wpis w konfigu, pod warunkiem, że wiadomo, gdzie dostać informacje. W tym momencie sama kwestia jak schodzi na plan dalszy. Jeśli chodzi o pomoc do basha, to w linuksie jest z tym duuuużo lepiej niż w windzianej, pożal się Boże, "pomocy". Do tego służą strony man, info, a nawet wbudowane w powłokę polecenie help, że o dokumentacji poszczególnych programów rozprowadzanej w różnej formie nie wspomnę. Nie bój się nic, omówię wszystkie.

Strony man (manual)

To jest chyba największe i najlepsze źródło informacji o poleceniach i programach dostępnych pod linuksem. Chyba również historycznie najstarsze, nie licząc pomocy wbudowanej i tej dostarczanej w plikach tekstowych razem z programami (taka pomoc z oczywistych względów jest najstarsza). Cała idea sprowadza się do tego, że opisy wszystkich poleceń, jakie się da, są zebrane w jeden katalog (teraz kilka katalogów), a są wyświetlane przez jeden program we w miarę zunifikowanej formie. Nawet nie musisz pamiętać, w których katalogach szukać pomocy: man pamięta to w swoich ustawieniach. Ty musisz tylko wiedzieć, o jakim poleceniu chcesz czytać (choć kwestia szukania informacji jest również nieźle rozwiązana).
Najprostsze zastosowanie to man nazwa-polecenia. Polecam na dobry początek nieśmiertelne polecenie man man (poruszasz się kursorami góra/dół, ewentualnie jak nie działa, to enter o linię w dół, spacja o stronę w dół; wychodzisz wciskając literkę q; z grubsza rzecz biorąc man korzysta z less, który ma komendy podobne do vi-ajowych, więc warto się z vi zaznajomić, w szczególności polecam Kącik Vim-a). Dostaniesz nieco przydługawy opis polecenia man, ale za to znajdziesz tu totalnie wszystkie parametry, jakie są tylko potrzebne/przydatne/dostępne. Jeśli chcesz zostać w środowisku uniksowym, przędzej czy później będziesz musiał nauczyć się przebijać przez strony man. Lepiej prędzej, oszczędzi ci to nerwów związanych z szukaniem odpowiedniego narzędzia, a czytelnikom forów dyskusyjnych - czasu zużytego na czytanie twego posta. Ja sam do czytania man-ów stosuję metodę "czytaj krótki opis programu, potem przeglądaj możliwe przełączniki". Ty oczywiście możesz mieć własną, najważniejsze żeby była skuteczna.
Najprostsze użycie man-a nie jest jedynym, jakie da się zeń wycisnąć. Znana jest dość dobrze sytuacja, gdy chcesz poczytać manuala do funkcji printf (tak! na stronach man są opisy funkcji stosowanych w C/C++! to pełnoprawna pomoc programistyczna, równie obszerna i dokładna co pomoc do Visual C++ czy Borlanda). Wpisujesz man printf i co dostajesz? Opis polecenia systemowego printf. W un*xach często spotykaną praktyką jest nazywanie funkcji API i poleceń systemowych jedną nazwą, żeby nie musieć pamiętać dwukrotnie więcej nazw. Efektem ubocznym jednak jest kolizja nazw i stron podręcznika. Do tego wymyślono sekcje manuala:

  1. Komendy użytkownika
  2. Wywołania systemowe (funkcje API, dostępne pod Linuksem)
  3. Funkcje biblioteczne (dostępne w zasadzie w każdym kompilatorze)
  4. Urządzenia (katalog /dev/ itd.)
  5. Formaty plików (najczęściej pliki konfiguracji)
  6. Gry (klawiszologia Doom-a, podręcznik Half-Life'a, opisy questów do Baldur's Gate :-), u mnie puste :-] )
  7. Różne (często pomoc programisty, choć nie zawsze)
  8. Administracja systemem (programy do formatowania i skanowania dysku, zarządzanie kontami użytkowników i grupami i inne takie)

Co ciekawe, chyba w żadnym manualu do mana nie widziałem opisu tych sekcji. A wracając do naszego problemu, jak znaleźć funkcję printf? Musisz w poleceniu podać sekcje, jakie man ma przeszukać: man -S 2:3:7 printf (pod Linuksem, pod Solarisem tego nie ma). Program man będzie teraz szukał manuala dla printf w sekcjach 2, 3 i 7 (zgadnij, dlaczego wybrałem właśnie te sekcje?). Jest jeszcze metoda krósza, ale musisz dokładnie wiedzieć, w jakiej sekcji jest poszukiwany podręcznik. Nasz printf jest w trzeciej sekcji, wydamy więc polecenie man 3 printf. Tu niestety nie da się podać więcej niż jedną sekcję. (pod Solarisem musisz podać opcję -s: man -s 3 printf)
Mała dygresja odnośnie samych podręczników. Pewnie zauważyłeś na górze strony i na dole przy opisach spokrewnionych funkcji coś w stylu printf(3). Ta trójka w nawiasie to właśnie numer sekcji, w jakiej znajduje się manual do tej konkretnej funkcji, i to właśnie tę trójkę podaliśmy manowi w ostatnim poleceniu.
Polecenie man ma multum opcji, z których się dość rzadko korzysta. Jednak mimo tego jest parę fajnych przełączników: -a na ten przykład powoduje wyświetlanie po kolei wszystkich znalezionych stron man, dzięki czemu nie trzeba podawać sekcji, żeby znaleźć odpowiednią stronę podręcznika. Wystarczy, że wpiszesz man -a printf i dostaniesz po kolei printf-y po polsku (o ile są zainstalowane) i po angielsku, z obu sekcji (pierwszej i trzeciej).
Innym przydatnym przełącznikiem jest -K. Powoduje przeszukanie wszystkich stron manuala w poszukiwaniu słowa podanego dalej: man -K emacs wyświetli wszystkie man-y, w których wystąpiło słowo emacs. Nie polecam tej opcji zbyt często używać, bo takie szukanie może zająć sporo czasu. Szybsza jest opcja -k, wyszukująca w skróconym opisie danego słowa. Ale żeby ta ostatnia opcja zadziałała, najpierw musisz utworzyć bazę skrótowych opisów. Do tego służy polecenie makewhatis, które musisz wydać jako root. Od teraz możesz używać polecenia man -k szukane-jedno-slowo-kluczowe (czasem stosuje się zamiast man -k polecenie apropos, robiące dokładnie to samo, ale dłużej się piszące). Możesz również wyświetlić skrótowy opis polecenia wpisując whatis nazwa-bardzo-ciekawego-polecenia (zamiast whatis możesz wpisać man -f).
To by było na tyle, jeśli chodzi o man(1).

Strony info

Obok stron man pojawiły się jakiś czas temu strony info. W zasadzie to taki manual, tylko że odrobinę usprawniony: posiada coś takiego jak hiperlinki (odnośniki). Zamiast wychodzić z manuala i wpisywać ponownie polecenie wystarczy będąc na odpowiednim odnośniku wcisnąć [Enter]. Chociaż może i jest to wygodniejsze, to ja tego jakoś nie polubiłem (ja tu się usprawiedliwiam, dlaczego nie opiszę tego szerzej). Najprostszą metodą na nauczenie się posługiwania pomocą info jest polecenie info info, analogiczne jak przy manie (na marginesie dodam, że można poczytać o jednym systemie pomocy w drugim, tzn. man info i info man). Wychodzisz z pomocy info przez wciśnięcie literki q (skąd my to znamy?).
I chociaż strony info mają zastąpić strony man, o czym można przeczytać w niektórych manualach, to wątpię, żeby komenda man zniknęła w najbliższym czasie ze środowiska linuksowego. Za to razem nieźle się uzupełniają.

Pomoc podręczna programów

Praktycznie każdy program ma swoją pomoc podręczną, dzięki czemu nie trzeba sięgać do manuali czy stron info, żeby znaleźć jeden mały przełącznik. Najczęściej wystarczy dodać --help, -help, -h lub -? do komendy. Świetnym przykładem jest ls --help czy man --help. Dodawanie takiej krótkiej pomocy nie jest obowiązkowe czy objęte jakimś konkretnym standardem, ale najczęściej stosownym przełącznikiem jest --help, rzadziej te dwa najkrótsze. Warto wypróbować wszystkie, a jak to nie zadziała, to możesz spróbować wpisać nazwę programu bez żadnych parametrów (jeśli program nie zwraca sterowania do powłoki, znaczy nie kończy się, to spróbuj wcisnąć CTRL+D, a jak to nie zadziała, to CTRL+C; co one robią - wyjaśnię na następnej stronie).

Wbudowana pomoc basha

Obiecałem przecież omówić wszystko. Część poleceń, które wydajesz systemowi, jest wbudowana w powłokę. Czasem zdarza się, że jest do nich manual, czasem strona info. Tak w zasadzie, to nie dotyczą one właśnie tego polecenia, tylko osobnego programu o takiej nazwie. A czemu to jest osobny program? Bo widzisz, to tylko fanaberia autora powłoki, że wbudował to polecenie w shella. Czasem chodzi o przyspieszenie działania, czasem o to, żeby nie trzeba było zwiększać ilości procesów (która może mieć na niektórych systemach nałożone górne ograniczenie). W każdym razie na ogół wbudowane polecenia odpowiadają dość dokładnie oryginałom zewnętrznym, ale niekoniecznie. Żeby się dowiedzieć, czym się różnią, wystarczy wpisać help nazwa_polecenia. W bashu samo help wypisuje wszystkie polecenia wbudowane. Tutaj też czasem warto zajrzeć.
Wartym jeszcze polecenia poleceniem :-) jest type, które wypisze wiadomości o położeniu polecenia. Może podać, że polecenie jest aliasem (później wyjaśnię), funkcją (-> alias), poleceniem wbudowanym, plikiem, zahaszowanym plikiem (znaczy zapamiętane jest jego położenie, nie trzeba już go szukać) albo nie znaleziono polecenia.


Dalsza część kursu
Poprzednia część kursu
Jadłospis