ื“ื™ื‘ืึทื’ื™ื ื’ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžื™ื˜ ืกื˜ืจืึทืกืข

ื“ื™ื‘ืึทื’ื™ื ื’ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžื™ื˜ ืกื˜ืจืึทืกืข

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

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

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

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

ื•ื•ืึธืก ืื™ื– ืกื˜ืจืึทืกืข?

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

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

$ strace echo Hello
...Snip lots of stuff...
write(1, "Hellon", 6)                  = 6
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

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

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

ื“ื™ื‘ืึทื’ื™ื ื’ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžื™ื˜ ืกื˜ืจืึทืกืข

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

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

ื•ื•ืขืŸ ืฆื• ื ื•ืฆืŸ ืกื˜ืจืึทืกืข?

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

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

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

ืคึผืฉื•ื˜ ื“ื™ื‘ืึทื’ื™ื ื’ ื‘ื™ื™ึทืฉืคึผื™ืœ

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

$ foo
Error opening configuration file: No such file or directory

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

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

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

$ strace -o /tmp/trace foo
Error opening configuration file: No such file or directory
$ cat /tmp/trace
execve("foo", ["foo"], 0x7ffce98dc010 /* 16 vars */) = 0
brk(NULL)                               = 0x56363b3fb000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=25186, ...}) = 0
mmap(NULL, 25186, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2f12cf1000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF2113 3 > 1 260A2 "..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2f12cef000
mmap(NULL, 1837056, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2f12b2e000
mprotect(0x7f2f12b50000, 1658880, PROT_NONE) = 0
mmap(0x7f2f12b50000, 1343488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f2f12b50000
mmap(0x7f2f12c98000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16a000) = 0x7f2f12c98000
mmap(0x7f2f12ce5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7f2f12ce5000
mmap(0x7f2f12ceb000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2f12ceb000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7f2f12cf0500) = 0
mprotect(0x7f2f12ce5000, 16384, PROT_READ) = 0
mprotect(0x56363b08b000, 4096, PROT_READ) = 0
mprotect(0x7f2f12d1f000, 4096, PROT_READ) = 0
munmap(0x7f2f12cf1000, 25186)           = 0
openat(AT_FDCWD, "/etc/foo/config.json", O_RDONLY) = -1 ENOENT (No such file or directory)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
brk(NULL)                               = 0x56363b3fb000
brk(0x56363b41c000)                     = 0x56363b41c000
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x8), ...}) = 0
write(3, "Error opening configuration file"..., 60) = 60
close(3)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

ื‘ืขืขืจืขืš ื“ืขืจ ืขืจืฉื˜ืขืจ ื‘ืœืึทื˜ ืคื•ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืฉื˜ืจืขื ื’ - ื“ืึธืก ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” ืฆื•ื’ืจื™ื™ื˜ื•ื ื’ ืคึฟืึทืจ ืงืึทื˜ืขืจ. (ืคื™ืœืข ืจื•ืคืŸ ืžืžืึทืคึผ, ืžืคึผืคึผืจืึธื˜ืขืงื˜, ืคืขื“ืขืจ ืคึฟืึทืจ ื–ืื›ืŸ ื•ื•ื™ ื“ื™ื˜ืขืงื˜ื™ื ื’ ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” ื–ื›ึผืจื•ืŸ ืื•ืŸ ื•ื•ื™ื™ึทื–ื ื“ื™ืง ื“ื™ื ืึทืžื™ืฉ ืœื™ื™ื‘ืจืขืจื™ื–.) ืึทืงื˜ื•ืึทืœืœื™, ื‘ืขืฉืึทืก ื“ื™ื‘ืึทื’ื™ื ื’ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืฉื˜ืจืขื ื’ ืขืก ืื™ื– ื‘ืขืกืขืจ ืฆื• ืœื™ื™ืขื ืขืŸ ืคื•ืŸ ื“ื™ ืกื•ืฃ. ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึท ืึทืจื•ื™ืกืจื•ืคืŸ ืื•ื ื˜ืŸ ืฉืจื™ื™ึทื‘ืŸ, ื•ื•ืึธืก ื“ื™ืกืคึผืœื™ื™ื– ืึท ื˜ืขื•ืช ืึธื ื–ืึธื’. ืžื™ืจ ืงื•ืงืŸ ืื•ื™ื‘ืŸ ืื•ืŸ ื–ืขืŸ ื“ื™ ืขืจืฉื˜ืขืจ ื˜ืขื•ืช ืกื™ืกื˜ืขื ืจื•ืคืŸ - ื“ื™ ืจื•ืคืŸ openat, ื•ื•ืึธืก ื•ื•ืืจืคื˜ ืขืจ ืึท ื˜ืขื•ืช ENOENT ("ื˜ืขืงืข ืึธื“ืขืจ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื ื™ื˜ ื’ืขืคึฟื•ื ืขืŸ") ื˜ืจื™ื™ื ื’ ืฆื• ืขืคึฟืขื ืขืŸ /etc/foo/config.json. ื“ืึธืก ืื™ื– ื•ื•ื• ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ื–ืึธืœ ื–ื™ื™ืŸ.

ื“ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืœื•ื™ื– ืึท ื‘ื™ื™ืฉืคึผื™ืœ, ืึธื‘ืขืจ ืื™ืš ื•ื•ืึธืœื˜ ื–ืึธื’ืŸ 90% ืคื•ืŸ ื“ื™ ืฆื™ื™ื˜ ื•ื•ืึธืก ืื™ืš ื ื•ืฆืŸ ืฉื˜ืจืขื ื’, ืขืก ืื™ื– ื’ืึธืจื ื™ืฉื˜ ืคื™ืœ ืžืขืจ ืฉื•ื•ืขืจ ืฆื• ื˜ืึธืŸ ื•ื•ื™ ื“ืขื. ื•ื ื˜ืขืจ ืื™ื– ืึท ื’ืึทื ืฅ ืฉืจื™ื˜-ื“ื•ืจืš-ืฉืจื™ื˜ ื“ื™ื‘ืึทื’ื™ื ื’ ืคื™ืจืขืจ:

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

ืขืก ืื™ื– ื–ื™ื™ืขืจ ืžืกืชึผืžื ืึทื– ื“ื™ ืกื™ืกื˜ืขื ืจื•ืคืŸ ืื™ืŸ ืฉืจื™ื˜ 4 ื•ื•ืขื˜ ืึทื ื˜ื“ืขืงืŸ ื•ื•ืึธืก ืื™ื– ืคืึทืœืฉ.

ืขืฆื•ืช

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

ืžืขื ื˜ืฉ ืื™ื– ื“ื™ื™ืŸ ืคืจื™ื™ึทื ื“

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

ืงืœื™ื™ืŸ ืจื™ื™ื–ืข: ืžืขื ื˜ืฉ 2 ื’ืึธืคึผืœ ื•ื•ื™ื™ื–ื˜ ืžื™ืจ ื“ื™ ื‘ืœืึทื˜ ืคึฟืึทืจ ื“ื™ ืฉืึธืœ ื’ืึธืคึผืœ () ะฒ GNU libc, ื•ื•ืึธืก, ืขืก ื˜ื•ืจื ืก ืื•ื™ืก, ืื™ื– ื™ืžืคึผืœืึทืžืขื ืึทื“ ื“ื•ืจืš ืคืึทืš ืงืœืึธื•ืŸ (). ืจื•ืคืŸ ืกืขืžืึทื ื˜ื™ืงืก ื’ืึธืคึผืœ ื‘ืœื™ื™ื‘ื˜ ื“ื™ ื–ืขืœื‘ืข ืื•ื™ื‘ ืื™ืจ ืฉืจื™ื™ึทื‘ืŸ ืึท ืคึผืจืึธื’ืจืึทื ื ื™ืฆืŸ ื’ืึธืคึผืœ (), ืื•ืŸ ืœื•ื™ืคืŸ ืึท ืฉืคึผื•ืจ - ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ื’ืขืคึฟื™ื ืขืŸ ืงื™ื™ืŸ ืจื•ืคื˜ ื’ืึธืคึผืœ, ืื ืฉื˜ืื˜ ื–ื™ื™ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืœืึธื•ืŸ (). ืึทื–ืึท ืจืึทืงืขืก ื ืึธืจ ืฆืขืžื™ืฉืŸ ืื™ืจ ืื•ื™ื‘ ืื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืงืึทืžืคึผืขืจื™ื ื’ ื“ื™ ืžืงื•ืจ ืžื™ื˜ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืฉื˜ืจืขื ื’.

ื ื™ืฆืŸ -o ืฆื• ืจืึทื˜ืขื•ื•ืขืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• ืึท ื˜ืขืงืข

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

ื ื™ืฆืŸ -s ืฆื• ื–ืขืŸ ืžืขืจ ืึทืจื’ื•ืžืขื ื˜ ื“ืึทื˜ืŸ

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

-ื™ ืžืื›ื˜ ืขืก ื’ืจื™ื ื’ืขืจ ืฆื• ืฉืคึผื•ืจ ื˜ืขืงืขืก, ืกืึทืงืึทืฅ, ืขื˜ืง.

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

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

ืฆื•ื˜ืฉืขืคึผืขืŸ ืฆื• ืึท ืฉื•ื™ืŸ ืคืœื™ืกื ื“ื™ืง ืคึผืจืึธืฆืขืก ืžื™ื˜ -p**

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

$ strace -p 1337
...system call trace output...

ืื™ืจ ืงืขืŸ ื“ืึทืจืคึฟืŸ ื•ื•ืึธืจืฆืœ ืจืขื›ื˜.

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

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

ืื•ื™ื‘ ืื™ืจ ื˜ืจืึทื›ื˜ืŸ ื“ื™ ื˜ืขื•ืช ืื™ื– ืื™ืŸ ืึท ืงื™ื ื“ ืคึผืจืึธืฆืขืก, ื ื•ืฆืŸ ื“ื™ ื“ืขืจืงืœืขืจื•ื ื’ -f, ื“ืึธืก ื•ื•ืขื˜ ื’ืขื‘ืŸ ื–ื™ื™ืŸ ื˜ืจื™ื™ืกื™ื ื’. ื“ื™ ื“ืึทื•ื ืกื™ื™ื“ ืฆื• ื“ืขื ืื™ื– ืึทื– ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขื˜ ืฆืขืžื™ืฉืŸ ืื™ืจ ืืคื™ืœื• ืžืขืจ. ื•ื•ืขืŸ ืฉื˜ืจืขื ื’ ื˜ืจืึทืกืขืก ืื™ื™ืŸ ืคึผืจืึธืฆืขืก ืึธื“ืขืจ ืื™ื™ืŸ ืคืึธื“ืขื, ืขืก ื•ื•ื™ื™ื–ื˜ ืึท ืื™ื™ืŸ ื˜ื™ื™ึทืš ืคื•ืŸ ืจื•ืคืŸ ื’ืขืฉืขืขื ื™ืฉืŸ. ื•ื•ืขืŸ ืขืก ื˜ืจืึทืกืขืก ืงื™ื™ืคืœ ืคึผืจืึทืกืขืกืึทื– ืื™ืŸ ืึทืžืึธืœ, ืื™ืจ ืงืขืŸ ื–ืขืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ืึท ืจื•ืคืŸ ื™ื ื˜ืขืจืึทืคึผื˜ื™ื“ ื“ื•ืจืš ืึท ืึธื ื–ืึธื’ , ื“ืขืžืึธืœื˜ - ืึท ื‘ื™ื ื˜ืœ ืคื•ืŸ ืจื•ืคื˜ ืคึฟืึทืจ ืื ื“ืขืจืข ื“ื•ืจื›ืคื™ืจื•ื ื’ ืฆื•ื•ื™ื™ื’ืŸ, ืื•ืŸ ื‘ืœื•ื™ื– ื“ืขืžืึธืœื˜ - ื“ืขืจ ืกื•ืฃ ืคื•ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืื™ื™ื ืขืจ <...ืคืึธืึธืงืึทืœืœ ืจื™ื–ื•ืžื“>. ืึธื“ืขืจ ืฉืคึผืึทืœื˜ืŸ ืึทืœืข ืฉืคึผื•ืจ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื˜ืขืงืขืก, ืื•ื™ืš ื ื™ืฆืŸ ื“ื™ ืึธืคึผืขืจืึทื˜ืึธืจ -ืคืค (ืคืจื˜ื™ื ืื™ืŸ ืคื™ืจืขืจืฉืึทืคื˜ ืื•ื™ืฃ ืฉื˜ืจืขื ื’).

ืคื™ืœื˜ืขืจ ื˜ืจืึทืกืขืก ื ื™ืฆืŸ -E

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ, ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืฉืคึผื•ืจ ืื™ื– ืึท ืคืึทืงื˜ื™ืฉ ื”ื•ื™ืคืŸ ืคื•ืŸ ืึทืœืข ืžืขื’ืœืขืš ืกื™ืกื˜ืขื ืจื•ืคื˜. ืคืึธืŸ -e ืื™ืจ ืงืขื ืขืŸ ืคื™ืœื˜ืขืจ ื“ื™ ืฉืคึผื•ืจ (ื–ืขืŸ ืคื™ืจืขืจืฉืึทืคื˜ ืื•ื™ืฃ ืฉื˜ืจืขื ื’). ื“ืขืจ ื”ื•ื™ืคึผื˜ ืžื™ื™ึทืœืข ืื™ื– ืึทื– ืขืก ืื™ื– ืคืึทืกื˜ืขืจ ืฆื• ืœื•ื™ืคืŸ ืึท ืคื™ืœื˜ืขืจื“ ืฉืคึผื•ืจ ื•ื•ื™ ืฆื• ื˜ืึธืŸ ืึท ืคื•ืœ ืฉืคึผื•ืจ ืื•ืŸ ื“ืขืžืึธืœื˜ grep`ื‘ื™ื™ึท. ืฆื• ื–ื™ื™ืŸ ืขืจืœืขืš, ืื™ืš ื›ึผืžืขื˜ ืฉื˜ืขื ื“ื™ืง ื˜ืึธืŸ ื ื™ื˜ ื–ืึธืจื’ืŸ.

ื ื™ื˜ ืึทืœืข ืžื™ืกื˜ื™ื™ืงืก ื–ืขื ืขืŸ ืฉืœืขื›ื˜

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

$ strace sh -c uname
...
stat("/home/user/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/bin/uname", {st_mode=S_IFREG|0755, st_size=39584, ...}) = 0
...

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

C ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ื˜ื•ื˜ืึธืจื™ืึทืœื– ืงืขื ืขืŸ ื”ืขืœืคึฟืŸ ืื™ืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืกื™ืกื˜ืขื ืจื•ืคื˜.

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

ื ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ื“ื™ื‘ืึทื’ื™ื ื’ ื‘ื™ื™ึทืฉืคึผื™ืœ

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

bcron - ืึทืจื‘ืขื˜ ืคึผืจืึทืกืขืกื™ื ื’ ืกืงืขื“ื–ืฉื•ืœืขืจ, ืืŸ ืื ื“ืขืจ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ * ื ื™ืงืก ื“ื™ื™ืžืึทืŸ ืงืจืึทืŸ. ืขืก ืื™ื– ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ, ืึธื‘ืขืจ ื•ื•ืขืŸ ืขืžืขืฆืขืจ ืคืจื•ื•ื•ื˜ ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ื“ืขื ืคึผืœืึทืŸ, ื“ืึธืก ืื™ื– ื•ื•ืึธืก ื›ืึทืคึผืึทื ื–:

# crontab -e -u logs
bcrontab: Fatal: Could not create temporary file

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

# strace -o /tmp/trace crontab -e -u logs
bcrontab: Fatal: Could not create temporary file
# cat /tmp/trace
...
openat(AT_FDCWD, "bcrontab.14779.1573691864.847933", O_RDONLY) = 3
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
read(3, "#Ansible: logsaggn20 14 * * * lo"..., 8192) = 150
read(3, "", 8192)                       = 0
munmap(0x7f82049b4000, 8192)            = 0
close(3)                                = 0
socket(AF_UNIX, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/bcron-spool"}, 110) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
write(3, "156:Slogs #Ansible: logsaggn20 1"..., 161) = 161
read(3, "32:ZCould not create temporary f"..., 8192) = 36
munmap(0x7f82049b4000, 8192)            = 0
close(3)                                = 0
write(2, "bcrontab: Fatal: Could not creat"..., 49) = 49
unlink("bcrontab.14779.1573691864.847933") = 0
exit_group(111)                         = ?
+++ exited with 111 +++

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

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

ื“ืขืจ ืžืงื•ืจ ืคื•ืŸ ืึท ื˜ืขืงืข ื“ืขืกืงืจื™ืคึผื˜ืึธืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ืคื™ืœืข ืกื™ืกื˜ืขื ืจื•ืคื˜ (ืขืก ืึทืœืข ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื•ื•ืึธืก ื“ื™ ื“ืขืกืงืจื™ืคึผื˜ืึธืจ ืื™ื– ืคึฟืึทืจ - ืึท ืงืึทื ืกืึธื•ืœ, ืึท ื ืขืฅ ื›ืึธืœืขืœ, ื“ื™ ื˜ืขืงืข ื–ื™ืš ืึธื“ืขืจ ืขืคึผืขืก ืึทื ื“ืขืจืฉ), ืึธื‘ืขืจ ื•ื•ื™ ืขืก ืงืขืŸ, ืžื™ืจ ืงื•ืงืŸ ืคึฟืึทืจ ืจื•ืคื˜ ื“ื•ืจืš ืฆื•ืจื™ืงืงื•ืžืขืŸ 3 (ื“"ื” ืžื™ืจ ืงื•ืงืŸ ืคึฟืึทืจ "= 3" ืื™ืŸ ื“ื™ ื˜ืจื™ื™ืกื™ื ื’ ืจืขื–ื•ืœื˜ืึทื˜ืŸ). ืื™ืŸ ื“ืขื ืจืขื–ื•ืœื˜ืึทื˜ ืขืก ื–ืขื ืขืŸ 2 ืคื•ืŸ ื–ื™ื™: openat ืื™ืŸ ื“ืขืจ ื–ื™ื™ืขืจ ืฉืคึผื™ืฅ ืื•ืŸ ื›ืึธืœืขืœ ืื™ื ืžื™ื˜ืŸ. openat ืขืคืขื ืขืŸ ื“ื™ ื˜ืขืงืข ืึธื‘ืขืจ ื ืึธืขื ื˜(3) ื•ื•ืขื˜ ื“ืขืžืึธืœื˜ ื•ื•ื™ื™ึทื–ืŸ ืึทื– ืขืก ืงืœืึธื•ื–ื™ื– ื•ื•ื™ื“ืขืจ. (ื’ืจื™ื™ืก: ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ื•ื–ื“ ื•ื•ืขืŸ ื–ื™ื™ ื–ืขื ืขืŸ ื’ืขืขืคื ื˜ ืื•ืŸ ืคืืจืžืื›ื˜). ืจื•ืคืŸ ื›ืึธืœืขืœ () ืคึผืึทืกื™ืง ื•ื•ื™ื™ึทืœ ืขืก ืื™ื– ื“ื™ ืœืขืฆื˜ืข ืคืจื™ืขืจ ืœื™ื™ืขื ืขืŸ (), ืื•ืŸ ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืึทื– bcrontab ืึทืจื‘ืขื˜ ืžื™ื˜ ืขืคึผืขืก ื“ื•ืจืš ืึท ื›ืึธืœืขืœ. ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืฉื•ืจื” ื•ื•ื™ื™ื–ื˜ ืึทื– ื“ืขืจ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ ืื™ื– ืคืืจื‘ื•ื ื“ืŸ ืžื™ื˜ ื™ื•ื ื™ืงืก ืคืขืœื“ ื›ืึธืœืขืœ ืื•ื™ืฃ ื“ื™ ื•ื•ืขื’ /var/run/bcron-spool.

ืึทื–ื•ื™, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ื™ื•ื ื™ืงืก ื›ืึธืœืขืœ ืื•ื™ืฃ ื“ื™ ืื ื“ืขืจืข ื–ื™ื™ื˜. ืขืก ื–ืขื ืขืŸ ืึท ืคึผืึธืจ ืคื•ืŸ ืฆื™ื›ื˜ื™ืง ื˜ืจื™ืงืก ืคึฟืึทืจ ื“ืขื ืฆื•ื•ืขืง, ื•ื•ืึธืก ื‘ื™ื™ื“ืข ื–ืขื ืขืŸ ื ื•ืฆื™ืง ืคึฟืึทืจ ื“ื™ื‘ืึทื’ื™ื ื’ ืกืขืจื•ื•ืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ. ื“ืขืจ ืขืจืฉื˜ืขืจ ืื™ื– ืฆื• ื ื•ืฆืŸ netstat ืึธื“ืขืจ ื ื™ื™ึทืขืจ ss (ื›ืึธืœืขืœ ืกื˜ืึทื˜ื•ืก). ื‘ื™ื™ื“ืข ืงืึทืžืึทื ื“ื– ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืกื™ืกื˜ืขื ืก ืึทืงื˜ื™ื•ื• ื ืขืฅ ืงืึทื ืขืงืฉืึทื ื– ืื•ืŸ ื ืขืžืขืŸ ื“ื™ ื“ืขืจืงืœืขืจื•ื ื’ -l ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืฆื•ื’ืขื”ืขืจื˜ ืกืึทืงืึทืฅ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื“ืขืจ ืึธืคึผืขืจืึทื˜ืึธืจ -p ืฆื• ื•ื•ื™ื™ึทื–ืŸ ืžื’ื™ืœื” ืคืืจื‘ื•ื ื“ืŸ ืฆื• ื“ื™ ื›ืึธืœืขืœ ื•ื•ื™ ืึท ืงืœื™ืขื ื˜. (ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืžืขืจ ื ื•ืฆื™ืง ืึธืคึผืฆื™ืขืก, ืึธื‘ืขืจ ื“ื™ ืฆื•ื•ื™ื™ ื–ืขื ืขืŸ ื’ืขื ื•ื’ ืคึฟืึทืจ ื“ืขื ืึทืจื‘ืขื˜.)

# ss -pl | grep /var/run/bcron-spool
u_str LISTEN 0   128   /var/run/bcron-spool 1466637   * 0   users:(("unixserver",pid=20629,fd=3))

ื“ืึธืก ืกืึทื’ื“ื–ืฉืขืกืฅ ืึทื– ื“ืขืจ ืฆื•ื”ืขืจืขืจ ืื™ื– ื“ืขืจ ื‘ืึทืคึฟืขืœ inixserver, ืคืœื™ืกื ื“ื™ืง ืžื™ื˜ ืคึผืจืึธืฆืขืก ืฉื™ื™ึทืŸ 20629. (ืื•ืŸ, ืฆื•ืคืึทืœ, ืขืก ื ื™ืฆื˜ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ 3 ื•ื•ื™ ื“ื™ ื›ืึธืœืขืœ.)

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

# lsof /var/run/bcron-spool
COMMAND   PID   USER  FD  TYPE  DEVICE              SIZE/OFF  NODE    NAME
unixserve 20629 cron  3u  unix  0x000000005ac4bd83  0t0       1466637 /var/run/bcron-spool type=STREAM

ืคึผืจืึธืฆืขืก 20629 ืื™ื– ืึท ืœืึทื ื’-ื’ืขืœืขื‘ื˜ ืกืขืจื•ื•ืขืจ, ืึทื–ื•ื™ ืื™ืจ ืงืขื ืขืŸ ืฆื•ื˜ืฉืขืคึผืขืŸ ืขืก ืฆื• ืฉื˜ืจืขื ื’ ื ื™ืฆืŸ ืขืคึผืขืก ื•ื•ื™ strace -o /tmp/trace -p 20629. ืื•ื™ื‘ ืื™ืจ ืจืขื“ืึทื’ื™ืจืŸ ืึท ืงืจืึทืŸ ืึทืจื‘ืขื˜ ืื™ืŸ ืืŸ ืื ื“ืขืจ ื•ื•ืึธืงื–ืึทืœ, ืื™ืจ ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ืึท ืฉืคึผื•ืจ ืจืขื–ื•ืœื˜ืึทื˜ ืžื™ื˜ ืึท ื˜ืขื•ืช. ืื•ืŸ ื“ืึธ ืื™ื– ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜:

accept(3, NULL, NULL)                   = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21181
close(4)                                = 0
accept(3, NULL, NULL)                   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21181, si_uid=998, si_status=0, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG|WSTOPPED, NULL) = 21181
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]})                 = 43
accept(3, NULL, NULL)                   = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21200
close(4)                                = 0
accept(3, NULL, NULL)                   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21200, si_uid=998, si_status=111, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 111}], WNOHANG|WSTOPPED, NULL) = 21200
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]})                 = 43
accept(3, NULL, NULL

(ืœืขืฆื˜ืข ืึธื ื ืขืžืขืŸ () ื•ื•ืขื˜ ื ื™ื˜ ื–ื™ื™ืŸ ื’ืขืขื ื“ื™ืงื˜ ื•ื•ืขืŸ ื˜ืจื™ื™ืกื™ื ื’.) ื•ื•ื™ื“ืขืจ, ืœื™ื™ื“ืขืจ, ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื˜ื•ื˜ ื ื™ืฉื˜ ืึทื ื˜ื”ืึทืœื˜ืŸ ื“ืขื ื˜ืขื•ืช ืžื™ืจ ื–ืขื ืขืŸ ืงื•ืงืŸ ืคึฟืึทืจ. ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื–ืขืŸ ืงื™ื™ืŸ ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ืึธืก bcrontag ืกืขื ื“ื– ืฆื• ืึธื“ืขืจ ื ืขืžื˜ ืคึฟื•ืŸ ื“ื™ ื›ืึธืœืขืœ. ืึทื ืฉื˜ืึธื˜, ื’ืึทื ืฅ ืคึผืจืึธืฆืขืก ืงืึธื ื˜ืจืึธืœ (ืงืœืึธื•ืŸ, wait4, SIGCHLD ืืื–"ื• ื•) ื“ืขืจ ืคึผืจืึธืฆืขืก ืฉืคึผืึทื ื•ื ื’ ืึท ืงื™ื ื“ ืคึผืจืึธืฆืขืก, ื•ื•ืึธืก, ื•ื•ื™ ืื™ืจ ื–ืืœ ื˜ืจืขืคืŸ, ื˜ื•ื˜ ื“ื™ ืคืึทืงื˜ื™ืฉ ืึทืจื‘ืขื˜. ืื•ืŸ ืื•ื™ื‘ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื›ืึทืคึผืŸ ืื™ืจ ืฉื˜ืขื’, ืœื™ื™ื’ืŸ ืฆื• ื“ื™ ืจื•ืคืŸ strace -f. ื“ืึธืก ืื™ื– ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื’ืขืคึฟื™ื ืขืŸ ื•ื•ืขืŸ ืžื™ืจ ื–ื•ื›ืŸ ืคึฟืึทืจ ื“ื™ ื˜ืขื•ืช ืึธื ื–ืึธื’ ืื™ืŸ ื“ื™ ื ื™ื™ึทืข ืจืขื–ื•ืœื˜ืึทื˜ ืžื™ื˜ ืกื˜ืจืึทืกืข -ืค -ืึธ /ื˜ืžืคึผ/ื˜ืจืึทืกืข -ืคึผ 20629:

21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111)                   = ?
21470 +++ exited with 111 +++

ืื™ืฆื˜, ื“ืึธืก ืื™ื– ืขืคึผืขืก. ืคึผืจืึธืฆืขืก 21470 ื‘ืืงื•ืžื˜ ืึท "ืึทืงืกืขืก ื’ืขืœื™ื™ืงื ื˜" ื˜ืขื•ืช ื•ื•ืขืŸ ื˜ืจื™ื™ื ื’ ืฆื• ืฉืึทืคึฟืŸ ืึท ื˜ืขืงืข ืื™ืŸ ื“ืจืš tmp/spool.21470.1573692319.854640 (ืฉื™ื™ื›ื•ืช ืฆื• ื“ืขื ืงืจืึทื ื˜ ืึทืจื‘ืขื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ). ืื•ื™ื‘ ืžื™ืจ ื ืึธืจ ื’ืขื•ื•ืื•ืกื˜ ื“ืขื ืงืจืึทื ื˜ ืึทืจื‘ืขื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ, ืžื™ืจ ื•ื•ืึธืœื˜ ืื•ื™ืš ื•ื•ื™ืกืŸ ื“ื™ ืคื•ืœ ื“ืจืš ืื•ืŸ ืงืขื ืขืŸ ืฆื• ืจืขื›ืขื ืขืŸ ืื•ื™ืก ื•ื•ืึธืก ื“ืขืจ ืคึผืจืึธืฆืขืก ืงืขืŸ ื ื™ืฉื˜ ืžืึทื›ืŸ ื–ื™ื™ืŸ ืฆื™ื™ื˜ื•ื•ื™ื™ืœื™ื’ืข ื˜ืขืงืข ืื™ืŸ ืขืก. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ื“ืขืจ ืคึผืจืึธืฆืขืก ืื™ื– ืฉื•ื™ืŸ ื™ืงืกื™ื™ื˜ืึทื“, ืึทื–ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ื ืึธืจ ื ื•ืฆืŸ lsof -p 21470 ืื™ืŸ ืกื“ืจ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ืขื ืงืจืึทื ื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ, ืึธื‘ืขืจ ืื™ืจ ืงืขื ืขืŸ ืึทืจื‘ืขื˜ืŸ ืื™ืŸ ื“ื™ ืคืึทืจืงืขืจื˜ ืจื™ื›ื˜ื•ื ื’ - ืงื•ืง ืคึฟืึทืจ PID 21470 ืกื™ืกื˜ืขื ืงืึทืœืœืก ื•ื•ืึธืก ื˜ื•ื™ืฉืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ. (ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ, PID 21470 ืžื•ื–ืŸ ื”ืึธื‘ืŸ ื™ื ื›ืขืจืึทื˜ื™ื“ ืคื•ืŸ ื–ื™ื™ืŸ ืคืึธื˜ืขืจ, ืื•ืŸ ื“ืึธืก ืื™ื– ืฉื•ื™ืŸ ื“ื•ืจืš lsof -p ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ื’ืขืคื•ื ืขืŸ ืื•ื™ืก.) ื“ืขื ืกื™ืกื˜ืขื ืจื•ืคืŸ ืื™ื– chdir (ื•ื•ืึธืก ืื™ื– ื’ืจื™ื ื’ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืžื™ื˜ ื“ื™ ื”ื™ืœืฃ ืคื•ืŸ ืžืึธื“ืขืจืŸ ืึธื ืœื™ื™ืŸ ื–ื•ื›ืŸ ืขื ื“ื–ืฉืึทื ื–). ืื•ืŸ ื“ืึธ ืื™ื– ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ืคืึทืจืงืขืจื˜ ืึธื ืคึฟืจืขื’ืŸ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืฉืคึผื•ืจ ืจืขื–ื•ืœื˜ืึทื˜ืŸ, ืึทืœืข ื“ื™ ื•ื•ืขื’ ืฆื• ืกืขืจื•ื•ืขืจ PID 20629:

20629 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21470
...
21470 execve("/usr/sbin/bcron-spool", ["bcron-spool"], 0x55d2460807e0 /* 27 vars */) = 0
...
21470 chdir("/var/spool/cron")          = 0
...
21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111)                   = ?
21470 +++ exited with 111 +++

(ืื•ื™ื‘ ืื™ืจ ื ื™ื˜ืึธ ืคืึทืจืคืึทืœืŸ, ืื™ืจ ื–ืืœ ื•ื•ืขืœืŸ ืฆื• ืœื™ื™ืขื ืขืŸ ืžื™ื™ืŸ ืคืจื™ืขืจื“ื™ืงืŸ ืคึผืึธืกื˜ืŸ ื•ื•ืขื’ืŸ * ื ื™ืงืก ืคึผืจืึธืฆืขืก ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืื•ืŸ ืฉืขืœื–.) ืึทื–ื•ื™, ื“ืขืจ ืกืขืจื•ื•ืขืจ PID 20629 ื”ืื˜ ื ื™ืฉื˜ ื‘ืึทืงื•ืžืขืŸ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืฆื• ืฉืึทืคึฟืŸ ืึท ื˜ืขืงืข ืื•ื™ืฃ ื“ืขื ื“ืจืš /var/spool/cron/tmp/spool.21470.1573692319.854640. ืจื•ื‘ึฟ ืžืกืชึผืžื, ื“ื™ ืกื™ื‘ื” ืคึฟืึทืจ ื“ืขื ืื™ื– ื“ื™ ืงืœืึทืกื™ืฉ ื˜ืขืงืข ืกื™ืกื˜ืขื ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืกืขื˜ื˜ื™ื ื’ืก. ืœืืžื™ืจ ื˜ืฉืขืงืŸ:

# ls -ld /var/spool/cron/tmp/
drwxr-xr-x 2 root root 4096 Nov  6 05:33 /var/spool/cron/tmp/
# ps u -p 20629
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
cron     20629  0.0  0.0   2276   752 ?        Ss   Nov14   0:00 unixserver -U /var/run/bcron-spool -- bcron-spool

ื“ืึธืจื˜ ืื™ื– ื“ืขืจ ื”ื•ื ื˜ ื‘ืึทื’ืจืึธื‘ืŸ! ื“ืขืจ ืกืขืจื•ื•ืขืจ ืœื•ื™ืคื˜ ื•ื•ื™ ืึท ื‘ืึทื ื™ืฆืขืจ ืงืจื•ืŸ, ืึธื‘ืขืจ ื‘ืœื•ื™ื– ื•ื•ืึธืจืฆืœ ื”ืื˜ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืฆื• ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ /var/spool/cron/tmp/. ืคึผืฉื•ื˜ ื‘ืึทืคึฟืขืœ ื˜ืฉืึธื•ื•ืŸ ืงืจื•ืŸ /var/spool/cron/tmp/ ื•ื•ืขื˜ ืฆื•ื•ื™ื ื’ืขืŸ bcron ืึทืจื‘ืขื˜ ืจื™ื›ื˜ื™ืง. (ืื•ื™ื‘ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ื“ืขืจ ืคึผืจืึธื‘ืœืขื, ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืจื•ื‘ึฟ ืžืกืชึผืžื ื›ืึธืฉืขื“ ืื™ื– ืึท ืงืขืจืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืžืึธื“ื•ืœืข ื•ื•ื™ SELinux ืึธื“ืขืจ AppArmor, ืึทื–ื•ื™ ืื™ืš ื•ื•ืึธืœื˜ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืงืขืจืŸ ืึธื ื–ืึธื’ ืงืœืึธืฅ ืžื™ื˜ dmesg.)

ืื™ืŸ ื’ืึทื ืฅ

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

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

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

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