web-dev-qa-db-ja.com

/ proc / statのサイズがゼロと表示されるのはなぜですか?

ls -rlth /proc/stat
-r--r--r-- 1 root root 0 Feb 21 04:25 /proc/stat

catすると、十分な内容が得られます。

1
Keyshov Borate

procは、ファイル名を内部のLinux構造/変数にマッピングする仮想ファイルシステムです。したがって、0バイトの通常の/ proc/statです。

ウィキペディアから: procfs

Procファイルシステム(procfs)は、Unixのようなオペレーティングシステムの特別なファイルシステムであり、プロセスに関する情報やその他のシステム情報を階層的なファイルのような構造で表示し、カーネルに保持されているプロセスデータに動的にアクセスするためのより便利で標準化された方法を提供します。従来のトレース方法またはカーネルメモリへの直接アクセス。通常、ブート時に/ procという名前のマウントポイントにマップされます。 procファイルシステムは、カーネルの内部データ構造へのインターフェイスとして機能します。これは、システムに関する情報を取得し、実行時に特定のカーネルパラメーターを変更するために使用できます(sysctl)。

TLDPから Linuxファイルシステム階層:/ proc

このディレクトリ内のファイルの最も特徴的な点は、kcore、mtrr、およびselfを除いて、すべてのファイルのファイルサイズが0であるという事実です。

注:実際には、サーバーではmtrrとselfのみが0サイズです-kcoreはアドレス指定できるメモリです。つまり、カーネル仮想メモリアドレス、つまり128TBです。この議論にも関連しているのは/proc/kcoreMIPSおよびARMアーキテクチャでは実装されていません。

4
Rui F Ribeiro

これは、既知のサイズが事前定義されていない仮想ファイルであるためです。実際のサイズ、つまり返されるデータの量は、いつ読み取るかによって異なります。

いくつか /procファイルは事前にわかっているため、null以外のサイズになる可能性があります。

   /proc/kcore
          This  file  represents the physical memory of the system and is stored in the ELF core file for-
          mat.  With this pseudo-file, and an unstripped kernel (/usr/src/linux/vmlinux) binary,  GDB  can
          be used to examine the current state of any kernel data structures.

          The total length of the file is the size of physical memory (RAM) plus 4KB.

ただし、私のマシンでは128 TB of RAM)を使用していないため、報告された値と読み取られる可能性のあるサイズがドキュメントと一致しません。 :

$ ls -lh /proc/kcore
-r--------. 1 root root 128T Feb 23 16:10 /proc/kcore
5
jlliagre

/procは特別なファイルシステムです。これは、ファイルを保存するものではありません。仮想ファイルシステムです。正しい例えではないことはわかっていますが、/devディレクトリのデバイスドライバのようなものと考えてください。 /devのファイルに書き込んだ内容は、何らかの方法でシステムに渡されます。同様に、ファイルから読み取ると、システムからそれらの値が取得されます。したがって、これらのファイルには実際に保存されている情報がないため、サイズはゼロとして表示されます。

4
MelBurslan