แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก 40-แƒฏแƒ”แƒ 

แƒ“แƒฆแƒ”แƒก แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒแƒ— แƒจแƒ”แƒ แƒšแƒแƒ™แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒฃแƒแƒฎแƒšแƒ”แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ–แƒ” [แƒ”แƒก แƒแƒ แƒ˜แƒก แƒกแƒขแƒ”แƒœแƒคแƒแƒ แƒ“แƒ˜แƒก แƒฃแƒœแƒ˜แƒ•แƒ”แƒ แƒกแƒ˜แƒขแƒ”แƒขแƒ˜แƒก แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜แƒก แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜ - แƒ“แƒแƒแƒฎแƒš. trans.], แƒ แƒแƒช แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒ— แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒ—.

แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒ”แƒก แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒแƒ“ แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒกแƒแƒ˜แƒ“แƒ”แƒ แƒ˜แƒก แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ— แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒแƒ“ Sherlock-แƒ–แƒ”, แƒ แƒแƒ—แƒ แƒ˜แƒก แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ”แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ•แƒ˜แƒ›แƒ”แƒ“แƒแƒ•แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ’แƒแƒ›แƒแƒ•แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ— แƒ›แƒกแƒ’แƒแƒ•แƒก แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒก.

แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒฉแƒแƒ›แƒแƒ—แƒ•แƒšแƒแƒก แƒ“แƒ แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ

แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒ— แƒ“แƒแƒ˜แƒฌแƒงแƒ. แƒ›แƒแƒœ แƒ›แƒแƒแƒฎแƒกแƒ”แƒœแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ› แƒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ ls แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒฃแƒ—แƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ 15-แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒ— $SCRATCH [แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ - แƒ“แƒแƒแƒฎแƒš. แƒจแƒ”แƒกแƒแƒฎแƒ•แƒ”แƒ•แƒ˜].

แƒแƒ—แƒแƒกแƒแƒ‘แƒ˜แƒ— แƒคแƒแƒ˜แƒšแƒ˜ แƒ”แƒ แƒ— แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒแƒ›แƒซแƒ˜แƒ›แƒ”แƒ‘แƒก แƒคแƒแƒ˜แƒšแƒฃแƒ  แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก แƒ“แƒ แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜. แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ›แƒ แƒ˜แƒชแƒแƒ“แƒ แƒ”แƒก แƒ“แƒ แƒแƒฆแƒ˜แƒแƒ แƒ, แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒ˜แƒงแƒ แƒ™แƒแƒ แƒ’แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฆแƒœแƒ˜แƒจแƒœแƒ, แƒ แƒแƒ› แƒกแƒ˜แƒ แƒ›แƒ˜แƒก แƒšแƒ”แƒžแƒขแƒแƒžแƒ–แƒ” 1000-แƒฏแƒ”แƒ  แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ˜แƒงแƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒจแƒ”แƒ แƒšแƒแƒ™แƒ˜. แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒแƒ›แƒแƒœ แƒ“แƒแƒ’แƒ•แƒแƒ–แƒแƒ แƒแƒšแƒ. แƒแƒกแƒ” แƒฃแƒคแƒ แƒ แƒฆแƒ แƒ›แƒแƒ“ แƒฉแƒแƒ•แƒ˜แƒฎแƒ”แƒ“แƒ”แƒ—.

แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› แƒšแƒแƒ›แƒแƒ–แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒ”แƒ— แƒ แƒแƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒ˜แƒก แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜ 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 แƒ“แƒ แƒคแƒ”แƒ แƒแƒ“แƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ“แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜. แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒแƒœแƒแƒ™แƒแƒ แƒ’แƒ˜แƒ.

แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ”แƒก แƒแƒฎแƒšแƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒจแƒ”แƒ แƒšแƒแƒ™แƒจแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒจแƒ”แƒฆแƒ”แƒ‘แƒ•แƒ˜แƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ— แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ• แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒก:

$ unset LS_COLORS

แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜, แƒกแƒแƒ“แƒแƒช แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒ, แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒ›แƒแƒฎแƒแƒ แƒจแƒ”แƒ— แƒงแƒแƒ•แƒ, แƒกแƒแƒœแƒแƒ› แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก ls.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