跳转至内容

Unix/命令/文件分析指南

来自维基教科书,开放世界中的开放书籍

file 显示文件类型。 要获得 mimetype,请使用 -i 选项。

示例

$ file Unix.txt
Unix.txt: ASCII text
$ file -i Unix.txt
Unix.txt: text/plain; charset=us-ascii

链接

wc 告诉你文件中的行数、单词数和字符数。

示例

$ wc hello.txt
2       6      29 hello.txt
$ wc -l hello.txt
2 hello.txt
$ wc -w hello.txt
6 hello.txt
$ wc -c hello.txt
29 hello.txt

链接

输出文件、文件或标准输入的 32 位循环冗余校验 (CRC) 校验和的特定变体,以及大小;在最新的 GNU Coreutils 和一些其他实现中,它可以通过 -a 选项输出其他校验和。这种 32 位 CRC 的变体不同于 zip、PNG 和 zlib 使用的 CRC-32;一方面,cksum 不仅根据文件或输入的八位字节流计算 CRC,而是根据追加了流长度的流计算 CRC。

cksum 输出的 CRC 可用于防止对文件进行意外修改:如果校验和没有改变,则文件很可能没有损坏。默认的 CRC 校验和不是加密的:它只防范非恶意(有意)的修改。

最新的 GNU Coreutils cksum 允许通过 -a 选项从多种不同的校验和类型中进行选择,包括加密校验和。其中包括 sysv、bsd、crc、md5、sha1、sha224、sha256、sha384、sha512、blake2b 和 sm3。这些校验和都不属于 zip、PNG 和 zlib 的 CRC-32。OpenBSD cksum 也提供 -a 选项,而算法列表略有不同。FreeBSD cksum 允许通过 -o1、-o2 和 -o3 选项选择三种校验和算法之一,除了默认算法之外;-o3 是 zip、PNG 和 zlib 的 CRC-32;这也适用于 macOS。

示例

$ cksum /etc/passwd
3052342160 2119 /etc/passwd

一些“cksum”实现提供其他算法,例如“md5”和“sha1”

$ cksum -a sha1 /etc/passwd
SHA1 (/etc/passwd) = 816d937ca4cdb4dee92d5002610fae63b639d224

你可以通过标准输入将字符串提供给“cksum”来测试它

$ printf 'Guide to UNIX'|cksum
2195826759 13

链接

一个遗留工具,输出文件、文件或标准输入的某种校验和,以及大小。它没有被 POSIX 覆盖;POSIX 将 #cksum 作为替代工具进行了规范,使用的是与遗留 sum 使用的校验和不同的校验和类型。遗留 sum 的不同变体使用不同的算法。FreeBSD cksum 通过 -o1 和 -o2 选项,以及最新的 GNU Coreutils cksum 通过 -a 选项提供遗留 sum 使用的变体算法。

GNU Coreutils sum 允许通过 -r 和 -s 选项选择遗留算法。

两种常用的遗留算法如下所示。

BSD sum,在 GNU sum 中为 -r

  • 将校验和初始化为 0
  • 对于输入流的每个字节
    • 对校验和执行 1 位的 16 位按位右循环移位
    • 将字节添加到校验和,并将结果应用于模 2 ^ 16,从而将其保持在 16 位之内
  • 结果是一个 16 位校验和

System V sum,在 GNU sum 中为 -s

  • checksum0 = 输入流中所有字节的总和模 2 ^ 32
  • checksum1 = checksum0 模 2 ^ 16 + checksum0 / 2 ^ 16;
  • checksum = checksum1 模 2 ^ 16 + checksum1 / 2 ^ 16;
  • 结果是一个 16 位校验和,由最初的 32 位普通字节总和计算得出

链接

输出文件或文件系统状态,包括大小、访问权限、创建和修改时间等。该命令似乎在 POSIX 中不存在;POSIX 只指定了系统调用 stat()。

链接

  • stat, man7.org
  • stat, freebsd.org
  • stat 在 GNU Coreutils 手册中,gnu.org

输出匹配正则表达式、不匹配正则表达式以及类似内容的行,具体取决于选项和使用的正则表达式。 请参见 Grep 维基教科书。

链接

逐行比较两个文件的文件内容,并输出差异。另请参见 diff3

链接

逐行比较三个文件的原始内容并输出差异。另见 diff

链接

逐字节比较文件,输出第一个差异所在的字节数和行号(如果有)。如果文件是二进制完全相同的,则不输出任何内容。除非使用 -l 选项,否则不会显示第一个差异之后的进一步差异。

链接

输出文件中找到的可打印字符串,在这些文件是二进制文件时很有用。

链接

华夏公益教科书