sudo প্রতিধ্বনিত “কিছু” >> / ইত্যাদি / অধিকারযুক্ত ফাইল কাজ করে না


585

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

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

এই কাজটি কোনওভাবেই না করে suবা sudo suশিকড় না করেই কি তৈরি করা যায়?

উত্তর:


854

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

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

উদ্ধৃতিগুলির ভিতরে উদ্ধৃতিগুলি এড়াতে ভুলবেন না।

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

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

( -a/ --append) পতাকা সম্পর্কে মনে রাখবেন ! ঠিক teeযেমন কাজ করে >এবং আপনার ফাইলটি ওভাররাইট করবে। tee -aমত কাজ করে >>এবং ফাইলের শেষে লিখতে হবে।


3
আমি একে একে পছন্দ করি এটি কেবল সহজতম (এবং এটি টি সম্পর্কে আমাকে চেষ্টা করেছিল যা অন্যান্য পরিস্থিতিতেও কার্যকর হয়) hand
জোছিম সৌর

5
আমি রাজী. একটি নতুন শি আরম্ভ করার চেয়ে খুব কম মনে হচ্ছে, বিশেষত পরিবেশের সাথে কাজগুলি করার সম্ভাবনা সহ
স্যাম ব্রাইটম্যান

39
একটি গুরুত্বপূর্ণ বিষয় লক্ষণীয়: -কে কখনও ভুলে যাবেন না! কী echo 'tmpfs /tmp tmpfs defaults 0 0' | sudo tee /etc/fstabকরবেন তা
ভেবে দেখুন

21
ওএস এক্স এর অধীনে এটি এর tee -aপরিবর্তে হওয়া উচিত tee --append
নাইট

26
যারা জানেন না তাদের জন্য @ মাইম_ই কী বলেছেন: ( ) পতাকা ছাড়াই -aকমান্ডটি পুরো ফাইলটি শেষ পর্যন্ত যুক্ত করার পরিবর্তে প্রদত্ত স্ট্রিং দিয়ে ওভাররাইট করে--append
টটিমেডলি

313

সমস্যাটি হ'ল শেলটি আউটপুট পুনঃনির্দেশের কাজ করে, সুডো বা প্রতিধ্বনি নয়, তাই এটি আপনার নিয়মিত ব্যবহারকারী হিসাবে করা হচ্ছে।

নিম্নলিখিত কোড স্নিপেট চেষ্টা করুন:

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

"সুডো অনুমতি সীমানা" কি? এটি কেবলমাত্র শেল যা স্পষ্ট কারণগুলির জন্য কমান্ডের চেয়ে পুনর্নির্দেশ অপারেটরকে পার্স করে
তোলে

1
আপনার উপর নির্ভর করে shপ্রতিধ্বনি \tএকক উদ্ধৃতিগুলির মতো পালানোর ক্রমগুলি ব্যাখ্যা করতে পারে । printf %s 'something'পরিবর্তে আপনি ব্যবহার করতে পারেন ।
Lri

টি ব্যবহার করা আরও জনপ্রিয় এবং আরও নতুন ডিস্ট্রোসের সাথে সুসংগত।
এডুয়ার্ডো বি।

1
এটি কেবলমাত্র এসএসএইচ কমান্ড হিসাবে একমাত্র কাজ করে যা দূরবর্তী নোডে কার্যকর করা যায়।
ডানকান লক

আমি এখানে অন্যান্য পোস্টের সাথে একমত। এটি শেল এবং কেবল শেল ব্যবহার করে তাই টিয়ের মতো অন্য প্রোগ্রামের প্রয়োজন হয় না। হ্যাঁ আমি জানি টি ইতিমধ্যে ইনস্টল করা আছে, তবে আপনি খালি হাড়ের আল্পাইনের মতো কী মাইক্রো ডিস্ট্রো ব্যবহার করছেন তার উপর নির্ভর করে না। আমি পছন্দ করি যে আপনার কাছেও একটি শেল বিকল্প রয়েছে: sudo /bin/bash -c "echo 'fs.inotify.max_user_watches = 524288' > /etc/sysctl.d/60-golang-inotify.conf"উদাহরণস্বরূপ।
লাইগামার

35

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

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

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

@ গর্ডনসুন কারণ এটি sudo(সুরক্ষার কারণে) পরিবেশটি উপ-প্রসেসে প্রচার করে না। আপনি sudo -Eএই বিধিনিষেধকে বাইপাস করতে ব্যবহার করতে পারেন ।
আরিলফ

1
@ গর্ডনসুন হ্যাঁ এটি হবে, আপনি কেন এই বিবৃতি পুনরাবৃত্তি করছেন তা আমি বুঝতে পারি না! আপনি যদি sudo sh -c "echo 'something' >> $FILENAME"ডাবল উদ্ধৃতি সহ করেন, এটি কাজ করবে - ভেরিয়েবল প্রতিস্থাপনটি suoed শেল দ্বারা নয়, বহিরাগত শেল দ্বারা সম্পন্ন হয়।
নাদভ হার'এল


13

