Как я могу перечислить всех пользователей пользователей, которые я создал? Я пробовал cat /etc/passwd, и он просто перечисляет много вещей.
Пользователи имеют UID, начинающиеся с 1000, поэтому вы можете использовать этот факт для фильтрации нечеловеков:
cut -d: -f1,3 /etc/passwd | egrep ':[0-9]{4}$' | cut -d: -f1
Это сокращает первое (имя пользователя) и третье (UID) двоеточие с разделителями поля из /etc/passwd, затем фильтрует результирующие строки, которые заканчиваются двоеточием и четырьмя цифрами, затем вырезает первое (имя пользователя) поле из этого, оставляя вас с списком пользователей с UID между 1000 и 9999.
Если у вас в вашей системе более девяти тысяч пользователей, это не удастся - но необходимо ограничить результат 4-значными UID, чтобы не улавливать nobody (UID 65534).
Это делает практически то, что принимает принятый ответ, только в одной команде вместо трех:
awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd
И благодаря Karel в комментариях пользователь nobody также отфильтровывается. [ ! d2]
Мне лично нравится использовать только:
ls /home
По общему признанию, это не список пользователей, а список домашних каталогов. В настоящее время существующие пользователи в системе будут иметь домашние каталоги в /home, но вы также можете увидеть домашние каталоги прошлых пользователей, которые были удалены.
Это работает для моих целей и может работать для вас также. Например, если вы хотите удалить учетную запись пользователя, которая больше не существует (nonexistent-user) и запустить команду
sudo deluser nonexistent-user
, она просто скажет вам, что этого пользователя не существует .
хотя это может показаться четкая идея, на самом деле существует неоднозначность в понимании пользователя. Это учетная запись Пользователя, намеренно скрытых от экрана входа в систему, потому что он используется только для специальных целей (но человеком) человека-пользователя? Как насчет [ф11] пользователя (uid 999) на альбоме? И гостевая учетная запись в Ubuntu создаются на лету и уничтожены после выхода; они люди? Больше примеров может быть найдено.
, следовательно, это логично, что несколько неэквивалентных ответы уже даны. Решение сейдж Хэмблин бега [ф12] люди пользователя делать, и если вы пишете сценарий, вы должны, вероятно, просто использовать, что.
но, возможно, у вас есть пользователи, которые были удалены, но чьи домашние каталоги все еще существуют в [ф14], и вы должны избегать их перечисление. Или может по каким другим причинам необходимо обеспечить только записи в [ф15], которым соответствуют реальные счета перечислены.
в таком случае, я предлагаю передает имена все в [ф16] в решение Сейдж Хэмблин это!Д3] (для получения [ф18] записи пользователей с такими именами), а затем выделить и отобразить только поле "имя пользователя" (с [зг19], [20 фунтов] или [клавиши f21], в соответствии с вашими предпочтениями). Любой из этих:
[Ф1] [Ф2] [Ф3]это должно работать так, как Вы не должны иметь учетные записи пользователей с пробелом или управляющие символы в их именах; [зг19]; и если вы это сделаете, у вас большие проблемы. Таким образом, обычные проблемы с парсингом [ф22] неприменимы. Но даже если это действительно так вот, если вы считаете команду замены с [ф23] неэстетичных или просто плохая привычка, возможно, Вы предпочтете:
[Ф4] [ф5] [ф6]это не учесть пробелы и управляющие символы либо. Я обеспечиваю их только потому, что [ф24] выглядит не так, даже когда это правильно, и так натирает многие пользователи неправильно. обычные проблемы с парсингом [ф22] не, и в тех ситуациях, разборе [ф26] обычно только чуть меньше плохого. В этой ситуации, однако, в связи с ограничением на то, что символы могут возникать практически в имена, они оба в порядке.
я использую getent в основном потому, что она принимает имя пользователя в качестве аргумента, чтобы запретить его выход, но и потому, что это немного более универсальный, чем изучение [ф28] напрямую, в случае проверки подлинности объектов и пароль базы данных, предоставляются услуги сети.
этот метод имеет дополнительное преимущество над ls /home, что в системах с отдельным [ф30] раздела [ф31] обычно появляется при выходе [f32 из].
с тем более надежный способ представлен выше, lost+found появится только если есть пользователь (человек или нет) под названием lost+found, что маловероятно. Но если вы вводите команду, а не писать сценарий, [ф35] прекрасно-вы знаете, у вас нет пользователя под названием [f36 в].нечасто, этот метод (в любой из указанных выше вариантов) будет производить неудовлетворительный выход:
с более надежный способ представлен выше, lost+found появится только если есть пользователь (человек или нет) под названием lost+found, что маловероятно. если вы создали дополнительные каталоги в [f39 расстройства], что на самом деле не кто-нибудь домашнем каталоге пользователя, и они имеют такое же имя, как существующей не-человека-потребителя ... или состоят из слов, разделенных пробелами, одно или более из которых имеет то же имя, что существующий нечеловеческих пользователей-тогда какая-то негуманоидная пользователи могут быть включены в выходные данные. (Этот метод может быть реализован с помощью цикла и отдельных [ф40] вызовы, так что разбиение не дает ложных вывода. Но сложность не является оправданным; принципиально, если вы используете [ф41] как нечто иное, чем место для домашних каталогов пользователей, этот метод не будет производить надежную продукцию.)если вы решите пойти с методом, который проверяет идентификаторы пользователей, чтобы они в вероятном диапазоне для организаций, представляющих людей, как принято отвечать или [ф20], то я предлагаю это для краткости:
[ф7]это использует принято отвечать (-P), чтобы показать:
[и D40] если вы создали дополнительные каталоги в [f39 расстройства], что на самом деле не кто-нибудь домашнем каталоге пользователя, и они имеют такое же имя, как существующей не-человека-потребителя ... или состоят из слов, разделенных пробелами, одно или более из которых имеет то же имя, что существующий нечеловеческих пользователей-тогда какая-то негуманоидная пользователи могут быть включены в выходные данные. (Этот метод может быть реализован с помощью цикла и отдельных [ф40] вызовы, так что разбиение не дает ложных вывода. Но сложность не является оправданным; принципиально, если вы используете [ф41] как нечто иное, чем место для домашних каталогов пользователей, этот метод не будет производить надежную продукцию.) но если вы вводите команду, а не писать сценарий, [ф35] нормально ... ты знаешь, у тебя нет пользователя под названием [f36 в]. и поля uid, состоящее из 4 цифр (:\d{4}:). [!и D40]это, таким образом, значительно короче и несколько проще вариант техники в принятой ответ. (Метод, описанный там нормально работает, и у него есть преимущество портативный номера – систем GNU/Linux, чей [f55, которая] не поддерживает -P.)
если вы хотите разместить очень высокие жидкостями и проверить nobody ясно, вы можете использовать метод в принято отвечать. Вы, возможно, пожелает учесть, однако если пользователям с очень высокой жидкостями должны действительно быть приняты человеком, или если они более правоподобны для того чтобы быть какой-то другой специальной нечеловеческих пользователей (например, nobody). На практике такие пользователи, помимо nobody--не редкость, поэтому действительно это решение с вашей стороны.
возможный компромисс в списке пользователей в диапазоне от жидкости, которые на самом деле будучи назначен на вновь созданный, не"система" пользователей. Вы можете проверить это в [от f60]:
[ф8]есть два способа, чтобы список пользователей, чьи идентификаторы в диапазоне от 1000 до 29999:
на [F9] [F10]дляПрисоединившись к вечеринке, я наблюдаю за сетевыми системами, использующими LDAP, с домашними каталогами за пределами /home и UID (из-за сбоя сценариев) в миллионах. Поэтому ни один из текущих ответов не работает. Тест, который работает для меня, проверяет, имеет ли пользователь действительную оболочку входа. Действительная оболочка - это та, которая указана в /etc/shells. Простейшая форма:
getent passwd | grep -wFf /etc/shells
Файл может содержать комментарии (или пустые строки), поэтому их необходимо отфильтровать:
getent passwd | grep -wFf <(grep '^/' /etc/shells)
В системах buntu обычные пользователи (например, пользователи пользователей) имеют UID, начинающиеся с 1000, которые последовательно назначаются им, когда их учетные записи сначала создаются. Все это сводится к тому, что первая учетная запись, созданная в системе buntu, имеет UID 1000. Следующий созданный имеет UID 1001. И так далее и т. Д.
Итак, самый простой способ перечисления всех учетных записей пользователей, присутствующих в системе, на мой взгляд, заключается в проверке, является ли третий столбец в файле /etc/passwd, который содержит UID пользователя, больше или равен 1000 и меньше, скажем, 2000 (например, очень маловероятно, чтобы обычный настольный ПК имел более тысячи учетных записей пользователей, не так ли?):
$ awk -F$':' '{ if ($3 >= 1000 && $3 < 2000) print $1; }' /etc/passwd
TL; DR: только пользовательские пользователи имеют SystemAccount = false
. Другой способ - отобразить вывод, игнорируя root ls /var/lib/AccountsService/users/ | grep -v root. Теперь есть quirk-gdm, экран greeter / login (или более формальный менеджер рабочего стола) также отображается как пользователь. Итак, просто из списка мы не можем сказать, является ли gdm человеком или нет.
Более эффективный и правильный подход состоит в том, чтобы проходить через файлы в этой папке и выяснить, какие пользователи указаны как SystemAccount=false. С одной лайнером достигается
grep SystemAccount=false /var/lib/AccountsService/users/* | awk -F '/' '{gsub(":","/");print $6}'