แž“แŸ…แž–แŸแž›แžŠแŸ‚แž›แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แž”แž„แŸ’แž€แžพแž“แž›แŸ’แž”แžฟแž“แžŠแŸ†แžŽแžพแžšแž€แžถแžš 40 แžŠแž„

แžแŸ’แž„แŸƒแž“แŸแŸ‡แž™แžพแž„แž…แž„แŸ‹แž“แžทแž™แžถแž™แžขแŸ†แž–แžธแž€แžถแžšแžขแžถแž”แŸ‹แžŠแŸแžแž…แžปแž„แž€แŸ’แžšแŸ„แž™แž”แŸ†แž•แžปแžแž˜แžฝแž™แž…แŸ†แž“แžฝแž“แž…แŸ†แž–แŸ„แŸ‡แž”แŸ’แžšแž–แŸแž“แŸ’แž’ Sherlock [แž“แŸแŸ‡แž‚แžบแž‡แžถแž…แž„แŸ’แž€แŸ„แž˜แžŠแŸ‚แž›แž˜แžถแž“แž”แŸ’แžšแžŸแžทแž‘แŸ’แž’แž—แžถแž–แžแŸ’แž–แžŸแŸ‹แž“แŸ…แžŸแžถแž€แž›แžœแžทแž‘แŸ’แž™แžถแž›แŸแž™ Stanford - แž”แŸ’แžšแž แžถแž€แŸ‹แž”แŸ’แžšแž แŸ‚แž›แŸ” trans.] แžŠแŸ‚แž›แž”แž„แŸ’แž€แžพแž“แž›แŸ’แž”แžฟแž“แž€แžถแžšแž…แžปแŸ‡แž”แž‰แŸ’แž‡แžธแžฏแž€แžŸแžถแžšแž“แŸ…แž€แŸ’แž“แžปแž„แžแžแžŠแŸ‚แž›แž˜แžถแž“แž…แŸ†แž“แžฝแž“แž’แžถแžแžปแž…แŸ’แžšแžพแž“แŸ”

แž˜แžทแž“แžŠแžผแž…แžขแžแŸ’แžแž”แž‘แž’แž˜แŸ’แž˜แžแžถแž‘แŸ แž“แŸแŸ‡แž‚แžบแž‡แžถแžšแž”แžถแž™แž€แžถแžšแžŽแŸแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แžแžถแž„แž€แŸ’แž“แžปแž„แž”แž“แŸ’แžแŸ‚แž˜แž‘แŸ€แžแžขแŸ†แž–แžธแžšแž”แŸ€แž”แžŠแŸ‚แž›แž™แžพแž„แž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž‘แŸ€แž„แž‘แžถแžแŸ‹แž“แŸ…แž›แžพ Sherlock แžŠแžพแž˜แŸ’แž”แžธแžšแž€แŸ’แžŸแžถแžœแžถแžฑแŸ’แž™แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž›แŸ’แžขแž”แŸ†แž•แžปแžแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แžšแž”แžŸแŸ‹แž™แžพแž„แŸ” แž™แžพแž„แžŸแž„แŸ’แžƒแžนแž˜แžแžถแž“แžนแž„แž”แŸ„แŸ‡แž–แžปแž˜แŸ’แž–แžขแžแŸ’แžแž”แž‘แž”แŸ‚แž”แž“แŸแŸ‡แž”แž“แŸ’แžแŸ‚แž˜แž‘แŸ€แžแž“แžถแž–แŸแž›แžขแž“แžถแž‚แžแŸ”

แž€แžถแžšแž…แžปแŸ‡แž”แž‰แŸ’แž‡แžธแžฏแž€แžŸแžถแžšแž‡แžถแž…แŸ’แžšแžพแž“แžแŸ’แžšแžผแžœแž€แžถแžšแž–แŸแž›แžœแŸแž›แžถ

