binary
私たちは、TI Arago Linuxを実行するさまざまな組み込みボックスを世界中に散らばっており、各ボックスには特定のアプリケーション(私たちが呼ぶもの)が実行されています。binary
ボックスには常に1つしかないため、サーバーには複数のコンパイル済みバージョンがあります/app/binary
。
問題は、binary
ボックスにインストールされているアイテムのmd5ハッシュで識別できますが、現在実行されているバージョンを確認できないことです。
14407 root 2880 S /app/binary
一般的な方法がありますか?バージョン確認binary
現在走るたとえば、バイナリファイルのmd5ハッシュに基づいていますか?
答え1
Linuxでは、次を参照して、現在実行中の実行可能ファイルの内容をいつでも見つけることができます。そのディレクトリは次の場所にあります。/proc
(適切な権限がある限り)ファイルは/proc/14407/exe
「魔法の」シンボリックリンクです。リンクがぶら下がっているように見えても(たとえば、実行可能ファイルが削除されたため)、いつでもその内容を読むことができます。したがって、md5sum /proc/14407/exe
MD5チェックサムを介してバージョンを識別できる場合は、それを使用して現在実行されているバイナリを識別できます。
答え2
この問題を解決する方法はいくつかあります。ただし、実行中のプロセスのPIDがある場合lsof
。
あなたの例でrootユーザーが所有するPID 14407の場合、次の手順を実行して、そのプロセスに対して開いているすべてのファイルを表示できます。
lsof -p 14407
開いているすべてのファイルが表示されます。これらのファイルの1つはバイナリファイル自体でなければなりません。バイナリコレクションが存在する必要があるパスを知っている場合、これは単純化されますlsof
。
どのバイナリが開いているかを知ったら、プロセスの開始時にファイルをMD5し、実行時にロードされた実際のバイナリのハッシュを取得できます。
ただし、バイナリがツリーから再構築され、実行後に元のファイルが上書きされ(デーモンなどの長期実行プロセスが考えられている)、新しいビルドによって元のバイナリが変更された可能性がある場合は、次のようにします。方法は信頼できません。