我知道,在 RHEL 7.8 中,可以有空行/etc/passwd
但是你能有注释行吗?如果有的话,注释行会以什么开头?
答案1
用于处理帐户数据库getpwent()
等的 musl C 库例程不允许在/etc/passwd
或/etc/shadow
文件中进行任何类型的注释。
图书馆代码根本不把任何角色当作评论介绍人。 (它也不会将一行识别+
为 YP 标志,也根本不允许使用任何特殊标记。)
如果你有任何针对 musl C 库构建的程序,请勿尝试向这些文件添加注释。
然而,GNU C 库和 FreeBSD C 库都做允许评论。
更确切地说:
GNU C 库代码提供files
所有 NSS 数据库的源代码(请参阅手册)允许以 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/passwd
BSD 上的文件是由 发出的虚拟向后兼容文件,pwd_mkdb
实际上并不用于 C 库例程的查找,并且仅适用于使用直接awk /etc/passwd
等方式使用 shell 脚本的人,而不是更好的getent passwd
命令(它包装了 C 库shell 脚本)。
在 FreeBSD 及其衍生产品上,/etc/master.passwd
可以包含评论和pwd_mkdb
工具将评论复制到从/etc/master.passwd
到/etc/passwd
,而不将其放入主 Berkeley DB 文件中。可以#
选择在 之前仅添加 TAB 和 SPC 字符,这不是相当与 GNU C 库相同(它允许isspace()
使用 GNU C 库例程的进程的语言环境中满足的任何空白字符,这可能是一个非常晦涩的 it-sometimes-a-comment-sometimes-a-secret-超级用户记录等待发生的错误)。
相比之下, 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 库。
答案2
中只允许用户输入/etc/passwd
,其他任何内容都被视为格式错误,并导致某些依赖于该文件的工具失败。
TLDR:没有
答案3
中的每条记录/etc/passwd
描述一个用户帐户,不支持注释行。
文件格式请参见passwd(5)
( )。man 5 passwd