เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเปƒเบ™ Linux เบ”เป‰เบงเบเบ•เบปเบงเบขเปˆเบฒเบ‡

เบ„เบฑเป‰เบ‡เบซเบ™เบถเปˆเบ‡, เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเปเบฒเบžเบฒเบ”, เบ‚เป‰เบญเบเบ–เบทเบเบ–เบฒเบกเบงเปˆเบฒ, เป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบŠเบญเบเบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเป‰เบญเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเปเบœเปˆเบ™เบซเบกเบปเบ”เบžเบทเป‰เบ™เบ—เบตเปˆ?

เปเบ™เปˆเบ™เบญเบ™, เบ‚เป‰เบญเบเบ•เบญเบšเบงเปˆเบฒเบ‚เป‰เบญเบเบˆเบฐเป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ„เบญเบšเบ„เบญเบ‡เป‚เบ”เบเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐ, เบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ‚เป‰เบญเบเบˆเบฐเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ.
เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบœเบนเป‰เบชเปเบฒเบžเบฒเบ”เบ–เบฒเบกเบงเปˆเบฒ, เบ–เป‰เบฒเบšเปเปˆเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เปƒเบ™เบžเบฒเบ—เบดเบŠเบฑเบ™, เปเบ•เปˆเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบšเปเปˆเป€เบซเบฑเบ™เป„เบŸเบฅเปŒเปƒเบ”เป†เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”?

เปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบ›เบตเบ”เบขเบนเปˆเบชเบฐเป€เบซเบกเบต, เบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ lsof, เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ”เป„เบ”เป‰เป€เบญเบปเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบกเบตเบขเบนเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ•เบฒเบกเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™, เบ‚เบถเป‰เบ™เบเบฑเบšเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. .

เบœเบนเป‰เบชเปเบฒเบžเบฒเบ”เป„เบ”เป‰เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ‚เป‰เบญเบเปƒเบ™เบ„เปเบฒเบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบžเบตเปˆเบกเบ„เปเบฒเบ–เบฒเบกเบ‚เบญเบ‡เบฅเบฒเบง: "เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ”เบตเบšเบฑเบ, เปเบ•เปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™ debug เป„เบ”เป‰"?

"เบ•เบปเบเบฅเบปเบ‡," เบ‚เป‰เบญเบเบ•เบญเบšเบงเปˆเบฒ, "เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบดเบ”เบเบฒเบ™เบ”เบตเบšเบฑเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบฅเบฐเป€เบ›เบตเบ”เบกเบฑเบ™เปƒเบซเบกเปˆ."
เบœเบนเป‰เบชเปเบฒเบžเบฒเบ”เป„เบ”เป‰เบ„เบฑเบ”เบ„เป‰เบฒเบ™: "เบšเปเปˆ, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ” restart เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป„เบ”เป‰, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบกเบตเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡."

"เบ•เบปเบเบฅเบปเบ‡," เบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, "เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบซเบกเปˆเปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบฅเบถเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบ›เบตเบ”เบ™เบตเป‰เบœเปˆเบฒเบ™เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบซเบฑเบ™เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ ls. เปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ."

เบœเบนเป‰เบชเปเบฒเบžเบฒเบ”เบกเบตเบ„เบงเบฒเบกเบเบดเบ™เบ”เบต, เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒ, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบœเบนเป‰เบ—เบตเปˆเบ—เบปเบ”เบชเบญเบšเบ„เบงเบฒเบกเบฎเบนเป‰เบ‚เบญเบ‡เบ‚เป‰เบญเบเบšเปเปˆเป€เบฅเบดเบเบเบงเปˆเบฒ? เปเบ•เปˆเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบ‚เปเป‰เบกเบนเบ™เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”? เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบซเบกเปˆ, เปเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบฝเบ™เปƒเบชเปˆเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเปƒเบ™เบžเบฒเบ—เบดเบŠเบฑเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบซเบงเปˆเบฒเบ‡? เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเบนเบ™เป€เบชเบเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ‚เบฝเบ™เปเบฅเป‰เบง, เปเบ•เปˆเบเบฑเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เบ‚เบฝเบ™เบซเบผเบทเบžเบฐเบเบฒเบเบฒเบกเบ‚เบฝเบ™?

เบ•เบนเบŠเบดเบ

เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ™เป‰เบญเบเป†เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบœเบนเป‰เปƒเบŠเป‰. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒ, เบ‚เป‰เบญเบเบˆเบฐเบˆเบฑเบšเบ„เบนเปˆเบœเบนเป‰เปƒเบŠเป‰เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบฅเบฒเบงเป„เบ”เป‰เปเบ™เบงเปƒเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เป‰เบญเบเบกเบต Ivanov Ivan Ivanovich, เปเบฅเบฐเบฅเบฒเบงเบกเบตเบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเบชเป‰เบฒเบ‡เป€เบžเบทเปˆเบญเบ™เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เปเบ™เบงเปƒเบ”? เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป‚เบ”เบเบเบปเบ‡เบงเปˆเบฒเบซเบกเบฒเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบงเปˆเบฒ "Tuzik" เป€เบ›เบฑเบ™เบ‚เบญเบ‡ Ivan เบ™เบตเป‰. เปเบ•เปˆเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบฅเบฒเบงเบ›เปˆเบฝเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบฅเบฒเบงเปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเบˆเบฐ Ivan เบเบฒเบเป€เบ›เบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, Olya? เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบˆเบฐเบ›เบฒเบเบปเบ”เบงเปˆเบฒ Olya Ivanovna Ivanova เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบกเบตเบซเบกเบฒเบญเบตเบเบ•เปเปˆเป„เบ›, เปเบฅเบฐ Tuzik เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™เบ‚เบญเบ‡ Ivan เบ—เบตเปˆเบšเปเปˆเบกเบตเบขเบนเปˆ. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบตเบ•เบปเบงเบฅเบฐเบšเบธเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ (ID) เบŠเปˆเบงเบเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰, เปเบฅเบฐ Tuzik เบ‚เบญเบ‡เบ‚เป‰เบญเบเบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบš ID เบ™เบตเป‰, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง, เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบฅเบเบฅเปเบฒเบ”เบฑเบš. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบ‚เบญเบ‡ ace เบกเบต ID เป€เบฅเบ 2, เปเบฅเบฐเปƒเบ™เบšเบฒเบ‡เป€เบงเบฅเบฒ Ivan เบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰ ID เบ™เบตเป‰, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Olya เบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰ ID เบ”เบฝเบงเบเบฑเบ™. เบšเบฑเบ™เบซเบฒโ€‹เบกเบฐเบ™เบธเบ”โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบฅเป‰เบฝเบ‡เบชเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบขเปˆเบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡เปœเป‰เบฒ.

เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒ

เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เป„เบŸเบฅเปŒเปเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป„เบŸเบฅเปŒเบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเบกเบฒเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบซเบกเบฒเปเบฅเบฐเบœเบนเป‰เบŠเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ‚เป‰เบญเบเป„เบ”เป‰เป€เบ›เบตเบ”เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ ivan.txt เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ‚เบฝเบ™เบ„เปเบฒ tuzik เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบกเบฑเบ™, เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เปเบฒเบญเบดเบ” "t" เปƒเบ™เป„เบŸเบฅเปŒ, เปเบฅเบฐเป„เบŸเบฅเปŒเบ™เบตเป‰เบ–เบทเบเบ›เปˆเบฝเบ™เบŠเบทเปˆเป‚เบ”เบเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบซเบ™เบถเปˆเบ‡, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบ›เบฑเบ™ olya.txt. เปเบ•เปˆเป„เบŸเบฅเปŒเบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเบ„เบทเป€เบเบปเปˆเบฒ, เปเบฅเบฐเบ‚เป‰เบญเบเบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ ace เบ‚เบญเบ‡เบ‚เป‰เบญเบเบขเบนเปˆเปƒเบ™เบกเบฑเบ™. เบ—เบธเบเป†เบ„เบฑเป‰เบ‡เป€เบ›เบตเบ”เป„เบŸเบฅเปŒเป‚เบ”เบเบเบฒเบ™เป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบš เป€เบ›เบตเบ” เปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปƒเบ”เบเปเปˆเบ•เบฒเบกเบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฑเบš ID เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ—เบตเปˆเบŠเบตเป‰เบ‚เป‰เบญเบเป„เบ›เบซเบฒเป„เบŸเบฅเปŒ, ID เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒ. เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบงเปˆเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡เปเบฅเบฐเปƒเบœเป€เบฎเบฑเบ”เบเบฑเบšเป„เบŸเบฅเปŒเบ™เบตเป‰เบ•เปเปˆเป„เบ›, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบถเบš, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบŠเบทเปˆ, เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป„เบ”เป‰, เบซเบผเบทเบชเบดเบ”เปƒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เปเบฅเบฐเบ‚เบฝเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบญเบปเบฒเป„เบ›, เบ‚เป‰เบญเบเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰. เบเบฑเบšเบกเบฑเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบ›เบตเบ”เป„เบŸเบฅเปŒ, เบ‚เป‰เบญเบเบกเบตเบชเบดเบ”เบ—เบตเปˆเบˆเบฐเบญเปˆเบฒเบ™เปเบฅเบฐ / เบซเบผเบทเบ‚เบฝเบ™เบกเบฑเบ™เปเบฅเบฐเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”.

