рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ 40 рдкрдЯреАрдиреЗ рд╡рд╛рдврд╡рддреЗ

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

рдирд┐рдпрдорд┐рдд рд▓реЗрдЦрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд, рдЖрдордЪреНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рд╢реЗрд░рд▓реЙрдХрд╡рд░ рддреЗ рдЙрддреНрддрдо рдкреНрд░рдХрд╛рд░реЗ рдЪрд╛рд▓реВ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдирд┐рдпрдорд┐рддрдкрдгреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЛ рдпрд╛рд╡рд░реАрд▓ рд╣рд╛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЕрд╣рд╡рд╛рд▓ рдЖрд╣реЗ. рдЖрдореНрд╣реА рднрд╡рд┐рд╖реНрдпрд╛рдд рдЕрд╕реЗ рдЖрдгрдЦреА рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВ рдЕрд╢реА рдЖрд╢рд╛ рдЖрд╣реЗ.

рдмрд░реНтАНрдпрд╛рдЪ рдлрд╛рдпрд▓реАрдВрдЪреА рд╕реВрдЪреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╡реЗрд│ рд▓рд╛рдЧрддреЛ

рд╣реЗ рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рддрд╛рдВрддреНрд░рд┐рдХ рд╕рдорд░реНрдерди рдкреНрд░рд╢реНрдирд╛рд╕рд╣ рд╕реБрд░реВ рдЭрд╛рд▓реЗ. рддреНрдпрд╛рдиреЗ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╕рдорд╕реНрдпрд╛ рдХрд│рд╡рд▓реА 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
[...]

рд╡реНрд╡рд╛: 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

рдХрд╛рдп!?! рдЕрдЬреВрди резрей рд╕реЗрдХрдВрдж?

рд╣реЗ рдмрд╛рд╣реЗрд░ рд╡рд│рддреЗ рдХреА рдЬреЗрд╡реНрд╣рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдмрджрд▓рддреЗ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