टच फ़ाइल और> फ़ाइल के बीच अंतर क्या है?


17

मैं लिनक्स के लिए नौसिखिया की तरह हूँ, और मैं या नहीं, आश्चर्य है >और touchएक ही प्रभाव है। मेरा मतलब है, निम्नलिखित दो आदेशों का एक ही प्रभाव है ?:

$ > file.txt

$ touch file.txt

यदि हां, तो यह जानना बहुत अच्छा होगा कि मैं नई फाइलें बनाने के लिए सिर्फ '> file.txt' टाइप कर सकता हूं।


5
यदि file.txtपहले से मौजूद है और खाली नहीं है, तो वे निश्चित रूप से नहीं करते हैं।
fkraiem

1
@fkraiem, क्या आप कृपया इसका विस्तृत उत्तर दे सकते हैं?
lmiguelvargasf

4
वह कह रहा है कि यदि आपके पास touchऐसी फ़ाइल है जिसमें डेटा कुछ भी नहीं है, लेकिन यदि आप >फ़ाइल को मिटा देते हैं , तो वह समाप्त हो जाएगी।
WinEunuuchs2Unix

मैं समझ गया। उस स्पष्टीकरण के लिए बहुत बहुत धन्यवाद @ WinEunuuchs2Unix
lmiguelvargasf

क्या आप इस प्रश्न का उत्तर देना चाहेंगे, क्या मेरे पास इस प्रश्न का उत्तर है, क्या @fkraiem इसका उत्तर देगा, या इसे हटा देगा?
विनयुनुच्स 2 यूनिक्स

जवाबों:


24

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

rick@dell:~$ > EmptyFile

rick@dell:~$ touch EmptyFile2

rick@dell:~$ ls Empty*
EmptyFile  EmptyFile2

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ echo Hello > EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ > EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

rick@dell:~$ echo Hello > EmptyFile

rick@dell:~$ touch EmptyFile

rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:32 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2

जैसा कि टिप्पणियों में बताया गया है, touchएक बाहरी कमांड है और केवल फाइलों पर काम करता है। >एक शेल बिल्ट-इन फीचर है जो कई अलग-अलग उद्देश्यों को पूरा करता है। आमतौर पर आप इसे इस्तेमाल की तरह देखेंगे cat source.fil > target.fil

एक फ़ाइल को खाली करने के लिए एक लंबा रूप होगा:

cat /dev/null > emptyme.fil

> emptme.filफ़ाइल के लिए कुछ भी नहीं पुनर्निर्देशित करने के एक कॉम्पैक्ट प्रारूप में एक ही बात का उपयोग करता है।


केस का उपयोग करें: > file.txtलॉग फ़ाइलों को साफ़ करने के लिए अच्छा है।
रिनजविंड

8
यह वास्तव में फिर से नहीं बनाया गया है। मौजूदा फ़ाइल को काट दिया गया है, जो पुरानी फ़ाइल को अनलिंक करने और एक नया बनाने से अलग है। सबसे बड़ा अवलोकन योग्य अंतर यह है कि यदि किसी प्रक्रिया में अभी भी पुरानी फ़ाइल खुली या मैप की गई है, तब भी वह मौजूद रहेगी। लेकिन ट्रंकटिंग उस फ़ाइल को प्रभावित करेगा जो अन्य प्रक्रियाओं में खुली है।
पीटर कॉर्ड्स

1
"सबसे बड़ी अवलोकन योग्य" के बारे में निश्चित नहीं है - यह निरीक्षण करना आसान है कि क्या हार्डलिंक टूट गए हैं (यदि आप ln foo bar, और फिर हटाएं और फिर से बनाएँ foo, barअभी भी इसकी पूर्व सामग्री है)।
चार्ल्स डफी

1
अरे हाँ, यह और भी अधिक आसानी से देखने योग्य अंतर है। मुझे इस बारे में सोचना चाहिए: पी
पीटर कॉर्ड्स

