लिनक्स खोज कमांड दुर्व्यवहार है


14

हाल ही में भेद्यता प्रकटीकरण के बाद सिस्टम द्वारा हल की गई सेवा के लिए खोज करना, मुझे कमांड को खोजने से एक बहुत ही अजीब व्यवहार देखने में आया।

 root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz

कमांड पहले रन के लिए आउटपुट के रूप में 0 या दो लाइन देता है। लेकिन अगर मुझे दूसरी बार कमांड मिलती है तो:

root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
./lib/systemd/systemd-resolved
./lib/systemd/system/systemd-resolved.service.d
./lib/systemd/system/systemd-resolved.service

इसका मतलब यह है कि पहली बार, "ढूंढें" वास्तव में सब कुछ नहीं ढूंढता है। इसके अलावा यह केवल एक बार होता है। अगली बार कमांड चलाना सही आउटपुट दिखाता है। मैंने इसे डेबियन 8 (जेसी) स्थापित करने के साथ कुछ अन्य प्रणालियों पर जांचा। कर्नेल 4.9+ वालों पर यह सटीक समस्या हमेशा होती है लेकिन कर्नेल 3.16 वाले सिस्टम पर ऐसा नहीं होता है।
सिस्टम रिबूट के बाद यह सब फिर से होता है। लेकिन व्यवहार प्रत्येक व्यक्तिगत प्रणाली के लिए समान है। इसका मतलब है कि अगर किसी विशिष्ट सिस्टम पर परीक्षण (गलत तरीके से) पहले रन के लिए आउटपुट की दो लाइनें और दूसरे रन के लिए सही आउटपुट है, तो सिस्टम को फिर से रन करने के बाद कमांड का पहला रन 2 लाइनों को प्रिंट करता है। इसलिए सिस्टम प्रत्येक रिबूट (मेरे परीक्षणों के अनुसार) के बाद समान व्यवहार दिखाता है। फ़ाइलें विवरण इस प्रकार हैं:

-rw-r--r-- 1 root root  ./usr/share/man/man8/systemd-resolved.service.8.gz
lrwxrwxrwx 1 root root  ./usr/share/man/man8/systemd-resolved.8.gz -> systemd-resolved.service.8.gz
-rwxr-xr-x 1 root root  ./lib/systemd/systemd-resolved
drwxr-xr-x 2 root root  ./lib/systemd/system/systemd-resolved.service.d
-rw-r--r-- 1 root root  ./lib/systemd/system/systemd-resolved.service

EDIT: उन सभी के लिए जो इस विशिष्ट मामले के लिए इस विशिष्ट मामले से संबंधित समस्या का सुझाव देते हैं: " सिस्टम-सॉल्व्ड " केवल उदाहरण के लिए है। ऐसा तब होता है जब दूसरे कीवर्ड को भी खोजते हैं। यह एक और उदाहरण है जो पहले रन के लिए गलत परिणाम देता है:

root@localhost:/# find . -name "*apache*"

यहां कोई भी बैकबोन रिपॉजिटरी के नवीनतम कर्नेल के साथ डेबियन 8 पर इस समस्या की जांच करने में सक्षम नहीं है?


2
उदाहरण के लिए, क्या आप दो कॉल के निशान की तुलना करने की कोशिश कर सकते हैं strace? किस ओएस पर आपने दोषपूर्ण व्यवहार का निरीक्षण किया? "रिटर्न 0 या उपरोक्त जैसे दो परिणाम" से आपका क्या अभिप्राय है? शून्य या आउटपुट की दो लाइनें, या बाहर निकलने का कोड 0 + दो लाइनें? क्या यह एक नया खोल शुरू करने या रिबूट करने के बाद फिर से होता है? यह प्रासंगिक हो सकता है कि पहला कॉल केवल फाइल लौटाए, जबकि दूसरा रिटर्न फाइल और डायरेक्टरी।
l0b0

