linux文件查找,是在文件系统上查找符合条件的过程:
文件查找有两个:locate,find
Locate:非实时查找工具;依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新此数据库(updatedb);查找速度快;模糊查找。
Find:实时查找,查找的速度略慢,非常精确的查找。
Find命令:
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
参数:
-name //已文件名称查找,支持使用glob;
*,?,[]
-iname //文件名称查找,不区分字符大小写,支持使用glob。
-regex //“PATTERN”,已PATTERN匹配整个文件路径字符串,而不仅仅是文件名称。
-user //查找属主为指定用户的文件
-group //根据属组查找
-uid //查找文件的属主为指定的uid的文件
-gid //查找文件的属组为指定的gid文件
-nouser //查找没有属主的文件
-nogroup //查找没有属组的文件
根据文件类型进行查找:
参数:
-type //后面跟上指定类型
f:普通文件
d:目录
l:符号连接
b:块设备
c:字符设备
p:命名管道
s:套接字
组合查找条件:
参数:
与条件:-a
或条件:-o
非条件:-not,!
根据文件大小来查找;
参数:
-size [+|-]#UNIT
单位:k, M, G
#UNIT: (#-1,#]
+#UNIT: (#,+oo)
-#UNIT:[0,#-1]
根据时间戳:
以“天”为单位
-atime [+|-]#
#:[#,#+1)
+#: [#+1,oo]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位
-amin
-mmin
-cmin
根据权限:
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件;
/400
-MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件;
处理动作:
-print:默认处理动作
-ls:类似于对查找到的每个文件做"ls -l"的操作;
-delete:删除查找到的文件;
-fls/path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;
-okCOMMAND {} \;
对每个文件执行指定的命令之前需要用户事先确认;
-execCOMMAND {} \;
无需用户确认;
下面做几个练习;
题:查找/var目录属主为root,且属组为mail的所有文件
-bash-4.1# find /var -user root -group mail-ls 129831 4 drwxrwxr-x 2 root mail 4096 Sep 1 06:45 /var/spool/mail
题:查找/usr目录下不属于root、bin或hadoop的所有文件
-bash-4.1# find /usr -not \( -user root -o-user bin -o -user hadoop \) -ls 395794 12 -rwsr-xr-x 1 abrt abrt 10296 Jul 25 00:08 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
题:查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件
-bash-4.1# find /etc -mtime -7 -a ! \(-user root -o -user hadoop \) -ls -bash-4.1#
查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件
-bash-4.1# find / \( -nouser -o -nogroup \)-atime -7 -ls 129856 0 -rw-rw---- 1 2000 mail 0 Aug 27 06:26 /var/spool/mail/yun find: `/proc/2611/task/2611/fd/5': No suchfile or directory find: `/proc/2611/task/2611/fdinfo/5': Nosuch file or directory
题:查找/etc目录下大于20k且类型为普通文件的所有文件
-bash-4.1# find /etc -size +20k -type f -ls| more 262607 124 -rw------- 1 root root 125811 Aug 13 17:58 /etc/ssh/moduli 263428 36 -rw-r--r-- 1 root root 34419 Aug 18 13:57 /etc/httpd/conf/httpd.con f 264147 104 -rw-r--r-- 1 root root 106488 Aug 25 23:09 /etc/gconf/gconf.xml.defa ults/%gconf-tree-ru.xml 264152 84 -rw-r--r-- 1 root root 84455 Aug 25 23:09 /etc/gconf/gconf.xml.defa ults/%gconf-tree-pl.xml
查找/etc目录下所有用户都没有写权限的文件
-bash-4.1# find /etc ! -perm +222 -ls 264359 4 -r--r--r-- 1 root root 324 Aug 14 07:25/etc/ld.so.conf.d/kernel-2.6.32-573.3.1.el6.x86_64.conf 263663 4 -r--r--r-- 1 root root 324 Jul 24 00:14/etc/ld.so.conf.d/kernel-2.6.32-573.el6.x86_64.conf 264372 4 -r--r----- 1 root root 4002 Mar 2 2012/etc/sudoers 263099 4 -r--r--r-- 1 root root 460 Jul 24 19:09/etc/dbus-1/system.d/cups.conf 263776 4 ---------- 1 root root 760 Sep 7 02:41 /etc/gshadow 262181 4 ---------- 1 root root 1235 Sep 1 06:45 /etc/shadow- 264184 4 -r--r--r-- 1 root root 2249 Aug 13 17:25
题:查找/etc目录下至少有一类用户没有执行权限的文件
-bash-4.1# find /etc -not -perm -111 -ls|more 262794 4 -rw-r--r-- 1 root root 21 Oct 30 2013 /etc/ld.so.conf.d/xulrunn er-64.conf 262793 4 -rw-r--r-- 1 root root 22 Sep 24 2011 /etc/ld.so.conf.d/qt-x86_ 64.conf 264359 4 -r--r--r-- 1 root root 324 Aug 14 07:25/etc/ld.so.conf.d/kernel- 2.6.32-573.3.1.el6.x86_64.conf 262536 4 -rw-r--r-- 1 root root 17 Jun 22 21:08/etc/ld.so.conf.d/mysql-x
题:查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件
-bash-4.1# find /etc/init.d -perm -003-exec ls -lh {} \; lrwxrwxrwx. 1 root root 11 Aug 25 22:57/etc/init.d -> rc.d/init.d