IF='cat /etc/udev/rules.d/70-persistent-net.rules | grep $var | sed 's/^.*NAME=//' | tr -d '"''
breve explicação
Esta linha de script salvará o texto eth0
ou eth1
na variável IF
. Tudo depende do que está dentro da variável var
.
cat
exibirá o conteúdo do arquivo, grep
pesquisará e exibirá a linha que contém o texto dentro de var
, sed
excluirá tudo, desde o início da linha até o que vem depois de NAME=
, tr
exclui todas as cotações "
.
A variável var
provavelmente contém um endereço MAC, e o ponto principal da linha é extrair a interface desse endereço MAC. Você grep
para a linha que contém o endereço MAC e, em seguida, você começa a excluir algumas coisas (usando sed
e tr
) para acabar com apenas a interface no final.
Longa explicação
Aqui está um resumo:
-
IF='(somecommandhere)'
: isso significa "salvar a saída de somecommandhere
" em uma variável chamada IF
.
-
cat /etc/udev/rules.d/70-persistent-net.rules
: exibe o conteúdo do arquivo /etc/udev/rules.d/70-persistent-net.rules
. Neste estágio, a saída é:
# PCI device 0x8086:/sys/devices/pci0000:00/0000:00:19.0 (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0b:ab:6a:6b:a9", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:/sys/devices/pci0000:00/0000:00:1c.5/0000:03:00.0 (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0b:ab:6a:6b:aa", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
-
|
este é um símbolo de pipe, que significa "pegue a saída do comando antes do pipe e torne a entrada do comando após o pipe". Portanto, a saída do comando cat
será a entrada do comando grep
. O segundo canal significará que a saída do comando grep
será a entrada do comando sed
, e assim por diante.
-
grep $var
: grep
é uma ferramenta que procura algo. var
é uma variável definida em algum lugar no seu script, antes desta linha.
Digamos que a variável contenha 00:0b:ab:6a:6b:a9
. Portanto, grep $var
significa "pesquisar e gerar apenas a linha que contém 00:0b:ab:6a:6b:a9
. Neste estágio, a saída é agora:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0b:ab:6a:6b:a9", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
-
sed 's/^.*NAME=//'
: sed
é uma ferramenta de linha de comando que pode manipular a entrada, excluir ou substituir algum texto.
A próxima parte significa usar esta sintaxe: 's/<replace this>/<with this>/'
.
-
Seu <replace this>
é ^.*NAME=
. Este é um padrão de pesquisa de expressão regular. Isso é usado para "combinar" o texto. Essa expressão significa: corresponde do início da linha ( ^
), corresponde tudo ( .*
) até NAME=
. Então, basicamente, isso é o que é correspondido (o texto em negrito):
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0b:ab:6a:6b:a9", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
-
Seu <with this>
não é nada, então você está substituindo o texto com o qual você combinou nada. Isso basicamente significa que você está excluindo o que você combinou.
Nesta fase, a saída é esta:
"eth0"
-
tr -d '"'
: tr
também é uma ferramenta de linha de comando que pode excluir ou converter texto. Isso significa excluir todas as aspas duplas "
. A saída neste estágio final é:
eth0