pwd和grp模組都非常簡單粗暴,各自分別下面都只有三個函式,來根據/etc/passwd、/etc/group檔案獲取相關資訊
getpwuid(UID):根據UID獲取使用者資訊,返回一個list
print(pwd.getpwuid(0)) pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')
print(pwd.getpwuid(0).pw_name) root
print(pwd.getpwuid(0).pw_shell) /bin/bash
getpwnam(使用者名稱):根據使用者名稱獲取使用者資訊,返回list
print(pwd.getpwnam("root")) pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')
getpwall():獲取所有使用者的資訊,返回一個list
for i in pwd.getpwall(): print(i)
getgrgid(GID):根據GID獲取使用者組的資訊,返回一個list
print(grp.getgrgid("500")) grp.struct_group(gr_name='user00', gr_passwd='x', gr_gid=500, gr_mem=[])
getgrnam("組名"):根據使用者組名獲取使用者組的資訊,返回一個list
print(grp.getgrnam("user00")) grp.struct_group(gr_name='user00', gr_passwd='x', gr_gid=500, gr_mem=[])
getgrall( ):獲取所有使用者組的資訊,返回一個list
for i in grp.getgrall(): print(i)
自定義uid<—>uname,gid<—>gname轉換的函式
在某些場景中我們可能會需要用到這樣的轉換
def uname_uid(str): if str.isdigit(): return pwd.getpwuid(int(str)).pw_name else: return pwd.getpwnam(str).pw_uid print(uname_uid("0")) #root print(uname_uid("user00")) #500
import grp def gname_gid(str): if str.isdigit(): return grp.getgrgid(int(str)).gr_name else: return grp.getgrnam(str).gr_gid print(gname_gid("0")) #root print(gname_gid("user00")) #500