我有一个家庭作业:“为每个独特的用户,报告他们所属的群组以及他们上次登录的时间”
到目前为止,我有:
#!/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
我的问题是:我如何展示每个独特的用户?上面的脚本仅显示登录系统的最新用户,但我需要所有唯一用户。
有人可以帮忙吗?
答案 0 :(得分:0)
以下链接提供了一些列出用户的替代方法。它们涉及阅读/etc/passwd
。
http://www.linuxquestions.org/linux/answers/Networking/How_to_list_all_your_USERs
答案 1 :(得分:0)
似乎除了阅读/etc/passwd
之外别无他法,例如:
$ for u in `cat /etc/passwd | cut -d: -f1`; do echo $u `id -Gn $u`; done
答案 2 :(得分:0)
要遍历任何唯一身份用户,您可以获取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
答案 3 :(得分:0)
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