Unix系统数据文件那些事儿,都有哪些奥秘?
摘要:如何免密 ssh 登录空密码账户?getpwent 为何会返回比 etcpasswd 文件更多的内容?同样是修改附加组 ID,usermod -G 和 gpasswd -a-d 有何区别?etcnetworks 有什么用处?get
前言
Unix like 系统和 windows 的最大区别就是有一套标准的系统信息数据文件,一般存放在 /etc/ 目录下,并且提供了一组近似的接口访问和查询信息,这些基础设施让系统管理看起来井井有条,下面就来盘点一下。
总览
下面这个表列出了 unix 系统常用的几种数据文件:
信息类别
文件路径
结构
查询
遍历
口令文件
/etc/passwd
passwd
getpwnam / getpwuid
setpwent / getpwent / endpwent
阴影口令
/etc/shadow
spwd
getspnam
setspent / getspent / endspent
组文件
/etc/group
group
getgrname / getgrgid
setgrent / getgrent / endgrent
主机
/etc/hosts
hostent
gethostbyname / gethostbyaddr
sethostnet / gethostent / endhostent
网络
/etc/networks
netent
getnetbyname / getnetbyaddr
setnetent / getnetent / endnetent
协议
/etc/protocols
protoent
getprotobyname / getprotobynumber
setprotoent / getprotoent / endprotoent
服务
/etc/services
servent
getservbyname / getservbyport
setservent / getservent / endservent
用户登录
/var/run/utmp /var/log/wtmp
utmp
getutid / getutline
setutent / getutent / endutent
从表中可以看到不论是查询还是遍历,接口具有某种一致性:
查询接口遵循:getxxname / getxxbyname / getxxbyxx,name、xid 与 by 后面的关键字为 key,查询成功返回结构体指针,失败返回 NULL;
遍历接口遵循:setxxent / getxxent / endxxent,其中:
set 用于 rewind 到文件开始,避免之前的调用移动遍历指针
get 第一次调用时打开文件,之后从上次遍历的位置向下遍历,直到结尾返回 NULL
end 用于明确关闭文件
有了上面的铺垫,下面分类来说明一下。
