ื•ื•ืขืŸ ืึท ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืกืคึผื™ื“ื– ื“ืขื ืคึผืจืึธืฆืขืก ืžื™ื˜ 40 ืžืืœ

ื”ื™ื™ึทื ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืฆื• ืจืขื“ืŸ ื•ื•ืขื’ืŸ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืœืขืฆื˜ืข ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื•ื ื’ืขืŸ ืฆื• ื“ื™ ืฉืขืจืœืึทืง ืกื™ืกื˜ืขื [ื“ืึธืก ืื™ื– ืึท ื”ื•ื™ืš-ืคืึธืจืฉื˜ืขืœื•ื ื’ ืงื ื•ื™ืœ ืื™ืŸ ืกื˜ืึทื ืคึฟืึธืจื“ ืื•ื ื™ื•ื•ืขืจืกื™ื˜ืขื˜ - ื‘ืขืขืจืขืš. ื˜ืจืึทื ืก.], ื•ื•ืึธืก ื‘ืื˜ื™ื™ื˜ื™ืง ืคืึทืจื’ื™ื›ืขืจืŸ ืœื™ืกื˜ื™ื ื’ ื˜ืขืงืขืก ืื™ืŸ ื“ื™ืจืขืงื˜ืขืจื™ื– ืžื™ื˜ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ืื™ื™ื ืกืŸ.

ื ื™ื˜ ืขื ืœืขืš ืจืขื’ื•ืœืขืจ ืึทืจื˜ื™ืงืœืขืŸ, ื“ืึธืก ืื™ื– ืžืขืจ ืึทืŸ ื™ื ืกื™ื“ืขืจ ืก ื‘ืึทืจื™ื›ื˜ ื•ื•ืขื’ืŸ ื•ื•ื™ ืžื™ืจ ืงืขืกื™ื™ื“ืขืจ ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ืฉืขืจืœืึทืง ืฆื• ื”ืึทืœื˜ืŸ ืขืก ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ื–ื™ื™ืŸ ื‘ืขืกื˜ืขืจ ืคึฟืึทืจ ืื•ื ื“ื–ืขืจ ื™ื•ื–ืขืจื–. ืžื™ืจ ื”ืึธืคืŸ ืฆื• ืึทืจื•ื™ืกื’ืขื‘ืŸ ืžืขืจ ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ื™ ื“ืขื ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜.

ืœื™ืกื˜ื™ื ื’ ืคื™ืœืข ื˜ืขืงืขืก ื ืขืžื˜ ืฆื™ื™ื˜

ืขืก ืึทืœืข ืกื˜ืึทืจื˜ืขื“ ืžื™ื˜ ืึท ื˜ืขื›ื ื™ืฉ ืฉื˜ื™ืฆืŸ ืงืฉื™ื ืคื•ืŸ ืึท ื‘ืึทื ื™ืฆืขืจ. ืขืจ ื’ืขืžืืœื“ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื ืึทื– ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ls ืขืก ื ืขืžื˜ ืึท ื‘ื™ืกืœ ืžื™ื ื•ื˜ ืื™ืŸ ืึท ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ื˜ ืื™ื‘ืขืจ 15 ืื™ื™ื ืกืŸ $SCRATCH [ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืคึฟืึทืจ ืฆื™ื™ึทื˜ื•ื•ื™ื™ึทืœื™ืง ื˜ืขืงืขืก - ืึทืคึผืคึผืจืึธืงืก. ืœื™ื ื™ืข].

ื˜ื•ื™ื–ื ื˜ืขืจ ืคื•ืŸ ื˜ืขืงืขืก ืื™ืŸ ืื™ื™ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืฉื˜ืขืœืŸ ืึท ืžืึทืกืข ืฆื• ื“ื™ ื˜ืขืงืข ืกื™ืกื˜ืขื ืื•ืŸ ืื™ื– ื‘ืืฉื˜ื™ืžื˜ ื ื™ืฉื˜ ืจืขืงืึทืžืขื ื“ื™ื“. ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ื”ืึธื˜ ื“ืึธืก ื’ืขื•ื•ืื•ืกื˜ ืื•ืŸ ืึทื“ืžื™ื˜ืึทื“ ืึทื– ืขืก ืื™ื– ื ื™ืฉื˜ ื’ื•ื˜, ืึธื‘ืขืจ ื“ืขืจืžืื ื˜ ืึทื– ื“ื™ ืœื™ืกื˜ื™ื ื’ ืื™ื– 1000 ืžืืœ ืคืึทืกื˜ืขืจ ืื•ื™ืฃ ื–ื™ื™ืŸ ืœืึทืคึผื˜ืึทืคึผ ื•ื•ื™ ืฉืขืจืœืึทืง. ื“ืึธืš, ื“ืึธืก ื”ืึธื˜ ืื•ื ื“ื– ืฉืึทื˜ืŸ. ืื–ื•ื™ ื”ืื‘ืŸ ืžื™ืจ ื’ืขืงื•ืงื˜ ื˜ื™ืคืขืจ.

