Arch Linux/usr/lib/initcpio/busybox
由 mkinitcpio-busybox 1.27.2-1 包拥有,并且配置为低功能,例如 CONFIG_FEATURE_USE_INITTAB 未设置。
在包含该busybox的自定义initramfs中,我设法获得了执行源代码/etc/profile
工作的ssh网络登录。在 VGA 显示器上还可以看到一个灰壳提示。
但是,“vga”外壳不是 source /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?
通常,如果使用以 . 开头的命令名调用 shell,则它充当登录 shell
-
。exec -sh
如果你有一个-sh
在路径中调用的可执行文件,它会起作用。BusyBox ash 也支持该-l
选项,因此您可以运行sh -l
.当您登录时,
login
程序(或sshd
,或任何处理登录的程序)会负责运行用户的 shell,并-
在命令名称中使用前导(命令名称不必与可执行文件的名称相同,这只是一个非常普遍的约定,login
故意违反)。在这里,“处理登录的一切”是你的小脚本,所以你必须照顾它。