periksa apakah antarmuka eth0 sudah habis (dikonfigurasi)

30

Saya perlu memeriksa dengan skrip, apakah eth0sudah dikonfigurasi. Jika demikian, skrip tidak akan melakukan apa pun. Kalau tidak, itu akan mulai wlan0. (Saya tidak ingin keduanya eth0dan wlan0bangun pada saat yang sama).

Apa cara termudah untuk memeriksa, apakah eth0sudah siap?

Saya menggunakan Debian Wheezy

KLARIFIKASI:

Saya ingin memeriksa tidak hanya bahwa kabel masuk eth0dicolokkan, tetapi lebih tepatnya antarmuka dikonfigurasi (yaitu ia memiliki set IP statis, atau telah menerima IP DHCP). Jika kabel dicolokkan, tetapi eth0tidak dikonfigurasi dengan benar, saya ingin memulaiwlan0

pengguna1968963
sumber
2
Saya tidak yakin tentang apa yang akan saya katakan tetapi cat /sys/class/net/ | grep eth0harus memberi Anda data yang mudah diurai. Anda juga bisa melakukannyasudo ethtool eth0 | grep Link
Kiwy

Jawaban:

45

Anda bisa melakukannya dengan banyak cara. Berikut sebuah contoh:

$ cat /sys/class/net/eth0/operstate
up
cuonglm
sumber
5
Sayangnya, ini tidak menjamin bahwa antarmuka sepenuhnya dikonfigurasi. Anda dapat /sys/class/net/eth0/carriermengecek, untuk memeriksa sinyal, tetapi masih belum memiliki sewa DHCP, dll.
orodbhen
7
ip a show ethX up

Jika tidak ada yang ditampilkan maka antarmuka Anda tidak aktif

maks
sumber
Metode ini: "ip a show ethX up" dan periksa output, tidak cukup
Joshua Clayton
5
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing 

Jadi di sini kita alat di grepmana-mana untuk baris yang berisi antarmuka kita yang menarik dan frase "status UP" (terima kasih kepada @Lekensteyn untuk menunjukkan perlunya sedikit lebih spesifik daripada hanya ). Kami menggunakan argumen sebagai formulir singkat untuk dan itu harus cukup untuk mendapatkan daftar semua kartu jaringan yang dikonfigurasi dalam sistem.ipstdoutUPaaddress

Salah satu keuntungan menggunakan ipadalah bahwa itu harus benar-benar tersedia di mana saja - itu adalah bagaimana saya biasanya mengkonfigurasi perangkat jaringan ponsel Android saya, misalnya.

Ini :colonsdigunakan untuk menghindari kecocokan sebagian - dengan cara ini kami menjamin kecocokan untuk eth0yang sebaliknya mungkin someothereth0atau eth007.

Terima kasih @RaphaelAhrens karena mendorong saya ke arah kebenaran dan menjelaskan solusi saya.

EDIT:

Untuk menangani persyaratan saat ini Anda dapat:

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

Di atas hanya akan mencetak alamat ip CIDR jika target Anda $ifadalah UP, terpasang, dan memiliki satu. Untuk ipv6 solusinya sangat sederhana dengan hanya modifikasi kecil.

Jika Anda tidak suka, sedAnda bisa mencapai hasil yang sama dengan yang lain |pipe ... grepdan menambahkan -Aopsi konteks ke yang pertama grep- tapi saya suka sed.

mikeserv
sumber
1
Anda harus menjelaskan apa yang Anda lakukan. Sehingga semua orang bisa mendapat manfaat dari jawaban Anda.
Raphael Ahrens
5
Ini tidak cukup. Output juga mengandung UPjika perangkat, tapi tidak ada kabel yang terhubung: 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000. Anda juga dapat menentukan perangkat untuk menghindari positif palsu: ip addr show dev eth0.
Lekensteyn
0

Metode lain tidak berfungsi, tetapi yang ini tidak (setidaknya di Ubuntu):

while true; do
    ip route | grep "linkdown"
    if [ $? -eq 0 ]; then
        sleep 1  # network not yet up
    else
        break   # network up
    fi
done
xinthose
sumber
Tidak ada "tautan ke bawah" untuk diterima ip routedi Debian Stretch.
Ingo