대체 바이너리를 사용하는 올바른 방법은 무엇입니까

대체 바이너리를 사용하는 올바른 방법은 무엇입니까

저는 Linux Mint 18 Cinnamon 64비트를 사용하고 있습니다.

7z내 시스템에는 다음 바이너리와 해당 버전이 있습니다 .

/usr/bin/7z

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

그리고

/usr/local/share/PeaZip/res/7z/7z

7-Zip [32] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21

나는 항상 후자를 사용하기 때문에 전체 경로를 작성하는 것이 점점 더 짜증나고 있습니다.

하나를 정의해야 합니까 alias, 아니면 더 깔끔한 방법이 있습니까?

답변1

위의 Rui F Ribeiro가 제공한 답변 외에도 update-alternatives한 가지를 제기하고 싶습니다. 동일한 프로그램에 사용 가능한 서로 다른 바이너리 간의 전환을 관리하는 것이 매우 편리합니다.

먼저, 설치된 바이너리가 실제 바이너리인지 /usr/bin아니면 단지 심볼릭 링크인지 확인하세요. 이는 다음을 통해 수행할 수 있습니다 ls -la.

$ ls -la $(which 7z)

# If it is a binary, it will look like this:
-rwxr-xr-x 1 root root 39 Aug 15  2016 /usr/bin/7z

# If a symlink, something like this:
lrwxrwxrwx 1 root root 20 Apr  9 12:58 /usr/bin/7z -> /some/another/path/7z

바이너리를 찾으면 다음 명령을 사용하여 현재 위치에서 이동하세요 dpkg-divert.

$ sudo dpkg-divert --divert /usr/bin/7z.dist --rename /usr/bin/7z

이제 대체 관리자를 사용할 수 있습니다. 명령의 형식은 다음과 같습니다.

$ sudo update-alternatives --install <link> <name> <path> <priority>

7z대체 그룹 에 두 개의 바이너리를 추가합니다 .

$ sudo update-alternatives --install /usr/bin/7z 7z /usr/bin/7z.dist 10
$ sudo update-alternatives --install /usr/bin/7z 7z /usr/local/share/PeaZip/res/7z/7z 20

/usr/bin/7z목록에서 우선순위가 가장 높은 바이너리를 가리키는 심볼릭 링크가 생성됩니다 . 어떤 이유로든 바이너리 간에 전환해야 하는 경우 다음을 수행하세요.

$ sudo update-alternatives --config 7z

대화형 프롬프트에서 사용할 바이너리를 묻습니다.

There are 2 choices for the alternative 7z (providing /usr/bin/7z).

  Selection    Path                                   Priority   Status
-------------------------------------------------------------------------
* 0            /usr/local/share/PeaZip/res/7z/7z       20        auto mode
  1            /usr/bin/7z.dist                        10        manual mode
  2            /usr/local/share/PeaZip/res/7z/7z       20        manual mode

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

Selection원하는 번호를 입력 하고 Enter를 누르세요. 완벽한! 이 접근 방식의 이점은 모든 개방형 셸 세션을 포함하여 전체 시스템에 즉시 적용된다는 것입니다. 별도의 조치가 필요하지 않으므로 PATH필요할 때 원본 바이너리로 다시 전환하기가 더 쉽습니다.

답변2

Debian에서 패키지 업데이트 후에도 유지되도록 바이너리 파일을 다른 바이너리 파일로 바꾸는 한 가지 방법(예: BIND 패키지의 init 파일 교체)은 파일 전송을 수행하는 것입니다.

기본적으로 파일 전송은 원본 파일을 다른 위치로 설치/이동하고 패키지 관리 시스템에 원래 위치에 영향을 주지 않고 해당 파일에 대해 이후에 설치된 업데이트를 새 위치에 배치하도록 지시합니다.

데비안에 따르면정책 매뉴얼 – 전환, 귀하의 경우:

dpkg-divert --divert /usr/local/share/PeaZip/res/7z/7z.old --rename /usr/bin/7z
cp /usr/local/share/PeaZip/res/7z/7z /usr/bin/7z

전송을 삭제하려면 다음 안내를 따르세요.

dpkg-divert --remove /usr/bin/7z

전송을 시도하기 전에 두 바이너리를 모두 백업하십시오.

더 많은 명령을 보려면 다음을 참조하세요.바이너리와 파일을 dpkg-divert로 교체

또 다른 간단한 옵션은 원본 패키지를 유지하는 것입니다. 예를 들어 패키지 관리자에게 업데이트를 적용하지 말라고 지시하고 다음과 같이 새 바이너리를 복사합니다.

echo "p7zip hold" | dpkg --set-selections

아니면 더 간단합니다:

apt-mark hold p7zip

바라보다:Debian의 패키지가 업데이트되는 것을 방지하는 방법

또 다른 깔끔한 옵션은 새로운 p7zip 버전으로 deb를 빌드하는 것이지만 방법과 정확한 단계는 패키지마다 다르기 때문에 여기서는 설명하지 않겠습니다.

답변3

다음 특정 디렉터리를 포함하도록 PATH 환경 변수를 조정할 수 있습니다 7z.

export PATH=/usr/local/share/PeaZip/res/7z:$PATH

7z이 디렉토리에 설치 하거나 /usr/local/bin링크 할 수 있습니까 ?

일반적 으로 좋은 바이너리를 찾을 수 있기 /usr/local/lib전입니다 ./usr/bin

관련 정보