سؤال

أحاول العثور على الملف الظاهري الذي يحتوي على معرف المستخدمين الحاليين.قيل لي أنه يمكنني العثور عليه في دليل 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, ، أو استدعاء الوظائف ذات الصلة لتعيين uid لاسم المستخدم بأي لغة تستخدمها.

من الناحية المثالية، يمكنك فقط الاتصال بمكالمة النظام getuid() للبحث عن هذه المعلومات، وذلك من خلال النظر في /proc/ يأتي بنتائج عكسية.

نصائح أخرى

لماذا لا تستخدم فقط ""id -u"?

بقدر ما أعرف، /proc خاص بنظام التشغيل Linux، وليس بنظام UNIX بشكل عام.إذا كنت تريد UID الحالي فقط، فاستخدم ملف getuid() أو geteuid() وظيفة.

إذا كنت تعلم أنك ستستخدم نظام التشغيل Linux فقط، فيمكنك استكشاف التسلسل الهرمي أدناه /proc/self/*, ، فهو يحتوي على معلومات متنوعة حول العملية الحالية.تذكر ذلك /proc "سحري"، فهو نظام ملفات افتراضي تخدمه النواة ويتم إنشاء المحتويات ديناميكيًا عند النقطة التي تطلبها.لذلك يمكنه إرجاع معلومات محددة للعملية الحالية.

على سبيل المثال، جرب هذا الأمر: cat /proc/self/status

لست متأكدًا من أنه يمكن العثور عليه في /proc.يمكنك تجربة استخدام getuid() الوظيفة أو $USER متغيرات البيئة.

على الأرجح، إما أنك تريد التحقق من $USER متغيرات البيئة.وتشمل الخيارات الأخرى getuid و id -u, ، ولكن البحث /proc بالتأكيد ليست أفضل طريقة للعمل.

في /proc/معرف العمليه/status (على الأقل في Linux) ستجد سطرًا مثل هذا:

Uid:      1000    1000    1000    1000

يخبرك هذا بـ uid الخاص بالمستخدم الذي تجري العملية تحت حسابه.

ومع ذلك، لمعرفة معرف العملية الحالية، ستحتاج إلى استدعاء النظام، ومن ثم يمكنك الاتصال أيضًا getuid للحصول على uid مباشرة.

يحرر:آه، /proc/self/status...تعلم شيء جديد كل يوم!

الأشياء التي تبحث عنها قد تكون في متغيرات البيئة.يجب أن تكون حذرًا بشأن الصدفة التي تستخدمها عند التحقق من متغيرات البيئة.يستخدم bash "UID" بينما يستخدم tcsh "uid" وin *nix القضية مهمة.لقد وجدت أيضًا أن tcsh يقوم بتعيين "gid" لكنني لم أتمكن من العثور على متغير مطابق في bash.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top