当前位置: 代码迷 >> 综合 >> linux中的查找文件或目录(whereis,locate,find)
  详细解决方案

linux中的查找文件或目录(whereis,locate,find)

热度:87   发布时间:2023-09-29 09:59:01.0

背景:linux下有几种查找文件的方式,whereis,local,find各有优劣,介绍一下各自的不同,及使用时机

通常我们都是先使用 whereis 或者 locate 来检查,如果真的找不到,才以 find 查询, 为什么呢?因为 whereis 和locate 是利用数据库来查找数据,并没有实际搜索硬盘, 所以比较省时间
比如下图,whereis hadoop,速度很快

linux中的查找文件或目录(whereis,locate,find)

1. whereis  -b :查找 binary 格式的文家按
                 -m :查找在说明文件 manual 路径下的文件
                   -s :查找 source 来源的文件
2.locate
locate的使用更简单,直接跟文件名就能够得到结果。 还有模糊查询的功能
并且 locate aa ,那么文件名中只要包括aa就会被查询出来,
local的查询速度很快,主要是因为它是经由服务器的数据库查询出来的,但是数据库默认每天更新一次,所以对新增加的文件名,有些可能会查不到,可以通过updatedb  去读取 /etc/updatedb.conf 这个配置文件的设定,更新整个数据库!因为 updatedb 会去查找硬盘,所以执行 updatedb ,可能会等待数分钟

3.find [PATH] [option] [action] 选项和参数: 
与时间有关的选项: -atime, -ctime ,-mtime 

 -mtime n : n 为数字,意义为在 n 天之前被更改过的文件;  

                    +n :列出在 n 天(不含你、)之前被更改过的文

                     -n :列出在 n 天之内(包含 n 天本身)被更改过内容的文件。

            如:  +4代表>=5天前的文件名:ex> find /var -mtime +4
                      -4代表<=4天内的文件名:ex> find /var -mtime -4
                       4则是代表4-5那一天的文件名:ex> find /var -mtime 4

金典栗子: 将过去系统上面 24 小时内有更改过内容 (mtime) 的文件列出 

find / -mtime 0 # 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前, # 有变动过内容的文件都会列出!那如果是三天前的 24 小时内? 

-newer file :file 为一个存在的文件,列出比 file 还要新的文件。 

find /etc -newer /etc/passwd # 用在分辨两个文件之间的新旧关系

find /home -user noas #找到目下下所有该用户的文件

find / -nouser  #找到不数据任何用户的文件

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

-size [+-]SIZE:查找比 SIZE 还要大(+)或小(-)的文件。

                        c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k 

-type TYPE :根据文档类型查找,正规文件 (f), 装置 (b, c), 目录 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性。

-perm mode :根据权限查询使用 -perm -0744,查找-rwxr--r-- 的文件,但是当查找权限为 -rwsr-xr-x ,即 4755 时,也会                           被列出来, 因为 -rwsr-xr-x 癿属性已经囊括了 -rwxr--r-- 的属性了。 

find的其他用法

find  -mmin +60 -name "*.gz" -exec rm -rf {} \;
该范例中特殊的地方有 {} 以及 \; 还有 -exec 这个关键词,这些东西的意义为:
{} 代表的是由 find 找到的内容,如上图所示,find 的结果会被放置到 {} 位置中;
-exec 一直到 \; 是关键词,代表 find 额外动作的开始 (-exec) 到结束 (\;) ,在这中间的就是 find 指令内的额外动作。 在本例中就是 rm -rf {} 
因为;在 bash 环境下是有特殊意义的,因此利用反斜杠跳出;

  相关解决方案