使用 cut 命令列出按创建日期排序的现有用户

使用 cut 命令列出按创建日期排序的现有用户

问:使用 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使用第二个字段作为排序键。

这将列出按创建日期排序的现有用户,最早创建的用户首先出现。

相关内容