ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ ืื™ืŸ ืœื™ื ื•ืงืก ืžื™ื˜ ื‘ื™ื™ืฉืคื™ืœืŸ

ืึทืžืึธืœ, ื‘ืขืฉืึทืก ืึทืŸ ืื™ื ื˜ืขืจื•ื•ื™ื•, ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขืคืจืขื’ื˜, ื•ื•ืึธืก ื•ื•ืขื˜ ืื™ืจ ื˜ืึธืŸ ืื•ื™ื‘ ืื™ืจ ื’ืขืคึฟื™ื ืขืŸ ืึท ื“ื™ื ืกื˜ ื ื™ืฉื˜ ืืจื‘ืขื˜ืŸ ืจืขื›ื˜ ืฆื• ื“ืขื ืคืึทืงื˜ ืึทื– ื“ืขืจ ื“ื™ืกืง ืื™ื– ืœื•ื™ืคืŸ ืื•ื™ืก ืคื•ืŸ ืคึผืœืึทืฅ?

ืคืืจืฉื˜ืฒ ื˜ ื–ื™ืš , ื ื– ืื™ ืš ืฐืข ืœ ื–ืขืŸ , ืฐื ืก ืื™ ื– ืคืืจื ื•ืžืข ืŸ ืคื• ืŸ ื“ืข ื ืืจื˜ , ืื• ืŸ ืื•ื™ ื‘ ืžืขื’ืœืข ืš ืฐืข ืœ ืื™ ืš ืจืฒื ื™ืง ืŸ ื“ื ื ืืจื˜ .
ื“ืขืจื ืึธืš ื”ืึธื˜ ื“ืขืจ ืื™ื ื˜ืขืจื•ื•ื™ื•ืขืจ ื’ืขืคืจืขื’ื˜, ื•ื•ืึธืก ืื•ื™ื‘ ืขืก ืื™ื– ืงื™ื™ืŸ ืคืจื™ื™ ืคึผืœืึทืฅ ืื•ื™ืฃ ื“ืขืจ ืฆืขื˜ื™ื™ืœื•ื ื’, ืึธื‘ืขืจ ืื™ืจ ืื•ื™ืš ื˜ืึธืŸ ื ื™ื˜ ื–ืขืŸ ืงื™ื™ืŸ ื˜ืขืงืขืก ื•ื•ืึธืก ื•ื•ืึธืœื˜ ื ืขืžืขืŸ ืึทืœืข ื“ื™ ืคึผืœืึทืฅ?

ืฆื• ื“ืขื ืื™ืš ื’ืขื–ืื’ื˜ ืึทื– ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขื ื“ื™ืง ืงื•ืงืŸ ืื™ืŸ ืขืคืขื ืขืŸ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจืก, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืžื™ื˜ ื“ื™ lsof ื‘ืึทืคึฟืขืœ, ืื•ืŸ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ืึธืก ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื”ืื˜ ื’ืขื ื•ืžืขืŸ ืึทืœืข ื“ื™ ื‘ื ื™ืžืฆื ืคึผืœืึทืฅ, ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ื”ืึทื ื“ืœืขืŸ ืœื•ื™ื˜ ื“ื™ ืฆื•ืฉื˜ืื ื“ืŸ, ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ืฆื™ ื“ื™ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื“ืืจืฃ .

ื“ืขืจ ื™ื ื˜ืขืจื•ื•ื™ื•ื–ืขืจ ื™ื ื˜ืขืจืึทืคึผื˜ื™ื“ ืžื™ืจ ืื•ื™ืฃ ื“ื™ ืœืขืฆื˜ืข ื•ื•ืึธืจื˜, ืึทื“ื™ื ื’ ืฆื• ื–ื™ื™ืŸ ืงืฉื™ื: "ืจืขื›ืŸ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื“ืึทืจืคึฟืŸ ื“ื™ ื“ืึทื˜ืŸ, ืขืก ืื™ื– ื ืึธืจ ืึท ื“ื™ื‘ืึทื’ ืงืœืึธืฅ, ืึธื‘ืขืจ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื˜ื•ื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ื•ื•ื™ื™ึทืœ ืขืก ืงืขืŸ ื ื™ืฉื˜ ืฉืจื™ื™ึทื‘ืŸ ืึท ื“ื™ื‘ืึทื’"?

"ืึธื•ืงื™ื™," ืื™ืš ื’ืขืขื ื˜ืคืขืจื˜, "ืžื™ืจ ืงืขื ืขืŸ ืงืขืจ ืึทื•ื•ืขืง ื“ื™ื‘ืึทื’ ืื™ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ืจื™ืกื˜ืึทืจื˜ ืขืก."
ื“ืขืจ ืื™ื ื˜ืขืจื•ื•ื™ื•ืขืจ ื”ืึธื˜ ืึทื‘ื“ื–ืฉืขืงื˜ื™ื“: "ื ื™ื™ืŸ, ืžื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ืจื™ืกื˜ืึทืจื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืžื™ืจ ื ืึธืš ื”ืึธื‘ืŸ ื•ื•ื™ื›ื˜ื™ืง ื“ืึทื˜ืŸ ืกื˜ืึธืจื“ ืื™ืŸ ื–ื›ึผืจื•ืŸ, ืื•ืŸ ื•ื•ื™ื›ื˜ื™ืง ืงืœื™ื™ืึทื ืฅ ื–ืขื ืขืŸ ืงืึธื ื ืขืงื˜ืขื“ ืฆื• ื“ื™ ืกืขืจื•ื•ื™ืก ื–ื™ืš, ื•ื•ืึธืก ืžื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ืฆื•ื•ื™ื ื’ืขืŸ ื–ื™ืš ื•ื•ื™ื“ืขืจ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ."

