[关闭]
@guhuizaifeiyang 2017-11-17T07:03:02.000000Z 字数 4050 阅读 1612

find、grep命令笔记

Linux


1. find基本使用格式

使用格式 : find [指定查找目录] [查找规则] [查找完后执行的action]

  1. 选项与参数:
  2. 1. 与时间有关的选项:其中表示天的有-atime,-ctime与-mtime ;表示分钟的有-amin, -cmin与-mmin。-a,-c,-m分别代表访问过、状态改变过、修改过。
  3. -mtime 说明
  4. -mtime n n 为数字,意义为在 n天之前的『一天之内』被更动过内容的文件;
  5. -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
  6. -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
  7. Sample:
  8. 范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出
  9. android@user-Precision-T1700:~$find / -mtime 0
  10. 范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
  11. android@user-Precision-T1700:~$find /etc -newer /etc/passwd
  1. 2. 与使用者或组名有关的参数:
  2. -uid n n 为数字,这个数字是用户的账号 ID,亦即 UID ,这个 UID 是记录在 /etc/passwd里面与账号名称对应的数字。
  3. -gid n n 为数字,这个数字是组名的 ID,亦即 GID.
  4. -user name name 为使用者账号名称喔!
  5. -group namename 为组名喔,例如 users
  6. -nouser :寻找文件的拥有者不存在 /etc/passwd 的人!
  7. -nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!
  8. 范例三:搜寻 /home 底下属于 dmtsai 的文件
  9. [root@study ~]# find /home -user dmtsai
  10. # 这个东西也很有用的~当我们要找出任何一个用户在系统当中的所有文件时, # 就可以利用这个指令将属于某个使用者的所有文件都找出来喔!
  11. 范例四:搜寻系统中不属于任何人的文件
  12. [root@study ~]# find / -nouser
  13. # 透过这个指令,可以轻易的就找出那些不太正常的文件。如果有找到不属于系统任何人的文件时,
  14. # 不要太紧张,那有时候是正常的~尤其是你曾经以原始码自行编译软件时。
  1. 3. 与文件权限及名称有关的参数:
  2. -name filename:搜寻文件名为 filename 的文件;
  3. -size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有: c: 代表 byte k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是『 -size +50k
  4. -type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 装置文件 (b, c), 目录 (d), 连结档 (l), socket (s), FIFO (p) 等属性。
  5. -perm mode :搜寻文件权限『刚好等于』 mode 的文件,这个 mode 为类似 chmod 的属性值,举例来说, -rwsr-xr-x 的属性为 4755
  6. -perm -mode :搜寻文件权限『必须要全部囊括mode的权限』的文件,举例来说,我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744 当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来, 因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
  7. -perm /mode :搜寻文件权限『包含任一 mode 的权限』的文件,举例来说,我们搜寻 -rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw------- 也会被列出来,因为他有 -rw.... 的属性存在!

Samples:

Sample:

  1. find /etc -size +50K -a -size -60K -exec ls -l {} \;
  1. find /etc -size +50K -a ! -user root -type f -exec ls -l {} \;

备注:

1.{}代表的是由find找到的内容
2. -exec一直到\;是关键词,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是find指令内的额外动作
  1. find /etc -size +1500K -o -size 0

2. grep的基本使用格式

格式 grep 'expression' file
其中,expression采用正则表达式,file采用通配符。
grep的正则表达式有许多局限,比如不支持多选,所以推荐用egrep。

正则表达式元字符集:

grep egrep
^ ^ 锚定行的开始
$ $ 锚定行的结束
. . 匹配一个非换行符的字符
* * 匹配零个或多个先前字符
[] [] 匹配方框里的字符
\? \+ ? + 匹配优先量词
\( \) ( ) 分组
\{ \} { } 匹配优先量词
\b \b 单词分界符
\w\W \w\W 单词中的字符

常用通配符的含义:

举个粟子:

    # grep ‘energywise’ *
    # 在当前目录搜索带'energywise'行的文件

    # grep -r ‘energywise’ *
    # 在当前目录及其子目录下搜索'energywise'行的文件

    # grep -l -r ‘energywise’ * 
    # 在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件

    # grep -i pattern files
    # 不区分大小写

    # grep -l pattern files
    # 只列出匹配的文件名

    # grep -L pattern files
    # 列出不匹配的文件名

    # grep -w pattern files
    # 匹配整个单词

    # grep -E pattern1|pattern2 files
    # 匹配pattern1或pattern2
    # grep -E '123|abc' filename

    # grep pattern1 files | grep pattern2
    # 查找既匹配pattern1又匹配pattern2的行

    # \'^M\' 以M开头的行
    # \'M$\' 以M结尾的行
    # \'^[124ab]\' 以1,2,4,a,b开头的行

    只在目录中递归搜索所有的.c和.cpp文件:

    $ grep "main()" . -r --include=*.{c,cpp}

    在搜索中排除所有的README文件:

    $ grep "main()" . -r --exclude "README"

3. linux通配符与正则表达式

通配符与正同表达式表示的含义并不相同。

以find为例:

find . -name '*.java'

-name参数后面跟的是通配符,'.'在通配符中不是元字符,在正则表达式中是元字符,能匹配除了换行符之外的任何字符。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注