GNU/Linux >> Znalost Linux >  >> Linux

Otázky k rozhovoru s Linuxem:Otevřít soubory / Otevřít deskriptory souborů

Co je otevřený soubor?

Otevřeným souborem může být běžný soubor, adresář, blokový speciální soubor, znakový speciální soubor, spouštěcí textový odkaz, knihovna, stream nebo síťový soubor.

Co je deskriptor souboru?

Deskriptor souboru je datová struktura, kterou program používá k získání popisovače souboru. Nejznámější jsou:

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

Je počet otevřených souborů roven počtu otevřených deskriptorů souborů?

Je rozdíl v počtu aktuálně otevřených souborů a počtu aktuálních deskriptorů/obslužných rutin souborů. I když je soubor otevřený, nemusí mít přidružený deskriptor souboru, jako jsou aktuální pracovní adresáře, soubory mapované v paměti a spustitelné textové soubory.

Příkaz „lsof“ poskytne počet otevřených souborů spojených s procesem. Například pro proces s 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

Existuje celkem 51 otevřených souborů spojených s PID 2374 (postfix).

Chcete-li určit počet otevřených deskriptorů souborů spojených s procesem, použijte následující. Pro stejný postfixový proces 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

K PID 2374 (postfix) je přidruženo 13 deskriptorů souborů. Vidíme, že existuje rozdíl mezi počtem otevřených souborů a počtem deskriptorů souborů na proces. postfix má 51 otevřených souborů, ale s ním spojených pouze 13 deskriptorů souborů. Některé z otevřených souborů nemají přidružené deskriptory souborů; např. knihovny, aktuální pracovní adresáře.

Jak získat maximální počet deskriptorů souborů?

V Linuxu lze limit maximálního počtu deskriptorů souborů přečíst z /proc souborový systém. Chcete-li získat aktuální limit počtu deskriptorů souborů pro celý systém, použijte následující příkaz.

# cat /proc/sys/fs/file-max
180451
Poznámka :Parametr /proc/sys/fs/file-max lze dynamicky měnit.

Jak vypočítat počet aktuálně používaných deskriptorů souborů?

Použijte následující příkaz.

# 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

Chcete-li vypočítat počet aktuálně používaných deskriptorů souborů:

1344 - 0 = 1344

Jak získat limity pro jednotlivé procesy u deskriptorů souborů?

Použijte ‘ulimit -a ‘, abyste získali limity pro jednotlivé procesy.

# 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

Jak lze zjistit počet otevřených deskriptorů souborů používaných daným procesem?

Použijte následující příkaz (Nahraďte PID)

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

Jaké jsou další užitečné parametry?

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. Přesouvání souborů na Linuxu bez mv

  2. Zkontrolujte oprávnění souborů Linux pomocí ls

  3. Otázky k pohovoru s Linuxem – základní oprávnění k souborům a adresářům

  1. Zkopírujte soubory v terminálu Linux

  2. Otázky k rozhovoru pro Linux – Linux Printing (CUPS)

  3. Největší povolený maximální počet otevřených souborů v Linuxu

  1. Přesunout soubory v terminálu Linux

  2. 25 nejčastějších otázek a odpovědí v rozhovoru pro Linux

  3. 25 nejčastějších otázek k pohovoru o Linuxu