GNU/Linux >> Linux の 問題 >  >> Linux

Linux インタビューの質問 :オープン ファイル / オープン ファイル記述子

開いているファイルとは?

開いているファイルは、通常のファイル、ディレクトリ、ブロック スペシャル ファイル、キャラクター スペシャル ファイル、実行中のテキスト参照、ライブラリ、ストリーム、またはネットワーク ファイルです。

ファイル記述子とは?

ファイル記述子は、プログラムがファイルのハンドルを取得するために使用するデータ構造です。最も一般的に知られているものは次のとおりです:

0 for standard in 
1 for standard out
2 for standard error

開いているファイルの数は、開いているファイル記述子の数と同じですか?

現在開いているファイルの数と、現在のファイル記述子/ハンドラーの数には違いがあります。ファイルが開いていても、現在の作業ディレクトリ、メモリ マップ ファイル、実行可能テキスト ファイルなど、ファイル記述子が関連付けられていない場合があります。

「lsof」コマンドは、プロセスに関連付けられた開いているファイルの数を提供します。たとえば、PID 4448 のプロセスの場合:

# lsof | grep -w 2374
pickup    2374      postfix  cwd       DIR              202,1      4096    8945851 /var/spool/postfix
pickup    2374      postfix  rtd       DIR              202,1      4096        128 /
pickup    2374      postfix  txt       REG              202,1    285112    8945807 /usr/libexec/postfix/pickup
pickup    2374      postfix  mem       REG              202,1     62184     463326 /usr/lib64/libnss_files-2.17.so
pickup    2374      postfix  mem       REG              202,1    155744     758332 /usr/lib64/libselinux.so.1
pickup    2374      postfix  mem       REG              202,1     15688     125778 /usr/lib64/libkeyutils.so.1.5
pickup    2374      postfix  mem       REG              202,1     58728     127331 /usr/lib64/libkrb5support.so.0.1
pickup    2374      postfix  mem       REG              202,1     11384      37284 /usr/lib64/libfreebl3.so
....
# lsof | grep -w 2374 | wc -l
51

PID 2374 (接尾辞) に関連付けられた合計 51 個の開いているファイルがあります。

プロセスに関連付けられている開いているファイル記述子の数を確認するには、次を使用します。同じ後置プロセスの場合、2374:

# ls -l /proc/2374/fd 
total 0
lrwx------. 1 root root 64 Nov 18 18:06 0 -> /dev/null
lrwx------. 1 root root 64 Nov 18 18:06 1 -> /dev/null
l-wx------. 1 root root 64 Nov 18 18:06 10 -> pipe:[28867]
lrwx------. 1 root root 64 Nov 18 18:06 2 -> /dev/null
lr-x------. 1 root root 64 Nov 18 18:06 3 -> pipe:[18701]
l-wx------. 1 root root 64 Nov 18 18:06 4 -> pipe:[18701]
lrwx------. 1 root root 64 Nov 18 18:06 5 -> socket:[18631]
lrwx------. 1 root root 64 Nov 18 18:06 6 -> socket:[18629]
lrwx------. 1 root root 64 Nov 18 18:06 7 -> socket:[28851]
lrwx------. 1 root root 64 Nov 18 18:06 8 -> anon_inode:[eventpoll]
lr-x------. 1 root root 64 Nov 18 18:06 9 -> pipe:[28867]
l-wx------. 1 root root 64 Nov 18 18:06 92 -> pipe:[18702]
# ls -l /proc/2374/fd  | wc -l
13

PID 2374 (後置) に関連付けられた 13 個のファイル記述子があります。開いているファイルの数とプロセスごとのファイル記述子の数に違いがあることがわかります。 postfix には 51 個の開いているファイルがありますが、それに関連付けられているファイル記述子は 13 個しかありません。開いているファイルの中には、ファイル記述子が関連付けられていないものがあります。例:ライブラリ、現在の作業ディレクトリ。

ファイル記述子の最大数を取得する方法

Linux では、/proc から読み取ることができるファイル記述子の最大数の制限 ファイルシステム。システム全体のファイル記述子数の現在の制限を取得するには、次のコマンドを使用します。

# cat /proc/sys/fs/file-max
180451
注意 :パラメータ /proc/sys/fs/file-max 動的に変更できます。

現在使用されているファイル記述子の数を計算する方法

次のコマンドを使用してください。

# cat /proc/sys/fs/file-nr
1344  0  180451
   |  |   |_ Max no. of file descriptors allowed on the system
   |  |      
   |  |__ Total free allocated file descriptors
   |
   |__  Total allocated file descriptors

現在使用されているファイル記述子の数を計算するには:

1344 - 0 = 1344

ファイル記述子のプロセスごとの制限を取得する方法

ulimit -a」を使用 ‘ プロセスごとの制限を取得します。

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7132
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4096
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7132
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

特定のプロセスで使用されているオープン ファイル記述子の数を確認するにはどうすればよいですか?

次のコマンドを使用します (PID を置き換えます)

# ls -l /proc/2374/fd  | wc -l
13

他に役立つパラメータは何ですか?

NR_OPEN  = Maximum number of open files per process
NR_FILE  = Total number of files that can be open in the system at any time
FILE-MAX = Kernel parameter refers to maximum number of file descriptors allowed per system 
FILE-NR  = Refers to the number of current file descriptors used at any moment.
LSOF     = Gives the number of open files.


Linux
  1. Linuxターミナルでファイルをコピーする

  2. Linuxターミナルでファイルを移動する

  3. Linux インタビューの質問 – 基本的なファイルとディレクトリのアクセス許可

  1. Linuxインタビューの質問トップ25

  2. インタビューの質問:Linux パッケージ マネージャー (RPM)

  3. Linux 面接の質問 – Linux 印刷 (CUPS)

  1. Linuxでmvなしでファイルを移動する

  2. Linuxインタビューの質問と回答のトップ25

  3. Linux で許可されているオープン ファイルの最大数