跳转到内容

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

链接

more 对输出进行分页。使用“cat”的问题是,如果文件太长,就会超出屏幕顶部。 “more”的任务是在填满屏幕时停止并等待。大多数用户发现使用“less”更容易,但在某些系统上,“more”具有“less”的所有功能。

  • 回车 读取下一行
  • 空格键 读取下一屏
  • q 退出

示例:如果文件足够短,分页器将像“cat”一样工作。

 $ more hello.txt
 Hello World

链接

less 对输出进行分页。该程序之所以称为“less”,是因为有一个笑话:“less is more”,“less”实际上有几个“more”所没有的功能。

  • h 读取帮助。你可能会忘记其他命令,但记住这个!
  • j 向下移动一行。向下箭头键也可能有效。
  • k 向上移动一行。向上箭头键也可能有效。
  • d 向下移动半屏。
  • u 向上移动半屏。
  • f 向前移动一屏。
  • b 向后移动一屏。
  • p 返回到文件顶部。
  • q 退出分页器。

数字参数

  • 09: 输入一个数字。该数字将用作下一个命令的参数 N。
  • j 向下移动 N 行。
  • k 向上移动 N 行。
  • p 跳转到 N% 位置,其中 0% 是第一行,100% 是文件的最后一行。

示例

读取一些文件

$ less example.txt

将“dmesg”管道到“less”中,这样 dmesg 不会滚出屏幕

$ dmesg | less

链接

通过输出八进制表示、十六进制表示等方式查看二进制文件。另请参见 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 替代方案,输出前两行。

链接

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
    • 使用大写字母输出字节的十六进制表示,每个字节之间用空格分隔。第一个 "" 指定空前缀,最后一个 " " 指定单个空格后缀。

链接

输出文件或标准输入的十六进制内容,或根据十六进制转储创建文件。不受 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.

链接

华夏公益教科书