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