ืืืึทื ื ืืืจ ืืืขืื ืฆื ืจืขืื ืืืขืื ืขืืืขืืข ืคืื โโโโืื ืืขืฆืืข ืืขืจืืืึทื ืืืงืื ืืขื ืฆื ืื ืฉืขืจืืึทืง ืกืืกืืขื [ืืึธืก ืืื ืึท ืืืื-ืคืึธืจืฉืืขืืื ื ืงื ืืื ืืื ืกืืึทื ืคึฟืึธืจื ืืื ืืืืขืจืกืืืขื - ืืขืขืจืขื. ืืจืึทื ืก.], ืืืึธืก ืืืืืืืืง ืคืึทืจืืืืขืจื ืืืกืืื ื ืืขืงืขืก ืืื ืืืจืขืงืืขืจืื ืืื ืึท ืืจืืืก ื ืืืขืจ ืคืื ืืืื ืกื.
ื ืื ืขื ืืขื ืจืขืืืืขืจ ืึทืจืืืงืืขื, ืืึธืก ืืื ืืขืจ ืึทื ืื ืกืืืขืจ ืก ืืึทืจืืื ืืืขืื ืืื ืืืจ ืงืขืกืืืืขืจ ืึทืจืืขืื ืืืืฃ ืฉืขืจืืึทืง ืฆื ืืึทืืื ืขืก ืคืืืกื ืืืง ืืื ืืืื ืืขืกืืขืจ ืคึฟืึทืจ ืืื ืืืขืจ ืืืืขืจื. ืืืจ ืืึธืคื ืฆื ืึทืจืืืกืืขืื ืืขืจ ืึทืจืืืงืืขื ืืื ืืขื ืืื ืืขืจ ืฆืืงืื ืคึฟื.
ืืืกืืื ื ืคืืืข ืืขืงืขืก ื ืขืื ืฆืืื
ืขืก ืึทืืข ืกืืึทืจืืขื ืืื ืึท ืืขืื ืืฉ ืฉืืืฆื ืงืฉืื ืคืื ืึท ืืึทื ืืฆืขืจ. ืขืจ ืืขืืืืื ืื ืคึผืจืึธืืืขื ืึทื ืื ืืืจืืคืืจืื ื 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()
.
ืฉืืจืื ืืึธืก ืงืขื ืขื ืืืื ืึธืคึผืืืืืืขื.
ืงืืืคึผืึทืืืืึทืืื ืึทืืจืืืืื? ื ืืื
ื ืึธื ืขืฆื
$ 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:'
ืืขื ืืืื: ืืึธื ื ืื ืงืึธืืืจ ืืขืงืขืก ืืืื ืึทืืจืืืืื.
, ื ืื ืืืจื
ืืืจ ืืืืงืืึทื ืึทืจืืืฃ 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