/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は、コマンドラインに指定されていないシンボリックリンクに従うようにするために必要です。 globの内容は/sys/class/ttyすべて/sys/devices/virtual/tty内容へのシンボリックリンクであるためです/sys/devices/platform/serial####/tty

デフォルトでは、2番目のコマンドのコマンドは-Rシンボリックリンクの後にあり、globは必要ありません。

2> /dev/nullSendInput/output errorPermission deniedmessageを追加した/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

関連情報