阿里云刚到期,于是索性就把原来的winServer换成了CentOS,决定好好学一学Linux。在这把今天学到的东西回顾一下。
为了便于学习,就把搜索命令认为的划分成4个部分,分别是:
1、文件搜索命令 locate
2、命令搜索命令
3、find命令
4、grep命令
第一条:文件搜索命令 locate
命令格式
lacate -fileName
locate和find相比,locate的速度非常快,因为locate的搜索是从数据库中搜索的,但是相对的如果搜索一个新建的文件,可能不能搜到,因为数据库不是实时更新的,一般一天更新一次,如果想要立即搜索到这个文件,可以使用
updatedb
这个命令来强制更新这个数据库(/var/lib/mlocate,在Linux版本不同,可能会有不同)。如果显示为command not found ,就先yum install mlocate。
还有一种情况就是这样,
同样创建文件后,test3能找到,test1找不到。
原因是locate是按/etc/updatedb.conf文件来搜索的,主要有四条。
在上一个问题中的原因是,不筛选/tmp目录下的文件。
同样的下面要讲的whereis 和which 也会遵守这个配置文件。
第二条:搜索命令的命令whereis和which
whereis搜索命令所在的路径及帮助文档的位置
-b 只查找可执行文件的位置
-m 只查找帮助文档的位置
whereis 只能搜索系统命令,不能搜索自己创建的文件。
][]
Which 在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which还可以查看命令的别名。如果没有别名就不显示。上图表示ls支持颜色显示,方式为自动。
第三条:文件搜索命令find命令
find path -option [-print] [-exec -ok command] {} \;
例如:find / -name install.log
pathfind命令所查找的目录路径
option命令选项
printfind命令将匹配的文件输出到标准输出。
execfind命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格
ok 和 exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行
一般情况下,尽量避免大范围的搜索。find的搜索是一模一样的,如果要模糊查询,就要使用通配符。
有3个通配符:
* 匹配任意多个字符
?匹配任意单个字符
[] 匹配单个括号内的内容
Linux 严格区分大小写,要不分大小写搜索,要用-iname
-nouser 没有所有者的文件
find /var/log -mtime +10 #搜索10天前修改过的文件
<pre name="code" class="plain" style="font-size: 13.3333px;">+10 10天前修改的时间 -10 10天内修改的时间 10 10天修改的时间
atime 访问的文件ctime 改变的文件mtime 修改的文件
find . -size 25k #搜索当前目录下文件大小为25k的文件
-25k 小于25k 25k 等于25k +25k 大于25k
find . -size 2M #兆的单位要大写,k的单位为小写,如果不写单位,默认为扇区
find . -inum 1000 #查找i节点为262422的文件
find /etc -size +25k -a -size -2M #在/etc下查找大于25k,小于2M的文件
-a # and 逻辑与 两个条件都满足
-o # or 逻辑或 只需满足一个条件
find /etc -size +25k -a -size -2M -exec ls -lh {} \
# -exec 后面写第二条命令。指把前面找到的数据交给第二条命令处理,此处为显示。
# {} \是标准格式,只要写-exec就要写{} \,在{}和\之间有空格。
第四条:字符搜索命令grep命令
grep 在指定的文件中搜索符合的字符串
grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!