একটি নেটওয়ার্ক কেবল / সংযোগকারীটির শারীরিক সংযুক্ত অবস্থা কীভাবে সনাক্ত করা যায়?


145

একটি লিনাক্স পরিবেশে, আমাকে তার সকেটে কোনও আরজে 45 সংযোগকারীটির শারীরিক সংযুক্ত বা সংযোগ বিচ্ছিন্ন অবস্থা সনাক্ত করতে হবে। কেবলমাত্র বেস স্ক্রিপ্টিং ব্যবহার করা।

অন্যান্য সাইটগুলিতে প্রস্তাবিত নিম্নলিখিত সমাধানগুলি এই উদ্দেশ্যে কাজ করে না:

  1. 'Ifconfig' ব্যবহার করা - যেহেতু একটি নেটওয়ার্ক কেবল কেবল সংযুক্ত থাকতে পারে তবে নেটওয়ার্কটি সঠিকভাবে কনফিগার করা হয়নি বা বর্তমানে আপ আপ নেই।
  2. একটি হোস্টকে পিং করুন - যেহেতু পণ্যটি একটি অজানা নেটওয়ার্ক কনফিগারেশন এবং অজানা হোস্ট ব্যবহার করে ল্যানের মধ্যে থাকবে।

/ প্রো ফাইল সিস্টেমে ব্যবহার করা যেতে পারে এমন কোনও রাজ্য নেই (সমস্ত কিছু সেখানে রয়েছে)?

লিনাক্স বিশ্বটি কীভাবে মনে করতে পারে যে উইন্ডোজ বুদ্বারের নিজস্ব সংস্করণ রয়েছে যা আইকন ট্রে থেকে পপ আপ করে তা বোঝায় যে আপনি কেবল নেটওয়ার্কের কেবল আনপ্লাগড করেছেন?


কেন্ট ফ্রেড্রিক এবং লোথার , আপনার উত্তর দুটিই আমার প্রয়োজন মেটাচ্ছে ... অনেক অনেক ধন্যবাদ! আমি কোনটি ব্যবহার করব ... আমি এখনও জানি না।

আমি অনুমান করি যে আমি আপনাকে উভয়কে সঠিক উত্তর হিসাবে রাখতে পারি না? এবং এটি সম্ভবত আপনার পক্ষে উপযুক্ত যে আমি একটি বেছে নিই। আমার ধারণা একটি মুদ্রা ফ্লিপ করবেন? আবারও, ধন্যবাদ!

উত্তর:


228

আপনি ভিতরে নোড তাকান করতে চান

/ Sys / শ্রেণী / নেট /

আমি আমার সাথে পরীক্ষা করেছি:

ওয়্যার প্লাগ ইন:

eth0/carrier:1
eth0/operstate:unknown

ওয়্যার সরানো:

eth0/carrier:0
eth0/operstate:down

ওয়্যার প্লাগ ইন আবার:

eth0/carrier:1
eth0/operstate:up

সাইড ট্রিক: একসাথে সহজেই সমস্ত সম্পত্তি সংগ্রহ করা:

