which
命令可以搜索可执行文件的绝对路径,这里的可执行文件只能是已经在PATH目录中的。
which java
whereis
命令类似于模糊查询,只能查找可执行文件、帮助文件,源代码文件。它比which
命令功能强大一点,还支持3个选项对查找的文件做进一步细分,-bms
。b表示二进制文件,m表示帮文件,s表示源代码文件。这个命令会把所有包含所查找的字符文件全部列出来。
locate
命令可以搜索操作系统中的所有文件,将所有文件和目录的绝对路径为单位进行搜索。只要某个文件或者目录中有包含查找的字符它就认为是匹配的。这很像我在日常工作中用到的everything。而且更像everything的一点是这个命令不是傻瓜式的将所有文件比对一次,而是事先生成一个用于查找的数据库,运行这个命令的时候从数据库中查找匹配项,所以速度非常快。
但同时locate
也有缺点,因为需要事先生成数据库,所有如果新建了一个文件但是数据库还没有更新,那行用这个命令是无法搜索到的。手动更新数据库的命令为 updatedb
没有参数。由于我在学习的linux机器文件并不多,但是网上资料说这个更新数据库很耗CPU,在生产服务器上要慎重运行。
我自己和笔记本是ubuntu18版本,但是在我另外一台笔记本的centeros7虚拟机中默认没有这个命令。需要另外用yum
安装
yum install -y mlocate
find
命令是最强大的文件搜索命令,当然同时也是最复杂的搜索命令,格式如下:
find [路径] [参数]
最常用的3个参数
-
-atime +n/-n
(access time)表示访问或执行时间大于n天或小于n天的文件 -
-ctime +n/-n
(change time)表示文件修改时间大于n天或小于n天的文件 -
-mtime +n/-n
(modify time)表示文件内容修改时间大于n天或小于n天的文件
fimd . -mtime +10
以上命令表示查找当前目录下所有10天前修改过的文件。 以上3个选项的时间单位是天,也可以将time替换为min,后需的n单位就变为分钟。
在linux中在硬盘在都会有一个区域用来存储文件本身的信息,在大学里学过操作系统基本知识或者用C语言操作过文件的人都很清楚。操作系统中肯定有一个数据结构用于存储文件主体数据所在的硬盘位置、文件创建、修改以及权限信息。
linux中存储文件信息的结构体被叫做inode。只要用户访问过文件,Inode中存储访问时间的字段肯定会被修改。只要Inode中的字段被修改那么ctime就会修改。
试想如果修改了一个文件的内容,mtime和atime会被修改,由于mtime和atime都记录在Inode中,因此Inode的内容也会被修改,那么ctime也就修改了。但是反过来就不一定成立,如果ctime修改了那么mtime和atime是不一定修改的。比如说chmod u+w t
运行这个命令修改了t这个文件的用户组权限,那么Inode中的相应字段就修改了,ctime就改变了。但是没有更改文件的内容和访问文件所以atime和mtime都不变。
find
命令还可以增加-name
选项用于查找与字符串相匹配的文件。也支行*
通配符,但是加通配符的时候需要给字符串加引号。
还可以有-type
选项,表示需要查找的文件类型,文件类型有f, b, c, d, l ,s等,分别表示文件,块设备、字符设备、目录、链接文件、套接字文件。
网友评论