ಇಂದು ನಾವು ಷರ್ಲಾಕ್ ಸಿಸ್ಟಮ್ಗೆ ಕೆಲವು ಇತ್ತೀಚಿನ ನವೀಕರಣಗಳ ಕುರಿತು ಮಾತನಾಡಲು ಬಯಸುತ್ತೇವೆ [ಇದು ಸ್ಟ್ಯಾನ್ಫೋರ್ಡ್ ವಿಶ್ವವಿದ್ಯಾಲಯದಲ್ಲಿ ಉನ್ನತ-ಕಾರ್ಯಕ್ಷಮತೆಯ ಕ್ಲಸ್ಟರ್ - ಅಂದಾಜು. ಟ್ರಾನ್ಸ್.], ಇದು ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ನಮೂದುಗಳೊಂದಿಗೆ ಡೈರೆಕ್ಟರಿಗಳಲ್ಲಿ ಫೈಲ್ಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುವುದನ್ನು ಗಮನಾರ್ಹವಾಗಿ ವೇಗಗೊಳಿಸುತ್ತದೆ.
ಸಾಮಾನ್ಯ ಲೇಖನಗಳಿಗಿಂತ ಭಿನ್ನವಾಗಿ, ಇದು ನಮ್ಮ ಬಳಕೆದಾರರಿಗೆ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಷರ್ಲಾಕ್ನಲ್ಲಿ ನಾವು ಹೇಗೆ ನಿಯಮಿತವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತೇವೆ ಎಂಬುದರ ಕುರಿತು ಆಂತರಿಕ ವರದಿಯಾಗಿದೆ. ಮುಂದೆಯೂ ಇಂತಹ ಇನ್ನಷ್ಟು ಲೇಖನಗಳನ್ನು ಪ್ರಕಟಿಸಲೆಂದು ಆಶಿಸುತ್ತೇವೆ.
ಅನೇಕ ಫೈಲ್ಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡಲು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ
ಇದು ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಂದ ತಾಂತ್ರಿಕ ಬೆಂಬಲ ಪ್ರಶ್ನೆಯೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಯಿತು. ಅವರು ಮರಣದಂಡನೆ ಸಮಸ್ಯೆಯನ್ನು ವರದಿ ಮಾಡಿದರು ls
15 ನಮೂದುಗಳನ್ನು ಹೊಂದಿರುವ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಕೆಲವು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ $SCRATCH
[ತಾತ್ಕಾಲಿಕ ಫೈಲ್ಗಳಿಗಾಗಿ ಡೈರೆಕ್ಟರಿ - ಅಂದಾಜು. ಲೇನ್].
ಒಂದು ಡೈರೆಕ್ಟರಿಯಲ್ಲಿರುವ ಸಾವಿರಾರು ಫೈಲ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಫೈಲ್ ಸಿಸ್ಟಮ್ಗೆ ಹೊರೆಯಾಗುತ್ತವೆ ಮತ್ತು ಖಂಡಿತವಾಗಿಯೂ ಶಿಫಾರಸು ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಬಳಕೆದಾರರು ಇದನ್ನು ತಿಳಿದಿದ್ದರು ಮತ್ತು ಅದು ಉತ್ತಮವಾಗಿಲ್ಲ ಎಂದು ಒಪ್ಪಿಕೊಂಡರು, ಆದರೆ ಅವರ ಲ್ಯಾಪ್ಟಾಪ್ನಲ್ಲಿ ಶೆರ್ಲಾಕ್ಗಿಂತ ಪಟ್ಟಿಯು 1000 ಪಟ್ಟು ವೇಗವಾಗಿದೆ ಎಂದು ಉಲ್ಲೇಖಿಸಿದ್ದಾರೆ. ಖಂಡಿತ, ಇದು ನಮಗೆ ನೋವುಂಟು ಮಾಡಿದೆ. ಆದ್ದರಿಂದ ನಾವು ಆಳವಾಗಿ ನೋಡಿದೆವು.
ಏಕೆಂದರೆ ಅದು ಚೆನ್ನಾಗಿ ಕಾಣುತ್ತದೆ
ಅದು ನಿಜವಾಗಿ ಏನು ಮಾಡುತ್ತದೆ ಎಂದು ನಾವು ನೋಡಿದ್ದೇವೆ ls
ಡೈರೆಕ್ಟರಿಯನ್ನು ಪಟ್ಟಿ ಮಾಡುವಾಗ ಮತ್ತು ಪ್ರಕ್ರಿಯೆಯು ಏಕೆ ಹೆಚ್ಚು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಹೆಚ್ಚಿನ ಆಧುನಿಕ ವಿತರಣೆಗಳಲ್ಲಿ ls
ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಅದು ಚಲಿಸುತ್ತದೆ ls --color=auto
, ಏಕೆಂದರೆ ಪ್ರತಿಯೊಬ್ಬರೂ ಬಣ್ಣಗಳನ್ನು ಇಷ್ಟಪಡುತ್ತಾರೆ.
ಆದರೆ ಸುಂದರವಾದ ಬಣ್ಣಗಳು ಬೆಲೆಗೆ ಬರುತ್ತವೆ: ಪ್ರತಿ ಫೈಲ್ಗೆ ls
ಸೂಕ್ತವಾದ ಬಣ್ಣವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಫೈಲ್ ಪ್ರಕಾರ, ಅದರ ಅನುಮತಿಗಳು, ಫ್ಲ್ಯಾಗ್ಗಳು, ವಿಸ್ತೃತ ಗುಣಲಕ್ಷಣಗಳು ಮತ್ತು ಮುಂತಾದವುಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಬೇಕು.
ಸಮಸ್ಯೆಗೆ ಒಂದು ಸರಳ ಪರಿಹಾರವೆಂದರೆ ಎಲ್ಎಸ್ನಲ್ಲಿ ಬಣ್ಣವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದು, ಆದರೆ ಬಳಕೆದಾರರ ಆಕ್ರೋಶವನ್ನು ಊಹಿಸಿ. ಯಾವುದೇ ಸಂದರ್ಭಗಳಲ್ಲಿ ನೀವು ಬಣ್ಣದ ಔಟ್ಪುಟ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಾರದು, ನಾವು ರಾಕ್ಷಸರಲ್ಲ.
ಆದ್ದರಿಂದ ನಾವು ಆಳವಾಗಿ ನೋಡಿದೆವು. ls
ಪರಿಸರ ವೇರಿಯಬಲ್ ಮೂಲಕ ಬಣ್ಣಗಳ ನಮೂದುಗಳು LS_COLORS
, ಇದು ಹೊಂದಿಸಲಾಗಿದೆ dircolors(1)
ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ ಅನ್ನು ಆಧರಿಸಿದೆ dir_colors(5)
... ಹೌದು,
ಹತ್ತಿರದಿಂದ ನೋಡೋಣ
ಯಾವ ಬಣ್ಣದ ಯೋಜನೆ ನಿಧಾನಗತಿಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಲು, ನಾವು ಪ್ರಾಯೋಗಿಕ ವಾತಾವರಣವನ್ನು ರಚಿಸಿದ್ದೇವೆ:
$ 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
[...]
ವಾಹ್: 10 ಕರೆಗಳು lstat()
, 10 ಕರೆಗಳು getxattr()
(ಇದು ವಿಫಲಗೊಳ್ಳುತ್ತದೆ ಏಕೆಂದರೆ ನಮ್ಮ ಪರಿಸರವು ಹುಡುಕುತ್ತಿರುವ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿಲ್ಲ), 10 ಕರೆಗಳು capget()
.
ಖಂಡಿತವಾಗಿಯೂ ಇದನ್ನು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಬಹುದು.
ಸಾಮರ್ಥ್ಯಗಳ ಗುಣಲಕ್ಷಣ? ಇಲ್ಲ
ಸಲಹೆಯನ್ನು ಅನುಸರಿಸಿ
$ 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
ವಾಹ್, 8 ಸೆಕೆಂಡುಗಳವರೆಗೆ ವೇಗವರ್ಧನೆ! ನಾವು ಆ ಎಲ್ಲಾ ದುಬಾರಿ ಕರೆಗಳನ್ನು ತೊಡೆದುಹಾಕಿದ್ದೇವೆ 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:'
ಇದರರ್ಥ: ಗುಣಲಕ್ಷಣದ ಮೂಲಕ ಫೈಲ್ಗಳನ್ನು ಬಣ್ಣ ಮಾಡಬೇಡಿ.
, ಆಗಲಿ
ನಾವು ವೇಗವನ್ನು ಹೆಚ್ಚಿಸುತ್ತೇವೆ 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 ಸೆಕೆಂಡುಗಳು, ದಾಖಲೆ.
ಷರ್ಲಾಕ್ ಅನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ
ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳೊಂದಿಗೆ 13 ಸೆಕೆಂಡುಗಳಿಂದ ಸಣ್ಣ ಹೊಂದಾಣಿಕೆಗಳೊಂದಿಗೆ 0,3 ಸೆಕೆಂಡುಗಳವರೆಗೆ LS_COLORS
ಅನುಪಸ್ಥಿತಿಯ ಕಾರಣದಿಂದಾಗಿ 40 ಪಟ್ಟು ವೇಗವರ್ಧನೆ ಎಂದರ್ಥ setuid
/ setgid
ಮತ್ತು ಬಣ್ಣದ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಫೈಲ್ಗಳು. ಅಂತಹ ದೊಡ್ಡ ನಷ್ಟವಲ್ಲ.
ಸಹಜವಾಗಿ, ಇದನ್ನು ಈಗ ಪ್ರತಿ ಬಳಕೆದಾರರಿಗಾಗಿ ಷರ್ಲಾಕ್ನಲ್ಲಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ.
ಆದರೆ ನೀವು ಬಣ್ಣವನ್ನು ಹಿಂತಿರುಗಿಸಲು ಬಯಸಿದರೆ, ನೀವು ಕೇವಲ ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ಹಿಂತಿರುಗಬಹುದು:
$ unset LS_COLORS
ಆದರೆ ನಂತರ ಬಹಳಷ್ಟು ಫೈಲ್ಗಳನ್ನು ಹೊಂದಿರುವ ಡೈರೆಕ್ಟರಿಗಳಲ್ಲಿ, ಅದು ಚಾಲನೆಯಲ್ಲಿರುವಾಗ ಕಾಫಿಯನ್ನು ತಯಾರಿಸಲು ಮರೆಯದಿರಿ ls
.
ಮೂಲ: www.habr.com