"ืึธื•ืงื™ื™," ืื™ืš ื’ืขื–ืื’ื˜, "ืื•ื™ื‘ ืžื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ืจื™ืกื˜ืึทืจื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื•ื•ื™ื›ื˜ื™ืง ืคึฟืึทืจ ืื•ื ื“ื–, ืžื™ืจ ืงืขื ืขืŸ ืคืฉื•ื˜ ื•ื™ืกืžืขืงืŸ ื“ืขื ืึธืคึฟืŸ ื˜ืขืงืข ื“ื•ืจืš ื“ื™ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ, ืืคื™ืœื• ืื•ื™ื‘ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื–ืขืŸ ืขืก ืื™ืŸ ื“ื™ ls ื‘ืึทืคึฟืขืœ. ืื•ื™ืฃ ื“ืขืจ ื˜ืขืงืข ืกื™ืกื˜ืขื."

ื“ืขืจ ืื™ื ื˜ืขืจื•ื•ื™ื•ืขืจ ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื•ืคืจื™ื“ืŸ, ืึธื‘ืขืจ ืื™ืš ื ื™ืฉื˜.

ื“ืขืจื ืึธืš ื”ืึธื‘ ืื™ืš ื’ืขื˜ืจืึทื›ื˜, ืคืึทืจื•ื•ืึธืก ื’ืจืึธื‘ื˜ ื“ืขืจ ืžืขื ื˜ืฉ ื•ื•ืึธืก ื˜ืขืกื˜ ืžื™ื™ืŸ ื•ื•ื™ืกืŸ ื ื™ืฉื˜ ื˜ื™ืคืขืจ? ืึธื‘ืขืจ ื•ื•ืึธืก ืื•ื™ื‘ ื“ื™ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื ืึธืš ื•ื•ื™ื›ื˜ื™ืง? ื•ื•ืึธืก ืื•ื™ื‘ ืžื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ืจื™ืกื˜ืึทืจื˜ ืึท ืคึผืจืึธืฆืขืก, ืื•ืŸ ื“ืขืจ ืคึผืจืึธืฆืขืก ืฉืจื™ื™ื‘ื˜ ืฆื• ื“ื™ ื˜ืขืงืข ืกื™ืกื˜ืขื ืื•ื™ืฃ ืึท ืฆืขื˜ื™ื™ืœื•ื ื’ ื•ื•ืึธืก ื”ืื˜ ืงื™ื™ืŸ ืคืจื™ื™ ืคึผืœืึทืฅ? ื•ื•ืึธืก ืื•ื™ื‘ ืžื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ืคืึทืจืœื™ืจืŸ ื ื™ื˜ ื‘ืœื•ื™ื– ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืึธืก ืื™ื– ืฉื•ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ, ืึธื‘ืขืจ ืื•ื™ืš ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืึธืก ื“ืขืจ ืคึผืจืึธืฆืขืก ืฉืจื™ื™ื‘ื˜ ืึธื“ืขืจ ืคืจื•ื•ื•ื˜ ืฆื• ืฉืจื™ื™ึทื‘ืŸ?

ื˜ื•ื–ื™ืง

