Linux가 설치된 프로그램의 파일을 구성하는 방식의 이점은 무엇입니까? [닫은]


10

Windows에서 시스템 드라이브 C:에는 directory program_files가 있으며 그 아래에 각 프로그램에 고유 한 디렉토리가 있습니다.

Linux에서는 /usr/및 아래 에 등 /usr/local/이 있습니다 /bin, /etc, /share, /src.

따라서 Windows에서는 각 프로그램의 모든 파일이 동일한 디렉토리에 그룹화되고 Linux에서는 모든 프로그램의 동일한 유형의 파일이 있습니다.

Windows가 설치된 프로그램을 구성하는 방식이 Linux 방식보다 논리적이므로 설치된 프로그램을 수동으로 관리하는 것이 더 쉽다고 생각합니다.

Linux가 설치된 프로그램의 파일을 구성하는 방식의 이점은 무엇입니까? 감사.

쉘을 위해 $ HOME에 설치된 프로그램을 구성하는 방법에 문제가있을 때이 질문이 있습니까? $HOMEWindows에서 프로그램을 구성하려고 시도 하지만 프로그램의 검색 경로를 지정하는 데 문제가 있습니다.


9
@RandallStewart " 예측할 수없고 흩어짐 "은 DLL의 합리적인 배치 및 비 복제입니다.
RonJohn

1
이것은 기본적으로 필요한 것만으로 부트 스트랩을 할 수 있도록 여러 개의 디스크 파티션을 마운트 할 수 있도록하기위한 것입니다. 비슷한 상황은 PC BIOS가 초대형 하드 디스크의 첫 번째 부분 만 볼 수 있었기 때문에 부팅에 필요한 모든 것을 포함하는 별도의 파티션이 첫 번째 부분에 배치되었습니다. 일반적으로 "/ boot"라고합니다. 오늘날 샌드 박스와 신뢰할 수없는 앱의 필요성으로 인해이를 다시 생각하게되었습니다 (예 : 우분투 스냅 참조).
Thorbjørn Ravn Andersen

9
Windows가 현재 각 프로그램의 모든 파일을 smae 디렉토리에 넣지 않는다는 것을 가장 먼저 지적하겠습니다. "Program Files"및 "Program Files (x86)"외에도 "Local", "LocalLow"및 "Roaming"의 "Users \ <username> \ Appdata"디렉토리가 있습니다. 또한 Windows는 항상 프로그램에 "프로그램 파일"폴더를 사용하지 않았으며 이력을 통해이 폴더를 일관되게 사용하지 않았습니다. * nix는 시간이 지남에 따라 파일을 처리 할 때 훨씬 일관성이 있습니다.
YLearn

5
@JAB는 동의하고 이것을 이해합니다. 나는 OP에 의한 진술, 즉 "창에서 각 프로그램의 모든 파일이 같은 디렉토리에 그룹화되어있다"는 말은 사실이 아니라고 지적했다. 또한 Windows 레지스트리에 대해서는 논의하지 않았는데, Windows 레지스트리는 Windows 프로그램에 대한 구성 및 기타 데이터를 저장하는 것으로 볼 수 있으며 "프로그램 파일"디렉토리의 일부가 아닙니다.
YLearn

2
리눅스는 설치된 프로그램의 파일을 정리합니까? 언제부터?
hobbs

답변:


17

Linux에서 다른 위치는 일반적으로 잘 관리되면 일부 논리를 반영합니다. 예 :

  • /bin 가장 기본적인 도구 (프로그램)를 포함
  • /sbin 가장 기본적인 관리자 프로그램을 포함합니다

둘 다 부팅 및 기본적인 문제 해결에 사용되는 기본 명령을 포함합니다. 그리고 여기 첫 번째 차이점이 있습니다. 일부 프로그램은 일반 사용자가 사용하지 않습니다.

그런 다음에서 살펴보십시오 /usr/bin. 여기에서는 일반적으로 1000 개가 넘는 명령 (프로그램)을 더 많이 선택할 수 있습니다. 그들은 표준 도구 만에 그만큼 중요하지 않습니다 /bin/sbin.

/usr/bin구성 파일이 다른 곳에 상주하는 동안 명령을 포함합니다. 이것은 기능 엔티티 (프로그램)와 구성 및 기타 파일을 분리하지만 사용자 기능면에서 명령을 다른 것과 혼합하지 않으면 PATH실행 파일을 가리키는 변수를 간단하게 사용할 수 있기 때문에 편리합니다. 또한 명확성을 소개합니다. 실행 가능한 것이 무엇이든간에.

내 것을 보아라 PATH.

$ echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/home/tomas/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games

