ΠΠ΄Π½Π°ΠΆ, Π½Π° Π΅Π΄Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Ρ ΠΌΠ΅ ΠΏΠΎΠΏΠΈΡΠ°Ρ Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΏΡΠ°Π²Ρ, Π°ΠΊΠΎ ΠΎΡΠΊΡΠΈΡ, ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ° Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ, Π·Π°ΡΠΎΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ° Π΅ ΡΠ²ΡΡΡΠΈΠ»ΠΎ ΠΌΡΡΡΠΎΡΠΎ?
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡ
, ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π° ΠΊΠ°ΠΊΠ²ΠΎ Π·Π°Π΅ΠΌΠ° ΡΠΎΠ²Π° ΠΌΡΡΡΠΎ ΠΈ Π°ΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Ρ ΠΌΡΡΡΠΎ.
Π’ΠΎΠ³Π°Π²Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ ΠΏΠΎΠΏΠΈΡΠ°: Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΡΠ°Π½Π΅, Π°ΠΊΠΎ Π½Π° Π΄ΡΠ»Π° Π½ΡΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΡΡΡΠΎ, Π½ΠΎ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π·Π°Π΅ΠΌΠ°Ρ Π²ΡΠΈΡΠΊΠΎΡΠΎ ΠΌΡΡΡΠΎ, Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ?
ΠΠ° ΡΠΎΠ²Π° ΠΊΠ°Π·Π°Ρ , ΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° lsof, ΠΈ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ Π·Π°Π΅Π»ΠΎ Π²ΡΠΈΡΠΊΠΎΡΠΎ Π½Π°Π»ΠΈΡΠ½ΠΎ ΠΌΡΡΡΠΎ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄Π΅ΠΉΡΡΠ²Π°ΠΌΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΠ²Π°ΡΠ°, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π° Π΄Π°Π»ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° Π²Π°ΠΆΠ½ΠΈ.
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ ΠΌΠ΅ ΠΏΡΠ΅ΠΊΡΡΠ½Π° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π΄ΡΠΌΠ°, Π΄ΠΎΠΏΡΠ»Π²Π°ΠΉΠΊΠΈ Π²ΡΠΏΡΠΎΡΠ° ΡΠΈ: Β«ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½ΠΈ Π½Π΅ ΡΡΡΠ±Π²Π°Ρ, ΠΏΡΠΎΡΡΠΎ Π΅ Π΄Π΅Π±Π°Π³ Π»ΠΎΠ³, Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ, Π·Π°ΡΠΎΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ Π΄Π΅Π±Π°Π³Π°Β»?
Β«ΠΠΊΠ΅ΠΉΒ», ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡ
Π°Π·, Β«ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ Π΄Π΅Π±Π°Π³Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅Β».
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ Π²ΡΠ·ΡΠ°Π·ΠΈ: Β«ΠΠ΅, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Ρ Π²Π°ΠΆΠ½ΠΈ Π΄Π°Π½Π½ΠΈ, Π° ΡΠ°ΠΌΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° Π΅ ΡΠ²ΡΡΠ·Π°Π½Π° Ρ Π²Π°ΠΆΠ½ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΊΠ°ΡΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Ρ ΠΎΡΠ½ΠΎΠ²ΠΎΒ».
Β«ΠΠΎΠ±ΡΠ΅Β», ΠΊΠ°Π·Π°Ρ Π°Π·, Β«Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π΅ ΡΠ° Π²Π°ΠΆΠ½ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΈΠ·ΡΠΈΡΡΠΈΠΌ ΡΠΎΠ·ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΡΠ°ΠΉΠ» ΡΡΠ΅Π· ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, Π΄ΠΎΡΠΈ Π°ΠΊΠΎ Π½Π΅ Π³ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ls Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°Β».
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ ΠΎΡΡΠ°Π½Π° Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, Π° Π°Π· Π½Π΅.
Π’ΠΎΠ³Π°Π²Π° ΡΠΈ ΠΏΠΎΠΌΠΈΡΠ»ΠΈΡ
, Π·Π°ΡΠΎ ΡΠΎΠ²Π΅ΠΊΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π·Π½Π°Π½ΠΈΡΡΠ° ΠΌΠΈ, Π½Π΅ ΠΊΠΎΠΏΠ°Π΅ ΠΏΠΎ-Π΄ΡΠ»Π±ΠΎΠΊΠΎ? Π ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠ° Π²Π°ΠΆΠ½ΠΈ? ΠΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ°, ΠΈ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ ΠΏΠΈΡΠ΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π² Π΄ΡΠ», Π½Π° ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΡΡΡΠΎ? ΠΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π³ΡΠ±ΠΈΠΌ Π½Π΅ ΡΠ°ΠΌΠΎ Π²Π΅ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΈ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ ΠΏΠΈΡΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° Π·Π°ΠΏΠΈΡΠ΅?
Π’ΡΠ·ΠΈΠΊ
Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΊΠ°ΡΠΈΠ΅ΡΠ°ΡΠ° ΡΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π΄Π° ΡΡΠ·Π΄Π°ΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅. Π’ΠΎΠ³Π°Π²Π° ΡΠΈ Π·Π°Π΄Π°Π΄ΠΎΡ Π²ΡΠΏΡΠΎΡΠ° ΠΊΠ°ΠΊ Π΄Π° ΡΠ²ΡΡΠΆΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Ρ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ°ΠΌ ΠΠ²Π°Π½ΠΎΠ² ΠΠ²Π°Π½ ΠΠ²Π°Π½ΡΡ ΠΈ ΠΈΠΌΠ°ΠΌ Π΄Π°Π½Π½ΠΈ Π·Π° Π½Π΅Π³ΠΎ, Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ ΡΠ²ΡΡΠΆΠ°? ΠΠΎΠ³Π° Π΄Π° ΠΏΠΎΡΠΎΡΠ° Π½Π°ΠΏΡΠ°Π²ΠΎ, ΡΠ΅ ΠΊΡΡΠ΅ΡΠΎ Ρ ΠΈΠΌΠ΅ βΠ’ΡΠ·ΠΈΠΊβ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° ΠΠ²Π°Π½. ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ ΡΠΎΠΉ ΡΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅ΡΠΎ ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΠ²Π°Π½ ΡΡΠ°Π½Π΅, ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ, ΠΠ»Ρ? Π’ΠΎΠ³Π°Π²Π° ΠΠ»Ρ ΠΠ²Π°Π½ΠΎΠ²Π½Π° ΠΠ²Π°Π½ΠΎΠ²Π° Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΊΡΡΠ΅, Π° Π½Π°ΡΠΈΡΡ Π’ΡΠ·ΠΈΠΊ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡ ΠΠ²Π°Π½. Π’Π°Π·ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΡΡΠΎ Π΄Π°Π²Π°ΡΠ΅ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (ID) Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π° ΠΌΠΎΡΡ Π’ΡΠ·ΠΈΠΊ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°ΡΠ΅ Ρ ΡΠΎΠ·ΠΈ ID, ΠΊΠΎΠΉΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π±Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠ΅Π΄Π΅Π½ Π½ΠΎΠΌΠ΅Ρ. Π’Π°ΠΊΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊΡΡ Π½Π° Π’ΡΠ·ΠΈΠΊ Π±Π΅ΡΠ΅ Ρ ID Π½ΠΎΠΌΠ΅Ρ 2, ΠΈ Π·Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄ ΡΠΎΠ·ΠΈ ID Π±Π΅ΡΠ΅ ΠΠ²Π°Π½, Π° ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ ΡΠΎΠ·ΠΈ ΡΡΡΠΈΡ ID ΡΡΠ°Π½Π° ΠΠ»Ρ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π½Π° ΡΠΎΠ²Π΅ΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΈ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ²ΡΠ΄ΡΡΠ²ΠΎΡΠΎ Π±Π΅ΡΠ΅ ΠΏΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π½.
Π€Π°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Ρ Π½Π΅Π³ΠΎ, Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΊΡΡΠ΅ ΠΈ ΡΠΎΠ²Π΅ΠΊ. ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΡΡΠΌ ΠΎΡΠ²ΠΎΡΠΈΠ» ΡΠ°ΠΉΠ»Π° ivan.txt ΠΈ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π°ΠΌ Π΄ΡΠΌΠ°ΡΠ° tuzik, Π½ΠΎ ΡΡΠΏΡΡ Π΄Π° Π·Π°ΠΏΠΈΡΠ° ΡΠ°ΠΌΠΎ ΠΏΡΡΠ²Π°ΡΠ° Π±ΡΠΊΠ²Π° βtβ ΠΈ ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² olya.txt. ΠΠΎ ΡΠ°ΠΉΠ»ΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ ΡΡΡΠΈΡΡ ΠΈ Π°Π· Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΡΠΊΠ°ΠΌ Π΄Π° Π·Π°ΠΏΠΈΡΠ° ΠΌΠΎΠ΅ΡΠΎ ΠΊΡΡΠ΅. ΠΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΎΡΠ²Π°ΡΡΠΌ ΡΠ°ΠΉΠ»Π° ΡΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΏΠΎΠ²ΠΈΠΊ, Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ID, ΠΊΠΎΠΉΡΠΎ ΠΌΠΈ ΠΏΠΎΡΠΎΡΠ²Π° ΡΠ°ΠΉΠ»Π°; ΡΠΎΠ·ΠΈ ID Π΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ. Π Π½ΡΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠΉ ΠΏΡΠ°Π²ΠΈ Ρ ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ; ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΡΡΠΈΡ, ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½, ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠΌΠ΅Π½Π΅Π½ ΠΈΠ»ΠΈ Π΄Π° ΠΌΡ Π±ΡΠ΄Π°Ρ ΠΎΡΠ½Π΅ΡΠΈ ΠΏΡΠ°Π²Π°ΡΠ° Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΈ Π·Π°ΠΏΠΈΡ, Π°Π· Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠ΅ ΠΈΠΌΠ°ΠΌ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π½Π΅Π³ΠΎ, Π·Π°ΡΠΎΡΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ»Π° ΠΈΠΌΠ°Ρ ΠΏΡΠ°Π²Π° Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΈ/ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡ ΠΈ ΡΡΠΏΡΡ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π½Π΅Π³ΠΎ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ° Π΄Π° Π³ΠΎ ΠΏΡΠ°Π²Ρ.
Π Linux Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libc ΠΎΡΠ²Π°ΡΡ 3 ΡΠ°ΠΉΠ»Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π·Π° Π²ΡΡΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΡΠΎΡΠ΅Ρ) Ρ Π½ΠΎΠΌΠ΅ΡΠ° 0, 1, 2. ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ΡΠ΅ ΠΈ
- Π€Π°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 0 ΡΠ΅ Π½Π°ΡΠΈΡΠ° STDIN ΠΈ Π΅ Π°ΡΠΎΡΠΈΠΈΡΠ°Π½ Ρ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
- Π€Π°ΠΉΠ»ΠΎΠ²ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 1 ΡΠ΅ Π½Π°ΡΠΈΡΠ° STDOUT ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ print
- Π€Π°ΠΉΠ»ΠΎΠ²ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 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
Redirect ΠΈ Pipe
ΠΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ΅Π·ΠΈ 3 ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π² Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅Ρ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ Π² bash, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ΅Π· ΡΡΡΠ±Π° (pipe), ΡΠ²ΡΡΠ·Π²Π°ΡΠ° Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΠ°, Π³Π»Π΅Π΄Π°ΠΌΠ΅
[user@localhost ]$ cat /dev/zero | sleep 10000
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ strace -f ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Π²ΡΡΡΠ΅, Π½ΠΎ Π² ΠΊΡΠ°ΡΡΠ΅ ΡΠ΅ ΠΎΠ±ΡΡΠ½Ρ.
ΠΠ°ΡΠΈΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΏΡΠΎΡΠ΅Ρ bash Ρ PID 15771 ΠΏΠ°ΡΡΠΈΡΠ° Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΡΠ°Π·Π±ΠΈΡΠ° ΠΊΠΎΠ»ΠΊΠΎ ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅, Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠ° Π΄Π²Π΅: cat ΠΈ sleep. Bash Π·Π½Π°Π΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ Π΄Π²Π° Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ Π΄Π° Π³ΠΈ ΡΠ²ΡΡΠΆΠ΅ Ρ Π΅Π΄Π½Π° ΡΡΡΠ±Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π½Π° bash ΠΌΡ ΡΡΡΠ±Π²Π°Ρ 2 Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΈ Π΅Π΄Π½Π° ΡΡΡΠ±Π°.
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ, bash ΡΡΠ°ΡΡΠΈΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΏΠΎΠ²ΠΈΠΊ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π½ΠΎΠ²ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΠΎ Π±ΡΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° ΡΡΡΠ±Π°ΡΠ°, Π½ΠΎ ΡΠΎΠ²Π° Π±ΡΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ²ΡΡΠ·Π²Π° Π½Π°ΡΠΈΡΠ΅ Π΄Π²Π° Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠ°.
ΠΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°, ΡΡΠΊΠ°Ρ ΡΡΡΠ±Π°ΡΠ° Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°, Π° Π΄ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ:
PID ΠΊΠΎΠΌΠ°Π½Π΄Π°
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
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ bash ΡΡΠ·Π΄Π°Π²Π° Π΄Π²Π° Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠ°, ΠΈ ΡΡΠΈΡΠ΅ Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠ° ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΡΠ°ΠΊΠ°:
PID ΠΊΠΎΠΌΠ°Π½Π΄Π°
15771 bash
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:42 3 -> pipe:[253543032]
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:42 4 -> pipe:[253543032]
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:42 255 -> /dev/pts/21
PID ΠΊΠΎΠΌΠ°Π½Π΄Π°
9004 bash
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 0 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 2 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 3 -> pipe:[253543032]
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 4 -> pipe:[253543032]
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 255 -> /dev/pts/21
PID ΠΊΠΎΠΌΠ°Π½Π΄Π°
9005 bash
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 0 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 2 -> /dev/pts/21
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 3 -> pipe:[253543032]
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 4 -> pipe:[253543032]
lrwx------ 1 user user 64 ΠΠΊΡ 7 15:57 255 -> /dev/pts/21
ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅, ΡΠ΅ clone ΠΊΠ»ΠΎΠ½ΠΈΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ° Π·Π°Π΅Π΄Π½ΠΎ Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ, Π·Π°ΡΠΎΠ²Π° Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅Ρ ΠΈ Π² Π΄ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ. ΠΠ°Π΄Π°ΡΠ°ΡΠ° Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅Ρ ΡΡΡ PID 15771 Π΅ Π΄Π° ΡΠ»Π΅Π΄ΠΈ Π΄ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ, Π·Π°ΡΠΎΠ²Π° ΡΠΎΠΉ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊΠ° ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΎΡ Π΄ΡΡΠ΅ΡΠ½ΠΈΡΠ΅.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ pipe Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ, ΠΈ ΡΠΎΠΉ Π·Π°ΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Ρ Π½ΠΎΠΌΠ΅ΡΠ° 3 ΠΈ 4.
Π ΠΏΡΡΠ²ΠΈΡ Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ bash Ρ PID 9004, Ρ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ , ΠΏΡΠΎΠΌΠ΅Π½Ρ Π½Π°ΡΠΈΡ STDOUT ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Ρ Π½ΠΎΠΌΠ΅Ρ 1 Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΡΠΊΠ°Π·Π²Π°Ρ Π½Π° pipe, Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° Π΅ Π½ΠΎΠΌΠ΅Ρ 3. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΡΠ²ΠΈΡΡ Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Ρ PID 9004 ΡΠ΅ ΠΏΠΈΡΠ΅ Π² STDOUT, ΡΠ΅ ΠΏΠΎΠΏΠ°Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π² Π±ΡΡΠ΅ΡΠ° Π½Π° pipe.
ΠΡΠ² Π²ΡΠΎΡΠΈΡ Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Ρ PID 9005 bash ΠΏΡΠΎΠΌΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° dup2 ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ STDIN Ρ Π½ΠΎΠΌΠ΅Ρ 0. Π‘Π΅Π³Π° Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ΡΠ΅ Π½Π°ΡΠΈΡΡ Π²ΡΠΎΡΠΈ bash Ρ PID 9005, ΡΠ΅ ΡΠ΅ΡΠ΅ ΠΎΡ pipe.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π² Π΄ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π·Π°ΡΠ²Π°ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Ρ Π½ΠΎΠΌΠ΅ΡΠ° 3 ΠΈ 4, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ.
Π€Π°ΠΉΠ»ΠΎΠ²ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 255 Π½Π°ΡΠΎΡΠ½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°ΠΌ, ΡΠΎΠΉ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π²ΡΡΡΠ΅ΡΠ½ΠΈ Π½ΡΠΆΠ΄ΠΈ Π½Π° ΡΠ°ΠΌΠΈΡ bash ΠΈ Π² Π΄ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΡΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°ΡΠ²ΠΎΡΠ΅Π½.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π² ΠΏΡΡΠ²ΠΈΡ Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Ρ PID 9004 bash ΡΡΠ°ΡΡΠΈΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ ΡΠΊΠ°Π·Π°Ρ ΠΌΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° Π΅ /usr/bin/cat.
ΠΡΠ² Π²ΡΠΎΡΠΈΡ Π΄ΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Ρ PID 9005 bash ΡΡΠ°ΡΡΠΈΡΠ° Π²ΡΠΎΡΠΈΡ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ ΡΠΊΠ°Π·Π°Ρ ΠΌΠ΅, Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° Π΅ /usr/bin/sleep.
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΡ ΠΏΠΎΠ²ΠΈΠΊ exec Π½Π΅ Π·Π°ΡΠ²Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π°ΠΊΠΎ Π½Π΅ ΡΠ° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ Ρ ΡΠ»Π°Π³ O_CLOEXEC ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° open. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠ»Π΅Π΄ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ΅ ΠΎΡΡΠ°Π½Π°Ρ Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ.
ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°:
[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
ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ Π½Π° Π½Π°ΡΠΈΡ pipe ΡΡΠ²ΠΏΠ°Π΄Π° ΠΈ Π² Π΄Π²Π°ΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ°. Π’Π°ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡΡΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠ° Ρ Π΅Π΄ΠΈΠ½ ΡΠΎΠ΄ΠΈΡΠ΅Π».
ΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΡ 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
ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ°ΠΉΠ»Π° ΡΠ°ΠΌΠΎ Π½Π°ΡΠ°ΡΡΠ²Π° ΠΈ Π½Π°ΡΠΈΡΡ truncate Π½Π΅ ΡΡΠ°Π±ΠΎΡΠΈ. ΠΠ΅ΠΊΠ° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ ΠΏΠΎΠ²ΠΈΠΊ. . ΠΠΊΠΎ ΠΏΡΠΈ ΠΎΡΠ²Π°ΡΡΠ½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ»Π°Π³Π° O_APPEND, ΡΠΎ ΠΏΡΠΈ Π²ΡΡΠΊΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠ°ΠΉΠ»Π° ΠΈ Π·Π°ΠΏΠΈΡΠ²Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΠΊΡΠ°Ρ Π½Π° ΡΠ°ΠΉΠ»Π°, ΠΈ ΡΠΎ Π³ΠΎ ΠΏΡΠ°Π²ΠΈ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½ΠΈΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π² Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ ΡΠ°ΠΉΠ». ΠΠΎ Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ΄ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΡΠ»Π°Π³. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄ΡΡΠ³ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΠ°ΠΉΠ»Π° Π² lsof ΡΠ»Π΅Π΄ truncate ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΠΎΡΠ²ΠΎΡΠΈΠΌ ΡΠ°ΠΉΠ»Π° Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅, Π° Π·Π½Π°ΡΠΈΡ Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ΄ Π²ΠΌΠ΅ΡΡΠΎ
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
ΠΈ Ρ ΡΠ»Π°Π³Π° Β«aΒ»
[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 ΠΈ Π½Π°ΠΌΠ΅ΡΠΈΡ ΠΌΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ open), ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΠΉΠΊΠΈ Π½Π°ΡΠΈΡ ΠΊΠΎΠ΄ Π·Π° ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ», ΠΏΡΠ°Π²ΠΈΠΌ ΡΡΡΠΎΡΠΎ ΡΠ°ΠΌΠΈ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ, Π½ΠΎ Π±ΠΈΡΠΎΠ²Π΅ΡΠ΅ 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
ΠΠΎΠΌΠ½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ 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
ΠΠ°Π½Π½ΠΈΡΠ΅ Π½Π΅ ΡΠ° Π·Π°Π³ΡΠ±Π΅Π½ΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ, Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π½Π° Π½ΠΎΠ²ΠΎ ΠΌΡΡΡΠΎ.
ΠΠ° ΡΡΠ»ΠΎΠΆΠ½ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ Π·Π°Π΄Π°ΡΠ°ΡΠ°
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° Π²Π°ΠΆΠ½ΠΈ Π·Π° Π½Π°Ρ, Π½ΠΎ Π½Π° Π΄ΠΈΡΠΊΠ° Π½ΡΠΌΠ°ΠΌΠ΅ ΠΌΡΡΡΠΎ Π² Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ²ΡΡΠΆΠ΅ΠΌ Π½ΠΎΠ² Π΄ΠΈΡΠΊ.
ΠΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ, Π΅ Π΄Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈΠΌ Π½Π°ΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½ΡΠΊΡΠ΄Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² pipe, Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ pipe ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° Π΄Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈΠΌ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΡΡΠ΅Π· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ netcat.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ pipe Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° 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
ΠΡΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° Π΄ΠΈΡΠΊΠ°, Π½ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ pipe ΡΠ°ΠΌ:
[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
Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±Π²ΠΈΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΏΡΠ΅Π· ΡΠΎΠ·ΠΈ pipe Π½Π° Π΄ΡΡΠ³ ΡΡΡΠ²ΡΡ ΠΏΡΠ΅Π· ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π·Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ netcat.
ΠΠ° ΡΡΡΠ²ΡΡΠ° remote-server.example.com ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅
[user@localhost ~]$ nc -l 7777 > 123.txt
ΠΠ° Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅Π½ ΡΡΡΠ²ΡΡ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»
[user@localhost ~]$ nc remote-server.example.com 7777 < /mnt/logs/megapipe
Π‘Π΅Π³Π° Π²ΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π»ΡΠ·Π°Ρ Π² pipe, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ Π½Π° stdin Π² netcat, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π³ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π½Π° ΠΏΠΎΡΡ 7777.
ΠΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½ΠΈ ΠΎΡΡΠ°Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ, Π΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π² ΡΠΎΠ·ΠΈ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ pipe.
ΠΠ΅ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
[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 ΠΠΊΡ 8 11:27 .
dr-xr-xr-x 9 user user 0 ΠΠΊΡ 8 11:27 ..
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 ΠΠΊΡ 8 11:28 3 -> /mnt/logs/123.txt
l-wx------ 1 user user 64 ΠΠΊΡ 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 ΠΠΊΡ 8 11:27 .
dr-xr-xr-x 9 user user 0 ΠΠΊΡ 8 11:27 ..
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 ΠΠΊΡ 8 11:28 3 -> /mnt/logs/megapipe
l-wx------ 1 user user 64 ΠΠΊΡ 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 ΠΠΊΡ 8 11:27 .
dr-xr-xr-x 9 user user 0 ΠΠΊΡ 8 11:27 ..
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 ΠΠΊΡ 8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 ΠΠΊΡ 8 11:28 3 -> /mnt/logs/megapipe
(gdb) quit
ΠΠΊΡΠΈΠ²Π½Π° Π΅ ΡΠ΅ΡΠΈΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠΈΡΡΠ° 1 [ΠΏΡΠΎΡΠ΅Ρ 5946] ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΡΠ΄Π΅Π»Π΅Π½.
ΠΠ° ΠΈΠ·Π»Π΅Π·Π΅ΡΠ΅ Π»ΠΈ Π½Π°ΠΈΡΡΠΈΠ½Π°? (y ΠΈΠ»ΠΈ n) y
ΠΡΠ΄Π΅Π»ΡΠ½Π΅ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°: /usr/bin/python2.7, ΠΏΡΠΎΡΠ΅Ρ 5946
ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΡΡΠ²ΡΡ remote-server.example.com
[user@localhost ~]$ ls -lah 123.txt
-rw-rw-r-- 1 user user 38M ΠΠΊΡ 8 14:21 123.txt
ΠΠ°Π½Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΠ°Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡ ΡΡΡΠ²ΡΡ
[user@localhost ~]$ ls -lah /mnt/logs/
total 7.9M
drwxr-xr-x 2 user user 1.0K ΠΠΊΡ 8 11:28 .
drwxr-xr-x 4 root root 1.0K ΠΠΊΡ 8 10:55 ..
-rw-rw-r-- 1 user user 7.9M ΠΠΊΡ 8 14:17 123.txt
prw-rw-r-- 1 user user 0 ΠΠΊΡ 8 14:22 megapipe
ΠΠ°Π½Π½ΠΈΡΠ΅ ΡΠ° Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅ ΡΠ΅ΡΠ΅Π½.
ΠΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΠ΅ ΠΎΡ ΡΠ»ΡΡΠ°Ρ Π΄Π° ΠΏΠΎΠ·Π΄ΡΠ°Π²Ρ ΠΊΠΎΠ»Π΅Π³ΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Degiro.
Π‘Π»ΡΡΠ°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΡΠΈΡΠ΅ Π½Π° Π Π°Π΄ΠΈΠΎ-Π’.
ΠΠ° Π²ΡΠΈΡΠΊΠΈ Π΄ΠΎΠ±ΡΠΎ.
ΠΠ°ΡΠΎ Π΄ΠΎΠΌΠ°ΡΠ½ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π²ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΠΏΠΎΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ cat ΠΈ sleep, Π°ΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
