eth0 arayüzünün hazır olup olmadığını kontrol et (yapılandırılmış)


30

eth0Yapılandırılmış bir komut dosyası ile kontrol etmem gerekiyor . Öyleyse, komut dosyası hiçbir şey yapmaz. Aksi takdirde başlayacaktır wlan0. (İkisini de istemiyorum eth0ve wlan0aynı anda kalkmak istemiyorum ).

eth0Zaten hazır olup olmadığını kontrol etmenin en kolay yolu ne olurdu ?

Debian Wheezy kullanıyorum

AÇIKLAMA:

Sadece kablonun eth0fişinin takılı olmadığını değil, arayüzün yapılandırıldığını da kontrol etmek istiyorum (yani statik IP ayarına sahip veya bir DHCP IP aldı). Kablo takılı, ancak eth0doğru yapılandırılmamışsa, başlamak istiyorumwlan0


2
Ne söyleyeceğim konusunda emin değilim ama cat /sys/class/net/ | grep eth0size kolayca ayrıştırılabilir veriler vermeli. Bunları da yapabilirsinsudo ethtool eth0 | grep Link
Kiwy

Yanıtlar:


45

Bunu birçok yolla yapabilirsiniz. İşte bir örnek:

$ cat /sys/class/net/eth0/operstate
up

5
Ne yazık ki, bu arayüzün tamamen yapılandırıldığını garanti etmiyor. Sen kedi olabilir /sys/class/net/eth0/carrier, bir sinyal olup olmadığını kontrol etmek, ama yine de henüz bir DHCP kira olmayabilir, vb
orodbhen

7
ip a show ethX up

Hiçbir şey görüntülenmediyse arayüzünüz kapanır


Bu yöntem: "ip a show ethX" ve çıktı kontrolü, yeterli değil
Joshua Clayton

5
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing 

Yani burada biz grepher yerde iparaçtır stdoutbizim ilgi arayüzü ve ifade hem içeren bir satır için "devlet UP" (sadece biraz daha fazla özgüllük ihtiyacını işaret için @Lekensteyn sayesinde UP). Argümanı akısa form olarak kullanıyoruz addressve bu sistemdeki tüm yapılandırılmış ağ kartlarının bir listesini almak için yeterli olmalı.

Kullanmanın bir avantajı, ipher yerde gerçekten mevcut olması gerektiği olabilir - örneğin Android telefonumun ağ cihazlarını sık sık nasıl yapılandırdığım.

:colonsKısmi eşleşmeleri önlemek için kullanılır - bu şekilde biz bir maç garanti eth0bir başka olası karşıt olarak someothereth0veya eth007.

Doğruluk konusunda dürtmek ve çözümümü açıklamak için @RaphaelAhrens teşekkürler.

DÜZENLE:

Mevcut gereklilikleri yerine getirmek için şunları yapabilirsiniz:

ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'

Hedef ise yukarıda sadece bir CIDR ip adresini basacaktır $ifolan UP, takılı ve birine sahiptir. İpv6 için çözüm sadece küçük değişikliklerle olduğu kadar kolaydır.

Eğer beğenmezseniz sed, bir başkasıyla benzer sonuçlar elde edebilir |pipe ... grepve ilkine bir -Aiçerik seçeneği eklenebilir grep- ama hoşuma gider sed.


1
Ne yaptığını açıklamalısın. Böylece herkes cevabınızdan faydalanabilir.
Raphael Ahrens

5
Bu yetersiz. Çıkışı da içeren UPcihaz kadar ise, ama hiçbir kablo bağlıdır: 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000. Ayrıca yanlış pozitif önlemek için cihazı belirtebilirsiniz: ip addr show dev eth0.
Lekensteyn

0

Diğer yöntemler işe yaramaz, ancak bu işe yarar (en azından Ubuntu'da):

while true; do
    ip route | grep "linkdown"
    if [ $? -eq 0 ]; then
        sleep 1  # network not yet up
    else
        break   # network up
    fi
done

ip routeDebian Stretch ile uğraşacak "linkdown" yok .
Ingo
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.