我是 Ubuntu 新手。
如果在 shell 中我这样做:
touch file
它会在当前目录中创建一个文件,如果我打开这个文件,它会显示为一个空白文本文件。此外,我还可以这样做
echo "test" > file
cat file
我得到的是一个字符串。
那么空文件等于文本文件吗?
答案1
它在当前目录中创建一个文件,如果我打开该文件,它会显示为一个空白文本文件。
如果你运行touch non_existing_filename
,它将创建一个空文件。该文件是空的,不包含任何内容。这并不意味着它是一个文本文件或任何其他类型的文件。
如果您运行touch existing_file
,touch 将更新文件上的时间戳。
echo "test" > file
cat file
我得到的是一个字符串。那么空文件等于文本文件吗?
是的,如果你将字符串写入一个空文件,当你读取文件内容时,你将得到一个字符串。请注意,>
覆盖全部文件中的内容,如果文件为空、不存在或其他文件(如图像),结果将相同。您可以使用>>
将文本附加到文件。
>>
请注意,重定向(>
等)等工具并不关心文件类型。将文本字符串附加到包含(例如)JPEG 图像的文件是完全有效的操作。对于cat
某些图像文件,这也是完全有效的操作。我不建议您尝试;它不会在您的终端上正确显示。
文件系统没有文件类型的概念。它不关心文件的内容 - 并且在文件系统级别上,不同文件类型之间没有区别。
传统上,Unix 对文件类型的依赖程度远低于 Windows,因此将文本文件命名为 是完全合理的,而在 Windows 上,将文本文件的README
扩展名改为 是很常见的。.txt
如果你想知道你手上有什么类型的文件,这个实用程序file
相当有用:
$ file auth.log
auth.log: ASCII text
$ file Dokken.mp4
Dokken.mp4: ISO Media, MP4 Base Media v1 [IS0 14496-12:2003]
file
根据每个文件的共同特征描述来决定内容类型,通常称为文件签名。例如,debian 总是以字节开头21 3C 61 72 63 68 3E
,如果我们在文件开头看到这些字节,则我们手中可能有一个 debian 包。
该file
实用程序使用所谓的魔法文件来决定它正在查看的文件类型。有关此内容的更多信息,请参阅 magic 的手册页(例如man magic
在 Linux 系统上)。
请注意file
,并非万无一失,只是一个很好的指标。如果我创建一个包含字节的文件ed ab ee db 0d 25
,文件会将其标识为/tmp/foobar: RPM v13.37 bin
。ed ab ee db
是 RPM 文件所需的标头,0d 25
十六进制为 1337... 无论如何,此文件都不是有效的 RPM 包。
答案2
如果您对不存在的文件使用 touch,它将为您创建一个空文件。如果您对现有文件使用它,它将更新访问时间等。使用 file 命令检查文件的类型。可以有空二进制文件。
对于这些文件,file
实用程序返回以下内容:
$ touch new
$ file new
new: empty
但对于包含一些文本的文件,它将返回“ASCII 文本”
$ echo "text" > text
$ file text
text: ASCII text
但是一些图形应用程序(例如 Pluma 或 Gedit)会将这两个文件都以文本形式打开。
答案3
答案4
总结:不。文本文件不能为空,否则会被检测为空。当然,它可以为空。
touch
设置文件时间戳,如果文件不存在则创建文件。那么,空文件是什么类型的文件呢?
$ ls -l test
-rw-r--r-- 1 user users 0 1. Jän 18:36 test
$ file test
test: empty
该file
实用程序将其视为单独的文件类型。这是因为空文件可以是任何对许多应用程序有意义的东西:它可以是空的纯文本文件、空的 CSV 表、空的原始数据流(它不能是 GZ、JPEG 等类型的空文件,因为这些文件没有 0 字节,即使应用程序将它们视为空,因为它们都包含标题和其他内容)。因此,类型不能更好地定义为空的。