Опис Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ Linux со ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ

Π•Π΄Π½Π°Ρˆ, Π²ΠΎ Π΅Π΄Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Ρ˜Ρƒ, ΠΌΠ΅ ΠΏΡ€Π°ΡˆΠ°Π° ΡˆΡ‚ΠΎ Π±ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»Π΅ Π°ΠΊΠΎ Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ расипана услуга ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ Π½Π° дискот ΠΌΡƒ снСма простор?

Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, јас ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΈΠ² Π΄Π΅ΠΊΠ° ќС Π²ΠΈΠ΄Π°ΠΌ ΡˆΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΎΠ²Π° мСсто ΠΈ, Π°ΠΊΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ, ќС Π³ΠΎ исчистам мСстото.
ΠŸΠΎΡ‚ΠΎΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π²Ρ˜ΡƒΠ΅Ρ€ΠΎΡ‚ ΠΏΡ€Π°ΡˆΠ°, ΡˆΡ‚ΠΎ Π°ΠΊΠΎ Π½Π΅ΠΌΠ° слободСн простор Π½Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π°, Π½ΠΎ исто Ρ‚Π°ΠΊΠ° Π½Π΅ Π³ΠΈ Π³Π»Π΅Π΄Π°Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π±ΠΈ Π³ΠΎ Π·Π°Π·Π΅Π»Π΅ Ρ†Π΅Π»ΠΈΠΎΡ‚ простор?

Π—Π° ΠΎΠ²Π°, Ρ€Π΅ΠΊΠΎΠ² Π΄Π΅ΠΊΠ° сСкогаш ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ дСскрипторитС Π·Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, со ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° lsof ΠΈ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ која Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π³ΠΎ Π·Π°Π·Π΅Π΄Π΅ Ρ†Π΅Π»ΠΈΠΎΡ‚ располоТлив простор, Π° ΠΏΠΎΡ‚ΠΎΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄Π΅Ρ˜ΡΡ‚Π²ΡƒΠ²Π°Ρ‚Π΅ спорСд околноститС, Π²ΠΎ зависност ΠΎΠ΄ Ρ‚ΠΎΠ° Π΄Π°Π»ΠΈ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ .

Π˜Π½Ρ‚Π΅Ρ€Π²Ρ˜ΡƒΠ΅Ρ€ΠΎΡ‚ ΠΌΠ΅ ΠΏΡ€Π΅ΠΊΠΈΠ½Π° Π½Π° послСдниот Π·Π±ΠΎΡ€, додавајќи Π½Π° своСто ΠΏΡ€Π°ΡˆΠ°ΡšΠ΅: β€žΠ”Π° прСтпоставимС Π΄Π΅ΠΊΠ° Π½Π΅ Π½ΠΈ Ρ‚Ρ€Π΅Π±Π°Π°Ρ‚ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅, Ρ‚ΠΎΠ° Π΅ само Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ, Π½ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ исклучСна Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ напишС ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈβ€œ?

β€žΠ’ΠΎ Ρ€Π΅Π΄β€œ, ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΈΠ², β€žΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ исклучимС Π΄Π΅Π±Π°Π³ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ Π΄Π° Π³ΠΎ Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅β€œ.
Π˜Π½Ρ‚Π΅Ρ€Π²Ρ˜ΡƒΠ΅Ρ€ΠΎΡ‚ сС спротивстави: β€žΠΠ΅, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја рСстартирамС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, сè ΡƒΡˆΡ‚Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π²Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°, Π° Π²Π°ΠΆΠ½ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ сС ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со самата услуга, која Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΠΌΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΄Π° сС ΠΏΠΎΠ²Ρ€Π·Π΅β€œ.

β€žΠ’ΠΎ Ρ€Π΅Π΄β€œ, Ρ€Π΅ΠΊΠΎΠ², β€žΠ°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја рСстартирамС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ Π½Π΅ Π½ΠΈ Π΅ Π³Ρ€ΠΈΠΆΠ° Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅, Ρ‚ΠΎΠ³Π°Ρˆ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ само Π΄Π° ја исчистимС ΠΎΠ²Π°Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€Π΅ΠΊΡƒ дСскрипторот Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, Π΄ΡƒΡ€ΠΈ ΠΈ Π°ΠΊΠΎ Π½Π΅ ја Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π²ΠΎ ls ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм."

Π˜Π½Ρ‚Π΅Ρ€Π²Ρ˜ΡƒΠ΅Ρ€ΠΎΡ‚ бСшС Π·Π°Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, Π½ΠΎ јас Π½Π΅.

Вогаш си помислив, Π·ΠΎΡˆΡ‚ΠΎ личноста ΡˆΡ‚ΠΎ Π³ΠΎ тСстира ΠΌΠΎΠ΅Ρ‚ΠΎ знаСњС Π½Π΅ ΠΊΠΎΠΏΠ° ΠΏΠΎΠ΄Π»Π°Π±ΠΎΠΊΠΎ? Но, ΡˆΡ‚ΠΎ Π°ΠΊΠΎ Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° ΠΊΡ€Π°ΠΈΡˆΡ‚Π°Ρ‚Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС Π²Π°ΠΆΠ½ΠΈ? Π¨Ρ‚ΠΎ Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ рСстартирамС процСсот, Π° Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅ овој процСс Π·Π°ΠΏΠΈΡˆΡƒΠ²Π° Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм Π½Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π° која Π½Π΅ΠΌΠ° слободСн простор? Π¨Ρ‚ΠΎ Π°ΠΊΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΈΠ·Π³ΡƒΠ±ΠΈΠΌΠ΅ Π½Π΅ само ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ сС вСќС напишани, Ρ‚ΡƒΠΊΡƒ ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ овој процСс Π³ΠΈ ΠΏΠΈΡˆΡƒΠ²Π° ΠΈΠ»ΠΈ сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π° Π΄Π° Π³ΠΈ напишС?

Π’ΡƒΠ·ΠΈΠΊ

На ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° ΠΌΠΎΡ˜Π°Ρ‚Π° ΠΊΠ°Ρ€ΠΈΠ΅Ρ€Π° сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°Π² Π΄Π° создадам ΠΌΠ°Π»Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° која Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π΄Π° складира ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° корисницитС. И Ρ‚ΠΎΠ³Π°Ρˆ помислив, ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° Π³ΠΎ усогласам корисникот со Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, јас Π³ΠΎ ΠΈΠΌΠ°ΠΌ Иванов Иван Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡, Π° Ρ‚ΠΎΡ˜ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π½ΠΎ ΠΊΠ°ΠΊΠΎ Π΄Π° сС Π΄Ρ€ΡƒΠΆΠ°ΠΌ со Π½ΠΈΠ²? МоТам Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° истакнам Π΄Π΅ΠΊΠ° ΠΊΡƒΡ‡Π΅Ρ‚ΠΎ ΠΏΠΎ ΠΈΠΌΠ΅ β€žΠ’ΡƒΠ·ΠΈΠΊβ€œ ΠΌΡƒ ΠΏΡ€ΠΈΠΏΠ°Ρ“Π° Π½Π° истиот Иван. Но, ΡˆΡ‚ΠΎ Π°ΠΊΠΎ Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ своСто ΠΈΠΌΠ΅ ΠΈ намСсто Иван станС, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠžΡ™Π°? Вогаш ќС испаднС Π΄Π΅ΠΊΠ° Π½Π°ΡˆΠ°Ρ‚Π° ΠžΡ™Π° Ивановна Иванова повСќС Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΊΡƒΡ‡Π΅, Π° Π½Π°ΡˆΠΈΠΎΡ‚ Π’ΡƒΠ·ΠΈΠΊ сСпак ќС ΠΌΡƒ ΠΏΡ€ΠΈΠΏΠ°Ρ“Π° Π½Π° нСпостоСчкиот Иван. Π‘Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° сС Ρ€Π΅ΡˆΠΈ овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, кој Π½Π° сСкој корисник ΠΌΡƒ Π΄Π°Π΄Π΅ СдинствСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ID), Π° ΠΌΠΎΡ˜ΠΎΡ‚ Tuzik бСшС Π²Ρ€Π·Π°Π½ Π·Π° овој ID, кој, Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚, бСшС само сСриски Π±Ρ€ΠΎΡ˜. Π’Π°ΠΊΠ°, сопствСникот Π½Π° Ρ‚ΡƒΠ·ΠΈΠΊΠΎΡ‚ Π±ΠΈΠ» со Π»ΠΈΡ‡Π½Π° ΠΊΠ°Ρ€Ρ‚Π° Π±Ρ€ΠΎΡ˜ 2, Π° Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Иван Π±ΠΈΠ» ΠΏΠΎΠ΄ ΠΎΠ²Π°Π° Π»ΠΈΡ‡Π½Π° ΠΊΠ°Ρ€Ρ‚Π°, Π° ΠΏΠΎΡ‚ΠΎΠ° ΠΈ ΠžΡ™Π° станала ΠΏΠΎΠ΄ истата Π»ΠΈΡ‡Π½Π° ΠΊΠ°Ρ€Ρ‚Π°. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ бСшС Ρ€Π΅ΡˆΠ΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ со Ρ‡ΠΎΠ²Π΅ΡˆΡ‚Π²ΠΎΡ‚ΠΎ ΠΈ сточарството.

Опис Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ со Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΡˆΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ со ΠΎΠ²Π°Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ ист ΠΊΠ°ΠΊΠΎ ΠΈ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΊΡƒΡ‡Π΅ ΠΈ Ρ‡ΠΎΠ²Π΅ΠΊ. Π”Π° прСтпоставимС Π΄Π΅ΠΊΠ° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠ² Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со ΠΈΠΌΠ΅ ivan.txt ΠΈ ΠΏΠΎΡ‡Π½Π°Π² Π΄Π° Π³ΠΎ ΠΏΠΈΡˆΡƒΠ²Π°ΠΌ Π·Π±ΠΎΡ€ΠΎΡ‚ tuzik Π²ΠΎ Π½Π΅Π°, Π½ΠΎ успСав Π΄Π° ја напишам само ΠΏΡ€Π²Π°Ρ‚Π° Π±ΡƒΠΊΠ²Π° β€žtβ€œ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, Π° ΠΎΠ²Π°Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° бСшС ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π° ΠΎΠ΄ нСкој, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ olya.txt. Но Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ истата ΠΈ јас сСпак сакам Π΄Π° Π³ΠΎ напишам ΠΌΠΎΡ˜ΠΎΡ‚ ΠΊΠ΅Ρ† Π½Π° Π½Π΅Π°. БСкој ΠΏΠ°Ρ‚ ΠΊΠΎΠ³Π° ќС ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со систСмски ΠΏΠΎΠ²ΠΈΠΊ ΠΎΡ‚Π²ΠΎΡ€ΠΈ Π½Π° кој Π±ΠΈΠ»ΠΎ програмски јазик, Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌ ΡƒΠ½ΠΈΠΊΠ°Ρ‚Π΅Π½ ID ΡˆΡ‚ΠΎ ΠΌΠ΅ ΡƒΠΏΠ°Ρ‚ΡƒΠ²Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, овој ID Π΅ дСскрипторот Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°. И Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ ΡˆΡ‚ΠΎ ΠΈ кој ќС ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎΠ½Π°Ρ‚Π°ΠΌΡƒ со ΠΎΠ²Π°Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π±Ρ€ΠΈΡˆΠ΅, Π΄Π° сС ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°, Π΄Π° Π³ΠΎ смСни сопствСникот ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ ΠΎΠ΄Π·Π΅ΠΌΠ΅ ΠΏΡ€Π°Π²Π°Ρ‚Π° Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΈ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅, сСпак ќС ΠΈΠΌΠ°ΠΌ пристап Π΄ΠΎ Π½Π΅Π°, бидСјќи Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π°ΡšΠ΅ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈΠΌΠ°Π² ΠΏΡ€Π°Π²Π° Π΄Π° ја Ρ‡ΠΈΡ‚Π°ΠΌ ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΈΡˆΡƒΠ²Π°ΠΌ ΠΈ успСав Π΄Π° ΠΏΠΎΡ‡Π½Π°ΠΌ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°ΠΌ со Π½Π΅Π°, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° ΠΌΠΎΡ€Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΌ Π΄Π° Π³ΠΎ ΠΏΡ€Π°Π²Π°ΠΌ Ρ‚ΠΎΠ°.

На Linux, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° libc ΠΎΡ‚Π²ΠΎΡ€Π° 3 Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со дСскриптори Π·Π° сСкоја Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° (процСс) ΡˆΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ, со Π±Ρ€ΠΎΠ΅Π²ΠΈ 0,1,2. ПовСќС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π½Π° Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈΡ‚Π΅ Ρ‡ΠΎΠ²Π΅ΠΊ stdio ΠΈ Ρ‡ΠΎΠ²Π΅ΠΊ stdout

  • ΠžΠΏΠΈΡΠΎΡ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 0 сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° STDIN ΠΈ Π΅ ΠΏΠΎΠ²Ρ€Π·Π°Π½ со Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°.
  • ΠžΠΏΠΈΡΠΎΡ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 1 сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° STDOUT ΠΈ сС користи ΠΎΠ΄ ΠΈΠ·Π»Π΅Π·Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π·Π° ΠΏΠ΅Ρ‡Π°Ρ‚Π΅ΡšΠ΅.
  • ΠžΠΏΠΈΡΠΎΡ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 2 Π΅ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ STDERR ΠΈ сС користи ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° издавањС ΠΏΠΎΡ€Π°ΠΊΠΈ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°.

