# 3.3 Man Pages Linux comes built in with a whole range of manual pages on three very important locations. - The ```man``` command mostly known as the **man pages** - Documentation folder ```/usr/share/doc``` - And the command help interface```--help``` or ```-h```. ### Man pages Here is an online browser version of the man pages in Linux: The ```man``` pages can be used with any other command as well as much more in depth information. Let's go through some examples: ```bash man find ``` This will put you in the manual page for the ```find command```. You can navigate the man page with the arrow keys page-up and page-down, and see what all the options are or use ```/``` to search for keywords. Press ```q``` to Quit. Very important cheat key combination is **shift-G**; this takes you to the bottom of the file and you can check the examples. When you forgot something you can search all ```man``` pages for key words to research or figure somethings out. We can use the ```man -k``` option. ```bash man -k lvm ``` Result should look similiar to this: ```bash [fons@rhcsa media]$ man -k lvm lvm (8) - LVM2 tools lvm-config (8) - Display and manipulate configuration information lvm-dumpconfig (8) - Display and manipulate configuration information lvm-fullreport (8) - (unknown subject) lvm-lvpoll (8) - (unknown subject) lvm.conf (5) - Configuration file for LVM2 lvm2-activation-generator (8) - generator for systemd units to activate LVM volumes on boot lvmcache (7) - LVM caching lvmconfig (8) - Display and manipulate configuration information lvmdiskscan (8) - List devices that may be used as physical volumes lvmdump (8) - create lvm2 information dumps for diagnostic purposes lvmpolld (8) - LVM poll daemon lvmraid (7) - LVM RAID lvmreport (7) - LVM reporting and related features lvmsadc (8) - LVM system activity data collector lvmsar (8) - LVM system activity reporter lvmsystemid (7) - LVM system ID lvmthin (7) - LVM thin provisioning lvmvdo (7) - EXPERIMENTAL LVM Virtual Data Optimizer support perlvms (1) - VMS-specific documentation for Perl pvcreate (8) - Initialize physical volume(s) for use by LVM pvremove (8) - Remove LVM label(s) from physical volume(s) ``` This just listed all the information connected to ```lvm```. This is a method of managing disks and disk space. More on that later. You can see numberings with manual files; these are their section numbers. All manual pages are devided using this system. | Section | Topic | |:-:|:-| |1| Commands available to users | |2| Unix and C system calls | |3| C library routines for C programs | |4| Special file names | |5| File formats and conventions for files used by Unix | |6| Games | |7| Word processing packages | |8| System administration commands and procedures | So if we want all the manual pages for the the **System Administrator Commands and Procedures** we can do: ```bash man -k lvm | grep 8 ``` ```bash [fons@rhcsa]$ man -k lvm | grep 8 lvm (8) - LVM2 tools lvm-config (8) - Display and manipulate configuration information lvm-dumpconfig (8) - Display and manipulate configuration information lvm-fullreport (8) - (unknown subject) lvm-lvpoll (8) - (unknown subject) lvm2-activation-generator (8) - generator for systemd units to activate LVM volumes on boot lvmconfig (8) - Display and manipulate configuration information lvmdiskscan (8) - List devices that may be used as physical volumes lvmdump (8) - create lvm2 information dumps for diagnostic purposes lvmpolld (8) - LVM poll daemon lvmsadc (8) - LVM system activity data collector lvmsar (8) - LVM system activity reporter pvcreate (8) - Initialize physical volume(s) for use by LVM pvremove (8) - Remove LVM label(s) from physical volume(s) ``` And now we only got the result for section 8 manuals. Sometimes when new commands are installed, the manual database is not updated immediately and so you will not be able to find the correct man pages. Running the ```mandb``` command without any input will update the manual database for you, making whatever manuals you couldn't find available for you if present at all. ```bash mandb ``` You can run the command now as **root**. You should see results of adding and removing things to the database. ### ```/usr/share/doc``` This directory holds all the documentation provided by the software and Linux itself. Let's check the documentation of ```bash-completion```: ```bash /usr/share/doc/bash-completion ``` Let's check the contents: ```bash ls -l ``` Or the alias ```bash ll ``` The contents are expected to look like this: ```bash [root@rhcsa bash-completion]# ll total 120 -rw-r--r--. 1 root root 302 Apr 27 2017 AUTHORS -rw-r--r--. 1 root root 86473 Jul 1 2017 CHANGES -rw-r--r--. 1 root root 7055 Apr 27 2017 CONTRIBUTING.md -rw-r--r--. 1 root root 13944 May 11 2019 README.md -rw-r--r--. 1 root root 2874 Jul 1 2017 bash_completion.txt ``` Here you can read about the Bash completion and changes and such. If you get stuck, or want to know more, you can get information here ### ```--help``` Nearly all commands in Linux have a ```--help``` or ```-h``` to show you the basic functions of an command. Let's see how some of this works. Type the following command: ```bash find --help ``` It will look like this. ```bash [root@rhcsa ~]# find --help Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] default path is the current directory; default expression is -print expression may consist of: operators, options, tests, and actions: operators (decreasing precedence; -and is implicit where no others are given): ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2 EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2 positional options (always true): -daystart -follow -regextype normal options (always true, specified before other expressions): -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE -nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN -readable -writable -executable -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N -used N -user NAME -xtype [bcdpfls] -context CONTEXT actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ; -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ; Report (and track progress on fixing) bugs via the findutils bug-reporting page at http://savannah.gnu.org/ or, if you have no web access, by sending email to . ``` So let's say you want to find files by size and you do now know how; by using ```find --help``` we see the ```-size``` switch. And now we know how to perform this search by size. Let's check the ```man``` page for more information. ```bash man find ``` In here press ```/``` to search and type ```size``` press enter and you are at the section on size searches. Let's try to look for a file that is larger then 100 Megabyte. ```bash find / -size +100M ``` ```bash [root@rhcsa ~]# find / -size +100M /proc/kcore find: '/proc/28358/task/28358/fd/5': No such file or directory find: '/proc/28358/task/28358/fdinfo/5': No such file or directory find: '/proc/28358/fd/6': No such file or directory find: '/proc/28358/fdinfo/6': No such file or directory /usr/lib64/firefox/libxul.so ``` So that are some results. In actuality, there are only 2 results. Let's clean up the result by removing the error messages. ```bash find / -size +100M 2>/dev/null ``` The result should now look as following: ```bash [root@rhcsa ~]# find / -size +100M 2> /dev/null /proc/kcore /usr/lib64/firefox/libxul.so ``` So what did we add here?
We added ```2> /dev/null```. With that, we did a redirect ```>``` on stream ```2``` to a file location called ```/dev/null```. This is a location on the disk that does not really exist hardware wise, which basicly means it's a data based black hole. The error output got picked up and send to nowhere. We can check the actual size of the file with the command: ```bash du -h /usr/lib64/firefox/libxul.so ``` Result: ```bash [root@rhcsa ~]# du -h /usr/lib64/firefox/libxul.so 201M /usr/lib64/firefox/libxul.so ``` Awsome we figured it out! +10 skill points