웹 서버에 prometheus를 설정하고 있는데 각 내보내기 프로그램이 $PATH의 디렉터리에 추가되어야 하는 자체 프로그램이라는 것을 알았습니다.
내 질문은 이러한 특수 디렉터리(예: 몇 가지 예를 구성하기 위해 "/usr/exporters/bin")를 만들고 거기에 모든 내보내기 프로그램을 넣고 해당 파일을 $PATH에 추가하면 어떤 이점이 있습니까? ? 아니면 바이너리를 보관하기 위한 기본 디렉터리에 프로그램을 푸시하는 것이 가장 좋습니까?
답변1
유일한 이점은 에 더 적은 디렉터리가 있으므로 $PATH
실행 파일을 찾을 때 검색할 디렉터리가 더 적다는 것입니다. 하지만 다음과 같습니다.
이 이벤트( 의 모든 디렉터리 검색
$PATH
)는 거의 발생하지 않습니다. 항목(실행 파일)은 시작 시 또는 를 통해 업데이트되는$PATH
해시 테이블에 보관됩니다 . 매번 검색할 필요가 없습니다 .bash
rehash
$PATH
이 이벤트는 비싸지 않습니다. 필요한 모든 정보(파일 존재 및 실행 허용 권한)는 파일의 디렉토리 항목에서 수집할 수 있으므로 각 파일에 액세스할 필요가 없습니다. 디렉토리를 읽으십시오.
실행 파일을 일반적인 다른 디렉터리로 이동하지 않는 이유는 다음과 같습니다.
표준이 아닌 환경을 갖게 됩니다. 도움을 요청할 때 이를 설명하려면 추가 노력이 필요할 것입니다. 특히 비표준 환경으로 인해 발생하는 문제는 해결하기가 매우 어렵습니다.
표준이 아닌 환경을 갖게 됩니다. 업데이트된 버전이 출시되면 환경이 업데이트에서 예상하는 것과 일치하지 않게 됩니다.
표준이 아닌 환경을 갖게 됩니다. 이번 주, 다음 주, 그 다음 주에 비표준 환경 업데이트를 영원히 기억하고 수행해야 합니다.
아무런 이득이 없는 원숭이 모션입니다.
답변2
일치하는 라이브러리가 있는 디렉터리에 바이너리를 보관하는 것은 매우 일반적입니다. 사용 사례는 버전 제어입니다. 여러 버전의 Python(2.7, 2.7, 3...)이 설치되어 있고 모두 필요하지만 표준을 정의하고 싶은 경우를 가정해 보겠습니다.
일반적으로 이는 예를 들어 (의 정의와 함께 ) alternatives
바이너리에 대한 제품군과 소프트링크를 사용합니다 ./usr/bin
/etc/alternatives
한 가지 주요 이점은 에서 왼쪽에서 오른쪽 순서를 사용하는 것입니다 $PATH
. 예를 들어 사전 확인을 수행하는 로컬 버전이나 스크립트(파일을 지정하기 전에 경고를 표시하는 스크립트 shred
)로 표준 명령을 재정의하는 경우 시작 부분에 나열된 디렉터리에 해당 명령이 있으므로 $PATH
로컬(사용자) 버전은 다음과 같습니다. 실행하고 표준 경로는 전체 경로를 통해서만 실행됩니다.
귀하의 질문에 대한 추가 정보: 바이너리를 이동하는 것은 좋은 생각이 아닙니다. 바이너리는 해당 디렉터리의 다른 파일에 의존할 수 있습니다. 최대한 소프트링크하세요. 아니면 도구 세트를 사용하면 alternatives
더 많은 개요를 유지하는 데 도움이 됩니다.
답변3
때에 따라 다르지...
수백 개의 이러한 프로그램이 있다면 아마도 그럴 것입니다.
그렇지 않으면 /usr/local/bin/
$PATH에 있으므로 프로그램을 적절한 사용자 디렉토리에 넣고 각 프로그램에 해당하는 소프트 링크를 /usr/local/bin/
. 완벽하지는 않지만 PATH 맹글링을 방지합니다.