Ако Π²ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ која Π±ΠΈΠ»ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΈΠ»ΠΈ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅, Ρ‚ΠΎΠ³Π°Ρˆ Π½Π°Ρ˜Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ ќС Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ ΠΏΡ€Π²ΠΈΠΎΡ‚ бСсплатСн ID ΠΈ Ρ‚ΠΎΡ˜ ќС Π±ΠΈΠ΄Π΅ Π±Ρ€ΠΎΡ˜ 3.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ списокот со дСскриптори Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π·Π° кој Π±ΠΈΠ»ΠΎ процСс Π°ΠΊΠΎ Π³ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ PID.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌΠ΅ ΠΊΠΎΠ½Π·ΠΎΠ»Π° со bash ΠΈ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠ΅ PID Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ процСс

[user@localhost ]$ echo $$
15771

Π’ΠΎ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°, ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅

[user@localhost ]$ ls -lah /proc/15771/fd/
total 0
dr-x------ 2 user user  0 Oct  7 15:42 .
dr-xr-xr-x 9 user user  0 Oct  7 15:42 ..
lrwx------ 1 user user 64 Oct  7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 255 -> /dev/pts/21

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎ Π΄Π° Π³ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Ρ‚Π΅ дСскрипторот Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° со Π±Ρ€ΠΎΡ˜ 255 Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° овој напис, Ρ‚ΠΎΡ˜ Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π·Π° Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ ΠΎΠ΄ самиот bash, Π° Π½Π΅ ΠΎΠ΄ ΠΏΠΎΠ²Ρ€Π·Π°Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°.

Π‘Π΅Π³Π° ситС 3 Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со дСскриптори сС ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со псСвдо-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π½ΠΈΠΎΡ‚ ΡƒΡ€Π΅Π΄ /dev/pts, Π½ΠΎ сСпак ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ со Π½ΠΈΠ², Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅ Π²ΠΎ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°

[user@localhost ]$ echo "hello world" > /proc/15771/fd/0

И Π²ΠΎ ΠΏΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π° ќС Π²ΠΈΠ΄ΠΈΠΌΠ΅

[user@localhost ]$ hello world

ΠŸΡ€Π΅Π½Π°ΡΠΎΡ‡ΠΈ ΠΈ Ρ†Π΅Π²ΠΊΠΈ

ΠœΠΎΠΆΠ΅Ρ‚Π΅ лСсно Π΄Π° Π³ΠΈ ΠΎΡ‚Ρ„Ρ€Π»ΠΈΡ‚Π΅ ΠΎΠ²ΠΈΠ΅ 3 Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со дСскриптори Π²ΠΎ кој Π±ΠΈΠ»ΠΎ процСс, Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ Π²ΠΎ bash, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅ΠΊΡƒ Ρ†Π΅Π²ΠΊΠ° (Ρ†Π΅Π²ΠΊΠ°) ΡˆΡ‚ΠΎ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π° Π΄Π²Π° процСси, Π²ΠΈΠ΄Π΅Ρ‚Π΅

[user@localhost ]$ cat /dev/zero | sleep 10000

ΠœΠΎΠΆΠ΅Ρ‚Π΅ сами Π΄Π° ја ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ ΠΎΠ²Π°Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° strace -f ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΡˆΡ‚ΠΎ сС случува Π²Π½Π°Ρ‚Ρ€Π΅, Π½ΠΎ ќС Π³ΠΎ Π½Π°ΠΊΡ€Π°Ρ‚Π°ΠΌ.

ΠΠ°ΡˆΠΈΠΎΡ‚ родитСлски баш процСс со PID 15771 ја Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° Π½Π°ΡˆΠ°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π° Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠΎΠ»ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ сакамС Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅, Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜ ΠΈΠΌΠ° Π΄Π²Π΅ ΠΎΠ΄ Π½ΠΈΠ²: ΠΌΠ°Ρ‡ΠΊΠ° ΠΈ спиСњС. Π‘Π°Ρˆ Π·Π½Π°Π΅ Π΄Π΅ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° создадС Π΄Π²Π° дСтски процСси ΠΈ Π΄Π° Π³ΠΈ спои Π²ΠΎ Π΅Π΄Π½Π° Ρ†Π΅Π²ΠΊΠ°. Π’ΠΊΡƒΠΏΠ½ΠΎ, баш ќС ΠΈΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΎΠ΄ 2 дСтски процСси ΠΈ Π΅Π΄Π½Π° Ρ†Π΅Π²ΠΊΠ°.

ΠŸΡ€Π΅Π΄ Π΄Π° создадС Π΄Π΅Ρ‚Π΅ процСси, bash ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° систСмски ΠΏΠΎΠ²ΠΈΠΊ Ρ†Π΅Π²ΠΊΠ° ΠΈ ΠΏΡ€ΠΈΠΌΠ° Π½ΠΎΠ²ΠΈ дСскриптори Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° ΠΏΡ€ΠΈΠ²Ρ€Π΅ΠΌΠ΅Π½ Ρ†Π΅Π²Π΅Π½ Π±Π°Ρ„Π΅Ρ€, Π½ΠΎ овој Π±Π°Ρ„Π΅Ρ€ сè ΡƒΡˆΡ‚Π΅ Π½Π΅ Π³ΠΈ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π° Π½Π°ΡˆΠΈΡ‚Π΅ Π΄Π²Π° дСтски процСси Π½Π° кој Π±ΠΈΠ»ΠΎ Π½Π°Ρ‡ΠΈΠ½.

Π—Π° родитСлскиот процСс, сС Ρ‡ΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° Ρ†Π΅Π²ΠΊΠ°Ρ‚Π° Π΅ вСќС Ρ‚Π°ΠΌΡƒ, Π½ΠΎ сè ΡƒΡˆΡ‚Π΅ Π½Π΅ΠΌΠ° дСтски процСси:

PID    command
15771  bash
lrwx------ 1 user user 64 Oct  7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:42 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:42 255 -> /dev/pts/21

ΠŸΠΎΡ‚ΠΎΠ° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ систСмскиот ΠΏΠΎΠ²ΠΈΠΊ ΠΊΠ»ΠΎΠ½ bash создава Π΄Π²Π° дСтски процСси, Π° Π½Π°ΡˆΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈ процСси ќС ΠΈΠ·Π³Π»Π΅Π΄Π°Π°Ρ‚ Π²Π°ΠΊΠ°:

PID    command
15771  bash
lrwx------ 1 user user 64 Oct  7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:42 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:42 255 -> /dev/pts/21
PID    command
9004  bash
lrwx------ 1 user user 64 Oct  7 15:57 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:57 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:57 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:57 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:57 255 -> /dev/pts/21
PID    command
9005  bash
lrwx------ 1 user user 64 Oct  7 15:57 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:57 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:57 3 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:57 4 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:57 255 -> /dev/pts/21

