심볼릭 링크도, alias도, PATH도 뭔가 부족했던 당신께.
진짜 실행 흐름을 장악하는 방법이 여기 있습니다.
Node, Java, Vim, Python 버전이 어지럽게 얽힌 환경 속에서,
/usr/bin/xxx
가 어디를 가리키는지 명확히 다루실 수 있으신가요?
그렇다면, 과감히 뒤로가기를 누르셔도 됩니다!
그렇지 않고 의도된 실행 흐름 설계를 원하신다면
update-alternatives가 그 무기가 됩니다.
⚔️ 그래서 뭐가 좋은데? 삼대장 비교
방식 | 적용 범위 | 반영 시점 | 자동 전환 | 적합한 상황 |
alias | 셸 세션/사용자 수준 | 로그인 후 | ❌ 없음 | 간단한 별칭, 임시 커맨드 변경 |
심볼릭 링크 수동 수정 | 시스템 전체 | 즉시 적용 | ❌ 없음 | 단발성 대체, 경로 override용 |
update-alternatives | 시스템 전체 + 정책 기반 | 선택 후 적용 | ✅ 있음 | 다중 버전 관리에 최적 |
alias는 셸에 머무르고, symlink는 파일에 머무르며, alternatives는 시스템 실행 흐름을 다룹니다.
🧠 update-alternatives란?
Debian/Ubuntu 계열에 내장된 실행 경로 우선순위 관리 도구로:
- /usr/bin/<이름> 같은 표준 경로에 어떤 바이너리를 연결할지 중앙 정책으로 결정합니다.
- /etc/alternatives/를 경유하여 symlink를 정리하므로 관리가 체계적입니다.
- 자동 선택, 수동 고정, 완전 제거 및 복원까지 하나로 처리 가능합니다.
- --slave 옵션으로 관련 커맨드들을 한 그룹으로 통합 관리할 수도 있습니다.
📌 주요 명령 요약
sudo update-alternatives --install <공용링크> <이름> <실제경로> <우선순위>
sudo update-alternatives --config <이름>
sudo update-alternatives --set <이름> <경로>
sudo update-alternatives --auto <이름>
sudo update-alternatives --remove <이름> <경로>
sudo update-alternatives --display <이름>
sudo update-alternatives --get-selections
sudo update-alternatives --remove-all <이름>
⚙️ 우선순위와 모드 전환
🎚️ 우선순위
- --install 시 부여하는 숫자가 클수록 우선순위가 높습니다.
- 자동 모드(--auto)에서는 가장 우선순위가 높은 항목이 자동 선택됩니다.
- 수동 모드로 지정하면 우선순위와 관계없이 명시된 항목만 사용됩니다.
sudo update-alternatives --set node /usr/local/bin/node # 수동 지정
sudo update-alternatives --auto node # 자동 복귀
🔁 수동 ↔ 자동 전환
- 수동 모드 지정: --set, 또는 --config에서 수동 선택
- 자동 복귀: --auto <이름>
sudo update-alternatives --auto vim
🧾 현재 상태 확인 및 제거
sudo update-alternatives --display java
sudo update-alternatives --get-selections
sudo update-alternatives --remove-all python
🧪 실전 예시: 바이너리 통합 관리
✍️ Vim을 Neovim으로 교체
sudo update-alternatives --install /usr/bin/vim vim /usr/local/bin/nvim 100
sudo update-alternatives --config vim
🐍 Python 버전 지정
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 20
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 40
sudo update-alternatives --config python
☕ Java 다중 버전 전환
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk/bin/java 1081
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk/bin/java 1111
sudo update-alternatives --config java
✨ 왜 alias보다 강력한가?
항목 | alias | alternatives |
셸 세션 한정 | ✅ | ❌ |
시스템 전체 반영 | ❌ | ✅ |
자동 우선순위 적용 | ❌ | ✅ |
대화형 CLI 설정 | ❌ | ✅ |
연관 커맨드 그룹 묶음 (--slave) | ❌ | ✅ |
자동화/스크립트 환경 연동 용이 | 🔸 | ✅ |
alias는 마치 ‘서랍 속 메모’ 같고, alternatives는 ‘시스템의 기본 메뉴판’입니다.
🧨 마무리: 이젠 바이너리도 '정책'으로 다스리세요
CLI 커맨드가 어디를 가리키느냐에 따라, 시스템이 전혀 다르게 작동합니다.
PATH 순서만 바꾸는 수준에서 벗어나, 정책 기반 실행 통제를 경험해보세요.
/usr/bin/python → python2? python3?
/usr/bin/vim → vim.basic? nvim?
이제는 더 이상 우연이 아닌 당신의 의도가 결정하게 하십시오.
"alias는 즉흥입니다. update-alternatives는 설계입니다."
개발 환경 자동화부터 배포/이식/CI까지.
시스템의 주도권은 이제 당신의 손에 있습니다.🛠️🔥
'IT > shell' 카테고리의 다른 글
Node.js 설치했는데 node 명령어가 작동하지 않을 때 (bash: /usr/bin/node: No such file) (0) | 2025.06.23 |
---|---|
[linux][bash] 파일 크기 감시하기 (0) | 2024.11.11 |
[ssh] 명령 주기 (0) | 2022.05.18 |
[bash] 디렉토리 경로명 포함한 ls (0) | 2022.03.16 |
[shellscript] alias 무시하기 (0) | 2015.06.12 |