可安全 cat 的设备
设备列表
[root@RK356X:/userdata/bin]# ls /dev/
block log ppp tty21 tty50 usbmon2
bus loop-control ptmx tty22 tty51 usbmon3
cec0 loop0 ptp0 tty23 tty52 usbmon4
char loop1 pts tty24 tty53 usbmon5
console loop2 ram0 tty25 tty54 usbmon6
cpu_dma_latency loop3 random tty26 tty55 usbmon7
crypto loop4 rfkill tty27 tty56 usbmon8
disk loop5 rga tty28 tty57 v4l
dri loop6 rtc tty29 tty58 v4l-subdev0
fb0 loop7 rtc0 tty3 tty59 v4l-subdev1
fd mali0 shm tty30 tty6 v4l-subdev2
full media0 snd tty31 tty60 vcs
fuse mem stderr tty32 tty61 vcs1
gpiochip0 memory_bandwidth stdin tty33 tty62 vcsa
gpiochip1 mmcblk0 stdout tty34 tty63 vcsa1
gpiochip2 mmcblk0boot0 tee0 tty35 tty7 vcsu
gpiochip3 mmcblk0boot1 teepriv0 tty36 tty8 vcsu1
gpiochip4 mmcblk0p1 tty tty37 tty9 vendor_storage
gpiochip5 mmcblk0p2 tty0 tty38 ttyFIQ0 vhci
hdmi_hdcp1x mmcblk0p3 tty1 tty39 ttyGS0 video0
hwrng mmcblk0p4 tty10 tty4 ttyS0 video1
i2c-0 mmcblk0p5 tty11 tty40 ttyS1 video2
i2c-1 mmcblk0p6 tty12 tty41 ttyS3 video3
i2c-2 mmcblk0p7 tty13 tty42 ttyS4 video4
i2c-4 mmcblk0p8 tty14 tty43 ttyS8 video5
i2c-6 mmcblk0p9 tty15 tty44 ubi_ctrl video6
i2c-7 mmcblk0rpmb tty16 tty45 uhid video7
iio:device0 mpp_service tty17 tty46 uinput video8
iio:device1 network_latency tty18 tty47 urandom watchdog
iio:device2 network_throughput tty19 tty48 usb-ffs watchdog0
input null tty2 tty49 usbmon0 zero
kmsg port tty20 tty5 usbmon1 zram0
直接 cat /dev 下的设备文件绝大多数都不安全,会导致终端挂起、乱码甚至系统崩溃。只有极少数特殊设备(如 /dev/null、/dev/zero、/dev/random、/dev/urandom)可以安全读取,但它们输出的也不是人类可读的信息。
下面我会按类别列出你 /dev 目录中的设备,并说明:
- 是否可以安全 cat(安全指不会挂起终端且输出为有限文本或可控)。
- 如果不能 cat,给出获取信息的正确方法(通过 /sys、/proc、专用工具或有限字节读取)。
✅ 可以安全 cat(或有限 cat)的设备¶
| 设备文件 | 可否 cat | 说明 / 命令 |
|---|---|---|
/dev/null |
✅ 安全 | cat /dev/null 无输出(空文件)。 |
/dev/zero |
✅ 安全 | cat /dev/zero 会一直输出 \0,会占满终端,要用 head -c 10 | xxd 限制。 |
/dev/random |
⚠️ 有限 | 阻塞随机数,head -c 16 | hexdump -C 可读有限字节,会耗尽熵池。 |
/dev/urandom |
⚠️ 有限 | 非阻塞随机数,head -c 16 | hexdump -C。 |
/dev/full |
✅ 安全 | cat /dev/full 立即返回“设备已满”错误(测试用)。 |
注意:/dev/rtc0 不能直接 cat(输出二进制时间数据,终端会乱码)。正确方法 → hwclock --show 或 cat /proc/driver/rtc。
❌ 绝对不能 cat 的设备(会挂起/乱码)¶
以下设备如果直接 cat,会持续输出无限二进制数据,导致终端失去响应。不要尝试。
1. 块设备(磁盘、分区)¶
/dev/mmcblk0*,/dev/ram0,/dev/loop*,/dev/zram0- 不要 cat。查看信息用:
2. 串口设备¶
/dev/ttyS*,/dev/ttyGS0,/dev/ttyFIQ0,/dev/tty[0-9]*- 不要 cat(会阻塞等待数据,或输出乱码)。查看配置用:
3. 输入设备¶
/dev/input/下的event*,mouse*等(你需要先ls /dev/input/)- 不要 cat(输出原始输入事件)。获取信息用:
4. 音频设备¶
/dev/snd/*(如pcmC0D0p,controlC0)- 不要 cat。查看信息用:
5. 视频设备¶
/dev/video0~/dev/video8,/dev/v4l-*- 不要 cat(会输出原始视频流)。查看信息用:
6. I2C / GPIO / IIO¶
/dev/i2c-*,/dev/gpiochip*,/dev/iio:device*- 不要 cat(会尝试读取原始数据,可能挂起)。正确使用:
7. 帧缓冲¶
/dev/fb0- 不要 cat 到终端(会输出大量二进制图像数据)。如果要保存原始帧缓冲: 查看信息用:
8. 内存设备¶
/dev/mem,/dev/kmem,/dev/port- 绝对不要 cat(直接暴露物理内存,危险且产生大量乱码)。查看内存信息用:
9. 其他杂项¶
/dev/watchdog*:不要 cat(会触发硬件看门狗复位系统)。/dev/kmsg:可以cat /dev/kmsg读取内核日志(会持续输出,按 Ctrl+C 停止,安全!)。通常用dmesg更好。/dev/console:不要 cat(系统控制台,会干扰终端)。
📌 针对你列表中的特殊设备¶
| 设备 | 安全 cat? | 正确信息获取方式 |
|---|---|---|
/dev/rga |
❌ 否 | 用户态调用 RGA 库,无直接读取。 |
/dev/mali0 |
❌ 否 | GPU 设备,查看驱动:cat /sys/kernel/debug/mali/status |
/dev/mpp_service |
❌ 否 | 多媒体服务节点,无 cat。 |
/dev/cec0 |
❌ 否 | 查看 CEC 状态:echo "scan" > /sys/class/cec/cec0/cec |
/dev/tee0 |
❌ 否 | TEE 安全世界节点。 |
/dev/vendor_storage |
❌ 否 | 厂商专用分区,用 rockchip_vendor_storage 工具。 |
/dev/usbmon* |
⚠️ 有限 | 可 cat /dev/usbmon0 但输出 USB 总线原始数据流(乱码)。用 tcpdump -i usbmon0 抓包。 |
/dev/kmsg |
✅ 可 | cat /dev/kmsg(按 Ctrl+C 退出)或 dmesg -w。 |
/dev/urandom |
✅ 可(有限) | head -c 16 /dev/urandom \| hexdump -C |
/dev/random |
✅ 可(有限) | 同上,但可能阻塞。 |
🛠️ 通用安全读取法(当你不确定时)¶
如果一定要尝试读取一个字符设备(非块设备),请使用:
-timeout 1 最多读 1 秒。
- head -c 64 只取 64 字节。
- hexdump -C 以十六进制显示,避免终端乱码。
如果上述命令输出全是 \0 或乱码,说明该设备不支持文本读取,应立即停止。
📖 总结¶
- 没有设备可以直接
cat得到人类可读的配置信息(除了/sys和/proc中的虚拟文件)。 - 正确做法:针对硬件类型使用专用命令(
i2cdetect、v4l2-ctl、aplay、blkid等)或读取/sys//proc下的对应文件。 - 你列出的
/dev下设备文件几乎都不适合cat,请按照上述分类使用替代方法。
如果你对某个具体设备(比如 iio:device0 或 rga)想深入获取状态信息,请告诉我设备名称,我可以给出更精确的命令。