/sys 文件内的 Grep 不返回任何内容

/sys 文件内的 Grep 不返回任何内容

我想在目录中搜索字符串/sys/class/tty/*。所以我尝试了:

# grep -rn path -e pattern

但它什么也没返回。例子:

# cat /sys/class/tty/ttySTM0/iomem_base 
0x40010000

# ls -l /sys/class/tty/ttySTM0/iomem_base 
-r--r----- 1 root root 4096 Jan 17 10:37 /sys/class/tty/ttySTM0/iomem_base

# grep -rn /sys/class/tty/ -e 0x40010000
#

如果我在另一个目录中使用相同的语法,它似乎可以工作:

# grep -rn /opt -e Could
# /opt/logs/joku1_log.txt:29:Could not read interface wlan0 flags: No such device

这样的研究有一些注意事项吗?我的目标是找到哪个tty有特定的iomem_base地址。

答案1

请使用以下任一选项:

grep -rn /sys/class/tty/* -e 0x40010000 2> /dev/null

grep -Rn /sys/class/tty/ -e 0x40010000 2> /dev/null

第一个命令中的 glob 是必需的,以便让它遵循命令行上未指定的符号链接,因为 的内容/sys/class/tty都是/sys/devices/virtual/tty和内容的符号链接/sys/devices/platform/serial####/tty

默认情况下,第二个命令中的-R位于符号链接后面,不需要 glob。

我添加了2> /dev/null发送Input/output errorPermission denied消息到,/dev/null因为当所有这些都没有返回时,输出更容易阅读。

答案2

中的条目/sys/class/tty是目录的符号链接,目录的不同部分/sys根据设备内部连接的方式进行组织。grep -r不遵循目录的符号链接。

grep -R遵循符号链接,但在递归遍历时遵循目录是一个坏主意,/sys因为存在无限循环(是链接到的/sys/foo/bar链接)。/sys/corge/wibble/sys/foo

因此更精确地指定路径。这足以搜索所有 tty 设备的所有文件:

grep -l -r -x 0x40010000 /sys/class/tty/*/

顺便说一句,由于您已经知道文件的全部内容并且需要文件名,-n因此没有用,并且-l会为您提供整洁的输出。-x有助于避免误报(但这里没有必要,因为 的内容iomem_base具有固定长度)。

但由于您知道该文件的基本名称,因此只需搜索该文件即可。

grep -l -x 0x40010000 /sys/class/tty/*/iomem_base

相关内容