터미널 세션에서 실행중인 스크립트 복구


35

그래서 GNU Screen 을 사용하여 여러 개의 실행중인 스크립트 / 프로그램을 관리하고 있습니다. 멀티플렉싱 및 분리가 매우 유용합니다.

디스크에서 스크립트를 제거했는데 백업을 찾는 데 문제가 있습니다. 그러나 파일을 삭제하기 전에 터미널 세션 중 하나가 스크립트를 실행 중이며 계속 정상적으로 작동합니다.

이 파일의 내용을 복구하기 위해 현재 스크립트를 실행중인 터미널 세션을 가로채는 방법이 있습니까?


답변:


61

사용하여 스크립트의 pid를 찾으십시오. ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

확인 /proc/$PID/fd/; 스크립트 파일에 대한 링크가 끊어졌지만 작동 cat 해야 합니다 (스크립트가 실행되는 동안)!

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

행운을 빕니다!


@mrc 파일의 내용이 메모리에로드되기 때문에 작동한다고 생각합니다
c4f4t0r

좋은 제안! 또한 @fdo는 다음 번에는 운이 좋지 않을 수도 있기 때문에 적절한 백업 루틴을 설정해야한다는 경고입니다.
Criggie

12
@ c4f4t0r 메모리에로드되는 것과 관련이 없습니다. Linux는 열린 핸들이있는 동안 명시 적으로 파일 (inode)을 제거하지 않습니다. 파일은 디스크에 남아 공간을 차지합니다. rm다른 도구 는 파일을 링크 해제 하여 파일 이름 에서 실제 데이터로 의 링크를 제거 하지만 (아이 노드에서 참조), 참조가 존재하는 한 (하드 링크 또는 열린 핸들) 아이 노드는 삭제되지 않습니다.
Bob

궁금해서 ... fd 255를 확인하는 방법을 어떻게 알았습니까? 아니면 예일까요?
gardenhead

2
@gardenhead 예입니다.
user253751
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.