I te wa ka tere ake te huringa o te taiao ma te 40 nga wa

I tenei ra e hiahia ana matou ki te korero mo etahi o nga whakahoutanga hou ki te punaha Sherlock [he roopu mahi nui tenei i te Whare Wananga o Stanford - tata. trans.], e tino tere ana te whakarārangi i nga konae ki roto i nga raarangi me te maha o nga whakaurunga.

Kaore i rite ki nga tuhinga tuuturu, he purongo a te kaikorero mo te mahi i ia wa i runga i a Sherlock kia pai ai te whakahaere mo o maatau kaiwhakamahi. Ko te tumanako ka whakaputahia etahi atu tuhinga penei a muri ake nei.

Ka roa te whakararangi i nga konae maha

I timata katoa me te patai tautoko hangarau mai i tetahi kaiwhakamahi. I korerotia e ia te raruraru e te mahi ls he meneti torutoru i roto i te whaiaronga me te neke atu i te 15 nga whakaurunga ki roto $SCRATCH [whaiaronga mo nga konae rangitahi - tata. ara].

He maha nga mano o nga konae kei roto i te raarangi kotahi ka pa te taumahatanga ki te punaha konae, kaore rawa i te tūtohutia. I mohio te kaiwhakamahi ki tenei me te whakaae kaore i te pai, engari i kii ko te rarangi he 1000 nga wa tere ake i runga i tana pona i a Sherlock. Ko te tikanga, he kino tenei ki a matou. Na ka titiro hohonu atu matou.

No te mea he pai te ahua

I titiro matou he aha te mahi ls ina whakarārangihia he whaiaronga, me te aha e roa ai te mahi. I te nuinga o nga tohatoha hou ls ma te taunoa ka rere hei ls --color=auto, no te mea e pai ana te katoa ki nga tae.

Engari he utu nga tae ataahua: mo ia kōnae ls me whiwhi korero mo te momo konae, ona whakaaetanga, haki, huanga whakaroa me etahi atu mea hei whiriwhiri i te tae e tika ana.

Ko tetahi otinga ngawari ki te raru ko te whakakore i te tae i roto i te ls katoa, engari whakaarohia te riri o nga kaiwhakamahi. I raro i nga ahuatanga ka tangohia e koe te putanga tae, ehara matou i te taniwha.

Na ka titiro hohonu atu matou. ls urunga tae ma te taurangi taiao LS_COLORS, kua whakaritea dircolors(1) i runga i te konae whirihoranga dir_colors(5). Ae, ka panuitia e te kaiwhakahaere te konae whirihoranga hei hanga i tetahi taurangi taiao, ka whakamahia e ls (a ki te kore koe e mohio mo nga konae tatau (mahi), katahi ka dir_colors ka mahi, Ahakoa nga mea katoa).

Kia ata titiro tatou

Hei whakatau ko tehea te kaupapa tae e paheke ai, i hanga e matou he taiao whakamatautau:

$ 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 hēkona mō ngā kōnae 10, kāore i tino pai.

Ma te ara, me whai haki --color=always: ahakoa ka huri ia ki ls --color=auto, engari ls ka kitea ina karekau e hono ki te tauranga (hei tauira, ma te paipa, ma te anga whakamua ranei) ka monohia te tae ki te tautuhi ki auto. Tangata mohio.

Na he aha te mea ka roa? I titiro matou 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
[...]

Aue: 10 waea lstat(), 10 waea getxattr() (ka rahua katoa na te mea karekau o taatau taiao e whai huanga e rapuhia ana e ls), 10 nga waea capget().

He pono ka taea tenei te arotau.

Hunga kaha? Kao

Te whai i nga tohutohu bug mai i te 10 tau ki muri, i ngana matou ki te whakakore i te arowhai huanga āheinga:

$ 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

Aue, tae atu ki te 8 hēkona te whakaterenga! I whakakorehia e matou nga waea utu nui katoa getxattr(), me nga wero capget() ngaro hoki, nui.

Engari kei reira tonu enei waea hoha lstat(), Ahakoa…

E hia nga puawai e hiahiatia ana e koe?

Nō reira, i āta titiro mātou LS_COLORS.

Tuatahi ka monohia e matou tenei taurangi:

$ 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!?! 13 hēkona tonu?

Ka puta mai i te wa e rereke ana te taiao LS_COLORS kotahi anake o ona huānga kaore i te tautuhia, kei te ngaro ranei <type>=color:, ka whakamahia e ia te papaaarangi i hangaia ma te taunoa me te whakamahi tonu i nga tae. Na, ki te hiahia koe ki te whakakore i te tae mo tetahi momo konae, me whakakore koe <type>=: ranei <type> 00 i roto i te kōnae DIR_COLORS.

I muri i te maha o nga whakamatautau me nga hapa, ka whakaitihia ta maatau rapu ki tenei:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

e tuhia ana hei

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

Ko te tikanga: kaua e tae nga konae ma te huanga. āheinga, engari moka noa setuid/setgid, kaua hoki na haki whakahaere.

Ka tere tatou ls

A, ki te kore koe e mahi i tetahi o enei arowhai, waea mai lstat() kua ngaro, a inaianei he mea tino rereke:

$ 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 hēkona i runga i te rarangi o nga konae 10, he rekoata.

Te whakatu Sherlock

Mai i te 13 hēkona me ngā tautuhinga taunoa ki te 0,3 hēkona me ngā whakatikatika iti LS_COLORS ko te tikanga he 40-whakatere whakatere na te korenga setuid / setgid me nga konae kawe tae. Ehara i te mea he mate nui.

Ae ra, kua whirihorahia tenei ki Sherlock mo ia kaiwhakamahi.

Engari ki te hiahia koe ki te whakahoki i te tae, ka taea noa e koe te hoki ki nga tautuhinga taunoa:

$ unset LS_COLORS

Engari i runga i nga raarangi me te maha o nga konae, kia mohio koe ki te mahi kawhe i te wa e rere ana ls.

Source: will.com

Tāpiri i te kōrero