Yalnızca kullanılabilir tüm ağ arabirimlerinin cihaz adlarını listeleyin


21

Linux sunucumdaki mevcut tüm Ağ Aygıtı Adlarının bir listesini almak istiyorum. Anladım

ifconfig

ancak ifconfig oldukça fazla çıktı üretir:

eth0      Link encap:Ethernet  Hardware Adresse 08:00:27:fc:5c:98  
          inet Adresse:192.168.2.222  Bcast:192.168.2.255  Maske:255.255.255.0
          inet6-Adresse: fe80::a00:27ff:fefc:5c98/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:329 errors:0 dropped:0 overruns:0 frame:0
          TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:41496 (40.5 KiB)  TX bytes:32503 (31.7 KiB)

eth1      Link encap:Ethernet  Hardware Adresse 08:00:27:e9:35:7d  
          [...]

eth2      Link encap:Ethernet  Hardware Adresse 08:00:27:ff:db:fe  
          [...]

lo        Link encap:Lokale Schleife  
          [...]

Elde etmek istediğim şey şöyle bir liste

eth0
eth1
eth2
lo

hatta daha da iyisi

eth0
eth1
eth2

Bunun "kedi", "sed" ve "grep" nin bir kombinasyonu ile yapılabileceğini varsayıyorum, ama gereksiz bilgileri nasıl keseceğime dair hiçbir fikrim yok.

Yanıtlar:


17

Bunu deneyin:

ifconfig -a | sed 's/[ \t].*//;/^$/d'

Bu atlanacak lo:

ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'

Teşekkürler dennis, bu bir çekicilik gibi çalıştı ^^. Perfekt. Normal İfadeler gerçekten içine bakmak gerekir bir şey ^^
ftiaronsem

Linux ve BSD'nin genellikle farklı *nixyardımcı programlar içerdiğinin farkındayım , ancak bu çözümün bir Mac'te çalışmadığı talihsiz bir durum :(
blong

ifconfigreddedilir, ipbunun yerine kullanın
pstanton

Bu OS X için işe yarıyor gibi görünüyor:ifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
sonraki duyuruya kadar duraklatıldı.

22

Başka bir alternatif:

ip -o link show | awk -F': ' '{print $2}'

Ya da belki:

ls /sys/class/net

kullanma komut dosyalarında ls /sys/class/netdaha iyi bir çözümdür - yukarıdaki çözümler , çalıştırıldığında her arabirimin sonunda bir ekstra ile sonuçlanır (ancak komut dosyası doğrudan çalıştırıldığında değil). /etc/local.dopenrcsed:/etc/init.d/local
Stuart Cardall

+1 için -o- bunu bilmiyordum
Patryk

16

Sadece / sys / class / net kullanın ve yolu kesin:

$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0

6

Bunu dene:

ifconfig | cut -c 1-8 | sort | uniq -u
  • cut -c 1-8 her satırın ilk 8 karakterini çıkarır
  • sort hatları sıralar
  • uniq -u yalnızca ilk sekiz karakterinde boşluk bulunan açıklama satırlarının boş satırlarını kaldıracak benzersiz satırlar yazdırır

Bu, denediğim iki linux makinede çalışıyor, ancak MacBookPro'mda (OS X 10.6.4), ifconfigboşluklar yerine sekmeler kullanıyor, bu yüzden biraz daha karmaşık:

ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}'
  • expand sekmeleri boşluklara dönüştürür
  • awk -F: '{print $1;}' ilk alanı iki nokta üst üste işaretinden önce yazdırır.

Özellikle kullanılan parametreleri açıklayan çok ayrıntılı cevap için çok teşekkür ederim. Gelecekte benzer bir sorunum olacaksa, hangi yazıya bakacağımı biliyorum ;-). Ne yazık ki "lo" kesmiyordu, bu yüzden kabul edilen cevap dennis gider. Ama bu gerçekten çok faydalı bir cevap, teşekkürler :-)
ftiaronsem

ekle | grep -v lo:-)
Doug Harris

4
ls /sys/class/net/
eth0  eth1  eth2  lo

veya sadece eth * 'a ihtiyacınız varsa

ls /sys/class/net/eth*
eth0
eth1
eth2

3

/sysDosya sistemini kullanma :

