如何将 MD5 字符串的输出添加到文件中,例如将 Hello, world! 的 MD5 添加到文件 /home/documents/helloworld.txt
答案1
如果你不想散列尾随新队, 使用:
printf '%s' 'string' | md5sum >outfile
最常见的情况是,计算文件全部内容的哈希值,例如 MD5 和。您可以计算任何字符串的哈希值,但有一个问题:许多生成字符串的方法都会在末尾附加一个换行符。
因此,使用换行符:
$ echo 'Hello, World!' | md5sum
bea8252ff4e80f41719ea13cdf007273 -
$ md5sum <<<'Hello, World!'
bea8252ff4e80f41719ea13cdf007273 -
$ md5sum <<'EOF'
Hello, World!
EOF
bea8252ff4e80f41719ea13cdf007273 -
$ printf '%s\n' 'Hello, World!' | md5sum
bea8252ff4e80f41719ea13cdf007273 -
没有换行符:
$ printf '%s' 'Hello, World!' | md5sum
65a8e27d8879283831b664bd8b7f0ad4 -
$ echo -n 'Hello, World!' | md5sum
65a8e27d8879283831b664bd8b7f0ad4 -
在所有这些方法中,你可以重定向输出,md5sum
例如在>outfile
它旁边写入以写入outfile
而不是您的终端。根据您的目标,任何一种方法都可能是合理的。但是,如果您的目标是计算Hello, World!
(或您的字符串的任何内容)的 MD5 哈希值,而不是Hello, World!
附加换行符,那么您一定不能使用任何附加换行符的方法。
如图所示,echo
没有-n
,这里的字符串,这里的文件,并且printf
带有 会\n
产生换行符,而不printf
带有\n
和echo
则不-n
产生换行符。请注意,如果您的字符串不包含任何%
或\
字符(printf
其第一个参数会特殊处理),您甚至可以这样写:
$ printf 'Hello, World!' | md5sum
65a8e27d8879283831b664bd8b7f0ad4 -
最后,对于交互式使用,还有另一种方法可以做到:
- 运行
md5sum
(或重定向至md5sum >outfile
outfile
)。 - 输入您的字符串。
- 如果你输入的字符串不是以换行符结尾,请按Ctrl+ D。这样会刷新缓冲区,即使你正处于一行的中间,并且缓冲区(可能)未满。
- 按Ctrl+D 再次。这会刷新缓冲区,但缓冲区为空,因此
md5sum
读取零字节。这是“文件结束”情况,因此md5sum
停止读取并给出结果。
在实践中,这比我说的更简单、更快捷。它之所以有效是因为终端对Ctrl+有D特殊处理。(在极少数情况下,如果你想将该字符作为字符串的一部分逐字发送,你可以按Ctrl+ V,然后立即按Ctrl+ D。)
如果您的字符串以换行符结尾,则跳过步骤 3,因为缓冲区已刷新。也就是说,如果您按下的最后一个键是Enter(或者如果您粘贴了文本并且该文本以换行符结尾,因此您位于一行的开头),则只需按一次Ctrl+D而不是两次。
请注意,除了必须实际将字符串输入到终端之外,此方法是完全通用的。您的字符串中可以包含其他换行符。例如,您可以输入md5sum
,然后Enter,然后hello
,然后Enter,然后world
,然后Ctrl+D两次,这将得到与 相同的结果printf 'hello\nworld' | md5sum
。
答案2
回显文本并通过管道传送到 md5sum。将输出重定向到文件:
echo "Hello, World!" | md5sum > "/home/user/documents/helloworld.txt"
编辑:正如@EliahKagan 指出的那样,这包括尾随换行符。请参阅他的很好的答案以寻求更好的解决方案。