मैं linux में आईडी द्वारा एक उपयोगकर्ता नाम कैसे देख सकता हूँ?


67

idउपयोगकर्ता को देखने के लिए कमांड का उपयोग किया जा सकता है uid, उदाहरण के लिए:

$ id -u ubuntu
1000

क्या किसी उपयोगकर्ता नाम को देखने की आज्ञा है uid? मुझे लगता है कि यह /etc/passwdफ़ाइल को देखकर किया जा सकता है लेकिन मैं यह पूछ रहा हूं कि क्या इसमें कोई मौजूदा कमांड है, खासकर यदि उपयोगकर्ता इसे निष्पादित कर रहा है तो यह रूट नहीं है।

मैं वर्तमान उपयोगकर्ता के उपयोगकर्ता नाम की तलाश नहीं कर रहा हूँ, अर्थात मैं खोज नहीं कर रहा हूँ whoamiया नहीं logname

यह भी मुझे आश्चर्यचकित करता है कि क्या साझा वेब होस्टिंग पर यह एक सुरक्षा विशेषता है, या क्या मैं अभी कुछ सही नहीं समझ रहा हूँ?

परीक्षा के लिए, /etc/passwdएक साझा वेब होस्ट से फ़ाइल:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mailman:x:32006:32006::/usr/local/cpanel/3rdparty/mailman/mailman:/usr/local/cpanel/bin/noshell
dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin
mysql:x:101:105:MySQL server:/var/lib/mysql:/bin/bash
cpaneleximfilter:x:32007:32009::/var/cpanel/userhomes/cpaneleximfilter:/usr/local/cpanel/bin/noshell
nagios:x:102:106:nagios:/var/log/nagios:/bin/sh
ntp:x:38:38::/etc/ntp:/sbin/nologin
myuser:x:1747:1744::/home/myuser:/usr/local/cpanel/bin/jailshell

और यहाँ एक नमूना निर्देशिका सूची है /tmp/

drwx------  3 root     root        1024 Apr 16 02:09 spamd-22217-init/
drwxr-xr-x  2      665      664    1024 Apr  4 00:05 update-cache-44068ab4/
drwxr-xr-x  4      665      664    1024 Apr 17 15:17 update-extraction-44068ab4/
-rw-rw-r--  1      665      664   43801 Apr 17 15:17 variable.zip
-rw-r--r--  1      684      683    4396 Apr 17 07:01 wsdl-13fb96428c0685474db6b425a1d9baec

हम देख सकते हैं rootकि कुछ फ़ाइलों का मालिक है, और rootयह भी दिखाई दे रहा है /etc/passwd, हालांकि अन्य उपयोगकर्ता / समूह सभी संख्याओं के रूप में दिखाई देते हैं।


6
ध्यान रखें कि एक से अधिक उपयोगकर्ता के पास एक ही UID हो सकता है। यह दुर्लभ है, लेकिन कभी-कभार होता है।
बैरी ब्राउन

जवाबों:


35

lsपहले से ही उस लुकअप को करता है। आप कमांड लाइन से उपयोगकर्ता जानकारी देखने का काम कर सकते हैं getent passwd

यदि lsउपयोगकर्ता नाम के बजाय एक उपयोगकर्ता आईडी दिखाता है, तो ऐसा इसलिए है क्योंकि उस नाम से कोई उपयोगकर्ता नहीं है। फाइलसिस्टम उपयोगकर्ता आईडी स्टोर करते हैं, उपयोगकर्ता नाम नहीं। यदि आप किसी अन्य सिस्टम से एक फाइलसिस्टम माउंट करते हैं, या यदि फाइल अब हटाए गए उपयोगकर्ता से संबंधित है, या यदि आपने एक संख्यात्मक उपयोगकर्ता आईडी पास की है chown, तो आपके पास एक ऐसी फाइल हो सकती है जो किसी उपयोगकर्ता आईडी से संबंधित हो जिसमें नाम नहीं है।

एक साझा होस्ट पर, आपके पास कुछ फ़ाइलों तक पहुंच हो सकती है जो कई वर्चुअल मशीनों के बीच साझा की जाती हैं, प्रत्येक उनके उपयोगकर्ता डेटाबेस के साथ। यह थोड़ा अजीब है (फ़ाइलों को साझा क्यों करें लेकिन उपयोगकर्ताओं के पास नहीं हैं जो उनके खुद के हैं?), लेकिन यह तकनीकी रूप से संभव है।


2
ls -lअगर नाम आठ लंबाई से अधिक है तो मैं नाम के बजाय संख्या देख रहा हूं ।
कीग्रिट्न

@kgrittn यह यूनिक्स संस्करण पर निर्भर हो सकता है। GNU ls पूरे उपयोगकर्ता नाम को दर्शाता है। बिजीबॉक्स ls इसे 8 वर्णों में विभाजित करता है (कम से कम मेरे द्वारा यहां बनाए गए निर्माण पर)।
गाइल्स

