Linux에서 어떤 프로그램이 로그 파일을 사용하고 항목을 업데이트하고 로그 파일을 채우는지 찾는 방법입니다.
답변1
이에 대한 쉬운 대답은 없습니다. 다음을 사용할 수 있습니다.
통지하다
inotify
파일이 변경되면 알림을 받을 수 있습니다 . inotify
유틸리티 자체는 아니며 Linux 커널에서 제공하는 인터페이스이지만 패키지 inotifywait
에 있는 것과 같은 일부 유틸리티도 있습니다.inotify-tools
문제는 inotify
어떤 프로세스가 파일을 수정했는지 알려주지 않는다는 것입니다.
예:
mst@mst-nb1:~$ inotifywait 123
Setting up watches.
Watches established. # now i write to "123" in another terminal
123 MODIFY
라소프
어떤 프로세스가 파일을 열어두고 있는지 확인하는 매우 강력한 유틸리티는 입니다 lsof
. 예를 들어, 이렇게 하면 lsof /var/log/syslog
현재 어떤 프로세스가 파일을 열어두고 있는지 확인할 수 있습니다.
문제는 lsof
시간이 지남에 따라 파일을 모니터링할 수 없으며 파일이 실행될 때 무슨 일이 일어나고 있는지에 대한 스냅샷만 제공할 수 있다는 것입니다. 귀하의 경우 파일에 무엇이 기록되었는지 알고 싶지만 파일이 영구적으로 열려 있는지 확실하지 않습니다(아마도 그렇지 않을 가능성이 높음). 쓰기 프로세스가 파일을 항상 열어두지 않으면 별로 도움이 되지 않습니다 lsof
. 쓰기 중에 파일을 실행하는 경우에만 올바른 프로세스를 가리킬 수 있기 때문입니다.
lsof
이전처럼 파일을 감시 할 수 없는 이유 inotify
는 단순히 파일 시스템을 스캔하여 정보를 얻으나 /proc
감시자를 설정하지 않기 때문입니다.
예:
# Terminal 1 (I open the file)
mst@mst-nb1:~$ cat > 123
# Terminal 2
mst@mst-nb1:~$ lsof 123
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cat 24097 mst 1w REG 252,1 0 16791997 123
로깅 파일 시스템
이것이 최선의 기회일 수 있지만 이를 달성하려면 상당한 노력이 필요합니다. 회로 차단기를 사용하여 loggedfs
로그 파일과 동일한 디렉터리에 설치할 수 있습니다 . 그런 다음 파일이 언제 열렸는지에 대한 세부 정보를 제공해야 합니다.
유일한 문제 loggedfs
는 일부 간단한 명령줄 유틸리티만큼 사용하기가 쉽지 않다는 것입니다.
이 문제를 해결하고 싶다면 loggedfs
다음을 참고하세요.문서
결론적으로
결론은 다양한 가능성이 있지만 simple
방법이 없다는 것이다.
답변2
로그 파일은 여러 소스에서 입력을 받습니다. 일반적으로 소스, 타임스탬프 및 일부 메시지를 설명하는 첫 번째 단어로 구성된 줄 구조를 갖습니다.
엄격한 형식은 없습니다. 각 애플리케이션(예: 웹 서버)에는 고유한 파일과 형식이 있습니다(종종 내용을 요약하거나 수정하기 위한 특정 도구도 있음).
답변3
간단한 방법은 다음과 같습니다: auditd.
예:
/etc/audit/audit.rules
-w /var/tmp/foo -p w -k foo
다음은 /var/log/audit/audit.log의 항목입니다.
type=SYSCALL msg=audit(1454353834.695:29):
arch=c000003e syscall=2 success=yes exit=3 a0=27cd460 a1=241 a2=1a4
a3=7fff4e278f30 items=2 ppid=10218 pid=10314 auid=0 uid=0 gid=0 euid=0
suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=3 comm="vi"
exe="/usr/bin/vim.basic" key="foo"
거기에는 PID와 실행 파일을 포함하여 많은 정보가 있습니다. 당신은 또한 볼 수 있습니다 aureport
.