ืคืจื™ ืื™ืŸ ืžื™ื™ืŸ ืงืึทืจื™ืขืจืข, ืื™ืš ื’ืขืคืจื•ื•ื•ื˜ ืฆื• ืฉืึทืคึฟืŸ ืึท ืงืœื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทื– ื“ืืจืฃ ืฆื• ืงืจืึธื ื‘ืึทื ื™ืฆืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข. ืื•ืŸ ื“ืขืžืึธืœื˜ ืื™ืš ื’ืขื“ืึทื ืง, ื•ื•ื™ ืงืขื ืขืŸ ืื™ืš ื’ืœื™ื™ึทื›ืŸ ื“ืขื ื‘ืึทื ื™ืฆืขืจ ืฆื• ื–ื™ื™ืŸ ื“ืึทื˜ืŸ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืš ื”ืึธื‘ืŸ ื™ื•ื•ืึทื ืึธื•ื• ืื™ื•ื•ืืŸ ืื™ื•ื•ืื ืึธื•ื•ื™ื˜ืฉ, ืื•ืŸ ืขืจ ื”ืื˜ ืขื˜ืœืขื›ืข ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, ืึธื‘ืขืจ ื•ื•ื™ ืงืขื ืขืŸ ืื™ืš ืžืึทื›ืŸ ืคืจื™ื™ื ื˜ ืžื™ื˜ ื–ื™ื™? ืื™ืš ืงืขืŸ ื’ืœื™ื™ืš ืึธื ื•ื•ื™ื™ึทื–ืŸ ืึทื– ื“ืขืจ ื”ื•ื ื˜ ืžื™ื˜ืŸ ื ืึธืžืขืŸ "ื˜ื•ื–ื™ืง" ื’ืขื”ืขืจื˜ ืฆื• ื“ืขื ื–ื™ื™ืขืจ ืื™ื•ื•ืืŸ. ืื‘ืขืจ ื•ื•ืึธืก ืื•ื™ื‘ ืขืจ ื˜ื•ื™ืฉืŸ ื–ื™ื™ืŸ ื ืึธืžืขืŸ ืื•ืŸ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืื™ื•ื•ืืŸ ื•ื•ืขืจื˜, ืœืžืฉืœ, ืึธืœื™ืึท? ื“ืขืžืืœ ื˜ ืฐืข ื˜ ื–ื™ ืš ืื•ื™ืกืฐืฒื–ืขืŸ , ื ื– ืื•ื ื–ืข ืจ ืื•ืœื™ื ื ืื™ืฐืื ืืฐืข ืจ ืื™ืฐืื ืืฐื , ืฐืข ื˜ ืฉื•ื™ ืŸ ื ื™ืฉ ื˜ ื”ืื‘ ืŸ ืงืฒ ืŸ ื”ื•ื ื˜ , ืื• ืŸ ืื•ื ื“ื–ืข ืจ ื˜ื•ื–ื™ ืง ืฐืข ื˜ ื ื ืš ื’ืขื”ืขืจ ืŸ ืฆ ื• ื“ืข ื ื ื™ื˜ึพืขืงื–ื™ืกื˜ื™ืจืขื ืข ื ืื™ื•ื•ืืŸ . ื ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ืึธืก ื”ืึธื˜ ื’ืขื’ืขื‘ืŸ ื™ืขื“ืŸ ื‘ืื ื•ืฆืขืจ ืึทืŸ ืื™ื™ื’ื ืึทืจื˜ื™ืงืŸ ืื™ื“ืขื ื˜ื™ืคื™ืฆื™ืจืŸ (ืื™ื™ื“) ื”ืึธื˜ ื’ืขื”ืึธืœืคืŸ ืœื™ื™ื–ืŸ ื“ืขื ืคืจืื‘ืœืขื, ืื•ืŸ ืžื™ื™ืŸ ื˜ื•ื–ื™ืง ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื•ื’ืขื‘ื•ื ื“ืŸ ืžื™ื˜ ื“ืขื ID, ื•ื•ืึธืก ืื™ื–, ืื™ืŸ ืคืึทืงื˜, ื ืึธืจ ืึท ืกื™ืจื™ืึทืœ ื ื•ืžืขืจ. ืื–ื•ื™, ื“ื™ ื‘ืึทื–ื™ืฆืขืจ ืคื•ืŸ ื“ื™ ืžื•ื™ื– ื”ืื˜ ืฉื™ื™ึทืŸ ื ื•ืžืขืจ 2, ืื•ืŸ ืื™ืŸ ืขื˜ืœืขื›ืข ืคื•ื ื˜ ืื™ืŸ ืฆื™ื™ึทื˜ ืื™ื•ื•ืืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ืื•ื ื˜ืขืจ ื“ืขื ืฉื™ื™ึทืŸ, ืื•ืŸ ื“ืขืžืึธืœื˜ ืึธืœื™ืึท ื’ืขื•ื•ืืจืŸ ืื•ื ื˜ืขืจ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฉื™ื™ึทืŸ. ื“ื™ ืคึผืจืึธื‘ืœืขื ืคื•ืŸ ืžืขื ื˜ืฉื”ื™ื™ึทื˜ ืื•ืŸ ื›ื™ื™ึทืข ื›ืึทื–ื‘ืึทื ื“ ืื™ื– ืคึผืจืึทืงื˜ืึทืงืœื™ ืกืึทืœื•ื•ื“.

ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ

