Mgbe mgbanwe gburugburu ebe obibi na-eme ka usoro ahụ dị ngwa site na ugboro 40

Taa, anyị chọrọ ikwu maka ụfọdụ mmelite kachasị ọhụrụ na sistemụ Sherlock [nke a bụ ụyọkọ na-arụ ọrụ dị elu na Mahadum Stanford - ihe ruru. trans.], nke na-eme ka ndekọ faịlụ dị ngwa ngwa na akwụkwọ ndekọ aha nwere ọnụ ọgụgụ dị ukwuu nke ntinye.

N'adịghị ka akụkọ mgbe niile, nke a bụ akụkọ nke onye nyocha banyere otu anyị si arụ ọrụ mgbe niile na Sherlock iji mee ka ọ na-arụ ọrụ kacha mma maka ndị ọrụ anyị. Anyị nwere olileanya ibipụtakwu akụkọ dị ka nke a n'ọdịnihu.

Ịdepụta ọtụtụ faịlụ na-ewe oge

Ọ malitere site na ajụjụ nkwado teknụzụ sitere n'aka onye ọrụ. Ọ kọrọ nsogbu na ogbugbu ls na-ewe nkeji ole na ole n'ime akwụkwọ ndekọ aha nwere ndenye karịrị 15 $SCRATCH [akwụkwọ ndekọ aha maka faịlụ nwa oge - ihe ruru. uzo].

Ọtụtụ puku faịlụ n'otu akwụkwọ ndekọ aha na-ebutekarị ibu arọ na sistemụ faịlụ ma akwadoghị ya. Onye ọrụ ahụ maara nke a wee kweta na ọ dịghị mma, ma kwuru na ndepụta ahụ bụ 1000 ugboro ngwa ngwa na laptọọpụ ya karịa Sherlock. N'ezie, nke a wutere anyị. Ya mere, anyị lere anya miri emi.

N'ihi na ls mara mma

Anyị lere anya ihe ọ na-eme n'ezie ls mgbe ị na-edepụta ndekọ aha, na ihe kpatara usoro ahụ ji ewe ogologo oge. Na ọtụtụ nkesa ọgbara ọhụrụ ls site na ndabara ọ na-agba dị ka ls --color=auto, n'ihi na onye ọ bụla nwere mmasị na agba.

Ma agba mara mma na-abịa na ọnụahịa: maka faịlụ ọ bụla ls ga-enweta ozi gbasara ụdị faịlụ ahụ, ikike ya, ọkọlọtọ, njirimara agbatị na ihe ndị yiri ya iji họrọ agba kwesịrị ekwesị.

Otu ngwọta dị mfe maka nsogbu ahụ bụ gbanyụọ agba na ls kpamkpam, mana were ya na iwe nke ndị ọrụ. N'ọnọdụ ọ bụla ị ga-ewepụ mmepụta agba, anyị abụghị nnukwu anụ.

Ya mere, anyị lere anya miri emi. ls agba ntinye site na mgbanwe gburugburu ebe obibi LS_COLORS, nke atọrọ dircolors(1) dabere na faịlụ nhazi dir_colors(5)... Ee, onye executable na-agụ faịlụ nhazi iji mepụta mgbanwe gburugburu ebe obibi, nke ls wee jiri ya (ma ọ bụrụ na ị maghị maka faịlụ site (mee), wee dir_colors ga-arụ ọrụ, N'agbanyeghị ihe niile).

Ka anyị lebakwuo anya

Iji chọpụta atụmatụ agba nke na-akpata mbelata, anyị mepụtara gburugburu nnwale:

$ 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 sekọnd maka faịlụ 10, ọ bụghị ezigbo mma.

Site n'ụzọ, anyị chọrọ ọkọlọtọ --color=always: ọ bụ ezie na ọ tụgharịrị ls --color=automa ls na-achọpụta mgbe ọ na-ejikọghị ya na ọdụ (dịka ọmụmaatụ site na ọkpọkọ ma ọ bụ jiri ntụgharị nrụpụta) wee gbanyụọ agba ma ọ bụrụ na edobere ya. auto. Nwoke mara ihe.

Yabụ kedu ihe na-ewe ogologo oge? Anyị na-ele anya 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
[...]

Chaị: 10 oku lstat(), 10 oku getxattr() (nke niile na-ada n'ihi na gburugburu ebe obibi anyị enweghị àgwà ls na-achọ), oku 10 capget().

N'ezie enwere ike ịkwalite nke a.

Njirimara ike? Mba

Na-agbaso ndụmọdụ ahụhụ sitere na afọ 10 gara aga, anyị gbalịrị gbanyụọ njirimara ịlele ike:

$ 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

Chei, ruo sekọnd 8 nke osooso! Anyị kpochapụrụ oku ndị ahụ niile dị oke ọnụ getxattr(), na ihe ịma aka capget() okụrede kwa, ukwuu.

Mana a ka nwere oku na-akpasu iwe lstat(), Agbanyeghị…

Okooko osisi ole ka ị chọrọ?

Ya mere, anyị leruru anya nke ọma LS_COLORS.

Nke mbụ, anyị kwụsịrị mgbanwe a:

$ 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

Kedu!?! Ọ ka dị sekọnd iri na atọ?

Ọ na-apụta na mgbe gburugburu ebe obibi na-agbanwe LS_COLORS naanị otu n'ime ihe ndị dị na ya adịghị akọwa ma ọ bụ na-efu <type>=color:, ọ na-eji nchekwa data arụnyere na ndabara ma ka na-eji agba. Yabụ ọ bụrụ na ịchọrọ iwepu agba agba maka ụdị faịlụ ụfọdụ, ịkwesịrị iji ya mebie ya <type>=: ma ọ bụ <type> 00 na faịlụ DIR_COLORS.

Mgbe ọtụtụ nnwale na njehie gasịrị, anyị mere ka ọchụchọ anyị wedata ruo nke a:

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

nke edere ka

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

Nke a pụtara: agbala faịlụ site na njirimara. ike, mana nke nta nke nta setuid/setgid, ọbụghị site na ọkọlọtọ executability.

Anyị na-eme ngwa ngwa ls

Ma ọ bụrụ na ịmeghị nke ọ bụla n'ime nlele ndị a, kpọọ oku lstat() na-apụ n'anya, ma ugbu a ọ bụ ihe dị iche iche:

$ 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 sekọnd na ndepụta nke faịlụ 10, ndekọ.

Ịtọlite ​​​​Sherlock

Site na sekọnd 13 nwere ntọala ndabara gaa na 0,3 sekọnd nwere obere mgbanwe LS_COLORS pụtara 40 ugboro osooso n'ihi enweghị setuid / setgid na acha executable faịlụ. Ọ bụghị nnukwu mfu dị otú ahụ.

N'ezie, a na-ahazi nke a na Sherlock maka onye ọrụ ọ bụla.

Mana ọ bụrụ na ịchọrọ ịlaghachite agba, ị nwere ike ịlaghachi na ntọala ndabara:

$ unset LS_COLORS

Mana na akwụkwọ ndekọ aha nwere ọtụtụ faịlụ, jide n'aka na ị ga-eme kọfị ka ọ na-agba ọsọ ls.

isi: www.habr.com

Tinye a comment