내장 명령과 비 내장 명령의 차이점은 무엇입니까?

내장 명령과 비 내장 명령의 차이점은 무엇입니까?

내장 명령과 명목상 동일한 작업을 수행하는 다른 명령 사이에 근본적인 차이점이 있습니까?

예를 들어. 내장 함수가 "특별한" 처리를 받나요? ...실행하는 데 드는 오버헤드가 더 적나요? ..또는 단순히 자동차의 대시보드처럼 "내장"되어 있습니까?

...이러한 내장 함수의 명시적인(현재) 목록이 있습니까?

답변1

귀하의 의견을 보면 정확히 무엇인지 혼란스러워 하시는 것 같습니다.껍데기예. 커널은 시스템 관리를 담당합니다. 실제로 프로그램을 로드 및 실행하고, 파일에 접근하고, 메모리를 할당하는 등의 작업을 하는 부분입니다. 그러나 커널에는 사용자 인터페이스가 없습니다. 다른 프로그램을 중개자로 사용해야만 통신할 수 있습니다.

쉘은 프롬프트를 인쇄하고 입력 내용의 한 줄을 읽은 다음 이를 하나 이상의 명령으로 해석하여 파일을 조작하거나 다른 프로그램을 실행하는 프로그램입니다. GUI가 발명되기 전에는 쉘이 운영 체제의 기본 사용자 인터페이스였습니다. MS-DOS에서는 쉘이 호출되고 command.com사람들은 일반적으로 이를 변경하지 않습니다. 그러나 Unix에서는 오랫동안여러 개의 껍질사용자는 그중에서 선택할 수 있습니다.

그들은 3 가지 유형으로 나눌 수 있습니다. Bourne 호환 쉘은 원래 버전에서 파생된 구문을 사용합니다.본 쉘. C 쉘은 원시 구문을 사용합니다.C 쉘. 자체 구문을 만들거나 프로그래밍 언어에서 구문을 빌려오는 비전통적인 셸도 있으며 일반적으로 처음 두 가지 유형보다 덜 인기가 있습니다.

내장 명령은 다른 프로그램을 로드하고 실행하라는 요청으로 해석하는 것이 아니라 쉘이 자체적으로 실행하는 단순한 명령입니다. 여기에는 두 가지 주요 효과가 있습니다. 첫째, 프로그램을 로드하고 실행하는 데 시간이 걸리기 때문에 일반적으로 속도가 더 빠릅니다. 물론 명령을 실행하는 데 시간이 오래 걸릴수록 전체 실행 시간에 비해 로드 시간이 덜 중요해집니다(로드 시간은 상당히 일정하므로).

둘째, 내장 명령은 셸의 내부 상태에 영향을 미칠 수 있습니다. 그렇기 때문에 이런 명령을 내립니다.cd ~ 해야 하다외부 프로그램이 쉘의 현재 디렉토리를 변경할 수 없기 때문에 내장되어 있습니다. 효율성을 위해 다른 명령(예: echo)이 내장되어 있을 수 있지만 외부 명령일 수 없는 본질적인 이유는 없습니다.

내장된 명령은 사용하는 셸에 따라 다릅니다. 목록을 보려면 해당 설명서를 참조해야 합니다. 예를 들어 bash내장 명령은매뉴얼 4장). 이 type명령은 명령이 내장되어 있는지 여부를 알려줍니다(쉘이POSIX 호환) POSIX에서는 type내장이 필요하기 때문입니다. 쉘에 내장된 프로그램이 아니라면 which아마도 쉘에 내장된 프로그램에 대해 알지 못하고 외부 프로그램만 찾을 것입니다.

답변2

