Linux中对文件查找的实现是使用find命令。
Find命令类似于:whatis 和 locate
Whatis 命令:依赖于数据库,非实时查找,结果非精确,查找速度快,模糊查找,whatis查找的数据库,是在规定时间内更新数据库,或者手动更新数据库(updatedb)。
Find 命令:实时查找,精确匹配,速度慢。
Find的使用格式为:
find [options] [查找位置] [查找条件] [处理动作]
查找路径:如果省略的话,为当前目录,也可以用 ”find .”
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示到桌面
查找条件:
-name “文件名称”:对文件名作精确查找,支持使用 globbing(字符匹配)
例子:find / -name “history”
-iname “文件名称”:查找时不区分字符大小写
例子:查看下/tmp都有哪些文件
图中可以看到有两个文件名为:text和Text的,我们试着用-iname选项去查找,
find /tmp -iname “text”
看到了吧,不区分大小写,两个文件都被匹配到了。
-user username :根据属主查找
例子:查找以xiezhao为属主的文件,在根(/)目录下:
find / -user "xiezhao"
-group groupname:根据属组查找
例子:查找根目录下以xiezhao为属组的文件;
find / -group "xiezhao"
-uid UID :根据UID查找。
例子:先查看任意一个用户的UID,然后用此用户的UID进行查找,但是为了方便和更清楚的 来看到效果,我们就查看下上面的xiezhao用户的UID来看搜索到的文件是否相同。
使用tail命令进行查看:tail -3 /etc/passwd
再根据UID:502进行查找:find / -uid 502
-nouser :查找没有属主的文件
验证下:stat /home/123456
-nogroup:查找没有属组的文件
组合条件:
-a :与,或者且,表示同时满足两个或者两个以上的条件,可以省略。
例子:我们查找既没有属主也没有属组的文件,如图:
-o :或。
例子:查找属主为xiezhao的文件,或者属组为xiezhao的文件
-not :!,非,取反
例子:查找/tmp下非“t”字母结尾的文件
非A,并且 非B:非(A或者B)
非A,或 非B :非(A且B) -type :根据文件类型查找。
-type d :查找目标为目录。
下面的依此类推
f :普通文件
b :块设备文件
c :字符文件
l :链接文件
P :管道文件
S :套接字文件
-size :根据文件大小查找
-size [+|-] 单位 (M, K,G)
例子:-size +2M 查找大于2MB
-size - 2M 查找1MB以下
-size 2M 查找大于1M小于2M
根据时间戳查找:
以天为单位(time):
-atime
-atime +# 表示(#+1)天之外被访问过。
剩下的依此类推:
-atime - # 表示 # t天 之内被访问过。
-atime # 表示大于等于 #天,小于#+1天被访问过。
-mtime :用来搜索显示被修改过的文件。
-ctime :用来搜索显示被改变过的文件。
以分钟为单位(min) 用法和上面类似,就不做一一的举例。
-amin -mmin -cmin
根据权限查找:
-perm [+|-] MODE
+MODE:任何一类用户任何一位权限匹配 (或)常用于查找某类用户的某特定权限是否存在。
例子:查询下/tmp下其他用户可以有读权限的文件:
- MODE:每类用户的任何一位都匹配 (与)每类用户的指定要检查的权限位都匹配,至少两个 权限一起匹配。
处理动作:
默认为:-print :打印在标准输出上
-ls :以长格式输出各文件的信息
-exec COMMAND {}\; :对查找到的文件执行指定的命令。Find把查找到的所有文件一次性的传递给 -exec 所指定的命令
-ok COMMAND {}\; :交互式的显示
find .... |xargs COMMAND
xargs一次接收一批结果。
举例使用:
以上为find命令的一些基本以及常用的选项。