Nhasi tinoda kutaura nezve zvimwe zvichangobva kuitika kuSherlock system [iyi iboka rekuita-pamusoro paStanford University - approx. trans.], iyo inomhanyisa zvakanyanya kunyora mafaera mumadhairekitori ane nhamba huru yezvinyorwa.
Kusiyana nezvinyorwa zvenguva dzose, iyi yakawanda yemushumo wemukati wekuti tinogara tichishanda sei paSherlock kuti irambe ichimhanya zvakanyanya kune vashandisi vedu. Tinotarisira kutsikisa zvimwe zvinyorwa zvakaita seizvi mune ramangwana.
Kunyora mafaira akawanda kunotora nguva
Izvo zvese zvakatanga nemubvunzo wetsigiro wehunyanzvi kubva kumushandisi. Akarondedzera dambudziko kuti kuurayiwa ls
inotora maminetsi mashoma mudhairekitori ine anopfuura 15 ekupinda mukati $SCRATCH
[dhairekitori yemafaira enguva pfupi - approx. mugwagwa].
Zviuru zvemafaira mune rimwe dhairekitori zvinowanzoisa mutoro kune iyo faira system uye haina kukurudzirwa. Mushandisi aiziva izvi uye akabvuma kuti zvainge zvisina kunaka, asi akataura kuti rondedzero yacho yaive nguva dze1000 nekukurumidza palaptop yake kupfuura Sherlock. Chokwadi, izvi zvakatirwadza. Saka takatarisa zvakadzama.
Nekuti ls inotaridzika zvakanaka
Takatarisa zvainoita chaizvo ls
kana uchinyora dhairekitori, uye nei maitiro acho achitora nguva yakareba kudaro. Pakugovera kwazvino uno ls
by default inomhanya se ls --color=auto
, nokuti munhu wose anoda mavara.
Asi mavara akanaka anouya pamutengo: kune yega faira ls
inofanirwa kuwana ruzivo nezve rudzi rwefaira, mvumo dzayo, mireza, hunhu hwakawedzerwa uye nezvimwe kuitira kuti usarudze ruvara rwakakodzera.
Imwe mhinduro yakapusa kudambudziko ndeyekudzima ruvara mu ls zvachose, asi fungidzira kutsamwa kwevashandisi. Pasina mamiriro ezvinhu iwe unofanirwa kubvisa iyo ruvara kubuda, isu hatisi monsters.
Saka takatarisa zvakadzama. ls
mavara ekupinda kuburikidza nemamiriro ekunze akasiyana LS_COLORS
, iyo yakaiswa dircolors(1)
zvichibva pane faira rekugadzirisa dir_colors(5)
... Ehe,
Ngatinyatsoongororai
Kuti uone kuti ndeupi chirongwa chemavara chinokonzera kudzikira, takagadzira nharaunda yekuyedza:
$ 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 masekonzi e10 mafaera, asina kunyatsonaka.
Nenzira, tinoda mureza
--color=always
: kunyange achitendeukira kunals --color=auto
asils
inoona kana isina kubatana kune terminal (semuenzaniso nepombi kana neinobuditsa redirection) uye inodzima coloring kana yaiswaauto
. Mukomana akangwara.
Saka chii chiri kutora nguva yakareba kudaro? Takatarisa pamwe 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
[...]
Wow: 10 mafoni lstat()
, 10 mafoni getxattr()
(izvo zvese zvinokundikana nekuti nharaunda yedu haina hunhu ls iri kutsvaga), 10 mafoni capget()
.
Chokwadi izvi zvinogona kugadziriswa.
Kugona hunhu? kwete
Kutevera zano
$ 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
Wow, kusvika kumasekonzi masere ekumhanyisa! Takabva tasiyana nefoni dzese dzaidhura getxattr()
, nematambudziko capget()
yakanyangarika zvakare, zvikuru.
Asi kuchine macalls anosvota aya lstat()
, Nyangweβ¦
Iwe unoda maruva mangani?
Nokudaro, takanyatsoongorora LS_COLORS
.
Kutanga isu takangodzima iyi shanduko:
$ 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
Chii!?! Zvichiri 13 seconds?
Zvinoitika kuti kana zvakatipoteredza chinja LS_COLORS
chimwe chete chezvikamu zvayo ndicho chisingatsanangurirwe kana kuti chisipo <type>=color:
, inoshandisa iyo yakavakirwa-mukati dhatabhesi nekukasira uye ichiri kushandisa mavara. Saka kana iwe uchida kudzima colorization kune imwe faira mhando, iwe unofanirwa kuipfuura nayo <type>=:
kana <type> 00
mufaira DIR_COLORS
.
Mushure mekuedza kwakawanda uye kukanganisa, takapfupisa kutsvaga kwedu kune izvi:
EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00
iyo yakanyorwa kuti
LS_COLORS='ex=00:su=00:sg=00:ca=00:'
Izvi zvinoreva: usapende mafaera nehunhu.
, kana na
Isu tinomhanyisa ls
Uye kana iwe usingaite chero cheki idzi, wobva wafona lstat()
kunyangarika, uye ikozvino inyaya yakasiyana zvachose:
$ 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 masekondi pane rondedzero yegumi mafaera, rekodhi.
Kugadzira Sherlock
Kubva pamasekonzi gumi nematatu ane default marongero kusvika 13 masekonzi ane zvidiki zvigadziriso LS_COLORS
zvinoreva kukwidziridzwa kwakapetwa makumi mana nekuda kwekusavapo setuid
/ setgid
uye ane mavara eexecutable mafaira. Kwete kurasikirwa kukuru.
Ehe, izvi zvino zvakagadzirirwa muSherlock kumushandisi wega wega.
Asi kana iwe uchida kudzosa iyo coloring, unogona kungodzokera kune default marongero:
$ unset LS_COLORS
Asi ipapo pamadhairekitori ane akawanda mafaera, ita shuwa kubika kofi ichiri kushanda ls
.
Source: www.habr.com