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

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

Windows에서 시스템 드라이브 C:에는 디렉터리가 있으며 program_files해당 디렉터리 내에서 각 프로그램에는 자체 디렉터리가 있습니다.

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

따라서 Windows에서는 각 프로그램의 모든 파일이 동일한 디렉터리에 그룹화되는 반면 Linux에서는 동일한 유형의 파일이 모든 프로그램에 대해 동일한 디렉터리에 그룹화됩니다.

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

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

다음 문제에 직면했을 때 이 문제가 발생했습니다.쉘이 런타임에 검색할 수 있도록 $HOME에 설치된 프로그램을 어떻게 구성할 수 있습니까?, Windows 방식으로 프로그램을 구성하려고 하는데 $HOME프로그램에 대한 검색 경로를 지정하는 데 몇 가지 문제가 있습니다.

답변1

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관리자와 일반 사용자에게 꼭 필요한 도구입니다.

답변2

이제 나는 이것이 고전 UNIX의 역사적 유산이라고 생각합니다.

UNIX의 첫 번째 버전에서는 프로그램이 지금만큼 크지 않았습니다. 이러한 프로그램은 일반적으로 시스템 라이브러리를 사용하는 실행 파일로 구성됩니다. 따라서 아무도 자체 라이브러리로 구성된 프로그램을 고려하지 않았습니다. 기본 라이브러리는 C 라이브러리이며 모든 프로그램은 해당 위치를 알고 있습니다.

또한 UNIX 환경은 문서 준비를 위한 완제품으로 간주됩니다. 따라서 모든 도구의 경로는 고정되어 있습니다.

요즘 HDD(하드 디스크 드라이브) 시대의 고정 경로는 몇 가지 이점을 제공합니다. FSH(파일 시스템 계층 구조)가 별도의 디스크 파티션으로 분할되고 바이너리와 라이브러리가 있는 파티션이 HDD의 메인 섹터 근처에 배치되면 프로그램 시작 시간이 조금 더 빨라집니다.

답변3

/usr/bin/usr/lib애플리케이션 패키지(한 디렉토리에는 C++ 컴파일러, 다른 디렉토리에는 이미지 편집 프로그램)가 아닌 개별 파일을 목적(실행 파일, 라이브러리용)별로 나누는 스타일을 논의하고 있는 것 같습니다 . Unix 시스템에서 이에 대한 주된 이유는 역사적이지만 오늘날 Unix 계열 시스템에서 이를 선호하는 경향이 있는 세력도 있습니다. 즉, 시스템의 대부분의 프로그램을 관리하는 패키지 관리자입니다.

Windows에서는 역사적으로나 여전히 그렇습니다. 응용 프로그램은 자체 설치 프로그램, 특히 제거 프로그램을 제공해야 하며 지금도 중앙 응용 프로그램 목록에 자신을 등록하지 않는 경우가 많습니다. 이 경우 일반적으로 응용 프로그램이 가능한 한 많은 파일을 보관할 수 있는 "자체" 디렉터리를 갖는 것이 더 좋습니다. 이렇게 하면 항상 작동하는 것은 아니지만 다른 응용 프로그램과의 충돌을 피하는 데 도움이 됩니다(특히 다음과 같은 경우).DLL).

반면 유닉스 시스템은 1990년대부터 일반적으로 인정받는 패키지 관리자와 그 패키지 관리자를 통해 흔히 사용되는 대량의 소프트웨어를 제공하는 그룹을 갖고 있다. (다양한 Unices의 공식 패키지 관리자에는 yumLinux apt, pkgsrcNetBSD 및 portsFreeBSD가 포함됩니다. 상용 Unix 시스템에는 종종 brewMacOS와 같이 비공식이지만 널리 사용되는 패키지 관리자가 있습니다.)

이러한 패키지 관리자의 장점은 시스템에서 "소유"한 다양한 하위 디렉터리의 모든 파일을 추적할 수 있다는 것입니다. 단일 그룹이 여기에서 각 파일의 이름과 위치를 할당하기 때문에 모두는 서로 공유되는 작은 디렉터리 집합에 액세스할 수 있습니다. 이는 특히 애플리케이션 간에 파일을 공유하고 라이브러리 및 실행 파일을 검색하는 데 필요한 경로 수를 줄이는 등 다양한 이점을 제공합니다.

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

답변4

당신이 보는 현대 유닉스 계열 시스템은 실제로는 전통적인 시스템이 아닙니다.

/일반적으로 시스템 유틸리티의 계층 구조는 매우 작으며 /usr, 프로그램은 하위 디렉토리에 개별적으로 설치되고 /usr/local기호 링크를 생성하여 사용할 수 있게 됩니다.

GNU 소프트웨어의 매우 일반적인 설정은 컴파일과 설치입니다.

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

암소 비슷한 일종의 영양가게이 유틸리티는 PATH 변수에 디렉토리를 추가하지 않고 표준 경로에서 소프트웨어를 사용할 수 있도록 기호 링크를 생성합니다(Windows와 마찬가지로 cruft가 거기에 축적되는 경향이 있음).

그러나 최신 Linux 배포판은 모든 것을 기성 패키지로 제공하므로 프로그램은 "시스템"의 일부가 됩니다. 패키지 관리자가 설치를 관리하기 때문에 심볼릭 링크가 필요하지 않으며 프로그램을 분리해도 소용이 없습니다(그러나 많은 작은 디렉터리를 검사해야 하므로 프로그램 시작 속도가 느려집니다).

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

내 전통적인 설정은 ~/software/DIR프로그램을 디렉토리에 설치한 다음 stow를 사용하여 등을 DIR만드는 것 입니다. 즉, PATH 변수를 추가하기만 하면 설치된 모든 소프트웨어를 얻을 수 있습니다.~/software/bin~/software/share~/software/bin

사용:

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

프로그램이 GNU 규칙을 따르는 경우 해당 프로그램을 설치하십시오.

관련 정보