12 Linux Which Command, Whatis Command, Whereis Command Examples

by Himanshu Arora on April 23, 2013

This Linux tutorial will explain the three “W” commands. The three “W”s are whatis, whereis and which commands.

You already know how to use find command to efficiently fo find a file.

Now, these three W commands will help you to locate more stuff from Linux command line.

I. Linux whatis Command

Whatis command is helpful to get brief information about Linux commands or functions. Whatis command displays man page single line description for command that matches string passed as a command line argument to whatis command. Whatis command searches for string in its index databases which is maintained by mandb program. Whatis command picks short description of NAME section of man page of command that matches to input given to the whatis command.

Whatis provides several command line options to help user in getting brief information of specific Linux commands as per their need or interest.

Syntax:

$ whatis [-options]

For example, here is the output of whatis command, when it is run without any option.

$ whatis write
write (1)            - send a message to another user
write (2)            - write to a file descriptor

It displays brief information about “write” from man pages.

1. Get information from specific sections of man pages using -s option

If we want to get Linux command information from specific section of man pages, then we can provide sections list using “-s or —sections or –section” option. It will restrict whatis command to display brief information from specified man page section only.

$ whatis -s "1","2" open
open (1)             - start a program on a new virtual terminal (VT).
open (2)             - open and possibly create a file or device

It displays open command and function brief information from man page sections 1 and 2.

$ whatis -s "2" open
open (2)             - open and possibly create a file or device

It displays open function brief information from man page section 2.

2. Search information through wild-cards using -w option

If we want to search Linux commands or functions information using wild card, then whatis command gives “-w or –wildcard” option. It will make your search specific as per user’s need.

$ whatis -w 'ab*'
abort (3)            - cause abnormal process termination
abs (3)              - compute the absolute value of an integer

It displays brief information of Linux commands or functions which start from “ab”.

$ whatis -w 'ab?'
abs (3)              - compute the absolute value of an integer

It displays brief information of Linux commands or functions which start from “ab” and followed by any single character.

3. Search information through regular expressions using -r option

If we want to search Linux commands or functions information using regular expressions, then whatis command gives “-r or –regex” option. It will give flexibility to customize your search for Linux commands or functions throughout the Linux system.

$ whatis -r '^ab'
abort (3)            - cause abnormal process termination
abs (3)              - compute the absolute value of an integer

It displays brief information of Linux commands or functions which start from “ab”.

$ whatis -r 'ab$'
anacrontab (5)       - configuration file for anacron
baobab (1)           - A graphical tool to analyse disk usage
crontab (1)          - maintain crontab files for individual users (Vixie Cron)
crontab (5)          - tables for driving cron
fstab (5)            - static information about the filesystems
inittab (5)          - init daemon configuration
swab (3)             - swap adjacent bytes
tc-stab (8)          - Generic size table manipulations

It displays brief information of Linux commands or functions which ends with “ab”.

4. Disable trimmed output using -l option

Generally whatis command trims long output of Linux commands or functions information to avoid “Not good” output display on terminal that is going beyond screen. To allow whatis command to show complete output on screen, “-l or –long” option can be used.

$ whatis ssh-import-id
ssh-import-id (1)    - retrieve one or more public keys from a public keyserver (Launchpad.net by default) and append them to the current user's authorized_keys file (or some other specifie...

It displays trimmed output of brief information of Linux command.

$ whatis -l ssh-import-id
ssh-import-id (1)    - retrieve one or more public keys from a public keyserver (Launchpad.net by default) and append them to the current user's authorized_keys file (or some other specified file)

It displays complete output of brief information of Linux command.

5. Restrict search up to specified path using -M option

By default, whatis command uses $MANPATH environment variable. But whatis provides “-M or –manpath” option to restrict search up to specified path of man pages.

$ whatis -M /usr/share/man hexdump
hexdump (1)          - ASCII, decimal, hexadecimal, octal dump

