Linux学习之路——第三章:Linux常用指令(四)文件搜索命令

Linux学习之路——目录
https://blog.csdn.net/sugar_star/article/details/91350251

上节内容:chmod、chown、chgrp、umask
本节内容:find、locate、which、whereis、grep

四、文件搜索命令

1.find

find命令能够根据给的条件在指定目录下搜索文件,其选项有:
	-name:		根据文件名搜索
	-iname:	不区分大小写
	-inum:		根据识别号搜索
	-type:		根据文件类型搜索
	-size:		根据文件大小搜索
	-user:		根据所有者搜索
	-group:	根据所属组搜索
	-amin:		access,根据访问时间搜索
	-cmin:		change,根据修改属性时间搜索
	-mmin:		modify,根据修改内容时间搜索
	-a:		all,同时满足两个搜索条件
	-o:		or,满足两个搜索条件中的一个
	-exec/-ok:	对搜索结果执行操作

(1)-name

和windows中的根据文件名进行模糊搜索不同,Linux中是根据文件名进行精准搜索,如搜索empty,则搜索到的一定是名为empty的文件,而不会是aempty,emptyb、Empty等文件。

现在输入find /etc -name init,搜索一下etc目录下名为init的文件:
在这里插入图片描述
看起来find命令很不方便,但-name选项是能够配合正则表达式使用的,这里介绍两个常用的正则表达:

*:		匹配任意数量的不定字符
?:	匹配一个不定字符

搜索etc目录下文件名中包含init的文件:
在这里插入图片描述
搜索etc目录下文件名以init为开头的文件:
在这里插入图片描述
搜索etc目录下文件名为init后跟3个字符的文件:
在这里插入图片描述
当报错路径必须在表达式之前时,可以尝试切到其他目录再使用find目录,或使用转移字符“\”。

(2)-iname

现在我们在etc目录下创建一个名为INITTAB的文件,并输入find /etc -iname init???:
在这里插入图片描述

(3)-inum

记得在讲ln命令时,在tmp目录下创建了issue文件的硬链接和软链接,其中硬链接和原文件的识别号是一样的。现在我们用ls命令查看一下它们的识别号具体是什么:在这里插入图片描述
我们就根据其识别号进行搜索,输入find /tmp -inum 522243:在这里插入图片描述
可以看到find命令将issue文件及其硬链接都搜索了出来。

(4)-type

我们在讲ls -l命令时曾说过,文件属性中f代表文件,d代表目录,l代表链接。现在查看一下tmp目录下有哪些:
在这里插入图片描述
白色的是文件,蓝色的是目录,青色的是链接。
使用-type选项搜索文件、目录、链接:在这里插入图片描述

(5)-size

在size命令下:
	+number:		大于
	-number:		小于
	=number:		等于

在find命令以数据块作为文件大小的搜索单位(就很烦),而1个数据块 = 512B = 0.5KB,所以假设我们要查找大于100MB的文件,就等于查找大于102400KB,即204800个数据块的文件。
输入find / -size +204800,搜索/目录下中大于100MB的文件:在这里插入图片描述
可以看到此时只有两个大于100MB的文件,报错的那些是因为这几个文件大小经常变化,所以这些报错是正常的,不用管。

(6)-user和-group

我们先查看一下tmp目录下文件的详细信息:
在这里插入图片描述
使用-user搜索所有者是root的文件:
在这里插入图片描述
使用-group搜索所属组是sugar的文件:
在这里插入图片描述

(7)-amin、-cmin和-mmin

在这里插入图片描述
上图的搜索结果表示:

五分钟内访问过的文件有:				/tmp/gongsi
五分钟内文件属性被修改过的文件有:		/tmp/gongsi和/tmp/empty
五分钟内没有文件内容被修改

(8)-a与-o

输入find /tmp -user sugar -a -group root,搜索tmp目录下所有者是sugar且所属组是root的文件:
在这里插入图片描述
-o选项留给读者自行实验。

(9)-exec/-ok

