购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 文件查找与统计

本节将介绍几个Linux文件与字符的查找、统计命令。

3.4.1 文件查找:find、wc、xargs

在Linux上,find毫无疑问是最强的文件查找工具。find的查找速度略慢于另一个查找工具locate。find的优点是实时查找,并批量对文件进行删除、统计、迁移等操作。

1.find命令速查手册

(1)find命令的语法格式:find[路径][表达式]。

[表达式]实际上可以分解为[运算符(OPERATORS)|选项(OPTIONS)|测试表达式(TESTS)|动作(ACTIONS)]4个部分。

find命令的表达式由选项、测试、动作组成,它们都以运算符分开。忽略运算符时,默认使用“-a”连接。如果表达式没有包含“-prune”以外的动作,则当表达式为真时,文件会执行“-print”动作。

(2)find表达式的运算符说明如表3.15所示,find表达式的选项说明如表3.16所示,find表达式的测试表达式说明如表3.17所示,find表达式的动作说明如表3.18所示。

表3.15 find表达式的运算符说明

表3.16 find表达式的选项说明

表3.17 find表达式的测试表达式说明

表3.18 find表达式的动作说明

(3)find命令示例。

2.wc命令速查手册

wc命令可以统计指定文件中的字节数、字数、行数,并将统计结果显示输出。如果没有指定文件,则会从标准输入设备读取数据。例如,统计日志文件数量。

(1)wc命令的语法格式:wc[选项][文件]。

(2)wc命令的选项说明如表3.19所示。

表3.19 wc命令的选项说明

(3)wc命令示例。

3.删除文件的4种方法

以下是运维中常用的删除文件的组合命令,即利用find删除查找到的文件,经常用于删除 N 天前的文件或日志。

4.xargs命令速查手册

xargs 命令并非 find 命令表达式(Expression)中的动作(Actions),而是与管道符“|”结合的一个外部命令。xargs是其他命令传递参数的一个过滤器,一般与管道符结合使用。

xargs可以将单行或多行文本输入格式转换为其他格式。例如,多行变单行,单行变多行。在上节中可以看到xargs命令与find、rm命令合用来批量删除文件。

(1)xargs命令的语法格式:[标准输入]xargs[选项][命令(可选)]。

(2)xargs命令的选项说明如表3.20所示。

表3.20 xargs命令的选项说明

(3)xargs命令示例。

注意: “|”为管道符,可以将前面(左边)命令的结果作为输入源传递给管道“|”后面的命令。xargs 命令是一个传递参数过滤器,与管道符“|”一同使用,将前面的命令传递给后面的命令使用。xargs 能够一次性传递命令,效率高,对文件名中含有空格需要特殊处理(-print0+xargs-0)。-exec反之,逐个传递前置参数,效率低,对文件名中含有空格无须特殊处理。

3.4.2 文件统计与排序:du+sort

du(Disk usage)命令可以递归统计磁盘使用情况,sort命令用来排序。这两个命令经常在一起使用。

1.du命令速查手册

(1)du命令的语法格式:du [选项][路径/文件]。

(2)du命令示例。

2.sort命令速查手册

sort命令可以将所有输入文件的内容排序后输出。当没有文件或文件为“-”时,sort命令读取标准输入。

(1)sort命令的语法格式:sort[选项][文件(可选)]。

(2)sort命令示例。

注意: 在使用sort命令进行排序统计时,使用具体的-m、-k参数,而不使用-h参数,否则会导致统计不准确。因为sort-n是根据数字大小,而不是单位进行统计的,所以如果使用-h参数进行统计,则可能导致2GB的文件在200MB下排序。

3.4.3 字符查找:grep+正则表达式

grep命令是Shell的“三剑客”之一,其他两个命令是sed、awk。sed命令在前面的章节已经介绍过。

1.grep命令速查手册

grep命令的意思是“global search regular expression and print out the line”,即使用正则表达式全局搜索并打印所在行。grep 命令是 Linux 的原生工具中查找文件字符最好用的工具,并且在与其他命令组合后,会有意想不到的作用。

(1)grep命令的语法格式:grep[选项][匹配表达式][文件(可选)]。

grep命令匹配文本时与正则表达式一起使用。最基本的正则表达式(basic-regexp)是待匹配字符串,如“grep'hello world'ymm.txt”。

(2)grep命令的常用选项说明如表3.21所示。可使用“grep-help”“man grep”“info grep”等命令查看grep命令的帮助说明。

表3.21 grep命令的常用选项说明

(3)grep命令示例。

首先创建测试文件,可以直接复制以下命令:

2.正则表达式

正则表达式(Regular Expression)描述了一种字符串匹配的模式(PATTERN),可以用来检查一串字符中是否包含某串字符,也可以将匹配的字符替换或从某个字符串中取出符合某个条件的子字符串等。

在前面的命令中,读者已经频繁使用了一个正则表达式,即星号“*”。它的意思是匹配零个或多个先前字符,如“*.txt”就是匹配所有以“.txt”结尾的文件名。

grep命令可用的正则表达式如表3.22所示。其他Linux命令也有许多是可以使用的正则表达式。关于正则表达式的正确性,可使用正则工具来检测。正则工具在网络上搜索即可,有许多在线工具。

表3.22 grep命令可用的正则表达式

续表

注意: grep还有其他扩展的命令,如egrep、fgrep、ngrep、pgrep等命令。

3.4.4 文件索引查找:locate+updatedb

locate 命令从查询速度上来说比 find 快。因为它会自行建立一个数据库(/var/lib/mlocate/mlocate.db),通过updatedb程序将硬盘中的所有档案和目录资料建成一个索引库。

locate 的缺点是不能及时查找到最新的文件,并需要每天更新一次。可以手动使用updatedb程序来更新locate数据库,也可以修改crond来让locate数据库加快更新频率。关于如何使用crond设置定时任务,会在后面章节进行讲解。

1.locate的安装

可以看到安装的程序是mlocate,在这之前也可以使用“yum install slocate”命令安装slocate来使用locate。而现在,速度更快的mlocate已经替代了slocate。它们使用的语法都是“locate xxx”。

2.locate命令速查手册

(1)locate命令的语法格式:locate[选项][匹配表达式(文件名)]。

(2)locate命令示例。

3.使用updatedb更新locate数据库

(1)查看locate数据库。

(2)updatedb命令示例。

(3)实例演示locate数据库更新效果如下。 aRhCysVWwg3p9z7jl5oFZXueciAG7ZbFa2N5ZS5B6Z7jMs/Nh03wtBgVu2hCAbVR

点击中间区域
呼出菜单
上一章
目录
下一章
×