Я видел эту команду на форуме как вопрос для регистрации:
"date -u +%V$(uname)|sha256sum|sed 's/\W//g'"
Я думаю, что это зависит от времени моего ПК, который изменяется каждую секунду, но вывод является все еще тем же каждым разом, когда я пробую его. Так, кто-то может объяснить, как эта команда работает?
Это совпадает с ^ на большинстве языков, просто XOR.
false ^ false == false
true ^ false == true
false ^ true == true
true ^ true == false
Давайте повредим это в его составные части:
date
частьdate -u
: как объяснено в man date
, -u
флаг заставляет его распечатать Всемирное координированное время
+%V
: команда данных берет аргумент формата, который дан после a +
. Например:
$ 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
управляйте использует susbtitution оператор (s/pattern/replacment/
) который займет место pattern
с replacement
. В этом случае шаблон \W
что означает "Все несловесные символы", означая что-либо, что это не [A-Za-z0-9_]
, не буква, не число и не подчеркивание. Это используется для удаления конечного пробела и -
от вывода sha256sum
.
Так, команда является простым способом удостовериться, что Вы не робот. Начиная с date
печатает текущую неделю, Ваш вывод всегда будет тем же до следующей недели, когда это изменится.
В некоторых из других ответов только говорится, что это - поразрядный XOR, но обратите внимание, что это может также быть логический XOR, если операнды имеют булев тип, согласно этот источник .
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