เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ 40 เจ—เฉเจฃเจพ เจตเจงเจพ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ

เจ…เฉฑเจœ เจ…เจธเฉ€เจ‚ เจธเจผเฉˆเจฐเจฒเฉŒเจ• เจธเจฟเจธเจŸเจฎ เจฆเฉ‡ เจ•เฉเจ เจจเจตเฉ€เจจเจคเจฎ เจ…เจชเจกเฉ‡เจŸเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚ [เจ‡เจน เจธเจŸเฉˆเจจเจซเฉ‹เจฐเจก เจฏเฉ‚เจจเฉ€เจตเจฐเจธเจฟเจŸเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ‰เฉฑเจš-เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจตเจพเจฒเจพ เจ•เจฒเฉฑเจธเจŸเจฐ เจนเฉˆ - เจฒเจ—เจญเจ—. เจŸเฉเจฐเจพเจ‚เจธ.], เจœเฉ‹ เจ•เจฟ เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจฟเฉฑเจš เจเจ‚เจŸเจฐเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจคเฉŒเจฐ 'เจคเฉ‡ เจคเฉ‡เจœเจผ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจจเจฟเจฏเจฎเจค เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ‡ เจ‰เจฒเจŸ, เจ‡เจน เจ‡เฉฑเจ• เจ…เฉฐเจฆเจฐเฉ‚เจจเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฒเจˆ เจ‡เจธเจจเฉ‚เฉฐ เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจขเฉฐเจ— เจจเจพเจฒ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจธเจผเฉ‡เจฐเจฒเจพเจ• 'เจคเฉ‡ เจจเจฟเจฏเจฎเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ…เจธเฉ€เจ‚ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‡ เจนเฉ‹เจฐ เจฒเฉ‡เจ– เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจ•เจฐเจจ เจตเจฟเฉฑเจš เจธเจฎเจพเจ‚ เจฒเฉฑเจ—เจฆเจพ เจนเฉˆ

เจ‡เจน เจธเจญ เจ‡เฉฑเจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจคเจ•เจจเฉ€เจ•เฉ€ เจธเจนเจพเจ‡เจคเจพ เจธเจตเจพเจฒ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจ‡เจ†เฅค เจ‰เจธ เจจเฉ‡ เจธเจฎเฉฑเจธเจฟเจ† เจฆเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจฆเจฟเฉฑเจคเฉ€ เจนเฉˆ เจ•เจฟ เจซเจพเจ‚เจธเฉ€ ls 15 เจคเฉ‹เจ‚ เจตเฉฑเจง เจเจ‚เจŸเจฐเฉ€เจ†เจ‚ เจตเจพเจฒเฉ€ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจ•เฉเจ เจฎเจฟเฉฐเจŸ เจฒเฉฑเจ—เจฆเฉ‡ เจนเจจ $SCRATCH [เจ†เจฐเจœเจผเฉ€ เจซเจพเจˆเจฒเจพเจ‚ เจฒเจˆ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ - เจฒเจ—เจญเจ—. เจฒเฉ‡เจจ]เฅค

เจ‡เฉฑเจ• เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจนเจœเจผเจพเจฐเจพเจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจซเจพเจˆเจฒ เจธเจฟเจธเจŸเจฎ เจฒเจˆ เจฌเฉ‹เจ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ เจ…เจคเฉ‡ เจฏเจ•เฉ€เจจเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจฟเจซเจพเจฐเจธเจผ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€เฅค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ‡เจน เจœเจพเจฃเจฆเจพ เจธเฉ€ เจ…เจคเฉ‡ เจฎเฉฐเจจเจฟเจ† เจ•เจฟ เจ‡เจน เจšเฉฐเจ—เจพ เจจเจนเฉ€เจ‚ เจธเฉ€, เจชเจฐ เจœเจผเจฟเจ•เจฐ เจ•เฉ€เจคเจพ เจ•เจฟ เจธเฉ‚เจšเฉ€เจ•เจฐเจจ เจ‰เจธ เจฆเฉ‡ เจฒเฉˆเจชเจŸเจพเจช 'เจคเฉ‡ เจธเจผเฉ‡เจฐเจฒเจพเจ• เจจเจพเจฒเฉ‹เจ‚ 1000 เจ—เฉเจฃเจพ เจคเฉ‡เจœเจผ เจธเฉ€เฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจ‡เจธ เจจเฉ‡ เจธเจพเจจเฉ‚เฉฐ เจฆเฉเจ–เฉ€ เจ•เฉ€เจคเจพ. เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจกเฉ‚เฉฐเจ˜เจพเจˆ เจจเจพเจฒ เจฆเฉ‡เจ–เจฟเจ†.

