क्या एक ऐसी फाइल को खोलना सुरक्षित है जो एक रनिंग स्क्रिप्ट द्वारा लिखी जा रही है?


20

मैं एक शेल स्क्रिप्ट चला रहा हूं जो एक फाइल पर लिख रही है।
इस स्क्रिप्ट को पूरा होने में लंबा समय लग सकता है और मैं पूरी स्क्रिप्ट के खत्म होने की प्रतीक्षा करने के बजाय आंशिक आउटपुट की निगरानी करना चाहूंगा।

क्या स्क्रिप्ट द्वारा लिखी जा रही फ़ाइल को (डबल क्लिक) खोलना सुरक्षित है?


5
फ़ाइल पढ़ना ठीक है। (इसे लिखना अनुशंसित नहीं है।)
dsstorefile1

4
उस। अगर आप पहले से जानते हैं तो आप स्क्रिप्ट आउटपुट को पाइप कर सकते हैं, हालांकि टी।
Hennes

1
अर्ध संबंधित टी कमांडो है: आप आउटपुट को कुछ फ़ाइल और टर्मिनल पर उसी समय भेज सकते हैं: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

जवाबों:


41

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

ये ऐसे उदाहरण हैं जो टर्मिनल में काम करते हैं; वे केवल फ़ाइल पढ़ेंगे:

cat file
less file
less +F file
tail -n 5 file
tail -f file

4
बहुत सारे होशियार फ़ाइल संपादक आपको चेतावनी देंगे कि फ़ाइल बदल दी गई है और पूछें कि क्या आप इसे फिर से लोड करना चाहते हैं, लेकिन गूंगा संपादकों को नहीं करना चाहिए।
user1306322

5
@ user1306322 यह अभी भी सुरक्षित होने की गारंटी नहीं है। जूट क्योंकि फ़ाइल लिखने के लिए खुला है इसका मतलब यह नहीं है कि यह लगातार लिखा जा रहा है। यदि कुछ भी नहीं लिखा गया था, जबकि संपादक चल रहा है तो यह ध्यान नहीं देगा। और चूंकि एक संपादक एक नई फ़ाइल लिख सकता है और शीर्ष पर नाम बदल सकता है (क्योंकि नाम परमाणु होते हैं), तब लिखी जाने वाली फ़ाइल को हटा दिया जाएगा। उस बिंदु से लिखित आउटपुट हटाए गए फ़ाइल पर जाएगा।
kasperd

13

जब तक आप इसे नहीं लिख रहे हैं, तब तक यह ठीक होना चाहिए।

हालाँकि, मैं उपयोग करने की सलाह दूंगा

tail -f log_file

दूसरे टर्मिनल में।

यह कमांड फाइल को "फॉलो" करेगा log_file और जैसे ही यह स्क्रिप्ट द्वारा अद्यतन किया जाता है, नई गयी सामग्री को लिख दें।


1

Kamil Maciorowski के जवाब के लिए एक टिप्पणी जोड़ने के लिए पर्याप्त प्रतिनिधि नहीं:

कुछ फ़ाइलों के लिए आप चाहते हैं tail -F file ताकि रोटेशन के माध्यम से निम्नलिखित जारी रहेगा। उदाहरण के लिए syslog देखना।


-1

यदि स्क्रिप्ट (या अंतर्निहित फ्रेमवर्क कार्यान्वयन) बार-बार अपने काम के दौरान फ़ाइल हैंडल को खोल रहा है और बंद कर रहा है, तो यह निम्नलिखित कारणों से बाद के राइट-मोड ओपन में साझाकरण उल्लंघन की त्रुटि का सामना कर सकता है:
1) स्क्रिप्ट अनन्य मोड में लिखने की पहुंच का अनुरोध कर सकती है (समवर्ती रीड एक्सेस को छोड़कर), इसलिए यदि आपका फ़ाइल संपादक / दर्शक कार्यक्रम यहां तक ​​कि केवल फ़ाइल को पढ़ रहा है, तो यह लेखन स्क्रिप्ट में एक गलती को ट्रिगर कर सकता है।
2) इसके अलावा, कुछ फ़ाइल संपादकों / दर्शकों ने पूरी अवधि के लिए फ़ाइल को लॉक कर दिया है।

अंत में, ऐसी संभावित समस्याएं हैं जो फ़ाइल को देखने के लिए आपके द्वारा उपयोग किए जा रहे प्रोग्राम पर निर्भर करती हैं। और फ़ाइल को लिखने वाले स्क्रिप्ट के कार्यान्वयन (या अंतर्निहित ढांचे) से उत्पन्न होने वाली संभावित समस्याएं हैं।


1
मेरे अनुभव से यह लिनक्स में बहुत ही असामान्य है (ध्यान दें: मैं एक घरेलू उपयोगकर्ता हूं)। मुझे पता है कि समस्या विंडोज में मौजूद है, सवाल टैग है linux हालांकि। लिनक्स में "संपादक / दर्शक" क्या इस तरह काम करते हैं? लिनक्स के किस फ्लेवर में ताले अनिवार्य हैं?
Kamil Maciorowski

@KamilMaciorowski दुर्भाग्य से, मेरे पास कोई विशिष्ट चेतावनी सूची नहीं है। कहीं भी ताले अनिवार्य नहीं हैं (न ही वे विंडोज के तहत हैं), कुछ लोग बस उनका उपयोग करते हैं। मैं केवल यह कह रहा हूं कि इस तरह की समस्या संभव है और कृपया इस दृष्टिकोण का उपयोग मिशन की गंभीर परिस्थितियों में लापरवाही से न करें। यह तय करना ओपी के ऊपर है कि यह लागू होता है या नहीं। उपरोक्त प्रश्न का मात्र अस्तित्व ही इस बात को जन्म देता है कि इस तरह की घटना ओपी के लिए पहले ही हो चुकी है। यह दावा करते हुए कि कुछ भी नहीं हो सकता है, कोई नई जानकारी प्रदान नहीं करता है।
Roland Pihlakas

1
@RolandPihlakas मैं इस उत्तर के लेखक को शर्त लगाने को तैयार हूं है अनुभव किया - लेकिन केवल विंडोज पर। तो यह लिनक्स की तरह POSIX- अनुरूप प्रणालियों के लिए अप्रासंगिक है, जिसके माध्यम से आउटपुट की निगरानी करना tail -f या less +F दिनचर्या है।
Chromatix

@Chromatix मैं वास्तव में उलझन में हूँ रचनात्मक आपके तर्क का हिस्सा और यह देखने में विफल है कि आप Windows के लिए अपने व्यक्तिगत घृणा के अलावा किस तरह का सुझाव या नई जानकारी यहां दे रहे हैं ... आपने मेरी टिप्पणी में दिए गए बिंदुओं का जवाब नहीं दिया बिल्कुल भी । आपने मुझे जो अनुभव किया है उसकी परवाह क्यों करते हैं? कृपया व्यक्तिगत न करें।
Roland Pihlakas

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