ááá±á·áá»áœááºá¯ááºááá¯á·ááẠSherlock á áá áºá¡ááœááºáá±á¬ááºáá¯á¶ážáá±á«áºááœááºážáá¶ááŸá¯áá»á¬ážá¡áá»áá¯á·á¡ááŒá±á¬ááºážááŒá±á¬ááá¯áá«ááẠ[áááºážáááºá áááºážááá¯á·ááºááá¹áááá¯ááºááŸá áœááºážáá±á¬ááºáááºááŒáá·áºáá¬ážáá±á¬á¡á á¯á¡áá±ážáá áºáá¯ááŒá áºááẠ- á¡áá®ážá ááºáá¯á¶ážááŒá áºáááºá trans.] ááẠááá¯ááºáá»á¬ážá á¬áááºážááœááºážááŒááºážááᯠáááááá¬áᬠá¡ááŸáááºááŒáŸáá·áºáá±ážáá±á¬ ááá¯ááºáá»á¬ážá á¬áááºážááœááºážááŸá¯ á¡áá»á¬ážá¡ááŒá¬ážááŒáá·áºá
áá¯á¶ááŸááºáá±á¬ááºážáá«ážáá»á¬ážááŸáá·áºááá°áá²á áááºážááẠáá»áœááºá¯ááºááá¯á·áá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážáá¯ááºáá±á¬ááºááá¯ááºááẠSherlock ááœáẠáá»áœááºá¯ááºááá¯á·áá¯á¶ááŸááºáá¯ááºáá±á¬ááºáá¯á¶ááŸáá·áºáááºáááºá á¡ááœááºážáá°áá¡á á®áááºáá¶á á¬áá áºáá¯áááºááá¯áá«áááºá áá±á¬ááºááœáẠá€áá²á·ááá¯á·áá±á¬ áá±á¬ááºážáá«ážáá»á¬áž áá¯ááºáá±ááá¯ááºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
ááá¯ááºáá»á¬ážá áœá¬ááᯠá á¬áááºážááŒá¯á á¯ááŒááºážááẠá¡áá»áááºááŒá¬ááŒáá·áºáááºá
áááºážááẠáá¯á¶ážá
áœá²áá°áá
áºáŠážáá¶á០áááºážááá¬ááá¯ááºáᬠáá¶á·ááá¯ážááŸá¯áá±ážááœááºážáá
áºáá¯ááŒáá·áº á
áááºáá²á·áááºá áá±áááºá
á®áááºááŒááºážáá¶ááá±á¬ ááŒá¿áá¬ááᯠááááºážááá¯á·áááºá ls
ááá·áºááœááºážááŸá¯ 15 áá»á±á¬áºááŸááá±á¬ áááºážááœáŸááºáá
áºáá¯ááœáẠáááá
áºá¡áááºážáááºááŒá¬áááºá $SCRATCH
[áá¬áá®ááá¯ááºáá»á¬ážá¡ááœááºáááºážááœáŸáẠ- á¡áá®ážá
ááºáá¯á¶ážá áááºážááœá¬áž]á
áááºážááŒá±á¬ááºážáá
áºáá¯ááŸá áá±á¬ááºáá±á«ááºážáá»á¬ážá
áœá¬áá±á¬ ááá¯ááºáá»á¬ážááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááá¯ááºá
áá
áºá¡ááœáẠáááºáá¯ááºáááºááá¯ážááŒá
áºá
á±ááŒá®áž áá¯á¶ážáááá±á¬ááºáá¶áá«á áá¯á¶ážá
áœá²áá°á áá«ááᯠááááŒá®áž ááá±á¬ááºážááŒá±á¬ááºáž áááºáá¶áá²á·áá±ááá·áº á
á¬áááºážá Sherlock ááẠáá°á·áááºááºáá±á¬á·ááŸá¬ á¡á áááá ááá¯ááŒááºáááºááá¯á· áá±á¬áºááŒáá²á·áá«áááºá áá¯ááºáá«áááºá áá«á áá»áœááºáá±á¬áºááá¯á·ááᯠááááá¯ááºá
á±áá«áááºá áá«ááŒá±á¬áá·áº áááºáááºáá²áá²ááŒáá·áºáááºá
áá¬ááá¯á·áá² ááá¯áá±á¬á· ááŒáá·áºááᬠááŸáááºá
ááááºáá¯ááºáá²á·áá¬ááœá±ááᯠáá»áœááºáá±á¬áºááá¯á· ááŒáá·áºááŒá®ážáá«ááŒá®á ls
áááºážááœáŸááºáá
áºáá¯á
á¬áááºážááœááºážáá±á¬á¡áá«á áá¯ááºáááºážá
ááºááẠá¡áááºááŒá±á¬áá·áº á€áá»áŸááŒá¬ááŒá¬ááŒá¬ááááºážá áá±ááºáá®ááŒáá·áºááŒá°ážááŸá¯á¡áá»á¬ážá
á¯ááœáẠls
áá¯á¶ááŸááºá¡á¬ážááŒáá·áº áááºážááẠá¡áá¯ááºáá¯ááºáááºá ls --color=auto
áá¬ááá¯á·áá²ááá¯áá±á¬á· áá°ááá¯ááºážá á¡áá±á¬ááºááœá±ááᯠááŒáá¯ááºááŒáááºá
ááá¯á·áá±á¬áº ááŸááá±á¬á¡áá±á¬ááºáá»á¬ážááẠááá¯ááºááá¯ááºážá¡ááœáẠá
á»á±ážááŸá¯ááºážáá
áºáá¯ááŒá
áºáááºá ls
ááá·áºáá»á±á¬áºáá±á¬á¡áá±á¬ááºááá¯ááœá±ážáá»ááºáááºá¡ááœáẠááá¯ááºá¡áá»áá¯ážá¡á
á¬ážá áááºážáááœáá·áºááŒá¯áá»ááºáá»á¬ážá á¡áá¶áá»á¬ážá ááá¯ážáá»á²á·áá¬ážáá±á¬ á¡áááºá¡áá»ááºážáá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááᯠááá°ááá«áááºá
ááŒá¿áá¬á¡ááœáẠááá¯ážááŸááºážáá±á¬ ááŒá±ááŸááºážáá»ááºáá áºáá¯ááŸá¬ ls ááœáẠá¡áá±á¬ááºá¡á¬ážáá¯á¶ážááᯠááááºáá¬ážáááºááŒá áºáá±á¬áºáááºáž áá¯á¶ážá áœá²áá°áá»á¬ážá áá±á«áááᯠááœá±ážááŒáá·áºáá«á áááºááá¯á¡ááŒá±á¡áá±áá»áá¯ážááŸá¬á០á¡áá±á¬ááºááœááºááŸáááŸá¯ááᯠáááºáá¯ááºááá·áºáááºá áá«ááá¯á·á áá®áá°ážááœá±ááá¯ááºáá°ážá
á¡á²áá®áá±á¬á· ááá¯áááºáá²áá¬áááºá ls
áááºáááºážáá»áẠvariable ááŸáá
áºááá·áº á¡áá±á¬ááºáá»á¬áž ááá·áºááœááºážááŸá¯áá»á¬áž LS_COLORS
áááºááŸááºáá¬ážáá±á¬á dircolors(1)
configuration file ááá¯á¡ááŒá±áá¶áááºá 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
terminal ááŸáá·áº ááá»áááºáááºááá·áºá¡áá« (á¥ááᬠááá¯ááºááŒáá·áº ááá¯á·ááá¯áẠá¡ááœááºááŒááºááœáŸááºážááŸá¯ááŒáá·áº) ááŸáá·áº áááºááŸááºáá¬ážáá«á á¡áá±á¬ááºááŒááºááŒááºážááᯠááááºáááº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()
áá¯ááºážáá±á«áºááá¯á áááááá getxattr()
(áá»áœááºá¯ááºááá¯á·ááááºáááºážáá»ááºááœáẠls ááŸá¬ááœá±áá±áá±á¬ attribute áá»á¬ážáááŸááá±á¬ááŒá±á¬áá·áº áá»ááºááœááºáááº) áá±á«áºááá¯ááŸá¯ 10á capget()
.
áá±áá»á¬áá¬ááá±á¬á· áá«ááᯠoptimize áá¯ááºááá¯á·ááááºá
á áœááºážáá±á¬ááºááẠáááºááœáŸááºážáá»ááºá ááá¯ááºáá°áž
á¡ááŒá¶áá¬ááºááᯠááá¯ááºáá¬áááºá
$ 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:
áááºážááẠdefault á¡áá±ááŒáá·áº built-in áá±áá¬áá±á·á
áºááá¯á¡áá¯á¶ážááŒá¯ááŒá®ážá¡áá±á¬ááºáá»á¬ážááá¯áááºáááºá¡áá¯á¶ážááŒá¯áááºá ááá¯á·ááŒá±á¬áá·áº áááºááẠááá¯ááºá¡áá»áá¯ážá¡á
á¬ážáá
áºáá¯á¡ááœáẠá¡áá±á¬ááºááŒááºááŒááºážááᯠááááºááá¯áá«áá áááºážááᯠá¡á
á¬ážááá¯ážááẠááá¯á¡ááºáááºá <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
áááŸáááŒááºážááŒá±á¬áá·áº á¡á áá á¡ááŸáááºááᯠááá¯ááá¯áááºá setuid
/ setgid
ááŸáá·áºáá±á¬ááºá
á¯á¶ executable ááá¯ááºáá»á¬ážá áá®áá±á¬áẠáá¯á¶ážááŸá¯á¶ážááŸá¯ááŒá®áž ááá¯ááºáá°ážá
áá¯ááºáá«áááºá áááºážááᯠá¡áá¯á¶ážááŒá¯áá°ááá¯ááºážá¡ááœáẠSherlock ááœáẠááá¯ááŒááºáááºáá¬ážáá«áááºá
áá«áá±ááá·áº á¡áá±á¬ááºááŒááºáá¬ááᯠááŒááºááá¯áá»ááºáááºá áá¯á¶ááŸááºáááºáááºááœá±ááᯠááá¯ážááá¯ážááŒááºááœá¬ážááá¯ááºáá«áááºá
$ unset LS_COLORS
áá«áá±ááá·áº ááá¯ááºááœá± á¡áá»á¬ážááŒá®ážááŸááá²á· áááºážááœáŸááºááŸá¬ á¡áá¯ááºáá¯ááºáá±áá»áááºááŸá¬ áá±á¬áºáá®áá»á±á¬áºááá¯á· áá±áá»á¬áá«á
á±á ls
.
source: www.habr.com