2014-07-22 25 views
0

例如,在Ubuntu盒子上鍵入compgen -u將返回用戶列表。這包括比在/etc/passwd中列出的更多的用戶。所以問題是,當使用bash完成列出用戶時,列表從哪裏來?從bash完成源返回的用戶列表在哪裏?

+0

它似乎來自我的機器上的'/ etc/passwd'。 –

+0

@EtanReisner:推測你的機器沒有使用NIS或LDAP;看到我的答案。 –

+0

@凱瑟湯普森的確。我幾乎指出存在額外的資源(如NIS和LDAP),以及如何通過'nsswitch.conf'/etc找到它們。但決定通用的「去找出」答案是更好的。 –

回答

1

您可以運行strace -o compgen.out bash -c 'compgen -u',然後查看compgen.out文件以試圖找出它正在使用的內容。

在我的機器上,該文件以open("/etc/passwd", O_RDONLY)結尾,然後寫入輸出。

+0

這是我最終使用的方法,能夠識別使用的配置文件以及查詢的用於檢索用戶列表的unix套接字。 – user3866591

2

/etc/passwd是類UNIX系統上的用戶帳戶信息的默認來源,但通常由其他來源補充,特別是作爲某些大型組織機構中需要保持信息一致性的機器。

NIS(以前稱爲「YP」)是一種常見的系統。 LDAP是另一個。我確定還有其他人。

getent passwd命令應該會顯示所有相關的帳戶信息。在我的機器上(不使用NIS或LDAP),它相當於cat /etc/passwd;在你的,它可能會顯示額外的信息。

各種getpw*()功能(getpwuid()getpwnam()getpwent())檢索用戶帳戶信息,相當於什麼在/etc/passwd加任何補充您的系統使用。據推測,getent命令和bash都使用此機制來獲取相關信息。

相關問題