linux文件查找之find
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux文件查找之find相关的知识,希望对你有一定的参考价值。
find - search for files in a directory hierarchy
在层级目录中查找文件工具
语法
find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
常用选项
- -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写。支持glob风格的通配符;
- -user USERNAME:查找属主指定用户的所有文件;
- -group GRPNAME:查找属组指定组的所有文件;
- -uid UID:查找属主指定的UID的所有文件;
- -gid GID:查找属组指定的GID的所有文件;
- -nouser:查找没有属主的文件;
-
-nogroup:查找没有属组的文件;
-
根据文件的类型查找:-type TYPE:
- f: 普通文件
- d: 目录文件
- l:符号链接文件
- b:块设备 文件
- c:字符设备文件
- p:管道文件
- s:套接字文件
-
组合:
- 与:-a, 默认组合逻辑;
- 或:-o
- 非:-not, !
-
根据文件的大小查找:
- -size [+|-]#UNIT ;常用单位:k, M, G
- #UNIT:(#-1, #]
- -#UNIT:[0,#-1]
- +#UNIT:(#, oo)
-
根据时间戳查找:
- 以“天”为单位:这里的天是以24小时位单位
- -atime [+|-]# 访问时间
- -mtime 修改时间
- -ctime 创建时间
- 以“分钟”为单位:
- -amin
- -mmin
- -cmin
- 以“天”为单位:这里的天是以24小时位单位
-
根据权限查找:-perm [/|-]mode;0表示不参与
- mode:精确权限匹配;
- /mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系;
- -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;9位权限之间存在“与”关系;
- 处理动作:
- -print:输出至标准输出;默认的动作;
- -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
- -delete:删除查找到的文件;
- -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
- -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
- -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;
DEMO:
找出/tmp目录下属主为非root的所有文件
[[email protected] ~]# find /tmp/ -not -uid 0 -ls
[[email protected] ~]# find /tmp/ -not -user root -ls
查找/var目录下属主为root,且属组为mail的所有文件或目录;
[[email protected] test]# find /var/ -user root -group mail
find /var/ -uid 0 -group mail
文件大小查找
[[email protected] test]# ll -h
总用量 52K
-rw-------. 1 root root 24K 4月 22 13:31 messages
-rw-------. 1 root root 25K 4月 22 13:31 messages.bak
[[email protected] tmp]# find ./ -size -25k -ls
[[email protected] tmp]# find ./ -size 25k -ls (24k,25k] 24k< x <=25k
./messages.bak
[[email protected] test]# find ./ -size -25k -type f [0,24k] 0<= x <=24k
./messages
[[email protected] test]# find ./ -size +24k -type f [25k, ] 25<= x
./messages.bak
按照文件时间来查找
[[email protected] test]# date
2018年 04月 22日 星期日 13:49:30 EDT
[[email protected] test]# find /etc/ -type f -atime 3 -ls
[[email protected] ~]# stat /etc/kdump.conf
File: ‘/etc/kdump.conf’
Size: 7265 Blocks: 16 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17265603 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:kdump_etc_t:s0
Access: 2018-04-18 23:03:40.914728405 -0400
Modify: 2018-04-16 13:12:52.585009262 -0400
Change: 2018-04-16 13:12:52.585009262 -0400
Birth: -
查找/usr目录下不属于root, bin或zander的所有文件或目录;
[[email protected] test]# find /usr -not \( -user root -o -user bin -o -user zander \)
[[email protected] test]# find /usr -not -user root -a -not -user bin -a -not -user zander
查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是zander用户的文件或目录;
[[email protected] test]# find /etc/ -mtime -7 -a -not -user root -a -not -user zander
[[email protected] test]# find /etc/ -mtime -7 -a -not \( -user root -o -user zander \)
查找当前系统上没有属或属组,且最近一周内曾被访问过的文件或目录;
[[email protected] test]# find / \( -nouser -o -nogroup \) -a -atime -7
查找/etc目录下大于1M且类型为普通文件的所有文件;
[[email protected] test]# find /etc/ -size +1M -type f -exec ls -lh {} \;
查找/etc目录下所有用户都没有写权限的文件;
先找任何一个有写权限 && 取反
[[email protected] test]# find /etc/ -not -perm /222 -type f -exec ls -lh {} \;
查找/etc目录至少有一类用户没有执行权限的文件;
所有用户都有权限 && 取反
[[email protected] test]# find /etc/ -not -perm -111 -type f -exec ls -lh {} \;
查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件;
[[email protected] test]# find /etc/init.d/ -perm -111 -a -perm -112 -type f -ls
[[email protected] test]# find /etc/init.d/ -perm -113 -type f -ls
找出/tmp目录下文件名中不包含fstab字符串的文件
[[email protected] ~]# find /tmp/ -type f -not -name ‘*fstab*‘
找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件
[[email protected] ~]# find /tmp/ -not -name ‘*fstab*‘ -not -user root
以上是关于linux文件查找之find的主要内容,如果未能解决你的问题,请参考以下文章