เป€เบกเบทเปˆเบญเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเป€เบฅเบฑเปˆเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ 40 เป€เบ—เบปเปˆเบฒ

เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบซเบฅเป‰เบฒเบชเบธเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš Sherlock [เบ™เบตเป‰เปเบกเปˆเบ™เบเบธเปˆเบกเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เบ—เบตเปˆเบกเบฐเบซเบฒเบงเบดเบ—เบฐเบเบฒเป„เบฅ Stanford - เบ›เบฐเบกเบฒเบ™. trans.], เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เป„เบงเบ‚เบถเป‰เบ™เบฅเบฒเบเบเบฒเบ™เป„เบŸเบฅเปŒเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบฅเบฒเบเบเบฒเบ™.

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

เบฅเบฒเบเบŠเบทเปˆเป„เบŸเบฅเปŒเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเปƒเบŠเป‰เป€เบงเบฅเบฒ

เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ„เปเบฒเบ–เบฒเบกเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบˆเบฒเบเบœเบนเป‰เปƒเบŠเป‰. เบžเบฃเบฐเบญเบปเบ‡เป„เบ”เป‰เบฅเบฒเบเบ‡เบฒเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” ls เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบตเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒ 15 เบฅเบฒเบเบเบฒเบ™เปƒเบ™ $SCRATCH [เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบŠเบปเปˆเบงเบ„เบฒเบง - เบ›เบฐเบกเบฒเบ™. เป€เบฅเบ™].

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

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ ls เป€เบšเบดเปˆเบ‡เบ‡เบฒเบก

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹ ls เป€เบกเบทเปˆเบญเบฅเบฒเบเบŠเบทเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เปเบฅเบฐเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบซเบผเบฒเบ. เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบ—เบตเปˆเบชเบธเบ” ls เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เปเบฅเปˆเบ™เป€เบ›เบฑเบ™ ls --color=auto, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ—เบธเบเบ„เบปเบ™เบกเบฑเบเบชเบต.

เปเบ•เปˆเบชเบตเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเบกเบฒเปƒเบ™เบฅเบฒเบ„เบฒ: เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป†เป€เบญเบเบฐเบชเบฒเบ™ ls เบˆเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเป€เบžเบ”เป„เบŸเบฅเปŒ, เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เบ—เบธเบ‡, เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบฐเบซเบเบฒเบเปเบฅเบฐเบญเบทเปˆเบ™เป†เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเบชเบตเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก.

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

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เป€เบฅเบดเบเบเบงเปˆเบฒ. ls เบฅเบฒเบเบเบฒเบ™เบชเบตเบœเปˆเบฒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก LS_COLORS, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบเปเบฒเบ™เบปเบ” dircolors(1) เบญเบตเบ‡เปƒเบชเปˆเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ dir_colors(5)... เปเบกเปˆเบ™เปเบฅเป‰เบง, executable เบญเปˆเบฒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เป€เบŠเบดเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ™เปเบฒเปƒเบŠเป‰ (เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒ เป‚เบ”เบ (เป€เบฎเบฑเบ”), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ dir_colors เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ, เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡).

เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เปƒเบเป‰เป†

เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบฅเบฐเบšเบปเบšเบชเบตเปƒเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบŠเป‰เบฒเบฅเบปเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเป‰เบฒเบ‡เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบปเบ”เบฅเบญเบ‡:

$ mkdir $SCRATCH/dont
$ touch $SCRATCH/dont/{1..10000} # don't try this at home!
$ time ls --color=always $SCRATCH/dont | wc -l
10000

real    0m12.758s
user    0m0.104s
sys     0m0.699s

12,7 เบงเบดเบ™เบฒเบ—เบตเบชเปเบฒเบฅเบฑเบš 10 เป„เบŸเบฅเปŒ, เบšเปเปˆเบ”เบตเบซเบผเบฒเบ.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบธเบ‡ --color=always: เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบฅเบฒเบงเบซเบฑเบ™เป„เบ›เบซเบฒ ls --color=auto, เปเบ•เปˆ ls เบเบงเบ”โ€‹เบžเบปเบšโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบเบฑเบš terminal (เป€เบŠเบฑเปˆเบ™โ€‹: เป‚เบ”เบโ€‹เบ—เปเปˆโ€‹เบซเบผเบทโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹) เปเบฅเบฐโ€‹เบ›เบดเบ”โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เบเบฒเบ™โ€‹เปƒเบชเปˆโ€‹เบชเบตโ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ•เบฑเป‰เบ‡โ€‹เป€เบ›เบฑเบ™ auto. เบ„เบปเบ™เบชเบฐเบซเบฅเบฒเบ”.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”? เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบ”เป‰เบงเบ strace:

$ strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 44.21    0.186617          19     10000           lstat
 42.60    0.179807          18     10000     10000 getxattr
 12.19    0.051438           5     10000           capget
  0.71    0.003002          38        80           getdents
  0.07    0.000305          10        30           mmap
  0.05    0.000217          12        18           mprotect
  0.03    0.000135          14        10           read
  0.03    0.000123          11        11           open
  0.02    0.000082           6        14           close
[...]

เบงเป‰เบฒเบง: 10 เป‚เบ— lstat(), 10 เป‚เบ— getxattr() (เป€เบŠเบดเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบฅเบปเป‰เบกเป€เบซเบฅเบงเป€เบžเบฒเบฐเบงเปˆเบฒเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆ ls เบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒ), 10 เป‚เบ— capget().

เปเบ™เปˆเบ™เบญเบ™, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป„เบ”เป‰.

เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”? เบšเปเปˆ

เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ bug เบˆเบฒเบ 10 เบ›เบตเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเบ›เบดเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”:

