sysfs
डिवाइस फ़ाइल के लिए यह जानकारी प्राप्त करने के लिए , पहले ls -l
, उदाहरण के लिए आउटपुट को देखकर प्रमुख / मामूली संख्या निर्धारित करें
$ ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Apr 17 12:26 /dev/sda
8, 0
हमें बताता है कि प्रमुख संख्या है 8
और मामूली है 0
। b
सूची के शुरू में भी हमें बताता है कि यह एक ब्लॉक युक्ति है। अन्य उपकरणों c
में शुरुआत में चरित्र उपकरण हो सकता है ।
यदि आप /sys/dev
नीचे देखते हैं, तो आप देखेंगे कि दो निर्देशिकाएं हैं। एक ने फोन किया block
और एक ने फोन किया char
। यहां नो-ब्रेनर यह है कि ये क्रमशः ब्लॉक और चरित्र उपकरणों के लिए हैं। प्रत्येक उपकरण तब अपनी प्रमुख / छोटी संख्या द्वारा सुलभ होता है यह निर्देशिका है। यदि डिवाइस के लिए कोई ड्राइवर उपलब्ध है, तो यह driver
इस या device
उप-निर्देशिका में लिंक के लक्ष्य को पढ़कर पाया जा सकता है । जैसे, मेरे लिए /dev/sda
मैं बस कर सकता हूं:
$ readlink /sys/dev/block/8\:0/device/driver
../../../../../../../bus/scsi/drivers/sd
इससे पता चलता है कि sd
डिवाइस के लिए ड्राइवर का उपयोग किया जाता है। यदि आप अनिश्चित हैं यदि डिवाइस एक ब्लॉक या कैरेक्टर डिवाइस है, तो शेल में आप बस इस हिस्से को ए से बदल सकते हैं *
। यह भी काम करता है:
$ readlink /sys/dev/*/8\:0/device/driver
../../../../../../../bus/scsi/drivers/sd
ब्लॉक डिवाइस को /sys/block
या तो उनके नाम के माध्यम से या तो सीधे एक्सेस किया जा सकता है /sys/class/block
। उदाहरण के लिए:
$ readlink /sys/block/sda/device/driver
../../../../../../../bus/scsi/drivers/sd
ध्यान दें कि /sys
कर्नेल कॉन्फ़िगरेशन के आधार पर विभिन्न निर्देशिकाओं का अस्तित्व बदल सकता है। इसके अलावा सभी उपकरणों में एक device
सबफ़ोल्डर नहीं होता है। उदाहरण के लिए, यह विभाजन डिवाइस फ़ाइलों की तरह है /dev/sda1
। यहां आपको पूरे डिस्क के लिए डिवाइस का उपयोग करना होगा (दुर्भाग्य से इसके लिए कोई sys
लिंक नहीं हैं )।
एक अंतिम चीज जो करना उपयोगी हो सकता है वह यह है कि सभी उपकरणों के लिए ड्राइवरों को सूचीबद्ध करना, जिनके लिए वे उपलब्ध हैं। इसके लिए आप सभी निर्देशिकाओं का चयन करने के लिए ग्लब्स का उपयोग कर सकते हैं जिसमें ड्राइवर लिंक मौजूद हैं। उदाहरण के लिए:
$ ls -l /sys/dev/*/*/device/driver ls -l /sys/dev/*/*/driver
ls: cannot access ls: No such file or directory
lrwxrwxrwx 1 root root 0 Apr 17 12:27 /sys/dev/block/11:0/device/driver -> ../../../../../../../bus/scsi/drivers/sr
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/block/8:0/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/block/8:16/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/block/8:32/device/driver -> ../../../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:0/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:1024/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:128/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:256/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:384/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:512/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:513/driver -> ../../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:514/driver -> ../../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:640/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:643/driver -> ../../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:768/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:896/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/21:0/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/21:1/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:27 /sys/dev/char/21:2/device/driver -> ../../../../../../../bus/scsi/drivers/sr
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/21:3/device/driver -> ../../../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/250:0/device/driver -> ../../../../../../../bus/hid/drivers/hid-generic
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/250:1/device/driver -> ../../../../../../../bus/hid/drivers/hid-generic
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/250:2/device/driver -> ../../../../../../../bus/hid/drivers/hid-generic
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/252:0/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/252:1/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:27 /sys/dev/char/252:2/device/driver -> ../../../../../../../bus/scsi/drivers/sr
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/252:3/device/driver -> ../../../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/254:0/device/driver -> ../../../bus/pnp/drivers/rtc_cmos
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/29:0/device/driver -> ../../../bus/platform/drivers/simple-framebuffer
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/4:64/device/driver -> ../../../bus/pnp/drivers/serial
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/4:65/device/driver -> ../../../bus/platform/drivers/serial8250
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/4:66/device/driver -> ../../../bus/platform/drivers/serial8250
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/4:67/device/driver -> ../../../bus/platform/drivers/serial8250
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/6:0/device/driver -> ../../../bus/pnp/drivers/parport_pc
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/99:0/device/driver -> ../../../bus/pnp/drivers/parport_pc
अंत में, प्रश्न को थोड़ा सा /sys
मोड़ने के लिए, मैं एक और व्यापक ट्रिक जोड़ने के लिए एक बहुत व्यापक परिप्रेक्ष्य प्राप्त करूंगा, जिस पर ड्राइवरों द्वारा किस डिवाइस का उपयोग किया जा रहा है (हालांकि जरूरी नहीं कि वे डिवाइस फ़ाइल के साथ हों):
find /sys/bus/*/drivers/* -maxdepth 1 -lname '*devices*' -ls
अपडेट करें
के आउटपुट पर अधिक बारीकी से देखते हुए udevadm
, यह कैनोनिकल /sys
डायरेक्टरी ढूंढकर काम करना प्रतीत होता है (जैसा कि आपको मिलेगा अगर आपने ऊपर दिए गए प्रमुख / लघु निर्देशिकाओं को अवगत कराया है), तो डायरेक्टरी ट्री पर अपने तरीके से काम करना, किसी भी जानकारी को प्रिंट करना जो इसे पाता है। इस तरह से आपको मूल उपकरणों और उनके द्वारा उपयोग किए जाने वाले किसी भी ड्राइवर के बारे में जानकारी मिलती है।
इसके साथ प्रयोग करने के लिए मैंने नीचे दी गई स्क्रिप्ट को लिखा है ताकि डायरेक्टरी ट्री पर चल सकें और प्रत्येक प्रासंगिक स्तर पर जानकारी प्रदर्शित कर सकें। udev
प्रत्येक स्तर पर पठनीय फ़ाइलों की तलाश करने लगता है, उनके नाम और सामग्री को इसमें शामिल किया जाता है ATTRS
। ऐसा करने के बजाय मैं uevent
प्रत्येक स्तर पर फ़ाइलों की सामग्री प्रदर्शित करता हूं (प्रतीत होता है कि इस की उपस्थिति एक उपनिर्देशिका के बजाय एक अलग स्तर को परिभाषित करती है)। मैं किसी भी सबसिस्टम लिंक का बेसनेम भी दिखाता हूं जो मुझे लगता है और यह दिखाता है कि डिवाइस इस पदानुक्रम में कैसे फिट बैठता है। udevadm
समान जानकारी प्रदर्शित नहीं करता है, इसलिए यह एक अच्छा पूरक उपकरण है। PCI
यदि आप अन्य उपकरणों के आउटपुट lshw
को उच्च स्तर के उपकरणों की तरह मैच करना चाहते हैं, तो पैरेंट डिवाइस की जानकारी (उदाहरण के लिए जानकारी) भी उपयोगी है।
#!/bin/bash
dev=$(readlink -m $1)
# test for block/character device
if [ -b "$dev" ]; then
mode=block
elif [ -c "$dev" ]; then
mode=char
else
echo "$dev is not a device file" >&2
exit 1
fi
# stat outputs major/minor in hex, convert to decimal
data=( $(stat -c '%t %T' $dev) ) || exit 2
major=$(( 0x${data[0]} ))
minor=$(( 0x${data[1]} ))
echo -e "Given device: $1"
echo -e "Canonical device: $dev"
echo -e "Major: $major"
echo -e "Minor: $minor\n"
# sometimes nodes have been created for devices that are not present
dir=$(readlink -f /sys/dev/$mode/$major\:$minor)
if ! [ -e "$dir" ]; then
echo "No /sys entry for $dev" >&2
exit 3
fi
# walk up the /sys hierarchy one directory at a time
# stop when there are three levels left
while [[ $dir == /*/*/* ]]; do
# it seems the directory is only of interest if there is a 'uevent' file
if [ -e "$dir/uevent" ]; then
echo "$dir:"
echo " Uevent:"
sed 's/^/ /' "$dir/uevent"
# check for subsystem link
if [ -d "$dir/subsystem" ]; then
subsystem=$(readlink -f "$dir/subsystem")
echo -e "\n Subsystem:\n ${subsystem##*/}"
fi
echo
fi
# strip a subdirectory
dir=${dir%/*}
done
lsmod
, का कुछ संयोजन ?/proc/modules
modinfo