OP сформулював питання, щоб виключити можливість використання команди групи . Оскільки це є частиною coreutils в Linux, або (a) його було видалено, або (b) OP неправильно вводить ім'я.
ОП міг би використовуватись groups
так, наприклад:
for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print $1;}';done
Один із запропонованих відповідей є просто грепом за назву групи в /etc/group
. Іноді це працює за призначенням.
Трохи краще використання grep враховує синтаксис /etc/group
:
group_name:password:GID:user_list
так що лише частина перед першою двокрапкою є дійсною назвою групи. Простий греп, не зважаючи на синтаксис, може (і буде) вибирати з файлу оманливі збіги. Використовуйте регулярні вирази, щоб виконати відповідність грепу саме тому, що потрібно:
grep -E '^users:' /etc/group |sed -e 's/^.*://'
або за допомогою змінної оболонки:
grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
Однак це лише список тих, хто не входить до групи за замовчуванням . Щоб додати їх , потрібно врахувати файл пароля, наприклад, витягнути з нього номер ідентифікатора групи /etc/group
та надрукувавши користувачів, група яких за замовчуванням відповідає /etc/passwd
, наприклад,
grp=$(awk -F: '$1 ~ /^users$/ {print $3; }' </etc/group)
awk -F: '$4 ~ /^'$grp'$/ { print $1; }' </etc/passwd
Ви можете зробити те ж саме, використовуючи лише grep і sed, але це більше роботи, ніж використання awk.
Ще одна запропонована відповідь, запропонована при використанні getent
, яка також, ймовірно, є на машині Linux (з Debian вона є частиною GNU libc). Однак швидка перевірка цього показує, що він забезпечує лише /etc/group
вміст.
У мене (як і в більшості) не встановлено libusers
або lid
встановлено, тому я не можу коментувати, чи відповідає це умовам ОП.
Також є id
програма, яка дає групову інформацію. Хтось може на це розширити як можливу відповідь.
groups
команда. Навряд чи ви цього не маєте на Linux, оскільки він є частиною coreutils.