강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

리눅스 쉘내부명령어와 외부명령어를 구분하는 방법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스 쉘내부명령어와 외부명령어를 구분하는 방법

 

 

 

 

필자가 많이 받는 질문 중의 한가지가 리눅스의 내부명령어와 외부명령어를 어떻게 구분하는가라는 것입니다.

 

 

 

 내친김에 이 두가지를 구분하는 방법에 대해서 간단히 설명하고자 합니다.

 

 

 

 

 

ls명령어를 사용하여 파일의 형태로 존재하는 모든 명령어들은 외부명령어입니다.

 

 

 

 , 내부명령어는 /bin/bash라는 쉘내에 내장되어 있기 때문에 파일의 형태로 존재하지 않습니다.

 

 

 

 

 

[root@su250 ~]# ls -l /sbin/ifconfig

-rwxr-xr-x 1 root root 71788 Oct 21 16:37 /sbin/ifconfig

[root@su250 ~]#

[root@su250 ~]# ls -l /bin/find

-rwxr-xr-x 1 root root 161192 Apr 30  2008 /bin/find

[root@su250 ~]#

 

 

 

 

따라서 위에서 확인한 ifconfig명령어와 find라는 명령어는 외부명령어입니다.

 

 

 

 굳이 이렇게 설명하지 않아도 /bin디렉토리나 /sbin디렉토리 그리고 /usr/bin디렉토리등에 존재하는 모든 명령어들은 모두 외부명령어입니다.

 

 

 

 

 

우선 리눅스의 내부명령어에는 다음과 같은 것들이 있습니다.

 

 

 

 아래의 예는 “man help”라고 해보시면 다음과 같은 쉘내부명령어 리스트를 차례대로 보실 수 있습니다.

 

 

 

 

 

[root@su250 ~]# man help

BASH_BUILTINS(1)                                              BASH_BUILTINS(1)

 

NAME

       bash, :, ., [, alias, bg, bind, break, builtin, cd, command, compgen, complete, con-

       tinue, declare, dirs, disown, echo,  enable,  eval,  exec,  exit,  export,  fc,  fg,

       getopts,  hash,  help, history, jobs, kill, let, local, logout, popd, printf, pushd,

       pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times,  trap,

       type,  typeset,  ulimit,  umask,  unalias, unset, wait - bash built-in commands, see

       bash(1)

 

 

 

 

MS-DOS의 내부명령어는 command.com이라는 명령어해석기내에 들어있는 것으로 어떤 경로에서든 바로 실행이 되는 것이지만 외부명령어는 파일의 형태로 존재해야만 실행이 가능한 것입니다.

 

 

 

 리눅스의 내부명령어와 외부명령어도 이와 같은 이치입니다.

 

 

 

 

 

, 리눅스에서 내부명령어는 쉘내부에 들어있는 명령어로서 어디서든 PATH와 무관하게 언제든 실행이 가능한 것입니다.

 

 

 

  하지만 외부명령어는 파일의 형태로 존재하며 PATH로 실행가능한 경로에서만 실행이 되는 명령어입니다.

 

 

 

 가장 쉽게 구분할 수 있는 것은 “which 명령어라고 해서 아래의 예와 같이 그 명령어의 경로에 파일의 형태로 존재하는 것이라면 외부명령어라고 보시면 됩니다.

 

 

 

 

 

[root@su250 ~]# which find

/bin/find

[root@su250 ~]#

[root@su250 ~]# which ifconfig

/sbin/ifconfig

[root@su250 ~]#

 

 

 

 

위의 find명령어는 외부명령어로서 /usr/find에 존재하는 명령어이고 ifconfig /sbin/ifconfig에 존재합니다.

 

 

 

 

 

하지만, 내부명령어는 파일의 형태로 존재하는 명령어가 아니기 때문에 만약 내부명령어를 which명령어로 그 경로를 확인하였을 때에는 다음과 같이 명령어경로(PATH)에 존재하지 않는다.”라고 출력합니다.

 

 

 

 

 

[root@su250 ~]# which cd

/usr/bin/which: no cd in (/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:

/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

[root@su250 ~]#

 

 

 

 

위의 예는 cd라는 내부명령어를 which로 그 경로를 확인하고자 하였으나 파일의 형태로 존재하지 않는 내부명령어이기 때문에 명령어 경로(PATH)상에 존재하지 않는다 라고 나온 것입니다.

 

 

 

 

 

help명령어의 앞부분에서도 언급하였듯이 여기서 주목 해야 하는 것은 외부명령어의 사용설명과 같은 도움말을 확인할 때에는 “man 외부명령어라고 하면 되지만 내부명령어를 man페이지로 확인하면 개별내부명령어의 도움말을 보여주지 못하기 때문에 내부명령어 전체를 포함한 bash쉘에 대한 도움말을 보여주게 됩니다.

 

 

 

 따라서 man페이지로 개별 내부명령어의 도움말을 확인하기는 어렵습니다.

 

 

 

 

 

이런 경우에 여기서 설명하고 있는 “help 내부명령어를 사용하면 된다는 것입니다.

 

 

 

 , 개별 내부명령어의 도움말을 보고자 할 때에 “help 내부명령어를 이용하면 된다라는 것이 이번 장의 결론입니다.

 

 

 

 

 

이번 help라는 명령어편에서 설명 드린 내용을 요약한다는 의미에서 다시 한번 말씀 드리자면 다음과 같습니다.

 

 

 

 

 

- 내부명령어와 외부명령어를 확실히 구분할 수 있어야 한다.

 

 

 

 

       - 내부명령어의 사용법 도움말을 확인할 때에는 “help 내부명령어를 사용한다.

 

 

 

 

       - 외부명령어의 사용법 도움말을 확인할 때에는 “man 외부명령어또는 “info 외부명령어를 사용한다.

 

 

 

 

 

이번 기회에 내부명령어와 외부명령어의 구분과 사용법을 확실히 익혀두시기 바랍니다.

 

 

 

 그리고 이 책의 “bash”편에 보시면 리눅스 쉘과 쉘내부명령어에 대한 모든 것을 아실 수 있습니다.

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,056 명
  • 현재 강좌수 :  35,908 개
  • 현재 접속자 :  250 명