有没有办法查看基于 /etc/network/interfaces 节执行的命令?

有没有办法查看基于 /etc/network/interfaces 节执行的命令?

中的节/etc/network/interfaces转换为某些命令来启动或关闭接口并对其进行配置。

有没有办法set -x在运行时查看它转换为哪些命令(类似于 Bash 脚本),或者更好的是,无需实际调用相应的命令。

我知道这转换为命令的方式在不同的 Ubuntu 版本(以及 Debian)中有所不同。因此,出于教育目的、纯粹的好奇心以及在需要/想要手动调用这些命令时方便使用,找出答案会很有趣。

答案1

哈哈,找到怎么做了。我不确定这在旧版本的 Ubuntu 上是否同样有效(我运行的是 14.04),但下面是我如何使用以下命令查看命令ifup(8)

ifup -anv

在长命令行选项中,其可读性更强:

ifup --all --no-act --verbose

这应该会读取你的/etc/network/interfaces并向你展示发生了什么。

但是,通过运行以下命令我获得了更完整的结果:

ifup -nv --force $(ifquery -l)

由于我能够从非特权用户帐户运行它,所以我很肯定,这不会尝试任何奇怪的操作,所以不要被这个--force选项所欺骗。

如果您想用另一个interfaces文件进行测试,假设您在环境变量中有该文件的路径ENIFACES,那么这应该可以完成这项工作:

ifup -nv --force -i "$ENIFACES" $(ifquery -l -i "$ENIFACES")

以下是一个例子interfaces

$ cat 测试

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.16.33
        netmask 255.255.255.0
        gateway 192.168.16.254
        dns-domain mydomain.net
        dns-nameservers 8.8.8.8
        dns-search mydomain.net sub.mydomain.net myotherdomain.com

auto _br1
iface _br1 inet static
        address 10.1.0.0
        netmask 255.255.0.0
        pre-up brctl addbr $IFACE
        post-up route add -host 192.168.16.1 $IFACE
        post-down brctl delbr $IFACE

auto _br2
iface _br2 inet static
        address 10.1.0.0
        netmask 255.255.0.0
        pre-up brctl addbr $IFACE
        post-up route add -host 192.168.16.2 $IFACE
        post-down brctl delbr $IFACE

iface eth0 inet6 static
        address 2000:dead:beef:4::1234:5678
        gateway 2000:dead:beef:0::1
        netmask 64

...产生的输出是:

Configuring interface lo=lo (inet)
run-parts --verbose /etc/network/if-pre-up.d
run-parts --verbose /etc/network/if-up.d
Configuring interface lo=lo (inet)
run-parts --verbose /etc/network/if-pre-up.d
run-parts --verbose /etc/network/if-up.d
Configuring interface eth0=eth0 (inet)
run-parts --verbose /etc/network/if-pre-up.d
ip addr add 192.168.16.33/255.255.255.0 broadcast 192.168.16.255          dev eth0 label eth0
ip link set dev eth0   up
 ip route add default via 192.168.16.254  dev eth0
run-parts --verbose /etc/network/if-up.d
Configuring interface eth0=eth0 (inet6)
run-parts --verbose /etc/network/if-pre-up.d
modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.


sysctl -q -e -w net.ipv6.conf.eth0.autoconf=0
ip link set dev eth0   up
ip -6 addr add 2000:dead:beef:4::1234:5678/64  dev eth0
 ip -6 route add default via 2000:dead:beef:0::1 dev eth0
/lib/ifupdown/settle-dad.sh
run-parts --verbose /etc/network/if-up.d
Configuring interface _br1=_br1 (inet)
brctl addbr $IFACE
run-parts --verbose /etc/network/if-pre-up.d
ip addr add 10.1.0.0/255.255.0.0 broadcast 10.1.255.255           dev _br1 label _br1
ip link set dev _br1   up

route add -host 192.168.16.1 $IFACE
run-parts --verbose /etc/network/if-up.d
Configuring interface _br2=_br2 (inet)
brctl addbr $IFACE
run-parts --verbose /etc/network/if-pre-up.d
ip addr add 10.1.0.0/255.255.0.0 broadcast 10.1.255.255           dev _br2 label _br2
ip link set dev _br2   up

route add -host 192.168.16.2 $IFACE
run-parts --verbose /etc/network/if-up.d

相关内容