The first step of testing a udev rule is to determine the actual device you want to test. Get the info for the /dev/thing and find the real /device/path/…. (note, make sure you’re not in a “looking at parent” section — you want the one all the way at the top)
[lisa@linuxhost dev]# udevadm info -a /dev/ttyUSB0 | more ... looking at device '/devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.0/ttyUSB0/tty/ttyUSB0': ...
Once you have the device, use udevadm in test mode and you will see the results from all of your udev rules. Including group & permission mask applied to the device.
[lisa@linuxhost dev]# udevadm test /devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.0/ttyUSB0/tty/ttyUSB0 | more calling: test version 238 Load module index Parsed configuration file /usr/lib/systemd/network/99-default.link ... 47437 strings (385590 bytes), 43385 de-duplicated (347383 bytes), 4053 trie nodes used PROGRAM 'usb_modeswitch --symlink-name /devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.0/ttyUSB0/tty/ttyUSB0 10c4 8a2a ' /usr/lib/udev/rules.d/40-usb_modeswitch.rules:10 starting 'usb_modeswitch --symlink-name /devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.0/ttyUSB0/tty/ttyUSB0 10c4 8a2a ' Process 'usb_modeswitch --symlink-name /devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.0/ttyUSB0/tty/ttyUSB0 10c4 8a2a ' succeeded. GROUP 18 /usr/lib/udev/rules.d/50-udev-default.rules:25 IMPORT builtin 'hwdb' /usr/lib/udev/rules.d/60-serial.rules:7 IMPORT builtin 'usb_id' /usr/lib/udev/rules.d/60-serial.rules:8 /sys/devices/pci0000:00/0000:00:02.0/usb2/2-1/2-1:1.0: if_class 255 protocol 0 IMPORT builtin 'hwdb' /usr/lib/udev/rules.d/60-serial.rules:8 IMPORT builtin 'path_id' /usr/lib/udev/rules.d/60-serial.rules:15 LINK 'serial/by-path/pci-0000:00:02.0-usb-0:1:1.0-port0' /usr/lib/udev/rules.d/60-serial.rules:17 IMPORT builtin skip 'usb_id' /usr/lib/udev/rules.d/60-serial.rules:19 LINK 'serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_90F0016B-if00-port0' /usr/lib/udev/rules.d/60-serial.rules:24 GROUP 18 /etc/udev/rules.d/99-server.rules:5 MODE 0666 /etc/udev/rules.d/99-server.rules:5 LINK 'ttyUSB-5' /etc/udev/rules.d/99-server.rules:5 handling device node '/dev/ttyUSB0', devnum=c188:0, mode=0666, uid=0, gid=18 preserve permissions /dev/ttyUSB0, 020666, uid=0, gid=18 preserve already existing symlink '/dev/char/188:0' to '../ttyUSB0' found 'c188:0' claiming '/run/udev/links/\x2fserial\x2fby-id\x2fusb-Silicon_Labs_HubZ_Smart_Home_Controller_90F0016B-if00-port0' creating link '/dev/serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_90F0016B-if00-port0' to '/dev/ttyUSB0' preserve already existing symlink '/dev/serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_90F0016B-if00-port0' to '../../ttyUSB0' found 'c188:0' claiming '/run/udev/links/\x2fserial\x2fby-path\x2fpci-0000:00:02.0-usb-0:1:1.0-port0' creating link '/dev/serial/by-path/pci-0000:00:02.0-usb-0:1:1.0-port0' to '/dev/ttyUSB0' preserve already existing symlink '/dev/serial/by-path/pci-0000:00:02.0-usb-0:1:1.0-port0' to '../../ttyUSB0' found 'c188:0' claiming '/run/udev/links/\x2fttyUSB-5' creating link '/dev/ttyUSB-5' to '/dev/ttyUSB0' preserve already existing symlink '/dev/ttyUSB-5' to 'ttyUSB0' ...
Or as a one-liner:
udevadm test `udevadm info -a /dev/ttyUSB0 | grep "looking at device" | sed "s/looking at device '//" | sed "s/'://"`