APUE读书笔记(8) 系统数据文件和信息

第六章 系统数据文件和信息

一:主要内容:
  本章主要讲述UNIX系统中与系统正常运行有强烈关系的系统数据文件,比如系统口令文件,组文件等。
二:口令文件
  口令文件包含如下字段:
APUE读书笔记(8) 系统数据文件和信息
  口令文件在路径/etc/passwd中,并且是一哥ASCII文件,每一行包含上述字段,并且用冒号分隔。有两个函数可以获取口令文件:
APUE读书笔记(8) 系统数据文件和信息
  其中getpwuid函数由ls程序使用,gwtpwnam函数由login程序使用
  如果只是查看登录名或者是用户的ID,只需要下面三个函数就可以:
APUE读书笔记(8) 系统数据文件和信息
  在使用getpwent函数后需要调用endpwent函数去关闭文件,因为getpwent时返回口令文件的下一个记录项。setpwent是一种预防措施,在调用getpwent函数之前调用这个函数会定位到文件的开始处,也就是说如果能保证文件在之前没有被打开,可以不用这个函数。
三:阴影口令
  加密口令是经过加密算法处理过的用户口令副本,将明文口令变为加密口令,并且加密口令不可逆。加密口令的字段如下:
APUE读书笔记(8) 系统数据文件和信息
  阴影口令文件放在/etc/shadow中,并且除了少数几个程序如login、passwd可以访问之外,普通用户不可以访问。有了阴影口令之后,用户口令文件可由各用户*读取,阴影口令可以有以下几个函数访问
APUE读书笔记(8) 系统数据文件和信息
四:组文件
  组文件包含了group结构,其字段如下:
APUE读书笔记(8) 系统数据文件和信息
  gr_mem是一个指针数组,其中每个指针都指向了一个属于该租的用户名,该数组以null结尾。下面两个函数可以查看组名或者数值组ID。
APUE读书笔记(8) 系统数据文件和信息
  如果需要搜索整个组文件,可以使用下面的函数
APUE读书笔记(8) 系统数据文件和信息
  可以看到,这三个函数和口令文件的那一组函数很相似,功能也差不多。
五:附属组ID
  附属组的概念可以理解为用户所属的额外的组,系统一般也会由16个以上的附属组,这样做的好处是:不必再经常的更改用户的所属组,因为一个用户可能会参与到多个项目中去,也就需要属于多个组。获取和设置附属组ID可以使用下面三个函数
APUE读书笔记(8) 系统数据文件和信息
  getgroups可以获得附属组ID数量和其中的组ID,如果gidsetsize为0,则只返回附属组ID数,这个作用可以在不确定grouplist的长度的时候来使用,以便于分配长度。
  setgroups可以让超级用户为调用进程设置附属组ID表。
  initgroups函数可以调用setgroups,只有少数几个程序调用initgroups,比如login程序在用户登陆的时候调用该函数。
六:其他数据文件
  在日常操作中,还会使用到其他的文件,对于大多数的文件,一般都会有如下三个函数:get,set,end。他们的作用也大多类似。下面列出所有由get、set和end函数的数据文件
APUE读书笔记(8) 系统数据文件和信息
七:时间和日期例程
  UNIX中提供的时间是以1970年1月1日00:00:00经过的秒数,之前说过time_t记录内容。time函数可以返回当前的时间和日期
APUE读书笔记(8) 系统数据文件和信息
  其中时间分为不同的种类,如下所示
APUE读书笔记(8) 系统数据文件和信息
  要想获得指定的时钟的时间,可以调用下面的函数来获取
APUE读书笔记(8) 系统数据文件和信息