再来谈一谈怎么查找文件。在Linux下面也有相当优异的查找命令。通常find不很常用的,因为速度慢!通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来查找。为什么呢?因为whereis与locate是利用数据库来查找数据,所以相当快速,而且并没有实际查询硬盘,比较节省时间。
引用来自: 鸟哥. “鸟哥的Linux私房菜 基础学习篇(第三版)。” Apple Books.
有趣的博客地址 20ID的博客
find语法
find [PATH] [option] [action]
参数:
与时间有关的参数:共有 –atime
、-ctime
与 -mtime
,下面以 -mtime
说明:
-mtime
n :n 为数字,意义为在 n 天之前的“一天之内”被更改过的文件;-mtime
+n :列出在 n 天之前(不含 n 天本身)被更改过的文件名;-mtime
-n :列出在 n 天之内(含 n 天本身)被更改过的文件名;-newer
file :file 为一个存在的文件,列出比 file 还要新的文件名。
范例:
1. 将过去系统上面 24 小时内有改动(mtime
)的文件列出
find / -mtime 0
那个 0 是重点! 0 代表目前的时间,所以,从现在开始到 24 小时前,有改动过内容的文件都会被列出来!
2. 3天前的 24 小时内有改动(mtime)的文件列出
find / -mtime 3
3. 寻找 /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出
find /etc -newer /etc/passwd
-newer
用在分辨两个文件之间的新旧关系是很有用的!
4. 找出“4天内被改动过的文件名”呢?
find /var -mtime -4
5. 那如果是“4 天前的那一天”呢?
find/var -mtime 4
有没有加上“+, -”差别很大。
- +4 代表大于等于5 天前的文件名:
find /var -mtime +4
- -4 代表小于等于4 天内的文件名:
find /var -mtime -4
- 4 则是代表4~5 那一天的文件名:
find /var -mtime 4
与用户或用户组名有关的参数:
-uid
n :n 为数字,这个数字是用户的账号 ID,即 UID,这个 UID 是记录在/etc/passwd 里面与账号名称对应的数字。-gid
n :n 为数字,这个数字是用户组名的 ID,即 GID,这个 GID 记录在/etc/group中~-user
name :name 为用户账号名称。例如 dmtsai。-group
name:name 为用户组名,例如 users。-nouser
:寻找文件的所有者不存在 /etc/passwd 的人。-nogroup
:寻找文件的所有用户组不存在于 /etc/group中的文件。当你自行安装软件时,很可能该软件的属性当中并没有文件所有者,这是可能的,在这个时候,就可以使用 -nouser 与 -nogroup 查找。
范例:
1. 查找 /home 目录下 属于 vbird
的文件
find /home -user vbird
2. 查找 /home 目录下 系统中不属于任何人的文件
find /home -nouser
与文件权限昵称有关的参数:
-name
filename:查找文件名为 filename 的文件。-size
[+-]SIZE:查找比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB还要大的文件,就是“ -size +50k ”。-type
TYPE :查找文件的类型为 TYPE 的,类型主要有:一般正规文件(f)、设备文件(b, c)、目录(d)、连接文件(l)、socket(s)、及 FIFO(p) 等属性。-perm
mode :查找文件权限“刚好等于”mode 的文件,这个 mode 为类似 chmod的属性值,举例来说,-rwsr-xr-x 的属性为 4755 。-perm
-mode :查找文件权限“必须要全部包括 mode 的权限”的文件,举例来说,我们要查找 -rwxr--r--,即 0744 的文件,使用 -perm -0744,当一个文件的权限为 -rwsr-xr-x,即 4755 […]
范例:
1. 查找 /home 目录下 文件名为 government.txt
find /home -name government.txt
2. 找出 /var 目录下文件类型为 Socket
的文件名有哪些
find /var -type s
3. 要找出那些怪异的文件,例如 socket
与 FIFO
文件,可以用
find /var -type p # 或 -type s 来找!
4. 查找文件当中含有 SGID
或 SUID
或 SBIT
的属性
find / -perm +7000
所谓的 7000 就是 ---s--s--t,那么只要含有 s 或 t 的就列出,所以当然要使用 +7000,使用 -7000 表示要含有 ---s--s--t 的所有三个权限,因此,就是 +7000 。
注
5. find 支持通配符,查找文件名包含.log
的文件
find / -name "*.log*"