用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。##
用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则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