回答:
パッケージが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
これにより、or コマンドと問題のユーザーが認識しているすべてのパッケージのpreinst
とpostinst
スクリプトが検索さdpkg
れ、そのユーザーの作成を担当するパッケージが表示されます。結果はsedにパイプされるため、スクリプトファイルのフルネームではなくパッケージ名のみが返されます。adduser
useradd
grep -RlE
再帰的に検索し、一致するファイルの名前のみを出力し、拡張正規表現を使用します'(adduser|useradd).*<user>' /var/lib/dpkg/info --include='*inst'
スクリプトを保存するディレクトリ、名前が末尾で終わるファイル内で、同じ行で検索するadduser
or useradd
コマンドとユーザーを検索します(.*
それらの間の任意の文字に一致し、コマンドオプションをキャッチします)。dpkg
inst
sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'
/
完全なパスの最後と.preinst
or .postinst
拡張子を含む前のすべてを取り除きますfind
ここで使用するよりもすっきりと高速な検索方法を提案してくれた@muruに感謝します:)
grep -Rl 'adduser.*<user>' /var/lib/dpkg/info --include='*inst'
単純化するためにfind -exec grep
。
basename -s
ワイルドカード/正規表現を受け入れるように...)私はそれが接尾辞インスト前と後を切り落とすことができます(私はそうはadduserを持つ任意のPREINSTスクリプト見つけることができませんでしたので、肩をすくめを)
postinst
しているので、使用するものを見つけることはまずありませんpreinst
(しかし、まれなケースが存在する可能性があります)。
通常のadduser
-addedユーザーとグループには重要な例外があります:デフォルトで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
)には、60000〜64999の範囲のUIDを持つ一部のユーザーがリストされており、これらはそれぞれのパッケージによって作成されていると記載されています。
こちらもご覧ください:
base-passwd
14.04 のソースコード - *.master
ファイル内のユーザーとグループのリストを確認できます。
preinst
そのスクリプトにはユーザーを作成するパッケージがいくつかあるため、同様に確認する必要があります。しかし、私はそれを受け入れますので、私はアイデアを得る。