Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π°ΠΏΠ΄Π΅ΠΉΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΡ Sherlock [ΡΡΠΎ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Π‘ΡΡΠ½ΡΠΎΡΠ΄ΡΠΊΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°Β β ΠΏΡΠΈΠΌ. ΠΏΠ΅Ρ.], ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΡΡΡ Π»ΠΈΡΡΠΈΠ½Π³ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΠ°ΡΠ΅ΠΉ, ΡΡΠΎ ΡΠΊΠΎΡΠ΅Π΅ ΠΈΠ½ΡΠ°ΠΉΠ΄Π΅ΡΡΠΊΠΈΠΉ ΠΎΡΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Π½Π°Π΄ Sherlock, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°ΠΈΠ»ΡΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ Π΄Π»Ρ Π½Π°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ°Π΄Π΅Π΅ΠΌΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°ΠΊΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ.
ΠΠΈΡΡΠΈΠ½Π³ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ
ΠΡΡ Π½Π°ΡΠ°Π»ΠΎΡΡ Ρ Π²ΠΎΠΏΡΠΎΡΠ° Π² ΡΠ΅Ρ
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ½ ΡΠΎΠΎΠ±ΡΠΈΠ» ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ls
Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ c Π±ΠΎΠ»Π΅Π΅ 15Β 000 Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² $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Β 000 ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ.
ΠΡΡΠ°ΡΠΈ, Π½ΡΠΆΠ΅Π½ ΡΠ»Π°Π³
--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 000 Π²ΡΠ·ΠΎΠ²ΠΎΠ² lstat()
, 10Β 000 Π²ΡΠ·ΠΎΠ²ΠΎΠ² getxattr()
(ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ΅ ΡΠ΅ΡΠΏΡΡ Π½Π΅ΡΠ΄Π°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² Π½Π°ΡΠ΅ΠΉ ΡΡΠ΅Π΄Π΅ Π½Π΅Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠ΅Ρ ls), 10Β 000 Π²ΡΠ·ΠΎΠ²ΠΎΠ² capget()
.
ΠΠ°Π²Π΅ΡΠ½ΡΠΊΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΡΡΠΈΠ±ΡΡ capabilities? ΠΠ΅Π°
Π‘Π»Π΅Π΄ΡΡ ΡΠΎΠ²Π΅ΡΠ°ΠΌ
$ 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 000 ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ΅ΠΊΠΎΡΠ΄.
ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Sherlock
ΠΡ 13 ΡΠ΅ΠΊΡΠ½Π΄ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΠΎ 0,3Β ΡΠ΅ΠΊΡΠ½Π΄Ρ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ LS_COLORS
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ 40-ΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ setuid
Β / setgid
ΠΈ ΡΠ°ΡΠΊΡΠ°ΡΠ΅Π½Π½ΡΡ
ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠ΅ ΡΠ°ΠΊΠ°Ρ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΏΠΎΡΠ΅ΡΡ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ Π² Sherlock Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²Π΅ΡΠ½ΡΡΡ ΡΠ°ΡΠΊΡΠ°ΡΠΊΡ, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
$ unset LS_COLORS
ΠΠΎ ΡΠΎΠ³Π΄Π° Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ
Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π²Π°ΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΊΠΎΡΠ΅, ΠΏΠΎΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ls
.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com