เจ•เจฟเจ‰เจ‚เจ•เจฟ ls เจตเจงเฉ€เจ† เจฒเฉฑเจ— เจฐเจฟเจนเจพ เจนเฉˆ

เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ–เจฟเจ† เจ•เจฟ เจ‡เจน เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ•เฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ ls เจ‡เฉฑเจ• เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡, เจ…เจคเฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš เจ‡เฉฐเจจเจพ เจธเจฎเจพเจ‚ เจ•เจฟเจ‰เจ‚ เจฒเฉฑเจ—เจฆเจพ เจนเฉˆเฅค เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจ†เจงเฉเจจเจฟเจ• เจตเฉฐเจกเจพเจ‚ 'เจคเฉ‡ ls เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจšเฉฑเจฒเจฆเจพ เจนเฉˆ ls --color=auto, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจนเจฐ เจ•เฉ‹เจˆ เจฐเฉฐเจ— เจชเจธเฉฐเจฆ เจ•เจฐเจฆเจพ เจนเฉˆ.

เจชเจฐ เจธเฉเฉฐเจฆเจฐ เจฐเฉฐเจ— เจ‡เฉฑเจ• เจ•เฉ€เจฎเจค 'เจคเฉ‡ เจ†เจ‰เจ‚เจฆเฉ‡ เจนเจจ: เจนเจฐเฉ‡เจ• เจซเจพเจˆเจฒ เจฒเจˆ ls เจขเฉเจ•เจตเฉ‡เจ‚ เจฐเฉฐเจ— เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฒเจˆ เจซเจพเจˆเจฒ เจ•เจฟเจธเจฎ, เจ‡เจธ เจฆเฉ€เจ†เจ‚ เจ‡เจœเจพเจœเจผเจคเจพเจ‚, เจซเจฒเฉˆเจ—, เจตเจฟเจธเจคเฉเจฐเจฟเจค เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆเฅค

เจธเจฎเฉฑเจธเจฟเจ† เจฆเจพ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจนเฉฑเจฒ ls เจตเจฟเฉฑเจš เจฐเฉฐเจ— เจจเฉ‚เฉฐ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ…เจฏเฉ‹เจ— เจ•เจฐเจจเจพ เจนเฉˆ, เจชเจฐ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจ—เฉเฉฑเจธเฉ‡ เจฆเฉ€ เจ•เจฒเจชเจจเจพ เจ•เจฐเฉ‹เฅค เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฐเฉฐเจ— เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจจเฉ‚เฉฐ เจจเจนเฉ€เจ‚ เจฒเฉˆเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ, เจ…เจธเฉ€เจ‚ เจฐเจพเจ–เจธเจผ เจจเจนเฉ€เจ‚ เจนเจพเจ‚เฅค

เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจกเฉ‚เฉฐเจ˜เจพเจˆ เจจเจพเจฒ เจฆเฉ‡เจ–เจฟเจ†เฅค ls เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉเจ†เจฐเจพ เจฐเฉฐเจ— เจเจ‚เจŸเจฐเฉ€เจ†เจ‚ LS_COLORS, เจœเฉ‹ เจ•เจฟ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ dircolors(1) เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจ‡เจฒ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ dir_colors(5)... เจนเจพเจ‚, เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจ‡เฉฑเจ• เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจ‡เจฒ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจซเจฟเจฐ เจตเจฐเจคเจฆเจพ เจนเฉˆ (เจ…เจคเฉ‡ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฌเจพเจฐเฉ‡ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹ เจฆเจฐเจตเจพเจœเจผเฉ‡ (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 เจ…เจคเฉ‡ เจฐเฉฐเจ—เจฆเจพเจฐ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒเจพเจ‚เฅค เจ‡เฉฐเจจเจพ เจตเฉฑเจกเจพ เจจเฉเจ•เจธเจพเจจ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจฌเฉ‡เจธเจผเฉฑเจ•, เจ‡เจน เจนเฉเจฃ เจนเจฐเฉ‡เจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฒเจˆ Sherlock เจตเจฟเฉฑเจš เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจชเจฐ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจฐเฉฐเจ— เจตเจพเจชเจธ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจฌเจธ เจกเจฟเจซเฉŒเจฒเจŸ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ 'เจคเฉ‡ เจตเจพเจชเจธ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

$ unset LS_COLORS

เจชเจฐ เจซเจฟเจฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจตเจพเจฒเฉ€เจ†เจ‚ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€เจ†เจ‚ 'เจคเฉ‡, เจœเจฆเฉ‹เจ‚ เจ‡เจน เจšเฉฑเจฒ เจฐเจนเฉ€ เจนเฉ‹เจตเฉ‡ เจคเจพเจ‚ เจ•เฉŒเจซเฉ€ เจฌเจฃเจพเจ‰เจฃเจพ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ“ ls.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