加入收藏 | 设为首页 | 会员中心 | 我要投稿 52站长网 (https://www.52zhanzhang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

【UNIX/Linux】系统数据文件和信息

发布时间:2022-10-14 07:30:52 所属栏目:Unix 来源:未知
导读: 本文是笔者拜读《UNIX环境高级编程》第6章(系统数据文件和信息)的学习笔记。
目录
口令文件
UNIX系统口令是/etc/passwd,文件包含了各种字段,如用户名、加密口令、数值用户ID、数值组ID

本文是笔者拜读《UNIX环境高级编程》第6章(系统数据文件和信息)的学习笔记。

目录

口令文件

UNIX系统口令是/etc/passwd,文件包含了各种字段,如用户名、加密口令、数值用户ID、数值组ID、注释字段、初始工作目录、初始shell(用户程序)等。这些字段包含在

中定义的passwd结构中。

在这里插入图片描述

为了安全性考虑,加密口令字段只包含了一个占位符,真正的加密口令存放在另一个文件中。

空白的注释字段不产生任何影响。

POSIX定义了两个获取口令文件项的函数。在给出用户登录名或数值用户ID后,这两个函数就能查看相关项。

在这里插入图片描述

这两个函数都返回一个指向passwd结构的指针,该结构已由这两个函数在执行时填入信息,passwd结构通常是函数内部的静态变量,只要调用任一相关函数,其内容就会被重写。

getpwuid函数由ls程序使用,它将i节点中的数字用户ID映射为用户登录名。在键入登录名时,getpwnam函数由login程序使用。

在这里插入图片描述

getpwent函数可以查看整个口令文件。该函数返回口令文件中下一个记录项的指针,如果出错或达到文件末尾,返回NULL。

在使用getpwent查看完口令文件前,一定要调用setpwent定位到文件的开始处。在使用getpwent查看完口令文件后,一定要调用endpwent关闭这些文件。

阴影口令

某些系统将加密口令存放在称为阴影口令的文件中,该文件至少要包含用户名和加密口令。阴影口令文件不应是一般用户可以读取的。与访问口令文件类似,也有一组函数用于访问阴影口令文件。

在这里插入图片描述

组文件

UNIX组文件包含组名、加密口令、数值组ID、指针数组等,这些字段包含在中所定义的group结构中。

其中的指针数组中,每个元素指向一个属于该组的用户名,该数组以NULL指针结尾。

下面两个函数用来查看组名或数值组ID。

在这里插入图片描述

和对口令文件进行操作的函数一样,这两个函数通常也返回指向一个静态变量的指针,每次调用时都重写该静态变量。

如果要搜索整个组文件,需要用到以下几个函数。它们类似于针对口令文件的函数。

在这里插入图片描述

附属组ID

一个用户不仅属于一个组,也属于多至16个另外的组。文件的访问权限检查被修改为:不仅将进程的有效组ID与文件的组ID相比较,也将所有附属组ID与文件组ID进行比较。

为了获取和设置附属组ID,提供了下面的函数。

在这里插入图片描述

实现区别

FreeBSD 8.0、Linux 3.2.0、Mac OS X 10.6.8和Solaris 10以不同的方式存储用户和组信息。

信息FreeBSD 8.0Linux 3.2.0Mac OS X 10.6.8Solaris 10

账户信息

/etc/passwd

/etc/passwd

目录服务

/etc/passwd

加密口令

/etc/master.passwd

/etc/shadow

目录服务

/etc/shadow

是否是散列口令文件

组信息

/etc/group

/etc/group

目录服务

/etc/group

其它数据文件

除了口令文件和组文件,UNIX系统还使用很多其它文件。例如,记录各网络服务器所提供服务的数据文件,记录协议信息的数据文件,记录网络信息的数据文件。这些数据文件的接口都与口令文件和组文件相似。

(1) get函数。读下一个记录,如果需要,还会打开文件。大多数get函数返回指向一个静态存储类结构的指针。

(2) set函数。打开相应数据文件(如果未打开),将当前位置移动到文件开头。

(3) end函数。关闭数据文件。

还可以指定用户名或用户数值ID寻找相应的记录。

登录账号记录

大多数UNIX系统都提供了下列两个数据文件:

(1) utmp文件记录当前登录到系统的各个用户。who程序读取该文件并打印。

(2) wtmp文件跟踪各个登录和注销事件。last程序读取该文件并打印。

每次写入这两个文件中的是包含下列结构的一个二进制记录:

在这里插入图片描述

系统标识

uname函数,返回与主机和操作系统有关的信息。

utsname结构信息:

在这里插入图片描述

gethostname函数返回主机名,改名字通常就是TCP/IP网络上主机的名字。

时间和日期例程

由UNIX内核提供的基本时间服务是计算自公元1970年1月1日00:00:00以来经过的秒数,这种秒数是以数据类型time_t表示的。

time函数返回当前时间和日期。

时间值作为参数返回,如果参数非空,时间值也可通过参数返回。

clock_gettime函数可用于获取指定时钟的时间。timespec结构把时间表示为秒和纳秒。

当clk_id设置为CLOCK_REALTIME时unix系统文件,clock_gettime与time类似,而且时间的精度更高。

clock_getres函数把参数res指向的timespec结构初始化为与clk_id参数对应的时钟精度。

要对特定的时钟设置时间,可以调用clock_settime函数。

gettimeofday提供了可达微妙的精度。

函数localtime和gmtime将日历时间转换成分解的时间,并将这些存放在tm结构中。

在这里插入图片描述

mktime以本地时间的年、月、日等作为参数,将其变换成time_t值。

各个时间函数之间的关系。

在这里插入图片描述

(编辑:52站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!