/ opt와 / usr / local의 차이점은 무엇입니까?


403

에 따라 파일 시스템 계층 구조 표준 , /opt"애드온 애플리케이션 소프트웨어 패키지의 설치"를위한 것입니다. /usr/local"소프트웨어를 로컬로 설치할 때 시스템 관리자가 사용"입니다. 이 사용 사례는 매우 비슷해 보입니다. 배포판에 포함되지 않은 소프트웨어는 일반적으로 선택한 특정 운율 또는 이유없이 /usr/local또는 기본적으로 설치되도록 기본적으로 구성됩니다 /opt.

내가 누락 된 차이점이 있습니까, 아니면 둘 다 같은 일을하지만 역사적 이유로 존재합니까?


3
내 이해는 파일 시스템 /usr/local의 로컬 버전이며 기타 사항에 대한 자리 표시 자입니다. /usr/opt
yasouser

5
Ask Ubuntu 와 비슷한 질문 , 수퍼 유저
kenchew

역사적인 이유에 대한 논제 : bin, sbin, usr / bin, usr / sbin split 이해 .
Alexey

답변:


357

모두가 운영 체제에 속하지 않는 파일을 포함하도록 설계, 동안 /opt/usr/local같은 파일 집합을 포함하는 것은 아니다.

/usr/local는 일반적으로 make명령 (예 :)을 사용하여 관리자가 빌드 한 파일을 설치하는 장소 ./configure; make; make install입니다. 아이디어는 운영 체제의 일부인 로컬 파일을 덮어 쓰거나 덮어 쓰는 운영 체제의 일부인 파일과의 충돌을 피하는 것입니다 (예 : 로컬 대안 인 /usr/bin/fooOS의 일부 임 /usr/local/bin/foo).

아래의 모든 파일 /usr은 OS 인스턴스간에 공유 할 수 있지만 Linux에서는 거의 수행되지 않습니다. FHS는 /usr읽기 전용으로 정의되어 있지만 /usr/local/bin소프트웨어의 로컬 설치가 성공하려면 읽기 / 쓰기가 필요하므로 약간 모순되는 부분 입니다. FHS의 주요 영감 원인 SVR4 파일 시스템 표준은 이 문제를 극복하기 위해 피하고 /usr/local사용 /opt/local하는 것이 좋습니다 .

/usr/local원래 BSD의 유산입니다. 그 당시의 소스 코드 /usr/binOS 명령에 있었다 /usr/src/bin하고 /usr/src/usr.bin, 로컬 개발 명령의 소스에있는 동안 /usr/local/src, 그들의 바이너리 /usr/local/bin. 포장에 대한 개념은 없었습니다 (타르볼 외부).

반면에 /opt번들로 제공되지 않은 패키지 (즉, 운영 체제 배포의 일부가 아니지만 독립적 인 소스에서 제공하는 패키지)를 설치하기위한 디렉토리는 각각 자체 하위 디렉토리에 있습니다. 이들은 독립적 인 타사 소프트웨어 배포자가 제공하는 전체 패키지로 이미 구축되어 있습니다. 다른 /usr/local패키지 와 달리이 패키지는 디렉토리 규칙을 따릅니다 (또는 최소한 있어야합니다). 예를 들어, someapp로 설치되는 /opt/someapp자사의 명령 존재 중 하나, /opt/someapp/bin/foo그 구성 파일에있는 것 /etc/opt/someapp/foo.conf, 그 로그 파일 /var/opt/someapp/logs/foo.access.


53
/ usr / local, 자체, 사내, 컴파일 및 유지 관리 소프트웨어 / opt는 자체 외부의 사전 패키지 바이너리 / 응용 프로그램 번들 설치 영역입니다. 흠 ... 우리는 C가 없습니다 : \ 프로그램 파일을 ;-) 모든 것을
Nikhil Mulley

2
"반면, / opt는 번들로 묶이지 않은 패키지를 설치할 디렉토리입니다."번들로 묶이지 않은 패키지는 무엇을 의미합니까?
케빈 휠러

1
@KevinWheeler 다음 문장에서 설명합니다. 번들 없음은 운영 체제 배포판의 일부가 아니지만 독립 소스에서 제공하는 패키지를 의미합니다.
jlliagre

2
@jlliagre centos docs * 상태 "예를 들어, / usr / 디렉토리가 원격 호스트에서 읽기 전용 NFS 공유로 마운트 된 경우 / usr / local / 디렉토리 아래에 패키지 나 프로그램을 설치할 수 있습니다" 누가 옳은지는 모르겠지만 FHS가 약한 지역에 대한 귀하의 주장과 모순되는 것 같습니다. (* source centos.org/docs/5/html/5.1/Deployment_Guide/… )
Kevin Wheeler

