আমি যদি একটি লাইনারের শুরুতে "সুডো" টাইপ করি তবে এটি কি অন্যান্য কমান্ডগুলির সাথে প্রযোজ্য?


10

যদি আমি sudoব্যাশে একটি লাইনারের শুরুতে টাইপ করি তবে এটি কি অন্যান্য কমান্ডগুলির সাথে প্রযোজ্য?

অন্য কথায়, এটি কি:

sudo foo | foo2 | foo3

এর সমতুল্য:

sudo foo | sudo foo2 | sudo foo3

উত্তর:


11

নিজেকে বোঝানোর উপায় হিসাবে যে sudoকেবল প্রথম কমান্ডটি ব্যবহার করে এটি চালিত হয় এবং প্রথম পাইপটি পরে সমস্ত কিছু আপনার মূল ব্যবহারকারী আইডি হিসাবে চালানো হয় আপনি এটি দেখার জন্য এই নিরর্থক শৃঙ্খলা ব্যবহার করতে পারেন।

উদাহরণ # 1

$ sudo whoami > file1 | whoami > file2 | whoami > file3

তারপরে আপনি যখন catএই ফাইলগুলি দেখতে পাবেন তখন নীচের ব্যবহারকারীর নামগুলি:

$ cat file{1..3}
root
saml
saml

উদাহরণ # 2

তবে আপনি যদি একটি সাবশেল চালান:

$ sudo sh -c 'whoami > file4 | whoami > file5 | whoami > file6'

তারপরে আপনি catএই ফাইলগুলি যখন দেখবেন নীচের ব্যবহারকারীর নামগুলি:

$ cat file{4..6}
root
root
root

উদাহরণ # 3

আপনার মন্তব্যটি sudo foo1 | sudo foo2 ...কখনই কাজ করবে না, যেহেতু আউটপুটটি sudo foo1খাওয়ানো হবে sudo foo2। আমার whoamiউদাহরণগুলি ব্যবহার করে এটি দেখায় যে কমান্ডগুলির শৃঙ্খলা কিছুই করে না।

$ sudo whoami | sudo whoami | sudo whoami
root

প্রথম জন দৌড়েছে, তবে ইনপুট নিতে সজ্জিত না হওয়ায় ২ য় এবং তৃতীয় কোনও কিছুই করবে না। বরং আমি মনে করি আপনি এরকম কিছু লিখতে চেয়েছিলেন:

$ sudo whoami;sudo whoami;sudo whoami
root
root
root

এটি 3 টি বিভিন্ন কমান্ড প্রম্পটে 3 বার চালানোর সমতুল্য। অথবা এটা:

$ sudo whoami && sudo whoami && sudo whoami
root
root
root

তবে কখনও এই শেষটি করবেন না। এটি পরের অংশে অন্তর্ভুক্ত।

সুডো কল করার অস্পষ্ট উপায়

এগুলি আমার সেরা কাজ নয় তবে অন্যান্য উপায় যা আপনি আমাকে একাধিক কমান্ড ব্যবহার করে দেখতে পেয়েছেন sudo। আমি তাদের এখানে কেবলমাত্র পড়ানোর জন্য দেখাই যাতে অন্যরা প্রয়োজনীয়ভাবে তাদের কাজ করে!

উপায় # 1

$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh

কিভাবে এটা কাজ করে?

ডাবল উদ্ধৃতিগুলির মধ্যে ইকো প্রোগ্রামটি সুডোর কারণে মূল হিসাবে চলছে, তবে ইকোর আউটপুটটিকে কেবলমাত্র রুট-ফাইলের মধ্যে পুনঃনির্দেশ করছে যে শেলটি এখনও আপনার মতো চলছে। আপনার বর্তমান শেলটি sudoশুরু হওয়ার আগে পুনর্নির্দেশটি করে ।

উপায় # 2

$ sudo tee /proc/sys/vm/drop_caches <<<1

কিভাবে এটা কাজ করে?

এই পদ্ধতিটি teeপ্রোগ্রামটিকে মূল হিসাবে চালিত করে এবং এখানে স্ট্রিং থেকে ইনপুট নেয় যা কমান্ডটি sudoচাওয়ার আগে চলে tee

উপায় # 3

# this way
$ sudo -s -- 'whoami'

# or this way
sudo -s -- sh -c 'whoami;whoami'

কিভাবে এটা কাজ করে?

এগুলি দেখতে অন্যরকম হতে পারে তবে তারা সত্যই একই জিনিস করছে। -sস্যুইচটি ব্যবহার করার সময় , sudoএকটি একক কমান্ড চালাবে। এটি থেকে বাঁচার কোনও উপায় আছে কিনা তা আমি কখনই বুঝতে পারি না। এগুলির মতো কিছুই কাজ করবে না।

# this
$ sudo -s -- 'whoami;whoami'

# or this
$ sudo -s -- 'whoami\;whoami'

তবে ম্যান পৃষ্ঠাটি দেখার জন্য, -sস্যুইচটি বলেছে যে এটি /etc/passwdফাইলটির ব্যবহারকারীদের প্রবেশের শেলটিতে একটি কমান্ড দেবে pass সুতরাং আমরা দ্বিতীয় রূপে একটি কৌশল ব্যবহার করি, প্রধানত শেলটি পাস করে, অন্য শেল ( sh -c) যা আমরা চালাতে আমাদের কমান্ডগুলির স্ট্রিং "ব্যাকডোর" করি।

আরও আছে তবে আমি এখানেই থামব। এগুলি কেবলমাত্র যদি আপনি জিনিসগুলি বুঝতে পারেন তবে আপনি কী করতে পারবেন তা দেখানোর জন্য, তবে কেবল একসাথে চেইন জাঙ্ক করা উচিত নয় কারণ আপনি যা করতে পারেন, আপনার কোড প্রগমাসটিকে যৌক্তিক স্তরের হিসাবে বোঝা উচিত যাতে অন্যরা বুঝতে এবং সমর্থন করতে পারে ভবিষ্যতে তাদের।


6

না, আপনার উদাহরণে কেবলমাত্র fooকার্যকর করা হয় sudo। আপনি যদি সমস্ত কমান্ডগুলি বর্ধিত সুবিধাসমূহের সাথে চালাতে চান তবে আপনি শেলটি স্প্যান করতে পারেন:

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