有一个特别经典的Linux思想“一切皆文件”,这句话直接讲起来有一些晦涩,我的理解就是,linux会把系统中的文件、目录、字符设备、块设备、 套接字、进程、线程、管道等都抽象为是一个个可被操作和处理的“文件”,然后通过这一个个“文件”的实际内容来对计算机硬件进行操控,和用户产生交互。

既然“一切皆文件”,那么我们在平时在对linux系统的使用中,其实也就是在操作一个个的各种各样的“文件”。常见的,生产环境下的linux系统都是没有图形界面的,我们在对文件进行操作时,难免会产生“查找”的需求。我们今天就来对linux中的查找命令一探究竟。
find是linux里面最重要的命令之一,有着十分强大的功能,它会对指定目录下(甚至整个系统)的所有文件进行遍历查找。
find命令是根据文件的属性进行查找,如文件名称、文件大小、所有者、所属组、是否为空、创建时间、修改时间等。find是直接搜索硬盘,所以在遍历一个比较大的文件系统时,可能会消耗比较长的时间,这一点,类似于windows上的文件搜索。
使用格式:find [PATHNAME] [OPTION] [ACTION]

按照文件名称查找
find /var -name abc.php ===> 在/var目录下遍历查找文件abc.php
find /var -name '*def*' ===> 使用通配符'*',表示在/var目录下遍历文件名称中包含def字符串的文件
按照文件其他属性查找
find /home -type f ===> 按文件类型查找,在/home目录下遍历查找普通文件,其他的类型还有:d:查找目录、b:查找块设备文件、c:查找字符设备文件、p:查找管道文件、i:查找符号链接文件
find /home -empty ===> 在/home目录下遍历查找内容为空的文件或文件夹
find /home -group cat ===> 在/home目录下遍历查找属于cat用户组的文件或文件夹
find /home -user cion ===> 在/home目录下遍历查找属于cion用户的文件或文件夹
find /home -size +1000(-1000)k ===> 在/home目录下遍历查找文件大小大于(小于)1000KB的文件(常用单位字符:b:字节(B),k:KB,M:MB,G:GB)
find /home -amin -10 ===> 在/home目录下遍历查找最后十分钟内访问的文件(access time)
find /home -mtime -1 ===> 在/home目录下遍历查找最后一小时内修改的文件(modify time)
使用混合查找方式查找文件
混合参数有:! ,-and(-a),-or(-o)
find /home -size +1000k -and -mtime +2 ===> 在/home目录下查找文件大小大于1000kb、同时最后修改时间在2分钟以内的文件
find /home ! -user cion ===> 在/home目录下查找不属于cion用户的文件
locate命令其实相当于“find -name”的另一种写法,不同的是,locate不是通过遍历文件夹查找文件,而是搜索了linux的一个文件标识数据库(/var/liv/lacatedb),这个数据库中含有linux系统中所有本地文件的信息,linux系统会自动创建这个数据库,并且每天更新一次,如果你想得到最新的本地文件信息,你可以在使用locate命令之前,先使用updatedb命令手动更新一下lacatedb数据库。
一般情况下,推荐使用locate命令进行查找,一则避免很多“无权限查找”的问题,再就是locate比find的效率和速度都要高很多!!
locate命令使用实例:
$ locate /var/lib ===>> 查找/var 下所有以lib开头的文件
$ locate */bin/php ===>> 查找所有结尾为/bin/php的文件路径,可用于查找服务器安装了多少‘php’应用
$ locate */bin* ===>> 查找所有包含/bin的路径
参考链接:https://www.cnblogs.com/qiaopei/p/5513814.html
https://www.cnblogs.com/flysnail/archive/2012/05/16/2504266.html
https://www.cnblogs.com/xudong-bupt/archive/2013/03/23/2976793.html