НС Π·Π°Π±ΠΎΡ€Π°Π²Π°Ρ˜Ρ‚Π΅ Π΄Π΅ΠΊΠ° ΠΊΠ»ΠΎΠ½ΠΎΡ‚ Π³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π° процСсот Π·Π°Π΅Π΄Π½ΠΎ со ситС дСскриптори Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Ρ‚ΠΈΠ΅ ќС Π±ΠΈΠ΄Π°Ρ‚ исти ΠΈ Π²ΠΎ родитСлскиот процСс ΠΈ кај дСтскитС. Π—Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π½Π° родитСлскиот процСс со PID 15771 Π΅ Π΄Π° Π³ΠΈ слСди дСтскитС процСси, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ само Ρ‡Π΅ΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ ΠΎΠ΄ Π΄Π΅Ρ†Π°Ρ‚Π°.

Π—Π°Ρ‚ΠΎΠ°, Π½Π΅ ΠΌΡƒ Ρ‚Ρ€Π΅Π±Π° Ρ†Π΅Π²ΠΊΠ° ΠΈ Π³ΠΈ Π·Π°Ρ‚Π²ΠΎΡ€Π° дСскрипторитС Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ со Π±Ρ€ΠΎΠ΅Π²ΠΈΡ‚Π΅ 3 ΠΈ 4.

Π’ΠΎ ΠΏΡ€Π²ΠΈΠΎΡ‚ баш Π΄Π΅Ρ‚Π΅ процСс со PID 9004, систСмскиот ΠΏΠΎΠ²ΠΈΠΊ dup2, Π³ΠΎ ΠΌΠ΅Π½ΡƒΠ²Π° Π½Π°ΡˆΠΈΠΎΡ‚ дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° STDOUT Π±Ρ€ΠΎΡ˜ 1 Π²ΠΎ дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΡˆΡ‚ΠΎ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° Π½Π° Ρ†Π΅Π²ΠΊΠ°, Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜ Ρ‚ΠΎΠ° Π΅ Π±Ρ€ΠΎΡ˜ 3. Π’Π°ΠΊΠ°, сè ΡˆΡ‚ΠΎ ќС запишС ΠΏΡ€Π²ΠΈΠΎΡ‚ Π΄Π΅Ρ‚Π΅ процСс со PID 9004 Π½Π° STDOUT автоматски ќС ΠΏΠ°Π΄Π½Π΅ Π²ΠΎ Π±Π°Ρ„Π΅Ρ€ΠΎΡ‚ Π½Π° Ρ†Π΅Π²ΠΊΠ°Ρ‚Π°.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ процСс Π½Π° Π΄Π΅Ρ‚Π΅ со PID 9005, bash dup2 ја става Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π²ΠΎ STDIN дСскриптор Π±Ρ€ΠΎΡ˜ 0. Π‘Π΅Π³Π° сè ΡˆΡ‚ΠΎ ќС ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π° Π½Π°ΡˆΠΈΠΎΡ‚ Π²Ρ‚ΠΎΡ€ баш со PID 9005 ќС Ρ‡ΠΈΡ‚Π° ΠΎΠ΄ Ρ†Π΅Π²ΠΊΠ°Ρ‚Π°.

ПослС Ρ‚ΠΎΠ°, дСскрипторитС Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ со Π±Ρ€ΠΎΠ΅Π²ΠΈ 3 ΠΈ 4 сС исто Ρ‚Π°ΠΊΠ° Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π²ΠΎ дСтскитС процСси, бидСјќи Ρ‚ΠΈΠ΅ повСќС Π½Π΅ сС користат.

НамСрно Π³ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌ дСскрипторот Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 255, Ρ‚ΠΎΡ˜ сС користи Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½ΠΎ ΠΎΠ΄ самиот bash ΠΈ исто Ρ‚Π°ΠΊΠ° ќС Π±ΠΈΠ΄Π΅ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ Π²ΠΎ дСтскитС процСси.

Π‘Π»Π΅Π΄Π½ΠΎ, Π²ΠΎ ΠΏΡ€Π²ΠΈΠΎΡ‚ Π΄Π΅Ρ‚Π΅ процСс со PID 9004, bash Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π° со систСмски ΠΏΠΎΠ²ΠΈΠΊ exec ΠΈΠ·Π²Ρ€ΡˆΠ½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΡˆΡ‚ΠΎ ја Π½Π°Π²Π΅Π΄ΠΎΠ²ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија, Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜ Ρ‚ΠΎΠ° Π΅ /usr/bin/cat.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ Π΄Π΅Ρ‚Π΅ процСс со PID 9005, bash ја ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΈΠ·Π²Ρ€ΡˆΠ½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΡˆΡ‚ΠΎ ја Π½Π°Π²Π΅Π΄ΠΎΠ²ΠΌΠ΅, Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜ /usr/bin/sleep.

БистСмскиот ΠΏΠΎΠ²ΠΈΠΊ exec Π½Π΅ Π³ΠΈ Π·Π°Ρ‚Π²ΠΎΡ€Π° дСскрипторитС Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ освСн Π°ΠΊΠΎ Π½Π΅ Π±ΠΈΠ»Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ со Π·Π½Π°ΠΌΠ΅Ρ‚ΠΎ O_CLOEXEC Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ ΠΊΠΎΠ³Π° Π±ΠΈΠ» ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈΠΎΡ‚ ΠΏΠΎΠ²ΠΈΠΊ. Π’ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΏΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, ситС Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈ дСскриптори Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ќС Π±ΠΈΠ΄Π°Ρ‚ Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°:

[user@localhost ]$ pgrep -P 15771
9004
9005
[user@localhost ]$ ls -lah /proc/15771/fd/
total 0
dr-x------ 2 user user  0 Oct  7 15:42 .
dr-xr-xr-x 9 user user  0 Oct  7 15:42 ..
lrwx------ 1 user user 64 Oct  7 15:42 0 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 2 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:42 255 -> /dev/pts/21
[user@localhost ]$ ls -lah /proc/9004/fd
total 0
dr-x------ 2 user user  0 Oct  7 15:57 .
dr-xr-xr-x 9 user user  0 Oct  7 15:57 ..
lrwx------ 1 user user 64 Oct  7 15:57 0 -> /dev/pts/21
l-wx------ 1 user user 64 Oct  7 15:57 1 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:57 2 -> /dev/pts/21
lr-x------ 1 user user 64 Oct  7 15:57 3 -> /dev/zero
[user@localhost ]$ ls -lah /proc/9005/fd
total 0
dr-x------ 2 user user  0 Oct  7 15:57 .
dr-xr-xr-x 9 user user  0 Oct  7 15:57 ..
lr-x------ 1 user user 64 Oct  7 15:57 0 -> pipe:[253543032]
lrwx------ 1 user user 64 Oct  7 15:57 1 -> /dev/pts/21
lrwx------ 1 user user 64 Oct  7 15:57 2 -> /dev/pts/21
[user@localhost ]$ ps -up 9004
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user  9004  0.0  0.0 107972   620 pts/21   S+   15:57   0:00 cat /dev/zero
[user@localhost ]$ ps -up 9005
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user  9005  0.0  0.0 107952   360 pts/21   S+   15:57   0:00 sleep 10000

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, СдинствСниот Π±Ρ€ΠΎΡ˜ Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° Ρ†Π΅Π²ΠΊΠ° Π΅ ист Π²ΠΎ Π΄Π²Π°Ρ‚Π° процСси. Π’Π°ΠΊΠ°, ΠΈΠΌΠ°ΠΌΠ΅ врска ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ процСси со ист Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π».

