grep、find、whereis、locate、which命令

一. find命令

1.基础使用说明:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]   ( [-H] [-L] [-P] [-D debugopts] [-Olevel]不常用)

日常用:

find [path...] [expression] 

其中expression可以分为——“-options [-print -exec -ok  ]”

即:

find   path   -option   [  -print ]   [ -exec   -ok   command ]   {} \;

 

path: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

-options:指定find命令的常用选项,下节详细介绍

-print:find命令将匹配的文件输出到标准输出

-exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;  注意{   }和\;之间的空格 。

例:find . -type f -exec ls -l {  } \;  用ls -l 命令列出匹配到的文件。

-ok:和-exec的作用相同,但在执行每一个命令前都会提示用户是否同意。

 

2.options说明

-name   filename             #查找名为filename的文件

find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
-perm                              #按执行权限来查找

find . -perm 755 –print 在当前目录下查找文件权限位为755的文件
-user    username             #按文件属主来查找

find ~ -user sam –print 在$HOME目录中查找文件属主为sam的文件
-group groupname            #按组来查找

find /apps -group gem –print 在/apps目录下查找属于gem用户组的文件 

-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存


-mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前

find / -mtime -5 –print 在系统根目录下查找更改时间在5日以内的文件 
find /var/adm -mtime +3 –print 在/var/adm目录下查找更改时间在3日以前的文件

-ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-newer   f1 !f2               #查更改时间比f1新但比f2旧的文件


-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件

find /etc -type d –print 在/etc目录下查找所有的目录 
find . ! -type d –print 在当前目录下查找除目录以外的所有类型的文件 
find /etc -type l –print 在/etc目录下查找所有的符号链接文件
-size      n[c]               # 查找文件长度为n块的文件,带有c时表示文件长度以字节计

find . -size +1000000c –print 在当前目录下查找文件长度大于1 M字节的文件 
find /home/apache -size 100c –print 在/home/apache目录下查找文件长度恰好为100字节的文件 
find . -size +10 –print 在当前目录下查找长度超过10块的文件(一块等于512字节)
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                %;      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-prune                       #忽略某个目录

 

二. grep命令

1.简介:

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

2.使用说明:

grep [OPTIONS] PATTERN [FILE...] 
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

  • grep命令用于搜索由Pattern参数指定的模式,并将每个匹配的行写入标准输出中。这些模式是具有限定的正则表达式。
  • 如果在FILE参数中指定了多个名称,grep命令将显示包含匹配行的文件的名称。
  • 对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ), \ ) 出现在 Pattern参数中时必须带双引号。
  • 如果 Pattern参数不是简单字符串,通常必须用单引号将整个模式括起来。在诸如 [a-z], 之类的表达式中,-(减号)cml 可根据当前正在整理的序列来指定一个范围。整理序列可以定义等价的类以供在字符范围中使用。如果未指定任何文件,grep会假定为标准输入。

3.OPTIONS主要参数

-c:只打印匹配的行数,不显示匹配的内容。

-?:同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

-i:不区分大小写(只适用于单字符)。

-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。

-q,--quiet:取消显示,只返回退出状态。0则表示找到了匹配的行。

-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:反检索,只显示不匹配的行

4.grep正则表达式元字符集(基本集)

^  锚定行的开始 如:'^grep'匹配所有以grep开头的行。

$  锚定行的结束 如:'grep$'匹配所有以grep结尾的行。

.   匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

*  匹配零个或多个先前字符 如:' *grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

[^]  匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。

\(..\)  标记匹配字符,如:'\(love\)',love被标记为1。

\<  锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。

\>  锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。

x\{m\} 连续重复字符x,m次,如:'o\{5\}'匹配包含连续5个o的行。

x\{m,\} 连续重复字符x,至少m次,如:'o\{5,\}'匹配至少连续有5个o的行。

x\{m,n\} 连续重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配连续5--10个o的行。

\w  匹配一个文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

\W  w的反置形式,匹配一个非单词字符,如点号句号等。\W*则可匹配多个。

\b  单词锁定符,如: '\bgrep\b'只匹配grep,即只能是grep这个单词,两边均为空格。

 

三. whereis命令

1. 简介

  • find相比,whereis查找的速度非常快,这是因为Linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。 
  • 但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
  • locate可以查询所有文件,而whereis只是用来查询程序。 

2. 使用方式

whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]
-b  只查找二进制文件(编译后的程序)。
-B<目录>  只在设置的目录下查找二进制文件。
-f  不显示文件名前的路径名称。
-m  只查找说明文件。
-M<目录>  只在设置的目录下查找说明文件。
-s  只查找原始代码文件。
-S<目录>  只在设置的目录下查找原始代码文件。
-u  查找不包含指定类型的文件。

 

四. locate命令

1. 简介

  • Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。

2.使用方法

  • locate [参数 ]

    --help  在线帮助。
    --version  显示版本信息。
    -e   将排除在寻找的范围之外。
    -f   将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案    放在资料库中。
    -q  安静模式,不会显示任何错误讯息。
    -n 至多显示 n个输出。
    -r 使用正规运算式 做寻找的条件。
    -o 指定资料库存的名称。
    -d 指定资料库的路径
    -h 显示辅助讯息
    -V 显示程式的版本讯息
     
  • 可以通过该命令,手动更新查找数据库:locate -u 

 

五. which 命令

  • which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
  • which 可执行文件名称
    -n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
    -p  与-n参数相同,但此处的包括了文件的路径。
    -w  指定输出时栏位的宽度。
    -V  显示版本信息

六. 它们的区别

  • which  查看可执行文件的位置。
  • whereis 查看文件的位置。 
  • locate   配合数据库查看文件位置。
  • find   实际搜寻硬盘查询文件名称。
  • 总体来说:
    find和locate类似,都是查找文件,区别在于是实际查找还是查找数据库。
    which和whereis类似,都是查找程序,区别在于是查找PATH下的还是查找数据库。

 

  • 关于which和whereis查找原理:
    经测试证明which和whereis都只是在设定的目录下简单地匹配字符串,并不会真的去确认找到的文件是不是真正的可执行文件、源码和man手册。
  • 关于which和whereis的区别:
    which:文件名完全匹配、有后缀名也不行、遍历$PATH、找到一个匹配的文件即退出。
    whereis:文件名完全配配、但可有后缀名、遍历包含$PATH的多个目录、找出所有匹配文件。

 

参考文档:

Linux find 用法示例

linux grep命令

【日常小记】linux中强大且常用命令:find、grep

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值