рдЬрдм рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд▓реЗ 40 рдЧреБрдгрд╛рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдЧрддрд┐ рджрд┐рдиреНрдЫ

рдЖрдЬ рд╣рд╛рдореА рд╢реЗрд░реНрд▓рдХ рдкреНрд░рдгрд╛рд▓реАрдХрд╛ рдХреЗрд╣реА рдирдпрд╛рдБ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ [рдпреЛ рд╕реНрдЯреНрдпрд╛рдирдлреЛрд░реНрдб рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдпрдорд╛ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдХреНрд▓рд╕реНрдЯрд░ рд╣реЛ - рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдиреНрд╕ред], рдЬрд╕рд▓реЗ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВрдХреЛ рд╕рд╛рде рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВрдорд╛ рдлрд╛рдИрд▓рд╣рд░реВ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЧрддрд┐ рджрд┐рдиреНрдЫред

рдирд┐рдпрдорд┐рдд рд▓реЗрдЦрд╣рд░реВ рднрдиреНрджрд╛ рдлрд░рдХ, рдпреЛ рд╣рд╛рдореНрд░рд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдпрд╕рд▓рд╛рдИ рдЙрддреНрдХреГрд╖реНрдЯ рд░реВрдкрдорд╛ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдХрд╕рд░реА рдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ Sherlock рдорд╛ рдХрд╛рдо рдЧрд░реНрдЫреМрдВ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рднрд┐рддреНрд░реА рд░рд┐рдкреЛрд░реНрдЯ рд╣реЛред рдЖрдЧрд╛рдореА рджрд┐рдирдорд╛ рдкрдирд┐ рдпрд╕реНрддреИ рд▓реЗрдЦрд╣рд░реБ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреЗ рдЖрд╢рд╛ рд░рд╛рдЦреЗрдХрд╛ рдЫреМрдВ ред

рдзреЗрд░реИ рдлрд╛рдЗрд▓рд╣рд░реВ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрди рд╕рдордп рд▓рд╛рдЧреНрдЫ

рдпреЛ рд╕рдмреИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдмрд╛рдЯ рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╕рдорд░реНрдерди рдкреНрд░рд╢реНрдирдХреЛ рд╕рд╛рде рд╕реБрд░реБ рднрдпреЛред рдЙрдирд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдорд╛ рд╕рдорд╕реНрдпрд╛ рднрдПрдХреЛ рдмрддрд╛рдП ls 15 рднрдиреНрджрд╛ рдмрдвреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ рднрдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдХреЗрд╣реА рдорд┐рдиреЗрдЯ рд▓рд╛рдЧреНрдЫ $SCRATCH [рдЕрд╕реНрдерд╛рдпреА рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ - рд▓рдЧрднрдЧред рд▓реЗрди]ред

рдПрдХ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рд╣рдЬрд╛рд░реМрдВ рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдмреЛрдЭ рдмрдирд╛рдЙрдБрдЫрдиреН рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдпреЛ рдерд╛рд╣рд╛ рдкрд╛рдП рд░ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реЗ рдХрд┐ рдпреЛ рд░рд╛рдореНрд░реЛ рдерд┐рдПрди, рддрд░ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗ рдХрд┐ рд╕реВрдЪреА рдЙрдирдХреЛ рд▓реНрдпрд╛рдкрдЯрдкрдорд╛ рд╢реЗрд░реНрд▓рдХ рднрдиреНрджрд╛ 1000 рдЧреБрдгрд╛ рдЫрд┐рдЯреЛ рдерд┐рдпреЛред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдЪреЛрдЯ рдкреБрд░реНрдпрд╛рдпреЛред рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдЧрд╣рд┐рд░рд┐рдПрд░ рд╣реЗрд░реНрдпреМрдВред

рдХрд┐рдирднрдиреЗ ls рд░рд╛рдореНрд░реЛ рджреЗрдЦрд┐рдиреНрдЫред

рд╣рд╛рдореАрд▓реЗ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХреЗ рдЧрд░реНрдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдпреМрдВ ls рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрджрд╛, рд░ рдХрд┐рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрддрд┐ рд▓рд╛рдореЛ рд▓рд╛рдЧреНрдЫред рдзреЗрд░реИ рдЖрдзреБрдирд┐рдХ рд╡рд┐рддрд░рдг рдорд╛ ls рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдпреЛ рд░реВрдкрдорд╛ рдЪрд▓реНрдЫ ls --color=auto, рдХрд┐рдирдХрд┐ рд╕рдмреИрд▓рд╛рдИ рд░рдВрдЧ рдорди рдкрд░реНрдЫред

