加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux – 如何通过命令行添加新的DNS服务器?

发布时间:2021-05-22 12:23:40 所属栏目:Linux 来源:网络整理
导读:我正在尝试为OS X编写一个bash脚本,它将更改为当前连接添加名称服务器.我有更改DNS服务器的命令,但我需要保留当前的namesever. 我认为我可以从resolv.conf文件中获取当前的名称服务器,然后在命令中以某种方式使用它. 我目前已将此名称服务器更改为8.8.8.8:

我正在尝试为OS X编写一个bash脚本,它将更改为当前连接添加名称服务器.我有更改DNS服务器的命令,但我需要保留当前的namesever.

我认为我可以从resolv.conf文件中获取当前的名称服务器,然后在命令中以某种方式使用它.

我目前已将此名称服务器更改为8.8.8.8:

networksetup -setdnsservers AirPort 8.8.8.8

我需要做的是从/etc/resolv.conf中检测当前的名称服务器,然后在上面的命令中使用该值作为参数.例如,说我当前的resolv.conf看起来像这样:

nameserver 9.9.9.9

我希望以上命令执行此操作:

networksetup -setdnsservers AirPort 9.9.9.9,8.8.8.8

有没有办法使用正则表达式从resolv.conf中提取IP,然后以某种方式将其用作networksetup命令中的参数?

解决方法

经过最低限度的测试;为了获得最佳效果,在每个[]中,在括号内添加一个选项卡:
networksetup -setdnsservers AirPort $(sed -ne 's/^[ ]*nameserver[ ]+([.:0-9A-Fa-f]+)/1/p' /etc/resolv.conf)

sed表达式从以nameserver开头,后跟IPv4或IPv6地址的行中提取地址. $()构造将sed的输出插入到networksetup的命令行中.

如果/etc/resolv.conf中有可能没有任何名称服务器行,这是一个相对简单的方法:

nameservers=$(sed -ne 's/^[ ]*nameserver[ ]+([.:0-9A-Fa-f]+)/1/p' /etc/resolv.conf)
if [ -z "$nameservers" ]; then nameservers=empty; fi
networksetup -setdnsservers AirPort $nameservers

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读