ื“ืขืจ ืคึผืจืึธื‘ืœืขื ืคื•ืŸ ื“ืขืจ ื˜ืขืงืข ืื•ืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ืขื ื˜ืขืงืข ืื™ื– ื‘ืขืขืจืขืš ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื•ื•ื™ ืึทื– ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื”ื•ื ื˜ ืื•ืŸ ืžืขื ื˜ืฉ. ืจืขื›ืŸ ืื™ืš ื’ืขืขืคื ื˜ ืึท ื˜ืขืงืข ื’ืขืจื•ืคืŸ ivan.txt ืื•ืŸ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื“ื™ ื•ื•ืึธืจื˜ tuzik ืื™ืŸ ืขืก, ืึธื‘ืขืจ ื ืึธืจ ื’ืขืจืื˜ืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื‘ืจื™ื•ื• "ื˜" ืื™ืŸ ื“ืขืจ ื˜ืขืงืข, ืื•ืŸ ื“ืขื ื˜ืขืงืข ืื™ื– ืจื™ื ื™ื™ืžื“ ื“ื•ืจืš ืขืžืขืฆืขืจ, ืœืžืฉืœ, ืฆื• olya.txt. ืื‘ืขืจ ื“ื™ ื˜ืขืงืข ื‘ืœื™ื™ื‘ื˜ ื“ื™ ื–ืขืœื‘ืข, ืื•ืŸ ืื™ืš ื ืึธืš ื•ื•ื™ืœืŸ ืฆื• ืจืขืงืึธืจื“ื™ืจืŸ ืžื™ื™ืŸ ืžื•ื™ื– ืื™ืŸ ืขืก. ื™ืขื“ืขืจ ืžืึธืœ ืึท ื˜ืขืงืข ืื™ื– ืึธืคึผืขื ืขื“ ื“ื•ืจืš ืึท ืกื™ืกื˜ืขื ืจื•ืคืŸ ืขืคืขื ืขืŸ ืื™ืŸ ืงื™ื™ืŸ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš ืื™ืš ื‘ืึทืงื•ืžืขืŸ ืึท ื™ื™ื ืฆื™ืง ืฉื™ื™ึทืŸ ื•ื•ืึธืก ื•ื•ื™ื™ื–ื˜ ืžื™ืจ ืฆื• ืึท ื˜ืขืงืข, ื“ืขื ืฉื™ื™ึทืŸ ืื™ื– ื“ืขืจ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ. ืื•ืŸ ืก'ืื™ื– ื‘ื›ืœืœ ื ื™ืฉื˜ ืงื™ื™ืŸ ื—ื™ืœื•ืง ื•ื•ืืก ืื•ืŸ ื•ื•ืขืจ ื˜ื•ื˜ ืžื™ื˜ ื“ืขื ื˜ืขืงืข ื•ื•ื™ื™ื˜ืขืจ, ืžืขืŸ ืงืขืŸ ืขืก ืื•ื™ืกืžืขืงืŸ, ืžืขืŸ ืงืขืŸ ืขืก ื˜ื•ื™ืฉืŸ ื ืืžืขืŸ, ื˜ื•ื™ืฉืŸ ื“ืขื ื‘ืขืœ ื”ื‘ื™ืช, ืื“ืขืจ ืžืขืŸ ืงืขืŸ ืื•ื•ืขืงื ืขืžืขืŸ ื“ื™ ืจืขื›ื˜ ืฆื• ืœื™ื™ืขื ืขืŸ ืื•ืŸ ืฉืจื™ื™ื‘ืŸ, ืื™ืš ื•ื•ืขืœ ื ืืš ื”ืื‘ืŸ ืฆื•ื˜ืจื™ื˜ ืฆื• ืื™ื, ื•ื•ื™ื™ืœ ืื™ืŸ ื“ืขืจ ืฆื™ื™ื˜ ืคื•ืŸ ืขืคืŸ ื“ื™ ืคื™ื™ืœ, ื”ืื‘ ืื™ืš ื’ืขื”ืื˜ ื“ื™ ืจืขื›ื˜ ืขืก ืฆื• ืœื™ื™ื ืขืŸ ืื•ืŸ/ืื“ืขืจ ืฉืจื™ื™ื‘ืŸ ืื•ืŸ ืื™ืš ื”ืื‘ ื’ืขืœื•ื ื’ืŸ ืื ืฆื•ื”ื™ื™ื‘ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืื™ื, ื“ืืก ืžื™ื™ื ื˜ ืื– ืื™ืš ืžื•ื– ืื–ื•ื™ ื•ื•ื™ื™ื˜ืขืจ ื˜ืืŸ.

ืื™ืŸ ืœื™ื ื•ืงืก, ื“ื™ ืœื™ื‘ืง ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืึธืคึผืขื ืก 3 ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ ื˜ืขืงืขืก ืคึฟืึทืจ ื™ืขื“ืขืจ ืคืœื™ืกื ื“ื™ืง ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ (ืคึผืจืึธืกืขืก), ื’ืขืฆื™ื™ืœื˜ 0,1,2. ืžืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื•ื™ืฃ ื“ื™ ืœื™ื ืงืก ืžืขื ื˜ืฉ ืกื˜ื“ื™ืึธ ะธ ืžืขื ื˜ืฉ ืกื˜ื•ื“ืึธื•ื˜

  • ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ 0 ืื™ื– ื’ืขืจื•ืคืŸ STDIN ืื•ืŸ ืื™ื– ืคืืจื‘ื•ื ื“ืŸ ืžื™ื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘
  • ื˜ืขืงืข ื“ืขืกืงืจื™ืคึผื˜ืึธืจ 1 ืื™ื– ื’ืขืจื•ืคืŸ STDOUT ืื•ืŸ ืื™ื– ื’ืขื ื™ืฆื˜ ื“ื•ืจืš ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• ืจืขื–ื•ืœื˜ืึทื˜ ื“ืึทื˜ืŸ, ืึทื–ืึท ื•ื•ื™ ื“ืจื•ืง ืงืึทืžืึทื ื“ื–
  • ื˜ืขืงืข ื“ืขืกืงืจื™ืคึผื˜ืึธืจ 2 ืื™ื– ื’ืขืจื•ืคืŸ STDERR ืื•ืŸ ืื™ื– ื’ืขื ื™ืฆื˜ ื“ื•ืจืš ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• ืจืขื–ื•ืœื˜ืึทื˜ ื˜ืขื•ืช ืึทืจื˜ื™ืงืœืขืŸ.

