中的节/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