लिनक्स में यूनिक्स डोमेन सॉकेट पथ की शुरुआत में @ प्रतीक क्या दर्शाता है?


17

जब मैं दौड़ता हूं netstat --protocol unixया lsof -Uदेखता हूं कि कुछ यूनिक्स सॉकेट पाथ @ सिंबल के साथ पूर्वनिर्मित हैं , उदाहरण के लिए, @ / tmp / dbus-qj8V39Yrpa । जब मैं दौड़ता ls -l /tmpहूं तो मुझे वहां dbus-qj8V39Yrpa नाम की फाइल दिखाई नहीं देती है।

सवाल यह है कि क्या @ प्रतीक निरूपित है? और दूसरा संबंधित प्रश्न है, - मैं वास्तव में फाइल सिस्टम पर उस यूनिक्स सॉकेट फ़ाइल ( @ / tmp / dbus-qj8V39Yrpa ) को कहां खोज सकता हूं ?


1
इसके लायक होने के लिए, अधिक आधुनिक ssकार्यक्रम सॉकेट एंडपॉइंट्स जैसे "@ / tmp / .X11-unix / X0" दिखाता है
ब्रूस

जवाबों:


33

@शायद एक सॉकेट एक में आयोजित इंगित करता है abstract namespaceजो फाइल सिस्टम में एक फ़ाइल से संबंधित नहीं है।

माइकल केरिस्क द्वारा लिनक्स प्रोग्रामिंग इंटरफेस से उद्धरण :

57.6 लिनक्स सार सॉकेट नेमस्पेस

तथाकथित अमूर्त नाम स्थान एक लिनक्स-विशिष्ट विशेषता है जो हमें एक नाम के बिना UNIX डोमेन सॉकेट को बांधने की अनुमति देता है, उस नाम के बिना फाइल सिस्टम में बनाया जा सकता है। यह कुछ संभावित लाभ प्रदान करता है:

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

अमूर्त बंधन बनाने के लिए, हम sun_path फ़ील्ड के पहले बाइट को एक शून्य बाइट (\ 0) के रूप में निर्दिष्ट करते हैं । [...]

null byteइस तरह के सॉकेट को निरूपित करने के लिए एक अग्रणी प्रदर्शित करना मुश्किल हो सकता है, इसलिए शायद यही प्रमुख @संकेत का कारण है ।


2
यह उल्लेखनीय है कि ASCII NUL वर्ण ^ @ ([Ctrl] + [@]) के रूप में कई टर्मिनलों में दर्ज किया गया है और यह विभिन्न Unix कमांड (जैसे GNU कैट -a) द्वारा प्रदर्शित होने पर ^ @ के रूप में प्रदर्शित हो सकता है।
जिम डेनिस

7

के अनुसार man 7 unix

  • अमूर्त: एक सार सॉकेट पता इस तथ्य से प्रतिष्ठित है कि sun_path [0] एक अशक्त बाइट ( \0) है। Sun_path में शेष बाइट्स के सभी सॉकेट के "नाम" को परिभाषित करते हैं। (नाम में रिक्त बाइट्स का कोई विशेष महत्व नहीं है।) फ़ाइल सिस्टम पथनाम के साथ नाम का कोई संबंध नहीं है। इस नाम स्थान में सॉकेट का पता बाकी बाइट्स द्वारा sun_path में दिया गया है। जब एक सार सॉकेट का पता getsockname (2), getpeername (2), और स्वीकार (2) द्वारा लौटाया जाता है, तो इसकी लंबाई sizeof (संरचना sockaddr_un), और sun_path में सार नाम होता है। अमूर्त सॉकेट नेमस्पेस एक गैर-पोर्टेबल लिनक्स एक्सटेंशन है।

ऐसा लगता है कि ये 'अमूर्त' हैं - इसलिए कोई वास्तविक पथ फाइल सिस्टम पर मौजूद नहीं है

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