Tips en Trucs 2025

De langste man-pagina zoeken

Zoals je wellicht weet, worden de man-pagina's van alle opdrachten in Linux opgeslagen in de map /usr/share/man/. De man-pagina's zijn gecomprimeerd in gzip-formaat (.gz). Heb je ooit willen weten welke opdracht de grootste man-pagina op je Linux-systeem heeft? Met grootste bedoelen we het aantal regels in een man-pagina. Het gaat niet om de bestandsgrootte of het aantal pagina's wanneer deze wordt afgedrukt.

We kunnen de grootste en langste man-pagina's vinden door het aantal regels en woorden erin te tellen. De wc opdracht wordt gebruikt om het aantal regels en woorden in een bestand te tellen. Om het aantal regels in de man-pagina van de ls opdracht te tellen, voer je het volgende uit:

dany@pindabook:~$ man ls | wc -l
243

Om het aantal woorden in de ls man-pagina te tellen, gebruikt je de -w optie:

dany@pindabook:~$ man ls | wc -w
1026

Het tellen van het aantal regels in elke man-pagina is echter vervelend, tijdrovend en waarschijnlijk een domme manier om de langste man-pagina's in het hele Linux-systeem te vinden. We kunnen dit eenvoudig vinden met behulp van een for-lus:

dany@pindabook:~$ for i in {1..8}; do f=/usr/share/man/man$i/$(ls -1S /usr/share/man/man$i/ | head -n1); printf "%s: %9d\n" "$f" $(man "$f" 2>/dev/null | wc -l); done
/usr/share/man/man1/guestfish.1.gz:      9097
/usr/share/man/man2/perf_event_open.2.gz:      2269
/usr/share/man/man3/Sys::Guestfs.3pm.gz:      6542
/usr/share/man/man4/md.4.gz:       808
/usr/share/man/man5/smb.conf.5.gz:      9751
/usr/share/man/man6/kpat.6.gz:        78
/usr/share/man/man7/qemu-qmp-ref.7.gz:     19264
/usr/share/man/man8/dnsmasq.8.gz:      2078

Deze opdracht analyseert de man-mappen (1 tot 8) en geeft de langste man-pagina in elke map weer. Afhankelijk van het aantal man-pagina's op jouw systeem kan dit enkele minuten duren.

Zoals je kunt zien, is de langste man-pagina op mijn systeem qemu-qmp-ref.7.gz met in totaal 19264 regels.

Je kunt dit controleren met de wc opdracht:

dany@pindabook:~$ man qemu-qmp-ref | wc -l
19264

Als je de langste man wilt vinden op basis van het aantal woorden in plaats van het aantal regels, voer dan het volgende uit:

<dany@pindabook:~$ for i in {1..8}; do f=/usr/share/man/man$i/$(ls -1S /usr/share/man/man$i/ | head -n1); printf "%s: %9d\n" "$f" $(man "$f" 2>/dev/null | wc -w); done
/usr/share/man/man1/guestfish.1.gz:     46930
/usr/share/man/man2/perf_event_open.2.gz:     12919
/usr/share/man/man3/Sys::Guestfs.3pm.gz:     40261
/usr/share/man/man4/md.4.gz:      8107
/usr/share/man/man5/smb.conf.5.gz:     66757
/usr/share/man/man6/kpat.6.gz:       279
/usr/share/man/man7/qemu-qmp-ref.7.gz:     85903
/usr/share/man/man8/dnsmasq.8.gz:     20931 /p>

Langste man-pagina

Controleer of het correct is met behulp van de opdracht:

dany@pindabook:~$ man qemu-qmp-ref | wc -w
85903

Met een script

Ziehier een eenvoudig BASH-script om de langste man-pagina in een Linux-systeem te vinden.

Maak met een teksteditor (bv. nano) een script aan, bijvoorbeeld met de naam longman.sh (afkorting van longest man page):

dany@pindabook:~$ nano longman.sh

Voer de volgende regels in:

