커맨드의 실체

김강산·2023년 5월 12일
0

1. 서론

컴퓨터에게 어떤 동작을 수행시키기위해 터미널에 입력하는 문자열을 커맨드라고 합니다. 리눅스 유저라면 한번쯤은 ls, cp, rm, mv, cd 등의 커맨드를 사용해본적이 있을 것입니다. 이 커맨드들의 실체를 파헤쳐봅시다.

2. 탐구

which 커맨드를 사용하면, 대상 커맨드가 격납되어있는 디렉토리를 알 수 있읍니다.

/usr/bin/에 격납되어있읍니다. file 커맨드를 사용하여 이들의 타입을 확인해보면,

실행가능한 바이너리파일(프로그램)임을 알 수 있읍니다. 한편, cd의 경우는 which를 통해 디렉토리를 파악할 수 없읍니다.

그 이유는 cd의 정체는 바이너리파일이 아니라, 쉘의 빌트인 커맨드(https://www.gnu.org/software/bash/manual/bash.html#Shell-Builtin-Commands)이기 때문입니다. 에러 메세지에 출력되는 디렉토리들은 사실 $PATH에 지정된 디렉토리들입니다.

즉, 우리가 어떤 커맨드를 입력하였을때, 그 커맨드가 쉘의 빌트인 커맨드가 아니였을 경우, 쉘은 $PATH에 저장된 디렉토리로부터 커맨드에 대응되는 프로그램을 찾아 실행시키는것입니다.

다시 ls, cp, rm, mv로 돌아와서, 이들은 어떤 패키지에 속해있을까요? 패키지 매니저를 이용하여 알아봅시다. (pacman은 아치리눅스의 패키지 매니저입니다. 자신의 배포판에 맞는 패키지 매니저를 사용하여 확인해십시오.)

coreutils라는 패키지에 속해있음을 알 수 있읍니다. 패키지 매니저로 해당 패키지의 상세정보를 확인해봅시다.

URL(https://www.gnu.org/software/coreutils/)을 타고 들어가면 coreutils에 대한 상세한 정보를 취할 수 있읍니다. 특히, 소스코드가 공개되어 있는 링크(https://github.com/coreutils/coreutils/tree/master/src)를 타면, ls, cp, rm, mv의 소스코드를 열람할 수 있읍니다.

3. 결론

  1. 커맨드는 다음 두가지 종류로 구분된다.
    • 바이너리파일(프로그램)
    • 쉘 빌트인 커맨드
  2. 바이너리파일의 경우, $PATH의 디렉토리 중 어딘가에 격납되어있다.
profile
주로 리눅스 관련된 글을 포스팅합니다.

0개의 댓글