apt-get에 sudo가 필요한 이유는 무엇입니까?


12

이것은 어리석은 질문 일지 모르지만 최근 에 apt-get을 사용하는 단일 사용자 기능이없는 이유를 알지 못했습니다.

찾고 있지 않은 답변 :

  • "apt는 시스템 레벨 디렉토리에 쓰기 때문입니다". 이것이 표면 수준의 이유이지만 더 깊은 수준을 찾고 있습니다. 단일 사용자 환경 (la pip + virtualenv)을 근본적으로 차단하는 것이 있습니까?
  • "원본에서 빌드 할 수 있습니다". 이것은 해결 방법이지만 내 질문을 다루지 않습니다. 단기 문제를 해결하고 싶지 않으며 어쨌든 모든 컴퓨터에 대한 루트 액세스 권한이 있습니다.

홈 디렉토리의 소스에서 모든 패키지를 빌드 할 수 있다는 것을 알고 있기를 바랍니다.
jobin

그렇습니다.하지만 apt-get 제한의 근본 원인을 찾고 있습니다. 소스에서 빌드하는 것은 그에 대한 답변이 아닙니다.
PattimusPrime

1
당신이 정말로 묻는 질문은 "왜 대부분의 Linux 소프트웨어를 재배치 할 수 없는가?"라고 생각합니다. apt-get이 사용자 로컬 디렉토리에 소프트웨어를 설치할 수 있도록하는 것은 가능하지만 대부분의 소프트웨어가이를 지원하지 않기 때문에 별다른 의미가 없습니다.

답변:


10

apt-get에 sudo가 필요한 이유는 무엇입니까?

항상 그런 것은 아닙니다. apt-get없이 완벽하게 사용할 수 있습니다 sudo. 거기 당신이 필요하지 않은 인스턴스 sudo사용하는 것과 전혀 apt-get download패키지를 다운로드하는 현재 디렉토리 , apt-get source현재 디렉토리에 데비안 소스 파일 다운로드 changelog다운로드 주어진 패키지의 변경 로그를 인쇄, 그리고이 모든 명령 은 --simulate/ --dry-run/ --no-act(의 경우에 install당신도 필요 --no-download).

이러한 조치 / 명령은 시스템 디렉토리를 작성할 필요가 없기 때문입니다.

이제 왜 apt-get필요한가 sudo? 실제로 그렇지 않습니다. apt-get을 버리고 패키지를 다운로드하고 원하는 디렉토리에서 패키지를 wget사용 dpkg --extract하고 추출 할 수 있습니다. --instdir바이너리 전용 패키지에 대해서도 작동해야합니다.

왜 이것이 기본이 아닌가? 아파요. 원하는 것을 수행하려면 각 패키지를 두 번 다시 포장해야합니다. 하나는 올바른 방식으로, 다른 하나는 원하는 것을 수행해야합니다. 빌드시 바이너리는 일반적으로 필요한 파일과 라이브러리의 위치를 ​​알아야합니다 (일부 경우 컴파일시 하드 코딩 됨).

이제 대신 무엇을 할 수 있습니까? 루트없이 패키지를 설치할 수있는 일부 환경을 가상 환경 으로 chroot하십시오 .

요약하면, 이것은 apt-get이 사용되는 방식이 아니며 apt-get과 비슷한 다른 패키지 관리자를 알지 못합니다. 하루 apt-get가 끝나면 dpkg의 프론트 엔드로 일부를 수행 할 수 있습니다.


3

패키지 자체의 정보에 따라 파일이 설치 될 위치가 결정되므로 패키지 데이터베이스 sudo에 쓰고 /패키지 데이터베이스를 변경해야합니다.

패키지를 설치할 때 사전 빌드 된 이진 파일과 패키지의 필수 부분 인 관련 구성 및 메타 파일 및 스크립트를 설치합니다. 이 스크립트와 구성 파일은 종속성 및 나머지 시스템과 밀접하게 연결되어 있습니다. 자신이하고있는 일을 정확히 알지 못한다면 가볍게 바꾸고 싶지 않을 것입니다.

sudo액세스 권한 이없는 직장, 예를 들어 시스템에있는 경우 소스에서 컴파일하고 설치 디렉토리를 집으로 설정할 수 있습니다. 그런 다음 필요가 없습니다 sudo. 소스에서 설치하는 경우 일반적으로 패키지 데이터베이스를 변경하지 않습니다.