-exec和-ok选项是可以相互替换的,区别在于-ok选项回在搜索结果中询问哪一个才是所搜索的目标,而-exec选项会将符合条件的文件或目录全显示出来
使用这两个选项能够对搜索到的文件进行操作

输入find /tmp -name is* -a -type l -exec ls -l {} \;来查看tmp目录下文件名是is开头且文件类型是链接的文件的详细信息:
在这里插入图片描述
其中命令末尾的{} \;是-exec/-ok的固定格式,详细情况以后再介绍,这里会用就可以。

2.locate

locate命令和find命令一样,都是搜索文件的命令,其区别在于:
	find命令时在指定的目录下进行实时遍历来搜索文件;
	locate命令是在一个定期更新的资料库里搜索要寻找的文件;
因此locate命令的搜索速度比find命令快很多。其选项有
	-i:		搜索时不区分大小写

分别运行find /etc -iname inittab;locate -i inittab:在这里插入图片描述
可以看到locate命令搜索到了etc目录下的inittab和INITTAB文件及另外的两个文件。
那么locate命令的资料库在哪儿呢?我们可以直接输入locate locate命令看一下:在这里插入图片描述
注意到有一个/var/lib/mlocate/mlocate.db文件,这个就是locate命令的资料库了。
虽然locate命令能很快地得到搜索结果,但它有两个受限的地方。

(1)

locate命令的资料库是定期更新的,而不是即时的。

现在用locate命令搜索一下install.log文件:
在这里插入图片描述
可以看到搜索结果很快就出来了。那么现在我们在root目录下创建一个名为install.bak的新文件,再用locate搜索一下这个文件:
在这里插入图片描述
注意到root目录下已经有了install.bak文件,但locate命令却没有搜索到,这就是因为资料库并没有马上收录install.bak文件。
针对这一点除了等系统本身定期更新快,我们还可以使用updatebd命令让资料库进行更新:
在这里插入图片描述
这次locate命令就将install.bak文件搜索出来了。

(2)

locate只会在资料库里进行搜索,而资料库并不是对所有范围内的文件都进行收录的。

我们经常使用到的tmp目录是个临时目录,不在资料库的收录范围内,所以不管资料库再怎么更新,locate命令都是搜索不到tmp目录下任何文件的。

3.which和whereis

(1)which

which命令能够显示命令本身所在的目录和别名信息。

输入which ls,查看ls命令的信息:
在这里插入图片描述
可以看到ls命令又叫ls --color=auto,所在路径是/bin/ls。不管是ls,ls --color=auto还是/bin/ls,它们产生的效果几乎都是一样的:在这里插入图片描述
但有的命令会产生细微的不同,比如rm命令,我们先用which命令查看一下rm命令:
在这里插入图片描述
rm命令又叫rm -i,其所在路径是/bin/rm,我们分别运行一下试试:在这里插入图片描述
注意到rm和rm -i命令效果是一样的,都会询问是否删除,而/bin/rm则没有。

(2)whereis

whereis命令能显示命令所在目录及其帮助文档路径。

我们使用whereis命令搜索一下ls命令:
在这里插入图片描述
whereis命令显示ls命令的所在目录是/bin/ls,其帮助文档在share目录下的两个位置(绝大部分命令的帮助文档都在/usr/share目录下;这里的man不是男人的意思,而是manual的man)。

4.grep

grep命令能够在文件中搜索字符匹配的行并显示,其选项有:
	-i:		不区分大小写
	-v:		排除指定字串

我们先使用less命令查看一下/etc/inittab文件的内容:在这里插入图片描述
现在使用grep命令在inittab文件中搜索multiuser所在行:在这里插入图片描述
我们之前说过,用#号开头的都是注释,输入grep -v ^# /etc/iniitab(这里的 ^# 是指以#号为行首的意思,因为有的注释是写在有效行的后面),查看除去注释后的内容:
在这里插入图片描述
可以看到inittab文件中只有一行是有效的。
若想将行中含有#的都去掉,只需将#用’'引起来,即grep -v ‘#’ 文件名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值