第七课-第三讲 07_03_Linux文件查找详解

一. let 用法
I= 1
SUM=$[ $SUM+$I ] = let SUM+=$I = let SUM++
-= I-=1 相当于 I--
+= I+=1 相当于 I++
/=
%=

二. 文件查找

grep,egrep,fgrep:文本查找,查找文本的,查找字符串的

  1. locate 命令:全系统查找文件命令,非实时的,模糊匹配查找。他的查找是根据全系统文件数据库进行的。优势是速度快
    updatedb 手动生成文件数据库(系统我们生成全希望文件数据库时用到手动生成,否则locate命令无法执行)
  2. find 实时查找,精确查找,速度慢,因为他遍历指定目录中的所有文件完成查找。支持很多查找标准,甚至支持用正则表达式匹配文件名查找

find 查找路径(省略表示当前目录) 查找标准 查找到以后的处理动作
查找路径: 省略表示当前目录,默认是当前目录
查找标准: 默认是指定路径下的所有文件
查找到以后的处理动作: 默认为显示到屏幕

查找标准(匹配标准):
-name 'FILENAME'根据文件来查找,对文件名做精确匹配
-name '文件名通配符'( ? []) 此时是严格区分大小写的
-iname '文件名通配符'(
? []) 此时是不区分大小写的
-regex PATTERN 基于模式来显示文件名查找

-user USERNAME 根据文件的属主进行查找
-group GROUPNAME 根据文件的属主、组进行查找
-uid   根据uid查找(用户被删除后原来以该用户为属主的文件的属主都变成该用户的id号,所以要此时要根据uid查找)
-gid   根据gid查找 

-nouser  查找没有属主的文件,用户删除后,以该用户为属主的文件就变成了nouser文件
-nogroup  查找没有属组的文件

-type 
    f  普通文件
    d  目录文件
    c  字符文件
    b  块文件
    l  链接文件
    p  管道文件
    s  套接字文件

find /tmp -type d

-size(不给单位默认单位是字节)
    [+|-]nk  +10k 大于10k  -10k小于 10k   10k 等于10k
    [+|-]nM
    [+|-]nG

find /etc -size 1M--size单位匹配查找法则:0.0M--1M 大小之间的都认为是 1M
find /etc -size 10M--size单位匹配查找法则:9.0M--10M 大小之间的都认为是 10M

-time
-mtime 修改时间单位为天 [+-]n 
-ctime 改变时间单位为天 [+-]n
-atime 访问时间单位为天 [+-]n  -5 5天内访问过小于5天, +5 至少5天没访问了大于5 ,5 刚好5天访问过等于5天
-mmin  修改时间单位为分钟 [+-]n
-cmin  改变时间单位为分钟 [+-]n
-amin  访问时间单位为分钟 [+-]n

-perm MODE   根据文件权限来查找,权限等于mode的值
-perm -MODE  每一位权限都必须精确匹配,文件权限能完全包含此MODE是匹配成功并显示。也就是3部分(ugo)文件rwx权限都要大于等于MODE时才匹配成功
-perm /MODE  9位权限中有一位匹配
-perm +MODE  同 -perm /MODE

三. 组合条件查找

条件1 条件2 ---没有指明2个条件关系是默认是 a ,也就是 与 条件
-a 与
-o 或
-not 非

find /tmp -nouser -a -type d
find /tmp -not -type d 查找非目录文件
find /tmp -not -type d -a -not -type s

四. find 的动作

-print 默认是显示
-ls   类似 ls -l 的形式显示每一个文件的详细信息
-ok COMMAND {} \; 反斜线合分号必须有。{} 表示引用find到的结果。  每次操作都需要用户确认
-exec COMMAND {} \; 反斜线合分号必须有。{} 表示引用find到的结果。不需要确认

-xargs
find ./ -perm -020 -exec mv {} {}.new \;

xargs的用法(不需要 {} 应用,不需要 \;结尾)
find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles \;
find /etc -size +1M | xargs echo >> /tmp/etc.largefiles