Linux下的查找命令有很多,常用的有grep、which、whereis、locate、find。使用linux系统难免会忘记文件所在的位置,小编就是如此。所以我们在文件系统上常常需要根据文件的各种属性去查找符合条件的文件,所以小编今天特意写一篇文章来介绍一下这几个常用的查找命令。
一、Grep(Global search REgular expression and Print out the line)
作用:是一种强大的文本搜索工具,根据用户指定的“模式”对目标文件逐行进行匹配检查,并把匹配的行打印出来。
模式:由正则表达式字符及文本字符所编写的过滤条件。
语法:
grep [选项] pattern [文件名]
–color 高亮显示匹配到的字符串
-c 仅显示各指定文件中包含模式的总行数
-i 模式中字母不区分大小写
-h 不将包含模式的文件名显示在该行上
-l 仅显示包含模式的文件名
-n 显示模式所在行的行号
-s 指定文件若不存在或不可读,不提示错误信息
-v 显示不能被pattern匹配到的行
正则表达式:
. 匹配任意一个字符
* 匹配0 个或多个*前的字符
^ 匹配行开头
$ 匹配行结尾
[] 匹配指定范围内中的任意一个字符
注意:
①其中,pattern为所要匹配的字符串。
②centos7上通过定义了grep的别名来高亮显示匹配到的字符串,centos6没有高亮显示
想要用好grep这个命令,其实就是要写好正则表达式,小编这里重点是要介绍查找命令的,所以这里不对grep的所有功能进行举例介绍,只简单举例几个。
例1:显示用户rpc默认的shell程序
* 这里-w用来匹配到指定单词
例2:使用egrep取出/etc/rc.d/init.d/functions中其基名
* 这里-o仅显示匹配到的字符串
例3:找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行
* 这里也用到了-w,匹配到LISTEN这个单词以及后面\+表示的多个空格
例4;显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
* 这里-i忽略字母大小写,所以只以s开头的就可以查找到
第二种方法:cat /proc/meminfo|grep “^[Ss]”
* 这里的[]是用来匹配到[]里面的大s跟小s
二:Which
which 可执行文件名称
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
作用:主要是用来查找系统PATH目录下的可执行文件。也就是说查找那些我们已经安装好的可以直接执行的命令。比如:
* 这里 alias代表的是命令别名。由图可以看出which是可以分辨出命令的别名的,并且查出命令所在路径位置。
-v 显示版本信息,比如:
三:Whereis
语法:
whereis [选项] 文件或者目录名称
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
作用:用来查找二进制(命令)、源文件、man文件。它是通过文件索引数据库而非PATH来查找的,这点与which不同,所以查找的范围比which要广。比如:
* 我们由图可以看到whereis还找到了ls命令的相关man文件。其他的选项小编就不一一举例了,你们要多动手敲啊。
四:locate
Locate属于非实时查找,用法简单,在locate后面跟上所要查找的关键字即可,没什么难度,但依赖于数据库,也是通过数据库查找文件。它可以找到任意你指定要找的文件,同时locte还可以通过-r选项使用正则表达式,功能十分强大。
特点:查找速度快、模糊查找,比如:
* 小编这里只截取了前三行,但是实际上locate输出的内容是非常多的。它查出了包含cp这两个字母的所有内容,说明它的模糊查找特点。
注意:locate使用的索引数据库里的信息并不一定是实时有效的,可以使用updatedb命令手动更新索引数据库。
五:find
find属于实时查找工具,通过遍历指定路径下的文件系统完成文件查找,
它要比前面四个命令复杂的多,功能也强大的多。这条命令是通过直接搜索硬盘的方式查找的,所以可以保证查找的信息绝对可靠。但它的搜索速度慢。
特点:查找速度慢、精确查找
5.1语法:
Find [选项]…[查找路径][查找条件][处理动作]
-name 基于名称的精确查找
-iname 基于名称忽略大小写的精确查找查找
例1:查找/root/bin下以数字.sh结尾的文件
-user 用户名 基于文件owner的查找
-group 组名 基于文件group的查找
例2:查找/var/目录属主为root且数组为mail的所有文件
-nouser 查找没有owner的文件
-nogroup 查找没有group的文件
5.2 -type 基于文件类型的查找
• f: 普通文件
• d: 目录文件
• l: 符号链接文件
• s:套接字文件
• b: 块设备文件
• c: 字符设备文件
• p: 管道文件
5.3 -size [+|-]#UNIT 根据文件大小来查找
常用单位:k, M, G,c(byte)
#UNIT: (#-1, #]如:6k 表示(5k,6k]
-#UNIT:[0,#-1]如:-6k 表示[0,5k]
+#UNIT:(#,∞)如:+6k 表示(6k,∞)
例3;查找/etc/目录下大于1M且类型为普通文件的所有文件
5.4根据时间戳查找:
以“天”为单位;
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
例4:查找/etc/目录下最近两天内其内容修改过的属于root的文件
5.5根据权限查找
-perm [+|-]mode
mode:精确权限匹配
+mode[/mode] 任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
例5:查找/boot/下所有用户都没有写权限的文件
* 这个是小编在centos7下用+号执行的根据权限查找文件,看到warning没,警告最好用/表示,而且它查找出来的结果也不符合题意,有的user还有写权限呢。
* 由图可知,/表示的权限查找出来的文件才是正确的结果
-mode 每一类对象都必须同时拥有指定权限
例6;查找/app/目录下至少有一类用户没有写权限
处理动作:
-print 默认
-delete 直接删除所查找到的文件,不询问。
-ls 长列出所查找到的文件
-ok command {} \; 对查找到的文件当做下一命令的参数去执行(交互式)
-exec command {} \; 对查找到的文件当做下一命令的参数去执行(非交互式),比如:
* 小编这里使用-ok command {} \;来删除查找到的首字母为大写的文件,确定删除询问时输入y
好了,小编本篇关于查找命令的分享到这里就结束了,还望大家踊跃评论,多多指教。
原创文章,作者:Qianzhihe,如若转载,请注明出处:http://www.178linux.com/84616