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.
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:
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).
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ą.
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).
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.