स्पर्श और vi का उपयोग?


55

क्या संपादित करने से पहले स्पर्श के साथ एक फ़ाइल बनाने का लाभ है .. जैसे:

touch foo
vi foo

बनाम यह सीधे संपादक के लिए हो रही है? पसंद:

vi foo

मैं पूर्व ( touchतब vi) का उपयोग करते हुए काफी कुछ ट्यूटोरियल देखता हूं ।

जवाबों:


111

touchफ़ाइल पहले आईएनजी पुष्टि करता है कि आपके पास वास्तव में फ़ाइल बनाने की क्षमता है, बल्कि संपादक में समय बर्बाद करने के बजाय केवल यह पता लगाने के लिए कि फाइलसिस्टम केवल-पढ़ने के लिए है या कुछ अन्य समस्या है।


6
और touchआपको chmod +xसंपादन के पहले, बाद में करने की अनुमति देता है , जो समझ में आता है कि क्या आप एक #!/bin/bashशेल स्क्रिप्ट लिख रहे हैं ।
हारून मैकडैड

11
वैकल्पिक रूप से, आप हालांकि :wशुरू करने के बाद पहली बात कर सकते हैं vi। (और :chmod +x %यदि आप इसे निष्पादन योग्य बनाना चाहते हैं)
स्टीफन चेज़लस

26
touchविफल हो सकता है, जहां viकी :w!, हालांकि सफल रहा है | (उदाहरण के लिए अगर fileमौजूद है, लेकिन आप अपने मालिक नहीं कर रहे हैं और यह लिखने की पहुंच नहीं है, जबकि आप वर्तमान निर्देशिका की पहुंच है)। इसके विपरीत, touchसफल हो सकते हैं, लेकिन viकी :wया :w!विफल हो सकता है यदि आप फ़ाइल के स्वामी हैं, लेकिन यह करने के लिए लिखने के लिए पहुँच नहीं है और न ही वर्तमान निर्देशिका के लिए (आप के साथ चारों ओर काम करने में सक्षम हो जाएगा :!chmod +w %(कुछ viतरह कार्यान्वयन vimकर सकते हैं वह अपने आप :w!))।
स्टीफन चेजलस

अब बहुत समझ में आता है!
फॉक्स

4
विम / बहुत स्पष्ट रूप से उल्लेख VI अगर आपको लगता है कि आप के लिए लिखने के लिए अनुमति नहीं है एक फ़ाइल खोलने: "foo" [readonly]। और फिर से इन्सर्ट मोड Warning: Changing a readonly file.
डालते समय

25

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

WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?

यह उन्हें सचेत करेगा भले ही आपने प्रति सेगमेंट में कोई बदलाव न किया हो और केवल फ़ाइल को छुआ हो।


अच्छा बिंदु, इसलिए यह अनिवार्य रूप से यह पता लगाने का एक अच्छा तरीका है कि क्या लोग उसी फ़ाइल का उपयोग / संपादन कर रहे हैं और उन्हें उसी समय चेतावनी देते हैं। मुझे बहु-किरायेदार वातावरण में इसका स्पष्ट लाभ दिखाई देता है!
फॉक्सिक्स

@ फ़ाविक्स तो आपको इस जवाब को अपडेट करना चाहिए
किवी

19

स्वीकृत उत्तर के अलावा:

यह ध्यान देने योग्य है कि touchफ़ाइल टाइमस्टैम्प को अपडेट करने के लिए उपयोग किया जाता है। यदि आप touchमौजूद फ़ाइल पर उपयोग करते हैं, तो यह वर्तमान समय और समय के लिए फ़ाइलों को टाइमस्टैम्प को अपडेट करेगा। यदि फ़ाइल मौजूद नहीं है, तो यह टाइमस्टैम्प के रूप में वर्तमान दिनांक और समय के साथ एक खाली फ़ाइल बनाता है।

viदूसरी ओर, जब तक आप इसे नहीं लिखते हैं तब तक एक नई फ़ाइल नहीं बनाते हैं।

उदाहरण के लिए, अगर मैंने टाइप किया vi test.txt, तो कुछ नोट्स टाइप किए, फिर टाइप किया :q!; test.txtमौजूद नहीं होगा।


स्वीकृत उत्तर में वर्णित लाभ के बारे में क्या?
JBentley

8

इसके बिना touch, कोई नई फ़ाइल तब तक मौजूद नहीं होगी जब तक आप viइसे लिखना नहीं चाहते।

