리눅스 파일 시스템에서 /usr 디렉토리의 정체

usr은 user가 아닙니다

리눅스를 조금만 써보면 반드시 마주치게 되는 디렉토리가 있습니다. 바로 /usr입니다.

저도 처음 리눅스를 쓸 때 이렇게 생각했습니다.

“아, /usr니까 user겠지. 사용자 계정과 관련된 뭔가가 들어가는 디렉토리인가 보다.”

아마 많은 초보 리눅서들이 비슷한 오해를 한 번쯤은 해봤을 겁니다. 하지만 결론부터 말하면:

/usr는 개별 “사용자(user)” 데이터를 위한 디렉토리가 아닙니다. 사용자 홈 디렉토리는 /home이 담당하고, /usr는 전혀 다른 역할을 합니다.

이 글에서는 /usr 디렉토리의 진짜 정체와 역할, 그리고 /home, /opt, /var 같은 다른 디렉토리와 어떻게 역할이 나뉘는지를 정리해 보겠습니다.


1. 먼저 결론: /usr는 “사용자 데이터” 디렉토리가 아니다



현대 리눅스에서 /usr의 위치를 딱 한 줄로 정리하면 이렇습니다.

/usr = 시스템이 사용하는 “공유 가능하고, (대체로) 읽기 전용인 프로그램·라이브러리·데이터”가 들어가는 영역

쉽게 말해서:

  • OS와 애플리케이션의 실행 파일
  • 그 실행 파일들이 사용하는 라이브러리
  • 공용으로 사용되는 매뉴얼, 아이콘, 데이터 파일

같은 것들이 들어가는 곳입니다.

반대로, 우리가 흔히 상상하는 “사용자별 문서, 설정, 다운로드 파일” 같은 것들은:

  • /home/사용자명 아래에 저장됩니다.
  • /usr와는 역할이 완전히 다릅니다.

그러니 /usr를 “user용 디렉토리”라고 생각하면 정확히는 틀린 셈입니다.


2. 그럼 usr는 뭐의 약자인가?

여기에는 약간의 역사와 논쟁(?)이 있습니다.

  • 초기 Unix 시절, /usr 아래에 실제로 사용자 홈 디렉토리가 있었던 시기도 있습니다.
  • 그래서 usr를 “user”의 줄임말로 보는 전통적인 관점이 있고,
  • 후대에는 “Unix System Resources” 같은 식으로 재해석하기도 합니다.

하지만 현대 리눅스 사용자 입장에서 중요한 건 역사적인 철자 의미보다는 “현재 역할”입니다.

리눅스 파일시스템 계층 구조 표준(FHS, Filesystem Hierarchy Standard)에서 /usr는 이렇게 정의합니다(요약):

  • 시스템 전역에서 공유 가능한(read-only 공유를 가정할 수 있는) 데이터가 들어가는 영역
  • 프로그램, 라이브러리, 매뉴얼, 공용 데이터 등

즉, 지금 우리가 사용하는 리눅스에서는:

usr가 user의 약자인지 아닌지는 사실 그다지 중요하지 않고, “여기는 시스템과 어플리케이션의 공용 리소스가 들어가는 구역”이라고 이해하는 게 더 실용적입니다.


3. /usr 아래에는 무엇이 들어 있을까?



직접 서버나 데스크톱에서 ls /usr를 쳐보면 보통 이런 디렉토리들을 볼 수 있습니다.

$ ls /usr
bin  lib  lib64  local  sbin  share  include  ...

각 디렉토리는 대략 이런 의미를 가집니다.

  • /usr/bin

  • 일반 사용자용 실행 파일(명령어)들이 들어 있습니다.

  • 예: /usr/bin/python, /usr/bin/grep, /usr/bin/curl
  • /usr/sbin

  • 시스템 관리용 실행 파일, 주로 root가 사용하는 명령어들.

  • 예: /usr/sbin/sshd, /usr/sbin/apachectl
  • /usr/lib, /usr/lib64

  • 프로그램들이 사용하는 공용 라이브러리들이 들어 있습니다.

  • 예: .so(shared object) 파일들.
  • /usr/share

  • 아키텍처에 독립적인 공유 데이터.

  • 예: 매뉴얼 페이지(/usr/share/man), 아이콘, 로케일 데이터…
  • /usr/include

  • C/C++ 헤더 파일들. 개발 툴체인에서 사용.

  • /usr/local

  • 시스템 패키지 관리자가 아닌, 로컬에서 직접 설치한 프로그램들을 위한 공간 (이건 조금 뒤에 따로 설명).

정리하자면:

/usr는 “시스템 전역에서 사용되는 프로그램과 관련 리소스의 집합” — 실행 파일, 라이브러리, 공용 데이터가 모여 있는 큰 창고 같은 곳입니다.


4. /usr vs /home vs /opt vs /var — 뭐가 어떻게 다른가?

리눅스 파일 시스템 구조가 처음엔 굉장히 헷갈립니다. 특히 /usr, /home, /opt, /var가 헷갈리기 쉬운데, 역할을 비교해 보면 이렇게 정리할 수 있습니다.

