在图像上使用 cat 后会产生什么?

Qco*_*com 10 binary files cat

假设一个人像这样创建一个文件:

touch myFile
Run Code Online (Sandbox Code Playgroud)

您可以使用 vim 或其他方式在其中输入一些文本,然后使用cat myFile将内容吐出到终端中。

现在,当我在任何图像上使用 cat 时会发生什么?说,

cat myPNG.png
Run Code Online (Sandbox Code Playgroud)

我只是得到一堆垃圾。它只是让我思考cat命令试图做什么,以及所有这些“垃圾”来自哪里。只是好奇。

Law*_*ceC 23

解释文件在最低级别的工作方式可能很有用:

文件是一个字节流,长度为零或更多。一个字节是 8 位。由于 8 位有 256 种组合,这意味着一个字节是 0 到 255 之间的任何数字。 因此,每个文件在最低级别上都是一大堆 0 到 255 之间的数字。

完全由程序和用户决定这些数字的“含义”。如果我们想要存储文本,那么使用数字作为代码可能是一个好主意,其中每个数字都分配了一个字母。这就是 ASCII 和 Unicode 所做的。如果我们想显示文本,那么构建一个设备或编写一个程序来获取这些数字并显示一个看起来像相应的 ASCII/Unicode 代码的位图可能是个好主意。这就是终端和终端仿真器所做的。

当然,对于图形,我们可能希望数字代表像素及其颜色。然后我们需要一个程序来遍历文件,读取所有字节,并相应地呈现图片。终端仿真器期望字节是 ASCII/Unicode 数字,并且对于相同的字节(或文件)块的行为会有所不同。

  • @BOSS 我会加上一点定义。位是二进制数字或可以是 1 或 0 的数字。一位有两种可能,即 2^1=2。两位可以有四种组合或2×2=4。更准确地说,2 位数字是 2²=4。8 个二进制数字或位可以有 2^8=2×2×2×2×2×2×2×2=256 种可能的组合。 (2认同)
  • 小吹毛求疵/迂腐:一个字节的大小是任意的。您可能会遇到它不是 8 位宽的情况。“八位字节”是首选术语。 (2认同)

jug*_*ler 9

Cat 将输入文件的内容转储到标准输出,在本例中是一个文本设备:您的终端窗口。由于图像由二进制数据组成,因此您看到的是原始二进制数据,就像它是 ASCII 文本一样。例如,值为 65 的字节将显示为大写 A,66 为大写 B 等。如果使用能够正确解释图像文件的应用程序打开文件,将显示文件的二进制内容作为图像。

  • @BOSS,不,我相信 gordoco 的意思是说终端是文本设备。`cat` 的最初目的是将文件放在一起,如 `cat filea fileb > filec`,如果你不通过终端传输(如本例所示),那么文件是文本文件还是二进制文件都没有关系。在 unix 世界中,二进制文件和文本文件的存储方式相同,只有文本文件包含一些受限制的字节集。cat 的一个常见用途是将文件内容定向到不将文件名作为参数但接受来自标准输入的输入的命令。 (4认同)