Shell Script - каждый уникальный пользователь - PullRequest
3 голосов
/ 10 января 2011

У меня есть домашнее задание: «для каждого уникального пользователя сообщите, в какую группу он входит, и когда он в последний раз вошел в систему» ​​

Пока у меня есть:

#!/bin/sh

echo "Your initial login:"
who | cut -d' ' -f1 | sort | uniq

echo "Now is logged:"
whoami

echo "Group ID:"
id -G $whoami

case $1 in
   "-l") last -Fn 10 | tr -s " " ;;
   *)    last -Fn 10 | tr -s " " | egrep -v '(^reboot)|(^$)|(^wtmp a)|(^ftp)' | cut -d" " -f1,5,7 | sort -uM | uniq -c
esac

У меня вопрос: как я могу показать каждому уникальному пользователю?Приведенный выше сценарий показывает только самых последних пользователей, вошедших в систему, но мне нужны все уникальные пользователи.

Может кто-нибудь помочь?

Ответы [ 4 ]

0 голосов
/ 11 января 2011

Сценарий с использованием last

#!/bin/bash
while read user; do
  echo "User '$user':"
  echo -e "\t Last login: $(last -1R "$user" | awk 'NR==1{if($0 ~ /^$/){print "Never"}else{$1=$2="";print}}')"
  echo -e "\t Groups: $(getent group | awk -F: -v user="$user" '$0 ~ user{a[i++]=$1} END{for(item in a)printf("%s ", a[item])}')"
done < <(getent passwd | awk -F: '{print $1}')

Выход

Имена были изменены, чтобы защитить невинных

User 'foo':
         Last login:  Oct 19 15:07:19 -0700 2010
         Groups: foo groupA groupB
User 'bar':
         Last login:  Nov 16 11:40:23 -0800 2008
         Groups: bar groupA groupC groupD
User 'baz':
         Last login: Never
         Groups: baz groupA groupD
0 голосов
/ 10 января 2011

Кажется, нет другого способа, кроме чтения /etc/passwd, например:

$ for u in `cat /etc/passwd | cut -d: -f1`; do echo $u `id -Gn $u`; done
0 голосов
/ 10 января 2011

Чтобы перебрать любого уникального пользователя, вы можете получить содержимое файла passwd и получить первый токен каждой строки.

Я бы предложил использовать getent passwd для чтения passwd, поскольку/etc/passwd содержит только пользователей из файлов локального компьютера (например, нет пользователей из LDAP или других плагинов PAM).

getent passwd | cut -d':' -f1

Эта команда вернет по одному пользователю в строке.

Затем last и id сообщит вам свой последний логин и группу:

for user in `getent passwd | cut -d':' -f1`
do
    id ...
    last ...
done
0 голосов
/ 10 января 2011

Следующая ссылка имеет несколько альтернативных способов перечисления пользователей.Они включают чтение /etc/passwd.

http://www.linuxquestions.org/linux/answers/Networking/How_to_list_all_your_USERs

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