在工作生产环境中,定位、搜索、查找文件是经常用到的操作,本篇文章将对用到的相关命令进行介绍和说明。
which
查看可执行文件的位置。which 是通过PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件
whereis
定位可执行文件、源代码文件、帮助文件在文件系统中的位置,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s),和locate命令一样,借助数据库进行查找,速度快,但有延迟性。
locate
依据名字查找文件或目录。locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。因此,我们在用locate查找文件时,有时会找到已经被删除的数据;或者刚刚建立的文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。整个locate工作其实是由4部分组成的:
/usr/bin/updatedb: 主要用来更新数据库/usr/bin/locate: 二进制命令文件/etc/updatedb.conf:updatedb的配置文件/var/lib/mlocate/mlocate.db: 存放文件信息的数据库文件
locate命令支持通配符和正则表达式,常见选项和用法如下:
| 选项 | 功能 |
|---|---|
-b, --basename
|
只打印名称与PATTERNs匹配的文件 |
-c, --count
|
只打印匹配到的文件数目,而不是文件名本身 |
-e, --existing
|
只打印在调用locate时存在的文件 |
-i, --ignore-case
|
当进行文件模式匹配时,忽略大小写 |
-l, --limit, -n LIMIT |
当成功匹配到LIMIT数量的文件时,退出 |
-r, --regexp REGEXP |
查找一个基本的模式匹配REGEXP |
find
find命令是最常用的文件搜索和查找命令,功能强大,选项众多,支持多种类别的查找
| 选项 | 功能 |
|---|---|
-name ’字串’ |
查找文件名匹配所给字串的所有文件,字串内可用通配符*, ?, []。 |
- iname ’字串’ |
忽略大小写查找 |
-gid n |
查找属于ID号为n的用户组的所有文件。 |
-uid n |
查找属于ID号为n的用户的所有文件。 |
-group ’字串’ |
查找属于用户组名为所给字串的所有的文件。 |
-user ’字串’ |
查找属于用户名为所给字串的所有的文件。 |
-empty |
查找大小为0的目录或文件。 |
-path |
’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符。 |
-perm |
权限 查找具有指定权限的文件和目录,MODE精确匹配,/MODE 位或匹配,-MODE 位与匹配 |
-size n |
默认精确匹配,+n 匹配大于n的,-n匹配小于n的 |
-type x |
查找类型为x的文件 |
- amin [+-]n |
查找n分钟时[前后]被访问过的所有文件。 |
- atime [+-]n |
查找n天时[前后]被访问过的所有文件。 |
- cmin [+-]n |
查找n分钟时[前后]文件状态被修改过的所有文件。 |
- ctime [+-]n |
查找n天时[前后]文件状态被修改过的所有文件。 |
- mmin [+-]n |
查找n分钟时[前后]文件内容被修改过的所有文件。 |
- mtime [+-]n |
查找n天时[前后]文件内容被修改过的所有文件。 |
- 实例
查找/var目录下不属于root,lp,gdm的所有文件
find /var/ -type f ! -user lp ! -user root ! -user gdm