আমি কীভাবে লিনাক্সে আইডি দিয়ে একটি ব্যবহারকারীর নাম সন্ধান করতে পারি?


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
মনে রাখবেন যে একাধিক ব্যবহারকারীর একই ইউআইডি থাকতে পারে। এটি বিরল, তবে মাঝে মধ্যে ঘটে happens
ব্যারি ব্রাউন

উত্তর:


35

lsইতিমধ্যে যে চেহারাটি সম্পাদন করে। আপনি কমান্ড লাইন দিয়ে একটি ব্যবহারকারীর তথ্য অনুসন্ধান করতে পারেন getent passwd

যদি lsকোনও ব্যবহারকারীর নামের পরিবর্তে কোনও ব্যবহারকারী আইডি দেখায়, কারণ এটির নামে কোনও ব্যবহারকারী নেই। ফাইল সিস্টেমগুলি ব্যবহারকারীর আইডি সঞ্চয় করে, ব্যবহারকারীর নাম নয়। আপনি যদি অন্য সিস্টেম থেকে একটি ফাইল সিস্টেম মাউন্ট করেন, বা যদি কোনও ফাইল এখন মুছে ফেলা ব্যবহারকারীর অন্তর্ভুক্ত হয় বা আপনি যদি একটি সংখ্যক ব্যবহারকারী আইডি পাস করে থাকেন তবে আপনার chownকোনও ফাইল নেই যা কোনও নাম নেই এমন একটি ব্যবহারকারী আইডির সাথে সম্পর্কিত।

একটি ভাগ করা হোস্টে আপনার কয়েকটি ব্যবহারকারীর ডাটাবেসের সাহায্যে কয়েকটি ভার্চুয়াল মেশিনের মধ্যে ভাগ করা কিছু ফাইল অ্যাক্সেস থাকতে পারে। এটি কিছুটা অদ্ভুত (কেন ফাইলগুলি ভাগ করুন তবে ব্যবহারকারীদের নিজেরাই নয়?) তবে প্রযুক্তিগতভাবে এটি সম্ভব।


2
ls -lনামের দৈর্ঘ্যে আটটি অক্ষরের বেশি হলে আমি নামের পরিবর্তে নম্বরটি দেখছি ।
কেজিগ্রিটন

@kgrittn এটি ইউনিক্স বৈকল্পিকের উপর নির্ভর করে। GNU ls পুরো ব্যবহারকারীর নামটি দেখায়। ব্যজিবক্স এলএস এটিকে 8 টি অক্ষরে ছেঁটে ফেলেছে (কমপক্ষে আমার এখানে নির্মিত বিল্ডের উপরে)।
গিলস

66

চেষ্টা

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

যদি এটি কিছু না ফেরায় তার অর্থ কি এই নয় যে আইডিটি কোনও ব্যবহারকারীর সাথে অনুবাদ করতে আমার অ্যাক্সেস নেই?
cwd

1
সম্ভবত আপনি t set "$ uid" did না বা এই ইউআইডিটির অস্তিত্ব নেই। grep ":$uid:" /etc/passwdএটা খুঁজে পাও ? না getent passwdকোন আউটপুট উত্পাদন?
মিকেল

@ সিডব্লিউডি: আপনার ব্যবহারকারীর নামটিতে আইডি অনুবাদ করার জন্য সর্বদা অ্যাক্সেস থাকা উচিত। উদাহরণস্বরূপ, ls -lসর্বদা এটি করা হয়।
ক্যাম এএইচ

কেবল কৌতূহলী কারণ lsএকটি ভাগ করা হোস্টের একটি তালিকা দেখায় ব্যবহারকারী / গোষ্ঠীর নাম কলামগুলিতে এলএস সহ সংখ্যাগুলি দেখানো হয়েছিল। সম্ভবত এটি কোনও সুরক্ষার সতর্কতা বা জেলশেল জিনিস?
cwd

