내 로그인 정보(잘못된 스크립트 /etc/profile.d)를 압축했지만 내 시스템에 SSH로 연결할 수 없거나 단일 시스템으로 부팅할 수 없습니다. 커널 부팅 매개변수 끝에 "single"을 추가했는데 정상적으로 부팅이 계속되었습니다. 나는 또한 성공하지 못한 채 "s"를 시도했습니다. 하지만 "긴급"은 작동합니다. 저는 RHEL 6.3을 실행하고 있습니다. 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?
답변1
/root/.bashrc
그 안에 있는 어떤 것 (또는 source
그 파일의 어떤 것)으로 인해 bash가 즉시 종료되어 컴퓨터가 기본 실행 수준으로 부팅되는 것으로 의심됩니다 . 이 의혹에 대한 자세한 내용은 아래를 참조하세요.
커널이 인식하지 못하는 모든 커널 매개변수는 init에 전달됩니다. ~에 따르면시작 매개변수(7):
커널에 의해 얻어지지 않고 환경 변수로 해석되지 않은 나머지 인수는 일반적으로 init(1) 프로그램인 프로세스 하나에 전달됩니다. init 프로세스에 전달되는 가장 일반적인 매개변수는 "single"이라는 단어로, 모든 일반적인 데몬을 시작하는 대신 단일 사용자 모드에서 컴퓨터를 시작하도록 지시합니다. 어떤 매개변수를 허용하는지 알아보려면 시스템에 설치된 init(1) 버전의 매뉴얼 페이지를 확인하십시오.
RHEL 6은 시작을 실행하므로 단일 사용자 모드와 관련된 시작 구성 파일을 확인하는 것이 좋습니다.
- /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
이 스크립트는 시스템이 시작된 쉘이 종료된 후 post-stop
시스템을 기본 실행 수준으로 상승시킵니다 . $SUSHELL 또는 bash 값을 시작하는 간단한 스크립트입니다. 기본적으로 bash는 로그인이 아닌 대화형 셸로 시작합니다. 즉, 시작 시 읽습니다.sushell
/sbin/sushell
~/.bashrc
이 파일이 실수로 셸을 종료하는 경우 시스템은 계속해서 기본 런레벨로 부팅됩니다.
Emergency 키워드는 /sbin/sulogin
루트 사용자의 쉘 실행 시도가 실패할 경우 (맨 페이지에 따라) 대체 명령을 호출하기 때문에 효과적일 수 있습니다./bin/sh
가장 심각한 재해의 경우 커널에 직접 연결로 부팅하도록 지시할 수 있습니다 init=/bin/sh
. 루트로 실행되는 셸로 부팅됩니다. 파일 시스템을 변경해야 하는 경우 루트 장치가 쓰기용으로 마운트되거나 부팅 후 장치가 다시 마운트되도록 ro
부팅 매개변수 도 변경해야 합니다 .rw
답변2
머신에 물리적으로 접근할 수 있다면 상대적으로 쉽습니다. 복구 CD를 루트 셸로 부팅한 다음 파일의 손상을 설치하고 복구합니다. 완료되면 문제 없이 재부팅할 수 있습니다... 언급하지 않은 다른 일이 발생하지 않는 한... :-)