এরকম

sudo sh -c "echo >> somefile"

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


9

আমি কৌতুহলকারীদের জন্য নোট করব, আপনি একটি বংশোদ্ভূত উদ্ধৃতি দিতে পারেন (বৃহত ব্লকের জন্য):

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"

1
এটি দুর্দান্ত কাজ করে, এম্বেডড কোটগুলি বাদ দিয়ে একটি with
এন জোন্স

একদম ডান @ এনজোনস! আমি আমার উত্তর সম্পাদনা করব। (নোট, তবে, এটি না করে অভ্যন্তরীণ স্ট্রিপগুলি "
কমিয়ে


4

আপনার উত্তরটি ব্যবহার করে এটি আপনার ~/.bashrc:

sudoe() {
    [[ "$#" -ne 2 ]] && echo "Usage: sudoe <text> <file>" && return 1
    echo "$1" | sudo tee --append "$2" > /dev/null
}

এখন আপনি চালাতে পারেন sudoe 'deb blah # blah' /etc/apt/sources.list


সম্পাদনা:

আরও একটি সম্পূর্ণ সংস্করণ যা আপনাকে কোনও ফাইল থেকে ইনপুট পাইপ করতে বা পুনঃনির্দেশ করতে দেয় এবং -aঅ্যাডিং বন্ধ করার জন্য একটি স্যুইচ অন্তর্ভুক্ত করে (যা পূর্বনির্ধারিতভাবে রয়েছে):

sudoe() {
  if ([[ "$1" == "-a" ]] || [[ "$1" == "--no-append" ]]); then
    shift &>/dev/null || local failed=1
  else
    local append="--append"
  fi

  while [[ $failed -ne 1 ]]; do
    if [[ -t 0 ]]; then
      text="$1"; shift &>/dev/null || break
    else
      text="$(cat <&0)"
    fi

    [[ -z "$1" ]] && break
    echo "$text" | sudo tee $append "$1" >/dev/null; return $?
  done

  echo "Usage: $0 [-a|--no-append] [text] <file>"; return 1
}

2

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

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

0

সেড -i ব্যবহার করে সঙ্গে $ এ , আপনি শেষ লাইনের পরে উভয় ভেরিয়েবল এবং বিশেষ অক্ষর সমন্বিত পাঠ্য যুক্ত করতে পারেন।

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

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

সেড বিকল্পগুলি ব্যাখ্যা করা হয়েছে:

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


0

কিভাবে সম্পর্কে:
প্রতিধ্বনি পাঠ | সুডো ডিডি স্ট্যাটাস = এর
কোনওটিই নয় = প্রিভিলেজড ফাইল আমি / প্রোক / সিএস / নেট / আইপিভি 4 / টিসিপি_আরএম পরিবর্তন করতে চাই।
আমি করেছি:
sudo dd status = = / proc / sys / নেট / ipv4 / tcp_rmem এর <<< "4096 131072 1024000"
একক লাইন নথির সাথে প্রতিধ্বনিকে সরিয়ে দেয়


1
দয়া করে মাধ্যমে পড়া করার জন্য একটু সময় সম্পাদনা সাহায্যের মধ্যে সহায়তা কেন্দ্র । স্ট্যাক ওভারফ্লোতে ফর্ম্যাট করা অন্যান্য সাইটের চেয়ে আলাদা।
ধর্মমান

-1

এটি আমার পক্ষে কাজ করেছে: আসল কমান্ড

echo "export CATALINA_HOME="/opt/tomcat9"" >> /etc/environment

ওয়ার্কিং কমান্ড

echo "export CATALINA_HOME="/opt/tomcat9"" |sudo tee /etc/environment

1
হওয়া উচিত tee -a। শুধু teeফাইলটি ওভাররাইট করবে!
কোডফোরস্টার

-6

আপনি কি ফাইলটির মালিকানা পরিবর্তন করতে পারেন তবে cat >>সংযোজন ব্যবহারের পরে এটি আবার পরিবর্তন করতে পারবেন ?

sudo chown youruser /etc/hosts  
sudo cat /downloaded/hostsadditions >> /etc/hosts  
sudo chown root /etc/hosts  

এই কাজ কিছু আপনার জন্য?


4
ডাউন ব্যবহার করার জন্য একটি ধ্বংসাত্মক কমান্ড। যদি কোনও কনফিগার ব্যবস্থাপক / etc / ਮੇਜ਼ਬਾਨগুলি আপডেট করতে ব্যবহার করে থাকেন তবে হঠাৎ / etc / হোস্ট কনফিগার ব্যবহারকারীর অন্তর্ভুক্ত এবং মূলের নয়। যা সম্ভবত অন্যান্য প্রক্রিয়াগুলিতে / ইত্যাদি / হোস্টগুলিতে অ্যাক্সেস না রাখে to সুডোর পুরো বিষয়টি হ'ল রুটে কোনও লগইন করা এড়ানো এবং sudoers এর মাধ্যমে আরও বিধিনিষেধগুলি পাইল করা যেতে পারে।
ডেভিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.