strace는 프로그램이 파일 시스템에 쓰는 위치를 찾는 데 적합한 도구입니까?

strace는 프로그램이 파일 시스템에 쓰는 위치를 찾는 데 적합한 도구입니까?

특정 애플리케이션의 위치를 ​​확인하고 싶습니다(예:서핑하다)은 흔적이 남지 않도록 파일 시스템에 기록됩니다. 전용 샌드박스 시스템이 없으면 쉽지 않을 수도 있는데, strace.

예를 들어 다음은 다음과 같은 간단한 스크립트입니다 run.

#!/bin/bash

mkdir history
echo foo bar > history/hist.db
echo hello > test

나는 strace다음과 같이 실행합니다 :

strace ./run 2>&1 | sed -n '/^open.*WRONLY/p' | sed 's/.*"\(.*\)"[^"]*$/\1/'

작성된 모든 파일(디렉토리 제외)을 확인합니다. (생성된 파일처럼 작성되었지만 작성되지 않은 파일은 캡처할 수 없을 것 같습니다 touch.) 산출:

history/hist.db
test

사소한 응용 프로그램 외에는 strace다루기 힘들기 때문에 이를 수행하는 더 좋은 방법이 있습니까? 아니면 더 강력하게 만들기라는 옵션(또는 더 나은 정규식?)이 있습니까? 파일 시스템에 기록된 파일이 손실될 위험이 있습니까?

답변1

lsof또한 디스크에 파일을 쓸 때 프로세스를 "모니터링" 하는 데 사용할 수도 있습니다 . 이는 폴링 솔루션에 더 가깝기 때문에 파일이 작고 디스크에 빠르게 기록되는 경우 일부 파일을 놓칠 수 있지만, 디스크에 파일을 기록하는 응용 프로그램이 서버/서비스인 경우 이를 사용하여 lsof볼 수 있습니다. 이러한 유형의 파일은 상당히 쉽습니다. 다루다.

$ lsof -p PID

$ lsof -p `pidof gnome-terminal` | head -5
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
gnome-ter 7423 saml  cwd    DIR              253,2    32768  10354689 /home/saml
gnome-ter 7423 saml  rtd    DIR              253,0     4096         2 /
gnome-ter 7423 saml  txt    REG              253,0   338632   1220790 /usr/bin/gnome-terminal
gnome-ter 7423 saml  mem    REG              253,0   614032   1192949 /usr/lib64/libfreetype.so.6.6.0

관련 정보