当文件只包含一个 ASCII 字符时,为什么文件会说“没有魔法”?[已结束]

why does file say "no magic" when a file consists of nothing but a single ASCII character? [closed]

提问人:Jacob Wegelin 提问时间:3/13/2023 更新时间:3/13/2023 访问量:321

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

9个月前关闭。

当文件只包含一个空格、换行符或 ASCII 字母时,为什么 file 命令说它“没有魔法”?
使用两个相同字符的 Clobber 文件, 然后文件将其称为 ASCII。

一个非常小的魔法文件会是什么? 为什么要创建它,它的用途是什么?

> /bin/rm junk
> printf ' ' > junk; file junk
junk: very short file (no magic)
> echo  > junk; file junk
junk: very short file (no magic)
> printf 'd' > junk; file junk
junk: very short file (no magic)
> printf 'dd' > junk; file junk
junk: ASCII text, with no line terminators

以下帖子似乎是相关的;它因缺乏细节或清晰度而被关闭:

https://unix.stackexchange.com/questions/393288/explain-please-what-is-a-magic-file-in-unix

但我不是在问什么是魔术或如何制作文件魔术。 我问为什么对一个字节的文件说“没有魔法”,而对一个双字节的文件却没有。file

bash 文件 ASCII

评论

1赞 Elliott Frisch 3/13/2023
文件格式使用一组幻数来指定其内容。这是一个列表。该工具正在寻找那些“神奇”的数字。file
0赞 Gilles Quénot 3/13/2023
“magic”是可以显示命令查找的文件类型的字节。例如,音频文件以filewavRIFF***@**@WAVE
3赞 Jeroen Mostert 3/13/2023
因为它就是这样写的?“魔术”没有正式的定义,但事实上,试图将一个单字节文件归类为任何东西都没有意义。即使是一个双字节的文件也有点可疑,但至少有多个双字节签名,我想消除这些签名可以让你“断定”它是 ASCII。
0赞 Poshi 3/13/2023
...如果尝试对单字节文件进行分类意义不大,为什么要这样做???在这种情况下使用时,您的意图是什么?file
1赞 KamilCuk 3/13/2023
why file says "no magic" for a one-byte file but not for a two-byte file.因为文件的源代码是“如果一个字节,那么没有魔法,否则..”?我不明白你期望得到什么样的答案? 我不理解这些问题。具有魔术的非常小的文件将是一个非常小的文件,具有特定的字节序列。它将用于检测文件格式,具体取决于它是什么“魔力”。What would a very small file with magic be? Why would one create it and what would it be used for?

答:

1赞 KamilCuk 3/13/2023 #1

为什么文件对一个字节的文件说“没有魔法”,而对一个双字节的文件却没有。

因为程序就是为了做到这一点而编写的。file

https://github.com/file/file/blob/c49972ddb4933ee6edc4a2abc7f36f6a42d47300/src/funcs.c#L338

if (nb == 0) {
    def = "empty";
    goto simple;
} else if (nb == 1) {
    def = "very short file (no magic)";
    goto simple;
}