लॉकिंग निष्पादन फ़ाइलें: Windows करता है, लिनक्स नहीं करता है। क्यों?


83

मैंने देखा जब एक फ़ाइल को विंडोज (.exe या .dll) पर निष्पादित किया जाता है, तो इसे लॉक किया जाता है और इसे हटाया, स्थानांतरित या संशोधित नहीं किया जा सकता है।

दूसरी ओर, लिनक्स निष्पादन फ़ाइलों को लॉक नहीं करता है और आप उन्हें हटा सकते हैं , स्थानांतरित कर सकते हैं या संशोधित कर सकते हैं।

जब लिनक्स नहीं करता है तो विंडोज लॉक क्यों होता है? क्या ताला लगाने का एक फायदा है?


7
एक उपयोगिता है जिसे WhoLockMe कहा जाता है जो एक्सप्लोरर में संदर्भ मेनू में एक मेनू प्रविष्टि जोड़ता है जो किसी फ़ाइल को लॉक करने की प्रक्रिया (तों) को प्रदर्शित कर सकता है। जब आप अजीब फ़ाइल-लॉकिंग त्रुटियां प्राप्त करते हैं तो अत्यधिक उपयोगी होता है। संपादित करें: मुझे पता है कि यह सवाल का जवाब नहीं देता है, लेकिन मुझे लगा कि यह एक अलग जवाब (केवल एक टिप्पणी के लिए लागू) के संदर्भ में पर्याप्त उपयोगी था।
जेसपेरे

जवाबों:


106

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

विंडोज में यह क्षमता नहीं है, इसलिए इसे फ़ाइल को तब तक लॉक करने के लिए मजबूर किया जाता है जब तक कि इससे निष्पादित सभी प्रक्रियाएं समाप्त न हो जाएं।

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


2
ध्यान दें कि आप फ़ाइल / फ़ोल्डर का उपयोग करने की प्रक्रिया को देखने के लिए विंडोज में प्रोसेस एक्सप्लोरर जैसे टूल का उपयोग कर सकते हैं।
जे सी

15
लिनक्स व्यवहार के पक्ष में एक व्यावहारिक कारण यह है कि आप ओएस और अन्य सॉफ्टवेयर को सिस्टम पर अपडेट कर सकते हैं, जबकि यह चल रहा है, और कभी भी रिबूट नहीं (आप रिबूट के बिना भी रनिंग कर्नेल स्विच कर सकते हैं, यह सिर्फ इतना मुश्किल है कि इसे केवल कहा जाता है अपटाइम-क्रिटिकल एप्लिकेशन में)।
जोहलड़ी

7
"विंडोज में यह क्षमता नहीं है" ... क्या आप सुनिश्चित हैं? NT कर्नेल हैंडल और संदर्भों के साथ ऑब्जेक्ट्स को रिफ़ंड करने पर आधारित है।
एडम मित्ज

11
विंडोज में वास्तव में 3 बिट्स होते हैं जो आप निर्धारित कर सकते हैं कि एक अन्य प्रक्रिया एक फ़ाइल के लिए क्या कर सकती है जब वह खुली हो। FILE_SHARE_DELETEबिट सेट होने पर खुलने पर फ़ाइल को डिलीट किया जा सकता है । मुझे नहीं लगता कि पीई लोडर (जो EXE और DLL को लोड करता है) इस बिट को सेट करता है। हैंडल्स को रेफरेंस काउंट किया जाता है और डिलीट होने पर फाइल तब हैंडल चली जाती है जब आखिरी हैंडल को गिराया जाता है, लेकिन उस और यूनिक्स के बीच का अंतर यह है कि NT एक नई फाइल को उसी नाम से बनाए जाने से ब्लॉक करेगा जब ऐसा होता है।
asveikau

