Nigbati oniyipada ayika ṣe iyara ilana naa nipasẹ awọn akoko 40

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, executable ka faili iṣeto ni lati ṣẹda oniyipada ayika, eyiti ls lẹhinna lo (ati pe ti o ko ba mọ nipa awọn faili nipa (ṣe), lẹhinna dir_colors yoo ṣiṣẹ, Pelu ohun gbogbo).

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 si ls --color=auto, ṣugbọn ls ṣ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 si auto. 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 kokoro lati 10 odun seyin, a gbiyanju lati mu ayẹwo awọn abuda ṣiṣẹ Awọn agbara:

$ 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. Awọn agbara, ṣugbọn bit nipa bit setuid/setgid, bẹni nipasẹ executability flag.

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

Fi ọrọìwòye kun