नोट : विरासत लाइसेंसिंग कारणों के कारण, अधिकांश GNU / लिनक्स वितरण में बिल जॉय द्वारा लिखित मूल vi कार्यक्रम शामिल नहीं है। इसके बजाय, vi-vi-संगतता मोड में VIM चलाकर vi कमांड प्रदान की जाती है। निम्नलिखित उत्तर अपने vi-संगतता मोड के साथ Vim चलाने पर आधारित है।
केवल-पढ़ने के लिए फ़ाइल को संशोधित करना
यदि वे केवल-पढ़ने के लिए फ़ाइल के बफ़र को संशोधित करते हैं, तो विम उपयोगकर्ता को चेतावनी देता है W10: Warning: Changing a readonly file
। उपयोगकर्ता की कोशिश करता इस फ़ाइल के लिए लिख रहे हैं, तो वे, निम्न त्रुटि संदेश मिलता है 'readonly' option is set (add ! to override)
।
जब मूल निर्देशिका Vim उपयोगकर्ता द्वारा लेखन योग्य है
विम, उपयोगी किया जा रहा है, की सुविधा देता है उपयोगकर्ता पता है कि वे जबरदस्ती एक विस्मयादिबोधक चिह्न जोड़कर, द्वारा लेखन पर जोर देते हैं कर सकते हैं !
करने के लिए w
आदेश। यदि राइट कमांड के इस जबरदस्त संस्करण का उपयोग किया जाता है, तो Vim मूल फ़ाइल को हटा देता है (यदि Vim का उपयोग केवल Vim-only backup
विकल्प सेट के साथ किया जाता है, तो मूल फ़ाइल को वास्तव में बैकअप फ़ाइल के समान ही नाम दिया जाता है)। यह तब मूल नाम के समान नाम वाली एक नई फ़ाइल खोलता है (बनाता है) और इस नई फ़ाइल में इसके बफर की सामग्री को लिखता है। विम चलाने से पहले और बाद में फ़ाइल के इनकोड की जाँच करके इसे देखा जा सकता है :
$ ls -l --inode t
131529 -r--r--r-- 1 anthony anthony 0 Apr 13 09:23 t
$ vi t
$ ls -l --inode t
131649 -r--r--r-- 1 anthony anthony 4 Apr 13 09:23 t
नोट: यह फ़ाइल और ब्रेक (प्रतीकात्मक) लिंक की अनुमति और स्वामित्व को भी बदल सकता है, उदाहरण के लिए, यदि मूल फ़ाइल का स्वामित्व किसी अन्य उपयोगकर्ता के पास था, तो नई फ़ाइल का स्वामित्व उपयोगकर्ता द्वारा चलाए जा रहे विम के पास होगा।
एक प्रक्रिया केवल यह कर सकती है यदि इसमें फ़ाइल की मूल निर्देशिका के लिए लिखित अनुमति है। सामान्य तौर पर, यह सुनिश्चित करने के लिए कि कोई प्रोग्राम किसी फ़ाइल को संशोधित नहीं कर सकता है, दोनों फ़ाइल की अनुमति और इसके मूल निर्देशिका को सुरक्षित किया जाना चाहिए।
जब पैरेंट डायरेक्टरी Vim यूजर द्वारा राइट नहीं की जाती है
हालाँकि, इस मामले में भी, विम अभी भी जिज्ञासु उपयोगकर्ता को फ़ाइल को ओवर-राइट करने में मदद करने की पूरी कोशिश करता है। यदि विम उपयोगकर्ता के पास फ़ाइल का स्वामित्व है, तो विम अस्थायी रूप से फ़ाइल की अनुमति को बदलकर ( chmod
सिस्टम कॉल का उपयोग करके ) केवल पढ़ने के लिए पेरेंट डायरेक्टरी प्रतिबंध के आसपास प्राप्त कर सकता है, फ़ाइल को बफर लिखना, फ़ाइल को बंद करना और फिर बदलना। अनुमति वापस। यहाँ धारा के माध्यम से vi चलाते समय किए गए सिस्टम कॉल का एक उद्धरण है strace -o ../vi.trace vi t
:
getuid() = 501
chmod("t", 0100644) = 0
open("t", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 4
write(4, "I am good singer,\n", 18) = 18
fsync(4) = 0
close(4) = 0
chmod("t", 0100444) = 0
नोट: यदि विम उपयोगकर्ता किसी फ़ाइल का संपादन कर रहा है तो ऐसा नहीं होता है क्योंकि उसके पास स्वामित्व नहीं है क्योंकि विम फ़ाइल अनुमतियों को बदलने में सक्षम नहीं होगा।
परिशिष्ट
वास्तव में निश्चित होने के लिए कि किसी फ़ाइल को संशोधित नहीं किया जा सकता (GNU / Linux सिस्टम पर), chattr
कमांड को सुपरयुसर के रूप में चलाएं :
sudo chattr +i filename
से man chattr
:
'I' विशेषता वाली फ़ाइल को संशोधित नहीं किया जा सकता है: इसे हटाया या नाम बदला नहीं जा सकता है, इस फ़ाइल का कोई लिंक नहीं बनाया जा सकता है और न ही फ़ाइल में कोई डेटा लिखा जा सकता है। केवल CAPUSINUX_IMMUTUT क्षमता वाले सुपरयुजर या एक प्रक्रिया इस विशेषता को सेट या साफ़ कर सकती है।