変更が保存されていないnanoセッション中にシステムがクラッシュしました。
SSH経由で再度ログインすると、ps
を実行してもnanoプロセスが実行されていることがわかります。
davidparks21@devdb1:/opt/frugg_batch$ ps -ef | grep nano
1001 31714 29481 0 18:32 pts/0 00:00:00 nano frugg_batch_processing
1001 31905 31759 0 19:16 pts/1 00:00:00 grep --color=auto nano
davidparks21@devdb1:/opt/frugg_batch$
新しいターミナルでnanoプロセスを自分の制御下に戻す方法はありますか?
または、リモートで(新しい端末から)保存するように強制する方法はありますか?
Nanoのマニュアルページを読んで、いくつかの検索を行ったところ、次のことがわかりました。
Nanoは、バッファーを緊急ファイルにダンプしようとする場合があります。これは主に、nanoがSIGHUPまたはSIGTERMを受信した場合、またはメモリが不足した場合に発生します。バッファに名前がない場合は、nano.saveという名前のファイルにバッファを書き込むか、現在のファイル名に「.save」というサフィックスを追加します。その名前の緊急ファイルが現在のディレクトリにすでに存在する場合、それを一意にするために、現在のファイル名に「.save」と番号(たとえば「.save.1」)を追加します。マルチバッファモードでは、nanoは開いているすべてのバッファをそれぞれの緊急ファイルに書き込みます。
したがって、おそらくすでにそのようなファイルがシステムのどこかに待機している必要があります。
find /likely/path -mtime -1 -print | egrep -i '\.save$|\.save\.[1-90]*$'
(/可能性が高い/パスは最初にnanoを起動した場所であり、次に他のそのような「可能性のある」場所であり、最後の手段として:/
(もちろん、最後のfindコマンドをrootとして起動するか、シェルのSTDERRリダイレクトを使用してリダイレクトできる多くのエラー出力を予期します)
-mtime -1は「1日以内」を示し、ファイルをいつ編集したか、またいつ読んだかに応じて、値を-2または-3に変更することができます。
Nanoがまだそのようなファイルを書き込んでいない場合は、SIGHUPシグナルを送信して、強制的にそのように強制することができます(参照: http://en.wikipedia.org/wiki/Unix_signal#POSIX_signals )
次に、もう一度検索を実行してそのファイルを探します...
そして最後に、最後の手段として、探しているテキストの一部を/ proc/kmemでgreppingして遊ぶこともできますが、これには表示されている内容をサニタイズするためにいくつかの予防策が必要であり、簡単ではありません。または、最初に(メモリと同じ大きさの)ファイルにddします。
したがって、これはオプションではないかもしれませんが、私はリブートコマンドをボックスに送信しました。オンラインに戻ったとき、Viola- file.py.saveがディレクトリに置かれました。
@Oliver Dulacで述べたように機能しますが、一部の状況では、バッファーをファイルにダンプしてNanoが解釈し、ユーザーコマンドから待機し続けるだけですが、再起動せずにさらに多くのオプションがあります。
pkill -SIGHUP -e nano
pkill -SIGTERM -e nano
pkill -SIGILL -e nano
しかし、プログラムは上記の3つの信号を無視することを選択できるため、上記の順序でそれらを試してから、ファイルが作成されたかどうかを確認し、機能しない場合は、再起動の実行と同じ信号を試してください(SIGTERMの後に送信されます)。
pkill -SIGKILL -e nano
これらはプログラムへのシグナルであることを覚えておいてください。一番上のものは実行中のプログラムによって解釈され、無視されます。最後のものです。