एक बहु-उपयोगकर्ता प्रणाली पर विचार करें (शायद आप एक नेटवर्क-माउंटेड फाइल सिस्टम पर हैं जो कई उपयोगकर्ताओं के साथ प्रत्येक सिस्टम द्वारा साझा किया गया है)। रनिंग touchसे यह सुनिश्चित होगा कि आपके पास फ़ाइल (और यह कि आप इसे लिख सकते हैं) और यहां तक ​​कि टाइमस्टैम्प को अपडेट भी कर सकते हैं। ऐसी फाइल बनाने के इच्छुक एक अन्य उपयोगकर्ता यह देखेगा कि आप उसके मालिक हैं। यदि यह पहले से मौजूद है और कोई अन्य उपयोगकर्ता इसे हटाना या बदलना चाहता है, तो वे देखेंगे कि यह हाल ही में संशोधित किया गया था और शायद दो बार लगता है।


4

touchपहले निगलना कोई लाभ नहीं है ; viअगर यह मौजूद नहीं है तो फाइल बनाएंगे।

स्वीकृत उत्तर कहता है कि यह जाँच करता है कि क्या आप एक संपादक में समय बर्बाद करने से पहले लिख सकते हैं। सही है, लेकिन अब आप touchहर बार टाइपिंग में समय बर्बाद करेंगे । कहीं लिखने में सक्षम नहीं होने की तुलना में यह बहुत असाधारण है कि यह कितनी बार काम करेगा (जब तक आप sudoअपने घर की निर्देशिका के बाहर की फ़ाइलों के लिए याद करते हैं /tmp, या रूट के रूप में लॉग इन होते हैं)।

बस संपादक खोलें और जो आप चाहते हैं वह करें, फिर फ़ाइल को सहेजने का प्रयास करें। अगर यह काम नहीं करता है, तो भी :w!, इसे कहीं और बचाएं ( :w ~/asdf) और समस्या को ठीक करें। एक बार यह तय हो जाने पर, आप फ़ाइल सामग्री को अस्थायी फ़ाइल से मूल में कॉपी कर सकते हैं cat ~/asdf > /mnt/example.txt && rm ~/asdf:। हम catइसके बजाय इसका उपयोग करते हैं mvया cpगंतव्य की अनुमति और अन्य विशेषताओं का उपयोग करते हैं।

इसके अलावा, कुछ और उन्नत कमांड लाइन उपयोग के लिए, आप समस्या को हल करने (या उपयोग , या ) को ठीक करने के दौरान + के viसाथ पृष्ठभूमि कर सकते हैं , और अंत में फिर से लिखने की कमांड को चला सकते हैं।CtrlZ:suspend:susfg

संपादित करें: पोस्ट ने / यू / जी-मैन की टिप्पणियों के जवाब में सुधार किया । धन्यवाद!


