ΠΠ΅Π΄Π½ΡΠΆ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Ρ ΠΌΠ΅ ΠΏΠΎΠΏΠΈΡΠ°Ρ Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, Π°ΠΊΠΎ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ° Π΅ ΡΠ²ΡΡΡΠΈΠ»ΠΎ ΠΌΡΡΡΠΎΡΠΎ?
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡ
, ΡΠ΅ ΡΠ΅ Π²ΠΈΠ΄Ρ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π·Π°Π΅ΡΠΎ ΠΎΡ ΡΠΎΠ²Π° ΠΌΡΡΡΠΎ ΠΈ Π°ΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΅ ΠΏΠΎΡΠΈΡΡΡ ΠΌΡΡΡΠΎΡΠΎ.
Π’ΠΎΠ³Π°Π²Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ ΠΏΠΎΠΏΠΈΡΠ°, ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ Π½ΡΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΡΡΡΠΎ Π½Π° Π΄ΡΠ»Π°, Π½ΠΎ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π΄Π° Π·Π°Π΅ΠΌΠ°Ρ ΡΡΠ»ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ?
ΠΠ° ΡΠΎΠ²Π° ΠΊΠ°Π·Π°Ρ , ΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° lsof, ΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ Π·Π°Π΅Π»ΠΎ ΡΡΠ»ΠΎΡΠΎ Π½Π°Π»ΠΈΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄Π΅ΠΉΡΡΠ²Π°ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΠ²Π°ΡΠ°, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π° Π΄Π°Π»ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ .
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ ΠΌΠ΅ ΠΏΡΠ΅ΠΊΡΡΠ½Π° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π΄ΡΠΌΠ°, Π΄ΠΎΠ±Π°Π²ΡΠΉΠΊΠΈ ΠΊΡΠΌ Π²ΡΠΏΡΠΎΡΠ° ΡΠΈ: βΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ Π΄Π°Π½Π½ΠΈΡΠ΅, ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π³ΠΈΡΡΡΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ, Π·Π°ΡΠΎΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈβ?
βΠΠΎΠ±ΡΠ΅β, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡ
Π°Π·, βΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅.β
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ Π²ΡΠ·ΡΠ°Π·ΠΈ: βΠΠ΅, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π²Π°ΠΆΠ½ΠΈ Π΄Π°Π½Π½ΠΈ, ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΈ Π²Π°ΠΆΠ½ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΡΠΌ ΡΠ°ΠΌΠ°ΡΠ° ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΈΠ½ΡΠ΄ΠΈΠΌ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ.β
βΠ΄ΠΎΠ±ΡΠ΅β, ΠΊΠ°Π·Π°Ρ Π°Π·, βΠ°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π΅ ΡΠ° Π²Π°ΠΆΠ½ΠΈ Π·Π° Π½Π°Ρ, ΡΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΈΠ·ΡΠΈΡΡΠΈΠΌ ΡΠΎΠ·ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΡΠ°ΠΉΠ» ΡΡΠ΅Π· ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, Π΄ΠΎΡΠΈ ΠΈ Π΄Π° Π½Π΅ Π³ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ls Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°.β
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ Π±Π΅ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, Π½ΠΎ Π°Π· Π½Π΅.
Π’ΠΎΠ³Π°Π²Π° ΡΠΈ ΠΏΠΎΠΌΠΈΡΠ»ΠΈΡ
, Π·Π°ΡΠΎ ΡΠΎΠ²Π΅ΠΊΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π·Π½Π°Π½ΠΈΡΡΠ° ΠΌΠΈ, Π½Π΅ ΠΊΠΎΠΏΠ°Π΅ ΠΏΠΎ-Π΄ΡΠ»Π±ΠΎΠΊΠΎ? ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° Π²Π°ΠΆΠ½ΠΈ? ΠΠΌΠΈ Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅Ρ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΠΈΡΠ΅ Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° Π΄ΡΠ», ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΡΡΡΠΎ? ΠΠΌΠΈ Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π³ΡΠ±ΠΈΠΌ Π½Π΅ ΡΠ°ΠΌΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΡΠ° Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ, Π½ΠΎ ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠ²Π° ΠΈΠ»ΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° Π·Π°ΠΏΠΈΡΠ΅?
Π’ΡΠ·ΠΈΠΊ
Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΊΠ°ΡΠΈΠ΅ΡΠ°ΡΠ° ΡΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ Π΄Π° ΡΡΠ·Π΄Π°ΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π ΡΠΎΠ³Π°Π²Π° ΡΠΈ ΠΏΠΎΠΌΠΈΡΠ»ΠΈΡ , ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π° Π΄Π° ΡΠ²ΡΡΠΆΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Ρ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠ°ΠΌ ΠΠ²Π°Π½ΠΎΠ² ΠΠ²Π°Π½ ΠΠ²Π°Π½ΠΎΠ²ΠΈΡ ΠΈ ΡΠΎΠΉ ΠΈΠΌΠ° Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠΈΡΡΠ΅Π»Ρ Ρ ΡΡΡ ? ΠΠΎΠ³Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠ°, ΡΠ΅ ΠΊΡΡΠ΅ΡΠΎ Π½Π° ΠΈΠΌΠ΅ βΠ’ΡΠ·ΠΈΠΊβ Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΠ²Π°Π½. ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅ΡΠΎ ΡΠΈ ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΠ²Π°Π½ ΡΡΠ°Π½Π΅ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΠ»Ρ? Π’ΠΎΠ³Π°Π²Π° ΡΠ΅ ΡΠ΅ ΠΎΠΊΠ°ΠΆΠ΅, ΡΠ΅ Π½Π°ΡΠ°ΡΠ° ΠΠ»Ρ ΠΠ²Π°Π½ΠΎΠ²Π½Π° ΠΠ²Π°Π½ΠΎΠ²Π° Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΊΡΡΠ΅, Π° Π½Π°ΡΠΈΡΡ Π’ΡΠ·ΠΈΠΊ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡ ΠΠ²Π°Π½. ΠΠ°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΡΡΠΎ Π΄Π°Π²Π° Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (ID), ΠΏΠΎΠΌΠΎΠ³Π½Π° Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΌΠΎΡΡ Tuzik Π±Π΅ΡΠ΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ ΡΠΎΠ·ΠΈ ID, ΠΊΠΎΠΉΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π±Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅ΡΠΈΠ΅Π½ Π½ΠΎΠΌΠ΅Ρ. Π’Π°ΠΊΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊΡΡ Π½Π° Π°ΡΠΎΡΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΠΎΠΌΠ΅Ρ 2 ΠΈ Π² Π½ΡΠΊΠ°ΠΊΡΠ² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΠ²Π°Π½ Π±Π΅ΡΠ΅ ΠΏΠΎΠ΄ ΡΠΎΠ·ΠΈ Π½ΠΎΠΌΠ΅Ρ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΠ»Ρ ΡΡΠ°Π½Π° ΠΏΠΎΠ΄ ΡΡΡΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΡΠΎΠ²Π΅ΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΈ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ²ΡΠ΄ΡΡΠ²ΠΎΡΠΎ Π±Π΅ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π½.
Π€Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ», Π΅ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΡΡΠΈΡΡ ΠΊΠ°ΡΠΎ ΡΠΎΠ·ΠΈ Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΊΡΡΠ΅ ΠΈ ΡΠΎΠ²Π΅ΠΊ. ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈΡ
ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅ ivan.txt ΠΈ Π·Π°ΠΏΠΎΡΠ½Π°Ρ
Π΄Π° ΠΏΠΈΡΠ° Π΄ΡΠΌΠ°ΡΠ° tuzik Π² Π½Π΅Π³ΠΎ, Π½ΠΎ ΡΡΠΏΡΡ
Π΄Π° Π½Π°ΠΏΠΈΡΠ° ΡΠ°ΠΌΠΎ ΠΏΡΡΠ²Π°ΡΠ° Π±ΡΠΊΠ²Π° βtβ Π²ΡΠ² ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ ΠΎΡ Π½ΡΠΊΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° olya.txt. ΠΠΎ ΡΠ°ΠΉΠ»ΡΡ ΠΎΡΡΠ°Π²Π° ΡΡΡΠΈΡΡ ΠΈ Π°Π· Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΡΠΊΠ°ΠΌ Π΄Π° Π·Π°ΠΏΠΈΡΠ° Π°ΡΠΎΡΠΎ ΡΠΈ Π² Π½Π΅Π³ΠΎ. ΠΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΉΠ» ΡΠ΅ ΠΎΡΠ²Π°ΡΡ ΡΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅
Π Linux Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libc ΠΎΡΠ²Π°ΡΡ 3 Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ½ΠΈ ΡΠ°ΠΉΠ»Π° Π·Π° Π²ΡΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΡΠΎΡΠ΅Ρ), Π½ΠΎΠΌΠ΅ΡΠΈΡΠ°Π½ΠΈ Ρ 0,1,2. ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ΡΠ΅
- Π€Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 0 ΡΠ΅ Π½Π°ΡΠΈΡΠ° STDIN ΠΈ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ Π²Ρ ΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
- Π€Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 1 ΡΠ΅ Π½Π°ΡΠΈΡΠ° STDOUT ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΏΠ΅ΡΠ°Ρ
- Π€Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 2 ΡΠ΅ Π½Π°ΡΠΈΡΠ° STDERR ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π³ΡΠ΅ΡΠΊΠ°.
ΠΠΊΠΎ Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΡΠ°ΠΉΠ» Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡ, ΡΠΎΠ³Π°Π²Π° Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΡΡΠ²ΠΈΡ Π±Π΅Π·ΠΏΠ»Π°ΡΠ΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ ΡΠΎΠΉ ΡΠ΅ Π±ΡΠ΄Π΅ Π½ΠΎΠΌΠ΅Ρ 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 ΠΈ Π²ΠΈΠΆΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠ°Π²Π° Π²ΡΡΡΠ΅, Π½ΠΎ ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ° Π½Π°ΠΊΡΠ°ΡΠΊΠΎ.
ΠΠ°ΡΠΈΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈ bash ΠΏΡΠΎΡΠ΅Ρ Ρ PID 15771 Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΡΠ°Π·Π±ΠΈΡΠ° ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ, Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΡ ΡΡΡ : cat ΠΈ sleep. Bash Π·Π½Π°Π΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ Π΄Π²Π° Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΈ Π΄Π° Π³ΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈ Π² Π΅Π΄Π½Π° ΡΡΡΠ±Π°. ΠΠ±ΡΠΎ bash ΡΠ΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ 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.
Π ΠΏΡΡΠ²ΠΈΡ Π΄ΡΡΠ΅ΡΠ΅Π½ bash ΠΏΡΠΎΡΠ΅Ρ Ρ PID 9004, ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅
ΠΡΠ² Π²ΡΠΎΡΠΈΡ Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Ρ PID 9005, bash ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° dup2, Π·Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ STDIN Π½ΠΎΠΌΠ΅Ρ 0. Π‘Π΅Π³Π° Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΡΠΈΡΡ Π²ΡΠΎΡΠΈ bash Ρ 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) ΠΈΠ»ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΠ²Π° Π½Π° Π»ΠΎΠ³Π²Π°Π½Π΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Linux ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π²Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ ΠΈ Ρ.Π½., ΠΈ Ρ.Π½.
ΠΡΡΡΠ°ΠΉΠΊΠΈ ΡΠ΅ ΠΊΡΠΌ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡ Π²ΡΠΏΡΠΎΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄ΠΈΡΠΊΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π° Π·Π°ΠΏΠΈΡ Π½Π° ΡΠ°ΠΉΠ», Π½Π΅ΠΊΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΠΈΠΌΡΠ»ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΠ΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ°ΠΉΠ» Π·Π° Π½Π°ΡΠΈΡ Π΄ΡΠ», ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ°ΡΠΎ ΠΎΡΠ΄Π΅Π»Π΅Π½ Π΄ΠΈΡΠΊ:
[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% Π·Π°Π΅ΡΠΎ.
Π‘ΠΏΠΎΠΌΠ½ΡΠΌΠ΅ ΡΠΈ, ΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄ ΡΡΠ»ΠΎΠ²ΠΈΡΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°Π³ΡΠ±Π΅Π½ΠΈ. Π Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠ»ΡΠ³Π°ΡΠ°, Π±Π΅Π· Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ°.
ΠΠ° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π½ΠΎ Π² Π΄ΡΡΠ³ Π΄ΡΠ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² /home.
ΠΠ΅ΠΊΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° βΠΏΡΠ΅ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΠΌΠ΅ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅β Π½Π°ΡΠΈΡ ΠΊΠΎΠ΄.
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ 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 (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΠΊΡΠ΄Π΅ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡ
ΠΌΠ΅ strace ΠΈ Π½Π°ΠΌΠ΅ΡΠΈΡ
ΠΌΠ΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΎΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅), ΠΊΠΎΠ³Π°ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠΈΡ ΠΊΠΎΠ΄ Π·Π° ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ», Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠΌ ΡΡΡΠΎΡΠΎ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ, Π½ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ O_WRONLY|O_CREAT| O_TRUNC Π±ΠΈΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡ Ρ ΡΠΈΡΠ»ΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, ΠΎΡΠ²ΠΎΡΠ΅ΡΠ΅ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΡΠ΄ΡΠΎΡΠΎ
#define O_ΠΠ ΠΠ¨ΠΠ 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
Π‘ΠΏΠΎΠΌΠ½ΡΠΌΠ΅ ΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ pipe - ΠΊΠ°ΠΊ 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.
ΠΠΎΠ±ΡΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ.
ΠΠ°ΡΠΎ Π΄ΠΎΠΌΠ°ΡΠ½Π° ΡΠ°Π±ΠΎΡΠ° Π²ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΠΏΠΎΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΈΠΌΠ° Π² ΠΏΡΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ cat ΠΈ sleep, Π°ΠΊΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com