Sa lá atá inniu ba mhaith linn labhairt faoi chuid de na nuashonruithe is déanaí ar chóras Sherlock [is braisle ardfheidhmíochta é seo in Ollscoil Stanford - thart ar. trans.], rud a chuireann go mór le liostú comhad in eolairí le líon mór iontrálacha.
Murab ionann agus ailt rialta, is mó de thuarascáil chos istigh é seo ar an gcaoi a n-oibrímid go rialta ar Sherlock chun é a choinneáil ag feidhmiú ar a ndícheall dár n-úsáideoirí. Tá súil againn níos mó altanna mar seo a fhoilsiú amach anseo.
Tógann sé am chun go leor comhad a liostú
Thosaigh sé ar fad le ceist tacaíochta theicniúil ó úsáideoir. Thuairiscigh sé fadhb go bhfuil an forghníomhú ls
tógann sé cúpla nóiméad in eolaire ina bhfuil breis agus 15 iontráil isteach $SCRATCH
[eolaire do chomhaid shealadacha - thart. lána].
Is gnách go gcuireann na mílte comhad in aon eolaire amháin ualach ar an gcóras comhad agus is cinnte nach moltar iad. Bhí a fhios ag an úsáideoir seo agus d'admhaigh sé nach raibh sé go maith, ach luaigh sé go raibh an liostú 1000 uair níos tapúla ar a ríomhaire glúine ná Sherlock. Ar ndóigh, rinne sé seo dochar dúinn. Mar sin d'fhéachamar níos doimhne.
Toisc go bhfuil cuma deas air.
D'fhéachamar ar cad a dhéanann sé i ndáiríre ls
agus eolaire á liostú, agus cén fáth a thógann an próiseas chomh fada sin. Ar an chuid is mó dáiltí nua-aimseartha ls
de réir réamhshocraithe ritheann sé mar ls --color=auto
, mar is maith le gach duine na dathanna.
Ach tagann dathanna áille ar phraghas: do gach comhad ls
Ní mór faisnéis a fháil faoin gcineál comhaid, a cheadanna, bratacha, tréithe leathnaithe agus a leithéid d'fhonn an dath cuí a roghnú.
Réiteach simplí amháin ar an bhfadhb is ea dath a dhíchumasú i ls ar fad, ach feall na n-úsáideoirí a shamhlú. Níor cheart duit in imthosca ar bith an t-aschur dath a bhaint, ní arrachtaigh muid.
Mar sin d'fhéachamar níos doimhne. ls
iontrálacha dathanna trí athróg timpeallachta LS_COLORS
, atá socraithe dircolors(1)
bunaithe ar chomhad cumraíochta dir_colors(5)
... Sea,
A ligean ar ghlacadh le breathnú níos dlúithe
Chun a fháil amach cén scéim dathanna is cúis leis an mhoilliú, chruthaíomar timpeallacht thurgnamhach:
$ 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 soicind le haghaidh 10 comhad, nach bhfuil an-mhaith.
Dála an scéil, tá bratach ag teastáil uainn
--color=always
: cé go casadh sé arls --color=auto
Achls
aimsíonn sé nuair nach bhfuil sé nasctha le teirminéal (m.sh. le píopa nó le hathsheoladh aschuir) agus díchumasaítear dathú má tá sé socraitheauto
. Fear cliste.
Mar sin, cad a thógann sé chomh fada? D'fhéachamar 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: 10 glaoch lstat()
, 10 glaoch getxattr()
(a theipeann ar fad toisc nach bhfuil na tréithe atá á lorg ag ár dtimpeallacht), 10 glaoch capget()
.
Cinnte is féidir é seo a bharrfheabhsú.
tréith cumais? Ní hea
Ag leanúint comhairle
$ 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, suas le 8 soicind de luasghéarú! Fuair muid réidh leis na glaonna costasacha sin go léir getxattr()
, agus dúshláin capget()
imithe freisin, iontach.
Ach fós tá na glaonna annoying lstat()
, Cé go…
Cé mhéad bláth atá uait?
Dá bhrí sin, ghlacamar le breathnú níos dlúithe LS_COLORS
.
Ar dtús dhíchumasíomar an athróg seo:
$ 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
Cad!?! Fós 13 soicind?
Tharlaíonn sé go raibh nuair a athróg timpeallacht LS_COLORS
níl ach ceann amháin dá heilimintí sainithe nó in easnamh <type>=color:
, úsáideann sé an bunachar sonraí ionsuite de réir réamhshocraithe agus úsáideann sé dathanna fós. Mar sin más mian leat dathú a dhíchumasú le haghaidh cineál comhaid áirithe, ní mór duit é a shárú <type>=:
nó <type> 00
i gcomhad DIR_COLORS
.
Tar éis go leor trialach agus earráide, rinneamar ár gcuardach a chaolú síos go dtí seo:
EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00
atá scríofa mar
LS_COLORS='ex=00:su=00:sg=00:ca=00:'
Ciallaíonn sé seo: ná dathaigh comhaid de réir tréithe.
, ná trí
Déanaimid dlús ls
Agus mura ndéanann tú aon cheann de na seiceálacha seo, glaonna ansin lstat()
imigh, agus anois is ábhar go hiomlán difriúil é:
$ 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 soicind ar liosta de 10 comhad, taifead.
Sherlock a shocrú
13 soicind le socruithe réamhshocraithe go 0,3 soicind le miontweaking LS_COLORS
ciallaíonn sé luasghéarú 40-huaire mar gheall ar neamhláithreacht setuid
/ setgid
agus comhaid inrite daite. Ní caillteanas mór den sórt sin.
Ar ndóigh, tá sé seo cumraithe anois i Sherlock do gach úsáideoir.
Ach más mian leat an dathú a thabhairt ar ais, is féidir leat filleadh ar na socruithe réamhshocraithe:
$ unset LS_COLORS
Ach ansin ar eolairí le go leor de na comhaid, a bheith cinnte a brew caife agus é ar siúl ls
.
Foinse: will.com