二,(1)命令名称:find(很复杂)
(3)命令所在路径:/usr/bin/find
(4)执行权限:所有用户
(5)功能描述:查找文件或目录
(6)语法:which [搜索路径] [搜索关键字]
细节:
(1)搜索路径:即指定搜索的范围,一定要注意尽可能的缩小查找的范围,一般不允许以根目录(相当于windows中的“我的电脑”)为查找范围,这样会占用大量的资源,有时候是不可估量的,不要动不动不以根目录为范围来查找,这样可能在你看来只是快了一点点,但是对于系统来说,遍历硬盘是一个非常消耗资源的操作,一定要尽可能的减少资源的消耗,这一点是非常重要的;
(2)搜索关键字:即搜索的方法,也就是以什么来定位
搜索方法很多,常用有:
-name |
以文件名查找 (这时候就会用到文件通配符了,如下小知识所讲) |
如:查看etc下以inint开头的文件 find /etc -name init* |
||
-type |
以文件类型查找 (1)f(file):表示二进制文件 (2)l(link):表示软连接文件 (3)d(directory):表示目录 |
如:查看etc下的所有目录 find /etc -type d |
||
-inum |
以i节点号查找 |
查找节点号为78的文件:find /etc -inum 78 |
||
-size |
以文件大小查找 (1)大小的写法: 在Linux中一般都是以数据块为单位查找,而: 1个block = 512字节 1KB = 1024字节 1M=1024KB (2)大小的表示方法,有三种 大于:+ 小于:- 等于:什么都不写 |
如:查找100M的文件 (1)大小: 100M=102400KB=204800block (2)查找大于100M的文件: +204800 (3)命令为: find /etc -size +204800 |
||
-user |
根据文件的所有者查找 |
find /etc -user lakers |
||
根据文件改变的时间查找 |
以天为单位 |
ctime,atime,mtime (time表示天) |
(1)c--change:表示文件的属性(即ls -l查看到的内容)被改变 (2)a--access:表示文件被访问过 (3)m--modify:表示文件的内容(即正文)被修改过 |
前缀的含义 (1)时间范围之外:+ (2)时间范围之内:- (3)具体时间:什么都不写 |
以分钟为单位 |
cmin,amin,mmin (min表示分钟) 如:查找/etc下,两天之内被修改过的文件 find /etc -ctime -2 |
小知识:
1,文件路径通配符
(1)问号通配符“?”:匹配文件中的单个字符,如:文本模式data?.dat,能匹配data+任意单个字符+.dat的文件名,比如data2.dat;
(2)星号通配符“*”:匹配文件中的零个或多个字符,如:文本模式data*.dat,能匹配data+任意零个或多个字符+.dat的文件名,比如data2.dat,data.dat,datatcccccc.dat;
2,连接符
第一组:逻辑连接符
在使用范围查找的时候就要用到连接符了
(1)-a(and):表示逻辑与
(2)-o(or):表示逻辑或
比如:
(1)查找/etc下大于80M小于100M的文件
find /etc -size +163840 -a -size -204800
(2)查找/etc下大于80M的目录
find /etc -size +163840 -a -type d
第二组:用于查找到文件后执行某个命令
固定格式:
find ...... -exec或者-ok 命令 {} \;
(1){}:表示find查询的结果
(2)\:它是转义符,即使符号、命令等使用本身的含义
(3);:表示结束
(4)-exec与-ok的区别就是:-exec是查找到文件后直接执行命令,不会询问;而-ok在查找到文件后会询问你是否执行命令;
如:查找/etc下的名字为init的文件并把它删除
find /etc -name init -exec rm {} \;
扩展:
当文件名比较特殊时(如”a b“),我们在用rm删除时是删除不了的,系统会以为你是要删除a和b文件,这时就需要根据文件的i节点号俩删除了:
步骤:
(1)找到文件的i节点号:ls -i
(2)使用find根据i节点号查找,并调用删除命令:
find .-inum 节点号 -ok rm {} \;
“.”表示当前目录
注意:
find一个通用的命令,可以查找所以文件,当然就包括命令了,它类似于windows中的文件搜索;区别在于,如果windows中会列出所有文件名中包含指定名称的文件,而find命令要实现这个功能就得用通配符。