Como posso descobrir, em um script de shell, se um determinado nome de usuário existe no sistema atual?
/etc/passwd
e /etc/shadow
estão incompletos. Considere os serviços de diretório do OS X ou Linux com a integração do mesmo diretório ativo.
Uma das ferramentas mais básicas a serem usadas para isso é provavelmente id
.
#!/bin/bash
if id "$1" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
O que produz
$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
if id -u "$1" >/dev/null 2>&1; then
...if
com verificador de resultados negativos?id -u $1 1>/dev/null 2>&1; echo $?
pode ser usado para tubogetent
Este comando foi projetado para reunir entradas para os bancos de dados que podem ser apoiados por arquivos / etc e vários serviços remotos como LDAP, AD, NIS / Páginas Amarelas, DNS e afins.
Para descobrir se um nome de usuário é conhecido por um dos serviços de nomeação de senha, basta executar:
Isso funciona também com grupos, hosts e outros, dependendo do sistema operacional e da implementação.
fonte
getent
, não hágetent
no Mac OS Xfinger
Analise a saída de
finger -m <username>
. Nenhum código de erro se nenhum usuário foi encontrado, infelizmente, mas se não for encontrado, a saída do erro será gravada. Sem inconvenientes até agora.Irá imprimir
0
se o usuário for encontrado (porque não há saída de erro), números maiores caso contrário.chown
Execute (como qualquer usuário, surpreendentemente):
Se falhar
root
, o nome da conta é inválido.Se falhar como não
root
usuário, analise a saída possivelmente localizada para Operação não permitida ou usuário inválido (ou equivalente). Defina comLANG
antecedência para fazer isso de forma confiável.fonte
Eu diria que você gostaria de confiar em algo
/etc/passwd
semelhante (por exemplo,/etc/shadow
para sistemas baseados em Shadow; em uma observação secundária, alguns sistemas similares podem usar/etc/master.passwd
ou outros arquivos desse tipo).A
/etc/passwd
é tipicamente tratada como a decisão de autoridade absoluto sobre se um utilizador existe ou não. Se você usar qualquer um dos outros métodos descritos nesta página, e se esses outros métodos apontarem para um usuário existente, mas/etc/passwd
não existirem, então eu diria que o usuário não existe corretamente no sistema, por definição do padrão mais comum que o software provavelmente confiaria.Dito isto, jogarei de outra maneira para adicionar à mistura de algumas outras opções que poderiam ser usadas.
ls -l /home | grep ^customUserName$<BR> echo $?
Substitua claramente "customuserName" pelo nome do usuário que você deseja verificar. Substitua / home por / users se é isso que o seu sistema usa. Isso pode não encontrar todos os usuários em / etc / passwd se nenhum diretório inicial foi criado para o usuário específico, o que poderia ocorrer se você simplesmente importasse usuários (ou seja, linhas de texto em / etc / passwd) e se os diretórios pessoais não feito a menos que / até que uma pessoa faça login.
fonte
id
ougetent
não "adequadamente" no sistema, especialmente quando o OP está declarando claramente que os serviços de nomes são Para ser considerado.