【Linux学习笔记】7:命令搜索命令whereis与which

时间:2021-02-28 17:02:18

命令搜索命令只能去搜索系统命令,而不能搜索那些我们自己建立的文件。

whereis搜索命令所在路径及帮助文档所在位置

whereis [-b -m] 命令名

选项:-b只查找执行文件,-m只查找帮助文件。

[root@bogon ~]# whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

可以看到ls命令的执行文件是在/bin/下,所以它是所有用户都能执行的命令。后面的两个文件是它的帮助文档的绝对路径。

[root@bogon ~]# whereis -b ls
ls: /bin/ls
[root@bogon ~]# whereis -m ls
ls: /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

which还能查看到命令的别名

[root@bogon ~]# which ls
alias ls='ls --color=auto'
/bin/ls

这说明ls命令支持颜色显示,它的颜色显示方案默认是auto(普通文件是黑的,目录文件是蓝的,执行文件是绿的等)。
【Linux学习笔记】7:命令搜索命令whereis与which

不是所有的命令都有别名,对没有别名的命令,which就只能看到命令的执行文件的路径了。

[root@bogon ~]# which pwd
/bin/pwd

不是所有的命令都能找到可执行文件,如用whereis来看一下cd命令。

[root@bogon ~]# whereis cd
cd: /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz

cd这样的命令是Linux的shell(Linux操作系统和用户交互所必须的东西)的内置命令,它是shell自带的,所以不需要在Linux系统中有执行文件。也就是说通过whereis与which看到的命令都是外部的。

用which也是找不到的,如下。

[root@bogon ~]# which cd
/usr/bin/which: no cd in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

但是可以看到一堆目录,关于它的解释如下。
在Linux中要想执行路径,就需要绝对路径,本来执行ls是要这样写的:

[root@bogon ~]# /bin/ls
anaconda-ks.cfg install.log install.log.syslog

但是这样很不方便,系统提供了一个叫PATH的环境变量(系统搜索命令的路径,用冒号分隔),当执行ls时,系统会去上面的路径中搜索是否有这样的脚本或执行文件,找到了就会执行它。用户通过设置环境变量,来更好的运行进程。

[root@bogon ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

因为有PATH的存在,所以系统命令是可以不打绝对路径的。如果是自己写的程序,执行时就需要绝对路径,否则就需要放在PATH所记录的路径中去。