Unix/命令/文件查看指南
cat 将文件内容显示到屏幕上。它还可以显示多个文件cat连接在一起,使用shell,它的标准输出可以从屏幕重定向到文件。
一些有用的选项是
-n line numbering -s squeeze sequences of blank lines into one -v show non-printing characters
示例
$ cat example.txt The contents of the file example.txt are now displayed.
$ cat -n example.txt 1 The contents of the file 2 example.txt are now 3 displayed.
连接多个文件(在本例中,同一个文件两次)
$ cat example.txt example.txt The contents of the file example.txt are now displayed. The contents of the file example.txt are now displayed.
连接文件,但使用shell将结果重定向到一个新文件。
$ cat example.txt example.txt > double.txt
我们也可以连接二进制文件。一些程序将下载限制为 2 GB;这对于较大的文件(如某些 DVD 映像)来说很糟糕。假设一个网站有帮助地将文件“sodalinux.dvd”分成三个部分,每个部分不超过 2 GB,以便下载和稍后连接。我们合并文件,并使用> shell 重定向输出将 DVD 映像放入文件
$ cat sodalinux.dvd1 sodalinux.dvd2 sodalinux.dvd3 > sodalinux.dvd
如果我们想少打字,那么大多数shell也允许这样做
$ cat sodalinux.dvd{1,2,3} > sodalinux.dvd
-v 选项对于查看主要嵌入在文本中的控制字符很有用。在本例中,文件“/usr/share/man/cat1/pax.0”主要是文本,但包含“less”和“more”分页器用来使文本变粗体的控制字符。使用 cat -v 我们可以看到控制字符。以下是前四行
$ cat -v /usr/share/man/cat1/pax.0 | head -4 PAX(1) OpenBSD Reference Manual PAX(1) N^HNA^HAM^HME^HE p^Hpa^Hax^Hx - read and write file archives and copy directory hierarchies
使用没有参数的“cat”使其将标准输入复制到标准输出。结合shell重定向,这使得编写一个非常短的文本文件变得很容易。只需要知道按 Control-D (^D) 表示输入结束,完成文件并返回到shell即可。以下是如何编写“example.txt”
$ cat > example.txt The contents of the file example.txt are now displayed. ^D $
如果将没有参数的“cat”放在管道中,它只将标准输入复制到标准输出。这似乎毫无用处。例如,以下两个管道具有相同的功能
$ dmesg | less $ dmesg | cat | less
但是,“cat”可以用作绝缘体,让程序认为它们没有在终端上运行。在下一个示例中,GNU bc 在启动时不会打印其版权信息。我们输入一个计算(“3 + 9”),然后退出 (^D)
$ bc | cat 3 + 9 12 ^D
链接
tac (cat拼写反过来) 像cat一样工作,但颠倒行顺序(最后一行先写出来)。它似乎不是传统 Unix 的一部分。当给出多个文件时,它们按出现的顺序打印出来。
$ tac foo Third Line Second Line First Line
链接
- 3.2 tac: 反向连接和写入文件 在 GNU Coreutils 手册中,gnu.org
more 对输出进行分页。使用“cat”的问题是,如果文件太长,就会超出屏幕顶部。 “more”的任务是在填满屏幕时停止并等待。大多数用户发现使用“less”更容易,但在某些系统上,“more”具有“less”的所有功能。
键
- 回车 读取下一行
- 空格键 读取下一屏
- q 退出
示例:如果文件足够短,分页器将像“cat”一样工作。
$ more hello.txt Hello World
链接
- more, opengroup.org
less 对输出进行分页。该程序之所以称为“less”,是因为有一个笑话:“less is more”,“less”实际上有几个“more”所没有的功能。
键
- h 读取帮助。你可能会忘记其他命令,但记住这个!
- j 向下移动一行。向下箭头键也可能有效。
- k 向上移动一行。向上箭头键也可能有效。
- d 向下移动半屏。
- u 向上移动半屏。
- f 向前移动一屏。
- b 向后移动一屏。
- p 返回到文件顶部。
- q 退出分页器。
数字参数
- 0 到 9: 输入一个数字。该数字将用作下一个命令的参数 N。
- j 向下移动 N 行。
- k 向上移动 N 行。
- p 跳转到 N% 位置,其中 0% 是第一行,100% 是文件的最后一行。
示例
读取一些文件
$ less example.txt
将“dmesg”管道到“less”中,这样 dmesg 不会滚出屏幕
$ dmesg | less
链接
- less 主页, greenwoodsoftware.com
- less(1) OS X 手册页 在 developer.apple.com 上
- less 手册页, freebsd.org
- GNU less 页面 在 gnu.org 上;没有用户手册
- 维基百科:less (Unix)
通过输出八进制表示、十六进制表示等方式查看二进制文件。另请参见 Od。
示例
以八进制格式查看文件
$ od wordlist.dat 0000000 064506 071562 006564 051412 061545 067157 006544 040412 0000020 070160 062554 005015 072522 061155 062554 005015 061501
以十六进制格式查看文件
$ od -x wordlist.dat 0000000 6946 7372 0d74 530a 6365 6e6f 0d64 410a 0000020 7070 656c 0a0d 7552 626d 656c 0a0d 6341
以字符格式查看文件
$ od -c wordlist.dat 0000000 F i r s t \r \n S e c o n d \r \n A 0000020 p p l e \r \n R u m b l e \r \n
链接
输出文件、文件或标准输入头部(顶部)的 10 行或其他行数。另请参见 tail,输出最后几行。
示例
- head wordlist.dat
- 输出文件的前 10 行。
- head -n 2 wordlist.dat
- 输出文件的前 2 行。
- head -2 wordlist.dat
- 输出文件的前 2 行。一个不再受 POSIX 支持的遗留选项,仍然受 GNU head 支持。
- seq 10 | head -n -2
- 在 GNU head 中,输出除最后 2 行之外的所有输入流,在本例中为 1 ... 10。GNU 扩展,不受 POSIX 支持。
- seq 10 | sed 2q
- 一个避免使用 head 的 sed 替代方案,输出前两行。
链接
- head, opengroup.org
- 5.1 head 在 GNU Coreutils 手册中,gnu.org
- head, freebsd.org
- head (Unix), wikipedia.org
Hexdump 是一个命令行工具,用于以各种方式(包括十六进制)显示文件的原始字节,可在 Linux、FreeBDS、OS X 和其他平台上使用。Hexdump 不是传统 Unix 系统或 GNU 命令的一部分,似乎也不在 POSIX 范围内。类似的工具是 #od(POSIX 涵盖)和 #xxd。
hexdump 使用示例
- hexdump myfile
- 输出文件内容的十六进制表示,没有 ASCII。似乎默认输出 16 位块,块之间用空格分隔,每行 16 个字节。
- hexdump -C myfile
- 输出字节的十六进制表示,每个字节之间用空格分隔,并在右侧列出 ASCII 代码。
- hexdump -v -e '"" 1/1 "%02X" " "' myfile
- 使用大写字母输出字节的十六进制表示,每个字节之间用空格分隔。第一个 "" 指定空前缀,最后一个 " " 指定单个空格后缀。
链接
- hexdump, man7.org - 来自 util-linux
- hexdump 在 freebsd.org
- hexdump, opensource.apple.com
- 十六进制转储, wikipedia.org
输出文件或标准输入的十六进制内容,或根据十六进制转储创建文件。不受 POSIX 涵盖,也不属于 GNU 工具;似乎是 Vim 项目的一部分,与 Vim 一起分发。
示例
- xxd myfile
- 输出十六进制内容,并在右侧列出 ASCII 代码;默认似乎是输出 16 位用空格分隔的块。这些 16 位块似乎不遵循平台的字节序。
- xxd -g 1 myfile
- 同上,但每个字节之间用空格分隔。
- xxd -b myfile.
- 输出二进制内容。
链接
输出文件、文件或标准输入的最后 10 行或其他指定的行数或字节数。它的对应工具是 #head。POSIX 是否允许多个输入文件尚不清楚。
示例
- tail wordlist.dat
- 输出最后 10 行。
- tail -n 2 wordlist.dat
- 输出最后 2 行。
- tail -2 wordlist.dat
- 输出最后 2 行。这是一个传统选项,不再受 POSIX 支持,但仍受 GNU tail 支持。
- printf hello | tail -c 2
- 输出输入的最后两个字节/字符,即 "lo"。
- tail file1.txt file2.txt
- 在 GNU tail 中,处理多个文件,在每个文件的输出前加上标题。
-f 选项显示尾部,然后等待并显示文件中的任何新选项。这通常用于监视日志文件。(下一个示例只有三行来自 tail,但 80 列终端太窄,因此这些行被分成五行。)
$ tail -f /var/log/messages Apr 14 00:05:33 redserver sshd[1575]: Accepted password for rumbear from 24.52.1 45.23 port 33372 ssh2 Apr 14 00:05:34 redserver sshd[1594]: subsystem request for sftp Apr 14 00:06:35 redserver sshd[1594]: Received disconnect from 242.122.35.47: 11 : Disconnect requested by Windows SSH Client.
链接
- tail, opengroup.org
- tail 手册页, man.cat-v.org
- 5.2 tail 在 GNU Coreutils 手册中,gnu.org
- tail, freebsd.org
- tail (Unix), wikipedia.org