비대화형 로그인 쉘이 있습니까?

비대화형 로그인 쉘이 있습니까?

나는 사이의 차이점을 안다대화형/비대화형그리고로그인/비로그인껍질은 있지만 실제로는 결코 그렇지 않은 것 같습니다.아니요- 대화형 로그인스크립트와 같은 것이 없다면 쉘을 사용하세요 /bin/bash --login some-script.sh(심지어 조금 이상해 보입니다). 이것이 정확합니까, 아니면 더 일반적입니까?

답변1

로그인 대 비로그인, 대화형 대 비대화형 Bash 쉘에 대한 Bash의 개념에 대해 이야기하고 있다고 가정합니다.기도하다맨페이지 섹션. (설명과 다릅니다.제임스 영만의 답변"쉘"(또는 사용자 명령 해석기)로 사용되는 임의의 명령passwd(5)파일 및 프로그램이 사용자 입력을 허용하는지 여부(예: /usr/sbin/nologin분명히 그렇지 않음) )

당신 말이 맞습니다. 이것은 /bin/bash --login some-script.sh아마도 병리적인 예일 수 있는 비대화형 로그인 Bash 호출을 생성할 것입니다. 비대화형 로그인 쉘이 발생하는 상황이 드물지만 놀라운 것은 아닙니다 ssh somehost < some-file. 실행 명령이 주어지지 않아 sshdBash가 시작되도록 설정하여 Bash 가 로그인 셸이라고 생각하게 만듭니다. 그러나 stdin이 터미널에 연결되어 있지 않기 때문에 Bash는 자체적으로 대화형 모드로 설정되지 않습니다( 포함되지 않음). ).argv[0]-bash$-i

ssh somehost somecommand(개인적으로 이 시나리오 는 새로운 로그인이기는 하지만 "로그인 쉘"로 간주되지 않는 반대 시나리오보다 더 합리적으로 보입니다 somehost.)

오래 전에 했어야 할 일을 최근에 했고,실행을 위한 Bash 모드 테이블 및 초기화 파일. 이것이 혼란스럽다고 생각되더라도 걱정하지 마십시오. 적어도 나도 그랬습니다. 나를 혼란스럽게 하는 것은 그들의 원래 의도가 .bashrc언제 그것을 해야 하는지에 대한 규칙을 갖는 것이었다는 것입니다 .

답변2

실제로 새로 설치된 시스템의 대부분의 로그인 셸은 비대화형입니다.

$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
  5 /bin/bash
 23 /bin/false
  1 /bin/sh
  1 /bin/sync
 17 /usr/sbin/nologin

분명히 /bin/bash그들은 /bin/sh전통적인 쉘이며 대화형입니다. 하지만 이 목록의 다른 모든 항목은 비대화형입니다. 이 목록을 읽고 있는데 그 중 하나가 무엇을 하는지 모른다면 해당 매뉴얼 페이지(예: man nologin또는 man sync)를 찾아보세요.

이 명령이 실제로 수행하는 작업

Captain Man의 포스팅 이력을 보면 Unix에 대한 경험이 상당히 부족한 것을 알 수 있습니다. 따라서 따르지 않는 것에 대한 의견의 질문은 출력뿐만 아니라 답변 상단의 명령줄과 관련이 있을 수 있습니다. 따라서 명령줄에 대해서도 설명하겠습니다. 비록 이 질문에 대한 주제는 아니지만요.

명령은유닉스 파이프. 파이프라인은 왼쪽에서 오른쪽으로 읽는 일련의 명령으로, 첫 번째 명령의 출력이 두 번째 명령의 입력이 되고 두 번째 명령의 출력이 세 번째 명령의 입력이 되는 식으로 계속해서 다음 명령이 실행됩니다. 파이프 끝. 마지막 프로세스의 출력이 터미널에 표시됩니다(리디렉션되지 않는 한). 바라보다쉘 파이프에 대한 Wikipedia 항목더 많은 정보를 알고 싶습니다.

파이프라인이 수행하는 작업을 이해하지 못하는 경우 섹션별로 실행하여 진행 상황을 확인할 수 있습니다. 사용 중인 명령에 대한 매뉴얼 페이지(여기, awksort) 를 읽을 수도 있습니다 uniq. 사실 지금 해야 합니다. 나는 기다릴 것이다.

파이프라인의 단계를 단계별로 실행해 보겠습니다(자신의 Unix 시스템에서 이 작업을 안전하게 수행할 수 있습니다).

~$ awk -F:  '{print $7}' <  /etc/passwd | sed -e 's/^/    /'
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/usr/sbin/nologin
[ ... and so on, I've left the rest out ... ]

위의 출력은 /etc/passwd파일의 일곱 번째 필드 내용입니다. 이것은 모든 사람의 로그인 쉘이 무엇인지 시스템에 알려주는 (플랫 텍스트 파일) 데이터베이스입니다. 더 많은 내용을 알고 싶으면 /etc/passwd해당 내용을 읽고(세계적으로 읽을 수 있음) 매뉴얼 페이지를 확인하십시오 (man 5 passwd).

따라서 전체 목록을 읽으면 인기 있는 프로젝트가 무엇인지 알 수 있지만 질문은 실제로 비대화형 쉘이 얼마나 일반적인지에 대한 질문이므로 질문에 답하기에는 좋은 형식이 아닙니다. 세어 봅시다. 가장 쉬운 방법은 항목을 먼저 정렬하는 것입니다.

~$ awk -F:  '{print $7}' <  /etc/passwd | sort
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
[ ... and so on, I've left the rest out ... ]

이 프로그램을 사용하여 uniq고유한 항목만 표시할 수 있습니다.

~$ awk -F: '{print $7}' < /etc/passwd |sort|UNIQLO| sed -e 's/^/ /' /bin/bash /bin/false /bin/sh /bin/sync /usr /sbin/nologin

하지만 잠깐만요, 그러면 안 돼요. 한 사람이 몇 개나 가지고 있나요? 질문해 봅시다 uniq(맨 페이지를 읽어보세요!):

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
      5 /bin/bash
     23 /bin/false
      1 /bin/sh
      1 /bin/sync
     17 /usr/sbin/nologin

물론 이것은 답변 상단에 표시되는 결과입니다. 항목을 순서대로 보기 위해 다시 정렬해 보겠습니다.

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort
     17 /usr/sbin/nologin
      1 /bin/sh
      1 /bin/sync
     23 /bin/false
      5 /bin/bash

잠깐, 그렇지 않습니다. 17은 1보다 먼저 오고 5는 23보다 뒤에 옵니다. 문제는 항목이 정렬되고 있다는 것입니다.사전순으로. sort숫자와 역순으로 정렬하도록 요청해 보겠습니다 .

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort -n -r
     23 /bin/false
     17 /usr/sbin/nologin
      5 /bin/bash
      1 /bin/sync
      1 /bin/sh

나는 이것이 원래 답변의 모든 것을 설명한다고 생각합니다. 여전히 이러한 명령에 대한 세부 정보를 모르는 경우 매뉴얼 페이지를 읽어보세요. 아직도 무슨 일이 일어나고 있는지 메커니즘을 이해하지 못한다면 Unix와 Linux를 설명하는 책(온라인 또는 인쇄물)을 읽는 것부터 시작하는 것이 좋습니다.

관련 정보