在工作生产环境中,定位、搜索、查找文件是经常用到的操作,本篇文章将对用到的相关命令进行介绍和说明。
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