@ चार्ल्स-डफी ज़रूर, जब एक फी के 2 लिंक होते हैं, तो मुझे लगता है कि मुझे लगता है कि पीटर कॉर्डेस हालांकि क्या कह रहा था, इससे कोई लेना-देना नहीं है। जब आप किसी ऐसी फ़ाइल को हटाते / हटाते हैं, जो वर्तमान में उपयोग में है / है तो फ़ाइलहैंडल को खोलना नहीं है। उदाहरण के लिए, कहते हैं कि rm /var/log/nginx/access.logजब आप उस फाइल को खोलते हैं, तो उसमें 0 लिंक होते हैं, लेकिन इनकोड अभी भी मौजूद होगा। lsof -c nginx | grep access.logफिर पिड के साथ, ls -l /proc/<pid>/fd/ | grep access.logऔर अंत में कैट / प्रोक / <pid> / fd / <पिछले कमांड से फ़ाइल नाम> `। यह पुरानी होने के बावजूद टिप्पणी करना। आशा है कि यह समझ में आता है
कंकाल

14

दोनों के बीच पर्याप्त अंतर है। Touchएक फाइल को स्टैम्प करने के लिए प्रयुक्त कमांड है। >प्रतीक एक मानक आउटपुट पुनर्निर्देशक है।

दो का उपयोग समझाया

स्पर्श का उपयोग

यदि फ़ाइल मौजूद नहीं है तो यह फ़ाइल बनाएगी।

झंडे बनाने के लिए आमतौर पर स्पर्श का उपयोग किया जाता है। उदाहरण के लिए, यदि आप अपने सिस्टम पर दो बार के बीच की सभी फाइलों को ढूंढना चाहते हैं, तो आप कमांड के इस क्रम का उपयोग कर सकते हैं:

$ touch -t 201609292200 starttime 
$ touch -t 201609292300 endtime

यह निम्न फ़ाइलें बनाएगा (या यदि वे मौजूद हैं तो समय-मोहर को बदल देंगे):

-rw-rw-r-- 1 ljames ljames 0 Sep 29 23:00 endtime
-rw-rw-r-- 1 ljames ljames 0 Sep 29 22:00 starttime

अब आप उन सभी फ़ाइलों को प्रदर्शित करने या संसाधित करने के लिए उपयोग कर सकते हैं जो उस घंटे (उन दो फ़ाइलों के समय टिकटों के बीच का समय, यानी 10 पीएम और 29 सितंबर, 2016 के 11 पीएम के बीच) संशोधित किया गया था।

$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n"

यह उपर्युक्त खोज कमांड का आंशिक उत्पादन है:

-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com_groups.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/address_book_backups/abook.mab.bak
-rw-rw-r-- 09/29 23:00 00 /home/users/l/j/ljames/endtime
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/Temp
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi/1.337.0_0

आउटपुट पुनर्निर्देशन का उपयोग

रीडायरेक्टिंग सिंबल निर्दिष्ट आउटपुट को रीडायरेक्ट फ़ाइल में रीडायरेक्ट करेगा। यदि आपके विफल हो सकता है, तो अपने क्लॉबर / noclobber सेटिंग्स के आधार पर। यदि यह मौजूद नहीं है तो केवल Noclobber फ़ाइल बनाएगा।

पुनर्निर्देशन आउटपुट के कई संस्करण हैं जिनमें शामिल हैं:

> - मानक मानकों को पुनर्निर्देशित। मौजूदा फ़ाइल बनाएँ या अधिलेखित करें।
>> - पुनर्निर्देशित परिशिष्ट। मौजूदा फ़ाइल बनाएं या जोड़ें।
> & - मानक आउटपुट और मानक त्रुटि दोनों को पुनर्निर्देशित करें।
>> और - रीडायरेक्ट / मानक आउटपुट और मानक त्रुटि दोनों को जोड़ें

हम findऊपर दिए गए अपने आदेश का उपयोग निर्दिष्ट घंटे के भीतर बनाई गई सभी फाइलों की सामग्री को एक फ़ाइल में रीडायरेक्ट करने के लिए कर सकते हैं जिसे हम लॉग इन कर सकते हैं और बाद में अध्ययन कर सकते हैं:

$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n" > ~/files.log

कई लोगों ने उल्लेख किया है कि, यदि file.txtमौजूद है और खाली नहीं है, तो > file.txtइसकी सामग्री को हटा देगा , लेकिन touch file.txtनहीं करेगा। लेकिन किसी ने उल्लेख नहीं किया है कि >> file.txtयह एक अच्छा विकल्प है touch file.txt- यह फ़ाइल का निर्माण करेगा यदि यह मौजूद नहीं है (यह मानते हुए कि आपके पास ऐसा करने की अनुमति है), लेकिन यह एक मौजूदा फ़ाइल को छोटा नहीं करेगा। देखें कि ">" और ">>" में क्या अंतर है?
जी-मैन ने

यह अनुभाग में समझाया गया है Usage of Output redirection। सूचना >>= कहते हैं Redirect append>
LD जेम्स

हां, और यह पूरी तरह से स्पष्ट है - उन लोगों के लिए जो पहले से ही इसे जानते हैं। अपने आप को ओपी के जूते में रखो - आपने पाठ की एक दीवार पोस्ट की है जो बहुत लंबी है ; वह आपके उत्तर से समझने वाला नहीं है, >> file.txtजो एक विकल्प के लिए विकल्प है touch file.txt। (तथ्य यह है कि आप केवल एक ही व्यक्ति है जो उल्लेख कर रहे हैं >> सब पर कारण है कि मैं अपने जवाब के नीचे मेरी टिप्पणी पोस्ट की है, बल्कि सवाल के तहत की तुलना में है।)
जी-मैन कहते हैं 'को फिर से बहाल मोनिका'

1
@ जी-मैन कुछ लोग रीडायरेक्ट सिंबल को टच का विकल्प मानते हैं। हालाँकि यह एक विकल्प नहीं है। मेरे उत्तर का विवरण इस गलती को स्पष्ट करना है। दो का उपयोग करने के उदाहरणों को स्पष्ट करने में मदद करना है। कृपया ध्यान दें कि पहली जोड़ी लाइन आपकी वर्तमान टिप्पणी की प्रारंभिक बारीकियों का जवाब देती है। यह कहता है कि दोनों के बीच एक महत्वपूर्ण अंतर है। ओपी अंतर में रुचि रखते हैं। तो उत्तर के अन्य हिस्सों को दो में ओपी के हित का जवाब देना है। अलग-अलग प्रभाव हैं और अंतर के कारण हैं।
LD जेम्स

9

>शेल आउटपुट पुनर्निर्देशन ऑपरेटर है, जिसका उपयोग पूर्ववर्ती कमांड (एस) के एसटीडीयूएस को बाद में बताए गए फ़ाइल विवरण के लिए किया जाता है >। यदि फ़ाइल मौजूद है, तो यह सामग्री को काट दिया जाएगा, क्योंकि ध्वज के open(2)साथ -ed O_TRUNCवाली फ़ाइल, और यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।

ध्यान देने वाली महत्वपूर्ण बात, यह पुनर्निर्देशन ऑपरेटर पूर्ववर्ती कमांड के चलने से पहले शेल द्वारा संभाला जाएगा, इसलिए यह किसी भी कमांड पर निर्भर नहीं करता है, और शेल द्वारा ही हैंडल किया जाता है।

ध्यान दें कि, कुछ गोले (जैसे zsh) खाली पुनर्निर्देशन के साथ अलग तरह से व्यवहार करेंगे:

 >file.txt

एक विशिष्ट वर्कअराउंड :( true) नो-ऑप कमांड जोड़ना है :

 : >file.txt

परंपरागत रूप से, touchफ़ाइल बनाने के समय का मुख्य उद्देश्य फ़ाइल बनाना है, न कि फ़ाइल बनाना।

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


zshखाली पुनर्निर्देशन का समर्थन करता है - यह catएक फ़ाइल के लिए कोई तर्क के साथ पुनर्निर्देशन करने के लिए काफी समान रूप से कार्य करता है । मूल रूप से जो कुछ भी आप टाइप करते हैं वह ईओएफ चरित्र या एक रुकावट तक फ़ाइल में लिखा जाएगा। इस दर्पण zshका व्यवहार बस के साथ है <file, जो बस फ़ाइल सामग्री को प्रिंट करता है, जैसा catकि करेगा। ये कॉन्फ़िगर करने योग्य हो सकते हैं, मैंने <fileफ़ाइल को पेजर में खोलते हुए देखा है ।
8bittree

@ 8 बिट्ट्री का मेरा मतलब है कि आपको इनपुट करने की आवश्यकता है EOF(जैसे cat >file.txtआपने कहा है), जहां bashसिर्फ >file.txtकरना पर्याप्त होगा।
heemayl

पर्याप्त रूप से, मैंने एक संपादन का सुझाव दिया है जो मुझे लगता है कि विचार को अधिक स्पष्ट रूप से प्राप्त करता है।
8bittree

@ 8 बिट्ट्री स्वीकृत।
हेमायल सेप

(1) डिफ़ॉल्ट रूप से, touchसंशोधन समय और फ़ाइल के एक्सेस समय दोनों को अपडेट करता है। केवल एक या दूसरे को अपडेट करने के विकल्प हैं। (2) Unix / Linux / POSIX "इनोड निर्माण समय" का समर्थन नहीं करता है, सामान्य तौर पर। कुछ फ़ाइल सिस्टम प्रकार इसका समर्थन करते हैं, लेकिन इसे देखने का कोई सार्वभौमिक तरीका नहीं है, अकेले इसे संशोधित करें। क्या आप एक संदर्भ प्रदान कर सकते हैं जो कहता है कि इसका एक अवतार है touchजो उपयोगकर्ता को इनकोड निर्माण समय को बदलने की अनुमति देता है?
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.