首页
IT
登录
6mi
u
盘
搜
搜 索
IT
Linux下查找文件的命令
Linux下查找文件的命令
xiaoxiao
2021-03-25
8
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指令:
Linux
下
find
命令在目录结构中搜索文件,并执行指定的操作。
Linux
下
find
命令提供了相当多的查找条件,功能很强大。
在运
行一个非常消耗资源的
find
命令时,很多人都倾向于把它放在后台
执行,因为遍历一个大的文件系统可能会花费很长的时间
(
这里是指sxw
30G
字节以上的文件系统
)
。
1).命令格式:
find pathname -options [-print -exec -ok ...]
2).命令功能:
用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)。
3)命令参数:
pathname //find所要查找的目录路径。
(用.来表示当前目录,用/表示根目录)。
-print
:
find
命令将匹配的文件输出到标准输出。
-exec
:
find
命令对匹配的文件执行该参数所给出的
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查找一个文件。
说明:上述内容参考鸟哥私房菜第三版
转载请注明原文地址: https://ju.6miu.com/read-200325.html
技术
最新回复
(
0
)