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
下一篇 2017-08-13

相关推荐

  • 设计模式原则详解

        我们在应用程序开发中,一般要求尽量两做到可维护性和可复用性。       应用程序的复用可以提高应用程序的开发效率和质量,节约开发成本,恰当的复用还可以改善系统的可维护性。而在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些设…

    Linux干货 2015-04-07
  • SSH——安全的通信

    SSH ·ssh:secure shell, protocol, 22/tcp,  安全的远程登录 ·OpenSSH:ssh协议的开源实现 ·dropbear:另一个开源实现 ·SSH协议版本:          v1:基于CRC-32做MAC,不安全;man-in-m…

    Linux干货 2016-09-25
  • Linux进程查看与管理命令总结

    Linux进程查看与管理命令总结 内核的功能: 进程管理 文件系统 网络功能 内存管理 驱动程序 安全功能 Process:运行中程序的一个副本。(存在生命周期) Linux内核存储进程信息的固定格式:task struct 多个任务的task struct组件的链表:task list 进程创建: init 父子关系 进程:都有其父进程创建 fork(),…

    Linux干货 2016-09-07
  • lvs 基本概念

    LVS(linux virtual machine) 的简写,是一个虚拟的服务器集群系统,主要用于4层负载均衡。 宗旨: 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器. 很好的可伸缩性(Scalability) 很好的可靠性(Reliability),应该还是高可用吧 很好的可管理性(Manageability…

    Linux干货 2015-09-14
  • Linux高级磁盘管理-RAID管理

    在冯诺依曼体系机构中,输入输出要存储的外部磁盘I/O能力实在太低,尤其是企业面对高并发的访问量,在系统内部需要大量调度磁盘的上的网页文件资源,这些都会产生大量的I/O,一个磁盘的I/O能力不管如何提升毕竟是有线的,尤其是机械硬盘;同时为了保障业务的连续性,磁盘故障时必须提供冗余能力,面对这样的实际需求环境,RAID技术产生了,通过组织磁盘阵列方式提供I/O,…

    Linux干货 2016-09-06
  • 第三周

    第三周blog 第三周blog 1    列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。    # who|cut -d’ ‘ -f 1 |sort -u 2    取出最后登录到当前系统的用户的相关信息。  …

    Linux干货 2016-12-19