Відповіді:
Це буде працювати надійно, якщо пакет був встановлений через dpkg(включаючи apt install). Дивіться відповідь muru щодо списку користувачів, створених у встановленні Ubuntu за замовчуванням, та пакету, який їх створює. Для цих користувачів цей метод не дасть жодного результату.
Ви можете використовувати команду:
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'шукайте команду adduseror або useraddкористувача, якого ви хочете знайти в одному рядку ( .*відповідатиме будь-яким символам між ними, вловлює будь-які параметри команди) у каталозі, де dpkgзберігаються скрипти, у файлах, імена яких закінчуються наinstsed -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прийняти подстановочні символи / регекс ...), щоб я міг змусити його відрізати суфікси попереднього і після інстастування (але я не знайшов жодних сценаріїв преінстінду з аддусером, тому знизайте плечима )
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, оскільки в цьому сценарії є деякі пакети, що створюють користувачів. Але я отримую ідею, тому прийму її.