脚本 which returns 一个服务名称,当你给它一个服务的默认端口号时

Script which returns a service name when you give it a service's default port number

我需要写一个 bash 脚本,当你给它一个服务的默认端口号时,它 returns 一个服务名称。我正在处理 /etc/services 文件。我的代码是:

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

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

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

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

输出:

ssh                   22/tcp

如果您只需要名字:

getent services 22 | awk '{print }'

输出:

ssh

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

在我的系统上,getent 知道以下 "databases":

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