เด’เดฐเต เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเต† 40 เดฎเดŸเด™เตเด™เต เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ

เด‡เดจเตเดจเต เดจเดฎเตเดฎเตพ เดทเต†เตผเดฒเด•เตเด•เต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดคเดฟเดฏ เดšเดฟเดฒ เด…เดชเตเดกเต‡เดฑเตเดฑเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต [เด‡เดคเต เดธเตเดฑเตเดฑเดพเตปเดซเต‹เตผเดกเต เดฏเต‚เดฃเดฟเดตเต‡เดดเตเดธเดฟเดฑเตเดฑเดฟเดฏเดฟเดฒเต† เด‰เดฏเตผเดจเตเดจ เดชเตเดฐเด•เดŸเดจเดฎเตเดณเตเดณ เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดพเดฃเต - เดเด•เดฆเต‡เดถเด‚. trans.], เด‡เดคเต เดงเดพเดฐเดพเดณเด‚ เดŽเตปเดŸเตเดฐเดฟเด•เดณเตเดณเตเดณ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเด•เดณเดฟเดฒเต† เดซเดฏเดฒเตเด•เตพ เดฒเดฟเดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด—เดฃเตเดฏเดฎเดพเดฏเดฟ เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต.

เดธเดพเดงเดพเดฐเดฃ เดฒเต‡เด–เดจเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ, เดทเต†เตผเดฒเต‹เด•เตเด•เต เดžเด™เตเด™เดณเตเดŸเต† เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เดฎเดฟเด•เดšเตเดš เดฐเต€เดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดชเดคเดฟเดตเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เด‡เตปเดธเตˆเดกเตผ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดพเดฃเดฟเดคเต. เดญเดพเดตเดฟเดฏเดฟเตฝ เด‡เดคเตเดชเต‹เดฒเตเดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เดฒเต‡เด–เดจเด™เตเด™เตพ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฟเดฐเดตเดงเดฟ เดซเดฏเดฒเตเด•เตพ เดฒเดฟเดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเด‚

เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดชเดฟเดจเตเดคเตเดฃเดพ เดšเต‹เดฆเตเดฏเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเดพเดฃเต เด‡เดคเต†เดฒเตเดฒเดพเด‚ เด†เดฐเด‚เดญเดฟเดšเตเดšเดคเต. เดตเดงเดถเดฟเด•เตเดท เดจเดŸเดชเตเดชเดพเด•เตเด•เดฟเดฏ เดชเตเดฐเดถเตโ€Œเดจเด‚ เด…เดฆเตเดฆเต‡เดนเด‚ เด…เดฑเดฟเดฏเดฟเดšเตเดšเต ls 15-เดคเตเดคเดฟเดฒเดงเดฟเด•เด‚ เดŽเตปเดŸเตเดฐเดฟเด•เดณเตเดณเตเดณ เด’เดฐเต เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเตฝ เด•เตเดฑเดšเตเดšเต เดฎเดฟเดจเดฟเดฑเตเดฑเต เดŽเดŸเตเด•เตเด•เตเด‚ $SCRATCH [เดคเดพเดคเตเด•เดพเดฒเดฟเด• เดซเดฏเดฒเตเด•เตพเด•เตเด•เตเดณเตเดณ เดกเดฏเดฑเด•เตเดŸเดฑเดฟ - เดเด•เดฆเต‡เดถเด‚. เดชเดพเดค].

เด’เดฐเต เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเดฒเต† เด†เดฏเดฟเดฐเด•เตเด•เดฃเด•เตเด•เดฟเดจเต เดซเดฏเดฒเตเด•เตพ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดซเดฏเตฝ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเต เด’เดฐเต เดญเดพเดฐเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚ เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ. เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด‡เดคเต เด…เดฑเดฟเดฏเตเด•เดฏเตเด‚ เด‡เดคเต เดจเดฒเตเดฒเดคเดฒเตเดฒเต†เดจเตเดจเต เดธเดฎเตเดฎเดคเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต, เดŽเดจเตเดจเดพเตฝ เดคเดจเตเดฑเต† เดฒเดพเดชเตโ€ŒเดŸเต‹เดชเตเดชเดฟเตฝ เดทเต†เตผเดฒเต‹เด•เตเด•เดฟเดจเต†เด•เตเด•เดพเตพ 1000 เดฎเดŸเด™เตเด™เต เดตเต‡เด—เดคเดฏเตเดณเตเดณ เดฒเดฟเดธเตโ€Œเดฑเตเดฑเดฟเด‚เด—เต เด‰เดฃเตเดŸเต†เดจเตเดจเต เดชเดฐเดพเดฎเตผเดถเดฟเดšเตเดšเต. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด‡เดคเต เดžเด™เตเด™เดณเต† เดตเต‡เดฆเดจเดฟเดชเตเดชเดฟเดšเตเดšเต. เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด•เต‚เดŸเตเดคเตฝ เด†เดดเดคเตเดคเดฟเตฝ เดจเต‹เด•เตเด•เดฟ.

