Ha phetoho ea tikoloho e potlakisa ts'ebetso ka makhetlo a 40

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, e sebetsang e bala faele ea tlhophiso ho theha phetoho ea tikoloho, eo joale e e sebelisang (mme haeba o sa tsebe ka lifaele monyako (etsa), ebe dir_colors e tla sebetsa, Ho sa tsotellehe tsohle).

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 ho ls --color=auto, empa ls e lemoha ha e sa hokeloa ho terminal (mohlala, ka phaephe kapa ka phetisetso ea phalliso) ebe e tima 'mala ha e setiloe ho auto. 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 kokoanyana ho tloha lilemong tse 10 tse fetileng, re lekile ho tima tlhahlobo ea litšobotsi Bokhoni:

$ 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. Bokhoni, empa hanyane ka hanyane setuid/setgid, leha e le ka folakha ea ts'ebetso.

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

Eketsa ka tlhaloso