Apt-get ने g ++ की जगह Virtual Box क्यों लगाया?


12

मुझे अभी कुछ पता चला है जो मुझे आश्चर्य है कि संभवतः लिनक्स टर्मिनल के साथ एक प्रमुख सुरक्षा मुद्दा हो सकता है। मैं g ++ 5.0 स्थापित करने का प्रयास कर रहा था। मैं लिनक्स के लिए नौसिखिया हूं, इसलिए मैंने सिर्फ टाइप किया sudo apt-get install g++ 5.0। केवल एक त्रुटि या कुछ वापस करने के बजाय, उसने वर्चुअल बॉक्स स्थापित किया!

अगर मैं टर्मिनल से एक चीज को स्थापित करने की कोशिश करता हूं और यह पूरी तरह से कुछ अलग स्थापित करता है, तो क्या इसका मतलब यह है कि यह संभवत: मैलवेयर के साथ कुछ और हो सकता है? जब मैं कुछ और पूरी तरह से अलग टाइप करता हूं तो यह वर्चुअल बॉक्स क्यों स्थापित करेगा?


6
... AFAIK apt-getउपयोगकर्ता से पुष्टिकरण पूछेगा, ताकि आप बस सम्मिलित कर सकें nऔर वर्चुअलबॉक्स स्थापित करने से बच सकें ... इसके अलावा उबंटू के भंडार की जांच की जाती है, इसलिए कोई भी मैलवेयर पैकेज नहीं होना चाहिए जिसे आप पहली बार में स्थापित कर सकते हैं। यदि आप यादृच्छिक PPA जोड़ते हैं तो ऐसा हो सकता है लेकिन ऐसा इसलिए है क्योंकि आपने Ubuntu को एक अविश्वसनीय स्रोत से एप्लिकेशन इंस्टॉल करने के लिए कहा था।
बाकूरी

1
Fav'd (और + 1'ed of course) क्योंकि यह प्रश्न वास्तव में इसके योग्य है । यह आपके कार्यों के लिए पर्याप्त देखभाल नहीं करने के (अपरिवर्तनीय) बुरे प्रभावों को दर्शाता है, और आपके लिए एक ही, लापरवाह गलती नहीं करने के लिए प्रेरणा है।
EKons

12
a major security issue with the Linux terminalनहीं, शांत हो जाओ। यह सिर्फ (कोई अपराध नहीं था!) ​​आप ठीक से पढ़ / टाइप नहीं कर रहे हैं - लिनक्स के साथ कोई समस्या नहीं है apt-get, या उपलब्ध कई अलग-अलग टर्मिनलों में से कोई भी।
अंडरस्कोर_ड

2
@ ΥριΈνσταντόποςλο are "अपरिवर्तनीय बुरा प्रभाव" क्या हैं? एक गैर-मैलवेयर प्रोग्राम स्थापित करना जिसे आप आसानी से अनइंस्टॉल कर सकते हैं?
बकुरीउ

2
जब तक आप "rm -rf DirectoryA / directoryB /" की खोज नहीं करते तब तक प्रतीक्षा करें ( इसे आज़माएं नहीं! )। आपको सावधान रहना होगा कि आप क्या लिखते हैं और जड़ के रूप में पेस्ट करते हैं।
pjc50

जवाबों:


29

आदेश

sudo apt-get install g++ 5.0 

इंगित करता है कि आप दो पैकेज स्थापित करना चाहते हैं: g++और 5.0। (पैकेज नामों में स्थान नहीं हैं, और उपयुक्त-स्थान द्वारा अलग-अलग पैकेज नामों को स्वीकार किया जाता है।)

शायद यह क्या हुआ कि यह अनुरोध के रूप में जी ++ स्थापित किया, फिर सभी पैकेजों (संस्करण संख्याओं सहित) को स्थापित किया जो नियमित अभिव्यक्ति से मेल खाते हैं 5.0(क्योंकि वास्तव में नाम का कोई पैकेज नहीं है 5.0)। (साभार @edwinksl!)

इससे बचने के लिए, सुनिश्चित करें कि आपके पास रिक्त स्थान के बिना सही पैकेज के नाम हैं। -sअसली के लिए करने से पहले आप उपयुक्त एक्शन पाने के लिए विकल्प का उपयोग कर सकते हैं :

sudo apt-get -s install g++ 5.0

वास्तव में कुछ भी स्थापित किए बिना, आपको उन कार्यों को दिखाएगा जो कमांड निष्पादित करेगा । यदि यह ठीक लगता है, तो आप -sसंस्थापन करने के लिए हटा सकते हैं ।

