ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ! ΠΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π·Π°ΠΏΡΡΠΊΠΈ Π½ΠΎΠ²ΡΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠΎ ΡΠΆΠ΅ ΠΏΠΎΠ»ΡΠ±ΠΈΠ²ΡΠΈΠΌΡΡ Π²Π°ΠΌ ΠΊΡΡΡΠ°ΠΌ ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΡΠΏΠ΅ΡΠΈΠΌ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ ΡΡΠ°ΡΡΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ ΠΏΠΎ ΠΊΡΡΡΡ
ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΎΠ»Ρ Π½Π΅ΠΊΠΎΠΉ Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΎΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ Linux Π³ΠΎΠ²ΠΎΡΠΈΡΡ, ΡΡΠΎ Β«Π²ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠΌΒ».
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°? ΠΠΏΠΈΡΠ°ΡΡΡ Π½Π° ΡΠ»ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ
ΠΊΠΎΠ½ΡΡΠΈΠ±ΡΡΡΠΎΡΠΎΠ² ΠΈ Π°Π²ΡΠΎΡΠΎΠ² Linux
ΠΡΠ½ΠΎΠ²Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
Π―Π΄ΡΠΎ Linux ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ. ΠΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ open()
, read()
ΠΈ write()
Π΄Π»Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π°. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ
ΠΡΠ»ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠΊΡΡΠ²Π°ΡΡ, ΡΠΈΡΠ°ΡΡ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² ΡΡΡΠ½ΠΎΡΡΡ, ΡΠΎ ΡΡΠ° ΡΡΡΠ½ΠΎΡΡΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΡΠ²Π΅ΡΡ
Ρ.
Π€Π΅Π½ΠΎΠΌΠ΅Π½ VFS Π»ΠΈΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π΅Ρ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅, Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ Π΄Π»Ρ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π³Π»Π°ΡΠΈΡ, ΡΡΠΎ Β«Π²ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠΌΒ». ΠΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½Π½ΠΎ, ΡΡΠΎ ΡΠΎΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ²Π΅ΡΡ
Ρ Ρ /dev/console ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠΎΠ»Ρ. ΠΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ Bash ΡΠ΅ΡΡΠΈΡ. ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΡΡΠΎΠΊΠΈ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ (virtual console device) ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π΅Π΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΊΡΠ°Π½Π΅. VFS ΠΈΠΌΠ΅Π΅Ρ Π΄ΡΡΠ³ΠΈΠ΅, Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ°Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½Π° Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ
ΠΠ½Π°ΠΊΠΎΠΌΡΠ΅ Π½Π°ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ext4, NFS ΠΈ /proc ΠΈΠΌΠ΅ΡΡ ΡΡΠΈ Π²Π°ΠΆΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΡΡΠΊΡΡΡΠ΅ Π΄Π°Π½Π½ΡΡ
Π‘, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ read()
ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ write ()
Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ
.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΊ Π±Π°Π·ΠΎΠ²ΡΠΌ ΡΠΈΠΏΠ°ΠΌ VFS, Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π°Ρ
fs/
ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ. Π ΡΠ΄ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΡΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ cgroups
, /dev
ΠΈ tmpfs
, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π² ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ΄ΡΠ° init/
. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ cgroups
, /dev
ΠΈ tmpfs
Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ Β«Π±ΠΎΠ»ΡΡΡΡ ΡΡΠΎΠΉΠΊΡΒ» ΡΡΠ½ΠΊΡΠΈΠΉ file_operations
, Π° Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ.
ΠΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ userspace ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ
ΡΠΈΡΡΠ΅ΠΌ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΌΠΎΠ½ΡΠΈΡΡΠ΅ΠΌΡΡ
Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
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Β»
Π² userspace. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ΅Π»Ρ kobjects
β ΡΡΠΎ ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΡΡΡΠ»ΠΎΠΊ: ΠΊΠΎΠ³Π΄Π° ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° kobject, ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΡΠ΅ΡΡΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, /sys
ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΠΎΠ³ΠΎ
Π‘ΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ΄ΡΠ° (kernel’s stable ABI) ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π² /sys
, Π° Π½Π΅ ΡΠΎ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠΈΡΡΠΈΠ½Π³ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ°ΠΉΠ»Ρ Π² sysfs ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ², ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ
ΡΠΈΡΡΠ΅ΠΌ ΠΈ Ρ.Π΄. ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΡΠ°Π½Ρ. ΠΠ΅Π»Π°Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ procfs ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ stable ABI ΡΠ΄ΡΠ°, Ρ
ΠΎΡΡ ΡΡΠΎ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠ²Π½ΠΎ Π²
Π€Π°ΠΉΠ»Ρ Π² sysfs
ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΈΡΠ°Π΅ΠΌΡΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠΌΠΈ ΠΈΠ»ΠΈ ΠΈ ΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ ΡΡΠ°Π·Ρ. Β«0Β» Π² ΡΠ°ΠΉΠ»Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ SSD Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½.
ΠΡΠΎΡΡΡ ΡΠ°ΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π½Π°ΡΠ½Π΅ΠΌ Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° VFS Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² eBPF ΠΈ bcc, Π° ΡΠ΅ΠΉΡΠ°Ρ ΠΆΠ΄Π΅ΠΌ Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΏΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ Π½Π°
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com