I know that when you are on shell, the only commands that can be used are the ones that can be found on some directory set on PATH. Even I don't know how to see what dirs are on my PATH variable (and this is another good question that could be answered), what I'd like to know is:
I come to shell and write:
$ lshw
I want to know a command on shell that can tell me WHERE this command is located. In other words, where this "executable file" is located?
Something like:
$ location lshw
/usr/bin
Anyone?
This question is related to
linux
shell
command-line
An alternative to type -a
is command -V
Since most of the times I am interested in the first result only, I also pipe from head. This way the screen will not flood with code in case of a bash function.
command -V lshw | head -n1
PATH
is an environment variable, and can be displayed with the echo command:
echo $PATH
It's a list of paths separated by the colon character ':
'
The which
command tells you which file gets executed when you run a command:
which lshw
sometimes what you get is a path to a symlink; if you want to trace that link to where the actual executable lives, you can use readlink
and feed it the output of which
:
readlink -f $(which lshw)
The -f
parameter instructs readlink
to keep following the symlink recursively.
Here's an example from my machine:
$ which firefox
/usr/bin/firefox
$ readlink -f $(which firefox)
/usr/lib/firefox-3.6.3/firefox.sh
In the TENEX C Shell, tcsh, one can list a command's location(s), or if it is a built-in command, using the where
command e.g.:
tcsh% where python
/usr/local/bin/python
/usr/bin/python
tcsh% where cd
cd is a shell built-in
/usr/bin/cd
~$ echo $PATH
/home/jack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
~$ whereis lshw
lshw: /usr/bin/lshw /usr/share/man/man1/lshw.1.gz
Like this:
which lshw
To see all of the commands that match in your path:
which -a lshw
The Korn shell, ksh
, offers the whence
built-in, which identifies other shell built-ins, macros, etc. The which
command is more portable, however.
Source: Stackoverflow.com