grep\egrep fgrep  文本查找


文件查找:

locate  

非实时的,模糊匹配,根据全系统数据库完成的。

如:locate passwd

#updatedb ,手动生成文件数据库

优势:速度快


find

实时查找

精确

支持众多查找标准

遍历指定目录中所有文件完成查找,速度慢。


find 查找路径 查找标准 查找到以后的处理运作

查找路径:默认为当前目录

查找标准:默认指定路径下所有文件

处理动作:默认显示


匹配标准:

-name 'FILENAME': 对文件名做精确的匹配

文件名通配:

* :

[]

[^]

如:find /etc -name 'pass*'

-iname 'FILENAME':文件名匹配不区分大小写

-regex PATTERN:基于正则表达式进行文件名匹配

-user USERNAME:根据属主查找

-group GROUPNAME:根据属组查找

-uid UID:根据uid查找

-gid GID:根据gid查找

-nouser:没有属主的文件

-nogroup:没有属组的文件

-type:根据文件类型来查找

f:普通文件

d:目录文件

c:字符文件

b:块文件

l:链接文件

p:管道文件

s:套接字文件

如: find /etc -type s

-size:根据文件大小来查找  [+|-] + 大于  -小于 #精确

#k

#M

#G

如:find /etc -size 10k

组合条件:

-a  默认与条件

-o

-not  非

如:find /etc -nouser -a -type d -ls

 find /etc -not -type d

 find /tmp -not -user user1 -a -not -user user2  或者 find /tmp -not \(-user user1 -o -user user2\)  德摩根定律

 find /etc-not -user user1 -o -not -type d  或者 find /etc -not \(-user user1 -a -type d\)

-mtime

-ctime

-atime

+:表示#天之前

-:表示最近#天之内

不带+-号:#天有过一次

如:find /etc -atime +5  (在/etc目录下有5天没有被访问的文件)


-perm mode :每一位权限都必须精确匹配。

如:find ./ -perm 644

/mode : 只要有一个权限匹配即可。

-mode :文件权限能完全包含此MODE时才能显示

如:find ./ -perm -644


处理动作:

-print :显示

-ls :类似ls -l的显示文件的详细信息

-ok command {} \;   每一个操作都需要用户的确认。

-exec command {} \; exec不需要。

注:这里的 {} 表示占位符,代表文件名。

xargs 空格隔开

如:find ./ -perm -006 -exec chmod o-w {} \;

 find ./ -type d -ok chmod +x {} \;

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

 find ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \;


find练习:

1.查找/var目录下属主为root并且属组为mail的所有文件

find /var -user root -a -group mail

2.查找/usr目录下不属于root,bin或student的文件。

写法一:find /usr -not -user root -a -not -user bin -a -not -user student

写法二:find /usr -not \(-user root -o -user bin -o -user student \)

3.查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件

find /etc -mtime -7 -not \(-user root -o -user student\)

find /etc -mtime -7 -not -user root -a -not -user student

4.查找当前系统上没有属主、没有属组,最近1天内被访问过的文件,并将其属主属组修改为root

find / \(-nouser -o -nogroup\) -a -atime -1 -exec chown root:root {} \;

5.查找/etc目录下大于1M的文件,并将其文件名写入到/tmp/etc.largefile文件中。

find /etc -size +1M -exec echo {} >>/tmp/etc.largefile \;

find /etc -size +1M | xargs echo >>/tmp/etc.largefile

6.查找/etc目录下所有用户都没有写权限的文件,显示出详细信息

find /etc -not -perm /222 -ls