सवाल सूडो के रूप में फ़ाइल में कैसे संलग्न करें?


संभावित डुप्लिकेट:
sudo / etc / प्रोफ़ाइल को लिखने में असमर्थ 

मैं करना चाहता हूँ:

echo "something" >> /etc/config_file

लेकिन, चूंकि रूट उपयोगकर्ता के पास इस फ़ाइल को लिखने की अनुमति है, इसलिए मैं ऐसा नहीं कर सकता। लेकिन निम्नलिखित भी काम नहीं करता है।

sudo echo "something" >> /etc/config_file

क्या उस स्थिति में किसी फ़ाइल को संलग्न करने का कोई तरीका नहीं है, इसे पहले इसे खोलने के बिना sudoडी संपादक और फिर हाथ से नई सामग्री को जोड़ना?


224
2018-05-01 05:50


मूल


मैं उबंटू 9.04 का उपयोग कर रहा हूं और अब तक की हर कमांड के लिए सुडो का उपयोग करने में सक्षम हूं। एक सब-शैल फैलाना काम किया। - Matt Norris
मजबूत रूप से संबंधित: एक फ़ाइल में stdout को पुनर्निर्देशित करने पर आपके पास लेखन अनुमति नहीं है(यूनिक्स और लिनक्स पर)। कमजोर से संबंधित: ls निर्देशिका पथ के साथ फाइलें दिखाता है, लेकिन ls फ़ाइल पैटर्न के साथ नहीं है? - Scott


जवाब:


सही कार्य के लिए सही उपकरण: 'टी'

tee - read from standard input and write to standard output and files

तो आपकी कमांडलाइन बन जाती है

% echo "output" | sudo tee -a file

का लाभ tee प्रशासनिक अनुमतियों के साथ बैश निष्पादित करने पर:

  • आप प्रशासनिक अनुमतियों के साथ बैश निष्पादित नहीं करते हैं
  • केवल 'फ़ाइल में लिखें' भाग उन्नत अनुमतियों के साथ चलता है
  • एक जटिल कमांड का उद्धरण बहुत आसान है

332
2018-05-01 06:25



ओएस एक्स टी पर केवल एक ध्वज लगता है। - user495470
डेबियन 8 tee है -a ध्वज संलग्न करें। - clay
उपयोग echo "output" | sudo tee -a file > /dev/null अगर आप कंसोल आउटपुट छोड़ना चाहते हैं। - Moshe Bixenshpaner
डब्लूएसएल के लिए अच्छी तरह से काम करता है। - kayleeFrye_onDeck


वर्तमान खोल में पुनर्निर्देशन निष्पादित किया जाता है। उन्नत विशेषाधिकारों के साथ पुनर्निर्देशन करने के लिए, आपको ऊंचे विशेषाधिकारों के साथ स्वयं को खोलना होगा:

sudo bash -c "somecommand >> somefile"

40
2018-05-01 05:54





सूडो स्पॉन एक उप-खोल है:

sudo sh -c "echo 'JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile"

इस उदाहरण में, सूडो बाकी के साथ तर्क के रूप में "sh" चलाता है।

(यह सुडो मैन पेज में एक उदाहरण के रूप में दिखाया गया है)


22
2017-10-13 14:23



इसका कारण यह है कि यह आपका खोल है (आपके जैसा चल रहा है) जो पुनर्निर्देशन करता है, सूडो नहीं। चूंकि आपको फ़ाइल में लिखने की अनुमति नहीं है, इसलिए आपको अनुमति अस्वीकार कर दी गई है। यह उत्तर क्या है जो रूट के रूप में चल रहा एक नया खोल शुरू करना है, और इसलिए फ़ाइल में लिखने में सक्षम है। - Randy Orrison
यह सही जवाब नहीं है। यह एक सही जवाब है। उस जवाब में दिए गए तर्क के लिए अकीरा को बेहतर मिला। - TOOGAM


मैं आमतौर पर उपयोग करता हूं यहां दस्तावेज़ खोलें साथ में सुडो टी-ए। लाइनों के साथ कुछ:

sudo tee -a /etc/profile.d/java.sh << 'EOF'
# configures JAVA
JAVA_HOME=/usr/lib/jvm/java-8-oracle
export JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin
EOF

5
2018-06-16 16:16





मेरी राय में, इस मामले में सबसे अच्छा डीडी है:

sudo dd of=/etc/profile <<< END
JAVA_HOME=/usr/lib/jvm/java-6-sun
END

4
2018-04-18 18:03





यहाँ सूडो और पुनर्निर्देशन के साथ एक समस्या हो सकती है। लाइन जोड़ने के बजाय अपनी पसंद के एक टेक्स्टडिटर का प्रयोग करें।

sudo nano /etc/profile

या, आप इसके बजाय su कोशिश कर सकते हैं

su
echo ‘JAVA_HOME=/usr/lib/jvm/java-6-sun’ >> /etc/profile
exit

3
2017-10-13 14:10



दुर्भाग्यवश, इसने एक ही परिणाम उत्पन्न किया। - Matt Norris
su -c 'echo "JAVA_HOME=/usr/lib/jvm/java-6-sun" >> /etc/profile' कार्य करना चाहिए। चूंकि कुछ भी नहीं है, तो खोल पूरी तरह से गूंजने के लिए तर्क में गहराई से विस्तार कर सकता है, समग्र कमांड को सिंगल-कोट करें। - quack quixote
यह बढ़िया है। अब इसे एक स्क्रिप्ट के हिस्से के रूप में करें। - Ernie Dunbar


यह काम नहीं करेगा आप रीडायरेक्ट करने का प्रयास कर रहे हैं (उपयोग कर रहे हैं >>) सूडो का उत्पादन। आप वास्तव में क्या करना चाहते हैं आउटपुट को रीडायरेक्ट करना है echo। मेरा सुझाव है कि आप बस अपने पसंदीदा संपादक का उपयोग करें और उस पंक्ति को मैन्युअल रूप से जोड़ें /etc/profile। इसका अतिरिक्त लाभ है कि आप जांच सकते हैं कि क्या /etc/profile पहले से सेट है JAVA_HOME


0
2017-10-13 14:36





उपयोग भूतपूर्व-मार्ग:

sudo ex +'$put =\"FOO\"' -cwq /etc/profile

और प्रतिस्थापित करें FOO अपने चर के साथ संलग्न करने के लिए।

कुछ प्रणालियों में (जैसे ओएस एक्स), द /etc/profile फ़ाइल में 444 अनुमतियां हैं, इसलिए यदि आप अभी भी प्राप्त कर रहे हैं अनुमति नहीं मिली, पहले अनुमति की जांच करें और सही करें:

sudo chmod 644 /etc/profile

फिर पुन: प्रयास करें।


0
2018-05-24 22:22