$ eval $(dircolors -b | sed s/ca=[^:]*:/ca=:/)
$ time strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 98.95    0.423443          42     10000           lstat
  0.78    0.003353          42        80           getdents
  0.04    0.000188          10        18           mprotect
  0.04    0.000181           6        30           mmap
  0.02    0.000085           9        10           read
  0.02    0.000084          28         3           mremap
  0.02    0.000077           7        11           open
  0.02    0.000066           5        14           close
[...]
------ ----------- ----------- --------- --------- ----------------
100.00    0.427920                 10221         6 total

real    0m8.160s
user    0m0.115s
sys     0m0.961s

เบงเป‰เบฒเบง, เป€เบฅเบฑเปˆเบ‡เป€เบ–เบดเบ‡ 8 เบงเบดเบ™เบฒเบ—เบต! เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบˆเบฑเบ”เบเบฒเบ™เป‚เบ—เบฅเบฒเบ„เบฒเปเบžเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™ getxattr(), เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เป‰เบฒเบ—เบฒเบ capget() เบซเบฒเบเป„เบ›เบ„เบทเบเบฑเบ™, เบเบดเปˆเบ‡เปƒเบซเบเปˆ.

เปเบ•เปˆเบเบฑเบ‡เบกเบตเบเบฒเบ™เป‚เบ—เบ—เบตเปˆเบซเบ™เป‰เบฒเบฅเปเบฒเบ„เบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ lstat(), เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ ...

เป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เบญเบเป„เบกเป‰เบˆเบฑเบเบ”เบญเบ?

เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ” LS_COLORS.

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ” เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบ›เบดเบ”เบ•เบปเบงเปเบ›เบ™เบตเป‰:

$ echo $LS_COLORS
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
$ unset LS_COLORS
$ echo $LS_COLORS

$  time ls --color=always $SCRATCH/dont | wc -l
10000

real    0m13.037s
user    0m0.077s
sys     0m1.092s

เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡!?! เบเบฑเบ‡ 13 เบงเบดเบ™เบฒเบ—เบตเบšเป?

เบกเบฑเบ™ turns เปƒเบซเป‰ เป€เบซเบฑเบ™ เบงเปˆเบฒ เปƒเบ™ เป€เบง เบฅเบฒ เบ—เบตเปˆ เบเบฒเบ™ เบ›เปˆเบฝเบ™ เปเบ›เบ‡ เบชเบฐ เบžเบฒเบš เปเบงเบ” เบฅเป‰เบญเบก LS_COLORS เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เปƒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบซเบผเบทเบ‚เบฒเบ”เบซเบฒเบเป„เบ› <type>=color:, เบกเบฑเบ™เปƒเบŠเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบเบฑเบ‡เปƒเบŠเป‰เบชเบต. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ›เบดเบ”เบเบฒเบ™เปƒเบชเปˆเบชเบตเบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เป„เบŸเบฅเปŒเบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰ override เบกเบฑเบ™ <type>=: เบซเบผเบท <type> 00 เปƒเบ™เป„เบŸเบฅ DIR_COLORS.

เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบฅเบญเบ‡โ€‹เปเบฅเบฐโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เบซเบผเบฒเบโ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบ”โ€‹เปเบ„เบšโ€‹เบเบฒเบ™โ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบฅเบปเบ‡โ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

เป€เบŠเบดเปˆเบ‡เบ‚เบฝเบ™เป€เบ›เบฑเบ™

LS_COLORS='ex=00:su=00:sg=00:ca=00:'

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ: เบšเปเปˆเปƒเบชเปˆเบชเบตเป„เบŸเบฅเปŒเป‚เบ”เบเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ. เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”, เปเบ•เปˆเป€เบ—เบทเปˆเบญเบฅเบฐเปœเป‰เบญเบ setuid/setgid, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป‚เบ”เบ เบ—เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบฑเปˆเบ‡ ls

เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบฎเบฑเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบ”เป†, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ—เบซเบฒ lstat() เบซเบฒเบเป„เบ›, เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”:

$ export LS_COLORS='ex=00:su=00:sg=00:ca=00:'
$ time strace -c ls --color=always $SCRATCH/dont | wc -l
10000
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 63.02    0.002865          36        80           getdents
  8.10    0.000368          12        30           mmap
  5.72    0.000260          14        18           mprotect
  3.72    0.000169          15        11           open
  2.79    0.000127          13        10           read
[...]
------ ----------- ----------- --------- --------- ----------------
100.00    0.004546                   221         6 total

real    0m0.337s
user    0m0.032s
sys     0m0.029s

0,3 เบงเบดเบ™เบฒเบ—เบตเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ 10 เป„เบŸเบฅเปŒ, เบšเบฑเบ™เบ—เบถเบ.

เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ Sherlockโ€‹

เบˆเบฒเบ 13 เบงเบดเบ™เบฒเบ—เบตเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™ 0,3 เบงเบดเบ™เบฒเบ—เบตเบ”เป‰เบงเบเบเบฒเบ™เบ›เบฑเบšเป€เบฅเบฑเบเบ™เป‰เบญเบ LS_COLORS เบซเบกเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เป€เบฅเบฑเปˆเบ‡ 40 เป€เบ—เบปเปˆเบฒเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบšเปเปˆเบกเบต setuid / setgid เปเบฅเบฐเป„เบŸเบฅเปŒเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบต. เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡.

เปเบ™เปˆเบ™เบญเบ™, เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™ Sherlock เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เปเบ•เปˆเบฅเบฐเบ„เบปเบ™.

เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบชเบต, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™:

$ unset LS_COLORS

เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบตเป„เบŸเบฅเปŒเบซเบผเบฒเบ, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบ•เบปเป‰เบกเบเบฒเป€เบŸเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เปเบฅเปˆเบ™ ls.

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

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