यदि फ़ाइल मौजूद है, तो मैं यह जांचने के लिए कि मैं sudo का उपयोग कैसे कर सकता हूं?


13

मैं जांच करना चाहता हूं कि क्या कोई फाइल मौजूद है

[ -f /path/to/file/ ]

हालाँकि मैं इस कमांड को एक नियमित उपयोगकर्ता के रूप में चला रहा हूं और फ़ाइल रूट के स्वामित्व में है। इसे पूरा करने के लिए मैं सूडो का उपयोग कैसे कर सकता हूं।

sudo [ -f /path/to/file/ ] काम नहीं करता।


2
यह मेरे सिस्टम पर काम करता है। लक्षण क्या हैं ? क्या आप निश्चित रूप से -f, not -e का उपयोग करना चाहते हैं?
b0fh

जवाबों:


11

आप जो वर्णन कर रहे हैं वह ठीक काम करना चाहिए - जब तक आप निरपेक्ष पथ का उपयोग कर रहे हैं, और -f("फ़ाइल मौजूद है और एक नियमित फ़ाइल है") वास्तव में वह परीक्षण है जिसे आप करना चाहते हैं।

मुझे /आपके प्रश्न में एक अनुगामी दिखाई देता है - क्या आप किसी निर्देशिका के लिए परीक्षण कर रहे हैं? यह होना चाहिए -d, या बस -e("कुछ नाम के साथ मौजूद है - प्रकार की परवाह किए बिना")

यह भी ध्यान दें कि जब तक रास्ते में कोई चीज पठनीय नहीं है test( [) आपको यह बताने में सक्षम होना चाहिए कि क्या रूट के स्वामित्व वाली कोई फ़ाइल मौजूद है या नहीं (जैसे [ -f /root/.ssh/known_hosts ]कि शायद विफल हो जाएगी, क्योंकि /root/.ssh निर्देशिका नहीं है (या कम से कम होना चाहिए) एक सामान्य उपयोगकर्ता द्वारा पढ़ा जा सकता है ) [ -f /etc/crontab ]सफल नहीं होना चाहिए)।


4
एक संभावित समस्या है: यदि sudoकमांड विफल रहता है (खराब पासवर्ड, / etc / sudoers, आदि में अनुमति नहीं है), तो यह उसी परिणाम देगा जैसे कि फ़ाइल मौजूद नहीं थी।
गॉर्डन डेविसन

1
@ गोर्डन - सच: मेरा जवाब sudoकाम कर रहे हिस्से पर
समर्पित है

13
if sudo test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi

आदमी पृष्ठ का परीक्षण करें

चीजों को पूरा करने के लिए, विपरीत दिशा में, यदि आप एक निश्चित उपयोगकर्ता के लिए फ़ाइल या निर्देशिका पढ़ने योग्य है, तो आप रूट से जांच कर सकते हैं।

if sudo -u username test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi

Luca Borrione के जवाब ने मेरे लिए पूरी तरह से काम किया। मुझे उन फ़ाइलों के अस्तित्व का परीक्षण करने की आवश्यकता थी जो केवल रूट द्वारा पठनीय निर्देशिका के अंदर गहरी थीं।
दिवार

1

अन्य उत्तरों को जोड़कर, परीक्षण या सुडोल प्रमाणीकरण के बीच अंतर करना पहले चलने से विफल हो सकता है sudo true। अधिकांश सूडो कार्यान्वयन मुझे पता है कि एक छोटी अवधि के भीतर फिर से प्रमाणीकरण की आवश्यकता नहीं होगी।

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

if sudo true; then
    if sudo test -f "/path/to/file"; then
        echo "FILE EXISTS"
    else
        echo "FILE DOESN'T EXIST"
    fi
else
    echo "SUDO AUTHENTICATION FAILED"
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.