Linux getent命令教程:如何从各种数据库中获取条目(附实例详解和注意事项) 您所在的位置:网站首页 linux安装数据库的注意事项是 Linux getent命令教程:如何从各种数据库中获取条目(附实例详解和注意事项)

Linux getent命令教程:如何从各种数据库中获取条目(附实例详解和注意事项)

2024-07-14 17:38| 来源: 网络整理| 查看: 265

Linux getent命令介绍

getent是一个英文单词的缩写,全称是get entries,意思是获取条目。这个命令可以从Name Service Switch库中获取各种数据库的条目,这些数据库都是一些重要的文本文件,存储了用户、组、主机、服务等信息。getent命令可以查询本地或网络上的数据库,比如LDAP,这取决于/etc/nsswitch.conf文件中的配置。getent命令可以帮助我们查看和验证系统中的用户、组和其他信息,也可以用来测试Name Service Switch的配置是否正确。

Linux getent命令适用的Linux版本

getent命令是GNU C库提供的一个标准命令,所以它可以在大多数Linux发行版中使用,比如Ubuntu, Debian, Fedora, CentOS等。如果你的系统中没有安装getent命令,你可以使用以下命令来安装:

[[email protected] ~]$ sudo apt-get install libc-bin # Ubuntu, Debian [[email protected] ~]$ sudo yum install glibc-common # CentOS 7 [[email protected] ~]$ sudo dnf install glibc-common # CentOS 8, Fedora Linux getent命令的基本语法

getent命令的基本语法格式如下:

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

其中,数据库是要查询的数据库的名称,可以是以下之一:

ahosts: 查询主机地址和名称的数据库,使用getaddrinfo(3)函数。 ahostsv4: 同上,但只查询IPv4地址。 ahostsv6: 同上,但只查询IPv6地址。 aliases: 查询邮件别名的数据库,使用getaliasbyname(3)函数。 ethers: 查询以太网地址和主机名的数据库,使用ether_aton(3)和ether_hostton(3)函数。 group: 查询用户组的数据库,使用getgrgid(3)和getgrnam(3)函数。 gshadow: 查询用户组密码的数据库,使用getsgnam(3)函数。 hosts: 查询主机地址和名称的数据库,使用gethostbyaddr(3)和gethostbyname2(3)函数。 initgroups: 查询用户所属的所有用户组,使用getgrouplist(3)函数。 netgroup: 查询网络组的数据库,使用getnetgrent(3)和innetgr(3)函数。 networks: 查询网络名称和编号的数据库,使用getnetbyaddr(3)和getnetbyname(3)函数。 passwd: 查询用户账户的数据库,使用getpwuid(3)和getpwnam(3)函数。 protocols: 查询网络协议的数据库,使用getprotobyname(3)和getprotobynumber(3)函数。 rpc: 查询远程过程调用的数据库,使用getrpcbyname(3)和getrpcbynumber(3)函数。 services: 查询网络服务的数据库,使用getservbyname(3)和getservbyport(3)函数。 shadow: 查询用户密码的数据库,使用getspnam(3)函数。

键是要查询的具体的值,比如用户的名称或ID,主机的地址或名称,服务的端口或名称等。如果不指定键,那么会显示数据库中的所有条目,除非数据库不支持枚举。

选项是一些可选的参数,用来修改命令的行为,可以是以下之一:

-s service, --service service: 使用指定的服务来覆盖所有的数据库的查询,服务可以是files, db, dns, nis, nisplus, ldap等。 -s database:service, --service database:service: 使用指定的服务来覆盖指定的数据库的查询,可以多次使用这个选项,但每个数据库只会使用最后一个服务。 -i, --no-idn: 禁用IDN编码,在查询ahosts/getaddrinfo(3)时使用。 -?, --help: 显示命令的用法和帮助信息,并退出。 --usage: 显示命令的简短用法,并退出。 -V, --version: 显示命令的版本号,许可证和免责声明,并退出。 Linux getent命令的常用选项或参数说明