ืื•ื™ื‘ ืื™ืŸ ื“ื™ื™ืŸ ืคึผืจืึธื’ืจืึทื ืื™ืจ ืขืคืขื ืขืŸ ืงื™ื™ืŸ ื˜ืขืงืข ืคึฟืึทืจ ืœื™ื™ืขื ืขืŸ ืึธื“ืขืจ ืฉืจื™ื™ื‘ืŸ, ืจื•ื‘ึฟ ืžืกืชึผืžื ืื™ืจ ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืคืจื™ื™ ืฉื™ื™ึทืŸ ืื•ืŸ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ื•ืžืขืจ 3.

ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื•ื•ื™ื•ื“ ืคึฟืึทืจ ืงื™ื™ืŸ ืคึผืจืึธืฆืขืก ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืกืŸ ื–ื™ื™ึทืŸ PID.

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืœืึธื–ืŸ ืื•ื ื“ื– ืขืคืขื ืขืŸ ื“ื™ ื‘ืึทืฉ ืงืึทื ืกืึธื•ืœ ืื•ืŸ ืงื•ืง ืื™ืŸ ื“ื™ 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 ืคึฟืึทืจ ื“ื™ ืฆื•ื•ืขืงืŸ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ; ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืขืคืŸ ืคึฟืึทืจ ื–ื™ื™ึทืŸ ื‘ืื“ืขืจืคืขื ื™ืฉืŸ ื“ื•ืจืš ื‘ืึทืฉ ื–ื™ืš, ืื•ืŸ ื ื™ืฉื˜ ื“ื•ืจืš ื“ื™ ืœื™ื ื’ืงื˜ ื‘ื™ื‘ืœื™ืึธื˜ืขืง.

ืื™ืฆื˜ ืึทืœืข 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.

ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืงื™ื ื“ ื‘ืึทืฉ ืคึผืจืึธืฆืขืก ืžื™ื˜ PID 9004, ื“ื™ ืกื™ืกื˜ืขื ืจื•ืคืŸ dup2, ืขื ื“ืขืจื•ื ื’ืขืŸ ืื•ื ื“ื–ืขืจ STDOUT ื˜ืขืงืข ื“ืขืกืงืจื™ืคึผื˜ืึธืจ ื ื•ืžืขืจ 1 ืฆื• ืึท ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ ื•ื•ืึธืก ื•ื•ื™ื™ื–ื˜ ืฆื• ืจืขืจ, ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ ืขืก ืื™ื– ื ื•ืžืขืจ 3. ืึทื–ื•ื™ ืึทืœืฅ ื•ื•ืึธืก ื“ืขืจ ืขืจืฉื˜ืขืจ ืงื™ื ื“ ืคึผืจืึธืฆืขืก ืžื™ื˜ PID 9004 ืฉืจื™ื™ื‘ื˜ ืฆื• STDOUT ื•ื•ืขื˜ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืขื ื“ื™ืงืŸ ืื™ืŸ ื“ื™ ืจืขืจ ื‘ืึทืคืขืจ.

ืื™ืŸ ื“ื™ ืฆื•ื•ื™ื™ื˜ืข ืงื™ื ื“ ืคึผืจืึธืฆืขืก ืžื™ื˜ PID 9005, ื‘ืึทืฉ ื ื™ืฆื˜ ื“ื•ืคึผ2 ืฆื• ื˜ื•ื™ืฉืŸ ื“ื™ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ STDIN ื ื•ืžืขืจ 0. ืื™ืฆื˜ ืึทืœืฅ ื•ื•ืึธืก ืื•ื ื“ื–ืขืจ ืฆื•ื•ื™ื™ื˜ืข ื‘ืึทืฉ ืžื™ื˜ PID 9005 ื•ื•ืขื˜ ืœื™ื™ืขื ืขืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœื™ื™ืขื ืขืŸ ืคื•ืŸ ื“ื™ ืจืขืจ.

ื ืึธืš ื“ืขื, ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจืก ื’ืขืฆื™ื™ืœื˜ 3 ืื•ืŸ 4 ื–ืขื ืขืŸ ืื•ื™ืš ืคึฟืึทืจืžืึทื›ื˜ ืื™ืŸ ื“ื™ ืงื™ื ื“ ืคึผืจืึทืกืขืกืึทื–, ื•ื•ื™ื™ึทืœ ื–ื™ื™ ื–ืขื ืขืŸ ื ื™ื˜ ืžืขืจ ื’ืขื ื™ืฆื˜.

ืื™ืš ื“ื™ืœื™ื‘ืจืึทื˜ืœื™ ืื™ื’ื ืึธืจื™ืจืŸ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ 255; ืขืก ืื™ื– ื’ืขื ื™ืฆื˜ ืคึฟืึทืจ ื™ื ืขืจืœืขืš ืฆื•ื•ืขืงืŸ ื“ื•ืจืš ื‘ืึทืฉ ื–ื™ืš ืื•ืŸ ื•ื•ืขื˜ ืื•ื™ืš ื–ื™ื™ืŸ ืคืืจืžืื›ื˜ ืื™ืŸ ืงื™ื ื“ ืคึผืจืึทืกืขืกืึทื–.

ื“ืขืจื ืึธืš, ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืงื™ื ื“ ืคึผืจืึธืฆืขืก ืžื™ื˜ PID 9004, ื‘ืึทืฉ ืกื˜ืึทืจืฅ ื ื™ืฆืŸ ืึท ืกื™ืกื˜ืขื ืจื•ืคืŸ exec ื“ื™ ืขืงืกืขืงื•ื˜ืึทื‘ืœืข ื˜ืขืงืข ื•ื•ืึธืก ืžื™ืจ ืกืคึผืขืกื™ืคื™ืขื“ ืื•ื™ืฃ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื”, ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ ืขืก ืื™ื– /usr/bin/cat.

ืื™ืŸ ื“ื™ ืจื’ืข ืงื™ื ื“ ืคึผืจืึธืฆืขืก ืžื™ื˜ PID 9005, ื‘ืึทืฉ ืœื•ื™ืคื˜ ื“ื™ ืจื’ืข ืขืงืกืขืงื•ื˜ืึทื‘ืœืข ืžื™ืจ ืกืคึผืขืกื™ืคื™ืขื“, ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ /usr/bin/sleep.

