특정 아이 노드에 링크


14

파일이 삭제되었지만 여전히 프로그램에 의해 열려 있습니다. lsof를 사용하여 inode 번호를 찾았습니다. 해당 inode에 대한 하드 링크를 다시 만들려면 어떻게해야합니까?

답변:


31

링크를 만들 수 없지만 다시 가져올 수 있습니다. 실험을 해보자 :

$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt

myfile.txt가 사라졌지 만, inode는 tail 명령으로 유지됩니다. 파일을 다시 가져 오려면 먼저 inode를 유지하는 프로세스의 PID를 찾으십시오.

$ ps auxw | grep tail
sunny      409  0.0  0.0   8532   824 pts/5    S    18:07   0:00 tail -f myfile.txt

PID는 409입니다. chdir to / proc / 409 / fd / 및 내용을 나열하십시오.

dr-x------ 2 sunny sunny  0 2009-07-24 18:07:18 .
dr-xr-xr-x 7 sunny sunny  0 2009-07-24 18:07:17 ..
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 0 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 1 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:18 2 -> /dev/pts/5
lr-x------ 1 sunny sunny 64 2009-07-24 18:07:33 3 -> /home/sunny/tmp/myfile.txt (deleted)

/ proc / [PID] / fd / 디렉토리에는 프로세스가 사용하는 모든 파일의 파일 디스크립터에 대한 심볼릭 링크가 있습니다. 이 경우 심볼릭 링크 "3"은 삭제 된 파일을 가리 킵니다. 따라서 파일을 복원하려면 내용을 새 파일로 복사하십시오.

$ cat 3 >/home/mydir/saved_file.txt

나는 먼 과거에 파일 시스템 디버거로 이것을 해왔지만 (예를 들어 "debugfs dump") 개념은 동일하다.
Gerald Combs

1
좋은 대답, +1
asdmin

이것은 나를 위해 작동하지 않습니다. '3'은 "실제"파일 디스크립터가 아니라 매달려있는 심볼릭 링크이므로 항상 빈 파일을 작성합니다.
Rob Chanter

4
@Rob : 아니요, 그렇지 않습니다. 파일 디스크립터가 사용중인 경우, 심볼릭 링크는 유효한 데이터를 가리키며, 그렇지 않으면 심볼릭 링크는 처음에는 존재하지 않습니다. 파일이 닫히면 심볼릭 링크가 사라집니다. "3"뒤에 공백이 있었습니까? 그렇지 않은 경우, 출력 현재 쉘에서 파일 기술자 3의 내용 대신하고 있습니다 의는 것을 아마 비 웁니다.
sunny256

1
이것에 대한 유일한 문제는 파일을 여전히 쓰고있는 경우 사본이 잘린다는 것입니다. 쓰기가 중지되고 파일을 닫아서 파일을 완전히 완성 할 때까지는 시간이 없을 것입니다.
KayEss


-8

Linux에서는이 작업을 수행 할 수있는 이식 가능한 방법이 없습니다. 가장 좋은 방법은 파일 시스템의 모든 활동을 중단하고 파일을 열어 놓은 프로그램을 종료하고 파일 시스템을 마운트 해제 한 후 파일 시스템 디버거를 사용하여 파일을 디렉토리에 다시 연결하는 것입니다. NFS를 통해 파일 시스템을 반출 한 경우, 최소한 일부 NFS 버전에서는 NFS를 통해 파일 데이터를 읽을 수 있습니다.


2
프로그램을 죽이면 파일을 잃을 수 있습니다
DukeLion
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.