日期: 2015年08月30日
文件查找:在文件系统上查找符合条件的文件的过程
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