/etc/passwd 中是否允许有注释行

ron*_*ron 3 passwd

我知道,在 RHEL 7.8 中,可以有空行/etc/passwd

但是你能有注释行吗?如果有的话,注释行会以什么开头?

Jde*_*eBP 8

用于处理帐户数据库getpwent()等的 musl C 库例程不允许在/etc/passwd或/etc/shadow文件中进行任何类型的注释。 库代码根本不将任何字符视为注释介绍者。(它也不会将+一行识别为 YP 标志,也根本不允许使用任何特殊标记。)

如果您有任何针对 musl C 库构建的程序,请不要尝试向这些文件添加注释。

然而,GNU C 库和 FreeBSD C 库都允许注释。

更确切地说:

files提供所有 NSS 数据库源的GNU C 库代码(请参阅手册)允许以 a作为第一个非空白字符的nsswitch.conf行注释。#所以不仅仅是/etc/passwd可以/etc/shadow包含评论。

在 BSD 上,该/etc/passwd文件不是帐户数据库。在 BSD 上,帐户数据库不是平面文件数据库,而是 Berkeley DB 文件(实际上是两个/etc/pwd.db和/etc/spwd.db),根据 Berkeley DB 文件的性质,它不允许注释。 /etc/master.passwd由该工具编译到帐户数据库中pwd_mkdb。

/etc/passwdBSD 上的文件是由 发出的虚拟向后兼容文件,pwd_mkdb实际上并不用于 C 库例程的查找,并且仅适用于使用直接awk /etc/passwd等方式使用 shell 脚本的人,而不是更好的getent passwd命令(它包装了 C 库shell 脚本)。

在 FreeBSD 及其衍生产品上,/etc/master.passwd可以包含注释,并且该pwd_mkdb工具通过 from到复制注释/etc/master.passwd/etc/passwd,而不将其放入主 Berkeley DB 文件中。可以#选择在 之前仅添加 TAB 和 SPC 字符,这与 GNU C 库不太一样(它允许使用isspace()GNU C 库例程的进程的语言环境中满足的任何空白字符,这可能是一个非常模糊的“有时是评论有时是秘密超级用户记录错误正在等待发生”)。

相比之下, OpenBSD 和 NetBSD 的pwd_mkdb命令不允许在 dummy 中添加注释/etc/master.passwd,也不会将注释插入到 dummy 中/etc/passwd。

所以在 FreeBSD 上你可以使用#TAB 和 SPC 前面的注释/etc/master.passwd;和#以当前语言环境isspace()字符开头的注释/etc/passwd,/etc/shadow以及基于 Linux 的操作系统上的一大堆其他 NSS 源代码,只要所有(相关)程序都链接到 GNU C 库。