3
वहाँ कुछ सुरक्षा के मुद्दों यहाँ हैं: (1) फ़ाइल अगर /mnt/example.txtदुनिया पठनीय होना चाहिए नहीं है, लेकिन अपने umask कुछ 22 की तरह अनुमोदक के लिए सेट है, तो /tmp/asdf होगा विश्व को पढ़ा जा सके। यदि सिस्टम पर अन्य लोग हैं, तो वे फ़ाइल की अस्थायी प्रतिलिपि पढ़ने में सक्षम हो सकते हैं। (2) फ़ाइल /mnt/example.txtको शायद विश्व-योग्य नहीं माना जाता है, लेकिन, अगर सिस्टम पर दुर्भावनापूर्ण लोग हैं, तो वे फ़ाइल की अस्थायी प्रतिलिपि को पढ़ने में सक्षम हो सकते हैं और आपके द्वारा स्थानांतरित / कॉपी करने से पहले इसे संशोधित संस्करण से बदल सकते हैं। यह वापस सही स्थान पर है।   … (Cont'd)
G-Man

3
(Cont'd)… ( /tmpइस पर रोक लगाई जा सकती है।) (3) कमांड mv /tmp/asdf /mnt/example.txtपूरी तरह से करंट को नष्ट कर देगी /mnt/example.txtऔर इसे बदल देगी /tmp/asdf। आप बदलना चाहते हैं सामग्री के /mnt/example.txtसाथ सामग्री की /tmp/asdf। का उपयोग करके mv, आप /mnt/example.txtएक ही गुण के रूप में स्थापित करते हैं /tmp/asdf- शायद आपके और विश्व-पठनीय के स्वामित्व में। यह cp /tmp/asdf /mnt/example.txtया भी बेहतर हो सकता है cat /tmp/asdf > /mnt/example.txt। … PS (4) आप viटाइप करके निलंबित कर सकते हैं :suspend(या :sus, संक्षेप में)।
जी-मैन

@ जी-मैन वे कुछ अच्छे बिंदु हैं। मैं विशेष रूप से 5 मिनट के दौरान किसी फ़ाइल को चोरी करने से डरता नहीं हूं /tmp, लेकिन ~/इसके बजाय लिखने के लिए कोई बहाना नहीं है । मैंने यह भी नहीं सोचा था कि यह विशेषताओं को बदल देगा। मैं अपनी पोस्ट संपादित करूंगा, धन्यवाद :)
ल्यूक

3

कोई फायदा नहीं हुआ। viअगर मौजूद नहीं है तो एक फाइल बनाएंगे।


1

vi एक दृश्य पाठ संपादक है (vi = दृश्य) यह वैसे भी "एड" की तुलना में दृश्य है, जो आपको केवल एक समय में पाठ की एक पंक्ति को देखने और बदलने देता है।

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

अब यदि आपकी फ़ाइल एक पाठ फ़ाइल है, या अभी तक मौजूद नहीं है, तो इसे vi के साथ खोलना, फिर vi को कमांड जारी :wqकरना, उस फ़ाइल को छूने के समान परिणाम होगा। यही एकमात्र तरीका है कि दोनों कमांड समान हैं।


1

विशेष रूप से साथ प्रयोग के लिए vi, वहाँ फ़ाइल बनाने के लिए इससे पहले कि आप इसे संपादित कोई जरूरत नहीं है: viएक नई फ़ाइल बना सकते हैं और बचाने के लिए इस्तेमाल किया जा सकता। हालाँकि, वहाँ कॉलिंग संदर्भ हैं जहाँ फ़ाइल को मौजूद होना चाहिए। उदाहरण के लिए, मेरे सिस्टम (OS X) पर मैं इस तरह से एक उपयुक्त GUI संपादक (फ़ाइल प्रकार द्वारा निर्धारित) लॉन्च कर सकता हूं:

open foo.txt

यह foo.txtTextEdit में, या emacs में, या जो कुछ भी मैंने पाठ फ़ाइलों के लिए मेरी पसंद के संपादक के रूप में निर्दिष्ट किया है, खोल देगा और इस प्रक्रिया को अलग कर देगा ताकि मुझे अपना संकेत तुरंत वापस मिल जाए। ( open bar.pyयह आईडीएल में खुल सकता है, अजगर संपादक; आदि) या मैं स्पष्ट रूप से emacs का अनुरोध कर सकता हूं:

open -a emacs foo.txt

लेकिन openफ़ाइल को पहले से मौजूद होने की आवश्यकता है, अन्यथा यह एक त्रुटि उठाता है। इसलिए मुझे emacsनिम्नलिखित शेल फ़ंक्शन को परिभाषित करना पड़ा , जो मुझे GUI emacs fooलॉन्च करने के लिए लिखने की अनुमति देता है, emacsभले ही fooवह मौजूद न हो।

function emacs () 
{ 
    if [ -n "$1" -a ! -e "$1" ]; then
        /usr/bin/touch "$1";
    fi;
    open -a emacs "$@"
}

0

vi का उपयोग किसी फ़ाइल को उपयोगकर्ता के रूप में संपादित करने के लिए किया जाता है, जबकि स्पर्श उस पर टाइमस्टैम्प सेट कर सकता है और अधिकतर लिपियों और इस तरह से उपयोग किया जाता है।

फ़ाइल बनाने का दूसरा तरीका है:

>newfile.txt

1
यह अविश्वसनीय है क्योंकि यह POSIX कल्पना में निर्दिष्ट (afaik) नहीं है। उदाहरण के लिए, In zsh, यह cat >newfile.txtCtrl + D को दबाने के लिए समान है और आपको इसकी आवश्यकता है।
एडम काट्ज

@AdamKatz अच्छा बिंदु; मैंने जवाब अपडेट किया, सलाह के लिए धन्यवाद।
जेम्स यंगमैन 10

0

अपने प्राथमिक कार्य को छूने के मैन पेज पर फ़ाइल टाइमस्टैम्प को बदलना है।
Ofc वर्तमान टाइमस्टैम्प के साथ फ़ाइल भी बना रहा है और फिर आप फ़ाइल को संपादित कर सकते हैं।

VI टेक्स्ट एडिटर है जो ऐसा कहता है जो टेक्स्ट ओपन, सेव, एडिट फाइल आदि को एडिट करता है।

सभी यूजर और हैबिट का फ्लेवर है: टच तो vi या vi file.txt एक ही चीज को अलग-अलग कलर का है।


0

touch कमांड वर्तमान समय-स्टैम्प के साथ फ़ाइल की तारीख और समय को बदलता है।
यदि फ़ाइल मौजूद नहीं है, तो यह दिनांक और समय के साथ नई फ़ाइल बनाता है।

vi अगर फाइल मौजूद नहीं है तो फाइल को एडिट करने के लिए एडिटर का उपयोग किया जाता है, जब तक कि हम फाइल को सेव न करें।

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