linux下的文件查找命令对比(locate,find,grep,sed)

    在linux下,文件系统占据着非常重要的位置,而我们对于文件系统的操作也显得尤为重要。

如果我们想熟悉的操作文件系统,其中,我们需要对文本的查找,截取等命令需要熟悉的掌握。

这里就不得不说几个关于文本操作的几个命令的作用详细介绍和对比。比如: locate,find ,grep ,sed等。

这里,grep ,sed 都属于文本的查找,过滤的文本搜索工具。locate,find属于查找文件的的工具,可以查找我们想找却又

不知道具体路径的文件;或者只知道文件的部分信息,这样我们可以使用locate和find进行搜索文件。

1.locate  

locate 属于非实时查找(根据索引查找),其特点为,查找速度快,非精准查找,模糊查找。

首先,locate对于文件的搜索是根据数据库来搜索文件的,在数据库中搜索文件比使用find进行搜索的速度要快。

这个是比较简单的搜索工具,仅需要 locate + keyword ,使用locate命命令后面跟上需要搜索的关键词即可。

但是,有一点需要注意的就是因为locate是在数据库中进行搜索的,而我们都知道数据库更新需要一定条件,它

并不是随时更新的。所以我们使用locate进行搜索是很多时候需要先手动更新一下数据库。手动更新数据库的方法就是使

updatedb命令更新数据库,数据库由于信息量比较大,所以更新时一般会比较慢 。所以为了不影响我们的工作,我们可以

在updatedb 后面跟上一个 &符号,这样会在后台自动的更新数据库,我们也可以在终端上做别的工作。

例如,我们不知道 issue的位置,我们需要查一下:

locate.png

2.find 

find 属于实时查找(遍历所有的文件进行条件匹配),其特点为:精准查找,但速度比较慢

find的用法结构为:find [option]…[查找路径][查找条件][处理动作]

[查找路径]:默认为当前目录

[查找条件]:默认为指定路径下的所有文件

[处理动作]:默认为显示在屏幕上

查找条件:

-name "文件名称":支持使用glob通配符

* ? [] [^]

-iname "文件名称":查找时忽略字符的大小写

-user USERNAME :根据文件的属主进行查找

-group GRPNAME :根据文件的属组进行查找

-uid UID

-gid GID

-nouser:查找没有属主的文件

-nogroup:查找没有属组的文件

-inum n :按inode号进行查询

组合条件查找:

与 : -a ,同时满足

或 : -o ,满足一个条件即可

非 : !,-not ,条件取反

德·摩根定律:

非(P 且 Q) = (非 P) 或 (非 Q)

非(P 或 Q) = (非 P) 且 (非 Q)

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)

根据文件类型进行查找:

-type TYPE :根据文件类型查找

f :普通文件 d :目录文件 l :符号链接 b :块设备

c :字符设备 s :套接字文件 p :命令管道

根据文件大小查询:

-size[+|-]#UNIT :常用单位 :k,M,G

#UNIT: (#-1, #],如:6k

-#UNIT:[0,#-1], 如:-6k

+#UNIT:(#,∞), 如:+6k

案例:1.找出/tmp目录下,属主不是root,且文件名不是fstab的文件  (为了显示摩根定律的作用,我使用 head -4 只取了前4行)

findtest1.png

 2。排除目录

  findtest2.png

3.sed流编译器

    说流编译器可能有点过于概念化,通俗的讲它的编译功能主要体现在 sed -i 这个参数上,通过修改原文本,它的作用和grep都是进行文本内容的操作,不是查找文件。这里偶然间看到一个关于sed的功能图,很详细。供参考!

sed快速学习.png

4.grep 

grep 是一个文本过滤器,过滤文本内容。按照模式的内容进行逐行匹配并打印下来。grep和sed都支持正则表达式。在对文本的搜索,过滤中,这两个文本处理工具是离不开正则表达式的。

    grep [OPTIONS] PATTERN [FILE…]

    [option] :

    –color=auto: 对匹配到的文本着色显示;  

    -v: 显示不能够被pattern匹配到的行;  

    -i: 忽略字符大小写  

    -n:显示匹配的行号  

    -c: 统计匹配的行数  

    -o: 仅显示匹配到的字符串;  

    -q: 静默模式,不输出任何信息  

    -A #:after, 后#行  

    -B #: before, 前#行  

    -C #:context, 前后各#行  

    -e:实现多个选项间的逻辑or关系
grep
–e ‘cat ’
-e ‘dog’ file
 

    –
w:整行匹配整个单词

    

    –
E:使用ERE

这个还是对练习练习,我在上一篇博客中有关于sed和grep与正则表达式的使用,具体的案例。

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

(1)
zhongzhong
上一篇 2016-08-15 09:24
下一篇 2016-08-15 09:24

相关推荐

  • 雷人的程序注释

    使用Google code search可以搜索到一些比较有趣的代码注释,呵呵。下面的这些程序注释有搞笑的,也有粗口,看来写程序本来也不是一件很枯燥的事,关键看你的心态如何了。读到这些注释的时候,只能想到一个词,那就是“疯狂的程序员”,哈哈。Have a Fun  ;-) 写个程序时不忘表达自己的感情,以免以后忘了。 呵呵,看来自己也不是很自信。 …

    Linux干货 2016-05-10
  • 【超全整理】《Linux云计算从入门到精通》系列实战笔记全放送

          为了方便Linux云计算爱好者的学习查看,马哥Linx云计算团队特别整理了《Linux云计算从入门到精通》年度重磅大放送,囊括了整个学习过程的学习精华,内容全部由马哥Linux云计算学员撰写,欢迎大家支持!!!       详情请看:  一、Linux运维基础实战入门 从Linux0基础入门开始,全面讲解作为新手如何学习Linux,以及学习方法和…

    2017-09-14
  • 用户和组的相关配置文件

      用户,是计算机识别使用者身份的一种唯一使用标识。 而现实生活中为了方便人类记忆使用等,用户名往往是用便于人类识别的语言来记录的。但事实上计算机并不对人类语言敏感,所以有必要把人类语言跟机器语言对应上。于是,linux给每一个创建用户提供了一个UID。当使用用户名登录时,系统换自动对应UID来识别该用户身份。 而用户名与UID的对应信息就储存在一…

    Linux干货 2016-10-23
  • Linux里的用户与组

    任何事务的进行都离不开管理,脱离了管理的系统将会是一团乱麻。今天就来讲讲Linux里的用户与组的管理 首先,用户与组不会凭空出现,必须得是系统本身或人为创建的 。     所以,系统创建的就叫系统用户.系统组,用户创建的就是普通用户.普通组。 useradd  创建用户 -u 创建用户并指定用户的UID -g…

    2017-07-30
  • 第六周作业

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; %s@^[[:space:]]\+@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的…

    Linux干货 2017-03-03
  • 分区块基本知识点及侧重点 — 上

        我们需要熟练了解磁盘分区原理。元数据及块设备对应inode是最重要也是最基本的原理。后面分区很多地方都和inode有关系。    一个磁盘片有63扇区,1024存储位,256个磁头,每个扇区只有前512字节是有效存储单元。所以后面磁盘清零都是跟512这个数字有关。    数据分数据区和元数据…

    Linux干货 2016-08-24

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 10:08

    对文件查找部分文字太多,能简练尽量简练点,多些操作和联系,find命令是比较常用的工具,需多加练习,熟练掌握。