Linux(三)----find
2016-06-06 10:29
387 查看
Linux下find命令在目录结构中搜索文件,并执行指定的操作。
Linux下find命令提供了相当多的查找条件,功能很强大。由于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
![](http://s5.51cto.com/wyfs02/M01/80/20/wKiom1c4c66T1RqsAABSB-uNb8k406.png)
举例2:
#find /etc -newer /etc/passwd
-newer 用在分辨两个档案之间的新旧关系是很有用的!
![](http://s4.51cto.com/wyfs02/M02/80/20/wKiom1c4caLAms1OAABaAREiqnI292.png)
我们现在知道 atime ,ctime ,mtime 的意义,如果你想找出一天内被更改过的文件名,可以用举例1 的做法,但如果我想要找出『 4 天内被更改过的档案档名』呢?那可以使用『find /var -mtime -4 』。那如果是『 4 天前的那一天』就用『find /var -mtime 4 』。有没有加上『 +, -』差别很大!我们可以用简单的图示来说明一下
![](http://s5.51cto.com/wyfs02/M01/80/1C/wKioL1c4WhCT_x8_AAAWEBLRx-E037.png)
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 的档案
![](http://s3.51cto.com/wyfs02/M00/80/1D/wKioL1c4cxSx-OGSAABTsk1i1dI430.png)
举例4:#find / -nouser找到系统不属于任何人的档案如果你将系统里的某个账号删除了,但该账号已经在系统里面建立很多档案时,就可能发生无主孤魂的档案讯在,此时你就可以用 -nouser 来找出该类型的档案并删除了。
![](http://s5.51cto.com/wyfs02/M00/80/1D/wKioL1c4dFPSK9pGAAArzlQpmDc787.png)
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 的这个档案
![](http://s5.51cto.com/wyfs02/M00/80/20/wKiom1c4czzjbb_3AAAo9FrHduI181.png)
举例6:#find /var -type s找出 /var 目录下,文件类型为scoket的档名有哪些?
![](http://s5.51cto.com/wyfs02/M01/80/1D/wKioL1c4dQjgyprkAABc3wnbZUM341.png)
举例7:#find /-perm +7000搜寻档案中含有SUID 或 SGID 或 SBIT 属性的所谓7000 就是 ---s--s--t ,那么只要有s或者t的就列出来, -7000 就是要含有---s--s--t 三个权限
![](http://s5.51cto.com/wyfs02/M01/80/20/wKiom1c4dBjzcTDkAABa9yqidbQ025.png)
4.额外可进行的动作:-exec command : command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的 结果。-print : 将结果打印到屏幕上,这个动作是预设动作!举例8:#find /-perm +7000 -exec ls -l{} \;将上个例子找到的档案使用 ls -l 列出来 ls -l 就是额外的指令,指令不支持命令别名,所以不能用 ll
![](http://s1.51cto.com/wyfs02/M01/80/20/wKiom1c4dILhRwO7AACGU6NwaIY878.png)
举例9:#find / -size +1000k找出大于1MB的档案
![](http://s4.51cto.com/wyfs02/M01/80/1D/wKioL1c4dZjAloyoAAB3zFZKnY8319.png)
find的特殊功能就是能够进行额外的动作(action),我们将例8用途来说明一下;
![](http://s3.51cto.com/wyfs02/M00/80/20/wKiom1c4bkvz5f2OAAAQI9ub3ZU598.png)
{}代表的是有find找到的内容,如上图所示,find结果会被放到{} 位置中
-exec一直到 \; 是关键词,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是find 指令内的额外动作,在本例中就是【 ls -l{} 】.因为【 ;】在bash下是有特殊意义的,因此利用反斜杠来跳脱。
Linux下find命令提供了相当多的查找条件,功能很强大。由于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
![](http://s5.51cto.com/wyfs02/M01/80/20/wKiom1c4c66T1RqsAABSB-uNb8k406.png)
举例2:
#find /etc -newer /etc/passwd
-newer 用在分辨两个档案之间的新旧关系是很有用的!
![](http://s4.51cto.com/wyfs02/M02/80/20/wKiom1c4caLAms1OAABaAREiqnI292.png)
我们现在知道 atime ,ctime ,mtime 的意义,如果你想找出一天内被更改过的文件名,可以用举例1 的做法,但如果我想要找出『 4 天内被更改过的档案档名』呢?那可以使用『find /var -mtime -4 』。那如果是『 4 天前的那一天』就用『find /var -mtime 4 』。有没有加上『 +, -』差别很大!我们可以用简单的图示来说明一下
![](http://s5.51cto.com/wyfs02/M01/80/1C/wKioL1c4WhCT_x8_AAAWEBLRx-E037.png)
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 的档案
![](http://s3.51cto.com/wyfs02/M00/80/1D/wKioL1c4cxSx-OGSAABTsk1i1dI430.png)
举例4:#find / -nouser找到系统不属于任何人的档案如果你将系统里的某个账号删除了,但该账号已经在系统里面建立很多档案时,就可能发生无主孤魂的档案讯在,此时你就可以用 -nouser 来找出该类型的档案并删除了。
![](http://s5.51cto.com/wyfs02/M00/80/1D/wKioL1c4dFPSK9pGAAArzlQpmDc787.png)
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 的这个档案
![](http://s5.51cto.com/wyfs02/M00/80/20/wKiom1c4czzjbb_3AAAo9FrHduI181.png)
举例6:#find /var -type s找出 /var 目录下,文件类型为scoket的档名有哪些?
![](http://s5.51cto.com/wyfs02/M01/80/1D/wKioL1c4dQjgyprkAABc3wnbZUM341.png)
举例7:#find /-perm +7000搜寻档案中含有SUID 或 SGID 或 SBIT 属性的所谓7000 就是 ---s--s--t ,那么只要有s或者t的就列出来, -7000 就是要含有---s--s--t 三个权限
![](http://s5.51cto.com/wyfs02/M01/80/20/wKiom1c4dBjzcTDkAABa9yqidbQ025.png)
4.额外可进行的动作:-exec command : command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的 结果。-print : 将结果打印到屏幕上,这个动作是预设动作!举例8:#find /-perm +7000 -exec ls -l{} \;将上个例子找到的档案使用 ls -l 列出来 ls -l 就是额外的指令,指令不支持命令别名,所以不能用 ll
![](http://s1.51cto.com/wyfs02/M01/80/20/wKiom1c4dILhRwO7AACGU6NwaIY878.png)
举例9:#find / -size +1000k找出大于1MB的档案
![](http://s4.51cto.com/wyfs02/M01/80/1D/wKioL1c4dZjAloyoAAB3zFZKnY8319.png)
find的特殊功能就是能够进行额外的动作(action),我们将例8用途来说明一下;
![](http://s3.51cto.com/wyfs02/M00/80/20/wKiom1c4bkvz5f2OAAAQI9ub3ZU598.png)
{}代表的是有find找到的内容,如上图所示,find结果会被放到{} 位置中
-exec一直到 \; 是关键词,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是find 指令内的额外动作,在本例中就是【 ls -l{} 】.因为【 ;】在bash下是有特殊意义的,因此利用反斜杠来跳脱。
相关文章推荐
- Linux(二)-----常见指令(1)
- Linux(一)
- LINUX守护进程daemon
- Linux 本地文件系统挂载的目录扩容
- CentOS 6.3服务器开机启动服务及自动联网设置方法
- 强悍的 Linux —— 系统文件及其作用
- linux 每天一个命令(cd) 只需要1分钟
- 嵌入式Linux裸机开发(二)——S5PV210启动过程分析
- 常用vi命令总结
- Linux应用层直接操作GPIO
- Linux:永久修改网卡的MAC地址
- Linux 内核list_head 学习(一)
- Linux 寻找安装路径
- linux基础知识(一)
- 快速搭建Ubuntu更新源服务器
- Linux下面/usr/local和opt目录
- Linux 进程优先级查看及调整
- GoDaddy Linux主机支持机房的更换
- linux系统安装mysql
- 在CentOS7 上安装mosquitto1.4.1服务器,实现MQTT信息推送功能并增加websocket功能