我用软管冲洗了我的登录信息(错误的脚本 /etc/profile.d),但我无法通过 SSH 连接到我的系统或将其启动为单一系统。我将“single”附加到内核启动参数的末尾,它就像正常一样继续启动。我也尝试过“s”,但没有成功。不过,“紧急”确实有效。我正在运行 RHEL 6.3。关于我做错了什么有什么想法吗?
答案1
我怀疑其中的某些内容/root/.bashrc
(或source
该文件中的某些内容)导致 bash 立即退出,从而导致计算机启动到默认运行级别。有关此怀疑的更多详细信息,请参阅下文。
任何内核无法识别的内核参数都会传递给 init。根据启动参数(7):
然后,内核未获取且未解释为环境变量的任何剩余参数都会传递到进程一,该进程通常是 init(1) 程序。传递给 init 进程的最常见参数是“single”一词,它指示它以单用户模式启动计算机,而不是启动所有常用的守护进程。检查系统上安装的 init(1) 版本的手册页,了解它接受哪些参数。
由于 RHEL 6 运行 upstart,您可能需要检查与单用户模式相关的 upstart 配置文件:
- /etc/init/rc.conf
- /etc/init/rcS.conf
- /etc/init/rcS-sulogin.conf
- /etc/init/rcS-emergency.conf
在我本地的 Centos 6.5 系统上,/etc/init/rcS-sulogin.conf
有以下新贵节:
script
. /etc/sysconfig/init
plymouth --hide-splash || true
[ -z "$SINGLE" ] && SINGLE=/sbin/sushell
exec $SINGLE
end script
post-stop script
if [ "$RUNLEVEL" = "S" ]; then
[ -f /etc/inittab ] && runlevel=$(/bin/awk -F ':' '$3 == "initdefault" && $1 !~ "^#" { print $2 }' /etc/inittab)
[ -z "$runlevel" ] && runlevel="3"
exec telinit $runlevel
fi
end script
在由其启动的 shell终止 后,该post-stop
脚本将系统提升到默认运行级别。是一个简单的脚本,它启动 $SUSHELL 或 bash 的值。默认情况下,启动的 bash 是一个交互式、非登录 shell,这意味着它在启动时读取。sushell
/sbin/sushell
~/.bashrc
如果此文件无意中终止了 shell,系统将继续引导到默认运行级别。
Emergency 关键字可能有效,因为它会调用,如果尝试执行 root 用户的 shell 失败,那么/sbin/sulogin
它(根据手册页)就会回退到。/bin/sh
请注意,对于最严重的灾难,您可以告诉内核引导到直接附加init=/bin/sh
.您将被引导至以 root 身份运行的 shell。如果您需要更改文件系统,您还需要更改ro
引导参数,rw
以便安装根设备以进行写入,或者在引导后重新安装设备。
答案2
如果您可以物理访问机器,则相对容易。将恢复 CD 启动到根 shell,然后安装并修复文件上的损坏。完成后,您应该能够毫无问题地重新启动......除非发生了您没有提到的其他事情......:-)