Linux 查看系统数据库信息 – getent 命令

简介

getent命令的功能是通过按照 /etc/nsswitch.conf 文件中定义的记录信息,按照从左到右的搜索顺序查看数据库中的记录信息, 即便这些数据库不是本地的,类似于LDAP或者NIS也可以使用getent命令进行查看

语法

getent [选项...] 数据库 [键 ...]

选项

-i, --no-idn               disable IDN encoding
-s, --service=CONFIG       要使用的服务配置
-?, --help                 给出该系统求助列表
    --usage                给出简要的用法信息
-V, --version              打印程序版本号

支持的数据库

- ahosts
- ahostsv4
- ahostsv6
- aliases                      邮件别名,sendmail()函数使用该文件
- ethers:                     Mac地址
- group:                      用户所在组(/etc/group),getgrent()函数使用该文件
- gshadow
- hosts                        主机名和主机号(/etc/hosts),gethostbyname()以及类似的函数使用该文件
- initgroups
- netgroup
- networks                 网络名及网络号(/etc/networks),getnetent()函数使用该文件
- passwd                    用户口令(/etc/passwd),getpwent()函数使用该文件
- protocols                 网络协议(/etc/protocols),getprotoent()函数使用该文件
- rpc                          远程过程调用名及调用号(/etc/rpc),getrpcbyname()及类似函数使用该文件
- services                   网络服务(/etc/services),getservent()函数使用该文件
- shadow                   映射口令信息(/etc/shadow),getspnam()函数使用该文件

配置文件

getent 是 nsswitch服务的客户端,其配置文件为:/etc/nsswitch.conf;

配置文件格式

# networks:   nisplus [NOTFOUND=return] files
db: method[ [action] ] [ method[ [action] ] ]

db

支持的数据库, 和上面一致

method

下面列出了nsswich.conf文件控制搜索信息类型的方法,对于每一种信息类型,都可以指定下面的一种或多种方法:

- nisplus                 Use NIS+ (NIS version 3)
- nis                     Use NIS (NIS version 2), also called YP
- dns                     Use DNS (Domain Name Service)
- files                   Use the local files
- db                      Use the local database (.db) files
- compat                  Use NIS on compat mode
- hesiod                  Use Hesiod for user lookups
- sss                     Use sssd (System Security Services Daemon)
- [NOTFOUND=return]       Stop searching if not found so far

action

在每个方法后面都可以选择跟一个动作项,用来指定如果由于某种原因该方法成功抑或失败需要做些什么。动作项的格式如下: [[!]STATUS =action]
其中,开头和末尾的方括号属于格式的一部分,并不是用来指出括号中的内容是可选的。STATUS(按照约定使用大写字母,但本身并不区分大小写)是待测试的状态,
action 如果STATUS匹配前面的方法所返回的状态将要执行的动作。开头的感叹号(!)是可选的,其作用是将状态取反

STATUS的取值如下:
  • NOTFOUND:方法已经执行,但是并没有找到待搜索的值。 默认的动作是continue。
  • SUCCESS:方法已经执行,并且已经找到待搜索的值,没有返回错误。默认动作是return。
  • UNAVAIL:方法失败,原因是永久不可用。举例来说,所需的文件不可访问或者所需的服务器可能停机。默认的动作是continue。
  • TRYAGAIN:方法失败,原因是临时不可用。举例来说,某个文件被锁定,或者某台服务器超载。默认动作是continue。
action的取值如下:
  • return:返回到调用例程,带有返回值,或者不带返回值。
  • continue:继续执行下一个方法。任何返回值都会被下一个方法找到的值覆盖。
示例

举例来说,下面这行取自nsswitch.conf文件,它的作用是让系统首先使用DNS来搜索给定主机的IP地址。DNS方法后面的动作项是测试该方法所返回的状态是否为“非(!)UNAVAIL”。

hosts dns [!UNAVAIL=return] files

如果DNS方法没有返回UNAVAIL(!UNAVAIL),也就是说DNS返回SUCCESS、NOTFOUND或者TRYAGAIN,那么系统就会执行与该STATUS相关的动作(return)。其结果就是,只有在DNS服务器不可用的情况下才会使用后面的方法(files)。

如果DNS服务器并不是不可用(两次否定之后就是“可用”),那么搜索返回域名或者报告未找到域名。只有当服务器不可用的时候,搜索才会使用files方法(检查本地的/etc/hosts文件)。

getent 常用示例

# 1. 解析域名
getent hosts www.baidu.com

# 2. 解析用户密码
getent passwd test
上一篇
下一篇