It displays brief information of Linux hexdump command from man pages available at path /usr/share/man.

$ whatis -M /usr/man hexdump
hexdump: nothing appropriate.

It could not find brief information of Linux hexdump command from specified path /usr/man.

II. Linux whereis Command

Whereis command is helpful to locate binary, source and manual pages of commands in the Linux system. It is very simple utility and provides several options which are given below with examples.

Syntax:

$ whereis [-options]

For example, whereis command is run without any option.

$ whereis open
open: /bin/open /usr/share/man/man1/open.1.gz /usr/share/man/man2/open.2.gz

It locates binary, source and man pages of “open” command and here it displayed paths where binary, man pages of open command is available in the system.

6. Locate binaries using -b option

If we want to locate binary of Linux command, use “-b” option.

$ whereis -b whereis
whereis: /usr/bin/whereis /usr/bin/X11/whereis

It locates binary of “whereis” command and displays paths where binary of command is available in the system.

7. Locate man pages for a command using -m option

If we want to locate man page of Linux command, use “-m” option.

$ whereis -m whereis
whereis: /usr/share/man/man1/whereis.1.gz

It locates man page of “whereis” command and displays path where man page of command is available in the system.

8. Locate source of a command using -s option

If we want to locate source of Linux command, use “-s” option.

$ whereis -s whereis
whereis:

It locates source of “whereis” command, but source of “whereis” command does not exist in the system, so it did not display path for source of command in the system.

9. Locate unusual entries using -u option

This option is something different that searches for unusual entries. These entries are those command whose source, binary or man page does not exist in the system as per options “[-bms]” specified along with “–u”.

$ whereis  -m  -u wcgrep
wcgrep:

It checks if specified command (i.e. wcgrep) man page does not exist in the system. Whereis command with options “-m and -u” locates for the commands in the system whose man page does not exist.

$ whereis  -m  -u grep
$

Here, whereis command with same options is applied on “grep” command whose man page exists in the system, so whereis returned nothing and exits normally.

10. Locate binaries in a specified path using -B option

If user wants to search for binary and wants to limit the scope of search for whereis command up to specified path, then use “-B” option.

$ whereis -B /bin -f for_loop
for_loop: /bin/for_loop

It locates binary of “for_loop” user program from path “/bin”.

$ whereis -B /usr -f open
open: /usr/share/man/man1/open.1.gz /usr/share/man/man2/open.2.gz

If open command’s binary is not found at specified path, then it is not shown but whereis command by default searches for other types (i.e. man page and source) of specified command (i.e. open) and displays them if found.

11. Locate man pages with limited scope using -M option

If user wants to search for man pages and wants to limit the scope of search for whereis command up to specified path, then use “-M” option.

$ whereis -M /usr/share/man/man1 -f open
open: /bin/open /usr/share/man/man1/open.1.gz
$ whereis -M /usr/share/man/man2 -f open
open: /bin/open /usr/share/man/man2/open.2.gz
$ whereis -M /usr/share/man/man3 -f open
open: /bin/open

Here, it is observed that whereis command is displaying man page of “open” command which is available in specified path only. But, whereis command by default searches for other types (i.e. binary and source) of specified command (i.e. open) and displays them if found.

III. Linux which Command

Which command is very small and simple command to locate executables in the system. It allows user to pass several command names as arguments to get their paths in the system. “which” commands searches the path of executable in system paths set in $PATH environment variable.

Syntax:

$ which [-option]

For example,

$ which ls gdb open grep
/bin/ls
/usr/bin/gdb
/bin/open
/bin/grep

It locates command names – “ls”, “gdb”, “open” and “grep” specified as arguments to “which” command and displays paths of each executable where it exists in the system.

12. Display all the paths using -a option

“which” command gives option “-a” that displays all paths of executable matching to argument.

$ which echo
/usr/sbin/echo

Above will search display the executable “echo” from all paths set in $PATH environment variable and displays the first path where echo executable is found. It may be case that executable is placed at other paths of $PATH environment variable as well. To get all paths where executable is present in the system, “-a” option can be used.

