পুনর্নির্দেশ বা সুডোর সাথে পাইপিং জড়িত কোনও কমান্ড কীভাবে চালানো যায়?


60

আমি যা অনুমান করি তা অনুসরণ করার চেষ্টা করছি যা রুট অ্যাকাউন্টের পরিবর্তে সুডো ব্যবহারের সর্বোত্তম অনুশীলন।

আমি একটি সাধারণ কনক্যাট ফাইল অপারেশন চালাচ্ছি যেমন:

sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock

এটি ">>" এর ডানদিকে ব্যর্থ হয় এটি সাধারণ ব্যবহারকারীর হিসাবে চলছে। অতিরিক্ত সুডো যুক্ত করাও ব্যর্থ হয় (সুডো কমান্ডে পাইপ দেওয়ার পরে ফাইলটিতে নয়) প্রত্যাশিত আচরণ)।

উদাহরণটি কেবল এটি তবে এটি রুট অ্যাকাউন্টের অধীনে যাচাই ও পরীক্ষা করা হয়েছে।

উত্তর:


75

আপনি রুট হিসাবে একটি নতুন শেল আহ্বান করতে পারেন:

sudo sh -c 'echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'

আপনি ফাইলটিতে লেখার জন্য কেবল একটি প্রক্রিয়া উন্নত করতে পারেন:

sudo tee -a /etc/conf.d/hwclock > /dev/null << EOF
clock_hctosys="YES"
EOF

8
সাধারণভাবে দ্বিতীয় বিকল্পটি আরও নিরাপদ কারণ কেবল teeকমান্ডগুলি মূল হিসাবে চালিত হয়, মূল কমান্ড নয় যা জটিল এবং দুর্ব্যবহারের শিকার হতে পারে। (এর ক্ষেত্রে নয় echo)
পাবউক

19

আরেকটি বিকল্প, সমানভাবে নিরাপদ, ব্যবহার করা sudoএর -iরুট হিসাবে লগ ইন করার সুইচ:

$ sudo -i
# echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'

এটি এখনও সর্বোত্তম অনুশীলনের নিয়ম অনুসরণ করে যেহেতু মূল অ্যাকাউন্টটি আসলে এর মতো সক্ষম হয় না তবে আপনাকে নিরাপদে রুট হিসাবে কাজ করতে দেয়। থেকে man sudo:

The -i (simulate initial login) option runs the shell
    specified by the password database entry of the target user
    as a login shell.  This means that login-specific resource
    files such as .profile or .login will be read by the shell.
    If a command is specified, it is passed to the shell for
    execution via the shell's -c option.  If no command is
    specified, an interactive shell is executed. 

আরেকটি বিকল্প নেইsudo bash
starbeamrainbowlabs

11

যদি আপনি একক উদ্ধৃতি ব্যতীত আপনার আদেশটি প্রকাশ করেন, আপনি এটি একক উদ্ধৃতিতে রেখে দিতে পারেন এবং এটি একটি মধ্যবর্তী শেলের মাধ্যমে সম্পাদন করতে পারেন।

এটিকে মূল হিসাবে চালিত করতে:

echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock

কমান্ডটি আলাদাভাবে ব্যবহার করুন যা ব্যবহার করে না ':

echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock

তারপরে প্রার্থনা করুন sudo sh -c …:

sudo sh -c 'echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'

বিকল্পভাবে, কোনও রুটে কেবল কল করতে পারে এমন ফাইলে আউটপুট লিখতে sudo tee। গন্তব্য ফাইলটিতে সংযুক্ত করতে -aবিকল্পটি পাস teeকরুন, অন্যথায় ফাইলটি কেটে গেছে।

echo 'clock_hctosys="YES"' | sudo tee -a /etc/conf.d/hwclock >/dev/null

আরো জটিল ফাইল পরিবর্তন জন্য, আপনি কল করতে পারেন sudo sed, sudo ed, sudo perl, ...

বিকল্পভাবে, একটি শালীন সম্পাদক ব্যবহার করুন এবং এটিকে sudo কল করুন। ইমাসে, খুলুন /sudo:/etc/conf.d/hwclockভিমে:w !sudo tee % , রুট হিসাবে খোলা ফাইলটিতে লেখার জন্য কল করুন বা sudo.vim প্লাগইন ব্যবহার করুন । অথবা সুডো প্রান্ত থেকে যান এবং কল করুন sudoedit /etc/conf.d/hwclock

অথবা আপনি অন্ধকার দিকে দিতে পারেন এবং রুট হিসাবে একটি শেল চালাতে পারেন।

$ sudo -i
# echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock

5

পুনর্নির্দেশ করা ফাইলটিতে অনুমতি থাকার কারণে কমান্ডটি ব্যর্থ হয়। sudoকমান্ডটি চালিত হওয়ার আগেই পুনঃনির্দেশটি ঘটে ।

আপনাকে অবশ্যই নিশ্চিত করতে হবে যে এটি মূলটি লেখার জন্য ফাইলটি প্রকৃতপক্ষে খোলায়।

এটি করার সহজ উপায়:

echo 'clock_hctosys="YES"' | sudo tee -a /etc/conf.d/hwclock >/dev/null

echoসাধারণ ব্যবহারকারী আপনাকে হিসাবে চালানো হতে পারে যেমন এটি শুধু একটি টেক্সট স্ট্রিং উৎপন্ন হয়। teeউপযোগ যদিও রুট হিসাবে চালাতে হবে, এবং tee -aডেটা যোগ হবে। আমরা আউটপুটটিকে পুনর্নির্দেশ করি /dev/nullকারণ teeডিফল্টরূপে, নির্দেশিত ফাইলগুলিতে লেখার পাশাপাশি তার ইনপুট ডেটাটিকে তার মান আউটপুটে নকল করে।

bash"এখানে-স্ট্রিংগুলি" বোঝে এমন কোনও শেল বা সহ :

sudo tee -a /etc/conf.d/hwclock >/dev/null <<<'clock_hctosys="YES"'

এটি উপরের হিসাবে কার্যকর হিসাবে অভিন্ন। আমরা স্ট্রিং উত্পাদন করার উপায়টি পরিবর্তন করা হয়।


আরেকটি, এটি করার সামান্য চক্রাকার উপায়:

sudo sh -c 'echo clock_hctosys=\"YES\" >>/etc/conf.d/hwclock'

এখানে, পুনর্নির্দেশটি sh -cমূলরূপে চলমান শিশু শেলের মধ্যে ঘটে ।


4

sudo dd of=

আপনি যেমন চান সংযোজন:

echo inbytes | sudo dd of=outfile oflag=append conv=notrunc

বা স্ক্র্যাচ থেকে ফাইলটি পুনরায় তৈরি করতে:

echo inbytes | sudo dd of=outfile

সুবিধাদি:

  • teeকোনও /dev/nullপুনঃনির্দেশের চেয়ে ভাল
  • shকোন সাবসেল থেকে ভাল
  • ddঅনেক শক্তিশালী বিকল্প রয়েছে, যেমন status=progressস্থানান্তর অগ্রগতি দেখতে

কাজ করে কারণ সুডো স্ট্যান্ডিনকে কমান্ডে ফরোয়ার্ড করে।

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