업데이트 대안을 사용하여 대안을 추가하는 더 좋은 방법?


16

매뉴얼을 update-alternatives여러 번 찾아 보았지만 특정 대안을 가리키는 현재 링크를 표시하는 방법을 찾을 수 없으며 새로운 대안을 추가 할 때 해당 정보가 필요합니다.

로부터 update-alternatives수동 :

--install <link> <name> <path> <priority>

Java Runtime Edition의 새 버전을 추가하려고하는데 대체 ( <link>매개 변수)로 연결되는 현재 심볼릭 링크를 모르겠습니다 . 내가 현재하는 일은 :

sudo update-alternatives --install /tmp/randomStuff java /usr/local/java/jre1.7.0_25/bin/java 0

이 명령은 다음을 출력합니다 :

update-alternatives: renaming java link from /usr/local/bin/java to /tmp/randomStuff.

드디어 바로 다시 내 명령을 실행할 수 있도록, 내가 대안을 가리키는 된 이전 링크를 찾아 출력을 읽기 <link>매개 변수 변경 /tmp/randomStuff/usr/local/bin/java:

sudo update-alternatives --install /usr/local/bin/java java /usr/local/java/jre1.7.0_25/bin/java 0

잘 작동하지만 /tmp/randomStuff, <link>매개 변수 로 명령을 실행하는 것은 매우 어색합니다.

따라서 여기에 질문이 있습니다. (1) update-alternative특정 대안을 가리키는 현재 링크를 출력 할 수 있는 인수가 있습니까 , (2) 단순히 새로운 매개 변수를 제공하지 않고 새로운 대안을 설치할 수있는 방법이 있습니까? 전류를 유지 <link>?

답변:


13

첫 번째 질문에 대답하기 위해 다음과 같이 힌트를 드리겠습니다 --query.

   --query name
          Display information about the link group like --display does, but in a machine parseable way (see section QUERY FORMAT below).

이것으로 무장하면 링크 소스를 얻을 수 있습니다 (예 : java의 경우).

usr@srv % update-alternatives --query java
Name: java
Link: /usr/bin/java
[...]

그래서, 당신은 내 체인이 간다는 것을 알 수 /usr/bin/java -> /etc/alternatives/java -> ...있습니다.

불행히도 두 번째 질문에 대한 답변이 없습니다. 나는 얼마 전에 이것에 대한 해결책을 찾고 있었지만 아직 간단한 해결 방법이없는 것 같습니다. 당신이 할 수있는 일은 --query다음과 같이 호출 의 출력을 구문 분석하기 위해 해킹을 작성하는 것입니다.

update-alternatives --query java | /bin/grep Link | cut -f 2 -d " "

그런 다음 --install통화의 입력으로 사용할 수 있습니다 . 그러나 이것은 내 의견으로는 상당히 지저분하므로 권장하지 않습니다. 대신 galternatives대안 시스템의 프런트 엔드 인을 살펴볼 수 있습니다 . 이러한 기본 작업에 그래픽을 사용하고 싶지 않더라도 매우 편리하며 명령 줄 도구 대신이 도구를 사용하게되었습니다.

편집하다

update-alternativessymlink 명령이 무엇인지 알고 궁금한 점이 있으며 소스를 간단히 살펴 보았습니다. 물론 대안 시스템은 각 그룹에 대한 구성을 저장해야하며 관리 디렉토리 라고 하며 매뉴얼 페이지에 쓰여져 있습니다. ;-)

이 정보는 /var/lib/dpkg/alternatives기본적으로 제공됩니다. 각 파일의 두 번째 줄 은 찾고 있는 마스터 링크 를 정의합니다 . 다음과 같이 추출 할 수 있습니다.

usr@srv $ sed -ne 2p /var/lib/dpkg/alternatives/java
/usr/bin/java

그러나 이는 이전 버전의 사용자에게 해결 방법 일뿐입니다 update-alternatives.


대답 해 주셔서 감사하지만 실행중인 업데이트 대체 버전 (1.16.1.2) 버전에는 --query 또는 --display를 사용하여 링크 정보가 표시되지 않습니다. 어떤 버전을 사용하고 있습니까? sudo update-alternatives --query java Link: java Status: auto Best: /usr/local/java/jre1.6.0_45/bin/java Value: /usr/local/java/jre1.6.0_45/bin/java Alternative: /usr/local/java/jre1.6.0_45/bin/java Priority: 0
pagliuca

나는 한 1.16.10설치. 버전을 업데이트 할 수 없습니까?
binfalse

당신은 남자입니다! 두 솔루션 모두 우수합니다!
pagliuca

6

Simpleton question here : 시스템이 명령 줄로 프로그램을 호출하는 데 사용하는 링크이기 때문에 <link>항상 단순으로 검색되는 것이 which [program]아닌가?

예를 들어, 내가 얻는 pycharm의 링크를 추적합니다.

user@computer:~$ which pycharm
/usr/bin/pycharm
user@computer:~$ ll /usr/bin/pycharm
lrwxrwxrwx 1 root root 25 Mar 12  2015 /usr/bin/pycharm -> /etc/alternatives/pycharm*
user@computer:~$ ll /etc/alternatives/pycharm 
lrwxrwxrwx 1 root root 43 Mar 12  2015 /etc/alternatives/pycharm -> /opt/pycharm-community-4.0.5/bin/pycharm.sh*

그런 다음 사용할 수 있습니다.

sudo update-alternatives --install /usr/bin/pycharm pycharm /opt/pycharm-community-4.5.0/bin/pycharm.sh 0

내 새로운 pycharm 설치의 경우.

그런 다음의 출력을 사용하는 스크립트를 구성 할 수 which있습니다.


팁 주셔서 감사하지만 도움이되지 않을 때가 있습니다. update-alternatives또한 파이어 폭스 용 자바 및 플래시 플러그인을 추적 하는 데 사용 하며 항상 플러그인을 배치해야하는 경로 "/ usr / lib / mozilla / plugins"를 잊어 버립니다. 나는 사용하여 해당 경로를 찾을 수 없습니다 which또는 whereis내가 실행할 때 @binfalse의 대답은 제대로 내 컴퓨터에서 해당 경로를 반환하는 반면, 또는 나의 마음에 오는 모든 명령을 update-alternatives --query java-plugin.
pagliuca
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.