GNU/Linux >> Linux Esercitazione >  >> Linux

Domande per l'intervista su Linux:Apri file / Apri descrittori di file

Cos'è un file aperto?

Un file aperto può essere un file normale, una directory, un file speciale di blocco, un file speciale di carattere, un riferimento di testo in esecuzione, una libreria, un flusso o un file di rete.

Cos'è il descrittore di file?

Un descrittore di file è una struttura di dati utilizzata da un programma per ottenere un handle su un file. I più conosciuti sono:

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

Il numero di file aperti è uguale al numero di descrittori di file aperti?

C'è una differenza nel numero di file aperti correnti e nel numero di descrittori/gestori di file correnti. Anche se un file è aperto, potrebbe non avere un descrittore di file ad esso associato, come le directory di lavoro correnti, i file mappati in memoria e i file di testo eseguibili.

Il comando 'lsof' fornirà il numero di file aperti associati a un processo. Ad esempio, per il processo 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

Ci sono un totale di 51 file aperti associati al PID 2374 (postfisso).

Per determinare il numero di descrittori di file aperti associati a un processo, utilizzare quanto segue. Per lo stesso processo suffisso, 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

Esistono 13 descrittori di file associati al PID 2374 (postfisso). Possiamo vedere che c'è una differenza tra il numero di file aperti e il numero di descrittori di file per processo. postfix ha 51 file aperti ma solo 13 descrittori di file ad esso associati. Ad alcuni dei file aperti non sono associati descrittori di file; ad esempio, biblioteche, directory di lavoro correnti.

Come ottenere il numero massimo di descrittori di file?

In Linux, il numero massimo di descrittori di file limite può essere letto da /proc file system. Per ottenere il limite corrente del numero di descrittori di file per l'intero sistema utilizzare il comando seguente.

# cat /proc/sys/fs/file-max
180451
Nota :Il parametro /proc/sys/fs/file-max può essere modificato in modo dinamico.

Come calcolare il numero di descrittori di file attualmente utilizzati?

Usa il seguente 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

Per calcolare il numero di descrittori di file attualmente utilizzati:

1344 - 0 = 1344

Come ottenere i limiti per processo sui descrittori di file?

Usa 'ulimit -a ' per ottenere i limiti per processo.

# 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

Come si trova il numero di descrittori di file aperti utilizzati da un determinato processo?

Usa il comando seguente (Sostituisci il tuo PID)

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

Quali sono altri parametri utili?

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. Copia i file nel terminale Linux

  2. Controlla i permessi dei file Linux con ls

  3. Domande per l'intervista su Linux:autorizzazioni di base per file e directory

  4. Domande per l'intervista su Linux – Stampa Linux (CUPS)

  5. Numero massimo massimo consentito di file aperti in Linux

Come troncare (svuotare) i file in Linux

Comando ls in Linux per elencare i file

Come rinominare uno o più file in Linux

Come aprire file e cartelle come amministratore in Nautilus File Manager in Linux

Domande dell'intervista su Linux Network File System (NFS).

Come comprimere un file in Linux