Linux下查找文件的命令

    xiaoxiao2021-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指令: 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查找一个文件。 说明:上述内容参考鸟哥私房菜第三版
    转载请注明原文地址: https://ju.6miu.com/read-200325.html

    最新回复(0)