【python 内置模块】pwd

2024-01-20 00:00:00

目录:

pwd 模块在 Windows 系统上不可用,专门用于访问 Unix 及类 Unix 系统(如 Linux 和 macOS)中用户账户和密码数据库。提供了一种便捷的编程接口来读取 /etc/passwd 文件中的信息,从而获取用户的关键身份信息。

pwd.getpwuid(uid)

通过用户的数字 ID (UID) 来查询用户信息。如果找不到对应的 UID,会抛出 KeyError 异常。

os 模块的 getuid() 方法可以获取当前用户的 UID。

import os
import pwd

# 获取当前用户的UID
current_uid = os.getuid()
# 通过UID查询用户信息
user_info = pwd.getpwuid(current_uid)

print(f"用户名: {user_info.pw_name}")
print(f"用户ID: {user_info.pw_uid}")
print(f"组ID: {user_info.pw_gid}")
print(f"全名: {user_info.pw_gecos}")
print(f"主目录: {user_info.pw_dir}")
print(f"登录Shell: {user_info.pw_shell}")

pwd.getpwnam(name)

通过用户的登录名来查询用户信息。同样,如果用户名不存在,会抛出 KeyError 异常。

import pwd

username = 'dkvirus'  # 可以替换为任何存在的用户名
try:
    user_info = pwd.getpwnam(username)
    print(f"用户名: {user_info.pw_name}")
    print(f"用户ID: {user_info.pw_uid}")
    # ... 输出其他属性
except KeyError:
    print(f"用户 '{username}' 不存在。")

pwd.getpwall()

返回一个包含系统中所有用户信息的列表,列表中的每一项都是一个 struct_passwd 对象。返回的顺序是不固定的。

struct_passwd 对象包含以下属性,分别对应 /etc/passwd 文件中的字段。

  • pw_name: 用户的登录名;
  • pw_passwd: 加密的密码(在现代系统中通常为 ‘x’ 或 ‘*’,实际密码存储在 /etc/shadow 中);
  • pw_uid: 用户的数字 ID;
  • pw_gid: 用户所属的组 ID;
  • pw_gecos:用户的姓名、电话号码等信息,通常为空字符串;
  • pw_dir: 用户的主目录;
  • pw_shell: 用户的默认shell。
import pwd

all_users = pwd.getpwall()
for user in all_users:
    print(f"用户名: {user.pw_name:10} UID: {user.pw_uid:4} 主目录: {user.pw_dir}")

UID 和用户名转换函数

输入 UID,返回用户名;或者输入用户名,返回 UID。

import pwd

def uid_to_uname(identifier):
    """将用户ID或用户名转换为另一项。"""
    if isinstance(identifier, int) or identifier.isdigit():
        # 如果输入是数字,视为UID
        return pwd.getpwuid(int(identifier)).pw_name
    else:
        # 否则视为用户名
        return pwd.getpwnam(identifier).pw_uid

# 测试
print(uid_to_uname(0))      # 输出: root
print(uid_to_uname("root")) # 输出: 0

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: