Answers:
如果通过dpkg
(包括apt install
)安装了软件包,这将相当可靠地工作。有关在默认Ubuntu安装中创建的用户列表以及创建它们的软件包,请参见muru的答案。对于那些用户,此方法将不会产生任何输出。
您可以使用以下命令:
grep -RlE '(adduser|useradd).*systemd' /var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'
用<user>
您感兴趣的用户名替换,例如,systemd
它会搜索preinst
和postinst
脚本众所周知包dpkg
的adduser
或useradd
命令有问题的用户,看看这包是负责创建用户。结果通过管道传递到sed,因此它仅返回包名称本身,而不返回脚本文件的全名。
grep -RlE
递归搜索并仅打印包含匹配项的文件名,使用扩展的正则表达式'(adduser|useradd).*<user>' /var/lib/dpkg/info --include='*inst'
在存储脚本的目录中(名称以结尾的文件中)搜索adduser
或useradd
命令以及要在同一行上查找的用户(.*
将匹配它们之间的任何字符,捕获任何命令选项)dpkg
inst
sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'
删除/
完整路径中的最后一个&之前的所有内容,包括最后一个和.preinst
或.postinst
扩展名感谢@muru建议比使用find
此处更整洁,更快捷的搜索方法:)
grep -Rl 'adduser.*<user>' /var/lib/dpkg/info --include='*inst'
简化find -exec grep
事情。
basename -s
接受通配符/正则表达式...),这样我就可以将它替换为pre和post inst后缀(但是我没有发现任何adduser的preinst脚本如此耸肩))
postinst
,因此您不太可能找到任何有用的东西preinst
(但我想这种情况可能很少见)。
这里通常adduser
添加的用户和组有一个重要的例外:Ubuntu随附的默认用户和组。这些由base-passwd
包装提供。在中提供(并描述了)此程序包添加的用户和组的列表/usr/share/doc/base-passwd/users-and-groups.{html,txt.gz}
。清单是:
root man majordom irc gdm
daemon lp postgres gnats saned
bin mail www-data nobody klog
sys news backup messagebus syslog
sync uucp operator postfix
games proxy list haldaemon
adm fax audio staff sshd
tty voice src users fetchmail
disk cdrom shadow lpadmin cupsys
kmem floppy utmp sasl nogroup
dialout tape video scanner
dip sudo plugdev ssh
程序包README(/usr/share/doc/base-passwd/README
)还列出了一些UID在60000-64999范围内的用户,并指出这些用户名是由相应的程序包创建的。
另请参阅:
base-passwd
14.04 的源代码 -您可以在*.master
文件中查看用户和组的列表。
preinst
因为有一些软件包在该脚本中创建用户。但是我知道了,所以我会接受。