`टच` के लिए -f विकल्प का उपयोग क्या है?


23

से man touch:

-f     (ignored)

लेकिन मुझे वह नहीं मिलता जो नजरअंदाज करने का मतलब है ।

मैंने कोशिश की है:

$ ls -l file
-rw-rw-r-- 1 pandya pandya 0 Mar 20 16:17 file

$ touch -f file
$ ls -l file
-rw-rw-r-- 1 pandya pandya 0 Mar 20 16:18 file

और देखा कि इसके बावजूद टाइमस्टैम्प बदल जाता है -f

इसलिए, मैं जानना चाहता हूं कि इसके लिए क्या -fहै या यह क्या करता है।


2
मुझे लगता है कि -fविकल्प के रूप में सिर्फ नजरअंदाज कर दिया गया है। हो सकता है कि तर्क पार्सर के माध्यम से मंगाई गई हो और यह बात है।
थॉमस

1
(अनदेखा) का अर्थ है कि ध्वज को अनदेखा किया गया है, न कि आदेश को।
निधि मोनिका का मुकदमा

जवाबों:


47

GNU उपयोगिताओं के लिए, पूर्ण प्रलेखन infoपृष्ठ पर है, जहाँ आप पढ़ सकते हैं:

-f
अवहेलना करना; 'टच' के बीएसडी संस्करणों के साथ संगतता के लिए।

स्पर्श के लिए ऐतिहासिक बीएसडी मैन पेज देखें , जहां स्पर्श-f को बाध्य करना था ।

यदि आप उन पुराने बीएसडी के स्रोत को देखते हैं utimes(), तो कोई सिस्टम कॉल नहीं था , इसलिए touchफ़ाइल को रीड + राइट मोड में खोलें, एक बाइट पढ़ें, वापस खोजें और इसे फिर से लिखें ताकि अंतिम पहुंच और अंतिम संशोधन समय को अपडेट कर सकें

जाहिर है, आपको अनुमतियाँ पढ़ने और लिखने दोनों की ज़रूरत थी ( touchयदि access(W_OK|R_OK)वह झूठे लौटे तो ऐसा करने की कोशिश करने से बचें )। अस्थायी रूप से अनुमतियों को 0666 में बदलकर-f चारों ओर काम करने की कोशिश की !

0666 का मतलब है हर व्यक्ति को पढ़ने और लिखने की अनुमति। ऐसा होना ही चाहिए था, जैसा कि अन्यथा (जैसे 0600 जैसी अधिक प्रतिबंधात्मक अनुमति के साथ जो कि अभी भी स्पर्श की अनुमति देता है ), जिसका अर्थ उस छोटी खिड़की के दौरान हो सकता है, जो प्रक्रियाएं अन्यथा फ़ाइल को पढ़ने या लिखने की अनुमति देंगी , कार्यक्षमता को तोड़ना ।

हालांकि इसका मतलब यह है कि ऐसी प्रक्रियाएं जो अन्यथा फ़ाइल तक पहुंच नहीं होती हैं, अब इसे खोलने का एक छोटा अवसर है, सुरक्षा को तोड़ना ।

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

विकल्प touchपारित होने के बाद भी GNU विफल नहीं -fहोता है, लेकिन केवल ध्वज की उपेक्षा करता है। इस प्रकार, बीएसडी के उन पुराने संस्करणों के लिए लिखी गई स्क्रिप्ट जीएनयू सिस्टम में पोर्ट होने पर विफल नहीं होती हैं। आजकल ज्यादा प्रासंगिक नहीं है।


3
डेवलपर के अनुसार -f.apple.com/library/mac/documentation/Darwin/Reference/… अभी भी मैक ओएस एक्स में कार्य करता है (लेकिन इसमें कोई शक नहीं है कि एक ही कार्यक्षमता को बेहतर बनाने के कम से कम 57 अलग-अलग तरीके हैं, GUI का उपयोग करके)! )
एलेफोज़रो

