lsof가 tracefs에 대해 왜 불평합니까? 실행할 때마다 lsofTraceFS에 대한 경고가 표시됩니다. $

실행할 때마다 lsofTraceFS에 대한 경고가 표시됩니다.

$ lsof any-file
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.

$ mount | grep trace
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)

(이것은 Ubuntu 15.10에 있으며 완전히 업데이트되었습니다)

정상 작동 중에 TraceFS가 마운트되는 것이 정상입니까?
그렇다면 어떻게 lsof건너 뛰 라고 말할 수 있습니까?



답변

귀하의 질문에 대한 답변은 파일 권한에 있습니다.

시험:

$ ls -l /sys/kernel/debug/tracing
ls: cannot access '/sys/kernel/debug/tracing': Permission denied
$ ls -l /sys/kernel
total 0
...
drwx------  31 root root    0 2016-06-15 11:06:47 debug
...

따라서 일반 사용자는 액세스 /sys/kernel/debug/tracing할 수 없으며 lsof액세스를 피할 수있는 방법이 없습니다 .

우리는 이것이 버그인지 아닌지에 대해 토론 할 수 있지만, 당신의 질문에 대한 대답은 이것으로 귀결됩니다.


답변

나는 같은 문제가 있었고이 대답 은 문제를 조금 더 잘 이해하는 데 도움 이 되었습니다.

성가신 경고를 제거하는 한 가지 방법은 debugfs를 마운트 해제하는 것입니다.

mount | grep debugfs
none on /sys/kernel/debug type debugfs (rw,_netdev)

sudo umount $(mount | grep debugfs | awk '{print $3}')

지금 실행하면 lsof경고가 없습니다.


답변

문제는 debugfs 디렉토리에 액세스 할 수있는 권한이 없다는 것입니다. tracefs 디렉토리는 사람들이 추적 디렉토리를 / sys / kernel / tracing에 직접 마운트하고 debugfs를 활성화 할 필요가 없도록하기 위해 만들어졌습니다. 그러나 이전 버전과의 호환성을 위해 debugfs 디렉토리를 마운트 할 때 tracefs의 “추적”디렉토리에 tracefs가 자동으로 마운트됩니다.

이제 lsof를 수행하면 / proc / filesystems 파일과 / proc / mounts를 봅니다. tracefs가 / sys / kernel / debug / tracing에 마운트되어 있음을 알 수 있습니다. 불행하게도, / sys / kernel / debug는 루트가 아닌 사용자가 그 내부를 볼 수 없도록하기 때문에 / sys / kernel / debug 내에서 “추적”디렉토리를 통계하려고 할 때 오류 메시지가 표시됩니다. debugfs 디렉토리를 마운트 해제하면 경고가 사라집니다.


답변

경고는 stderr에 기록됩니다. 항상 이것을 / dev / null로 리디렉션 할 수 있습니다.

lsof <any-file> 2>/dev/null

건배,