jsaji Asked: 2018-02-17 06:41:15 +0800 CST2018-02-17 06:41:15 +0800 CST 2018-02-17 06:41:15 +0800 CST md5sum 在校验和前面加上 '\' 772 为什么在查找名称中带有“\”的文件的校验和时,md5sum 在校验和前面添加“\”? $ md5sum /tmp/test\\test \d41d8cd98f00b204e9800998ecf8427e /tmp/test\\test 对于所有其他实用程序,同样如此。 hashsum coreutils 2 个回答 Voted Best Answer Stephen Kitt 2018-02-17T06:45:34+08:002018-02-17T06:45:34+08:00 这是记录在案的,对于 Coreutils' md5sum: 如果文件包含反斜杠或换行符,则该行以反斜杠开头,并且文件名中的每个有问题的字符都使用反斜杠进行转义,即使存在任意文件名,也可以使输出明确。 (file是文件名,而不是文件的内容)。 b2sum, sha1sum, 和各种SHA-2 工具的行为方式与md5sum. 不要sum;仅提供向后兼容性(其祖先不产生引用输出),并且由POSIX 指定并且不允许这种类型的输出。cksumsumcksum 此行为于2015 年 11 月引入,并在 8.25 版(2016 年 1 月)中发布,具有以下NEWS条目: md5sum现在通过在行的开头使用“\”并用“\n”替换任何换行符来确保每个文件在标准输出上的状态只有一行。这也会影响sha1sum、sha224sum、sha256sum和。sha384sumsha512sum 行首的反斜杠用作标志:文件名中的转义仅在行以反斜杠开头时才被处理。(取消转义不能是默认行为:它会破坏旧版本的 Coreutils 包含\\或\n存储的文件名中生成的总和。) TypeIA 2018-02-17T13:38:58+08:002018-02-17T13:38:58+08:00 Stephen Kitt 的回答涵盖了内容,我将尝试说明为何实施此更改。首先,有人观察到包含换行符1的文件名可能会导致输出不明确。例如,考虑这个输出: d41d8cd98f00b204e9800998ecf8427e foo 25af89c92254a806b2e93fffd8ac1814 bar 这是否意味着有两个文件foo和bar,或只有一个文件的文件名是"foo\n25af89c92254a806b2e93fffd8ac1814 bar"?当然,后一种可能性极不可能,但它是可能的。为了解决歧义,开发人员选择使用反斜杠 ( \) 转义换行符。然后输出变得可区分。然而,还有一个更模糊的地方: 764efa883dda1e11db47671c4a3bbd9e foo\nbar 此文件的名称是否包含换行符或反斜杠后跟n? 为了解决这个问题,我们也需要转义反斜杠,以便后一种情况变为: 764efa883dda1e11db47671c4a3bbd9e foo\\nbar 最后,他们选择在包含此类转义的每个输出行前面加上 a ,以便解析器\\轻松检测是否已完成转义。据推测,这样做是为了允许解析器处理来自转义版本和非转义版本(非 GNU)的输出。该标志还意味着在不需要时不需要进行“昂贵的”取消转义。您可以看到此解析本身的示例(链接版本中的第 382 行)。md5summd5sum.c 1换行符是指有时也专门称为换行符或LF的字符;见。\nmd5sum.c
这是记录在案的,对于 Coreutils'
md5sum
:(file是文件名,而不是文件的内容)。
b2sum
,sha1sum
, 和各种SHA-2 工具的行为方式与md5sum
. 不要sum
;仅提供向后兼容性(其祖先不产生引用输出),并且由POSIX 指定并且不允许这种类型的输出。cksum
sum
cksum
此行为于2015 年 11 月引入,并在 8.25 版(2016 年 1 月)中发布,具有以下
NEWS
条目:行首的反斜杠用作标志:文件名中的转义仅在行以反斜杠开头时才被处理。(取消转义不能是默认行为:它会破坏旧版本的 Coreutils 包含
\\
或\n
存储的文件名中生成的总和。)Stephen Kitt 的回答涵盖了内容,我将尝试说明为何实施此更改。首先,有人观察到包含换行符1的文件名可能会导致输出不明确。例如,考虑这个输出:
这是否意味着有两个文件
foo
和bar
,或只有一个文件的文件名是"foo\n25af89c92254a806b2e93fffd8ac1814 bar"
?当然,后一种可能性极不可能,但它是可能的。为了解决歧义,开发人员选择使用反斜杠 (\
) 转义换行符。然后输出变得可区分。然而,还有一个更模糊的地方:此文件的名称是否包含换行符或反斜杠后跟
n
? 为了解决这个问题,我们也需要转义反斜杠,以便后一种情况变为:最后,他们选择在包含此类转义的每个输出行前面加上 a ,以便解析器
\\
轻松检测是否已完成转义。据推测,这样做是为了允许解析器处理来自转义版本和非转义版本(非 GNU)的输出。该标志还意味着在不需要时不需要进行“昂贵的”取消转义。您可以看到此解析本身的示例(链接版本中的第 382 行)。md5sum
md5sum.c
1换行符是指有时也专门称为换行符或LF的字符;见。
\n
md5sum.c