我的目标是了解为什么 Buildroot 在我的group
文件中生成看起来奇怪的输出,并确定这是否会造成问题。如果确实存在问题,我想找出原因并找到解决方案。
我正在使用 Buildroot 创建 Linux 映像,并BR2_ROOTFS_USERS_TABLES
在如下所示的表中创建其他用户:
#username uid group gid password home shell groups comment
cow 1022 four_legs 155 fake /home/cow /bin/bash -
duck 1023 wings 156 fake /home/duck /bin/bash -
goose 1024 wings 156 fake /home/goose /bin/bash -
pig 1025 four_legs 155 fake /home/pig /bin/bash -
horse 1026 four_legs 155 fake /home/horse /bin/bash -
chicken 1027 wings 156 fake /home/chicken /bin/bash -
fish 1028 fins 157 fake /home/fish /bin/bash -
我的字段是按空格分隔的,按照文档。
我最终遇到了一些我想理解但不明白的奇怪现象。我的group
文件如下所示:
/etc # cat group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
kmem:x:9:
wheel:x:10:root
cdrom:x:11:
dialout:x:18:
floppy:x:19:
video:x:28:
audio:x:29:
tape:x:32:
www-data:x:33:
operator:x:37:
utmp:x:43:
plugdev:x:46:
staff:x:50:
lock:x:54:
netdev:x:82:
users:x:100:
nobody:x:65534:four_legs:x:155:
four_legs:x:155:
wings:x:156:
fins:x:157:
sshd:x:1000:
:x:1001:cow,duck,goose,pig,horse,chicken,fish
1:在带有 的行上nobody
,它添加four_legs
不带换行符的组,然后在下一行中重复该组。我不明白为什么它会这样生成。这是否会导致问题出现four_legs
在没有人的同一行上,然后在下一行上重复出现?
2:在最后一行,它创建了一个看似未命名的组,具有新的 GID,成员是我从表中添加的所有用户。我需要最后一行吗?如果是的话,它是做什么用的?我是否输入了错误的内容,使其给我一个奇怪的组文件?
一个完整的干净构建似乎并没有改变这一点,而且passwd
看起来shadow
就像我所期望的那样。此外,用户表中条目的顺序似乎没有影响。在那里定义的第一个新组会在线重复nobody
。
最后注意:如果我在注释字段中添加注释,Buildroot 就会变得混乱,并将上述文件的大部分转储到passwd
.
答案1
好吧,这完全是我的错,而且是三件事的结合:
我在电子表格中构建了用户表,并将结果粘贴到文本编辑器中,它看起来足够好,但是在 Excel 中,以一些特定字符开头的字段必须通过单引号转义,
'
我将其转义。用于以=
或开头的字段/
。粘贴时,这引入了额外的空格,结果证明这是一个问题。很容易修复。nobody:x:65534:four_legs:x:155:
如果您只需确保要附加到的源文件末尾有一个换行符,那么问题就完全消失了。不知道为什么它会重复输入而不是直接将其保留在行中nobody
,但是好吧,好吧。确保使用 LF 行结尾而不是 CRLF。现在,如果有 LF 行结尾,它似乎对我的其他问题更加宽容。评论字段也能正常工作。 :-)