尝试显示以下文件时
etc / passwd的
有没有办法只显示会登录并拥有主目录的常规用户,而不是所有这些似乎属于系统进程的伪用户。
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mike:x:1000:1000:mike,,,:/home/mike:/bin/bash <-- THIS ONE HAS A HOME DIRECTORY
由于
艾登
答案 0 :(得分:1)
好吧,您可以要求/home
中包含主目录的所有帐户:
awk -F: '$6 ~ /\/home/ {print}' /etc/passwd
某些系统会将系统帐户保留在特定用户ID之下,因此您可以要求UID高于某个限制的所有帐户:
awk -F: '$3 >= 1000 {print}' /etc/passwd
答案 1 :(得分:0)
我认为没有任何可靠的方法可以做到这一点。
普通用户的帐户通常有大于或等于1000的uid,但这只是一个约定。我已经看到很多不符合该惯例的系统,以及许多违反它的帐户,即使在试图遵循它的系统上也是如此。 nobody
系统帐户通常有一个像65534这样的uid。
同样,用户帐户通常会在/home
下删除目录,但在两个方向都违反了该约定。
UNIX和类UNIX系统在用户和系统帐户(root
除外)之间没有明确的区别。
您可以做的最好的事情是仔细检查您感兴趣的系统上的/etc/passwd
文件 ,和/或与负责在该系统上创建帐户的人员交谈并尝试推导出一些临时规则 - 如果明天创建的新帐户违反这些规则,也不要感到惊讶。为了测试目的,创建了一个故意像用户帐户一样的非用户帐户。
您可以考虑重新制定要求。究竟你想解决什么问题?
还有一件事:帐户信息并不总是存储在/etc/passwd
中。有些系统使用其他机制,如NIS或LDAP。 getent passwd
命令(如果你的系统有它)应该允许这样做。