แžœแžถแž‘แžถแŸ†แž„แžขแžŸแŸ‹แž”แžถแž“แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž‡แžถแž˜แžฝแž™แž“แžนแž„แžŸแŸ†แžŽแžฝแžšแž‡แŸ†แž“แžฝแž™แž”แž…แŸ’แž…แŸแž€แž‘แŸแžŸแž–แžธแžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แŸ” แž‚แžถแžแŸ‹แž”แžถแž“แžšแžถแž™แž€แžถแžšแžŽแŸแž–แžธแž”แž‰แŸ’แž แžถแžŠแŸ‚แž›แž€แžถแžšแž”แŸ’แžšแž แžถแžšแž‡แžธแžœแžทแž ls แž…แŸ†แžŽแžถแž™แž–แŸแž›แž–แžธแžšแž”แžธแž“แžถแž‘แžธแž“แŸ…แž€แŸ’แž“แžปแž„แžแžแžŠแŸ‚แž›แž˜แžถแž“แž’แžถแžแžปแž‡แžถแž„ 15 $SCRATCH [แžแžแžฏแž€แžŸแžถแžšแž”แžŽแŸ’แžแŸ„แŸ‡แžขแžถแžŸแž“แŸ’แž“ - แž”แŸ’แžšแž แžถแž€แŸ‹แž”แŸ’แžšแž แŸ‚แž›แŸ” แž•แŸ’แž›แžผแžœ] แŸ”

แžฏแž€แžŸแžถแžšแžšแžถแž”แŸ‹แž–แžถแž“แŸ‹แž“แŸ…แž€แŸ’แž“แžปแž„แžแžแž˜แžฝแž™แž‡แžถแž’แž˜แŸ’แž˜แžแžถแž”แž„แŸ’แž€แž”แž“แŸ’แž‘แžปแž€แžŠแž›แŸ‹แž”แŸ’แžšแž–แŸแž“แŸ’แž’แžฏแž€แžŸแžถแžš แž แžพแž™แž–แžทแžแž‡แžถแž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แžŽแŸ‚แž“แžถแŸ†แž‘แŸแŸ” แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž”แžถแž“แžŠแžนแž„แžšแžฟแž„แž“แŸแŸ‡ แž แžพแž™แž”แžถแž“แžŸแžถแžšแž—แžถแž–แžแžถแžœแžถแž˜แžทแž“แž›แŸ’แžข แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž”แžถแž“แž“แžทแž™แžถแž™แžแžถ แž€แžถแžšแž…แžปแŸ‡แž”แž‰แŸ’แž‡แžธแž“แŸแŸ‡แž‚แžบแž›แžฟแž“แž‡แžถแž„ 1000 แžŠแž„แž“แŸ…แž›แžพแž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแž™แžฝแžšแžŠแŸƒแžšแž”แžŸแŸ‹แž‚แžถแžแŸ‹แž‡แžถแž„ Sherlock แŸ” แž‡แžถแž€แžถแžšแž–แžทแžแžŽแžถแžŸแŸ‹ แž“แŸแŸ‡แž’แŸ’แžœแžพแžฑแŸ’แž™แž™แžพแž„แžˆแžบแž…แžถแž”แŸ‹แŸ” แžŠแžผแž…แŸ’แž“แŸแŸ‡โ€‹แž™แžพแž„โ€‹แž”แžถแž“โ€‹แž˜แžพแž›โ€‹แž€แžถแž“แŸ‹แžแŸ‚โ€‹แž‡แŸ’แžšแŸ…แŸ”

แžŠแŸ„แž™แžŸแžถแžšแžแŸ‚ ls แž˜แžพแž›แž‘แŸ…แžŸแŸ’แžšแžŸแŸ‹แžŸแŸ’แžขแžถแž

