过滤/etc/passwd,只显示常规用户



显示以下文件

等/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 

感谢

艾登

嗯,你可以询问所有在/home中有主目录的帐户:

awk -F: '$6 ~ //home/ {print}' /etc/passwd

一些系统将系统帐户保持在特定用户id以下,因此您可以请求uid高于某个限制的所有帐户:

awk -F: '$3 >= 1000 {print}' /etc/passwd

我认为没有什么可靠的方法可以做到这一点。

普通用户的帐户通常具有大于或等于1000的uid,但这只是一种惯例。我见过很多不遵循这种惯例的系统,也见过很多违反惯例的账户,甚至在试图遵循惯例的系统上。nobody系统帐户的uid一般为65534。

类似地,用户帐户通常进入/home下的目录,但在两个方向上都存在违反该约定的情况。

UNIX和类UNIX系统对用户帐户和系统帐户没有明确的区别(root除外)。

您能做的最好的事情是仔细检查您感兴趣的系统上的/etc/passwd文件,和/或与负责在该系统上创建帐户的人交谈,并尝试推导出一些特别的规则——如果明天创建的新帐户违反了这些规则,不要感到惊讶。为了测试的目的,创建一个非用户帐户,故意充当用户帐户。

你可以考虑重新表述你的需求。你到底想解决什么问题?

还有一点:帐户信息并不总是存储在/etc/passwd中。有些系统使用其他机制,如NIS或LDAP。getent passwd命令(如果您的系统有)应该允许这样做。

最新更新