在为服务的默认端口号提供服务时返回服务名称的脚本



我需要编写一个bash脚本,当您为其提供服务的默认端口号时,该脚本会返回服务名称。我正在使用/etc/services文件。我的代码是:

grep -E  $1 /etc/services | head -n 1 | awk '{print $1}'

但它不适用于 1、2、3 等端口,...20 和其他一些。如何改进它,或者我需要另一种解决方案来解决这个问题?

在这里,您可以提供input_port变量的任何port_number,它将在第二列的第一部分中匹配,如果匹配,则将打印第一列。

    awk -v input_port="$1" '{split($2,a,"/")}input_port==a[1]{print $1}' /etc/services
    smtp
getent services 22

输出:

ssh                   22/tcp

如果您只需要名称:

getent services 22 | awk '{print $1}'

输出:

ssh

查询系统上的信息时,请尽可能使用 getent,因为某些条目可能来自 /etc 中的文件以外的来源。例如,不要解析名为 USERNAME 的用户的/etc/passwd,而是使用 getent passwd USERNAME,因为该条目可能来自 LDAP,而不是 /etc/password

在我的系统上,getent知道以下"数据库":

ahosts     ahostsv6   ethers     gshadow    netgroup   passwd     rpc        shadow     
ahostsv4   aliases    group      hosts      networks   protocols  services

最新更新