비대화형 및 비로그인 셸을 이해하려고 노력 중이지만 비대화형 및 비로그인 셸의 시작 프로세스를 개념화하는 데 문제가 있습니다.
제가 이해하는 방식은 스크립트나 프로세스가 시작될 때입니다. 즉, 메모리 영역이 생성되고 하위 프로세스가 분기를 통해 상위 프로세스의 중복 환경을 복사합니다. 이것이 제게는 이해가 됩니다.
비대화형 비로그인 프로세스나 스크립트에 대해 쉘 환경이 정의되어 있을 때 혼란스러운 점은 무엇입니까? 대화형 셸이 시작되는 방법을 생각하면 약간 당황스럽습니다.
대화형 쉘을 이해하는 방법은 다음과 같습니다.
- 사용자가 로그인 ID를 Linux 커널에 전달합니다.
- Linux 커널은 /etc/password 파일에서 사용자를 찾고 할당된 쉘을 식별합니다.
- 쉘이 시작되었습니다
- 쉘은 로그인 스크립트를 읽어 사용자의 쉘 환경을 정의합니다.
- Linux는 셸이 명령을 받아들일 준비가 되었음을 나타내는 명령 프롬프트를 생성합니다.
비대화형 쉘과 비로그인 쉘의 절차가 유사합니까? 이것이 내가 생각하는 방식입니다.
- 해당 프로세스는 상위 프로세스에 의해 분기됩니다.
- Linux는 프로세스가 실행될 사용자 ID를 식별합니다.
- Linux는 /etc/password 파일에서 사용자 ID를 찾습니다.
- 쉘이 시작되었습니다
- BASH_ENV 읽기(정의된 경우)
- 프로세스는 셸과 상호작용하여 API에 명령을 전달합니다.
왠지 뭔가 빠진 것처럼 어색해 보입니다. 내가 올바른 길을 가고 있는지 누군가에게 알려줄 수 있나요?
답변1
실제로 파일에 대해 생각할 필요가 없습니다 passwd
. 쉘은 일반적으로 비밀번호 인증을 처리하지 않습니다. 이것은 생각보다 간단할 수 있습니다. init
와 같은 다른 프로그램은 귀하의 질문에 설명된 대부분의 로그인 프로세스를 getty
실제로 수행합니다.login
대부분의 쉘은 세션을 다음과 같이 취급합니다.대화형 쉘이 옵션을 사용하여 셸을 -i
시작하거나 표준 출력이 터미널 장치(예: /dev/tty01
)에 연결되는 경우.
쉘은 세션을 다음과 같이 취급합니다.로그인 쉘매개변수 0($0)의 첫 번째 문자가 대시( -
)인 경우. 일부 쉘은 -l
동일한 효과를 생성하는 옵션 도 지원합니다 .
"로그인 셸"은 일반적으로 전통적인 방식으로 시작됩니다.리눅스 로그인 과정:
이 init
프로그램이나 다른 프로그램은 getty
로그인에 사용할 수 있는 각 터미널에서 프로세스를 시작합니다.
프로그램 getty
은 프롬프트를 인쇄하고 username
터미널에서 읽습니다. 그런 다음 사용자 이름을 인수로 사용하여 프로그램을 호출합니다 getty
.login
이 login
프로그램은 파일에서 사용자 이름을 찾고 passwd
, 사용자의 비밀번호를 읽고 확인하고, 사용자의 사용자 및 그룹 ID와 환경 변수를 설정하고, 기타 로그인 관련 작업을 수행합니다.앞으로로그인 쉘을 시작하십시오.
프로세스는 (셸 내라고도 함)의 프로그램 이름 앞에 대시( )를 추가하여 login
로그인 셸임을 셸에 알립니다 .-
argv[0]
$0
로그인 및 대화형 세션 개념에 대한 자세한 내용을 보려면 사용 중인 특정 셸에 대한 매뉴얼 getty
페이지를 참조하세요 login
. 다양한 셸(예: , sh
등 ksh
) 은 약간 다른 방식으로 bash
시작 명령 파일(예: .profile
, 등)을 읽습니다..bash_rc