Linux下的查找命令

       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程序

Linux下的查找命令

* 这里-w用来匹配到指定单词

例2:使用egrep取出/etc/rc.d/init.d/functions中其基名

Linux下的查找命令

* 这里-o仅显示匹配到的字符串

例3:找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行

Linux下的查找命令

* 这里也用到了-w,匹配到LISTEN这个单词以及后面\+表示的多个空格

例4;显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

Linux下的查找命令

* 这里-i忽略字母大小写,所以只以s开头的就可以查找到

第二种方法:cat /proc/meminfo|grep “^[Ss]”
* 这里的[]是用来匹配到[]里面的大s跟小s

二:Which
which 可执行文件名称
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。 

作用:主要是用来查找系统PATH目录下的可执行文件。也就是说查找那些我们已经安装好的可以直接执行的命令。比如

Linux下的查找命令

* 这里 alias代表的是命令别名。由图可以看出which是可以分辨出命令的别名的,并且查出命令所在路径位置。

-v 显示版本信息,比如:

Linux下的查找命令

三:Whereis

语法: 
whereis [选项] 文件或者目录名称  
-b : 只找二进制文件 
-m: 只找在说明文件manual路径下的文件 
-s : 只找source源文件 
-u : 没有说明文档的文件

作用:用来查找二进制(命令)、源文件、man文件。它是通过文件索引数据库而非PATH来查找的,这点与which不同,所以查找的范围比which要广。比如:

Linux下的查找命令

* 我们由图可以看到whereis还找到了ls命令的相关man文件。其他的选项小编就不一一举例了,你们要多动手敲啊。

四:locate

Locate属于非实时查找,用法简单,在locate后面跟上所要查找的关键字即可,没什么难度,但依赖于数据库,也是通过数据库查找文件。它可以找到任意你指定要找的文件,同时locte还可以通过-r选项使用正则表达式,功能十分强大。

特点:查找速度快、模糊查找,比如:

Linux下的查找命令

* 小编这里只截取了前三行,是实际上locate输出的内容是非常多的。它查出了包含cp这两个字母的所有内容,说明它的模糊查找特点。

注意:locate使用的索引数据库里的信息并不一定是实时有效的,可以使用updatedb命令手动更新索引数据库。

五:find

find属于实时查找工具,通过遍历指定路径下的文件系统完成文件查找,

它要比前面四个命令复杂的多,功能也强大的多。这条命令是通过直接搜索硬盘的方式查找的,所以可以保证查找的信息绝对可靠。但它的搜索速度慢。

特点:查找速度慢、精确查找

5.1语法:

Find [选项]…[查找路径][查找条件][处理动作]

-name 基于名称的精确查找

-iname 基于名称忽略大小写的精确查找查找

例1:查找/root/bin下以数字.sh结尾的文件

Linux下的查找命令

-user 用户名  基于文件owner的查找

-group 组名 基于文件group的查找

例2:查找/var/目录属主为root且数组为mail的所有文件

Linux下的查找命令

-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且类型为普通文件的所有文件

Linux下的查找命令

5.4根据时间戳查找:

以“天”为单位;

     -atime [+|-]#,

     #: [#,#+1)

     +#: [#+1,∞]

     -#: [0,#)

     -mtime

     -ctime

     以“分钟”为单位:

     -amin

     -mmin

     -cmin

例4:查找/etc/目录下最近两天内其内容修改过的属于root的文件

Linux下的查找命令

5.5根据权限查找

     -perm [+|-]mode

     mode:精确权限匹配

     +mode[/mode] 任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰

例5:查找/boot/下所有用户都没有写权限的文件

Linux下的查找命令

* 这个是小编在centos7下用+号执行的根据权限查找文件,看到warning没,警告最好用/表示,而且它查找出来的结果也不符合题意,有的user还有写权限呢。

Linux下的查找命令

* 由图可知,/表示的权限查找出来的文件才是正确的结果

     -mode  每一类对象都必须同时拥有指定权限

例6;查找/app/目录下至少有一类用户没有写权限

Linux下的查找命令

处理动作:

    -print 默认

    -delete 直接删除所查找到的文件,不询问。

    -ls 长列出所查找到的文件

    -ok command {} \; 对查找到的文件当做下一命令的参数去执行(交互式)

    -exec command {} \; 对查找到的文件当做下一命令的参数去执行(非交互式),比如:

Linux下的查找命令

* 小编这里使用-ok command {} \;来删除查找到的首字母为大写的文件,确定删除询问时输入y

    好了,小编本篇关于查找命令的分享到这里就结束了,还望大家踊跃评论,多多指教。


原创文章,作者:Qianzhihe,如若转载,请注明出处:http://www.178linux.com/84616

(0)
QianzhiheQianzhihe
上一篇 2017-08-13 00:13
下一篇 2017-08-13 13:39

相关推荐

  • LVM 与快照

    LVM: Logical Volume Manager 概念 它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。 允许对卷进行方便操作的抽象层,包括重新设定 文件系统的大小  允许在多个物理设备间重新组织文件系统 • 将设备指定为物理卷 • 用一个或者多个物理卷来创建一个卷组 • 物理卷是用固…

    Linux干货 2016-09-05
  • CentOS6系统启动流程

    概述     了解系统的启动流程,有助于我们了解Linux系统上的一些工作原理,有助于我们深入的理解一个系统的运作方式,那么本篇就以CentOS6系统为例,介绍一下有关Linux系统启动相关的内容,分为一下几个部分:     1、Linux系统的一些基础概念  &nbs…

    Linux干货 2016-09-09
  • Hadoop HDFS分布式文件系统设计要点与架构

    Hadoop简介:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件…

    Linux干货 2015-04-13
  • 22期第二周课堂练习

    Linux上文件系统管理类命令都有哪些,其常用的使用方法及其相关示例演示     (1).cp文件复制命令     单源复制:cp [OPTION]… [-T] SOURCE DEST     多源复制:cp&nbs…

    Linux干货 2016-08-22
  • vim shell 练习作业题

    vim练习题 1. 复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符   :%s/^[[:blank:]]\+//g 【注意要把/etc/profile复制到/tmp下,cp  /etc/profile  /tmp(尽量不要修改原文件)】 2. 复制/etc/rc.d…

    2017-08-07
  • 如何在Linux上创建文件系统

        谈到如何创建文件系统,在这里就不得不提一下什么是文件系统,在百度上搜索得到的定义是这样的:操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统,简单的看这个概念可能感觉还是有点茫茫然,其实简单的说,就是定义磁盘存取数据的一种逻辑组织,我们都知道磁盘是一种存储数据的硬件,首先但这个硬件的工作当…

    Linux干货 2016-01-18