@cwd সম্ভবত শেয়ার্ড হোস্ট /etc/passwdঅন্য যে কোনও জায়গা থেকে মাউন্ট করা / ভাগ করা ব্যবহার করছে যা সেই সময় মাউন্ট করা হয়নি।
jw013

39

আপনি এই সামান্য স্বাদ উপভোগ করতে পারেন।

$ id -nu [number]

3.17.3-1-ARCH # 1 এসএমপি প্রিমিটি শুক্র নভেম্বর 14 22:56:01 সিইটি 2014 আই 686 জিএনইউ / লিনাক্স

আমি নিশ্চিত করতে পারি যে এটি আর্ক লিনাক্সে একটি সম্পর্কিত ব্যবহারকারীর নাম, যদি কোনও উপস্থিত থাকে, প্রত্যাবর্তন করে। আমি এটিও নিশ্চিত করতে পারি যে সাধারণ ব্যবহারকারী হিসাবে চালিত হওয়ার সময় এটি উবুন্টুতে কাজ করে না, যদিও আমি এটি সুপারভাইজার হিসাবে পরীক্ষা করে দেখিনি। এটি আলপাইন লিনাক্সেও কাজ করে না। হয়তো কোনও সুরক্ষা বৈশিষ্ট্য এটিকে কিছু সিস্টেমে কাজ করা থেকে বাধা দেয়।


id -u jimmij=> 1000id -nu 1000=> id: 1000: no such user
জিম্মিজ

2
id --version=id (GNU coreutils) 8.23
eMPee584

ফ্রিবিএসডি 10.3 এও কাজ করে।

দ্রষ্টব্য: এটি রেড হ্যাট </ CentOS> = 7 এ কাজ করে (রেড হ্যাট / সেন্টোস <= 6 এ নয়)
ফ্রাঙ্কলিন পিয়াত

এফওয়াইআই এটি ব্যস্তবক্স / আলপাইন লিনাক্স / আলপাইন ডকার চিত্রগুলিতে কাজ করে না
জেজেজে

0

আমি বুঝতে পারি এটি একটি পুরানো প্রশ্ন, তবে এখানে আরও একটি উত্তর দেওয়া হয়েছে

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

পাইপ grepকি? (এছাড়াও আপনি যদি লাইনের শুরুতে চারটি স্পেস যুক্ত করেন তবে এটি এটি নির্দিষ্ট প্রস্থের পাঠ্য হিসাবে রেন্ডার করবে))
ওয়াইল্ডকার্ড

আমি উত্তরটি পছন্দ করি getent passwd। তবে / ইত্যাদি / পাসডব্লুডকে পার্সিং করা হলে কেবল বিশৃঙ্খলা ব্যবহার করা ভাল হবে 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
এনআইএস ব্যবহার করা হয় বা অন্য বিতরণযোগ্য প্রমাণীকরণ প্রোটোকলটি ব্যবহার করে এটি কার্যকর হয় না।
jlliagre

@ চোরোবা: এলডিএপি বা এনআইএস-এর যদি তাঁর নির্দিষ্ট প্রয়োজনীয়তা থাকে তবে সম্ভবত তিনি এটি উল্লেখ করতেন। আমার সমাধানটি সাধারণত লিনাক্স সেটআপগুলিতে কাজ করে।
লেবেশাদে

2
ডাউনভোট বিচেজ কারণ এটি নির্ভরযোগ্য নয় (এটি ব্যবহারকারী বা গোষ্ঠীর সাথে মেলে)।
ফ্রাঙ্কলিন পিয়াত

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

4
হ্যালো নাইম যদিও এটি একটি সঠিক উত্তর হতে পারে এটি প্রশ্নকারীকে (এবং সম্ভবত আপনার সমাধানের ভবিষ্যতের পাঠকগণ) সহায়তা করবে যদি আপনি নিজের উত্তরটি সম্পাদন করতে পারতেন তবে এটি কীভাবে কাজ করে তা সংক্ষেপে ব্যাখ্যা করতে।
রোয়াইমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.