Я использую 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
Если вы хотите получить список пользователей, которые действительно могут войти в систему, найдите пользователей, для которых оболочка входа в систему (последнее поле в /etc/passwd
) не имеет значения /bin/false
или /sbin/nologin
:
И чтобы получить только имя пользователя:
$ 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