IT/OS

[Wiki] '/bin' 디렉토리와 '/usr/bin' 디렉토리의 차이는 무엇일까? ('/bin' vs '/usr/bin')

wookiist 2017. 2. 24. 12:00

/bin 과 /usr/bin의 차이는?

우분투를 사용하다가 문득 /bin/usr/bin의 차이가 궁금해졌다.
궁금하던 차에 정리해보았다.

다양한 종류의 /bin

Linux와 Unix 계열의 OS에는 굉장히 다양한 .../bin 디렉토리가 존재한다.

  • /bin
  • /sbin
  • /usr/bin
  • /usr/sbin
  • /usr/local/bin
  • /usr/local/sbin

이런 디렉토리들은 왜 나눠져있고, 그 역할들은 무엇일까?

/bin을 분석해보자($ man hier 명령어)

터미널 또는 콘솔 창에서 다음의 명령어를 입력하면, Linux, Unix 계열의 file hierarchy에 관한 man page가 나온다.

$ man hier
'/'(root) 부터 '/var'까지 자세한 설명을 볼 수 있다.

여기서 우리가 궁금해하는 '/bin' 디렉토리에 대한 설명을 볼 수 있었다.

'/bin'
user utilities fundamental to both single-user and multi-user environments

해석하자면, "단일 사용자에게나 다중 사용자에게 모두 기본적으로 필요한 User 유틸리티" 가 되겠다.

보통 우리가 터미널, 콘솔 창에서 실행하는 명령어들은 이곳 '/bin' 디렉토리에 정리되어 있다.
그렇다면 필수적인 저 유틸리티들이 왜 각기 다른 /bin 디렉토리에 나눠져 있는 걸까? 또 /sbin은 뭘까?

/sbin의 정체 & /bin이 나눠져 있는 이유와 각 역할들

/sbin의 정체

$ man hier 명령어를 이용하면 우리가 궁금해하던 /sbin의 정체를 파악해볼 수 있다.

'/sbin'
system programs and administration utilities fundamental to both single-user and multi-user environments

해석하자면, "단일 사용자에게나 다중 사용자 환경에게 모두 기본적으로 필요한 System Program과 관리 유틸리티" 이다.

/bin과는 큰 차이가 없다. 다만, 저 안에 들어있는 프로그램이 일반 user들이 잘 쓰지 않는 System 관리를 위한 것이라는 점이 다르다.
그리고 저 유틸리티를 실행하기 위해서는 root 권한 이 필요하다.

/bin이 나눠져 있는 이유와 각 역할들

  • /bin
    일반적으로 아주 기본적인 프로그램이 위치, 특히 콘솔에서 필요로 하는 것들과 리눅스가 돌아가기 위해 가장 최소로 필요한 프로그램들이 보관되어 있다. 덧붙여, /usr 파티션이 마운트되기 이전에 사용할 수 있는 바이너리 파일들이 저장되어 있다. 이에 속하는 바이너리 파일로는 흔히 쓰는 cat 명령어나 ls 명령어 등이 위치한다.
  • /sbin
    /bin과 같은 역할을 한다. 그러나 실행하기 위해서는 root 권한이 필요하다.
  • /usr/bin
    /bin과 유사한 역할을 한다. 콘솔에서 확장된 프로그램이 들어간다.
    /bin과의 가장 큰 차이점은 general-system-wide 범위에서 사용가능하다는 점이다. 이에 속하는 바이너리 파일로는 sudo 명령어, vi 명령어 등이 위치한다.
  • /usr/sbin
    /usr/bin과 유사한 역할을 한다. 그러나 실행하기 위해서는 root 권한이 필요하다.

  • /usr/local/bin
    이곳에 위치한 바이너리 파일들과 스크립트들은 일반 사용자를 위한 프로그램이다. 다만, 이 프로그램들은 distribution package manager에 의해 관리되지 않는다. 예를들어, 사용자 본인이 직접 local directory에서 compile한 프로그램(logically compiled program)이라면, 절대로 /usr/bin에 위치시켜선 안된다. 추후 설치하는 스크립트 등에 의해 아무런 경고 없이 업그레이드되거나, 삭제될 수 있기 때문이다. 따라서 이런 프로그램들은 /usr/local/bin 디렉토리에 위치해야 한다.

  • /usr/local/sbin
    /usr/local/bin과 유사한 역할을 한다. 다른 /sbin들과 마찬가지로 실행하기 위해서는 root 권한이 필요하다.

  • ~/bin
    마지막으로 소개할 /bin 디렉토리이다. 이 폴더는 있을 수도, 없을 수도 있다. 이 디렉토리에 들어간 프로그램과 바이너리 파일들은 user-scoped 이다. 즉, 현재 홈 디렉토리의 이름을 가진 사용자에게만 한정된 바이너리 파일들이다. 따라서 여기에 설치되는 바이너리 파일들은 user를 구분한다.

마무리

이렇게 해서 /bin 디렉토리의 다양한 종류를 분석해보고 각각에 속하는 명령어들을 알아보았다.
앞으로는 잘 구분해서 헷갈리는 일이 없도록 잘 정리해보자.

참고

반응형