Nsswitch

直接讀取文件 VS getent

  • November 28, 2018

在各種 shell 腳本中,我經常看到兩種從名稱服務切換庫支持的數據庫中獲取資訊的方法,例如/etc/group,/etc/hosts/etc/services. 一個是getent實用程序,另一個是grep或其他一些文本處理工具。例如:

root@fw-test:~# getent passwd root
root:x:0:0:root:/root:/bin/bash
root@fw-test:~# 


root@fw-test:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
root@fw-test:~# 

..或者:

root@fw-test:~# getent hosts www.blah.com
189.113.174.199 www.blah.com
root@fw-test:~# 

root@fw-test:~# host www.blah.com
www.blah.com has address 189.113.174.199
root@fw-test:~# 

上面這兩種方法中的哪一種應該在腳本中使用?我的意思是其中一種解決方案比另一種更優雅或更標準嗎?

很多這將歸結為源於您所處的特定環境的因素,但我更喜歡這種getent方法,因為它查找外部使用者以及本地使用者。具體來說,它會從 LDAP 伺服器查找我的環境中的 LDAP 使用者,而一個cat /etc/passwd或類似的伺服器甚至不知道我的 LDAP 伺服器是否存在,更不用說上面有有效使用者了。如果您的所有使用者始終都是本地使用者,getent那麼除了“如果我們在 10 年內添加 LDAP 伺服器就無需重寫”之外,您並不會真正為您買賬。

引用自:https://unix.stackexchange.com/questions/196829