66

प्रयत्न, कोशिश

getent passwd "$uid" | cut -d: -f1

यदि यह रिटर्न कुछ भी नहीं करता है, तो इसका मतलब है कि मेरे पास उपयोगकर्ता नाम का अनुवाद करने के लिए एक्सेस नहीं है?
cwd

1
अधिक संभावना है कि आपने t set "$ uid" का उपयोग नहीं किया है। grep ":$uid:" /etc/passwdइसे ढूंढता है? getent passwdकोई उत्पादन करता है ?
मिकेल

@cwd: आपको हमेशा एक यूजरनेम के लिए एक आईडी का उपयोग करना चाहिए। उदाहरण के लिए, ls -lहमेशा ऐसा कर रहा है।
7

बस उत्सुक था क्योंकि lsएक साझा होस्ट पर एक सूची को देखने से उपयोगकर्ता / समूह के नाम के कॉलम में नंबर दिख रहे थे। शायद यह एक सुरक्षा एहतियात या जेलशेल बात है?
cwd

@cwd अधिक संभावना है कि साझा होस्ट /etc/passwdअन्य जगहों से घुड़सवार / साझा का उपयोग कर रहा है जो उस समय माउंट नहीं किया गया था।
jw013

39

आप इस छोटे से आनंद ले सकते हैं।

$ id -nu [number]

3.17.3-1-ARCH # 1 एसएमपी प्रीमेच्योर शुक्र 14 नवंबर 22:56:01 सीईटी 2014 i686 जीएनयू / लिनक्स

मैं पुष्टि कर सकता हूं कि यह एक संबंधित उपयोगकर्ता नाम लौटाता है, अगर कोई मौजूद है, तो आर्क लिनक्स पर। मैं यह भी पुष्टि कर सकता हूं कि सामान्य उपयोगकर्ता के रूप में चलने पर यह उबंटू पर काम नहीं करता है, हालांकि मैंने इसे सुपरसुसर के रूप में परीक्षण नहीं किया है। यह अल्पाइन लिनक्स पर भी काम नहीं करता है। हो सकता है कि एक सुरक्षा सुविधा कुछ सिस्टम पर काम करने से रोकती है।


id -u jimmij=> 1000id -nu 1000=> id: 1000: no such user
जिम्मीज

2
मेरे लिए काम करता है, id --version=id (GNU coreutils) 8.23
eMPee584

FreeBSD 10.3 में भी काम करता है।
forquare

ध्यान दें: यह Red Hat / CentOS> = 7 पर काम करता है (Red Hat / CentOS <= 6 पर नहीं)
Franklin Piat

FYI करें यह बिजीबॉक्स / अल्पाइन लिनेक्स / अल्पाइन डोकर इमेज पर काम नहीं करता है
jjj

0

मुझे लगता है कि यह एक पुराना सवाल है, लेकिन यहाँ एक और जवाब है

awk -F: '{print $1,$3}' /etc/passwd | grep <UID>

पाइप को grepक्या? (यदि आप लाइन के शुरू में चार स्थान जोड़ते हैं, तो यह इसे निश्चित चौड़ाई पाठ के रूप में प्रस्तुत करेगा।)
वाइल्डकार्ड

मैं जवाब के साथ पसंद करते हैं getent passwd। लेकिन अगर पार्सिंग / आदि / पासवार्ड, तो यह केवल awk का उपयोग करने के लिए अच्छा होगा ID=0 ; awk -F: '{if ( $3 == '"$ID"' ) print $1}' /etc/passwd
फ्रैंकलिन पीट

-1

पार्स / आदि / पासवार्ड:

% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd
ubuntu

7
इसके विपरीत getent, यह काम नहीं करता है यदि सिस्टम LDAP का उपयोग करता है।
चोराबा

3
यह तब भी काम नहीं करता है जब NIS का उपयोग किया जाता है या जो भी अन्य वितरित प्रमाणीकरण प्रोटोकॉल।
जॉलीग्रे

@choroba: अगर उन्हें LDAP या NIS की विशिष्ट आवश्यकता होती है, तो उन्होंने शायद इसका उल्लेख किया होगा। मेरा समाधान ठेठ लिनक्स सेटअप पर काम करता है।
laebshade

2
डाउनवोट बीकॉज यह विश्वसनीय नहीं है (यह उपयोगकर्ता या समूह से मेल खा सकता है)।
फ्रैंकलिन पिआट

-1
id | awk '{print $1}' | sed 's:.*(::;s:)$::'

4
हेलो NAIM हालांकि यह एक सही उत्तर हो सकता है, यह पूछने वाले (और संभवतः आपके समाधान के भविष्य के पाठकों) की मदद करेगा यदि आप अपने जवाब को संक्षेप में बता सकते हैं कि यह कैसे काम करता है।
रोज़ा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.