Bash - /devおよび/procなしでchrootでプロセスを置き換える

Bash - /devおよび/procなしでchrootでプロセスを置き換える

インストールされていないchroot/dev刑務所があります/proc。ここでプロセスを交換しようとすると、これが発生します。

bash-4.4# cat <(ls)   
cat: open /dev/fd/63: No such file or directory

手動で作成し、すべてのユーザーに十分な権限があることを確認しようとしましたが、/dev/fd役に立ちませんでした。

外部システムに何もインストールせずにこれを行う方法はありますか?

ベストアンサー1

Linuxでは、への/dev/fdシンボリックリンクです/proc/self/fd。ここでは、/proc/self呼び出しプロセスのプロセスディレクトリへのシンボリックリンクです。/proc/$pid/fdその後、開かれたファイルハンドルへのマジックリンクが含まれます。 Bashはこれを使用して、物理ファイルシステムに何も残さずにファイル名でアクセスできるパイプを作成します。

したがって、シンボリックリンクをインストールして/proc作成する必要があります。/dev/fd

または、次のように、Bashがファイルシステムで名前付きパイプを使用できるようにすることを確認できます。手動、オプションでなければなりません。

/dev/fdプロセス置換は、名前付きパイプ(FIFO)または名前付きファイルを開く方法をサポートするシステムでサポートされています。

しかし、この場合は再コンパイルが必要なようです。スクリプトは利用可能かどうかをconfigure自動的に検出します/dev/fdが、で無効にしてconfig.h行を削除できます。

#define HAVE_DEV_FD 1

#undef HAVE_DEV_FD(または確実にするためにaに変更してください。そして私が犯した間違いを犯さないでください。a1に変更しても0機能しません。)

この設定を使用すると取得できます

$ ./bash -c 'ls -l <(echo foo)'
prw------- 1 itvirta itvirta 0 Nov 18 13:13 /tmp/sh-np.pldKay

ただし、ls別のコマンドを使用してこれを実行して実際にパイプを読み取らないと、パイプとシェルの両方のプロセスが残ります。

おすすめ記事