grep "" eth0/* 

এটি জোড়গুলির একটি দুর্দান্ত তালিকা তৈরি করে key:value


8
মনে রাখবেন যে মার্কো নীচে বলেছেন এই মানগুলি জিজ্ঞাসা করার জন্য ইন্টারফেসটি অবশ্যই (কনফিগার করা না হলেও) আপ হতে হবে।
জেমি কিটসন

11
গ্রেপ "" eth0 / * এত মার্জিত এবং সহজ, ধন্যবাদ! :) -s সুইচ গ্রেপ দিয়ে ডিরেক্টরি সম্পর্কে অভিযোগ করবে না।
রে

2
আমি পছন্দ করি grep -H . eth0/*:: এই চাবুক এমটি লাইন এবং মুদ্রণ প্রবেশের নাম প্রতিটি লাইন অন্তর্ভুক্ত।
এফ। হাউরি

grep -s "" eth0/*
গ্রেপ

নোট করুন যে ইন্টারফেসটি আপ করতে হবে। নীচে মার্কোর উত্তর দেখুন। আমার সিস্টেমে, eth0 ডিফল্টরূপে সেট করা হয় না এবং আমার প্রোগ্রাম এলোমেলোভাবে এর জন্য একটি আইপি ঠিকানা উত্পন্ন করে। আমি ক্যারিয়ারের ক্যাটিং থেকে একটি "অবৈধ যুক্তি" ত্রুটি পেয়েছি
ভোকোজ্যাক্স

84

আপনি ইথিওল ব্যবহার করতে পারেন :

$ 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

শুধুমাত্র লিঙ্কের স্থিতি পেতে আপনি গ্রেপ ব্যবহার করতে পারেন:

$ sudo ethtool eth0 | grep Link
    Link detected: yes

আইপি লিঙ্ক | grep BROADCAST | কাট-ডি ':' -ফ 2 | আমি পড়ার সময়; প্রতিধ্বনি করুন $ i; ethtool $ i | গ্রেপ লিঙ্ক; সম্পন্ন
ব্রায়ান হান্ট

3
মনে রাখবেন যে মার্কো নীচে বলেছেন এই মানগুলি জিজ্ঞাসা করার জন্য ইন্টারফেসটি অবশ্যই (কনফিগার করা না হলেও) আপ হতে হবে।
জেমি কিটসন

এটা সত্যিই দারুন! আমার ইথারনেট উপলব্ধ কিনা তা পরীক্ষা করার একটি উপায় ছিল, যদি ইথারনেট সক্ষম করা থাকে, যদি ইথারনেট সংযুক্ত থাকে তবে সত্যিকারের কেবলটি সংযুক্ত ছিল কিনা তা যাচাই করার কোনও উপায় নেই। grep Linkএটা কি পারে. ধন্যবাদ!!
ᴛʜᴇᴘᴀᴛᴇʟ

এখানে কাজ করছে না। এইচপি হার্ডওয়্যারে উবুন্টু 16.04। অসমর্থিত ইন্টারফেসগুলি "কোনও লিঙ্ক নয়", এমনকি যখন জোর করে বলার জন্যও হয় up
0xF2

26

বাস্তব সময় লিংক স্থিতির পরিবর্তনগুলি পেতে 'আইপি মনিটর' ব্যবহার করুন।


3
আমার ক্ষেত্রে এটিই একমাত্র উত্তর যা কাজ করেছিল ... / sys / শ্রেণী / নেট / এথ0 / ক্যারিয়ারটি এখনও দেখায় 1যখন আমার কেবলটি সংযোগ বিচ্ছিন্ন করা হয়েছে যখন ip monitorকিছু কিছু দেখায়
টিম টিসডাল

এই পদ্ধতিতে কিছু প্রসারিত করার জন্য ধন্যবাদ জানানো যেতে পারে, পিটার। এমন কোনও উদাহরণের মতো যা কেবল প্লাগের অবস্থা জানার বিষয়ে মূল প্রশ্নের উত্তর দেয়।
সোপালাজো ডি অ্যারিরিজ

17

cat /sys/class/net/ethX এটি এখন পর্যন্ত সবচেয়ে সহজ পদ্ধতি।

ইন্টারফেসটি যদিও আপ হতে হবে অন্যথায় আপনি একটি অবৈধ যুক্তি ত্রুটি পাবেন।

তাই প্রথম:

ifconfig ethX up

তারপর:

cat /sys/class/net/ethX

4
"বিড়াল / সিএস / শ্রেণি / নেট / নীতি [এন] / অপারসেট" চেষ্টা করুন যেখানে [এন] এথ ডিভাইস নম্বর।
pmont

এটি কেবলমাত্র এথ [এন] চালু থাকলে তা আপনাকে জানায়, যদি এটি নিচে থাকে তবে কেবলটি সংযুক্ত কিনা তা আপনাকে জানায় না।
ব্রাইস

@ ব্রিস, প্রকৃতপক্ষে, আপনি ethX/carrier"ক্যারিয়ার" সনাক্ত করা হলে ফাইলটি 1 টি যাচাই করতে চান , যার অর্থ একটি তারের সংযুক্ত এবং ডেটা বহন করা হয় ...
অ্যালেক্সিস উইল্ক

অ্যান্ড্রয়েডে কেবলটি সংযোগ স্থাপন করছে কিনা তা পরীক্ষা করার জন্য এটি প্রসেস রানটাইম এক্সিকিউট কমান্ডগুলি ব্যবহার করে আমার পক্ষে কাজ করে।
আর্লিন

অথবা, ifconfig এথএক্সএক্স আপ করার পরে, ifconfig এথএক্স এবং রুনিংয়ের সন্ধান করুন।
ক্রেগ 65535

8

নিম্ন স্তরে, এই অনুষ্ঠানগুলি কোনও পোলিং ছাড়াই rtnetlink সকেট ব্যবহার করে ধরা যেতে পারে । পার্শ্ব দ্রষ্টব্য: আপনি যদি আরটিএনলিংক ব্যবহার করেন তবে আপনাকে ইউদেবের সাথে একসাথে কাজ করতে হবে, অথবা যখন ইউদেব একটি নতুন নেটওয়ার্ক ইন্টারফেসের নামকরণ করবে তখন আপনার প্রোগ্রামটি বিভ্রান্ত হতে পারে।

শেল স্ক্রিপ্টগুলির সাথে নেটওয়ার্ক কনফিগারেশনগুলি করার ক্ষেত্রে সমস্যাটি হ'ল শেল স্ক্রিপ্টগুলি ইভেন্ট হ্যান্ডলিংয়ের জন্য মারাত্মক (যেমন একটি নেটওয়ার্ক কেবল তার সাথে প্লাগ ইন করা এবং আউট করা)। আপনার যদি আরও শক্তিশালী কিছু প্রয়োজন হয় তবে আমার এনসিডি প্রোগ্রামিং ভাষা , নেটওয়ার্ক কনফিগারেশনের জন্য ডিজাইন করা একটি প্রোগ্রামিং ভাষা দেখুন a

উদাহরণস্বরূপ, একটি সাধারণ এনসিডি স্ক্রিপ্ট যা স্ট্যান্ডআউটে "তারের ইন" এবং "তারের আউট" প্রিন্ট করবে (ইন্টারফেসটি ইতিমধ্যে ধারণ করে ধরে নেওয়া হয়েছে):

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 ব্যবহার করে)

এনসিডির ধারণা হ'ল আপনি এটি নেটওয়ার্ক কনফিগার করার জন্য একচেটিয়াভাবে ব্যবহার করেন, তাই সাধারণত, কনফিগারেশন কমান্ডগুলির মধ্যে উপস্থিত হয় যেমন:

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");
}

গুরুত্বপূর্ণ অংশটি লক্ষণীয় হ'ল মৃত্যুদন্ড কার্যকর করার জন্য পুনরায় চাপ দেওয়ার অনুমতি দেওয়া হয় ; দ্বিতীয় উদাহরণে উদাহরণস্বরূপ, কেবলটি যদি টানা থাকে তবে আইপি ঠিকানাটি স্বয়ংক্রিয়ভাবে সরিয়ে ফেলা হবে।


4

এই ইভেন্টগুলি সনাক্ত করে এমন দুটি ডিমন রয়েছে:

ifplugd এবং নেটপ্লাগড


আমি ডিমন ifplugstatusথেকে সরঞ্জাম ব্যবহার করি ifplugd। আর্গুমেন্টের দরকার নেই, কেবল টাইপ করুন ifplugstatusএবং আপনি সমস্ত এনআইসিকে প্লাগড বা প্লাগযুক্ত হিসাবে পাবেন।
সোপালাজো ডি অ্যারিরিজ

3

বেশিরভাগ আধুনিক লিনাক্স ডিস্ট্রিবিউশনগুলি এর জন্য নেটওয়ার্ক ম্যানেজার ব্যবহার করে। ইভেন্টগুলি শোনার জন্য আপনি ডি-বাস ব্যবহার করতে পারেন।

আপনি যদি স্থিতিটি পরীক্ষা করতে একটি কমান্ড-লাইন সরঞ্জাম চান, আপনি mii-toolইথারনেটকে মনে রেখেছেন তবে আপনি এটি ব্যবহার করতে পারেন।


3
এমআই-সরঞ্জামটি ইথোল দ্বারা চালিত হয়েছে। মিআই-সরঞ্জামটি গিগ লিঙ্কগুলি সম্পর্কে অজানা।
জিমবি

এছাড়াও, বেশিরভাগ সার্ভারে ম্যানুয়ালি অ্যাডাপ্টার কনফিগার করা থাকে, যা এনএম দ্বারা উপেক্ষা করা হয়।
জিমবি

1
mii-toolইন্টারফেসটি ডাউন থাকাকালীন একমাত্র কমান্ডটি লিঙ্কের স্থিতিতে রিপোর্ট করতে পারে বলে মনে হচ্ছে।
donothingsuccessfully

2

আমি এই কমান্ডটি ব্যবহার করে একটি তারের সংযোগ রয়েছে কিনা তা পরীক্ষা করতে:

cd /sys/class/net/
grep "" eth0/operstate

ফল হলে উপরে বা নিচে নামবে। কখনও কখনও এটি অজানা দেখায়, তারপরে আপনার চেক করা দরকার

eth0/carrier

এটি 0 বা 1 দেখায়


2

কিছু নির্ভুলতা এবং কৌশল

  1. আমি সাধারণ ব্যবহারকারী হিসাবে এটি সমস্ত করি ( মূল নয় )

  2. থেকে ইনফোগুলি ধরুন dmesg

    সিস্টেমের বর্তমান অবস্থাdmesg জিজ্ঞাসা করার জন্য 1 ম জিনিসগুলির ব্যবহারটি হ'ল :

    dmesg | sed '/eth.*Link is/h;${x;p};d'
    

    যেমন কিছু উত্তর দিতে পারে:

    [936536.904154] e1000e: eth0 NIC Link is Down
    

    অথবা

    [936555.596870] e1000e: eth0 NIC Link is Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
    

    রাষ্ট্রের উপর নির্ভর করে, ব্যবহৃত হার্ডওয়্যার এবং ড্রাইভারের উপর নির্ভর করে বার্তাটি বিভিন্ন হতে পারে।

    নোটা: এটি লিখিতভাবে হতে পারে dmesg|grep eth.*Link.is|tail -n1তবে আমি ব্যবহার পছন্দ করি sed

    dmesg | sed '/eth.*Link is/h;${x;s/^.*Link is //;p};d'
    Up 100 Mbps Full Duplex, Flow Control: Rx/Tx
    
    dmesg | sed '/eth.*Link is/h;${x;s/^.*Link is //;p};d'
    Down
    
  3. /sysসিউডো ফাইল সিস্টেমের চারপাশে পরীক্ষা করুন

    অধীনে পড়া বা লিখন /sysআপনার সিস্টেমকে ভেঙে দিতে পারে, বিশেষত যদি রুট হিসাবে চালানো হয় ! আপনাকে সতর্ক করা হয়েছে ;-)

    এটি একটি পুলিং পদ্ধতি, আসল ইভেন্ট ট্র্যাকিং নয়

    cd /tmp
    grep -H . /sys/class/net/eth0/* 2>/dev/null >ethstate
    while ! read -t 1;do
        grep -H . /sys/class/net/eth0/* 2>/dev/null |
            diff -u ethstate - |
            tee >(patch -p0) |
            grep ^+
      done
    

    এর মতো কিছু রেন্ডার করতে পারে (একবার আপনি প্লাগ লাগিয়ে আবার প্লাগ করে রেখেছেন, নির্ভর করে):

    +++ -   2016-11-18 14:18:29.577094838 +0100
    +/sys/class/net/eth0/carrier:0
    +/sys/class/net/eth0/carrier_changes:9
    +/sys/class/net/eth0/duplex:unknown
    +/sys/class/net/eth0/operstate:down
    +/sys/class/net/eth0/speed:-1
    +++ -   2016-11-18 14:18:48.771581903 +0100
    +/sys/class/net/eth0/carrier:1
    +/sys/class/net/eth0/carrier_changes:10
    +/sys/class/net/eth0/duplex:full
    +/sys/class/net/eth0/operstate:up
    +/sys/class/net/eth0/speed:100
    

    ( Enterলুপ থেকে বেরিয়ে আসতে হিট )

    নোটা: এটি patchইনস্টল করা প্রয়োজন।

  4. ভাল, এই সম্পর্কে ইতিমধ্যে কিছু থাকতে হবে ...

    লিনাক্স ইনস্টলেশন উপর নির্ভর করে , আপনি যোগ করতে পারেন if-upএবংif-down স্ক্রিপ্ট ঘটনা এই ধরনের প্রতিক্রিয়া পাবে।

    উপর ডেবিয়ান ভিত্তিক (যেমন উবুন্টু ), আপনি আপনার স্ক্রিপ্ট সংরক্ষণ পারে

    /etc/network/if-down.d
    /etc/network/if-post-down.d
    /etc/network/if-pre-up.d
    /etc/network/if-up.d
    

    দেখতে man interfacesআরো infos জন্য।


এই বিষয়ে আপনার মন্তব্য এবং ইনপুট জন্য ধন্যবাদ। যদিও, আপনি বুঝতে পারেন যে এগুলি 'স্বয়ংক্রিয়' স্ক্রিপ্ট। পয়েন্ট ২-এ, যখন আপনি আউটপুট ' বা ' অন্য একটি আউটপুট বলবেন বা যখন আপনি " রাষ্ট্রের উপর নির্ভর করে বলবেন যে হার্ডওয়্যার এবং ব্যবহৃত ড্রাইভারের উপর নির্ভর করে বার্তা পরিবর্তিত হতে পারে " ... এটি সত্যই বড় সমস্যা issue আউটপুট অবশ্যই ধারাবাহিক হতে হবে বা উত্পাদন স্ক্রিপ্টগুলি বিরতি শুরু করবে। তবে এটি নির্বিশেষে ভাল তথ্য, আপনাকে ধন্যবাদ।

@ জ্যাচ আউটপুটটির অর্থ পরিবর্তিত হতে পারে: আপনি এর চেয়ে অন্য ড্রাইভার ব্যবহার করতে পারেনe1000 এবং ইভেনমেন্টের চেয়ে অন্য সময় ঘটতে পারে936555.596870 , তবে আপনি অবশ্যই দেখতে পাবেন NIC Link is
এফ হাউরি

2

আপনি ifconfig ব্যবহার করতে পারেন।

# ifconfig eth0 up
# ifconfig eth0

যদি এন্ট্রিটি চলমান দেখায়, ইন্টারফেসটি শারীরিকভাবে সংযুক্ত। ইন্টারফেসটি কনফিগার করা থাকলে এটি নির্বিশেষে প্রদর্শিত হবে।

এটি তথ্য পেতে আরও একটি উপায় /sys/class/net/eth0/operstate


তুমি আমার ঘন্টা বাঁচিয়েছো !!
এডিটিএ ভাল্লুর

1

খিলান লিনাক্সে। (অন্যান্য ডিস্ট্রোজে আমি নিশ্চিত নই) আপনি অপারস্টেটটি দেখতে পারেন। যদি সংযুক্ত বা ডাউন হয় তবে অপারসেটটি যদি না থাকে তবে এটি প্রদর্শিত হয়

/sys/class/net/(interface name here)/operstate
#you can also put watch 
watch -d -n -1 /sys/class/net/(interface name here)/operstate

1
tail -f /var/log/syslog | grep -E 'link (up|down)'

বা আমার জন্য দ্রুত পায়:

tail -f /var/log/syslog | grep 'link \(up\|down\)'

এটি সিসলগ ফাইলটি শুনবে।

ফলাফল (যদি সংযোগ বিচ্ছিন্ন হয় এবং 4 সেকেন্ড পরে আবার সংযুক্ত হয়):

Jan 31 13:21:09 user kernel: [19343.897157] r8169 0000:06:00.0 enp6s0: link down
Jan 31 13:21:13 user kernel: [19347.143506] r8169 0000:06:00.0 enp6s0: link up

1

কোনওভাবেই যদি আপনি ইথারনেট কেবলটি লিনাক্সে প্রশংসার পরে প্লাগ করে কিনা তা পরীক্ষা করতে চান: "ifconfig এথ0 ডাউন"। আমি একটি সমাধান খুঁজে পাচ্ছি: ইথিওল সরঞ্জামটি ব্যবহার করুন।

#ethtool -t eth0
The test result is PASS
The test extra info:
Register test  (offline)         0
Eeprom test    (offline)         0
Interrupt test (offline)         0
Loopback test  (offline)         0
Link test   (on/offline)         0

তারের সাথে সংযুক্ত থাকলে লিঙ্ক পরীক্ষা 0 হয়, অন্যথায় 1 হয়।


0

আমি আমার ওপেনউআরটি বর্ধিত ডিভাইসটিকে পুনরাবৃত্তকারী হিসাবে ব্যবহার করছিলাম (যা ভার্চুয়াল ইথারনেট এবং ওয়্যারলেস ল্যান ক্ষমতা যুক্ত করে) এবং দেখেছি যে / sys / শ্রেণী / নেট / এথ0 ক্যারিয়ার এবং অপস্টেট মানগুলি অবিশ্বস্ত। আমি /sys/class/net/eth0.1 এবং /sys/class/net/eth0.2 এর সাথে প্রায়শই খেলেছি (কমপক্ষে আমার সন্ধানে) কোনও শারীরিকভাবে প্লাগ ইন করা হয়েছে এবং এটির সাথে কথা বলার কোনও নির্ভরযোগ্য উপায় নেই ইথারনেট পোর্ট আমি অন্তত শেষ রিবুট / পাওয়ারন স্টেট থেকে কোনও প্লাগ ইন করা হয়েছিল কিনা তা সনাক্ত করার জন্য আমি কিছুটা অপরিশোধিত তবে আপাতদৃষ্টিতে নির্ভরযোগ্য উপায় আবিষ্কার করেছি (যা আমার ক্ষেত্রে আমার যেমন প্রয়োজন ঠিক তেমন কাজ করেছিল)।

ifconfig eth0 | grep -o 'RX packets:[0-9]*' | grep -o '[0-9]*'

সর্বশেষ পাওয়ারটি চালু বা পুনরায় বুট করার পরে আপনি কোনও কিছু প্লাগ ইন না করা থাকলে 0 এবং কিছু 0 প্লাগ ইন করা থাকলেও (যদিও এটি প্লাগ ইন করা হয়েছে এবং অপসারণ করা হলেও) পাবেন।

আশা করি এটি কমপক্ষে কাউকে সাহায্য করবে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.