假设创建一个如下文件:
touch myFile
您可以使用 vim 或其他方式在其中输入一些文本,然后使用cat myFile
将内容吐出到终端中。
现在,当我在任何图像上使用 cat 时会发生什么?说,
cat myPNG.png
我只是得到一堆垃圾。它只是让我思考该cat
命令试图做什么,以及所有这些“垃圾”从何而来。只是好奇。
答案1
解释文件在最低级别如何工作可能会很有用:
文件是长度为零或以上的字节流。一个字节是8位。由于 8 位有 256 种组合,这意味着一个字节是 0 到 255 之间的任何数字。因此,每个文件在最低级别上都是一大堆从 0 到 255 之间的数字。
完全由程序和用户来决定数字的“含义”。如果我们想存储文本,那么使用数字作为代码可能是个好主意,其中每个数字都分配有一个字母。这就是 ASCII 和 Unicode 的作用。如果我们想要显示文本,那么构建一个设备或编写一个程序来获取这些数字并显示类似于相应 ASCII/Unicode 代码的位图可能是个好主意。这就是终端和终端模拟器的作用。
当然,对于图形,我们可能希望用数字来表示像素及其颜色。然后我们需要一个程序来遍历文件,读取所有字节,并相应地渲染图片。终端模拟器期望字节是 ASCII/Unicode 数字,并且对于相同的字节块(或文件),其行为会有所不同。
答案2
Cat 将输入文件的内容转储到标准输出,在本例中是文本设备:终端窗口。由于图像由二进制数据组成,因此您看到的是被解释为 ASCII 文本的原始二进制数据。例如,值为 65 的字节将显示为大写 A,66 为大写 B,等等。如果使用能够正确解释图像文件的应用程序打开该文件,将显示该文件的二进制内容作为图像。