首页 > 代码库 > 读书笔记-APUE第三版-(6)系统数据文件和信息

读书笔记-APUE第三版-(6)系统数据文件和信息

常见系统数据文件

下表列出了常见的系统数据文件及其查找函数。


以/etc/passwd文件为例,读取数据的程序基本框架如下:

void get_pw_entry()
{
    struct passwd *ptr; 
    setpwent();
    while ((ptr = getpwent()) != 0) {
        ……
    }
    endpwent();
    return ptr;
}
  1. 每个数据文件都提供了一个get方法返回文件下一个记录项。
  2. set方法充值当前位置到文件开始处。
  3. end方法关闭数据文件。
  4. 表格中的getpwnamgetpwuid为查找方法,根据名称或ID查找相应记录项。

passwd文件详解

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
如上所示:
  1. 每一列含义依次为:username:password:User ID:Group ID:comment:home directory:shell
  2. 第二列密码被加密,存储在/etc/shadow中。
  3. 最后一列登陆Shell代表登陆用户登陆后执行的命令,一般用户都是启动shell进程,一些特殊账号使用nologin可以阻止该账号正常登陆。
  4. 第四列是用户登陆后所属组ID。用户可以属于多个组,用户登陆后,login程序会调用initgroups函数,读取/etc/group文件,替用户初始化附加组ID。
  5. 使用finger命令打印用户信息,管理员使用vipw命令编辑passwd文件(比直接编辑文件更安全)。

时间和日期函数


如图所示:
  1. time_t以秒为单位,为UTC时间(注意time函数不要和times函数混淆)。
  2. timeval结构存储了毫秒级别的日历时间。
  3. 如果系统支持,timespec结构中tv_nsec字段精度为纳秒。
  4. tm结构中包含秒、分、小时、日期等字段,可以是格林尼治时间(gmtime函数),也可以是本地时间(localtime函数)。
  5. strXXXX系列方法用于格式化时间字符串

其他重要数据文件和函数

  1. 登录账户:utmp文件存储当前登录所有用户(who命令访问),wtmp记录用户登录和退出(last命令访问)
  2. 系统标识:utsname结构(uname命令访问)中包含内核名、主机名(gethostname命令访问)、发行版本和体系结构等