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

Mar*_*ark 7 grep sysfs

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

# grep -rn path -e pattern
Run Code Online (Sandbox Code Playgroud)

但它什么都不返回。例子:

# 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
#
Run Code Online (Sandbox Code Playgroud)

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

# grep -rn /opt -e Could
# /opt/logs/joku1_log.txt:29:Could not read interface wlan0 flags: No such device
Run Code Online (Sandbox Code Playgroud)

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

Nas*_*ley 6

请改用以下任一方法:

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

grep -Rn /sys/class/tty/ -e 0x40010000 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

在第一个命令的水珠,需要以拥有它遵循未在命令行上指定的内容的符号链接/sys/class/tty都是符号链接的内容/sys/devices/virtual/tty/sys/devices/platform/serial####/tty

-R与正被不需要水珠在第二命令遵循缺省符号链接。

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


Gil*_*il' 6

中的条目/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/*/
Run Code Online (Sandbox Code Playgroud)

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

但既然您知道文件的基本名称,只需搜索该名称即可。

grep -l -x 0x40010000 /sys/class/tty/*/iomem_base
Run Code Online (Sandbox Code Playgroud)