GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Interviewfragen:Open Files / Open File Descriptors

Was ist eine geöffnete Datei?

Eine geöffnete Datei kann eine normale Datei, ein Verzeichnis, eine spezielle Blockdatei, eine spezielle Zeichendatei, eine ausführende Textreferenz, eine Bibliothek, ein Stream oder eine Netzwerkdatei sein.

Was ist ein Dateideskriptor?

Ein Dateideskriptor ist eine Datenstruktur, die von einem Programm verwendet wird, um eine Datei zu handhaben. Die bekanntesten sind:

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

Entspricht die Anzahl offener Dateien der Anzahl offener Dateideskriptoren?

Es gibt einen Unterschied in der Anzahl aktuell geöffneter Dateien und der Anzahl aktueller Dateideskriptoren/Handler. Auch wenn eine Datei geöffnet ist, ist ihr möglicherweise kein Dateideskriptor zugeordnet, wie z. B. aktuelle Arbeitsverzeichnisse, speicherabgebildete Dateien und ausführbare Textdateien.

Der Befehl „lsof“ gibt die Anzahl der geöffneten Dateien an, die einem Prozess zugeordnet sind. Zum Beispiel für den Prozess mit 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

Es gibt insgesamt 51 offene Dateien, die mit PID 2374 (Postfix) verknüpft sind.

Verwenden Sie Folgendes, um die Anzahl der offenen Dateideskriptoren zu bestimmen, die einem Prozess zugeordnet sind. Für denselben Postfix-Prozess 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 (Postfix) sind 13 Dateideskriptoren zugeordnet. Wir können sehen, dass es einen Unterschied zwischen der Anzahl der geöffneten Dateien und der Anzahl der Dateideskriptoren pro Prozess gibt. Postfix hat 51 geöffnete Dateien, aber nur 13 zugehörige Dateideskriptoren. Einigen der geöffneten Dateien sind keine Dateideskriptoren zugeordnet; B. Bibliotheken, aktuelle Arbeitsverzeichnisse.

Wie erhalte ich die maximale Anzahl an Dateideskriptoren?

Unter Linux kann die maximale Anzahl von Dateideskriptoren aus /proc gelesen werden Dateisystem. Verwenden Sie den folgenden Befehl, um die aktuelle Begrenzung der Anzahl von Dateideskriptoren für das gesamte System zu erhalten.

# cat /proc/sys/fs/file-max
180451
Hinweis :Der Parameter /proc/sys/fs/file-max kann dynamisch geändert werden.

Wie berechnet man die Anzahl der aktuell verwendeten Dateideskriptoren?

Verwenden Sie den folgenden Befehl.

# 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

So berechnen Sie die Anzahl der aktuell verwendeten Dateideskriptoren:

1344 - 0 = 1344

Wie erhalte ich die Limits pro Prozess für die Dateideskriptoren?

Verwenden Sie „ulimit -a ‘, um die Limits pro Prozess abzurufen.

# 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

Wie findet man die Anzahl der offenen Dateideskriptoren, die von einem bestimmten Prozess verwendet werden?

Verwenden Sie den folgenden Befehl (Ersetzen Sie Ihre PID)

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

Was sind einige andere nützliche Parameter?

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. Kopieren Sie Dateien im Linux-Terminal

  2. Verschieben Sie Dateien im Linux-Terminal

  3. Verschieben von Dateien unter Linux ohne mv

  4. Linux-Interviewfragen – Grundlegende Datei- und Verzeichnisberechtigungen

  5. Linux-Interviewfragen – Linux Printing (CUPS)

So kürzen Sie (leere) Dateien in Linux

ls-Befehl in Linux zum Auflisten von Dateien

So benennen Sie eine Datei (en) in Linux um

So öffnen Sie Dateien und Ordner als Administrator im Nautilus-Dateimanager unter Linux

Fragen im Vorstellungsgespräch unter Linux Network File System (NFS).

So komprimieren Sie eine Datei unter Linux