대답 해줘서 고마워! 나는 해결 방법을 알고 사용하지만, 알아 내려고하는 것은 그것들을 사용했는지입니다. 문제는 패키지 관리자가 설치 경로를 하드 코딩한다는 것입니다. 왜 변경할 수 없습니까?
PattimusPrime

2

바보 같은 질문이 아닙니다.

운영 체제의 권한 수준

우분투-그리고 실제로 모든 최신 운영 체제-소프트웨어마다 다른 권한 수준이라는 개념이 있습니다. 사용자가 시작한 소프트웨어는 일반적으로 사용자 기반 권한 수준으로 실행되며, 보안상의 이유로 시스템을 수정하는 데 필요한 액세스 권한이 없습니다. 해당 사용자의 파일 만 수정할 수 있습니다.

사용자 파일이 아닌 시스템 전체에 영향을 줄 수있는 운영 체제를 수정하려면 더 높은 권한 수준이 필요합니다. Linux에서는 "수퍼 유저"권한 (또는 일반적으로 사용됨)이라고합니다. "루트"라고 함). 이 권한 수준은 전체 운영 체제에 자유롭게 액세스 할 수 있으므로 모든 사용자의 모든 파일을 수정하거나 제거 할 수 있습니다.

apt-get의 역할

apt-get을 통해 소프트웨어를 설치하는 경우 시스템 전체에서 사용할 수있는 소프트웨어를 설치하는 것 입니다. 즉, 소프트웨어는 해당 사용자 만 실행할 수 있도록 사용자의 홈 디렉토리에 배치되는 것이 아니라 시스템 전체 응용 프로그램 디렉토리 (예 : / usr, / etc, / var 등)에 설치됩니다. ) 모든 사용자가 실행합니다. 이러한 디렉토리를 수정하려면 수퍼 유저 권한이 필요합니다. 권한이없는 소프트웨어는 시스템을 망칠 수 있기 때문에 권한이없는 사용자는이 디렉토리를 수정할 수 없습니다.

apt-get 수퍼 유저 권한을 부여하지 않고 apt-get을 사용하여 무언가를 설치하려는 경우 극복하지 못하는 첫 번째 장애물은 자체 소프트웨어 카탈로그에 쓸 수있는 잠금을 얻는 것입니다. apt-get은 시스템 전체의 유틸리티이기 때문에 설치된 소프트웨어의 카탈로그를 유지 관리하며 권한이없는 소프트웨어가 엉망이되지 않도록 편집하려면 수퍼 유저 권한이 필요합니다. 그러나 파일 권한을 변경하는 등의 방식으로이 장애물을 극복 할 수 있더라도 설치 루틴이 여러 시스템 디렉토리에 쓰는 데 의존하기 때문에 소프트웨어 설치 방법에 대한 추가 단계가 여전히 실패합니다.

Linux를 사용하면 수퍼 유저 권한없이 소프트웨어를 설치할 있지만 직접 작성하거나 (예 : 셸 스크립트) 직접 컴파일하고 컴파일 된 실행 파일을 직접 실행해야합니다. apt-get (및 aptitude, synaptic 또는 Ubuntu 소프트웨어 센터와 같은 다른 APT 기반 유틸리티)을 사용하여 시스템 전체에 설치하는 것이 더 쉽습니다.


답변 해 주셔서 감사합니다. 나는 apt-get의 시스템 차원의 성격을 이해하지만 내가 이해하려고하는 것은 그것이 그렇게되어야하는 이유 입니다.
PattimusPrime

1
그런 식일 필요는 없었습니다. 우분투 (그리고 데비안)가 설계된 방식 일뿐입니다. 소프트웨어를 설치하는 일반적인 방법이 사용자별로 운영 체제를 설계하는 데 방해가되지 않습니다.
thomasrutter

1

apt-get이 기본적으로 / (또는 유사한) 디렉토리에 설치되는 이유는 무엇입니까?

간단한 이유는 apt-get소프트웨어를 설치할 위치를 결정하지 않기 때문입니다 . 개발자가 결정하고 응용 프로그램 내부에서 코딩합니다.

다른 디렉토리에 설치할 수 있습니까?

