您的位置:首页 > 运维架构 > Linux

Linux下常用的find指令以及其他查找命令

2017-04-02 16:45 423 查看
首先顾名思义“find”就是查找的意思,那么接下来说一下find指令的重要性吧,因为在Linux操作系统”一切皆文件“的理念下,我们已经不是靠文件的后缀名来识别一个文件了。这时候你要想找到一个特定的文件就变得相对困难了,那么你有必要了解一个find这个强大的指令了。

find命令的格式:find [指定的目录] [查找规则] [查找到后进行的操作]

1、根据文件名来查找

-name :区分大小写

-iname : 不区分大小写



2、按照文件的权限来匹配

-perm : 一般使用八进制的权限表示

例如

find -perm 700:查找-rwxrwxrwx的文件

find -perm 662:查找-rw-rw-r– 的文件



3、按照文件的类型来查找

-type:

b : 块设备文件(磁盘)

d:目录文件

c:字符设备文件

p:管道文件

l:符号链接文件

f:普通文件



4、根据文件的大小来查找

-size

find -size +5000c 表示查找大于5000个字节的文件

find -size -20c 表示查找小于20个字节的文件

加上c是表示以字节数。



也可以直接通过find -size +4000c -size -4500c更加精确的找到文件



5、根据时间相关的属性来查找

通过stat可查看文件的下面三个时间,详情请看上篇文章。

-atime:最后一个访问文件的时间

-mtime:最后一次改变文件内容的时间

-ctime:最后一次改变文件属性的时间

-amin

-mmin

-cmin

这三个是以分钟为单位来查找的,具体实现如下:

find -atime +1 :一天内没有被访问过的文件

find -atime -1 : 一天内被访问过的文件



6、执行操作

-print:将匹配的文件输出到标准输出。

-exec:对匹配的文件执行所给出的shell命令。-exec ‘command’ {} \;

_ls:将匹配的文件用ls显示出来

-ok:和-exec相似,只不过在执行前询问是否执行,较为安全。

find -name “file1” -print



find -name “file1” -ls



find -size +4000c -size -4500c –exec rm –rf {} \;

这里需要特别说明一下,{}代表查询后匹配的文件,还有需要注意{}和\之间的空格



这里可以看到file1文件已经被删除了。

上面就是关于find命令的介绍,但事实上,在大多数情况下,我们是用不到find这个命令的,原因就是find查找太慢了。下再来稍微总结一下几个常见的查找命令之间的优点和缺点

whereis:是用来查找特定的文件的

-m:查找二进制文件
-b:查找在说明文件manual路径下的文件
-s:查找source源文件
-u:查找不属于上述三个选项的特殊文件


比如我只想查找有关passwd的说明文件,这时候就可以加-m的参数:



这样直接很直接说明whereis这个命令,就是想要查找某些特定的文件

locate

-i:忽略大小的区别
-r:后面可以直接跟正则表达式


这个命令的使用非常简单快捷,因为它是在已创建好的数据库(var/lib/mlocate)中查找数据的,所以速度非常快,但是相应的就会有自己的弊端,比如你刚创建的一些文件还没来得及写入数据库,这时候你查找就是显示该文件不存在这样的情况。

其实这时候你可以运行updatedb命令来更新数据库,不过可能得等一两分钟。



这里我第一次查找passwd文件失败,更新数据库前后的样子,可以看一下,便于理解。

which

-a:所有由path路径可以找到的命令,而不是第一个


这里有几个需要注意的地方,用实例来说明

1、查找which文件:



这里看到,找到两个which,上面的那个其实是命令别名,就像你日常使用的ll命令其实是ls -l,只不过使用了命令别名而已。

2、查找cd的完整文件名



哈哈,竟然说没找到,这是怎么一回事啊,其实是因为cd这个命令是bash内置的命令,并不在path指定的路径下,所以就找不到了。

上面就是linux下常见的查找方面的文件了,起初是总结一下find的,后来接触到更多,就加在后面了。

最后补充一点,whereis和locate是在数据库中查找的,所以非常快速,比较常用,而find是检索整个硬盘,准确性相对较高,但相对的就是速度慢啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息