4-1 Linux中文件搜索命令locate
locate 文件名:在后台数据库中按文件名搜索,搜索速度更快
locate命令所搜索的后台数据库为/var/lib/mlocate
updatedb:更新数据库
locate找不到新建的文件。locate不是直接从系统中去搜索,而是从保存locate的数据库/var/lib/mlocate中搜索,不需要遍历整个系统。mlocate不是实时更新的(每天更新一次),新建的文件数据库没有更新,所以找不到。可以使用updatedb更新数据库。
Linux版本不同,locate数据库的名称可能不同。
优点:速度快;缺点:只可以按照文件名搜索。
但在/tmp/下创建同一个文件,updatedb后locate只能搜索到root下的文件。
locate按照/etc/updatedb.conf配置文件搜索,whereis和which也遵守该文件的筛选规则。
PRUNE_BIND_MOUNTS = "yes"说明其下面的搜索规则生效。
4-2 Linux中命令搜索命令whereis与which
(1)whereis
用于搜索命令所在路径及帮助文档所在位置
格式:whereis 命令名
选项:
-b:只查找可执行文件
-m:只查找帮助文件
只能搜索系统命令,不能搜索自己创建的普通文件。可以搜索到命令的帮助文档位置。
whoami:显示登录名
whatis:显示手册部分的页眉行
(2)which
用于搜索命令所在路径及别名
格式:which 文件名
ls --color-auto:ls支持颜色显示,颜色显示方式为自动显示。
不是所有命令都有别名,不是所有命里都能找到位置。
cd命令是Linux shell的内置命令,不需要有独立的执行文件,所以找不到,即whereis和which只能找到外部安装的命令。
在Linux中执行命令要用绝对路径,但这样使用不方便。Linux开发了$PATH环境变量。
环境变量:定义用户操作环境的变量。
PATH环境变量:定义的是系统搜索命令的路径。
用“:”分隔不同的路径。
当执行某一个命令时会到$PATH指定的路径中搜索执行文件。如果没有搜索到则报错。
Windows在cmd中执行命令也是根据PATH中配置的目录搜索命令所在位置。
4-3 Linux中文件搜索命令find
用于搜索文件位置
格式:find [搜索范围] [搜索条件]
应避免大范围搜索,否则会非常耗费系统资源
find是在系统当中搜索符合条件的文件名。
find搜索的内容是完全匹配,模糊查询需要使用通配符。
Linux中的通配符:
* 匹配任意内容
? 匹配任意一个字符
[] 匹配任意一个中括号内的字符
“*”表示搜索目录下所有文件,包括隐藏文件。
-iname:文件名不区分大小写
-user:根据文件所有者进行搜索
-nouser:查找没有所有者的文件
Linux中所有的文件都要有所有者,如果没有所有者的文件是垃圾文件。
特殊情况:文件由内核产生,内核直接调用不经过系统目录,它产生的文件有可能没有所有者,/proc和/sys是内存的挂载点,内核有可能在这两个目录进行交互,如果在这两个目录中发现没有所有者的文件应该是正常的;外来文件,例如文件由Windows建立拷贝到Linux中,Windows忽略所有者的概念(不是没有),有可能在Linux中没有所有者。除此之外的Linux中的文件都应该有所有者。
-atime/ctime/mtime n:根据时间查找文件
atime:访问文件的时间;ctime:改变文件属性的时间;mtime:修改文件内容的时间,单位为天
-n:n天内修改的文件;n:n天当天修改的文件;+n:n天前修改的文件
查找10天前修改的文件:
按照分钟查找则为:-amin/cmin/mmin n
-size n:根据文件大小搜索文件
-nk:小于nKB的文件;nk:等于nKB的文件;+nk:大于nKB的文件;
查找文件大小是25KB的文件:
按M大小查找:
注意大小写。默认字节为数据块,有的不是分区的数据块,而是硬盘扇区的数据块。
按照字节大小查找:find /root –size 25
根据i节点查找:
ls -i:查询i节点
多条件查询:
-a:and,辑与,两个条件都满足
-o:or,逻辑或,两个条件满足一个即可
查找/etc/目录下,大于20KB并且小于50KB的文件
对搜索结果执行操作:-exec/-ok 命令{}\;
查找/etc/目录下,大于20KB并且小于50KB的文件,并显示详细信息
只有能够处理前面查询结果的命令才能放到-exec后面:
4-4 Linux中字符串搜索命令grep
在文件中搜索符合条件的字符串
格式:grep [选项] 字符串 文件名
选项:
-i:忽略大小写
-v:排除指定字符串