getent passwd 如何显示行号?
时间: 2024-03-30 20:33:16 浏览: 72
可以使用 `getent passwd | cat -n` 命令来显示 `getent passwd` 命令的输出内容的行号。这个命令会将 `getent passwd` 命令的输出通过管道传递给 `cat -n` 命令,然后使用 `cat -n` 命令显示带有行号的输出内容。
另外,如果想要对行号进行格式化,可以使用 `nl` 命令。例如,使用 `getent passwd | nl -n rz` 命令可以将行号格式化为右对齐、使用 0 填充的三位数字。
相关问题
bash: getent: command not found
当你在 Bash shell 环境中尝试运行 `getent` 命令时,收到 "command not found" 错误提示意味着系统找不到这个命令。`getent` 是一种用于从各种数据库(如 hosts、passwd、group 等)检索信息的实用程序,通常在一些基础系统软件包中安装,比如 `coreutils` 或者 `util-linux-ng`。
- 如果你在首次接触 Linux 或者新安装的系统上看到这个错误,检查一下你的系统是否完整安装了基础工具包。你可以通过 `apt-get install coreutils` (Debian/Ubuntu) 或 `yum install util-linux` (CentOS/RHEL) 来安装。
- 如果你已经确认这些包已经安装,那可能是路径设置问题。确保`/usr/bin` 或 `/bin` 目录(取决于你的系统配置)包含在 `$PATH` 变量中,这样 shell 才能找到 `getent`。
- 如果你的终端或 shell 启动时没有加载某些必要的环境变量,也可能会导致此问题。检查 `.bashrc`, `.bash_profile` 或 `.zshrc` 文件中的 PATH 配置。
#!/bin/bash users=$(cut -d: -f1 /etc/passwd) for user in $users do if [[ $(getent passwd $user | cut -d: -f3) -ge 1000 ]] then if [[ $(chage -l $user | grep "Password expires" | grep "密码过期时间" | cut -d: -f2 | tr -d ' ') == "never" || $(chage -l $user | grep "Password expires" | grep "密码过期时间" | cut -d: -f2 | tr -d ' ') == "从不" ]] then echo "$user: Password never expires" else expire_date=$(date -d "$(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ')" +%s) current_date=$(date +%s) if [[ $expire_date -lt $current_date ]] then echo "$(hostname -I | awk '{print $1}'), $user: Password has expired" else echo "$user: Password will expire on $(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ')" fi fi else account_status=$(passwd -S $user | awk '{print $2}') if [[ "$account_status" == "L" ]]; then echo "$(hostname -I | awk '{print $1}'), User $user: account locked!" fi fi done这段代码去掉筛选非系统用户
可以将第二个if语句中的条件改为:
```
if [[ $(getent passwd $user | cut -d: -f3) -ge 1000 && $(getent passwd $user | cut -d: -f7) != "/sbin/nologin" && $(getent passwd $user | cut -d: -f7) != "/usr/sbin/nologin" ]]
```
这样就可以排除掉系统用户了。
阅读全文