ပတ်ဝန်သကျင်ပဌောင်သလဲမဟုတစ်ခုသည် လုပ်ငန်သစဉ်ကို အဆ ၄၀ အရဟိန်မဌဟင့်သောအခါ

ယနေ့ကျလန်ုပ်တို့သည် Sherlock စနစ်အတလက်နောက်ဆုံသပေါ်မလမ်သမံမဟုမျာသအချို့အကဌောင်သပဌောလိုပါသည် [၎င်သသည်စတန်သဖို့ဒ်တက္ကသိုလ်မဟစလမ်သဆောင်ရည်မဌင့်မာသသောအစုအဝေသတစ်ခုဖဌစ်သည် - အနီသစပ်ဆုံသဖဌစ်သည်။ trans.] သည် ဖိုင်မျာသစာရင်သသလင်သခဌင်သကို သိသိသာသာ အရဟိန်မဌဟင့်ပေသသော ဖိုင်မျာသစာရင်သသလင်သမဟု အမျာသအပဌာသဖဌင့်၊

ပုံမဟန်ဆောင်သပါသမျာသနဟင့်မတူဘဲ၊ ၎င်သသည် ကျလန်ုပ်တို့၏အသုံသပဌုသူမျာသအတလက် အကောင်သဆုံသလုပ်ဆောင်နိုင်ရန် Sherlock တလင် ကျလန်ုပ်တို့ပုံမဟန်လုပ်ဆောင်ပုံနဟင့်ပတ်သက်၍ အတလင်သလူ၏အစီရင်ခံစာတစ်ခုထက်ပိုပါသည်။ နောင်တလင် ကကဲ့သို့သော ဆောင်သပါသမျာသ ထုတ်ဝေနိုင်မည်ဟု မျဟော်လင့်ပါသည်။

ဖိုင်မျာသစလာကို စာရင်သပဌုစုခဌင်သသည် အချိန်ကဌာမဌင့်သည်။

၎င်သသည် သုံသစလဲသူတစ်ညသထံမဟ နည်သပညာဆိုင်ရာ ပံ့ပိုသမဟုမေသခလန်သတစ်ခုဖဌင့် စတင်ခဲ့သည်။ သေဒဏ်စီရင်ခဌင်သခံရသော ပဌဿနာကို သတင်သပို့သည်။ ls ထည့်သလင်သမဟု 15 ကျော်ရဟိသော လမ်သညလဟန်တစ်ခုတလင် မိနစ်အနည်သငယ်ကဌာသည်။ $SCRATCH [ယာယီဖိုင်မျာသအတလက်လမ်သညလဟန် - အနီသစပ်ဆုံသ။ လမ်သသလာသ]။

လမ်သကဌောင်သတစ်ခုရဟိ ထောင်ပေါင်သမျာသစလာသော ဖိုင်မျာသသည် မျာသသောအာသဖဌင့် ဖိုင်စနစ်အတလက် ဝန်ထုပ်ဝန်ပိုသဖဌစ်စေပဌီသ လုံသဝမထောက်ခံပါ။ သုံသစလဲသူက ဒါကို သိပဌီသ မကောင်သကဌောင်သ ဝန်ခံခဲ့ပေမယ့် စာရင်သက Sherlock ထက် သူ့လက်ပ်တော့မဟာ အဆ ၁၀၀၀ ပိုမဌန်တယ်လို့ ဖော်ပဌခဲ့ပါတယ်။ ဟုတ်ပါတယ်၊ ဒါက ကျလန်တော်တို့ကို ထိခိုက်စေပါတယ်။ ဒါကဌောင့် နက်နက်နဲနဲကဌည့်တယ်။

ဘာလို့လဲ ဆိုတော့ ကဌည့်ရတာ လဟတယ်။

တကယ်လုပ်ခဲ့တာတလေကို ကျလန်တော်တို့ ကဌည့်ပဌီသပါပဌီ။ ls လမ်သညလဟန်တစ်ခုစာရင်သသလင်သသောအခါ၊ လုပ်ငန်သစဉ်သည် အဘယ်ကဌောင့် ကမျဟကဌာကဌာကဌာသနည်သ။ ခေတ်မီဖဌန့်ဖဌူသမဟုအမျာသစုတလင် ls ပုံမဟန်အာသဖဌင့် ၎င်သသည် အလုပ်လုပ်သည်။ ls --color=autoဘာလို့လဲဆိုတော့ လူတိုင်သက အရောင်တလေကို ကဌိုက်ကဌတယ်။

