用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
##语法
[root@study ~]# find [PATH] [option] [action]
##参数
1. 与时间有关的选项:共有-atime, -ctime与-mtime,以-mtime说明
-mtime n : n为数字,意义为在n天之前的"一天之内"被更改内容的文件;
-mtime +n : 列出n天之前(不含n天本身)被更改过内容的文件名;
-mtime -n : 列出在n天之内(含n天本身)被更动过内容的文件名。
-newer file : file为一个存在的文件,列出比file还要新的文件名
2. 与使用者或群组名称有关的参数:
-uid n : n为数字,这个数字是使用者的账号ID,亦即UID,这个UID是记录在/etc/passwd里面与账号名称对应的数字。
-gid n : n为数字,这个数字是群组名称的ID,亦即GID,这个GID记录在/etc/group,
-user name : name为使用者账号,例如:tucci
-group name : name为群组名称,如果users
-nouser : 寻找文件的拥有者不存在/etc/passwd的文件
-nogroup : 寻找文件的拥有群组不存在于/etc/group的文件
当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,
这是可能的!在这个时候,就可以用-nouser与-nogroup搜寻。
3. 与文件权限及名称有关的参数
-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--, 亦即0774的文件,使用 -perm -0744,当一个文件的权限为-rwsr-xr-x,
亦即4755时,也会被列出来,因为-rwsr-xr-x的属性以及囊括了-rwxr-xr-x的属性了。
-perm /mode : 搜寻文件权限"包含任一mode的权限"的文件,举例来说,我们搜寻-rwxr-xr-x,亦即
-perm /755时,但一个文件属性为 -rw-------也会被列出来,因为他有-rw-------
的属性存在
4. 额外可进行的动作:
-exec command : command 为其他指令,-exec后面可再接额外的指令来处理搜寻到的结果。
-print : 将结果打印到屏幕上,这个动作是默认动作
##范例
范例一:将过去系统上面24小时内有更动过内容(mtime)的文件列出
[root@study ~]# find / -mtime 0
# 那个0是重点!0代表目前的时间,所以现在开始到24小时前,
# 有变动过内容的文件都会被列出来!如果是三天前24小时内?
# find / -mtime 3 变动过的文件都被列出的意思
范例二:寻找/etc下面的文件,如果文件日期比/etc/passwd新就列出
[root@study ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个文件之间的新旧关系是很有用的
从上面我们可以清楚的知道:
- +4代表大于等于5天前的文件名:ex > find /var -mtime +4
- -4代表小于等于4天内的文件名:ex > find /var -mtime -4
- 4则是代表4-5那一天的文件名:ex > find /var -mtime 4
范例三:搜寻/home下面属于tucci的文件
[root@study ~]# find /home -user tucci
# 这个东西也很有用~当我们要找出任何一个使用者在系统当中的所有文件时。
# 就可以利用这个指令将属于某个使用者的所有文件找出来
范例四:搜寻系统中不属于任何人的文件
[root@study ~]# find / -nouser
# 通过这个指令,可以轻易的就找出那些不太正常的文件。如果有找到不属于系统任何人的文件时,
# 不要太紧张,那有时候是正常的~尤其是你曾经以源代码自行编译软件时。
范例五:找出文件名为passwd这个文件
[root@study ~]# find / -name passwd
范例六:找出文件名包含了passwd这个关键字的文件
[root@study ~]# find / -name "*passwd*"
# 利用这个-name可以搜寻文件名,默认是完整文件名,如果想要找关键字,
# 可以使用类似 * 的任意字符来处理
范例七:找出/run目录下,文件类型为Socket的文件名有哪些
[root@study ~]# find /run -type s
# 这个-type的属性也很有帮助,尤其是要找出哪些怪异的文件
# 例如socket与FIFO文件,可以用find /run -type p 或 -type s来找。
范例八:搜寻文件当中含有SGID或SUID或SBIT的属性
[root@study ~]# find / -perm /7000
# 所谓的7000就是---s--s--t,那么只要含有s或t的就列出,所以当然要使用/7000,
# 使用-7000表示要同时含有---s--s--t的所有三个权限,而只需要一个,就是/7000
范例九:将上个范例找到的文件使用ls -l列出来
[root@study ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
# 注意到,那个-exec后面的ls -l就是额外的指令,指令不支持命令别名
# 所有仅能使用ls -l不可以使用ll。
范例中特殊的地方有{}以及;还有-exec这个关键字,这些东西的意义为:
- {}代表的是"由find找到的内容",如上图所示,find的结果会被放置到{}位置上中;
- -exec一直到;是关键字,代表find额外动作的开始(-exec)到结束(;),在这中间的就是find指令的额外动作。
- 因为";"在bash环境下是有特殊意义的,因此用反斜线来跳脱。
范例十:找出系统中,大于1MB的文件
[root@study ~]# find / -size +1M