리눅스에서 /usr/bin과 /usr/local/bin은 모두 사용자가 실행하는 명령어 파일을 저장하는 디렉터리입니다. 겉으로는 비슷하지만, 누가 설치하고 관리하는 파일인지에 따라 역할이 구분됩니다.
가장 간단히 정리하면 다음과 같습니다.
| 경로 | 주된 관리 주체 | 일반적인 용도 |
|---|---|---|
/usr/bin |
운영체제의 패키지 관리자 | APT, DNF, RPM 등으로 설치된 프로그램 |
/usr/local/bin |
시스템 관리자 또는 사용자 | 직접 다운로드하거나 빌드하여 설치한 프로그램 |
Filesystem Hierarchy Standard에서는 /usr/bin을 대부분의 사용자 명령이 위치하는 디렉터리로 정의하고, /usr/local은 시스템 관리자가 로컬 소프트웨어를 설치하기 위한 별도의 계층으로 정의합니다.
/usr/bin의 역할
/usr/bin에는 운영체제와 패키지 관리자가 제공하는 일반 사용자용 실행 파일이 저장됩니다.
Ubuntu에서 다음과 같이 APT로 프로그램을 설치하면 실행 파일이 /usr/bin 아래에 배치되는 경우가 많습니다.
sudo apt install git설치된 실행 파일의 위치를 확인합니다.
command -v git일반적인 출력:
/usr/bin/git다른 예는 다음과 같습니다.
ls -l /usr/bin/git
ls -l /usr/bin/python3
ls -l /usr/bin/curl/usr/bin에 있는 파일은 보통 apt, dpkg, dnf, rpm 같은 운영체제의 패키지 관리 체계가 관리합니다.
따라서 직접 다운로드한 실행 파일을 /usr/bin에 복사하는 것은 권장하지 않습니다.
sudo cp myapp /usr/bin/myapp위 방식은 당장은 동작할 수 있지만 다음과 같은 문제가 생길 수 있습니다.
- 패키지 설치 또는 업데이트 파일과 충돌할 수 있습니다.
- 해당 파일을 어떤 방식으로 설치했는지 추적하기 어렵습니다.
- 패키지 삭제나 업그레이드 과정에서 덮어써질 수 있습니다.
- 운영체제 관리 파일과 직접 설치한 파일을 구분하기 어려워집니다.
/usr/bin의 파일은 패키지 관리자의 관리 영역으로 두고, 관리자가 직접 설치한 파일은/usr/local/bin을 사용하는 것이 안전합니다.
/usr/local/bin의 역할
/usr/local/bin은 시스템 관리자가 직접 설치한 일반 사용자용 실행 파일을 저장하는 디렉터리입니다.
Filesystem Hierarchy Standard에 따르면 /usr/local은 시스템 관리자가 로컬 소프트웨어를 설치할 때 사용하는 영역이며, 시스템 소프트웨어를 업데이트해도 해당 파일이 안전하게 유지될 수 있어야 합니다.
예를 들어 Gitea 공식 바이너리를 직접 다운로드하여 설치한다면 다음과 같이 배치할 수 있습니다.
sudo install -o root -g root -m 755 \
./gitea \
/usr/local/bin/gitea설치 위치를 확인합니다.
command -v gitea출력 예:
/usr/local/bin/giteaGo로 만든 프로그램을 직접 빌드하여 시스템 전체에서 사용하려는 경우에도 사용할 수 있습니다.
go build -o myapp .
sudo install -o root -g root -m 755 myapp /usr/local/bin/myapp이제 어느 디렉터리에서든 실행할 수 있습니다.
myapp/usr/local/bin은 다음과 같은 파일에 적합합니다.
- 공식 사이트에서 직접 받은 단일 실행 파일
- 소스 코드에서 직접 빌드한 프로그램
- 서버 관리자가 작성한 공용 스크립트
- 패키지 관리자를 통하지 않고 설치한 CLI 도구
- 조직 내부에서 사용하는 공용 명령어
두 경로의 핵심 차이
두 디렉터리의 차이는 실행 파일의 형식이나 기능이 아니라 관리 영역입니다.
/usr/bin
└── 배포판과 패키지 관리자가 관리
/usr/local/bin
└── 해당 서버의 관리자가 직접 관리예를 들어 같은 myapp이라는 프로그램이라도 설치 방법에 따라 위치가 달라질 수 있습니다.
APT 패키지로 설치했다면:
/usr/bin/myapp공식 바이너리를 직접 설치했다면:
/usr/local/bin/myapp직접 설치한 프로그램을 /usr/local/bin에 두면 패키지 관리자가 설치한 파일과 섞이지 않으므로 설치, 업그레이드, 삭제 경로를 구분하기 쉽습니다.
PATH와 명령어 실행 순서
터미널에서 명령어 이름만 입력할 수 있는 이유는 셸이 PATH 환경 변수에 등록된 디렉터리를 순서대로 검색하기 때문입니다.
현재 PATH를 확인합니다.
echo "$PATH"Ubuntu에서는 일반적으로 다음과 비슷한 순서를 볼 수 있습니다.
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin셸은 왼쪽 디렉터리부터 차례대로 실행 파일을 찾습니다.
따라서 다음 두 파일이 모두 존재한다고 가정합니다.
/usr/local/bin/myapp
/usr/bin/myappPATH에서 /usr/local/bin이 /usr/bin보다 앞에 있다면 다음 명령은 /usr/local/bin/myapp을 실행합니다.
myapp실제로 선택되는 파일을 확인하려면 다음 명령을 사용합니다.
command -v myapp동일한 이름으로 검색되는 모든 경로를 확인하려면 다음과 같이 실행합니다.
type -a myapp출력 예:
myapp is /usr/local/bin/myapp
myapp is /usr/bin/myapp특정 경로의 프로그램을 명확하게 실행하려면 절대 경로를 사용합니다.
/usr/bin/myapp
/usr/local/bin/myapp
/usr/local/bin의 같은 이름을 가진 파일이/usr/bin의 명령보다 먼저 실행될 수 있습니다. 기존 명령을 의도하지 않게 가리지 않도록 파일 이름과 PATH 순서를 확인해야 합니다.
새 실행 파일을 설치했는데 기존 경로가 계속 선택되면 셸이 기억한 명령 경로를 초기화할 수 있습니다.
bash:
hash -rzsh:
rehash직접 설치할 때 권장하는 방법
단일 실행 파일을 시스템 전체에서 사용하려면 cp보다 install 명령이 편리합니다.
sudo install -o root -g root -m 755 myapp /usr/local/bin/myapp각 옵션의 의미는 다음과 같습니다.
| 옵션 | 의미 |
|---|---|
-o root |
파일 소유자를 root로 설정 |
-g root |
파일 그룹을 root로 설정 |
-m 755 |
소유자는 쓰기 가능, 모든 사용자는 실행 가능 |
myapp |
설치할 원본 파일 |
/usr/local/bin/myapp |
최종 설치 경로 |
설치 결과를 확인합니다.
ls -l /usr/local/bin/myapp
command -v myapp삭제할 때는 설치한 파일을 직접 제거합니다.
sudo rm /usr/local/bin/myappAPT로 설치한 프로그램처럼 apt remove로 삭제되는 것이 아니므로, 직접 설치한 버전과 경로를 별도로 관리해야 합니다.
사용자 한 명만 사용하는 프로그램
/usr/local/bin은 일반적으로 시스템 전체 사용자를 위한 로컬 실행 파일 경로입니다. 특정 사용자만 사용할 프로그램이라면 홈 디렉터리 아래의 ~/.local/bin을 사용할 수 있습니다.
mkdir -p ~/.local/bin
install -m 755 myapp ~/.local/bin/myappPATH에 등록되어 있는지 확인합니다.
echo "$PATH" | tr ':' '\n' | grep "$HOME/.local/bin"등록되어 있지 않다면 사용하는 셸의 설정 파일에 추가합니다.
bash:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.profile
source ~/.profilezsh:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc설치 범위를 기준으로 정리하면 다음과 같습니다.
| 설치 대상 | 권장 경로 |
|---|---|
| 운영체제 패키지 관리자가 설치 | /usr/bin |
| 관리자가 직접 설치하고 모든 사용자가 사용 | /usr/local/bin |
| 현재 사용자만 직접 설치하여 사용 | ~/.local/bin |
/usr/local/bin과 /usr/local/sbin의 차이
직접 설치한 프로그램이라고 해서 모두 /usr/local/bin에 두는 것은 아닙니다.
일반 사용자가 실행하는 명령은 /usr/local/bin에 두고, 주로 시스템 관리자가 실행하는 관리 명령은 /usr/local/sbin에 두는 것이 파일 시스템 계층의 목적에 더 맞습니다.
| 경로 | 용도 |
|---|---|
/usr/local/bin |
일반 사용자도 실행하는 로컬 명령 |
/usr/local/sbin |
시스템 관리용 로컬 명령 |
예를 들어 직접 작성한 일반 변환 도구는 다음 경로가 적합합니다.
/usr/local/bin/data-converter서버 백업이나 서비스 복구처럼 관리자만 사용하는 스크립트는 다음 경로를 고려할 수 있습니다.
/usr/local/sbin/server-backup다만 실제 실행 가능 여부는 파일 권한과 사용자의 PATH 설정에 따라 결정됩니다.
설치 위치 확인 방법
명령어가 어느 경로에서 실행되는지 확인할 때는 which보다 셸 내장 명령인 command -v를 기본적으로 사용할 수 있습니다.
command -v git
command -v gitea
command -v go모든 후보와 별칭, 함수 여부까지 확인하려면 다음 명령이 유용합니다.
type -a git
type -a gitea
type -a go패키지 관리자가 설치한 파일인지 확인하려면 Ubuntu와 Debian 계열에서 dpkg를 사용할 수 있습니다.
dpkg -S /usr/bin/git출력 예:
git: /usr/bin/git반면 직접 설치한 /usr/local/bin/gitea는 일반적으로 dpkg -S에서 패키지를 찾지 못합니다.
dpkg -S /usr/local/bin/gitea설치 상태를 확인할 때는 다음 순서가 유용합니다.
command -v gitea
type -a gitea
ls -l /usr/local/bin/gitea
dpkg -S /usr/local/bin/gitea정리
/usr/bin과 /usr/local/bin은 모두 실행 파일을 저장하지만 관리 주체가 다릅니다.
/usr/bin
= 배포판과 패키지 관리자가 설치하고 관리하는 실행 파일
/usr/local/bin
= 시스템 관리자가 직접 설치하고 관리하는 실행 파일Ubuntu에서 APT로 설치한 프로그램은 패키지가 지정한 /usr/bin 등의 경로를 그대로 사용해야 합니다.
공식 사이트에서 받은 바이너리나 직접 빌드한 프로그램을 시스템 전체에서 사용하려면 /usr/local/bin에 설치하는 것이 일반적입니다. 사용자 한 명만 사용한다면 ~/.local/bin을 사용할 수 있습니다.
경로가 헷갈릴 때는 다음 명령으로 실제 실행 파일을 확인하면 됩니다.
command -v 명령어
type -a 명령어같은 이름의 실행 파일이 여러 경로에 있다면 PATH에서 앞에 있는 디렉터리의 파일이 먼저 실행됩니다. 따라서 /usr/local/bin에 파일을 설치할 때는 기존 시스템 명령과 이름이 충돌하지 않는지도 확인해야 합니다.
참고 자료
- Linux Foundation, Filesystem Hierarchy Standard 3.0 -
/usrhierarchy: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04.html - Linux Foundation, Filesystem Hierarchy Standard 3.0 -
/usr/local: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s09.html - Debian Policy Manual - The Operating System: https://www.debian.org/doc/debian-policy/ch-opersys.html
'운영체제(OS) > Linux' 카테고리의 다른 글
| 리눅스 /opt, /var/lib, /var/log 차이점 (1) | 2026.08.28 |
|---|---|
| Ubuntu 24.04 AppImage SUID sandbox 실행 오류 해결 (1) | 2026.07.18 |
| Ubuntu 24.04에서 AppImage 파일 실행하기 (0) | 2026.07.09 |
| [Ubuntu 24.04] PostgreSQL 18 + Gitea 설치 및 설정 가이드 (0) | 2026.07.03 |
| [Ubuntu 24.04] Gitea + PostgreSQL 완전 삭제 및 확인 방법 (0) | 2026.07.01 |
댓글