1
@ l0b0 जैसा कि मैंने कहा कि यह कई सिस्टम में कर्नेल 4.9 के साथ डेबियन पर होता है। मैंने अन्य विकृतियों की जांच नहीं की। 0 या 2 का मतलब है शून्य या आउटपुट की दो लाइनें। यह हर रिबूट के बाद होता है। आपका अंतिम कथन यहां लागू नहीं होता है। यह सब कुछ वापस करने का प्रयास करता है। निर्देशिका और फ़ाइलें दोनों।
user2808671

1
@ l0b0 वैसे मुझे यकीन नहीं है कि आप क्या देख रहे हैं, लेकिन जैसा कि आप देख सकते हैं कि मैंने कमांड का उल्लेख किया है ताकि कोई इस मुद्दे को पुन: पेश करने में सक्षम हो। उस कमांड को "systemd-Solve" वाले सभी रास्तों को वापस करना होगा, लेकिन यह नहीं होगा। इस स्थिति को संतुष्ट करने वाले कुल पांच रास्ते हैं लेकिन "खोज" कार्यक्रम केवल उनमें से दो या एक या शून्य रिटर्न करता है। यहाँ क्या मायने रखता है कि उपकरण गलत आउटपुट दे रहा है और कुछ सही रास्तों को याद कर रहा है। और जैसा कि मैंने उल्लेख किया है मैंने इसे डेबियन के साथ अन्य प्रणालियों पर जांचा है, कर्नेल 4.9 वाले लोगों को यह समस्या है। यह उपयोगकर्ता स्थान से परे कुछ गंभीर हो सकता है।
user2808671

2
@MarkWagner नंबर I ने ग्नू खोजा और डेबियन बैकपोर्ट्स मेलिंग सूची दोनों के लिए एक बग रिपोर्ट भरी। यह मेरे लिए बहुत गंभीर लगता है क्योंकि इस समस्या का स्रोत कई अन्य चीजों को प्रभावित कर सकता है, हालांकि मुझे नहीं पता कि क्या आप लोग मुझसे सहमत हैं। वैसे भी "खोज" एक बहुत लोकप्रिय उपकरण है और इसका आउटपुट विश्वसनीय होना चाहिए।
user2808671

2
कैसे /lib/systemdघुड़सवार है? यह किस तरह का फाइल सिस्टम है? यदि यह एक अलग माउंट बिंदु है, तो यह किस समय घुड़सवार था?
एंड्रयू हेनले

जवाबों:


4

डिब्यूटिल्स का डिफ़ॉल्ट संस्करण जो डेबियन 8 पर स्थापित है, 4.4.2 है और यह जेसी रिपॉजिटरी पर नवीनतम संस्करण है। मैं Findutils स्रोत कोड का नवीनतम संस्करण (4.6.0) डाउनलोड करता हूं और स्रोत से बायनेरिज़ का निर्माण करता हूं। फिर मैंने एक ही परीक्षण किया और "खोज" कमांड ने पहले रन के लिए सही आउटपुट दिखाया ।

फिर मैंने ग्नू आर्काइव से 4.4.2 स्रोत कोड का पता लगाया और इसे संकलित किया। संकलित खोज आदेश के लिए वही समस्या हुई। तो यह समस्या 4.6.0 फाइंड्यूटिल्स के साथ नहीं हो रही है।

लेकिन मुझे अभी भी पता नहीं है कि कुछ उपयोगकर्ताओं को खोज परिणाम 4.4.2 (डेबियन पर स्थापित उपयोगिता का डिफ़ॉल्ट संस्करण) का उपयोग करने के समान परिणाम क्यों नहीं मिलते हैं, और पता नहीं क्यों डेबियन को अभी भी खोज के पुराने संस्करण के साथ जारी किया जाना चाहिए और संभवतः अन्य लिनक्स उपयोगिताओं और इस समस्याग्रस्त स्थिति का कारण बनते हैं। और आखिरी बात यह है कि जो कुछ अजीब हुआ उसका सटीक तकनीकी कारण अभी भी अज्ञात है जो वांछनीय नहीं है। क्योंकि मुझे यकीन नहीं है कि मेरे OS वातावरण में कुछ चिंताजनक है।

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