Π—Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ Π½Π΅ сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Π½ΠΈ со систСмскитС ΠΏΠΎΠ²ΠΈΡ†ΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ користи bash, Ρ‚ΠΎΠΏΠ»ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΡ€Π΅ΠΊΡƒ strace ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ сС случува Π²Π½Π°Ρ‚Ρ€Π΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π°ΠΊΠ°:

strace -s 1024 -f bash -c "ls | grep hello"

Π”Π° сС ​​вратимС Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со ΡΠ½Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° простор Π½Π° дискот ΠΈ ΠΎΠ±ΠΈΠ΄ Π΄Π° Π·Π°Ρ‡ΡƒΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π±Π΅Π· Π΄Π° Π³ΠΎ рСстартирамС процСсот. АјдС Π΄Π° напишСмС ΠΌΠ°Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° која ќС ΠΏΠΈΡˆΡƒΠ²Π° Π½Π° диск ΠΎΠΊΠΎΠ»Ρƒ 1 ΠΌΠ΅Π³Π°Π±Π°Ρ˜Ρ‚ Π²ΠΎ сСкунда. ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, Π°ΠΊΠΎ ΠΏΠΎΡ€Π°Π΄ΠΈ нСкоја ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅ Π΄Π° напишСмС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° дискот, Сдноставно ќС Π³ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ²Π° ΠΈ ќС сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΄Π° Π³ΠΈ напишСмС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π·Π° сСкунда. Π’ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ ΡˆΡ‚ΠΎ Π³ΠΎ користам Python, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС кој Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³ програмски јазик.

[user@localhost ]$ cat openforwrite.py 
import datetime
import time

mystr="a"*1024*1024+"n"
with open("123.txt", "w") as f:
    while True:
        try:
            f.write(str(datetime.datetime.now()))
            f.write(mystr)
            f.flush()
            time.sleep(1)
        except:
            pass

Π‘Ρ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ ја ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π³ΠΈ дСскрипторитС Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅

[user@localhost ]$ python openforwrite.py &
[1] 3762
[user@localhost ]$ ps axuf | grep [o]penforwrite
user  3762  0.0  0.0 128600  5744 pts/22   S+   16:28   0:00  |   _ python openforwrite.py
[user@localhost ]$ ls -la /proc/3762/fd
total 0
dr-x------ 2 user user  0 Oct  7 16:29 .
dr-xr-xr-x 9 user user  0 Oct  7 16:29 ..
lrwx------ 1 user user 64 Oct  7 16:29 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  7 16:29 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  7 16:29 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  7 16:29 3 -> /home/user/123.txt

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π³ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ 3 стандардни дСскриптори Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΡƒΡˆΡ‚Π΅ Π΅Π΄Π΅Π½ ΡˆΡ‚ΠΎ Π³ΠΎ ΠΎΡ‚Π²ΠΎΡ€ΠΈΠ²ΠΌΠ΅. АјдС Π΄Π° ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°:

[user@localhost ]$ ls -lah 123.txt 
-rw-rw-r-- 1 user user 117M Oct  7 16:30 123.txt

ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС напишани, сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌΠ΅ ΠΏΡ€Π°Π²Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°:

[user@localhost ]$ sudo chown root: 123.txt
[user@localhost ]$ ls -lah 123.txt 
-rw-rw-r-- 1 root root 168M Oct  7 16:31 123.txt
[user@localhost ]$ ls -lah 123.txt 
-rw-rw-r-- 1 root root 172M Oct  7 16:31 123.txt

Π“Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС ΡƒΡˆΡ‚Π΅ сС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚, ΠΈΠ°ΠΊΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ корисник Π½Π΅ΠΌΠ° ΠΏΡ€Π°Π²ΠΎ Π΄Π° ΠΏΠΈΡˆΡƒΠ²Π° Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°. АјдС Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ отстранимС:

[user@localhost ]$ sudo rm 123.txt 
[user@localhost ]$ ls 123.txt
ls: cannot access 123.txt: No such file or directory

КадС сС напишани ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅? И Π΄Π°Π»ΠΈ Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ сС напишани? ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π°ΠΌΠ΅:

[user@localhost ]$ ls -la /proc/3762/fd
total 0
dr-x------ 2 user user  0 Oct  7 16:29 .
dr-xr-xr-x 9 user user  0 Oct  7 16:29 ..
lrwx------ 1 user user 64 Oct  7 16:29 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  7 16:29 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  7 16:29 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  7 16:29 3 -> /home/user/123.txt (deleted)

Π”Π°, Π½Π°ΡˆΠΈΠΎΡ‚ дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ сè ΡƒΡˆΡ‚Π΅ постои ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅ со овој дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°ΠΊΠΎ Π½Π°ΡˆΠ°Ρ‚Π° стара Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ја Ρ‡ΠΈΡ‚Π°ΠΌΠ΅, исчистимС ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅.

ΠŸΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ја Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°:

[user@localhost ]$ lsof | grep 123.txt
python    31083             user    3w      REG                8,5   19923457   2621522 /home/user/123.txt

Π“ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ 19923457. Π‘Π΅ ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°ΠΌΠ΅ Π΄Π° ја исчистимС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°:

