Linux命令实例参考手册,第四章 文件比较及文件查找命令_云主机和虚拟主机_奇迪科技(深圳)有限公司(www.qvdv.com)
欢迎来到奇迪科技(深圳)有限公司,超值服务提供卓越产品!

云主机和虚拟主机

Linux命令实例参考手册,第四章 文件比较及文件查找命令

作者:admin来源:www.qvdv.com更新时间:2015-02-02

4  文件比较及文件查找命令

比较文件——cmp

cmp命令语法:

cmp [参数] [文件1] [文件2] [skip1 [skip2]]

实例1:比较两个文件是否相同,并在屏幕上打印结果。

假设在当前目录和/var一个同名的文件aaa,通过ll命令可以查看其大小、访问权限、最后修改时间等属性简单判断其是否为同一文件。也可以利用cmp查看其内容是否完全相同。在命令提示符下输入:

[root@localhost ~]#cmp aaa /var/aaa

实例2:比较两个文件是否相同,并显示不同点的详细信息。

假设当前目录下有两个文件aaabbb,为了便于查看比较结果,两个文件的内容都非常简单。在命令提示符下输入:

[root@localhost ~]#cmp -l aaa bbb

实例3:分别从aaa的第15个字节和bbb的第16个字节开始比较两个文件。

在命令提示符下输入:

[root@localhost ~]#cmp -l aaa bbb 15 16

151610进制)

比较文件——comm

comm命令语法:

comm [参数] 文件1 文件2 [>|>>文件名]

实例1:假设当前目录下有两个文件aaabbb,判断两个文件是否相同。

若两个文件相同,则只输出第3列的内容,第12列的内容为空。否则,表示两个文件不同,若第3列的内容为空则表示两个文件没有任何相同之处。在命令提示符下输入:

[root@localhost ~]#comm aaa bbb

实例2:比较两个文件的内容,只显示在两个文件中共同存在的行。

假设当前目录下有一file1.aa文件如下:

#include<stdio.h>

int main(int argc,char*argv[]){

int  a=3,b=4;

printf(“a+b=”,a+b);

return 0;

}

文件file2.aa的内容如下:

#include<stdio.h>

int main(int argc,char*argv[]){

int  a=6,b=10;

printf(“a+b=”,a+b);

return 0;

}

为了便于查看结果是否正确,通常在比较大的文件的时候,comm提供了方便快捷的方法。在命令提示符下输入:

[root@localhost ~]#comm -12 file1.aa file2.aa

查找文件——find

find命令语法:

find [搜索目录…] [参数] [表达式] [动作选项] find [-path<模式>] [参数] [表达式] [动作选项]

实例1:根据文件名字查找文件。

假设要在服务器上配置ftp服务器,但是不确定关于ftp服务器配置文件的具体位置,另外,由于知道在Linux下关于服务器的配置文件都在/etc目录下,因此,可以借助find命令查看ftp服务器配置信息的具体位置。因此,在命令提示符下输入以下命令:

[root@localhost ~]#find /etc -name ftp *

(其中/为查找目录)

实例2:根据文件的大小查找文件。

若用户不清楚文件的名字,可以利用-size<n>指定文件的大小:

[root@localhost ~]#find ./ -size  1000c

其中c表示要查找的文件的大小是以字节为单位。

[root@localhost ~]#find ./ -size  +1000c

查找大于1 000字节的文件。

[root@localhost ~]#find ./ -size  -1000c

查找小于1 000字节的文件。

[root@localhost ~]#find ./ -size  +1000c -and -2000c

查找介于1 000字节和2 000字节之间的文件。

对于比较大的文件,为了便于用户在命令行输入,文件大小的度量单位可以采用kb甚至MG

实例3:根据文件的属性查找文件。

下面一组命令,主要是根据文件的时间属性和属主/字节组来查找文件,很容易理解,读者可以自行在本机上操练。

[root@localhost ~]#find ./ -amin -10

查找当前目录下最后10分钟访问的文件。

[root@localhost ~]#find./ -atime  -2

查找当前目录下最后48小时访问的文件。

[root@localhost ~]#find ./ -empty

查找当前目录下为空的文件或者文件夹。

[root@localhost ~]#find ./ -group user1

查找当前目录下属组为user1的文件。

[root@localhost ~]#find / -mmin -5

查找当前目录下最后5分钟里修改过的文件。

[root@localhost ~]#find ./ -mtime -1

查找当前目录下最后24小时里修改过的文件。

[root@localhost ~]#find ./ -nouser

查找当前目录下属于作废用户的文件。

[root@localhost ~]#find ./ -user  user1

查找当前目录下属于user1这个用户的文件。

[root@localhost ~]#find ./ -perm 664

查找当前目录下允许属主/属组可读写的,其他用户只可读的文件)

实例4:利用综合属性查找文件。

上述的命令只是根据一个具体的属性(文件名或大小等)来查找文件,查找结果大部分都不是用户需求的文件。若用户对要查找的文件提供更多的信息,则find的输出结果就越符合用户的需求。

这需要借助逻辑操作选项,find支持的逻辑的操作分别有:逻辑与(-a-and)、逻辑或(-o-or)、非(-!);操作规则和C语言中的相对应的操作一致。-a查找同时符合多个条件的文件,-o查找符合任何一个条件的文件,-!表示不符号条件的文件。

当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“”转义字符来去除括号的意义。

在命令提示符下输入:

[root@localhost ~]#find ./ -size +1000c -and -mtime +3 -and -name abc*

查找到同时符合3个条件的文件。

[root@localhost ~]#find ./ -size +1000c -or -mtime +3

查找到符合任何一个条件的文件。

[root@localhost ~]#find ./ -!(-size +1000c -or -mtime +3)

