Loni a fẹ lati sọrọ nipa diẹ ninu awọn imudojuiwọn tuntun si eto Sherlock [eyi jẹ iṣupọ iṣẹ ṣiṣe giga ni Ile-ẹkọ giga Stanford - isunmọ. trans.], eyiti o yara awọn faili kikojọ ni pataki ni awọn ilana pẹlu nọmba nla ti awọn titẹ sii.
Ko dabi awọn nkan deede, eyi jẹ diẹ sii ti ijabọ Oludari lori bii a ṣe n ṣiṣẹ nigbagbogbo lori Sherlock lati jẹ ki o ṣiṣẹ ni dara julọ fun awọn olumulo wa. A nireti lati gbejade awọn nkan diẹ sii bii eyi ni ọjọ iwaju.
Kikojọ ọpọlọpọ awọn faili gba akoko
Gbogbo rẹ bẹrẹ pẹlu ibeere atilẹyin imọ-ẹrọ lati ọdọ olumulo kan. O royin iṣoro naa pe ipaniyan naa ls
gba iṣẹju diẹ ninu iwe ilana pẹlu diẹ sii ju 15 awọn titẹ sii $SCRATCH
[liana fun ibùgbé awọn faili - feleto. ona].
Ẹgbẹẹgbẹrun awọn faili ni itọsọna kan nigbagbogbo n gbe ẹru si eto faili ati pe a ko ṣeduro ni pato. Olumulo naa mọ eyi o jẹwọ pe ko dara, ṣugbọn mẹnuba pe atokọ naa jẹ awọn akoko 1000 yiyara lori kọǹpútà alágbèéká rẹ ju Sherlock lọ. Dajudaju, eyi dun wa. Nitorina a wo jinle.
Nitori ls wulẹ dara
A wo ohun ti o ṣe ni otitọ ls
nigba ti kikojọ a liana, ati idi ti awọn ilana gba ki gun. Lori julọ igbalode pinpin ls
nipa aiyipada o nṣiṣẹ bi ls --color=auto
, nitori gbogbo eniyan fẹran awọn awọ.
Ṣugbọn awọn awọ lẹwa wa ni idiyele: fun faili kọọkan ls
gbọdọ gba alaye nipa iru faili, awọn igbanilaaye rẹ, awọn asia, awọn abuda ti o gbooro ati iru bẹ lati yan awọ ti o yẹ.
Ojutu ti o rọrun kan si iṣoro naa ni lati mu awọ kuro ni ls lapapọ, ṣugbọn fojuinu ibinu ti awọn olumulo. Labẹ ọran kankan o yẹ ki o ya kuro ni awọ o wu, a wa ni ko ibanilẹru.
Nitorina a wo jinle. ls
awọn titẹ sii awọn awọ nipasẹ iyipada ayika LS_COLORS
, eyi ti o ti ṣeto dircolors(1)
da lori faili iṣeto ni dir_colors(5)
... Bẹẹni,
Jẹ ki a ṣe akiyesi diẹ sii
Lati pinnu iru ero awọ wo ni o fa idinku, a ṣẹda agbegbe idanwo kan:
$ 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
Awọn aaya 12,7 fun awọn faili 10, ko dara pupọ.
Nipa ọna, a nilo asia kan
--color=always
: biotilejepe o yipada sils --color=auto
, ṣugbọnls
ṣe iwari nigbati ko ba sopọ si ebute kan (fun apẹẹrẹ nipasẹ paipu tabi pẹlu itọka ti iṣelọpọ) ati mu awọ ṣiṣẹ ti o ba ṣeto siauto
. Ologbon eniyan.
Nitorina kini o n gba to gun? A wo pẹlu 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
[...]
Iro ohun: 10 awọn ipe lstat()
, 10 awọn ipe getxattr()
(eyiti gbogbo rẹ kuna nitori ayika wa ko ni awọn abuda ls n wa), awọn ipe 10 capget()
.
Nitootọ eyi le jẹ iṣapeye.
Iwa agbara? Bẹẹkọ
Tẹle imọran
$ 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
Iro ohun, to 8 aaya ti isare! A gba gbogbo awọn ipe gbowolori wọnyẹn kuro getxattr()
, ati awọn italaya capget()
sọnu ju, nla.
Ṣugbọn awọn ipe didanubi wọnyi tun wa lstat()
, Biotilejepe…
Awọn ododo melo ni o nilo?
Nitorinaa, a ṣe akiyesi diẹ sii LS_COLORS
.
Ni akọkọ a rọrun ni alaabo oniyipada yii:
$ 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
Kini!?! Si tun 13 aaya?
O wa ni jade pe nigbati ayika oniyipada LS_COLORS
ọkan ninu awọn eroja rẹ ko ni asọye tabi sonu <type>=color:
, o nlo data ti a ṣe sinu nipasẹ aiyipada ati pe o tun nlo awọn awọ. Nitorina ti o ba fẹ mu awọ-awọ kuro fun iru faili kan, o nilo lati danu rẹ pẹlu <type>=:
tabi <type> 00
ninu faili DIR_COLORS
.
Lẹhin ọpọlọpọ idanwo ati aṣiṣe, a dinku wiwa wa si eyi:
EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00
eyi ti a ti kọ bi
LS_COLORS='ex=00:su=00:sg=00:ca=00:'
Eyi tumọ si: maṣe ṣe awọ awọn faili nipasẹ abuda.
, bẹni nipasẹ
A yara ls
Ati pe ti o ko ba ṣe eyikeyi ninu awọn sọwedowo wọnyi, lẹhinna pe lstat()
farasin, ati nisisiyi o jẹ ọrọ ti o yatọ patapata:
$ 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 aaya lori atokọ ti awọn faili 10, igbasilẹ kan.
Ṣiṣeto Sherlock
Lati iṣẹju-aaya 13 pẹlu awọn eto aiyipada si awọn aaya 0,3 pẹlu awọn atunṣe kekere LS_COLORS
tumo si a 40-agbo isare nitori awọn isansa setuid
/ setgid
ati awọ executable awọn faili. Kii ṣe iru isonu nla bẹ.
Nitoribẹẹ, eyi ni tunto ni Sherlock fun olumulo kọọkan.
Ṣugbọn ti o ba fẹ da awọ pada, o le kan pada si awọn eto aiyipada:
$ unset LS_COLORS
Ṣugbọn lẹhinna lori awọn ilana pẹlu ọpọlọpọ awọn faili, rii daju pe o pọnti kọfi lakoko ti o nṣiṣẹ ls
.
orisun: www.habr.com