เปƒเบ™ Linux, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” libc เป€เบ›เบตเบ” 3 เป„เบŸเบฅเปŒ descriptor เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ (เบ‚เบฐเบšเบงเบ™เบเบฒเบ™), เป€เบฅเบ 0,1,2. เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ เบœเบนเป‰เบŠเบฒเบ stdio ะธ เบœเบนเป‰เบŠเบฒเบ stdout

  • เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒ 0 เป€เบญเบตเป‰เบ™เบงเปˆเบฒ STDIN เปเบฅเบฐเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™
  • เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒ 1 เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ STDOUT เปเบฅเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบญเบญเบ, เป€เบŠเบฑเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบดเบก
  • เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒ 2 เป€เบญเบตเป‰เบ™เบงเปˆเบฒ STDERR เปเบฅเบฐเบ–เบทเบเปƒเบŠเป‰เป‚เบ”เบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”.

เบ–เป‰เบฒเบขเบนเปˆเปƒเบ™เป‚เบ›เบผเปเบเบผเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบˆเบปเป‰เบฒเป€เบ›เบตเบ”เป„เบŸเบฅเปŒเปƒเบ”เป†เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™เบซเบผเบทเบ‚เบฝเบ™, เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบš ID เบŸเบฃเบตเบ—เปเบฒเบญเบดเบ”เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เป€เบฅเบ 3.

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰ PID เบ‚เบญเบ‡เบกเบฑเบ™.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบซเป‰เป€เบ›เบตเบ” bash console เปเบฅเบฐเป€เบšเบดเปˆเบ‡ PID เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ

[user@localhost ]$ echo $$
15771

เปƒเบ™ console เบ—เบตเบชเบญเบ‡เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™

