** 비 로그인 ** 셸을 통해 ** 로그인 ** 셸을 사용해야하는 이유는 무엇입니까?


24

* nix 시스템 의 도트 파일 에 대한 기본 지식이 있습니다. 그러나 여전히 로그인 셸과 비 로그인 셸의 차이점 에 대해 상당히 혼란 스럽 습니까?

여러 개의 중복 된 답변을 포함하여 여러 가지 답변이 이미 다음 글 머리 기호를 해결했습니다.

  • 로그인 또는 비 로그인 쉘 을 호출 하는 방법
  • 로그인 또는 비 로그인 셸 을 감지 하는 방법
  • 무엇 시작 파일 것은 a로 소비 될 것이다 로그인 또는 비 로그인
  • man bash자세한 내용은 설명서 (예 :)를 참조하십시오.

대답이 말하지 않은 것 (그리고 여전히 혼란스러워하는 것)은 다음과 같습니다.

  • 이란 무엇입니까 유스 케이스 (A)의 로그인 또는 비 로그인 쉘은? (예를 들면, 나는 단지 구성 zshrc을 위해 zsh그리고 대부분의 개인 dev에 요구 사항에 대한 충분하다, 나는 그것이 무엇을 같이 간단하지 알고 vimrcvim)

  • 로그인 하지 않은 쉘을 통해 로그인 을 사용해야하는 이유 는 무엇입니까 (다른 시작 파일과 수명주기를 소비하는 것 외에)?

답변:


15

아이디어는 사용자에게 호스트 당 하나의 로그인 쉘이 있어야한다는 것입니다. (아마도 터미널 당 호스트 당 하나의 로그인 셸을 말해야합니다. 여러 터미널을 통해 동시에 호스트에 로그인 한 경우 여러 개의 로그인 셸이있을 것으로 예상됩니다.) 일반적으로 (항상?)이 첫 번째 셸입니다. 로그인 할 때 (따라서 이름). 따라서이 체계를 사용하면 로그인 당 한 번만 수행하려는 작업과 새 (대화식) 셸을 시작할 때마다 수행 할 작업을 지정할 수 있습니다.

일반적으로 로그인 후 실행하는 다른 모든 쉘은 로그인 쉘의 하위 항목 (자식의 자식의 하위 항목)이므로 로그인 쉘의 많은 설정 (환경 변수 umask등)을 상속 합니다. 따라서 로그인 초기화 파일 ( .login, .profile등)은 상속 가능한 설정을 설정하고 내 보내지 않은 셸 변수 .bashrc( set,, shopt등)

또 다른 개념은 로그인 초기화 파일 (및 파일 만)이 "무거운 작업", 즉 리소스 집약적 인 작업을 수행해야한다는 것입니다. 예를 들어, 로그인 할 때마다 특정 프로세스가 백그라운드에서 실행되도록 할 수 있습니다 (단 하나의 사본 (인스턴스) 만). 로그인 할 때 새로운 대화식 쉘을 시작할 때마다 일부 상태 정보 (예 : df또는 who)가 표시되도록 할 수 있습니다. 특히 대화식 이있는 경우로그인 할 때마다 실행하려는 프로그램 / 대화 상자 (즉, 입력이 필요한 프로그램)는 새 셸을 시작할 때마다 실행하지 않으려는 경우가 있습니다. 극단적 인 예를 들어, 20 년 전에 Solaris는 그래픽이 아닌 단일 윈도우가 아닌 쉘에 로그인했습니다. (그 이후로 변경되었다고 생각합니다.) 와 같은 명령을 사용하여 윈도우 시스템을 시작하는 것이 .login또는 .profile(또는 무엇이든) 일이었습니다 startx. (이는 여러 개의 윈도우 시스템을 사용할 수 있었기 때문에 부분적으로 유용했습니다. 사용자마다 다른 환경 설정을 사용했습니다. 일부 사용자는 다른 상황에서 다른 .profile시스템을 사용했으며 "오늘 윈도우 시스템을 사용 하시겠습니까?" 라는 대화 상자가있었습니다. ) 분명히, 당신은 새 창을 열거 나 입력 할 때마다 실행을 원하지 않을 것입니다sh.

bash 엣지 케이스를 제외하고는 다른 것을 사용한 지 오래되었습니다 . (예를 들어, #!/bin/sh일부 시스템에서는 스크립트가로 실행 dash되고 다른 스크립트 bash는 POSIX 모드로 실행되는 스크립트를 작성 합니다. 일 년에 몇 번 csh/ tcsh몇 분 동안 실행 하여 무언가를 처리하는 방법을 보거나 질문에 답하십시오.) 매일 여러 개의 쉘 (예 : bashzsh)을 사용하는 경우 패턴이 다를 수 있습니다. 기본 쉘 (에 정의 된대로 /etc/passwd)이 bash인 경우 zsh로그인 쉘 을 호출 한 다음 그에 zsh종속 된 일부 대화식 비 로그인 쉘 을 호출 할 수 있습니다 . 동일한 유형의 다른 로그인 쉘에 종속 된 로그인 쉘을 사용하지 않아야합니다.

Login Shell과 Non-Login Shell의 차이점 에서 언급했듯이 ? OS X 터미널 응용 프로그램은 로그인 셸을 실행하므로 일반 사용자는 일반적으로 여러 "로그인 셸"을 동시에 실행합니다. 이것은 내가 전술 한 것과 다소 다른 모델이며, 그가에서 무엇을 재고하도록 사용자에게 요구할 수 있습니다 자신의 .login또는.profile(또는 무엇이든) 파일. OS X 개발자가이 디자인 결정에 대한 근거를 문서화했는지 여부를 모르겠습니다. 그러나 이것이 유용한 상황을 상상할 수 있습니다. 내가 로그인 할 때 습관적으로 소수의 쉘 창을 열었던 때가 있었고, ANSI 이스케이프 시퀀스를 화면에 작성하여 다른 텍스트 및 배경색으로 설정하여 어느 것이 어느 것인지 추적하는 데 도움이되었습니다. 터미널 색상은 어린이의 자녀가 물려받지 않지만 창 내에서 유지되는 무언가의 예입니다. 따라서 이것은 새로운 터미널 창을 시작할 때마다하고 싶지만 새로운 대화식 쉘을 시작할 때마다하지 않는 일종의 작업입니다.

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