ターミナルセッションから実行中のスクリプトを回復する


35

したがって、GNU Screenを使用して、実行中の複数のスクリプト/プログラムを管理しています。多重化と分離は非常に役立ちます。

ディスクからスクリプトを削除しましたが、バックアップを見つけるのに苦労しています。ただし、ファイルが削除される前に、ターミナルセッションの1つがスクリプトを実行していたため、引き続き正常に機能します。

現在スクリプトを実行しているターミナルセッションをハイジャックして、このファイルの内容を回復する方法はありますか?


回答:


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は適切なバックアップルーチンをセットアップする必要があるという警告も表示されます。
クリギー

12
@ c4f4t0rメモリにロードされているかどうかに関係ありません。Linuxは、開いているハンドルがある間は明示的にファイル(inode)を削除しません-ファイルはディスク上に残り、スペースを占有します。rm他のツールはファイルのリンクを解除し、ファイルから実際のデータ(iノードで参照)へのリンクを削除しますが、参照が存在する限り(ハードリンクまたはオープンハンドル)、iノードは削除されません。
ボブ

好奇心が強い...どうやってfd 255をチェックするのを知りましたか?それとも単なる例ですか?
ガーデンヘッド

2
@gardenheadこれは一例です。
user253751
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.