로컬 실행 파일은 어디에 배치해야합니까?


62

perforce 버전 제어 클라이언트 ( p4) 용 실행 파일이 있습니다. /opt/local루트 권한이 없기 때문에 넣을 수 없습니다 . 아래에 배치해야하는 표준 위치가 $HOME있습니까?

파일 시스템 계층에는 로컬 실행 파일 / 이진 파일을 배치해야한다는 규칙이 $HOME/bin있습니까?

FHS 에 대한 Wikipedia 기사에 언급 된 그러한 협약을 찾을 수 없었습니다 .

또한 실제로 규칙이있는 경우 $HOME/bin디렉토리 경로 또는 디렉토리 위치 를 명시 적으로 포함해야 bin합니까?

답변:


64

일반적으로 비 시스템 설치 및 유지 보수 바이너리는 시스템 전체에서 여러 사용자가 액세스 할 수 있어야하는 경우 관리자가에 배치해야합니다 /usr/local/bin. /usr/local일반적으로 로컬로 컴파일되고 설치된 소프트웨어 패키지에 사용되는 완전한 계층이 있습니다 .

바이너리의 유일한 사용자 인 $HOME/bin경우 직접 설치할 수 있고 유일한 소비자가되기 때문에 설치하는 것이 적절한 위치입니다. 소스에서 소프트웨어 패키지를 컴파일하는 경우 $HOME디렉토리 에 부분 또는 전체 로컬 계층 구조를 작성하는 것이 좋습니다. 전체 로컬 계층 구조는 다음과 같습니다.

  • $HOME/bin 로컬 바이너리
  • $HOME/etc 로컬 바이너리에 대한 호스트 별 시스템 구성
  • $HOME/games 로컬 게임 바이너리
  • $HOME/include 로컬 C 헤더 파일
  • $HOME/lib 지역 도서관
  • $HOME/lib64 로컬 64 비트 라이브러리
  • $HOME/man 지역 온라인 매뉴얼
  • $HOME/sbin 로컬 시스템 바이너리
  • $HOME/share 로컬 아키텍처 독립적 인 계층
  • $HOME/src 지역 소스 코드

를 실행할 때 설치 기본값의 접두사 configure로 지정하여 설치를위한 로컬 계층 구조를 정의해야합니다 $HOME.

./configure --prefix=$HOME

이제 make && make install실행되면 컴파일 된 바이너리, 패키지, 매뉴얼 페이지 및 라이브러리가 $HOME로컬 계층 구조에 설치됩니다 . $HOME로컬 계층을 수동으로 생성하지 않은 경우 make install소프트웨어 패키지에 필요한 디렉토리가 생성됩니다.

한 번에 설치 $HOME/bin, 당신이 중 하나를 추가 할 수 있습니다 $HOME/bin$PATH또는 절대를 사용하여 바이너리를 호출합니다 $PATH. 일부 배포판은 기본적으로 포함 $HOME/bin됩니다 $PATH. 이를 테스트 echo $PATH하고 $HOME/bin존재 하는지 확인 하거나 바이너리를 $HOME/bin넣고 실행 하여 이를 테스트 할 수 있습니다 which binaryname. 로 다시 돌아 오면 $HOME/bin/binaryname기본적으로 $ PATH에 있습니다.


5
$ HOME이 noexec 마운트 파일 시스템에없는 한. / tmp /는 보통 noexec에도 마운트됩니다.
ewanm89

3
이것은 파일 시스템 계층 표준 (FHS)의 일부입니다. pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
패트릭

29
사용하지 않는 것이 좋습니다 $HOME. 이것은 전혀 관심이없는 수많은 디렉토리로 홈 디렉토리를 넘깁니다. 누가 가지고 싶어 man, lib사람의 홈 디렉토리에 등? 차라리 아래 $HOME/bin또는 아래에 계층을 만듭니다 $HOME/local. 홈 디렉토리에 10 개가 아닌 하나의 하위 디렉토리 만 추가됩니다. 은 PATH쉽게 포함하도록 구성 될 수있다 $HOME/bin/bin$HOME/local/bin.
Marco

