apt-get이 g ++ 대신 Virtual Box를 설치 한 이유는 무엇입니까?


12

방금 Linux 터미널의 주요 보안 문제가 될 수있는 궁금한 것을 발견했습니다. g ++ 5.0을 설치하려고했습니다. 나는 리눅스에 초보자이기 때문에 방금 입력했다 sudo apt-get install g++ 5.0. 오류 또는 무언가를 반환하는 대신 Virtual Box를 설치했습니다!

터미널에서 한 가지를 설치하려고 시도하고 완전히 다른 것을 설치하면 다른 것, 아마도 맬웨어에 발생할 수 있음을 의미합니까? 어쨌든 완전히 다른 것을 입력했을 때 Virtual Box를 설치하는 이유는 무엇입니까?


6
... AFAIK apt-get는 사용자에게 확인을 요청하므로 nVirtualBox 설치를 삽입 하고 피할 수 있습니다 ... 또한 Ubuntu의 저장소가 확인되므로 처음 설치할 수있는 맬웨어 패키지가 없어야합니다. 당신이 임의있는 PPA를 추가 할 경우 이런 일이 발생하지만, 수의 왜냐하면 당신이 신뢰할 수없는 소스에서 응용 프로그램을 설치하는 우분투 말했다.
Bakuriu

1
이 질문은 실제로 가치가 있기 때문에 Fav'd (물론 +1)입니다 . 그것은 당신의 행동을 충분히 돌보지 않는 (돌이킬 수없는) 나쁜 영향을 보여 주며, 똑같은 부주의 한 실수를하지 않으려는 동기입니다.
EKons

12
a major security issue with the Linux terminal아니, 진정해 이것은 당신이 올바르게 읽거나 타이핑하지 않는 것입니다 (Linux apt-get, 또는 사용 가능한 많은 다른 터미널에 대한 문제는 아닙니다) .
underscore_d

2
@ ΈρικΚωνσταντόπουλος "돌이킬 수없는 나쁜 영향"은 무엇입니까? 쉽게 제거 할 수있는 비 맬웨어 프로그램을 설치 하시겠습니까?
Bakuriu

2
"rm -rf directoryA / directoryB /"를 발견 할 때까지 기다리십시오 ( 시도하지 마십시오! ). 루트로 입력하고 붙여 넣는 것을 조심해야합니다.
pjc50

답변:


29

명령

sudo apt-get install g++ 5.0 

를 나타내는 두 개의 패키지를 설치하려면 : g++5.0. (패키지 이름에는 공백이 없으며 apt-get은 공백으로 구분 된 여러 패키지 이름을 허용합니다.)

아마도 실제로 요청 된대로 g ++을 설치 한 다음 정규 표현식과 일치하는 모든 패키지 (버전 번호 포함)를 설치했습니다 ( 5.0실제로 이름이 지정된 패키지가 없기 때문에 5.0). (감사합니다 @edwinksl!)

이를 피하려면 공백없이 올바른 패키지 이름이 있어야합니다. -s옵션을 사용하여 실제 작업을 수행하기 전에 apt-get 작업을 시뮬레이션 할 수도 있습니다 .

sudo apt-get -s install g++ 5.0

실제로 아무것도 설치하지 않고 명령 수행 하는 작업을 보여줍니다 . 문제가 없으면 -s설치를 제거 하여 설치를 수행 할 수 있습니다 .

당신은 또한 같은, 더 초보자 친화적 인 그래픽 패키지 관리자를 사용하여 고려할 수 synaptic또는 muon.


4
5.0는 정규 표현식으로 사용되므로 apt문자열 "5.0"과 일치하는 것 이상을 수행합니다.
edwinksl

10
에 익숙하지 않은 사람들에게 regex점은 단일 문자와 일치합니다. 그리고 기본적으로 정규 표현식 일치는 문자열의 어느 곳에서나 보이므로 "5.0""5를 포함하고 뒤에 2 자 뒤에 0이있는 이름"을 의미합니다. 예 : "FooBar 2.510"또는 "AcmeWidgets 5.0"( "단일 문자"에는 리터럴 점이 포함됨)
MSalters

8

g++버전 5.x 를 설치하는 올바른 명령 은 다음과 같습니다.

sudo apt-get install g++-5