查找非大于1 000字和最近48小时修改的文件。

实例5:查看当前目录下所有文件的类型。

在命令提示符下输入:

[root@localhost ~]#find ./ -exec  file  {} ;

利用find命令的-exec选项可以对查找的文件执行相应的操作,一般用于文件的批处理。注意-exec在命令行书写中的“;”做为一个独立的部分,因此必须和前面的“}”用空格或Tab键间隔。

查找文件——whereis

whereis命令语法:

whereis [参数] [文件…]

实例1:查看系统是否有lscp命令。

在命令提示符下输入:

[root@localhost ~]#whereis -b ls cp

[root@localhost ~]#whereis  -B /bin /sbin -f ls  cp

实例2:查看/usr/bin目录下没有在/usr/share/ma/man1说明的文件;有对应的源程序在/usr/src目录下的所有文件。

根据各选项的含义,在命令提示符下输入:

[root@localhost ~]#cd /usr/bin

[root@localhost ~]#whereis -u -M /usr/man/man1 -S /usr/src -f * |tail

实例3:在当前目录下,查找没有文档说明的所有文件。

在命令提示符下输入:

[root@localhost ~]#whereis -m -u  *

 

查找文件——locate

locate命令语法:

locate [参数] [字符串或模式…]

实例1:查找用户创建的文件hhwork

在命令提示符下输入:

[root@localhost ~]#locate hhwork

实例2:查看ftp服务器的配置文件。

在命令提示符下输入:

[root@localhost ~]#locate ftp | grep etc | grep conf

查找文件——which

which命令语法:

which [文件名…]

实例:查看系统中是否安装c/c++编译器。

经常在编写程序后,利用gcc来编译文件的时候,总是提示命令找不到的提示信息,可以利用which命令查看是否安装c/c++编译器。在命令提示符下输入以下命令。

[root@localhost ~]#which gcc g++

 

搜索文件中的字符串——grep

grep命令语法:

grep [参数] [字符串或正则表达式][文件名…]

实例1grep命令过滤ls –l的显示内容。

长格式显示文件是以多个字段显示,第一个字段显示该文件的类型和访问权限。如果只显示当前目录下的目录文件,则需要将显示结果进行过滤,只显示以d开头的行;反之,则显示非d字母开头的行。

grep一般用于将指定的目标文件过滤显示,现在需要将ls –l的显示结果过滤,因此需要借助管道命令(|)来显示,在命令提示符下输入:

[root@localhost ~]#ls -l | grep ^d

只显示当前目录下的目录文件。

[root@localhost ~]#ls -l | grep ^[^d]

显示当前目录下的除目录文件以为的文件。

[root@localhost ~]#ls –l |grep -i  april

只显示当前目录下四月份创建的文件。

实例2:显示指定进程的信息。

ps -ef显示所有进程的简单信息。对于庞大的输出结果,用户可以借助more命令分屏显示。如果用户只关心其中的某个进程或某些进程,则可借助grep对输出结果进行过滤,显示用户关心的行。假设只显示sshd进程的情况,在shell提示符下输入:

[root@localhost ~]#ps –ef | grep sshd

显然只显示含有sshd的行,由于正在执行的grep命令含有“sshd”,因此也显示grep 进程,在shell提示符下再次输入:

[root@localhost ~]#ps –ef | grep sshd | grep -v grep

实例3:显示除根用户外其他登陆本机的用户。

本例子可以利用grep命令将who的输出结果进行过滤,只需要在命令提示符下输入:

[root@localhost ~]#who | grep –v root

实例4:查询用户ddf和组ddf的信息。

由于要查询用户/组“ddf”的信息,根据帐户文件(/etc/passwd)和组文件(/etc/group)的组织结构,则搜索etc/passwd/etc/group中包含“ddf”的行。因此在命令提示符下输入:

[root@localhost ~]#grep -n ddf /etc/passwd /etc/group

实例5:查询目标文件中特定的字符串。

假设当前目录下有一文件aaa,搜索该文件中包含“hello”的行,由于要匹配的字符串包含空格,因此在命令行中必须将其用引号括起来,避免shell把其当作独立的参数来处理而产生错误,需要在命令提示符下输入以下命令:

[root@localhost ~]#grep -n hello aaa

实例6grep搜索文本最常用的例子就是查询结构化的文件,比如一个通讯簿(address),假设存在于当前目录,包含名字字段、联系方式、地址。搜索联通用户的详细信息。

在命令提示符下输入:

[root@localhost ~]#grep “ 13[0-2]” address

查找的字符串以一个空格开始。需要注意的是由于要求查询联通用户的信息,不仅仅是单纯的查询包含“13[0-2]”的行,必须是以13[0-2]开始的单个字段,即13[0-2]前是一个空格。

实例7:仍然对通讯录address执行操作,查询所有以s开头用户的联系方式。

在命令提示符下输入:

[root@localhost ~]#grep -in ^s address

搜索文件中的字符串——egrep

egrep命令语法:

egrep [参数] [字符串或正则表达式] [文件名…]

实例:egrep命令实现多个字符串匹配,搜索addresssimonwxp的用户的信息。

利用grep命令不能同时指定两个固定的字符串,但是字符串“simon”和“wxp”似乎没有任何关系,所以很难用一个正则表达式来表示,若利用grep命令只能依次查看两个用户的信息。但是egrep扩展集中的“|”可以书写该正则表达式,在shell提示符下输入:

[root@localhost ~]#egrep “sxx|lhw” address

用引号正则表达式用引号括起来。

egrepgrep两者在执行速度上比grep相对较快,但是其功能相对有限,而egrep由于对正则表达式扩展集的支持但是速度相对较慢。


本文版权所有,转载须注明:来源 http://www.qvdv.com/qvdv-zhuji-768.html