1
@KevinWheeler 내가 말하는 약점입니다. 원격 읽기 전용 디렉토리에 패키지 또는 프로그램을 설치하는 것은 불가능합니다. 해결 방법은 로컬 파일 시스템을 / usr / local에 마운트하는 것이지만 제대로 설계된 것보다 임시 작업처럼 보입니다.
jlliagre

84

기본적인 차이점은 /usr/local시스템 패키저가 관리하지 않지만 여전히 표준 유닉스 배포 규칙을 따르는 소프트웨어입니다.

당신이 가지고있는 이유 /usr/local/bin, /usr/local/sbin /usr/local/include등 ...

/opt반면에 이것을 따르지 않고 모 놀리 식 방식으로 배포되는 소프트웨어를위한 것입니다. 여기에는 일반적으로 "Windows"스타일로 패키지 된 상용 및 / 또는 크로스 플랫폼 소프트웨어가 포함됩니다.


12
나는 당신의 모 놀리 식 요점에 동의하지 않습니다. FHS 표준에 따르면 / opt 하위 디렉토리에 설치된 패키지에는 호스트 별 파일이 각각 / etc / opt / package (구성 파일의 경우 / etc / opt / package) 및 / var / opt / package (로그, 스풀 등)의 / opt 외부에 설치되어 있어야합니다. / opt는 실제로 / usr / local보다 유닉스 배포 규칙에 더 가깝습니다.이 규칙은 모든 것을 읽기 전용이어야하지만 명백한 이유는없는 디렉토리에 배치합니다.
jlliagre

5
물론, opt 패키지를 만들고 FHS 준수를 주장하고 싶었다면. 그렇지 않으면 표준이 "가이드 라인"이라고 부르는 것입니다. NetBeans가 / etc / opt / netbeans를 사용하지 않기 때문에 시스템 전체의 경우 / opt 또는 단일 사용자의 경우 $ HOME / .local / opt에 넣지 않아도됩니다.
jla

1
@jla 귀하의 마지막 의견이 저에게 직접 전달되었다고 생각하므로 OP 또는 답장 작성자에게 다른 사람에게 회신 할 때 @ xxx를 사용하십시오. / etc / opt에 대해 FHS는 권장 위치 (가이드 라인)가 아니라 필수 위치라고 말합니다. 귀하 또는 Netbeans 개발자는 해당 표준을 시행 할 권한이 없기 때문에 해당 표준을 자유롭게 위반할 수 있지만 잘못된 행동을하는 것은 아닙니다. 불행한 오해 나 고의적 인 위반 일뿐입니다.
jlliagre

8
@jlliagre 시스템 관리자 인 FHS는 일련의 지침입니다. / opt 디렉토리는 모 놀리 식 / opt / <package> 또는 / opt / <provider> 소프트웨어를 배치 할 수있는 상식적인 장소입니다. <package | provider> / all / data / required / to / support를 사용하려는 패키지를 설치하면 공급자가 최신 FHS의 모든 세부 사항을 따르지 않아도 opt /가됩니다. 이메일을 보내거나 버그를보고 할 수도 있지만, 시스템의 FHS에 대해 더 나은 느낌을주기 위해 모 놀리 식 패키지를 다른 곳에 두지 않을 것입니다.
jla

1
@jlliagre 나는 / opt에 많은 것들을 설치했고 / etc / opt에 파일이 생성되지 않았다. 할까요?
erm3nda

18

그것들은 실제로 매우 유사하며, 하나 또는 다른 것을 사용하는 것이 더 많은 의견의 문제입니다. Linux 저널은이 정확한 주제에 대한이 지점 / 카운터 포인트 토론을 여기에서 수행했습니다 .


9
이런. 나는 자신을 "거룩한 전쟁"으로 끌어들이려고하지 않았다.
패치

13

개인적으로 Bill은 @philfr의 링크에서 다음과 같이 말했습니다.

개발 시스템 또는 샌드 박스에서 / opt 디렉토리를 사용하여 사물을 던지고 작동하는지 확인할 수 있습니다. 나는 그것을 시험해보기 위해 스스로 물건을 포장하는 노력을 기울이지 않을 것임을 알고 있습니다. 앱이 작동하지 않으면 / opt / mytestapp 디렉토리를 rm으로하면 해당 애플리케이션은 히스토리입니다. 대규모 배포를 실행하는 경우 (패키지 앱을 수행하는 경우가 있음) 패키징이 의미가있을 수 있지만 많은 경우 / opt에 항목을 넣는 것이 좋습니다.

불행히도 대부분의 make install스크립트는 /usr/local심볼릭 링크를 만드는 대신 파일을 푸시합니다 :-/


2
요점이 뭐야? 어쨌든 심볼릭 링크를 만들려면 원본 파일을 먼저 넣으십시오.
Let_Me_Be

