首页 百科知识 文件查找及处理命令

文件查找及处理命令

时间:2022-10-09 百科知识 版权反馈
【摘要】:本小节介绍与文件查找、排序及统计相关的部分命令。可以用{}表示所执行命令的参数,即所找到的文件,命令的末尾必须以“\;”结束。但应注意,由于locate对文件名数据库查询,所以要注意及时更新此数据库,否则新建立的文件可能无法查到。whereis命令查找指定命令的二进制文件、源文件及手册页的存放位置。查询一般的文件并不推荐使用whereis命令。

8.2.4 文件查找及处理命令

Linux除了提供前述基本文件操作命令外,还提供了很多高级文件操作命令以满足用户的不同需要。本小节介绍与文件查找、排序及统计相关的部分命令。

(1)find

find命令的功能是查找文件或目录,其语法格式如下所示:

find 路径名 查找选项 [操作选项]其中,路径名是find开始搜索的目录名,find命令将遍历查询指定路径下的各个子目录,并显示查询结果。

该命令的常用选项有:

-name 文件名:根据给定的文件名查找文件。

-type 文件类型:查找具有指定文件类型的文件,其中的文件类型可以取值b、c、d、f、l等,分别代表块特殊文件、字符特殊文件、目录文件、普通文件及链接文件。

-user 用户名:查找属于指定用户的文件。

-atime 天数:查找在指定天数以前被访问过的文件。

-mtime 天数:查找在指定天数以前被修改过文件内容的文件。

-ctime 天数:查找指定天数以前被修改过文件状态的文件。

-size 文件长度:查找指定文件长度的文件。文件长度默认以块(512字节)为单位。

find命令提供的查找条件可以组合使用,并且可以是一个用逻辑运算符not、and、o r组成的复合条件。逻辑运算符and、or、not的含义为:

·逻辑与(and):在命令中用-a表示,是系统默认的选项,当所给的条件都满足时,寻找条件才算满足。

·逻辑或(or):在命令中用-o表示,当所给条件中有一个满足时,寻找条件就算满足。

·逻辑非(not):在命令中用!表示,当所给条件不满足时,寻找条件就算满足。

对于要求输入数值的选项,可以有3种输入方式,如下所示:

+n:表示大于n。

-n:表示小于n。

n:表示等于n。

例如,假设待输入数值为20,则+20表示大于20(如21、22、23等),-20表示小于20(如19、l8、l7等),20表示正好是20。

对于查找到的文件,可以执行以下操作:

-exec 命令 {} \;:对查找出来的文件执行所给的命令。可以用{}表示所执行命令的参数,即所找到的文件,命令的末尾必须以“\;”结束。

-ok 命令 {} \;:对查找出来的文件执行所给的命令,与-exec不同的是,它会在执行前询问用户是否需要执行该命令。

-print:在标准输出设备上显示查找出的每个文件的路径名。

例如要在目录/home/zheng下寻找文件first.c,可以使用

$find /home/zheng -name first.c

若要查找所有文件名以doc开始或是以.txt结尾的文件,可使用以下命令:

$find / -name doc* -o –name *.txt

如果想查找子目录/usr/bin中最近一百天没有使用过的程序,可以采用下述命令:

$find /usr/bin -type f –atime +100 -print

(2)locate

locate命令查询文件名中包含指定字符串的文件。该命令使用一个预先建立的文件名数据库来查找文件,所以查找速度比较快,并且由于它只按文件名查找,命令格式也没有find那么复杂。但应注意,由于locate对文件名数据库查询,所以要注意及时更新此数据库,否则新建立的文件可能无法查到。更新数据库的命令为updatedb,此命令需要以root用户的身份执行,可能一分钟左右才能完成,完成后会在/var/lib目录下生成数据库文件slocate。

locate命令的语法格式如下所示:

locate [选项] 文件名

其中文件名可以使用通配符。该命令的常用选项有:

-i:忽略大小写。

例如,要想查找系统上的所有文件名包含test的文件,应使用如下命令:

$locate test

(3)whereis

whereis命令查找指定命令的二进制文件、源文件及手册页的存放位置。但whereis命令有一个很大的缺陷妨碍了它的使用,它的搜索路径是固定的,并且用户不能通过修改配置文件的方法来增加查找路径。所以如果使用whereis未查到任何结果,很可能是在指定路径内没有该文件,而不是该文件不存在。查询一般的文件并不推荐使用whereis命令。whereis命令的语法格式如下所示:

