Linux 환경에서 RJ45 커넥터의 물리적 연결 또는 연결 해제 상태를 소켓에 감지해야합니다. BASH 스크립팅 만 사용하는 것이 좋습니다.
다른 사이트에서 제안 된 다음 솔루션은이 목적으로 작동하지 않습니다.
- ‘ifconfig’사용-네트워크 케이블이 연결되어 있지만 네트워크가 올바르게 구성되지 않았거나 현재 작동하지 않기 때문입니다.
- 호스트 핑-제품이 알 수없는 네트워크 구성 및 알 수없는 호스트를 사용하여 LAN 내에 있기 때문에.
/ proc 파일 시스템에서 사용할 수있는 상태가 있습니까 (다른 모든 것이 있습니까)?
Linux 세계는 아이콘 트레이에서 팝업되는 자체 Windows 버전 버블을 어떻게 사용하여 네트워크 케이블을 막았다 고 가정합니까?
켄트 프레드릭 과 로타 , 당신의 대답은 모두 내 필요를 충족시킵니다 … 많은 감사합니다! 내가 어느 것을 사용할 것인가 … 나는 아직도 모른다.
나는 당신을 정답으로 둘 수 없다고 생각합니까? 그리고 내가 당신을 선택하는 것이 아마 당신에게 공평합니다. 내가 생각하는 동전을 뒤집어? 다시 한 번 감사합니다!
답변
당신은 노드를보고 싶어
/ sys / class / net /
나는 내 실험 :
전선 연결 :
eth0/carrier:1
eth0/operstate:unknown
와이어 제거 :
eth0/carrier:0
eth0/operstate:down
다시 연결 한 전선 :
eth0/carrier:1
eth0/operstate:up
사이드 트릭 : 한 번에 모든 속성을 쉽게 수확 할 수 있습니다.
grep "" eth0/*
이것은 멋진 key:value
쌍 목록을 형성합니다 .
답변
ethtool 을 사용할 수 있습니다 :
$ sudo ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: umbg
Wake-on: g
Current message level: 0x00000007 (7)
Link detected: yes
링크 상태 만 얻으려면 grep을 사용할 수 있습니다.
$ sudo ethtool eth0 | grep Link
Link detected: yes
답변
‘ip monitor’를 사용하여 REAL TIME 링크 상태를 변경하십시오.
답변
cat /sys/class/net/ethX
가장 쉬운 방법입니다.
인터페이스가 작동해야합니다. 그렇지 않으면 잘못된 인수 오류가 발생합니다.
먼저 :
ifconfig ethX up
그때:
cat /sys/class/net/ethX
답변
낮은 수준에서 이러한 이벤트는 폴링없이 rtnetlink 소켓을 사용하여 잡을 수 있습니다 . 참고 : rtnetlink를 사용하는 경우 udev와 함께 작업해야합니다. 그렇지 않으면 udev가 새 네트워크 인터페이스의 이름을 바꿀 때 프로그램이 혼란 스러울 수 있습니다.
셸 스크립트로 네트워크 구성을 수행 할 때 발생하는 문제는 이벤트 처리에 셸 스크립트가 끔찍 하다는 것입니다 (예 : 네트워크 케이블 연결 및 분리). 보다 강력한 기능이 필요한 경우 네트워크 구성을 위해 설계된 프로그래밍 언어 인 NCD 프로그래밍 언어를 살펴보십시오 .
예를 들어, “케이블 연결”및 “케이블 출력”을 stdout에 인쇄하는 간단한 NCD 스크립트 (인터페이스가 이미 작동한다고 가정) :
process foo {
# Wait for device to appear and be configured by udev.
net.backend.waitdevice("eth0");
# Wait for cable to be plugged in.
net.backend.waitlink("eth0");
# Print "cable in" when we reach this point, and "cable out"
# when we regress.
println("cable in"); # or pop_bubble("Network cable in.");
rprintln("cable out"); # or rpop_bubble("Network cable out!");
# just joking, there's no pop_bubble() in NCD yet :)
}
(내부적으로 net.backend.waitlink()
rtnetlink를 net.backend.waitdevice()
사용하고 udev를 사용합니다)
NCD의 개념은 네트워크를 구성하기 위해 독점적으로 사용하므로 일반적으로 구성 명령은 다음과 같은 것입니다.
process foo {
# Wait for device to appear and be configured by udev.
net.backend.waitdevice("eth0");
# Set device up.
net.up("eth0");
# Wait for cable to be plugged in.
net.backend.waitlink("eth0");
# Add IP address to device.
net.ipv4.addr("eth0", "192.168.1.61", "24");
}
주목해야 할 중요한 부분은 실행이 회귀 된다는 것입니다 . 예를 들어, 케이블을 뽑으면 IP 주소가 자동으로 제거됩니다.
답변
이러한 이벤트를 감지하는 데몬은 두 가지가 있습니다.
ifplugd 및 netplugd
답변
대부분의 최신 Linux 배포판 은이를 위해 NetworkManager 를 사용 합니다. D-BUS를 사용하여 이벤트를 청취 할 수 있습니다.
mii-tool
이더넷을 염두에두고 명령 줄 도구로 상태를 확인하려면을 사용할 수도 있습니다 .