직접 호출 할 수있는 명령을 포함하는 정확히 6 개의 위치가 있습니다 (예 : 경로가 아니라 실행 파일 이름).

  • /home/tomas/bin 개인 실행 파일의 홈 폴더에있는 개인 디렉터리입니다.
  • /usr/local/bin 아래에서 별도로 설명하겠습니다.
  • /usr/bin 위에서 설명했다.
  • /bin 위에서도 설명했습니다.
  • /usr/local/games/usr/local(아래 설명)과 게임 의 조합입니다
  • /usr/games게임입니다. 유틸리티 실행 파일과 혼합되지 않도록 별도의 위치가 있습니다.

지금 /usr/local/bin. 이것은 다소 미끄러 워서 이미 설명되어 있습니다. / usr / local / bin은 무엇입니까? . 이를 이해하려면 /usr많은 시스템 이 폴더를 공유하고 네트워크 위치에서 마운트 될 수 있음 을 알아야합니다 . 이전에 언급 한 것처럼 부팅시에는 명령이 필요하지 않으므로 /bin부팅 과정의 후반부에 위치를 마운트 할 수 있습니다. 또한 읽기 전용 방식으로 마운트 할 수도 있습니다. /usr/local/bin반면에, 로컬로 설치된 프로그램 용이며 쓰기 가능해야합니다. 따라서 많은 네트워크 시스템이 일반 /usr디렉토리를 공유 할 수 있지만 각각 의 네트워크 시스템은 공통 디렉토리 /usr/local안에 자체 마운트됩니다 /usr.

마지막으로 PATH루트 사용자를 살펴보십시오 .

# echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

다음이 포함됩니다.

  • /usr/local/sbin유형의 관리자 명령이 포함 된 /usr/local
  • /usr/local/bin일반 사용자가 사용할 수있는 것과 동일합니다. 다시, 그들의 유형은로 설명 될 수 있습니다 /usr/local.
  • /usr/sbin 필수적이지 않은 관리 유틸리티입니다.
  • /usr/bin 필수적이지 않은 관리 및 일반 사용자 유틸리티입니다.
  • /sbin 필수 관리 도구입니다.
  • /bin 관리자 및 일반 사용자 필수 도구입니다.

감사. 에 설치 될 프로그램을 구성하는 방법에 관심이 /home/tomasz/bin/있습니다. unix.stackexchange.com/questions/431793/…
Tim

나의 이해는했다 그것의 분리 상태 /bin/usr/bin네트워크 설치와 회피 문제에 참이었다 /usr디렉토리의 분리 /usr/usr/local공급 업체에서 제공 한 파일 (구별을위한 /usr수동 기계 자체 (설치) 및 파일 /usr/local)과 무관했다 네트워크 장착 문제. 이것이 정확합니까?
Keiji

4
@Keiji, 공급 업체 대 로컬 관리는 오늘날 이러한 차이점에 가장 일반적이고 일반적인 사용이지만, 전통적인 UNIX 설치를 살펴보면 /usr-off-a-network (vs /usr/local, 물론 local )는 들리지 않습니다. 의.
Charles Duffy

이것은 2018 년에 그렇게 나쁜 생각입니다
amara

7

요즘 나는 이것이 고전 유닉스의 역사적 유산이라고 생각합니다.

최초의 유닉스 버전에서, 프로그램은 오늘날처럼 크지 않았습니다. 프로그램은 종종 시스템 라이브러리를 사용하는 하나의 실행 파일로 구성되었습니다. 따라서 아무도 두 개의 자체 라이브러리로 구성된 프로그램에 대해서는 생각하지 않았습니다. 주요 도서관은 C 도서관이었고 모든 프로그램은 그 위치를 알고있었습니다.

또한 UNIX 환경은 완제품 (문서 준비 용)으로 간주되었습니다. 따라서 모든 도구에 대한 경로가 수정되었습니다.

현재 HDD (Hard Disk Drive) 일 고정 경로의 이점이 있습니다. FSH (File System Hierarchy)가 별도의 디스크 파티션에서 분할되고 바이너리 및 라이브러리가있는 파티션을 HDD의 1 차 섹터 근처에 놓으면 프로그램 시작 시간이 약간 빨라집니다.


6
오늘날에도 여전히 유용한 장점이 있습니다. 바이너리를 /usr/bin정적 데이터 파일 /usr/share및 수정 가능한 파일로 유지 /var하거나 수정 /usr/var하지 않는 보안 조치를 사용하여 마운트에 플래그를 사용하여 실행 파일에 아무것도 share없거나 var실행 파일 을 강제 실행할 수 없음을 의미합니다 noexec. 서명 된 읽기 전용 매체를 생성하기 위해 또는 이와 유사한 조치를 var사용하는 시스템에서는 외부의 어떤 것도 수정할 수 없습니다 dm_verity. 등
찰스 더피