आप एक अधिक नौसिखिया के अनुकूल चित्रमय पैकेज प्रबंधक, जैसे synapticया का उपयोग करने पर भी विचार कर सकते हैं muon


4
5.0एक रेगेक्स के रूप में इस्तेमाल किया जा रहा है, इसलिए aptयह स्ट्रिंग "5.0" के मिलान से अधिक कर रहा है।
एडविंकल

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++इसे भी इंस्टॉल करता है, लेकिन यह भविष्य में बदल जाएगा)। वास्तव में, जीसीसी की कोई सार्वजनिक 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के बीच किसी भी एक वर्ण के साथ fooऔर bar। संभावना f.*rकिसी भी पैकेज नाम को सबस्ट्रिंग कि है होता है इसका मतलब है fऔर rबीच में कुछ भी अर्थात वर्णों की संख्या के साथ। पूरे पैकेज का नाम मिलान करने के लिए, उदाहरण के लिए स्टार्ट एंड एंड का उपयोग करें ^foo.bar$। यदि आप चाहते हैं कि किसी भी रेगेक्स टोकन का शाब्दिक रूप से इलाज किया जाए, तो आपको टोकन के साथ भागने की जरूरत है \जैसे कि foo.barशाब्दिक रूप से इलाज करने के लिए , आपको आवश्यकता है:

    sudo apt-get install 'foo\.bar'
    

    यहां एकल उद्धरण पैटर्न की खोल व्याख्या को एक ग्लोबिंग पैटर्न के रूप में रोकने के लिए है, इस मामले में आवश्यक नहीं है, लेकिन पैटर्न के लिए उदाहरण के लिए आवश्यक है foo.*barयदि आपके पास वर्तमान निर्देशिका में एक फ़ाइल है जैसे उदा foo.bar

  • पैकेज नाम विचार पर एक पकड़ है। यदि पैटर्न से मेल खाने वाला कोई पैकेज है, तो पैटर्न का शाब्दिक उपचार किया जाएगा और रेगेक्स की व्याख्या नहीं की जाएगी। उदाहरण के लिए, एक पैकेज पैटर्न के लिए g++, यह g++रेगेक्स टोकन के बावजूद पैकेज से मेल खाएगा +। यदि g++परिभाषित रिपॉजिटरी में कोई पैकेज नहीं था , तो इसे ईआरई पैटर्न माना जाएगा।

अब, आपने आदेश दिया है:

sudo apt-get install g++ 5.0

इसका मतलब है की:

  • आप दो पैटर्न प्रदान पैकेज g++और अर्थात् स्थापित करना चाहते हैं5.0

  • g++g++ऊपर उल्लिखित शाब्दिक मेटा-पैकेज से मेल खाता है

  • शेष भाग में 5.0रेगेक्स टोकन है, .अर्थात कोई भी एकल वर्ण। तो यह किसी भी पैकेज नाम से मेल खाएगा जिसमें शामिल है 5<any_character>0। इसलिए मैच के लिए चुने गए सभी पैकेजों को स्थापित करने के लिए चुना गया है और संभवतया virtualbox-5.0इस प्रक्रिया में भी चुना गया है।

संभवतः आप g++संस्करण स्थापित करना चाहते हैं 5, इसलिए निम्न कार्य करना ( पहले से ही इस उत्तर में उल्लिखित है ); मेटा-पैकेज, संस्करण 5 g++-5के नवीनतम उपलब्ध मामूली जारी पैकेज का संदर्भ देगा g++:

sudo apt-get install g++-5

कॉन्फ़िगर किए गए रिपॉजिटरी के भीतर किसी भी पैकेज की खोज करने के लिए, उपयोग करें apt-cache(ईआरई की तरह उपयोग करता है apt-get):

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

यदि आप इसे Regex-ify नहीं करना चाहते हैं, तो lessबड़ी सूची को नीचे स्क्रॉल करने के लिए उपयोग करें:

apt-cache search g++ | less

ऐसा कुछ भी स्थापित करने से पहले जिसके बारे में आप निश्चित नहीं हैं, उसका उपयोग न करें -y( --assume-yes) विकल्प और पहले -s( --simulate/ --dry-run) के साथ उसका परीक्षण करें :

sudo apt-get install --dry-run foobar

1
+1 सबसे पूर्ण और व्यवस्थित उत्तर। REs पर वापस गिरने से पहले शाब्दिक मैचों की कोशिश करना; विस्तारित आरई का उपयोग (सादे आरईएस के विपरीत); सभी की क्षमता के apt-cache searchबारे में पता होना महत्वपूर्ण है।
arielf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.