사용자 정의 프로그램이 항상 ~/(홈) 폴더가 아닌 /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/man5월존재하지 않는 경우 만듭니다. 그런 다음 다음과 같은 내용을 원할 것입니다 ~/.profile.

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

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

관련 정보