$ which -a  echo
/usr/sbin/echo
/bin/echo

Linux Sysadmin Course Linux provides several powerful administrative tools and utilities which will help you to manage your systems effectively. If you don’t know what these tools are and how to use them, you could be spending lot of time trying to perform even the basic administrative tasks. The focus of this course is to help you understand system administration tools, which will help you to become an effective Linux system administrator.
Get the Linux Sysadmin Course Now!

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! – 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

{ 17 comments… read them below or add one }

1 Jalal Hajigholamali April 23, 2013 at 9:56 am

Hi,

Thanks a lot,
Simple, beautiful and very useful commands for admin
Thanks again

2 Anthony April 23, 2013 at 10:15 am

very useful,I enjoy all the insights you send, i learn a lot from these e-mail. Thanks.

3 Júlio Hoffimann Mendes April 23, 2013 at 3:05 pm

Another alternative is the `apropos’ tool.

Nice post,
Júlio.

4 Ehan Chang April 23, 2013 at 4:26 pm

very helpfull, thanks.

5 Donald Ellis April 23, 2013 at 5:40 pm

Nice treatment, however I found some problems with whereis (which looks really useful and has some really fine options).

On Mac OSX 10.8.3, the man page has this comment:

The historic flags and arguments for the whereis utility are no longer available in this version.

It shows a date of 1995, indicating that the flags you mentioned may have been dropped around that time or before (or maybe other flags were present before then and the ones you show added much later).

A query of Homebrew indicated no alternative formulas from that source. Any suggestions how to install a fully functional version of whereis on a current (since 1995) Mac system?

A check of Ubuntu 10.04 indicate a similar version to what you have, however an OpenBSD 4.8 installation indicates only the -1 flag is available.

6 Donald Ellis April 23, 2013 at 5:43 pm

I have long loved the which command, especially the -a option, which is very frustrating when I find a system that doesn’t have -a. To remedy this, I found this replacement for which, to install in your ~/bin or wherever else you have write (and execute) access:

: /bin/sh
# which – which command in $PATH would be executed (from K&P)

opath=$PATH
PATH=/bin:/usr/bin

all=no
case $# in
0)
echo ‘usage: which [-a] command’ 1>&2
exit 2
;;
1)
;;
*)
case $1 in
-a)
all=yes
shift
;;
esac
;;
esac

code=1
for i in `echo $opath | sed ‘s/^:/.:/
s/::/:.:/g
s/:$/:./
s/:/ /g’`
do
if [ -x $i/$1 ]
then
echo $i/$1
case $all in
yes)
code=0 ;; # found one – try for more
*)
exit 0 ;; # found it
esac
fi
done
exit $code # not found

7 jordie April 23, 2013 at 7:36 pm

nice

8 Brian April 23, 2013 at 9:26 pm

Nice work!

9 Ashwin April 23, 2013 at 11:49 pm

Thanks.

10 Ashok April 24, 2013 at 2:07 am

I love this…Thankyou !

11 mohsen zamani April 24, 2013 at 2:42 am

tanx alot . very usefull

12 SureshG April 24, 2013 at 2:42 am

As ususal, simply good.

13 ratna April 26, 2013 at 12:00 pm

explanation with example …its really very good for understanding…Thanx

14 Joan May 9, 2013 at 8:19 am

You can use locate instead of whereis.

15 kaleksanadrov May 17, 2013 at 1:03 am

Thanks!

Useful and good structured information :)

16 Selvam August 15, 2013 at 8:37 pm

Very useful… Thanks!

17 Patrick January 29, 2014 at 1:02 pm

Nice, I was always confusing those command’s functions. Whatis shows where on the manual that word was mentioned. Whereis gives me options to find binaries, sources and man pages. And Which shows me where exactly is located that command.

Thank you very much Arora!

Leave a Comment

Previous post:

Next post: