update-alternatives - maintain symbolic links determining default commands

우분투에서는 update-alternatives를 통해 특정 명령에 대해 대표 프로그램을 실행하도록 되어 있는데, 예를 들어 우분투를 설치하고 난 뒤 실행하는 vim은 어떻게 실행하는 것일까?

$ which vim
/usr/bin/vim

$ ls -la /usr/bin/vim
lrwxrwxrwx 1 root root 21  6월 11 14:37 /usr/bin/vim -> /etc/alternatives/vim

vim은 vim을 실행하는 것이 아니라 /etc/alternatives/vim을 실행하도록 되어 있다. 그러면 alternatives에서는 뭘 쓰는걸까?

$ ls -la /etc/alternatives/vim
lrwxrwxrwx 1 root root 28  6월 11 14:41 /etc/alternatives/vim -> /usr/local/bin/nvim.appimage
$ ls -la /etc/alternatives/vi
lrwxrwxrwx 1 root root 18  6월 11 14:37 /etc/alternatives/vi -> /usr/bin/vim.basic
$ ls -la /etc/alternatives/editor
lrwxrwxrwx 1 root root 28  6월 11 15:27 /etc/alternatives/editor -> /usr/local/bin/nvim.appimage

/etc/alternatives역시 다른 실행파일을 단순히 가리키는 것으로 되어 있다. 따라서 우분투 위에서 vim을 실행한다는 것은 결국 /etc/alternatives가 가리키는 실행 파일을 실행한다는 것이다. 이를 어떻게 변경하는가 하면,

$ sudo update-alternatives --config vimdiff
대체 항목 vimdiff에 대해 (/usr/bin/vimdiff 제공) 2개 선택이 있습니다.

  선택       경로                        우선순� 상태
------------------------------------------------------------
  0            /usr/local/bin/nvim.appimage   100       자동 모드
  1            /usr/bin/vim.basic             30        수동 모드
* 2            /usr/local/bin/nvim.appimage   100       수동 모드

Press <enter> to keep the current choice[*], or type selection number:

이와 같이 update-alternatives를 사용해서 변경할 수 있다. 즉, update-alternatives를 사용해서 vimdiff라는 대표 프로그램을 어떤 것으로 실행할지 정한다는 것.

그래서 update-alternativesvi를 vi가 아닌 대표적인 텍스트 에디터라고 보고, 이 텍스트 에디터에 알맞은 프로그램을 연결시켜 주는 역할을 한다는 것.

$ sudo update-alternatives --install /usr/bin/vim vim /usr/local/bin/nvim.appimage 100

그래서 neovim을 vim대신 사용하고 싶다면, 위와 같이 --install 명령을 통해 --config의 후보가 되도록 추가해 주어야 한다.

# man update-alternatives
--install link name path priority [--slave link name path]...

물론 이렇게 하지 않고 직접 링크를 변경해서 사용할 수도 있다. 나도 물론 그렇게 쓰긴 했는데, 나중에는 결국 관리가 안되서 더 불편할 것 같기도 하다.