chsh 명령으로 셸을 변경할 수없는 이유는 무엇입니까?


12

나는이 명령이 chsh설명 된 것처럼 동작하지 않기 때문에 적어도 새로운 생각을 배웠습니다 .

다음과 같이 작동하는 것으로 설명되었습니다.

  1. cat /etc/shells 어떤 쉘이 설치되어 있는지 알기 때문에 선택할 수 있습니다.
  2. 어떻게 echo $SHELL당신이 사용하는 쉘있는 알고.
  3. 껍질 중 하나를 선택하고 유형 chsh -s /path/to/shell
  4. 암호를 입력하고을 사용 echo $SHELL하여 새 쉘에 있는지 확인하십시오 .

나는 이것을했고 암호를 입력 할 때 오류 메시지가 나타나지 않지만 여전히 같은 껍질에있었습니다.

% echo $SHELL
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $SHELL
/bin/bash

5
먼저 로그 아웃했다가 다시 로그인해야합니다.
Rui F Ribeiro

7
터미널 텍스트의 이미지를 게시하지 마십시오. 질문 본문에 복사하여 붙여 넣을 수 있으며 그래픽 결함이나 이와 유사한 것을 표시하지 않는 한 이미지를 게시 할 필요가 없습니다.
Sergiy Kolodyazhnyy


게시물을 편집하고 이미지를 삭제하고 대신 텍스트를 붙여 넣었지만 이미지가 밤새 돌아 왔습니다.
상어

@sharkant 누군가가 리뷰 대기열에서 수정 한 것으로 보이며 승인 된 후 사실 이후 게시물을 수정했습니다. SE 편집 시스템이 기존 편집으로 새 편집을 덮어 쓰지 않을 것이라고 생각했지만 누가 알겠습니까?
Zan Lynx

답변:


19

로그 아웃했다가 다시 로그인하십시오.

chsh명령은 /etc/passwd파일 을 업데이트 하지만 현재 쉘이나 현재 쉘의 $SHELL변수 값을 변경하지는 않습니다 (그 방법은 없습니다). 이것이 다시 로그인해야하는 이유입니다. 변경 사항을 적용하려면 새 로그인 세션을 시작해야합니다.


로그인 쉘이 무엇인지, 로그인 쉘 또는 로그인 쉘이 아닌지 어떻게 알 수 있는지 이해하지 못합니다. 새 로그인 세션을 시작하려면 어떻게합니까?
상어

1
@sharkant 요점은 /etc/passwd다음에 로그인 할 때까지 변경 한 정보를 읽지 않는다는 것입니다. 변경 사항을 적용하려면 완전히 로그 아웃 한 후 다시 로그인해야합니다. 이 작업에 실패하면 컴퓨터를 재부팅해도 작동합니다.
Kusalananda

1
나는 이번에 당신을 이해한다고 생각합니다 : 그래서 chsh -s / path / to / shell 명령은 내가있는 쉘을 즉시 변경하지 않지만 쉘을 시작할 때 적용되는 / etc / passwd 내부의 항목을 변경합니까?
상어

@sharkant 그것이 정확히 작동하는 방식입니다! 나는 당신의 오해를 마침내 이해하게되어 기쁩니다. 답변을 업데이트하겠습니다.
Kusalananda

1

사용 하고 usermod 유틸리티 명령은 내 경우했다. 우분투에서 실행 18.04.

  1. 먼저 현재 값 확인

grep nameofuser /etc/passwd

  1. 그것을 바꾸다

sudo usermod --shell /bin/bash nameofuser

  1. 그것을 확인

grep nameofuser /etc/passwd

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.