问:使用 cut 命令列出所有用户以确认用户添加成功。
问题:该列表很长,我必须滚动输出才能找到用户。
需要:按用户创建日期排序。显示创建日期不是必需的,而是一个优点。
尝试过:
cut -d : -f 1 /etc/passwd | sort -t
cut -d : -f 1 /etc/passwd | sort -t':' -k2n
cut -d : -f 1 /etc/passwd | ls
答案1
该/etc/passwd
文件没有日期信息,因此在这里没有帮助。
所有非系统用户都应该有一个/home/%username%
目录。您可以尝试访问/home
(使用 shell 循环)下的所有目录,并报告每个目录中最旧的文件或目录。喜欢:
$ for dir in /home/*; do
ls -lart --time-style=long-iso "${dir}" |
grep '^-' | head -n 1 |
awk '{ printf ("%-10s %s\n", $3, $6); }'
done
ls: cannot open directory '/home/lost+found': Permission denied
paul 2017-03-16
1001 2021-03-02
如果您相当幸运,并且没有人使用 回溯文件的日期touch
,那么应该会显示用户的名称(或他们的数字 uid,如果它们已被删除),以及其主目录中最旧文件的日期。
一般来说,解析 的输出是不健康的ls
,但是您需要的字段是相当可预测的。
我的输出顺序看起来很奇怪,因为我有一个目录 /home/viewer (它决定 shell 扩展的顺序),但用户查看器已被删除,并且 uid 为 1001。
我不确定为什么您必须滚动列表才能找到用户,或者为什么按日期排序会让这变得更容易。您可以将输出重定向到文件并使用编辑器进行搜索,或者使用 grep 查找用户名,或者按第二列对输出进行排序。
如果添加用户,证明其有效的传统方法是以该用户身份登录,更改任何默认密码,修复任何本地要求(例如标准提示符或别名),检查一些简单的命令是否有效,以及然后确保新用户在首次登录时设置自己的密码。
答案2
ASK:使用cut命令列出所有用户以确认用户添加成功。
如果您只需要确认添加成功,您可以简单地确认;
$ cut -d: -f1 <(getent passwd user)
问题:列表很长,我必须滚动输出才能找到用户。
只需使用您熟悉的任何工具过滤输出即可,如上所述,getent
也可以进行过滤。
需求:按用户创建日期排序。显示创建日期不是必需的,而是一个优点。
如果您的系统没有密码策略,并且自用户设置以来用户的密码没有更改过,那么您可以使用该chage
命令来获取密码上次更改的日期,这很可能是创建密码时的日期,并且配置按月排序列 2。
cut -d: -f1 <(getent passwd) | while read -r line; do
c_date=$(sudo chage --list "$line" | awk -F: '/Last password change/{print $NF}')
printf '%s\t%s\n' "$line" "$c_date"
done | sort -k4n -k3n -k2M
答案3
cut -d: -f1,3 /etc/passwd | sort -k2n
cut -d: -f1,3 /etc/passwd
提取第一个字段(用户名)和第三个字段(创建日期)sort -k2n
输出通过管道传送到 sort,它根据第二个字段(创建日期)按数字(-n 标志)升序对行进行排序。
该-k2
选项指示sort
使用第二个字段作为排序键。
这将列出按创建日期排序的现有用户,最早创建的用户首先出现。