Linux学习之路(三)搜索命令
1.文件搜索命令locate
2.命令搜索命令whereis与which
3.字符串搜索命令grep
4.find命令与grep命令的区别
locate命令相对于find命令搜索非常快,find命令在哪个目录下使用就在该目录下遍历一遍,非常消耗资源。
locate命令格式
locate 文件名
在后台数据库中按文件名搜索,搜索速度非常更快。locate不能搜索新建的文件,原因为locate命令不是直接在系统当中去搜索,而是在/var/lib/mloacte中去搜索。/var/lib/mlocate是locate命令所搜索的后台数据库。执行locate时,在数据库中搜索,不需要遍历整个操作系统,所以搜索文件时速度非常快。但是mlocate数据库不是实时更新,默认一天一更新,所以新建文件时,mlocate数据库并没有更新,locate该文件时没有能够搜索到,等到它更新时就能搜索到了。除此之外,还可以强制更新mlocate数据库,用命令updatedb命令来强制更新数据库。不同版本的Linux中locate命令的数据库mlocate的命名不同,有的是locatedb,有的是slocated。具体用locate去locate
自身。
缺点:只能按文件名搜索,功能单一。
locate搜索时是按照/etc/updatedb.conf配置文件来搜索的
PRUNE_BIND_MOUNTS="yes" #开启搜索限制 PRNEFS = #搜索时,不搜索的文件系统 PRUNENAMES = #搜索时。不搜索的文件类型 PRUNEPATHS = #搜索时,不搜索的路径
当更新了数据库后仍不能搜索到文件时,可以去看一下/etc/updatedb.conf里面是不是存在排除的规则。
2.命令的搜索命令whereis与which
搜索命令的命令whereis
搜索命令所在路径及帮助文档所在位置
选项:
-b 只查找可执行文件
-m 只查找帮助文件
只能搜索系统命令,不能搜索我们创建的文件
搜索命令的命令which
which 文件名
搜索命令所在的路径及别名 #但是并不是所有命令都有别名,如系统shell命令。which只能搜索外部安装外部外来命令。
当我们执行一个外部命令时,首先在$PATH路径下去找该命令,没有就报错。如果有就不用加绝对路径,没有就要加绝对路径,否则就放进$PATH路径下来定义搜索环境。
PATH环境变量
PATH环境变量:定义的是系统搜索命令的路径
3.文件搜索命令find
find命令
find [搜索范围] [搜索条件] #搜索文件
注意
#避免大范围搜索,会非常耗费系统资源
#场面是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配
Linux中的通配符
* 匹配任意内容
? 匹配任意一个字符
[] 匹配任意一个中括号内的字符
find /root -iname install.log #不区分大小写 find /root -user root #按照所有者搜索 find /root -nouser #查找没有所有者的文件
find /var/log/ -mtime +10 #查找10天前修改的文件
-10 10天内修改的文件
10 10天当天修改的文件
+10 10天前修改的文件
atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容
find . -size 25k #查找当前目录下大小是25KB的文件
-25k 小于25KB的文件
25K 等于25KB的文件
+25 大于25KB的文件
kb要小写,MB要大写
find . -size +2M
find . -inum 262626 #查找inode号是262626的文件
find /etc -size +20k -a -size -50k #查找/etc目录下,大于20KB并且小于50KB的文件
-a and 逻辑与,两个条件都满足
-o or 逻辑或,两个条件满足一个即可
find /etc -size +20k -a -size -50k -exec ls -lh {} \; #查找/etc目录下,大于20KB并且小于50KB的文件,并显示详细信息
#-exec/-ok 命令{}\; 对搜索结果执行操作
4.搜索字符串命令grep
.grep [选项] 字符串 文件名
#在文件当中匹配符合条件的字符串
选项:
-i 忽略大小写
-v 排除指定字符串
find命令与grep命令的区别
.find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符是完全匹配。
.grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达工时包含匹配