背景:linux下有几种查找文件的方式,whereis,local,find各有优劣,介绍一下各自的不同,及使用时机
通常我们都是先使用 whereis 或者 locate 来检查,如果真的找不到,才以 find 查询, 为什么呢?因为 whereis 和locate 是利用数据库来查找数据,并没有实际搜索硬盘, 所以比较省时间
比如下图,whereis hadoop,速度很快
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
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 环境下是有特殊意义的,因此利用反斜杠跳出;