2
कॉमोनैड जो कहता है वह पूरी तरह से गलत है, NTFS बेशक हार्डलिंक्स का इस्तेमाल करता है और हमेशा करता है, विंडोज विस्टा में सिमलिंक जोड़े गए हैं। यह पूरी तरह से गलत है कि विंडोज़ रेफरी का उपयोग नहीं करता है, यह करता है, बस CreateFile wher eit की तरह एपीआई पढ़ें स्पष्ट रूप से कहा कि किन परिस्थितियों में फाइलें हटाने योग्य हैं और ऐसे। और यह सवाल के असली जवाब के लिए भी उचित जगह है: CreateFile में एक तर्क क्लॉक्ड dwShareMode है जो खोली गई फ़ाइलों के अनिवार्य लॉकिंग को नियंत्रित करता है और एप्लिकेशन को निर्णय लेने देता है। डिफ़ॉल्ट मान एक अनन्य लॉक है ...
Thorsten Schöning

30

जहाँ तक मुझे पता है, linux करता है जब वे चल रहे ताला निष्पादनयोग्य - हालांकि, यह ताले inode । इसका मतलब है कि आप "फाइल" को हटा सकते हैं, लेकिन फाइल सिस्टम पर इनकोड अभी भी मौजूद है, अछूता है और आपके द्वारा वास्तव में डिलीट किया गया लिंक है।

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


"पुरे समय"? कोई उदाहरण?
मेज़

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

26

लिनक्स फाइलों को लॉक करता है। यदि आप उस फ़ाइल को अधिलेखित करने का प्रयास करते हैं जो आपको निष्पादित कर रही है तो आपको "ETXTBUSY" (पाठ फ़ाइल व्यस्त) मिलेगा। हालाँकि आप फ़ाइल को हटा सकते हैं, और कर्नेल फ़ाइल को हटा देगा जब इसका अंतिम संदर्भ हटा दिया जाएगा। (यदि मशीन को साफ-साफ बंद नहीं किया गया था, तो ये फाइलें "डीलेटेड इनोड में शून्य डी-टाइम" संदेश का कारण होती हैं, जब फाइल सिस्टम की जांच की जाती है, तो वे पूरी तरह से हटाए नहीं गए थे, क्योंकि एक रनिंग प्रक्रिया का उनके लिए संदर्भ था, आदि। और अब वे हैं।)

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

विंडोज़ के तहत, ऐसी फ़ाइल की जगह जो उपयोग में है, एक बड़ी परेशानी प्रतीत होती है, आमतौर पर रिबूट की आवश्यकता होती है ताकि यह सुनिश्चित हो सके कि कोई प्रक्रिया नहीं चल रही है।

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

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

