ইন্টারফেস eth0 আপ হয়েছে কিনা তা পরীক্ষা করুন (কনফিগার করা হয়েছে)


30

আমার eth0কনফিগার করা আছে কিনা তা নিয়ে আমাকে স্ক্রিপ্ট পরীক্ষা করতে হবে। যদি তা হয়, স্ক্রিপ্ট কিছুই করবে না। অন্যথায় এটি শুরু হবে wlan0। (আমি উভয়ই চাই না eth0এবং wlan0একই সাথে উঠতে পারি)।

চেক করার সহজতম উপায়টি কী হবে, eth0ইতিমধ্যে শেষ হয়েছে কিনা ?

আমি ডেবিয়ান হুইজি ব্যবহার করছি

ব্যাখ্যা:

আমি কেবল তার মধ্যে eth0প্লাগ ইন করা আছে তা নয়, বরং ইন্টারফেসটি কনফিগার করা আছে তা পরীক্ষা করতে চাই (যেমন এটির কোনও স্থির আইপি সেট রয়েছে, অথবা এটি একটি ডিএইচসিপি আইপি পেয়েছে)। যদি কেবল প্লাগ ইন থাকে তবে eth0সঠিকভাবে কনফিগার করা না থাকলে আমি শুরু করতে চাইwlan0


2
আমি কী বলব সে সম্পর্কে আমি নিশ্চিত নই তবে cat /sys/class/net/ | grep eth0আপনাকে ইজিলি পার্সেবল ডেটা দেওয়া উচিত। আপনিও করতে পারেনsudo ethtool eth0 | grep Link
কিউই

উত্তর:


45

আপনি এটি অনেক উপায়ে করতে পারেন। এখানে একটি উদাহরণ:

$ cat /sys/class/net/eth0/operstate
up

5
দুর্ভাগ্যক্রমে, এটি গ্যারান্টি দেয় না যে ইন্টারফেসটি পুরোপুরি কনফিগার হয়েছে। আপনি /sys/class/net/eth0/carrierসিগন্যালটি পরীক্ষা করতে পারেন , তবে এটিতে এখনও কোনও ডিএইচসিপি ইজারা নাও থাকতে পারে ইত্যাদি ইত্যাদি
অরডভেন

7
ip a show ethX up

যদি কিছুই প্রদর্শিত না হয় তবে আপনার ইন্টারফেসটি ডাউন রয়েছে


এই পদ্ধতি: "আইপ শো এথএক্স আপ" এবং আউটপুট চেক করা যথেষ্ট নয়
জোশুয়া ক্লেটন

5
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing 

সুতরাং এখানে আমরা grepসর্বব্যাপী ipসরঞ্জামটির stdoutএকটি রেখার জন্য যা আমাদের আগ্রহের ইন্টারফেস এবং "স্টেট ইউপি" বাক্যাংশ উভয়ই রাখে (ন্যায়বিচারের চেয়ে আরও কিছুটা সুনির্দিষ্টতার প্রয়োজনীয়তার দিকে নির্দেশ করার জন্য @ লিকেনস্টেইনকে ধন্যবাদ UP)। আমরা যুক্তিটিকে aসংক্ষিপ্ত ফর্ম হিসাবে ব্যবহার করি addressএবং এটি সিস্টেমে সমস্ত কনফিগার করা নেটওয়ার্ক কার্ডের তালিকা পাওয়ার জন্য যথেষ্ট।

ব্যবহার করার একটি সুবিধা ipহ'ল এটি সত্যই সর্বত্র পাওয়া উচিত - উদাহরণস্বরূপ, আমি সাধারণত আমার অ্যান্ড্রয়েড ফোনের নেটওয়ার্ক ডিভাইসগুলি কনফিগার করি।

:colonsআংশিক মিল এড়াতে ব্যবহার করা হয় - এই ভাবে আমরা জন্য একটি ম্যাচ গ্যারান্টি eth0হিসাবে একটি অন্যথায় সম্ভব বিরোধিতা someothereth0বা eth007

আমাকে সঠিকতার দিকে ঠেলে দেওয়ার এবং আমার সমাধানের ব্যাখ্যা দেওয়ার জন্য @ রাফেলআহরেন্সকে ধন্যবাদ জানাই।

সম্পাদনা করুন:

বর্তমান প্রয়োজনীয়তাগুলি পরিচালনা করতে আপনি করতে পারেন:

ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'

উপরে শুধুমাত্র কোন CIDR IP ঠিকানা প্রিন্ট হবে যদি আপনার টার্গেট $ifহল ইউপি, প্লাগ ইন, এবং এক হয়েছে। আইপিভি 6-এর জন্য সমাধানটি কেবলমাত্র ছোটখাটো পরিবর্তন সহ সাধারণ।

আপনি যদি না চান তবে sedআপনি অন্যের সাথে একই রকম ফলাফল অর্জন করতে এবং প্রথমটিতে |pipe ... grepএকটি -Aপ্রসঙ্গ বিকল্প যুক্ত করতে grepপারেন - তবে আমি পছন্দ করি sed


1
আপনি কি করছেন তা আপনার ব্যাখ্যা করা উচিত। যাতে প্রত্যেকে আপনার উত্তরটি থেকে উপকৃত হতে পারে।
রাফেল আহরেন্স

5
এটি অপর্যাপ্ত। আউটপুট এছাড়াও রয়েছে UPযদি ডিভাইস সেট আপ, কিন্তু কোন তারের সাথে সংযুক্ত হল: 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000। এছাড়াও আপনি মিথ্যা positives এড়াতে ডিভাইস নির্দিষ্ট করতে পারেন: ip addr show dev eth0
লেকেনস্টেইন

0

অন্যান্য পদ্ধতিগুলি কাজ করে না, তবে এটি একটি (কমপক্ষে উবুন্টুতে) করে:

while true; do
    ip route | grep "linkdown"
    if [ $? -eq 0 ]; then
        sleep 1  # network not yet up
    else
        break   # network up
    fi
done

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