ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ! ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½ΠΎΠ²ΠΈ ΠΏΠΎΡΠΎΡΠΈ Π·Π° ΠΊΡΡΡΠΎΠ²Π΅ΡΠ΅, Π² ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠ΅ ΡΠ΅ Π²Π»ΡΠ±ΠΈΠ»ΠΈ ΠΈ ΡΠ΅Π³Π° Π±ΡΡΠ·Π°ΠΌΠ΅ Π΄Π° ΠΎΠ±ΡΠ²ΠΈΠΌ, ΡΠ΅ Π·Π°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ Π½ΠΎΠ² Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΡΡΡΠΎΠ²Π΅
ΠΠΈΡΡΡΠ°Π»Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ»ΡΠΆΠ°Ρ ΠΊΠ°ΡΠΎ Π²ΠΈΠ΄ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠ° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡΡΠ° Π½Π° Linux Π΄Π° ΠΊΠ°ΠΆΠ΅, ΡΠ΅ βΠ²ΡΠΈΡΠΊΠΎ Π΅ ΡΠ°ΠΉΠ»β.
ΠΠ°ΠΊΠ²ΠΎ Π΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°? ΠΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π΄ΡΠΌΠΈΡΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΡΡΡΡΠ΄Π½ΠΈΡΠΈ ΠΈ Π°Π²ΡΠΎΡΠΈ Π½Π° Linux
ΠΡΠ½ΠΎΠ²ΠΈ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°
Π―Π΄ΡΠΎΡΠΎ Π½Π° 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
, Π½ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅ΡΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΠ²Π° Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°.
ΠΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ΠΈ Π½Π° Linux ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π½Π΅ ΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ 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 (Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ), ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π°ΠΉ-ΠΏΠΎΠ·Π½Π°ΡΠΈ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Linux /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
Π΅ Π±ΡΠΎΠ΅Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠΈ: ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ kobject Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π°ΡΠ°, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈ ΡΠ΅ΡΡΡΡΠΈΡΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π½Π΅Ρ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, /sys
ΡΡΡΡΠ°Π²Π»ΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡΠ΅
Π‘ΡΠ°Π±ΠΈΠ»Π½ΠΈΡΡ ABI Π½Π° ΡΠ΄ΡΠΎΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π² /sys
, Π° Π½Π΅ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΈΡΡΡΡΠ²Π° Π² ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠ·Π±ΡΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² sysfs Π΄Π°Π²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π° Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π·Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ Ρ.Π½. ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅. ΠΠΎΠ³ΠΈΡΠ½ΠΎΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΅, ΡΠ΅ procfs ΡΡΡΠΎ Π΅ ΡΠ°ΡΡ ΠΎΡ ΡΡΠ°Π±ΠΈΠ»Π½ΠΈΡ ABI Π½Π° ΡΠ΄ΡΠΎΡΠΎ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ Π²
Π€Π°ΠΉΠ»ΠΎΠ²Π΅ Π² sysfs
ΠΎΠΏΠΈΡΠ²Π°Ρ Π΅Π΄Π½ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΠΈΠΌΠΈ, Π·Π°ΠΏΠΈΡΠ²Π°Π΅ΠΌΠΈ ΠΈΠ»ΠΈ ΠΈ Π΄Π²Π΅ΡΠ΅. β0β Π²ΡΠ² ΡΠ°ΠΉΠ»Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ SSD Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π°Ρ.
ΠΠ΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π²ΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π° Ρ ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΌΠ΅ VFS Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ eBPF ΠΈ bcc, Π° ΡΠ΅Π³Π° ΠΎΡΠ°ΠΊΠ²Π°ΠΌΠ΅ Π²Π°ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ ΠΈ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ Π²ΠΈ ΠΊΠ°Π½ΠΈΠΌ Π½Π°
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com