1、find 命令是Linux平台上一个强大的查找命令。它可以实时查找文件,你可以指定一些匹配条件,如按文件名、文件类型、文件大小、用户、或者按时间戳查找文件。
2、find命令的一般用法:
- Find命令的基本语法:
- find [选项] [查找起始路径] [查找条件] [处理动作]
- find的选项:
- 按照文件名查找文件
- find /dir -name filename 在/dir目录及其子目录下面查找名字为filename的文件
- find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
- 根据文件的类型查找
- -type TYPE:
- f: 普通文件
- d: 目录文件
- l:符号链接文件
- b:块设备文件
- c:字符设备文件
- p:管道文件
- s:套接字文件
- 例 : Find /dev –type f : 查找/dev下的类型为普通文件的文件
- 根据文件的大小查找:
- -size[+|-]#UNIT(单位) :+表示精确查找
- 常用单位:k,M,G
- #UNIT:(#-1,#]
- -#UNIT:[0,#-1]
- +#UNIT:(#,∞)
- 例 : Find /dev –size +1M :查找/dev 下大小为1M的文件
- 根据文件从属关系查找:
- -user USERNAME:查找属主指定用户的所有文件;
- -group GRPNAME:查找属组指定组的所有文件;
- -uid UID:查找属主指定的UID的所有文件;包含目录;
- -gid GID:查找属组指定的GID的所有文件;包含目录;
- -nouser:查找没有属主的文件;
- -nogroup:查找没有属组的文件;
- 例 : Find /dev –user gentoo : 查找/dev下属主为 gentoo的文件
- 按时间戳查找
- 以 天 为单位
- -atime( 最近一次访问时间)[+|-]#
- #:[#,#-1]大于等于#,小于等于#-1
- -#:(#,0]
- +#:(∞,#-1]
- 例 : find /etc -atime +7 :查找/etc 下至少7天没被访问的文件
- -mtime(更改时间,数据改动)
- -ctime(改动时间,元数据改动)
- 以 分钟 为单位(以小时为单位时把分钟换算成小时即可)
- -amin
- -mmin
- -cmin
- 以 天 为单位
根据权限查找
-
-perm [/|-]mode
- mode:精确权限匹配;
- /mode:任何一类用户(u,g,o)的权限的任何一位(r,w,x)符合条件即满足;
- 9位权限之间存在"或"关系;
- -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足
- 9位权限之间存在“与”关系;
- find的一些处理动作:
- -print:输出至标准输出;默认的动作;
- -ls:类似于对查找到的文件执行 "ls -l"命令,输出文件的详细信息;
- -delete:删除查找到的文件;
- -fls /PATH/TO/SOEMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
- -ok COMMAND{}\; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
- -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;{}和\之间有空格;
- 例 :find /etc -type f -exec ls -l {} \; :查找/etc下的普通文件然后列出其详细信息;
3、练习实例:
查找/var目录下属主为root,且属组为mail的所有文件或目录;
- ~]# find /var -user root -a -group mail -ls
查找/usr目录下不属于root,bin或hadoop的所有文件或目录;用两种方法;
- ~]# find /usr -not -user root -a -not -user bin -a -not -user
hadoop - ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \)
-ls
查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录;
- ~]# find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)
-ls - ~]# find /etc -mtime -7 -a -not -user root -a -not -user hadoop
-ls
查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录;
- ~]# find / \( -nouser -o -nogroup \) -atime
-7 -ls - [[email protected] ~]# find / -nouser -o -nogroup -atime -7 -ls
查找/etc目录下大于1M且类型为普通文件的所有文件;
- ~]# find /etc -size +1M -type f -exec ls -lh {} \;
查找/etc目录下所有用户都没有写权限的文件;
- [[email protected] ~]# find /etc/ -not -perm /222 -type f -ls
查找/etc目录至少有一类用户没有执行权限的文件;
- ~]# find /etc -not -perm -111 -type f -ls
查找/etc/init.d/目录下,所有用户都有执行权限,且其他用户有写权限的所有文件;
- ~]# find /etc -perm -113 -type f -ls
4、find与xargs
- 在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,此时find命令就会出错。使用xargs命令可以解决,特别是与find命令一起使用。
- find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
- 例子:
- find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
- find / -name "core" -print | xargs echo "" >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
- find . -type f -print | xargs grep "hostname" 用grep命令在所有的普通文件中搜索hostname这个词
- find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} \;)
- find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件
- find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
时间: 2024-10-05 05:15:52