find命令在Linux中很常用,功能强大,它可以实现精确、实时查找,而且可指定在哪个路径下进行查找,但是因为它要遍历文件以确定文件是否符合条件,所以速度慢。
find的用法
查找路径 路径可以是多个 省略的话就就表示当前路径
查找条件 也可以省略 省略后表示任意文件都显示
处理动作 同样可以省略 省略后表示 “显示”
find查找中,如要精确的查找,查找条件是很重要的。那么就来了解下查找条件的具体用法吧
查找条件:就是查找的时候按照指定的条件来精确的查找
常用的命令有:
-name "文件名"
精确到哪个文件名 但是-name是严格区分文件名的大小写
-iname “文件名”
同样是精确到某个文件名 但-iname它不区分文件名的大小写
这两个命令用法很简单,它还可以在你文件后缀时查找
如:查找文件名后缀为“.log”的文件
find -name "*.log" 这样就可以找到任何以“.log”为后缀的文件了。 -iname也好似一样的。
查找条件中还可以根据文件的属主、属组来查找具体的文件
-user 属主名 查找某个属主的文件
如:要查找属主是root的文件
find -user root 就OK了
-group 属组名 查找某个属组的文件
如:要查找属组是root的文件
find -group root 很好用吧
还可以用文件的UID和GID号来查找
-uid UID
-gid GID
为什么find会用到-uid和-gid呢?
这里说明一下,比如说:有个用户是howin它的UID和GID是555,而howin创建了一个文件“FILE”,
而后来howin被管理员删除了 那么它创建的那个文件的属组和属主就变成了howin的UID和GID了,
此时我们要是再找“FILE”就可以用fin命令的-uid和-gid来查找了。
还有两个很有用的命令
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
-nouser和-nogroup这两个命令是很常用的,大家都知道没有属组和属主的文件哪个用户都可以查看,这样是不行的,所以作为管理员要经常用这两个命令来查看那些没有属主和属组的文件,然后给它们指定一个属主和属组。
下面再说说查找的条件,重要的就是多条件查找
多条件查找,条件间的逻辑关系:用逻辑关系把它们连接起来从而到达精确查找
逻辑关系有三种:并 或 非
并: -a (条件要同时满足)
或: -o (满足一个条件的即可)
非: !, -not
两个条件间如果省略逻辑关系符,就表示以并关系查找
现在来看几个多条件查找的例子
并关系: find /etc -name "FILE" -a -user root
查找满足两个条件的文件并显示 (-a 可省略)
或关系:find /etc -name "FILE" -o -user root
查找满足任意一个条件的文件并显示
非关系:find /etc/ -not -user root
查找满足“属主不是root”的文件并显示
还可以按时间查找 (查找过去的时间)
单位:天 (day)
-atime [+-] 访问时间
-mtime [+-] 修改时间
-ctime [+-] 改变时间
例:-atime 3 3天前访问过文件
-3 3天之内访问过
+3 3天之前访问过,也就是3天没有访问过了
单位:分钟(minute)
-amin [+-] 访问时间
-mmin [+-] 修改时间
-cmin [+-] 改变时间
find还可以按照文件的类型查找
-type 按照文件类型查找
文件类型有
f 普通文件
d 目录
l 软连接
b 块设备
c 字符设备
p 管道文件
s 套接字文件
用法:find 条件 -type 文件类型
find是相当强大的,它还支持按照文件的大小来查找文件
命令就是 -size 它支持”+ -“号
-size后可以直接加单位 (K、M、G等) 不加单位就默认以直接为单位
如: -size +2M 大于2M的文件
-size -1K 小于1k的文件
但是 如: -size 2M 查找的结果就会是大于1M小于2M的文件
(不是特别精确的查找 小于自定的大小但相差不在1个单位内的就算是符合条件)
按权限查找:
-perm 后跟权限
权限: 精确匹配(权限模型)
/权限: 任何一位匹配都行
-权限: 所有都要匹配
如: find /etc -perm 400 文件权限是400
-400 文件权限中有指定的任何一个权限
/400 文件权限中包括400的权限
find用法中的处理动作
处理动作: 默认 是显示出来 -print
处理动作后很多这里之列举常用的
-ls 详细的显示查找结果
对找到的文件分别执行后面的命令
-ok 其它的命令 {} \; 每次执行都提醒用户确认
-exec 其它的命令 {} \;每次执行都不提醒,直接确认
一定要以”\;“结尾
并且“{}” 实现占位 查找到一个就替换一个
这些命令都是find中比较常用的,有必要熟练掌握,当然find还有别的一些功能不怎么常用,如果能用到建议man一下find。
PS:Linux系统的查找命令:find,whereis,locate命令
这三个命令都是用来查找文件的,使用格式是:
find 路径名称 -name 文件名参数(我们这里就不讨论参数了)
whereis 文件名
locate 文件名
一般来说,find命令功能最为强大,但是对硬件的损耗也是最大的,
当你使用find去查找你个文件时,你会发现硬盘灯在不停的闪动,
这就意味着你的硬盘可能会比别人的少用个几年。
当你使用whereis或locate去查找文件时,你会发现硬盘却是安安静静的,
这是因为这两个命令是从系统的数据库中查找文件,而不是去拼命的读硬盘。
所以,如果平常你只是想找一些小文件的话,
使用whereis或locate就可以了,
如果你是要进行系统管理的工作,
那么使用find再加上一些参数就可以满足你的要求了。