O que significa 'gato passwd | awk -F ':' '{printf $ 1}' 'fazer?

4

O que esse comando faz? Como eu vejo isso no terminal porque eu não tenho nada quando escrevo cat passwd | awk -F':' '{printf }'

    
por alex 11.05.2015 / 23:57

2 respostas

3

cat passwd exibe o conteúdo de um arquivo chamado passwd no diretório atual. O comando awk , em seguida, analisa, divide cada linha com : como o separador de campo e imprime o primeiro campo.

Se você não obtiver nenhuma saída:

  • não há nenhum arquivo chamado passwd no diretório atual
  • existe um arquivo, mas está vazio
  • existe um arquivo, mas os primeiros campos de todas as linhas estão vazios (as linhas começam com : ).

O que o comando supostamente deve fazer é analisar /etc/passwd . Nesse caso, você pode fazer:

awk -F: '{print }' /etc/passwd

Além disso, a menos que você queira restringir o comando a contas locais, use getent passwd em vez de usar o arquivo /etc/passwd :

getent passwd | awk -F: '{print }'
    
por muru 12.05.2015 / 00:07
3

Eu assumo que este é um comando mal formado para extrair todos os nomes de usuário do sistema:

  • cat passwd imprime a saída do arquivo passwd , presumivelmente /etc/passwd .
  • awk -F':' {printf } separa a entrada (dada por cat) usando : como um delimitador e, em seguida, imprime apenas o primeiro token, ou seja, o nome de usuário.

Não funciona porque /etc não está na variável path por padrão, então o caminho teria que ser dado, não apenas o nome do arquivo. Além disso, o resultado não seria analisável corretamente, pois o printf do awk não coloca novas linhas no final, ao contrário de print .

O comando correto da OMI ficaria assim:

cat /etc/passwd | awk -F':' '{print }'
    
por s3lph 12.05.2015 / 00:09