which : 命令是查找命令是否存在,以及命令的存放位置在哪儿。
如果没有查到他将返回no XXX in (查找过的路径)....
这必须是可执行权限的文件,而且必须是存放在上面这些目录中才可以用查找到的,上面的目录是以:号进行分隔的。。。
但是如果查找成功他将返回查找到的路径并且显示出来。。。
whereis : 命令只能用于搜索程序名,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
第一个框: usr/bin 这里一般都是防止可执行文件的
第二个框: etc 下这李幼斌都是配置文件的
第三个框: 这里一般都是放置手册之类的。。
如果他是不存在的,那么他会返回如下形式的提示:
which 和 whereis 的最大区别是 which 是在指定的地方查找有么有该执行文件,whereis 他则会查找跟您这个名字相关的他都会列出来。
但是whereis 和 locate 在查找的时候都是通过自己的一个DB数据库来进行查找的,所以很有可能会很多东西都没有找出来。。。。
locate :命令不是实时查找,所以查找的结果不精确,但查找速度很快。因为它查找的不是目录,而是一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
有可能linux 上没安装,那么首先安装一下即可:
然后再安装一个 *locate
然后再用命令 updatedb 更新下即可。。
完成后在用locate 搜索下passwd 做实验。。
这里有点类似模拟查询的样子,所以我们来做一个重点向输出,让他看起来更美观一点,如下所示:
然后用vim 对她进行查看
进入的时候是看不到左侧的数字的,我们需要先按一个 ESC 键, 然后再输入 :set nu 回车即可看到左侧的行号信息了。。。
其实locate 更多的是是像模糊查询。。。。。。
locate和whereis 都是有自己的db库的。。
小结:
which--------查找到的是一些可执行的程序
whereis------查到到的都是程序相关的配置文件和帮助信息
locate-------按照匹配度查找,更多的都是模糊信息,比如名字只记得一点点
find:是最常用和最强大的查找命令。它能做到实时查找,精确查找,但速度慢。
由于他和 windows 下的查找差不多,都是在交换分区里面进行仔细查找的,所以速度方面可能会比较慢,,所以不是很推荐使用他。
如果直接输入find 那么他显示的内容将是很全面的,包括隐藏的内容他都会显示出来,效果如下所示:
所以说在在不用任何关键字的前提下他就表示所有的。。。
find的常用场景如下所示:
-atime:表示某个文件我在打开(读取)他的时间。。。
-ctime:状态时间,如权限修改,内容更改,写之类的都是属于状态时间
-mtime:修改时间,如文件名称修改,文件内容修改他的时间都会发生变化的
使用方法1:
这里的 0 表示查看24小时内改动过的文件。。。
如果这里的 0 改成 5 那么他显示的是前5天我修改过的文件。。
0 是24小时内 5 是前 5 天(当天)修改过的内容如此类推。。。
如果我想查看30天之前的:
看到这类似报错的,其实也不用还怕,因为这台linux的服务器我是用来做测试的,他也就是刚搭建起来没多久的。。。。
如果改成 find / mtime +5 那也是行的,代表5天前操作过的文件,5天前至到所有的。。。。。。。。
如果改成 find / mtime -5 那也是行的,代表是5天以内发生操作的所有文件。。。
如果没有 + 和 - 那么只是一天时间内发生的而已。。。
atime ctime mtime 这三个的用法都是相同的。。。。
用法2:
查找用户相关的文件
如果使用 find / -user 用户名,这样他会在全盘进行搜索的,如过服务器上数据比较多,不支持用这种方法进行搜索
find /home -user 用户名,如果使用着用的搜索,那就会快得多了,因为他只需要在一个目录下搜索而已。。。。。
find / -nouser:这是查找有没有一个文件不属于任何用户和不属于任何用户组的。。。
这种方法一般都比较慢。。。
find / -group lisi :这是查找一个用户组的。
查找一个用户和查找一个用户组其实很多时候都是没什么区别的,因为用户组和用户的名称是一样的。。
正常情况下目录带task 和 fd 开头的都不用怎么关心,因为一般都是没这个目录的,更多时候说明系统在运行什么东西,但是他没产生出信息出来。。。。
如果使用find / -name 文件名,根据文件名称查找(严格区分大小写,如果文件名中间有空格,则必须把文件名用双引号引起来),用法如下所示:
当然如果不想让他区分大小写,那么只需要在name 前加一个 i 即可,如 find / -iname 文件名
这个主要是查找全部关键字匹配的。。。
find /home -type f:这里是查找home目录下的普通文件,这里的 f 是文件 file 的简写,用法如下所示:
find的特殊功能。。
比如要查找一个大于或者等于10M的文件
这些在linux里面用的还是比较少的。。。
如果忘记名字了还可以用*号来进行模糊查询,如下所示:
还是那句话,如果能用 which 和 whereis 以及 locate 能查到能发就尽量不要使用 find 来查找,因为find 要读取硬盘,速度会比较慢。。。。。。。。。