Find命令的基本用法
在Linux系统中find命令是一个强大文件查找类工具,它支持根据文件名,权限,文件大小,访问以及修改时间查找,使用方法如下:
find [option] [查找起始路径] [查找条件] [处理动作]
- 起始路径:指定查找文件或目录的路径,默认为当前目录
- 查找条件:可根据文件名,权限,文件大小以及从属关系查找文件
- 处理动作:动查找到的文件进行处理,如查看详细信息,删除或复制等。默认为显示
1 查找条件的选项:
(1)根据文件名查找:-name PATTERN 支持global通配符
-iname 不区分文件名大小写 支持global通配符 </br> -regex PATTERN 基于正则表达式但是匹配整个路径名
(2)根据从属关系查找:-user USERNAME 查找属主为USERNAME的文件
-group GROUPNAME 查找属组为GROUPNAME的文件 -uid/gid UID/GID 根据UID/GID查找文件 -nouser 查找所有没有属主的文件 -nogroup 查找所有没有属组的文件
(3)根据文件类型查找:-type TYPE (b c d f s p l)
(4)根据文件大小查找:-size[+|-]#UNIT 常用单位:K M G
#UNIT 精确匹配文件大小 -#UNIT 小于#的文件 +#UNIT 大于#的文件
(5)根据时间戳查找: -atime/-mime/-ctime[+|-]# 以天为单位查找访问时间,修改时间或改变时间
# 精确匹配#天 [#,#-1] -# #天至当前时间的访问区间[0-#] +# #天之前的所有文件 -amin/-mmin/-cmin[+|-]# 以分钟为单位查找
(6)根据文件权限查找: -prem /|- mode 根据文件读写执行权限匹配文件
mode 精确匹配权限 /mode 只要属主属组以及其他用户任意一位权限匹配均视为匹配到的文件。9位权限之间为或关系 -mod 必须匹配每一类用户的每一位权限。9位权限之间为与关系
2 处理动作:
-print: 输出至标准输出,默认的动作 ## -ls:类似于对查找到的文件执行“ls -“ 命令 -delete:删除查找到的文件 -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件 -ok COMMAND {} \; :对查找到的每个文件执行由此处COMMAND表示的命令,需确认 -exec COMMAND {} \; :对查找到的每个文件执行由此处COMMAND表示的命令,不确认
3 结合xargs 命令使用
find命令查找到文件送至后面的命令时,是先查找出所有符合条件的路径然后一次性传递给后面的命令,但是有些命令不支持过长的参数,此时执行会失败因此需要使用管道符号输入给xargs命令执行。
xargs [options] COMMAND
-a 从文件中读取作为stdin -p 没执行一个参数会先询问用户 -t 先打印然后再执行命令 -i {}是告诉xargs,后面的命令中,用{}表示占位符,将会被实际的参数替代 -n 用于指定每次传递几个参数 -d 用于指定切分输入内容时,具体的分隔符
示例:
1 显示etc目录大于1M的文件并使用ls命令显示出来
[root@mycentos etc.backup]# find /etc -size +1M | xargs ls -lh -rw-r--r--. 1 root root 6.6M Aug 16 17:04 /etc/1dss -rw-r--r--. 1 root root 1.4M Mar 6 2015 /etc/brltty/zh-tw.ctb -rw-r--r--. 1 root root 3.7M Nov 21 2015 /etc/selinux/targeted/policy/policy.29 -rw-r--r--. 1 root root 29M Aug 16 17:06 /etc/sysconfig/atd -r--r--r--. 1 root root 6.7M Jul 31 07:31 /etc/udev/hwdb.bin
2 找到所有没有属主属组的文件并将属主和属组改为root用户
[root@mycentos etc.backup]# find / -nouser -o -nogroup | xargs -i chown root:root {}
Find命令使用的练习
1 查找/var目录下属主为root且属组为mail的所有文件和命令
[root@mycentos etc.backup]# find /var -user root -a -group mail -ls 31458804 drwxrwxr-x 2 root mail 4096 Aug 27 15:50 /var/spool/mail 3148559 60 -rw------- 1 root mail59873 Aug 27 15:50 /var/spool/mail/root
2 查找当前系统上没有属主或属组并且3天内曾被访问过的文件或目录
[root@mycentos ~]# find / \( -nouser -a -nogroup \) -atime -3 /home/hadoop /home/hadoop/.mozilla /home/hadoop/.mozilla/extensions /home/hadoop/.mozilla/plugins
3 查找/etc目录下所有用户都有写权限的文件
[root@mycentos ~]# find /etc -perm -222 -ls 251659560 lrwxrwxrwx 1 root root 17 Jul 31 07:16 /etc/mtab -> /proc/self/mounts 107365050 lrwxrwxrwx 1 root root 54 Jul 31 07:22 /etc/fonts/conf.d/65-0-lohit-tamil.conf -> /usr/share/fontconfig/conf.avail/65-0-lohit-tamil.conf 87286650 lrwxrwxrwx 1 root root 56 Jul 31 07:17 /etc/fonts/conf.d/59-liberation-mono.conf -> /usr/share/fontconfig/conf.avail/59-liberation-mono.conf 107365080 lrwxrwxrwx 1 root root 54 Jul 31 07:22 /etc/fonts/conf.d/66-ucs-miscfixed.conf -> /usr/share/fontconfig/conf.avail/66-ucs-miscfixed.conf
4 查找/etc目录下大于1M并且类型为普通文件的所有文件
[root@mycentos ~]# find /etc -size +1M -a -type f /etc/selinux/targeted/policy/policy.29 /etc/sysconfig/atd /etc/udev/hwdb.bin /etc/1dss /etc/brltty/zh-tw.ctb
5 查找/usr目录下不属于root,bin或Hadoop的所有文件或目录
[root@mycentos ~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop -ls 方法1 258679324 drwx------ 2 polkitd root 4096 Jul 31 07:21 /usr/share/polkit-1/rules.d 17625859 16 -rwsr-sr-x 1 abrt abrt15336 Dec 1 2015 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache [root@mycentos ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls 方法2 258679324 drwx------ 2 polkitd root 4096 Jul 31 07:21 /usr/share/polkit-1/rules.d 17625859 16 -rwsr-sr-x 1 abrt abrt15336 Dec 1 2015 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
6 查找/etc目录下一周内内容修改过并且属主不是root也不是Hadoop的文件或目录
[root@mycentos etc]# find /etc -mtime -7 -not \( -user root -o -user hadoop \) -ls 292524890 -rw-r--r-- 1 harryharry 0 Aug 27 16:21 /etc/testfile
7 查找/etc下至少有一类用户没有执行权限的文件
[root@mycentos etc]# find /etc/ -not -perm -111
8 查找/etc/init.d目录下所有用户都有执行权限并且其他用户又有写权限
[root@mycentos etc]# find /etc/init.d/ -perm -113 -ls 21319658 -rwxr-xrwx 1 root root 6630 Sep 16 2015 /etc/init.d/network
原创文章,作者:N27_CaiShuang,如若转载,请注明出处:http://www.178linux.com/85590
评论列表(1条)
这篇博客整理的非常好,几乎涵盖了find神器的各种场景,还配有案例,给你点个赞,一定能帮到不少人。