文件查找及具体实例

一、简介

Which:命令查找

Find:文件查找,针对文件名

Locate:文件查找,依赖数据库

二、命令文件查找

1.找到某些命令文件的位置

Which ls
在这里插入图片描述

Whereis ls
在这里插入图片描述

三、文件查找find

实时查找工具,通过遍历指定路径完成文件查找。

find [option] [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径。默认为当前目录。
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行。默认找出指定路径下的所有文件。
处理动作:对复合条件的文件做操作,默认输出至屏幕。

find /mnt -maxdepth 1
在这里插入图片描述
查找/mnt目录下的所有文件,不进入下一层。-maxdepth 最大深度,表示只进入路径下的前几层。

Find /mnt -maxdepth 2 -mindepth 2
在这里插入图片描述
查找/mnt目录下第二层目录下的所有文件。只在第二层目录下查找。-mindepth 最小深度。

Find /mnt -depth
在这里插入图片描述
先显示目录,再显示文件,默认查找显示结果,是先显示目录,再显示其下的文件。-depth可以先显示其下文件,再显示目录。

Find /mnt -name disk
在这里插入图片描述
在/mnt目录下,按照文件名disk1进行精确查找。
如果需要模糊查找,find /etc -name “pass”,表示查找/etc目录下包含pass字符的文件名。有些系统需要双引号才能正常使用通配符。

Find /usr/bin -iname “*.sh”
在这里插入图片描述
在/usr/bin目录下,查找.sh文件名结尾的文件。-iname,按照文件名查找,不区分大小写。

Find /etc -inum 107
在这里插入图片描述
在/etc目录下,查找107inode编号的文件。-inum,按照节点编号查找。

Find /usr/bin -samefile /bin/passwd
在这里插入图片描述
在/usr/bin目录下,查找和/bin/passwd这个文件相同inode编号的文件。
一般用于查找一个文件的硬链接文件。

Find /etc -link 5
在这里插入图片描述
查找在/etc目录下,链接数为5的文件。-links n,查找链接数。

Find /usr/bin/ -regex ‘.*.shKaTeX parse error: Can't use function '\.' in math mode at position 146: …则表达式,.*表示所有字符。 \̲.̲中\表示转义符,转义.的意思。…:$表示以什么结尾,这里是以sh结尾的意思。

Find /mnt -user root
在这里插入图片描述
查找在/mnt目录下所属者是root账户的文件。-user 指定所属者。

Find /mnt -group root
在这里插入图片描述
查找/etc目录下所属组是root组的文件。-group 指定所属组。

Find /mnt -uid 0
查找/etc目录下所属者的uid是0的文件。-uid 指定用户的uid。

Find /mnt -gid 0
查找/etc目录下所属组的gid是0的文件。-gid 指定所属组的gid。

Find /etc nouser
查找/etc目录下没有所属者的文件。

Find /etc/ nogroup
查找/etc目录下没有所属组的文件。

Find /etc/ -type TYPE
按照文件类型查找/etc目录下的文件。-type 按照文件类型查找。
f:普通文件,例:find / -type f
d:目录文件,例:find / -type d
l:符号链接文件,例:find / -type l
s:套接字文件,例:find / -type s
b:块设备文件,例:find / -type b
c:字符设备文件,例:find / -type c
p:管道文件,例:find / -type p

Find /etc -empty
在/data下面查找空文件。

Find /etc -type d -empty
在/etc下查找空目录。

Find /etc -path “/etc/sane.d” -a prune -o -name “*.conf”
查找etc下除去/etc/sane.d目录下的其余所有文件名尾缀是.conf结尾的文件
-path 路径,从这个路径中进行什么操作。-a 且,-prune 进行剪切,不显示。
-path “/etc/sane.d” -a -prune 选择路径/etc/sane.d目录并且进行剪切不显示。

组合条件:

与:-a
Find /etc -name “*.sh” -a -type f
在这里插入图片描述
查找/etc目录下文件名尾缀是.sh结尾的普通文件

或:-o
Find /etc -name “*.sh” -o -type f
查找/etc下文件名尾缀是.sh结尾的文件或者/etc下的f普通文件。

非:not,!
Find /etc ! -name “*.sh”
查找/etc下文件名不是.sh结尾的所有文件。

部分特殊例子:
Find /mnt -name “*.sh” -o -type f -ls
在这里插入图片描述
-ls的优先级大于-o。所以查询出来的是/data下的普通文件并且显示具体出来。

Find /etc ( -name “*.db” -a -type f ) -ls
将优先级用()括起来确认是-name -a -type,然后再进行-ls显示具体。/转义,否则系统不认为是()
在这里插入图片描述

find -not ( -user wang -name “*.txt” )
查找除了所属者是wang,并且尾缀是.txt的文件

德·摩根定律
(非A)或(非B)=非(A且B)
(非A)且(非B)=非(A或B)

四、文件查找locate

文件查找,本身是外部命令(type locate)。

locate在最小化安装中是没有的,需要安装包

locate [option] [pattern(模式)]

locate文件查找,依赖一个mlocate的数据库,是在mlocate的小数据库中进行查找。

注意:mlocate数据库不是像平时操作文件那样,随时添加一个文件,删除一个文件就立马更新mlocate数据库。它不会随时更新,不是立即更新。这就表示如果是新文件,用locate是无法立即找到的。如果新建了某个文件或者删除了某个文件需要它立即更新,使用updatedb。直接敲出来回车即可。updatedb。
mlocate数据库其实在Linux中是一个文件,这个文件存放在/var/lib/mlocate/mlocate.db。就是这个文件。而updatedb就是对这个文件进行更新。updatedb后可以查看到这个文件的更新时间就是当前。
locate命令因为是查找的mlocate数据库,所以这个命令更多的是用于查找相对稳定,固定不变的文件。并且locate搜索都是模糊搜索。

注意:用locate后如果有通配符,例如:locate “*.sh”,有些系统是需要用双引号引起来的,否则Linux就认为是在当前目录下查找所有的.sh文件.

Locate -i “*.SH”
查找所有.sh结尾的文件,不区分大小写,-i 表示不区分大小写。

locate -n 3 -i “*.SH”
查找所有.sh结尾的文件,不区分大小写并且显示前三个。-n 3 表示返回结果集的前三个。

locate -r “.\sh$”
查找所有.sh结尾的文件。-r后面跟基础正则表达式。

locate和find的区别:
locate是基于mlocate数据库去搜索的,所以速度很快,不耗费性能。但是mlocate数据库不是实时更新的,新文件是找不到的。所以更多的用于固定,稳定不变的文件查找。
find是基于指定路径,实时的去磁盘分区中去完成查找文件的操作。是会影响一定性能的。查找速度略慢。但是精确查找、实时查找,需要注意,find查找,只搜索用户具备读取和执行权限的目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值