क्या सूडो के रूप में चलाना भूल जाने के बाद नैनो से सूडो के रूप में बचाना संभव है?


49

बहुत बार जब मैं नैनो के साथ फाइल संपादित करता हूं, तो एक त्रुटि को सहेजने और प्राप्त करने का प्रयास करता हूं क्योंकि मैं इसे sudo के रूप में चलाना भूल गया था। क्या कोई त्वरित तरीका है जिससे मैं फ़ाइल को फिर से खोलने और पुनः संपादित करने के बिना सुडो बन सकता हूं?


इस सवाल के साथ विलय का सुझाव दिया गया है। मूल रूप से एक ही समस्या है, लेकिन vim। मैं मर्ज पर विचार कर रहा हूं ... हालांकि मैं इस तथ्य पर भी विचार कर रहा हूं कि विम विशिष्ट निर्देश काम नहीं करेंगे nano
xenoterracide

1
@xenaterracide - मुझे लगता है कि vim प्रश्न इस का एक विशेष मामला है, क्योंकि वास्तव में इसका कोई हल है और ऐसा लगता है कि सामान्य मामले में कोई नहीं है। मुझे यकीन नहीं है कि आप पर निर्भर है। :)
किट सुंडे

आप आसानी से sudo tee फ़ंक्शन को कॉल करने के लिए अपने .vimrc में मैपिंग कर सकते हैं: <pre> <code> "रूट निजीकृत cmap w के साथ फ़ाइलों को लिखने की अनुमति देता है! W! Sudo tee%> / dev / null </ pre> <! / कोड>
jasonwryan

@xenoterracide: नैनो के बारे में कालेब का जवाब उपयोगी है, इसलिए मुझे लगता है कि हमें इसे केवल नैनो के बारे में रखना चाहिए।
मिकेल

1
@ मिकेल मैंने फैसला किया कि विलय अमान्य है। nanoनहीं है vim... और कोई nanoसमाधान नहीं है जो vimखुद को प्रस्तुत किया है।
xenoterracide

जवाबों:


37

नहीं, आप एक रनिंग प्रोग्राम की अनुमति नहीं दे सकते जो कि शुरू होने पर उसके पास नहीं है, वह सुरक्षा छेद होगा जिसे 'विशेषाधिकार एस्केलेटर' के रूप में जाना जाता है।

दो चीजें जो आप कर सकते हैं:

  1. एक अस्थायी फ़ाइल को / tmp में या जहाँ भी सहेजें, संपादक को बंद करें, फिर जिस फ़ाइल को आप संपादित कर रहे थे, उसमें अस्थायी फ़ाइल की सामग्री को डंप करें। sudo cp $TMPFILE $FILE। ध्यान दें कि इसका उपयोग इसके mvलिए उपयोग नहीं किया गया है क्योंकि फ़ाइल स्वामित्व और अनुमतियों में परिवर्तन इसकी वजह है, आप बस फ़ाइल सामग्री को बदलना चाहते हैं न कि फ़ाइल प्लेसहोल्डर को।
  2. Ctrl+ के साथ संपादक को पृष्ठभूमि में रखें z, फ़ाइल के स्वामित्व या अनुमतियों को बदलें ताकि आप इसे लिख सकें, फिर fgसंपादक को वापस पाने और बचाने के लिए उपयोग करें। अनुमतियाँ ठीक करने के लिए मत भूलना!

¹ कुछ संपादक वास्तव में विभिन्न अनुमतियों के साथ एक नई प्रक्रिया शुरू करने और बचत के लिए उस प्रक्रिया से डेटा को पारित करने में सक्षम हैं। उदाहरण के लिए देखें उन्नत संपादकों में अन्य समाधानों के लिए संबंधित प्रश्न जो फ़ाइल बफर को एक प्रक्रिया पाइप में लिखने की अनुमति देता है। नैनो में एक नई प्रक्रिया शुरू करने या अन्य प्रक्रियाओं के लिए डेटा पास करने की क्षमता नहीं है, इसलिए यह इस पार्टी से बाहर है।


अति उत्कृष्ट। धन्यवाद कालेब। मैं सिर्फ 30 मिनट पहले इस समस्या में भाग गया था। :)
बोहज

