命令搜索命令只能去搜索系统命令,而不能搜索那些我们自己建立的文件。
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(普通文件是黑的,目录文件是蓝的,执行文件是绿的等)。
不是所有的命令都有别名,对没有别名的命令,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所记录的路径中去。