เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชธเชพเชฅเซ‡ Linux เชฎเชพเช‚ เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพ

เชเช•เชตเชพเชฐ, เชเช• เช‡เชจเซเชŸเชฐเชตเซเชฏเซเชฎเชพเช‚, เชฎเชจเซ‡ เชชเซ‚เช›เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช•เซ‡ เชœเซ‹ เชคเชฎเชจเซ‡ เชกเชฟเชธเซเช•เชจเซ€ เชœเช—เซเชฏเชพ เชธเชฎเชพเชชเซเชค เชฅเชˆ เช—เชˆ เชนเซ‹เชตเชพเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชคเซ‚เชŸเซ‡เชฒเซ€ เชธเซ‡เชตเชพ เชฎเชณเซ‡ เชคเซ‹ เชคเชฎเซ‡ เชถเซเช‚ เช•เชฐเชถเซ‹?

เช…เชฒเชฌเชคเซเชค, เชฎเซ‡เช‚ เชœเชตเชพเชฌ เช†เชชเซเชฏเซ‹ เช•เซ‡ เชนเซเช‚ เชœเซ‹เชˆเชถ เช•เซ‡ เช† เชœเช—เซเชฏเชพ เชถเซเช‚ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡ เช…เชจเซ‡ เชœเซ‹ เชถเช•เซเชฏ เชนเซ‹เชฏ เชคเซ‹, เชนเซเช‚ เชคเซ‡ เชœเช—เซเชฏเชพ เชธเชพเชซ เช•เชฐเซ€เชถ.
เชชเช›เซ€ เช‡เชจเซเชŸเชฐเชตเซเชฏเซเช…เชฐเซ‡ เชชเซ‚เช›เซเชฏเซเช‚, เชœเซ‹ เชชเชพเชฐเซเชŸเซ€เชถเชจ เชชเชฐ เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ เชจ เชนเซ‹เชฏ, เชชเชฐเช‚เชคเซ เชคเชฎเชจเซ‡ เชเชตเซ€ เชซเชพเช‡เชฒเซ‹ เชชเชฃ เชฆเซ‡เช–เชพเชคเซ€ เชจเชฅเซ€ เช•เซ‡ เชœเซ‡ เชฌเชงเซ€ เชœเช—เซเชฏเชพ เชฒเซ‡เชถเซ‡?

เช† เชฎเชพเชŸเซ‡, เชฎเซ‡เช‚ เช•เชนเซเชฏเซเช‚ เช•เซ‡ เชคเชฎเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เช“เชชเชจ เชซเชพเช‡เชฒ เชกเชฟเชธเซเช•เซเชฐเซ€เชชเซเชŸเชฐเซเชธเชจเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, lsof เช•เชฎเชพเชจเซเชกเชฅเซ€ เช…เชจเซ‡ เชธเชฎเชœเซ€ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เช•เชˆ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‡ เชฌเชงเซ€ เช‰เชชเชฒเชฌเซเชง เชœเช—เซเชฏเชพ เชฒเซ€เชงเซ€ เช›เซ‡, เช…เชจเซ‡ เชชเช›เซ€ เชคเชฎเซ‡ เชกเซ‡เชŸเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชธเช‚เชœเซ‹เช—เซ‹ เช…เชจเซเชธเชพเชฐ เช•เชพเชฐเซเชฏ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. .

เช‡เชจเซเชŸเชฐเชตเซเชฏเซเช…เชฐเซ‡ เชฎเชจเซ‡ เช›เซ‡เชฒเซเชฒเชพ เชถเชฌเซเชฆเชฎเชพเช‚ เช…เชŸเช•เชพเชตเซเชฏเซ‹, เชคเซ‡เชจเชพ เชชเซเชฐเชถเซเชจเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซเชฏเซเช‚: "เชงเชพเชฐเซ‹ เช•เซ‡ เช…เชฎเชจเซ‡ เชกเซ‡เชŸเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เชคเซ‡ เชฎเชพเชคเซเชฐ เชเช• เชกเซ€เชฌเช— เชฒเซ‹เช— เช›เซ‡, เชชเชฐเช‚เชคเซ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเชพเช‰เชจ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชกเซ€เชฌเช— เชฒเช–เซ€ เชถเช•เชคเซเช‚ เชจเชฅเซ€"?

