这个命令如何工作?

这个命令如何工作?

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

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

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

答案1

让我们将其分解成几个组成部分:

那个date部分

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

  • +%V:数据命令采用在 之后给出的格式参数+。例如:

    $ date +%m/%d/%y
    05/04/14
    

    请参阅man date以了解它可以生成的所有格式的列表。这%V意味着:

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

    因此,本周它将回归:

    $ date +%V
    18
    

    下周它会回来的19

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

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

$ date -u +%V$(uname)
18Linux

那个sha256sum部分

sha256sum只需输入字符串并应用哈希函数将其添加到其中。这将生成一个对于给定的输入唯一的长字符串:

$ date -u +%V$(uname) | sha256sum 
9a93b71d5b2841e649195bc81f8e38600860a040bc368cdbd0cde346b73248a1  -

那个sed部分

sed命令使用替换运算符 ( s/pattern/replacment/),它将用 替换patternreplacement在本例中,模式是\W,表示“所有非单词字符”,即任何不是、不是字母、不是数字、不是下划线的字符。这用于从 的输出中[A-Za-z0-9_]删除尾随空格和。-sha256sum


因此,该命令是一种确保您不是机器人的简单方法。由于正在date打印当前周,因此您的输出将始终相同,直到下周才会更改。

答案2

date -u +%V$(uname)|sha256sum|sed 's/\W//g'

sha256sum从命令的输出中删除所有非单词字符date -u +%V$(uname)

avinash@avinash-Lenovo-IdeaPad-Z500:~$ date -u +%V$(uname)
18Linux
avinash@avinash-Lenovo-IdeaPad-Z500:~$ date -u +%V$(uname)|sha256sum
9a93b71d5b2841e649195bc81f8e38600860a040bc368cdbd0cde346b73248a1  -
avinash@avinash-Lenovo-IdeaPad-Z500:~$ date -u +%V$(uname)|sha256sum|sed 's/\W//g'
9a93b71d5b2841e649195bc81f8e38600860a040bc368cdbd0cde346b73248a1
avinash@avinash-Lenovo-IdeaPad-Z500:~$ 

man date

%V -  ISO week number, with Monday as first day of week (01..53)
-u, --utc, --universal    print or set Coordinated Universal Time

相关内容