จะตรวจสอบสถานะทางกายภาพของพอร์ตอีเธอร์เน็ตใน Linux ได้อย่างไร


64

ฉันต้องการตรวจสอบว่า ethX ที่ระบุนั้นขึ้นหรือลง ฉันจะทำเช่นนั้นกับบรรทัดคำสั่งได้อย่างไร

คำตอบ:


68

$ ethtool <eth?>

ตัวอย่างเช่น:

$ 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 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

46

ตรวจสอบ/sys/class/net/eth0/operstateและไฟล์อื่น ๆ ในไดเรกทอรีนี้

เท่าที่ฉันรู้ว่านี่เป็นเฉพาะสำหรับ Linux 2.6+ แต่มันมีอินเตอร์เฟสที่สะอาดสำหรับเคอร์เนลไดรเวอร์

เอกสารฉบับเต็มสำหรับส่วนนี้ของsysระบบไฟล์มีอยู่ที่นี่:

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


10
/ sys / class / net / eth0 / carrier เป็นคำตอบที่สมบูรณ์แบบสำหรับคำถามนี้สำหรับฉัน
ต่อ Knytt

คำตอบที่ดี ภาคผนวกเล็ก ๆ : / run / network / ifstate ก็มีข้อมูลที่เป็นประโยชน์เช่นกัน
เปาโลAndré Haacke

34

ethtool [interface]

บรรทัดสุดท้ายแสดงสิ่งที่คุณต้องการ:

# ethtool eth0
การตั้งค่าสำหรับ eth0:
        พอร์ตที่รองรับ: [TP]
        โหมดลิงค์ที่รองรับ: 10baseT / Half 10baseT / Full 
                                100baseT / ครึ่ง 100baseT / เต็ม 
                                1000baseT / เต็ม 
        รองรับการเจรจาต่อรองอัตโนมัติ: ใช่
        โหมดลิงค์ที่โฆษณา: 10baseT / Half 10baseT / Full 
                                100baseT / ครึ่ง 100baseT / เต็ม 
                                1000baseT / เต็ม 
        โฆษณาการเจรจาอัตโนมัติ: ใช่
        ความเร็ว: 1000Mb / s
        ดูเพล็กซ์: เต็ม
        พอร์ต: Twisted Pair
        PHYAD: 0
        ตัวรับส่งสัญญาณ: ภายใน
        เจรจาอัตโนมัติ: เปิด
        รองรับ Wake-on: g
        Wake-on: d
        ระดับข้อความปัจจุบัน: 0x00000037 (55)
        ตรวจพบลิงก์: ใช่

4
หากคุณตรวจสอบนี้: en.wikipedia.org/wiki/OSI_model คุณจะเห็นว่าบรรทัดสุดท้ายเกี่ยวข้องกับเลเยอร์อื่น: เลเยอร์ลิงก์ ฉันเพิ่งทดสอบสิ่งนี้ ด้วยสายเคเบิลที่ไม่ดีชั้นกายภาพก็เพิ่มขึ้น แต่ไม่ใช่ชั้นเชื่อมโยง จากนั้นฉันเปลี่ยนเป็นสายเคเบิลอื่นและเลเยอร์ทั้งหมดขึ้นมา
Jader Dias

25
ip link show

เป็นอีก ดีมาก

ifconfig dev_name

หรือ

ifconfig -a

จะแจ้งให้คุณทราบหากส่วนต่อประสานนั้นเกิดขึ้น หมายเหตุ:ใช้ความระมัดระวังด้วยวิธีการเหล่านี้เนื่องจากสามารถแสดงข้อมูลล้าสมัยเกี่ยวกับสถานะของลิงค์


ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุด - ethtool ไม่ได้เป็นมาตรฐานในการแจกจ่ายอูบุนตูของฉันดังนั้นจึงไม่ช่วยถ้าในกล่องที่ไม่ได้เชื่อมต่อกับเน็ต
user20010

4
ฉันเชื่อว่าบางครั้ง ifconfig จะแสดงข้อมูลล้าสมัย สามารถแสดงขึ้นเมื่อลิงก์หยุดทำงาน แต่ส่วนต่อประสาน ethtool จะแสดงข้อมูลที่ถูกต้อง AFAIK เสมอ
sed_and_done

