সুডো হিসাবে কোনও ফাইলে কীভাবে যুক্ত হবেন?


271

আমি করতে চাই:

echo "something" >> /etc/config_file

তবে, যেহেতু কেবলমাত্র রুট ব্যবহারকারীর এই ফাইলটিতে লেখার অনুমতি রয়েছে, আমি এটি করতে পারি না। তবে নিম্নলিখিতগুলিও কাজ করে না।

sudo echo "something" >> /etc/config_file

সেই পরিস্থিতিতে কোনও ফাইলকে প্রথমে কোনও sudo'ডি এডিটর দ্বারা না খোলার পরে এবং নতুন সামগ্রীটি হাতে হাতে সংযুক্ত না করে কী উপায় আছে?


আমি উবুন্টু 9.04 ব্যবহার করছি এবং আমার এখন পর্যন্ত প্রয়োজনীয় প্রতিটি কমান্ডের জন্য সুডো ব্যবহার করতে সক্ষম হয়েছি। একটি উপ-শেল স্প্যানিং কাজ করেছে।
ম্যাট নরিস

দৃr়ভাবে সম্পর্কিত: আপনার  (ইউনিক্স এবং লিনাক্সে) লেখার অনুমতি নেই এমন কোনও ফাইলে পুনঃনির্দেশ করা হচ্ছে । দুর্বলভাবে সম্পর্কিত: lsডিরেক্টরি পথেরls
স্কট

উত্তর:


390

tee -a(বা tee --append) এর সাথে ব্যবহার করুনsudo

tee - read from standard input and write to standard output and files
[...]
   -a, --append
      append to the given FILEs, do not overwrite
[...]

সুতরাং আপনার আদেশ হয়ে যায়

echo "something" | sudo tee -a /etc/config_file

teeপ্রশাসনিক অনুমতি নিয়ে বাশকে ওভার কার্যকর করার সুবিধাগুলি

  • আপনি প্রশাসনিক অনুমতি নিয়ে বাশকে কার্যকর করবেন না
  • কেবলমাত্র 'ফাইলটিতে লেখুন' অংশটি উন্নত অনুমতি নিয়ে চলে
  • একটি জটিল কমান্ডের উদ্ধৃতি অনেক সহজ

2
ওএস এক্স টি তে কেবল একটি পতাকা রয়েছে বলে মনে হচ্ছে।
ল্রি

ডেবিয়ান 8 tee-aঅ্যাডেন্ড পতাকা রয়েছে।
কাদামাটি

9
echo "output" | sudo tee -a file > /dev/nullআপনি যদি কনসোল আউটপুট ছেড়ে যেতে চান তবে ব্যবহার করুন ।
মোশে বিক্সেনশপনার

ডাব্লুএসএল-এর জন্যও ভাল কাজ করে।
কায়লিফ্রি_ডোনেক

50

পুনঃনির্দেশটি বর্তমান শেলটিতে কার্যকর করা হয়। উন্নত সুবিধাসমূহের সাথে পুনঃনির্দেশটি করতে, আপনাকে অবশ্যই শেলটি নিজেই উন্নত সুবিধাগুলি দিয়ে চালাতে হবে:

sudo bash -c "somecommand >> somefile"

26

সুডো একটি সাব-শেল স্প্যান করেছেন:

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

এই উদাহরণে, সুডো বাকী যুক্তি হিসাবে "sh" চালায়।

(এটি সুডো ম্যান পৃষ্ঠাতে উদাহরণ হিসাবে দেখানো হয়েছে)


8
কারণটি হ'ল এটি আপনার শেল (আপনার মতো চলমান) যা পুনর্নির্দেশনা করে, সুডো নয়। যেহেতু আপনার কাছে ফাইলটিতে লেখার অনুমতি নেই, আপনি অনুমতি ত্রুটিটি পেয়েছেন get এই উত্তরটি যা করে তা হ'ল মূল হিসাবে চলমান একটি নতুন শেল শুরু করা এবং তাই ফাইলটিতে লিখতে সক্ষম।
র‌্যান্ডি অরিসন

এটি সঠিক উত্তর নয়। এটি একটি সঠিক উত্তর। সেই উত্তরটিতে যুক্তি সরবরাহ করার জন্য আকিরার আরও ভাল একটি হয়েছে।
তোগাম


4

আমার মতে, এই ক্ষেত্রে সবচেয়ে ভাল হবে ডিডি:

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

3

এখানে সুডো এবং পুনঃনির্দেশে সমস্যা হতে পারে। লাইনটি যুক্ত করার পরিবর্তে আপনার পছন্দের কোনও টেক্সটসিটার ব্যবহার করুন।

sudo nano /etc/profile

অথবা, আপনি তার পরিবর্তে su চেষ্টা করতে পারেন

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

দুর্ভাগ্যক্রমে, এটি একই ফলাফল প্রকাশ করেছে।
ম্যাট নরিস

1
su -c 'echo "JAVA_HOME=/usr/lib/jvm/java-6-sun" >> /etc/profile'কাজ করা উচিত. যেহেতু কিছুই নেই শেলটি ভুল করে ইকোতে ইকোতে প্রসারিত করতে পারে, সামগ্রিক কমান্ডটি একক উদ্ধৃতি দিয়ে দেয়।
কোয়াকোট কোয়েসোট

সেটা অসাধারণ ছিল. এখন এটি কোনও স্ক্রিপ্টের অংশ হিসাবে করুন।
আর্নি ডানবার

0

আপনি >>সুডোর আউটপুট পুনর্নির্দেশের (ব্যবহার করে ) চেষ্টা করছেন এটি কাজ করবে না । আপনি যা করতে চান তা হ'ল আউটপুটটিকে পুনর্নির্দেশ করা echo। আমি আপনাকে কেবল নিজের পছন্দসই সম্পাদকটি ব্যবহার করতে এবং সেই লাইনটি ম্যানুয়ালি যুক্ত করার পরামর্শ দিই /etc/profile। এটির অতিরিক্ত সুবিধা রয়েছে যা আপনি /etc/profileইতিমধ্যে সেট করে কিনা তা পরীক্ষা করে দেখতে পারেন JAVA_HOME


0

প্রাক্তন- ওয়ে ব্যবহার করুন :

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

এবং FOOযুক্ত করতে আপনার পরিবর্তনশীল সাথে প্রতিস্থাপন করুন।

কিছু সিস্টেমে (যেমন ওএস এক্স) /etc/profileফাইলটির ৪৪৪ টি অনুমতি রয়েছে, সুতরাং যদি আপনি এখনও অনুমতি অস্বীকার করেন তবে প্রথমে অনুমতিটি পরীক্ষা করে সংশোধন করুন:

sudo chmod 644 /etc/profile

তারপরে আবার চেষ্টা করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.