GNU/Linux >> Tutoriels Linux >  >> Linux

Questions d'entretien Linux :fichiers ouverts / descripteurs de fichiers ouverts

Qu'est-ce qu'un fichier ouvert ?

Un fichier ouvert peut être un fichier normal, un répertoire, un fichier spécial bloc, un fichier spécial caractère, une référence de texte en cours d'exécution, une bibliothèque, un flux ou un fichier réseau.

Qu'est-ce qu'un descripteur de fichier ?

Un descripteur de fichier est une structure de données utilisée par un programme pour obtenir une poignée sur un fichier. Les plus connus sont :

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

Le nombre de fichiers ouverts est-il égal au nombre de descripteurs de fichiers ouverts ?

Il existe une différence entre le nombre de fichiers actuellement ouverts et le nombre de descripteurs/gestionnaires de fichiers actuels. Même si un fichier est ouvert, il se peut qu'aucun descripteur de fichier ne lui soit associé, comme les répertoires de travail actuels, les fichiers mappés en mémoire et les fichiers texte exécutables.

La commande 'lsof' fournira le nombre de fichiers ouverts associés à un processus. Par exemple, pour le processus avec 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

Il y a au total 51 fichiers ouverts associés au PID 2374 (suffixe).

Pour déterminer le nombre de descripteurs de fichiers ouverts associés à un processus, utilisez ce qui suit. Pour le même processus postfix, 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

Il existe 13 descripteurs de fichiers associés au PID 2374 (suffixe). Nous pouvons voir qu'il y a une différence entre le nombre de fichiers ouverts et le nombre de descripteurs de fichiers par processus. postfix a 51 fichiers ouverts mais seulement 13 descripteurs de fichiers associés. Certains des fichiers ouverts n'ont pas de descripteurs de fichiers associés; par exemple, les bibliothèques, les répertoires de travail actuels.

Comment obtenir le nombre maximum de descripteurs de fichiers ?

Sous Linux, le nombre maximal de descripteurs de fichiers peut être lu à partir de /proc système de fichiers. Pour obtenir la limite actuelle du nombre de descripteurs de fichiers pour l'ensemble du système, utilisez la commande suivante.

# cat /proc/sys/fs/file-max
180451
Remarque :Le paramètre /proc/sys/fs/file-max peut être modifié dynamiquement.

Comment calculer le nombre de descripteurs de fichiers actuellement utilisés ?

Utilisez la commande suivante.

# 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

Pour calculer le nombre de descripteurs de fichiers actuellement utilisés :

1344 - 0 = 1344

Comment obtenir les limites par processus sur les descripteurs de fichiers ?

Utilisez 'ulimit -a ‘ pour obtenir les limites par processus.

# 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

Comment trouver le nombre de descripteurs de fichiers ouverts utilisés par un processus donné ?

Utilisez la commande suivante (Remplacez votre PID)

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

Quels sont les autres paramètres utiles ?

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. Copier des fichiers dans le terminal Linux

  2. Déplacer des fichiers dans le terminal Linux

  3. Déplacer des fichiers sur Linux sans mv

  4. Vérifiez les autorisations de fichiers Linux avec ls

  5. Questions d'entretien Linux - Autorisations de base sur les fichiers et les répertoires

Comment tronquer des fichiers (vides) sous Linux

Commande ls sous Linux pour lister les fichiers

Comment renommer un ou plusieurs fichiers sous Linux

Comment ouvrir des fichiers et des dossiers en tant qu'administrateur dans Nautilus File Manager sous Linux

Questions d'entretien sur le système de fichiers réseau Linux (NFS)

Comment compresser un fichier sous Linux