ΠΠ΄ΡΠ°Π²ΠΎ Π½Π° ΡΠΈΡΠ΅! ΠΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π°ΠΌΠ΅ Π΄Π° Π»Π°Π½ΡΠΈΡΠ°ΠΌΠ΅ Π½ΠΎΠ²ΠΈ ΠΏΡΠ΅Π½ΠΎΡΠΈ Π½Π° ΠΊΡΡΡΠ΅Π²ΠΈΡΠ΅ ΡΡΠΎ Π²Π΅ΡΠ΅ Π³ΠΈ ΡΠ°ΠΊΠ°ΡΠ΅, Π° ΡΠ΅Π³Π° Π±ΡΠ·Π°ΠΌΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π²ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π°ΠΌΠ΅ Π½ΠΎΠ² ΡΠ΅Ρ Π½Π° ΠΊΡΡΡΠ΅Π²ΠΈ
ΠΠΈΡΡΡΠ΅Π»Π½ΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π΄Π΅Π»ΡΠ²Π°Π°Ρ ΠΊΠ°ΠΊΠΎ Π΅Π΄Π΅Π½ Π²ΠΈΠ΄ ΠΌΠ°Π³ΠΈΡΠ½Π° Π°ΠΏΡΡΡΠ°ΠΊΡΠΈΡΠ° ΡΡΠΎ Ρ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π½Π° ΡΠΈΠ»ΠΎΠ·ΠΎΡΠΈΡΠ°ΡΠ° Π½Π° Linux Π΄Π° ΠΊΠ°ΠΆΠ΅ Π΄Π΅ΠΊΠ° βΡΓ¨ Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°β.
Π¨ΡΠΎ Π΅ Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ? ΠΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π·Π±ΠΎΡΠΎΠ²ΠΈΡΠ΅ Π½Π° ΡΠ°Π½ΠΈΠΎΡ ΡΠΎΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ ΠΈ Π°Π²ΡΠΎΡ Π½Π° ΠΠΈΠ½ΡΠΊΡ
ΠΡΠ½ΠΎΠ²ΠΈ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ
ΠΠΈΠ½ΡΠΊΡ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΠΈΠΌΠ° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ Π±Π°ΡΠ°ΡΠ° Π·Π° Π΅Π½ΡΠΈΡΠ΅Ρ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΌΠ΅ΡΠ° Π·Π° Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎΡΠ° Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈ open()
, read()
ΠΈ write()
Π·Π° ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΠΊΠΎΠΈ ΠΈΠΌΠ°Π°Ρ ΠΈΠΌΠΈΡΠ°. ΠΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½Π° Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ°
ΠΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΠΌΠ΅, ΡΠΈΡΠ°ΠΌΠ΅ ΠΈ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ Π½Π° Π΅Π½ΡΠΈΡΠ΅Ρ, ΡΠΎΠ³Π°Ρ ΡΠΎΡ Π΅Π½ΡΠΈΡΠ΅Ρ ΡΠ΅ ΡΠΌΠ΅ΡΠ° Π·Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° ΠΏΠΎΠ³ΠΎΡΠ΅.
Π€Π΅Π½ΠΎΠΌΠ΅Π½ΠΎΡ VFS ΡΠ°ΠΌΠΎ Π³ΠΎ ΠΈΡΡΠ°ΠΊΠ½ΡΠ²Π° ΠΎΠΏΡΠ΅ΡΠ²ΠΈΡΠ°ΡΠ΅ΡΠΎ Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΎ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΡΠ»ΠΈΡΠ½ΠΈ Π½Π° Unix Π΄Π΅ΠΊΠ° βΡΓ¨ Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°β. Π Π°Π·ΠΌΠΈΡΠ»Π΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΡ Π΅ ΡΡΠ΄Π½ΠΎ ΡΡΠΎ ΡΠΎΡ ΠΌΠ°Π» ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ³ΠΎΡΠ΅ ΡΠΎ /dev/console ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΠΊΠ°ΠΊΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°. Π‘Π»ΠΈΠΊΠ°ΡΠ° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π° Bash ΡΠ΅ΡΠΈΡΠ°. ΠΡΠΏΡΠ°ΡΠ°ΡΠ΅ΡΠΎ Π½ΠΈΠ·Π° Π΄ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° (ΡΡΠ΅Π΄ Π·Π° Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°) Π³ΠΎ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° Π½Π° Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ Π΅ΠΊΡΠ°Π½. VFS ΠΈΠΌΠ° Π΄ΡΡΠ³ΠΈ, ΡΡΡΠ΅ ΠΏΠΎΡΡΠ΄Π½ΠΈ ΡΠ²ΠΎΡΡΡΠ²Π°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ ΠΏΠΎ
Π‘ΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΡΡΠΎ Π½ΠΈ ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ext4, NFS ΠΈ /proc ΠΈΠΌΠ°Π°Ρ ΡΡΠΈ Π²Π°ΠΆΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ C Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈ read()
Π΅Π΄Π΅Π½ Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ ΠΈ ΠΏΠΎΡΠΎΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ write ()
Π΄ΡΡΠ³ Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΠΈΠ·Π»Π΅Π· Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
ΠΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ΅ Π½Π°ΠΎΡΠ°Π°Ρ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ Π·Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΈ ΠΏΡΠΈΠΏΠ°ΡΠ°Π°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ VFS fs/
ΡΠΎΠ΄ΡΠΆΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠ°Π΄ΡΠΎΡΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΠΈ Π΅Π½ΡΠΈΡΠ΅ΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ cgroups
, /dev
ΠΈ tmpfs
, ΠΊΠΎΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΏΠΎΠ΄ΠΈΠ³Π°ΡΠ΅ ΠΈ Π·Π°ΡΠΎΠ° ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ init/
. ΠΠ΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΈΠΌΠ°ΡΡΠ΅ Π²ΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° cgroups
, /dev
ΠΈ tmpfs
Π½Π΅ Π³ΠΈ Π½Π°ΡΠ΅ΠΊΡΠ²Π°ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ βΠ³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΠΈβ. file_operations
, Π½ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠΈΡΠ°ΡΡΠ΅ ΠΈ ΠΏΠΈΡΡΠ²Π°ΡΡΠ΅ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°.
ΠΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ ΠΏΠΎΠ΄ΠΎΠ»Ρ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΠΊΠ°ΠΊΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏΡΠ²Π° Π΄ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΊΠΎΠΈ Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΎ ΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠ°Π°Ρ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΠΠΈΠ½ΡΠΊΡ. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ pipes
, dmesg
ΠΈ POSIX clocks
, ΠΊΠΎΠΈ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ° ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° file_operations
, Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎ ΠΏΡΠ΅ΠΊΡ VFS ΡΠ»ΠΎΡΠΎΡ.
VFS Π΅ βΡΠ»ΠΎΡ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°β ΠΏΠΎΠΌΠ΅ΡΡ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ file_operations
ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ext4
ΠΈ procfs
. Π€ΡΠ½ΠΊΡΠΈΠΈ file_operations
ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ° ΡΠΎ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ΅Π΄ΠΎΡ ΠΈΠ»ΠΈ ΡΠΎ ΡΡΠ΅Π΄ΠΈ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°. tmpfs
, devtmpfs
ΠΈ cgroups
Π½Π΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ file_operations
, Π½ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°.
ΠΠΎΡΡΠΎΠ΅ΡΠ΅ΡΠΎ Π½Π° VFS ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π΅ ΠΌΠΎΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π°Ρ ΠΎΠ΄ ΡΠ΅ΠΊΠΎΡ ΡΠΈΠΏ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎΠ²ΡΠΎΡΠ½Π°ΡΠ° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ Π΅ ΡΠΈΡΠΎΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΌΠ΅ΡΡ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈΡΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ! ΠΠ΅ΡΡΡΠΎΠ°, Π°ΠΊΠΎ ΠΊΠΎΠ΄ΠΎΡ Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΠΊΡΠ°ΡΠ½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° ΡΠΎΠ΄ΡΠΆΠΈ
/tmp: ΠΠ΄Π½ΠΎΡΡΠ°Π²Π΅Π½ ΡΠΎΠ²Π΅Ρ
ΠΠ΄Π½ΠΎΡΡΠ°Π²Π΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ Π΄Π΅ΠΊΠ° VFS ΡΠ΅ ΠΏΡΠΈΡΡΡΠ½ΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π΅ Π΄Π° ΡΠ΅ Π²Π½Π΅ΡΠ΅ mount | grep -v sd | grep -v :/
, ΠΊΠΎΡ ΡΠ΅ Π³ΠΈ ΠΏΡΠΈΠΊΠ°ΠΆΠ΅ ΡΠΈΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ΠΈ (mounted
) Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΊΠΎΠΈ Π½Π΅ ΡΠ΅ ΡΠ΅Π·ΠΈΠ΄Π΅Π½ΡΠ½ΠΈ Π½Π° Π΄ΠΈΡΠΊΠΎΡ ΠΈ Π½Π΅ ΡΠ΅ NFS, ΡΡΠΎ Π΅ ΡΠΎΡΠ½ΠΎ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΈ. ΠΠ΄Π΅Π½ ΠΎΠ΄ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠ°ΡΠ° (mounts
) VFS Π½Π΅ΡΠΎΠΌΠ½Π΅Π½ΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ /tmp
, Π½Π΅Π»ΠΈ?
Π‘ΠΈΡΠ΅ Π³ΠΎ Π·Π½Π°Π°Ρ ΡΠΎΠ° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ / tmp
Π½Π° ΡΠΈΠ·ΠΈΡΠΊΠΈ ΠΌΠ΅Π΄ΠΈΡΠΌΠΈ - Π»ΡΠ΄ΠΎ!
ΠΠΎΡΡΠΎ Π½Π΅ Π΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ»ΠΈΠ²ΠΎ Π΄Π° ΡΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΠ° /tmp
Π½Π° ΡΠΈΠ·ΠΈΡΠΊΠΈ ΠΌΠ΅Π΄ΠΈΡΠΌΠΈ? ΠΠΈΠ΄Π΅ΡΡΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π²ΠΎ /tmp
ΡΠ΅ ΠΏΡΠΈΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΡΠ΅Π΄ΠΈΡΠ΅ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ±Π°Π²Π½ΠΈ ΠΎΠ΄ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ tmpfs. ΠΡΠ²Π΅Π½ ΡΠΎΠ°, ΡΠΈΠ·ΠΈΡΠΊΠΈΡΠ΅ ΠΌΠ΅Π΄ΠΈΡΠΌΠΈ ΡΠ΅ ΠΏΠΎΠΏΠΎΠ΄Π»ΠΎΠΆΠ½ΠΈ Π½Π° Π°Π±Π΅ΡΠ΅ ΠΈ ΠΊΠΈΠ½Π΅ΡΠ΅ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΏΡΠ΅ΠΏΠΈΡΠ°Π½ΠΈ ΠΎΡΠΊΠΎΠ»ΠΊΡ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π²ΠΎ /tmp ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΎΠ΄ΡΠΆΠ°Ρ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΠ° ΡΡΠΎ Π½ΠΈΠ²Π½ΠΎΡΠΎ ΠΈΡΡΠ΅Π·Π½ΡΠ²Π°ΡΠ΅ ΠΏΡΠΈ ΡΠ΅ΠΊΠΎΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°Π»Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°.
ΠΠ° ΠΆΠ°Π», Π½Π΅ΠΊΠΎΠΈ ΡΠΊΡΠΈΠΏΡΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° Π½Π° Linux ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π°Ρ /tmp Π½Π° ΡΡΠ΅Π΄ΠΎΡ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅. ΠΠ΅ ΠΎΡΠ°ΡΡΠ²Π°ΡΡΠ΅ Π°ΠΊΠΎ ΡΠΎΠ° ΡΠ΅ ΡΠ»ΡΡΠΈ ΠΈ ΡΠΎ Π²Π°ΡΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ. Π‘Π»Π΅Π΄Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈ ΡΠΏΠ°ΡΡΡΠ²Π° ΡΠΎ tmpfs
ΡΡΠ°Π½ΡΠ²Π° Π½Π΅Π΄ΠΎΡΡΠ°ΠΏΠ΅Π½ Π·Π° Π΄ΡΡΠ³ΠΈ ΡΠ΅Π»ΠΈ. Π‘ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ, ΡΠΈΡΡΠ΅ΠΌ ΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ tmpfs ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ° ΠΈΡΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅Π»Π°ΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈ Π΄Π° ΡΠ΅ ΡΡΡΡΠΈ. ΠΡΡΠ³Π° Π½Π°Π²Π΅ΡΡΡΠ²Π°ΡΠ΅: Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° /etc/fstab
, Π·Π°ΠΏΠΎΠΌΠ½Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΌΠΎΡΠ° Π΄Π° Π·Π°Π²ΡΡΠΈ ΡΠΎ Π½ΠΎΠ²Π° Π»ΠΈΠ½ΠΈΡΠ°, ΠΈΠ½Π°ΠΊΡ Π²Π°ΡΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π΅ΠΌΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΈΠ³Π½Π΅.
/proc ΠΈ /sys
ΠΠΎΠΊΡΠ°Ρ /tmp
VFS (Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ) ΠΊΠΎΠΈ ΠΈΠΌ ΡΠ΅ Π½Π°ΡΠΏΠΎΠ·Π½Π°ΡΠΈ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΠΈΠ½ΡΠΊΡ ΡΠ΅ /proc
ΠΈ /sys
. (/dev
ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈ Π½Π΅ΠΌΠ° file_operations
). ΠΠΎΡΡΠΎ ΠΎΠ²ΠΈΠ΅ Π΄Π²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ? ΠΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠ²Π° ΠΏΡΠ°ΡΠ°ΡΠ΅.
procfs
ΡΠΎΠ·Π΄Π°Π²Π° ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π·Π° ΠΊΠΎΠΈ ΡΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° userspace
. ΠΠΎ /proc
ΠΠ°Π΄ΡΠΎΡΠΎ Π΄Π°Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠ°ΠΏΠ°ΡΠΈΡΠ΅ΡΠΈ ΠΈΠΌΠ°, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈ, Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°Ρ. ΠΡΠ²Π΅Π½ ΡΠΎΠ°, /proc/sys
β ΡΡΠΊΠ° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° sysctl
, Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎ Π·Π° userspace
. Π‘ΡΠ°ΡΡΡΠΎΡ ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ΠΈ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ /proc/
.
Π’ΡΠΊΠ° /proc/meminfo
Π΅ ΠΏΡΠ°Π·Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠ° ΡΠ΅ΠΏΠ°ΠΊ ΡΠΎΠ΄ΡΠΆΠΈ Π²ΡΠ΅Π΄Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ /proc
Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°Π°Ρ ΠΊΠΎΠ»ΠΊΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° VFS Π΄ΠΈΡΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ. ΠΠ΄ Π΅Π΄Π½Π° ΡΡΡΠ°Π½Π°, /proc/meminfo
ΡΠΎΠ΄ΡΠΆΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄Π°Ρ ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° free
. ΠΠ΄ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, ΠΏΡΠ°Π·Π½ΠΎ Π΅! ΠΠ°ΠΊΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΠΎΠ²Π°? Π‘ΠΈΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΏΠΎΡΡΠ΅ΡΡΠ²Π° Π½Π° ΠΏΠΎΠ·Π½Π°ΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡΠ° ΡΠΎ Π½Π°ΡΠ»ΠΎΠ² /proc
, ΠΈ Π²ΡΡΡΠ½ΠΎΡΡ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ /proc
Π½Π΅ΠΌΠ° Π½ΠΈΡΡΠΎ ΠΊΠΎΠ³Π° Π½ΠΈΠΊΠΎΡ Π½Π΅ Π³Π»Π΅Π΄Π° ΡΠ°ΠΌΡ. ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΠΊΠΎΠ²
ΠΡΠΈΠ³Π»Π΅Π΄Π½Π° ΠΏΡΠ°Π·Π½ΠΈΠ½Π° procfs
ΠΈΠΌΠ° ΡΠΌΠΈΡΠ»Π° Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ ΡΠ°ΠΌΡ ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈ. ΠΠ°Π»ΠΊΡ ΠΏΠΎΠΈΠ½Π°ΠΊΠ²Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ° ΡΠΎ sysfs
. ΠΡΠ΄Π΅ Π΄Π° ΡΠΏΠΎΡΠ΅Π΄ΠΈΠΌΠ΅ ΠΊΠΎΠ»ΠΊΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΎΠ΄ Π±Π°ΡΠ΅ΠΌ Π΅Π΄Π΅Π½ Π±Π°ΡΡ ΠΈΠΌΠ° /proc
ΠΈ /sys
.
Procfs
ΠΈΠΌΠ° Π΅Π΄Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΈΠΌΠ΅Π½ΠΎ ΠΈΠ·Π²Π΅Π·Π΅Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ, ΡΡΠΎ Π΅ ΠΈΡΠΊΠ»ΡΡΠΎΠΊ Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π°Ρ ΠΏΠΎ ΠΏΠΎΠ΄ΠΈΠ³Π°ΡΠ΅. ΠΠ΄ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, Π²ΠΎ /sys
ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, ΠΎΠ΄ ΠΊΠΎΠΈ ΠΌΠ½ΠΎΠ³Ρ Π·Π°ΡΠ°ΡΠ°Π°Ρ ΡΠ΅Π»Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°. ΠΠ±ΠΈΡΠ½ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ sysfs
ΡΠΎΠ΄ΡΠΆΠ°Ρ ΡΠΎΡΠ½ΠΎ Π΅Π΄Π΅Π½ Π±ΡΠΎΡ ΠΈΠ»ΠΈ Π½ΠΈΠ·Π°, Π·Π° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ ΡΠ°Π±Π΅Π»ΠΈΡΠ΅ ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ ΡΠΎ ΡΠΈΡΠ°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΊΠ°ΠΊΠΎ Π½Π° ΠΏΡ /proc/meminfo
.
ΡΠ΅Π» sysfs
β ΠΠ±Π΅Π·Π±Π΅Π΄Π΅ΡΠ΅ ΡΠΈΡΠ»ΠΈΠ²ΠΈ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠΊΠΈ ΡΠ²ΠΎΡΡΡΠ²Π° Π½Π° ΠΎΠ½Π° ΡΡΠΎ Π³ΠΎ Π½Π°ΡΠ΅ΠΊΡΠ²Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Β«kobjectsΒ»
Π²ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠ΅Π» kobjects
Π΅ Π±ΡΠΎΠ΅ΡΠ΅ Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈ: ΠΊΠΎΠ³Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ° Π·Π° ΠΊΠΎΠ±ΡΠ΅ΠΊΡ Π΅ ΠΈΠ·Π±ΡΠΈΡΠ°Π½Π°, ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠ΅ Π³ΠΈ Π²ΡΠ°ΡΠΈ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ Π½Π΅Π³ΠΎ. Π‘Π΅ΠΏΠ°ΠΊ, /sys
Π³ΠΎ ΡΠΎΡΠΈΠ½ΡΠ²Π° Π½Π°ΡΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΏΠΎΠ·Π½Π°ΡΠΈΡΠ΅
Π‘ΡΠ°Π±ΠΈΠ»Π½ΠΎΡΠΎ ABI Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π° ΠΎΠ½Π° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ Π²ΠΎ /sys
, Π½Π°ΠΌΠ΅ΡΡΠΎ ΠΎΠ½Π° ΡΡΠΎ Π΅ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΡΠΈΡΡΡΠ½ΠΎ Π²ΠΎ ΡΠΎΡ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠ°Π²Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ Π·Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ sysfs ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΡΠ²ΠΈΠ΄ Π²ΠΎ ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄ΠΈΡΠ΅, ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅, Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈΡΠ½. ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΈΠ»ΠΈ ΡΠΈΡΠ°. ΠΠΎΠ½Π΅ΡΡΠ²Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π·Π°ΠΊΠ»ΡΡΠΎΠΊ Π΄Π΅ΠΊΠ° procfs Π΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π΅Π» ΠΎΠ΄ ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΠΎ ABI Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ, ΠΈΠ°ΠΊΠΎ ΡΠΎΠ° Π½Π΅ Π΅ Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ
ΠΠ°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ sysfs
ΠΎΠΏΠΈΡΠ΅ΡΠ΅ Π΅Π΄Π½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ ΡΠ²ΠΎΡΡΡΠ²ΠΎ Π·Π° ΡΠ΅ΠΊΠΎΡ Π΅Π½ΡΠΈΡΠ΅Ρ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΡΠΈΡΠ»ΠΈΠ²ΠΎ, Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΈ Π΄Π²Π΅ΡΠ΅. β0β Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° Π΄Π΅ΠΊΠ° SSD-ΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΠΈ.
ΠΡΠΎΡΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΎΡ ΡΠ΅ Π³ΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ ΡΠΎ ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΡΠ»Π΅Π΄ΠΈ VFS ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ Π°Π»Π°ΡΠΊΠΈΡΠ΅ eBPF ΠΈ bcc, Π° ΡΠ΅Π³Π° Π³ΠΈ ΡΠ΅ΠΊΠ°ΠΌΠ΅ Π²Π°ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ ΠΈ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π°Π»Π½ΠΎ Π²Π΅ ΠΏΠΎΠΊΠ°Π½ΡΠ²Π°ΠΌΠ΅ Π΄Π°
ΠΠ·Π²ΠΎΡ: www.habr.com