getent命令的常用选项或参数如下表所示:

选项参数说明-sservice使用指定的服务来覆盖所有的数据库的查询-sdatabase:service使用指定的服务来覆盖指定的数据库的查询-i无禁用IDN编码,在查询ahosts/getaddrinfo(3)时使用-?无显示命令的用法和帮助信息,并退出--usage无显示命令的简短用法,并退出-V无显示命令的版本号,许可证和免责声明,并退出 Linux getent命令的实例

下面是一些使用getent命令的实例,可以帮助你更好地理解和使用这个命令。

实例1:查询用户账户的数据库

如果不指定键,那么会显示系统中所有的用户账户的信息,包括用户名,密码,用户ID,组ID,注释,主目录和登录shell。这些信息和/etc/passwd文件中的内容一致,但可能还包括网络上的用户账户。

[[email protected] ~]$ getent passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync ...

如果指定一个或多个键,那么只会显示匹配的用户账户的信息,键可以是用户名或用户ID。

[[email protected] ~]$ getent passwd root 1000 root:x:0:0:root:/root:/bin/bash linux:x:1000:1000:linux,,,:/home/linux:/bin/bash 实例2:查询用户组的数据库

如果不指定键,那么会显示系统中所有的用户组的信息,包括组名,密码,组ID和组成员。这些信息和/etc/group文件中的内容一致,但可能还包括网络上的用户组。

[[email protected] ~]$ getent group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,linux ...

如果指定一个或多个键,那么只会显示匹配的用户组的信息,键可以是组名或组ID。

[[email protected] ~]$ getent group sudo 1000 sudo:x:27:linux linux:x:1000: 实例3:查询主机地址和名称的数据库

如果不指定键,那么会显示系统中所有的主机地址和名称的信息,包括IPv4和IPv6地址,以及主机名和别名。这些信息和/etc/hosts文件中的内容一致,但可能还包括DNS或其他网络服务提供的信息。

[[email protected] ~]$ getent hosts 127.0.0.1 localhost 127.0.1.1 linux ::1 localhost ip6-localhost ip6-loopback ... 实例4:查询主机地址和名称的数据库(指定服务)

如果我们想要指定一个服务来查询主机地址和名称的数据库,比如只使用DNS,那么我们可以使用-s选项来覆盖默认的服务。这样,我们可以比较不同的服务返回的结果是否一致,或者测试某个服务是否可用。

[[email protected] ~]$ getent hosts www.bing.com 13.107.21.200 www.bing.com 13.107.213.200 www.bing.com [[email protected] ~]$ getent -s dns hosts www.bing.com 13.107.21.200 www.bing.com 13.107.213.200 www.bing.com [[email protected] ~]$ getent -s files hosts www.bing.com # 没有输出,表示/etc/hosts文件中没有www.bing.com的条目 实例5:查询网络服务的数据库

如果不指定键,那么会显示系统中所有的网络服务的信息,包括服务名,别名,端口号和协议。这些信息和/etc/services文件中的内容一致,但可能还包括其他网络服务提供的信息。

[[email protected] ~]$ getent services tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp ...

如果指定一个或多个键,那么只会显示匹配的网络服务的信息,键可以是服务名,别名,端口号或端口号/协议的组合。

[[email protected] ~]$ getent services ssh 80 443/tcp ssh 22/tcp http 80/tcp www www-http https 443/tcp # http protocol over TLS/SSL 实例6:查询网络协议的数据库

如果不指定键,那么会显示系统中所有的网络协议的信息,包括协议名,别名和编号。这些信息和/etc/protocols文件中的内容一致,但可能还包括其他网络服务提供的信息。

[[email protected] ~]$ getent protocols ip 0 IP # internet protocol, pseudo protocol number hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883] icmp 1 ICMP # internet control message protocol igmp 2 IGMP # internet group management protocol ggp 3 GGP # gateway-gateway protocol ...

如果指定一个或多个键,那么只会显示匹配的网络协议的信息,键可以是协议名,别名或编号。

