man-db
Komanda man ima jedno ograničenje: moraš znati ime komande. A najčešća situacija je obrnuta — znaš šta hoćeš da uradiš, ali ne znaš kako se to zove.
Za to postoji pretraga po ključnoj reči. Nju obezbeđuje paket man-db, koji na većini distribucija upravlja celokupnom dokumentacijom.
$ apropos "disk space" df (1) - report file system disk space usage du (1) - estimate file space usage ncdu (1) - NCurses Disk Usage
Nisi znao da postoji ncdu, a sad znaš. To je cela poenta ove
stranice.
Tri komande, jedan alat
man-db donosi tri komande koje rade nad istom bazom:
apropos— traži ključnu reč u opisima svih man stranicawhatis— ispisuje jednorednи opis poznate komandemandb— gradi i osvežava tu bazu
Prve dve imaju i oblik kroz man, i to je ono što ćeš češće
sretati u tuđim primerima:
$ man -k disk # isto što i apropos disk $ man -f ls # isto što i whatis ls
apropos — kad ne znaš ime komande
$ apropos compress bzip2 (1) - a block-sorting file compressor gzip (1) - compress or expand files xz (1) - Compress or decompress .xz files zless (1) - file perusal filter for crt viewing of compressed text
Broj u zagradi je sekcija priručnika, i nije ukras. Ista reč često postoji u više sekcija:
$ apropos passwd passwd (1) - change user password passwd (5) - the password file chpasswd (8) - update passwords in batch mode
Sekcija 1 je korisnička komanda, sekcija 5 je format fajla, sekcija 8 je administratorska komanda. Kad ti treba baš određena:
$ man 5 passwd
Filtriranje po sekciji
Pretraga po opštoj reči ume da vrati stotinak redova. Sužavanje:
$ apropos -s 1 network | head arp (8) - manipulate the system ARP cache ip (8) - show / manipulate routing, network devices
Za više sekcija odjednom: apropos -s 1,8 network.
Kako se tumači ono što upišeš
Ovo redovno iznenađuje. apropos traži deo reči, ne celu
reč:
$ apropos -s 1 dir | wc -l 73
Sedamdeset tri rezultata, jer se „dir" nalazi u „directory", „redirect",
„indirect". Za tačno poklapanje postoji -e:
$ apropos -e dir dir (1) - list directory contents
Više reči se podrazumevano tretira kao „bilo koja od njih":
$ apropos copy file # sve gde se javlja "copy" ILI "file" $ apropos -a copy file # samo gde se javljaju obe
Opcija -a je ono što najčešće želiš. Alternativa je navodnik
oko cele fraze, kao u prvom primeru na ovoj stranici — o razlici navodnika
piše na stranici
Džokeri i navodnici.
Podržani su i džokeri, uz -w:
$ apropos -w "ssh*" ssh (1) - OpenSSH remote login client ssh-add (1) - adds private key identities to the OpenSSH agent ssh-keygen (1) - OpenSSH authentication key utility
whatis — brza provera šta je nešto
$ whatis tee tee (1) - read from standard input and write to standard output and files
Razlika u odnosu na apropos: whatis traži samo po
imenu stranice i to tačno, dok apropos pretražuje i
opise.
Korisno kad naiđeš na nepoznatu komandu u tuđoj skripti, a ne želiš da otvaraš celu man stranicu. Radi i sa više argumenata:
$ whatis awk sed cut awk (1) - pattern scanning and text processing language sed (1) - stream editor for filtering and transforming text cut (1) - remove sections from each line of files
mandb — zašto je to baza, a ne pretraga
Ovde počinje ono što stranicu čini korisnom u praksi.
apropos ne pretražuje man stranice u trenutku kad je
pokreneš — to bi trajalo predugo. Umesto toga čita gotov indeks, koji stoji u
/var/cache/man:
$ ls /var/cache/man CACHEDIR.TAG index.db oldlocal
Ista logika kao kod locate i njegove
updatedb baze: brzo je, ali može biti zastarelo.
Kad instaliraš paket, njegove man stranice se pojave na disku odmah, ali u indeksu tek kad se on osveži. Zato ovo ume da se desi:
$ apropos nginx nginx: nothing appropriate. $ man nginx # a stranica postoji! NGINX(8) Maintenance Commands
Rešenje je osvežavanje indeksa:
$ sudo mandb Purging old database entries in /usr/share/man... Processing manual pages under /usr/share/man... 0 man subdirectories contained newer manual pages. 248 manual pages were added. 0 stray cats were added.
Na Debian i Ubuntu sistemima ovo se ionako radi automatski jednom dnevno.
Ako sistem nije bio uključen u to vreme — a serveri i kontejneri često
nisu — indeks kaska. Kad ti apropos tvrdi da nema ničega, prvo
pokreni mandb.
Poruka koja izgleda kao greška, a nije
$ apropos rutiranje rutiranje: nothing appropriate.
Opisi man stranica su na engleskom, bez obzira na to kako ti je podešen sistem. Traži na engleskom.
Kad ni to nije dovoljno: man -K
Veliko K traži kroz ceo tekst svih stranica, a ne samo
kroz jednoredne opise:
$ man -K "cannot allocate memory" --Man-- next: malloc(3) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
Nudi ti stranicu po stranicu. Sporo je — prolazi kroz hiljade fajlova — ali ponekad je jedini način da nađeš objašnjenje neke tačno određene poruke o grešci. Ostavi da radi i sačekaj.
Kombinacije sa drugim alatima
Rezultat apropos je običan tekst, pa se dalje obrađuje kao i
svaki drugi — o čemu ima više na stranici
Piping i redirekcija.
$ apropos . -s 1 | wc -l 1847
Tačka kao obrazac znači „bilo šta", pa ovo prebroji sve korisničke komande za koje na sistemu postoji dokumentacija.
Dvostepena pretraga, kad prvi rezultat vrati previše:
$ apropos -s 1 file | grep -i compress zless (1) - file perusal filter for crt viewing of compressed text
I ispis kroz pejdžer kad je spisak duži od ekrana:
$ apropos network | less
Radni tok koji vredi usvojiti
Ovako izgleda traženje rešenja bez otvaranja pretraživača:
$ apropos -a monitor process pidstat (1) - Report statistics for Linux tasks top (1) - display Linux processes $ whatis pidstat pidstat (1) - Report statistics for Linux tasks $ man pidstat
Tri koraka: pronađi kandidate, proveri koji od njih zvuči kao ono što ti treba, otvori dokumentaciju. Za razliku od odgovora sa foruma, ovo je uvek tačna verzija za sistem na kom radiš.
Kad dokumentacije uopšte nema
Na minimalnim instalacijama i u Docker kontejnerima man stranice se brišu da bi slika bila manja:
$ man ls This system has been minimized by removing packages and content that are not required on a system that users do not log into.
Na Ubuntu sistemima vraćaju se komandom:
$ sudo unminimize
Ako je u pitanju tuđi kontejner koji ne smeš da menjaš, gotovo svaka komanda ima i ugrađenu kratku pomoć:
$ ls --help | head -5
To nije zamena za man stranicu, ali obично sadrži spisak opcija — što je ono zbog čega je najčešće i otvaraš.
Kratka referenca
apropos rec— traži po opisu · isto:man -k recapropos -a rec1 rec2— moraju obe rečiapropos -e rec— tačno poklapanje, bez delova rečiapropos -w "obr*"— džokeri u obrascuapropos -s 1,8 rec— samo određene sekcijewhatis komanda— jednoredni opis · isto:man -fman -K "fraza"— pretraga kroz ceo tekst, sporosudo mandb— osveži indeksman 5 passwd— otvori stranicu iz određene sekcije
Vežba
Sve reši bez pretraživača, koristeći samo alate sa ove stranice:
- Pronađi komandu koja ispisuje koliko dugo sistem radi.
- Pronađi sve komande čiji opis sadrži i reč „user" i reč „group", isključivo u sekciji 8.
- Utvrdi šta je
getent, u jednom redu. - Prebroj koliko man stranica iz sekcije 5 postoji na tvom sistemu.
- Osveži indeks i uporedi broj iz prethodnog zadatka pre i posle.
Ako peti zadatak da isti broj, to znači da ti je baza bila ažurna — i to je uredan rezultat.
Čitanje same man stranice, njena struktura i sekcije objašnjeni su na stranici man, a detaljnija GNU dokumentacija na stranici info.
Cela lekcija je deo vodiča Linux osnove.
Comments
Post a Comment