我希望有人可以一点一点地解释这个命令的每个部分的作用。
ifconfig | grep -Po "HWaddr \K.*$"
例如 The-Po
是做什么用的?
答案1
这个命令起什么作用?
ifconfig | grep -Po "HWaddr \K.*$"
如果可用,则打印出系统上活动网络接口的 MAC /硬件地址。
另外,在 Linux 中,你通常可以通过查找来了解程序以及它们的开关的作用man
,例如:
$ man ifconfig
$ man grep
(ETC)除此之外,搜索“<program name>
手册”或“<program name>
使用方法”可以回答这些问题。
是否配置
ifconfig
用于显示和配置网络接口。来自man ifconfig
:
Ifconfig 用于配置驻留在内核的网络接口。它在启动时根据需要设置接口。此后,通常仅在调试或需要系统调整时才需要它。
如果没有给出参数,ifconfig 将显示当前活动接口的状态。如果给出了单个接口参数,则仅显示给定接口的状态;如果给出了单个 -a 参数,则显示所有接口的状态,包括关闭的接口。否则,它将配置一个接口。
(重点是我的)
这里ifconfig
报告您当前活动接口的状态。
| (管道)
管道字符 - |
- 这里重定向输出而不是ifconfig
显示给你,而是转到grep
grep
grep
用于模式匹配,并且(通常)打印与模式匹配或不匹配的内容。
这里提供的选项是-P
和-o
-P
:
将 PATTERN 解释为 Perl 正则表达式 (PCRE,见下文)。这是高度实验性的,grep -P 可能会警告未实现的功能。
正则表达式是一个很长的话题1,但基本上,这让我们grep
匹配一些额外的模式。
-o
:
仅打印匹配行中匹配的(非空)部分,每个部分位于单独的输出行上。
(均引自 grep 手册页)
此选项表明grep
我们只对与模式匹配的部分感兴趣,而不是整行(如果匹配)。
“HWaddr \K.*$”
这部分告诉我们正在寻找HWaddr
(MAC 或硬件地址)。\K
设置我们想要打印内容的起点(对于-o
上面的选项)。.*
告诉尽可能多次()grep
匹配任何字符(),至少直到行尾()。.
*
$
输出/结果
总而言之,该命令从ifconfig
系统上网络接口的 MAC 地址获取信息并搜索匹配的部分,然后在新行上打印出来。
1:“有些人在遇到问题时会想‘我知道,我会使用正则表达式。’现在他们有两个问题。” 杰米·扎温斯基,1997 年(尽管这句话经常被引用断章取义)