linux 文件内容对比、哈希和过滤命令grep
一、文件内容对比
#diff diff是一个基础的文件内容对比工具,它以文本形式显示两个文件或目录之间的差异。主要用于比较文件内容的不同之处,帮助用户找出文件修改的具体位置。 [root@centos79-68-78 src]# diff file1 file2 3a4 > 4 6a8,9 > d > e 使用-u 选项可以以统一的格式输出差异,这种格式更易读 [root@centos79-68-78 src]# diff file1 file2 -u --- file12026-02-12 10:21:54.884060147 +0800 +++ file22026-02-12 10:22:10.700392805 +0800 @@-1,6 +1,9 @@ 1 2 3 +4 a b c +d +e +就代表file2比file1多了哪些内容 -就代表file2比file1少了哪些内容 没有+和-就代表内容一样的部分 #vimdiff vimdiff 是基于 Vim 编辑器的文件对比工具,它可以可视化的方式展示两个或多个文件之间的差异。用户可以在 Vim 编辑器的界面中直观地看到文件的差异,并进行编辑操作。 [root@centos79-68-78 src]# vimdiff file1 file2

#git diff git diff 是 Git 版本控制系统中的一个命令,主要用于比较 Git 仓库中文件的不同版本之间的差异。它可以帮助开发者查看文件的修改情况,以及在提交代码之前预览变更。 1.安装git yum-y install git 2.比较两个提交之间的差异 [root@centos79-68-78 src]# git diff file1 file2 diff--git a/file1 b/file2 index 9f2ac3e..cd06efd 100644 --- a/file1 +++ b/file2 @@-1,6 +1,9 @@ 1 2 3 +4 a b c +d +e
二、文件内容哈希命令
在 Linux 和其他操作系统中,有很多用于计算文件内容哈希值的命令,这些哈希值可用于验证文件的完整性、检查文件是否被篡改等。 1. md5sum md5sum 命令用于计算文件的 MD5 哈希值。MD5 是一种广泛使用的哈希算法,它会为文件生成一个 128 位(32 个十六进制字符)的哈希值。不过,由于 MD5 存在安全漏洞,现在一般不用于安全敏感场景,但仍可用于快速验证文件内容是否一致。 [root@centos79-68-78 src]# md5sum test 91d1bcd92830c63b1823ab895dee14ddtest 2. sha1sum sha1sum 命令用于计算文件的 SHA-1 哈希值。SHA-1 是另一种哈希算法,它生成的哈希值为 160 位(40 个十六进制字符)。虽然 SHA-1 比 MD5 更安全,但现在也发现了一些安全问题,不过在一些非关键场景下仍可使用。 [root@centos79-68-78 src]# sha1sum test 66b8561390811b6e32533b9e1db4ccef261094d4test 3. sha256sum sha256sum 命令用于计算文件的 SHA-256 哈希值。SHA-256 是 SHA-2 系列算法中的一种,它生成的哈希值为 256 位(64 个十六进制字符)。SHA-256 比 SHA-1 更安全,目前广泛用于安全敏感场景,如软件下载时的完整性验证。 [root@centos79-68-78 src]# sha256sum test 7ac2f1abf0146055e96ec0ea20d12a651d9946f648489265ab6768e655735899test 4. sha512sum sha512sum 命令用于计算文件的 SHA-512 哈希值。SHA-512 同样属于 SHA-2 系列算法,它生成的哈希值为 512 位(128 个十六进制字符),安全性更高,适用于对文件完整性要求极高的场景。 [root@centos79-68-78 src]# sha512sum test 1c2fcd42f22e500b6beac746f17470177d0bbbe85ab43bc5bb807f5286fd3bb021f0e640fc31756087ff42200fb2e384c8b199dcef1931703040247a9b8ad72atest #批量计算哈希值 如果你需要对多个文件计算哈希值,可以直接在命令后面列出多个文件名,或者使用通配符,例如: md5sum*.txt 该命令会计算当前目录下所有 .txt 文件的 MD5 哈希值。 find . -name"*.txt"-exec md5sum {} \;#验证哈希值 有时候你会从官方渠道获取到文件的哈希值,你可以将计算得到的哈希值与官方提供的进行对比,以验证文件的完整性。例如,你已经有一个 example.txt 文件的 MD5 哈希值记录在 example.md5 文件中,你可以使用以下命令验证: md5sum-c example.md5 如果文件内容未被篡改,命令会输出 example.txt: OK;如果文件被修改过,会输出相应的错误信息。
三、文件内容行过滤命令grep
grep命令是 Linux 系统中用于文本搜索的重要工具,它可以在文件或输入流中查找匹配指定模式的行,并将这些行输出。 grep[选项] 模式 [文件]模式:指定要搜索的文本模式,可以是普通字符串,也可以是正则表达式。 [文件]:指定要搜索的文件或文件列表。如果不指定文件,grep会从标准输入读取数据。 #准备文件 cat>> file << END linux Linux LINUX error cat .* dog keyword python warning Warning function test testing END #不带参数 [root@centos79-68-78 src]# grep error file error #常用选项 -i:忽略大小写进行搜索。 例如,grep-i"linux" file会搜索文件file中所有包含linux、Linux、LINUX等不同大小写形式的行。 [root@centos79-68-78 src]# grep -i linux file linux Linux LINUX -v:显示不匹配指定模式的行。 例如,grep-v"error" file.txt会显示file中所有不包含error的行。 [root@centos79-68-78 src]# grep -v error file linux Linux LINUX cat .*dog keyword python warning Warning function test -n:在输出的每行前面显示行号。 例如,grep-n"python" file会在输出包含file的行时,同时显示该行在file中的行号。 [root@centos79-68-78 src]# grep -n python file 9:python -c:只输出匹配的行数,而不显示具体的行内容。 例如,grep-c"warning" file会统计file中包含warning的行数并输出。 [root@centos79-68-78 src]# grep -c warning file 1 -r:递归搜索指定目录及其子目录下的所有文件。 例如,grep-r"function" /usr/local/src会在/usr/local/src目录及其所有子目录的文件中搜索包含function的行。 [root@centos79-68-78 src]# grep -r"function" /usr/local/src Binary file /usr/local/src/test.zip matches /usr/local/src/file:function -w:仅匹配完整的单词。例如,grep-w"test" file 只会匹配 file 里作为完整单词的 test,像 testing 这样的词就不会被匹配。 [root@centos79-68-78 src]# grep -w test file test [root@centos79-68-78 src]# greptest file test testing -o:只输出匹配的部分,而非包含匹配项的整行内容。当你仅对匹配的具体字符串感兴趣,而不关心其所在的完整行时,该参数就十分实用。 [root@centos79-68-78 src]# grep -o test file test test -e:用于指定多个搜索模式,在需要同时搜索多个不同的关键词时非常有用。你可以多次使用-e 选项来指定不同的搜索模式,grep 会匹配包含任意一个指定模式的行。 [root@centos79-68-78 src]# grep -e error -e cat file error cat -A<num>: 显示匹配行及其后面num行。比如grep -A 2 "error" file会显示包含file的行以及其后的两行。 [root@centos79-68-78 src]# grep error file -A2 error cat .*-B<num>: 显示匹配行及其前面num行。例如grep -B 1 "warning" file会显示包含file的行及其前面一行。 [root@centos79-68-78 src]# grep error file -B2 Linux LINUX error -C<num>: 显示匹配行及其前后各num行。若使用grep -C 3 "keyword" file会显示匹配行及其前后各三行的内容。 [root@centos79-68-78 src]# grep error file -C2 Linux LINUX error cat .*-F:将模式视为固定字符串,而非正则表达式。例如grep-F".*" file,会直接搜索字符串.*,而不是将其作为正则表达式处理。 [root@centos79-68-78 src]# grep -F".*" file .*-E: 使用扩展正则表达式。 例如,grep-E"cat|dog" file会搜索file中包含cat或dog的行,这里的|是扩展正则表达式中的逻辑或运算符。 [root@centos79-68-78 src]# grep -E"cat|dog" file cat dog [root@centos79-68-78 src]# egrep "cat|dog" file cat dog
四、文件内容列过滤命令cut
cut 是一个在 Linux 和 Unix 系统中常用的文本处理工具,其主要功能是从文件的每一行中提取指定的字段或字符范围,并将提取的内容输出。 cut[选项][文件]若不指定文件,cut 会从标准输入读取数据。 常用选项 -d:指定分隔符,默认是制表符(\t)。例如,-d':'表示以冒号作为分隔符。 -f:指定要提取的字段。可以是一个数字,表示第几个字段;也可以是一个范围,如2-5表示提取第 2 到第 5 个字段;还可以是逗号分隔的数字列表,如1,3,5表示提取第 1、3、5 个字段。 -c:按字符位置提取。例如,-c 1-3表示提取每行的第 1 到第 3 个字符。 假设有一个名为test.txt的文件,内容如下: cat>> test.txt << END apple,banana,cherry dog,cat,fish red,green,blue END 按字段提取:提取每行的第二个字段,命令为cut-d','-f 2 test.txt,结果为: banana cat green 按字符位置提取:提取每行的前三个字符,命令为cut-c 1-3 test.txt,结果为: app dog red cut命令在一些特定格式的文件内容场景下能发挥出较大作用,比如以下这些场景: 1.文本文件中固定格式数据提取:当文本文件中的数据具有固定的格式,例如以特定字符分隔的字段,像常见的逗号分隔值(CSV)文件、冒号分隔的配置文件等,cut命令可以方便地提取出指定的字段。例如,在一个存储用户信息的 CSV 文件中,每行数据以逗号分隔,包含用户名、年龄、邮箱等字段,使用cut命令可以轻松提取出所有用户的年龄或邮箱信息。 2.命令输出结果处理:在 Linux 系统中,很多命令的输出结果是格式化的文本,cut命令可以对这些输出进行进一步处理,提取出需要的信息。比如,ifconfig命令用于查看网络接口信息,其输出包含了多个字段,通过cut命令可以提取出 IP 地址、子网掩码等特定信息。 3.日志文件分析:日志文件通常包含了大量的信息,每行记录遵循一定的格式。cut命令可以帮助从日志文件中提取出关键的字段,如时间戳、日志级别、错误信息等,以便进行进一步的分析和处理。例如,在系统日志文件中,通过cut命令提取出特定时间范围内的错误日志,有助于快速定位系统问题。