Linux下查找文件的命令

Linux下文件的查找命令:

Which查看可执行文件的位置。
whereis查看文件的位置。(只能用于查找程序名)
locate配合数据库查看文件位置。
Find实际搜寻硬盘查询文件名称。


一、脚本文件名的查找:

1.which(查找“可执行文件”)
which是根据用户所设置的PATH变量内的目录去查找可执行文件的。
 可执行文件:例如ls、cat、pwd等可以在命令行直接执行的文件。
①一般使用格式:
which [-a] command(可执行文件名称)
②参数说明:
-a :将path目录下可找到的命令(同名的)均列出,而不是只列出第一个被找到的命令名称。
③命令功能:
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。

④命令参数:
-n 指定文件名长度,指定的长度必须大于或等于所有文
件中最长的文件名。
-p 与-n参数相同,但此处包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息


特别的,cd这个命令是bash内置的,而which默认查找的是PATH内所规范的目录。
所以,使用which肯定是查找不到cd存放的路径的,而是需要使用type命令。

二、文件名的查找:

1.whereis指令:

通过whereis和locate命令来查找文件会比find命令快很多,原因如下:
Linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate查找文件时,会从数据库中查找文件,而find命令是在硬盘中查找文件的,效率极低。

由于该数据库在默认情况下是每隔一个星期更新一次,因此,我们在数据库中查找文件时,可能找到的数据并不是我们真正想要的,比如:查找到的文件是刚刚才删除过的文件或者刚刚新创建的文件,但是数据库信息还没有更新。
①命令使用格式:
whereis [-bmsu] 文件名或者目录名

②命令功能:
whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。


③参数说明:
whereis命令只能用于程序名的查找,而且可以查找的文件或目录也有限制:
-b (binary) :只查找二进制格式的文件
-m  (manual):只能在说明文件manual路径下的文件
-s            :只能查找source源文件
-u             :查找不在上述选项当中的其他特殊文件。

如果省略参数,则返回查找到的所有信息



2.locate指令:

①命令使用格式:
locate [-ir] keyword
②参数说明:
-i    :忽略大小写的差异
-r     :后接正则表达式的显示方式。
③功能描述:
依据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名。

注意:
locate寻找的数据是由已创建的数据库/var/lib/mlocate/ 里面的数据所查找到的,不用直接去硬盘查找,所以速度很快。。


所存在的缺陷是:
因为是由数据库查找的,而该数据库不是实时更新的,所以在查找文件时,会将刚刚删除掉的文件也会查找出来,查找不到刚刚新创建的文件,所以这时就需要更新数据库。

更新数据库的方法:
使用“updatedb”, updatedb会去查找硬盘,所以速度会较慢。



3.find指令(在磁盘中查找文件)

简要介绍find指令:
Linuxfind命令在目录结构中搜索文件,并执行指定的操作。
Linuxfind命令提供了相当多的查找条件,功能很强大。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指sxw30G字节以上的文件系统)

1).命令格式:
find pathname -options [-print -exec -ok ...]

2).命令功能:
用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)。

3)命令参数:
pathname //find所要查找的目录路径。
(用.来表示当前目录,用/表示根目录)。
-printfind命令将匹配的文件输出到标准输出。
-execfind命令对匹配的文件执行该参数所给出的shell
令。相应命令的形式为'command' { } \;,注意{ }\
之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行
该参数所给出的shell命令,在执行每一个命令之前,都会给出提
示,让用户来确定是否执行。

下面详细说明各个参数的使用:

①.根据文件名查找:
find pathname [选项] filename
1).-name (根据文件名查找,区分大小写)



2).-iname(根据文件名查找,不区分大小写)




3.)文件名通配符:
“*”表示通配任意的字符(字符个数不定)。



?”表示通配任意单个字符。



“[]”表示通配括号里面的任意一个字符,可将[]内的字符单独取出使其与外面的字符构成一个文件名。




②根据文件的时间戳信息查找文件。
根据时间戳信息查找的时候,所有的time都是以天为单位,min都是以分钟为单位。

+n表示n【天/分钟】以前的时间(不包含n)
-n表示n【天/分钟】以内的时间(包含n)
1)以最近访问文件的时间为参数(atime)


-atime(单位是天)

find pathname -atime +n(表示n天以前访问过的文件)
find pathname -atime -n(表示n天内访问过的文件)





-amin(单位是分钟)
find pathname -amin +n(表示n分钟以前访问过的文件)
find pathname -amin -n(表示n分钟内被访问过的文件)





③.根据文件所属用户和所属组来查找文件:

1)-user(根据文件的拥有者来查找文件)




2)-group(根据文件的所属组来查找文件)
find pathname -group 所属组



4.根据-nouser 或者-nogroup来查找

find filename -nouser(-nogroup)

5.根据权限来查找文件
-perm



6.根据文件类型查找文件
-type查找某一类型的文件,诸如:
b -块设备文件。
d -目录。
c -字符设备文件。
p -管道文件。
l -符号链接文件。
f -普通文件。



其他类型的文件也是使用类似方法,故不一一验证了哦。

7.根据文件的大小来查找文件

-size
find pathname -size +n(代表的是大于n字节的文件)
find pathname -size -n(代表的是大小在n字节之内的文件)
find pathname -size n(代表大小等于n字节的文件)


8.按照文件的创建时间查找
find pathname -newer filename

9.①查找深度距离当前目录最多有n个目录深度的文件。




②-mindepth n
查找深度距离当前目录至少有n个子目录深度


10.-empty
查找为空的路径或者目录




11。按照硬连接的数目进行查找

link n (硬连接连接数等于n的文件或目录)

-link +n(硬连接数大于n的文件)

-link -n  (硬连接数小于n的文件)

首先查看一下当前目录中每个文件的硬连接数:









现在在当前目录中根据硬连接数来进行文件的查找:







12.-a、-o、 -not(与、或、非)
①-a连接两个条件(必须都为真)

②-o连接两个条件(只需保证至少有一个为真就好)

③not连接一个条件(对条件取反)









总结:


  一般当我们需要查找一个文件的所在位置时,可以使用whereis 和locate去数据库中查找,但是需注意更新数据库中的数据,否则查找到的文件可能不是我们想要的。
如果找不到,再使用find命令去遍历硬盘。
原因我们现在都已经很清楚了,因为whereis和locate是去数据库中查找文件的,不需要遍历硬盘,所以查找的速度要远远快于使用find查找一个文件。



说明:上述内容参考鸟哥私房菜第三版






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值