2
@ कैलेब आप जो भी वर्णन करते हैं, उसके भीतर से टी कमांड का उपयोग कर सकते हैं::w !sudo tee

@hellojesus शानदार चाल। यदि आप एक उत्तर के रूप में लिखना चाहते हैं तो मैं इसे खदान से निकाल सकता हूं। मुझे लगता है कि नैनो उपयोगकर्ताओं के अलावा अन्य लोग इस स्थिति में हैं और खुद को यहां पा सकते हैं।
कालेब

4
यह सवाल नैनो के बारे में माना जाता है। अगर हम यहां विम के बारे में जवाब देना शुरू करते हैं, तो इस सवाल का क्या मतलब है? हम पहले से ही विम के लिए अंदर से जड़ बन रहे हैं।
मिकेल

2
एक अस्थायी फ़ाइल में सहेजें / tmp - नैनो के अंदर अस्थायी फ़ाइल को कैसे
आनंद रॉकज

7

मैंने अभी-अभी कोशिश की nano, और जो मुझे सबसे ज्यादा आश्चर्यजनक लगा वह यह है कि यह आपको चेतावनी भी नहीं देता कि फ़ाइल केवल तभी पढ़ी जाती है जब आप फ़ाइल को संपादित करने का प्रयास करना शुरू करते हैं। ( अद्यतन: जाहिर तौर पर नैनो 2.2 चेतावनी देता है; 2.0 नहीं। )

यहाँ (मूल) लिपि है जो ऐसा करती है।

यह जाँचता है कि क्या आप फ़ाइल को संपादित कर सकते हैं, और यदि आप नहीं कर सकते हैं, तो यह रूट के बजाय "नैनो" चलाता है।

/ usr / स्थानीय / बिन / संपादित (या ~ / बिन / संपादित )

sudo=                       # empty is false, non-empty is true
editor=nano                 # XXX check $EDITOR and $VISUAL

if test -e "$1" && test ! -w "$1"; then
    if test -t 0 && test -t 2; then
        printf "%s is not writable.  Edit with sudo? [y/n] " "$1" 1>&2
        read -n 1
        case $REPLY in
        y|Y)
            sudo=true
            ;;
        n|N)
            sudo=
            ;;
        *)
            printf "\nExpected y or n.  Exiting.\n" 1>&2
            exit 1
            ;;
        esac
    else
        printf "%s is not writable.  Fix the permissions or run \"view\" instead." "$1" 1>&2
        exit 1
    fi
fi

${sudo:+sudo} "$editor" "$1"

और एक कमांड जिसे मैंने फोन किया viewताकि आप जान सकें कि अगर आप जानते हैं कि आप कोई बदलाव नहीं करेंगे।

/ usr / स्थानीय / बिन / दृश्य (या ~ / बिन / दृश्य )

editor=nano
readonlyflag=-v

"$editor" $readonlyflag "$1"

वहाँ पहले से ही एक कार्यक्रम कहा जाता है viewजो Vi / Vim का हिस्सा है, इसलिए बेहतर नाम सुझाने के लिए स्वतंत्र महसूस करें।
(लेकिन मुझे लगता है कि इस कार्यक्रम के पूर्ण कार्यान्वयन से विए का viewअतिरेक हो जाएगा।)


पूर्ण संस्करण


1
यह वास्तव में आपको चेतावनी देता है। प्रश्न तब होगा कि आप किस संस्करण का उपयोग कर रहे हैं। इसके अलावा, डेबियन-आधारित प्रणालियों पर विकल्प प्रणाली बेहतर है जो आप सुझाव दे रहे हैं।
0xC0000022L

2
आपके संदर्भ के लिए: [ Read ... lines (Warning: No write permission) ]शॉर्टकट (स्क्रीन के नीचे) के लिए मदद की दो पंक्तियों के ठीक ऊपर जो दिखाई देता है। नैनो संस्करण 2.2.4 है।
0xC0000022L

आह, यह नैनो 2.0 में चेतावनी नहीं है, जो कि मैं के साथ परीक्षण कर रहा था।
मिकेल

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