क्या कोई समझा सकता है कि एक वाइल्डकार्ड के साथ सुडोकू क्यों काम नहीं करता है?


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
@ फ़ैसल: मुझे लगता है कि अनुमतियाँ बदलना उचित उपाय नहीं है, हालाँकि इससे पता चलता है कि निदान सही है। उचित उपाय सूदो कमांड तैयार करते समय ग्लोबिंग न करने के लिए प्रतीत होता है, बल्कि इसे यहां दबाएं (पथ तर्क को उद्धृत करके), इस तर्क को पास करने के लिए-उस lsआदेश के लिए जो तब (जब पहचान परिवर्तन से suलिया गया है) प्रभाव) ग्लोबिंग करते हैं।
मार्क वैन लीउवेन

2
@MarcvanLeeuwen lsकोई ग्लोबिंग नहीं करता है।
मुरु

3
आप sh -cकमांड लाइन में जोड़कर sudo वातावरण में ग्लोबिंग कर सकते हैं ।
स्टिग हेमर

@ फैसल अगर आपके सवाल का जवाब देता है, तो इसे स्वीकार करने पर विचार करें ...
क्लेम्ड स्टेरेनडेन

7

आपके पास ग्लोबिंग अक्षम हो सकता है।

स्क्रिप्ट में उन पंक्तियों की तरह 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

हाँ, मैं अपने व्यक्तिगत उपयोगकर्ता के रूप में उस रास्ते तक पहुँच नहीं है। स्क्रिप्ट में मैं अपने उपयोगकर्ता (ssh के माध्यम से) के रूप में जा रहा हूं और उत्पादन उपयोगकर्ता के माध्यम से उस कमांड को चला रहा हूं। क्या इसके समाधान की कोई युक्ति है ? (नोट करने के लिए एक बिंदु यह है कि क्या मुझे उपयोगकर्ता को बदलने के लिए पासवर्ड नहीं देना है)
फैसल

@Falal लक्ष्य उपयोगकर्ता ( sudo -u abc /path/to/script) के रूप में स्क्रिप्ट को चलाने के बारे में कैसे ? उस स्थिति में ग्लोबिंग विफल नहीं होना चाहिए। किसी भी स्थिति में मुरू ने अपने उत्तर में पथ का सुझाव दिया, मुझे नहीं। आपको उसका जवाब ( askubuntu.com/help/accepted-answer ) स्वीकार करने पर विचार करना चाहिए ।
कोस

वास्तव में मुझे लगता है कि स्क्रिप्ट के माध्यम से दूरस्थ मशीन पर चल रहा है, इसलिए मुझे जरूरत होगी। जवाब देने के लिए आपका धन्यवाद।
फैसल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.