본문 바로가기

프로그래밍/linux

Linux 기본 - /usr 디렉토리의 이해

/usr

/usr 계층은 파일시스템의 주요 섹션 중 하나다. 이 계층에는 시스템이 아닌 사용자가 실행할 프로그램들이 저장되며, 해당 계층에는 반드시 read-only 데이터만 존재해야한다.  FHS(파일시스템 계층 구조)간에 데이터의 공유가 가능한 데이터들이 포함되는데, 특정 호스트에 따라 달라지거나 시간에 따라 달라지는 정보들은 다른 계층에 저장된다. 또한 규모가 큰 소프트웨어 패키지들이 /usr 계층의 하위 디렉토리들을 직접적으로 사용해선 안된다. /usr 계층 하위의 디렉토리들은 다음과 같은 디렉토리와 심볼릭 링크들이 필요하다.

Requirements

/usr 계층은 대게 6가지의 하위 디렉토리를 갖고 있는데 그 종류와 역할은 아래와 같다.

bin 일반적인 유틸리티, 프로그래밍 툴과 함께 대부분의 사용자 명령어가 위치한다.(cd , python, curl 등)
include c 프로그램에서 포함되는 헤더파일들이 위치한다.
lib 라이브러리들이 위치한다. (cron 등), /lib 에 포함되지 않은 사용자를 위한 라이브러리들이 위치한다.
local 기본 os에서는 필요하지 않는 실행가능한 파일들, 라이브러리들이 위치한다.(Homebrew 등)
sbin 사용자에 의해 실행되는 시스템 데몬, 시스템 유틸리티가 위치한다.(잘 모르겠음)
share 아키텍쳐에서 독립된 데이터 파일들이 위치한다. (vim, zsh 등)

 

root를 제외한 사용자들의 write 권한이 없다.

/usr/bin : 대부분의 사용자 명령어가 위치한다.

시스템에서 실행가능한 명령어들이 위치하며, command line 실행하는 대부분의 사용자 실행파일들이 이 계층에 저장된다.

ls, cd, vi와 같은 명령어는 물론이요 perl, python 같은 스크립트 언어의 실행파일도 있다. 물론 실행파일의 경로를 변경할 수도 있다.

 

 

필자는 python의 기본 실행 경로를 anaconda python으로 옮겨놓은 상태이다.

/usr/include : c 프로그램에서 포함되는 헤더파일들이 위치한다.

C언어에서 범용적으로 필요한 헤더파일들이 저장되는 계층이다. 다른 곳에서 사용될 경우 일반적으로 심볼릭 링크를 통해 이용된다.

 

 

*.h 의 C언어 헤더파일들이 위치한다. 

/usr/lib : 프로그램과 패키지에서 사용되는 라이브러리들이 위치한다.

해당 계층에서는 사용자 혹은 shell script에서 직접 실행되지 않는 object file, 라이브러리, 내부 바이너리등이 포함된다.

어플리케이션은 `usr/lib` 계층에 있는 서브디렉토리를 이용할 수 있는데, 만약 실제로 어플리케이션이 특정 서브디렉토리를 사용한다면 모든 종속되는 데이터들 역시 해당 서브디렉토리 내부에 위치해야한다.

/usr/local : 기본 os 시스템이 사용하지 않는 파일이 위치한다.

로컬로 설치되어있는 소프트웨어들은 반드시 /usr/local 디렉토리에 존재해야한다. 하지만 /usr 디렉토리에 존재하는 소프트웨어를 업그레이드 하기 위해서 설치된 소프트웨어라면 예외로한다.(makefile 이 있거나, python 같은 경우 setup.py 와 같은 설치 시스템들이 있는 어플리케이션들은 모두 /usr/local 계층에 저장되어야한다.)

일반적으로 /usr/local 계층은 /usr 계층과 그 구조가 상당히 유사한 것을 알 수 있는데, /usr/bin 과 /usr/lib 와 같은 디렉토리들은 보통 apt 혹은 yum 과 같은 명령어를 통해 설치되는 소프트웨어들을 위해 존재한다.

 

 

apt 명령어로 man을 설치한 결과 /usr/bin 에 위치하는걸 볼 수 있다.

 

pip 명령어로 requests 를 설치한 결과 /usr/local 에 위치하는 것을 볼 수 있다.

/usr/sbin: 필수항목이 아닌 시스템 표준 바이너리

sbin에서 's'는 'system'의 s이다. 해당 계층은 /usr 디렉토리와 비슷한 역할을 하지만, 사용자들이 일반적으로 잘 실행하지 않는 시스템들이 저장된다. 그렇기 때문에 일반적으로 sbin 계층에 있는 프로그램들을 실행하기 위해서는 root 권한이 필요하다.

 

 

nginx가 대표적으로 sbin에 설치되는 프로그램이다. 역시 사용하기 위해선 root 권한이 필요하다.

/usr/share: 아키텍쳐에서 독립적인 파일들이 위치한다

해당 계층에는 구조에 영향을 받지 않는 텍스트 파일들이 위치한다. 이 계층에 존재하는 파일들은 모든 계층에서 공유가 가능하다.

 

 

 

참고

http://www.pathname.com/fhs/pub/fhs-2.3.pdf#page25

http://blog.taylormcgann.com/2014/04/11/difference-bin-sbin/

https://askubuntu.com/questions/1148/when-installing-user-applications-where-do-best-practices-suggest-they-be-loc