GNU/Linux >> Tutoriales Linux >  >> Linux

Preguntas de la entrevista de Linux:Archivos abiertos / Descriptores de archivos abiertos

¿Qué es un archivo abierto?

Un archivo abierto puede ser un archivo normal, un directorio, un archivo especial de bloque, un archivo especial de caracteres, una referencia de texto en ejecución, una biblioteca, un flujo o un archivo de red.

¿Qué es el descriptor de archivo?

Un descriptor de archivo es una estructura de datos utilizada por un programa para controlar un archivo. Los más conocidos son:

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

¿La cantidad de archivos abiertos es igual a la cantidad de descriptores de archivos abiertos?

Hay una diferencia en la cantidad de archivos abiertos actuales y la cantidad de descriptores/controladores de archivos actuales. Aunque un archivo esté abierto, es posible que no tenga un descriptor de archivo asociado, como directorios de trabajo actuales, archivos asignados a la memoria y archivos de texto ejecutables.

El comando 'lsof' proporcionará la cantidad de archivos abiertos asociados con un proceso. Por ejemplo, para el proceso con 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

Hay un total de 51 archivos abiertos asociados con PID 2374 (postfijo).

Para determinar el número de descriptores de archivos abiertos asociados con un proceso, use lo siguiente. Para el mismo proceso de sufijo, 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

Hay 13 descriptores de archivo asociados con PID 2374 (postfijo). Podemos ver que hay una diferencia entre el número de archivos abiertos y el número de descriptores de archivo por proceso. postfix tiene 51 archivos abiertos pero solo 13 descriptores de archivos asociados con él. Algunos de los archivos abiertos no tienen descriptores de archivo asociados; por ejemplo, bibliotecas, directorios de trabajo actuales.

¿Cómo obtener el número máximo de descriptores de archivos?

En Linux, el límite máximo de descriptores de archivo se puede leer desde /proc sistema de archivos Para obtener el límite actual en la cantidad de descriptores de archivo para todo el sistema, use el siguiente comando.

# cat /proc/sys/fs/file-max
180451
Nota :El parámetro /proc/sys/fs/file-max se puede cambiar dinámicamente.

¿Cómo calcular el número de descriptores de archivo que se están utilizando actualmente?

Usa el siguiente comando.

# 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

Para calcular el número de descriptores de archivo que se están utilizando actualmente:

1344 - 0 = 1344

¿Cómo obtener los límites por proceso en los descriptores de archivos?

Utilice 'ulimit -a ‘ para obtener los límites por proceso.

# 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

¿Cómo se encuentra el número de descriptores de archivos abiertos que utiliza un proceso determinado?

Use el siguiente comando (Sustituya su PID)

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

¿Cuáles son algunos otros parámetros útiles?

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. Copiar archivos en la terminal de Linux

  2. Mover archivos en la terminal de Linux

  3. Las 25 preguntas principales de la entrevista de Linux

  4. Verifique los permisos de archivos de Linux con ls

  5. Preguntas de la entrevista:Administrador de paquetes de Linux (RPM)

Cómo truncar archivos (vacíos) en Linux

Comando ls en Linux para listar archivos

Cómo cambiar el nombre de un archivo (s) en Linux

Cómo abrir archivos y carpetas como administrador en Nautilus File Manager en Linux

Preguntas de la entrevista del sistema de archivos de red de Linux (NFS)

Cómo comprimir un archivo en Linux