g++xenial에 버전 5.3을 설치 합니다. 현재 기본값입니다 (따라서 apt-get install g++설치하지만 나중에 변경 될 것입니다). 실제로 GCC의 공개 5.0 릴리스없습니다 . 다른 g++릴리즈는 예를 들어 g++-4.9또는 g++-6같은 방식으로 설치할 수있는 패키지로 제공됩니다 .

g++시스템에 패키지화되지 않은 특정 (기존) 릴리스를 설치해야하는 경우 소스에서 빌드해야합니다 .


2
이것은 좋은 지적입니다. sudo apt install g++5.0( g++와 사이에 공백없이 5.0)는 여전히 실패했습니다.
edwinksl

4

그것을 분해하자.

우선, apt-get install(그리고 대부분의 다른 apt-get주장들도) 작동 하는 방법에 대한 몇 가지 참고 사항 :

  • 여러 패키지 이름을 입력 할 수 있습니다.

    sudo apt-get install foobar spamegg 
    
  • 패키지 이름은 실제로 정규 표현식 (ERE) (확인 확장되는 man 7 regex패키지 이름이 그래서) 패턴 foo.bar이로 시작하는 문자열을 포함하는 패키지 이름 의미 foo와 끝 bar사이의 임의의 단일 문자 foobar. 가능성 f.*r이있는 문자열이 포함 된 모든 패키지 이름 의미 fr문자의 수와 그 사이에 아무것도 즉. 전체 패키지 이름을 일치 시키려면 시작 및 종료 토큰을 사용하십시오 (예 :) ^foo.bar$. 정규식 토큰을 문자 그대로 취급하려면 \예를 들어 문자 그대로 취급하기 위해 토큰을 이스케이프 foo.bar해야합니다.

    sudo apt-get install 'foo\.bar'
    

    여기서 작은 따옴표는 패턴을 글 로빙 패턴으로 쉘 해석을 방지하기위한 것입니다.이 경우에는 필요하지 않지만, 예를 들어 foo.*bar현재 디렉토리에 파일 이름이 eg 인 경우 패턴에 필요합니다 foo.bar.

  • 패키지 이름을 고려해야합니다. 패턴과 일치하는 패키지가 있으면 패턴이 문자 그대로 처리되고 정규식 해석이 수행되지 않습니다. 예를 들어, 패키지 패턴 의 경우 정규식 토큰과 상관없이 문자 그대로 g++패키지와 일치합니다 . 정의 된 저장소에 이름이 지정된 패키지가 없으면 ERE 패턴으로 취급됩니다.g+++g++

이제 다음 명령을 내 렸습니다.

sudo apt-get install g++ 5.0

이것은 다음을 의미합니다.

  • 패키지 g++와 함께 제공된 두 가지 패턴을 설치하려고합니다.5.0

  • g++g++위에서 언급 한 리터럴 메타 패키지와 일치

  • 나머지 부분 5.0에는 정규식 토큰, .즉 단일 문자가 있습니다. 따라서 이것은를 포함하는 모든 패키지 이름과 일치합니다 5<any_character>0. 따라서 일치하는 모든 패키지가 설치 virtualbox-5.0되도록 선택되었으며 프로세스에서도 선택되었습니다.

아마도 당신은 g++version 을 설치하고 싶을 5것이므로 다음과 같이하면 됩니다 (이 답변에서 이미 언급했습니다 ); 메타 g++-5패키지는 g++버전 5 의 최신 마이너 릴리스 패키지를 나타냅니다 .

sudo apt-get install g++-5

구성된 저장소 내에서 패키지를 검색하려면 다음 apt-cache과 같이 ERE를 사용하십시오 apt-get.

apt-cache search 'g\+\+-[0-9]+'

정규식으로 바꾸지 않으려면을 사용 less하여 다소 큰 목록을 아래로 스크롤하십시오.

apt-cache search g++ | less

또한 확실하지 않은 것을 설치하기 전에 -y( --assume-yes) 옵션을 사용하지 말고 먼저 -s( --simulate/ --dry-run)로 테스트하십시오 .

sudo apt-get install --dry-run foobar

1
+1 가장 완전하고 체계적인 답변. RE로 돌아 가기 전에 리터럴 일치를 시도하십시오. 확장 RE 사용 (일반 RE와 반대); apt-cache search알아야 할 모든 능력 .
arielf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.