码迷,mamicode.com
首页 > 系统相关 > 详细

Linux(三)----find

时间:2016-05-16 00:29:34      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:find linux 查找

Linuxfind命令在目录结构中搜索文件,并执行指定的操作。
Linuxfind命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS)find命令在该文件系统中同样有效,只你具有相应的权限。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个非常大的文件系统可能会花费很多的时间(这里是指30G字节以上的文件系统)

1.命令格式:

find PATH [options][action]
2.命令功能:
 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
3.选项与参数:

1.与时间有关的选项:共有 -atime , -ctime , -mtime ,以 -mtime为例

 -mtime n :    n为数字,意义为在 n 天之前的 [ 一天之内 ] 被更动过内容的档案;

 -mtime +n :  列出在 n 天之前(不含n天本身)被更动过内容的档案档名;

 -mtime -n :   列出在 n 天之内(含n天本身)被更动过内容的档案档名;

 -newer file :   file 为一个存在的档案,列出比 file 还要新的档案档名;


举例1:

#find / -mtime 0

0 表示目前时间,所以,从现在开始到24小时前,有变动过内容的档案都会被列出来!如果是三天之前的24小时内,则被表示为 # find / -mtime 3

技术分享

举例2:

#find /etc -newer /etc/passwd

-newer 用在分辨两个档案之间的新旧关系是很有用的!

技术分享


我们现在知道 atime ,ctime ,mtime 的意义,如果你想找出一天内被更改过的文件名,可以用举例1 的做法,但如果我想要找出『 4 天内被更改过的档案档名』呢?那可以使用『find /var -mtime -4 』。那如果是『 4 天前的那一天』就用『find /var -mtime 4 』。有没有加上『 +, -』差别很大!我们可以用简单的图示来说明一下


                                   技术分享

                                                find相关的时间参数的意义

图中最右边为目前的时间,越往左边则代表越早前的时间轴啦。由图我们可以清楚的知道:
+4 代表大于等于 5 天前的档名:ex> find /var -mtime +4
-4 代表小于等于4 天内的档名:ex> find /var -mtime -4
4 则是代表 4-5 那一天档名:ex> find /var -mtime 4


2.与使用者或组名有关的参数:

-uid n :  n 为数字,这个数字是用户的账号ID,即UID,

              这个UID是记录在 /etc/passwd 里面与账号名称对应的数字。

-gid n :  n 为数字,这个数字是组名的ID,即GID,

              这个GID是记录在 /etc/group 里面

-uesr name :     name 为使用者账号名称

-group name :  name 为组名

-nouser : 寻找档案的拥有者不存在 /etc/passwd 的人

-nogroup : 寻找档案的拥有群组不存在与  /etc/group 的档案

      当你自行安装软件时,很可能改软件的属性中并咩有档案拥有者,这是可能的!在这个时候,就可以使用 -nouser 和 -nogroup 搜寻。

举例3:

#find /home -user zyn

搜寻 /home 下属于zyn 的档案

技术分享

举例4:

#find / -nouser

找到系统不属于任何人的档案

如果你将系统里的某个账号删除了,但该账号已经在系统里面建立很多档案时,就可能发生无主孤魂的档案讯在,此时你就可以用 -nouser 来找出该类型的档案并删除了。

技术分享

3.与档案权限及名称有关的参数:

- name filename : 搜寻文件名为 filename 的档案;

-size [ +- ] SIZE :  搜寻比 SIZE 还要大或小的档案,这个 SIZE 的规格有:c 代表byte ,k 代表                              1024bytes, 所以,要找比50KB 还要打的档案,就是 [ -size + 50K ];

-type TYPE :    搜寻档案的类型为 TYPE 的,类型主要有:一般正规档案(f), 装置档案                                 (b,c),目录(d),连接档案(l),scoket(s),及 FIFO (p)等属性。

-perm mode : 搜寻档案权限 【刚好等于】 mode 的档案,这个mode 为类似 chmod 的属                         性值,举例: -rwsr-xr-x ,即4755,

-perm -mode : 搜寻档案权限【必须要全部囊括 mode的权限】的档案,举例:要搜寻

                          -rwxr--r-- ,即0744的档案,使用 -perm -0744,当一个档案的权限为 

                          -rwsr-xr-x ,即4755时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了                             -rwsr-xr-x  的属性了。

-perm +mode : 搜寻档案权限【包括任意mode的权限】的档案, 举例:搜寻 -rwxr-xr-x ,                               即 -perm +755 时,但一个文件属性为 -rw------- 也会被列出来,因为他                            有-rw-------的属性存在!

举例5:

#find /-name passwd

找出档名为passwd 的这个档案

技术分享

举例6:

#find /var -type s

找出 /var 目录下,文件类型为scoket的档名有哪些?

技术分享

举例7:

#find /-perm +7000

搜寻档案中含有SUID 或 SGID 或 SBIT 属性的

所谓7000 就是 ---s--s--t ,那么只要有s或者t的就列出来, -7000 就是要含有---s--s--t 三个权限

技术分享

4.额外可进行的动作

-exec command :    command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的                                    结果。

-print :     将结果打印到屏幕上,这个动作是预设动作!

举例8:

#find /-perm +7000 -exec ls -l{} \;

将上个例子找到的档案使用 ls -l 列出来

 ls -l 就是额外的指令,指令不支持命令别名,所以不能用 ll

技术分享

举例9:

#find / -size +1000k

找出大于1MB的档案

技术分享

find的特殊功能就是能够进行额外的动作(action),我们将例8用途来说明一下;

                          技术分享

{}代表的是有find找到的内容,如上图所示,find结果会被放到{} 位置中

-exec一直到 \; 是关键词,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是find 指令内的额外动作,在本例中就是【  ls -l{} 】.

因为【 ;】在bash下是有特殊意义的,因此利用反斜杠来跳脱。







Linux(三)----find

标签:find linux 查找

原文地址:http://10797037.blog.51cto.com/10787037/1773696

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!