Arch Linux/usr/lib/initcpio/busybox
属于包 mkinitcpio-busybox 1.27.2-1,并且是配置低功能,例如 CONFIG_FEATURE_USE_INITTAB 未设置。
在包含 busybox 的自定义 initramfs 中,我设法获得执行源代码/etc/profile
工作的 ssh 网络登录。还有一个灰shell 提示符在 VGA 显示器上可见。
然而,“vga”外壳并不来源/etc/profile
。问:登录 Shell 和非登录 Shell 之间的区别?让我觉得这个 shell 不是登录 shell。该外壳由以下命令启动/init
:
exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
回归:
exec setsid sh -c 'exec sh -i </dev/tty1 >/dev/tty1 2>&1'
exec setsid sh -c 'exec sh - </dev/tty1 >/dev/tty1 2>&1'
exec setsid sh -c 'exec -sh </dev/tty1 >/dev/tty1 2>&1'
如何使该busybox
ash
shell 成为源代码/etc/profile
和/或使其成为(自动)登录 shell?
答案1
按照惯例,如果使用以 开头的命令名调用 shell,则该 shell 充当登录 shell -
。如果您在路径中exec -sh
调用了一个可执行文件,则可以工作。 -sh
BusyBox ash 也支持该-l
选项,因此您可以运行sh -l
.
当您登录时,login
程序(或sshd
,或任何处理登录的程序)负责运行用户的 shell,并以-
命令名开头(命令名不必与可执行文件的名称相同,这只是一个非常常见的约定,但login
故意违反了)。在这里,“处理登录的任何内容”是您的迷你脚本,因此您必须处理它。