ΠΠ΄Π½Π°ΠΆΠ΄Ρ, Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ ΠΌΠ΅Π½Ρ ΡΠΏΡΠΎΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΡ Π±ΡΠ΄Π΅ΡΡ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π½Π΅ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΎΡΡ ΠΌΠ΅ΡΡΠΎ?
ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅ Ρ ΠΎΡΠ²Π΅ΡΠΈΠ», ΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΡ, ΡΠ΅ΠΌ Π·Π°Π½ΡΡΠΎ ΡΡΠΎ ΠΌΠ΅ΡΡΠΎ ΠΈ Π΅ΡΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎ ΠΏΠΎΡΠΈΡΡ ΠΌΠ΅ΡΡΠΎ.
Π’ΠΎΠ³Π΄Π° ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ΅Ρ ΡΠΏΡΠΎΡΠΈΠ», Π° ΡΡΠΎ Π΅ΡΠ»ΠΈ Π½Π° ΡΠ°Π·Π΄Π΅Π»Π΅ Π½Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°, Π½ΠΎ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±Ρ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π²ΡΠ΅ ΠΌΠ΅ΡΡΠΎ, ΡΡ ΡΠΎΠΆΠ΅ Π½Π΅ Π²ΠΈΠ΄ΠΈΡΡ?
ΠΠ° ΡΡΠΎ Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΎΡΠΊΡΡΡΡΠ΅ ΡΠ°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ lsof ΠΈ ΠΏΠΎΠ½ΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π½ΡΠ»ΠΎ Π²ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, Π° Π΄Π°Π»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°ΠΌ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½ΡΠΆΠ½Ρ Π»ΠΈ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ½ΡΠ΅ΡΠ²ΡΡΠ΅Ρ ΠΏΡΠ΅ΡΠ²Π°Π» ΠΌΠ΅Π½Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»ΠΎΠ²Π΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ: Β«ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Ρ, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΄Π΅Π±Π°Π³ Π»ΠΎΠ³, Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π΅Π±Π°Π³Β»?
Β«ΠΎΠΊΠ΅ΠΉΒ», β ΠΎΡΠ²Π΅ΡΠΈΠ» Ρ, Β«ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΊΠ»ΡΡΠΈΡΡ Π΄Π΅Π±Π°Π³ Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎΒ».
ΠΠ½ΡΠ΅ΡΠ²ΡΡΠ΅Ρ Π²ΠΎΠ·ΡΠ°Π·ΠΈΠ»: Β«ΠΠ΅Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Ρ Π½Π°Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ Ρ
ΡΠ°Π½ΡΡΡΡ Π²Π°ΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π° ΠΊ ΡΠ°ΠΌΠΎΠΌΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΡ
ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΡΠ°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎΒ».
Β«Π½Ρ Ρ ΠΎΡΠΎΡΠΎΒ», ΡΠΊΠ°Π·Π°Π» Ρ, Β«Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΠΌ Π½Π΅ Π²Π°ΠΆΠ½Ρ, ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΈΡΡΠΈΡΡ ΡΡΠΎΡ ΠΎΡΠΊΡΡΡΡΠΉ ΡΠ°ΠΉΠ» ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΌΡ Π΅Π³ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ls Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅Β».
ΠΠ½ΡΠ΅ΡΠ²ΡΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΡ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, Π° Ρ Π½Π΅Ρ.
Π’ΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠΈΠΉ ΠΌΠΎΠΈ Π·Π½Π°Π½ΠΈΡ, Π½Π΅ ΠΊΠΎΠΏΠ°Π΅Ρ Π³Π»ΡΠ±ΠΆΠ΅? Π ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π²Π°ΠΆΠ½Ρ? Π§ΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΈΡΠ΅Ρ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠ°Π·Π΄Π΅Π», Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°? Π§ΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠ΅ΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΆΠ΅ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π½ΠΎ ΠΈ ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΡΠΎ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΈΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΠ°ΡΡ?
Π’ΡΠ·ΠΈΠΊ
Π Π½Π°ΡΠ°Π»Π΅ ΠΌΠΎΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅ΡΡ Ρ ΠΏΡΡΠ°Π»ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡ . Π ΡΠΎΠ³Π΄Π° Ρ Π΄ΡΠΌΠ°Π», Π° ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊ Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΠΌ. ΠΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΌΠ΅Π½Ρ ΠΠ²Π°Π½ΠΎΠ² ΠΠ²Π°Π½ ΠΠ²Π°Π½ΡΡ, ΠΈ Π΅ΡΡΡ Ρ Π½Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄Π°Π½Π½ΡΠ΅, Π½ΠΎ ΠΊΠ°ΠΊ ΠΈΡ ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡ? Π― ΠΌΠΎΠ³Ρ ΡΠΊΠ°Π·Π°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ, ΡΡΠΎ ΡΠΎΠ±Π°ΠΊΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Β«Π’ΡΠ·ΠΈΠΊΒ» ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΡΡΠΎΠΌΡ ΡΠ°ΠΌΠΎΠΌΡ ΠΠ²Π°Π½Ρ. ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠΌΠ΅Π½ΠΈΡ ΠΈΠΌΡ ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΠ²Π°Π½Π° ΡΡΠ°Π½Π΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΠ»Π΅ΠΉ? Π’ΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΡΡΠΎ Π½Π°ΡΠ° ΠΠ»Ρ ΠΠ²Π°Π½ΠΎΠ²Π½Π° ΠΠ²Π°Π½ΠΎΠ²Π° Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ±Π°ΠΊΠΈ, Π° Π½Π°Ρ Π’ΡΠ·ΠΈΠΊ Π²ΡΠ΅ Π΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΠΠ²Π°Π½Ρ. Π Π΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄Π°Π²Π°Π»Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (ID), ΠΈ ΠΌΠΎΠΉ Π’ΡΠ·ΠΈΠΊ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π»ΡΡ ΠΊ ΡΡΠΎΠΌΡ ID, ΠΊΠΎΡΠΎΡΡΠΉ, ΠΏΠΎ ΡΡΡΠΈ, Π±ΡΠ» ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ ΠΎΠ·ΡΠΈΠ½ Ρ ΡΡΠ·ΠΈΠΊΠ° Π±ΡΠ» Ρ ID ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ 2, ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ΄ ΡΡΠΈΠΌ ID Π±ΡΠ» ΠΠ²Π°Π½, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ΄ ΡΡΠΈΠΌ ΠΆΠ΅ ID ΡΡΠ°Π»Π° ΠΠ»Ρ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΡΠ²Π° ΠΈ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Π±ΡΠ»Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π½Π°.
Π€Π°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ Ρ ΡΡΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ, ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΊΠ°ΠΊ Π½Π°ΡΠ΅ΠΉ ΡΠΎΠ±Π°ΠΊΠΈ ΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ ΠΎΡΠΊΡΡΠ» ΡΠ°ΠΉΠ» ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ivan.txt ΠΈ Π½Π°ΡΠ°Π» Π² Π½Π΅Π³ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ»ΠΎΠ²ΠΎ tuzik, Π½ΠΎ ΡΡΠΏΠ΅Π» Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΡ Π±ΡΠΊΠ²Ρ Β«tΒ» Π² ΡΠ°ΠΉΠ», ΠΈ ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π±ΡΠ» ΠΊΠ΅ΠΌ-ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² olya.txt. ΠΠΎ ΡΠ°ΠΉΠ» ΠΎΡΡΠ°Π»ΡΡ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°ΠΌΡΠΌ, ΠΈ Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Ρ
ΠΎΡΡ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π½Π΅Π³ΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΡΠ·ΠΈΠΊΠ°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ ΡΠ°ΠΉΠ»Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ
Π 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 Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΠΎΠ΄ΠΈΠ½ pipe.
ΠΠ΅ΡΠ΅Π΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² bash Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ²
ΠΠ»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ Π±ΡΠ΄ΡΠΎ pipe ΡΠΆΠ΅ Π΅ΡΡΡ, Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π΅ΡΠ΅ Π½Π΅Ρ:
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
ΠΠ΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ clone ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠ°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈ Π² Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅. ΠΠ°Π΄Π°ΡΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Ρ PID 15771 ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΠΆΠ΄Π΅Ρ ΠΎΡΠ²Π΅Ρ ΠΎΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ .
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ pipe Π΅ΠΌΡ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΠΈ ΠΎΠ½ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Ρ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ 3 ΠΈ 4.
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ bash Ρ PID 9004, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Ρ PID 9005 bash ΠΌΠ΅Π½ΡΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ dup2 ΡΠ°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ STDIN Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ 0. Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΅, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΈΡΠ°ΡΡ Π½Π°Ρ Π²ΡΠΎΡΠΎΠΉ bash Ρ PID 9005, Π±ΡΠ΄Π΅Ρ ΡΠΈΡΠ°ΡΡ ΠΈΠ· pipe.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π² Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ ΡΠ°ΠΊ ΠΆΠ΅ Π·Π°ΠΊΡΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Ρ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ 3 ΠΈ 4, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ.
Π€Π°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 255 Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡ, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ Π½ΡΠΆΠ΄ ΡΠ°ΠΌΠΎΠ³ΠΎ bash ΠΈ Π² Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΊΡΡΡ.
ΠΠ°Π»Π΅Π΅ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Ρ PID 9004 bash Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Ρ 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
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΈ Π½Π°Ρ ΡΡΠ°Π½ΠΊΠ΅ΠΉΡ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π». ΠΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌΡ Π²ΡΠ·ΠΎΠ²Ρ
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 ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΈ ΠΌΠ΅Π½ΡΡΡ ΡΠΆΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ breakpoint ΠΈ ΡΠ΄ ΠΈ ΡΠΏ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ Ρ Π½Π΅Ρ Π²Π°ΡΠΊΠΎΠΉ ΠΌΠ΅ΡΡΠ° Π½Π° Π΄ΠΈΡΠΊΠ΅ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°ΠΉΠ»Π°, ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΠΎΠ΄ΠΌΠΎΠ½ΡΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π΄ΠΈΡΠΊ:
[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 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