18
하나의 옵션은 XDG basedir spec ( standardsfreefree.k / basedir-spec / basedir-spec-latest.html )과 python python.org/dev/peps/pep-0370 )
janneb

4
@janneb XDG 기본 디렉토리 사양 당신은에 만 언급 참조 $HOME/.local/share(버전 0.7 24 일 년 11 월 2010).
Piotr Dobrogost

27

으로 우서 언급 , /usr/local본질적으로의 접두사위한 것입니다, 동안, 시스템 관리자에 의해 설치된 소프트웨어 /usr배포판의 패키지에서 설치된 소프트웨어를 사용해야합니다.

이 뒤에 아이디어 (예 : 배포 된 소프트웨어와 충돌하지 않도록하는 것입니다 rpmdeb패키지)과 "로컬"접두사를 통해 관리자에게 전체 통치를 제공합니다.

즉, 관리자는 데비안과 같은 배포판을 사용하면서 사용자 정의 컴파일 된 소프트웨어를 설치할 수 있습니다.

FHS에서

/ 또는 / usr에있는 소프트웨어는 시스템 업그레이드로 덮어 쓸 수 있습니다 (분산은 이러한 환경에서 / etc의 데이터를 덮어 쓰지 않는 것이 좋습니다). 이러한 이유로 로컬 소프트웨어를 정당한 이유없이 / usr / local 외부에 두어서는 안됩니다.

사용자 별 소프트웨어를 설치할 때는 쓰기 권한이 있으므로 접두사로 사용 하는 것이 좋습니다$HOME . 개인적으로, 나는 $HOME/.local당신이 (정말로) 멋지고 깔끔한 홈 디렉토리를 어지럽히 지 않기 때문에보다 우아한 솔루션으로 사용 하고 있다고 생각 합니다!

$HOME/.local/share이미 사용된다 freedesktop.org XDG 기본 디렉토리 사양 그것이 추가 구상 많이하지 않도록, $HOME/.local/bin당신에 $PATH과가을 $HOME/.local/lib당신이 그것에있는 동안, 등.

접두사가 실제로 숨겨진 디렉토리가되지 않게하려면 다음과 같이 심볼릭 링크를 쉽게 만들 수 있습니다.

ln -s .local ~/local

사이드 노트

그것은 있음을 주목할 필요가있다 .config(안 .local/etc)에 대한 기본 값이 $XDG_CONFIG_HOME사용자 특정 설정 파일에 사용됩니다. 안타깝게도 소프트웨어의 많은 부분이 XDG를 무시하고 원하는 위치 (일반적으로 루트 $HOME) 에 구성 파일을 만듭니다 . 또한 $XDG_CONFIG_HOME기본값 $HOME/.config을 원하는 경우 설정이 해제 될 수 있습니다 .

이상하게도 배포판의 기본 구성 파일 용으로 예약 된 디렉토리가 없으므로 /etc배포판 에서 파일을 제공 했는지 또는 시스템 관리자가 파일을 편집 했는지 알 수있는 방법이 없습니다 .


1
나는 .localFHS에 대한 언급을 찾을 수 없습니다
Daniel Serodio

@DanielSerodio XDG 디렉토리 스펙에 있습니다. XDG 디렉토리 스펙이 눈에 띄게 향상되었습니다. 참조 unix.stackexchange.com/questions/316765/...superuser.com/questions/1170793/...이
ivan_pozdeev

에 대한 그 측면 노트는 /etc여러 관리자와 서버를 관리 할 때 정말 빌어 먹을 짜증나 - 그것은 정의의 트랙 파일 conf의 편집 작업 유지하는 것은 매우 어렵다.
naught101
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.