내장 명령과 명목상 동일한 작업을 수행 할 수있는 다른 명령간에 본질적인 차이가 있습니까?
예. 내장은 “특별한”대우를 받습니까? … 그것들을 실행하는 오버 헤드가 적습니까? .. 또는 단순히 ‘내장’일 뿐입니 까? 자동차의 대시 보드처럼?
…이 내장에 대한 명확한 (현재) 목록이 있습니까?
답변
귀하의 의견으로는 쉘 이 무엇인지 정확히 혼란스러워하는 것 같습니다 . 커널은 시스템 관리를 담당합니다. 실제로 프로그램을로드하고 실행하고, 파일에 액세스하고, 메모리를 할당하는 등의 부분입니다. 그러나 커널에는 사용자 인터페이스가 없습니다. 다른 프로그램을 중개자로 사용해야 만 통신 할 수 있습니다.
쉘은 프롬프트를 인쇄하고 사용자로부터 입력 행을 읽은 다음 파일을 조작하거나 다른 프로그램을 실행하기위한 하나 이상의 명령으로 해석하는 프로그램입니다. GUI가 발명되기 전에 쉘은 OS의 기본 사용자 인터페이스였습니다. MS-DOS에서는 쉘을 호출 command.com
했으며 다른 사람을 사용하려고 시도한 사람 은 거의 없었습니다. 그러나 유닉스에서는 오랫동안 사용자가 선택할 수있는 여러 쉘 이있었습니다.
그들은 3 가지 유형으로 나눌 수 있습니다. Bourne 호환 쉘은 원래 Bourne 쉘 에서 파생 된 구문을 사용합니다 . C 쉘은 원래 C 쉘 의 구문을 사용합니다 . 그런 다음 자체 구문을 발명하거나 프로그래밍 언어에서 빌려온 비 전통적인 쉘이 있으며 일반적으로 처음 두 유형보다 덜 인기가 있습니다.
내장 명령은 단순히 다른 프로그램을로드하고 실행하기위한 요청으로 해석하지 않고 쉘이 자체적으로 수행하는 명령입니다. 이것은 두 가지 주요 효과가 있습니다. 첫째, 프로그램을로드하고 실행하는 데 시간이 걸리기 때문에 일반적으로 더 빠릅니다. 물론 명령 실행 시간이 길수록로드 시간이 전체 실행 시간과 비교할 때로드 시간이 덜 중요합니다 (로드 시간이 상당히 일정하기 때문).
둘째, 내장 명령은 쉘의 내부 상태에 영향을 줄 수 있습니다. 외부 프로그램이 쉘의 현재 디렉토리를 변경할 수 없기 때문에 이와 같은 명령 이 내장되어 cd
있어야하는 이유 입니다. 와 같은 다른 명령 echo
은 효율성을 위해 기본 제공 될 수 있지만 외부 명령이 될 수없는 본질적인 이유는 없습니다.
어떤 명령이 내장되어 있는지는 사용중인 쉘에 따라 다릅니다. 목록을 보려면 해당 설명서를 참조해야합니다 (예 : bash
내장 명령은 설명서의 4 장에 나와 있습니다 ). type
명령이 내장 (쉘은 POSIX 호환 인 경우) 인 경우 POSIX가 그 필요하기 때문에 명령은 말할 수 type
내장합니다. 경우 which
쉘에 내장되어 있지 않은 경우, 그것은 아마 당신의 쉘의 내장 기능에 대해 알 수 없습니다 만, 단지 외부 프로그램을 찾습니다.
답변
내장 유틸리티에는 세 가지 레벨이 있습니다.
-
일부 유틸리티 는 예약어 가 아니더라도 실제로 프로그래밍 언어로 쉘의 일부입니다 . 그들은 제어 흐름 유틸리티 (되어
.
,:
,break
,continue
,return
,trap
,exit
,exec
,eval
), 파라미터 관련 유틸리티 (set
,unset
,shift
,export
,readonly
,local
¹,typeset
¹) 별명 유틸리티 (alias
²,unalias
²)과times
내강. 이러한 특수 내장 기능 은 다음과 같이 특별 처리됩니다.- 특수한 내장 함수에 잘못된 인수를 전달하면 오류 메시지가 표시된 후 다음 명령으로 건너 뛰기보다는 쉘 자체가 중단 될 수 있습니다.
- 사전 할당 구문
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
,printf
,test
,true
,false
.
bash , ksh 및 zsh 와 같은 고급 셸 에는 일반적으로 비표준 기능 (일반적으로 상호 작용을 위해)을 구현하기 위해 더 많은 내장 기능이 있습니다. 각 쉘의 매뉴얼에는 어떤 명령이 내장되어 있는지 알려주지 만, 일부 쉘 ( 최소한 zsh )은 더 많은 내장 기능을 제공 할 수있는 동적으로로드 가능한 모듈을 지원합니다.
¹ POSIX에는 알려지지 않았지만 ksh 및 기타 여러 쉘에서 특별합니다.
² POSIX에서는 보통이지만 ksh 및 여러 다른 쉘에서는 특별합니다.
³ 에서은 ksh
, times
주위에 래퍼입니다 time
키워드 : 그것의 별칭이다 { { time;} 2>&1;}
. POSIX를 사용하면 time
일반 구문 분석이나 전체 파이프 라인 (ksh, zsh의 bash)에 적용되는 키워드가있는 외부 유틸리티가 될 수 있습니다.
답변
내장은 외부 프로그램이 아니라 쉘이 제공하는 명령입니다. 다음은 bash
내장 함수 (bash 매뉴얼 페이지에도 나와 있음) 및 zsh
내장 함수 목록 입니다. ksh
를 실행하여 목록을 제공합니다 builtin
.
특정 명령이 내장되어 있는지 확인하려면을 실행할 수 있습니다 type command
. 시도 type for
및 type ls
이를 볼 수 있습니다.
답변
모든 배포판과 셸에는 기본 제공 셸 함수와 다른 명령 모음이 있습니다. 일반적으로 쉘은 가장 일반적이고 간단한 기능을 내장하여 시간, 속도 및 통합 기능을 나머지 기능 세트와 절약합니다. 다른 시스템 프로세스를 시작할 필요가 없기 때문에 오버 헤드가 훨씬 낮습니다. 그러나 혼합하여 일치시킬 수 있습니다. 무언가를위한 하나의 쉘을 실행할 수 있지만 시스템에서도 해당 명령을 가질 수 있습니다. 일반적으로 내장 기능이 우선하지만 제어 할 수 있습니다.
실행하여 특정 명령이 내장되어 있는지 쉽게 확인할 수 있습니다 type mycommand
. 대부분의 쉘 매뉴얼 페이지에는 내장 목록이 있습니다.
편집 : 사용이 type
명령은 내장인지 여부를 확인하려면, 그렇지 않은 경우 것은 which
이에서 실행 될 위치를 배울 수 있습니다.