8
make install파일을 밀어 넣는 대상 에 대해 언급하기 만하면 됩니다 /usr/local. 이 기능은 스크립트에 --prefix=명령 행 매개 변수를 전달하여 쉽게 변경 ./configure하거나 ./configure스크립트 가없는 경우 다음 make과 같이 대상에 매개 변수를 전달할 수 있습니다 make --prefix=/usr install.
Sean C.

3
/ opt가 $ PATH에 포함 된 표준 디렉토리입니까? / usr / local은 알고 있습니다.
LawrenceC

5
@Let_Me_ 이전 버전을 유지하는 것이 매우 쉽다는 이점이 있습니다. /opt/foo-1.1and 에 위치한 두 가지 버전의 'foo'가 있다고 가정 해 봅시다 /opt/foo-1.2. 업그레이드 할 때 foosymlink는 /usr/local/binfoo-1.2 를 가리 킵니다. 어떤 이유로 롤백해야하는 경우 symlink를 foo-1.1을 가리키는 링크로 바꿉니다. 몇 주 후에 1.2가 정상이면 quick rm -rf /opt/foo-1.1은 이전 버전을 빠르고 깨끗하게 제거합니다.
pepoluan

7
@ultrasawblade 아니오, 그렇지 않습니다. 절대해서는 안됩니다. 결국 FHS에 따르면 / opt는 패키지 이름을 가진 하위 디렉토리로 세분되어야합니다. 모든 것을 PATH에 넣는 것은 재앙에 확실한 방법입니다. 오히려 앱은 / opt 아래에 설치되어야하며 사용자가 호출 한 프로그램을 / usr / local / bin (또는 sbin)에 심볼릭 링크해야합니다.
pepoluan

11

첫째, 나는 엄격한 대답이 없다고 생각합니다. 배경에 따라 관리자마다 의견이 다릅니다. 역사적으로 /usr/local가장 먼저 나타났습니다. IIRC 버클리에서 열린 대회였습니다. System V가 개발되는 동안 어느 시점에서 내가 잘못 생각하지 않으면 (이것은 모두 오래 전에 기록하지 않았지만) /usr읽기 전용 으로 마운트하려는 결정이나 소망이 있었지만 , 새로운 소프트웨어를 추가 할 수 없다는 의미입니다. 그것이 /opt 발명 된 이유 일 수 있습니다 . 그 일이 벌어 질 때, /usr그 아이디어에 썼던 기존의 소프트웨어가 너무나 많았 기 때문에 실제로는 불가능했습니다.

개인적으로 선호하는 것은 /opt각 제품마다 별도의 하위 디렉토리입니다. 이로 인해 제품 제거가 간단 해 rm -fr집니다. 그러나 모든 소프트웨어가 좋은 패키지 관리자를 통해 설치되어있는 경우, 그것은 중요하지 않으며, 설치 소프트웨어가 엄격하게이 규칙을 준수하고, 어딘가에서 구성 등을 작성하지 않는 경우 /usr, 그것은 있지만, 하나 중요하지 않습니다 반대의 이유로.


1
"" "모든 소프트웨어는 좋은 패키지 관리자를 통해 설치됩니다" "" "는 자주 사용하지 않는 소프트웨어 만 사용하지 않으면 불가능합니다.
Pacerier

1
@Pacerier 가능합니다. 사용하는 배포판에 따라 다릅니다. 소프트웨어가 무엇이든, 아마도 Arch User Repository에 있으며, 그렇지 않은 경우 PKGBUILD는 비교적 작성하기 쉽습니다.
StarlitGhost 10

9

이 문제에 약간의 차이가 있습니다. jlliagre답변
에있는 모든 것이 정확하지만 클러스터에 소프트웨어를 배포 할 때 실제 응용 프로그램은 기본 환경 변수와 기본 libs 재사용으로 귀착됩니다.

간단히 말해 - /usr/local모든 자식 DIRS 적절한 ENV 같은 바르에 PATHMANPATH, 그리고 /usr/local/lib{,64}에 ldconfig를의 ( /etc/ld.so.conf.d/).

/opt/OTOH는 — 시스템에 여러 버전이나 충돌하는 패키지가 공존해야 할 때 유리하지만, 일종의 환경 관리 (예 : 환경 모듈 또는 소프트웨어 모음 )가 필요하며 잠재적으로 "폐기"될 수 있다는 단점이 있습니다. "각각의 설치는 /opt완전히 자체 포함될 수 있으므로 공유 라이브러리를 복제하여 저장 공간 .

의 공유 특성을 위해 /usr/local일하기 위해, 예를 들어, 바이너리가 직접 설치되어 있다고 가정 /usr/local/bin(과 사람의 적절한 할 페이지 /usr/local/share/man/...)보다는 /usr/local/app/{bin,share/man,...}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.