سؤال كيفية إلحاق ملف مثل sudo؟


ممكن تكرار:
sudo غير قادر على الكتابة إلى / etc / profile 

اريد ان افعل:

echo "something" >> /etc/config_file

ولكن ، بما أن المستخدم الجذر فقط لديه إذن كتابة لهذا الملف ، لا يمكنني القيام بذلك. لكن ما يلي لا يعمل.

sudo echo "something" >> /etc/config_file

هل هناك طريقة لإلحاق ملف في هذا الوضع دون الحاجة إلى فتحه أولا مع sudo'د محرر ثم إلحاق المحتوى الجديد باليد؟


224
2018-05-01 05:50


الأصل


أستخدم Ubuntu 9.04 وأتمكن من استخدام sudo لكل أمر أحتاجه حتى الآن. وضع البيض شبه قذيفة عملت. - 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 أكثر من تنفيذ باش مع أذونات إدارية:

  • أنت لا تنفذ Bash بأذونات إدارية
  • يتم تشغيل الجزء "الكتابة إلى الملف" فقط بأذونات متقدمة
  • الاقتباس من أمر معقد أسهل بكثير

332
2018-05-01 06:25



على OS X tee يبدو فقط أن لديها العلم -A. - user495470
دبيان 8 tee لديه -a إلحاق العلم. - clay
استعمال echo "output" | sudo tee -a file > /dev/null إذا كنت ترغب في تخطي إخراج وحدة التحكم. - Moshe Bixenshpaner
يعمل بشكل جيد ل WSL كذلك. - kayleeFrye_onDeck


يتم تنفيذ إعادة التوجيه في shell الحالي. لإجراء إعادة التوجيه مع امتيازات مرتفعة ، يجب تشغيل shell نفسه بامتيازات مرتفعة:

sudo bash -c "somecommand >> somefile"

40
2018-05-01 05:54





هل لديك sudo تفرخ sub-shell:

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

في هذا المثال ، يقوم sudo بتشغيل "sh" بالباقي كوسائط.

(يظهر هذا كمثال في صفحة الرجل sudo)


22
2017-10-13 14:23



السبب في ذلك هو أن shell الخاص بك (يعمل معك) هو الذي يقوم بإعادة التوجيه ، وليس sudo. نظرًا لأنك لا تملك إذنًا للكتابة إلى الملف ، فإنك تحصل على الخطأ "تم رفض الإذن". ما تقوم به هذه الإجابة هو بدء تشغيل shell جديد يعمل كجذر ، وبالتالي يمكنه الكتابة إلى الملف. - Randy Orrison
هذه ليست الإجابة الصحيحة. هذا هو الجواب الصحيح. أكيرا حصلت على أفضل واحد ، للمنطق المقدم في هذا الجواب. - TOOGAM


أنا عادة ما استخدم قذيفة وثيقة هنا مع sudo tee -a. شيء على غرار ما يلي:

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





في رأيي ، الأفضل في هذه الحالة هو dd:

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

4
2018-04-18 18:03





قد تكون هناك مشكلة في sudo هنا وإعادة التوجيه. استخدم texteditor من اختيارك بدلاً من ذلك لإضافة السطر.

sudo nano /etc/profile

أو ، يمكنك محاولة سو بدلا من ذلك

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