basename -a $(ls /sys/devices/**/net/* -d)

İp ve Perl kullanarak:

ip -o l|perl -lane'$F[1]=~s/://g;print $F[1]'

1

Arayüz adlarını ifconfigçıktıdan çıkarmanın bir yolu :

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p'

Belirli adları hariç tutmak istiyorsanız, aşağıdakilerden biri de filtrelenir grep:

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo

Daha fazla adı hariç tutmak istiyorsanız -e foo, grepkomuta daha fazlasını ekleyin .


Çözümünüz dennis'inki kadar iyi çalışıyor. Maalesef iki gönderiyi kabul edemiyorum, bu yüzden dennis sadece daha hızlıydı. Ancak yine de, özellikle grep açıklamanız için teşekkürler.
ftiaronsem

1

sadece ilk sütunu yazdırmak için:

netstat -a | awk '{print $1}'

gerektiğinde giriş eklemek veya kaldırmak için awk içine başka kurallar ekleyebilirsiniz.

EDIT: ifconfig ile aynı şey geçerli (Doug'un işaret ettiği gibi)

ifconfig | awk '{print $1}'

Bu, 'lo' arayüzünü hariç tutan bir örnektir

ifconfig | awk '{if ($1 != lo) print $1}'

Bu işe yaramaz. awkönde gelen beyaz alanı yoksayar ve sonraki her satırda da ilk kelimeyi yazdırır.
Doug Harris

Ne yazık ki, Doug'un işaret ettiği sorunun acısını çeken bu gerçekten çalışmıyor. Ama yardımın için teşekkürler, yine de benim gibi yeni bir çocuğa yardım ettiğin için gerçekten minnettarım.
ftiaronsem

1
/usr/sbin/ip addr show | awk '/^[1-9]/ {print $2}'

sağlar

lo:
eth0:
eth1:
eth2:

çıktı olarak


1

Kabul edilmiş bir çözüm olmasına rağmen, buna çözümümü sunmak istiyorum.

Bir sürü sanal arayüzüm var ve çeşitli bash komut dosyalarında kullanılabilen bir liste almak istiyorum.

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.137  netmask 255.255.255.192  broadcast 11.22.33.191
        inet6 fe80::a00:27ff:fe8c:6bd3  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)
        RX packets 2969136  bytes 2394432908 (2.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1378821  bytes 358960701 (342.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.189  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.190  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.180  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

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 1  (Local Loopback)
        RX packets 673768  bytes 277972236 (265.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 673768  bytes 277972236 (265.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Orada olduğunu bildiğim için geri döngü ile ilgilenmiyorum :)

Bu tek astar işi yapar:

ifconfig | egrep '^eth' | cut -f 1-2 -d ':' | cut -f 1 -d ' '| pcregrep -o1 "(((eth\d)(:\d))|(eth\d))"

Gibi bir çıktı üretir:

eth0
eth0:1
eth0:2
eth0:3

Zevk almak.


1

Yukarıdaki çözümlerin hepsi iyi çalışıyor. Yine de bunu deneyebilirsin

ifconfig | grep HW | cut -c 1-6

Geri lodöngü olan bir HW Adresi atanmadığından, görünmez.

Çıktı -

root @ glum: / home / amit # ifconfig | grep HW | kes -c 1-6
enp7s0
vmnet1
VMnet8
wlp6s0

1

En kolay çözüm adam ifconfig (8)

man ifconfig (8) ekstresi http://www.manpagez.com/man/8/ifconfig/ :

-L bayrağı, başka hiçbir ek bilgi olmadan sistemdeki tüm kullanılabilir arabirimleri listelemek için kullanılabilir. Bu bayrağın kullanımı, -d (yalnızca aşağı olan liste arabirimleri) ve -u (yalnızca yukarı olan liste arabirimleri) hariç diğer tüm bayraklar ve komutlarla birlikte kullanılamaz.

Bu nedenle, listeye sahip olmak için şunu kullanın:

ifconfig -l

Adlar bir boşlukla ayrılır, bu nedenle bu boşlukları bir \ n ile değiştirmek için sed kullanmanız gerekir:

ifconfig -l | sed 's/ / /g'


1

Gelişmiş:

netstat -i | grep '^[a-z]' | awk '{print $1}' | grep -v 'lo'

1
Muhtemelen bunu yapmalısınız grep -v '^lo$'; geçerli komutunuz (varsayımsal örnek) logicalve ridiculousarabirimleri hariç tutacaktır .
Scott

0

Yukarıdaki çözümlerin hiçbiri benim için çalışmadı, işte benim çözümüm:

ifconfig -a  | egrep "^[a-z]+" | sed "s/: .*//" | grep -v "lo"
  1. Mevcut tüm arayüzleri listele
  2. Yalnızca cihaz adlarını içeren satırları ayıklayın (başında boşluk yok)
  3. İlk boşluktan sonraki ilişkisiz arka parçayı kaldırın
  4. loArayüzü hariç tut

Çıktılar:

eth0
eth0:1
wlan0

0

"ifcongif -l" işi yapmalı. çıktısı bu satırsonu olmayan "lo0 gif0 stf0 en0 ..." gibi

Bazı web sitelerinde buldum ama artık bulamıyorum. ve hala "-l" Bayrağının anlamını arıyorum.


0

Bazen nettools varsayılan olarak yüklenmez. Bu nedenle, / bin, / usr / bin ve / usr / sbin içinde, daha sonra yüklenen paketler hakkında endişelenmenize gerek kalmadan daha fazla garantisi bulunan yerleşik komutları kullanmayı seviyorum.

ip addr: yönlendirme, aygıtlar, ilke yönlendirme ve tüneller (adres) gösterme / değiştirme
grep: unitl:
cut: use (:) öğesini ayırıcı olarak al ve alan 2'yi al
tr: silmek hiçbir boşluk

$ ip adresi | grep -E ': \ s. * ?:' | cut -d ":" -f 2 | tr -d ""

0

MacOS üzerinde test edildi, aşağıdakiler çalıştı. UP olan tüm arayüzleri bulmam gerekiyordu. Bu, yukarıdaki Dennis Williamson'ın cevabına dayanmaktadır.

ifconfig -a | grep UP | sed 's/:.*//;/^$/d'


-1

ifconfig | grep flags | awk -F: '{print $1;}'


1
Bunun ne olduğunu açıklamak için sonuna kadar genişletebilir misiniz? Bir satır yanıtı genellikle Superuser için iyi bir format değildir.
Doktoro Reichard
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.