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 -RlEpesquisa 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 comandoadduserouuseradde 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 quedpkgarmazena 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.preinstou.postinstextensão
Obrigado ao @muru por sugerir uma maneira mais simples e rápida de pesquisar do que usar find aqui:)