`/ usr` 디렉토리의 이론적 근거는 무엇입니까?


107

루트 디렉토리 아래의 많은 디렉토리 이름을 복제하는 여기/usr설명 된 "유닉스 시스템 자원"또는 디렉토리에 대한 이론적 근거는 무엇입니까 ?/

내 목적 : 나는 Oracle JDK를 가장 이른 시간에 설치하고 이번에는 그것을 넣기로 결정 /home/user했으며 단일 사용자 컴퓨터에서 나쁜 생각인지 확인하기 위해 조금만 읽었습니다.


1
홈 디렉토리는 타사 소프트웨어를 루트가 아닌 것으로 설치하기에 완벽한 장소입니다.
Lekensteyn

9
... /usr여러 해 동안 숨겨진 "사용자"디렉토리를 의미 한다고 생각했기 때문에 슬픈 실현 ....
Govind Rai

6
나는 이것이 항상 "사용자"라고 진지하게 생각했다. 사용자 이진처럼
Tanner Babcock

답변:


168

답의 짧은 버전과 긴 버전이 있습니다 ...

짧은 버전 :

링크가 이미 말했듯 /usr시스템 전체읽기 전용 파일을 위한 장소입니다 . 설치된 모든 소프트웨어가 거기에 있습니다. 그것은의 이름을 중복되지 않는 /제외 /bin하고 /lib다른 목적으로, 원래 :하지만, /bin, /lib단지 바이너리와 라이브러리를위한 부팅에 필요한 , 동안 /usr/bin, /usr/lib다른 모든 실행 파일 및 라이브러리입니다. (지금 좋은 소년이되고에 대해 묻지 마십시오 /sbin. 이것은 결국 짧은 버전입니다)

요즘 우분투를 포함한 대부분의 최신 배포판은에서 몇 개의 파일이 없으면 제대로 부팅 할 수 없기 때문에 "부팅에 필요"와 구분이 줄어들지 않았습니다 /usr. 통합을 향한 강한 움직임이 이유입니다 /usr/bin/bin그래서 아마도 가까운 미래에, (아마도 우분투 12.10는?) /bin에 심볼릭 링크 될 것입니다 /usr/bin.

하지만 어쩌면 당신은 혼란 /usr/usr/local? 그렇기 때문에 많은 중복 된 디렉토리 이름이 있어야합니다 . 나중에 더 자세히 ...

긴 버전 :

70 년대에 유닉스 (예, 유닉스, 리눅스 이전의 방식)에서 플로피는 공간이 거의 없었으며 (HD는 기억 나지 않습니까?) 주어진 시점에서 시스템 바이너리의 수가 너무 많아서 크기와 크기가 너무 커지지 않았습니다. 단일 디스크에 맞았 기 때문에 개발자는 여러 미디어에 디스크를 분할하여 새로운 마운트 지점을 만들어야했습니다. /bin파일 시스템이 가득했습니다, 그래서 그들은에서 새로운 바이너리를 설치 ... /usr/bin. 그리고 /usr당시에는 ... 사용자 디렉토리 였습니다 !

(거의 당황 종종 농담 / 지식으로 이야기) 분할이 일어난 후, 그들은에 갈 것입니다 무슨 결정하는 "인공"정당화 (및 기준)을 생성하기 시작 /bin하고 무엇을 갈 것을 /usr/bin. 비공식 규칙은 "필수"항목은 /bin이고 "나머지"는 간다 /usr/bin. 와 동일합니다 /lib. 오래지 않아 /usr시스템 관련 디렉토리가 혼잡 해져서 사용자 디렉토리와 혼합되었습니다. 따라서 /home모든 사용자 관련 디렉토리를 유지 /usr하고 시스템 "물건"에 대해서만 깨끗하게 유지하기 위해 탄생했습니다 .

FHS가 존재하기 오래 전입니다. 그것이 만들어 졌을 때, 그것은 현재의 전통을 받아들이고 공식화하고 그 이름을 유지 /usr했지만, 그 당시에는 이미 "사용자"와는 아무런 관련이 없었습니다. 그래서 그래, 멋진 이름 " U NIX ource의 r에 epository"또는 " U NIX 템의 r에 esources는"모든 만들어 낸 이름입니다, 그것은 어쨌든 이름을 바꾸려면 너무 늦었어요. (그러나 합병하기에는 너무 늦지 않았습니다 /bin)

