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,
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=auto
mals
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ụ
$ 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.
, ọbụghị site na
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