Список только локальных учетных записей пользователей с помощью одной команды

Я использую Ubuntu 18.04, и мне нужно перечислить все учетные записи пользователей на компьютере, но не все учетные записи, только локальные пользователи. команда cut -d: -f1 /etc/passwd дает:

root
daemon
bin
sys
sync
games
...
pulse
avahi
colord
hplip
geoclue
gnome-initial-setup
gdm
esnow
stuartsnow
samsnow

Кто-нибудь знает команду, которая будет выводить только локальных пользователей, например:

root
esnow
stuartsnow
samsnow
3
задан 13 April 2019 в 14:53

1 ответ

Если вы хотите получить список пользователей, которые действительно могут войти в систему, найдите пользователей, для которых оболочка входа в систему (последнее поле в /etc/passwd) не имеет значения /bin/false или /sbin/nologin:

[ 110]

И чтобы получить только имя пользователя:

$ awk -F: '$NF!~/\/false$/ && $NF!~/\/nologin$/{print $1}' /etc/passwd
root
sync
terdon
git
bib
bob

Если вы хотите, чтобы только «обычные» пользователи, те, кто был создан с использованием стандартного подхода и, следовательно, будут иметь домашний каталог в /home , используйте:

$ awk -F: '$6~/\/home/' /etc/passwd
syslog:x:101:104::/home/syslog:/bin/false
terdon:x:1000:1000::/home/terdon:/bin/bash
bib:x:1001:1001::/home/bib:/bin/bash
bob:x:1002:1002::/home/bob:/bin/bash

И, только для имени пользователя:

$ awk -F: '$6~/\/home/{print $1}' /etc/passwd
syslog
terdon
bib
bob

Наконец, вы можете объединить два, чтобы получить всех пользователей с домом в /home и допустимая оболочка входа в систему:

$ awk -F: '$NF!~/\/false$/ && $NF!~/\/nologin$/ && $6~/\/home/{print $1}' /etc/passwd
terdon
bib
bob

В нормальной системе Ubuntu все несистемные пользователи должны иметь ID пользователя от 1000 до 29999 . Итак, предполагая, что вы не создали ни одного пользователя с более низким UID, вы можете сделать:

awk -F: '$3>999 && $3<30000{print $1}' /etc/passwd

И вы можете объединить все снова (некоторые сервисы имеют обычные идентификаторы пользователей, но не имеют оболочки входа, jira на моем рабочем сервере, например):

awk -F: '$3>999 && $3<30000 && $NF!~/\/false$/ && $NF!~/\/nologin$/ && $6~/\/home/{print $1}' /etc/passwd
0
ответ дан 13 April 2019 в 14:53

Другие вопросы по тегам:

Похожие вопросы: