我想在目录中搜索字符串/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 error
和Permission 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