เชœเซเชฏเชพเชฐเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ 40 เช—เชฃเซ€ เชเชกเชชเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡

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

เชจเชฟเชฏเชฎเชฟเชค เชฒเซ‡เช–เซ‹เชฅเซ€ เชตเชฟเชชเชฐเซ€เชค, เช…เชฎเชพเชฐเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เชถเซเชฐเซ‡เชทเซเช  เชฐเซ€เชคเซ‡ เชšเชพเชฒเซ เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชถเซ‡เชฐเชฒเซ‹เช• เชชเชฐ เชจเชฟเชฏเชฎเชฟเชคเชชเชฃเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ€เช เช›เซ€เช เชคเซ‡เชจเชพ เชชเชฐ เช† เชเช• เช†เช‚เชคเชฐเชฟเช• เช…เชนเซ‡เชตเชพเชฒ เช›เซ‡. เช…เชฎเซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เช†เชตเชพ เชตเชงเซ เชฒเซ‡เช–เซ‹ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพเชจเซ€ เช†เชถเชพ เชฐเชพเช–เซ€เช เช›เซ€เช.

เช˜เชฃเซ€ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชธเซ‚เชšเชฟเชฌเชฆเซเชง เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชฎเชฏ เชฒเชพเช—เซ‡ เช›เซ‡

เชคเซ‡ เชฌเชงเซเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เชคเช•เชจเซ€เช•เซ€ เชธเชชเซ‹เชฐเซเชŸ เชชเซเชฐเชถเซเชจ เชธเชพเชฅเซ‡ เชถเชฐเซ‚ เชฅเชฏเซเช‚. เชคเซ‡เชฎเชฃเซ‡ เชธเชฎเชธเซเชฏเชพเชจเซ€ เชœเชพเชฃ เช•เชฐเซ€ เช•เซ‡ เช…เชฎเชฒ ls 15 เชฅเซ€ เชตเชงเซ เชเชจเซเชŸเซเชฐเซ€เช“ เชธเชพเชฅเซ‡ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชฅเซ‹เชกเซ€ เชฎเชฟเชจเชฟเชŸเซ‹ เชฒเซ‡ เช›เซ‡ $SCRATCH [เช•เชพเชฎเชšเชฒเชพเช‰ เชซเชพเช‡เชฒเซ‹ เชฎเชพเชŸเซ‡เชจเซ€ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ - เช†เชถเชฐเซ‡. เชฒเซ‡เชจ].

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

เช•เชพเชฐเชฃ เช•เซ‡ ls เชธเชฐเชธ เชฒเชพเช—เซ‡ เช›เซ‡

เช…เชฎเซ‡ เชคเซ‡ เช–เชฐเซ‡เช–เชฐ เชถเซเช‚ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชœเซ‹เชฏเซเช‚ ls เชœเซเชฏเชพเชฐเซ‡ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เชธเซ‚เชšเชฟเชฌเชฆเซเชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช†เชŸเชฒเซ‹ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เชฒเซ‡ เช›เซ‡. เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เช†เชงเซเชจเชฟเช• เชตเชฟเชคเชฐเชฃเซ‹ เชชเชฐ ls เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชคเซ‡ เชคเชฐเซ€เช•เซ‡ เชšเชพเชฒเซ‡ เช›เซ‡ ls --color=auto, เช•เชพเชฐเชฃ เช•เซ‡ เชฆเชฐเซ‡เช•เชจเซ‡ เชฐเช‚เช—เซ‹ เช—เชฎเซ‡ เช›เซ‡.

เชชเชฐเช‚เชคเซ เชธเซเช‚เชฆเชฐ เชฐเช‚เช—เซ‹ เช•เชฟเช‚เชฎเชคเซ‡ เช†เชตเซ‡ เช›เซ‡: เชฆเชฐเซ‡เช• เชซเชพเช‡เชฒ เชฎเชพเชŸเซ‡ ls เชฏเซ‹เช—เซเชฏ เชฐเช‚เช— เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชซเชพเช‡เชฒ เชชเซเชฐเช•เชพเชฐ, เชคเซ‡เชจเซ€ เชชเชฐเชตเชพเชจเช—เซ€เช“, เชซเซเชฒเซ‡เช—เซเชธ, เชตเชฟเชธเซเชคเซƒเชค เชตเชฟเชถเซ‡เชทเชคเชพเช“ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชœเซ‡เชตเชพ เชตเชฟเชถเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชฎเซ‡เชณเชตเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡.

เชธเชฎเชธเซเชฏเชพเชจเซ‹ เชเช• เชธเชฐเชณ เช‰เช•เซ‡เชฒ เช เช›เซ‡ เช•เซ‡ ls เชฎเชพเช‚ เชฐเช‚เช—เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเชตเซ‹, เชชเชฐเช‚เชคเซ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเชพ เช†เช•เซเชฐเซ‹เชถเชจเซ€ เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‹. เช•เซ‹เชˆ เชชเชฃ เชธเช‚เชœเซ‹เช—เซ‹เชฎเชพเช‚ เชคเชฎเชพเชฐเซ‡ เชฐเช‚เช— เช†เช‰เชŸเชชเซเชŸ เชฆเซ‚เชฐ เชจ เช•เชฐเชตเซ‹ เชœเซ‹เชˆเช, เช…เชฎเซ‡ เชฐเชพเช•เซเชทเชธเซ‹ เชจเชฅเซ€.

เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชŠเช‚เชกเชพ เชœเซ‹เชตเชพเชฎเชพเช‚. ls เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชฆเซเชตเชพเชฐเชพ เชฐเช‚เช—เซ‹เชจเซ€ เชเชจเซเชŸเซเชฐเซ€เช“ LS_COLORS, เชœเซ‡ เชธเซ‡เชŸ เช›เซ‡ dircolors(1) เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชชเชฐ เช†เชงเชพเชฐเชฟเชค dir_colors(5)... เชนเชพ, เชเช•เซเชเซ‡เช•เซเชฏเซเชŸเซ‡เชฌเชฒ เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชจเซ‡ เชตเชพเช‚เชšเซ‡ เช›เซ‡, เชœเซ‡ ls เชชเช›เซ€ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ (เช…เชจเซ‡ เชœเซ‹ เชคเชฎเซ‡ เชซเชพเช‡เชฒเซ‹ เชตเชฟเชถเซ‡ เชœเชพเชฃเชคเชพ เชจเชฅเซ€ เชฌเชพเชฐเชฃเซเช‚ (do), เชชเช›เซ€ 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 เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชŸเชฐเซเชฎเชฟเชจเชฒ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เชจ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชถเซ‹เชงเซ‡ เช›เซ‡ (เชฆเชพ.เชค. เชชเชพเช‡เชช เชฆเซเชตเชพเชฐเชพ เช…เชฅเชตเชพ เช†เช‰เชŸเชชเซเชŸ เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชถเชจ เชธเชพเชฅเซ‡) เช…เชจเซ‡ เชœเซ‹ เชธเซ‡เชŸ เช•เชฐเซ‡เชฒ เชนเซ‹เชฏ เชคเซ‹ เชฐเช‚เช—เชจเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเซ‡ เช›เซ‡ 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().

เชšเซ‹เช•เซเช•เชธ เช† เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช•เซเชทเชฎเชคเชพเช“ เชฒเช•เซเชทเชฃ? เชจเชพ

เชธเชฒเชพเชนเชจเซ‡ เช…เชจเซเชธเชฐเซ€เชจเซ‡ 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 เชธเซ‡เช•เชจเซเชก?

เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒ LS_COLORS เชคเซ‡เชจเชพ เช˜เชŸเช•เซ‹เชฎเชพเช‚เชฅเซ€ เชฎเชพเชคเซเชฐ เชเช• เชœ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชจเชฅเซ€ เช…เชฅเชตเชพ เช–เซ‚เชŸเซ‡ เช›เซ‡ <type>=color:, เชคเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชนเชœเซ เชชเชฃ เชฐเช‚เช—เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€ เชœเซ‹ เชคเชฎเซ‡ เชšเซ‹เช•เซเช•เชธ เชซเชพเช‡เชฒ เชชเซเชฐเช•เชพเชฐ เชฎเชพเชŸเซ‡ เช•เชฒเชฐเชพเช‡เชเซ‡เชถเชจเชจเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช“เชตเชฐเชฐเชพเช‡เชก เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ <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 เชธเซ‡เช•เชจเซเชก, เชเช• เชฐเซ‡เช•เซ‹เชฐเซเชก.

เชถเซ‡เชฐเชฒเซ‹เช• เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชกเชฟเชซเซ‹เชฒเซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชธเชพเชฅเซ‡ 13 เชธเซ‡เช•เชจเซเชกเชฅเซ€ เชจเชพเชจเชพ เช—เซ‹เช เชตเชฃเซ‹ เชธเชพเชฅเซ‡ 0,3 เชธเซ‡เช•เชจเซเชก เชธเซเชงเซ€ LS_COLORS เช—เซ‡เชฐเชนเชพเชœเชฐเซ€เชจเซ‡ เช•เชพเชฐเชฃเซ‡ 40-เช—เชฃเซ‹ เชชเซเชฐเชตเซ‡เช—เช• เชฅเชพเชฏ เช›เซ‡ setuid / setgid เช…เชจเซ‡ เชฐเช‚เช—เซ€เชจ เชเช•เซเชเชฟเช•เซเชฏเซเชŸเซ‡เชฌเชฒ เชซเชพเช‡เชฒเซ‹. เช†เชŸเชฒเซ€ เชฎเซ‹เชŸเซ€ เช–เซ‹เชŸ เชจเชฅเซ€.

เช…เชฒเชฌเชคเซเชค, เช† เชนเชตเซ‡ เชฆเชฐเซ‡เช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฎเชพเชŸเซ‡ เชถเซ‡เชฐเชฒเซ‹เช•เชฎเชพเช‚ เช—เซ‹เช เชตเซ‡เชฒ เช›เซ‡.

เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชฐเช‚เช— เชชเชฐเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹, เชคเซ‹ เชคเชฎเซ‡ เชซเช•เซเชค เชกเชฟเชซเซ‹เชฒเซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชชเชฐ เชชเชพเช›เชพ เช†เชตเซ€ เชถเช•เซ‹ เช›เซ‹:

$ unset LS_COLORS

เชชเชฐเช‚เชคเซ เชคเซ‡ เชชเช›เซ€ เช˜เชฃเซ€ เชฌเชงเซ€ เชซเชพเช‡เชฒเซ‹เชตเชพเชณเซ€ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เช“ เชชเชฐ, เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชšเชพเชฒเซ€ เชฐเชนเซ€ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เช•เซ‹เชซเซ€ เช‰เช•เชพเชณเชตเชพเชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ ls.

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

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