ื“ื™ ืขืงืกืขืง ืกื™ืกื˜ืขื ืจื•ืคืŸ ื˜ื•ื˜ ื ื™ืฉื˜ ืคืึทืจืžืึทื›ืŸ ื˜ืขืงืข ื›ืึทื ื“ืึทืœื– ืกื™ื™ึทื“ืŸ ื–ื™ื™ ื–ืขื ืขืŸ ื’ืขืขืคื ื˜ ืžื™ื˜ ื“ื™ O_CLOEXEC ืคืึธืŸ ืื™ืŸ ื“ืขืจ ืฆื™ื™ื˜ ื•ื•ืขืŸ ื“ื™ ืขืคืขื ืขืŸ ืจื•ืคืŸ ืื™ื– ื’ืขืžืื›ื˜. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ื ืึธืš ืœืึธื ื˜ืฉื™ื ื’ ื“ื™ ืขืงืกืขืงื•ื˜ืึทื‘ืœืข ื˜ืขืงืขืก, ืึทืœืข ืงืจืึทื ื˜ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืจืื˜ืขื•ื•ืขื˜.

ืงื•ืง ืื™ืŸ ื“ื™ ืงืึทื ืกืึธื•ืœ:

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

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ื“ื™ ื™ื™ื ืฆื™ืง ื ื•ืžืขืจ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืจืขืจ ืื™ื– ื“ื™ ื–ืขืœื‘ืข ืื™ืŸ ื‘ื™ื™ื“ืข ืคึผืจืึทืกืขืกืึทื–. ืื–ื•ื™ ืžื™ืจ ื”ืึธื‘ืŸ ืึท ืงืฉืจ ืฆื•ื•ื™ืฉืŸ ืฆื•ื•ื™ื™ ืคืึทืจืฉื™ื“ืขื ืข ืคึผืจืึทืกืขืกืึทื– ืžื™ื˜ ื“ื™ ื–ืขืœื‘ืข ืคืึธื˜ืขืจ.

ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ื“ื™ ืกื™ืกื˜ืขื ืจื•ืคื˜ ืึทื– bash ื ื™ืฆื˜, ืื™ืš ื”ืขื›ืกื˜ ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืงืึทืžืึทื ื“ื– ื“ื•ืจืš ืกื˜ืจืึทืกืข ืื•ืŸ ื–ืขืŸ ื•ื•ืึธืก ืื™ื– ื’ืขืฉืขืขื ื™ืฉ ื™ื ืขื•ื•ื™ื™ื ื™ืง, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ื•ื•ื™ ื“ืึธืก:

strace -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:

ื˜ืฉืขืง ืžื™ื˜ ื“ื™ "ื•ื•" ืคืึธืŸ

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

ืื•ืŸ ืžื™ื˜ ื“ื™ "ืึท" ืคืึธืŸ

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

ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืึท ืฉื•ื™ืŸ ืคืœื™ืกื ื“ื™ืง ืคึผืจืึธืฆืขืก

ืึธืคื˜ ืคึผืจืึธื•ื’ืจืึทืžืขืจื–, ื•ื•ืขืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืื•ืŸ ื˜ืขืกื˜ื™ื ื’ ืžื’ื™ืœื”, ื ื•ืฆืŸ ื“ื™ื‘ื•ื’ืขืจื– (ืœืžืฉืœ GDB) ืึธื“ืขืจ ืคืึทืจืฉื™ื“ืŸ ืœืขื•ื•ืขืœืก ืคื•ืŸ ืœืึธื’ื™ื ื’ ืื™ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืœื™ื ื•ืงืก ื’ื™ื˜ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืึทืงื˜ืฉืึทื•ื•ืึทืœื™ ืฉืจื™ื™ึทื‘ืŸ ืื•ืŸ ื˜ื•ื™ืฉืŸ ืึท ืฉื•ื™ืŸ ืคืœื™ืกื ื“ื™ืง ืคึผืจืึธื’ืจืึทื, ืœืžืฉืœ, ื˜ื•ื™ืฉืŸ ื“ื™ ื•ื•ืึทืœื•ืขืก ืคื•ืŸ ื•ื•ืขืจื™ืึทื‘ืึทืœื–, ืฉื˜ืขืœืŸ ืึท ื‘ืจื™ื™ืงืคึผื•ื™ื ื˜, ืืื–"ื• ื•.

ืฆื•ืจื™ืง ืฆื• ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ืงืฉื™ื ื•ื•ืขื’ืŸ ื ื™ืฉื˜ ื’ืขื ื•ื’ ื“ื™ืกืง ืคึผืœืึทืฅ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึท ื˜ืขืงืข, ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืกื™ืžื•ืœื™ืจืŸ ื“ืขื ืคึผืจืึธื‘ืœืขื.

ืœืึธืžื™ืจ ืžืึทื›ืŸ ืึท ื˜ืขืงืข ืคึฟืึทืจ ืื•ื ื“ื–ืขืจ ืฆืขื˜ื™ื™ืœื•ื ื’, ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ืึธื ืงืœืึทืคึผืŸ ื•ื•ื™ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื“ื™ืกืง:

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

ืœืึธืžื™ืจ ืฉืึทืคึฟืŸ ืึท ื˜ืขืงืข ืกื™ืกื˜ืขื:

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

ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ื˜ืขืงืข ืกื™ืกื˜ืขื:

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

