Jak sprawdzić stan fizyczny portu Ethernet w systemie Linux?

64

Chcę sprawdzić, czy określony ethX jest fizycznie w górę lub w dół. Jak to zrobić za pomocą wiersza polecenia?

Jader Dias
źródło

Odpowiedzi:

68

$ ethtool <eth?>

Na przykład:

$ ethtool eth0

zapewnia:

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 pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000001 (1)
        Link detected: yes
Destroyica
źródło
46

Sprawdź /sys/class/net/eth0/operstatei inne pliki w tym katalogu.

O ile wiem, jest to specyficzne dla Linuksa 2.6+, ale zapewnia czysty interfejs do sterownika jądra.

Pełna dokumentacja dla tej części syssystemu plików znajduje się tutaj:

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net

Linuxtraveler
źródło
10
/ sys / class / net / eth0 / carrier była dla mnie idealną odpowiedzią na to pytanie.
Per Knytt
Świetna odpowiedź. Mały dodatek: / run / network / ifstate również zawiera przydatne informacje.
Paulo André Haacke
34

ethtool [interface]

ostatnia linia pokazuje, co chcesz:

# ethtool eth0
Ustawienia dla eth0:
        Obsługiwane porty: [TP]
        Obsługiwane tryby linków: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Obsługuje automatyczne negocjacje: Tak
        Reklamowane tryby linków: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Reklamowana autonegocjacja: Tak
        Prędkość: 1000 Mb / s
        Dupleks: Pełny
        Port: skrętka
        PHYAD: 0
        Transceiver: wewnętrzny
        Autonegocjacja: włączone
        Obsługuje budzenie: g
        Wake-on: d
        Aktualny poziom wiadomości: 0x00000037 (55)
        Wykryto link: tak
Kurt
źródło
4
Jeśli to zaznaczysz : en.wikipedia.org/wiki/OSI_model . Zobaczysz, że ostatni wiersz dotyczy innej warstwy: warstwy łącza. Właśnie to przetestowałem. Przy złym kablu warstwa fizyczna była podniesiona, ale nie warstwa łącząca. Potem przełączyłem się na inny kabel i wszystkie warstwy się pojawiły.
Jader Dias
25
ip link show

jest inny. Dobry stary

ifconfig dev_name

lub

ifconfig -a

poinformuje również, czy interfejs jest włączony. UWAGA: Zachowaj ostrożność przy tych metodach, ponieważ mogą one wyświetlać nieaktualne informacje dotyczące stanu łącza.

maź
źródło
Myślę, że to była najlepsza odpowiedź - ethtool nie jest standardem w mojej dystrybucji Ubuntu, więc nie pomaga, jeśli na pudełku nie jest podłączony do sieci.
user20010
4
Wierzę, że ifconfig czasami wyświetla nieaktualne dane. Może pokazać się, gdy link jest wyłączony, ale interfejs ethtool zawsze pokaże odpowiednie informacje AFAIK.
sed_and_done
2
Myślę, że @sed_and_done ma rację. Na Red Hat VM, gdybym odłączyć NIC, ethtool natychmiast pokazuje Link detected: nozamiast Link detected: yes, a łącza IP pokaz pokazuje <NO-CARRIER,BROADCAST,MULTICAST,UP>zamiast <BROADCAST,MULTICAST,UP,LOWER_UP>, ale ifconfig -a pokazy UP BROADCAST MULTICAST MTU:1500 Metric:1, która jest taka sama jak wtedy, gdy podłączony jest NIC.
Adi Inbar
16
dmesg | grep eth

powinieneś zobaczyć wszystkie zmiany statusu

lepole
źródło
To jedyny, który działa, jeśli nie ma uprawnień administratora.
Brian B
dmesg wymaga roota na Slackware 14.0
AnonymousLurker
Nie, nie ma. Właśnie sprawdziłem - podczas gdy działa dla mnie na eth0urządzeniu, ale nie działa na eth2urządzeniu.
Cześć Anioł
9

Możesz także użyć narzędzia mii, aby sprawdzić, czy link jest uruchomiony i sprawdzić wynegocjowaną prędkość.

# mii-tool
eth0: do uzgodnienia 100baseTx-FD, link ok

Alakdae
źródło
4
Narzędzie mii jest przestarzałe i nie działa w przypadku interfejsów GbE.
Dave Cheney
2
@DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
stolsvik
Strona podręcznika mii-tool sugeruje użycie ethtool. Jednak mii-tool nadal wykonuje swoje zadanie, bardziej przydatne, jeśli podano opcję -v (pełne).
David Ramirez
3

Możesz mieć pełne szczegóły za pomocą poniższego polecenia

ethtool eth0

A jeśli chcesz tylko zobaczyć status linku, podaj polecenie poniżej

mii-tool eth0
Nikunj Ranpura
źródło
2

Jeśli Twój system używa ifplugd(np. Na Raspberry Pi z Raspbian), możesz użyć powiązanego narzędzia stanu, ifplugstatusaby uzyskać status łącza wszystkich interfejsów:

ifplugstatus

lub określony interfejs (np. eth0):

ifplugstatus eth0
Pierz
źródło
2

netplugd to usługa, która może uruchamiać programy, gdy kabel jest podłączony lub kabel jest wyjęty. Zatem wierszem polecenia byłoby grep / var / log / messages lub dmesg dla wyjścia netplugd.

rjt
źródło
Cóż, nie do końca żądana odpowiedź, ale interesująca. Przynajmniej dla mnie.
Sopalajo de Arrierez
2

Aby szybko dodać do odpowiedzi @ goo , zinterpretowałbyś ip linklub ip link show INTERFACEw następujący sposób.

To jest port, który jest administracyjnie w górę, ale fizycznie w dół:

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000

Innymi słowy, UPwidać, że system jest skonfigurowany do próby użycia karty sieciowej do pracy w sieci. NO-CARRIERTutaj mówi, co kwestia zapobiegania sieci od pracy jest.

To jest port, który jest administracyjnie wyłączony (jego warstwa fizyczna jest „podniesiona”, technicznie - jest to VM):

3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

Wreszcie ten port działa normalnie:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000

Jest administracyjnie UPThe LOWER_UPwskazuje warstwa fizyczna pracuje (czyli nie jest nośnikiem), a drugie UPpotwierdza (w efekcie) warstwa IP jest gotowy.

iwaseatenbyagrue
źródło