Se você tem acesso root, é tão simples quanto:
sudo -u \#${pid} whoami
O que eu preciso é algo como:
$ who-has-uid 1000
cyrus
Eu sei que o arquivo /etc/passwd
contém tais informações, não estou pedindo um script que o analise.
Você pode tentar getent ( página man getent ):
$ getent passwd 1005
shufler:x:1005:119:shufler,,,:/home/local/shufler:/bin/bash
Você pode analisar apenas o nome de usuário com sed.
$ who-has-uid() { perl -e 'print +(getpwuid('$1'))[0], "\n"'; }
$ who-has-uid 0
root
$ who-has-uid 1
daemon
Observe que isso funcionará (supondo que o Perl esteja configurado corretamente), mesmo se as informações vierem de algum lugar diferente do arquivo /etc/passwd
.
Não há verificação de erros real; who-has-uid 999
imprime uma linha vazia se não houver tal UID no sistema.
Se você não insistir em uma linha única, poderá colocar isso em algum lugar no seu $PATH
:
#!/usr/bin/perl
use strict;
use warnings;
my $ok = 1;
foreach my $uid (@ARGV) {
my @pw = getpwuid $uid;
if (@pw) {
print "$pw[0]\n";
}
else {
warn "$uid: No such user\n";
$ok = 0;
}
}
exit 1 if not $ok;
Use o awk (geralmente instalado GNU awk, gawk) Diga-lhe para usar dois pontos como um delimitador, veja se o campo 3 (o UID) é 1000, então imprima o primeiro campo (username)
gawk -F: '$3 == 1000{print $1}' < /etc/passwd
Isto é, se a informação estiver em / etc / passwd, se você tiver informações de login de rede (por exemplo, no NIS ou no LDAP), o getent funciona melhor
getent passwd | gawk -F: '$3 == 1000{print $1}'
Você faz precisa de aspas simples: se você usar aspas duplas, o bash tentará descobrir o que significa $ 1 para o shell, e não passá-lo para o gawk.
Tags debian linux user-accounts