เด•เดพเดฐเดฃเด‚ ls เดจเดฒเตเดฒเดคเดพเดฏเดฟ เดคเต‹เดจเตเดจเตเดจเตเดจเต.

เด‡เดคเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดจเต‹เด•เตเด•เดฟ ls เด’เดฐเต เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ เดฒเดฟเดธเตโ€Œเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดˆ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเด•เตเด•เต เด‡เดคเตเดฐเดฏเดงเดฟเด•เด‚ เดธเดฎเดฏเดฎเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดคเตเด•เตŠเดฃเตเดŸเต. เดฎเดฟเด•เตเด• เด†เดงเตเดจเดฟเด• เดตเดฟเดคเดฐเดฃเด™เตเด™เดณเดฟเดฒเตเด‚ ls เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เด‡เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต ls --color=auto, เด•เดพเดฐเดฃเด‚ เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดจเดฟเดฑเด™เตเด™เตพ เด‡เดทเตเดŸเดฎเดพเดฃเต.

เดŽเดจเตเดจเดพเตฝ เดฎเดจเต‹เดนเดฐเดฎเดพเดฏ เดจเดฟเดฑเด™เตเด™เตพ เด’เดฐเต เดตเดฟเดฒเดฏเดฟเตฝ เดตเดฐเตเดจเตเดจเต: เด“เดฐเต‹ เดซเดฏเดฒเดฟเดจเตเด‚ ls เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดจเดฟเดฑเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดซเดฏเตฝ เดคเดฐเด‚, เด…เดคเดฟเดจเตเดฑเต† เด…เดจเตเดฎเดคเดฟเด•เตพ, เดซเตเดฒเดพเด—เตเด•เตพ, เดตเดฟเดชเตเดฒเต€เด•เตƒเดค เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเต† เด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเต‡เดŸเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดชเตเดฐเดถเตโ€Œเดจเดคเตเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเดฐเดฟเดนเดพเดฐเด‚ ls-เตฝ เดจเดฟเดฑเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดฐเต‹เดทเด‚ เดธเด™เตเด•เตฝเดชเตเดชเดฟเด•เตเด•เตเด•. เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚ เดจเดฟเด™เตเด™เตพ เด•เดณเตผ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดŽเดŸเตเดคเตเดคเตเด•เดณเดฏเดฐเตเดคเต, เดžเด™เตเด™เตพ เดฐเดพเด•เตเดทเดธเดจเตเดฎเดพเดฐเดฒเตเดฒ.

เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด•เต‚เดŸเตเดคเตฝ เด†เดดเดคเตเดคเดฟเตฝ เดจเต‹เด•เตเด•เดฟ. ls เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดตเดดเดฟเดฏเตเดณเตเดณ เดจเดฟเดฑเด™เตเด™เตพ LS_COLORS, เดเดคเต เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต dircolors(1) เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ dir_colors(5). เด…เดคเต†, เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ เด’เดฐเต เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต ls เดชเดฟเดจเตเดจเต€เดŸเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต (เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดซเดฏเดฒเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด…เดฑเดฟเดฏเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเดดเดฟ (เดšเต†เดฏเตเดฏเตเด•), เดคเตเดŸเตผเดจเตเดจเต 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() (เดจเดฎเตเดฎเตเดŸเต† เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เตพ เด…เดจเตเดตเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เตพ เด‡เดฒเตเดฒเดพเดคเตเดคเดคเดฟเดจเดพเตฝ เดŽเดฒเตเดฒเดพเด‚ เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต), 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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•