उचित अनुमति के बिना तारांकन का विस्तार नहीं किया जा सकता


16

क्या कोई मुझे निम्नलिखित समझा सकता है?

$ ls -ld /temp/sit/build/
dr-xr-s--- 3 asdf qwer 4096 Jan 31  2012 /temp/sit/build/

$ ls -ld /temp/sit/build/*
ls: /temp/sit/build/*: Permission denied

तो जाहिर है, मैं यहाँ तारांकन का उपयोग नहीं कर सकता। मैंने इसे एक sudo कमांड के साथ आज़माया है और मुझे "अनुमति अस्वीकृत" के बजाय "ऐसी कोई फ़ाइल नहीं" त्रुटि मिली है ...

sudo ls -l /temp/sit/build/*
ls: /temp/sit/build/batch*: No such file or directory

लेकिन यह अंत में काम करता है अगर मैं * का उपयोग नहीं करता

sudo ls -l /temp/sit/build/
total 4
dr-xr-s--- 11 asdf qwer 4096 Oct  3 23:31 file

जवाबों:


20

*वाइल्डकार्ड का विस्तार करने वाला शेल वह शेल है जहां आप इसे टाइप करते हैं। यदि शेल को निर्देशिका में फ़ाइलों की सूची को पढ़ने की अनुमति है, तो यह तर्कों के साथ फैलता /temp/sit/build/*है /temp/sit/build/file, और चलता sudoहै ls, -lऔर /temp/sit/build/file। खोल के लिए किसी भी मैच को खोजने में असमर्थ है /temp/sit/build/*, तो यह पद्धति अकेला छोड़ देता है, और (क्योंकि यहां कोई मिलान नहीं, या क्योंकि खोल मैचों को देखने के लिए कोई अनुमति है कि क्या यह है) sudoतर्क के साथ कहा जाता है ls, -lऔर /temp/sit/build/*

चूंकि कोई फ़ाइल नहीं है /temp/sit/build/*, इसलिए lsयदि आप इसे उस नाम से पास करते हैं तो कमांड शिकायत करती है। याद रखें कि lsवाइल्डकार्ड का विस्तार नहीं है, यह शेल का काम है।

यदि आप चाहते हैं कि वाइल्डकार्ड का विस्तार उस निर्देशिका में हो, जहाँ आपने अनुमति नहीं पढ़ी है, तो विस्तार शेल में उस शेल के sudoबजाय शुरू होना चाहिए जो कॉल करता है sudosudoस्वचालित रूप से एक शेल शुरू नहीं करता है, आपको यह स्पष्ट रूप से करने की आवश्यकता है।

sudo sh -c 'ls -l /temp/sit/build/*'

यहां, निश्चित रूप से, आप sudo ls -l /temp/sit/build/इसके बजाय कर सकते हैं , लेकिन यह अन्य पैटर्न के लिए सामान्य नहीं करता है।


1

कुछ दुर्लभ मामलों में आपको यह जांचने की आवश्यकता है कि आपने अपने शेल के लिए ग्लोबिंग को अक्षम नहीं किया है जो No such file or directoryवाइल्डकार्ड ( *) के साथ फाइलों को सूचीबद्ध करने का प्रयास करते समय आपको दे सकता है ।

उदाहरण के लिए:

$ ls /tmp/sit/build/*
/tmp/sit/build/file
$ set -f
$ ls /tmp/sit/build/*
ls: cannot access /tmp/sit/build/*: No such file or directory
$ set +f
$ ls /tmp/sit/build/*
/tmp/sit/build/file

help setअधिक जानकारी के लिए जाँच करें ।

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