ื•ื•ื™ื™ึทืœ ืขืก ืงื•ืงื˜ ืคื™ื™ึทืŸ

ืžื™ืจ ื’ืขืงื•ืงื˜ ืื™ืŸ ื•ื•ืึธืก ืขืก ื˜ืึทืงืข ื˜ื•ื˜ ls ื•ื•ืขืŸ ืœื™ืกื˜ื™ื ื’ ืึท ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ, ืื•ืŸ ื•ื•ืึธืก ื“ืขืจ ืคึผืจืึธืฆืขืก ื ืขืžื˜ ืึทื–ื•ื™ ืœืึทื ื’. ืื•ื™ืฃ ืจื•ื‘ึฟ ืžืึธื“ืขืจืŸ ื“ื™ืกื˜ืจื™ื‘ื™ื•ืฉืึทื ื– ls ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืขืก ืœื•ื™ืคื˜ ื•ื•ื™ ls --color=auto, ื•ื•ื™ื™ึทืœ ืึทืœืขืžืขืŸ ืœื™ื™ืงืก ื“ื™ ืคืืจื‘ืŸ.

ืึธื‘ืขืจ ืฉื™ื™ืŸ ืคืืจื‘ืŸ ื”ืึธื‘ืŸ ืึท ืคึผืจื™ื™ึทื–: ืคึฟืึทืจ ื™ืขื“ืขืจ ื˜ืขืงืข ls ืžื•ื–ืŸ ืงืจื™ื’ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ืขืจ ื˜ืขืงืข ื˜ื™ืคึผ, ื–ื™ื™ึทืŸ ืคึผืขืจืžื™ืฉืึทื ื–, ืคืœืึทื’ืก, ืขืงืกื˜ืขื ื“ืขื“ ืึทื˜ืจื™ื‘ื™ื•ืฅ ืื•ืŸ ื“ื™ ื•ื•ื™ ืฆื• ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ื“ื™ ืฆื•ื ืขืžืขืŸ ืงืึธืœื™ืจ.

ืื™ื™ืŸ ืคึผืฉื•ื˜ ืœื™ื™ื–ื•ื ื’ ืฆื• ื“ืขื ืคึผืจืึธื‘ืœืขื ืื™ื– ืฆื• ื“ื™ืกื™ื™ื‘ืึทืœ ืงืึธืœื™ืจ ืื™ืŸ LS ื‘ืขืกืึทื›ืึทืงืœ, ืึธื‘ืขืจ ื™ืžืึทื“ื–ืฉืึทืŸ ื“ื™ ืกืงืึทื ื“ืึทืœ ืคื•ืŸ ื™ื•ื–ืขืจื–. ืื™ืŸ ืงื™ื™ืŸ ืฆื•ืฉื˜ืื ื“ืŸ ื–ืึธืœ ืื™ืจ ื ืขืžืขืŸ ืึทื•ื•ืขืง ื“ื™ ืงืึธืœื™ืจ ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืžืึธื ืกื˜ืขืจืก.

ืื–ื•ื™ ื”ืื‘ืŸ ืžื™ืจ ื’ืขืงื•ืงื˜ ื˜ื™ืคืขืจ. ls ืคืืจื‘ืŸ ืื™ื™ื ืกืŸ ื“ื•ืจืš ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง LS_COLORS, ื•ื•ืึธืก ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ dircolors(1) ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข dir_colors(5)... ื™ื, ื“ื™ ืขืงืกืขืงื•ื˜ืึทื‘ืœืข ืœื™ื™ืขื ื˜ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ืฆื• ืฉืึทืคึฟืŸ ืึท ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื•ื•ืขืจื™ืึทื‘ืึทืœ, ื•ื•ืึธืก ื“ืขืžืึธืœื˜ ื ื™ืฆื˜ (ืื•ืŸ ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื•ื•ื™ืกืŸ ื•ื•ืขื’ืŸ ื˜ืขืงืขืก ื˜ื™ืจ (ื˜ืึธืŸ), ื“ืขืžืึธืœื˜ ื“ื™ืจ_ืงืึธืœืึธืจืก ืขืก ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ, ื˜ืจืึธืฅ ืึทืœืฅ).

ื–ืืœ ืก ื ืขืžืขืŸ ืึท ื ืขืขื ื˜ืขืจ ืงื•ืง

ืฆื• ื‘ืึทืฉืœื™ืกืŸ ื•ื•ืึธืก ืงืึธืœื™ืจ ืกื›ืขืžืข ื– ื“ื™ ืกืœืึธื•ื“ืึทื•ืŸ, ืžื™ืจ ื‘ืืฉืืคืŸ ืึทืŸ ื™ืงืกืคึผืขืจืžืขื ืึทืœ ืกื•ื•ื™ื•ื•ืข:

$ 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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’