αααααααααΎαα αααα·ααΆαα’αααΈααΆαα’αΆαααααα α»αααααααααα»ααα½αα ααα½αα αααααααααααα Sherlock [αααααΊααΆα ααααααααααΆαααααα·αααααΆαααααααα ααΆαααα·ααααΆααα Stanford - αααα αΆαααααα ααα trans.] ααααααααΎαααααΏαααΆαα α»ααααααΈα―αααΆααα αααα»ααααααααΆαα ααα½αααΆαα»α αααΎαα
αα·αααΌα α’αααααααααααΆαα αααααΊααΆαααΆαααΆαααααααα’αααααΆααααα»ααααααααααα’αααΈαααααααααΎαααααΎααΆαααΆαααααΆαααα ααΎ Sherlock ααΎααααΈαααααΆααΆα±ααααααΎαααΆαααα’αααα»ααααααΆααα’αααααααΎααααΆααααααααΎαα ααΎααααααΉαααΆααΉαααααα»αααα’ααααααααααααααααααααααΆαααα’ααΆααα
ααΆαα α»ααααααΈα―αααΆαααΆα αααΎαααααΌαααΆααααααααΆ
ααΆααΆααα’ααααΆαα
αΆααααααΎαααΆαα½αααΉααααα½ααααα½ααα
αα
αααααααΈα’αααααααΎααααΆααα ααΆααααΆαααΆαααΆαααααΈαααα αΆαααααΆααααα αΆαααΈαα·α ls
α
αααΆααααααΈαααΈααΆααΈαα
αααα»ααααααααΆαααΆαα»ααΆα 15 $SCRATCH
[ααα―αααΆαααααααα’αΆαααα - αααα αΆαααααα ααα ααααΌα] α
α―αααΆαααΆααααΆαααα
αααα»ααααα½αααΆααααααΆααααααααα»ααααααααααααα―αααΆα α αΎααα·αααΆαα·αααααΌαααΆαααααΆαααα α’αααααααΎααααΆααααΆαααΉαααΏαααα α αΎαααΆαααΆαααΆαααΆααΆαα·αααα’ ααα»ααααααΆααα·ααΆαααΆ ααΆαα
α»ααααααΈαααααΊααΏαααΆα 1000 αααα
ααΎαα»αααααΌααααα½αααααααααΆααααΆα Sherlock α ααΆααΆααα·αααΆαα αααααααΎα±ααααΎαααΊα
αΆααα ααΌα
ααααβααΎαβααΆαβααΎαβααΆααααβαααα
α
αααααΆααα ls ααΎααα αααααααα’αΆα
ααΎαβααΆαβααΎαβαα
βααΎβα’αααΈβαααβααΆβαα·αβααΆβααααΎ 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
[...]
Wow: 10 α α
lstat()
, 10 α α
getxattr()
(αααααΆααα’αααααΆααααααααΆαααααα·ααααΆαααααααΎααα·αααΆααα»αααααααααα ls αααα»αααααααα) ααΆαα α
ααΌααααααα
ααα½α 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
α’αΈαααΆ αααααΎαααααΏαααααα
α¨ αα·ααΆααΈ! ααΎαβααΆαβαα»αβα
ααβααΆαβα α
βααΌαααααβαααααβααΆααβαααα 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 αααααΆαααααααααΆαα½αα
ααΆαααα‘αΎα Sherlock
ααΈ 13 αα·ααΆααΈααΆαα½αααΉαααΆααααααααααΆαααΎαααα 0,3 αα·ααΆααΈααΆαα½αααΉαααΆααααααααΌααα·α
αα½α
LS_COLORS
ααΆααααααΆααΆααααααΎαααααΏα 40 αααααααΆαααα’ααααααΆα setuid
/ setgid
αα·αα―αααΆααααα’αΆα
ααααα·ααααα·ααΆααααα αα·ααααααΆααΆαααΆααααααααααααααα
ααΆααΆααα·αααΆαα α₯α‘αΌααααααΆααααΌαααΆαααααααα ααΆαααααααααα αααα»α Sherlock αααααΆααα’αααααααΎααααΆααααααΆαααα
ααα»ααααααααα·αααΎα’αααα αααααα‘ααααααα·α α’αααααααΆααααα’αΆα αααα‘αααα ααΆααααααααααΆαααΎααα·αα
$ unset LS_COLORS
ααα»αααααααααΆαααααα
ααΎαααααααΆαα―αααΆαα
αααΎα ααααΌαααααΆααααΆαααΆαααΆα ααααααααααααααΆαααα»αααααΎαααΆα ls
.
ααααα: www.habr.com