b2-osx108v8-01:~ bamboo$ lsof -p 264
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
<lines removed>
java 264 bamboo 20w REG 1,2 240906 14883372 /Users/bamboo/bamboo-agent-home/xml-data/build-dir/ST-SSINR-B2OSML/SimbaProcessManager.log.0
<lines removed>
디렉토리 /Users/bamboo/bamboo-agent-home/xml-data/build-dir/ST-SSINR-B2OSML
는 삭제되었지만 파일은 여전히 데몬에 의해 열려 있습니다. 이 로그를 어떻게 볼 수 있나요? Linux에서는 를 사용 /proc/264/fd/20
하지만 OSX에서는 사용할 수 없는 것 같습니다.
답변1
<편집>
이것이 Linux라면 gdb
트릭을 사용할 수도 있습니다. 그러나 OS X에서는 이 트릭이 Linux 특정 동작 에 의존하기 때문에 배제할 수 있는 것으로 나타났습니다 /dev/fd/
( )./proc/self/fd/
그게 내가 아는 전부이고 긍정적인 조언은 없습니다.
</edit>
정말 무서울 수도 있지만 생각해 보셨나요 gdb
? 하나의 패키지에 두 가지 놀라운 기능이 있습니다: C 인터프리터와 선택한 프로세스에 코드를 삽입하는 방법! 분명히 디버깅에도 사용할 수 있습니다.
다행히 C 표준 라이브러리에는 스크립트를 해석하는 함수도 포함되어 있습니다. 플랫폼의 스크립팅 언어는 C보다 작성하기가 더 쉬울 수 있습니다.
less
OS X용 스크립트를 생각해 냈습니다 . 이는 로그 파일의 시작 부분을 반환하는 취약한 해킹입니다.OS X, bash: 열린 파일 설명자에서는 덜 작동하지만 cat은 작동하지 않습니다.전체 로그 파일을 읽은 후 less
FD 위치는 파일 끝에 있어야 하며, 이는 개입 전의 원래 위치가 되기를 바랍니다.
<편집>그러나 파일이 읽기용으로 열려 있는 경우에만 작동합니다. 출력 에 따르면 lsof
파일은 쓰기용으로만 열려 있습니다. </EDIT>
gdb -p 264 <<EOF
call (int) system("exec </dev/null >/tmp/log 2>&1; less /dev/fd/20")
EOF
반환 유형을 캐스팅하지 않으면 내 시스템이 알지 못하는 반환 유형에 대해 불평할 것이기 때문입니다 system()
. 아마도 이것은 또한 매개변수 유형이 확실하지 않다는 것을 의미하므로 이미 좋은 생각처럼 들립니다.
파일 설명자를 조작하기 위해 Linux 상자에서 이를 사용하려고 시도했을 때 system()
어떻게든 작동했습니다... 한 번. 나는 그것이 영원히 작동할 것이라고 보장하지 않습니다 :). 예를 들어, 기술적으로 말하면 프로그램이 신호 처리기 또는 system()
자체를 실행하는 경우 이것이 안전하다는 보장은 없습니다. ( system()
"재진입"이 보장되는 몇 가지 기능 중 하나가 아닙니다).
답변2
icat
블록 장치에서 작동할 때 동작이 올바른지, Mac OS에 블록 장치가 있는지, 다음을 수행하면 데이터가 소모되는지 확인하지 않았습니다 .
icat /dev/MY-DEVICE 14883372
이 명령 은 icat
The Sleuth Kit®(TSK)에서 제공됩니다.
https://github.com/sleuthkit/sleuthkit/wiki/HFS
(이미 Linux에 대해 언급하셨습니다. 이 아이디어는 debugfs
Linux 파일 시스템 ext2/ext3/ext4에 동일한 작업을 수행하는 명령이 있다는 사실에서 영감을 얻었습니다.)