Como este comando funciona?

1

Eu vi este comando em um fórum como uma pergunta para registrar:

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

Eu acho que depende do tempo do meu PC que muda a cada segundo, mas a saída ainda é a mesma toda vez que eu tento. Então, alguém pode explicar como esse comando funciona?

    
por Fat Mind 04.05.2014 / 14:36

2 respostas

5

Vamos dividir isso em suas partes constituintes:

A date parte

  • date -u : conforme explicado em man date , a sinalização -u faz com que imprima o Horário universal coordenado

  • +%V : o comando data aceita um argumento de formato que é fornecido após um + . Por exemplo:

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

    Veja man date para obter uma lista de todos os formatos que ele pode produzir. O %V significa:

      

    % V número da semana ISO, com segunda-feira como primeiro dia da semana (01.53)

    Então, essa semana ele retornará:

    $ date +%V
    18
    

    E na próxima semana , ele retornará 19 .

  • $(uname) : isso simplesmente imprimirá o resultado do comando uname , que deve ser Linux em um sistema Linux.

Então, colocando tudo isso junto, o comando date imprimirá WeekNumberLinux :

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

A sha256sum parte

sha256sum simplesmente recebe uma string de entrada e aplica uma função hash a ela. Isso produz uma longa string que é exclusiva para a entrada dada:

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

A sed parte

O comando sed usa o operador susbtitution ( s/pattern/replacment/ ), que substituirá pattern por replacement . Nesse caso, o padrão é \W , que significa "Todos os caracteres não-palavra", significando qualquer coisa que não seja [A-Za-z0-9_] , não uma letra, não um número e não um sublinhado. Isso é usado para remover o espaço à direita e - da saída de sha256sum .

Assim, o comando é uma maneira simples de garantir que você não é um robô. Como o date está imprimindo a semana atual, sua saída será sempre a mesma até a próxima semana, quando será alterada.

    
por terdon 04.05.2014 / 14:48
1
date -u +%V$(uname)|sha256sum|sed 's/\W//g'

Remove todos os caracteres que não são da palavra da saída do comando sha256sum of 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:~$ 

De man date

%V -  ISO week number, with Monday as first day of week (01..53)
-u, --utc, --universal    print or set Coordinated Universal Time
    
por Avinash Raj 04.05.2014 / 14:40