Ke ho'ololi 'ia ka ho'ololi kaiapuni i ke ka'ina hana ma 40 manawa

I kēia lā makemake mākou e kamaʻilio e pili ana i kekahi o nā mea hou loa i ka ʻōnaehana Sherlock [he pūʻulu hana kiʻekiʻe kēia ma Stanford University - approx. trans.], ka mea e wikiwiki loa i ka helu ʻana i nā faila ma nā papa kuhikuhi me nā helu helu nui.

ʻAʻole like me nā ʻatikala maʻamau, ʻoi aku kēia i ka hōʻike a ka mea hoʻopukapuka e pili ana i kā mākou hana mau ma Sherlock e hoʻomau i ka holo ʻana i ka mea maikaʻi loa no kā mākou mea hoʻohana. Manaʻolana mākou e hoʻopuka hou aku i nā ʻatikala e like me kēia i ka wā e hiki mai ana.

ʻO ka papa inoa ʻana i nā faila he nui ka manawa

Hoʻomaka ia me kahi nīnau kākoʻo ʻenehana mai kahi mea hoʻohana. Ua hōʻike ʻo ia i ka pilikia o ka hoʻokō ls lawe i kekahi mau minuke i loko o kahi papa kuhikuhi me ka ʻoi aku o 15 mau helu i loko $SCRATCH [papa kuhikuhi no nā faila manawa - ma kahi o. ala].

ʻO nā kaukani o nā faila i loko o ka papa kuhikuhi hoʻokahi ke kaumaha i ka ʻōnaehana faila a ʻaʻole ʻōlelo ʻia. Ua ʻike ka mea hoʻohana i kēia a ua ʻae ʻaʻole maikaʻi ia, akā ua ʻōlelo ʻo ka papa inoa he 1000 mau manawa wikiwiki ma kāna kamepiula ma mua o Sherlock. ʻOiaʻiʻo, ua hōʻeha kēia iā mākou. No laila ua nānā hohonu mākou.

No ka mea, nani ke nana aku

Ua nānā mākou i kāna hana maoli ls i ka helu ʻana i kahi papa kuhikuhi, a no ke aha e lōʻihi ai ke kaʻina hana. Ma ka hapa nui o keia manawa ls ma ka paʻamau e holo like ls --color=auto, no ka mea makemake nā mea a pau i nā kala.

Akā, hiki mai nā kala nani i ke kumu kūʻai: no kēlā me kēia faila ls Pono e loaʻa ka ʻike e pili ana i ke ʻano faila, kona ʻae, nā hae, nā ʻano hoʻonui a me nā mea like e koho ai i ke kala kūpono.

ʻO kahi hoʻonā maʻalahi i ka pilikia ʻo ka hoʻopau ʻana i ke kala ma ls āpau, akā e noʻonoʻo i ka huhū o nā mea hoʻohana. ʻAʻole pono ʻoe e lawe i ke kala kala, ʻaʻole mākou he monsters.

No laila ua nānā hohonu mākou. ls kala kala ma o ka hoololi kaiapuni LS_COLORS, i hoonohoia dircolors(1) ma muli o ka waihona hoʻonohonoho dir_colors(5). ʻAe, Heluhelu ka mea hoʻokō i ka faila hoʻonohonoho e hana i kahi loli kaiapuni, a laila e hoʻohana ai (a inā ʻaʻole ʻoe ʻike e pili ana i nā faila e (hana), a laila dir_colors e hana, ʻOiai nā mea a pau).

E nānā pono kākou

No ka hoʻoholo ʻana i ke ʻano kala e hoʻolohi ai, ua hana mākou i kahi kaiapuni hoʻokolohua:

$ 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 kekona no 10 faila, ʻaʻole maikaʻi loa.

Ma ke ala, pono mākou i ka hae --color=always: oiai ua huli oia i ls --color=auto, akā ls ʻike inā ʻaʻole pili ia i kahi pahu (e laʻa me ka paipu a i ʻole me ka hoʻihoʻi ʻana i nā mea hoʻopuka) a hoʻopau i ke kala inā hoʻonohonoho ʻia i auto. Kanaka akamai.

No laila he aha ka lōʻihi? Nānā mākou me 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
[...]

Auwe: 10 kelepona lstat(), 10 kelepona getxattr() (ʻaʻole i pau nā mea āpau no ka loaʻa ʻole o ko mākou kaiapuni i nā ʻano a ls e ʻimi nei), 10 kelepona capget().

ʻOiaʻiʻo hiki ke hoʻonui ʻia kēia.

Hoʻohālike hiki? ʻAʻole

Ma muli o ka ʻōlelo aʻo bug mai 10 makahiki aku nei, ua hoʻāʻo mākou e hoʻopau i ka nānā ʻana i ke ʻano nā mea hiki:

$ 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

Auwe, a hiki i 8 kekona o ka holo wikiwiki ʻana! Ua hoʻopau mākou i kēlā mau kelepona pipiʻi getxattr(), a me nā pilikia capget() nalowale loa, nui.

Aia nō naʻe kēia mau kelepona hoʻonāukiuki lstat(), ʻOiai…

ʻEhia mau pua āu e pono ai?

No laila, ua nānā pono mākou LS_COLORS.

ʻO ka mea mua, hoʻopau mākou i kēia ʻano hoʻololi:

$ 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

He aha!?! He 13 kekona?

Huli ia i ka wā e loli ai ke kaiapuni LS_COLORS ʻaʻole i wehewehe ʻia a nalowale kekahi o kāna mau mea <type>=color:, hoʻohana ʻo ia i ka waihona i kūkulu ʻia ma ka paʻamau a hoʻohana mau i nā kala. No laila inā makemake ʻoe e hoʻopau i ka waihoʻoluʻu no kekahi ʻano faila, pono ʻoe e kāpae iā ia me <type>=: ai ole ia, <type> 00 ma ka waihona DIR_COLORS.

Ma hope o ka nui o ka hoʻāʻo a me ka hewa, ua hōʻemi mākou i kā mākou ʻimi i kēia:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

i kakauia e like me

LS_COLORS='ex=00:su=00:sg=00:ca=00:'

ʻO ia hoʻi: mai kala i nā faila ma ke ʻano. nā mea hiki, akā iki iki setuid/setgid, aole na hae hoʻokō.

Holo wikiwiki mākou ls

A inā ʻaʻole ʻoe e hana i kekahi o kēia mau loiloi, a laila kelepona lstat() nalo, a he mea ʻokoʻa loa kēia:

$ 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 kekona ma ka papa inoa o 10 faila, he mooolelo.

Hoʻonohonoho iā Sherlock

Mai 13 kekona me nā hoʻonohonoho paʻamau i 0,3 kekona me nā hoʻololi liʻiliʻi LS_COLORS 'o ia ho'i, he 40 pa'i ka wikiwiki ma muli o ka nele setuid / setgid a me nā faila hoʻokō kala. ʻAʻole ia he poho nui.

ʻOiaʻiʻo, ua hoʻonohonoho ʻia kēia i Sherlock no kēlā me kēia mea hoʻohana.

Akā inā makemake ʻoe e hoʻihoʻi i ke kala, hiki iā ʻoe ke hoʻi i nā hoʻonohonoho paʻamau:

$ unset LS_COLORS

Akā, ma nā papa kuhikuhi me ka nui o nā faila, e hoʻomaʻamaʻa i ka inu kofe i ka wā e holo ana ls.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka