route get 0.0.0.0 2>/dev/null | grep interface: | awk '{print $2}'
找到默认路由使用的网卡接口名字
这是一句从iGlance的NetUsageComponent.swift中截取的一句。iGlance是用swift语言写的,运行在MacOS上的系统资源监测软件。
下面我们分解这一句慢慢讲解。
1. route get 0.0.0.0
获取默认路由信息
解释 route get 某个ip地址
:获取某个ip地址的路由信息。ps.关于0.0.0.0与127.0.0.1的区别。
运行结果示例
route to: default
destination: default
mask: default
gateway: 192.168.0.1
interface: en0
flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
2. 2>/dev/null
把错误信息重定向到“黑洞”,扔掉
解释
2
:标准错误(stderr)。Linux系统预留可三个文件描述符。
文件描述符 | 意义 |
---|---|
0 | 标准输入(stdin) |
1 | 标准输出(stdout)一般直接输出到终端显示 |
2 | 标准错误(stderr)一般直接输出到终端显示 |
>
:把“左侧”重定向输入到“右侧”,如果“右侧”文件已存在,替换掉原文件。区别于>>
只是追加到“右侧”文件末尾。"左侧“可以直接使用数字表示”文件描述符“,”右侧“需要加上&
,例如2>&1
就是把”标准错误“输入到“标准输出”中
/dev/null
:是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。
3. | grep interface:
搜索列出所有的输入中包含“interfac:"的行。把|
左侧的输出当作grep
的输入。
解释
|
:管道,把左侧的输出当作右侧的输入。
grep interface:
:搜索列出所有的输入中包含“interfac:"的行。也可以单独使用在文件上,例如:grep test *file
查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行;grep -v test *file
则是查找“不”包含 test 字符串的文件。更多详见这里
运行结果示例
interface: en0
4. | awk '{print $2}'
每行按空格或TAB分割,输出文本中的第2项。把|
左侧的输出当作awk
的输入。
解释
awk '{print $2}'
:运行内容为{print $2}
的awk脚本,即效果为,每行按空格或TAB分割,输出文本中的第2项。$n
是awk内建变量,当前记录的第n个字段,字段间由FS
分隔。FS
是字段分隔符(默认是任何空格)。更多详见这里
运行结果示例
en0