20
जीयूआई का उपयोग करना स्वाभाविक रूप से "बेहतर" नहीं है। स्क्रिप्ट का उपयोग करने का बिंदु सामान को स्वचालित करना है, जिसमें यह सुनिश्चित करना शामिल है कि आपकी स्क्रिप्ट बिना किसी उधेड़बुन के बिना जितनी संभव हो उतनी ही अनधिकृत रूप से चलती है, या कम से कम अधिकांश बोलियों पर आपका सामना होने की संभावना है, और यही वह जगह है जहां ये पुराने, हटाए गए संगतता मुद्दे एक चिंता का विषय बन गए हैं। ।
गुंटराम ब्लोहम

@alephzero ऐसा इसलिए है क्योंकि OS X में संस्करण BSD संस्करण है, जो GNU के साथ कॉम्पैटिबिलिटी बनाए रख रहा है।
बरमार

14

-fकुछ नहीं करता। इसे ऐतिहासिक अनुकूलता के लिए रखा गया है (बीएसडी के touchअनुसार info touch), ताकि यह अपेक्षा करने वाले एप्लिकेशन इसे पास न करें और यह कहते हुए एक त्रुटि संदेश प्राप्त करें कि यह मौजूद नहीं है। यह मानते हुए कि यह जीएनयू कोर्यूटिल्स है, आप स्रोत में देख सकते हैं कि यह breakकुछ भी किए बिना विकल्प प्रसंस्करण स्विच से बाहर करता है ।

एक उपेक्षित विकल्प के रूप में, 1992 में जोड़े -fगए GNU touchकमांड के पहले संस्करण से मौजूद है ( देखें अंतर )। ऐसा लगता है कि, कम से कम FreeBSD v9 में, -f"प्रयास [s] अद्यतन को लागू करने के लिए, भले ही फ़ाइल अनुमतियाँ वर्तमान में इसे अनुमति न दें" (जैसा कि Sukminder, धन्यवाद)।


2
infoपृष्ठ कहता है अनदेखा; 'टच' के बीएसडी संस्करणों के साथ संगतता के लिए।
heemayl

@heemayl को छोड़कर मैं एक बीएसडी नहीं खोज सका जो छूने के लिए "-f" तर्क के साथ जहाज लगता है, इसलिए यह काफी पुराना होना चाहिए।
क्रिस डाउन

हम्म .. मैंने अभी-अभी कोरुटिल्स मैनुअल की जाँच की है , जो कहता है: "नजरअंदाज कर दिया; स्पर्श के बीएसडी संस्करणों के साथ संगतता के लिए।"
पंड्या

3
-f/ का उपयोग अपडेट को बल देने की कोशिश करने के लिए किया गया था, भले ही फ़ाइल अनुमतियों ने इसे बीएसडी पर अनुमति देने के लिए किया हो। V10 में नहीं, बल्कि v9: freebsd.org/cgi/… (कम से कम FreeBSD का)।
रनियम

@sukminder ऐस, धन्यवाद! मैं जवाब में आपकी जानकारी जोड़ूंगा।
क्रिस डाउन

12

जब भी आप "ऑप्शन X को नजरअंदाज किया जाता है" को इनहेलप आउटपुट या मैनपेज में देखते हैं, तो इसका मतलब है कि: प्रोग्राम एक्स ऑप्शन को स्वीकार करता है - आपको सिंटैक्स त्रुटि नहीं मिलती है - लेकिन इसका कोई प्रभाव नहीं पड़ता है। कार्यक्रम वही करता है जो विकल्प के अभाव में किया जाता है।

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


0

ऐतिहासिक स्रोत कोड में टिप्पणी को देखते समय , पंक्ति 22:

  22   -f                     (ignored)\n\

जिम मेयेरिंग द्वारा प्रारंभिक रिलीज के बाद से -f विकल्प को नजरअंदाज करने का इरादा था।

और विकल्पों को संभालने के लिए स्विच स्टेटमेंट में कुछ भी नहीं करने के लिए एक स्पष्ट मामला (लाइनें 150/151) है:

 150         case 'f':
 151           break;

यह उल्लेखनीय है कि 1992 के बाद से इस विकल्प को अनदेखा करने के लिए निम्नलिखित लेखकों ने क्या प्रेरित किया। शायद एक उपयोग परिदृश्य है जिसमें विकल्प की आवश्यकता होती है -f और अन्यथा ब्रेक?

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