"좋아, /usr/sbin어때?" , 물어. 젠장, 네가 잊어 버렸으면 좋겠다. Ok ... /usr/sbin는 and와 root같이 사용자 만 실행할 수있는 (또는 의미있는 경우에만) 명령을위한 것 입니다.mountfdisk

"그러나 그것은 거의 같지 /bin않습니까?" . 예, 물론 ...

"잠깐만 요, 그럼 왜 /sbin너무 있나요? 말이되지 않습니다!" . 글쎄요, 그게 .. 실수 .. 흠 ..

봐봐, 너 뒤에 3 개 달린 원숭이!

자, 당신은 충분히 산만 해 졌기를 바랍니다. 계속 ...

(내가 부정 행위하고 있다고 생각한다면, 그렇습니다. 그러나 "공식적인"대답은 "루트 만 실행할 수 있고 마운트하기 전에 반드시 사용할 수있는 필수 명령 /"입니다. " 진실은 : 그 선은 실제로 흐릿하고, 단지 "고착 된"많은 레거시 이름들이 있으며 이제는 제거하기가 매우 어렵다는 것입니다.

온 더 에 대한 사례 /usr병합 에서, systemd문서 :

/ bin, / sbin 및 / lib에 대한 / usr과 별개의 역사적 정당성은 오늘날 더 이상 적용되지 않습니다. 더 빠른 하드 디스크에서 도구를 선택하고 (더 비싸기 때문에 크기가 작음) 느린 / usr 파티션을 마운트하는 데 필요한 모든 도구를 포함하도록 분리되었습니다. 오늘날, 초기 부팅 과정에서 initramfs에 의해 별도의 / usr 파티션이 이미 마운트되어 있어야합니다. 또한 현재 상태의 / bin 및 / sbin에있는 많은 도구는 이미 사전에 마운트 된 / usr없이 실행할 수있는 기능을 잃었습니다. 더 이상 운영 체제를 여러 계층으로 분산시켜야 할 이유는 없으며 목적을 잃었습니다.

/usrRob Landley 의 스플릿과 그 이론적 근거 에 대한 놀라운 글 :

bin, sbin, usr / bin, usr / sbin split 이해

요즘

현재 설치 디렉토리와 관련하여 이해하는 가장 좋은 방법은 다음과 같이 생각하는 것입니다.

  • /usr -OS에 의해 설치되거나 제공되는 모든 시스템 전체의 읽기 전용 파일

  • /usr/local-로컬 관리자 (일반적으로 사용자)가 설치 한 시스템 전체의 읽기 전용 파일. 그리고 이것이 대부분의 디렉토리 이름 /usr이 여기에 복제 된 이유 입니다.

  • /opt-시스템 전체의 읽기 전용 및 자체 포함 된 소프트웨어에 적합합니다. 그 동안 자신의 파일을 분할하지 않는 소프트웨어입니다 bin, lib, share, include소프트웨어가해야 잘 행동처럼.

  • ~/.local-의 사용자 별 /usr/local, 즉 각 사용자가 설치 한 소프트웨어

  • ~/.local/opt -사용자 당 /opt

소프트웨어를 어디에 설치해야합니까?

위의 목록은 이미 Oracle JDK 질문에 대한 답변의 절반입니다. 적어도 몇 가지 단서가 있습니다. "소프트웨어 X를 어디에 설치해야합니까?" 체크리스트 간다 :

  • Eclipse IDE 및 기타 다운로드 된 Java 앱과 같이 완전히 독립적 인 단일 디렉토리 소프트웨어입니까? 모든 사용자가 사용할 수 있기를 원합니까? 그런 다음에 설치하십시오/opt

  • 위와 동일하지만 다른 사용자는 신경 쓰지 않고 사용자 만 설치하려고합니까? 그런 다음에 설치하십시오~/.local/opt

  • 파일은와 함께 컴파일 및 설치되는 기존 소프트웨어 bin와 같이 and와 같은 여러 디렉토리로 분할 되며 모든 사용자가 사용할 수 있어야합니까? 그런 다음에 설치하십시오share./configure && make && sudo make install/usr/local

  • 위와 동일하지만 사용자에게만 해당됩니까? 그런 다음에 설치하십시오~/.local

  • OS에 의해 또는 Software Center와 같은 패키지 관리자를 통해 설치되는 소프트웨어이며, 가장 중요한 것은 업데이트 관리자가 새 버전으로 업그레이드 할 때 로컬 수정 사항을 덮어 쓸 수 있습니까? 그것은 간다/usr

노트:

  • 컴파일 된 소프트웨어의 기본 설치 접두사가 /usr/local왜 이고 , ./configure --prefix=$HOME/.local사용자 전용 소프트웨어를 설치할 때 이를 변경해야하는 이유를 설명합니다.

  • 위의 모든 디렉토리가 읽기 전용 임을 알 수 있습니다 (물론 소프트웨어를 설치 / 제거 할 때 제외). 구성 파일과 같은 쓰기 가능한 파일은 일반적으로 /etc(시스템 전체 소프트웨어의 경우) 및 ~/.config(사용자 별 설정의 경우)으로 이동합니다. 많은 레거시 소프트웨어 (그리고 불행히도 일부 최신 소프트웨어도)를 사용 ~/.<software-name>하지만 홈 폴더를 수십억 개의 디렉토리와 파일로 어수선하게 만듭니다.

  • ~/.local~/.config히트 싱크 사양의 일부가 아닙니다. FHS는 사용자의 홈 폴더를 처리하지 않습니다. 데스크톱 환경 (Gnome, KDE, Unity 등)을 지향하는 또 다른 표준 조직인 XDG는 사용자의 집 구조에 관한 몇 가지 규칙을 설정하려고 시도합니다. 모든 소프트웨어가 소프트웨어를 준수하는 것은 아니며 (예를 들어, 논리 ~/.local/bin에 따라 사용자의 기본값 $PATH 있지는 않지만) 사용자가 소프트웨어를 따라야 할 의무는 없지만 둘 모두 상호 운용성 이점을 얻습니다.

나는 이것이 조금 명확하게하는 데 도움이되기를 바랍니다. 답변을 개선 할 수 있도록 자유롭게 물어보십시오!

(그리고 나는 또한 순수 주의자들이 그러한 비공식적 인 언어와 설명 때문에 나를 죽이지 않기를 희망합니다. 의도적이며 부정확 한 점이 많지만 새로 온 사람이 설치에 대한 간략한 개요를 이해하도록하는 좋은 방법이라고 생각합니다 디렉토리 근거)


1
당신은 그것을 매우 간결하게 요약했습니다. 그렇습니다. 정답입니다. 완전한 대답은 위의 것보다 훨씬 더 긴 이야기입니다!
papashou

왜 안돼? 동일한 논리가 적용됩니다. 공격자는 홈 또는 시스템 명령의 이름을 딴 하위 디렉토리 아래에 실행 파일을 만들 수 있습니다.
점화

3
@ignis : 침입자가 사용자의 집에서 파일을 만들고 수정하기 위해 액세스 할 수있는 경우 해당 사용자는 이미 완전히 손상되었으며 $PATH관련이 없습니다. 공격자는 통해이를 변경할 수도 ~/.profile있으므로 요점이 약합니다. 대부분의 배포판에서 일반적으로 사용되는 ~/.local/bin것만 큼 ​​안전합니다 (원하는 경우 안전하지 않은 경우) ~/bin. 사용자가 개인 스크립트를 유지하고 실행할 수 있는 디렉토리 가 없어야한다는 생각 $PATH은 터무니 없습니다.
MestreLion

따라서, ~/bin만큼 안전하며 ~/.profile, $PATH내 자신의 집에서 쓸 수있는 권한이있는 나에 의해 실행되는 맬웨어로부터 나를 보호하지 못합니다. 이 파일을 몰랐습니다. 죄송합니다. 설명해 주셔서 감사합니다. 이전 의견에 대해 죄송합니다.
ignis

기록이 길수록 개선 / 메시가 더 많습니다.
smwikipedia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.