我想在/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
地址。
发布于 2020-07-10 13:11:23
使用这两种方法中的任何一种:
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
来向/dev/null
发送Input/output error
和Permission denied
消息,因为当所有这些都没有返回时,输出更容易阅读。
发布于 2020-07-10 13:17:55
/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
https://unix.stackexchange.com/questions/597749
复制相似问题