[user@localhost ]$ truncate -s 0 /proc/31083/fd/3
[user@localhost ]$ lsof | grep 123.txt
python    31083             user    3w      REG                8,5  136318390   2621522 /home/user/123.txt

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° само сС Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π° ΠΈ Π½Π°ΡˆΠΈΠΎΡ‚ Π±Π°Π³Π°ΠΆΠ½ΠΈΠΊΠΎΡ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅. АјдС Π΄Π° сС свртимС ΠΊΠΎΠ½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° систСмскиот ΠΏΠΎΠ²ΠΈΠΊ ΠΎΡ‚Π²ΠΎΡ€ΠΈ. Ако Π³ΠΎ користимС ΠΎΠ·Π½Π°ΠΊΠ°Ρ‚Π° O_APPEND ΠΏΡ€ΠΈ ΠΎΡ‚Π²ΠΎΡ€Π°ΡšΠ΅ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, Ρ‚ΠΎΠ³Π°Ρˆ со сСкоС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈ Π·Π°ΠΏΠΈΡˆΡƒΠ²Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΄ΠΎ самиот ΠΊΡ€Π°Ρ˜ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈ Ρ‚ΠΎΠ° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ атомски. Ова ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° повСќС нишки ΠΈΠ»ΠΈ процСси Π΄Π° ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ иста Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. Но, Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π΅ Π³ΠΎ користимС ΠΎΠ²Π° Π·Π½Π°ΠΌΠ΅. МоТСмС Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π²ΠΎ lsof послС Π±Π°Π³Π°ΠΆΠ½ΠΈΠΊΠΎΡ‚ само Π°ΠΊΠΎ ја ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅, ΡˆΡ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΊΠΎΠ΄, намСсто

with open("123.txt", "w") as f:

Ρ‚Ρ€Π΅Π±Π° Π΄Π° ставимС

with open("123.txt", "a") as f:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° со Π·Π½Π°ΠΌΠ΅Π½Ρ†Π΅ β€žwβ€œ.

