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