আপনি যা জিজ্ঞাসা করছেন তা আমি যথেষ্ট নিশ্চিত নই। আপনি বেশ কয়েকবার 'বন্দর' উল্লেখ করেছেন, তবে তারপরে আপনার উদাহরণে আপনি উত্তরটি বলেছিলেন /dev/ttyUSB0
, এটি কোনও ডিভাইস ডেথ পাথ, কোনও বন্দর নয়। সুতরাং এই উত্তরটি প্রতিটি ডিভাইসের জন্য ডেথ পাথ সন্ধান করা।
নীচে একটি দ্রুত এবং ময়লা স্ক্রিপ্ট যা ডিভাইসের মাধ্যমে পদচারনা হয় /sys
একটি সঙ্গে USB ডিভাইসের জন্য খুঁজছেন ID_SERIAL
অ্যাট্রিবিউট। সাধারণত কেবল আসল ইউএসবি ডিভাইসগুলিতেই এই বৈশিষ্ট্যটি থাকবে এবং তাই আমরা এটি দিয়ে ফিল্টার করতে পারি। যদি আমরা না করি তবে আপনি তালিকায় অনেকগুলি জিনিস দেখতে পাবেন যা শারীরিক ডিভাইস নয়।
#!/bin/bash
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
(
syspath="${sysdevpath%/dev}"
devname="$(udevadm info -q name -p $syspath)"
[[ "$devname" == "bus/"* ]] && continue
eval "$(udevadm info -q property --export -p $syspath)"
[[ -z "$ID_SERIAL" ]] && continue
echo "/dev/$devname - $ID_SERIAL"
)
done
আমার সিস্টেমে এটির ফলাফল নিম্নলিখিত:
/dev/ttyACM0 - LG_Electronics_Inc._LGE_Android_Phone_VS930_4G-991c470
/dev/sdb - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0
/dev/sdb1 - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0
/dev/input/event5 - Logitech_USB_Receiver
/dev/input/mouse1 - Logitech_USB_Receiver
/dev/input/event2 - Razer_Razer_Diamondback_3G
/dev/input/mouse0 - Razer_Razer_Diamondback_3G
/dev/input/event3 - Logitech_HID_compliant_keyboard
/dev/input/event4 - Logitech_HID_compliant_keyboard
ব্যাখ্যা:
find /sys/bus/usb/devices/usb*/ -name dev
যে ডিভাইসগুলিতে প্রদর্শিত হবে তাদের ডিরেক্টরিতে /dev
একটি dev
ফাইল রয়েছে /sys
। সুতরাং আমরা এই মানদণ্ডের সাথে মেলে ডিরেক্টরিগুলি অনুসন্ধান করি।
syspath="${sysdevpath%/dev}"
আমরা ডিরেক্টরি পথ চাই, তাই আমরা সরিয়ে ফেলা /dev
।
devname="$(udevadm info -q name -p $syspath)"
এটি আমাদের ডিভাইসের /dev
সাথে সম্পর্কিত যে পথটি দেয় /sys
।
[[ "$devname" == "bus/"* ]] && continue
এটি প্রকৃত ডিভাইস নয় এমন জিনিসগুলি ফিল্টার করে। অন্যথায় আপনি ইউএসবি কন্ট্রোলার এবং হাবের মতো জিনিস পাবেন।
eval "$(udevadm info -q property --export -p $syspath)"
udevadm info -q property --export
কমান্ড তালিকা একটি বিন্যাসে সমস্ত ডিভাইসের বৈশিষ্ট্য যে ভেরিয়েবল মধ্যে শেল দ্বারা পার্স করা যাবে না। সুতরাং আমরা কেবল eval
এই উপর কল । কোডটি প্রথম বন্ধনে আবদ্ধ করার কারণেই আমরা এই জন্য সাবস্কেল ব্যবহার করি এবং প্রতিটি লুপে ভেরিয়েবলগুলি মুছা যায়।
[[ -z "$ID_SERIAL" ]] && continue
প্রকৃত ডিভাইস নয় এমন জিনিসগুলির আরও ফিল্টারিং।
echo "/dev/$devname - $ID_SERIAL"
আমি আশা করি আপনি জানেন যে এই লাইনটি কি করে :-)
/dev
প্রবেশের সাথে সংযুক্ত করতে চানlsusb
? অথবা আপনি/dev
যে সমস্ত ডিভাইসটি কোনও শারীরিক ইউএসবি ডিভাইস থেকে প্রাপ্ত তা তালিকার জন্য চান ? নাকি আপনি চাইছেনls /dev/ttyUSB*
?