"เช เซ€เช•," เชฎเซ‡เช‚ เชœเชตเชพเชฌ เช†เชชเซเชฏเซ‹, "เช…เชฎเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฐเซ‚เชชเชฐเซ‡เช–เชพเชฎเชพเช‚ เชกเซ€เชฌเช—เซ€เช‚เช—เชจเซ‡ เชฌเช‚เชง เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช."
เช‡เชจเซเชŸเชฐเชตเซเชฏเซเช…เชฐเซ‡ เชตเชพเช‚เชงเซ‹ เช‰เช เชพเชตเซเชฏเซ‹: "เชจเชพ, เช…เชฎเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชนเชœเซ€ เชชเชฃ เชฎเซ‡เชฎเชฐเซ€เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชกเซ‡เชŸเชพ เช›เซ‡, เช…เชจเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช•เซเชฒเชพเชฏเชจเซเชŸเซเชธ เชธเซ‡เชตเชพ เชธเชพเชฅเซ‡ เชœ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เช›เซ‡, เชœเซ‡เชจเซ‡ เช…เชฎเซ‡ เชซเชฐเซ€เชฅเซ€ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพ เชฆเชฌเชพเชฃ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€."

"เชธเชพเชฐเซเช‚," เชฎเซ‡เช‚ เช•เชนเซเชฏเซเช‚, "เชœเซ‹ เช†เชชเชฃเซ‡ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชฐเซ€เชธเซเชŸเชพเชฐเซเชŸ เชจ เช•เชฐเซ€ เชถเช•เซ€เช เช…เชจเซ‡ เชกเซ‡เชŸเชพ เช†เชชเชฃเชพ เชฎเชพเชŸเซ‡ เชฎเชนเชคเซเชตเชจเซ‹ เชจเชฅเซ€, เชคเซ‹ เชชเช›เซ€ เช†เชชเชฃเซ‡ เช† เช–เซเชฒเซเชฒเซ€ เชซเชพเช‡เชฒเชจเซ‡ เชซเชพเช‡เชฒ เชกเชฟเชธเซเช•เซเชฐเซ€เชชเซเชŸเชฐ เชฆเซเชตเชพเชฐเชพ เช–เชพเชฒเซ€ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชชเช›เซ€ เชญเชฒเซ‡เชจเซ‡ เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ‡ ls เช†เชฆเซ‡เชถเชฎเชพเช‚ เชœเซ‹เชคเชพ เชจ เชนเซ‹เชฏ. เชซเชพเช‡เชฒ เชธเชฟเชธเซเชŸเชฎ."

เช‡เชจเซเชŸเชฐเชตเซเชฏเซ เชฒเซ‡เชจเชพเชฐ เชธเช‚เชคเซเชทเซเชŸ เชนเชคเซ‹, เชชเชฃ เชนเซเช‚ เชจเชนเซ‹เชคเซ‹.

