三、文件搜索命令
1、文件搜索命令locate
2、命令搜索命令whereis和which
3、文件搜索命令find
4、字符串搜索命令grep
5、find命令于grep命令的区别
1、文件搜索命令locate
命令格式:locate [文件名]
解析:locate命令是在后台数据库/var/lib/mlocate中按照文件名搜索,搜索速度很快,所以如果搜索刚创建的文件可能搜不到的原因是后台数据库的更新并没有那么块,这时可以通过updatedb命令来更新数据库
小提示:
1、locate命令比find命令要高效,因为locate命令是在一定的目录下进行的搜索,而find命令是扫描全部的文件进行查找,就像一般的杀毒软件,扫描时间很长,这是因为杀毒软件是扫描整个磁盘的
2、可以用locate locate命令来搜索与locate命令相关的文件,即文件名中含有locate关键字
3、locate搜索所按照的配置文件时/etc/updatedb.conf配置文件进行搜索的,而该文件里面的一些参数所代表的含义分别是:
(a)PRUNE_BIND_MOUNTS="yes":开启搜索限制,取值只能为yes|no,即下面的限制条件是否生效,yes“全都生效”,no“全不生效”
(b)PRUNEFS=" ":引号中所在的盘符不搜索
(c)PRUNENAMES=" ":含有引号中的后缀名文件不搜索
(d)PRUNEPATHS=" ":引号中所在的路径不搜索
2、命令搜索命令whereis和which
(1)where is [选项] 命令名:搜索命令所在路径以及帮助文档所在位置,即找到有关命令如何使用的文档
选项:
-b:只查找可执行文件
-m:只查找帮助文件
(2)which 命令名:只能看到命令所在位置,如果该命令还有别名,也会显示出来
例如:
which ls
显示结果:
alias ls='ls --color=auto'
/bin/ls
当你使用ls命令查看一些文件夹中的内容时,文件名的颜色不一样,这就是执行了color=auto
小提示:
a、注意,where is只能搜索系统命令,即外来的命令,搜索不了shell自带的命令,也搜索不了文件所在位置
b、which命令并不是所有的命令都能使用,它也不能搜索shell自带的命令
c、在终端使用命令时,系统会在环境变量$PATH(定义的是系统搜索命令的路径)中判断是否有这个命令,要想知道$PATH的值,可以通过echo $PATH来获知
3、文件搜索命令find
格式:
find [搜索范围] [搜索条件]:find命令只能搜索文件,而且它是严格搜索,即搜索完全符合的文件名,如果要匹配更多的文件名,就需要使用“通配符”
例1:find / -name install.log
例2:find / -name "install*"
选项:
a、find [目录] -iname install.log:-i是不区分文件名大小写
b、find [目录] user root:按照所有者搜索
c、find [目录] -nouser:查找没有所有者的文件
d、find [目录] -mtime +10
-10:10天内修改文件
10:10天当天修改的文件
+10:10天前修改的文件
atime:文件访问的时间
ctime:改变文件属性
mtime:修改文件内容
e、find [目录] size [文件大小]:按照文件的大小来搜索文件
.:点代表当前目录
k:注意,如果是千字节就必须是小写的k
M:如果搜索的文件是兆字节就必须是大写的M
无单位:如果搜索的文件大小不加单位,系统默认的单位是扇区,Linux系统是按照一个个同心圆来划分的,一个扇区就是512k个字节
f、find [目录] inum [节点ID]:按照节点的ID去搜索文件
ls -i:这个命令可以搜索出文件的节点ID
g、find [目录] -size +20k -a -size -50k:搜索目录下文件大小比20k大且比50k小的文件
-a:and,逻辑与,两个条件都满足
-o:or,逻辑或,只需要满足其中一个条件
ls -lh [目标文件]:可以显示目标文件的详细信息,但我们搜到了目标文件,看看是否符合要求,可以用这个命令查看当前文件的大小
h、find [目录] -size +20k -exec ls -lh {} ; :可以对第一个命令的到的结果执行下一条命令
注意,这里的-exec是与{} ;搭配使用的,当执行完-exec前的命令,会对得到的结果执行下一条命令
小提示:
a、find搜索命令非常消耗资源,所以我们要避免大范围搜索
b、通配符有哪些呢:
1)*:匹配任意字符
2)?:只匹配一个字符
3)[]:匹配括号中的任意一个字符
4、字符串搜索命令grep
grep [选项] [字符串] [文件名]:在文件当中匹配符合条件的字符串
选项:
-i:忽略大小写
-v:排除指定字符串
find与grep的区别:
1、find命令是严格搜索指定名字的文件
2、grep命令是搜索包含指定字符串的文件中的内容,它不是严格搜索,而是包含搜索