find
命令功能强大,能根据各种关键字段进行文件的搜索.
但find
是直接查找硬盘,所以相较查找数据库的where
和locate
而言,速度较慢
命令格式:find [PATH] [option-1] [option-2] [action]
可以根据多种条件一起来进行筛选,取交集
1. 按时间进行查找
-
选项
-
-atime n
:查找 n 【天】之前【被读取】的文档 -
-mtime n
:查找 n 【天】之前【内容变更】的文档 -
-ctime n
:查找 n 【天】之前【inode 内容变更】的文档 -
-mmin n
:查找 n 【分钟】之前【内容变更】的文档 -
-newer <filename>
: mtime 比某个文件新的文档
-
-
例子
- 找出一天内被改动过的文件:
find / -mtime 0
- 找出四天内被改动过的文件:
find / -mtime -4
- 找出四天前的那一天被改动过的文件:
find / -mtime 4
- 找出比 /etc/passwd 新的文件:
find / -newer /etc/passwd
- 找出一天内被改动过的文件:
2. 按名称、大小、类型进行查找
-
选项
-
-name < FILENAME>
:查找名为 <FILENAME> 的文件(支持通配符,但要加单引号) -
-size [+-]<SIZE>
:查找 [大于/小于] <SIZE> 的文件,可加单位-
c
:byte -
k
:KB -
M
:MB -
G
:GB
-
-
-type <TYPE>
:查找属于 <TYPE> 类型的文件-
f
:普通文件 -
b
:存储设备 -
c
:字符型设备 -
d
:目录 -
l
:链接文件 -
s
:Socket 文件 -
p
:FIFO 文件
-
-
-
例子
- 查找叫做 passwd 的文件:
find / -name passwd
- 查找文件名包含 bash 的文件:`find /root/ -name 'bash'
- 查找大于50MB的文件:
find /root/ -size +50M
- 查找链接文件:
find /root/ -type l
- 查找叫做 passwd 的文件:
3. 按所有者、所属组进行查找
-
选项
-
-user <NAME>
:查找属于用户<NAME>的文件 -
-group <NAME>
:查找属于群组<NAME>的文件 -
-uid <NUM>
:查找 owner 的 UID 为 <NUM> 的文件 -
-gid <NUM>
:查找 group 的 GID 为 <NUM> 的文件 -
-nouser
:查找 owner 不在/etc/passwd
中的文件 -
-nogroup
:查找 group 不在/etc/group
中的文件
-
-
例子
- 查找 /home 下属于 choco 的文件:
find /home -user choco
- 查找 /home 下,且 owner 的 UID 为 1002 的文件:
find /home -uid 1002
- 查找 owner 不在
/etc/passwd
中的文件:find / -nouser
- 查找 /home 下属于 choco 的文件:
4. 按权限进行查找
-
选项
-
-perm <MODE>
:查找权限正好
等于 <MODE> 的文件 -
-perm -<MODE>
:查找权限包含 <MODE> 的文件 -
-perm +<MODE>
:查找权限被 <MODE> 包含的文件
ps. 这里的加减号不太好理解,跟直面的含义相反。可以记忆:加号代表 Any,减号代表 All
-
-
例子
- 查找包含 SUID 或 SGID 或 SBIT 权限的文件:
find / -perm +7000
- 查找包含 SUID 或 SGID 权限的文件:
find / -perm +6000
- 查找权限大于 4755 的文件:
find / -perm -4755
- 查找包含 SUID 或 SGID 或 SBIT 权限的文件:
5. 查找完的动作
-
选项
-
-exec <command>
:使用命令 <command> 来处理查找到的结果(不支持 alias)
-
-
例子
- 查找 /root/ 下文件名包含 bash 的文件,并 ls 以列表模式显示出来:
find /root/ -name '*bash*' -exec ls -l {} \;
## {}代表找到的结果
## 以分号结尾,但在 bash 环境下分好有特殊含义,所以用反斜杠转义