Удобная команда для отображения всех пользователей в системе Ubuntu?

22

Есть ли удобная команда, которую я могу использовать для вывода списка пользователей в консоли в системе Ubuntu?

Когда я cat /etc/passwdполучаю трудно читаемый список пользователей. Было бы неплохо увидеть алфавитный список с записями в столбцах и именами групп в скобках рядом с идентификаторами групп.

М. Дадли
источник
2
ну, / и т.д. / пароль будет организован в столбцы ... если вы хотите увидеть только несколько colums, возможно использовать cut. Для алфавита есть sort. Если вам нужны имена групп, поиграйтесь с объединением (которое может показывать только подмножество столбцов, кстати).
njsg

Ответы:

27

Хороший способ для хорошего вывода файла / etc / passwd:

$ column -nts: /etc/passwd

Теперь вы можете отсортировать это:

$ column -nts: /etc/passwd | sort

С именами групп в последнем столбце (без скобок):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort
Nykakin
источник
Спасибо, эти команды делают то, что я хочу. Для новичка это очень сложно, хотя ... Полагаю, мне придется научиться создавать для них псевдоним.
М. Дадли
На колонке Centos не понравился nвариант. column -ts: /etc/passwdработал нормально.
user1014251
9

Если у вас есть root-доступ на компьютере, вы можете сделать следующее:

sudo grep -vE '^[^*!]+:[*!]:' /etc/shadow | sort | cut -d: -f1 | while read user; do id $user; done | column -ts' ,' | vi '+set nowrap' -

Как это работает

Зарегистрируйтесь как root, чтобы прочитать файл shadow. Вам требуются права суперпользователя только в том случае, если вы хотите проверить, есть ли у пользователя установленный пароль (обычный пользователь), в противном случае вы можете просто cat /etc/passwdвместо sudo grep ...:

sudo 

Показывать только тех пользователей, у которых установлен пароль:

grep -vE '^[^*!]+:[*!]:' /etc/shadow

Сортировать по имени пользователя:

sort 

Откажитесь от всей информации, кроме имени пользователя:

cut -d: -f1

Переберите имена пользователей и обогатите их информацией о группах:

while read user; do id $user; done

Отформатируйте ввод в столбцы:

column -ts' ,'

Используйте vi для просмотра результата:

vi '+set nowrap' - 

Если у вас нет корневого доступа,

попробуйте что-то вроде этого:

cut -d: -f1 /etc/passwd | sort | while read user; do id $user; done | sed 's/\(\()\|^\)[^(]*(\|)\)/ /g' | column -t

Его вывод немного отличается, но я оставляю читателю в качестве упражнения объединить две части в этом ответе в нечто, полностью соответствующее работе. (Разве ты не просто любишь sed?)

jippie
источник
«Я оставляю это как упражнение для читателя ...» :)
Эмануэль Берг
1

В Ubuntu это может быть следующим:

семь полей из / etc / passwd хранятся в $ f1, f2 ..., $ f7

while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
 echo "User $f1 use $f7 shell and stores files in $f6 directory."
done < /etc/passwd
Фатима Зохра
источник
1

То, что я делаю, и это работает для моих целей

ls /home

Конечно, это не дает вам список пользователей, а скорее список домашних каталогов пользователей и прошлых каталогов пользователей, но любая команда, которую вы хотите выполнить для пользователя, которого нет в терминале, сообщит вам и может стать подсказкой для удаления. домашний файл, который не имеет пользователя или переместить его!

Сэм Хэмблин
источник
Мне это нравится. Он выполняет работу на базовом уровне.
aalaap
0

Я думал, что это будет легко join, но joinтребует, чтобы файлы были отсортированы в поле соединения . Так что требуется (?) Обходной путь с временными файлами. Вывод сортируется по пользователю и отображает идентификатор пользователя, группы и группы.

uag () {
  TEMP_GROUPS=/var/tmp/sorted_groups
  TEMP_USERS=/var/tmp/sorted_users
  cat /etc/group  | tr ":" " " | sort -k 3 -o $TEMP_GROUPS
  cat /etc/passwd | tr ":" " " | sort -k 4 -o $TEMP_USERS
  join -1 4 -2 3 -o 1.1,2.1,2.3 $TEMP_USERS $TEMP_GROUPS | sort
  rm $TEMP_GROUPS $TEMP_USERS
}

Перевести персонажа в другого с помощью tr; sortв соответствии с ключевым полем с -k, вывод в файл с -o; объединить в отношении полей в файле first ( -1) и second ( -2), вывести определенные поля в первый файл ( -o 1.1), а также во второй ( ,2.1,2.3).

Эмануэль Берг
источник
обратите внимание, что /tmpбыло бы лучше, потому что FHS заявляет, что /var/tmpне будет стираться при перезагрузках, которые нам на самом деле не нужны.
стружка