Команда для списка всех имен пользователей на сервере Linux

Я не могу согласиться, что Python более приемлемо в этом случае. Там нет сложных линий манипуляций - просто установите переменные и распечатывают различный набор. Так это обычные операции Bash '. Поэтому нам нужны некоторые расчеты, которые я предпочитаю awk вместо SED (обычная программа манипулирования текстами).

awk -F '' '
          /\/\//{
                 n++
                 t="Name "n" "
                 sub("// {0,"length(t)"}","//"t)
                 print $0 "\n" l1 l2 > "File2"
                 print $0 "\n" l1 > "File3"
                 sub("[^ ]* ","<"t,l1)
                 print l1 > "data.file" 
                 l1=""
                 l2=""
                 next
                 }
          {
                 if (l1=="")
                     l1=$0
                 else l2=l2 "\n" $0
                 }' Input.txt

Но все предпочитают этот инструмент, который он знает лучше.

P.S. Относительно длины входной строки. Если OP Проверьте свои примеры, вы можете увидеть, что «X» выше «E» выше «E»

//         x
>tex_1 abcdefghijklmnopqrstu

, но после ввода имя 1 «X» выше «D»

//Name 1  x
>tex_1 abcdefghijklmnopqrstu

, так что в сценарии Shoul Длина (T) не Lenght (T) -1 . Кроме того, если там не хватает места для ввода имен, скрипт, делают необходимые остатки строки сдвига вправо.

0
01.10.2014, 19:30
4 ответа

Сделайте первую попытку, но удалите | xargs groups. На самом деле, это достаточно элементарно, чтобы не все это соответствовало данному сайту...

2
28.01.2020, 02:52

awk (1 )es otra herramienta útil. awk puede analizar campos individuales de líneas de texto, en función de un delimitador especificado. En el caso de /etc/passwd, ese delimitador son dos puntos, por lo que pasamos ' -F :' en la línea de comandos de awk. Del mismo modo, dado que el nombre de usuario es el primer campo de la línea y awk numera los campos que comienzan en 1, estipulamos 'imprimir $1' para decirle a awk que imprima el primer campo de cada línea.

awk -F: '{ print $1 }' < /etc/passwd

Esto se puede adaptar fácilmente para imprimir cualquier campo del archivo passwd. Aquí hay una lista del nombre de cada usuario (campo 1 ), seguido de un espacio, seguido de su shell de inicio de sesión (campo 7):

awk -F: '{ print $1, $7 }' < /etc/passwd
0
28.01.2020, 02:52

Это будет фильтровать пользователей по тому, у кого есть оболочка:

getent passwd | egrep  '(/bin/bash)|(/bin/zsh)|(/bin/sh)' | cut -f1 -d:
0
14.05.2020, 08:17

Вы запросили список авторизованных пользователей, и указали, что вы имеете в виду, что это будет подмножество списка всех пользователей, но вы не определили, какие критерии вы хотите использовать различать авторизованных пользователей и неавторизованных пользователей.

Системы (Unix и Windows )часто поставляются со стандартными, встроенные пользователи, предопределенные :root, bin, mailи newsв Unix; Administrator, SYSTEM, LOCAL SERVICEи TrustedInstallerв Windows. В Unix «настоящие» пользователи (назначены реальным людям )обычно имеют GID≥500 и домашний каталог в /home. Пользователи системы обычно не соответствуют обоим этим критериям. Таким образом, мы можем перечислить пользователей в /etc/passwd, которые соответствуют этим критериям, с помощью

.
awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}' /etc/passwd

Если getent passwdсоздает пользователей, которых нет в /etc/passwd, вы можете просто подключить их:

getent passwd | awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}'

или объединить их:

getent passwd | sort -u - /etc/passwd | awk -F: '$6 ~ /^\/home/ && $3 >= 500 {print $1}'

Примечание :Этот ответ основан на ответе (, который теперь удален, только 10 КБ )по Чема .

0
22.07.2020, 22:03

Теги

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