Sim, você pode.
Usando grep
com PCRE ( -P
):
ip addr | grep -Po '^\d+:\s+\K[^:]+'
-
^\d+:\s+
corresponde à parte antes do nome da interface no início,\K
descarta a correspondência -
[^:]+
obtém a parte até o próximo:
, ou seja, o nome da interface
Lógica semelhante usando sed
:
ip addr | sed -nE 's/^[[:digit:]]+:[[:blank:]]+([^:]+).*//p'
No meu sistema:
% ip addr | grep -Po '^\d+:\s+\K[^:]+'
lo
eth0
wlan0
% ip addr | sed -nE 's/^[[:digit:]]+:[[:blank:]]+([^:]+).*//p'
lo
eth0
wlan0
O que você realmente deve fazer:
O kernel do Linux fornece uma interface para espiar o hardware, é sysfs
, montado em /sys
.
Você pode obter o nome da interface chegando ao local apropriado do diretório /sys
, /sys/class/net/
com precisão.
No meu sistema:
% ls -1 /sys/class/net/
eth0
lo
wlan0
Cada um destes são diretórios, com os subdiretórios contendo arquivos e diretórios contendo todas as informações sobre a interface.
Aqui está a listagem do conteúdo do diretório /sys/class/net/eth0
:
% ls -1 /sys/class/net/eth0
addr_assign_type
address
addr_len
broadcast
carrier
carrier_changes
device
dev_id
dev_port
dormant
duplex
flags
gro_flush_timeout
ifalias
ifindex
iflink
link_mode
mtu
name_assign_type
netdev_group
operstate
phys_port_id
phys_port_name
phys_switch_id
power
queues
speed
statistics
subsystem
tx_queue_len
type
uevent
Responda à pergunta editada:
Para obter o nome da interface junto com o índice:
grep
:
ip addr | grep -o '^[0-9]\+:[^:]\+'
sed
:
ip addr | sed -nE 's/^([[:digit:]]+:[^:]+).*//p'
Para cada diretório de interface em /sys/class/net/
, você pode ler o arquivo ifindex
. Por exemplo, para a interface eth0
, o arquivo de índice é:
/sys/class/net/eth0/ifindex