whereis [选项] 文件名

该命令的常用选项如下:

-b:只查询二进制文件。

-m:只查询手册页。

-s:只查询源代码

例如,要查询find命令,并同时显示该命令的二进制文件和手册页的位置,可使用以下命令:

$whereis find

find: /usr/bin/find /usr/man/man1/find.1.gz其中/usr/bin/find为其二进制文件的存放位置,/usr/man/man1/find.1.gz为其手册页文件存放的位置。

(4)grep

使用grep命令可以在一个文件或一系列文件中查找指定字符串,可以使用正则表达式来描述需要查找的字符串。

正则表达式是由普通字符(如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式,该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。下面介绍一些常见的元字符及模式,如表8-3所示。

表8-3 正则表达式中的常见元字符

img71

img72

grep命令的功能是在一个文件或一组文件中搜索指定模式的字符串,并通知用户在什么文件中搜索到与指定模式匹配的字符串,打印出所有包含该字符串的文本行。如果没有指定搜索文件,则从标准输入中读取。正常情况下,每个匹配的行被显示到标准输出。如果要查找的文件是多个,则在每一行输出之前加上文件名,其命令格式如下:

grep [选项] [模式] [文件名]

该命令的常用选项如下所示:

-c:只显示匹配行的数量。

-i:比较时不区分大小写。

-l:只显示具有匹配行的文件名,不显示匹配行本身。如果在某文件中多次出现匹配字符串时,不重复显示此文件名。

-n:显示匹配行在文件中的行号。

-v:只显示不包含匹配串的行。

例如,假设当前目录下只有文本文件file1、file2、file3,其内容如下所示。

$cat file1

LINUX

11122

BBAA

linux system

$cat file2

linux

11122

CCAA

$cat file3

Linux system

11122

AADD

为在文件file1中搜索字符串LINUX,可以使用下述命令:

$grep LINUX file1

LINUX

使用-i选项可以忽略大小写,例如:

$grep –i LINUX file?

file1: LINUX

file1: linux system

file2: linux

file3: Linux system

为显示不包含匹配行的字符串,可以使用-v选项,例如:

$grep –vi LINUX file1

11122

BBAA

为显示每个文件中不含11的行的行数,可以使用:

$grep –vc 11 file?

file1: 3

file2: 2

file3: 2

(5)wc

wc命令的功能是统计文件的行数、字数及字符数,其命令格式如下:

wc [选项] [文件名]

通常该命令返回指定文件的行数、字数以及字符数。如果命令行中没有指定要统计的文件,则从标准输入读入正文进行统计。该命令的常用选项有:

-w:统计字数,即单词数。

-l:统计行数。

-c:统计字符数。

如果没有指定选项,则默认为所有选项(-lwc)。用户也可以使用这些选项的任意组合。输出列的顺序和数目不受选项顺序和数目的影响。总是按“行数、字数、字符数、文件名”的顺序显示,并且每项最多一列。

例如要统计文件file1、file2的行数、字数和字符数,可使用以下命令:

$wc file1 file2

下面的命令将统计文件/etc/passwd中有多少行:

$wc –l /etc/passwd

(6)sort

sort命令的功能是对指定文件中的各行进行排序,并将结果显示在标准输出上。sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,以此类推,直到字符不同或行结束。sort命令的语法格式是:

sort [选项] 文件名

sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。默认情况下以整行为关键字,按ASCIl字符顺序进行排序。sort命令常用的选项如下所示:

-b:排序时忽略每行中前导的空白(空格和制表符)。

-d:按字典顺序排序,比较时仅字母、数字、空格有意义,忽略标点符号控制字符

-f:忽略大小写区别。

-n:数字以数值大小排序。

-o 输出文件:将排序输出写到指定文件中,而不是标准输出。

-r:逆序输出排序结果,即从升序变为降序。

-t 分隔符:用指定字符作为宇段分隔符,缺省为空格。

例如,若要对文件test.txt进行排序,可以使用如下命令:

$sort test.txt

如果需要将test.txt文件的排序结果送入sorted文件,并且在排序时忽略大小写,可以使用:

$sort –f –o sorted test.txt

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