Список всех действительных пользователей в домашнем каталоге - PullRequest
1 голос
/ 28 января 2020

Я нахожусь на AWS экземпляре и мне нужно составить список всех имен пользователей в этом экземпляре. Что-то простое, например:

ls /home > users.txt

будет достаточно, но затем мне нужно go через каждое имя и проверить его номер PID, если у пользователя нет PID число (ie ненулевое возвращаемое значение), затем я хотел бы удалить его из созданного мной текстового файла пользователя.

Я пробовал следующее, но получил много ошибок:

#!/bin/bash

ls /home > users_inc.txt
while read line
do
    id -u $line
    if [$? -e 0]
    then
        echo $line > users.txt
    fi
done < users_inc.txt

Довольно новый для bash сценариев, любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 28 января 2020

Альтернативный метод с использованием awk:

getent passwd|awk 'BEGIN{FS=":"}{if(match($6,"/home/"$1)&&$3>=1000)print$1}'
  • getent passwd: База данных записей потоковых учетных записей

  • awk 'awk script': выполнить Сценарий awk для анализа записей учетных записей

Сценарий awk:

BEGIN{
  FS=":"
}
{
  if (match($6, "/home/"$1) && $3>=1000)
    print $1
}
  • BEGIN{}: блок инициализации Awk выполняется один раз для весь входной поток.

    • FS=":": определите : как F ield S разделитель
  • {}: основной кодовый блок, выполняемый для каждой строки или записи входного потока.

    • if (match($6, "/home/"$1) && $3>=1000): если поле № 6 соответствует пути к домашней директории /home/username (поле № 1) && и поле № 3 UID >= больше или равно 1000 (минимальный UID для обычных учетных записей)

    • print $1: Затем напечатайте имя пользователя из поля № 1.

2 голосов
/ 28 января 2020

Изменен ваш скрипт, исправлены ошибки:

cd /home || { printf '%s\n' "Can't cd to /home" >&2; exit 1; }
for user in *; do
    if id -u "$user" >/dev/null 2>&1; then
        printf '%s\n' "$user"
    fi
done > /path/to/users.txt

Предполагается, что вы имели в виду ID, а не PID.

Связано:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...