로그인 및 비 로그인 쉘이란 무엇입니까?


78

비 로그인 쉘의 설정은 .bashrc파일 로 가고 로그인 쉘 설정은 .profile파일 로 간다고 합니다.

실제로 로그인 및 비 로그인 쉘은 무엇을 의미합니까?

기술 전문 용어를 최대한 사용하지 말고 설명하십시오.

답변:


83

간단히 말해서 :

  • 쉘이나 터미널을 열거 나 (또는 ​​스위치로 전환) 프롬프트가 표시되기 전에 로그인 (사용자 이름? 비밀번호?)을 요청하는 경우 로그인 쉘입니다.
  • 그것이 gnome-terminal 과 같지 않고 바로 사용할 수 있다면, 그것은 비 로그인 쉘입니다.

Ubuntu Desktop의 일반 사용자 인 경우 유일한 로그인 쉘은 ... 데스크톱입니다 (암호를 입력하려면 오른쪽에 입력하십시오). 글쎄, 기술적으로 GUI를 시작하는 로그인 쉘이지만 전문 용어가 들어갑니다. 그리고 네, 설정을 읽습니다..profile

데스크탑에 문제가 있고 + + 바로 가기 를 사용하여 가상 터미널로 전환하는 경우 (정상 사용자) 로그인 쉘 처럼 보이는 로그인 쉘을 볼 수있는 유일한 시간입니다 .CtrlAltF1


로그인 쉘을 갖는 다른 일반적인 경우는 다음과 같습니다.

  • 를 통해 원격으로 컴퓨터에 액세스 ssh(또는로 로컬로 연결 ssh localhost)
  • bash -l(또는 sh -l) 로 초기 로그인 쉘 시뮬레이션
  • 초기 root로그인 쉘 시뮬레이션sudo -i
    • 또는 다른 비 사용자 용sudo -u username -iroot
  • 다른 비로서 인증 root과 사용자 (및 암호)su - username
  • sudo login명령을 사용하여 사용자 전환

터미널에서 Eclipse IDE를 시작하면 예상대로 열리지 만 Eclipse 아이콘을 클릭하여 열려고하면 Java 위치를 인식 할 수 없습니다 (그렇지 않으면 Java에 대한 PATH가 .profile 파일에 설정되어 있지 않으면). 즉, Eclipse 아이콘을 클릭하면 로그인 쉘이 필요합니다. 왜 그렇습니까?
DUKE

2
@DUKE, 아니요, 데스크탑 / GUI를 사용하는 경우와 실제 명령 줄 전용 콘솔 시스템을 사용할 때 환경 변수를 다르게 설정해야한다는 의미입니다 . PATH 등을 ~/.pam_environment(변수 만, 거기에 bash 명령이 없습니다!) 넣고 로그 아웃하고 로그인하고 그놈 터미널뿐만 아니라 데스크탑에도 마술처럼 나타나는 것을 지켜보십시오!
ish

1
ssh를 통한 로그인은 로그인 쉘을 호출하지 않습니다. 그것은로드되지 않습니다 /etc/profile, /etc/profile.d또는 ~/.profile.
xuhdev

이 질문을 참조하십시오 .
xuhdev

ssh를 통한 @xuhdev 로그인은 로그인 쉘을 호출하고 / etc / profile, /etc/profile.d 및 ~ / .bash_profile을로드합니다.
MichaelZ

9

나는 생각하지 않습니다 올바른 대답은 "기술적 인 전문 용어"없이 부여 할 수 있습니다. 이 질문은 "로그인 쉘이란 무엇입니까?"라는 쿼리에 대해 Google에서 처음 나타나는 질문이므로 아래에보다 정확한 답변을 제공하고 있습니다.