แž™แžพแž„โ€‹แž”แžถแž“โ€‹แž˜แžพแž›โ€‹แž‘แŸ…โ€‹แž›แžพโ€‹แžขแŸ’แžœแžธโ€‹แžŠแŸ‚แž›โ€‹แžœแžถโ€‹แž–แžทแžโ€‹แž‡แžถโ€‹แž’แŸ’แžœแžพ ls แž–แŸแž›โ€‹แž…แžปแŸ‡โ€‹แž”แž‰แŸ’แž‡แžธโ€‹แžแž แž แžพแž™โ€‹แž แŸแžแžปโ€‹แžขแŸ’แžœแžธโ€‹แž”แžถแž“โ€‹แž‡แžถโ€‹แžŠแŸ†แžŽแžพแžšโ€‹แž€แžถแžšโ€‹แžแŸ’แžšแžผแžœโ€‹แž…แŸ†แžŽแžถแž™โ€‹แž–แŸแž›โ€‹แž™แžผแžšโ€‹แž˜แŸ’แž›แŸ‰แŸแŸ‡แŸ” แž“แŸ…แž›แžพแž€แžถแžšแž…แŸ‚แž€แž…แžถแž™แž‘แŸ†แž“แžพแž”แž”แŸ†แž•แžปแžแŸ” ls แžแžถแž˜แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜แžœแžถแžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‡แžถ ls --color=autoแžŠแŸ„แž™แžŸแžถแžšแžแŸ‚แž˜แž“แžปแžŸแŸ’แžŸแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แž“แžถแž…แžผแž›แž…แžทแžแŸ’แžแž–แžŽแŸŒแŸ”

แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž–แžŽแŸŒแžŠแŸแžŸแŸ’แžšแžŸแŸ‹แžŸแŸ’แžขแžถแžแž˜แž€แž€แŸ’แž“แžปแž„แžแž˜แŸ’แž›แŸƒแž˜แžฝแž™: แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžšแžถแž›แŸ‹แžฏแž€แžŸแžถแžš ls แžแŸ’แžšแžผแžœแžแŸ‚แž‘แž‘แžฝแž›แž”แžถแž“แž–แŸแžแŸŒแž˜แžถแž“แžขแŸ†แž–แžธแž”แŸ’แžšแž—แŸแž‘แžฏแž€แžŸแžถแžš แž€แžถแžšแžขแž“แžปแž‰แŸ’แž‰แžถแžแžšแž”แžŸแŸ‹แžœแžถ แž‘แž„แŸ‹แž‡แžถแžแžท แž‚แžปแžŽแž›แž€แŸ’แžแžŽแŸˆแž”แž“แŸ’แžแŸ‚แž˜ แž“แžทแž„แž•แŸ’แžŸแŸแž„แž‘แŸ€แž แžŠแžพแž˜แŸ’แž”แžธแž‡แŸ’แžšแžพแžŸแžšแžพแžŸแž–แžŽแŸŒแžŠแŸ‚แž›แžŸแž˜แžšแž˜แŸ’แž™แŸ”

แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แžŸแžถแž˜แž‰แŸ’แž‰แž˜แžฝแž™แž…แŸ†แž–แŸ„แŸ‡แž”แž‰แŸ’แž แžถแž‚แžบแžแŸ’แžšแžผแžœแž”แžทแž‘แž–แžŽแŸŒแž“แŸ…แž€แŸ’แž“แžปแž„ ls แž‘แžถแŸ†แž„แžขแžŸแŸ‹แž‚แŸ’แž“แžถ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžŸแŸ’แžšแž˜แŸƒแž˜แžพแž›แž€แžถแžšแžแžนแž„แžŸแž˜แŸ’แž”แžถแžšแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แŸ” แž˜แžทแž“แžŸแŸ’แžแžทแžแž€แŸ’แžšแŸ„แž˜แž€แžถแž›แŸˆแž‘แŸแžŸแŸˆแžŽแžถแž€แŸแžŠแŸ„แž™ แžขแŸ’แž“แž€แž‚แžฝแžšแžแŸ‚แžŠแž€แž…แŸแž‰แž“แžผแžœแž›แž‘แŸ’แž’แž•แž›แž–แžŽแŸŒ แž™แžพแž„แž˜แžทแž“แž˜แŸ‚แž“แž‡แžถแž”แžทแžŸแžถแž…แž‘แŸแŸ”

