Isso funcionará de forma razoavelmente confiável se o pacote foi instalado via dpkg
(incluindo apt install
). Veja resposta do muru para uma lista de usuários criados na instalação padrão do Ubuntu e o pacote que os cria. Para esses usuários, esse método não produzirá nenhuma saída.
Você pode usar o comando:
grep -RlE '(adduser|useradd).*systemd' /var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-a-z]+inst::'
substitua <user>
pelo nome do usuário em que você está interessado, por exemplo, systemd
Isso pesquisa os scripts preinst
e postinst
de todos os pacotes conhecidos como dpkg
para o comando adduser
ou useradd
e o usuário em questão, para ver qual pacote é responsável por criar esse usuário. O resultado é canalizado para sed, retornando apenas o nome do pacote em vez do nome completo do arquivo de script.
Explicação
-
grep -RlE
pesquisa recursivamente e imprime apenas os nomes dos arquivos que contêm correspondências, use expressões regulares estendidas -
'(adduser|useradd).*<user>' /var/lib/dpkg/info --include='*inst'
procura o comandoadduser
ouuseradd
e o usuário que você deseja encontrar na mesma linha (.*
corresponderá a qualquer caractere entre eles, capturando qualquer opção de comando) no diretório em quedpkg
armazena scripts , em arquivos cujos nomes terminam cominst
-
sed -r 's:.*/(.*)\.[-a-z]+inst::'
tira tudo antes de & amp; incluindo o último/
no caminho completo e a.preinst
ou.postinst
extensão
Obrigado ao @muru por sugerir uma maneira mais simples e rápida de pesquisar do que usar find
aqui:)