Linux文件的查找

  在Linux下一切皆文件,那么查找文件就显得尤为关键,我们经常需要知道哪个文件放在哪里,才能够对该文件进行操作,此时就需要一些查询命令将所需要的文件完整路径找到,这样才能修改。


命令文件查找

当你在Linux中输入[TAB]就能看到用户所有可以执行的命令,而当你想知道一个命令是否存在于系统中时,总不能在一大堆命令中去人眼扫描,因此当你需要知道一个命令文件是否存在于你的系统中、存在哪里时,就可以使用which命令去查找。

which

使用格式:which [-a] command

参数:
-a:将所有由PATH目录中可以找到的命令均列出,而非只列出第一个

这里写图片描述

可以看到第一次我们使用which去查找which命令时,找到一个alias,这时一个命令别名,即你输入which会等于后面的一串命令。当我们使用-a参数时,找到了我们经常见到的bin目录下的which。
接着我们试着查找一下cd:

这里写图片描述

你会发现我们一直使用的cd指令竟然查找不到,其实这时因为cd并非PATH内所规范的目录,它是bash内置的命令 ,也就是说which是根据PATH环境变量所规范路径去查询“执行文件”的文件名。

文件名查找

这里介绍3个命令-whereis,locate和find,其中find毋容置疑是最强大、功能最多的,但相应的速度就慢,因此如果你是单纯的查找一个简单的文件时,可以先用whereis和locate试试,这两个指令是利用数据库去查找数据的,并且并不会实际查询硬盘内部,因此查询快速,但当你查找不到的时候就只能使用find去查查看。

whereis

使用格式:whereis [-bmsu]文件或目录名

参数:
-b:只找二进制格式文件
-m: 只找在说明文件路径下的文件
-s: 只找源文件
-u: 查找不在上述3个选项当中的其他特殊文件

这里写图片描述

当使用whereis查找一个文件时,出现了两个路径,使用-m参数之后发现其中一个路径是说明文件;接着我们试着将这个文件删除,再次查找

这里写图片描述

结果和上一次查找相同,可是你明明已经将这文件删除了,为什么还是会查找到路径呢,这就是我们之前说的,Linux系统会将系统内的所有文件都记录在一个数据库文件里面,whereis和locate两条命令都是通过数据库文件查找的,所有当你删除文件时,若数据库文件中还并未删除那么你依旧可以查找到。同理,刚刚创建的文件如果在数据库文件中没有更新,你依旧查找不到。

这里写图片描述

locate

使用格式:locate [-ir] keyword

参数:
-i:忽略大小写的差异
-r:后面可接正规表达式的显示方式

这里写图片描述

这里省略很多文件,当使用locate查找文件时就更加简单,在其后面输入文件部分名称后即能得到结果,所以我们这里得到了若干含有passwd的路径,虽然便捷,但同样存在和whereis同样的问题,由于是数据库文件中的查找,而数据库的文件一般默认每天创建更新一次(编译器不同,时间也会不同),所以新建的文件查不到,删除的文件可以查找,而想要更新数据库的文件就需要”updatedb”指令,这个指令会去读取/etc/updatedb.conf这个文件的设置,然后再去硬盘里面进行查找文件名的操作,最后就能更新整个数据库的文件了(友情提醒:更新文件时间可能会需要数分钟)。

find

使用格式:find pathname -options [action]

1.与文件权限及名称有关的参数:

-name filename:查找文件名为filename的文件

这里写图片描述

-size [+-] n: 查找比SIZE还要大(+)、小(-)或刚好等于(无参)的文件。

这个SIZE的规格有:c代表byte;k代表1024byte,即1k字节。因此如果想要查找比10k还要大的文件,即“-size +10k”

这里写图片描述

-type TYPE:查找文件类型为TYPE类型的。
-perm mode:查找文件权限为mode的文件,查找属性和chmod的类似。
-perm -mode:查找文件权限必须全部包括mode的权限的文件,即会查找等于或高于mode权限的文件。
-perm +mode:查找文件权限包含任一mode权限的文件,即会查找低于或等于mode权限的文件。

这里写图片描述

2.与时间有关的参数:

首先介绍在Linux下的3个时间atime-访问时间(access time);mtime-修改时间(modification time);和ctime-改变时间(change time)。从字面上来看“修改时间”和“改变时间”是相似的,但是这里改变时间指的是文件的索引节点发生了改变,修改则是文本本身的内容发生了变化。因此atime 是在读取文件或者执行文件时更改的,mtime 是在写入文件时随文件内容的更改而更改的,ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的。下面主要以mtime为例子介绍

-mtime n:查找为n天之前的“当天修改”的文件名。
-mtime +n:列出在n天前(不包括n天)被更改的文件名。
-mtime -n:列出在n天之内(包括n天)被修改的文件名。
-newer file:列出比file还要新修改的文件名。

这里写图片描述

当然这里的时间也存在物理意义的n天内,n天前与n天后,也就是说当你输入5天时,找到的是5天前开始到6天前的文件;+5表示比5天前还要早,即6天以前的所有文件;-5则表示5天内的时间修改的文件

这里写图片描述

3.与用户或用户组有关的参数

-uid n:这里的n表示用户的账户UID,查找用户ID为n的文件。
-gid n:这里的n表示用户组的账户GID,查找用户组ID为n的文件。
-user name:列出用户名为name的文件名。
-group name:列出用户组名为name的文件名。
-nouser:查找的文件所有者不在/ect/passwd中。即查找无主文件。
-nogroup:查找的文件所有用户组不存在与/ect/passwd。即五用户组文件。

当你的系统中某个账号删除了,需要清除相关文件时nouser和nogroup就变得非常便捷。

4.其他可执行操作

-exec command:command为其他命令,-exec后可接其他命令来处理查找到的结果。
-print:将结果打印到屏幕上,此操作为默认操作。

这里写图片描述

这里指令存在特殊的地方有”{}”和“\;”(注意两者中间存在空格),其中{}表示“从find中找到的内容”,也就是说find找到的结果会放在{}位置中。从-exec到“\;”是关键字,代表find的额外command从开始(-exec)到结束(\;),中间存在的就是额外指令,如图中的ls -l(特别注意这里不可以使用别名,也就是说ll不会被识别),又因为”;”在bash环境下是有其他含义的,因此使用了转义字符“\”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值