แžŠแžผแž…แŸ’แž“แŸแŸ‡โ€‹แž™แžพแž„โ€‹แž”แžถแž“โ€‹แž˜แžพแž›โ€‹แž€แžถแž“แŸ‹แžแŸ‚โ€‹แž‡แŸ’แžšแŸ…แŸ” ls แž’แžถแžแžปแž–แžŽแŸŒแžแžถแž˜แžšแž™แŸˆแžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“ LS_COLORSแžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แž€แŸ†แžŽแžแŸ‹ dircolors(1) แž•แŸ’แžขแŸ‚แž€แž›แžพแžฏแž€แžŸแžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ dir_colors(5)... แž”แžถแž‘ แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ‚แž›แžขแžถแž…แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž”แžถแž“แžขแžถแž“แžฏแž€แžŸแžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžŠแžพแž˜แŸ’แž”แžธแž”แž„แŸ’แž€แžพแžแžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“แžŠแŸ‚แž›แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แž”แŸ’แžšแžพ (แž แžพแž™แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แž˜แžทแž“แžŠแžนแž„แžขแŸ†แž–แžธแžฏแž€แžŸแžถแžš แž‘แŸ’แžœแžถแžš (แž’แŸ’แžœแžพ) แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€ 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 แžšแž€โ€‹แžƒแžพแž‰โ€‹แž“แŸ…โ€‹แž–แŸแž›โ€‹แžŠแŸ‚แž›โ€‹แžœแžถโ€‹แž˜แžทแž“โ€‹แžแŸ’แžšแžผแžœโ€‹แž”แžถแž“โ€‹แžแž—แŸ’แž‡แžถแž”แŸ‹โ€‹แž‘แŸ…โ€‹แžŸแŸ’แžแžถแž“แžธแž™ (แžง. แžแžถแž˜โ€‹แž”แŸ†แž–แž„แŸ‹ แžฌโ€‹แž‡แžถแž˜แžฝแž™โ€‹แž“แžนแž„โ€‹แž€แžถแžšโ€‹แž”แž‰แŸ’แž‡แžผแž“โ€‹แž”แž“แŸ’แžโ€‹แž‘แžทแž“แŸ’แž“แž•แž›) แž“แžทแž„โ€‹แž”แžทแž‘โ€‹แž€แžถแžšโ€‹แžŠแžถแž€แŸ‹โ€‹แž–แžŽแŸŒโ€‹แž”แŸ’แžšแžŸแžทแž“โ€‹แž”แžพโ€‹แž”แžถแž“โ€‹แž€แŸ†แžŽแžแŸ‹โ€‹แž‘แŸ… 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(), 10 แž แŸ… getxattr() (แžŠแŸ‚แž›แž‘แžถแŸ†แž„แžขแžŸแŸ‹แž”แžšแžถแž‡แŸแž™แžŠแŸ„แž™แžŸแžถแžšแžแŸ‚แž”แžšแžทแžŸแŸ’แžแžถแž“แžšแž”แžŸแŸ‹แž™แžพแž„แž˜แžทแž“แž˜แžถแž“แž‚แžปแžŽแž›แž€แŸ’แžแžŽแŸˆแžŠแŸ‚แž› ls แž€แŸ†แž–แžปแž„แžŸแŸ’แžœแŸ‚แž„แžšแž€) แž€แžถแžšแž แŸ…แž‘แžผแžšแžŸแŸแž–แŸ’แž‘แž…แŸ†แž“แžฝแž“ 10 capget().

แž”แŸ’แžšแžถแž€แžŠแžŽแžถแžŸแŸ‹ แž“แŸแŸ‡แžขแžถแž…แžแŸ’แžšแžผแžœแž”แžถแž“แž’แŸ’แžœแžพแžฑแŸ’แž™แž”แŸ’แžšแžŸแžพแžšแŸ”

แž‚แžปแžŽแž›แž€แŸ’แžแžŽแŸˆแžŸแž˜แžแŸ’แžแž—แžถแž–? แž‘แŸ

แž’แŸ’แžœแžพแžแžถแž˜แž€แžถแžšแžŽแŸ‚แž“แžถแŸ† แž€แŸ†แž แžปแžŸแž€แžถแž›แž–แžธ 10 แž†แŸ’แž“แžถแŸ†แž˜แžปแž“แž™แžพแž„แž”แžถแž“แž–แŸ’แž™แžถแž™แžถแž˜แž”แžทแž‘แž€แžถแžšแžแŸ’แžšแžฝแžแž–แžทแž“แžทแžแŸ’แž™แž‚แžปแžŽแž›แž€แŸ’แžแžŽแŸˆ แžŸแž˜แžแŸ’แžแž—แžถแž–:

$ 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:แžœแžถแž”แŸ’แžšแžพแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แž‘แžทแž“แŸ’แž“แž“แŸแž™แžŠแŸ‚แž›แž—แŸ’แž‡แžถแž”แŸ‹แž˜แž€แž‡แžถแž˜แžฝแž™แžแžถแž˜แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜ แž แžพแž™แž“แŸ…แžแŸ‚แž”แŸ’แžšแžพแž–แžŽแŸŒแŸ” แžŠแžผแž…แŸ’แž“แŸแŸ‡แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แž…แž„แŸ‹แž”แžทแž‘แž–แžŽแŸŒแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž”แŸ’แžšแž—แŸแž‘แžฏแž€แžŸแžถแžšแž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แž˜แžฝแž™ แžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแž”แžŠแžทแžŸแŸแž’แžœแžถแž‡แžถแž˜แžฝแž™ <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 แž˜แžถแž“แž“แŸแž™แžแžถแž€แžถแžšแž”แž„แŸ’แž€แžพแž“แž›แŸ’แž”แžฟแž“ 40 แžŠแž„แžŠแŸ„แž™แžŸแžถแžšแžแŸ‚แžขแžœแžแŸ’แžแž˜แžถแž“ setuid / setgid แž“แžทแž„แžฏแž€แžŸแžถแžšแžŠแŸ‚แž›แžขแžถแž…แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž”แžถแž“แž–แžŽแŸŒแŸ” แž˜แžทแž“แž˜แŸ‚แž“แž‡แžถแž€แžถแžšแžแžถแžแž”แž„แŸ‹แž’แŸ†แž”แŸ‚แž”แž“แŸแŸ‡แž‘แŸแŸ”

แž‡แžถแž€แžถแžšแž–แžทแžแžŽแžถแžŸแŸ‹ แžฅแžกแžผแžœแž“แŸแŸ‡แžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แž“แŸ…แž€แŸ’แž“แžปแž„ Sherlock แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž˜แŸ’แž“แžถแž€แŸ‹แŸ—แŸ”

แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แž…แž„แŸ‹แžแŸ’แžšแžกแž”แŸ‹แž–แžŽแŸŒแžœแžทแž‰ แžขแŸ’แž“แž€แž‚แŸ’แžšแžถแž“แŸ‹แžแŸ‚แžขแžถแž…แžแŸ’แžšแžกแž”แŸ‹แž‘แŸ…แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜แžœแžทแž‰แŸ–

$ unset LS_COLORS

แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แž“แŸ…แž›แžพแžแžแžŠแŸ‚แž›แž˜แžถแž“แžฏแž€แžŸแžถแžšแž…แŸ’แžšแžพแž“ แžแŸ’แžšแžผแžœแž”แŸ’แžšแžถแž€แžŠแžแžถแž‰แŸ‰แžถแŸ†แž€แžถแž แŸ’แžœแŸแžแžŽแŸˆแž–แŸแž›แžŠแŸ‚แž›แžœแžถแž€แŸ†แž–แžปแž„แžŠแŸ†แžŽแžพแžšแž€แžถแžš ls.

แž”แŸ’แžšแž—แž–: www.habr.com

แž‘แžทแž‰แž€แžถแžšแž”แž„แŸ’แž แŸ„แŸ‡แžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แž˜แžถแž“แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS, แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS ๐Ÿ”ฅ แž‘แžทแž‰แžŸแŸแžœแžถแž”แž„แŸ’แž แŸ„แŸ‡แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS แž“แžทแž„แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS | ProHoster