같은 역할의 여러 프로그램 혹은 다른 버전의 여러 프로그램을 바꿔가면서 사용해 봅니다.

사용자들이 직접 작성하는 실전팁!

Moderator: Dry8r3aD

Post Reply
protochaos
Posts: 1714
Joined: 2011/05/19 Thu 7:43 pm

같은 역할의 여러 프로그램 혹은 다른 버전의 여러 프로그램을 바꿔가면서 사용해 봅니다.

Post by protochaos » 2013/12/24 Tue 5:19 pm

아시는 분들은 아시겠지만, 우분투에는 update-alternatives 와 galternatives라는 프로그램이 있습니다.
GUI프로그램인 galternatives는 설치해야 하지만 말이지요.
이것이 바로 이러한 기능을 담당하는 프로그램으로, 원리는 심볼릭링크에 대한 심볼릭링크를 생성하여,
원본 심볼릭링크의 대상을 변경하여, 결론적으로 실제 실행파일에 대한 심볼릭링크의 수정없이, 대상을 바꾸는 방식으로 동작합니다.

gawk와 mawk가 설치된 경우,
설치시 자동적으로 이렇게 gawk와 mawk가 이와 같이 등록됩니다만,
원리를 알기 위해, 수동으로 해보겠습니다.

[code:2ylybzl6]
# awk에 대한 대체링크를 모두 삭제
sudo update-alternatives --remove-all awk
# gawk를 awk라는 이름으로 등록하고, /usr/bin/awk라는 심볼릭링크를 만들며 우선순위를 1로 정함
sudo update-alternatives --install /usr/bin/awk awk /usr/bin/gawk 1
# mawk를 awk라는 이름으로 등록하고, /usr/bin/awk라는 심볼릭링크를 만들며 우선순위를 2로 정함
sudo update-alternatives --install /usr/bin/awk awk /usr/bin/mawk 2
# awk로 등록된 실행파일중 사용할 것을 선택
sudo update-alternatives --config awk
[/code:2ylybzl6]

선택 명령을 실행하지 않거나, 선택하지 않은 경우 우선 순위가 높은 것이 자동으로 선택됩니다.

이렇게 --install 옵션으로 등록할 경우,
존재하는 /usr/bin/mawk에 대한 심볼릭 링크를 /etc/alternatives/awk로 자동으로 만듭니다.
awk라는 이름은 등록할 때 사용한 이름이지요.
그리고 나서, /etc/alternatives/awk에 대한 심볼릭 링크를 /usr/bin/awk로 만듭니다.
이것은 등록할 때 사용한 심볼릭 링크의 위치죠.

이후, --config로 선택을 할 경우,
/etc/alternatives/awk의 대상만을 선택한 것에 따라 바꿉니다.

그 결과, /usr/bin/awk는 수정없이 대상의 변경으로 인해 자동으로 바뀐 것과 같이 됩니다.

이것은 하나의 예제였지만,
이런 식으로 여러 버전의 프로그램이나, 동일기능의 여러 프로그램들을 같은 실행파일 이름으로 사용하면서 관리하실 수 있습니다.
이런 식으로 등록된 것이, x-www-browser, x-terminal-emulater 등등 아주 많습니다.

그러니, firefox, chrome, xxxterm, opera, safari등 여러 웹브라우져를 설치하신 경우,
어떤 것이든 상관 없이 웹브라우져를 실행시킨다면 x-www-browser라는 명령을 사용하시면 됩니다.
x-terminal-emulater의 경우도 마찬가지구요.
x-www-browser 명령 말고, sensible-browser라는 명령과 www-browser라는 명령도 있습니다.
이것은 x가 빠진 것으로 터미널에서 사용하는 Text방식의 브라우저 까지 포함한 개념입니다.
sensible-browser는 쉘스크립트로 작성되었고, GUI인지 터미널인지 판단하여, 기본적으로 사용되는 웹브라우저를 실행시켜 줍니다.

동일 역할을 하지만, 각기 기능이 다르고, 속도도 다르고, 선호도에 따라 여러 프로그램을 설치하셨거나, 그렇게 설치된 프로그램들이 많이 있을 것입니다.
또한 자신이 제작한 스크립트등의 프로그램들도 있을 수 있겠지요.
이제는 update-alternatives 명령으로 이것들을 하나의 명령으로 일원화해서 실행해보세요.
:D :D :D

Post Reply