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,
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 kils --color=auto
, engarils
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 kiauto
. 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
$ 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.
, kaua hoki na
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