[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 เป„เบŸเบฅเปŒ descriptor เปเบกเปˆเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™ pseudo terminal /dev/pts, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบซเบกเบนเบ™เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เป„เบ”เป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบฅเปˆเบ™เบžเบงเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ„เบญเบ™เป‚เบŠเบ—เบตเบชเบญเบ‡

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

เปเบฅเบฐเปƒเบ™ console เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™

[user@localhost ]$ hello world

เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปเบฅเบฐเบ—เปเปˆ

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” override เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ 3 เป„เบŸเบฅเปŒ descriptor เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡, เบฅเบงเบกเบ—เบฑเบ‡เปƒเบ™ bash, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เป‚เบ”เบเบœเปˆเบฒเบ™เบ—เปเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เป€เบšเบดเปˆเบ‡.

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

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เบ”เป‰เบงเบ strace -f เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™, เปเบ•เปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เป‚เบ”เบเบซเบเปเป‰.

เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ bash เบžเปเปˆเปเบกเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบš PID 15771 parses เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบซเบผเบฒเบเบ„เปเบฒเบชเบฑเปˆเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบญเบ‡เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ: cat เปเบฅเบฐเบ™เบญเบ™. Bash เบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบชเบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เป€เบ”เบฑเบ, เปเบฅเบฐเบฅเบงเบกเบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เปเปˆเบ”เบฝเบง. เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, bash เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™ 2 เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเปเบฅเบฐเบซเบ™เบถเปˆเบ‡เบ—เปเปˆ.

Bash เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบ™เป‰เบญเบ เบ—เปเปˆ เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเปƒเบซเบกเปˆเปƒเบ™ buffer เบ—เปเปˆเบŠเบปเปˆเบงเบ„เบฒเบง, เปเบ•เปˆ buffer เบ™เบตเป‰เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบฅเบนเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบžเปเปˆเปเบกเปˆ, เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบตเบ—เปเปˆเปเบฅเป‰เบง, เปเบ•เปˆเบšเปเปˆเบกเบตเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เป€เบ”เบฑเบเบ™เป‰เบญเบเป€เบ—เบทเปˆเบญ:

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

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เป‚เบ— clone 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

เบขเปˆเบฒเบฅเบทเบกเบงเปˆเบฒ clone clones เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเป‰เบญเบกเบเบฑเบš descriptors เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบ„เบทเบเบฑเบ™เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเปเปˆเปเบกเปˆเปเบฅเบฐเปƒเบ™เป€เบ”เบฑเบเบ™เป‰เบญเบ. เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเปเปˆเปเบกเปˆเบ—เบตเปˆเบกเบต PID 15771 เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฒเบกเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เป€เบ”เบฑเบ, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ•เบญเบšเบฎเบฑเบšเบˆเบฒเบเป€เบ”เบฑเบเบ™เป‰เบญเบ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ—เปเปˆ, เปเบฅเบฐเบกเบฑเบ™เบ›เบดเบ”เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเป€เบฅเบ 3 เปเบฅเบฐ 4.

เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ bash เป€เบ”เบฑเบเบ™เป‰เบญเบเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบเบฑเบš PID 9004, เบฅเบฐเบšเบปเบšเป‚เบ—เบซเบฒ dup2, เบ›เปˆเบฝเบ™เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒ STDOUT เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบ 1 เป€เบ›เบฑเบ™เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเบ—เบตเปˆเบŠเบตเป‰เป„เบ›เบซเบฒเบ—เปเปˆ, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบ 3. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบฅเบนเบเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบกเบต PID 9004 เบ‚เบฝเบ™เปƒเบชเปˆ STDOUT เบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™ buffer เบ—เปเปˆ.

เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบฅเบนเบเบ—เบตเบชเบญเบ‡เบเบฑเบš PID 9005, bash เปƒเบŠเป‰ dup2 เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เป„เบŸเบฅเปŒ descriptor STDIN เป€เบฅเบ 0. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆ bash เบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบš PID 9005 เบˆเบฐเบญเปˆเบฒเบ™เบˆเบฐเบ–เบทเบเบญเปˆเบฒเบ™เบˆเบฒเบเบ—เปเปˆ.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเป€เบฅเบ 3 เปเบฅเบฐ 4 เบเบฑเบ‡เบ–เบทเบเบ›เบดเบ”เบขเบนเปˆเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบ™เป‰เบญเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบญเบตเบเบ•เปเปˆเป„เบ›.

เบ‚เป‰เบญเบเป€เบˆเบ”เบ•เบฐเบ™เบฒเบฅเบฐเป€เบงเบฑเป‰เบ™เป„เบŸเบฅเปŒ descriptor 255; เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบžเบฒเบเปƒเบ™เป‚เบ”เบ bash เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปเบฅเบฐเบเบฑเบ‡เบˆเบฐเบ–เบทเบเบ›เบดเบ”เบขเบนเปˆเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบ™เป‰เบญเบ.

เบ•เปเปˆเป„เบ›, เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบกเบต PID 9004, bash เป€เบฅเบตเปˆเบกเปƒเบŠเป‰เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš exec เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบ™เปเบกเปˆเบ™ /usr/bin/cat.

เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบฅเบนเบเบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบกเบต PID 9005, bash เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ /usr/bin/sleep.

เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš exec เบšเปเปˆเบ›เบดเบ”เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เป„เบŸเบฅเปŒ เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบ–เบทเบเป€เบ›เบตเบ”เบ”เป‰เบงเบเบ—เบธเบ‡ O_CLOEXEC เปƒเบ™เป€เบงเบฅเบฒเป‚เบ—เป€เบ›เบตเบ”. เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เป€เบ›เบตเบ”โ€‹เบ•เบปเบงโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เป„เบ”เป‰โ€‹, เบเบฒเบ™โ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เปƒเบ™โ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เป„เบงเป‰โ€‹.

เบเบงเบ”เป€เบšเบดเปˆเบ‡เปƒเบ™ console:

[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 megabyte เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเปƒเบชเปˆเปเบœเปˆเบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเปเบœเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบชเบปเบ™เปƒเบˆเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปƒเบ™เบงเบดเบ™เบฒเบ—เบต. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰ 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

เปเบฅเบฐเบ”เป‰เบงเบเบ—เบธเบ‡ "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

เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบฅเปˆเบ™เปเบฅเป‰เบง

เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก, เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบฅเบฐเบ—เบปเบ”เบชเบญเบšเป‚เบ„เบ‡เบเบฒเบ™, เปƒเบŠเป‰ debuggers (เบ•เบปเบงเบขเปˆเบฒเบ‡ GDB) เบซเบผเบทเบฅเบฐเบ”เบฑเบšเบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. Linux เบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เปเบฅเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเป‰เบง, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›, เบเปเบฒเบ™เบปเบ”เบˆเบธเบ”เบขเบธเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบ„เปเบฒเบ–เบฒเบกเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบเปˆเบฝเบงเบเบฑเบšเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบšเปเปˆเบžเบฝเบ‡เบžเปเปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เป„เบŸเบฅเปŒ, เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบˆเปเบฒเบฅเบญเบ‡เบšเบฑเบ™เบซเบฒ.

เปƒเบซเป‰เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบชเปเบฒเบฅเบฑเบšเบžเบฒเบ—เบดเบŠเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐ mount เป€เบ›เบฑเบ™เปเบœเปˆเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ:

[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% occupied.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบญเบตเบ‡เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบฐเบเบฒเบเบฒเบกเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเบนเบ™เป€เบชเบเป„เบ”เป‰. เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เปเบเป‰เป„เบ‚เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ restart เบ‚เบฐเบšเบงเบ™เบเบฒเบ™.

เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”, เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบžเบฒเบ—เบดเบŠเบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ™ / home.

เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบก "reprogram on the fly" เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡ 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

เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒ descriptor เป€เบฅเบ 3, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เปƒเบˆ

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

เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบฅเบฐเบšเบปเบšเป€เบญเบตเป‰เบ™เบงเปˆเบฒ Python เปเบกเปˆเบ™เบซเบเบฑเบ‡ (เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปเบฅเปˆเบ™ strace เปเบฅเบฐเบžเบปเบšเป€เบซเบฑเบ™เบเบฒเบ™เป‚เบ—เป€เบ›เบตเบ”), เป€เบกเบทเปˆเบญเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เป„เบŸเบฅเปŒ, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เปƒเบ™เบ™เบฒเบกเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ O_WRONLY|O_CREAT| O_TRUNC bits เปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบ„เปˆเบฒเบ•เบปเบงเป€เบฅเบ. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เป€เบ›เบตเบ”เปเบซเบผเปˆเบ‡ kernel, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡ เบ—เบตเปˆเบ™เบตเป‰ เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ—เบธเบ‡เปƒเบ”เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆ

#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

เบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเบˆเปเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเบ—เปเปˆ - how bash เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบŸเบฅเปŒ descriptors, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบเบฒเบ™เป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบš 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

เบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบชเบนเบ™เป€เบชเบ, เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เบšเบฑเบ™เบ—เบถเบเบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเปƒเบซเบกเปˆ.

เปƒเบซเป‰ complicate เบงเบฝเบเบ‡เบฒเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ

เบฅเบญเบ‡เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบชเบเปŒเบขเบนเปˆเปƒเบ™เบžเบฒเบ—เบดเบŠเบฑเบ™เปƒเบ”เป† โ€‹โ€‹เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบœเปˆเบ™เป„เบ”เป‰.

เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปเบกเปˆเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡, เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฑเบšเบ—เปเปˆ, เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบ—เปเปˆเป„เบ›เบซเบฒเป€เบ„เบทเบญเบ‚เปˆเบฒเบเป‚เบ”เบเบœเปˆเบฒเบ™เบšเบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡ netcat.
เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ—เปเปˆเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ mkfifo. เบกเบฑเบ™เบˆเบฐเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ pseudo เปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เปƒเบ™เบกเบฑเบ™.

เบฃเบตเบชเบฐเบ•เบฒเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡:

[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 

เบขเบนเปˆเปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบ—เบตเปˆเบกเบตเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™ terminal เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ

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

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เปƒเบ™เบ—เปเปˆเบˆเบฐเป„เบ›เบซเบฒ stdin เปƒเบ™ netcat เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ port 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

เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เป„เบงเป‰โ€‹, เบšเบฑเบ™โ€‹เบซเบฒโ€‹เปเบกเปˆเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹.

เบ‚เป‰เบญเบเปƒเบŠเป‰เป‚เบญเบเบฒเบ”เบ™เบตเป‰เป€เบžเบทเปˆเบญเป€เบงเบปเป‰เบฒเบชเบฐเบšเบฒเบเบ”เบตเบเบฑเบšเป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเบˆเบฒเบ Degiro.
เบŸเบฑเบ‡ Radio-T podcasts.

เบ”เบตเบ—เบธเบเบขเปˆเบฒเบ‡.

เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบšเป‰เบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบขเบนเปˆเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ descriptors cat เปเบฅเบฐเบ™เบญเบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™