文件比较查找(命令实例)
一:命令列表
cmp 比较两个文件是否有差异
comm 比较两个已排过序的文件
diff 比较文件的差异
cksum 检查文件的CRC是否正确
file 辨识文件类型
find 查找文件命令
which 查找文件命令
locate 搜寻系统内是否存在指定的文件
whereis 定位文件位置命令
paste 合并文件列命令
split 分割文本文件命令(按大小分割)
csplit 分割文本文件命令(按行分割)
二、实例解说
名称:cmp
功能:比较两个文件是否有差异
语法:cmp [-clsv][-i <字符数目>][第一个文件][第二个文件]
范例
假设当前目录下有一f1.aa文件如下:
#include<stdio.h>
int main(int argc,char*argv[]){
int a=3,b=4;
printf(“a+b=”,a+b);
return 0;
}
文件f2.aa的内容如下:
#include<stdio.h>
int main(int argc,char*argv[]){
int a=6,b=10;
printf(“a+b=”,a+b);
return 0;
}
cmp f1.aa f2.aa 比较两个文件是否相同,如果文件相同,则不显示消息
cmp –l f1.aa f2.aa #比较两个文件是否相同,并显示不同点的详细信息
名称:comm
功能:比较文件
语法:comm [-123] [第1个文件][第2个文件]
范例:
comm -3 f1.aa f2.aa #比较两个文件的内容,只显示在两个文件中共同存在的行
名称:diff
功能:比较文件的差异
语法:diff [选项] file1 file2
范例
[root@localhost etc_bak]# cp yp.conf yp.conf.bak
[root@localhost etc_bak]# diff yp.confyp.conf.bak
名称:cksum
功能:检查文件的CRC是否正确,
语法:cksum [file..]
范例:
[root@localhost ~]# mkdir cksum
[root@localhost ~]# cksum ./etc_bak/* >./cksum/etc.cksum ##通过将一个目录或文件的校验和与它以前的校验和相比较,就能判断该文件是否被改动过。
名称:file
功能:辨识文件类型
语法:file [-beLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
范例
[root@localhost etc_bak]# file yp.conf
yp.conf: ASCII English text ##辨识为文本文件
file /bin/bash ##辨识为ELF 32-bit LSBexecutable
名称:find
功能:查找文件命令
语法:find [搜索目录…] [参数] [表达式] [动作选项]
范例
find /etc -name ftp * #查看ftp服务器配置信息的具体位置
find . -name "*.c" #将目前目录及其子目录下所有文件名是 c 的文件列出来。
find . -ftype f #目前目录其其下子目录中所有一般文件列出
find /dev -type c #将/dev目录及其子目录下;类型是字符设备的文件列出
find ./ -type f -size 0 -exec ls -l {} \; #为了查找文件长度为0的普通文件,并列出完整路径
find ./ -size 1000c #c表示要查找的文件的大小是以字节为单位,单位可以M或G。
find /var/log -type f –mtime +7 #查找/ v a r / l o g 目录中更改时间在7日以前的普通文件
find ./ -size +1000c -and -2000c #查找介于1 000字节和2 000字节之间的文件
find ./ -amin -10 #查找当前目录下最后10分钟访问的文件
find./ -atime -2 #查找当前目录下最后48小时访问的文件。
find . -ctime -20 #将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出
find / -mmin -5 #查找当前目录下最后5分钟里修改过的文件
find / -mtime -5 –print #在系统根目录下查找更改时间在5日以内的文件
find ./ -mtime -1 #查找当前目录下最后24小时里修改过的文件
find ./ -empty #查找当前目录下为空的文件或者文件夹
find ./ -group user1 #查找当前目录下属组为user1的文件
find ./ -user user1 #查找当前目录下属主是user1这个用户的文件
find ./ -nouser #查找当前目录下属于作废用户的文件
find ./ -perm 664 #查找当前目录下允许属主/属组可读写的,其他用户只可读的文件
find ./ -size +1000c -and -mtime +3 -and-name abc* #查找到同时符合3个条件的文件
find ./ -size +1000c -or -mtime +3 #查找到符合任何一个条件的文件
find ./ -! \(-size +1000c -or -mtime +3 \)#查找非大于1 000字和最近48小时修改的文件,“\(”与其它字符之间注意空格
find ./ -exec file {} \; #查看当前目录下所有文件的类型
名称:which
功能:在环境变量$PATH设置的目录里查找符合条件的文件
语法:which [文件...]
范例
which gcc g++ #看系统中是否安装c/c++编译器
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:
which 查看可执行文件的位置。
whereis 查看文件的位置。
locate 配合数据库查看文件位置。
find 实际搜寻硬盘查询文件名称。
##查找文件、显示命令路径
which lsmod
名称:locate
功能:搜寻系统内是否存在指定的文件
语法:locate [-q] [-d ] [--database= ]
范例
[root@localhost cmd]# updatedb
locate httpd 查找相关字httpd
locate -n 10 httpd : 寻找所有叫 httpd 的档案,但最多只显示 10个
locate ftp | grep etc | grep conf #查看ftp服务器的配置文件
名称:whereis
功能:定位文件位置命令
语法:whereis [参数] [文件…]
范例
whereis -b ls cp #查看系统是否有ls、cp命令
whereis -m -u * #在当前目录下,查找没有文档说明的所有文件
名称:grep
功能:搜索文件中的字符串
语法:grep [参数] [字符串或正则表达式][文件名…]
范例
ls -l | grep ^d #只显示当前目录下的目录文件
ls -l | grep ^[^d] #显示当前目录下的除目录文件以为的文件
who | grep –v root #显示除根用户外其他登陆本机的用户
grep -n “yp” yp.conf #查询目标文件中特定的字符串,显示行号
grep “ 13[0-2]” address #搜索查询结构化的通讯簿(address), 空格+13[0-2]开始的单个字段的用户信息,常用于结构化文件的查询例子。
grep -in ^s address #查询所有以s开头用户的联系方式
注意:grep命令不能同时指定两个固定的字符串,所有下面我们再介绍egrep命令
名称:egrep
功能:实现多个字符串匹配搜索
语法:egrep [参数] [字符串或正则表达式] [文件名…]
范例
egrep “sxx|lhw” address #搜索address中simon和wxp的用户的信息
名称:paste
功能:队列方式合并文件列命令
语法:paste [-s][-d ][--help][--version][文件...]
范例
文件: pas1
ID897
ID666
ID982
文件: pas2
P.Jones
S.Round
L.Clip
[root@localhost cmd]# paste pas1 pas2 >test2
[root@localhost cmd]# cat test2
D897 P.Jones
ID666 S.Round
ID982 L.Clip
ls /etc | paste -d": " - - -以三列格式显示输出:
名称:split
功能:分割文件命令(按大小分割)
语法:split [-n] file [name]
范例
##将文件myfile依次截断到名为ffaa,ffab,ffac.....的文件中,每一文件的长度为默认10行
split -10 myfile ff
split -d -b 512 FILE prefix #分解后大小为 512byte,文件名前缀为prefix 后缀为 00、01、02 ......99,若 -b 改为 -k 为Kbyte,-m 为Mbyte。
名称:csplit
功能:分割文件命令(按行分割)
语法:csplit [-kqsz] [-b<输出格式>] [-f<输出前缀字符串>] [-n<输出文件名位数>] [文件] [模板样式..]
范例
#把文件 passwd 分解,分解后大小为 15 行,文件名前缀为 pass后缀为 00、01、02 ......99,而文件个数不多于100个。
csplit -k -f pass passwd 15 {99}
csplit -f pass passwd 20 #以20行为分界点切割成2份
csplit -k -f pass passwd 10 #以10行为分界, 文件名的位数为3