我想获得所有活动networking接口(例如eth0,wlan0)的列表。 我假设我将不得不parsingifconfig的输出,但是各种操作系统的格式是不同的。 有没有人有一个可移植的方式来获取这些信息,因此可以在大多数unices(linux,* bsd,mac)上使用。
不知道关于portablety,因为networking接口列表可能与内核实现有关,而linux根本不相关于* bsd / mac …但是如果ifconfig对你不好,你可以试试netstat -i
看看facter包。 它主要由木偶configurationpipe理程序用来从已安装的机器中获取元数据,但是为了类似的目的,它可以以独立的方式运行。 它的输出包含有关机器上的networking接口的信息,其格式在各个平台上都是一致的。
示例输出:
user@host:~$ facter architecture => i386 domain => members.linode.com facterversion => 1.3.8 fqdn => host.members.linode.com hardwareisa => unknown hardwaremodel => i686 hostname => host id => user ipaddress => 1.2.3.4 ipaddress_eth0 => 1.2.3.4 kernel => Linux kernelrelease => 2.6.32.16-linode28 lsbdistcodename => hardy lsbdistdescription => Ubuntu 8.04.4 LTS lsbdistid => Ubuntu lsbdistrelease => 8.04 macaddress => 76:c9:3e:0b:xx:xx macaddress_eth0 => fe:fd:43:12:xx:xx memoryfree => 393.08 MB memorysize => 498.68 MB operatingsystem => Debian operatingsystemrelease => 2.6.32.16-linode28 processor0 => Intel(R) Xeon(R) CPU L5335 @ 2.00GHz processor1 => Intel(R) Xeon(R) CPU L5335 @ 2.00GHz processor2 => Intel(R) Xeon(R) CPU L5335 @ 2.00GHz processor3 => Intel(R) Xeon(R) CPU L5335 @ 2.00GHz processorcount => 4 ps => ps -ef rubysitedir => /usr/local/lib/site_ruby/1.8 rubyversion => 1.8.6 swapfree => 186.84 MB swapsize => 255.99 MB uniqueid => 007f0101
以下将返回所有常见Linux发行版上的活动接口列表:
ifconfig | grep "Link encap" | awk '{ print $1 '}
如果您还想包含当前处于closures状态(不活动)的接口,只需添加-a标志,如下所示:
ifconfig -a | grep "Link encap" | awk '{ print $1 '}
据我所知,在任何POSIX系统上都没有常用的方法来检索networking接口列表,因此您必须将您的命令本地化为当前正在使用的操作系统。
Netstat -i和ifconfig只会显示当前“活动”的networking接口。 活动的接口也可以没有载体,因此是不可用的。 您需要查找RUNNING标志(ifconfig)或R标志(netstat -i)。 该标志表示该接口具有活动的载体,或者最常见的是具有networking接口物理连接的某些东西,例如交换机。