这个命令是如何工作的?

Fat*_*ind 0 command-line sed

我在论坛上看到这个命令作为注册问题:

"date -u +%V$(uname)|sha256sum|sed 's/\W//g'"
Run Code Online (Sandbox Code Playgroud)

我认为这取决于我的 PC 的时间,它每秒都在变化,但每次尝试时输出仍然相同。那么,有人可以解释一下这个命令是如何工作的吗?

ter*_*don 5

让我们把它分解成它的组成部分:

date部分

  • date -u:如 中所述man date,该-u标志使其打印协调世界时

  • +%V: data 命令采用格式参数,该参数在+. 例如:

    $ date +%m/%d/%y
    05/04/14
    
    Run Code Online (Sandbox Code Playgroud)

    查看man date它可以生成的所有格式的列表。该%V方式:

    %V ISO 周数,星期一作为一周的第一天 (01..53)

    所以,本周它将返回:

    $ date +%V
    18
    
    Run Code Online (Sandbox Code Playgroud)

    下周将返回19

  • $(uname):这将简单地打印uname应该Linux在 Linux 系统上的命令的结果。

因此,将所有这些放在一起,该date命令将打印WeekNumberLinux

$ date -u +%V$(uname)
18Linux
Run Code Online (Sandbox Code Playgroud)

sha256sum部分

sha256sum简单地接受一个输入字符串并对其应用哈希函数。这会产生一个长字符串,对于给定的输入是唯一的:

$ date -u +%V$(uname) | sha256sum 
9a93b71d5b2841e649195bc81f8e38600860a040bc368cdbd0cde346b73248a1  -
Run Code Online (Sandbox Code Playgroud)

sed部分

该命令sed使用替换运算符 ( s/pattern/replacment/),它将替换patternreplacement。在这种情况下,模式是\Wwhich 意思是“所有非单词字符”,意思是任何不是[A-Za-z0-9_],不是字母,不是数字,也不是下划线。这用于删除尾随空格并-sha256sum.


因此,该命令是一种确保您不是机器人的简单方法。由于date正在打印本周,您的输出将始终相同,直到下周它会发生变化。