จะตรวจสอบได้อย่างไรว่ามีการใช้กฎ udev หรือไม่


16

ฉันพยายามทำความคุ้นเคยกับ udev ภายใต้ Ubuntu 13.10

นี่เป็นกฎง่ายๆ 95.usbbackup.rules แรกของฉัน:

ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"

และนี่คือสคริปต์ (ซึ่งได้รับการ chmodded + x) my_backup.sh:

#!/bin/bash
touch /tmp/test

ไม่มีอะไรเกิดขึ้นเมื่อฉันเสียบไดรฟ์ภายนอก ฉันจะตรวจสอบ (บันทึกคำสั่งทุกสิ่ง) ได้อย่างไรหากกฎเริ่มทำงาน

ขอบคุณมาก


2
SUBSYSTEMS=="usb"ฉันคิดว่าคุณหมายถึง Ie double ==ซึ่งการทดสอบเพื่อความเท่าเทียมกันมากกว่าเดี่ยว=ที่กำหนดค่าให้กับคีย์
Lqueryvg

คำตอบ:


5

ฉันค่อนข้างมั่นใจว่ามันควรจะใช้ได้ คุณโหลดกฎ udev ของคุณใหม่หลังจากแก้ไขกฎหรือไม่

udevadm control --reload-rules && udevadm trigger ในฐานะที่เป็นราก


ฉันสร้างกฎให้แคบลง: KERNEL == "sdb" ซึ่งใช้งานได้ udev ปฏิบัติตามกฎที่ระบุฮาร์ดแวร์บางตัวเท่านั้นหรือไม่?
pouzzler

ไม่ลองKERNEL!="sdz*"และคุณควรได้รับทุกอย่าง (ยกเว้น sdz [1-9])
Redsandro

5
นี่ไม่ได้ตอบคำถามจริงๆ คุณจะรู้ได้อย่างไรว่ากฎนั้นเริ่มขึ้นแล้ว
DanielSank

1
คุณรู้เพราะสคริปต์ทำงาน คุณสามารถทำให้มันเขียนลงใน logfile ยังudevadm monitor
Redsandro

2

คุณสามารถสั่งให้รูทแบบนี้:

จอภาพ udevadm

มันจะแสดงเมื่อกฎถูกไล่ออก


11
udevadm monitorเพียงแสดงเหตุการณ์ udev แต่ไม่ใช่ถ้ากฎที่สอดคล้องกันเริ่มทำงาน อย่างไรก็ตามคุณสามารถค้นหาเหตุการณ์ที่ควรกระตุ้นกฎ แต่คุณไม่ทราบว่ากฎของคุณใช้งานได้หรือไม่
F.Raab

2

ฉันใช้เคอร์เนล 3.0.35 แต่สิ่งต่อไปนี้ใช้ได้สำหรับฉัน

ในการรับเส้นทางสำหรับอุปกรณ์คุณสามารถทำสิ่งนี้:

udevadm info --name /dev/sda1 --query all

คุณจะได้รับข้อมูลมากกว่าที่คุณต้องการ แต่คุณสนใจ DEVPATH จากนั้นเพื่อดูว่ามีการดำเนินการกฎใดของ udev บ้าง:

udevadm test DEVPATH

ฉันไม่คิดว่าสิ่งนี้จะดำเนินการตามกฎจริง ๆ เอกสารระบุว่า "จำลอง" เหตุการณ์สำหรับอุปกรณ์ที่กำหนด หากต้องการข้อมูลเพิ่มเติมให้ตรวจสอบหน้าคนนี้: https://www.freedesktop.org/software/systemd/man/udevadm.html


1

ด้วย udev / systemd รุ่น 241 และที่คล้ายกันเป็น root:

udevadm control --log-priority=debug
journalctl -f

หรือเพื่อให้ถาวรอีกครั้งในฐานะ root:

vi /etc/udev/udevd.conf
systemctl restart systemd-udevd
journalctl -f

PS: คำตอบที่ผิดบ่อยที่สุด แต่ IMHO ดูเหมือนว่า

udevadm -d test / devices / where / is / my / device | & less

... แต่นี่มีปัญหามากมาย คนหลัก:

  • where/is/my/device? น่าเบื่อซับซ้อนและผิดพลาดได้ง่าย

  • การเปรียบเทียบคำตอบเก่ากับผลลัพธ์ udev รุ่น 241 ล่าสุดudevadm testดูเหมือนว่าจะแสดงข้อมูลน้อยลงกว่าที่เคยเป็น

  • udevadm -d test เป็นเพียงการจำลอง ! ทุกครั้งที่มีการเตือน:

    โปรแกรมนี้ใช้สำหรับการดีบักเท่านั้นไม่ได้รันโปรแกรมใด ๆ ที่ระบุโดยคีย์ RUN มันอาจแสดงผลลัพธ์ที่ไม่ถูกต้องเนื่องจากค่าบางอย่างอาจแตกต่างกันหรือไม่พร้อมใช้งานในการจำลองการทำงาน

udevadm test มีไว้สำหรับการพัฒนากฎใหม่ไม่ใช่สำหรับการแก้ไขปัญหากฎที่ขาดหายไปกฎที่ขาดหายไปหรือแทนที่ได้


0

ฉันมีปัญหาเดียวกันกับ Raspberry Pi 3 B + ฉันพยายามเรียกใช้สคริปต์ในการแทรกอุปกรณ์เก็บข้อมูล USB กฎไม่ได้รับการบันทึกใน syslog ดังนั้นจึงเป็นเรื่องยากที่จะเข้าใจว่ากฎใดใช้ได้ผลหรือกฎใดล้มเหลว

ดังนั้นฉันทำต่อไปนี้:

  1. ฉันสร้างไฟล์กฎของฉันใน /etc/udev/rules.d/100-myrule.rules
  2. จากนั้นฉันก็รันคำสั่ง sudo /etc/init.d/udev restart

และเมื่อฉันตรวจสอบมันทำงานได้

ข้อมูลบางส่วนที่อาจมีหรือไม่มีประโยชน์คือระบบไฟล์นั้นจะอ่านได้อย่างเดียวสำหรับ udev จนกว่าคำสั่งในขั้นตอนที่ 2 จะถูกดำเนินการ


0

udevadm test $(udevadm info --query=path --name=device_name)ควรบอกให้คุณทราบว่าคำสั่งใดที่จะถูกดำเนินการบนปลั๊กอินของอุปกรณ์โดยอ้างถึงudevกฎที่เกี่ยวข้อง ตัวอย่างเช่น

# udevadm test /block/sdd
...
udev_rules_apply_to_event: PROGRAM '/sbin/multipath -c /dev/sdd' /lib/udev/rules.d/40-multipath.rules:11
...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.