본문 바로가기
운영체제(OS)/Linux

리눅스 /usr/bin과 /usr/local/bin의 차이

by JLearn 2026. 7. 17.
반응형

리눅스에서 /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/gitea

Go로 만든 프로그램을 직접 빌드하여 시스템 전체에서 사용하려는 경우에도 사용할 수 있습니다.

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/myapp

PATH에서 /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 -r

zsh:

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/myapp

APT로 설치한 프로그램처럼 apt remove로 삭제되는 것이 아니므로, 직접 설치한 버전과 경로를 별도로 관리해야 합니다.


사용자 한 명만 사용하는 프로그램

/usr/local/bin은 일반적으로 시스템 전체 사용자를 위한 로컬 실행 파일 경로입니다. 특정 사용자만 사용할 프로그램이라면 홈 디렉터리 아래의 ~/.local/bin을 사용할 수 있습니다.

mkdir -p ~/.local/bin
install -m 755 myapp ~/.local/bin/myapp

PATH에 등록되어 있는지 확인합니다.

echo "$PATH" | tr ':' '\n' | grep "$HOME/.local/bin"

등록되어 있지 않다면 사용하는 셸의 설정 파일에 추가합니다.

bash:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.profile
source ~/.profile

zsh:

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에 파일을 설치할 때는 기존 시스템 명령과 이름이 충돌하지 않는지도 확인해야 합니다.


참고 자료

반응형

댓글