ืžื™ืจ ืฉืึทืคึฟืŸ ืึท ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ื˜ ืื•ื ื“ื–ืขืจ ื‘ืึทื–ื™ืฆืขืจ:

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

ืœืึธืžื™ืจ ืขืคึฟืขื ืขืŸ ื“ื™ ื˜ืขืงืข ืคึฟืึทืจ ืฉืจื™ื™ื‘ืŸ ื‘ืœื•ื™ื– ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคึผืจืึธื’ืจืึทื:

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

ืงืึทื˜ืขืจ

[user@localhost ]$ python openforwrite.py 

ืžื™ืจ ื•ื•ืึทืจื˜ืŸ ืึท ื‘ื™ืกืœ ืกืขืงื•ื ื“ืขืก

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

ืึทื–ื•ื™, ืžื™ืจ ื”ืึธื‘ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ. ืคึฟืจื™ื™ึท ืคึผืœืึทืฅ 0, 100% ืคืึทืจื ื•ืžืขืŸ.

ืžื™ืจ ื’ืขื“ืขื ืงืขืŸ ืึทื– ืœื•ื™ื˜ ื“ื™ ื‘ืื“ื™ื ื’ื•ื ื’ืขืŸ ืคื•ืŸ ื“ื™ ืึทืจื‘ืขื˜, ืžื™ืจ ื–ืขื ืขืŸ ื˜ืจื™ื™ื ื’ ืฆื• ืจืขืงืึธืจื“ื™ืจืŸ ื–ื™ื™ืขืจ ื•ื•ื™ื›ื˜ื™ืง ื“ืึทื˜ืŸ ื•ื•ืึธืก ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืคืึทืจืคืึทืœืŸ. ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึทืจืจื™ื›ื˜ืŸ ื“ื™ ื“ื™ื ืกื˜ ืึธืŸ ืจื™ืกื˜ืึทืจื˜ื™ื ื’ ื“ืขื ืคึผืจืึธืฆืขืก.

ื–ืืœ ืก ื–ืึธื’ืŸ ืžื™ืจ ื ืึธืš ื”ืึธื‘ืŸ ื“ื™ืกืง ืคึผืœืึทืฅ, ืึธื‘ืขืจ ืื™ืŸ ืึท ืึทื ื“ืขืจืฉ ืฆืขื˜ื™ื™ืœื•ื ื’, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ืŸ / ื”ื™ื™ื.

ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• "ืจื™ืคึผืจืึธื•ื’ืจืึทื ืื•ื™ืฃ ื“ื™ ืคืœื™ืขืŸ" ืื•ื ื“ื–ืขืจ ืงืึธื“.

ืœืึธืžื™ืจ ืงื•ืง ืื™ืŸ ื“ื™ PID ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืคึผืจืึธืฆืขืก, ื•ื•ืึธืก ื”ืื˜ ื’ืขื’ืขืกืŸ ืึทืœืข ื“ื™ ื“ื™ืกืง ืคึผืœืึทืฅ:

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

ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ืขื ืคึผืจืึธืฆืขืก ื“ื•ืจืš gdb

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

ื–ืืœ ืก ืงื•ืง ืื™ืŸ ื“ื™ ืขืคืขื ืขืŸ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจืก:

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

ืžื™ืจ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ ื ื•ืžืขืจ 3, ื•ื•ืึธืก ืื™ื ื˜ืขืจืขืก ืื•ื ื“ื–

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

ื”ืืœื˜ืŸ ืื™ืŸ ื–ื™ื ืขืŸ ื•ื•ืึธืก ืกื™ืกื˜ืขื ืจื•ืคืŸ ืคึผื™ื˜ื”ืึธืŸ ืžืื›ื˜ (ื–ืขืŸ ืื•ื™ื‘ืŸ ื•ื•ื• ืžื™ืจ ื’ืขืœืืคืŸ ืกื˜ืจืึทืกืข ืื•ืŸ ื’ืขืคึฟื•ื ืขืŸ ื“ืขื ืขืคืขื ืขืŸ ืจื•ืคืŸ), ื•ื•ืขืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืื•ื ื“ื–ืขืจ ืงืึธื“ ืฆื• ืขืคืขื ืขืŸ ืึท ื˜ืขืงืข, ืžื™ืจ ื˜ืึธืŸ ื“ื™ ื–ืขืœื‘ืข ื–ื™ืš ืื•ื™ืฃ ื‘ื™ื›ืึทืฃ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืคึผืจืึธืฆืขืก, ืึธื‘ืขืจ ืžื™ืจ ื“ืึทืจืคึฟืŸ ื“ื™ O_WRONLY|O_CREAT| O_TRUNC ื‘ื™ื˜ืŸ ืคืึทืจื‘ื™ื™ึทื˜ืŸ ืžื™ื˜ ืึท ื ื•ืžืขืจื™ืง ื•ื•ืขืจื˜. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืœืžืฉืœ, ืขืคึฟืขื ืขืŸ ื“ื™ ืงืขืจืŸ ืงื•ื•ืืœืŸ ื“ืึธ ืื•ืŸ ืงื•ืง ืื™ืŸ ื•ื•ืึธืก ืคืœืึทื’ืก ื–ืขื ืขืŸ ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ื•ื•ืึธืก

