문자열에 대한 디렉토리를 검색하고 싶습니다 /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은 명령줄에 지정되지 않은 심볼릭 링크를 따르도록 하는 데 필요합니다. glob의 내용은 /sys/class/tty
모두 /sys/devices/virtual/tty
내용에 대한 심볼릭 링크 이기 때문입니다 /sys/devices/platform/serial####/tty
.
기본적으로 두 번째 명령의 명령은 -R
심볼릭 링크 뒤에 있으며 glob이 필요하지 않습니다.
2> /dev/null
Send Input/output error
및 Permission denied
message를 추가한 /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