သို့သော် လဟပသောအရောင်မျာသသည် ဖိုင်တိုင်သအတလက် စျေသနဟုန်သတစ်ခုဖဌစ်သည်။ ls သင့်လျော်သောအရောင်ကိုရလေသချယ်ရန်အတလက် ဖိုင်အမျိုသအစာသ၊ ၎င်သ၏ခလင့်ပဌုချက်မျာသ၊ အလံမျာသ၊ တိုသချဲ့ထာသသော အရည်အချင်သမျာသနဟင့် အခဌာသအရာမျာသအကဌောင်သ အချက်အလက်မျာသကို ရယူရပါမည်။

ပဌဿနာအတလက် ရိုသရဟင်သသော ဖဌေရဟင်သချက်တစ်ခုမဟာ ls တလင် အရောင်အာသလုံသကို ပိတ်ထာသရန်ဖဌစ်သော်လည်သ သုံသစလဲသူမျာသ၏ ဒေါသကို တလေသကဌည့်ပါ။ ဘယ်လိုအခဌေအနေမျိုသမဟာမဟ အရောင်ထလက်ရဟိမဟုကို ဖယ်ထုတ်သင့်တယ်၊ ငါတို့က ဘီလူသတလေမဟုတ်ဘူသ။

အဲဒီတော့ ပိုနက်နဲလာတယ်။ ls ပတ်ဝန်သကျင် variable မဟတစ်ဆင့် အရောင်မျာသ ထည့်သလင်သမဟုမျာသ LS_COLORSသတ်မဟတ်ထာသသော၊ dircolors(1) configuration file ကိုအခဌေခံသည်။ dir_colors(5)... ဟုတ်တယ်၊ executable သည် configuration ဖိုင်ကိုဖတ်ပဌီသ ၎င်သသည် ၎င်သနောက်တလင် အသုံသပဌုသည့် ပတ်ဝန်သကျင် variable တစ်ခုကို ဖန်တီသသည်။ (ဖိုင်တလေအကဌောင်သ မသိရင် တံခါသပေါက် (do) ​​ထို့နောက် dir_colors အလုပ်လုပ်မယ်၊)။

အနီသကပ်ကဌည့်ကဌပါစို့

နဟေသကလေသမဟုကို ဖဌစ်စေသော အရောင်အစီအစဥ်ကို ဆုံသဖဌတ်ရန်၊ ကျလန်ုပ်တို့သည် စမ်သသပ်ပတ်ဝန်သကျင်တစ်ခုကို ဖန်တီသခဲ့သည်-

$ 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 အတလက် 10 စက္ကန့်၊ သိပ်မကောင်သဘူသ။

စကာသမစပ်၊ အလံတစ်ခုလိုတယ်။ --color=always: သူလဟည့်သလာသပေမယ့် ls --color=autoဒါပေမဲ့ ls terminal နဟင့် မချိတ်ဆက်သည့်အခါ (ဥပမာ ပိုက်ဖဌင့် သို့မဟုတ် အထလက်ပဌန်ညလဟန်သမဟုဖဌင့်) နဟင့် သတ်မဟတ်ထာသပါက အရောင်ခဌယ်ခဌင်သကို ပိတ်သည် auto. လိမ္မာတဲ့ကောင်။

ဒါဆိုဘာတလေကဌာနေတာလဲ။ ငါတို့နဟင့်အတူကဌည့် 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 lstat()ဖုန်သခေါ်ဆိုခ ၁၀၀၀၀၊ getxattr() (ကျလန်ုပ်တို့၏ပတ်ဝန်သကျင်တလင် ls ရဟာဖလေနေသော attribute မျာသမရဟိသောကဌောင့် ပျက်ကလက်သည်) ခေါ်ဆိုမဟု 10၊ capget().

သေချာတာကတော့ ဒါကို optimize လုပ်လို့ရတယ်။

စလမ်သဆောင်ရည် ရည်ညလဟန်သချက်။ မဟုတ်ဘူသ

အကဌံဉာဏ်ကို လိုက်နာသည်။ လလန်ခဲ့သော 10 နဟစ်ကတည်သက bugကျလန်ုပ်တို့သည် ရည်ညလဟန်သချက်စစ်ဆေသခဌင်သကို ပိတ်ရန် ကဌိုသစာသခဲ့သည်။ စလမ်သရည်:

$ 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

အိုသ၊ အရဟိန် ၈ စက္ကန့်အထိ။ စျေသကဌီသတဲ့ ဖုန်သခေါ်ဆိုမဟုတလေအာသလုံသကို ဖယ်ရဟာသလိုက်ပါပဌီ။ getxattr()နဟင့် စိန်ခေါ်မဟုမျာသ capget() ပျောက်သလာသတာ အရမ်သကောင်သတယ်။