예, 다른 디렉토리에 설치할 수 있습니다. 오픈 소스 소프트웨어의 경우 소스를 가져오고 설치 디렉토리를 변경하고 컴파일, 빌드 및 설치하십시오. 포함 된 configure스크립트 에는 일반적으로 설치할 위치를 지정할 수 있는 옵션 이 있습니다. 이것은 일반적으로 --prefix입니다.

그러나 apt-get을 사용해야한다고 주장합니다. 지금 무엇을해야합니까?

확인. apt-get으로이를 수행하는 방법은 여전히 ​​있지만 최종 사용자에게는 너무 많을 수 있습니다. 단계를 따르십시오.

  1. 소스를 얻으십시오.
  2. 설치 디렉토리를 다음과 같이 변경하십시오 $HOME.
  3. 컴파일하고 빌드하십시오.
  4. .deb 파일 로 패키지 하십시오 .
  5. 런치 패드 계정을 작성하십시오.
  6. 우분투 행동 강령에 서명하십시오 (이것이 필요한지 확실하지 않습니다).
  7. 자신을위한 ppa를 만드십시오 .
  8. deb에 deb 패키지를 업로드하십시오.
  9. ppa를 소스에 추가하십시오.
  10. 를 실행하십시오 sudo apt-get update.
  11. 를 실행하십시오 apt-get install package.

너무 쉬웠습니다. 설치하는 동안 디렉토리를 선택할 수 있습니까?

예, 아니오

예, 가능하기 때문에 일부 소프트웨어는이 방법을 사용합니다 Qt5. 내가 아는 유일한 방법 은 .run 파일 입니다 .이 파일 은 실행될 때 다른 많은 입력 중에서 설치 디렉토리를 요구합니다.

이 방법은 사용하지 않기 때문에 아니요 apt-get.

언젠가 이걸 쉽게 할 수 있을까요 apt-get?

나는 apt-get소프트웨어 개발자 및 / 또는 소프트웨어 개발자 가이 일에 관심이 있다고 생각하지 않지만 설치 디렉토리를 요구하여 자동으로 소스를 변경, 컴파일, 빌드, 설치하는 단계를 수행 하는 일부 소프트웨어를 개발할 수 있습니다 .

내 6 번째 감각은 명령이

apt-dont-get install pkg1 pkg2 ...

답변 주셔서 감사합니다-철저하고 내 질문을 해결합니다. 그러나 단일 사용자 기능을 apt-get으로 개발하는 데 관심이없는 이유를 이해하지 못합니다. 기능은 특정 사용 사례에서 매우 유용 할 것 같습니다.
PattimusPrime

좋은 정보이지만 Q & A 내의 Q & A 형식은 ...? :) Idk, 표준 형식으로 편집해야합니까? 그냥 생각이야
chaskes

@PattimusPrime 대부분의 경우 관리자가 필요한 소프트웨어를 모두 설치하고 다른 사람들이 소프트웨어를 설치할 필요가 없기 때문에 이러한 경우는 거의 없습니다. 또한 소스에서 빌드하는 것이 매우 쉽다는 사실과 소프트웨어 개발자가 자체 소프트웨어를 구현하지 않는 한 그러한 기능을 구현하는 것은 쓸모가 없다는 사실이 개발자가 그렇게하지 못하게 할 것 apt-get입니다. 또한 많은 기존 프로그램이 다른 프로그램에 의존하고 / usr 디렉토리에서 검색합니다. 이러한 기능을 구현하려면 종속성이있는 기존 소프트웨어를 모두 변경해야합니다 (수천에 해당하지 않음).
등록 된 사용자

$ HOME에 파일을 설치하는 데비안 정책 위반입니다. 절대 그렇게하지 않아야합니다. 있다면, /opt/package대신 디렉토리를 사용 하고 chmod하십시오.
Braiam

@Braiam : 패키지 $HOME/opt/를 설치하는 데 필요한 권한이없는 경우 패키지 설치를 권장하는 사람들을 보았습니다 /opt/..
Aditya

-1

chmodded 파일을 편집하여 사용할 수 없습니다. 당신은 그들을 chmod 할 수 있으므로 그렇게하지 않는 것이 좋습니다.


대답 해줘서 고마워. chmodded 파일 만 편집 하는 이유를 찾고 있습니다. 단일 사용자 기능은 구현하기 쉽고 일부 영역 (예 : 슈퍼 컴퓨팅 클러스터)에서 매우 유용 할 것 같습니다.
PattimusPrime
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.