2
ฉันคิดว่า @sed_and_done ถูกต้อง บน Red Hat VM ถ้าผมถอด NIC, ethtool ทันทีแสดงLink detected: noแทนLink detected: yesและแสดงการเชื่อมโยง IPแสดง<NO-CARRIER,BROADCAST,MULTICAST,UP>แทน<BROADCAST,MULTICAST,UP,LOWER_UP>แต่ifconfig -aแสดงUP BROADCAST MULTICAST MTU:1500 Metric:1ซึ่งเป็นเช่นเดียวกับเมื่อมีการเชื่อมต่อ NIC
Adi Inbar

16
dmesg | grep eth

คุณควรเห็นการเปลี่ยนแปลงสถานะทั้งหมด


นี่เป็นสิ่งเดียวเท่านั้นที่ใช้งานได้หากไม่มีสิทธิ์ของผู้ดูแลระบบ
Brian B

dmesg ต้องการ root ใน Slackware 14.0
AnonymousLurker

ไม่เลย ฉันเพิ่งตรวจสอบ - ในขณะที่มันใช้งานได้สำหรับeth0อุปกรณ์ของฉันแต่มันไม่ได้อยู่ในeth2อุปกรณ์
สวัสดีแองเจิล

9

นอกจากนี้คุณยังสามารถใช้เครื่องมือ mii เพื่อดูว่าลิงก์นั้นมีความเร็วและตรวจสอบความเร็วที่ตกลงกันหรือไม่

# mii-tool
eth0: เจรจาต่อรอง 100baseTx-FD เชื่อมโยงได้


4
mii-tool เลิกใช้แล้วและใช้งานไม่ได้กับอินเทอร์เฟซ GbE
Dave Cheney

2
@DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
stolsvik

หน้า man สำหรับ mii-tool แนะนำให้ใช้ ethtool อย่างไรก็ตาม mii-tool ยังคงทำงานอยู่มีประโยชน์มากกว่าหากได้รับตัวเลือก -v (verbose)
David Ramirez

3

คุณสามารถมีรายละเอียดทั้งหมดด้วยคำสั่งด้านล่าง

ethtool eth0

และถ้าคุณต้องการเห็นสถานะลิงค์คำสั่ง give ด้านล่าง

mii-tool eth0

2

หากระบบของคุณกำลังใช้ifplugd(เช่นใน Raspberry Pi กับ Raspbian) คุณสามารถใช้เครื่องมือสถานะที่เกี่ยวข้องifplugstatusเพื่อรับสถานะลิงก์ของอินเทอร์เฟซทั้งหมด:

ifplugstatus

หรืออินเทอร์เฟซเฉพาะ (เช่น eth0):

ifplugstatus eth0

2

netplugd เป็นบริการที่สามารถเรียกใช้โปรแกรมเมื่อเสียบสายเคเบิลหรือดึงสายเคเบิลออก ดังนั้นบรรทัดคำสั่งจะเป็น grep / var / log / messages หรือ dmesg สำหรับเอาต์พุต netplugd


ไม่ใช่คำตอบที่ต้องการ แต่เป็นคำตอบที่น่าสนใจ อย่างน้อยสำหรับฉัน
Sopalajo de Arrierez

2

หากต้องการเพิ่มคำตอบของ@ gooอย่างรวดเร็วคุณต้องตีความip linkหรือip link show INTERFACEดังนี้

นี่คือพอร์ตที่จัดการขึ้น แต่ลง:

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

ในคำอื่น ๆ ที่UPคุณสามารถเห็นบ่งชี้ว่าระบบมีการกำหนดค่าให้ลองและใช้ NIC สำหรับเครือข่าย NO-CARRIERที่นี่จะบอกคุณว่าปัญหาการป้องกันเครือข่ายจากการทำงานคือ

นี่เป็นพอร์ตที่จัดการลง (เลเยอร์ทางกายภาพคือ 'up' โดยทางเทคนิค - เป็น VM):

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

ในที่สุดพอร์ตนี้ทำงานได้ตามปกติ:

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

มันเป็นการดำเนินการUPที่LOWER_UPบ่งบอกว่าชั้นกายภาพทำงาน (เช่นมีผู้ให้บริการ) และครั้งที่สองUPยืนยัน (ในผล) ชั้น IP ขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.