কেউ কি ব্যাখ্যা করতে পারেন যে একটি ওয়াইল্ডকার্ড সহ সুডো এলএস কেন কাজ করে না?


16
$ sudo -iu abc ls -ltr /sites/servers/server_instance/logs/access*
ls: cannot access /sites/servers/server_instance/logs/access*: No such file or directory

$ sudo -iu abc ls -ltr /sites/servers/server_instance/logs/
total 594812
-rwxrwxrwx 1 abc abc      45 Mar 21 12:42 old.log
-rwxrwxrwx 1 abc abc      304537970 Mar 24 12:45 console.log
-rwxrwxrwx 1 abc abc      304537970 Mar 24 13:20 access_nginx.log

কেন এমন হয় কেউ ব্যাখ্যা করতে পারে? এর কারণে আমি কোনও স্ক্রিপ্টে আটকে আছি।

উত্তর:


29

একটি সম্ভাবনা হ'ল আপনার সেই পথে ( /sites/servers/server_instance/logs) পথে এক বা একাধিক ডিরেক্টরি অ্যাক্সেস করার অনুমতি নেই । ওয়াইল্ডকার্ড প্রসারণটি আপনার শেল দ্বারা চালিত হয় এবং তারপরে প্রসারিত পাথগুলি sudoকমান্ডে প্রেরণ করা হয় ।

যদি আপনার ব্যবহারকারীর অনুমতি না থাকে তবে প্রসারণটি প্রথম কমান্ডে কাজ করবে না। এটি চলমান ( ls -ltr /sites/servers/server_instance/logs/access*) হিসাবে চালিত হবে , এবং আক্ষরিক নামযুক্ত কোনও ফাইল নেই access*)। তাহলে abcপাথ সব ডিরেক্টরি জন্য প্রয়োজন বোধ করা অনুমতি না, দ্বিতীয় কমান্ড, যা কোনো ওয়াইল্ডকার্ড ছিল না, আপনার শেল দ্বারা অস্পৃষ্ট হবে, এবং এটি ভাল কাজ করবে।

$ sudo namei -lx foo/bar/baz
f: foo/bar/baz
drwxr-xr-x muru    muru    foo
drwx------ test    test    bar
drwxr-xr-x muru    muru    baz

$ sudo ls foo/bar/b*
ls: cannot access 'foo/bar/b*': No such file or directory

$ sudo -u test ls foo/bar/
baz

ধন্যবাদ মুরু, আপনার মতামতটি সঠিক ছিল, আমি অনুমতিটি পরিবর্তন করে 755 এবং এখন এটি ঠিক আছে।
ফয়সাল

3
@ ফয়সাল: আমি মনে করব যে অনুমতি পরিবর্তন করা সঠিক প্রতিকার নয়, যদিও এটি নির্ধারণ করে যে সঠিকভাবে নির্ধারণ করা হয়েছে। যথাযথ প্রতিকারটি sudo কমান্ড প্রস্তুত করার সময় গ্লোববিং না করার জন্য মনে হবে, বরং এটি এখানে চাপুন (পথের যুক্তির উদ্ধৃতি দিয়ে) যুক্তিটি সেই lsআদেশ হিসাবে প্রেরণ করা যাবে যেটি তখন (যখন পরিচয়টি পরিবর্তন থেকে suনেওয়া হয়েছে) প্রভাব) গ্লোববিং করতে।
মার্ক ভ্যান লিউউইন

2
@ MarcvanLeeuwen lsকোনও গ্লোববিং করে না।
মারু

3
আপনি sh -cকমান্ড লাইনে যুক্ত করে sudo পরিবেশে গ্লোববিং ঘটতে পারেন ।
স্টিগ হেমার

@ ফয়সাল যদি এটি আপনার প্রশ্নের জবাব দেয় তবে তা গ্রহণ করার কথা বিবেচনা করুন ...
ক্লিমে স্টেরিডেন

7

আপনি গ্লোব্বিং অক্ষম থাকতে পারে।

স্ক্রিপ্টে lines রেখাগুলির মতো set -fবা তার set -o noglobআগে বা কোনও ইন্টারেক্টিভ শেল চালানোর জন্য কিছু সন্ধান করুন echo $-; যদি fআউটপুটটিতে কিছু থাকে তবে গ্লোব্বিং অক্ষম করা হয়:

$ echo $-
fhimBH

এটি ঠিক করতে, স্ক্রিপ্টটি সরিয়ে ফেলুন set -fবা set -o noglobথেকে, বা যদি ইন্টারেক্টিভ শেল চালানো হয় set +fবা set +o noglob:

$ set -f
$ echo $-
fhimBH
$ ls access*
ls: cannot access access*: No such file or directory
$ set +f
$ echo $-
himBH
$ ls access*
access

হ্যাঁ, আমার ব্যক্তিগত ব্যবহারকারী হিসাবে আমার সেই পথে অ্যাক্সেস নেই। স্ক্রিপ্টে আমি আমার ব্যবহারকারী হিসাবে (এসএসএসের মাধ্যমে) যাচ্ছি এবং প্রোডাকশন ব্যবহারকারীর মাধ্যমে সেই কমান্ডটি চালাচ্ছি। এই জন্য কোন কাজ আছে? (একটি বিষয় লক্ষণীয় হ'ল আমাকে ব্যবহারকারীর স্যুইচিংয়ের জন্য পাসওয়ার্ড দিতে হবে না)
ফয়সাল

@ ফয়সাল লক্ষ্য ব্যবহারকারী হিসাবে স্ক্রিপ্ট চালানো সম্পর্কে ( sudo -u abc /path/to/script)? সেক্ষেত্রে গ্লোব্বিং ব্যর্থ হওয়া উচিত নয়। যাই হোক না কেন মুড়ু তার উত্তরে পথের ইস্যুটির পরামর্শ দিয়েছিল, আমি নয়। আপনার উত্তরটি জিজ্ঞাসা করা উচিত ( Askubuntu.com/help/accepted-answer )।
kos

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