Linux命令实例参考手册,第四章 文件比较及文件查找命令_云主机和虚拟主机_奇迪科技(深圳)有限公司(www.qvdv.net)
cmp命令语法:
cmp [参数] [文件1] [文件2] [skip1 [skip2]]
实例1:比较两个文件是否相同,并在屏幕上打印结果。
假设在当前目录和/var一个同名的文件aaa,通过ll命令可以查看其大小、访问权限、最后修改时间等属性简单判断其是否为同一文件。也可以利用cmp查看其内容是否完全相同。在命令提示符下输入:
[root@localhost ~]#cmp aaa /var/aaa
实例2:比较两个文件是否相同,并显示不同点的详细信息。
假设当前目录下有两个文件aaa和bbb,为了便于查看比较结果,两个文件的内容都非常简单。在命令提示符下输入:
[root@localhost ~]#cmp -l aaa bbb
实例3:分别从aaa的第15个字节和bbb的第16个字节开始比较两个文件。
在命令提示符下输入:
[root@localhost ~]#cmp -l aaa bbb 15 16
(15,16为10进制)
comm命令语法:
comm [参数] 文件1 文件2 [>|>>文件名]
实例1:假设当前目录下有两个文件aaa、bbb,判断两个文件是否相同。
若两个文件相同,则只输出第3列的内容,第1,2列的内容为空。否则,表示两个文件不同,若第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 [-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字节之间的文件。
对于比较大的文件,为了便于用户在命令行输入,文件大小的度量单位可以采用k或b甚至M或G。
实例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 [参数] [文件…]
实例1:查看系统是否有ls、cp命令。
在命令提示符下输入:
[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 [参数] [字符串或模式…]
实例1:查找用户创建的文件hhwork。
在命令提示符下输入:
[root@localhost ~]#locate hhwork
实例2:查看ftp服务器的配置文件。
在命令提示符下输入:
[root@localhost ~]#locate ftp | grep etc | grep conf
which命令语法:
which [文件名…]
实例:查看系统中是否安装c/c++编译器。
经常在编写程序后,利用gcc来编译文件的时候,总是提示命令找不到的提示信息,可以利用which命令查看是否安装c/c++编译器。在命令提示符下输入以下命令。
[root@localhost ~]#which gcc g++
grep命令语法:
grep [参数] [字符串或正则表达式][文件名…]
实例1:grep命令过滤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
实例6:grep搜索文本最常用的例子就是查询结构化的文件,比如一个通讯簿(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命令实现多个字符串匹配,搜索address中simon和wxp的用户的信息。
利用grep命令不能同时指定两个固定的字符串,但是字符串“simon”和“wxp”似乎没有任何关系,所以很难用一个正则表达式来表示,若利用grep命令只能依次查看两个用户的信息。但是egrep扩展集中的“|”可以书写该正则表达式,在shell提示符下输入:
[root@localhost ~]#egrep “sxx|lhw” address
用引号正则表达式用引号括起来。
egrep和grep两者在执行速度上比grep相对较快,但是其功能相对有限,而egrep由于对正则表达式扩展集的支持但是速度相对较慢。
本文版权所有,转载须注明:来源 https://www.qvdv.net/qvdv-zhuji-768.html