which、type、whereis、locate几个命令的区别与联系

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

对于Linux系统来说,我们经常面对的是字符界面环境。很多时候,我们无法很直观地搜索、查找到我们需要的文件。另外,每个版本Linux系统的文件放置路径也不尽相同。此刻,文件的搜索、查询命令命令就显得格外重要。为了降低学习、理解成本,我们可以将以下6个命令统一起来理解、记忆:which、type、whereis、locate、find、grep。


which(“查找可执行文件”) which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

参数

说明

-a

选项all的缩写,将所有PATH目录中可以找到的命令均列出,而不仅仅是第一个

-V

或者v,显示可执行文件的版本信息

【例1】查找文件、显示命令useradd、which、cat的路径。

[root@geeklp-test ~]# which adduser
/usr/sbin/adduser
[root@geeklp-test ~]# which -a which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
    /usr/bin/alias
    /usr/bin/which
/usr/bin/which
[root@geeklp-test ~]# which -v pwd
GNU which v2.20, Copyright (C) 1999 - 2008 Carlo Wood.
GNU which comes with ABSOLUTELY NO WARRANTY;
This program is free software; your freedom to use, change
and distribute this program is protected by the GPL.

说明:which是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!


type type命令用来显示指定命令的类型 ( alias:别名。 keyword:关键字,Shell保留字。 function:函数,Shell函数。 builtin:内建(内嵌)命令,Shell内建命令。 file:文件,磁盘文件,外部命令。 unfound:未找到)

参 数

说明

-t

显示“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”、“别名”或者“内嵌指令”

-p

如果给出的指令为外部指令,则显示其绝对路径

-a

在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名

【例2】分别使用type命令的t、p、a三个选项及无选项来展示输出结果。

[root@geeklp-test ~]# type -t ls
alias
[root@geeklp-test ~]# type -t tree
file
[root@geeklp-test ~]# type -p tree
/usr/bin/tree
[root@geeklp-test ~]# type -p pwd
[root@geeklp-test ~]# type -a which
which 是 `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 的别名
which 是 /usr/bin/which
[root@geeklp-test ~]# type cd
cd 是 shell 内嵌

说明:命令tree是我后来安装的,这是一个外部命令。由于pwd是一个内建命令,所以选项p也显示不出其路径。


whereis whereis命令用于在特定目录中查找符合条件的文件。whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。 whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。

参数

说明

-b

只搜索二进制文件

-B

<目录> 定义二进制文件查找路径

-m

只搜索 man 手册

-M

<目录> 定义 man 手册查找路径

-s

只搜索源代码

-S

<目录> 定义源代码查找路径

-f

终止 <目录> 参数列表

-u

搜索不常见(不是b,m,s选项指定的类型)记录

-l

输出有效查找路径

【例3】whereis命令的部分选项展示。

[root@geeklp-test ~]# whereis -b tree
tree: /usr/bin/tree
[root@geeklp-test ~]# whereis -m tree
tree: /usr/share/man/man1/tree.1.gz
[root@geeklp-test ~]# whereis tree
tree: /usr/bin/tree /usr/share/man/man1/tree.1.gz
[root@geeklp-test ~]# whereis -u tree
tree: /usr/bin/tree /usr/share/man/man1/tree.1.gz

locate locate命令是一个外部命令,在最小化安装的CentOS7中不能直接使用,需要安装之后才能使用。 【例4】安装locate工具。

[root@geeklp-test ~]# yum -y install mlocate
[root@geeklp-test ~]# updatedb

locate命令用于查找符合条件的文档,该命令会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录,比find快很多。因为该命令是从数据库内查找,并不是在磁盘上直接查找。

参数

说明

-i

忽略大小写差异查找

-r

可跟正则表达式的显示方式

【例5】用locate命令查找包含geeklp的文件或目录。

[root@geeklp-test ~]# touch love-geeklp-best
[root@geeklp-test ~]# updatedb
[root@geeklp-test ~]# locate geeklp
/root/geeklp-best
/root/geeklp-dir
/root/geeklp-ivan
/root/geeklp-test
/root/love-geeklp-best

说明:本例中,文件love-geeklp-best是我刚刚创建的,所以必须要用命令updatedb更新一下数据库文件才能够查找到相关内容。


查找命令还有find与grep,这两个命令功能比较强大,在后续的文章中会继续探讨。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏bboysoul

linux下重命名脚本推荐

11820
来自专栏一“技”之长

Git命令集十三——快照操作 原

    Git工具中提供了一个stash命令,这个命令的作用是创建快照。快照主要的用途是将当前未更新到缓存区的修改进行入栈保存,创建快照后,Git的状态会变回上...

10220
来自专栏web编程技术分享

第八节 - 部门管理模块(编写PHP程序)

340100
来自专栏python3

python之读写文件

在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后...

11110
来自专栏月牙寂

swarm源码分析(3)---manage cluster

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

28450
来自专栏云计算教程系列

如何使用RVM在FreeBSD 10.1上安装Ruby on Rails

Ruby on Rails,简称RoR,是一个用Ruby编写的非常流行的全栈Web应用程序开发框架。它允许您快速开发符合MVC(模型 - 视图 - 控制器)模式...

13110
来自专栏pangguoming

angular之interceptors拦截器

<!DOCTYPE html> <html ng-app="nickApp"> <head> <meta charset="UTF-8"> <m...

42150
来自专栏calmound

LINUX常用命令

修改密码: passwd 查看当前目录下的文件 ls 查看当前用户信息 whoami *可以匹配0个或任意多个字符 ?可以匹配1个字符 cat filename...

36880
来自专栏vue

将java项目打包成jar文件并在cmd运行

27830
来自专栏算法channel

Python|模块,包,标准模板

01 .py文件-模块 一个.py文件就称之为一个模块,Module,模块使用的最大好处是大大提高了代码的可维护性。 当然,还提高了代码的复用性。 使用模块...

36950

扫码关注云+社区

领取腾讯云代金券