เชชเช›เซ€ เชฎเซ‡เช‚ เชตเชฟเชšเชพเชฐเซเชฏเซเช‚, เชฎเชพเชฐเชพ เชœเซเชžเชพเชจเชจเซ€ เช•เชธเซ‹เชŸเซ€ เช•เชฐเชจเชพเชฐ เชตเซเชฏเช•เซเชคเชฟ เช•เซ‡เชฎ เชŠเช‚เชกเซ‹ เช–เซ‹เชฆเชคเซ‹ เชจเชฅเซ€? เชชเชฐเช‚เชคเซ เชœเซ‹ เชกเซ‡เชŸเชพ เชฌเชงเชพ เชชเช›เซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชนเซ‹เชฏ เชคเซ‹ เชถเซเช‚? เชœเซ‹ เช†เชชเชฃเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เชจ เช•เชฐเซ€ เชถเช•เซ€เช, เช…เชจเซ‡ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชซเชพเชˆเชฒ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เชชเชพเชฐเซเชŸเซ€เชถเชจ เชชเชฐ เชฒเช–เซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช•เซ‹เชˆ เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ เชจเชฅเซ€? เชœเซ‹ เช†เชชเชฃเซ‡ เชซเช•เซเชค เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฒเช–เซ‡เชฒเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชœ เชจเชนเซ€เช‚, เชชเชฃ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชœเซ‡ เชฒเช–เซ€ เชฐเชนเซ€ เช›เซ‡ เช…เชฅเชตเชพ เชฒเช–เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡ เชคเซ‡ เชกเซ‡เชŸเชพ เชชเชฃ เช—เซเชฎเชพเชตเซ€ เชจ เชถเช•เซ€เช เชคเซ‹ เชถเซเช‚?

เชคเซเชเชฟเช•

เชฎเชพเชฐเซ€ เช•เชพเชฐเช•เชฟเชฐเซเชฆเซ€เชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เชนเซเช‚ เชเช• เชจเชพเชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เชนเชคเซ‹ เชœเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช…เชจเซ‡ เชชเช›เซ€ เชฎเซ‡เช‚ เชตเชฟเชšเชพเชฐเซเชฏเซเช‚, เชนเซเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชคเซ‡เชจเชพ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชฎเซ‡เชš เช•เชฐเซ€ เชถเช•เซเช‚. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช‡เชตเชพเชจเชต เช‡เชตเชพเชจ เช‡เชตเชพเชจเซ‹เชตเชฟเชš เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชชเชพเชธเซ‡ เชฅเซ‹เชกเซ‹ เชกเซ‡เชŸเชพ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เชฎเชฟเชคเซเชฐเชคเชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ€? เชนเซเช‚ เชธเซ€เชงเซ‹ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ€ เชถเช•เซเช‚ เช›เซเช‚ เช•เซ‡ "เชคเซเชเชฟเช•" เชจเชพเชฎเชจเซ‹ เช•เซ‚เชคเชฐเซ‹ เช† เชœ เช‡เชตเชพเชจเชจเซ‹ เช›เซ‡. เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเซ‡ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชฎ เชฌเชฆเชฒเซ‡ เช…เชจเซ‡ เช‡เชตเชพเชจเชจเซ‡ เชฌเชฆเชฒเซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช“เชฒเซเชฏเชพ เชฌเชจเซ‡ เชคเซ‹ เชถเซเช‚? เชชเช›เซ€ เชคเซ‡ เชฌเชนเชพเชฐ เช†เชตเชถเซ‡ เช•เซ‡ เช†เชชเชฃเชพ เช“เชฒเซเชฏเชพ เช‡เชตเชพเชจเซ‹เชตเชจเชพ เช‡เชตเชพเชจเซ‹เชตเชพ เชชเชพเชธเซ‡ เชนเชตเซ‡ เช•เซ‚เชคเชฐเซ‹ เชฐเชนเซ‡เชถเซ‡ เชจเชนเซ€เช‚, เช…เชจเซ‡ เช†เชชเชฃเซ‹ เชคเซเชเชฟเช• เชนเชœเซ€ เชชเชฃ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เชจเชฅเซ€ เชคเซ‡เชตเชพ เช‡เชตเชพเชจเชจเซ‹ เชฐเชนเซ‡เชถเซ‡. เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡ เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ เช‰เช•เซ‡เชฒเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเซ€, เชœเซ‡เชฃเซ‡ เชฆเชฐเซ‡เช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เช…เชจเชจเซเชฏ เช“เชณเช–เช•เชฐเซเชคเชพ (ID) เช†เชชเซเชฏเซ‹, เช…เชจเซ‡ เชฎเชพเชฐเซเช‚ Tuzik เช† ID เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเซเช‚ เชนเชคเซเช‚, เชœเซ‡ เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชฎเชพเชคเซเชฐ เชเช• เชธเซ€เชฐเซ€เชฏเชฒ เชจเช‚เชฌเชฐ เชนเชคเซ‹. เช†เชฎ, เชคเซเชเชฟเช•เชจเซ‹ เชฎเชพเชฒเชฟเช• ID เชจเช‚เชฌเชฐ 2 เชธเชพเชฅเซ‡ เชนเชคเซ‹, เช…เชจเซ‡ เช…เชฎเซเช• เชธเชฎเชฏเซ‡ เช‡เชตเชพเชจ เช† ID เชนเซ‡เช เชณ เชนเชคเซ‹, เช…เชจเซ‡ เชชเช›เซ€ เช“เชฒเซเชฏเชพ เชธเชฎเชพเชจ ID เชนเซ‡เช เชณ เชฌเชจเซเชฏเซ‹. เชฎเชพเชจเชตเชœเชพเชค เช…เชจเซ‡ เชชเชถเซเชชเชพเชฒเชจเชจเซ€ เชธเชฎเชธเซเชฏเชพ เชตเซเชฏเชตเชนเชพเชฐเซ€เช• เชฐเซ€เชคเซ‡ เชนเชฒ เชฅเชˆ เช—เชˆ.

เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพ

เช† เชซเชพเช‡เชฒ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชซเชพเช‡เชฒ เช…เชจเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ€ เชธเชฎเชธเซเชฏเชพ เช†เชชเชฃเชพ เช•เซ‚เชคเชฐเชพ เช…เชจเซ‡ เชฎเชพเชจเชต เชœเซ‡เชตเซ€ เชœ เช›เซ‡. เชงเชพเชฐเซ‹ เช•เซ‡ เชฎเซ‡เช‚ 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 เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เช“เชตเชฐเชฐเชพเช‡เชก เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฌเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชœเซ‹เชกเชคเซ€ เชชเชพเช‡เชช (เชชเชพเช‡เชช) เชฆเซเชตเชพเชฐเชพ, เชœเซเช“

[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 เชจเช‚เชฌเชฐเซ‹ เชธเชพเชฅเซ‡ เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพเช“เชจเซ‡ เชฌเช‚เชง เช•เชฐเซ‡ เช›เซ‡.

เชชเซ€เช†เชˆเชกเซ€ 9004 เชธเชพเชฅเซ‡ เชชเซเชฐเชฅเชฎ เชฌเซ‡เชถ เชšเชพเชˆเชฒเซเชก เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚, เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เช•เชฐเซ‡ เช›เซ‡ dup2, เช…เชฎเชพเชฐเชพ STDOUT เชซเชพเช‡เชฒ เชกเชฟเชธเซเช•เซเชฐเซ€เชชเซเชŸเชฐ เชจเช‚เชฌเชฐ 1 เชจเซ‡ เชชเชพเช‡เชช เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเชคเซ€ เชซเชพเช‡เชฒ เชกเชฟเชธเซเช•เซเชฐเซ€เชชเซเชŸเชฐเชฎเชพเช‚ เชฌเชฆเชฒเซ‡ เช›เซ‡, เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชคเซ‡ เชจเช‚เชฌเชฐ 3 เช›เซ‡. เช†เชฎ, PID 9004 เชธเชพเชฅเซ‡ เชชเซเชฐเชฅเชฎ เชšเชพเช‡เชฒเซเชก เชชเซเชฐเซ‹เชธเซ‡เชธ STDOUT เชจเซ‡ เชฒเช–เซ‡ เช›เซ‡ เชคเซ‡ เชฌเชงเซเช‚ เช†เชชเซ‹เช†เชช เชชเชพเช‡เชช เชฌเชซเชฐเชฎเชพเช‚ เช†เชตเซ€ เชœเชถเซ‡.

PID 9005 เชธเชพเชฅเซ‡เชจเซ€ เชฌเซ€เชœเซ€ เชšเชพเชˆเชฒเซเชก เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚, bash เชซเชพเช‡เชฒเชจเซ‡ STDIN เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพ เชจเช‚เชฌเชฐ 2 เชชเชฐ dup0 เช•เชฐเซ‡ เช›เซ‡. เชนเชตเซ‡ PID 9005 เชธเชพเชฅเซ‡เชจเซ€ เช…เชฎเชพเชฐเซ€ เชฌเซ€เชœเซ€ เชฌเซ‡เชถ เชœเซ‡ เชตเชพเช‚เชšเชถเซ‡ เชคเซ‡ เชฌเชงเซเช‚ เชชเชพเช‡เชชเชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเชถเซ‡.

เชคเซ‡ เชชเช›เซ€, 3 เช…เชจเซ‡ 4 เชจเช‚เชฌเชฐเซ‹ เชธเชพเชฅเซ‡เชจเชพ เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพเช“ เชชเชฃ เชฌเชพเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชฎเชพเช‚ เชฌเช‚เชง เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชนเชตเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชจเชฅเซ€.

เชนเซเช‚ เชœเชพเชฃเซ€เชœเซ‹เชˆเชจเซ‡ เชซเชพเช‡เชฒ เชกเชฟเชธเซเช•เซเชฐเซ€เชชเซเชŸเชฐ 255 เชจเซ‡ เช…เชตเช—เชฃเซเช‚ เช›เซเช‚, เชคเซ‡ เช†เช‚เชคเชฐเชฟเช• เชฐเซ€เชคเซ‡ เชฌเซ‡เชถ เชฆเซเชตเชพเชฐเชพ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชฌเชพเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชฎเชพเช‚ เชชเชฃ เชฌเช‚เชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เช†เช—เชณ, 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

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เช…เชฎเชพเชฐเซ€ เชชเชพเช‡เชชเชจเซ€ เช…เชจเชจเซเชฏ เชธเช‚เช–เซเชฏเชพ เชฌเช‚เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชฎเชพเช‚ เชธเชฎเชพเชจ เช›เซ‡. เช†เชฎ, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เชœ เชชเชฟเชคเซƒ เชธเชพเชฅเซ‡เชจเซ€ เชฌเซ‡ เช…เชฒเช— เช…เชฒเช— เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชตเชšเซเชšเซ‡เชจเซเช‚ เชœเซ‹เชกเชพเชฃ เช›เซ‡.

เชœเซ‡เช“ เชฌเซ‡เชถ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒเซเชธเชฅเซ€ เชชเชฐเชฟเชšเชฟเชค เชจเชฅเซ€, เชนเซเช‚ เชธเซเชŸเซเชฐเซ‡เชธ เชฆเซเชตเชพเชฐเชพ เช†เชฆเซ‡เชถเซ‹ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เช…เชจเซ‡ เชœเซเช“ เช•เซ‡ เช…เช‚เชฆเชฐ เชถเซเช‚ เชฅเชพเชฏ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช†เชจเชพ เชœเซ‡เชตเซเช‚:

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

เชšเชพเชฒเซ‹ เชกเชฟเชธเซเช• เชธเซเชชเซ‡เชธ เชธเชฎเชพเชชเซเชค เชฅเชˆ เชœเชตเชพเชจเซ€ เช…เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชกเซ‡เชŸเชพ เชฌเชšเชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชจเซ€ เช…เชฎเชพเชฐเซ€ เชธเชฎเชธเซเชฏเชพ เชชเชฐ เชชเชพเช›เชพ เชœเชˆเช. เชšเชพเชฒเซ‹ เชเช• เชจเชพเชจเซ‹ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชฒเช–เซ€เช เชœเซ‡ เชกเชฟเชธเซเช• เชชเชฐ เชฒเช—เชญเช— 1 เชฎเซ‡เช—เชพเชฌเชพเชˆเชŸ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก เชฒเช–เชถเซ‡. เชคเชฆเซเชชเชฐเชพเช‚เชค, เชœเซ‹ เช•เซ‹เชˆ เช•เชพเชฐเชฃเซ‹เชธเชฐ เช…เชฎเซ‡ เชกเชฟเชธเซเช• เชชเชฐ เชกเซ‡เชŸเชพ เชฒเช–เซ€ เชถเช•เชคเชพ เชจเชฅเซ€, เชคเซ‹ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เช…เชตเช—เชฃเซ€เชถเซเช‚ เช…เชจเซ‡ เชเช• เชธเซ‡เช•เชจเซเชกเชฎเชพเช‚ เชซเชฐเซ€เชฅเซ€ เชกเซ‡เชŸเชพ เชฒเช–เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถเซเช‚. เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชนเซเช‚ เชชเชพเชฏเชฅเซ‹เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚, เชคเชฎเซ‡ เช•เซ‹เชˆเชชเชฃ เช…เชจเซเชฏ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

[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

เชชเชนเซ‡เชฒเชพเชฅเซ€ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช—

เช˜เชฃเซ€เชตเชพเชฐ, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐเซ‹ เชกเซ€เชฌเช—เชฐเซเชธ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, GDB) เช…เชฅเชตเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เชฒเซ‹เช—เชฟเช‚เช—เชจเชพ เชตเชฟเชตเชฟเชง เชธเซเชคเชฐเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. Linux เช เชชเชนเซ‡เชฒเชพเชฅเซ€ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‡ เช–เชฐเซ‡เช–เชฐ เชฒเช–เชตเชพ เช…เชจเซ‡ เชฌเชฆเชฒเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชชเซ‚เชฐเซ€ เชชเชพเชกเซ‡ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เชตเซ‡เชฐเซ€เชเชฌเชฒเซเชธเชจเซ€ เช•เชฟเช‚เชฎเชคเซ‹ เชฌเชฆเชฒเชตเซ€, เชฌเซเชฐเซ‡เช•เชชเซ‹เช‡เชจเซเชŸ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚, เชตเช—เซ‡เชฐเซ‡ เชตเช—เซ‡เชฐเซ‡.

เชซเชพเช‡เชฒ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡ เชกเชฟเชธเซเช• เชœเช—เซเชฏเชพเชจเชพ เช…เชญเชพเชต เชตเชฟเชถเซ‡เชจเชพ เชฎเซ‚เชณ เชชเซเชฐเชถเซเชจ เชชเชฐ เชชเชพเช›เชพ เชซเชฐเซ‹, เชšเชพเชฒเซ‹ เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เช…เชจเซเช•เชฐเชฃ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช.

เชšเชพเชฒเซ‹ เช†เชชเชฃเชพ เชชเชพเชฐเซเชŸเซ€เชถเชจ เชฎเชพเชŸเซ‡ เชเช• เชซเชพเชˆเชฒ เชฌเชจเชพเชตเซ€เช, เชœเซ‡เชจเซ‡ เช†เชชเชฃเซ‡ เช…เชฒเช— เชกเซเชฐเชพเชˆเชต เชคเชฐเซ€เช•เซ‡ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเซ€เชถเซเช‚:

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

เชšเชพเชฒเซ‹ เชซเชพเชˆเชฒ เชธเชฟเชธเซเชŸเชฎ เชฌเชจเชพเชตเซ€เช:

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

เชšเชพเชฒเซ‹ เชซเชพเชˆเชฒ เชธเชฟเชธเซเชŸเชฎ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเซ€เช:

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

เช…เชฎเชพเชฐเชพ เชฎเชพเชฒเชฟเช• เชธเชพเชฅเซ‡ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เชฌเชจเชพเชตเซ‹:

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

เชšเชพเชฒเซ‹ เชซเช•เซเชค เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชซเชพเช‡เชฒ เช–เซ‹เชฒเซ€เช:

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

เชฒเซ‹เช‚เชš เช•เชฐเซ‹

[user@localhost ]$ python openforwrite.py 

เชฅเซ‹เชกเซ€เช• เชธเซ‡เช•เชจเซเชกเซ‹ เชฐเชพเชน เชœเซ‹เชตเซ€

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

เชคเซ‡เชฅเซ€, เช…เชฎเชจเซ‡ เช† เชฒเซ‡เช–เชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เชธเชฎเชธเซเชฏเชพ เชฎเชณเซ€. เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ 0, 100% เชชเชฐ เช•เชฌเชœเซ‹ เช•เชฐเซเชฏเซ‹.

เช…เชฎเซ‡ เชฏเชพเชฆ เชฐเชพเช–เซ€เช เช›เซ€เช เช•เซ‡ เชธเชฎเชธเซเชฏเชพเชจเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“ เช…เชจเซเชธเชพเชฐ, เช…เชฎเซ‡ เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชกเซ‡เชŸเชพ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เชœเซ‡ เช—เซเชฎเชพเชตเซ€ เชถเช•เชพเชคเซ€ เชจเชฅเซ€. เช…เชจเซ‡ เช†เชฎ เช•เชฐเชตเชพเชฅเซ€, เช…เชฎเชพเชฐเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชธเซ‡เชตเชพเชจเซ‡ เช เซ€เช• เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชนเชœเซ เชชเชฃ เชกเชฟเชธเซเช• เชœเช—เซเชฏเชพ เช›เซ‡, เชชเชฐเช‚เชคเซ เชเช• เช…เชฒเช— เชชเชพเชฐเซเชŸเซ€เชถเชจเชฎเชพเช‚, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, in/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 เชถเซเช‚ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฐเชพเช–เซ€เชจเซ‡ (เช‰เชชเชฐ เชœเซเช“ เชœเซเชฏเชพเช‚ เช…เชฎเซ‡ เชธเซเชŸเซเชฐเซ‡เชธ เชšเชฒเชพเชตเซ€ เช…เชจเซ‡ เชเช• เช“เชชเชจ เช•เซ‰เชฒ เชฎเชณเซเชฏเซ‹), เชซเชพเช‡เชฒ เช–เซ‹เชฒเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเชพ เช•เซ‹เชก เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชตเชคเซ€ เชคเซ‡ เชœ เช•เชฐเซ€เช เช›เซ€เช, เชชเชฐเช‚เชคเซ เช…เชฎเชจเซ‡ O_WRONLY|O_CREAT| O_TRUNC เชฌเชฟเชŸเซเชธ เชธเช‚เช–เซเชฏเชพเชคเซเชฎเช• เชฎเซ‚เชฒเซเชฏ เชธเชพเชฅเซ‡ เชฌเชฆเชฒเชพเชฏ เช›เซ‡. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช•เชฐเซเชจเชฒ เชธเซเชคเซเชฐเซ‹เชคเซ‹ เช–เซ‹เชฒเซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช…เชนเซ€เช‚ เช…เชจเซ‡ เชœเซเช“ เช•เซ‡ เช•เชฏเชพ เชงเซเชตเชœ เช•เชฏเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡

# O_WRONLY 00000001 เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‹
# O_CREAT 00000100 เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‹
# 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

เชกเซ‡เชŸเชพ เช–เซ‹เชตเชพเชˆ เช—เชฏเซ‹ เชจเชฅเซ€, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡, เชฒเซ‹เช— เชจเชตเชพ เชธเซเชฅเชพเชจ เชชเชฐ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชตเชธเซเชคเซเช“เชจเซ‡ เชฅเซ‹เชกเซ€ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เชฌเชจเชพเชตเซ€เช

เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‹ เช•เซ‡ เชกเซ‡เชŸเชพ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช•เซ‹เชˆเชชเชฃ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹เชฎเชพเช‚ เชกเชฟเชธเซเช• เชœเช—เซเชฏเชพ เชจเชฅเซ€ เช…เชจเซ‡ เช…เชฎเซ‡ เชกเชฟเชธเซเช•เชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€.

เช†เชชเชฃเซ‡ เช†เชชเชฃเชพ เชกเซ‡เชŸเชพเชจเซ‡ เช•เซเชฏเชพเช‚เช• เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเชพเช‡เชช เชชเชฐ, เช…เชจเซ‡ เชจเซ‡เชŸเช•เซ‡เชŸ เชœเซ‡เชตเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชฆเซเชตเชพเชฐเชพ เชชเชพเช‡เชชเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพเชจเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เช•เชฐเซ€เช เช›เซ€เช.
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

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชคเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เชฆเซเชตเชพเชฐเชพ เช† เชชเชพเช‡เชชเชฎเชพเช‚ เช†เชตเชคเชพ เชคเชฎเชพเชฎ เชกเซ‡เชŸเชพเชจเซ‡ เชฌเซ€เชœเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชฒเชชเซ‡เชŸเซ€ เชฒเซ‡เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชคเซ‡ เชœ เชจเซ‡เชŸเช•เซ‡เชŸ เช† เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เช›เซ‡.

remote-server.example.com เชธเชฐเซเชตเชฐ เชชเชฐ, เชšเชฒเชพเชตเซ‹

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

เช…เชฎเชพเชฐเชพ เชธเชฎเชธเซเชฏเชพ เชธเชฐเซเชตเชฐ เชชเชฐ, เชเช• เช…เชฒเช— เชŸเชฐเซเชฎเชฟเชจเชฒเชฎเชพเช‚ เชšเชฒเชพเชตเซ‹

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

เชนเชตเซ‡ เชคเชฎเชพเชฎ เชกเซ‡เชŸเชพ เชœเซ‡ เชชเชพเช‡เชชเชฎเชพเช‚ เช†เชตเชถเซ‡ เชคเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ netcat เชฎเชพเช‚ stdin เชชเชฐ เชœเชถเซ‡, เชœเซ‡ เชคเซ‡เชจเซ‡ เชชเซ‹เชฐเซเชŸ 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

เชกเซ‡เชŸเชพ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชธเชฎเชธเซเชฏเชพ เชนเชฒ เชฅเชพเชฏ เช›เซ‡.

เชนเซเช‚ เชฆเซ‡เช—เซ€เชฐเซ‹เชจเชพ เชธเชนเช•เชพเชฐเซเชฏเช•เชฐเซ‹เชจเซ‡ เชนเซ‡เชฒเซ‹ เช•เชนเซ‡เชตเชพเชจเซ€ เช† เชคเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚.
เชฐเซ‡เชกเชฟเชฏเซ‹-เชŸเซ€ เชชเซ‹เชกเช•เชพเชธเซเชŸ เชธเชพเช‚เชญเชณเซ‹.

เชธเซŒเชจเซ‡ เชธเชพเชฐเซเช‚.

เชนเซ‹เชฎเชตเชฐเซเช• เชคเชฐเซ€เช•เซ‡, เชœเซ‹ เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเซ‹ เช†เชฆเซ‡เชถ เชšเชฒเชพเชตเซ‹ เช›เซ‹ เชคเซ‹ เชนเซเช‚ เชฌเชฟเชฒเชพเชกเซ€ เช…เชจเซ‡ เชŠเช‚เช˜เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเชพ เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพเช“เชฎเชพเช‚ เชถเซเช‚ เชนเชถเซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชฟเชšเชพเชฐเชตเชพเชจเซ‹ เชชเซเชฐเชธเซเชคเชพเชต เชฎเซ‚เช•เซเช‚ เช›เซเช‚:

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

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