# ื“ืขืคื™ื ื™ืจืŸ O_WRONLY 00000001
# ื“ืขืคื™ื ื™ืจืŸ O_CREAT 00000100
# ื“ืขืคื™ื ื™ืจืŸ O_TRUNC 00001000

ืžื™ืจ ืคืึทืจื‘ื™ื ื“ืŸ ืึทืœืข ื“ื™ ื•ื•ืึทืœื•ืขืก ืื™ืŸ ืื™ื™ืŸ, ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ 00001101

ืžื™ืจ ืœื•ื™ืคืŸ ืื•ื ื“ื–ืขืจ ืจื•ืคืŸ ืคื•ืŸ ื’ื“ื‘

(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

ืžื™ืจ ื’ืขื“ืขื ืงืขืŸ ื“ืขื ื‘ื™ื™ืฉืคึผื™ืœ ืžื™ื˜ ืจืขืจ - ื•ื•ื™ ื‘ืึทืฉ ืขื ื“ืขืจื•ื ื’ืขืŸ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจืก, ืื•ืŸ ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขืœืขืจื ื˜ ื“ื™ ื“ื•ืคึผ2 ืกื™ืกื˜ืขื ืจื•ืคืŸ.

ืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืคืึทืจื‘ื™ื™ึทื˜ืŸ ืื™ื™ืŸ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ ืžื™ื˜ ืื ื“ืขืจืŸ

(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) 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

ืื™ืฆื˜ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืขืคืขืก ื™ื™ึทื ื•ื•ื™ืงืœืขืŸ ืึทืœืข ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืึธืก ื’ื™ื™ื˜ ืื™ืŸ ื“ืขื ืจืขืจ ืฆื• ืืŸ ืื ื“ืขืจ ืกืขืจื•ื•ืขืจ ื“ื•ืจืš ื“ื™ ื ืขืฅ; ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื ืขื˜ืงืึทื˜ ืื™ื– ืคึผืึทืกื™ืง ืคึฟืึทืจ ื“ืขื.

ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ ื•ื•ื™ื™ึทื˜-server.example.com ืžื™ืจ ืœื•ื™ืคืŸ

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

ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ืคึผืจืึธื‘ืœืขืžืึทื˜ื™ืง ืกืขืจื•ื•ืขืจ ืžื™ืจ ืงืึทื˜ืขืจ ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื•ื•ืึธืงื–ืึทืœ

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

ืื™ืฆื˜ ืึทืœืข ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืึธืก ืขื ื“ืก ืื™ืŸ ื“ื™ ืจืขืจ ื•ื•ืขื˜ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื’ื™ื™ืŸ ืฆื• ืกื˜ื“ื™ืŸ ืื™ืŸ ื ืขื˜ืงืึทื˜, ื•ื•ืึธืก ื•ื•ืขื˜ ืฉื™ืงืŸ ืขืก ืฆื• ื“ื™ ื ืขืฅ ืื•ื™ืฃ ืคึผืึธืจื˜ 7777.

ื›ืœ ืžื™ืจ ื”ืึธื‘ืŸ ืฆื• ื˜ืึธืŸ ืื™ื– ืึธื ื”ื™ื™ื‘ืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืื•ื ื“ื–ืขืจ ื“ืึทื˜ืŸ ืื™ืŸ ื“ืขื ื’ืขื”ื™ื™ืกืŸ ืจืขืจ.

ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคืœื™ืกื ื“ื™ืง:

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

ืคื•ืŸ ืึทืœืข ืคืœืึทื’ืก, ืžื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ O_WRONLY ื–ื™ื ื˜ ื“ื™ ื˜ืขืงืข ืื™ื– ืฉื•ื™ืŸ ื™ื’ื–ื™ืกืฅ ืื•ืŸ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ื•ื™ืกืžืขืงืŸ ืขืก

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

    Inferior 1 [process 5946] will be detached.

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

ืงืึธื ื˜ืจืึธืœื™ืจื•ื ื’ ื“ื™ ื•ื•ื™ื™ึทื˜ ืกืขืจื•ื•ืขืจ remote-server.example.com

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

ื“ื™ ื“ืึทื˜ืŸ ืงื•ืžืขืŸ, ืžื™ืจ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื ืกืขืจื•ื•ืขืจ

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

ื“ื™ ื“ืึทื˜ืŸ ืื™ื– ื’ืขืจืื˜ืขื•ื•ืขื˜, ื“ื™ ืคึผืจืึธื‘ืœืขื ืื™ื– ืกืึทืœื•ื•ื“.

ืื™ืš ื ื•ืฆืŸ ื“ื™ ื’ืขืœืขื’ื ื”ื™ื™ื˜ ืฆื• ื–ืึธื’ืŸ ื”ืขืœื ืฆื• ืžื™ื™ืŸ ื—ื‘ืจื™ื ืคื•ืŸ ื“ืขื’ื™ืจืึธ.
ื”ืขืจืŸ ืฆื• Radio T ืคึผืึธื“ืงืึทืกืฅ.

ื’ื•ื˜ ืฆื• ืึทืœืข.

ื•ื•ื™ ืœืขืงืฆื™ืขืก, ืื™ืš ืคึฟืึธืจืฉืœืึธื’ืŸ ืื™ืจ ื˜ืจืึทื›ื˜ืŸ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื™ืŸ ื“ืขื ืคึผืจืึธืฆืขืก ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจืก ืงืึทืฅ ืื•ืŸ ืฉืœืึธืคืŸ ืื•ื™ื‘ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ:

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

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’