3

현대 유닉스 계열 시스템으로 보는 것은 실제로 전통적이지 않습니다.

일반적으로는 상당히 최소한있을 것이다 //usr단지 시스템 유틸리티와 계층 구조 및 프로그램은 다음의 서브 디렉토리에 별도로 설치 /usr/local한 다음 심볼릭 링크를 생성하여 제공.

GNU 소프트웨어의 가장 일반적인 설정은 다음과 같이 컴파일하고 설치하는 것입니다.

./configure
make
make install prefix=/usr/local/DIR/program-1
cd /usr/local/DIR
stow program-1

GNU stow 유틸리티는 Windows와 마찬가지로 PATH 변수에 디렉토리를 추가 할 필요없이 표준 경로에서 소프트웨어를 사용할 수 있도록 심볼릭 링크를 생성합니다.

그러나 최신 Linux 배포판은 모든 것을 기성품 패키지로 제공하므로 프로그램은 "시스템"의 일부가되었습니다. 패키지 관리자는 설치를 관리하므로 기호 링크가 필요하지 않으며 프로그램 분리는 유용한 목적을 제공하지 않습니다 (그러나 많은 작은 디렉토리를 스캔해야하므로 프로그램 시작 속도가 느려집니다).

홈 디렉토리에 소프트웨어를 설치하려면 GNU stow도 사용하는 것이 좋습니다. 이렇게하면 프로그램을 별도로 유지할 수 있습니다. 이는 패키지 관리자를 사용하지 않는 경우에 합리적입니다.

그에 대한 나의 기존 설치 한 디렉토리입니다 ~/software/DIR그때 스토우의 내부 사용에 프로그램을 설치하는 것이 DIR생성 ~/software/bin, ~/software/share등 난 단지 추가해야이 수단 ~/software/bin내 모든 설치된 소프트웨어를 얻기 위해 PATH 변수를.

사용하다:

./configure --prefix=~/software
make
make install prefix=~/software/DIR/program-1
cd ~/software/DIR
stow program-1

프로그램이 GNU 규칙을 따르는 경우 설치합니다.


2

응용 프로그램 패키지 (한 디렉토리의 C ++ 컴파일러, 다른 디렉토리의 이미지 편집 프로그램)가 아닌 목적 ( /usr/bin실행 파일, /usr/lib라이브러리)으로 개별 파일을 나누는 스타일에 대해 이야기 하는 것 같습니다. 유닉스 시스템에는 이러한 역사적 이유가 많이 있지만, 유닉스 계열 시스템을이 시스템에 의존하게 만드는 오늘날의 세력도 있습니다 : 시스템에서 대부분의 프로그램을 관리하는 패키지 관리자.

역사적으로 오늘날까지도 여전히 Windows에서 응용 프로그램은 자체 설치 프로그램, 특히 제거 프로그램을 제공하는 책임을 맡았으며 이제는 종종 중앙 응용 프로그램 목록에 자신을 등록하지 않습니다. 이와 같은 상황에서는 일반적으로 응용 프로그램이 가능한 많은 파일에 대해 "자신의"디렉토리를 갖는 것이 좋습니다. 다른 응용 프로그램과의 충돌을 피하는 데 도움이되지만 항상 작동하지는 않습니다 (특히 DLL 의 경우 ).

반면에 유닉스 시스템은 90 년대 이후 일반적으로 단일 패키지 관리자와이 패키지 관리자를 통해 일반적으로 사용되는 많은 양의 소프트웨어를 제공하는 그룹을 가지고있었습니다. (다양한 유닉스 공식 패키지 관리자는 포함 yumapt리눅스 시스템, pkgsrcNetBSD에 대한, 그리고 portsFreeBSD를 위해. 종종 상용 유닉스 시스템은 또한 같은뿐만 아니라 비공식 그러나 널리 받아 들여진 패키지 관리자로 끝날 brew맥 OS합니다.)

이러한 패키지 관리자는 "소유 한"다양한 하위 디렉토리에서 시스템의 모든 파일을 추적 할 수 있다는 이점이 있습니다. 단일 그룹이 여기에서 모든 파일의 이름과 위치를 지정하므로 모두 공유되는 작은 디렉토리 세트를 사용할 수 있습니다. 이는 특히 응용 프로그램간에 파일을 공유하고 라이브러리 및 실행 파일을 검색하는 데 필요한 경로 수를 줄이는 영역에서 다양한 이점을 제공합니다.

즉, Unix에는 일반적으로 /opt디렉토리 아래에 "응용 프로그램마다 별도의 디렉토리"설치라는 오랜 전통이 있습니다.

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