바이너리 파일과 매뉴얼 페이지 경로의 차이점

바이너리 파일과 매뉴얼 페이지 경로의 차이점

시스템에는 종종 여러 버전의 바이너리가 있으며 어떤 버전을 선택하느냐에 따라 달라집니다 $PATH. 예를 들어 제가 작업 중인 시스템에는 여러 버전이 있습니다.

$ which sort
~/coreutils-8.25/bin/sort
$ ~/coreutils-8.25/bin/sort --version | head -n 1
sort (GNU coreutils) 8.25
$ /bin/sort --version | head -n 1
sort (GNU coreutils) 8.4

제가 사용하고 있는 시스템에서는 sort그대로 호출하여 GNU coreutils 8.25 버전을 선택합니다 PATH. 그러나 MANPATH시스템의 환경 변수는 sortGNU coreutils 8.4의 매뉴얼 페이지가 표시되도록 설정되어 있습니다. /bin/sort), 이는 우선순위 문서가 있는 바이너리가 아닙니다).

이 상황은 세 부분으로 구성된 질문을 만듭니다.

첫째, 반영된 양식을 man사용하거나 생성하도록 지시(또는 셸)하는 쉬운 방법이 있습니까 ? 아니면 수동으로 수행해야 합니까(예: 각 항목과 관련된 매뉴얼 페이지의 경로를 찾은 다음 동일 경로가 변경될 때마다 이러한 경로가 연결된 순서를 반복해야 합니까 ? 및 사이에 일관성을 설정 하는 메커니즘이 있는 경우 예상되는 매뉴얼 페이지가 자동으로 표시되므로 기본적으로 사용되는 버전이 아닌 다른 버전의 매뉴얼 페이지를 실수로 읽는 문제를 방지할 수 있습니다.MANPATHPATHPATHPATHPATHPATHMANPATH

둘째, 기본 매뉴얼 페이지에 대한 경로를 빠르게 결정할 수 있는 명령이 있습니까(예: which "man sort"실행 시 표시되는 매뉴얼 페이지에 대한 경로를 보고하는 와 같은 명령 man sort). 예를 들어, 를 입력할 때 man sort호출기로 전송되는 시스템의 특정 파일을 나타내지는 않습니다.

man ~/coreutils-8.25/bin/sort셋째, 관련 파일을 추적할 필요 없이 명령의 명시적 버전(제 GNU coreutils 8.25 버전의 매뉴얼 페이지와 유사)에 대한 매뉴얼 페이지를 얻을 수 있는 방법이 있습니까? 제 경우에는 ~/ coreutils-8.25/share/man/man1/sort.1 또는 ~/coreutils-8.25/man/sort.1).

답변1

~을 위한현지의이와 같은 설치의 경우 일관된 결과를 얻기 위해 쉘 스크립트 를 사용하여 및 PATH값 을 설정합니다. 그런 소품이 없었다면LD_LIBRARY_PATHMANPATH아니요자동적이고 일관된 결과를 얻으세요.

다음은 오래된 예입니다.

#!/bin/bash
# $Id: with-ncurses,v 1.1 2006/09/02 23:04:39 tom Exp $
export LIBS="-lncursesw"
for prefix in \
        /usr/local/ncurses6
do
        test  -f $prefix/lib/libncursesw.so && break
        test  -f $prefix/lib/libncursesw.a  && break
done

if [ -d $prefix/include/ncursesw ] ; then
        export CPPFLAGS="-I$prefix/include/ncursesw $CPPFLAGS"
        if [ $prefix != /usr ] ; then
                export CPPFLAGS="-I$prefix/include $CPPFLAGS"
        fi
fi

if [ $prefix != /usr ] ; then
        export PATH=`newpath -bd $prefix/bin`
        export LD_LIBRARY_PATH=`newpath -n LD_LIBRARY_PATH -bd $prefix/lib`
        export LIBS="-L$prefix/lib $LIBS"
        # this doesn't work for db30:
        # export LIBS="-static -L$prefix/lib $LIBS -shared"
fi

case `partition` in
rh*|md*)
        export MANPATH=$prefix/man:`manpath`
        ;;
*)
        export MANPATH=$prefix/man:`manpath -q`
        ;;
esac
eval $*

이런 스크립트를 만들어 보세요가지고 다닐 수 있는MANPATH이는 어떻게 사용하는지에 대한 기준이 없기 때문에 문제가 됩니다 . 그러나 특정 시스템에 대해서도 유사한 조정을 수행할 수 있습니다.

그건 그렇고, 이 스크립트는newpath이러한 변수를 수정하고 중복을 피하십시오.

답변2

2. 당신은 거의 그것을 갖게 될 것입니다.  man -w sort보여줘여기서는 맨 페이지를 가져옵니다 sort.

1과 3. 아마도 그렇지 않을 것입니다. 맨 페이지는 어디에나 있을 수 있기 때문입니다.
3. 무차별 검색을 수행할 수 있습니다.

find / -name "sort.1*"

답변3

~/.bashrc또는 에 다음을 추가하세요 ~/.profile.

export MANPATH="$HOME/coreutils-8.25/share/man:$(manpath)"

그러면 기본 MANPATH(명령으로 제공됨 manpath) 앞에 맨 페이지 트리가 $MANPATH에 먼저 배치됩니다.

답변4

실행 파일 옆에 매뉴얼 페이지를 놓고(즉, 실행 파일은 에 있고 /somewhere/bin매뉴얼 페이지는 에 있음 /somewhere/man/manSECTION) 다음을 사용하고 있다고 가정합니다.manpath대부분의 Linux 시스템과 FreeBSD 및 OS X에서와 같은 명령을 실행하면 "PATH"와 평행 manpath한 변수가 생성됩니다 .MANPATH

unset MANPATH
MANPATH=$(manpath)

관련 정보