locate命令
locate 文件名
含义:在后台数据库中按文件名搜索,搜索速度很快。
注意:(1)locate的搜索方式是在“/var/lib/mlocate”这个数据库中进行搜索的(不同的Linux可能数据库的名字不一样)。
但是mlocate这个数据库不是实时更新的,它的更新频率是一天一更新。所以会发生用locate可能搜索不到
已经存在的文件的现象。我们可以使用“updatedb”命令来强制更新数据库,会解决这个问题。
(2)locate只可以按照文件名来搜索
locate的搜索规则
locate遵守一定的搜索规则,这个规则的配置文件位于“/etc/updatedb.conf”中。我们可以打开看一看有哪些规则。
如下图:
来解释一下上图中每一句话的含义:
PRUNE_BIND_MOUNTS 是否开启这些规则,为“yes”则开启,为“no”则不开启。
PRUNEFS 搜索时不搜索的文件系统
PRUNENAMES 搜索时不搜索文件名中包含这些关键字的文件
PRUNEPATHS 搜索时这些目录当中的文件不搜索
因此你可能会遇到这样的情况:比如你所搜索的文件名在/tmp目录下也存在,但是搜索的结果却没有/tmp下面的这个文件。
这下,你知道为什么了吧。
注:不仅locate遵守updatedb.conf这个配置文件的搜索规则,下面要讲到的whereis和which命令也遵守这个配置文件的规则。
whereis命令
whereis 命令名
含义:搜索命令所在的路径以及相应帮助文档所在的路径
选项:
-m 只查找帮助文件
-b 只查找可执行文件
which命令
which 命令名
含义:这个命令跟whereis的功能一样,唯一不同的是which搜索的是命令所在路径以及命令的别名(不含帮助文档)。
注:并不是所有的命令都有别名的。也并不是所有的命令都有所在路径的,比如搜索“cd”命令的路径就搜索不到。
find命令
find [搜索范围] [搜索条件]
含义:这是find命令基本的格式。
find命令十分强大,选项也是多种多样。下面是几个常用的,重点学习记忆:
find / -name install.log
含义:搜素范围是根目录(”/“),搜索的条件是按名称搜索“install.log”。你可以灵活改动各个选项。
注意:find的搜索匹配是完全匹配的,也就是说它搜索出来的东西的名称应该和“install.log”一模一样,多一个字母
少一个字母都不行。如果想要进行模糊搜索,则需要使用通配符。
find /root -iname istall.log
含义:在root目录下搜索名为”istall.og”的文件,且文件名不区分大小写。
find / -user root
含义:在根目录下搜索所有者为”root”的文件,也即是说“-user”是按所有者进行搜索。
find / -nouser
含义:在根目录下搜索没有所有者的文件。也即是“-nouser”是搜索没有所有者的文件。
注意:Linux中没有所有者的文件一般为垃圾文件,应当删除。但是有以下两种情况文件没有所有者是正常的。
(1)在“/proc/”和“/sys/”目录下的文件如果没有所有者正常,不要删除。
(2)外来文件也可能没有所有者,比如你插入的U盘中的文件是在windows中创建的,则
可能没有所有者,正常。
find /var/log/ -mtime +10
含义:搜索10天修改了内容的文件。
注:在这个命令中,后两个参数是可以更改的。如下:
atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容
-10 10天内修改的文件
10 10天前的当天修改的文件
+10 10天前的修改文件
对于这个-10和+10你可能还不了解,下面是个时间轴,可以帮助理解:
find /var/log atime +10
含义:搜索10天被访问的文件。也就是“atime”表示是按访问时间来搜索的。
find . -size 25k
含义:搜索当前目录中大小为25k的文件。也就是说“-size“是按大小搜索的意思。
注:25k 等于25k
-25k 小于25k
+25k 大于25k
注意:必须写成25k(且k是小写的)或者25M(且M是大写的),不能写成数字25.
find . -inum 262422
含义:搜索当前目录中,i节点号为262422的文件。也即是“-inum“是按i节点搜索的意思。
find /etc -size +20k -a -size -50k
含义:搜索etc目录下大小小于50k且大于20k的文件。
注:-a 即逻辑与,两个条件都满足。
-r 即逻辑或,两个条件满足一个即可。
find /etc -size +20k -a -size -50k -exec ls -lh {} \;
含义:搜索etc目录下大小小于50k且大于20k的文件,并且把他们的详细信息展示出来。
注:在这里”-exec {} \;”是一个固定的写法,它的中间用来添加第二条命令。比如上面,在中间添加
了命令“ls -lh”,表明对前面得到的结果执行此命令。因此这个第二条命令必须是能够对前面的结果
进行操作的命令。
通配符
各个通配符的含义如下:
* 匹配任意内容
?匹配任意一个字符
[] 匹配中括号内的任意一个字符
举例如下:
find /root -name “install.log*”
含义:在root目录下按名称搜索任意以”installlog”开头的文件。
find /root -name “ab[cd]”
含义:在root目录下按名称搜索文件名为“abc”或者为”abd”的文件,即中括号中任意一个字符匹配皆可以。
grep命令
grep [选项] 字符串文件名
含义:在文件中搜索包含指定字符串的内容。
选项:
-i 忽略大小写
-v 排除指定字符串
例如: grep “size” install.log
意思就是在文件install.log中搜索包含”size”字符串的的内容。