bash - sudo echo "something">>/etc/privilegedFile কাজ করে না... সেখানে কোন বিকল্প আছে?




shell scripting (9)

এটি একটি চমত্কার সাধারণ প্রশ্ন, অন্তত মনে হচ্ছে এটি লিনাক্সে সুডো অনুমতিগুলির মত হওয়া উচিত।

অনেকগুলি সময় আছে যখন আমি কিছু /etc/hosts বা একই ফাইলে কিছু যোগ করতে চাই কিন্তু শেষ পর্যন্ত সক্ষম হতে পারছি না কারণ উভয় > এবং >> রুট দিয়ে এমনকি অনুমোদিত নয়।

এই কাজটি কি রুট করতে su বা sudo su ছাড়া কিছু করার আছে?


Bash আপনি stdout পরিষ্কার রাখতে > /dev/null সাথে সমন্বয়ে tee ব্যবহার করতে পারেন।

 echo "# comment" |  sudo tee -a /etc/hosts > /dev/null

আপনি moreutils প্যাকেজ থেকে sponge ব্যবহার করতে পারেন এবং আউটপুট পুনঃনির্দেশিত করার প্রয়োজন নেই (অর্থাত্, লুকানোর জন্য কোন tee শব্দ নেই):

echo 'Add this line' | sudo sponge -a privfile

আমি অদ্ভুত, যে আপনি একটি heredoc উদ্ধৃত করতে পারেন (বড় ব্লক জন্য) মনে রাখবেন:

sudo bash -c "cat <<EOIPFW >> /etc/ipfw.conf
<?xml version=\"1.0\" encoding=\"UTF-8\"?>

<plist version=\"1.0\">
  <dict>
    <key>Label</key>
    <string>com.company.ipfw</string>
    <key>Program</key>
    <string>/sbin/ipfw</string>
    <key>ProgramArguments</key>
    <array>
      <string>/sbin/ipfw</string>
      <string>-q</string>
      <string>/etc/ipfw.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true></true>
  </dict>
</plist>
EOIPFW"

ইকো 'হ্যালো ওয়ার্ল্ড' | (সুডো টি-এ /etc/apt/sources.list)


এরকম

sudo sh -c "echo >> somefile"

কাজ করা উচিত. সমস্যাটি হল> এবং >> আপনার শেল দ্বারা পরিচালিত হয়, "sudoed" কমান্ডের দ্বারা নয়, তাই আপনার অনুমতিগুলি আপনার ব্যবহারকারীদের নয়, আপনি যে ব্যবহারকারীকে "sudoing" করছেন সেগুলিরও নয়।


সমস্যা হল এটি আপনার শেল যা পুনঃনির্দেশনা পরিচালনা করে; এটি আপনার অনুমতিগুলির সাথে ফাইলটি খুলতে চেষ্টা করছে না সেগুলি যা আপনি সুডোর অধীনে চলছেন।

ভালো কিছু ব্যবহার করুন, সম্ভবত:

sudo sh -c "echo 'something' >> /etc/privilegedFile"

tee -a tee --append বা tee -a ব্যবহার করুন।

echo 'deb blah ... blah' | sudo tee --append /etc/apt/sources.list

কোট ভিতরে কোট এড়াতে ভুলবেন না।

কনসোলে তথ্য মুদ্রণ এড়াতে, আউটপুট / dev / null এ পুনঃনির্দেশিত করুন।

echo 'deb blah ... blah' | sudo tee --append /etc/apt/sources.list > /dev/null

$ A দিয়ে sed -i ব্যবহার করে, আপনি শেষ লাইনের পরে, পাঠ্য যুক্ত করতে পারেন, উভয় ভেরিয়েবল এবং বিশেষ অক্ষর রয়েছে।

উদাহরণস্বরূপ, $ NEW_HOST / $ / হোস্টগুলিতে $ NEW_HOST যোগ করে:

sudo sed -i "\$ a $NEW_IP\t\t$NEW_HOST.domain.local\t$NEW_HOST" /etc/hosts

sed বিকল্প ব্যাখ্যা:

  • -আই জন্য জায়গা
  • শেষ লাইন জন্য $
  • যোগ করার জন্য একটি

sudo sh -c "echo 127.0.0.1 localhost >> /etc/hosts"




sudo