千家信息网

文件搜索者--find命令详解

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,1. 文件查找:在linux系统中由于文件的众多,往往需要在众多的文件当中查找某一个文件,如果时间一长,很难记得文件存放至何处,不过,这一点,你不比担心,因为开发人员为我们提供了强大的文件搜索工具,下
千家信息网最后更新 2025年11月07日文件搜索者--find命令详解

1. 文件查找:


linux系统中由于文件的众多,往往需要在众多的文件当中查找某一个文件,如果时间一长,很难记得文件存放至何处,不过,这一点,你不比担心,因为开发人员为我们提供了强大的文件搜索工具,下面将介绍两款常用的文件查找工具locate,和find,这两款查找工具只能是从文件系统中查找不能在内存当中查找,因为内存是没有文件系统的。


2. locate命令:


locate命令是基于数据库来查找文件的,命令查找速度快,一般查找跟新慢的,名字变化少的,如:配置文件,可以用locate查找,因为数据库需要更新,所以就会有一点延迟,locate命令一般是每天更新一次数据库,所以有可能最新创建的文件找不到,或者刚刚删除的文件任在数据库当中。可以使用updatedb更新数据库信息,数据库文件:/var/lib/mlocate/mlocate.db

locate 用法:

locate 选项 参数

选项:

-e 排除在寻找范围之外。

-q 安静模式,不显示任何错误信息

-n 最多显示#个输出

-r 支持正则表达式

-i 忽略大小写

-b 基名

示例:

[root@cnode6_8 etc]# locate -r'\


3. find命令


用来在指定目录下查找文件。功能十分强大,可以根据各种条件进行查找,如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法:

find 选项 查找路径 查找条件 处理动作

选项:

根据文件名和iNode查找:

-name 支持使用通配符* ? [] [^] 根据文件名查找

-iname 不区分大小写的根据文件名查找

-inum # 根据#指定的iNode号查找

-samefile 相同iNode号相同的文件,也就是硬链接

-link # 链接数为#的文件

-regex 使用正则表达式匹配文件

根据文件属组和属主查找:

-user 根据属组为指定用户UID查找文件

-grop 查找属组问指定组的文件

-gid根据gid号码查找文件

-nouser查找没有属主的文件

-nogrop查找没有属组的文件

根据文件类型:

-type

f 普通文件

d 目录文件

l 符号链接文件

s 套接字文件

b 块设备文件

c 字符设备文件

p 管道文件

组合条件:

-a 与

-o 或

-not !非

根据文件大小查找:可以查找指定范围大小(带单位k,M,G)的文件

-size [+|-]#unit

# unit (#-1,#] 区间前开后闭

-#unit [0.#-1]

+#unit (#,)

根据时间戳查找:可以以天或分钟为单位

[+|-]#参数意义:#:[#,#+1],+#:[#+1, ], -# [0,#)

-atime 访问时间

-mtime 修改时间

-ctime 改变时间

以分钟为单位的三种时间

-amin

-mmin

-cmin

根据权限查找:-perm [/-] mode

mode 精确权限匹配

/mode 每一位只要有一类匹配的就行

-mode 每一类必须同时拥有mode指定的权限

0 表示不关注,权限随意

查找完成的处理动作:

-ls 类似于ls -l 命令可以显示文件详细列表

-delete 删除查找到的文件

-fls 查找到的文件都以长格式形式保存在文件当中

-ok command {} \;对查找到的文件执行command之前都会交互式的询问用户

-exec command {} \;类似于上一个命令,不需要交互,直接默认执行

排除查找的目录:

-prune(修减)不包含的文件或目录

补充:

关于时间大小方面参数数字的意义和示例:如查找文件大小为12k,表示查找的文件是大于等于11k,小于12k,是指定的值减1得到的,+6k表示查找文件7k(大于6k)到正无穷

-6k表示05k(包含5k,小于6k)的文件


4. find查找文件实例:


1、查找/var目录下属主为root,且属组为mail的所有文件

[root@centos7 ~]# find /var/ -user root-group mail -ls201334650   0 drwxrwxr-x   2 root     mail   50 Aug 13 12:54/var/spool/mail205749525   0 -rw-------   1 root     mail   0 Aug 13 12:54 /var/spool/mail/root


2、查找/var目录下不属于rootlpgdm的所有文件

[root@centos7 ~]# find /var/    -not \( -user root -o -user lp -o -user gdm\)


3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

[root@centos7 ~]# find /var/ -mtime -7 -not\(  -user root -o -user postfix  \)


4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

[root@centos7 ~]# find / -nouser -nogroup-atime -7


5、查找/etc目录下大于1M且类型为普通文件的所有文件

[root@centos7 ~]# find /etc/ -size +1M-type -ffind: Arguments to -type should containonly one letter[root@centos7 ~]# find /etc/ -size +1M-type f/etc/selinux/targeted/policy/policy.29/etc/udev/hwdb.bin/etc/brltty/zh-tw.ctb


6、查找/etc目录下所有用户都没有写权限的文件

[root@centos7 ~]# find /etc/ -not -perm/222 -ls


7、查找/etc目录下至少有一类用户没有执行权限的文件

[root@centos7 ~]# find /etc/ -perm -111 -ls


8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

[root@centos7~]# find /etc/init.d/ -perm -113/etc/init.d/test

9. 实际生产环境可能使用到的案例:

如果需要对某一个目录批量设置权限,但是文件和目录的权限不一致时可以用find命令分别设定

这里给出一个循环递归得到对文件夹和文件分别有效的设置方法:

[root@centos7~]#find /path -type f -exec chmod 644 {} \;    #对目录和子目录里的文件
[root@centos7~]#find /path -type d -exec chmod 755 {} \;  #对目录和子目录path  是路径  type 类型 d 是目录  f是 文件   exec  执



附:德·摩根定律

(P Q) = (P) (Q)

(P Q) = (P) (Q)


文件 目录 命令 权限 时间 大小 数据 数据库 用户 参数 子目 子目录 系统 单位 工具 文件名 条件 类型 链接 更新 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何提出人力资源软件开发需求 安徽搜集客户外贸软件开发 春节期间网络安全工作情况汇报 腾讯视频在哪里开数据库 手机app软件开发费用多少 百思教育软件开发一年多少钱 2019年网络安全政策盘点 网络安全政策文件标准规范 天津时代网络技术服务设计 电教管理服务器厂家 德阳直销软件开发公司 petri网络技术 网络安全审查办公室设计 数据库保养计划 龙口平台软件开发哪家靠谱 广州便士软件开发有限公司 美博网络技术有限公司 轴承数据库的建立 腾讯云服务器如何创建实例 宝山区推广软件开发问答知识 计算机网络安全的展望 国税网络安全周知识总结 svn安装 服务器搭建 沉迷网络维护网络安全的 最终幻想14去哪个服务器最好 网络安全威胁的被动攻击 服务器cpu被占满怎么办 数据库连接池技巧视频 播放网络安全的手抄报 服务器安全狗如何安装失败
0