文件查找:在文件系统上查找符合条件的文件的过程
Linux系统上常用的两个文件查找工具:
locate: 依赖于实现构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务)生成的。 必要时,可手动执行updatedb命令 优点:速度快 缺点:非实时查找、模糊查找 find: 通过遍历指定的目标目录,实时查找符合指定实属性的文件 优点:实时查找、精确匹配 缺点:遍历文件系统、速度慢
find命令
格式:
find [OPTIONS] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径 查找条件:默认为指定路径下的所有文件 处理动作:默认显示到屏幕
查找条件:
根据文件名查找: -name "文件名",文件名支持使用globbing # find /etc/ -name "passwd*"#在/etc目录下搜索名为passwd的文件 -iname "文件名" 不区分大小写 -regex 'PATTERN',以PATTERN匹配整个文件路径字符串,而不仅仅是文件名
根据文件的属主或属组查找: -user USERNAME: 根据文件属主查找 -group GROUPNAME: 根据文件属组查找
根据文件的属主或属组的ID号查找: -uid UID: 根据指定的UID查找 -gid GID: 根据指定的GID查找
查找没有属主或属组的文件: -nouser: 查找没有属主的文件 -nogroup: 查找没有属组的文件
组合查找条件:
组合多个条件查找运用逻辑运算:与、或、非 与:-a 查找条件1 -a 查找条件2 -a ... (-a可省略) 所有条件必须同时满足 # find /tmp/ -nouser -a -name "*centos*"
或:-o 查找条件1 -o 查找条件2 -o ... 满足其中一个条件即可 # find /tmp/ -name "*centos*" -o -uid 500
非:-not or ! -not 查找条件不满足指定条件的(相反) # find / -not -user root | xargs ls -ld # find / ! -user root | xargs ls -ld
与: 重叠部分:既属于A,又属于B 或: A+B-重叠部分(减去与的部分) 非: 除A之外,或除B之外
!A -o !B | = | !( A -a B ) | !A -a !B | = | !( A -o B ) |
实例1: //查找/tmp/下非php与非txt结尾的文件 # find /tmp -not -name "*php" -a -not -name"*txt"
//查找/tmp/下非php或非txt结尾的文件 # find /tmp -not \( -name "*.php" -o -name"*.txt" \)
根据文件类型查找: -type 文件类型 f 普通文件 d 目录文件 l 符号链接文件 b 块设备 c 字符设备文件 p 命名管道文件 s 套接字文件
根据文件大小查找: -size [+|-] #UNIT 常用单位有:k,M,G 不带+|- 表示精确匹配
实例1:
//查找/etc目录下2k的文件 #UNIT: #-1 < x <= # find /etc/ -size 2k -exec ls -lh {} \; (2k: 匹配范围是1.1k - 1.9k)
//查找/etc目录下-2k的文件 -#UNIT: x <= #-1 find /etc/ -size -2k -exec ls -lh {} \; (-2k: 匹配范围是小于等于1k)
//查找/etc目录下+2k的文件 +#UNIT: x ># find /etc/ -size +2k -exec ls -lh {} \; (+2k: 匹配范围是大于2.1k以上)
根据时间戳查找:(过去的某个时间节点) 以“天”为单位 -atime [+|-]#: 根据访问时间查找 -mtime [+|-]#: 根据修改时间查找 -ctime [+|-]#: 根据改变时间查找
实例2: //查找/etc目录下访问时间为3天的文件 #: # =< x < #+1 find /etc/ -atime 3 -exec stat {} \; (3: 匹配范围是从3天 - 4天之间)
//查找/etc目录下3天之内访问过的文件 -#: x < # find /etc/ -atime -3 -exec stat {} \; (-3: 匹配范围是小于3天之内的)
//查找/etc目录下3天以前访问过的文件 +#:# x >= #+1 find /etc/ -atime +3 -exec stat {} \; (+3: 匹配范围是等于或大于3天以上的)
以“分钟”为单位 -amin [+|-]#: 根据访问时间查找 -mmin [+|-]#: 根据修改时间查找 -cmin [+|-]#: 根据改变时间查找
find /tmp/ -amin -5 查找范围是小于5分钟内 find /tmp/ -mmin +5 查找范围是大于或等于5分钟以上
根据权限查找: -perm [+|-]MODE MODE: 不带+|- 表示与MODE精确匹配 find /etc/ -perm 644 查找权限为644的文件
+MODE: 任何一类用户的权限只要能包括对其指定的任何一位权限即可 find /etc/ -perm +555 任何一类用户有任何一位权限即匹配
-MODE: 每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件。 find /etc/ -perm -111 -ls 查找所有人都有执行权限 find /etc/ -perm -222 -ls 查找所有人都有写权限 find /etc/ -perm -666 -ls 查找所有人都有读和写权限
权限计算: 3=2+1 4=read 5=4+1 6=4+2 7=4+2+1
处理动作: -print 默认动作:打印至屏幕 -ls 显示找到的文件的详细属性 -exec COMMAND {} \; 对找到的文件执行期望的操作 删除/tmp下没有属组的文件 find /tmp -nogroup -a -type f -exec rm {} \; -ok COMMAND {}\; 执行命令之前提示确认
注意: find命令会一次性找到所有符合条件的文件,并一同传递给后面的命令;但有些命令不能接收过长的参数 解决办法: find | xargs COMMAND
|