Answers:
/ 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
n
选项不受欢迎。 column -ts: /etc/passwd
工作正常。
如果您具有计算机的超级用户访问权限,则可以执行以下操作:
sudo grep -vE '^[^*!]+:[*!]:' /etc/shadow | sort | cut -d: -f1 | while read user; do id $user; done | column -ts' ,' | vi '+set nowrap' -
成为root用户以读取影子文件。仅当您要检查用户是否设置了密码(人工用户)时才需要root特权,否则,您可以执行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
吗?)
在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
我所做的并且对我有用的事情是
ls /home
当然,这实际上并没有给您用户列表,而是用户的主目录列表和过去的用户目录列表,但是您想对不存在终端的用户执行的任何命令都会告诉您,并且可能会提示删除没有用户或移动它的主文件!
我以为这很容易join
,但是join
需要在连接字段上对文件进行排序。因此,它需要(?)解决临时文件的方法。输出按用户排序,并显示用户,组和组ID。
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
; 结合第一个(-1
)和第二个(-2
)文件中的字段,输出第一个文件(-o 1.1
)和第二个()中的某些字段,2.1,2.3
。
/tmp
这样做会更好,因为FHS指出/var/tmp
在重启时不会擦除,而这并不是我们真正需要的。
cut
。对于字母,则有sort
。如果需要组名,请使用join(实际上可能只显示列的子集,btw)。