मेजबानों फ़ाइल में एक पंक्ति जोड़कर, sudo - Mac का उपयोग करते समय अनुमति से वंचित होना


14

मैं अपने मैक पर मेजबानों फ़ाइल में एक लाइन जोड़ने की कोशिश कर रहा हूँ टर्मिनल पर एक लाइन कमांड निष्पादित करके।

मुझे लगा कि यह सुडो का उपयोग करना आसान होगा, लेकिन जब मैं >>मेजबान फाइल में जोड़ने की कोशिश करता हूं तो यह "अनुमति से इनकार" करता है, लेकिन अगर मैं >मेजबानों की सामग्री को बदलने की कोशिश करता हूं तो यह काम करता है ।

sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$

sudo echo test > /etc/hosts
Password:
$ 

OS आज तक है।


बस एक पाठ संपादक (के साथ शुरू का उपयोग sudo अपने संशोधित करने के लिए) / etc / hosts
MrSmith42

1
मैं एक स्क्रिप्ट बनाना चाहता हूं जो इसे स्वचालित करने में मदद करेगी, इसलिए एक पाठ संपादक इस मामले में मदद नहीं करेगा।
टकसाल

जवाबों:


17

ऐसा इसलिए echoहै क्योंकि इसे जड़ के रूप में चलाया जा रहा है, लेकिन शेल वास्तव में पुनर्निर्देशन करने वाला है। काम करने के लिए आपको एक नया खोल छिड़कना होगा:

sudo -- sh -c "echo test >> /etc/hosts"

संपादित करें: मैंने इस तथ्य को नहीं देखा है कि >रीडायरेक्ट काम करता है; मैं समझा नहीं सकता।


मुझे लगता है कि यह उपयोगिता को ध्यान देने योग्य है teeक्योंकि sudoसुरक्षा कारणों से सबसे अधिक उत्पादन वातावरण में अवरुद्ध करने की अनुमति है और इसे सबसे अधिक उत्पादन वातावरण में अवरुद्ध किया जाना चाहिए।
स्टीव बुज़ोनास

9

बल्कि तब प्रतिध्वनि के माध्यम से प्रतिध्वनि चल रही है जो आपके वर्तमान उपयोगकर्ता के रूप में चलाई जाएगी, न कि जड़ के रूप में प्रतिध्वनि आपके उदाहरण में चलाई जा रही है, टी का उपयोग करें जैसा कि स्टीव बुज़ोनस ने सुझाव दिया है

 echo 'test' | sudo tee -a /etc/hosts

सुडो को अब टी कमांड पर लागू किया जाता है। '-A' फ़ाइल में संलग्न है

यह भी मानक उत्पादन के लिए टी उत्पादन होगा। यदि आप अपने टर्मिनल में 'परीक्षण' नहीं देखना चाहते हैं > /dev/null, तो उस पंक्ति के अंत में भी जोड़ें ।


1

यह सुनिश्चित करने के लिए कि पहले एक नई लाइन बनाई गई थी, मैंने इसका उपयोग किया:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.