我在论坛上看到这个命令作为注册问题:
"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/
),它将用 替换pattern
。replacement
在本例中,模式是\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