로그인 쉘은 단순히 로그인 쉘이라고하는 쉘입니다. 일반적으로 로그인하는 응용 프로그램이 쉘에 로그인 쉘이 시작된다고 알려주는 것은 아니지만 로그인 후 팝업되는 쉘을 의미 하지는 않습니다 . 쉘에게 로그인 방법을 알려주는 방법은 다음과 같습니다.

  1. 그것을 알고 있다고 가정 -l하거나 --login인수를 실행 하면 (알지 못하는 쉘은 알지 -l못하지만 --login일부 쉘에서만 지원됩니다).
  2. argv[0]설정된 쉘 실행 -{some_string}(예 : HYPHEN-MINUS가 보통 argv[0]또는 다른 문자열 앞에 추가됨 ). 이것은 ssh와 su 가하는 일입니다 : su는 -suas argv[0]( argv[0]현재 실행중인 실행 파일 이름과 관련이 있다고 생각하는 모든 사람들에게 안녕하세요)로 실행 파일을 실행하고, ssh는 -zsh사용자가 /bin/zsh쉘로 설정했을 때 zsh를 실행 합니다.

쉘의 로지스틱스는 암호를 요구하거나 다른 인증 절차를 수행하는 사람과는 전혀 관련이 없습니다. ssh 또는 login (또는 urxvt와 같은 일부 터미널 에뮬레이터)과 같은 일부 프로그램 argv[0]은 HYPHEN-MINUS로 시작 하는 로그인 프로그램으로 쉘을 실행 합니다. su 또는 sudo (또는 zsh :의 -PRECOMMAND MODIFIERS 섹션에 설명 된 사전 명령 수정 자 참조)와 같은 일부 man zshmisc는 기본적으로이를 수행하지 않지만 그렇게 할 수 있습니다. 일부는 쉘에게 인자 (즉, bash -l)를 사용하여 로그인하는 것을 쉘에게 알려주는 유일한 옵션을 가지고 있습니다 : ssh with command argument (명명하게 ssh에게 원격 끝에서 실행할 것을 알려줍니다).

일반적으로 먼저 셸을 호출하는 데 사용되는 프로그램의 설명서를 참조하여 셸이 로그인인지 여부를 확인하고 두 번째로 앱이 로그인 셸을 시작할지 여부를 결정하는 테스트를 수행하는 echo것이 .profile좋습니다 (예 :에 추가 ).


두 번째 옵션에 관심이 있습니다. bash를 호출하기 전 또는 후에 argv [0]을 실제로 어떻게 변경할 수 있습니까? 명령 행에서 수행 할 수 있습니까?
VeryHardCoder

@VeryHardCoder 명령을 실행하는 데 사용하는 응용 프로그램에 따라 다릅니다. C 코드에서 직접 공급하여 수행됩니다 argv[0]중 하나에 exec*자연과 피할 수없는 기능 : 당신은 항상 공급 모두 argv[0] 실제로 명령을 사용할 때 실행 경로와 exec*당신이 이제까지하지 원하는 경우에도 기능을 argv[0]명령 실행과 다를 수 있습니다. 다른 언어는 고유 한 방법을 제공합니다. 특히 배쉬는 사용 할 수 있습니다 exec -a new_argv0 bash, 그러나 이것은 물론, 당신이 무엇 이건 쉘을 실행하는 현재 대체하게됩니다 exec에드, 그래서 당신은 서브 쉘 (사용해야 할 수도 있습니다 (exec -a -zsh zsh))
ZYX

알았어! 실제로, 그것은 더 간단한 방법으로도 이루어질 수 있습니다 : (exec -l bash) ...
VeryHardCoder

1
둘 사이의 기능적 차이점은 무엇입니까? 이것은 단순히 부울 플래그입니까?
Alexey

@Alexey 주요 기능 차이점은 시작시 사용되는 구성 파일 세트입니다. $0, 그리고 어쩌면 다른 것 (변수, 설정 등)이 설정 파일에서 쉘의 로지가 감지 될 수 있도록 설정되었지만 누가 실제로 이것을 감지하여 차이를 만들지? 그게 내가 아는 전부 야.
ZyX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.