LINUX.ORG.RU
решено ФорумAdmin

Парсинг ifconfig

 , , , ,


0

1

Приветствую!

Подскажите, как возможно вывести адрес с команды ifconfig eth0 в консоль например 192.168.0.3 и подставить в другую команду выполнения? Через sed с объявлением переменной? Или есть другие варианты?

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.0.3  netmask 255.255.255.248  broadcast 192.168.0.7
inet6 fe80::6f6c:98f6:7740:8236  prefixlen 64  scopeid 0x20<link>
ether fa:16:3e:81:87:b4  txqueuelen 1000  (Ethernet)
RX packets 70617  bytes 100797000 (96.1 MiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 35204  bytes 2824844 (2.6 MiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Заранее спасибо.



Последнее исправление: xaizek (всего исправлений: 2)

вывести адрес с команды ifconfig eth0

1. Не ifconfig, а ip a s dev eth0.
2. Адресов может быть больше одного.

Через sed

Как вариант.

anc ★★★★★
()
Ответ на: комментарий от anc

Не ifconfig, а ip a s dev eth0.

или даже

ip -4 -br a s dev eth0
но всё равно придётся маску вырезать, поэтому может получиться более громоздко

zolden ★★★★★
()
Ответ на: комментарий от zolden

Дополню. И если их больше одного то уже строку резать.

anc ★★★★★
()
Ответ на: комментарий от anc

Не ifconfig, а ip

# ifconfig
enp0s7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.120  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::26a4:9f7a:fad0:9511  prefixlen 64  scopeid 0x20<link>
        ether f4:6d:04:99:79:08  txqueuelen 1000  (Ethernet)
        RX packets 50415  bytes 58904323 (56.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38574  bytes 5032044 (4.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp1s7: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:1d:0f:be:86:94  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 120  bytes 6000 (5.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 120  bytes 6000 (5.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s7: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 00:1d:0f:be:86:94 brd ff:ff:ff:ff:ff:ff
3: enp0s7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether f4:6d:04:99:79:08 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.120/24 brd 192.168.0.255 scope global noprefixroute enp0s7
       valid_lft forever preferred_lft forever
    inet6 fe80::26a4:9f7a:fad0:9511/64 scope link 
       valid_lft forever preferred_lft forever

ты видешь разницу? это же не для людей сделано.

anonymous
()
Ответ на: комментарий от anonymous

ты видешь разницу? это же не для людей сделано.

Вы сейчас о каком из выхлопов?

anc ★★★★★
()
Ответ на: комментарий от anc

1. Не ifconfig, а ip a s dev eth0.
2. Адресов может быть больше одного.

В моём случае адрес один и нужно его вывести в консоль..

Необязательно же, например можно ip -4 a hostname -I и другие варианты есть Я искал готовое решение, спасибо уже нашел, например:

hostname -I | cut -d' ' -f1

Как вариант.

Но если скиньте через sed буду признателен :)

troy856
() автор топика
Ответ на: комментарий от troy856

например можно ip -4

я же написал, адресов может быть больше одного.

hostname -I

Прикольно, непонятно зачем это может быть нужно, но прикольно однозначно.

Но если скиньте через sed буду признателен :)

sed-а будет больше чем cut, он здесь не нужен.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 2)
Ответ на: комментарий от troy856

hostname -I

Может показывать погоду на марсе - не вариант.

Например на домашнем десктопе:

pinkbyte@phantom ~ $ hostname -i
::1

Безусловно, практически у каждой машины есть этот IP(а еще 127.0.0.1), только толку? :-)

Pinkbyte ★★★★★
()
Ответ на: комментарий от anc
pinkbyte@phantom ~ $ hostname -I
hostname: неверный ключ — «I»

Предупреждать же надо, если это *BSD-система (у меня под рукой нет, чтобы проверить формат выхлопа)

Update: в Debian hostname тоже умеет в -I. hostname из состава net-tools - нет. Век живи - век учись :-)

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Почти тем же путем прошел. :) На слаке нэма. Deb точно с 7-го умеет, старее нет под рукой. Копейка аналогично с 6.8.

anc ★★★★★
()
ip -4 a s | awk '$1=="inet"{split($2,s,/\//);l=l d s[1];d=" ";}END{print l;}'
berrywizard ★★★★★
()

ip a s dev eth0

#!/bin/sh

IF=eth0 #интерфейс
DEST_IP=8.8.8.8 # адрес, куда надо достучатся
ip route get $DEST_IP oif $IF | sed -n 's/.*src \([0-9.]\+\).*/\1/p'
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.