查找和命令有关的文件


一条命令相关的文件有二进制可执行文件、配置文件、帮助说明文间、源代码文件、共享库文件。我们经常需要修改一些命令服务的配置文件, 每个linux发行版放置配置文件的目录可能会有些差异,那么怎么找到一条命令的这些文件呢? 这就是通过which和whereis这两个命令了。

1.which命令

回到顶部

我们知道linux下的命令分为内置命令和外置命令,内置命令作为shell功能的一部分,可执行程序代码都存放在/bin/bash中。 而外置命令有自己对应的可执行程序文件,那么怎么知道一条命令的可执行程序文件存放在哪里呢? 我们可以通过which、whereis、type这些命令查找命令的可执行文件路径。
which命令查找外置命令的可执行文件。 which命令从$PATH环境变量指定的目录中查找命令的可执行文件,还记得$PATH环境变量环境变量吧? 我们可以通过echo命令显示$PATH环境变量的值:

              root@peter-VirtualBox:~# echo $PATH
              /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
            
目录之间用:号分隔。关于环境变量和$PATH的更多内容请参考: 什么是linux命令 linux shell变量与环境变量
which命令常用格式如下:
              [root@initroot ~]# which [-a] command
            
-a选项将$PATH目录中可以找到的所有命令文件均列出,而不是第一个被找到的命令文件。
有时候$PATH目录中可能有不止一个文件和命令匹配,which默认只列出第一个找到的可执行文件,加上-a选项可以列出所有的可执行文件。 查找ifconfig命令的可执行文件路径:
              [root@initroot ~]# which ifconfig
              /sbin/ifconfig
            
which本身也是一条命令,用which查找自己的可执行文件路径:
              root@peter-VirtualBox:~# which which
              /usr/bin/which
            
查找history命令的可执行文件路径:
              root@peter-VirtualBox:~# which history
              root@peter-VirtualBox:~#
            
没有任何反应,因为history是shell内置命令,可执行代码在shell的可执行文件/bin/bash中, 没有与之匹配的可执行文件存在,所以就没有任何输出了。

which命令用于查找命令文件的路径,which根据PATH环境变量所规定的路径,查找可执行文件的文件名,如果找到,默认显示第一个找到的文件名位置。 加上-a选项可以列出所有找到的同名可执行文件。
例如想知道cp这个命令的位置,可以输入如下命令查找:

              root@peter-VirtualBox:~# which cp
              /bin/cp
            

2.whereis命令

回到顶部

whereis命令搜索和命令相关的文件。 whereis命令也是用来搜索命令的可执行文件的,不过whereis不止搜索命令的可执行文件,也会搜索和命令相关帮助说明文件、配置文件、命令共享库文件、命令的源码文件等。 which命令是到$PAHT环境变量指定的目录中搜索文件,而whereis命令也是到系统指定的某些目录中搜索文件,whereis搜索的目录主要包括三种:
bin:可执行文件所在的目录;
man:帮助说明文件man page所在的目录;
src:源码文件所在的目录。
可通过-l选项查看whereis命令搜索的具体目录。
whereis命令常用格式如下:

              [root@initroot ~]# whereis [-bmsu] 文件或目录名
            
选项与参数:
-l :列出whereis命令的搜索目录;
-b :只找命令的二进制可执行文件binary
-m :只找命令的帮助说明文件man page
-s :只找命令的源码文件
-u :搜寻不在上述三种目录中的其他特殊文件
通过whereis -l查看whereis命令的搜索目录:
              root@peter-VirtualBox:~# whereis -l
              bin: /usr/bin
              bin: /usr/sbin
              bin: /lib/x86_64-linux-gnu
              ...省略...
            
查找ifconfig命令相关的文件:
              root@peter-VirtualBox:~# whereis ifconfig
              ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
            
查找passwd命令相关的文件:
              root@peter-VirtualBox:~# whereis passwd
              passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz /usr/share/man/man1/passwd.1ssl.gz            
            
只列出和passwd命令相关的说明文件:
              root@peter-VirtualBox:~# whereis -m passwd
              passwd: /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz /usr/share/man/man1/passwd.1ssl.gz
            

which命令根据PATH环境变量所规定的路径,查找可执行文件的文件名。
whereis命令也是在特定的目录下查找命令的可执行文件位置,whereis不仅查找可执行文件位置,同时也会查找源文件和命令说明手册的位置。

              peter@peter-VirtualBox:~$ whereis ls
                ls: /bin/ls /usr/share/man/man1/ls.1.gz
                peter@peter-VirtualBox:~$ whereis pwd
                pwd: /bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz
              

可通过-l选项列出whereis的查询目录:

              peter@peter-VirtualBox:~$ whereis -l
                bin: /usr/bin
                bin: /usr/sbin
                bin: /lib/x86_64-linux-gnu
                ...省略...
              

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读