web-dev-qa-db-ja.com

「/ proc / self」-ソフトリンクを動的に変更する

私はLinuxファイルシステムをさまよっていました。これは、その仕組みを理解する良い方法のように見えます。 UNIXでは「すべてがファイル」なので、/dev/stdinを見ていて、/proc/self/fd/0へのソフトリンクであることに気付きました。そこで、/procフォルダーを見てみると、/proc/selfが実際に/proc/{PID}へのソフトリンクであることがわかりました。より正確には、PIDはその値を確認するために発行するls -l /proc/selfコマンドの1つです。

私の理論では、プログラムが適切なPIDプロセスフォルダーを指すようにソフトリンクを読み取ろうとするたびにソフトリンクが変更されます。これは、/procフォルダーを読み取ろうとするすべての要求でカーネルによって行われますか? lsの出力を取得するために実際にファイルを読み取る必要はないと思います。または、700の許可を持つファイルを表示できないため、/procフォルダーにアクセスしますか?

さらに進む:この種の制御はカーネル自体に制限されていますか、または一部のアプリケーションはそれを利用できますか? (フォルダがアクセスされているときにチェックして、「誰」がそれを行っているかに従ってそのコンテンツ/リンクを動的に変更する可能性があります)

4
IanC

/procprocfs(メモリ内にあるtmpfsの種類)のマウントポイントであり、カーネルの内部データ構造へのインターフェイスです。 /procに表示されるものはすべて、Linuxによって直接入力され、カーネル自体によっても維持されます。

/proc/self/proc/<PID>ディレクトリへのシンボリックリンクです。<PID>は、その瞬間に/procにアクセスするプロセスのプロセスIDです。 bashcd /proc/selfを実行すると、/proc/<PID>/へのcd- idになります。ここで、<PID>bashのそのインスタンスのPIDです。 catの場合:

$ cat /proc/self/comm
cat

カーネルが値を変更するためのインターフェイスを提供する場合を除いて、/procの内容を絶対に変更しないでください。たとえば、カーネルは、/proc/sys/インターフェースを提供し、実行時にカーネルパラメーターを変更しますが、ほとんどの場合、ファイルを直接編集するのではなく、/proc/sys/の下の値を変更するにはsysctlを使用する必要がありますカーネルの内部データ構造の取り扱いを誤ると、システムが使用できなくなったり、システムがクラッシュしたりします。

3
heemayl