рддрд░ рд╕реБрдиреНрджрд░ рд░рдВрдЧрд╣рд░реВ рдореВрд▓реНрдпрдорд╛ рдЖрдЙрдБрдЫрдиреН: рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓рдХреЛ рд▓рд╛рдЧрд┐ ls рдЙрдкрдпреБрдХреНрдд рд░рдЩ рдЪрдпрди рдЧрд░реНрди рдлрд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░, рдпрд╕рдХреЛ рдЕрдиреБрдорддрд┐, рдЭрдгреНрдбрд╛, рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ рд░ рдЬрд╕реНрддреИ рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдЫред

рд╕рдорд╕реНрдпрд╛рдХреЛ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рднрдиреЗрдХреЛ ls рдорд╛ рд░рдВрдЧрд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЕрд╕рдХреНрд╖рдо рдкрд╛рд░реНрдиреБ рд╣реЛ, рддрд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдЖрдХреНрд░реЛрд╢рдХреЛ рдХрд▓реНрдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдХреБрдиреИ рдкрдирд┐ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдорд╛ рддрдкрд╛рдИрдВрд▓реЗ рд░рдЩ рдЖрдЙрдЯрдкреБрдЯ рд╣рдЯрд╛рдЙрдиреБ рд╣реБрдБрджреИрди, рд╣рд╛рдореА рд░рд╛рдХреНрд╖рд╕рд╣рд░реВ рд╣реЛрдЗрдиреМрдВред

рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдЧрд╣рд┐рд░рд┐рдПрд░ рд╣реЗрд░реНрдпреМрдВред ls рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдорд╛рд░реНрдлрдд рд░рдЩ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ LS_COLORS, рдЬреБрди рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ dircolors(1) рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рдорд╛ рдЖрдзрд╛рд░рд┐рдд dir_colors(5)... рд╣реЛ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдпрд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рдкрдвреНрдЫ, рдЬреБрди рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ (рд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдерд╛рд╣рд╛ рдЫреИрди рднрдиреЗ рдвреЛрдХрд╛ (do), рддреНрдпрд╕рдкрдЫрд┐ dir_colors рдХрд╛рдо рдЧрд░реНрджрдЫ, рд╕рдмреИ рдХреБрд░рд╛рдХреЛ рдмрд╛рд╡рдЬреБрдж)ред

рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВ

рдХреБрди рд░рдВрдЧ рдпреЛрдЬрдирд╛рд▓реЗ рд╕реБрд╕реНрддрддрд╛ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫ рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдпреМрдВ:

$ 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
[...]

рд╡рд╛рд╣: резреж,режрежреж рдХрд▓рд╣рд░реВ lstat(), 10 рдХрд▓рд╣рд░реВ getxattr() (рдЬреБрди рд╕рдмреИ рдЕрд╕рдлрд▓ рд╣реБрдиреНрдЫрдиреН рдХрд┐рдирднрдиреЗ рд╣рд╛рдореНрд░реЛ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯрд╣рд░реВ рдЫреИрдирдиреН рдЬреБрди ls рдЦреЛрдЬрд┐рд░рд╣реЗрдХреЛ рдЫ), 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

рдХреЗ!?! рдЕрдЭреИ резрей рд╕реЗрдХреЗрдиреНрдб?

рдпреЛ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫ рдХрд┐ рдЬрдм рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ 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

резреж,режрежреж рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреАрдорд╛ реж.рей рд╕реЗрдХреЗрдиреНрдб, рд░реЗрдХрд░реНрдбред

рд╢реЗрд░реНрд▓рдХ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

13 рд╕реЗрдХреЗрдиреНрдб рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВрд╕рдБрдЧ 0,3 рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╕рд╛рдиреЛ рдЯреНрд╡реАрдХрд┐рдЩрдХреЛ рд╕рд╛рде LS_COLORS рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐рдХреЛ рдХрд╛рд░рдгрд▓реЗ 40-рдЧреБрдгрд╛ рдкреНрд░рд╡реЗрдЧрдХреЛ рдЕрд░реНрде setuid / setgid рд░ рд░рдВрдЧреАрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рд╣рд░реВред рддреНрдпрддрд┐ рдареВрд▓реЛ рдШрд╛рдЯрд╛ рд╣реЛрдЗрди ред

рдЕрд╡рд╢реНрдп рдкрдирд┐, рдпреЛ рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ Sherlock рдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫред

рддрд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рд░рдВрдЧ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдХреЗрд╡рд▓ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдлрд░реНрдХрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

$ unset LS_COLORS

рддрд░ рддреНрдпрд╕рдкрдЫрд┐ рдзреЗрд░реИ рдлрд╛рдЗрд▓рд╣рд░реВ рднрдПрдХрд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВрдорд╛, рдпреЛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдмреЗрд▓рд╛ рдХрдлреА рдкрдХрд╛рдЙрди рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрдиреБрд╣реЛрд╕реН ls.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди