क्या वर्तमान उपयोगकर्ताओं के घर निर्देशिका के लिए एक मानक प्रतीकात्मक लिंक है?


9

शेल ~आपके होम डायरेक्टरी में विस्तार कर सकता है । $HOMEआम तौर पर एक ही सौदा होता है, लेकिन अक्सर आप वर्तमान उपयोगकर्ताओं के घर निर्देशिका को एक संदर्भ से संदर्भित करना चाहते हैं जो इस तरह के विस्तार का समर्थन नहीं कर सकता है।

मैं जहाँ $HOMEकाम ~करता है और इसके विपरीत है, लेकिन फ़ाइलों को कॉन्फ़िगर किया है ।

मुझे लगता है कि फ्यूज इन पंक्तियों के साथ कुछ प्रदान कर सकता है, जैसे /var/myself->$HOME

इसके साथ ही मैं चीजों को इंगित करने के लिए कॉन्फिग फाइलों में मान रख सकता हूं /var/myself/backdrops/pornography/wtf/yarly.jpg

क्या पहले से ही ऐसा कुछ है? यदि नहीं, तो क्या इस तरह के कुछ नहीं होने के लिए अच्छे कारण हैं?


2
यह वास्तव में एक अच्छा विचार की तरह लगता है, और फ्यूज यह बहुत तुच्छ तरीके से कर सकता है अगर मुझे इंटरफ़ेस सही ढंग से याद है
माइकल मूरज़ेक

जवाबों:


6

मैं आपकी चिंता को समझता हूं लेकिन जवाब "नहीं" है, ऐसी कोई बात नहीं है।
सामान्य विधि यह है कि ओएस को उपयोगकर्ता के घर का रास्ता पूछा जाए, या $ गृह चर प्राप्त किया जाए।

इन सभी विकल्पों को हमेशा एप्लिकेशन से कुछ कोडिंग की आवश्यकता होती है। बहुत सारे एप्लिकेशन, जैसे बैश, "उपनाम" ~ (ओपन (2) अनुवाद नहीं करता है) प्रदान करते हैं।

बेशक ऐसा करने के लिए vfs या फ्यूज मॉड्यूल को लागू किया जा सकता है। शायद ऐसा कुछ है, जो मैं पूछने जा रहा हूँ!

लेकिन क्या वाकई इसकी जरूरत है? आप वर्कअराउंड का उपयोग कर सकते हैं जैसे:

  • प्रोग्राम को शुरू करने के लिए एक स्क्रिप्ट बनाएं जो $ HOME को एक रिश्तेदार पथ या एक ज्ञात स्थान से जोड़ता है।

  • एक ज्ञात स्थान के लिए $ HOME निर्देशिका से जोड़ने के लिए pam_exec का प्रयोग करें http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html


: मैं वीएफएस उपकरण के लिए पूछना unix.stackexchange.com/questions/1811/...
Keymon

0

एक चाल (लिनक्स पर, कम से कम) $HOMEएप्लिकेशन को चलाने से पहले निर्देशिका को बदलना होगा और फिर /proc/self/cwd/...कॉन्फ़िगरेशन फ़ाइल में उपयोग करना होगा ।


मुझे इसका हैकिंगनेस पसंद है लेकिन संभवत: यह उन समस्याओं में चलेगा जो इस प्रक्रिया को वर्तमान निर्देशिका को बदल देती है। मुझे प्रारंभिक कार्य निर्देशिका के लिए / proc / PID / iwd चाहिए।
लेरक

... और उस मामले के लिए एक / proc / PID / घर
Lerc

@ Lerc, अगर यह एक config फाइल में जा रहा है, तो यह /proc/selfनहीं होना चाहिए /proc/PID, क्योंकि आप पहले से नहीं जान सकते हैं कि PID क्या होने जा रहा है।
मई को नील मैथ्यू

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

हाँ, मेरा मतलब था / proc / PID / घर का मतलब है कि सभी proc / PID dirs को इसका समर्थन करना चाहिए और इस प्रकार / proc / self शामिल हैं
Lerc

0

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


यदि आप ऐसा करते हैं तो आपने प्रभावी रूप से उपयोगकर्ता से दूर विन्यास फाइल के लिए एक पथ निर्दिष्ट करने की क्षमता ले ली है। यदि आप रैपर एक्सई के साथ रैली फैंसी प्राप्त करते हैं, तो यह संभव है।
लार्कर सेप

0

आप रिक्वेस्ट यूजर का पिड प्राप्त कर सकते हैं और उसकी होम डायरेक्टरी की प्रणाली पूछ सकते हैं। तो यह संभव है।

हालांकि मुझे यकीन नहीं है कि अगर कोई SUID प्रोग्राम नहीं है जो FS को स्टैटिक मान लेगा।

संपादित करें:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

उपरोक्त कोड आदर्श नहीं है, लेकिन सामान्य मामलों के लिए काम करना चाहिए।


आप यह जानने के बाद कि उसकी उपयोगकर्ता क्या है, उसकी होम डायरेक्टरी आपको कैसे मिलेगी?
WhyNotHugo

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