ΠΠ΄Π½Π°Ρ, Π²ΠΎ Π΅Π΄Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ, ΠΌΠ΅ ΠΏΡΠ°ΡΠ°Π° ΡΡΠΎ Π±ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»Π΅ Π°ΠΊΠΎ Π½Π°ΡΠ΄Π΅ΡΠ΅ ΡΠ°ΡΠΈΠΏΠ°Π½Π° ΡΡΠ»ΡΠ³Π° ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠΎΡ ΡΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠΎΡ ΠΌΡ ΡΠ½Π΅ΠΌΠ° ΠΏΡΠΎΡΡΠΎΡ?
Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΡΠ°Ρ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈΠ² Π΄Π΅ΠΊΠ° ΡΠ΅ Π²ΠΈΠ΄Π°ΠΌ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈ ΠΎΠ²Π° ΠΌΠ΅ΡΡΠΎ ΠΈ, Π°ΠΊΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΅ Π³ΠΎ ΠΈΡΡΠΈΡΡΠ°ΠΌ ΠΌΠ΅ΡΡΠΎΡΠΎ.
ΠΠΎΡΠΎΠ° ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ΅ΡΠΎΡ ΠΏΡΠ°ΡΠ°, ΡΡΠΎ Π°ΠΊΠΎ Π½Π΅ΠΌΠ° ΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½ ΠΏΡΠΎΡΡΠΎΡ Π½Π° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ°ΡΠ°, Π½ΠΎ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ Π³ΠΈ Π³Π»Π΅Π΄Π°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΡΠΎ Π±ΠΈ Π³ΠΎ Π·Π°Π·Π΅Π»Π΅ ΡΠ΅Π»ΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ?
ΠΠ° ΠΎΠ²Π°, ΡΠ΅ΠΊΠΎΠ² Π΄Π΅ΠΊΠ° ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° lsof ΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π³ΠΎ Π·Π°Π·Π΅Π΄Π΅ ΡΠ΅Π»ΠΈΠΎΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ»ΠΈΠ² ΠΏΡΠΎΡΡΠΎΡ, Π° ΠΏΠΎΡΠΎΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄Π΅ΡΡΡΠ²ΡΠ²Π°ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄ ΠΎΠΊΠΎΠ»Π½ΠΎΡΡΠΈΡΠ΅, Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΠΎΠ° Π΄Π°Π»ΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ .
ΠΠ½ΡΠ΅ΡΠ²ΡΡΠ΅ΡΠΎΡ ΠΌΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½Π° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π·Π±ΠΎΡ, Π΄ΠΎΠ΄Π°Π²Π°ΡΡΠΈ Π½Π° ΡΠ²ΠΎΠ΅ΡΠΎ ΠΏΡΠ°ΡΠ°ΡΠ΅: βΠΠ° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° Π½Π΅ Π½ΠΈ ΡΡΠ΅Π±Π°Π°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅, ΡΠΎΠ° Π΅ ΡΠ°ΠΌΠΎ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ, Π½ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½Π° Π·Π°ΡΠΎΠ° ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΠΈΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ΡΠΎ Π³ΡΠ΅ΡΠΊΠΈβ?
βΠΠΎ ΡΠ΅Π΄β, ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈΠ², βΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΠΌΠ΅ Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅ΡΠΎ Π²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅β.
ΠΠ½ΡΠ΅ΡΠ²ΡΡΠ΅ΡΠΎΡ ΡΠ΅ ΡΠΏΡΠΎΡΠΈΠ²ΡΡΠ°Π²ΠΈ: βΠΠ΅, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°, ΡΓ¨ ΡΡΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π²Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, Π° Π²Π°ΠΆΠ½ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ ΡΠ°ΠΌΠ°ΡΠ° ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° ΠΏΡΠΈΠ½ΡΠ΄ΠΈΠΌΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π΅β.
βΠΠΎ ΡΠ΅Π΄β, ΡΠ΅ΠΊΠΎΠ², βΠ°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ Π½Π΅ Π½ΠΈ Π΅ Π³ΡΠΈΠΆΠ° Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅, ΡΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ° ΠΈΡΡΠΈΡΡΠΈΠΌΠ΅ ΠΎΠ²Π°Π° ΠΎΡΠ²ΠΎΡΠ΅Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅ΠΊΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°, Π΄ΡΡΠΈ ΠΈ Π°ΠΊΠΎ Π½Π΅ ΡΠ° Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π²ΠΎ ls ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ."
ΠΠ½ΡΠ΅ΡΠ²ΡΡΠ΅ΡΠΎΡ Π±Π΅ΡΠ΅ Π·Π°Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, Π½ΠΎ ΡΠ°Ρ Π½Π΅.
Π’ΠΎΠ³Π°Ρ ΡΠΈ ΠΏΠΎΠΌΠΈΡΠ»ΠΈΠ², Π·ΠΎΡΡΠΎ Π»ΠΈΡΠ½ΠΎΡΡΠ° ΡΡΠΎ Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠ° ΠΌΠΎΠ΅ΡΠΎ Π·Π½Π°Π΅ΡΠ΅ Π½Π΅ ΠΊΠΎΠΏΠ° ΠΏΠΎΠ΄Π»Π°Π±ΠΎΠΊΠΎ? ΠΠΎ, ΡΡΠΎ Π°ΠΊΠΎ Π½Π° ΠΊΡΠ°ΡΠΎΡ Π½Π° ΠΊΡΠ°ΠΈΡΡΠ°ΡΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ Π²Π°ΠΆΠ½ΠΈ? Π¨ΡΠΎ Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ, Π° Π²ΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΎΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π° Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ° ΠΊΠΎΡΠ° Π½Π΅ΠΌΠ° ΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½ ΠΏΡΠΎΡΡΠΎΡ? Π¨ΡΠΎ Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΈΠ·Π³ΡΠ±ΠΈΠΌΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ Π²Π΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ, ΡΡΠΊΡ ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΡΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Ρ Π³ΠΈ ΠΏΠΈΡΡΠ²Π° ΠΈΠ»ΠΈ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π° Π΄Π° Π³ΠΈ Π½Π°ΠΏΠΈΡΠ΅?
Π’ΡΠ·ΠΈΠΊ
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΠΌΠΎΡΠ°ΡΠ° ΠΊΠ°ΡΠΈΠ΅ΡΠ° ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°Π² Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π°ΠΌ ΠΌΠ°Π»Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° ΡΡΠ΅Π±Π°ΡΠ΅ Π΄Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅. Π ΡΠΎΠ³Π°Ρ ΠΏΠΎΠΌΠΈΡΠ»ΠΈΠ², ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° Π³ΠΎ ΡΡΠΎΠ³Π»Π°ΡΠ°ΠΌ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΡΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Ρ Π³ΠΎ ΠΈΠΌΠ°ΠΌ ΠΠ²Π°Π½ΠΎΠ² ΠΠ²Π°Π½ ΠΠ²Π°Π½ΠΎΠ²ΠΈΡ, Π° ΡΠΎΡ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π½ΠΎ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ Π΄ΡΡΠΆΠ°ΠΌ ΡΠΎ Π½ΠΈΠ²? ΠΠΎΠΆΠ°ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΄Π° ΠΈΡΡΠ°ΠΊΠ½Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΊΡΡΠ΅ΡΠΎ ΠΏΠΎ ΠΈΠΌΠ΅ βΠ’ΡΠ·ΠΈΠΊβ ΠΌΡ ΠΏΡΠΈΠΏΠ°ΡΠ° Π½Π° ΠΈΡΡΠΈΠΎΡ ΠΠ²Π°Π½. ΠΠΎ, ΡΡΠΎ Π°ΠΊΠΎ Π³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ²ΠΎΠ΅ΡΠΎ ΠΈΠΌΠ΅ ΠΈ Π½Π°ΠΌΠ΅ΡΡΠΎ ΠΠ²Π°Π½ ΡΡΠ°Π½Π΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΡΠ°? Π’ΠΎΠ³Π°Ρ ΡΠ΅ ΠΈΡΠΏΠ°Π΄Π½Π΅ Π΄Π΅ΠΊΠ° Π½Π°ΡΠ°ΡΠ° ΠΡΠ° ΠΠ²Π°Π½ΠΎΠ²Π½Π° ΠΠ²Π°Π½ΠΎΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΊΡΡΠ΅, Π° Π½Π°ΡΠΈΠΎΡ Π’ΡΠ·ΠΈΠΊ ΡΠ΅ΠΏΠ°ΠΊ ΡΠ΅ ΠΌΡ ΠΏΡΠΈΠΏΠ°ΡΠ° Π½Π° Π½Π΅ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈΠΎΡ ΠΠ²Π°Π½. ΠΠ°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ Π½Π° ΡΠ΅ΠΊΠΎΡ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ ΠΌΡ Π΄Π°Π΄Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (ID), Π° ΠΌΠΎΡΠΎΡ Tuzik Π±Π΅ΡΠ΅ Π²ΡΠ·Π°Π½ Π·Π° ΠΎΠ²ΠΎΡ ID, ΠΊΠΎΡ, Π²ΡΡΡΠ½ΠΎΡΡ, Π±Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅ΡΠΈΡΠΊΠΈ Π±ΡΠΎΡ. Π’Π°ΠΊΠ°, ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΠΊΠΎΡ Π½Π° ΡΡΠ·ΠΈΠΊΠΎΡ Π±ΠΈΠ» ΡΠΎ Π»ΠΈΡΠ½Π° ΠΊΠ°ΡΡΠ° Π±ΡΠΎΡ 2, Π° Π²ΠΎ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΠ²Π°Π½ Π±ΠΈΠ» ΠΏΠΎΠ΄ ΠΎΠ²Π°Π° Π»ΠΈΡΠ½Π° ΠΊΠ°ΡΡΠ°, Π° ΠΏΠΎΡΠΎΠ° ΠΈ ΠΡΠ° ΡΡΠ°Π½Π°Π»Π° ΠΏΠΎΠ΄ ΠΈΡΡΠ°ΡΠ° Π»ΠΈΡΠ½Π° ΠΊΠ°ΡΡΠ°. ΠΡΠ°ΠΊΡΠΈΡΠ½ΠΎ Π±Π΅ΡΠ΅ ΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ²ΠΎΡΠΎ ΠΈ ΡΡΠΎΡΠ°ΡΡΡΠ²ΠΎΡΠΎ.
ΠΠΏΠΈΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°
ΠΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΡΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ ΠΎΠ²Π°Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π΅ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ ΠΈΡΡ ΠΊΠ°ΠΊΠΎ ΠΈ Π½Π°ΡΠ΅ΡΠΎ ΠΊΡΡΠ΅ ΠΈ ΡΠΎΠ²Π΅ΠΊ. ΠΠ° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΎΡΠ²ΠΎΡΠΈΠ² Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ ΠΈΠΌΠ΅ ivan.txt ΠΈ ΠΏΠΎΡΠ½Π°Π² Π΄Π° Π³ΠΎ ΠΏΠΈΡΡΠ²Π°ΠΌ Π·Π±ΠΎΡΠΎΡ tuzik Π²ΠΎ Π½Π΅Π°, Π½ΠΎ ΡΡΠΏΠ΅Π°Π² Π΄Π° ΡΠ° Π½Π°ΠΏΠΈΡΠ°ΠΌ ΡΠ°ΠΌΠΎ ΠΏΡΠ²Π°ΡΠ° Π±ΡΠΊΠ²Π° βtβ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°, Π° ΠΎΠ²Π°Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π° ΠΎΠ΄ Π½Π΅ΠΊΠΎΡ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ olya.txt. ΠΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΅ ΠΈΡΡΠ°ΡΠ° ΠΈ ΡΠ°Ρ ΡΠ΅ΠΏΠ°ΠΊ ΡΠ°ΠΊΠ°ΠΌ Π΄Π° Π³ΠΎ Π½Π°ΠΏΠΈΡΠ°ΠΌ ΠΌΠΎΡΠΎΡ ΠΊΠ΅Ρ Π½Π° Π½Π΅Π°. Π‘Π΅ΠΊΠΎΡ ΠΏΠ°Ρ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΠΊ
ΠΠ° Linux, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libc ΠΎΡΠ²ΠΎΡΠ° 3 Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π·Π° ΡΠ΅ΠΊΠΎΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° (ΠΏΡΠΎΡΠ΅Ρ) ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ, ΡΠΎ Π±ΡΠΎΠ΅Π²ΠΈ 0,1,2. ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΠ΄Π΅ΡΠ΅ Π½Π° Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈΡΠ΅
- ΠΠΏΠΈΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° 0 ΡΠ΅ Π½Π°ΡΠ΅ΠΊΡΠ²Π° STDIN ΠΈ Π΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ ΡΠΎ Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°.
- ΠΠΏΠΈΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° 1 ΡΠ΅ Π½Π°ΡΠ΅ΠΊΡΠ²Π° STDOUT ΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ΄ ΠΈΠ·Π»Π΅Π·Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π·Π° ΠΏΠ΅ΡΠ°ΡΠ΅ΡΠ΅.
- ΠΠΏΠΈΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° 2 Π΅ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ STDERR ΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΏΠΎΡΠ°ΠΊΠΈ Π·Π° Π³ΡΠ΅ΡΠΊΠ°.
ΠΠΊΠΎ Π²ΠΎ Π²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠΈΡΠ°ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΈΡΡΠ²Π°ΡΠ΅, ΡΠΎΠ³Π°Ρ Π½Π°ΡΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΠ΅ Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ ΠΏΡΠ²ΠΈΠΎΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ΅Π½ ID ΠΈ ΡΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π±ΡΠΎΡ 3.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΏΠΈΡΠΎΠΊΠΎΡ ΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π·Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΠΏΡΠΎΡΠ΅Ρ Π°ΠΊΠΎ Π³ΠΎ Π·Π½Π°Π΅ΡΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ PID.
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΠΌΠ΅ ΠΊΠΎΠ½Π·ΠΎΠ»Π° ΡΠΎ bash ΠΈ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠ΅ PID Π½Π° Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ
[user@localhost ]$ echo $$
15771
ΠΠΎ Π²ΡΠΎΡΠ°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π°, ΡΡΠ°ΡΡΡΠ²Π°ΡΡΠ΅
[user@localhost ]$ ls -lah /proc/15771/fd/
total 0
dr-x------ 2 user user 0 Oct 7 15:42 .
dr-xr-xr-x 9 user user 0 Oct 7 15:42 ..
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21
ΠΠΎΠΆΠ΅ΡΠ΅ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎ Π΄Π° Π³ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠΎ Π±ΡΠΎΡ 255 Π²ΠΎ ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ, ΡΠΎΡ Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π·Π° Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈ ΠΎΠ΄ ΡΠ°ΠΌΠΈΠΎΡ bash, Π° Π½Π΅ ΠΎΠ΄ ΠΏΠΎΠ²ΡΠ·Π°Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
Π‘Π΅Π³Π° ΡΠΈΡΠ΅ 3 Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ ΠΏΡΠ΅Π²Π΄ΠΎ-ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π½ΠΈΠΎΡ ΡΡΠ΅Π΄
[user@localhost ]$ echo "hello world" > /proc/15771/fd/0
Π Π²ΠΎ ΠΏΡΠ²Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠ΅
[user@localhost ]$ hello world
ΠΡΠ΅Π½Π°ΡΠΎΡΠΈ ΠΈ ΡΠ΅Π²ΠΊΠΈ
ΠΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΎΡΡΡΠ»ΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ 3 Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π²ΠΎ ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΠΏΡΠΎΡΠ΅Ρ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ Π²ΠΎ bash, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅ΠΊΡ ΡΠ΅Π²ΠΊΠ° (ΡΠ΅Π²ΠΊΠ°) ΡΡΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π° Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΠΈ, Π²ΠΈΠ΄Π΅ΡΠ΅
[user@localhost ]$ cat /dev/zero | sleep 10000
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΎΠ²Π°Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° strace -f ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π²Π½Π°ΡΡΠ΅, Π½ΠΎ ΡΠ΅ Π³ΠΎ Π½Π°ΠΊΡΠ°ΡΠ°ΠΌ.
ΠΠ°ΡΠΈΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈ Π±Π°Ρ ΠΏΡΠΎΡΠ΅Ρ ΡΠΎ PID 15771 ΡΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΡΠ°Π·Π±ΠΈΡΠ° ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠ»ΠΊΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΠ°ΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅, Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΠ΄ Π½ΠΈΠ²: ΠΌΠ°ΡΠΊΠ° ΠΈ ΡΠΏΠΈΠ΅ΡΠ΅. ΠΠ°Ρ Π·Π½Π°Π΅ Π΄Π΅ΠΊΠ° ΡΡΠ΅Π±Π° Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ Π΄Π²Π° Π΄Π΅ΡΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΈ Π΄Π° Π³ΠΈ ΡΠΏΠΎΠΈ Π²ΠΎ Π΅Π΄Π½Π° ΡΠ΅Π²ΠΊΠ°. ΠΠΊΡΠΏΠ½ΠΎ, Π±Π°Ρ ΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° ΠΎΠ΄ 2 Π΄Π΅ΡΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΈ Π΅Π΄Π½Π° ΡΠ΅Π²ΠΊΠ°.
ΠΡΠ΅Π΄ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ Π΄Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ, bash ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΠΊ
ΠΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ, ΡΠ΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ΡΠ΅Π²ΠΊΠ°ΡΠ° Π΅ Π²Π΅ΡΠ΅ ΡΠ°ΠΌΡ, Π½ΠΎ ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ΠΌΠ° Π΄Π΅ΡΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ:
PID command
15771 bash
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:42 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21
ΠΠΎΡΠΎΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ
PID command
15771 bash
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:42 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21
PID command
9004 bash
lrwx------ 1 user user 64 Oct 7 15:57 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 255 -> /dev/pts/21
PID command
9005 bash
lrwx------ 1 user user 64 Oct 7 15:57 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 255 -> /dev/pts/21
ΠΠ΅ Π·Π°Π±ΠΎΡΠ°Π²Π°ΡΡΠ΅ Π΄Π΅ΠΊΠ° ΠΊΠ»ΠΎΠ½ΠΎΡ Π³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠ° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΡΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΠΈΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΈΡΡΠΈ ΠΈ Π²ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ ΠΈ ΠΊΠ°Ρ Π΄Π΅ΡΡΠΊΠΈΡΠ΅. ΠΠ°Π΄Π°ΡΠ°ΡΠ° Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠΎ PID 15771 Π΅ Π΄Π° Π³ΠΈ ΡΠ»Π΅Π΄ΠΈ Π΄Π΅ΡΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΠ°ΠΌΠΎ ΡΠ΅ΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ ΠΎΠ΄ Π΄Π΅ΡΠ°ΡΠ°.
ΠΠ°ΡΠΎΠ°, Π½Π΅ ΠΌΡ ΡΡΠ΅Π±Π° ΡΠ΅Π²ΠΊΠ° ΠΈ Π³ΠΈ Π·Π°ΡΠ²ΠΎΡΠ° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠΎ Π±ΡΠΎΠ΅Π²ΠΈΡΠ΅ 3 ΠΈ 4.
ΠΠΎ ΠΏΡΠ²ΠΈΠΎΡ Π±Π°Ρ Π΄Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅Ρ ΡΠΎ PID 9004, ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ
ΠΠΎ Π²ΡΠΎΡΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° Π΄Π΅ΡΠ΅ ΡΠΎ PID 9005, bash dup2 ΡΠ° ΡΡΠ°Π²Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π²ΠΎ STDIN Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π±ΡΠΎΡ 0. Π‘Π΅Π³Π° ΡΓ¨ ΡΡΠΎ ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ° Π½Π°ΡΠΈΠΎΡ Π²ΡΠΎΡ Π±Π°Ρ ΡΠΎ PID 9005 ΡΠ΅ ΡΠΈΡΠ° ΠΎΠ΄ ΡΠ΅Π²ΠΊΠ°ΡΠ°.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ°, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠΎ Π±ΡΠΎΠ΅Π²ΠΈ 3 ΠΈ 4 ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π·Π°ΡΠ²ΠΎΡΠ΅Π½ΠΈ Π²ΠΎ Π΄Π΅ΡΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠΈΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ.
ΠΠ°ΠΌΠ΅ΡΠ½ΠΎ Π³ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°ΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° 255, ΡΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΎ ΠΎΠ΄ ΡΠ°ΠΌΠΈΠΎΡ bash ΠΈ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ Π·Π°ΡΠ²ΠΎΡΠ΅Π½ Π²ΠΎ Π΄Π΅ΡΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ.
Π‘Π»Π΅Π΄Π½ΠΎ, Π²ΠΎ ΠΏΡΠ²ΠΈΠΎΡ Π΄Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅Ρ ΡΠΎ PID 9004, bash Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π° ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΠΊ
ΠΠΎ Π²ΡΠΎΡΠΈΠΎΡ Π΄Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅Ρ ΡΠΎ PID 9005, bash ΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π° Π²ΡΠΎΡΠ°ΡΠ° ΠΈΠ·Π²ΡΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΡΠΎ ΡΠ° Π½Π°Π²Π΅Π΄ΠΎΠ²ΠΌΠ΅, Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ /usr/bin/sleep.
Π‘ΠΈΡΡΠ΅ΠΌΡΠΊΠΈΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ exec Π½Π΅ Π³ΠΈ Π·Π°ΡΠ²ΠΎΡΠ° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ Π½Π΅ Π±ΠΈΠ»Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ ΡΠΎ Π·Π½Π°ΠΌΠ΅ΡΠΎ O_CLOEXEC Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ ΠΊΠΎΠ³Π° Π±ΠΈΠ» ΠΈΠ·Π²ΡΡΠ΅Π½ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ. ΠΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΏΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΈΠ·Π²ΡΡΠ½ΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, ΡΠΈΡΠ΅ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π·Π°ΡΡΠ²Π°Π½ΠΈ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°:
[user@localhost ]$ pgrep -P 15771
9004
9005
[user@localhost ]$ ls -lah /proc/15771/fd/
total 0
dr-x------ 2 user user 0 Oct 7 15:42 .
dr-xr-xr-x 9 user user 0 Oct 7 15:42 ..
lrwx------ 1 user user 64 Oct 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:42 255 -> /dev/pts/21
[user@localhost ]$ ls -lah /proc/9004/fd
total 0
dr-x------ 2 user user 0 Oct 7 15:57 .
dr-xr-xr-x 9 user user 0 Oct 7 15:57 ..
lrwx------ 1 user user 64 Oct 7 15:57 0 -> /dev/pts/21
l-wx------ 1 user user 64 Oct 7 15:57 1 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 2 -> /dev/pts/21
lr-x------ 1 user user 64 Oct 7 15:57 3 -> /dev/zero
[user@localhost ]$ ls -lah /proc/9005/fd
total 0
dr-x------ 2 user user 0 Oct 7 15:57 .
dr-xr-xr-x 9 user user 0 Oct 7 15:57 ..
lr-x------ 1 user user 64 Oct 7 15:57 0 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct 7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct 7 15:57 2 -> /dev/pts/21
[user@localhost ]$ ps -up 9004
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 9004 0.0 0.0 107972 620 pts/21 S+ 15:57 0:00 cat /dev/zero
[user@localhost ]$ ps -up 9005
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 9005 0.0 0.0 107952 360 pts/21 S+ 15:57 0:00 sleep 10000
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΠΎΡ Π±ΡΠΎΡ Π½Π° Π½Π°ΡΠ°ΡΠ° ΡΠ΅Π²ΠΊΠ° Π΅ ΠΈΡΡ Π²ΠΎ Π΄Π²Π°ΡΠ° ΠΏΡΠΎΡΠ΅ΡΠΈ. Π’Π°ΠΊΠ°, ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡΡΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΡ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΠΎ ΠΈΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π».
ΠΠ° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π½Π΅ ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Π½ΠΈ ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΡΠΈ ΡΡΠΎ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈ bash, ΡΠΎΠΏΠ»ΠΎ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΡΠ΅ΠΊΡ strace ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π²Π½Π°ΡΡΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π°ΠΊΠ°:
strace -s 1024 -f bash -c "ls | grep hello"
ΠΠ° ΡΠ΅ ββΠ²ΡΠ°ΡΠΈΠΌΠ΅ Π½Π° Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎ ΡΠ½Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π΄ΠΈΡΠΊΠΎΡ ΠΈ ΠΎΠ±ΠΈΠ΄ Π΄Π° Π·Π°ΡΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π±Π΅Π· Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ. ΠΡΠ΄Π΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠ΅ ΠΌΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΊΠΎΡΠ° ΡΠ΅ ΠΏΠΈΡΡΠ²Π° Π½Π° Π΄ΠΈΡΠΊ ΠΎΠΊΠΎΠ»Ρ 1 ΠΌΠ΅Π³Π°Π±Π°ΡΡ Π²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄Π°. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, Π°ΠΊΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΊΠΎΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π° Π΄ΠΈΡΠΊΠΎΡ, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ΅ Π³ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠ²Π° ΠΈ ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π΄Π° Π³ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π·Π° ΡΠ΅ΠΊΡΠ½Π΄Π°. ΠΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ ΡΡΠΎ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ°ΠΌ Python, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ Π΄ΡΡΠ³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ.
[user@localhost ]$ cat openforwrite.py
import datetime
import time
mystr="a"*1024*1024+"n"
with open("123.txt", "w") as f:
while True:
try:
f.write(str(datetime.datetime.now()))
f.write(mystr)
f.flush()
time.sleep(1)
except:
pass
Π‘ΡΠ°ΡΡΡΠ²Π°ΡΡΠ΅ ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π³ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅
[user@localhost ]$ python openforwrite.py &
[1] 3762
[user@localhost ]$ ps axuf | grep [o]penforwrite
user 3762 0.0 0.0 128600 5744 pts/22 S+ 16:28 0:00 | _ python openforwrite.py
[user@localhost ]$ ls -la /proc/3762/fd
total 0
dr-x------ 2 user user 0 Oct 7 16:29 .
dr-xr-xr-x 9 user user 0 Oct 7 16:29 ..
lrwx------ 1 user user 64 Oct 7 16:29 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 7 16:29 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 7 16:29 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 7 16:29 3 -> /home/user/123.txt
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π³ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ 3 ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΡΠ΅ Π΅Π΄Π΅Π½ ΡΡΠΎ Π³ΠΎ ΠΎΡΠ²ΠΎΡΠΈΠ²ΠΌΠ΅. ΠΡΠ΄Π΅ Π΄Π° ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°:
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 117M Oct 7 16:30 123.txt
ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ, ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌΠ΅ ΠΏΡΠ°Π²Π°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°:
[user@localhost ]$ sudo chown root: 123.txt
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 root root 168M Oct 7 16:31 123.txt
[user@localhost ]$ ls -lah 123.txt
-rw-rw-r-- 1 root root 172M Oct 7 16:31 123.txt
ΠΠ»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΡΡΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π°Ρ, ΠΈΠ°ΠΊΠΎ Π½Π°ΡΠΈΠΎΡ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ Π½Π΅ΠΌΠ° ΠΏΡΠ°Π²ΠΎ Π΄Π° ΠΏΠΈΡΡΠ²Π° Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°. ΠΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΎΡΡΡΡΠ°Π½ΠΈΠΌΠ΅:
[user@localhost ]$ sudo rm 123.txt
[user@localhost ]$ ls 123.txt
ls: cannot access 123.txt: No such file or directory
ΠΠ°Π΄Π΅ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅? Π Π΄Π°Π»ΠΈ Π²ΠΎΠΎΠΏΡΡΠΎ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ? ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅:
[user@localhost ]$ ls -la /proc/3762/fd
total 0
dr-x------ 2 user user 0 Oct 7 16:29 .
dr-xr-xr-x 9 user user 0 Oct 7 16:29 ..
lrwx------ 1 user user 64 Oct 7 16:29 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 7 16:29 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 7 16:29 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 7 16:29 3 -> /home/user/123.txt (deleted)
ΠΠ°, Π½Π°ΡΠΈΠΎΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΓ¨ ΡΡΡΠ΅ ΠΏΠΎΡΡΠΎΠΈ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ ΡΠΎ ΠΎΠ²ΠΎΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΊΠ°ΠΊΠΎ Π½Π°ΡΠ°ΡΠ° ΡΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° ΡΠΈΡΠ°ΠΌΠ΅, ΠΈΡΡΠΈΡΡΠΈΠΌΠ΅ ΠΈ ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅.
ΠΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°:
[user@localhost ]$ lsof | grep 123.txt
python 31083 user 3w REG 8,5 19923457 2621522 /home/user/123.txt
ΠΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΅ 19923457. Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΠΌΠ΅ Π΄Π° ΡΠ° ΠΈΡΡΠΈΡΡΠΈΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°:
[user@localhost ]$ truncate -s 0 /proc/31083/fd/3
[user@localhost ]$ lsof | grep 123.txt
python 31083 user 3w REG 8,5 136318390 2621522 /home/user/123.txt
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ°ΠΌΠΎ ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π° ΠΈ Π½Π°ΡΠΈΠΎΡ Π±Π°Π³Π°ΠΆΠ½ΠΈΠΊΠΎΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅. ΠΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΈΠΌΠ΅ ΠΊΠΎΠ½ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ
with open("123.txt", "w") as f:
ΡΡΠ΅Π±Π° Π΄Π° ΡΡΠ°Π²ΠΈΠΌΠ΅
with open("123.txt", "a") as f:
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎ Π·Π½Π°ΠΌΠ΅Π½ΡΠ΅ βwβ.
[user@localhost ]$ strace -e trace=open python openforwrite.py 2>&1| grep 123.txt
open("123.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
ΠΈ ΡΠΎ Π·Π½Π°ΠΌΠ΅Π½ΡΠ΅ βΠ°β.
[user@localhost ]$ strace -e trace=open python openforwrite.py 2>&1| grep 123.txt
open("123.txt", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ Π½Π° Π²Π΅ΡΠ΅ ΠΈΠ·Π²ΡΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ
Π§Π΅ΡΡΠΎ, ΠΊΠΎΠ³Π° ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΄Π΅Π±Π°Π³Π΅ΡΠΈ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, GDB) ΠΈΠ»ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΠ²ΠΎΠ° Π½Π° Π½Π°ΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°. ΠΠΈΠ½ΡΠΊΡ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΈ ΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° Π²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅, ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎΡΠΊΠ° Π½Π° ΠΏΡΠ΅ΠΊΠΈΠ½ ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΠΌΡ ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΠΌΡ.
ΠΡΠ°ΡΠ°ΡΡΠΈ ΡΠ΅ Π½Π° ΠΏΡΠ²ΠΎΠ±ΠΈΡΠ½ΠΎΡΠΎ ΠΏΡΠ°ΡΠ°ΡΠ΅ Π·Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊΠΎΡ Π½Π° ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π΄ΠΈΡΠΊΠΎΡ Π·Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π°ΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΡΠΈΠΌΡΠ»ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ.
ΠΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π·Π° Π½Π°ΡΠ°ΡΠ° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ°, ΠΊΠΎΡΠ° ΡΠ΅ ΡΠ° ΠΌΠΎΠ½ΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡΠ΅Π±Π΅Π½ Π΄ΠΈΡΠΊ:
[user@localhost ~]$ dd if=/dev/zero of=~/tempfile_for_article.dd bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00525929 s, 2.0 GB/s
[user@localhost ~]$
ΠΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ:
[user@localhost ~]$ mkfs.ext4 ~/tempfile_for_article.dd
mke2fs 1.42.9 (28-Dec-2013)
/home/user/tempfile_for_article.dd is not a block special device.
Proceed anyway? (y,n) y
...
Writing superblocks and filesystem accounting information: done
[user@localhost ~]$
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΠΌΠΎΠ½ΡΠΈΡΠ°ΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ:
[user@localhost ~]$ sudo mount ~/tempfile_for_article.dd /mnt/
[sudo] password for user:
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 172K 7.9M 3% /mnt
ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ ΡΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΠΊ:
[user@localhost ~]$ sudo mkdir /mnt/logs
[user@localhost ~]$ sudo chown user: /mnt/logs
ΠΡΠ΄Π΅ Π΄Π° ΡΠ° ΠΎΡΠ²ΠΎΡΠΈΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ Π²ΠΎ Π½Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°:
with open("/mnt/logs/123.txt", "w") as f:
ΠΠ°Π½ΡΠΈΡΠ°
[user@localhost ]$ python openforwrite.py
Π‘Π΅ ΡΠ΅ΠΊΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 8.0M 0 100% /mnt
ΠΠ½Π°ΡΠΈ, Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΠΎΠΏΠΈΡΠ°Π½ Π½Π° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°. Π‘Π»ΠΎΠ±ΠΎΠ΄Π΅Π½ ΠΏΡΠΎΡΡΠΎΡ 0, ΠΎΠΊΡΠΏΠΈΡΠ°Π½ 100%.
Π‘Π΅ ΡΠ΅ΡΠ°Π²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠΏΠΎΡΠ΅Π΄ ΡΡΠ»ΠΎΠ²ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ, ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΠΌΠ΅ Π΄Π° ΡΠ½ΠΈΠΌΠΈΠΌΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π²Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΊΠΎΠΈ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ±Π°Ρ. Π ΠΏΡΠΈΡΠΎΠ°, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ° Π±Π΅Π· Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ.
ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΓ¨ ΡΡΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π΄ΠΈΡΠΊΠΎΡ, Π½ΠΎ Π²ΠΎ Π΄ΡΡΠ³Π° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ / Π΄ΠΎΠΌΠ°.
ΠΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ βΡΠ΅ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΠΌΠ΅ Π²ΠΎ Π»Π΅Ρβ Π½Π°ΡΠΈΠΎΡ ΠΊΠΎΠ΄.
ΠΠΎ Π³Π»Π΅Π΄Π°ΠΌΠ΅ PID Π½Π° Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΡ Π³ΠΎ ΠΈΠ·Π΅Π΄Π΅ ΡΠ΅Π»ΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π΄ΠΈΡΠΊΠΎΡ:
[user@localhost ~]$ ps axuf | grep [o]penfor
user 10078 27.2 0.0 128600 5744 pts/22 R+ 11:06 0:02 | _ python openforwrite.py
ΠΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΡΠΎΡΠ΅Ρ ΡΠΎ gdb
[user@localhost ~]$ gdb -p 10078
...
(gdb)
ΠΠΈ ΡΠ°Π·Π³Π»Π΅Π΄ΡΠ²Π°ΠΌΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ:
(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user 0 Oct 8 11:06 .
dr-xr-xr-x 9 user user 0 Oct 8 11:06 ..
lrwx------ 1 user user 64 Oct 8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:09 3 -> /mnt/logs/123.txt
ΠΠΈ ΡΠ°Π·Π³Π»Π΅Π΄ΡΠ²Π°ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ Π·Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠΎ Π±ΡΠΎΡ 3, ΡΡΠΎ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°
(gdb) shell cat /proc/10078/fdinfo/3
pos: 8189952
flags: 0100001
mnt_id: 482
ΠΠΌΠ°ΡΡΠΈ Π³ΠΎ Π½Π° ΡΠΌ ΠΊΠ°ΠΊΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΠ²ΠΈΠΊ ΠΏΡΠ°Π²ΠΈ Python (Π²ΠΈΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ³ΠΎΡΠ΅ ΠΊΠ°Π΄Π΅ ΡΠ΅ Π·Π°Π·Π΅Π΄ΠΎΠ²ΠΌΠ΅ ΠΈ Π½Π°ΡΠ΄ΠΎΠ²ΠΌΠ΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΏΠΎΠ²ΠΈΠΊ), Π΄ΠΎΠ΄Π΅ΠΊΠ° Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠΈΠΎΡ ΠΊΠΎΠ΄ Π·Π° Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π½ΠΈΠ΅ ΡΠ°ΠΌΠΈΡΠ΅ Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΈΡΡΠΎΡΠΎ Π²ΠΎ ΠΈΠΌΠ΅ Π½Π° Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΡΠ΅Ρ, Π½ΠΎ Π½ΠΈ ΡΡΠ΅Π±Π° O_WRONLY|O_CREAT| O_TRUNC Π±ΠΈΡΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΡΠΎ Π½ΡΠΌΠ΅ΡΠΈΡΠΊΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΈ ΠΈΠ·Π²ΠΎΡΠΈΡΠ΅ Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ
#define O_WRONLY 00000001
#define O_CREAT 00000100
#define O_TRUNC 00001000
ΠΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π²ΠΎ Π΅Π΄Π½Π°, Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ 00001101
ΠΠΎΠ΄Π΅ΡΠ΅ Π½Π° Π½Π°ΡΠΈΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ ΠΎΠ΄ gdb
(gdb) call open("/home/user/123.txt", 00001101,0666)
$1 = 4
Π’Π°ΠΊΠ°, Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ Π½ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ Π±ΡΠΎΡ 4 ΠΈ Π½ΠΎΠ²Π° ΠΎΡΠ²ΠΎΡΠ΅Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π½Π° Π΄ΡΡΠ³Π° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅:
(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user 0 Oct 8 11:06 .
dr-xr-xr-x 9 user user 0 Oct 8 11:06 ..
lrwx------ 1 user user 64 Oct 8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:09 3 -> /mnt/logs/123.txt
l-wx------ 1 user user 64 Oct 8 11:15 4 -> /home/user/123.txt
Π‘Π΅ ΡΠ΅ΡΠ°Π²Π°ΠΌΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ ΡΠΎ ΡΠ΅Π²ΠΊΠ° - ΠΊΠ°ΠΊΠΎ bash Π³ΠΈ ΠΌΠ΅Π½ΡΠ²Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΠΈ Π²Π΅ΡΠ΅ Π³ΠΎ Π½Π°ΡΡΠΈΠ²ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ dup2.
ΠΠ±ΠΈΠ΄ΡΠ²Π°ΡΡΠΈ ΡΠ΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ Π΅Π΄Π΅Π½ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ Π΄ΡΡΠ³
(gdb) call dup2(4,3)
$2 = 3
ΠΡΠΎΠ²Π΅ΡΠΊΠ°:
(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user 0 Oct 8 11:06 .
dr-xr-xr-x 9 user user 0 Oct 8 11:06 ..
lrwx------ 1 user user 64 Oct 8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:09 3 -> /home/user/123.txt
l-wx------ 1 user user 64 Oct 8 11:15 4 -> /home/user/123.txt
ΠΠ°ΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° 4, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½Π΅ Π½ΠΈ ΡΡΠ΅Π±Π°:
(gdb) call close (4)
$1 = 0
Π ΠΈΠ·Π»Π΅Π·Π΅ΡΠ΅ ΠΎΠ΄ gdb
(gdb) quit
A debugging session is active.
Inferior 1 [process 10078] will be detached.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/python2.7, process 10078
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½ΠΎΠ²Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°:
[user@localhost ~]$ ls -lah /home/user/123.txt
-rw-rw-r-- 1 user user 5.1M Oct 8 11:18 /home/user/123.txt
[user@localhost ~]$ ls -lah /home/user/123.txt
-rw-rw-r-- 1 user user 7.1M Oct 8 11:18 /home/user/123.txt
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π°Ρ Π²ΠΎ Π½ΠΎΠ²Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΡΡΠ°ΡΠ°ΡΠ°:
[user@localhost ~]$ ls -lah /mnt/logs/123.txt
-rw-rw-r-- 1 user user 7.9M Oct 8 11:08 /mnt/logs/123.txt
ΠΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π½Π΅ ΡΠ΅ Π³ΡΠ±Π°Ρ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠΈ, Π΄Π½Π΅Π²Π½ΠΈΡΠΈΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π°Ρ Π½Π° Π½ΠΎΠ²Π° Π»ΠΎΠΊΠ°ΡΠΈΡΠ°.
ΠΠ° Π³ΠΈ ΠΎΡΠ΅ΠΆΠ½ΠΈΠΌΠ΅ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΡ
ΠΠ°ΠΌΠΈΡΠ»Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π½ΠΈ ΡΠ΅ Π²Π°ΠΆΠ½ΠΈ, Π½ΠΎ Π½Π΅ΠΌΠ°ΠΌΠ΅ ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π΄ΠΈΡΠΊΠΎΡ Π²ΠΎ Π½ΠΈΡΡ Π΅Π΄Π½Π° ΠΎΠ΄ ΠΏΠ°ΡΡΠΈΡΠΈΠΈΡΠ΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΡΠ·Π΅ΠΌΠ΅ Π΄ΠΈΡΠΊΠΎΡ.
ΠΠ½Π° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ Π΅ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π΅ΠΊΠ°Π΄Π΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ ΡΠ΅Π²ΠΊΠ°, ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΎΠ΄ ΡΠ΅Π²ΠΊΠ°ΡΠ° Π΄ΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΏΡΠ΅ΠΊΡ Π½Π΅ΠΊΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ netcat.
ΠΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠ΅ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π° ΡΠ΅Π²ΠΊΠ° ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° mkfifo. ΠΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ ΠΏΡΠ΅Π²Π΄ΠΎ-Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ, Π΄ΡΡΠΈ ΠΈ Π°ΠΊΠΎ Π½Π΅ΠΌΠ° ΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½ ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π½Π΅Π°.
Π Π΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΡΠ΅ ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅:
[user@localhost ]$ python openforwrite.py
[user@localhost ~]$ ps axuf | grep [o]pen
user 5946 72.9 0.0 128600 5744 pts/22 R+ 11:27 0:20 | _ python openforwrite.py
[user@localhost ~]$ ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/123.txt
[user@localhost ~]$ df -h | grep mnt
/dev/loop0 8.7M 8.0M 0 100% /mnt
ΠΠ΅ΠΌΠ° ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π΄ΠΈΡΠΊΠΎΡ, Π½ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠ΅ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π° ΡΠ΅Π²ΠΊΠ° ΡΠ°ΠΌΡ:
[user@localhost ~]$ mkfifo /mnt/logs/megapipe
[user@localhost ~]$ ls -lah /mnt/logs/megapipe
prw-rw-r-- 1 user user 0 Oct 8 11:28 /mnt/logs/megapipe
Π‘Π΅Π³Π° ΡΡΠ΅Π±Π° Π½Π΅ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ Π·Π°Π²ΠΈΡΠΊΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ Π²Π»Π΅Π³ΡΠ²Π°Π°Ρ Π²ΠΎ ΠΎΠ²Π°Π° ΡΠ΅Π²ΠΊΠ° Π½Π° Π΄ΡΡΠ³ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠ΅ΠΊΡ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΠΈΡΡΠ°ΡΠ° netcat Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° ΠΎΠ²Π°.
ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ remote-server.example.com, ΡΡΠ°ΡΡΡΠ²Π°ΡΡΠ΅
[user@localhost ~]$ nc -l 7777 > 123.txt
ΠΠ° Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ΅Π½ ΡΠ΅ΡΠ²Π΅Ρ, ΡΡΠ°ΡΡΡΠ²Π°ΡΡΠ΅ Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π΅Π½ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»
[user@localhost ~]$ nc remote-server.example.com 7777 < /mnt/logs/megapipe
Π‘Π΅Π³Π° ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ Π²Π»Π΅Π³ΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠ΅Π²ΠΊΠ°ΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠ΅ ΠΎΠ΄Π°Ρ Π²ΠΎ stdin Π²ΠΎ netcat, ΡΡΠΎ ΡΠ΅ Π³ΠΈ ΠΈΡΠΏΡΠ°ΡΠΈ Π΄ΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π½Π° ΠΏΠΎΡΡΠ°ΡΠ° 7777.
Π‘Γ¨ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ Π΅ Π΄Π° ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π° ΠΎΠ²Π°Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π° ΡΠ΅Π²ΠΊΠ°.
ΠΠ΅ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° ΡΠ°Π±ΠΎΡΠΈ:
[user@localhost ~]$ ps axuf | grep [o]pen
user 5946 99.8 0.0 128600 5744 pts/22 R+ 11:27 169:27 | _ python openforwrite.py
[user@localhost ~]$ ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/123.txt
ΠΠ΄ ΡΠΈΡΠ΅ Π·Π½Π°ΠΌΠ΅Π½ΡΠ°, Π½ΠΈ ΡΡΠ΅Π±Π° ΡΠ°ΠΌΠΎ O_WRONLY Π±ΠΈΠ΄Π΅ΡΡΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π²Π΅ΡΠ΅ ΠΏΠΎΡΡΠΎΠΈ ΠΈ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° Π±ΡΠΈΡΠ΅ΠΌΠ΅
[user@localhost ~]$ gdb -p 5946
...
(gdb) call open("/mnt/logs/megapipe", 00000001,0666)
$1 = 4
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/123.txt
l-wx------ 1 user user 64 Oct 8 14:20 4 -> /mnt/logs/megapipe
(gdb) call dup2(4,3)
$2 = 3
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/megapipe
l-wx------ 1 user user 64 Oct 8 14:20 4 -> /mnt/logs/megapipe
(gdb) call close(4)
$3 = 0
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user 0 Oct 8 11:27 .
dr-xr-xr-x 9 user user 0 Oct 8 11:27 ..
lrwx------ 1 user user 64 Oct 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct 8 11:28 3 -> /mnt/logs/megapipe
(gdb) quit
A debugging session is active.
Inferior 1 [process 5946] will be detached.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/python2.7, process 5946
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π΄Π°Π»Π΅ΡΠΈΠ½ΡΠΊΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ remote-server.example.com
[user@localhost ~]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 38M Oct 8 14:21 123.txt
ΠΠΎΠ°ΡΠ°Π°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ
[user@localhost ~]$ ls -lah /mnt/logs/
total 7.9M
drwxr-xr-x 2 user user 1.0K Oct 8 11:28 .
drwxr-xr-x 4 root root 1.0K Oct 8 10:55 ..
-rw-rw-r-- 1 user user 7.9M Oct 8 14:17 123.txt
prw-rw-r-- 1 user user 0 Oct 8 14:22 megapipe
ΠΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ Π·Π°ΡΡΠ²Π°Π½ΠΈ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ Π΅ ΡΠ΅ΡΠ΅Π½.
ΠΠ° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ ΠΎΠ²Π°Π° ΠΏΡΠΈΠ»ΠΈΠΊΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΠ·Π΄ΡΠ°Π²Π°ΠΌ ΡΠΎ ΠΌΠΎΠΈΡΠ΅ ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΎΠ΄ ΠΠ΅Π³ΠΈΡΠΎ.
Π‘Π»ΡΡΠ°ΡΡΠ΅ Π³ΠΈ ΠΏΠΎΠ΄ΠΊΠ°ΡΡΠΈΡΠ΅ Π½Π° Radio-T.
Π‘Π΅ Π΄ΠΎΠ±ΡΠΎ.
ΠΠ°ΠΊΠΎ Π΄ΠΎΠΌΠ°ΡΠ½Π° Π·Π°Π΄Π°ΡΠ°, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΈΠΌΠ° Π²ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΌΠ°ΡΠΊΠ°ΡΠ° ΠΈ ΡΠΏΠΈΠ΅ΡΠ΅ΡΠΎ Π°ΠΊΠΎ ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½Π°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
ΠΠ·Π²ΠΎΡ: www.habr.com