ログファイルからパス名を抽出するには?

ログファイルからパス名を抽出するには?

これは次のようになります。これしかし、straceの出力を次のファイルに保存しました。

...
3691  fcntl(2, F_GETFD)                 = 0
3691  access("/etc/suid-debug", F_OK)   = -1 ENOENT (No such file or directory)
3691  access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
3691  openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
3691  fstat(3, {st_mode=S_IFREG|0644, st_size=243756, ...}) = 0
3691  mmap(NULL, 243756, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ff0696c2000
3691  close(3)                          = 0
3691  openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = 3
3691  read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\t\0\0\0\0\0"..., 832) = 832
3691  fstat(3, {st_mode=S_IFREG|0644, st_size=3076960, ...}) = 0
...

パスを印刷する簡単な方法はありますか?この場合、awkを使用してパスを解析するのは簡単ではないと思いますか?

ベストアンサー1

grepとsedを一緒に使用することをお勧めします。

 ... | grep '"/' | sed 's/^.*"\(/[^"]*\)".*$/\1/'

これはスラッシュで始まるデータ文字列からいくつかの誤検出を生成する可能性があり、リテラル二重引用符を含むパス名のために失敗する可能性があります。 。

パスパラメータを使用して、「openat」および他のシステムコールをgrepすることもできます。

 ... | grep -e openat -e access | sed ...

誤検知をさらに減らすため。

おすすめ記事