नई फ़ाइल बनाने में "टच फाइल" और "फाइल" का उपयोग करने में क्या अंतर है?


13

मैं लिनक्स के लिए नया हूँ। जब मैं बैश का उपयोग करके वर्तमान निर्देशिका के तहत एक नई फ़ाइल .gitignore बनाता हूं, तो मुझे पता चला कि मैं कर सकता हूं:

> .gitignore

या

touch .gitignore

लगता है वे भी यही काम करते हैं। जब मैं मैनुअल की जांच करता हूं touch, तो यह कहता है कि वर्तमान फ़ाइल के लिए टाइमस्टैम्प बदलें, लेकिन इसके लिए कोई मैनुअल नहीं है >। तो क्या कोई समझा सकता >है कि इस संदर्भ में इन दोनों आदेशों का उपयोग करने में क्या अंतर है और क्या कोई अंतर है? धन्यवाद।


1
मैं जिज्ञासु हूँ जहाँ आपने फ़ाइल जनरेटर के रूप में '>' का उपयोग करना सीख लिया है, बिना इसके इच्छित उपयोग को
सीखे

1
आपको बैश मैनुअल में पुनर्निर्देशित दस्तावेज मिलेंगे। कमांड लाइन पर, कमांड दर्ज करें man bash। यह एक लंबा दस्तावेज़ है और अच्छी तरह से समझने में दिन या सप्ताह भी लगेंगे, लेकिन अगर आप बैश को अच्छी तरह से सीखना चाहते हैं तो यह अच्छी तरह से समझने लायक है।
धान लैंडौ

जवाबों:


21

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

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

>शेल पर निर्भर करता है का व्यवहार । बैश, डैश और अधिकांश गोले में, > fooआप उम्मीद के मुताबिक काम करेंगे। Zsh में, डिफ़ॉल्ट रूप से, > fooजैसे काम करता है cat > foo- zsh इनपुट में आपके लिए प्रतीक्षा करता है।


10
यहाँ मुख्य बिंदु के बीच कोई व्यावहारिक अंतर है कि वहाँ है >> fileऔर touch fileलेकिन अगर fileमौजूद नहीं है, वहाँ उन दोनों के बीच एक बड़ा अंतर है > file(में है कि के पिछले सामग्री fileखो रहे हैं)। प्लस, zsh का असंगत व्यवहार touch file"सबसे सुरक्षित" है और इसलिए इसे सही तरीके से करने के रूप में याद किया जाना चाहिए।
मोंटी हार्डर

1

यहाँ एक दिलचस्प तुलना है:

$ cat redirect.sh touch.sh sed.sh awk.sh cp.sh truncate.sh tee.sh vi.sh
> redirect.txt
touch touch.txt
sed 'w sed.txt' /dev/null
awk 'BEGIN {printf > "awk.txt"}'
cp /dev/null cp.txt
truncate -s0 truncate.txt
tee tee.txt </dev/null
vi -esc 'wq vi.txt'

परिणाम:

$ strace dash redirect.sh | wc -l
387

$ strace dash touch.sh | wc -l
667

$ strace dash sed.sh | wc -l
698

$ strace dash awk.sh | wc -l
714

$ strace dash cp.sh | wc -l
786

$ strace dash truncate.sh | wc -l
1004

$ strace dash tee.sh | wc -l
1103

$ strace dash vi.sh | wc -l
1472

1
जबकि तुलना दिलचस्प हो सकती है, मैं वास्तव में यह नहीं देखता कि आप मुझे यहां क्या देखना चाहते हैं। क्या आप बता सकते हैं कि आप किस लिए जा रहे हैं? मुझे लगता है कि यह फाइलों में सामान लिखने के अलग-अलग तरीके हैं, लेकिन मुझे यह इस तरह थोड़ा भ्रमित लगता है। हालांकि मेरी कॉफी की कमी हो सकती है।
m00am

@ m00am यहाँ क्या दिखाया गया है एक फ़ाइल बनाने के लिए प्रभावी रूप से 8 अलग-अलग तरीके हैं। straceमाना जाता है कि सिस्टम कॉल्स को निष्पादित किया जा रहा है, और > file.txtविधि को कम से कम सिस्टम कॉल्स को निष्पादित करने के लिए दिखाया गया है, जो वास्तव में आश्चर्य की बात नहीं है - एक टूल जितना अधिक जटिल है, उतने ही जटिल इसके syscalls हैं। दिखाए गए उदाहरणों के साथ मुद्दा, हालांकि यह है कि डिफ़ॉल्ट रूप straceसे stderrस्ट्रीम करने के लिए लिखते हैं , और इस जवाब में स्टीवन पाइप का उपयोग केवल पढ़ने के लिए करता है stderr, इसलिए मैं थोड़ा उलझन में हूं कि उसने |पाइप का उपयोग करते हुए लाइनों को कैसे गिना और नहीं|&
सेर्गी कोलोडियाज़नी

और उबंटू 16.04 पर, |&@Serg उल्लेख के रूप में, मैं यहाँ के पाँचवें भाग के बारे में गिनता हूँ ... viमामले को छोड़कर , जहाँ मुझे उसी मूल्य के बारे में पता है
muru

WSL? ओह ... मैं WSL जोड़ना होगा नहीं लगता था कि यह क्या करता है के लिए कई सिस्टम कॉल।
मूरू

@ मुरु साइग्विन - डब्ल्यूएसएल अभी तक तैयार नहीं है stackoverflow.com/a/40370009
स्टीवन पेनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.