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

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

рдирд┐рдпрдорд┐рдд рд▓реЗрдЦреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдПрдХ рдЕрдВрджрд░реВрдиреА рд╕реВрддреНрд░ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рд╢рд░реНрд▓рдХ рдкрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдФрд░ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред

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

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

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

рдХреНрдпреЛрдВрдХрд┐ ls рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ

рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ ls рдХрд┐рд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╕рдордп, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рд╡рд┐рддрд░рдгреЛрдВ рдкрд░ ls рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЪрд▓рддрд╛ рд╣реИ ls --color=auto, рдХреНрдпреЛрдВрдХрд┐ рд░рдВрдЧ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдкрд╕рдВрдж рд╣реЛрддреЗ рд╣реИрдВред

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

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

рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦрд╛ред ls рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рдВрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ LS_COLORS, рдЬреЛ рд╕реЗрдЯ рд╣реИ dircolors(1) рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ dir_colors(5)ред рд╣рд╛рдБ, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ ls рдлрд┐рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рджрд░рд╡рд╛рдЬрд╛ (рдХрд░реЗрдВ), рдлрд┐рд░ 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
[...]

рд╡рд╛рд╣: 10 рдХреЙрд▓ 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

рдХреНрдпрд╛!?! рдЕрднреА рднреА 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:'

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ: рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рдВрдЧ рди рджреЗрдВред рдХреНрд╖рдорддрд╛рдУрдВ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛-рдереЛрдбрд╝рд╛ рдХрд░рдХреЗ 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

0,3 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ 10 рд╕реЗрдХрдВрдб, рдПрдХ рд░рд┐рдХреЙрд░реНрдбред

рд╢рд░реНрд▓рдХ рдХреА рд╕реНрдерд╛рдкрдирд╛

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде 13 рд╕реЗрдХрдВрдб рд╕реЗ рд▓реЗрдХрд░ рдорд╛рдореВрд▓реА рд╕рдорд╛рдпреЛрдЬрди рдХреЗ рд╕рд╛рде 0,3 рд╕реЗрдХрдВрдб рддрдХ LS_COLORS рдорддрд▓рдм рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг 40 рдЧреБрдирд╛ рддреНрд╡рд░рдг setuid / setgid рдФрд░ рд░рдВрдЧреАрди рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЗрдВред рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ.

рдмреЗрд╢рдХ, рдпрд╣ рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╢рд░реНрд▓рдХ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд░рдВрдЧ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВ:

$ unset LS_COLORS

рд▓реЗрдХрд┐рди рдлрд┐рд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╡рд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдкрд░, рдЪрд▓рддреЗ рд╕рдордп рдХреЙрдлрд╝реА рдмрдирд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ ls.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