Linux 명령이 셸에 포함되어 있습니까, 아니면 셸의 일부입니까?

Linux 명령이 셸에 포함되어 있습니까, 아니면 셸의 일부입니까?

저는 Linux의 다양한 구성요소와 이들이 어떻게 함께 작동하는지 알아내려고 노력 중인데 용어와 관련된 질문이 있습니다. 터미널은 일반적으로 Bash라는 쉘을 실행합니다. 터미널에서 Linux 명령(예: ls, mkdir, cp)을 실행할 수도 있습니다. 그러나 나는 모든 Linux 명령이 bash(또는 쉘)의 일부가 아니라는 것을 알게 되었습니다. 이것은 터미널이 단지 쉘을 실행하지 않는다는 것을 의미합니까?

답변1

터미널은 아무것도 실행하지 않습니다. 단지 사용자 인터페이스일 뿐입니다. 또는 운영 체제에서 실행되는 프로세스의 경우 read()및 시스템 호출을 사용하여 write()읽고 쓸 수 있는 특수한 유형의 "파일"입니다. (몇 가지 터미널별 특수 기능도 있습니다.)

예를 들어 SSH를 통해 로그인하면 SSH 서버는 셸을 시작하고 터미널(장치 노드를 나타냄)에 연결된 파일 설명자를 제공합니다. GUI를 통해 로그인하고 터미널 에뮬레이터를 시작하면 거의 동일한 일이 발생합니다. SSH 서버를 터미널 에뮬레이터로 바꾸면 됩니다.

어느 방향으로 가든 이제 쉘은 터미널에 프롬프트를 인쇄하고 터미널에서 명령을 읽을 수 있으며 터미널에 액세스할 수 있는 외부 프로그램(예: ls또는 기타)을 시작할 수 있습니다. git또는 내장 명령을 유사하게 실행할 수도 있습니다( read, echo).

(비대화형 셸 세션을 실행할 수도 있습니다. 셸 스크립트를 실행하는 것은 터미널이 아닌 파일에서 셸에 대한 입력을 받는다는 점에서 거의 동일합니다. 셸이 시작되면 Connect에서도 입력을 받습니다. 터미널 등으로).

일반적인 범용 시스템에서 실행하는 대부분의 명령은 셸에 내장되어 있지 않고 외부 프로그램입니다. Busybox가 있는 일부 임베디드 시스템에서는 일반적인 사항이 Busybox 자체 내에서 구현될 가능성이 높습니다. 하지만 그럼에도 불구하고 시스템이 수행해야 하는 모든 작업을 실제로 수행하는 외부 애플리케이션이 있을 수 있습니다. 그것이 단지 Python 또는 Lua 인터프리터일지라도 말입니다.

또한보십시오:"터미널", "쉘", "tty" 및 "콘솔"의 정확한 차이점은 무엇입니까?

답변2

이는 터미널에 따라 다를 수 있지만 제가 사용하고 있는 터미널에서는 모든 명령을 실행할 수 있었습니다(그러나 많은 명령이 너무 빨리 종료되므로 실행하기 위해 터미널을 시작할 필요가 없으며 출력을 생성하는지 또는 출력을 생성하는지 여부는 중요하지 않습니다. 아니다). 터미널을 사용하여 화면을 실행한 다음 화면에서 적절한 수의 쉘을 실행한 것을 기억합니다.

다른 답변에서 언급했듯이 쉘에는 이러한 명령에 액세스하기 위해 많은 내장 명령이 있으며 (일부 쉘에는 다른 것보다 더 많은 명령이 있으므로 사용하는 명령에 대한 설명서를 확인하십시오) 쉘은 일반적으로 종료할 때까지 계속 실행됩니다. ), 수행 중인 작업을 모르는 경우 터미널이 쉘로 시작되도록 해야 합니다. (어떤 경우에는 프로세스를 저장할 수 있지만 매우 특정한 요구 사항이 없는 한 다른 프로세스를 실행해도 아무런 해가 없습니다.)

답변3

짧은 대답은 '예'입니다. 명령은 쉘의 내부 명령이거나 외부 명령일 수 있습니다.

셸은 단지 사용자 인터페이스일 뿐이며 (다양한 표준을 무시하고) 명령을 내부적으로 실행할지 외부에서 실행할지는 셸에 달려 있습니다. 예를 들어, busybox 쉘은 거의 모든 기본 명령을 내부적으로 구현하려고 시도하므로 임베디드 시스템에서 유일하게 필요한 실행 파일입니다.

Bash의 매뉴얼 페이지를 읽으면 다음과 같은 함수를 찾을 수 있습니다.쉘 내장 명령내부 명령을 나열합니다. cd, 등 일부 명령은 외부에서 구현된 경우 작동하지 않습니다 export.source

외부 명령에 대해 나열된 디렉토리를 검색합니다 $PATH. 일부 명령은 내부 및 외부 모두에서 사용할 수 있으며 두 명령이 반드시 동일하지는 않습니다.

명령은 예입니다 pwd. 내장 버전은 현재 디렉토리에 대한 bash의 지식을 제공합니다. 디렉터리에 대한 심볼릭 링크를 통해 이동하면 외부 디렉터리가 작동 /bin/pwd하고 다른 대답을 제공합니다.cd

기술적으로 말하면, 셸에 내장되지 않은 외부 명령은 터미널이 아니라 셸 자체에서 실행됩니다. 그렇긴 하지만, 쉘이나 다른 쉘이 아닌 명령으로 시작하도록 터미널에 명시적으로 지시할 수 있습니다.

관련 정보