区别:

  • find基本上相当于 linux下的 “搜索” , 相当于windows下的搜索功能! 它是用来搜索文件的。
  • grep是用来搜索文本的, 用来在standard input或文件内部的内容中, 来搜索文字 内容的!
  • find 是完全匹配(通配符),而grep是包含匹配(正则表达式)

find命令:

基本格式:find path expression

选项

说明

-name<文件名>

匹配文件名称

-user<用户名>

匹配文件的所有者

-perm<权限>

匹配文件的权限

-type<文件类型>

匹配文件类型查找

-size n[ckmg]

匹配文件的大小(+50k表示超过50k的文件)

-exec { } \

后面可直接对搜索到的结果进一步处理的命令

!

所有

-and(-a)

并且

-or(-o)

或者

例题

按文件名称
  1. 在/etc目录下查找文件 aaa.conf
    find /etc -name aaa.conf
  2. 查找/etc目录下以名字中包含“conf”的文件
    find /etc -name "*conf*" -type f
  3. 在当前目录下查找文件名含有字符串‘conf’的文件
    find . -name '*conf*'
按文件特征查找
  1. 查找在系统中最后10分钟访问的文件 (access time)
    find / -amin -10
  2. 查找在系统中最后48小时访问的文件
    find / -atime -2
  3. 查找在系统中为空的文件或者文件夹
    find / -empty
  4. 查找在系统中属于 group为cat的文件
    find / -group cat
  5. 查找在系统中最后5分钟里修改过的文件 (modify time)
    find / -mmin -5
  6. 查找在系统中最后24小时里修改过的普通文件,并删除
    find / -mtime -1 -exec rm { } \
  7. 查找在系统中属于fred这个用户的文件
    find / -user fred
  8. 查找出大于10000000字节的文件 (c:字节,w:双字,k:KB,M:MB,G:GB)
    find / -size +10000c
  9. 查找出大于1000KB,并且小于10MB的文件
    find / -size +1000k -a -size -10M
混合查找文件
  1. 在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
    find /tmp -size +10000c -and -mtime +2
  2. 在/目录下查找用户是fred或者george的文件文件
    find / -user fred -or -user george
  3. 在/tmp目录中查找所有不属于panda用户的文件
    find /tmp ! -user panda

grep命令:

选项

说明

-c

只输出匹配行的计数。

-i

不区分大小写

-h

查询多文件时不显示文件名。

-l

查询多文件时只输出包含匹配字符的文件名。

-n

显示匹配行及行号。

-s

不显示不存在或无匹配文本的错误信息。

-v

反转查找,显示不包含匹配文本的所有行。

例题

  1. 将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号
    grep -n root /etc/passwd
  2. 显示所有以d开头的文件中包含 test的行
    grep 'test' d*
  3. 显示在aa,bb,cc文件中包含test的行
    grep ‘test’ aa bb cc
  4. 显示所有包含每行字符串至少有5个连续小写字符的字符串的行
    grep ‘[a-z]\{5\}’ aa
  5. 显示/usr/src目录下的文件(不含子目录)包含magic的行
    grep magic /usr/src
  6. 显示/usr/src目录下的文件(包含子目录)包含magic的行
    grep -r magic /usr/src
  7. 只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’)
    grep -w pattern files