私はLinuxファイルシステムをさまよっていました。これは、その仕組みを理解する良い方法のように見えます。 UNIXでは「すべてがファイル」なので、/dev/stdin
を見ていて、/proc/self/fd/0
へのソフトリンクであることに気付きました。そこで、/proc
フォルダーを見てみると、/proc/self
が実際に/proc/{PID}
へのソフトリンクであることがわかりました。より正確には、PIDはその値を確認するために発行するls -l /proc/self
コマンドの1つです。
私の理論では、プログラムが適切なPIDプロセスフォルダーを指すようにソフトリンクを読み取ろうとするたびにソフトリンクが変更されます。これは、/proc
フォルダーを読み取ろうとするすべての要求でカーネルによって行われますか? ls
の出力を取得するために実際にファイルを読み取る必要はないと思います。または、700の許可を持つファイルを表示できないため、/proc
フォルダーにアクセスしますか?
さらに進む:この種の制御はカーネル自体に制限されていますか、または一部のアプリケーションはそれを利用できますか? (フォルダがアクセスされているときにチェックして、「誰」がそれを行っているかに従ってそのコンテンツ/リンクを動的に変更する可能性があります)
/proc
はprocfs
(メモリ内にあるtmpfs
の種類)のマウントポイントであり、カーネルの内部データ構造へのインターフェイスです。 /proc
に表示されるものはすべて、Linuxによって直接入力され、カーネル自体によっても維持されます。
/proc/self
は/proc/<PID>
ディレクトリへのシンボリックリンクです。<PID>
は、その瞬間に/proc
にアクセスするプロセスのプロセスIDです。 bash
でcd /proc/self
を実行すると、/proc/<PID>/
へのcd
- idになります。ここで、<PID>
はbash
のそのインスタンスのPIDです。 cat
の場合:
$ cat /proc/self/comm
cat
カーネルが値を変更するためのインターフェイスを提供する場合を除いて、/proc
の内容を絶対に変更しないでください。たとえば、カーネルは、/proc/sys/
インターフェースを提供し、実行時にカーネルパラメーターを変更しますが、ほとんどの場合、ファイルを直接編集するのではなく、/proc/sys/
の下の値を変更するにはsysctl
を使用する必要がありますカーネルの内部データ構造の取り扱いを誤ると、システムが使用できなくなったり、システムがクラッシュしたりします。