#!/usr/bin/env bash
cd /usr/share/man/
for fn in $(find -maxdepth 1 -type d -iname 'man[1-8]'); do
 fn=${fn#./}
 ls -1Sp "$fn" | head -n 10 | sed -Ee "s,^,$PWD/$fn/," | while read manpage; do
   shortname=$(echo "$manpage" | sed -e "s,$PWD/man,," -e "s,/,"$'\t'",")
   printf '%9d\t%s\n' $(man "$manpage" 2>/dev/null | wc -l) "$shortname"
 done
done | sort -n

Als je het aantal woorden in plaats van het aantal regels wilt tellen, gebruik je wc -w in het bovenstaande script.

Het bovenstaande script neemt de top 10 in elke man-map, stelt een tabel samen en sorteert deze op het aantal regels. Het sluit ook alle genummerde secties 1-8 uit als deze NIET op het systeem aanwezig zijn.

Sla het script op (opslaan met Ctrl+o, daarna Return en afsluiten met Ctrl+x). Voer nu dit script uit om de langste man-pagina op jouw systeem te vinden:

dany@pindabook:~$ bash longman.sh  
      14       6       intro.6.gz
      78       6       kpat.6.gz
     186       4       initrd.4.gz
     232       4       radeon.4.gz
     236       4       lirc.4.gz
     283       4       wacom.4.gz
     342       4       fuse.4.gz
     404       4       libinput.4.gz
     458       4       intel.4.gz
     472       4       console_codes.4.gz
     524       4       st.4.gz
     647       2       seccomp.2.gz
     726       2       bpf.2.gz
     735       7       tcp.7.gz
     747       2       open.2.gz
     808       4       md.4.gz
     835       2       futex.2.gz
     838       7       capabilities.7.gz
     845       2       fcntl.2.gz
     893       2       clone.2.gz
     901       7       X.7.gz
     987       7       cgroups.7.gz
    1141       2       keyctl.2.gz
    1185       7       gitcore-tutorial.7.gz
    1200       2       ptrace.2.gz
    1281       2       seccomp_unotify.2.gz
    1449       8       ip-link.8.gz
    1534       3       CGI.3pm.gz
    1581       8       smartctl.8.gz
    1610       8       pppd.8.gz
    1704       3       IO::Socket::SSL.3pm.gz
    1730       7       ossl-guide-migration.7ssl.gz
    1752       8       mdadm.8.gz
    1893       5       terminfo.5.gz
    1921       3       Date::Manip::DM5.3pm.gz
    2023       8       net.8.gz
    2078       8       dnsmasq.8.gz
    2121       8       mount.8.gz
    2269       2       perf_event_open.2.gz
    2338       8       lsof.8.gz
    2449       5       btrfs.5.gz
    2508       3       DBI::Changes.3pm.gz
    2587       8       iptables-extensions.8.gz
    2629       3       DBI::DBD.3pm.gz
    3154       5       sudoers.5.gz
    3252       1       gpg.1.gz
    3288       3       Sys::Virt::Domain.3pm.gz
    3396       3       XML::Twig.3pm.gz
    3405       5       systemd.exec.5.gz
    3579       7       bpf-helpers.7.gz
    3890       1       rsync.1.gz
    4125       1       xorriso.1.gz
    4256       8       nft.8.gz
    4374       1       qemu-system.1.gz
    4494       5       systemd.network.5.gz
    4970       1       bash.1.gz
    5024       5       org.freedesktop.systemd1.5.gz
    5497       3       DBI.3pm.gz
    5547       1       git-config.1.gz
    5883       5       nm-settings.5.gz
    5883       5       nm-settings-nmcli.5.gz
    6009       1       curl.1.gz
    6138       1       virsh.1.gz
    6542       3       Sys::Guestfs.3pm.gz
    6546       1       xterm.1.gz
    7620       5       nm-settings-dbus.5.gz
    8268       7       qemu-storage-daemon-qmp-ref.7.gz
    9097       1       guestfish.1.gz
    9751       5       smb.conf.5.gz
   10973       3       Net::SSLeay.3pm.gz
   19264       7       qemu-qmp-ref.7.gz
   19946       7       systemd.directives.7.gz

De langste man-pagina wordt onderaan weergegeven. Het getal in het midden geeft de sectie van de man-pagina aan. Als je de langste man-pagina bovenaan wilt weergeven, gebruik dan sort -rn in het script.

Voor meer informatie over man-pagina's voer je het volgende opdracht uit:

dany@pindabook:~$ man man

MAN(1)                                     Hulpprogramma's paginaopmaker                                     MAN(1)

NAAM
      man - an interface to the system reference manuals

SAMENVATTING
      man [man options] [[section] page ...] ...
      man -k [apropos options] regexp ...
      man -K [man options] [section] term ...
      man -f [whatis options] page ...
      man -l [man options] file ...
      man -w|-W [man options] page ...

BESCHRIJVING
      man  is  the  system's  manual  pager.   Each  page argument given to man is normally the name of a program,
      utility or function.  The manual page associated with each of these arguments is then found  and  displayed.
      A  section,  if provided, will direct man to look only in that section of the manual.  The default action is
      to search in all of the available sections following a pre-defined order (see DEFAULTS), and  to  show  only
      the first page found, even if page exists in several sections.

      De  onderstaande  tabel  toont  de  sectie-nummers  van de handleiding, gevolgd door de paginasoorten die ze
      bevatten.

      1   Executable programs or shell commands
      2   System calls (functions provided by the kernel)
      3   Library calls (functions within program libraries)
      4   Special files (usually found in /dev)
      5   File formats and conventions, e.g. /etc/passwd
      6   Games
Manual page man(1) line 1 (press h for help or q to quit)

Voor een man pagina's overzicht:

dany@pindabook:~$ man -k man
accessdb (8)         - dumps the content of a man-db database in a human readable format
addgroup (8)         - gebruikers of groepen toevoegen of manipuleren
adduser (8)          - gebruikers of groepen toevoegen of manipuleren
apropos (1)          - namen en beschrijvingen van de man-pagina's doorzoeken
apt (8)              - commandoregelinterface
apt-get (8)          - APT gereedschap voor het behandelen van pakketten -- commandoregelinterface
apt-patterns (7)     - Syntaxis en semantiek van apt-zoekpatronen
catman (8)           - create or update the pre-formatted manual pages
dpkg-source (1)      - gereedschap voor het manipuleren van een Debian broncodepakket (.dsc)
fakeroot-sysv (1)    - voert een commando uit in een omgeving die root-privileges fingeert voor het manipuleren v...
...
xfs_quota (8)        - manage use of quota on XFS filesystems
xfs_rtcp (8)         - XFS realtime copy command
xfs_spaceman (8)     - show free space information about an XFS filesystem
xman (1)             - Manual page display program for the X Window System
xmlcatalog (1)       - Command line tool to parse and manipulate XML or SGML catalog files.
xmllint (1)          - command line XML tool
xorriso (1)          - creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions.
xrandr (1)           - primitive command line interface to RandR extension
xsetwacom (1)        - commandline utility to query and modify wacom driver settings.
xsm (1)              - X Session Manager

Opruimen

Het enige wat we moeten verwijderen, is het zelf gemaakte script.

dany@pindabook:~$ rm longman.sh