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 用于明确关闭文件 有了上面的铺垫,下面分类来说明一下。
阅读全文