[[email protected] ~]$ getent protocols tcp udp 50 tcp 6 TCP # transmission control protocol udp 17 UDP # user datagram protocol esp 50 IPSEC-ESP # Encap Security Payload [RFC2406] 实例7:查询网络名称和编号的数据库

如果不指定键,那么会显示系统中所有的网络名称和编号的信息,包括网络名,别名和编号。这些信息和/etc/networks文件中的内容一致,但可能还包括其他网络服务提供的信息。

[[email protected] ~]$ getent networks default 0.0.0.0 loopback 127.0.0.0 link-local 169.254.0.0

如果指定一个或多个键,那么只会显示匹配的网络名称和编号的信息,键可以是网络名,别名或编号。

[[email protected] ~]$ getent networks loopback 0.0.0.0 loopback 127.0.0.0 default 0.0.0.0 实例8:查询邮件别名的数据库

如果不指定键,那么会显示系统中所有的邮件别名的信息,包括别名和对应的邮件地址。这些信息和/etc/aliases文件中的内容一致,但可能还包括其他网络服务提供的信息。

[[email protected] ~]$ getent aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root ...

如果指定一个或多个键,那么只会显示匹配的邮件别名的信息,键可以是别名或邮件地址。

[[email protected] ~]$ getent aliases root nobody postmaster: root nobody: root 实例9:查询以太网地址和主机名的数据库

如果不指定键,那么会显示系统中所有的以太网地址和主机名的信息,包括以太网地址和对应的主机名。这些信息和/etc/ethers文件中的内容一致,但可能还包括其他网络服务提供的信息。

[[email protected] ~]$ getent ethers 08:00:27:9b:9c:9c linux 08:00:27:9b:9c:9d centos 08:00:27:9b:9c:9e ubuntu

如果指定一个或多个键,那么只会显示匹配的以太网地址和主机名的信息,键可以是以太网地址或主机名。

[[email protected] ~]$ getent ethers linux 08:00:27:9b:9c:9e 08:00:27:9b:9c:9c linux 08:00:27:9b:9c:9e ubuntu 实例10:查询远程过程调用的数据库

如果不指定键,那么会显示系统中所有的远程过程调用的信息,包括调用名,别名和编号。这些信息和/etc/rpc文件中的内容一致,但可能还包括其他网络服务提供的信息。

[[email protected] ~]$ getent rpc portmap 100000 portmapper sunrpc rstatd 100001 rstat rstat_svc rusersd 100002 rusers nfs 100003 nfsprog ypprog 100004 ypserv ...

如果指定一个或多个键,那么只会显示匹配的远程过程调用的信息,键可以是调用名,别名或编号。

[[email protected] ~]$ getent rpc nfs 100007 nfs 100003 nfsprog ypbind 100007 ypbind Linux getent命令的注意事项

使用getent命令时,有以下几点需要注意:

getent命令的查询结果取决于/etc/nsswitch.conf文件中的配置,这个文件定义了各种数据库的查询顺序和服务。如果这个文件不存在或损坏,那么getent命令可能无法正常工作。 getent命令只能查询支持枚举的数据库,比如passwd, group, hosts, services等。如果查询不支持枚举的数据库,比如netgroup, initgroups等,那么必须指定一个或多个键,否则会返回错误。 getent命令只能查询文本文件或网络服务提供的数据库,不能查询二进制文件或数据库系统提供的数据库,比如shadow, gshadow等。如果查询这些数据库,那么会返回错误。 如果查询的数据库或键不存在,或者查询的服务不可用,那么getent命令会返回错误,并显示bash: getent: command not found的提示信息。这时,你可以检查你的输入是否正确,或者尝试安装或配置相应的服务。 Linux getent相关命令

以下是一些和getent命令相关的命令,你可以点击链接查看更多的介绍和实例。

id命令:显示用户和组的ID groups命令:显示用户所属的组 who命令:显示当前登录的用户 ping命令:测试网络连通性 nslookup命令:查询DNS记录


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有