Lsof और fuser (या सिर्फ / proc // fd में इधर उधर घूमने) जैसे प्रोग्राम आपको दिखा सकते हैं कि किन प्रक्रियाओं में फाइलें खुली हैं जिनका अब कोई नाम नहीं है।


6

मुझे लगता है कि linux / unix एक ही लॉकिंग मैकेनिक्स का उपयोग नहीं करता है, क्योंकि वे एक मल्टी-यूज़र सिस्टम के रूप में जमीन से निर्मित होते हैं - जो एक ही फ़ाइल का उपयोग करने वाले कई उपयोगकर्ताओं की संभावना की उम्मीद करेगा, शायद अलग-अलग उद्देश्यों के लिए भी।

क्या ताला लगाने का एक फायदा है? खैर, यह संभवतः पॉइंटर्स की मात्रा को कम कर सकता है जिसे ओएस को प्रबंधित करना होगा, लेकिन अब एक दिन की बचत की राशि बहुत नगण्य है। ताला लगाने के बारे में सबसे बड़ा फायदा मुझे यह हो सकता है: आप कुछ उपयोगकर्ता-देखने योग्य अस्पष्टता को बचाते हैं। यदि उपयोगकर्ता बाइनरी फ़ाइल चला रहा है, और उपयोगकर्ता b उसे हटाता है, तो उपयोगकर्ता A की प्रक्रिया पूरी होने तक वास्तविक फ़ाइल को इधर-उधर रहना होगा। फिर भी, यदि उपयोगकर्ता B या कोई अन्य उपयोगकर्ता इसके लिए फ़ाइल सिस्टम को देखते हैं, तो वे इसे ढूंढने में सक्षम नहीं होंगे - लेकिन यह स्थान लेना जारी रखेगा। वास्तव में मेरे लिए बहुत बड़ी चिंता नहीं है।

मुझे लगता है कि यह काफी हद तक विंडो की फाइल सिस्टम के साथ बैकवर्ड संगतता पर एक सवाल है।


इस संदर्भ में "विंडोज" विंडोज एनटी लाइन है। यह एकल-उपयोगकर्ता विंडोज 3.11 के लिए एक बहु-उपयोगकर्ता उत्तराधिकारी के रूप में डिज़ाइन किया गया था। यूनिक्स की तुलना करें, जो मल्टीिक्स के लिए एकल-उपयोगकर्ता उत्तराधिकारी है।
MSalters

6

मुझे लगता है कि आप Windows के बारे में बहुत अधिक निरपेक्ष हैं। आम तौर पर, यह एक निष्पादन योग्य के कोड भाग के लिए स्वैप स्थान आवंटित नहीं करता है। इसके बजाय, यह excutable और DLL पर लॉक रखता है। यदि त्याग किए गए कोड पृष्ठ फिर से आवश्यक हैं, तो उन्हें बस पुनः लोड किया जाएगा। लेकिन / स्वैप के साथ, इन पृष्ठों को स्वैप में रखा गया है। यह सीडी या नेटवर्क ड्राइव पर निष्पादन योग्य के लिए उपयोग किया जाता है। इसलिए, विंडोज़ को इन फ़ाइलों को लॉक करने की आवश्यकता नहीं है।

.NET के लिए, छाया प्रति देखें


1

यदि किसी फ़ाइल में कोड निष्पादित किया जाना चाहिए या डिज़ाइन का निर्णय नहीं होना चाहिए और MS ने केवल लॉक करने का निर्णय लिया है, क्योंकि इससे व्यवहार में स्पष्ट लाभ हैं: इस तरह आपको यह जानने की आवश्यकता नहीं है कि किस कोड में किस कोड का उपयोग किस एप्लिकेशन द्वारा किया गया है। यह लिनक्स डिफ़ॉल्ट व्यवहार के साथ एक बड़ी समस्या है, जिसे ज्यादातर लोग अनदेखा करते हैं। यदि सिस्टम वाइड लिबास को बदल दिया जाता है, तो आप आसानी से यह नहीं जान सकते कि कौन से ऐप ऐसे लिबास के कोड का उपयोग करते हैं, सबसे अधिक बार जो आपको मिल सकता है वह यह है कि पैकेज मैनेजर उन लिबास के कुछ उपयोगकर्ताओं को जानता है और उन्हें पुनरारंभ करता है। लेकिन यह केवल सामान्य और अच्छी तरह से काम करने वाली चीजों के लिए काम करता है जैसे शायद पोस्टग्रैज और इसके लिबास या ऐसे। अधिक दिलचस्प परिदृश्य हैं यदि आप अपने स्वयं के एप्लिकेशन को कुछ 3 पार्टी के कामों के खिलाफ विकसित करते हैं और जिन्हें प्रतिस्थापित किया जाता है, क्योंकि ज्यादातर बार पैकेज प्रबंधक बस आपके ऐप को नहीं जानता है। और वह' केवल मूल C कोड की समस्या या ऐसा नहीं है, यह लगभग सब कुछ के साथ हो सकता है: बस पैकेज प्रबंधक का उपयोग करके स्थापित mod_perl और कुछ पर्ल लिबास के साथ httpd का उपयोग करें और पैकेज प्रबंधक को किसी भी कारण से उन पर्ल लिबास को अपडेट करने दें। यह आपके httpd को पुनः आरंभ नहीं करेगा, केवल इसलिए कि यह निर्भरताओं को नहीं जानता है। इस तरह के बहुत सारे उदाहरण हैं, केवल इसलिए कि किसी भी फ़ाइल में संभवतः किसी भी रनटाइम द्वारा मेमोरी में कोड का उपयोग किया जा सकता है, जावा, पायथन और ऐसी सभी चीजों के बारे में सोचें।

तो वहाँ एक अच्छा कारण है राय है कि डिफ़ॉल्ट रूप से फ़ाइलों को लॉक करना एक अच्छा विकल्प हो सकता है। आपको उस कारणों से सहमत होने की आवश्यकता नहीं है, हालाँकि।

तो एमएस ने क्या किया? उन्होंने बस एक एपीआई बनाया जो कॉलिंग एप्लिकेशन को यह तय करने का मौका देता है कि फाइलें लॉक होनी चाहिए या नहीं, लेकिन उन्होंने फैसला किया कि इस एपीआई का डिफ़ॉल्ट मूल्य पहले कॉलिंग एप्लिकेशन को एक विशेष लॉक प्रदान करना है। CreateFile और इसके dwShareModeतर्क के आसपास API पर एक नज़र डालें । यही कारण है कि आप कुछ एप्लिकेशन द्वारा उपयोग में फ़ाइलों को हटाने में सक्षम नहीं हो सकते हैं, यह बस आपके उपयोग के मामले की परवाह नहीं करता है, डिफ़ॉल्ट मानों का उपयोग करता है और इसलिए एक फ़ाइल के लिए विंडोज द्वारा एक विशेष लॉक मिला है।

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

इसके अतिरिक्त, आप एनटीएफएस की तुलना में एग्जिट 4 में एक फाइल का वर्णन करने के लिए उपयोग की जाने वाली संरचनाओं पर बस एक नज़र रखना चाहते हैं , जो कि बहुत कुछ है। दोनों extents की अवधारणा के साथ काम करते हैं, जो फ़ाइल नाम जैसी विशेषताओं से डेटा को अलग करता है, और इनोड एक पुराने, लेकिन उसी तरह की अवधारणा के लिए सिर्फ एक और नाम है। यहां तक ​​कि विकिपीडिया अपने लेख में दोनों फ़ाइल सिस्टम को सूचीबद्ध करता है ।

डीफ़्रेग्मेंटेशन की तरह नेट पर अन्य ओएस की तुलना में विंडोज में फ़ाइल लॉकिंग के आसपास वास्तव में बहुत सारे FUD हैं। इस FUD में से कुछ को केवल विकिपीडिया पर थोड़ा सा पढ़कर खारिज किया जा सकता है ।


साझा निर्भरता के संस्करण प्रबंधन के बारे में असंबद्ध अप्रासंगिक हैं। आपको उन समस्याओं से निपटना होगा भले ही उन्हें अपडेट करने के लिए रिबूट की आवश्यकता हो। विंडोज पर, इसका एक नाम भी है: DLL नरक। इसके अलावा, आपके द्वारा वर्णित रनटाइम व्यवहार लिनक्स के मामले से पूरी तरह से संभाला जाता है जहां यह पहले से ही फ़ाइल को मेमोरी में लोड करता है और यह उपलब्ध रहता है; एप्लिकेशन पुराने संस्करण के साथ तब तक चालू रहेगा, जब तक कि यह पुनरारंभ नहीं हो जाता है, जैसे कि विंडोज फाइल को अनलॉक करने के लिए रिबूट को बाध्य करता है। उस मोर्चे पर कोई फायदा नहीं है।
jpmc26

DLL नर्क निश्चित रूप से इस बिंदु को पूरी तरह से याद कर रहा है और हमारे पास अब 90 का दशक नहीं है, बस WinSxSसामान और सामान के बारे में पढ़ें । इसके अतिरिक्त, यह चीजों को मेमोरी में लोड करने और उन्हें वहां रखने के बारे में नहीं है, विंडोज बिल्कुल वैसा ही करता है यदि आवश्यक हो, तो यह जानने और निर्णय लेने के बारे में है कि फाइलों को बदला जाना चाहिए या नहीं और यह तय करने के लिए कौन प्रभारी है। Windows-API बस फ़ाइल के पहले उपयोगकर्ता को निर्णय लेने देता है और यह बहुत मायने रखता है।
थोरस्टेन शॉनिंग

लेकिन यह मेरी बात है: DLL के किस संस्करण का उपयोग करना है यह तय करना DLL नरक का हिस्सा है। इसे "निर्भरता नरक" कहें, यदि आप विंडोज के कुछ पुराने आइडियलसोनिक व्यवहारों से अलग करना चाहते हैं। बावजूद, निष्पादन योग्य फ़ाइलों को लॉक करने के लिए डिफ़ॉल्ट रूप से साझा निर्भरता को प्रबंधित करने में मदद नहीं करता है । बिल्कुल भी। जब आप इसे अपग्रेड करने का प्रयास करते हैं तो एक विशेष फ़ाइल पर निर्भर होने वाली चीजें भी नहीं चल सकती हैं; कोई अतिरिक्त सुरक्षा नहीं है। साझा निर्भरता के साथ 2 विकल्प हैं: सभी के लिए नि: शुल्क, जो सामान को तोड़ने का जोखिम रखता है जब आप इसे चलाने की कोशिश करते हैं, या पैकेज मैनेजर, जो आपको चीजों को स्थापित करने से रोकता है।
jpmc26

यह प्रश्न यह तय करने के बारे में नहीं है कि किस EXE या DLL का उपयोग करना है, यह डिफ़ॉल्ट रूप से और उसके बाद क्या होता है। आप एक बिल्कुल अलग विषय पर चर्चा कर रहे हैं। लॉकिंग का उपयोग उस निर्णय के बाद किया जाता है जो EXE या DLL को पहले उपयोगकर्ता द्वारा कुछ अतिरिक्त नियंत्रण प्राप्त करने के लिए निष्पादित करना है, जो इस उदाहरण में स्वयं Windows है, और दूसरों को उस नियंत्रण के बारे में बताने के लिए। और "दूसरों" को किसी कारण से विंडोज की जरूरतों को हटाने या लिखने की अनुमति नहीं देता है और इसलिए उन्हें लॉक करता है, निश्चित रूप से अतिरिक्त समन्वय के लिए एक तंत्र है।
थोरस्टेन शूइंग

1
कुछ EXE या DLL "मेमोरी में" वैसे भी सबसे अधिक संभावना नहीं है, लेकिन डिफ़ॉल्ट रूप से इसमें मैप किया गया है। मैपिंग के लिए फ़ाइल सामग्री उपलब्ध होनी चाहिए, इसलिए मनमाने ढंग से इसे बदलने को डिफ़ॉल्ट रूप से असुरक्षित माना जाता है और किसी को पता होना चाहिए कि क्या कर रहा है। जो स्पष्ट रूप से ऐसा नहीं है यदि कोई व्यक्ति EXEs या DLL से हैरान है। OTOH, अन्य सभी फाइलें केवल डिफ़ॉल्ट रूप से लॉक की जाती हैं, जरूरी नहीं, इसलिए एप्लिकेशन यह तय कर सकते हैं कि क्या वे आपके उपयोग के मामले के आधार पर आपको लिखने या हटाने की अनुमति देते हैं। ऐप के डेवलपर्स को मनमाने उपयोगकर्ताओं से बेहतर पता होना चाहिए कि वे अपनी फ़ाइलों का उपयोग कैसे करते हैं और कौन से ऑपरेशन कब सुरक्षित हैं।
थोरस्टन शॉनिंग

0

NT वेरिएंट है

खुली फ़ाइलें

कमांड, जो दिखाएगा कि कौन सी प्रक्रियाएं किन फाइलों पर संभालती हैं। हालाँकि, यह प्रणाली वैश्विक ध्वज को सक्षम करने की आवश्यकता है 'वस्तुओं की सूची बनाए रखें'

openfiles / स्थानीय /?

आपको बताता है कि यह कैसे करना है, और यह भी कि ऐसा करने से एक प्रदर्शन जुर्माना लगता है।


0

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

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