ΠΠ΅Π΄Π½ΡΠΆ, Π½Π° Π΅Π΄Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Ρ ΠΌΠΈ Π·Π°Π΄Π°Π΄ΠΎΡ Π° Π²ΡΠΏΡΠΎΡ: ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΡ, Π°ΠΊΠΎ ΠΎΡΠΊΡΠΈΠ΅Ρ Π½Π΅ΡΠ°Π±ΠΎΡΠ΅ΡΠ° ΡΡΠ»ΡΠ³Π° Π·Π°ΡΠ°Π΄ΠΈ ΡΠΎΠ²Π°, ΡΠ΅ Π΄ΠΈΡΠΊΡΡ Π΅ Π·Π°ΠΏΡΠ»Π½Π΅Π½?
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡ
, ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡ ΠΊΠ°ΠΊΠ²ΠΎ Π·Π°Π΅ΠΌΠ° ΡΠΎΠ²Π° ΠΌΡΡΡΠΎ ΠΈ Π°ΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
Π’ΠΎΠ³Π°Π²Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ ΠΏΠΎΠΏΠΈΡΠ°, Π° ΠΊΠ°ΠΊΠ²ΠΎ Π°ΠΊΠΎ Π½Π° Π΄ΡΠ»Π° Π½ΡΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΡΡΡΠΎ, Π½ΠΎ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π΄Π° Π·Π°Π΅ΠΌΠ°Ρ Π²ΡΠΈΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ?
ΠΠ° ΡΠΎΠ²Π° ΠΊΠ°Π·Π°Ρ , ΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° lsof ΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π΅ Π·Π°Π΅Π»Π° Π²ΡΠΈΡΠΊΠΎΡΠΎ Π½Π°Π»ΠΈΡΠ½ΠΎ ΠΌΡΡΡΠΎ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄Π΅ΠΉΡΡΠ²Π°ΠΌΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΠ²Π°ΡΠ°, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π° Π΄Π°Π»ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° Π²Π°ΠΆΠ½ΠΈ.
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ ΠΌΠ΅ ΠΏΡΠ΅ΠΊΡΡΠ½Π° Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π΄ΡΠΌΠ°, Π΄ΠΎΠΏΡΠ»Π²Π°ΠΉΠΊΠΈ Π²ΡΠΏΡΠΎΡΠ° ΡΠΈ: "ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π΅ Π½ΠΈ ΡΡΡΠ±Π²Π°Ρ, ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π±ΡΠ³ Π»ΠΎΠ³, Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ, Π·Π°ΡΠΎΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ Π΄Π΅Π±ΡΠ³"?
"ΠΠΊΠ΅ΠΉ", ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡ
Π°Π·, "ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ Π΄Π΅Π±ΡΠ³Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π° Π³ΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅".
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ Π²ΡΠ·ΡΠ°Π·ΠΈ: "ΠΠ΅, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ Π²Π°ΠΆΠ½ΠΈ Π΄Π°Π½Π½ΠΈ, Π° ΠΊΡΠΌ ΡΠ°ΠΌΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Π²Π°ΠΆΠ½ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΊΠ°ΡΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ".
"ΠΠΎΠ±ΡΠ΅", ΠΊΠ°Π·Π°Ρ Π°Π·, "Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π΅ ΡΠ° Π²Π°ΠΆΠ½ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΈΠ·ΡΠΈΡΡΠΈΠΌ ΡΠΎΠ·ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΡΠ°ΠΉΠ» ΡΡΠ΅Π· ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, Π΄ΠΎΡΠΈ Π°ΠΊΠΎ Π½Π΅ Π³ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ls Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°".
ΠΠ½ΡΠ΅ΡΠ²ΡΠΈΡΠ°ΡΠΈΡΡ ΠΎΡΡΠ°Π½Π° Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, Π° Π°Π· Π½Π΅.
Π’ΠΎΠ³Π°Π²Π° ΡΠΈ ΠΏΠΎΠΌΠΈΡΠ»ΠΈΡ
, Π·Π°ΡΠΎ ΡΠΎΠ²Π΅ΠΊΡΡ, ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ ΠΌΠΎΠΈΡΠ΅ Π·Π½Π°Π½ΠΈΡ, Π½Π΅ Π·Π°Π΄ΡΠ»Π±ΠΎΡΠ°Π²Π° ΠΏΠΎΠ²Π΅ΡΠ΅? Π ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ° Π²Π°ΠΆΠ½ΠΈ? ΠΠ°ΠΊΠ²ΠΎ Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΈ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠ²Π° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π² Π΄ΡΠ», Π½Π° ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΡΡΡΠΎ? ΠΠ°ΠΊΠ²ΠΎ Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π³ΡΠ±ΠΈΠΌ Π½Π΅ ΡΠ°ΠΌΠΎ Π²Π΅ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΈ ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠ²Π° ΠΈΠ»ΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° Π·Π°ΠΏΠΈΡΠ΅?
Π’ΡΠ·ΠΈΠΊ
Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΊΠ°ΡΠΈΠ΅ΡΠ°ΡΠ° ΡΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ Π΄Π° ΡΡΠ·Π΄Π°ΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅. Π’ΠΎΠ³Π°Π²Π° ΡΠΈ ΠΌΠΈΡΠ»Π΅Ρ ΠΊΠ°ΠΊ Π΄Π° ΡΠ²ΡΡΠΆΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ°ΠΌ ΠΠ²Π°Π½ΠΎΠ² ΠΠ²Π°Π½ ΠΠ²Π°Π½ΡΡ, ΠΈ ΡΠΎΠΉ ΠΈΠΌΠ° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ ΡΠ²ΡΡΠΆΠ°? ΠΠΎΠ³Π° Π΄Π° ΠΏΠΎΡΠΎΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ, ΡΠ΅ ΠΊΡΡΠ΅ΡΠΎ Π½Π° ΠΈΠΌΠ΅ "Π’ΡΠ·ΠΈΠΊ" ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Π½Π΅Π³ΠΎ. ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ ΡΠΎΠΉ ΡΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅ΡΠΎ ΡΠΈ ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΠ²Π°Π½ ΡΡΠ°Π½Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΠ»Ρ? Π ΡΠ°ΠΊΡΠ² ΡΠ»ΡΡΠ°ΠΉ Π½Π°ΡΠ°ΡΠ° ΠΠ»Ρ ΠΠ²Π°Π½ΠΎΠ²Π½Π° ΠΠ²Π°Π½ΠΎΠ²Π° Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΊΡΡΠ΅, Π° Π½Π°ΡΠΈΡΡ Π’ΡΠ·ΠΈΠΊ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡ ΠΠ²Π°Π½. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΄ΠΎΠΉΠ΄Π΅ Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΡΡΠΎ Π΄Π°Π²Π°ΡΠ΅ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (ID) Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΠΈ ΠΌΠΎΡΡ Π’ΡΠ·ΠΈΠΊ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°ΡΠ΅ Ρ ΡΠΎΠ·ΠΈ ID, ΠΊΠΎΠΉΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π±Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠ΅Π΄Π΅Π½ Π½ΠΎΠΌΠ΅Ρ. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊΡΡ Π½Π° Π’ΡΠ·ΠΈΠΊ ΠΈΠΌΠ°ΡΠ΅ ID Π½ΠΎΠΌΠ΅Ρ 2, ΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄ ΡΠΎΠ·ΠΈ ID Π±Π΅ΡΠ΅ ΠΠ²Π°Π½, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΠ΄ ΡΡΡΠΈΡ ID ΡΡΠ°Π½Π° ΠΠ»Ρ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π½Π° ΡΠΎΠ²Π΅ΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΈ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ²ΡΠ΄ΡΡΠ²ΠΎΡΠΎ Π±Π΅ΡΠ΅ ΠΏΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π½.
Π€Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΡΠ°Π±ΠΎΡΠ΅ΡΠ° Ρ Π½Π΅Π³ΠΎ, Π΅ similar Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΊΡΡΠ΅ ΠΈ ΡΠΎΠ²Π΅ΠΊ. ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈΡ ΡΠ°ΠΉΠ»Π° Ρ ΠΈΠΌΠ΅ 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 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
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΏΠΎΠ²ΠΈΠΊ 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
ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΏΠ»ΡΡ Π΅Π΄ΠΈΠ½, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ²ΠΎΡΠΈΡ ΠΌΠ΅. ΠΠ΅ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠ°ΠΉΠ»Π°:
[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 Π·Π°ΠΏΠΈΡΠΈ Π²
10+0 Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ·
10485760 Π±Π°ΠΉΡΠ° (10 ΠΠ) ΠΊΠΎΠΏΠΈΡΠ°Π½ΠΈ, 0.00525929 Ρ, 2.0 ΠΠ/Ρ
[user@localhost ~]$
Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°:
[user@localhost ~]$ mkfs.ext4 ~/tempfile_for_article.dd
mke2fs 1.42.9 (28-Dec-2013)
/home/user/tempfile_for_article.dd Π½Π΅ Π΅ Π±Π»ΠΎΠΊΠΎΠ²ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
ΠΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Π»ΠΈ? (y,n) y
...
ΠΠ°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠΏΠ΅ΡΠ±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠ΅ΡΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°: Π³ΠΎΡΠΎΠ²ΠΎ
[user@localhost ~]$
ΠΠΎΠ½ΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°:
[user@localhost ~]$ sudo mount ~/tempfile_for_article.dd /mnt/
[sudo] ΠΏΠ°ΡΠΎΠ»Π° Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»:
[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 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
ΠΠ°Π½Π½ΠΈΡΠ΅ ΡΠ° Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅ ΡΠ΅ΡΠ΅Π½.
ΠΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΠ΅ ΠΎΡ ΡΠ»ΡΡΠ°Ρ Π΄Π° ΠΏΠΎΠ·Π΄ΡΠ°Π²Ρ ΠΊΠΎΠ»Π΅Π³ΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Degiro.
Π‘Π»ΡΡΠ°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΡΠΈΡΠ΅ Π½Π° Π Π°Π΄ΠΈΠΎ-Π’.
ΠΠ° Π²ΡΠΈΡΠΊΠΈ Π΄ΠΎΠ±ΡΠΎ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΡΠΈ Π½Π° Π΄ΠΎΠΌΠ°ΡΠ½ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΠΏΠΎΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ cat ΠΈ sleep, Π°ΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
