Kajeno re batla ho bua ka tse ling tsa lintlafatso tsa morao-rao tsa sistimi ea Sherlock [ena ke sehlopha se sebetsang hantle haholo Univesithing ea Stanford - hoo e ka bang. trans.], e potlakisang haholo ho thathamisa lifaele ho li-directory tse nang le likenyo tse ngata.
Ho fapana le lingoliloeng tse tloaelehileng, ena ke tlaleho ea motho ea ka hare mabapi le hore na re sebetsa joang khafetsa ho Sherlock ho e boloka e sebetsa hantle bakeng sa basebelisi ba rona. Re tšepa ho phatlalatsa lingoliloeng tse ling tse kang tsena nakong e tlang.
Ho thathamisa lifaele tse ngata ho nka nako
Tsohle li qalile ka potso ea tšehetso ea tekheniki ho tsoa ho mosebelisi. O ile a tlaleha bothata ba hore ho bolaoa ls
e nka metsotso e seng mekae bukeng e nang le likenyelletso tse fetang 15 $SCRATCH
[directory bakeng sa lifaele tsa nakoana - approx. tsela].
Lifaele tse likete tse bukeng e le 'ngoe hangata li beha moroalo tsamaisong ea lifaele mme ha e khothalletsoe. Mosebelisi o tsebile sena mme a lumela hore ha se hantle, empa a bolela hore lethathamo le potlakile ka makhetlo a 1000 ho laptop ea hae ho feta Sherlock. Ke ’nete hore sena se ile sa re utloisa bohloko. Kahoo re ile ra sheba ka botebo.
Hobane ke shebahala hantle
Re ile ra sheba seo e hlileng e se etsang ls
ha u thathamisa bukana, le hore na ke hobane'ng ha ts'ebetso e nka nako e telele hakana. Likabong tse ngata tsa sejoale-joale ls
ka kamehla e sebetsa joalo ka ls --color=auto
, hobane bohle ba rata mebala.
Empa mebala e metle e tla ka theko: bakeng sa faele e 'ngoe le e' ngoe ls
e tlameha ho fumana tlhahisoleseling mabapi le mofuta oa faele, litumello tsa eona, lifolakha, litšobotsi tse atolositsoeng le tse ling e le ho khetha 'mala o nepahetseng.
Tharollo e le 'ngoe e bonolo bothateng ke ho tima mmala ho ls ka botlalo, empa nahana ka khalefo ea basebelisi. Ha ho na maemo ao u lokelang ho a tlosa 'mala, ha re liphoofolo tsa litonanahali.
Kahoo re ile ra sheba ka botebo. ls
mebala e kenang ka ho feto-fetoha ha tikoloho LS_COLORS
, e behiloeng dircolors(1)
e ipapisitse le faele ea tlhophiso dir_colors(5)
... Ee,
A re hlahlobeng ka hloko
Ho tseba hore na ke mofuta ofe oa mebala o bakang ho fokotseha, re thehile tikoloho ea liteko:
$ 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
Metsotsoana ea 12,7 bakeng sa lifaele tse 10, ha li ntle haholo.
Ka tsela, re hloka folakha
--color=always
: leha a retelehela hols --color=auto
, empals
e lemoha ha e sa hokeloa ho terminal (mohlala, ka phaephe kapa ka phetisetso ea phalliso) ebe e tima 'mala ha e setiloe hoauto
. Mohlankana ya bohlale.
Joale ho nka nako e telele hakae? Re ile ra sheba le 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: mehala ea 10 lstat()
, mehala ea 10 getxattr()
(tseo kaofela li hlolehang hobane tikoloho ea rona ha e na litšoaneleho tseo ls e li batlang), mehala ea 10 capget()
.
Ehlile sena se ka ntlafatsoa.
Sebopeho sa bokhoni? Che
Ho latela keletso
$ 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, ho fihla ho metsotsoana e 8 ea lebelo! Re ile ra lahla mehala eo ea theko e boima getxattr()
, le mathata capget()
e ile ea nyamela hape, e kholo.
Empa ho ntse ho na le mehala ena e tenang lstat()
, Leha…
U hloka lipalesa tse kae?
Ka hona, re ile ra hlahlobisisa LS_COLORS
.
Taba ea pele, re ile ra thibela phetoho ena:
$ 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
Eng!?! E sa le metsotsoana e 13?
Hoa etsahala hore ha tikoloho e fetoha LS_COLORS
ke karolo e le 'ngoe feela ea eona e sa hlalosoang kapa e sieo <type>=color:
, e sebelisa database e hahelletsoeng ka ho sa feleng mme e ntse e sebelisa mebala. Kahoo haeba u batla ho tima colorization bakeng sa mofuta o itseng oa faele, u hloka ho e tlola <type>=:
kapa <type> 00
ka faele DIR_COLORS
.
Ka mor'a liteko le liphoso tse ngata, re ile ra fokotsa patlisiso ea rona ho fihlela sena:
EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00
e ngotsoeng joalo ka
LS_COLORS='ex=00:su=00:sg=00:ca=00:'
Sena se bolela: u se ke ua mebala lifaele ka tšobotsi.
, leha e le ka
Re potlakisa ls
'Me haeba u sa etse leha e le efe ea licheke tsena, joale letsetsa lstat()
nyamela, 'me joale ke taba e fapaneng ka ho felletseng:
$ 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 metsotsoana lethathamong la lifaele tse 10, rekoto.
Ho theha Sherlock
Ho tloha ho metsotsoana e 13 ka li-setting tsa kamehla ho isa ho metsotsoana e 0,3 ka liphetoho tse nyane LS_COLORS
e bolela ho potlakisa ha makhetlo a 40 ka lebaka la bosieo setuid
/ setgid
le lifaele tse sebetsang tse mebala. Eseng tahlehelo e kholo joalo.
Ehlile, sena se se se hlophisitsoe ho Sherlock bakeng sa mosebelisi e mong le e mong.
Empa haeba u batla ho khutlisa 'mala, u ka khutlela ho litlhophiso tsa kamehla:
$ unset LS_COLORS
Empa ho li-directory tse nang le lifaele tse ngata, etsa bonnete ba hore u ritela kofi ha e ntse e sebetsa ls
.
Source: www.habr.com