Linux 文件查找
locate:根据全系统文件数据库进行,属于模糊查找,并且是非实时的
示例:
linlin@ubuntu:~/linlin/text$ touch locate.test
linlin@ubuntu:~/linlin/text$ locate locate.test /home/linlin/linlin
/home/linlin/linlin
/home/linlin/linlin/code
/home/linlin/linlin/test
/home/linlin/linlin/word
/home/linlin/linlin/code/.sum.sh.swp
/home/linlin/linlin/code/a.out
/home/linlin/linlin/code/file.txt
/home/linlin/linlin/code/test3.c
通过示例,我们可以看到,在创建了一个名为locate.test文件后,马上使用locate进行查找,但却并没有
找到此文件,由于locate是根据全文件系统数据库进行查找,到此数据库并非每时每刻都在不断更新,所
以并没有找到locate.test文件,但却将所有文件名和locate.test有一点相似的文件都查了出来,表示
locate属于模糊查找
locate查找的优点是速度快
find:实时查找,精确查找,并且支持众多查找标准
通过遍历指定目录下的所有文件,与目标文件匹配,因此find查找速度相对于locate更慢
使用:find 查找路径 查找标准 查找到后的处理动作
当查找路径省略时,默认为当前目录
查找标准默认为指定路径下的所有文件
处理操作默认为打印到标准输出
linlin@ubuntu:~/linlin/text$ touch find.test
linlin@ubuntu:~/linlin/text$ find find.test
find.test
匹配标准:
-name 文件名:根据文件名精确匹配,严格区分大小写
支持文件名通配符,* ? []
-iname 文件名:根据文件名精确匹配,但不区分大小写
-regex MODE:基于模式实现文件名匹配
-user 用户名:根据文件属主匹配
-group 组名:根据文件属组匹配
当用户,或用户组被删除后,就无法根据属主名,属组名查找,这是就需要用到-uid -gid
-uid UID:根据UID匹配
-gid GID:根据GID匹配
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
-type 文件类型:根据文件类型查找
-size [+|-]数字单位:根据文件大小查找
单位:k M G,默认单位为字节
[+|-]: 表示大于或小于
查找时,范围是指定数值到指定数值减一个单位长度的数值之间
组合查找条件:
-a:与
-o:或
-not:非
默认为与操作
根据时间戳查找:
时间的某一刻,单位为天
-mtime 数字:根据修改时间
-ctime 数字:根据改变时间
-atime 数字:根据访问时间
时间段
[+|-]:+ 表示指定时间之前,- 表示指定时间到当前时间
单位为分钟
-mmin, -cmin, -amin
根据文件权限查找:
-perm -MODE:查找时每一组权限都必须精确匹配
-perm /MODE:查找时只要有一组权限匹配即可
执行动作:
-print:显示
-ls:类似于ls -l命令,显示查找到的每一个文件的具体信息
在需要对查找到的文件执行其他命令时:
-ok COMMAND {} ;
-exec COMMAND {} ;
{}: 表示引用查找到的文件的文件名
which 选项 COMMAND:寻找可执行文件
-a:将所有查找到的命令都列出来,而不是只显示第一个找到的命令
whereis 文件类型 目标文件:寻找特定文件
-b:只找二进制文件
-m:只找在帮助文件manual路径下的文件
-s:只找源文件
-u:没有帮助文件的文件