Periksa apakah kabel jaringan terhubung tanpa membawa antarmuka

9

Saya mencoba mengidentifikasi NIC di ~ 20 server jarak jauh (2-6 NIC di setiap server). Untuk mulai dengan, saya ingin mengidentifikasi yang siap digunakan dan yang gratis. Bagaimana saya bisa mengecek keadaan media fisik? Saya tahu beberapa cara, termasuk ifconfig|grep RUNNING, ethtool, cat /sys/class/net/eth0/carrier, tapi semua mereka mengharuskan antarmuka telah menyala. Saya tidak ingin menampilkan SEMUA antarmuka. Tidak yakin mengapa, tapi saya tidak suka telah mengaktifkan, tetapi tidak mengkonfigurasi antarmuka dalam jaringan. Apakah ada cara saya bisa menghindari ini?

Atau apakah saya hanya salah dan tidak ada yang buruk tentang semua antarmuka sedang (dan tidak dikonfigurasi)? Bahkan jika mereka terhubung?

minaev
sumber

Jawaban:

5

ip link show, secara default menampilkan semua antarmuka, gunakan ip link show upuntuk hanya menampilkan antarmuka yang sedang berjalan. Anda dapat menggunakan filter untuk mendapatkan perbedaan.

Nikhil Mulley
sumber
Aha. Dan kabel yang hilang akan muncul sebagai NO-CARRIER, kan?
minaev
Bingo. Terima kasih. Dan ip addr showbahkan menambahkan alamat IP ke output.
minaev
2
Itu tidak bekerja pada mesin saya (memeras Debian, driver skge): ip link showmenunjukkan tidak lebih dari "BAWAH". ipmelaporkan informasi yang sama seperti ifconfigdan /sys/class/net/dalam hal apa pun, bukan? Apakah Anda mendapatkan informasi status tautan ipyang berbeda dengan apa yang Anda dapatkan di bawah /sys/class/netatau dari ifconfigmesin Anda? Atau apakah Anda mendapatkan status tautan tentang antarmuka yang tidak aktif /sys/class/net(saya mengerti /sys/class/net/eth0/carrier: Invalid argument)?
Gilles 'SANGAT berhenti menjadi jahat'
itu tidak berfungsi jika antarmuka mati.
Vladimir Kunschikov
@Nikhil Mulley Apa yang Anda maksud dengan filter?
Joe
2

Berikut ini skrip saya untuk memperbarui rute default berdasarkan kondisi koneksi secara realtime . (berjalan di latar belakang) bekerja dengan banyak antarmuka, saya menentukan prioritas dalam /tmp/${iface}.metricfile, antarmuka terhubung 'terbaik' akan digunakan untuk merutekan lalu lintas default.

#!/bin/sh

/sbin/ip monitor link | while read -r line
do
    iface=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\1/p')
    state=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\2/p')
    if [ "$iface" != "" ] ; then
        echo "$iface is $state"
        if [ -f /tmp/${iface}.metric ] ; then
                echo "updating default route for ${iface}"
                if [ "$state" = "DOWN" ] ; then
                        ip route del default dev "${iface}"
                else
                        ip route add default dev "${iface}" metric `cat /tmp/${iface}.metric`
                fi
        fi
    fi
done
pengguna211708
sumber
0

ip link show menampilkan bendera "LOWER_UP" untuk menunjukkan kabel terpasang. Anda juga dapat memeriksa / sys / class / net / eth * / operstate atau carrier. Namun, semua ini hanya berfungsi untuk antarmuka dengan alamat IP yang terikat padanya.

Julien
sumber
1
Informasi menarik, tetapi tidak benar-benar menjawab Posting Asli.
X Tian
bahkan jika saya belum memiliki plugin eth, ia akan mengatakan "naik" juga.
Kangear