系统数据文件和信息 (第六章)
1、口令文件
目录:/etc/passwd,如下:
用户名:密码:UID:GID:注释字段:初始工作目录:初始shell
shell为空,则采用默认shell,常为/bin/sh
用户squid的shell为/dev/null,表示不让任务人以squid的名义登录系统;也可设置shell为/bin/false或者/bin/true
nobody表示人人都也登录系统,但其UID和GID没任务特权,只能读写人人都也读写的文件
管理员可通过vipw来编辑口令文件(串行化修改,保证与其它文件一致)
根据用户名或者UID查找用户其它信息
查找整个口令文件信息
如下:
#include #include #include struct passwd * getpwnam(const char *name) { struct passwd *ptr; setpwent(); // 确保定位到文件开始处 while ((ptr = getpwent()) != NULL) // 得到下一个 if (strcmp(name, ptr->pw_name) == 0) break; /* found a match */ endpwent(); // 结束 return(ptr); /* ptr is NULL if no match found */ } |
2、阴影文件
存放用户加密后的密码,/etc/shadow
存取阴影文件相关函数:
3、组文件
目录:/etc/group
相关函数:
根据名称或者GID查询:
查询全部:
4、附属组文件
一个用户可属于多个组,可多至16个,相关函数:
getgroups:得到进程所属用户的附属组,最多得到gidsetsize个,组ID存放在grouplist中,返回组ID数量
5、其它数据文件
6、登录账户记录
utmp (/var/run/utmp):当前登录到系统的用户
wtmp(/var/log/wtmp):记录各登录、注销事件
7、系统标识
返回主机和操作系统相关的信息,如下:
可用命令uname打印相关信息。
得到主机名,如下:
其中namelen的最大值为HOST_NAME_MAX,对应hostname命令。
8、时间和日期
采用UTC时间(1970-1-1 00:00:00),返回当前时间和日期:
如果calptr非空,则时间值也保存在calptr中。
返回不同系统时间,如下:
时间类型ID如下:
当clock_id为CLOCK_REALTIME时,同time,但其精度更高。
要指定精度,如下:
如果要求精度为1毫秒,则tsp中tv_sec = 0,
tv_nsec = 1000000。
要设置特定时钟,如下:
需要权限,有的时针不能设置。
也可用gettimeofday,但该函数已弃用,其中tzp一般为NULL
其中虚线与时区有关。
将日历时间转换为分解时间,如下:
localtime返回本地时间(与本地时区和夏令时相关)
tm_sec可以表示闰秒;tm_mday从1开始;如果为夏令时,则tm_isdst大于0,不为夏令时,则tm_isdst等于0,此信息不可用,则tm_isdst小于0
从分解时间到日历时间,如下:
分解时间格式化,如下:
其中strftime_l可以指定时区。tmptr为要格式化的分解时间,format同printf,支持的格式如下:
从字符串中得到分解时间,如下: