Dalam lingkungan Linux, saya perlu mendeteksi keadaan fisik yang terhubung atau terputus dari konektor RJ45 ke soketnya. Lebih disukai menggunakan skrip BASH saja.
Solusi berikut yang telah diusulkan di situs lain TIDAK berfungsi untuk tujuan ini:
- Menggunakan 'ifconfig' - karena kabel jaringan mungkin terhubung tetapi jaringan tidak dikonfigurasi dengan benar atau tidak saat ini.
- Ping host - karena produk akan berada dalam LAN menggunakan konfigurasi jaringan yang tidak dikenal dan host yang tidak dikenal.
Apakah tidak ada keadaan yang dapat digunakan dalam sistem file / proc (semua yang ada di sana)?
Bagaimana dunia Linux seharusnya memiliki versi sendiri gelembung Windows yang muncul dari baki ikon yang menunjukkan bahwa Anda baru mencabut kabel jaringan?
Kent Fredric dan lothar , kedua jawaban Anda memuaskan kebutuhan saya ... terima kasih banyak! Yang mana yang akan saya gunakan ... Saya masih belum tahu.
Saya kira saya tidak bisa menempatkan Anda berdua sebagai jawaban yang benar? Dan mungkin adil bagi Anda bahwa saya memang memilih satu. Membalik koin, kurasa? Sekali lagi terima kasih!
sumber
grep -H . eth0/*
:: Garis emty whipe ini dan mencetak nama entri dengan milik masing-masing baris.grep -s "" eth0/*
Anda dapat menggunakan ethtool :
Untuk hanya mendapatkan status Tautan Anda dapat menggunakan grep:
sumber
grep Link
melakukannya. Terima kasih!!up
menyatakan.Gunakan 'ip monitor' untuk mendapatkan perubahan status tautan REAL TIME.
sumber
1
ketika kabel saya terputus sementaraip monitor
benar-benar menunjukkan sesuatucat /sys/class/net/ethX
sejauh ini merupakan metode termudah.Antarmuka harus dinyalakan, jika tidak, Anda akan mendapatkan kesalahan argumen yang tidak valid.
Jadi pertama:
Kemudian:
sumber
ethX/carrier
yang 1 jika 'pembawa' terdeteksi, yang berarti bahwa kabel tersambung dan membawa data ...Pada level rendah, peristiwa ini dapat ditangkap menggunakan soket rtnetlink , tanpa polling apa pun. Catatan: jika Anda menggunakan rtnetlink, Anda harus bekerja sama dengan udev, atau program Anda mungkin bingung ketika udev mengganti nama antarmuka jaringan baru.
Masalah dengan melakukan konfigurasi jaringan dengan skrip shell adalah skrip shell mengerikan untuk penanganan acara (seperti kabel jaringan yang dicolokkan ke dalam dan ke luar). Jika Anda membutuhkan sesuatu yang lebih kuat, lihat bahasa pemrograman NCD saya , bahasa pemrograman yang dirancang untuk konfigurasi jaringan.
Misalnya, skrip NCD sederhana yang akan mencetak "kabel masuk" dan "kabel keluar" ke stdout (dengan asumsi antarmuka sudah ada di atas):
(secara internal,
net.backend.waitlink()
menggunakan rtnetlink, dannet.backend.waitdevice()
menggunakan udev)Gagasan NCD adalah Anda menggunakannya secara eksklusif untuk mengonfigurasi jaringan, jadi biasanya, perintah konfigurasi akan muncul di antaranya, seperti:
Bagian penting yang perlu diperhatikan adalah eksekusi diizinkan untuk mundur ; dalam contoh kedua, misalnya, jika kabel dicabut, alamat IP secara otomatis akan dihapus.
sumber
Ada dua daemon yang mendeteksi peristiwa ini:
ifplugd dan netplugd
sumber
ifplugstatus
alat dariifplugd
daemon. Tidak perlu untuk argumen, cukup ketikifplugstatus
dan Anda akan mendapatkan semua NIC sebagai terhubung atau dicabut.Sebagian besar distribusi Linux modern menggunakan NetworkManager untuk ini. Anda bisa menggunakan D-BUS untuk mendengarkan acara.
Jika Anda ingin alat baris perintah memeriksa status, Anda juga dapat menggunakan
mii-tool
, mengingat Anda mempertimbangkan Ethernet.sumber
mii-tool
tampaknya menjadi satu-satunya perintah yang dapat melaporkan status tautan saat antarmuka mati.Saya menggunakan perintah ini untuk memeriksa kabel yang terhubung:
Jika hasilnya akan naik atau turun. Kadang-kadang itu menunjukkan tidak dikenal, maka Anda perlu memeriksa
Ini menunjukkan 0 atau 1
sumber
Beberapa persiapan dan trik
Saya melakukan semua ini sebagai pengguna normal (bukan root )
Dapatkan info dari
dmesg
Menggunakan
dmesg
adalah salah satu hal pertama yang harus dilakukan untuk menanyakan kondisi sistem saat ini:dapat menjawab sesuatu seperti:
atau
tergantung pada keadaan, pesan dapat bervariasi tergantung pada perangkat keras dan driver yang digunakan.
Catatan: ini bisa dengan tertulis
dmesg|grep eth.*Link.is|tail -n1
tetapi saya lebih suka menggunakansed
.Tes di sekitar
/sys
sistem file semuMembaca atau menulis di bawah
/sys
dapat merusak sistem Anda, terutama jika dijalankan sebagai root ! Anda telah diperingatkan ;-)Ini adalah metode penyatuan, bukan pelacakan peristiwa nyata .
Bisa membuat sesuatu seperti (setelah Anda mencabut dan menyambungkan kembali, tergantung):
(Tekan Enteruntuk keluar lingkaran)
Catatan: Ini perlu
patch
diinstal.Baik-baik saja, pasti ada sesuatu tentang ini ...
Bergantung pada Instalasi Linux , Anda dapat menambahkan
if-up
danif-down
skrip untuk dapat bereaksi terhadap peristiwa semacam ini.Di berbasis Debian (seperti Ubuntu ), Anda dapat menyimpan skrip Anda
lihat
man interfaces
info lebih lanjut.sumber
e1000
dan bahkan bisa terjadi pada waktu lain936555.596870
, tetapi Anda akan melihatNIC Link is
.Anda dapat menggunakan ifconfig.
Jika entri menunjukkan RUNNING, antarmuka terhubung secara fisik. Ini akan ditampilkan terlepas jika antarmuka dikonfigurasi.
Ini hanyalah cara lain untuk mendapatkan informasi
/sys/class/net/eth0/operstate
.sumber
di lengkungan linux. (saya tidak yakin pada distro lain) Anda dapat melihat operstate. yang muncul jika terhubung atau turun jika tidak operstate hidup
sumber
atau bagi saya lebih cepat mendapat:
Ini akan mendengarkan file syslog.
Hasil (jika terputus dan setelah 4 detik terhubung lagi):
sumber
Entah bagaimana jika Anda ingin memeriksa apakah kabel ethernet dicolokkan di linux setelah memuji: "ifconfig eth0 down". Saya menemukan solusinya: gunakan alat ethtool.
jika kabel tersambung, uji tautan adalah 0, sebaliknya 1.
sumber
Saya menggunakan perangkat yang ditingkatkan OpenWRT saya sebagai repeater (yang menambahkan kemampuan ethernet virtual dan nirkabel) dan menemukan bahwa / sys / class / net / eth0 carrier dan nilai opstate tidak dapat diandalkan. Saya bermain-main dengan /sys/class/net/eth0.1 dan /sys/class/net/eth0.2 juga dengan (setidaknya untuk temuan saya) tidak ada cara yang dapat diandalkan untuk mendeteksi bahwa ada sesuatu yang secara fisik terhubung dan berbicara pada setiap port ethernet. Saya menemukan cara yang agak kasar tetapi tampaknya dapat diandalkan untuk mendeteksi jika ada sesuatu yang sudah terpasang sejak negara reboot / poweron terakhir setidaknya (yang bekerja persis seperti yang saya butuhkan dalam kasus saya).
Anda akan mendapatkan 0 jika tidak ada yang dicolokkan dan sesuatu> 0 jika ada yang dicolokkan (bahkan jika sudah dicolokkan dan sejak dihapus) sejak daya terakhir hidup atau siklus reboot.
Semoga ini bisa membantu seseorang setidaknya!
sumber