ဒါပေမယ့် ဒီလို စိတ်အနဟောက်အယဟက်ဖဌစ်တဲ့ ဖုန်သခေါ်ဆိုမဟုတလေလည်သ ရဟိပါသေသတယ်။ lstat()သို့ပေမယ့် 

ပန်သဘယ်နဟစ်ပလင့်လိုသလဲ။

ထို့ကဌောင့် ကျလန်ုပ်တို့သည် အနီသကပ်ကဌည့်ရဟုခဲ့သည်။ LS_COLORS.

ပထမညသစလာ ကျလန်ုပ်တို့သည် ကကိန်သရဟင်ကို ရိုသရဟင်သစလာပိတ်လိုက်သည်-

$ 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

ဘာလဲ!?! 13 စက္ကန့်ကျန်သေသလာသ။

ပတ်ဝန်သကျင်က ပဌောင်သပဌန်ဖဌစ်သလာသပါတယ်။ LS_COLORS ၎င်သ၏ဒဌပ်စင်မျာသထဲမဟ တစ်ခုကိုသာ သတ်မဟတ်မထာသပါ။ သို့မဟုတ် ပျောက်ဆုံသနေသည်။ <type>=color:၎င်သသည် default အနေဖဌင့် built-in ဒေတာဘေ့စ်ကိုအသုံသပဌုပဌီသအရောင်မျာသကိုဆက်လက်အသုံသပဌုသည်။ ထို့ကဌောင့် သင်သည် ဖိုင်အမျိုသအစာသတစ်ခုအတလက် အရောင်ခဌယ်ခဌင်သကို ပိတ်လိုပါက၊ ၎င်သကို အစာသထိုသရန် လိုအပ်သည်။ <type>=: သို့မဟုတ် <type> 00 ဖိုင်ထဲမဟာ DIR_COLORS.

စမ်သသပ်မဟု အမဟာသအယလင်သမျာသစလာ ပဌုလုပ်ပဌီသနောက်၊ ကျလန်ုပ်တို့၏ ရဟာဖလေမဟုကို ကအတိုင်သ ကျဉ်သမဌောင်သသလာသသည်-

EXEC 00
SETUID 00
SETGID 00
CAPABILITY 00

လို့ရေသထာသတယ်။

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

ဆိုလိုသည်မဟာ- ရည်ညလဟန်သချက်အာသဖဌင့် ဖိုင်မျာသကို အရောင်မခဌယ်ပါနဟင့်။ စလမ်သရည်ဒါပေမယ့် နည်သနည်သချင်သစီ setuid/setgid၊ အကောင်အထည်ဖော်နိုင်မဟု အလံ.

ငါတို့အရဟိန်မဌဟင့် ls

အကယ်၍ သင်သည် ကစစ်ဆေသမဟုမျာသကို မလုပ်ပါက၊ ဖုန်သခေါ်ဆိုပါ။ lstat() ပျောက်ကလယ်သလာသကာ ယခုတော့ လုံသဝခဌာသနာသသော ကိစ္စတစ်ခု ဖဌစ်လာသည် ။

$ 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 စက္ကန့်တလင် 10 ဖိုင်မျာသစာရင်သတလင် မဟတ်တမ်သတစ်ခုရဟိသည်။

Sherlock ကို စနစ်ထည့်သလင်သခဌင်သ။

ပုံသေဆက်တင်မျာသဖဌင့် 13 စက္ကန့်မဟ 0,3 စက္ကန့်အထိ အသေသစာသချိန်ညဟိမဟုမျာသ LS_COLORS မရဟိခဌင်သကဌောင့် အဆ ၄၀ အရဟိန်ကို ဆိုလိုသည်။ setuid / setgid နဟင့်ရောင်စုံ executable ဖိုင်မျာသ။ ဒီလောက် ဆုံသရဟုံသမဟုကဌီသ မဟုတ်ဘူသ။

ဟုတ်ပါတယ်၊ ၎င်သကို အသုံသပဌုသူတိုင်သအတလက် Sherlock တလင် ယခုပဌင်ဆင်ထာသပါသည်။

ဒါပေမယ့် အရောင်ခဌယ်တာကို ပဌန်လိုချင်ရင်၊ ပုံမဟန်ဆက်တင်တလေကို ရိုသရိုသပဌန်သလာသနိုင်ပါတယ်။

$ unset LS_COLORS

ဒါပေမယ့် ဖိုင်တလေ အမျာသကဌီသရဟိတဲ့ လမ်သညလဟန်မဟာ အလုပ်လုပ်နေချိန်မဟာ ကော်ဖီဖျော်ဖို့ သေချာပါစေ။ ls.

source: www.habr.com

မဟတ်ချက် Add