내장 유틸리티는 세 가지 수준으로 구분됩니다.

  • 일부 유틸리티쉘은 실제로 프로그래밍 언어의 일부입니다.예약어. 제어 흐름 유틸리티( ., :, break, continue, return, , trap, exit, exec) eval, 매개변수 관련 유틸리티( set, unset, shift, export, readonly, local1, typeset1), 별칭 유틸리티( alias2, unalias2) 및 times3입니다. 이것들특수 내장특별 대우를 받으세요:

    • 잘못된 인수가 특수 내장 명령에 전달되면 오류 메시지를 표시한 후 다음 명령으로 이동하는 대신 셸 자체가 중단될 수 있습니다.
    • 사전 할당 구문은 다른 의미를 갖습니다. 이는 유틸리티 기간 동안에만 환경에 할당하는 것이 아니라 foo=bar utility일반 매개변수 할당(예: 와 동일)입니다 .foo=bar; utility
  • 일부 유틸리티필요셸의 내부 설정에 따라 작동하기 때문에 셸 내부에서 구현됩니다. 여기에는 다음이 포함됩니다.

    • 쉘의 현재 디렉토리에서 작동하는 유틸리티(예 cd: dirs, , pushd, popd;)
    • bg, disown, fg, 와 같은 작업 제어 유틸리티 jobs;wait
    • builtin, command, hash, read, type, ulimit, 와 같은 다른 쉘 속성을 읽거나 조작하기 위한 유틸리티입니다 umask.
    • 대화형 기능(있는 경우)과 관련된 유틸리티(예 fc: history, ) 입니다 bind.
  • 일부 유틸리티는 순전히 내장 기능으로 구현되는 경우가 많습니다.성능: echo,,,,, .printftesttruefalse

다음과 같은 고급 쉘세게 때리다,케시그리고다루기 힘든일반적으로 비표준 기능을 구현하기 위한(대개 상호 작용을 위한) 내장 함수가 더 많습니다. 각 쉘의 매뉴얼에는 어떤 명령이 내장되어 있는지 알려줄 것입니다. 그러나 일부 쉘(다루기 힘든최소한) 동적으로 로드 가능한 모듈을 지원하면 더 많은 내장 모듈을 제공할 수 있습니다.

1은 POSIX에 알려지지 않았지만 ksh 및 기타 여러 쉘에서는 특별합니다.
²POSIX에서는 일반적 이지만 ksh 및 기타 여러 쉘에서는 특별합니다.
³ 에서는 가 주변에 있습니다 ksh.timestime키워드: 의 별칭입니다 { { time;} 2>&1;}. POSIX에서는 time일반 구문 분석 또는 전체 파이프라인(ksh의 경우, zsh의 bash)에 적용되는 키워드를 사용하여 외부 유틸리티가 될 수 있습니다.

답변3

내장 명령은 외부 프로그램이 아닌 쉘에서 제공하는 명령입니다. 아래 목록은 다음과 같습니다.bash내장 기능(bash 매뉴얼 페이지에도 나열되어 있습니다)zsh내장 기능. ksh를 실행하여 목록을 제공하십시오 builtin.

특정 명령이 내장되어 있는지 확인하려면 다음을 실행 하고 를 참조 type command하세요 .type fortype ls

답변4

각 배포판과 셸에는 서로 다른 명령 집합과 내장 셸 기능이 있습니다. 일반적으로 쉘의 아이디어는 가장 일반적이고 간단한 기능을 구축하여 시간을 절약하고 속도를 높이며 나머지 기능 세트와 통합하는 것입니다. 다른 시스템 프로세스를 시작할 필요가 없기 때문에 오버헤드가 훨씬 낮습니다. 그러나 혼합 및 매칭은 가능합니다. 일종의 내장 명령이 있는 셸을 실행 중일 수 있지만 해당 명령은 시스템에서도 사용할 수 있습니다. 일반적으로 내장 함수가 우선하지만 이를 제어할 수 있습니다.

를 실행하면 특정 명령이 내장 명령인지 쉽게 확인할 수 있습니다 type mycommand. 대부분의 쉘 매뉴얼 페이지에는 내장 기능 목록도 있습니다.

편집하다:type명령이 내장 명령인지, 그렇지 않은 경우 which해당 명령이 실행될 위치를 확인 하는 데 사용됩니다 .

관련 정보