मैं वर्चुअल फ़ाइल को खोजने का प्रयास कर रहा हूं जिसमें वर्तमान उपयोगकर्ता आईडी है। मुझे बताया गया था कि मैं इसे proc निर्देशिका में पा सकता हूं, लेकिन यह सुनिश्चित नहीं करता कि कौन सी फाइल है।यूनिक्स प्रो निर्देशिका
उत्तर
आप वास्तव में /proc/self/status
चाहते हैं, जो आपको वर्तमान में निष्पादित प्रक्रिया के बारे में जानकारी देगा।
$ cat /proc/self/status
Name: cat
State: R (running)
Tgid: 17618
Pid: 17618
PPid: 3083
TracerPid: 0
Uid: 500 500 500 500
Gid: 500 500 500 500
FDSize: 32
Groups: 10 488 500
VmPeak: 4792 kB
VmSize: 4792 kB
VmLck: 0 kB
VmHWM: 432 kB
VmRSS: 432 kB
VmData: 156 kB
VmStk: 84 kB
VmExe: 32 kB
VmLib: 1532 kB
VmPTE: 24 kB
Threads: 1
SigQ: 0/32268
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed: 00000003
Mems_allowed: 1
voluntary_ctxt_switches: 0
nonvoluntary_ctxt_switches: 3
आप शायद UID और Gid तर्ज पर पहली संख्या को देखने के लिए चाहते हैं:
यहाँ एक उदाहरण है। आप /etc/passwd
पर देखकर उपयोगकर्ता नाम के लिए कौन से यूआईडी नंबर मैप देख सकते हैं, या आप जो भी भाषा इस्तेमाल कर रहे हैं, उसमें यूज़रने के लिए यूआईडी मैपिंग के लिए प्रासंगिक कार्यों को कॉल कर सकते हैं।
आदर्श रूप से, आप इस जानकारी को देखने के लिए सिस्टम कॉल getuid()
पर कॉल करेंगे, इसे /proc/
पर देखकर इसे प्रतिकूल बना दिया गया है।
मुझे यकीन नहीं है कि /proc
में पाया जा सकता है। आप getuid()
फ़ंक्शन या $USER
पर्यावरण चर का उपयोग करने का प्रयास कर सकते हैं।
क्यों न केवल "id -u
" का उपयोग करें?
अधिकतर, आप या तो $USER
पर्यावरण चर देखना चाहते हैं। अन्य विकल्पों में getuid
और id -u
शामिल हैं, लेकिन /proc
खोजना निश्चित रूप से कार्रवाई का सबसे अच्छा तरीका नहीं है।
जहां तक मुझे पता है, /proc
लिनक्स के लिए विशिष्ट है, यह सामान्य रूप से यूनिक्स में नहीं है। यदि आप वास्तव में केवल वर्तमान यूआईडी चाहते हैं, तो getuid()
या geteuid()
फ़ंक्शन का उपयोग करें।
यदि आप जानते हैं कि आप केवल लिनक्स पर होंगे, तो आप /proc/self/*
के तहत पदानुक्रम का पता लगा सकते हैं, इसमें वर्तमान प्रक्रिया के बारे में विभिन्न जानकारी शामिल है। याद रखें कि /proc
"जादुई" है, यह एक वर्चुअल फाइल सिस्टम है जो कर्नेल परोसता है और जिस बिंदु पर आप अनुरोध करते हैं उस पर सामग्री गतिशील रूप से जेनरेट की जाती है। इसलिए यह वर्तमान प्रक्रिया के लिए विशिष्ट जानकारी वापस कर सकता है।
उदाहरण के लिए, इस आदेश का प्रयास करें: cat /proc/self/status
/proc/process_id/status
में (कम से कम लिनक्स पर) आप इस तरह की एक पंक्ति मिल जाएगा:
Uid: 1000 1000 1000 1000
यह आपको जिसका तहत उपयोगकर्ता का UID बताता है खाता चल रहा है प्रक्रिया।
हालांकि, वर्तमान प्रक्रिया की प्रक्रिया आईडी को जानने के लिए आपको सिस्टम कॉल की आवश्यकता होगी, और फिर आप सीधे यूआईडी प्राप्त करने के लिए getuid
पर कॉल कर सकते हैं।
संपादित करें: आह, /proc/self/status
... हर दिन कुछ नया सीखना!
जो चीजें आप खोज रहे हैं वे पर्यावरण चर में हो सकती हैं। जब आप पर्यावरण चर की जांच करते हैं तो आपको सावधान रहना होगा कि आप किस शैल का उपयोग कर रहे हैं। बैश "यूआईडी" का उपयोग करता है जबकि टीसीएस "यूआईडी" का उपयोग करता है और *nix
केस मामलों में। मैंने यह भी पाया है कि tcsh "gid" सेट करता है लेकिन मैं बैश में मिलान करने वाला चर नहीं ढूंढ पा रहा था।
आपको कभी भी/etc/passwd खुद को पार्स नहीं करना चाहिए, क्योंकि अधिकांश आधुनिक सिस्टम पीएएम का उपयोग करते हैं, और उस स्थिति में उपयोगकर्ता डेटाबेस/etc/passwd नहीं हो सकता है, लेकिन इसके बजाय एनआईएस, एलडीएपी सर्वर या पूरी तरह से कुछ हो सकता है विभिन्न। – jfs