[user@localhost ]$ strace -e trace=open python openforwrite.py 2>&1| grep 123.txt
open("123.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3

ΠΈ со Π·Π½Π°ΠΌΠ΅Π½Ρ†Π΅ β€žΠ°β€œ.

[user@localhost ]$ strace -e trace=open python openforwrite.py 2>&1| grep 123.txt
open("123.txt", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°ΡšΠ΅ Π½Π° вСќС ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½ процСс

ЧСсто, ΠΊΠΎΠ³Π° ΠΊΡ€Π΅ΠΈΡ€Π°Π°Ρ‚ ΠΈ тСстираат ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ користат Π΄Π΅Π±Π°Π³Π΅Ρ€ΠΈ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GDB) ΠΈΠ»ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½ΠΈΠ²ΠΎΠ° Π½Π° Π½Π°Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°. Линукс ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° моТност Π·Π° Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° вСќС Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° врСдноститС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅, ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡ€Π΅ΠΊΠΈΠ½ ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°ΠΌΡƒ ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°ΠΌΡƒ.

Π’Ρ€Π°ΡœΠ°Ρ˜ΡœΠΈ сС Π½Π° ΠΏΡ€Π²ΠΎΠ±ΠΈΡ‚Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π°ΡˆΠ°ΡšΠ΅ Π·Π° нСдостатокот Π½Π° простор Π½Π° дискот Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, ајдС Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ симулирамС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚.

АјдС Π΄Π° создадСмС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π½Π°ΡˆΠ°Ρ‚Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°, која ќС ја ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ посСбСн диск:

[user@localhost ~]$ dd if=/dev/zero of=~/tempfile_for_article.dd bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00525929 s, 2.0 GB/s
[user@localhost ~]$

АјдС Π΄Π° создадСмС Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π΅Π½ систСм:

[user@localhost ~]$ mkfs.ext4 ~/tempfile_for_article.dd
mke2fs 1.42.9 (28-Dec-2013)
/home/user/tempfile_for_article.dd is not a block special device.
Proceed anyway? (y,n) y
...
Writing superblocks and filesystem accounting information: done
[user@localhost ~]$

АјдС Π΄Π° Π³ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм:

[user@localhost ~]$ sudo mount ~/tempfile_for_article.dd /mnt/
[sudo] password for user: 
[user@localhost ~]$ df -h | grep mnt
/dev/loop0      8.7M  172K  7.9M   3% /mnt

НаправСтС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ со Π½Π°ΡˆΠΈΠΎΡ‚ сопствСник:

[user@localhost ~]$ sudo mkdir /mnt/logs
[user@localhost ~]$ sudo chown user: /mnt/logs

АјдС Π΄Π° ја ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ само Π²ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°:

with open("/mnt/logs/123.txt", "w") as f:

Лансира

[user@localhost ]$ python openforwrite.py 

Π‘Π΅ Ρ‡Π΅ΠΊΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ сСкунди

[user@localhost ~]$ df -h | grep mnt
/dev/loop0      8.7M  8.0M     0 100% /mnt

Π—Π½Π°Ρ‡ΠΈ, Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ опишан Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°. Π‘Π»ΠΎΠ±ΠΎΠ΄Π΅Π½ простор 0, ΠΎΠΊΡƒΠΏΠΈΡ€Π°Π½ 100%.

Π‘Π΅ сСќавамС Π΄Π΅ΠΊΠ° спорСд условитС Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚, сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°ΠΌΠ΅ Π΄Π° снимимС ΠΌΠ½ΠΎΠ³Ρƒ Π²Π°ΠΆΠ½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠΎΠΈ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС ΠΈΠ·Π³ΡƒΠ±Π°Ρ‚. И ΠΏΡ€ΠΈΡ‚ΠΎΠ°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌΠ΅ услугата Π±Π΅Π· Π΄Π° Π³ΠΎ рСстартирамС процСсот.

Π”Π° Ρ€Π΅Ρ‡Π΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° сè ΡƒΡˆΡ‚Π΅ ΠΈΠΌΠ°ΠΌΠ΅ простор Π½Π° дискот, Π½ΠΎ Π²ΠΎ Π΄Ρ€ΡƒΠ³Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ / Π΄ΠΎΠΌΠ°.

АјдС Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ β€žΡ€Π΅ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ Π²ΠΎ Π»Π΅Ρ‚β€œ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΊΠΎΠ΄.

Π“ΠΎ Π³Π»Π΅Π΄Π°ΠΌΠ΅ PID Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ процСс, кој Π³ΠΎ ΠΈΠ·Π΅Π΄Π΅ Ρ†Π΅Π»ΠΈΠΎΡ‚ простор Π½Π° дискот:

[user@localhost ~]$ ps axuf | grep [o]penfor
user 10078 27.2  0.0 128600  5744 pts/22   R+   11:06   0:02  |   _ python openforwrite.py

ΠŸΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ со процСс со gdb

[user@localhost ~]$ gdb -p 10078
...
(gdb) 

Π“ΠΈ Ρ€Π°Π·Π³Π»Π΅Π΄ΡƒΠ²Π°ΠΌΠ΅ дСскрипторитС Π·Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ:

(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user  0 Oct  8 11:06 .
dr-xr-xr-x 9 user user  0 Oct  8 11:06 ..
lrwx------ 1 user user 64 Oct  8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  8 11:09 3 -> /mnt/logs/123.txt

Π“ΠΈ Ρ€Π°Π·Π³Π»Π΅Π΄ΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° дСскрипторот Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° со Π±Ρ€ΠΎΡ˜ 3, ΡˆΡ‚ΠΎ Π½Π΅ интСрСсира

(gdb) shell cat /proc/10078/fdinfo/3
pos:    8189952
flags:  0100001
mnt_id: 482

Имајќи Π³ΠΎ Π½Π° ΡƒΠΌ ΠΊΠ°ΠΊΠΎΠ² систСмски ΠΏΠΎΠ²ΠΈΠΊ ΠΏΡ€Π°Π²ΠΈ Python (Π²ΠΈΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ³ΠΎΡ€Π΅ ΠΊΠ°Π΄Π΅ сС Π·Π°Π·Π΅Π΄ΠΎΠ²ΠΌΠ΅ ΠΈ најдовмС ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊ), Π΄ΠΎΠ΄Π΅ΠΊΠ° Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΊΠΎΠ΄ Π·Π° Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, Π½ΠΈΠ΅ самитС Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ истото Π²ΠΎ ΠΈΠΌΠ΅ Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ процСс, Π½ΠΎ Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° O_WRONLY|O_CREAT| O_TRUNC Π±ΠΈΡ‚ΠΎΠ²ΠΈΡ‚Π΅ сС Π·Π°ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ со Π½ΡƒΠΌΠ΅Ρ€ΠΈΡ‡ΠΊΠ° врСдност. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π³ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Ρ‚ΡƒΠΊΠ° ΠΈ Π²ΠΈΠ΄ΠΈ ΠΊΠΎΠΈ знамиња сС ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΡˆΡ‚ΠΎ

#define O_WRONLY 00000001
#define O_CREAT 00000100
#define O_TRUNC 00001000

Π“ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ ситС врСдности Π²ΠΎ Π΅Π΄Π½Π°, Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ 00001101

Π’ΠΎΠ΄Π΅ΡšΠ΅ Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ ΠΏΠΎΠ²ΠΈΠΊ ΠΎΠ΄ gdb

(gdb) call open("/home/user/123.txt", 00001101,0666)
$1 = 4

Π’Π°ΠΊΠ°, Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ Π½ΠΎΠ² дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со Π±Ρ€ΠΎΡ˜ 4 ΠΈ Π½ΠΎΠ²Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ˜Π°, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅:

(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user  0 Oct  8 11:06 .
dr-xr-xr-x 9 user user  0 Oct  8 11:06 ..
lrwx------ 1 user user 64 Oct  8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  8 11:09 3 -> /mnt/logs/123.txt
l-wx------ 1 user user 64 Oct  8 11:15 4 -> /home/user/123.txt

Π‘Π΅ сСќавамС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ со Ρ†Π΅Π²ΠΊΠ° - ΠΊΠ°ΠΊΠΎ bash Π³ΠΈ ΠΌΠ΅Π½ΡƒΠ²Π° дСскрипторитС Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΈ вСќС Π³ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²ΠΌΠ΅ систСмскиот ΠΏΠΎΠ²ΠΈΠΊ dup2.

ΠžΠ±ΠΈΠ΄ΡƒΠ²Π°Ρ˜ΡœΠΈ сС Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ Π΅Π΄Π΅Π½ дСскриптор Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со Π΄Ρ€ΡƒΠ³

(gdb) call dup2(4,3)
$2 = 3

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

(gdb) shell ls -lah /proc/10078/fd/
total 0
dr-x------ 2 user user  0 Oct  8 11:06 .
dr-xr-xr-x 9 user user  0 Oct  8 11:06 ..
lrwx------ 1 user user 64 Oct  8 11:09 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:09 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:06 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  8 11:09 3 -> /home/user/123.txt
l-wx------ 1 user user 64 Oct  8 11:15 4 -> /home/user/123.txt

Π—Π°Ρ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π³ΠΎ дСскрипторот Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 4, бидСјќи Π½Π΅ Π½ΠΈ Ρ‚Ρ€Π΅Π±Π°:

(gdb) call close (4)
$1 = 0

И ΠΈΠ·Π»Π΅Π·Π΅Ρ‚Π΅ ΠΎΠ΄ gdb

(gdb) quit
A debugging session is active.

    Inferior 1 [process 10078] will be detached.

Quit anyway? (y or n) y
Detaching from program: /usr/bin/python2.7, process 10078

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°:

[user@localhost ~]$ ls -lah /home/user/123.txt
-rw-rw-r-- 1 user user 5.1M Oct  8 11:18 /home/user/123.txt
[user@localhost ~]$ ls -lah /home/user/123.txt
-rw-rw-r-- 1 user user 7.1M Oct  8 11:18 /home/user/123.txt

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ Π½ΠΎΠ²Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π°ΠΌΠ΅ старата:

[user@localhost ~]$ ls -lah /mnt/logs/123.txt 
-rw-rw-r-- 1 user user 7.9M Oct  8 11:08 /mnt/logs/123.txt

ΠŸΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π΅ сС Π³ΡƒΠ±Π°Ρ‚, Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅ сС Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Π½Π° Π½ΠΎΠ²Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°.

Π”Π° Π³ΠΈ ΠΎΡ‚Π΅ΠΆΠ½ΠΈΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ ΠΌΠ°Π»ΠΊΡƒ

ЗамислСтС Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½ΠΈ сС Π²Π°ΠΆΠ½ΠΈ, Π½ΠΎ Π½Π΅ΠΌΠ°ΠΌΠ΅ простор Π½Π° дискот Π²ΠΎ Π½ΠΈΡ‚Ρƒ Π΅Π΄Π½Π° ΠΎΠ΄ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈΡ‚Π΅ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²Ρ€Π·Π΅ΠΌΠ΅ дискот.

Она ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Π΅ Π΄Π° Π³ΠΈ прСнасочимС Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π΅ΠΊΠ°Π΄Π΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ Ρ†Π΅Π²ΠΊΠ°, ΠΈ Π΄Π° Π³ΠΈ прСнасочимС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ Ρ†Π΅Π²ΠΊΠ°Ρ‚Π° Π΄ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΏΡ€Π΅ΠΊΡƒ нСкоја ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ netcat.
МоТСмС Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠ΅ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π° Ρ†Π΅Π²ΠΊΠ° со ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° mkfifo. ЌС создадС псСвдо-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ‡Π½ΠΈΠΎΡ‚ систСм, Π΄ΡƒΡ€ΠΈ ΠΈ Π°ΠΊΠΎ Π½Π΅ΠΌΠ° слободСн простор Π½Π° Π½Π΅Π°.

Π Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ја Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅:

[user@localhost ]$ python openforwrite.py 
[user@localhost ~]$ ps axuf | grep [o]pen
user  5946 72.9  0.0 128600  5744 pts/22   R+   11:27   0:20  |   _ python openforwrite.py
[user@localhost ~]$ ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user  0 Oct  8 11:27 .
dr-xr-xr-x 9 user user  0 Oct  8 11:27 ..
lrwx------ 1 user user 64 Oct  8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  8 11:28 3 -> /mnt/logs/123.txt
[user@localhost ~]$ df -h | grep mnt
/dev/loop0      8.7M  8.0M     0 100% /mnt

НСма простор Π½Π° дискот, Π½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠ΅ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π° Ρ†Π΅Π²ΠΊΠ° Ρ‚Π°ΠΌΡƒ:

[user@localhost ~]$ mkfifo /mnt/logs/megapipe
[user@localhost ~]$ ls -lah /mnt/logs/megapipe 
prw-rw-r-- 1 user user 0 Oct  8 11:28 /mnt/logs/megapipe

Π‘Π΅Π³Π° Ρ‚Ρ€Π΅Π±Π° Π½Π΅ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ Π·Π°Π²ΠΈΡ‚ΠΊΠ°ΠΌΠ΅ ситС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΡˆΡ‚ΠΎ Π²Π»Π΅Π³ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ ΠΎΠ²Π°Π° Ρ†Π΅Π²ΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³ сСрвСр ΠΏΡ€Π΅ΠΊΡƒ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, истата netcat Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° ΠΎΠ²Π°.

На сСрвСрот remote-server.example.com, ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅

[user@localhost ~]$ nc -l 7777 > 123.txt 

На Π½Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½ сСрвСр, ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ Π²ΠΎ посСбСн Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»

[user@localhost ~]$ nc remote-server.example.com 7777 < /mnt/logs/megapipe 

Π‘Π΅Π³Π° ситС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΡˆΡ‚ΠΎ Π²Π»Π΅Π³ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ Ρ†Π΅Π²ΠΊΠ°Ρ‚Π° автоматски ќС ΠΎΠ΄Π°Ρ‚ Π²ΠΎ stdin Π²ΠΎ netcat, ΡˆΡ‚ΠΎ ќС Π³ΠΈ испрати Π΄ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° ΠΏΠΎΡ€Ρ‚Π°Ρ‚Π° 7777.

Π‘Γ¨ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Π΅ Π΄Π° ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΠΏΠΈΡˆΡƒΠ²Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° ΠΎΠ²Π°Π° ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π° Ρ†Π΅Π²ΠΊΠ°.

Π’Π΅ΡœΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° која Ρ€Π°Π±ΠΎΡ‚ΠΈ:

[user@localhost ~]$ ps axuf | grep [o]pen
user  5946 99.8  0.0 128600  5744 pts/22   R+   11:27 169:27  |   _ python openforwrite.py
[user@localhost ~]$ ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user  0 Oct  8 11:27 .
dr-xr-xr-x 9 user user  0 Oct  8 11:27 ..
lrwx------ 1 user user 64 Oct  8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  8 11:28 3 -> /mnt/logs/123.txt

Од ситС Π·Π½Π°ΠΌΠ΅Π½Ρ†Π°, Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° само O_WRONLY бидСјќи Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° вСќС постои ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја Π±Ρ€ΠΈΡˆΠ΅ΠΌΠ΅

[user@localhost ~]$ gdb -p 5946
...
(gdb) call open("/mnt/logs/megapipe", 00000001,0666)
$1 = 4
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user  0 Oct  8 11:27 .
dr-xr-xr-x 9 user user  0 Oct  8 11:27 ..
lrwx------ 1 user user 64 Oct  8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  8 11:28 3 -> /mnt/logs/123.txt
l-wx------ 1 user user 64 Oct  8 14:20 4 -> /mnt/logs/megapipe
(gdb) call dup2(4,3)
$2 = 3
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user  0 Oct  8 11:27 .
dr-xr-xr-x 9 user user  0 Oct  8 11:27 ..
lrwx------ 1 user user 64 Oct  8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  8 11:28 3 -> /mnt/logs/megapipe
l-wx------ 1 user user 64 Oct  8 14:20 4 -> /mnt/logs/megapipe
(gdb) call close(4)
$3 = 0
(gdb) shell ls -lah /proc/5946/fd
total 0
dr-x------ 2 user user  0 Oct  8 11:27 .
dr-xr-xr-x 9 user user  0 Oct  8 11:27 ..
lrwx------ 1 user user 64 Oct  8 11:28 0 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:28 1 -> /dev/pts/22
lrwx------ 1 user user 64 Oct  8 11:27 2 -> /dev/pts/22
l-wx------ 1 user user 64 Oct  8 11:28 3 -> /mnt/logs/megapipe
(gdb) quit
A debugging session is active.

    Inferior 1 [process 5946] will be detached.

Quit anyway? (y or n) y
Detaching from program: /usr/bin/python2.7, process 5946

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° далСчинскиот сСрвСр remote-server.example.com

[user@localhost ~]$ ls -lah 123.txt 
-rw-rw-r-- 1 user user 38M Oct  8 14:21 123.txt

Π”ΠΎΠ°Ρ“Π°Π°Ρ‚ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈΠΎΡ‚ сСрвСр

[user@localhost ~]$ ls -lah /mnt/logs/
total 7.9M
drwxr-xr-x 2 user user 1.0K Oct  8 11:28 .
drwxr-xr-x 4 root     root     1.0K Oct  8 10:55 ..
-rw-rw-r-- 1 user user 7.9M Oct  8 14:17 123.txt
prw-rw-r-- 1 user user    0 Oct  8 14:22 megapipe

ΠŸΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ сС Π·Π°Ρ‡ΡƒΠ²Π°Π½ΠΈ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ Π΅ Ρ€Π΅ΡˆΠ΅Π½.

Ја користам ΠΎΠ²Π°Π° ΠΏΡ€ΠΈΠ»ΠΈΠΊΠ° Π΄Π° сС ΠΏΠΎΠ·Π΄Ρ€Π°Π²Π°ΠΌ со ΠΌΠΎΠΈΡ‚Π΅ ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΎΠ΄ Π”Π΅Π³ΠΈΡ€ΠΎ.
Π‘Π»ΡƒΡˆΠ°Ρ˜Ρ‚Π΅ Π³ΠΈ подкаститС Π½Π° Radio-T.

Π‘Π΅ Π΄ΠΎΠ±Ρ€ΠΎ.

Како домашна Π·Π°Π΄Π°Ρ‡Π°, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° размислитС ΡˆΡ‚ΠΎ ќС ΠΈΠΌΠ° Π²ΠΎ дСскрипторитС Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° процСсот Π½Π° ΠΌΠ°Ρ‡ΠΊΠ°Ρ‚Π° ΠΈ ΡΠΏΠΈΠ΅ΡšΠ΅Ρ‚ΠΎ Π°ΠΊΠΎ ја ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ слСднава ΠΊΠΎΠΌΠ°Π½Π΄Π°:

[user@localhost ~]$ cat /dev/zero 2>/dev/null| sleep 10000

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€