~/(홈) 폴더 대신 /opt, /srv, /usr/local 등에 사용자 정의 프로그램이 항상 설치되는 이유는 무엇입니까?

~/(홈) 폴더 대신 /opt, /srv, /usr/local 등에 사용자 정의 프로그램이 항상 설치되는 이유는 무엇입니까?

LTS 저장소는 훌륭하지만 어떤 이유로 일부 프로그램에서는 "소스에서 빌드" 접근 방식을 선호합니다. 한 가지 이유는 내가 선호하는 버전을 얻기 때문입니다(LTS의 PHP는 5.3이고 소스에서 5.4를 컴파일할 수 있습니다). nginx등도 node.js비슷합니다.

이제 모든 튜토리얼에서 , 또는 /opt와 같은 "루트 소유" 폴더에 프로그램을 설치하라고 주장하는 이유가 궁금합니다 . 다음과 같이 홈 폴더에 설치하는 것이 훨씬 쉽다는 것을 알았습니다. /srv/usr/local/홈/prahlad/프로그램/PHP-5.4

sudo한 가지 장점은 이러한 프로그램을 설치하는 데 사용할 필요가 없다는 것입니다 . 두 번째 관련 이점은 다음과 같습니다.안전우려. (가설적으로) 이러한 소스 중 하나에 악성 코드가 포함된 경우(Linux에서는 가능성이 낮지만) 어떻게 될까요? 루트 액세스를 거부하는 것이 좋지 않을까요?

루트가 소유한 폴더에 프로그램을 설치해야 하는 예가 궁금합니다.

답변1

설명서에는 다른 사람이 사용할 수 있도록 등에 /usr/local/설치 하라고 나와 있습니다./opt

홈 디렉터리에 설치하는 경우에는 본인만 액세스할 수 있습니다. 자신을 위해 컴파일하는 경우에는 괜찮습니다.

답변2

이는 엄격하고 빠른 규칙은 아니지만 기본 콘텐츠는 /opt일반적으로 자체 포함되어 있으며 실행 파일을 실행 파일 경로에 복사하거나 심볼릭 링크하거나 에 내부 폴더를 추가해야 할 수도 있습니다 $PATH. 다른 곳에 두고 사용하고 싶습니다 $HOME/bin.

그러나 기본 소스 빌드 컨텐츠는 /usr/local공유 라이브러리 및 매뉴얼 페이지를 설치할 수도 있습니다. 다른 곳에 저장하려면 일반적으로 PREFIX변수를 먼저 내보내거나 명령줄에서 제공하면 make이를 ./configure --help확인하고 설명할 수 있습니다.

이 경우 사용하려는 경로에 일부 디렉터리 계층 구조가 있어야 합니다. 다음과 같아야 합니다:

bin/
lib/
include/
share/
    man/
        man1/

설치 프로그램을 사용하면 더 많은 디렉터리를 생성할 수 있지만 manX( /usr/share/man모델 참조)가능한존재하지 않는 경우 생성하십시오. 그런 다음 다음이 필요합니다 ~/.profile. 예를 들면 다음과 같습니다.

export PATH=~/bin:$PATH
export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH
export MANPATH=~/share/man:$MANPATH

패키지가 공유 라이브러리를 사용하는 경우 이는 매우 중요합니다. LD_LIBRARY_PATH그렇지 않으면 실행 파일이 공유 라이브러리에 연결할 수 없습니다. MANPATH모든 시스템에서 작동하지 않을 수도 있고 반드시 필요한 것도 아닙니다. man foobar실패할 경우 어디서 찾아야 할지 알 수 있을 것입니다.

관련 정보