$SHELL을 기본값으로 재설정

$SHELL을 기본값으로 재설정

나는 이 질문에 대한 답을 읽었습니다.이것&&이것), 그 중 어느 것도 나에게 적합하지 않습니다!

% uname --operating-system --kernel-name --kernel-version --kernel-release 
Linux 4.9.6-200.fc25.x86_64 #1 SMP Thu Jan 26 10:17:45 UTC 2017 GNU/Linux

st 터미널을 다운로드/설치했습니다(간단한 터미널), 이를 기본 터미널 에뮬레이터로 설정하고 싶었지만큰 실수, 이 명령을 루트로 실행 중입니다: % su -c 'chsh -s /usr/local/bin/st'.

이제 루트로 로그인하거나 명령을 실행하려고 할 때마다 다음 메시지가 인쇄됩니다 Can't open display. 다음 명령(아래 표시)을 시도했지만 그 중 아무 것도 작동하지 않습니다.

% env -i bash
% su
Password:
Can't open display
% su -c 'env -i bash'
Password:
Can't open display
% su -c 'chsh -s /usr/bin/bash'
Password:
Can't open display
% su -s bash
Password: 
su: using restricted shell /usr/local/bin/st
Can't open display
% su
Password:
Couldn't read from shell: Input/output error
child finished with error '256'
% 

고쳐 쓰다: 제안된 답변의 지침을 따르려고 했습니다.

  1. 부트로더 프롬프트에서 부팅에 대한 일반 항목으로 이동합니다.
  2. Enter를 누르는 대신 e를 눌러 커널 명령줄 매개변수를 먼저 편집하십시오.
  3. 열린 편집기에서 화살표 키를 사용하여 linux로 시작하는 줄을 찾아 그 끝으로 이동하여 init=/bin/sh를 추가합니다. 이는 일시적으로 init 시스템을 시스템의 쉘로 대체하며, init는 루트에 의해 시작되므로 이것이 루트 쉘이 됩니다.
  4. CTRL+X를 눌러 수정된 항목을 실행합니다.
  5. 올바른 매개변수를 사용하여 chsh를 다시 실행하십시오.

하지만 4단계를 수행할 때 다음과 같은 문제에 직면하게 됩니다.이것화면!

답변1

내가 큰 실수를 했어

당신은 그랬습니다. 이 문제에 대한 해결책은 슈퍼유저로 구성된 로그인 셸을 사용하지 않고 슈퍼유저로 명령을 실행하는 방법을 찾는 것입니다.

구조 및 긴급 모드에서는 불가능합니다.~하지 않는 한/usr아이러니하게도 지난 30년간의 추세와는 반대로 개별 디스크 볼륨을 갖게 된 것은 행운입니다 . 포함된 디스크 볼륨이 /usr/local/bin/st루트 디렉터리가 아닌 경우 파일은 실행되지 않습니다. 이 경우 긴급 로그인을 위해 다음 명령어를 사용 sulogin하시거나emergency-login하드와이어된 쉘 이름으로 폴백을 시도합니다.

이를 달성하는 또 다른 방법은 슈퍼유저의 사용자 계정 데이터베이스에 제공된 쉘 대신 환경 변수에 의해 제공된 쉘을 대화형 쉘로 실행하는 -s옵션을 사용하는 것입니다. ( 옵션을 비교하세요.)sudoSHELL-i

doas -s마찬가지로 환경 변수에 지정된 쉘을 사용하십시오 SHELL.

일부 운영 체제 su명령은 옵션을 통해 이를 수행할 수도 있습니다 --shell. 그러나 이것은 흔한 일이 아닙니다. 또한, 앞서 언급한 바와 같이 계정 데이터베이스의 슈퍼유저 쉘이 인증된 쉘 목록( )에 없으면 /etc/shells무시됩니다.

관련 정보