4.1 /home — 진짜 “사용자(user)”의 집

  • 경로 예: /home/alice, /home/bob
  • 사용자별:

  • 문서, 사진, 다운로드, 프로젝트 폴더

  • 사용자별 설정(~/.config, ~/.ssh 등)
  • OS를 재설치하더라도 /home만 따로 보존하는 경우가 많습니다.

개인 데이터, 개인 설정 = 거의 다 /home

4.2 /usr — 시스템과 앱의 “공용 리소스”

  • 프로그램 실행 파일: /usr/bin, /usr/sbin
  • 라이브러리: /usr/lib*
  • 공용 데이터: /usr/share

“이 시스템 전체에서 공용으로 쓰는 프로그램/라이브러리/데이터” = /usr

여기에는 “개별 사용자 계정의 파일”이 들어오지 않습니다.

4.3 /opt — “특정 앱 한 덩어리”를 넣는 공간

  • 배포판 패키지가 아닌, 별도로 배포되는 상용/서드파티 앱이 들어오는 경우가 많습니다.
  • 예: /opt/google/chrome, /opt/mycompany/app
  • 디렉토리 하나에 앱이 통째로 들어가는 패턴이 흔합니다.

“이 앱은 통째로 여기 들어있다”는 식으로 애플리케이션 단위로 관리하는 공간.

4.4 /var — 변경되는 데이터(Variable)

  • 로그: /var/log
  • 캐시: /var/cache
  • 큐, 스풀: /var/spool
  • DB, 상태 파일 등 자주 바뀌는 데이터

“자주 바뀌는(run-time) 데이터” = /var


5. 왜 /bin이 아니라 /usr/bin일까? (그리고 요즘은 더 헷갈린다)

옛날 문서를 보면 /bin, /usr/bin이 나뉘는 이유 같은 것들이 나오는데, 요즘 배포판들은 이걸 단순화해서:

  • /bin/usr/bin 심볼릭 링크
  • /sbin/usr/sbin 심볼릭 링크

로 처리하는 경우가 많습니다. (Fedora, Ubuntu 등)

즉, 지금 시스템에서는 사실상:

  • 실행 파일 대부분이 /usr/bin, /usr/sbin 아래에 있고
  • /bin, /sbin과거 호환성을 위한 앞문 같은 존재인 셈입니다.

처음 접하는 입장에서는 오히려 더 헷갈리지만, 핵심은:

“실제 프로그램이 어디 있냐?” → 대부분 /usr/bin, /usr/sbin 쪽에 있다 정도만 기억해도 충분합니다.


6. 초보 리눅서가 헷갈리지 않으려면

리눅스를 처음 쓸 때 저를 포함한 많은 사람이 겪는 혼란은 대체로 이런 식입니다.

  • /usr니까 user인가 보다…”
  • “그럼 내 프로그램은 /usr에 설치해야 하나?”
  • /home이랑 뭐가 다른 거지?”

실제로 사용할 때는 아래 기준만 기억해도 대부분의 혼란이 정리됩니다.

6.1 개인용 스크립트/툴은 어디에 둘까?

  • 나 혼자 쓰는 스크립트, 툴: 보통 ~/bin이나 ~/scripts 정도
  • PATH에 추가해서 사용하면 OK
mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc

여기에 두는 것은 “개인 영역”이기 때문에 /usr와는 다른 차원입니다.

6.2 시스템 전체에서 쓰는 커스텀 앱은?

  • 소스 컴파일해서 직접 설치하는 앱
  • AppImage, tar.gz로 배포되는 서드파티 앱

같은 것들을 시스템 전체에서 사용하고 싶다면:

  • 실행 파일/앱 본체: /opt/앱이름 아래
  • 실행용 진입점: /usr/local/bin에 심볼릭 링크

같은 패턴이 깔끔합니다.

이처럼 /usr/local은:

“배포판 패키지(apt, dnf, pacman 등)로 설치되지 않은, 로컬에서 관리하는 프로그램을 위한 공간”

으로 쓰는 것이 관례입니다.

/usr 자체보다는 /usr/local“관리자 마음대로 쓸 수 있는 전용 영역”으로 보는 쪽이 자연스럽습니다. image


7. 요약: /usr는 “사용자의 집”이 아니라 “시스템의 창고”

마지막으로 한 번 더 요약해 봅시다.

  • /usruser 데이터 디렉토리가 아니다.
  • 현대 리눅스에서 /usr는:

  • 시스템과 애플리케이션의 공용 실행 파일

  • 그들이 사용하는 라이브러리
  • 공용 매뉴얼, 아이콘, 데이터 가 모여 있는 큰 창고 같은 영역이다.
  • 진짜 사용자 개인 데이터는 /home/사용자명 아래에 있다.
  • 우리가 직접 설치한 앱은 보통 /opt, /usr/local 등을 활용해서 관리한다.

리눅스 파일 시스템 구조를 이해하기 시작하면:

  • “이 파일은 어디에 두는 게 맞을까?”
  • “이 앱은 시스템 전체에서 쓸 건가, 나만 쓸 건가?”
  • “OS를 갈아엎어도 보존해야 할 건 무엇인가?”

같은 질문에 대한 감각이 생깁니다. 그리고 그 시작점 중 하나가 바로 /usr의 정체를 올바르게 이해하는 것입니다.