-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathatom.xml
529 lines (279 loc) · 263 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>金振涛个人主页</title>
<icon>https://www.gravatar.com/avatar/cccb87fb7672ca8923d62bf56e478f23</icon>
<link href="/atom.xml" rel="self"/>
<link href="https://jinzt.github.io/"/>
<updated>2020-04-12T12:54:02.339Z</updated>
<id>https://jinzt.github.io/</id>
<author>
<name>金振涛</name>
<email>[email protected]</email>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>phaser游戏开发</title>
<link href="https://jinzt.github.io/posts/c151b467.html"/>
<id>https://jinzt.github.io/posts/c151b467.html</id>
<published>2020-04-12T12:53:32.204Z</published>
<updated>2020-04-12T12:54:02.339Z</updated>
<summary type="html">
</summary>
<category term="游戏开发" scheme="https://jinzt.github.io/categories/%E6%B8%B8%E6%88%8F%E5%BC%80%E5%8F%91/"/>
<category term="phaser" scheme="https://jinzt.github.io/tags/phaser/"/>
</entry>
<entry>
<title>进程间通信</title>
<link href="https://jinzt.github.io/posts/5729df21.html"/>
<id>https://jinzt.github.io/posts/5729df21.html</id>
<published>2020-04-12T12:51:33.901Z</published>
<updated>2020-04-12T12:16:39.968Z</updated>
<content type="html"><![CDATA[<h2 id="基本教程"><a href="#基本教程" class="headerlink" title="基本教程"></a>基本教程</h2><ul><li>w3c教程<a href="http://www.runoob.com/linux/linux-tutorial.html" target="_blank" rel="noopener">http://www.runoob.com/linux/linux-tutorial.html</a></li><li>linux入门教程<a href="http://www.92csz.com/study/linux/" target="_blank" rel="noopener">http://www.92csz.com/study/linux/</a></li></ul><h2 id="视频教程"><a href="#视频教程" class="headerlink" title="视频教程"></a>视频教程</h2><ul><li>51CTO教程<a href="http://edu.51cto.com/course/course_id-669.html" target="_blank" rel="noopener">http://edu.51cto.com/course/course_id-669.html</a></li><li>韩顺平linux教程<a href="http://www.icoolxue.com/album/show/23" target="_blank" rel="noopener">http://www.icoolxue.com/album/show/23</a></li></ul><h2 id="其它"><a href="#其它" class="headerlink" title="其它"></a>其它</h2><ul><li><a href="http://blog.chinaunix.net/uid-26430381-id-3746859.html" target="_blank" rel="noopener">操作系统知识回顾—进程线程模型 </a></li><li><a href="http://www.cnblogs.com/linshui91/archive/2010/09/29/1838770.html" target="_blank" rel="noopener">Linux进程间通信</a></li><li><a href="http://www.cnblogs.com/skyofbitbit/p/3651750.html" target="_blank" rel="noopener">Linux下的进程间通信-详解</a></li><li><a href="http://www.cnblogs.com/forstudy/archive/2012/03/26/2413724.html" target="_blank" rel="noopener">Linux–进程间通信(信号量,共享内存)</a></li><li><a href="http://blog.sina.com.cn/s/blog_a42fa3a801012jg4.html" target="_blank" rel="noopener">linux下进程间通信的几种主要方式简介 </a></li><li><a href="http://zhoulifa.bokee.com/6128714.html" target="_blank" rel="noopener">我是这样学习Linux下C语言编程的-RPC远程调用编程 </a></li><li><a href="http://www.cppblog.com/daly88/archive/2012/08/05/186363.html" target="_blank" rel="noopener">网游服务器多进程架构的思考</a></li><li><a href="http://www.cnblogs.com/hicjiajia/archive/2012/05/17/2506632.html" target="_blank" rel="noopener">Linux共享内存(一)</a></li><li><a href="http://blog.csdn.net/yanghua_kobe/article/details/7561016" target="_blank" rel="noopener">浅谈管道模型(Pipeline)</a></li><li><a href="http://blog.csdn.net/rl529014/article/details/51282425?_biz=MjM5OTA1MDUyMA==&mid=407358558&idx=2&sn=b21877f23bf4063fa311185009c1f0b7&scene=0#wechat_redirect1462324453987?ref=myread" target="_blank" rel="noopener">小何讲进程: Linux进程控制编程 (fork、vfork)</a></li></ul>]]></content>
<summary type="html">
<h2 id="基本教程"><a href="#基本教程" class="headerlink" title="基本教程"></a>基本教程</h2><ul>
<li>w3c教程<a href="http://www.runoob.com/linux/linux-tutorial
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>多线程</title>
<link href="https://jinzt.github.io/posts/5729df21.html"/>
<id>https://jinzt.github.io/posts/5729df21.html</id>
<published>2020-04-12T12:51:33.899Z</published>
<updated>2020-04-12T12:19:08.327Z</updated>
<content type="html"><![CDATA[<h2 id="基本教程"><a href="#基本教程" class="headerlink" title="基本教程"></a>基本教程</h2><ul><li>w3c教程<a href="http://www.runoob.com/linux/linux-tutorial.html" target="_blank" rel="noopener">http://www.runoob.com/linux/linux-tutorial.html</a></li><li>linux入门教程<a href="http://www.92csz.com/study/linux/" target="_blank" rel="noopener">http://www.92csz.com/study/linux/</a></li><li><a href="http://blog.csdn.net/Sunboy_2050/article/details/5920936" target="_blank" rel="noopener">linux多线程pthread</a></li></ul><h2 id="视频教程"><a href="#视频教程" class="headerlink" title="视频教程"></a>视频教程</h2><ul><li>51CTO教程<a href="http://edu.51cto.com/course/course_id-669.html" target="_blank" rel="noopener">http://edu.51cto.com/course/course_id-669.html</a></li><li>韩顺平linux教程<a href="http://www.icoolxue.com/album/show/23" target="_blank" rel="noopener">http://www.icoolxue.com/album/show/23</a></li></ul><h2 id="自旋锁-spinlock"><a href="#自旋锁-spinlock" class="headerlink" title="自旋锁 spinlock"></a>自旋锁 spinlock</h2><ul><li><a href="http://www.wowotech.net/kernel_synchronization/spinlock.html" target="_blank" rel="noopener">Linux内核同步机制之(四):spin lock</a></li><li><a href="http://blog.chinaunix.net/uid-21843387-id-3029906.html" target="_blank" rel="noopener">spin_lock & mutex_lock的区别? </a></li><li><a href="http://blog.csdn.net/bolike/article/details/9025389" target="_blank" rel="noopener">有了互斥量,为什么还需要条件变量?</a></li></ul><h2 id="无锁编程"><a href="#无锁编程" class="headerlink" title="无锁编程"></a>无锁编程</h2><ul><li><a href="http://www.cnblogs.com/yuxingfirst/archive/2013/06/05/3118752.html" target="_blank" rel="noopener">Linux无锁编程</a></li><li><a href="http://blog.chinaunix.net/uid-25424552-id-3772253.html" target="_blank" rel="noopener">多线程模型下的无锁编程 </a></li><li><a href="http://www.cnblogs.com/madao/archive/2013/03/06/2943467.html" target="_blank" rel="noopener">这个时代无锁真的就是无锁吗</a></li><li><a href="http://blog.csdn.net/hzhsan/article/details/25124901" target="_blank" rel="noopener">linux无锁化编程–__sync_fetch_and_add系列原子操作函数</a></li><li><a href="http://blog.csdn.net/hzhsan/article/details/25837189" target="_blank" rel="noopener">无锁编程实战演练</a></li><li><a href="http://blog.csdn.net/heiyeshuwu/article/details/40783981" target="_blank" rel="noopener">无锁编程技术及实现</a></li><li><a href="http://www.ibm.com/developerworks/cn/linux/l-cn-lockfree/" target="_blank" rel="noopener">透过 Linux 内核看无锁编程</a></li><li><a href="http://www.wtoutiao.com/p/ub6fvm.html" target="_blank" rel="noopener">无锁编程本质论</a></li><li><a href="http://blog.csdn.net/cws1214/article/details/47680773" target="_blank" rel="noopener">无锁编程和有锁编程效率对比</a></li><li><a href="http://blog.csdn.net/u013074465/article/details/47748619" target="_blank" rel="noopener">linux无锁编程</a></li></ul>]]></content>
<summary type="html">
<h2 id="基本教程"><a href="#基本教程" class="headerlink" title="基本教程"></a>基本教程</h2><ul>
<li>w3c教程<a href="http://www.runoob.com/linux/linux-tutorial
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>windows使用</title>
<link href="https://jinzt.github.io/posts/5729df21.html"/>
<id>https://jinzt.github.io/posts/5729df21.html</id>
<published>2020-04-12T12:51:33.898Z</published>
<updated>2020-04-12T12:17:40.603Z</updated>
<content type="html"><![CDATA[<h2 id><a href="#" class="headerlink" title></a></h2><pre><code>telnet 61.139.124.38 33143使用 tracert -d 182.140.212.86 我看看路由</code></pre><h2 id="其它"><a href="#其它" class="headerlink" title="其它"></a>其它</h2><ul><li><a href="https://www.jianshu.com/p/fc9e4ea61e13" target="_blank" rel="noopener">用winsw让任何Windows程序都能运行为服务</a> </li></ul><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://jingyan.baidu.com/article/d5c4b52bbcebbbda570dc511.html" target="_blank" rel="noopener">Windows电脑快捷键汇总</a></li></ul><h2 id="Windows快捷键"><a href="#Windows快捷键" class="headerlink" title="Windows快捷键"></a>Windows快捷键</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">win+r 运行</span><br><span class="line">win+e 资源管理器</span><br><span class="line">win+f 查找文件或文件夹</span><br><span class="line">win+t 后台程序切换</span><br><span class="line"></span><br><span class="line">win+tab 激活任务视图</span><br><span class="line">win+d 显示桌面</span><br><span class="line">win+l 直接锁屏</span><br><span class="line">win+m最小化所有窗口</span><br><span class="line">win+shift+m 还原最小化的窗口</span><br></pre></td></tr></table></figure><h2 id="ALT-快捷键"><a href="#ALT-快捷键" class="headerlink" title="ALT 快捷键"></a>ALT 快捷键</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">Alt+F4 关闭当前程序</span><br><span class="line">Alt+空格+C 关闭窗口</span><br><span class="line">Alt+空格+N 最小化当前窗口</span><br><span class="line">Alt+空格+R 恢复最大化窗口</span><br><span class="line">Alt+空格+X 最大化当前窗口</span><br><span class="line">Alt+空格+M 移动窗口</span><br><span class="line">Alt+空格+S 改变窗口大小</span><br><span class="line">Alt+u+v word全屏视图</span><br><span class="line">Alt+F 打开文件菜单</span><br><span class="line">Alt+V 打开视图菜单</span><br><span class="line">Alt+E 打开编辑菜单</span><br><span class="line">Alt+I 打开插入菜单</span><br><span class="line">Alt+O 打开格式菜单</span><br><span class="line">Alt+T 打开工具菜单</span><br><span class="line">Alt+A 打开表格菜单</span><br><span class="line">Alt+W 打开窗口菜单</span><br><span class="line">Alt+H 打开帮助菜单</span><br><span class="line">Alt+回车 查看文件属性</span><br><span class="line">Alt+双击文件 查看文件属性</span><br><span class="line">Alt+Tab在打开的应用不同窗口间进行切换</span><br></pre></td></tr></table></figure><p>#</p><ul><li>[1.在dos下,输入netstat -ano|findstr “8081”,查看端口使用情况。</li></ul><p>2.查看该pid对应的进程名称tasklist|findstr “pid号”<br>3.taskkill /pid pid号 来停止端口占用。</p>]]></content>
<summary type="html">
<h2 id><a href="#" class="headerlink" title></a></h2><pre><code>telnet 61.139.124.38 33143
使用 tracert -d 182.140.212.86 我看看路由</code></pre>
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="windows" scheme="https://jinzt.github.io/tags/windows/"/>
</entry>
<entry>
<title>vim</title>
<link href="https://jinzt.github.io/posts/5729df21.html"/>
<id>https://jinzt.github.io/posts/5729df21.html</id>
<published>2020-04-12T12:51:33.897Z</published>
<updated>2020-04-12T12:16:39.973Z</updated>
<content type="html"><![CDATA[<h2 id="基础教程"><a href="#基础教程" class="headerlink" title="基础教程"></a>基础教程</h2><ul><li><a href="https://www.shiyanlou.com/courses/running" target="_blank" rel="noopener">实验楼Vim快速入门</a></li><li><a href="http://www.jianshu.com/p/bcbe916f97e1" target="_blank" rel="noopener">Vim入门基础</a></li><li><a href="http://blog.csdn.net/niushuai666/article/details/7275406" target="_blank" rel="noopener">Vim简明教程【CoolShell】</a></li><li><a href="http://blog.jobbole.com/86132/" target="_blank" rel="noopener">Vim入门教程</a></li><li><a href="http://blog.jobbole.com/10250/" target="_blank" rel="noopener">25个Vim教程、视频和资源</a></li><li><a href="http://gad.qq.com/article/detail/7153608" target="_blank" rel="noopener">老司机乱谈编辑器之神</a></li><li><a href="http://www.cnblogs.com/jy02414216/archive/2012/10/29/2745001.html" target="_blank" rel="noopener">VIM分屏指令</a></li><li><a href="http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/" target="_blank" rel="noopener">vim中的杀手级插件: vundle</a></li><li><a href="http://blog.log4d.com/2012/04/vundle/" target="_blank" rel="noopener">使用 Vundle 管理 Vim 插件</a></li><li><a href="http://www.cnblogs.com/xia520pi/archive/2014/04/11/3659386.html" target="_blank" rel="noopener">Vim插件之插件管理器Vundle</a></li><li><a href="http://littlewhite.us/archives/212" target="_blank" rel="noopener">vim C++开发环境插件安装详解</a></li><li><a href="http://www.jianshu.com/p/mHUR4e" target="_blank" rel="noopener">使用vundle进行插件管理</a></li><li><a href="http://www.it165.net/os/html/201503/12190.html" target="_blank" rel="noopener">Vim自动补全插件YouCompleteMe安装与配置</a></li><li><a href="http://ju.outofmemory.cn/entry/79671" target="_blank" rel="noopener">跟我一起学习VIM - The Life Changing Editor</a></li><li><a href="http://www.ccvita.com/487.html" target="_blank" rel="noopener">简明Vim练级攻略</a></li></ul><h2 id="常用插件"><a href="#常用插件" class="headerlink" title="常用插件"></a>常用插件</h2><pre><code>auto-pairs 自动匹配括号、引号等 git clone git://github.com/jiangmiao/auto-pairs.git ~/.vim/bundle/auto-pairsNERDTree 显示目录树 在命令行模式下输入:NERDTree,然后回车,窗口左侧就出现了vim工作目录的目录树 git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundleSuperTab</code></pre><h2 id="Vim插件管理插件Vundle"><a href="#Vim插件管理插件Vundle" class="headerlink" title="Vim插件管理插件Vundle"></a>Vim插件管理插件Vundle</h2><pre><code>安装Vundlegit clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle配置 vim .vimrc 添加set nocompatible " be iMprovedfiletype off " required!set rtp+=~/.vim/bundle/vundle/call vundle#rc()" let Vundle manage VundleBundle 'gmarik/vundle'"my Bundle here:"" original repos on githubBundle 'kien/ctrlp.vim'Bundle 'sukima/xmledit'Bundle 'sjl/gundo.vim'Bundle 'jiangmiao/auto-pairs'Bundle 'klen/python-mode'Bundle 'Valloric/ListToggle'Bundle 'SirVer/ultisnips'Bundle 'Valloric/YouCompleteMe'Bundle 'scrooloose/syntastic'Bundle 't9md/vim-quickhl'" Bundle 'Lokaltog/vim-powerline'Bundle 'scrooloose/nerdcommenter'".................................." vim-scripts reposBundle 'YankRing.vim'Bundle 'vcscommand.vim'Bundle 'ShowPairs'Bundle 'SudoEdit.vim'Bundle 'EasyGrep'Bundle 'VOoM'Bundle 'VimIM'".................................." non github repos" Bundle 'git://git.wincent.com/command-t.git'"......................................filetype plugin indent on" Brief help" :PluginList - lists configured plugins" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate" :PluginSearch foo - searches for foo; append `!` to refresh local cache" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal"" see :h vundle for more details or wiki for FAQ" Put your non-Plugin stuff after this line.ycm_extra_conf.pyhttps://gist.github.com/locojay/4950253</code></pre><h2 id="自动补全"><a href="#自动补全" class="headerlink" title="自动补全"></a>自动补全</h2><ul><li><a href="http://blog.jobbole.com/58978/" target="_blank" rel="noopener">Vim自动补全神器:YouCompleteMe</a></li><li><a href="http://tieba.baidu.com/p/2672605209" target="_blank" rel="noopener">vim智能补全插件YouCompleteMe新手完全攻略</a></li></ul><h2 id="YouCompleteMe总结"><a href="#YouCompleteMe总结" class="headerlink" title="YouCompleteMe总结"></a>YouCompleteMe总结</h2><pre><code>sudo apt-get install cmake python-dev安装Vundle后需编译安装YCMcd .vim/bundle/YouCompleteMe./install.sh --clang-completer</code></pre><hr><h2 id="vim-操作总结"><a href="#vim-操作总结" class="headerlink" title="vim 操作总结"></a>vim 操作总结</h2><pre><code>ctrl+o 可以进入一次性编辑模式</code></pre><h2 id="进入官方教程"><a href="#进入官方教程" class="headerlink" title="进入官方教程"></a>进入官方教程</h2><pre><code>vimtutor</code></pre><h2 id="移动"><a href="#移动" class="headerlink" title="移动"></a>移动</h2><pre><code>h j k lGGshift gnggctrl + hctrl + mctrl + mwb</code></pre><h2 id="插入操作"><a href="#插入操作" class="headerlink" title="插入操作"></a>插入操作</h2><pre><code>i 插入shift i 在行首插入a 附加shift a 在行尾附加o 在当前行插入并跳到下一行shift o 在当前行之上插入并调到ctrl o 一次性进入normal模式</code></pre><h2 id="复制、粘贴、剪切"><a href="#复制、粘贴、剪切" class="headerlink" title="复制、粘贴、剪切"></a>复制、粘贴、剪切</h2><h2 id="删除操作"><a href="#删除操作" class="headerlink" title="删除操作"></a>删除操作</h2><pre><code>x 删除光标所在字符dw 向后删除一个单词db 向前删除一个单词shift d or d$ 删除光标直至行尾的所有字符d^ 删除至行首dd 删除一行dj 删除当前行和下一行dk 删除当前行和上一行ndd 删除n行 如5dddG 删除到文档结尾处d1G 删至文档首部cw 替换从光标所在位置后到一个单词结尾的字符</code></pre><h2 id="回滚"><a href="#回滚" class="headerlink" title="回滚"></a>回滚</h2><pre><code>u 回滚到上次操作</code></pre><h2 id="执行外部命令"><a href="#执行外部命令" class="headerlink" title="执行外部命令"></a>执行外部命令</h2><pre><code>!commondsample: !ls -l</code></pre><h2 id="命令模式常见操作"><a href="#命令模式常见操作" class="headerlink" title="命令模式常见操作"></a>命令模式常见操作</h2><pre><code>:e 文件路径 打开相应文件 :!commond 执行外部命令</code></pre><h2 id="退出"><a href="#退出" class="headerlink" title="退出"></a>退出</h2><p>1.命令行退出<br> q 退出<br> q! 强制退出,不保存<br> w 保存<br> w <文件路径> 另存为<br> wq 保存并退出</p><p>2.普通模式下退出vim<br> 普通模式下输入Shift+zz即可保存退出vim</p><h2 id="查找"><a href="#查找" class="headerlink" title="查找"></a>查找</h2><pre><code>/</code></pre>]]></content>
<summary type="html">
<h2 id="基础教程"><a href="#基础教程" class="headerlink" title="基础教程"></a>基础教程</h2><ul>
<li><a href="https://www.shiyanlou.com/courses/running" targ
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>termux 使用</title>
<link href="https://jinzt.github.io/posts/cbd7345.html"/>
<id>https://jinzt.github.io/posts/cbd7345.html</id>
<published>2020-04-12T12:51:33.896Z</published>
<updated>2020-04-12T12:17:55.047Z</updated>
<content type="html"><![CDATA[<h2 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h2><p>termux主页 <a href="https://wiki.termux.com/" target="_blank" rel="noopener">https://wiki.termux.com/</a>, <a href="https://wiki.termux.com/wiki" target="_blank" rel="noopener">wiki</a></p><h3 id="下载安装"><a href="#下载安装" class="headerlink" title="下载安装"></a>下载安装</h3><ul><li><a href="https://play.google.com/store/apps/details?id=com.termux" target="_blank" rel="noopener">Google Play</a></li></ul><h3 id="基本命令"><a href="#基本命令" class="headerlink" title="基本命令"></a>基本命令</h3><p>Termux除了支持apt命令外,还在此基础上封装了pkg命令,pkg命令向下兼容apt命令.apt命令大家应该都比较熟悉了,这里直接简单的介绍下pkg命令:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">pkg search <query> 搜索包</span><br><span class="line">pkg install <package> 安装包</span><br><span class="line">pkg uninstall <package> 卸载包</span><br><span class="line">pkg reinstall <package> 重新安装包</span><br><span class="line">pkg update 更新源</span><br><span class="line">pkg upgrade 升级软件包</span><br><span class="line">pkg list-all 列出可供安装的所有包</span><br><span class="line">pkg list-installed 列出已经安装的包</span><br><span class="line">pkg shoe <package> 显示某个包的详细信息</span><br><span class="line">pkg files <package> 显示某个包的相关文件夹路径</span><br></pre></td></tr></table></figure><h3 id="目录环境结构"><a href="#目录环境结构" class="headerlink" title="目录环境结构"></a>目录环境结构</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">~ > echo $HOME</span><br><span class="line">/data/data/com.termux/files/home</span><br><span class="line"></span><br><span class="line"> ~ > echo $PREFIX</span><br><span class="line">/data/data/com.termux/files/usr</span><br><span class="line"></span><br><span class="line"> ~ > echo $TMPPREFIX</span><br><span class="line">/data/data/com.termux/files/usr/tmp/zsh</span><br></pre></td></tr></table></figure><p>长期使用Linux的朋友可能会发现,这个HOME路径看上去可能不太一样,为了方便,Termux 提供了一个特殊的环境变量:PREFIX</p><h3 id="安装vim"><a href="#安装vim" class="headerlink" title="安装vim"></a>安装vim</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install vim</span><br></pre></td></tr></table></figure><p>设置默认编辑器</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">export EDITOR=vim</span><br></pre></td></tr></table></figure><h3 id="更换国内源"><a href="#更换国内源" class="headerlink" title="更换国内源"></a>更换国内源</h3><p>更换Termux清华大学源,加快软件包下载速度 参考<a href="https://mirror.tuna.tsinghua.edu.cn/help/termux/" target="_blank" rel="noopener">Termux 镜像使用帮助</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux stable main@' $PREFIX/etc/apt/sources.list</span><br><span class="line"></span><br><span class="line">apt update && apt upgrade</span><br></pre></td></tr></table></figure><h3 id="安装基本工具"><a href="#安装基本工具" class="headerlink" title="安装基本工具"></a>安装基本工具</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install curl wget git unzip unrar</span><br></pre></td></tr></table></figure><h3 id="管理员身份"><a href="#管理员身份" class="headerlink" title="管理员身份"></a>管理员身份</h3><p>利用proot工具来模拟某些需要root的环境</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install proot</span><br></pre></td></tr></table></figure><p>然后终端下面输入:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">termux-chroot</span><br></pre></td></tr></table></figure><p>即可模拟root环境<br>在这个proot环境下面,相当于是进入了home目录,可以很方便地进行一些配置.</p><p>在管理员身份下,输入exit可回到普通用户身份。</p><h2 id="申请读写权限-之后会在home目录下有storage-连接"><a href="#申请读写权限-之后会在home目录下有storage-连接" class="headerlink" title="申请读写权限 之后会在home目录下有storage 连接**"></a>申请读写权限 之后会在home目录下有storage 连接**</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">termux-setup-storage</span><br><span class="line">ls storage</span><br></pre></td></tr></table></figure><h3 id="ssh"><a href="#ssh" class="headerlink" title="ssh"></a>ssh</h3><p><strong>安装openssh</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt update</span><br><span class="line">apt install openssh</span><br></pre></td></tr></table></figure><p><strong>启动ssh</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sshd</span><br></pre></td></tr></table></figure><p><strong>连接ssh服务器</strong></p><p>termux是单用户,可以采用密钥方式,但比较繁琐,这里采用账号密码登录方式。</p><p>先设置密码(默认是没密码的)</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">passwd</span><br></pre></td></tr></table></figure><p>查看用户名</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">whoami</span><br></pre></td></tr></table></figure><p>查看ip</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ifconfig -a</span><br></pre></td></tr></table></figure><p>连接 默认端口8022,u0_a258</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh [email protected] -p 8022</span><br></pre></td></tr></table></figure><p><strong>安装ftp</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install pure-ftpd</span><br></pre></td></tr></table></figure><p>可以在PC上的Filezella客户端上配置新站点,选择协议:SFTP,连接方式:询问密码,端口8022,连接输入正确的用户名和密码,就可以访问模拟器文件夹了。具备删写功能。如果你输入连接sd卡的目录,形如/sdcard或者/storage/emulated/0,且在手机权限管理赋予Termux读写存储权限的话,就可以远程管理手机存储,同样具备删写功能。</p><h3 id="安装c-开发环境"><a href="#安装c-开发环境" class="headerlink" title="安装c++开发环境"></a>安装c++开发环境</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install clang gdb cgdb cmake</span><br></pre></td></tr></table></figure><h3 id="安装python27"><a href="#安装python27" class="headerlink" title="安装python27"></a>安装python27</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install python2</span><br></pre></td></tr></table></figure><p>安装 vim-python</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install vim-python</span><br></pre></td></tr></table></figure><h3 id="golang"><a href="#golang" class="headerlink" title="golang"></a>golang</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pkg install golang</span><br><span class="line">pkg install vim-golang</span><br></pre></td></tr></table></figure><h3 id="nodejs"><a href="#nodejs" class="headerlink" title="nodejs"></a>nodejs</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pkg install nodejs</span><br><span class="line">node -v</span><br><span class="line">npm -v</span><br></pre></td></tr></table></figure><h3 id="MariaDB-MySQL-安装"><a href="#MariaDB-MySQL-安装" class="headerlink" title="MariaDB(MySQL)安装"></a>MariaDB(MySQL)安装</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">pkg install mariadb</span><br><span class="line">mysql_install_db // 初始化mysql</span><br><span class="line">mysqld // 启动mysql服务</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">mysql // 新开一个窗口 连接mysql</span><br><span class="line">提示1045 2800 </span><br><span class="line"></span><br><span class="line">我们改下配置 调过过密码认证 在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程</span><br><span class="line">vim /data/data/com.termux/files/usr/etc/my.cnf</span><br><span class="line">[mysqld]</span><br><span class="line">explicit_defaults_for_timestamp=true</span><br><span class="line">skip-grant-tables</span><br><span class="line"></span><br><span class="line">重启msyql</span><br><span class="line"></span><br><span class="line">在使用 mysql 连接就成功了</span><br><span class="line"></span><br><span class="line">接下来就是用sql来修改root的密码</span><br><span class="line"></span><br><span class="line">mysql> use mysql;</span><br><span class="line">mysql> select * from user; // 用户表里面是空的</span><br><span class="line">mysql> flush privileges;</span><br><span class="line">mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; // 修改用户root 给予全部权限</span><br><span class="line">mysql> grant all privileges on *.* to 'jzt'@'%' identified by '123456'with grant option; // 创建用户root 给予全部权限</span><br><span class="line">mysql> flush privileges;</span><br><span class="line">mysql> quit;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">编辑my.cnf,去掉刚才添加的内容,然后重启MySQL</span><br><span class="line"></span><br><span class="line">mysql -uroot -p // 使用密码登录</span><br></pre></td></tr></table></figure><h3 id="免root安装Centos"><a href="#免root安装Centos" class="headerlink" title="免root安装Centos"></a>免root安装Centos</h3><p>$ pkg install proot<br>$ termux-chroot</p><p>安装centos</p><p>复制以下内容到termux执行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pkg install wget openssl-tool proot tar -y && hash -r && wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/CentOS/centos.sh && bash centos.sh</span><br></pre></td></tr></table></figure><p>启动centos<br>./start-centos.sh<br>退出centos<br>exit</p><h3 id="nginx"><a href="#nginx" class="headerlink" title="nginx"></a>nginx</h3><p>pkg install nginx<br>/data/data/com.termux/files/usr/share/nginx/html/index.html</p><p>启动nginx<br>nginx</p><p>停止nginx<br>fuser -k 8080/tcp<br>重启nginx服务<br>nginx -s reload</p><p>127.0.0.1:8080</p><h3 id="ssh-1"><a href="#ssh-1" class="headerlink" title="ssh"></a>ssh</h3><p>pkg install openssh</p><h3 id="内网穿透"><a href="#内网穿透" class="headerlink" title="内网穿透"></a>内网穿透</h3><ul><li><a href="https://github.com/fatedier/frp" target="_blank" rel="noopener">fatedier/frp</a></li><li><a href="https://www.natfrp.org/#" target="_blank" rel="noopener">https://www.natfrp.org/#</a></li><li><a href="https://blog.csdn.net/qq_16093323/article/details/82182027" target="_blank" rel="noopener">https://blog.csdn.net/qq_16093323/article/details/82182027</a></li></ul><p><a href="https://github.com/cloudswave/termux-script/tree/master/frpc" target="_blank" rel="noopener">https://github.com/cloudswave/termux-script/tree/master/frpc</a></p><h3 id="frp-termux内网-建站"><a href="#frp-termux内网-建站" class="headerlink" title="frp + termux内网 建站"></a>frp + termux内网 建站</h3><p>域名 xinlingbodong.top<br>机器ssh ip:144.34.170.63 port:10339 passwd:bat123456 encrypt:aes-256-cfb </p><p>1.将域名 <a href="http://www.xinlingbodong.top" target="_blank" rel="noopener">www.xinlingbodong.top</a> 映射到机器 144.34.170.63<br>在主机上安装nginx<br><a href="http://144.34.170.63/" target="_blank" rel="noopener">http://144.34.170.63/</a><br><a href="http://www.xinlingbodong.top/" target="_blank" rel="noopener">http://www.xinlingbodong.top/</a></p><p>apt-get install wget</p><p>frp下载地址 <a href="https://github.com/fatedier/frp/releases" target="_blank" rel="noopener">https://github.com/fatedier/frp/releases</a><br>wget <a href="https://github.com/fatedier/frp/releases/download/v0.29.1/frp_0.29.1_linux_arm64.tar.gz" target="_blank" rel="noopener">https://github.com/fatedier/frp/releases/download/v0.29.1/frp_0.29.1_linux_arm64.tar.gz</a></p><p>tar -zxvf frp_0.29.1_linux_arm64.tar.gz<br>mv frp_0.29.1_linux_arm64 frp</p><p>vim frps.ini</p><p>iptables -I INPUT -p tcp –dport 7000 -j ACCEPT<br>iptables-save</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[common]</span><br><span class="line"></span><br><span class="line"># 绑定端口</span><br><span class="line">bind_port = 7000</span><br><span class="line"></span><br><span class="line"># 通过自定义域名访问部署于内网的 web 服务</span><br><span class="line">vhost_http_port = 8080 </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"># frpc.ini</span><br><span class="line">[common]</span><br><span class="line">server_addr = x.x.x.x</span><br><span class="line">server_port = 7000</span><br><span class="line"></span><br><span class="line">[web]</span><br><span class="line">type = http</span><br><span class="line">local_port = 80</span><br><span class="line">custom_domains = www.yourdomain.com</span><br><span class="line"></span><br><span class="line">[ssh]</span><br><span class="line">type = tcp</span><br><span class="line">local_ip = 127.0.0.1</span><br><span class="line">local_port = 22</span><br><span class="line">remote_port = 6000</span><br></pre></td></tr></table></figure><p>通过 ssh 访问内网机器,假设用户名为 test:<br>ssh -oPort=6000 <a href="mailto:[email protected]">[email protected]</a></p><h2 id="ftp"><a href="#ftp" class="headerlink" title="ftp"></a>ftp</h2><p>ssh </p><h2 id="参考教程"><a href="#参考教程" class="headerlink" title="参考教程"></a>参考教程</h2><ul><li><a href="https://www.jianshu.com/p/f41bc63d4246" target="_blank" rel="noopener">termux从入门到入坑 - 简书</a></li><li><a href="https://www.sqlsec.com/2018/05/termux.html" target="_blank" rel="noopener">Termux 高级终端安装使用配置教程</a></li><li><a href="https://baijiahao.baidu.com/s?id=1607384881189668585&wfr=spider&for=pc" target="_blank" rel="noopener">安卓手机免root安装各种Linux系统:Ubuntu, Centos,Kali等</a></li></ul>]]></content>
<summary type="html">
<h2 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h2><p>termux主页 <a href="https://wiki.termux.com/" target="_blank" rel="noope
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="tool" scheme="https://jinzt.github.io/tags/tool/"/>
</entry>
<entry>
<title>shell</title>
<link href="https://jinzt.github.io/posts/5729df21.html"/>
<id>https://jinzt.github.io/posts/5729df21.html</id>
<published>2020-04-12T12:51:33.894Z</published>
<updated>2020-04-12T12:16:39.968Z</updated>
<content type="html"><![CDATA[<h2 id="基本教程"><a href="#基本教程" class="headerlink" title="基本教程"></a>基本教程</h2><ul><li>w3c教程<a href="http://www.runoob.com/linux/linux-tutorial.html" target="_blank" rel="noopener">http://www.runoob.com/linux/linux-tutorial.html</a></li><li>linux入门教程<a href="http://www.92csz.com/study/linux/" target="_blank" rel="noopener">http://www.92csz.com/study/linux/</a></li></ul><h2 id="视频教程"><a href="#视频教程" class="headerlink" title="视频教程"></a>视频教程</h2><ul><li>51CTO教程<a href="http://edu.51cto.com/course/course_id-669.html" target="_blank" rel="noopener">http://edu.51cto.com/course/course_id-669.html</a></li><li>韩顺平linux教程<a href="http://www.icoolxue.com/album/show/23" target="_blank" rel="noopener">http://www.icoolxue.com/album/show/23</a></li></ul><h2 id="命令调整ubuntu时间"><a href="#命令调整ubuntu时间" class="headerlink" title="命令调整ubuntu时间"></a>命令调整ubuntu时间</h2><pre><code>sudo date -s "2016-02-23 23:59"查看时间date</code></pre><h2 id="其它"><a href="#其它" class="headerlink" title="其它"></a>其它</h2><ul><li><a href="http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316599.html" target="_blank" rel="noopener">linux lsof命令详解</a></li><li><a href="http://www.cnblogs.com/zhenjing/archive/2012/05/30/shell_template.html" target="_blank" rel="noopener">shell脚本模版</a></li><li><a href="http://www.cnblogs.com/peida/archive/2012/10/23/2734829.html" target="_blank" rel="noopener">每天一个linux命令</a></li><li><a href="http://blog.sina.com.cn/s/blog_52514e730100zr12.html" target="_blank" rel="noopener">将 Win32 程序移植到 Linux </a></li><li><a href="http://gad.qq.com/article/detail/7153760" target="_blank" rel="noopener">Linux grep 命令中的正则表达式详解</a></li></ul><h2 id="内存查看与监控"><a href="#内存查看与监控" class="headerlink" title="内存查看与监控"></a>内存查看与监控</h2><ul><li><a href="http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html" target="_blank" rel="noopener">Linux查看CPU和内存使用情况</a></li><li><a href="http://www.kuqin.com/shuoit/20150110/344314.html" target="_blank" rel="noopener">Linux下查看内存使用情况方法总结</a></li><li><a href="http://blog.chinaunix.net/uid-20492804-id-265809.html" target="_blank" rel="noopener"> linux下,一个运行中的程序,究竟占用了多少内存? </a></li><li>查看到对应哪个应用占用了80端口:<br>netstat -tulnp | grep ‘:80 ‘<br>找到对应的PID杀掉。<br>kill ‘PID’</li></ul><p>sudo apt-get autoremove </p><p>笑笑小白<br>归类自己需要的资料,慢慢爬行<br>gdb调试带参数程序</p><p>一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要<br>把调试信息加到可执行文件中。使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点。如: </p><blockquote><p>cc -g hello.c -o hello<br>g++ -g hello.cpp -o hello </p></blockquote><p>如果没有-g,你将看不见程序的函数名、变量名,所代替的全是 运行时的内存地址。当你用<br>-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。 </p><p>启动 GDB的方法有以下几种: </p><p>1、gdb <program><br>program也就是你的执行文件,一般在当然目录下。 </program></p><p>2、gdb <program> core<br>用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生<br>的文件。 </program></p><p>3、gdb <program> <PID><br>如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gd<br>b会自动attach上去,并调试他。program应该在 PATH环境变量中搜索得到。 </PID></program></p><p>GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。我在下面只<br>例举一些比较常用的参数: </p><p>-symbols <file><br>-s <file><br>从指定文件中读取符号表。 </file></file></p><p>-se file<br>从指定文件中读取符号表信息,并把他用在可执行文件中。 </p><p>-core <file><br>-c <file><br>调试时core dump的core文件。 </file></file></p><p>-directory <directory><br>-d <directory><br>加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。</directory></directory></p><p>当以gdb <program>方式启动gdb后,gdb会在PATH路径和当前目录中搜索<program>的源文件<br>。 如要确认gdb是否读到源文件,可使用l或list命令,看看gdb是否能列出源代码。 </program></program></p><p>在gdb中,运行程序使用r或是run命令。 程序的运行,你有可能需要设置下面四方面的事。 </p><p>1、程序运行参数。<br>set args 可指定运行时参数。(如:set args 10 20 30 40 50)<br>show args 命令可以查看设置好的运行参数。 </p><p>2、 运行环境。<br>path <dir> 可设定程序的运行路径。<br>show paths 查看程序的运行路径。<br>set environment varname [=value] 设置环境变量。如:set env USER=hchen<br>show environment [varname] 查看环境变量。 </dir></p><p>3、工作目录。<br>cd <dir> 相当于shell的cd命令。<br>pwd 显示当前的所在目录。 </dir></p><p>4、程序的输入输出。<br>info terminal 显示你程序用到的终端的模式。<br>使用重定向控制程序输出。如:run > outfile<br>tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb</p><p>具体来说就是</p><p>例如一个程序名为prog 参数为 -l a -C abc<br>则,运行gcc/g++ -g prog.c/cpp -o prog<br>就可以用gdb调试程序prog<br>#gdb prog<br>进入gdb调试界面<br>输入参数命令set args 后面加上程序所要用的参数,注意,不再带有程序名,直接加参数,如:<br>set args -l a -C abc<br>回车后输入<br>r<br>即可开始运行</p><p>##<br><a href="https://www.jianshu.com/p/a0e11854b209" target="_blank" rel="noopener">https://www.jianshu.com/p/a0e11854b209</a></p>]]></content>
<summary type="html">
<h2 id="基本教程"><a href="#基本教程" class="headerlink" title="基本教程"></a>基本教程</h2><ul>
<li>w3c教程<a href="http://www.runoob.com/linux/linux-tutorial
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>多线程linux zong</title>
<link href="https://jinzt.github.io/posts/5729df21.html"/>
<id>https://jinzt.github.io/posts/5729df21.html</id>
<published>2020-04-12T12:51:33.893Z</published>
<updated>2020-04-12T12:16:39.968Z</updated>
<content type="html"><![CDATA[<h1 id="首页"><a href="#首页" class="headerlink" title="首页"></a><a href="https://git.oschina.net/xinxinyuling/note" target="_blank" rel="noopener">首页</a></h1><h2 id="常用库"><a href="#常用库" class="headerlink" title="常用库"></a>常用库</h2><ul><li><a href="http://blog.csdn.net/cscmaker/article/details/7468374" target="_blank" rel="noopener">Linux下安装使用mysql connector(C++)</a></li></ul><h2 id="定时器"><a href="#定时器" class="headerlink" title="定时器"></a>定时器</h2><ul><li><a href="http://www.cnblogs.com/zhanghairong/p/3757656.html" target="_blank" rel="noopener">高性能服务开发之定时器</a></li><li><a href="http://www.linuxidc.com/Linux/2014-05/101332.htm" target="_blank" rel="noopener">使用epoll+时间堆实现高性能定时器</a></li><li><a href="http://blog.chinaunix.net/uid-20662363-id-3046973.html" target="_blank" rel="noopener">高性能服务器编程中的定时器 </a></li><li><a href="http://blog.csdn.net/w616589292/article/details/45694987" target="_blank" rel="noopener">网络编程中最小堆实现的定时器</a></li><li><a href="http://www.chinaitlab.com/c/ccjq/803581.html" target="_blank" rel="noopener">一个高效的定时器分析及设计 </a></li><li><a href="http://www.pudn.com/downloads726/sourcecode/unix_linux/network/detail2906737.html" target="_blank" rel="noopener">以最小堆、红黑树、时间轮三种方式实现定时器</a></li><li><a href="http://blog.csdn.net/soft2967/article/details/9274691" target="_blank" rel="noopener">游戏后台之高效定时器-时间轮</a></li><li><a href="http://www.gameres.com/thread_384649_1_1.html" target="_blank" rel="noopener">游戏后台定时器系统设计与实现</a></li></ul><h2 id="RE"><a href="#RE" class="headerlink" title="RE"></a>RE</h2><pre><code>- [ Linux C正则](http://blog.csdn.net/wangran51/article/details/9131267)</code></pre><h2 id="dbg调试"><a href="#dbg调试" class="headerlink" title="dbg调试"></a>dbg调试</h2><ul><li><a href="http://chuanke.baidu.com/v5062908-201086-1174780.html" target="_blank" rel="noopener">传课调试</a></li><li><a href="https://blog.csdn.net/redfivehit/article/details/9041163" target="_blank" rel="noopener">一篇很好的GDB 教程</a></li><li><a href="http://cgdb.github.io/docs/cgdb.html" target="_blank" rel="noopener">CGDB Manual 0.7.0</a></li><li><a href="https://www.cnblogs.com/mister-lv/p/6022841.html" target="_blank" rel="noopener">GDB中文手册</a></li></ul><h2 id><a href="#" class="headerlink" title></a></h2><h2 id="知识体系"><a href="#知识体系" class="headerlink" title="知识体系"></a>知识体系</h2><pre><code>熟悉linux系统Linux基础命令及shell脚本系统监控网络监控数据库维护</code></pre><h2 id="掌握要求"><a href="#掌握要求" class="headerlink" title="掌握要求"></a>掌握要求</h2><pre><code>熟悉linux系统了解所有的命令,熟练掌握常用的命令熟悉shell脚本的编写熟悉系统网络的监控熟悉数据库的维护</code></pre>]]></content>
<summary type="html">
<h1 id="首页"><a href="#首页" class="headerlink" title="首页"></a><a href="https://git.oschina.net/xinxinyuling/note" target="_blank" rel="noopene
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>nginx</title>
<link href="https://jinzt.github.io/posts/5729df21.html"/>
<id>https://jinzt.github.io/posts/5729df21.html</id>
<published>2020-04-12T12:51:33.891Z</published>
<updated>2020-04-12T12:16:39.968Z</updated>
<content type="html"><![CDATA[<h2 id="安装niginx"><a href="#安装niginx" class="headerlink" title="安装niginx"></a>安装niginx</h2><p>sudo apt-get install nginx</p><h2 id="windows安装"><a href="#windows安装" class="headerlink" title="windows安装"></a>windows安装</h2><p>下载 <a href="http://nginx.org/en/download.html" target="_blank" rel="noopener">官网地址</a></p><p>使用<code>winsw</code>将nginx配置成服务,下载<code>WinSW.NET4.exe</code> 下载地址 <a href="https://github.com/kohsuke/winsw/releases" target="_blank" rel="noopener">https://github.com/kohsuke/winsw/releases</a></p><p>将 <code>WinSW.NET4.exe</code> 放到跟nginx.exe 同一个目录,并创建一个 WinSW.NET4.xml 配置文件,内容如下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><service></span><br><span class="line"> <id>nginx</id></span><br><span class="line"> <name>nginx</name></span><br><span class="line"> <description>nginx</description></span><br><span class="line"> <executable>D:\Install\nginx-1.15.8\nginx.exe</executable></span><br><span class="line"> <logpath>D:\Install\nginx-1.15.8\logs</logpath></span><br><span class="line"> <logmode>roll</logmode></span><br><span class="line"> <depend></depend></span><br><span class="line"> <startargument></startargument></span><br><span class="line"> <stopargument>stop</stopargument></span><br><span class="line"></service></span><br></pre></td></tr></table></figure><p>安装服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">WinSW.NET4.exe install</span><br></pre></td></tr></table></figure><p>安装完成后后在服务里查看到该服务 nginx,点击启动服务,至此服务安装完成</p><p>卸载服务命令</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nginxservice.exe uninstall 或者使用 sc delete 服务名称</span><br></pre></td></tr></table></figure><p>此时执行 <code>nginx -s reload</code> 命令会提示权限不足,我们借助 <code>pstools</code> 来完成配置热加载.</p><p>下载 pstools <a href="https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools" target="_blank" rel="noopener">地址</a>,将 PSToolszip 解压到 C:\PSTools,并添加到环境变量.</p><p>执行以下命令热加载配,建议添加到 批处理</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">"c:\pstools\psexec.exe" -s D:\Install\nginx-1.15.8\nginx.exe -p D:\Install\nginx-1.15.8 -s reload</span><br></pre></td></tr></table></figure><h2 id="linux安装"><a href="#linux安装" class="headerlink" title="linux安装"></a>linux安装</h2><h2 id="泛型域名资源"><a href="#泛型域名资源" class="headerlink" title="泛型域名资源"></a>泛型域名资源</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"># 泛域名解析实现二级域名多域名</span><br><span class="line"># 亲朋h5游戏 资源 </span><br><span class="line"># html 建立目录 qpworldcup qpzdxb 放世界杯 战斗细胞资源</span><br><span class="line"># 域名 qpworldcup.vk51.com qpzdxb.vk51.com 解析到主机</span><br><span class="line">server {</span><br><span class="line">listen 80;</span><br><span class="line">server_name ~^(?<subdomain>.+).vk51.com$;</span><br><span class="line">#access_log /data/wwwlogs/zzstudio.net_nginx.log combined;</span><br><span class="line">index index.html index.htm index.php;</span><br><span class="line">root /www/wwwroot/vk51.com/$subdomain/;</span><br><span class="line">#location ~ .php$ {</span><br><span class="line">#fastcgi_pass unix:/dev/shm/php-cgi.sock;</span><br><span class="line">#fastcgi_index index.php;</span><br><span class="line">#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</span><br><span class="line">#include fastcgi_params;</span><br><span class="line">#}</span><br><span class="line">location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {</span><br><span class="line">expires 30d;</span><br><span class="line">}</span><br><span class="line">location ~ .*\.(js|css)?$ {</span><br><span class="line">expires 7d;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="反向代理Http"><a href="#反向代理Http" class="headerlink" title="反向代理Http"></a>反向代理Http</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"># hall server server端口负载均衡</span><br><span class="line">upstream hall_server_for_server {</span><br><span class="line"> server 127.0.0.1:8011 weight=1; </span><br><span class="line"> server 127.0.0.1:8012 weight=1; </span><br><span class="line">}</span><br><span class="line">server {</span><br><span class="line"> listen 8010;</span><br><span class="line"> server_name zdxbhall.qianz.com h5f4byhall.qianz.com;</span><br><span class="line"> location / {</span><br><span class="line"> proxy_pass http://hall_server_for_server;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="反向代理tcp"><a href="#反向代理tcp" class="headerlink" title="反向代理tcp"></a>反向代理tcp</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"># tcp 反向代理</span><br><span class="line">stream { </span><br><span class="line"> # 反向代理老框架tcp网关</span><br><span class="line"> upstream gatesocket {</span><br><span class="line"> hash $remote_addr consistent;</span><br><span class="line"> # $binary_remote_addr;</span><br><span class="line"> server 172.12.10.103:19999 weight=5 max_fails=3 fail_timeout=30s;</span><br><span class="line"> }</span><br><span class="line"> server {</span><br><span class="line"> listen 19999;#监听端口</span><br><span class="line"> proxy_connect_timeout 10s;</span><br><span class="line"> proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。</span><br><span class="line"> proxy_pass gatesocket;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="反向代理websocket"><a href="#反向代理websocket" class="headerlink" title="反向代理websocket"></a>反向代理websocket</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"># 简单负载均衡</span><br><span class="line">upstream socket.kevin.com {</span><br><span class="line">#hash $remote_addr consistent;</span><br><span class="line">server 127.0.0.1:20001;</span><br><span class="line">server 127.0.0.1:20002;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"># websocket 反向代理</span><br><span class="line">server { </span><br><span class="line">listen 20000;</span><br><span class="line">#server_name test.gamesvr.com;</span><br><span class="line">location / {</span><br><span class="line"> proxy_pass http://socket.kevin.com/;</span><br><span class="line"> proxy_set_header Host $host:$server_port;</span><br><span class="line"></span><br><span class="line"> # 添加下面三行支持websocket</span><br><span class="line"> proxy_http_version 1.1;</span><br><span class="line"> proxy_set_header Upgrade $http_upgrade;</span><br><span class="line"> proxy_set_header Connection "upgrade";</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="真实ip透传"><a href="#真实ip透传" class="headerlink" title="真实ip透传"></a>真实ip透传</h2><h2 id="SSL"><a href="#SSL" class="headerlink" title="SSL"></a>SSL</h2><p>准备证书<br>openssl自签证书<br>免费阿里云证书</p><p>登录您的Nginx服务器,在Nginx安装目录(默认Nginx安装目录为/usr/local/nginx/conf)下创建cert目录,并将下载的证书文件和密钥文件拷贝到cert目录中。</p><p>按照下文中注释内容修改nginx.conf文件:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"># 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。</span><br><span class="line">server {</span><br><span class="line"> listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。</span><br><span class="line"> server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。</span><br><span class="line"> root html;</span><br><span class="line"> index index.html index.htm;</span><br><span class="line"> ssl_certificate cert/domain name.pem; #将domain name.pem替换成您证书的文件名。</span><br><span class="line"> ssl_certificate_key cert/domain name.key; #将domain name.key替换成您证书的密钥文件名。</span><br><span class="line"> ssl_session_timeout 5m;</span><br><span class="line"> ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。</span><br><span class="line"> ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。</span><br><span class="line"> ssl_prefer_server_ciphers on; </span><br><span class="line"> location / {</span><br><span class="line"> root html; #站点目录。</span><br><span class="line"> index index.html index.htm; </span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>可选: 设置HTTP请求自动跳转HTTPS。<br>在需要跳转的HTTP站点下添加以下rewrite语句,实现HTTP访问自动跳转到HTTPS页面。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">server {</span><br><span class="line"> listen 80;</span><br><span class="line"> server_name localhost; #将localhost修改为您证书绑定的域名,例如:www.example.com。</span><br><span class="line"> rewrite ^(.*)$ https://$host$1 permanent; #将所有http请求通过rewrite重定向到https。</span><br><span class="line"> location / {</span><br><span class="line"> index index.html index.htm;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>保存nginx.conf文件后退出。执行以下命令重启Nginx服务器。<br>nginx -s stop<br>nginx -s start</p><h2 id="可视化配置"><a href="#可视化配置" class="headerlink" title="可视化配置"></a>可视化配置</h2><h2 id="日志"><a href="#日志" class="headerlink" title="日志"></a>日志</h2><ul><li><a href="https://www.cnblogs.com/erbiao/p/9221671.html" target="_blank" rel="noopener">利用GoAccess分析Nginx访问日志</a></li></ul>]]></content>
<summary type="html">
<h2 id="安装niginx"><a href="#安装niginx" class="headerlink" title="安装niginx"></a>安装niginx</h2><p>sudo apt-get install nginx</p>
<h2 id="windows
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>收集</title>
<link href="https://jinzt.github.io/posts/f9385b7.html"/>
<id>https://jinzt.github.io/posts/f9385b7.html</id>
<published>2020-04-12T12:51:33.889Z</published>
<updated>2020-04-12T12:18:30.987Z</updated>
<summary type="html">
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>docker</title>
<link href="https://jinzt.github.io/posts/f255ffad.html"/>
<id>https://jinzt.github.io/posts/f255ffad.html</id>
<published>2020-04-12T12:51:33.888Z</published>
<updated>2020-04-12T12:16:39.968Z</updated>
<content type="html"><![CDATA[<h1 id="frp"><a href="#frp" class="headerlink" title="frp"></a>frp</h1><h2 id="centos7配置frpc开机自启"><a href="#centos7配置frpc开机自启" class="headerlink" title="centos7配置frpc开机自启"></a>centos7配置frpc开机自启</h2><p>复制frpc启动命令及配置文件到系统相应目录</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">cp frpc /usr/local/bin/frpc</span><br><span class="line">mkdir /etc/frpc</span><br><span class="line">cp frpc.ini /etc/frpc/frpc.ini</span><br><span class="line">chmod 777 /etc/frpc/frpc.ini</span><br></pre></td></tr></table></figure><p>新建:vim /lib/systemd/system/frpc.service,输入:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">[Unit]</span><br><span class="line">Description=frpc service</span><br><span class="line">After=network.target syslog.target</span><br><span class="line">Wants=network.target</span><br><span class="line"></span><br><span class="line">[Service]</span><br><span class="line">Type=simple</span><br><span class="line">ExecStart=/usr/local/bin/frpc -c /etc/frpc/frpc.ini</span><br><span class="line"></span><br><span class="line">[Install]</span><br><span class="line">WantedBy=multi-user.target</span><br></pre></td></tr></table></figure><p>开机自启动依次执行以下命令:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">systemctl enable frpc</span><br><span class="line">systemctl start frpc</span><br><span class="line">systemctl status frpc</span><br></pre></td></tr></table></figure><p>如果要重启应用,可以这样,systemctl restart frpc<br>如果要停止应用,可以输入,systemctl stop frpc<br>如果要查看应用的日志,可以输入,systemctl status frpc</p>]]></content>
<summary type="html">
<h1 id="frp"><a href="#frp" class="headerlink" title="frp"></a>frp</h1><h2 id="centos7配置frpc开机自启"><a href="#centos7配置frpc开机自启" class="header
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>docker</title>
<link href="https://jinzt.github.io/posts/5729df21.html"/>
<id>https://jinzt.github.io/posts/5729df21.html</id>
<published>2020-04-12T12:51:33.886Z</published>
<updated>2020-04-12T12:16:39.968Z</updated>
<content type="html"><![CDATA[<h1 id="docker"><a href="#docker" class="headerlink" title="docker"></a>docker</h1><h2 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h2><ul><li><a href="http://www.runoob.com/docker/docker-tutorial.html" target="_blank" rel="noopener">Docker菜鸟教程</a></li></ul><h2 id="win7安装docker参考"><a href="#win7安装docker参考" class="headerlink" title="win7安装docker参考"></a>win7安装docker参考</h2><ul><li><a href="https://www.jianshu.com/p/d809971b1fc1" target="_blank" rel="noopener">完整记录在 windows7 下使用 docker 的过程</a></li><li><a href="http://blog.csdn.net/zistxym/article/details/42918339" target="_blank" rel="noopener">DOCKER windows安装</a></li></ul><h2 id="win7安装docker"><a href="#win7安装docker" class="headerlink" title="win7安装docker"></a>win7安装docker</h2><p>0.安装前先卸载 并删除 C:\Program Files\Docker Toolbox C:\Users\Administrator.docker 目录<br>0. 安装git并将git添加到环境变量</p><ol><li>在<a href="http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/" target="_blank" rel="noopener">下载地址</a>下载docker,并安装</li><li>直接去 github上下载 <a href="https://github.com/boot2docker/boot2docker/releases" target="_blank" rel="noopener">https://github.com/boot2docker/boot2docker/releases</a> 下载 boot2docker.iso,将boot2docker.iso拷贝至C:\Users\用户名.docker\machine\cache目录下</li><li>进入安装目录 C:\Program Files\Docker Toolbox ,双击打开start.sh文件</li><li>初始化成功后会有docker对应的machine ip,记下它</li><li>使用ssh进行docker操作,machine ip,端口22,用户名及密码:docker/tcuser</li><li>使用ftp工具FileZilla进行文件上传,新建站点docker,端口不填,协议选择SFTP,用户名及密码:docker/tcuser</li></ol><h2 id="docker-配置镜像加速"><a href="#docker-配置镜像加速" class="headerlink" title="docker 配置镜像加速"></a>docker 配置镜像加速</h2><ol><li>打开桌面 Kitematic (Alpha),选择左下角的 Docker Cli</li><li>依次输入下面<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">docker-machine ssh default </span><br><span class="line">sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=https://4rx2re3v.mirror.aliyuncs.com |g" /var/lib/boot2docker/profile</span><br><span class="line">exit</span><br><span class="line">docker-machine restart default</span><br></pre></td></tr></table></figure></li><li>如果 <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-machine env default</span><br></pre></td></tr></table></figure></li></ol><h2 id="docker-配置独立ip"><a href="#docker-配置独立ip" class="headerlink" title="docker 配置独立ip"></a>docker 配置独立ip</h2><p>网络连接 Npcap Loopback Adapter 修改ipv4即可<br>VirtualBox 选择default 设置 网络,选择桥接网卡 Npcap Loopback Adapter</p><h2 id="docker-code-server"><a href="#docker-code-server" class="headerlink" title="docker code-server"></a>docker code-server</h2><h2 id="docker-go编译环境"><a href="#docker-go编译环境" class="headerlink" title="docker go编译环境"></a>docker go编译环境</h2><h2 id="docker-go运行环境"><a href="#docker-go运行环境" class="headerlink" title="docker go运行环境"></a>docker go运行环境</h2><h2 id="docker-gitlab"><a href="#docker-gitlab" class="headerlink" title="docker gitlab"></a>docker gitlab</h2><h2 id="docker-redis"><a href="#docker-redis" class="headerlink" title="docker redis"></a>docker redis</h2><h2 id="docker-mysql"><a href="#docker-mysql" class="headerlink" title="docker mysql"></a>docker mysql</h2><h2 id="docker-mongonb"><a href="#docker-mongonb" class="headerlink" title="docker mongonb"></a>docker mongonb</h2><h2 id="docker-centos7"><a href="#docker-centos7" class="headerlink" title="docker centos7"></a>docker centos7</h2><h2 id="docker安装ubuntu镜像"><a href="#docker安装ubuntu镜像" class="headerlink" title="docker安装ubuntu镜像"></a>docker安装ubuntu镜像</h2><ol><li>下载<a href="http://download.openvz.org/template/precreated" target="_blank" rel="noopener">ubuntu14.04镜像</a></li><li>使用ftp工具FileZilla上传ubuntu-14.04-x86_64.tar.gz到根目录</li><li>ssh连接docker,ls即可看到ubuntu-14.04-x86_64.tar.gz</li><li>使用命令镜像:cat ubuntu-14.04-x86_64.tar.gz |docker import - ubuntu:14.04 </li><li>查看镜像: docker images </li><li>运行镜像: docker run -it ubuntu:14.04 /bin/bash</li></ol><h2 id="docker-commit方式保存镜像"><a href="#docker-commit方式保存镜像" class="headerlink" title="docker commit方式保存镜像"></a>docker commit方式保存镜像</h2><ol><li>运行镜像: docker run -it ubuntu:14.04 /bin/bash</li><li>查询容器id:docker ps</li><li>创建镜像:docker commit 3507d25681e8 ubuntu:14.04.01</li></ol><h2 id="docker主机-win7-与容器文件夹共享"><a href="#docker主机-win7-与容器文件夹共享" class="headerlink" title="docker主机(win7)与容器文件夹共享"></a>docker主机(win7)与容器文件夹共享</h2><ol><li>打开Oracle VM VirtualBox,添加共享文件夹 docker_shared,勾选固定挂载和固定分配</li><li>打开Docker terminal,然后进入虚拟机</li><li>在mnt目录下创建一个共享映射路径:cd /mnt && sudo mkdir docker_shared</li><li>挂载共享目录:sudo mount -t vboxsf docker_shared /mnt/docker_shared/</li><li>基于已有镜像创建新镜像时带上挂载信息:-v /mnt/docker_shared:/mnt/shared</li><li>命令:docker run -it -v /mnt/docker_shared:/mnt/shared ubuntu:14.04 /bin/bash</li></ol><h2 id="docker删除none容器"><a href="#docker删除none容器" class="headerlink" title="docker删除none容器"></a>docker删除none容器</h2><pre><code>docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stopdocker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rmdocker images|grep none|awk '{print $3 }'|xargs docker rmi</code></pre><h2 id="docker自带的端口映射功能"><a href="#docker自带的端口映射功能" class="headerlink" title="docker自带的端口映射功能"></a>docker自带的端口映射功能</h2><pre><code>创建容器时可以选择docker自带的端口映射功能能够跨网络实现172.17.0.11与192.168.233.129的通信。参考命令如下,docker的其他使用方法这里不再赘述docker run -it -p 3306:3306 -p 8001:8001 -p 8006:8006 -v /mnt/docker_shared:/mnt/shared ubuntu:14.04 /bin/bash</code></pre><h2 id="docker安装-CentOS"><a href="#docker安装-CentOS" class="headerlink" title="docker安装 CentOS"></a>docker安装 CentOS</h2><h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><pre><code>停止所有容器:docker stop $(docker ps -a -q)删除全部容器:docker rm $(docker ps -aq)停用并删除容器:docker stop $(docker ps -q) & docker rm $(docker ps -aq)保存镜像到一个tar包:docker save image_name > /home/imagename.tar加载一个tar包格式的镜像:docker load < /home/imagename.tar</code></pre><h2 id="其它"><a href="#其它" class="headerlink" title="其它"></a>其它</h2><ul><li><a href="http://blog.csdn.net/u013096666/article/details/76522065" target="_blank" rel="noopener">Docker镜像上传到阿里云</a></li></ul><h2 id="数据共享"><a href="#数据共享" class="headerlink" title="数据共享"></a>数据共享</h2><p><a href="https://www.cnblogs.com/xiangsikai/p/9938670.html" target="_blank" rel="noopener">https://www.cnblogs.com/xiangsikai/p/9938670.html</a><br><a href="https://my.oschina.net/665544/blog/1933032" target="_blank" rel="noopener">https://my.oschina.net/665544/blog/1933032</a><br><a href="https://www.imooc.com/article/43803" target="_blank" rel="noopener">https://www.imooc.com/article/43803</a></p>]]></content>
<summary type="html">
<h1 id="docker"><a href="#docker" class="headerlink" title="docker"></a>docker</h1><h2 id="教程"><a href="#教程" class="headerlink" title="教程"><
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>cmd</title>
<link href="https://jinzt.github.io/posts/2f5c1cc0.html"/>
<id>https://jinzt.github.io/posts/2f5c1cc0.html</id>
<published>2020-04-12T12:51:33.884Z</published>
<updated>2020-04-12T12:16:39.968Z</updated>
<content type="html"><![CDATA[<h2 id="基本命令"><a href="#基本命令" class="headerlink" title="基本命令"></a>基本命令</h2><pre><code>1. 帮助---help ls --help help pwd2. 清屏---clear3. 打印当前路径---pwd4. 改变路径---cd cd / -- 根目录 cd .. -- 上级目录 cd . -- 当前目录 cd ~ -- 用户主目录 cd /etc -- 移动到指定目录5. 显示内容---ls ls -- 显示目录下的内容 ls -a -- 显示全部的内容包括隐藏文件 ls -l -- 详细形式显示文件(读写权限,用户,时间等) d rwx r-x r-x 4 user nobody 1024 Feb 22 0920 a.txt 1 2 3 4 5 6 7 8 9 10 1:文件类型;目录("d");普通文件("-");链接文件("|") 2:文件拥有者对该文件的访问权限:r:度 w:写 x:执行 -:无相应权限 3:同组者对该文件的访问权限 4:其他人对该文件的访问权限 5:文件的硬链接数(参见"ln"命令) 6:文件的拥有者 7:文件的属组 8:文件大小(单位:byte) 9:文件的最后一次修改时间 10:文件名 r 读权限 w 写权限,对目录来说,可生成文件与子目录或删除文件与子目录 x 执行权限,对目录来说,可查找该目录下内容 - 没有权限 如 -rw-r--r-- 拥有者 同组人 其它人 其中拥有者-生成文件时登录的人,权限最高,u表示 同组人-系统管理员分配的同组的一个或几个人,g表示 其它人-除拥有者,同组人外的人,o表示 所有人-包括拥有者、同组人及其它人,a表示6. 修改权限---chomod <1> 符号模式,总结起来符号模式可以总结为下面的这个表达式: chmod u/g/o/a=/+/-r/w/x filename 其中,中间的这部分的字母代表 u ---所有者 g ---同组用户 o ---其他用户 a ---所有用户 + ---增加权限 - ---减去权限 = ---最终权限 r ---读取权限 w ---写入权限 x ---执行权限 例如 chmod g+w a.txt chomod +x a.out -- 给予a.out可执行权限 <2> 在绝对模式下: 相对应的文件或者目录的权限有三位数字表示从左向右, 第一位是代表所有者的 第二位是代表同组其它用户的权限, 第三位是其它用户的权限。 而每个数字都是1,2,4三位数字组成的和,可以是0,1,2,3,4,5,6,7 1 --- 执行权限 2 --- 写入权限 4 --- 读取权限 例如 chmod 664 a.txt7. 文件创建命令---touch 命令:touch filename touch a.txt touch a.txt -- 文件已存在会修改时间8. 创建目录命令---mkdir mkdir dir_test mkdir dir_test -- 无法创建 目录已存在 mkdir -p dir_test/dir01/dir02 -- 如果需要一次建立多层目录,需要使用-p选项9. 拷贝命令---cp cp a.txt dir_test/ cp -rf dir_test dir_test0210. 删除命令---rm和rmdir rm a.txt rm -rf dir_test02 mkdir dir_test03 -- 删除目录 rmdir dir_test03 -- 删除空目录11. 移动命令---mv mv a.txt b.txt mv dir_test02 dir_test0312. 文件查看命令--- cat more head tail cat a.txt more a.txt --- 分屏查看内容,回车查看下一行,空格看下一屏,q退出 head -5 a.txt --查看文件的开头5行 tail -5 a.txt --查看文件的最后5行13. 12.显示文本或字符串变量echo echo hello echo "hello world!" > myfile -- 输出到文件13. 查看文本内容---cat cat a.txt14. 压缩命令---tar tar zcf dir_test03.tar dir_test03 tar zxvf dir_test03.tar15. 系统时间命令---date date -- 查看时间 sudo date -s "2016-08-12 13:30:30" -- 修改系统时间16. 内容查找命令---grep16. whereis17. locate locate16. find mkdir -p test/file touch test/file hellocpp.txt find test/ -name hellocpp.txt -- 在test目录下查找全名为hellocpp.txt文件 find test/ -name "*cpp*" -- 查找文件名中含有字符串cpp的文件 find test/ -name "hello*" -- 查找文件名中开头是字符串hello的文件 find test/ -amin -10 -- 查找在test中最后10分钟访问的文件 find test/ -mmin -5 -- 查找在test中最后5分钟修改过的文件 也可使用混合查找方式查找文件 此命令更多内容请百度 whereis和locate都是通过数据库找出,whereis数据库大概一周更新一次 locate大概一天更新一次,find是在硬盘遍历查找,效率低,建议使用whereis和locate查找不到时使用find查找17. whereis16. 测算命令(程序)的执行时间---time time ./a.out time ps aux 在程序或命令运行结束后,最后输出了三个时间,分别是 user:用户cpu时间,命令在用户态中执行的时间总和 system:系统cpu时间,命令在核心态中执行的时间总和 real:实际时间,从命令行开始执行到运行终止的消逝时间 cpu时间 = 用户cpu时间+系统cpu时间 实际时间 > cpu时间17. 后台运行命令---nohup nohup ./a.out > myout.file2>&1 & -- 后台执行 打印输出到myout.file文件 nohup ./a.out > myout.file2>&1 & -- 后台执行 打印输出到myout.file文件并在屏幕上显示18. telnet19. 端口命令---netstat netstat -apn -- 查看所有的进程和端口使用情况 netstat -apn | grep skynet -- 查看skynet进程使用端口情况 netstat -apn | grep 2016 -- 查看使用2016端口的情况21. lsof -i:2016 --查看端口属于哪个程序 20. 查看进程---ps ps -A --列出所有进程 ps -w --显示加宽可以显示较多的资讯 ps -au --显示较详细的资讯 ps -aux --显示所有包含其他使用者的行程 ps -aux | grep pid ps -aux | grep skynet21. 杀掉指定进程---kill 也可以用来发送信号 kill pid -- 默认6级杀死进程,发送SIGTERM信号给进程 kill -9 pid -- pid进程id 强制杀掉进程其它 ps killall grep22. 切换用户---su whoami --- 查看当前用户名 su root whoami exit23. 修改密码---passwd passwd22. 创建连接---ln touch a.txt;echo hello > a.txt cat a.txt ln a.txt b.txt -- 创建硬链接 ln -s a.txt c.txt -- 创建软连接 硬链接本质上是磁盘上文件数据的另一个访问路径 软连接里面只保存了目标文件的位置 删掉目标a.txt时,不影响硬链接b.txt,但软连接失去了访问磁盘数据的通路 rm a.txt cat b.txt cat c.txt -- 提示没有那个文件或目录</code></pre>]]></content>
<summary type="html">
<h2 id="基本命令"><a href="#基本命令" class="headerlink" title="基本命令"></a>基本命令</h2><pre><code>1. 帮助---help
ls --help
help pwd
2. 清屏---clear
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>code-server</title>
<link href="https://jinzt.github.io/posts/5e1c4c56.html"/>
<id>https://jinzt.github.io/posts/5e1c4c56.html</id>
<published>2020-04-12T12:51:33.883Z</published>
<updated>2020-04-12T12:18:57.413Z</updated>
<content type="html"><![CDATA[<h1 id="code-server"><a href="#code-server" class="headerlink" title="code-server"></a>code-server</h1><h2 id="二进制安装"><a href="#二进制安装" class="headerlink" title="二进制安装"></a>二进制安装</h2><p>去 <a href="https://github.com/cdr/code-server/releases" target="_blank" rel="noopener">https://github.com/cdr/code-server/releases</a> 找到下载对应版本</p><p>wget <a href="https://github.com/cdr/code-server/releases/download/2.1692-vsc1.39.2/code-server2.1692-vsc1.39.2-linux-x86_64.tar.gz" target="_blank" rel="noopener">https://github.com/cdr/code-server/releases/download/2.1692-vsc1.39.2/code-server2.1692-vsc1.39.2-linux-x86_64.tar.gz</a><br>tar -zxvf code-server2.1692-vsc1.39.2-linux-x86_64.tar.gz<br>mv code-server2.1692-vsc1.39.2-linux-x86_64 code-server<br>cd code-server</p><p>vim start.sh</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">#!/usr/bin/bash</span><br><span class="line">chmod +x code-server</span><br><span class="line">export PASSWORD=123456</span><br><span class="line">rm -rf server.log</span><br><span class="line">nohup ./code-server --auth password --port 8080 > server.log 2>&1</span><br></pre></td></tr></table></figure><p>由于在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod +x /etc/rc.d/rc.local</span><br></pre></td></tr></table></figure><p>赋予脚本可执行权限<br>假设/root/script/start_code-server.sh是你的脚本路径,给予执行权限</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod +x /root/script/start_code-server.sh</span><br></pre></td></tr></table></figure><p>打开 vim /etc/rc.d/rc.local 文件,在末尾增加如下内容</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/root/script/start_code-server.sh</span><br></pre></td></tr></table></figure><p>centos7默认关闭了rc.local文件的执行权限,所以需要手动开启:<br>chmod u+x /etc/rc.d/rc.local</p><p>创建一个启动脚本<br>vim start.sh</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#!/usr/bin/bash</span><br><span class="line"></span><br><span class="line">chmod +x code-server</span><br><span class="line">export PASSWORD=123456</span><br><span class="line">rm -rf server.log</span><br><span class="line">nohup ./code-server --auth password --port 8080 > server.log 2>&1</span><br></pre></td></tr></table></figure><p>创建一个关闭脚本<br>vim stop.sh</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">#!/usr/bin/bash</span><br><span class="line"></span><br><span class="line">ps -aux | grep "\.\/code-server" | grep -v grep | awk -F' ' '{print $2}' | xargs -r kill -9</span><br></pre></td></tr></table></figure><p>通过 ip:8080 进行访问,密码使用环境变量配置的 123456</p><p>断开 ssh 连接,那么 code-server 就不可以再使用了,借助 tmux来优化<br>yum install tmux</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"># 启用一个名为code-server的会话</span><br><span class="line">tmux new -s code-server</span><br><span class="line"># 在tmux中启动code-server</span><br><span class="line">sh start.sh</span><br><span class="line"># 断开tmux会话,下次还可以接着用</span><br><span class="line"># 或者使用快捷键Ctrl+b + d,三次按键就可以断开当前会话,这里我们只能使用快捷键</span><br><span class="line">tmux detach(这里只能使用快捷键 Ctrl+b +d)</span><br><span class="line"># 重新进入code-server会话,有两种方式</span><br><span class="line">tmux a # 默认进入第一个会话</span><br><span class="line">tmux a -t code-server # 进入到名称为code-server的会话</span><br><span class="line"># 查看会话列表</span><br><span class="line">tmux ls</span><br></pre></td></tr></table></figure><h2 id="安装golang开发环境"><a href="#安装golang开发环境" class="headerlink" title="安装golang开发环境"></a>安装golang开发环境</h2><p>安装golang</p><p>sudo vim /etc/profile</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">export PATH=$PATH:/usr/local/go/bin</span><br><span class="line">export GOROOT=/opt/go</span><br><span class="line">export GOPATH=/home/root/go</span><br><span class="line">export GOPROXY=https://goproxy.io</span><br><span class="line">export GOARCH=amd64</span><br><span class="line">export GOOS=linux</span><br><span class="line">export GOTOOLS=$GOROOT/pkg/tool</span><br><span class="line">export PATH=$PATH:$GOROOT/bin:$GOPATH/bin</span><br></pre></td></tr></table></figure><p>source /etc/profile</p><p>go get github.com/mdempsky/gocode</p><h2 id="插件离线安装"><a href="#插件离线安装" class="headerlink" title="插件离线安装"></a>插件离线安装</h2><p>VSCode扩展商店网页版:<a href="https://marketplace.visualstudio.com/vscode" target="_blank" rel="noopener">https://marketplace.visualstudio.com/vscode</a> 里面下载离线插件<br>搜索扩展,进入到详情页之后,选择右下角的Download Extension下载离线包。</p><p>之后在扩展界面选择Install from VSIX,选择路径安装。</p>]]></content>
<summary type="html">
<h1 id="code-server"><a href="#code-server" class="headerlink" title="code-server"></a>code-server</h1><h2 id="二进制安装"><a href="#二进制安装" class
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>centos7</title>
<link href="https://jinzt.github.io/posts/4270ea2f.html"/>
<id>https://jinzt.github.io/posts/4270ea2f.html</id>
<published>2020-04-12T12:51:33.881Z</published>
<updated>2020-04-12T12:16:39.968Z</updated>
<content type="html"><![CDATA[<h1 id="CentOS-7-安装和使用"><a href="#CentOS-7-安装和使用" class="headerlink" title="CentOS-7 安装和使用"></a>CentOS-7 安装和使用</h1><h2 id="centos下载安装"><a href="#centos下载安装" class="headerlink" title="centos下载安装"></a>centos下载安装</h2><p>CentOS-7 去 <a href="https://www.centos.org/download/" target="_blank" rel="noopener">官网</a> 下载</p><h2 id="安装ifconfig"><a href="#安装ifconfig" class="headerlink" title="安装ifconfig"></a>安装ifconfig</h2><p>系统默认 没有安装 ifconfig 命令。</p><p>运行 yum install ifconfig 提示No package ifconfig available<br>通过运行 yum search ifconfig 提示我们: 安装ifconfig 包 只需要安装 net-tools.x86_64 即可<br>执行 yum install net-tools.x86_64 </p><h2 id="安装vim"><a href="#安装vim" class="headerlink" title="安装vim"></a>安装vim</h2><pre><code>yum install vim配置,编辑vim配置文件vim /etc/vimrc末尾添加以下几行,设置缩进长度、退格缩回长度,一行最大字符数、显示行号、自动缩进set shiftwidth=4 set softtabstop=4 set textwidth=200 set nu set autoindent</code></pre><h2 id="安装OpenSSH服"><a href="#安装OpenSSH服" class="headerlink" title="安装OpenSSH服"></a>安装OpenSSH服</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">1.安装OpenSSH服务(CentOS系统默认安装了openssh)</span><br><span class="line"> yum install openssh-server -y</span><br><span class="line">2.配置OpenSSH服务(默认的配置已可以正常工作)</span><br><span class="line"></span><br><span class="line">OpenSSH的主配置文件:/etc/ssh/sshd_config</span><br><span class="line"></span><br><span class="line">常见的配置选项:</span><br><span class="line"></span><br><span class="line">Port=22 设置SSH的端口号是22(默认端口号为22)</span><br><span class="line">Protocol 2 启用SSH版本2协议</span><br><span class="line">ListenAddress 192.168.0.222 设置服务监听的地址</span><br><span class="line">DenyUsers user1 user2 foo 拒绝访问的用户(用空格隔开)</span><br><span class="line">AllowUsers root osmond vivek 允许访问的用户(用空格隔开)</span><br><span class="line">PermitRootLogin no 禁止root用户登陆</span><br><span class="line">PermitEmptyPasswords no 用户登陆需要密码认证</span><br><span class="line">PasswordAuthentication yes 启用口令认证方式12345678910111213141516</span><br><span class="line"></span><br><span class="line">3.开机自启</span><br><span class="line">chkconfig sshd on</span><br><span class="line"></span><br><span class="line">4.重启OpenSSH服务</span><br><span class="line"> service sshd restart</span><br><span class="line">5.客户端通过ssh远程连接服务器</span><br><span class="line"></span><br><span class="line"> ssh username@hostname(hostIP) 1</span><br><span class="line">如:ssh [email protected]</span><br></pre></td></tr></table></figure><h2 id="配置国内yum源"><a href="#配置国内yum源" class="headerlink" title="配置国内yum源"></a>配置国内yum源</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">1、备份(针对所有CentOS可用,备份文件在当前路径下)</span><br><span class="line">mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup</span><br><span class="line">2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/</span><br><span class="line">下载阿里云源</span><br><span class="line">wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo</span><br><span class="line">或者网易云源</span><br><span class="line">wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo</span><br><span class="line">3、之后运行yum makecache生成缓存</span><br><span class="line">yum makecache</span><br><span class="line">4、更新</span><br><span class="line">yum -y update</span><br></pre></td></tr></table></figure><h2 id="修改root密码"><a href="#修改root密码" class="headerlink" title="修改root密码"></a>修改root密码</h2><p>[root@localhost ~]# passwd<br>Changing password for user root.<br>New password:<br>Retype new password:<br>passwd: all authentication tokens updated successfully.</p><h2 id="增加用户(docker)并添加权限"><a href="#增加用户(docker)并添加权限" class="headerlink" title="增加用户(docker)并添加权限"></a>增加用户(docker)并添加权限</h2><pre><code>adduser dockerpasswd docker</code></pre><h2 id="通过ssh服务使用终端访问"><a href="#通过ssh服务使用终端访问" class="headerlink" title="通过ssh服务使用终端访问"></a>通过ssh服务使用终端访问</h2><pre><code>安装openssh serveryum install ssh启动ssh服务service sshd start设置开机运行: chkconfig sshd on</code></pre><h2 id="C-环境配置"><a href="#C-环境配置" class="headerlink" title="C++环境配置"></a>C++环境配置</h2><p><strong>安装c++开发环境</strong><br> yum install gcc gcc-c++ make gdb automake autoconf ncurses-devel<br> yum install libtool rpm-build redhat-rpm-config yum-utils -y</p><p><strong>升级安装gcc 8</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">第一步:安装scl源:</span><br><span class="line">yum install centos-release-scl scl-utils-build</span><br><span class="line"></span><br><span class="line">第二步: 列出scl可用源</span><br><span class="line">yum list all --enablerepo='centos-sclo-rh'</span><br><span class="line">yum list all --enablerepo='centos-sclo-rh' | grep "devtoolset-"</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line">第三步: 安装8版本的gcc、gcc-c++、gdb工具链(toolchian):</span><br><span class="line">yum install -y devtoolset-8-toolchain</span><br><span class="line"></span><br><span class="line">第四步: 开启gcc8</span><br><span class="line">scl enable devtoolset-8 bash</span><br><span class="line"></span><br><span class="line">最后:查看结果</span><br><span class="line"></span><br><span class="line">gcc --version</span><br></pre></td></tr></table></figure><p><strong>安装cgdb</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">yum install readline-devel</span><br><span class="line">yum install readline </span><br><span class="line">yum install flex autoconf automake texinfo help2man</span><br><span class="line">curl -R -O http://cgdb.me/files/cgdb-0.7.1.tar.gz</span><br><span class="line">tar zxvf cgdb-0.7.1.tar.gz</span><br><span class="line">cd cgdb-0.7.1</span><br><span class="line">./configure --prefix=/usr/local</span><br><span class="line">make && make install</span><br></pre></td></tr></table></figure><p><strong>安装cmake</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">wget https://cmake.org/files/v3.16/cmake-3.16.0.tar.gz</span><br><span class="line">tar -xzvf cmake-3.16.0.tar.gz</span><br><span class="line">cd cmake-3.16.0</span><br><span class="line">./configure</span><br><span class="line">./bootstrap</span><br><span class="line">gmake</span><br><span class="line">make && make install</span><br><span class="line">cmake --version</span><br></pre></td></tr></table></figure><p><strong>安装protobuf</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">yum install autoconf libtool automake curl</span><br><span class="line">命令安装</span><br><span class="line">yum install protobuf-compiler</span><br><span class="line">编译安装</span><br><span class="line">wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz</span><br><span class="line">tar zxf protobuf-2.5.0.tar.gz </span><br><span class="line">cd protobuf-2.5.0</span><br><span class="line">./configure --prefix=/opt/local/protobuf-2.5.0</span><br><span class="line">make</span><br><span class="line">make install</span><br><span class="line">ln -s /opt/local/protobuf-2.5.0/bin/protoc /usr/bin/protoc</span><br><span class="line"></span><br><span class="line">protoc -I=. --cpp_out=. msg.proto</span><br></pre></td></tr></table></figure><p><strong>安装libevent</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install libevent-dev</span><br></pre></td></tr></table></figure><p><strong>编译安装 OpenSSL</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">prefix 是安装目录,openssldir 是配置文件目录,另外建议安装两次,shared 作用是生成动态连接库。</span><br><span class="line">wget ftp://ftp.openssl.org/source/openssl-1.0.2g.tar.gz</span><br><span class="line">tar -zxf openssl-1.0.2g.tar.gz</span><br><span class="line">cd openssl-1.0.2g/</span><br><span class="line">./config --prefix=/usr/local --openssldir=/usr/local/ssl</span><br><span class="line">make && make install</span><br><span class="line">./config shared --prefix=/usr/local --openssldir=/usr/local/ssl</span><br><span class="line">make clean</span><br><span class="line">make && make install</span><br></pre></td></tr></table></figure><h2 id="安装lua"><a href="#安装lua" class="headerlink" title="安装lua"></a>安装lua</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">lua安装依赖breadline环境</span><br><span class="line">yum install readline-devel</span><br><span class="line">安装lua详见[LUA官网](http://www.lua.org/download.html)</span><br><span class="line">curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz</span><br><span class="line">tar zxf lua-5.3.5.tar.gz</span><br><span class="line">cd lua-5.3.5</span><br><span class="line">make linux && make install</span><br><span class="line"></span><br><span class="line">删除cent7默认lua5.1,并进行链接</span><br><span class="line">cd /usr/bin</span><br><span class="line">rm -rf lua luac</span><br><span class="line">ln -s /usr/local/bin/lua /usr/bin/lua</span><br><span class="line">ln -s /usr/local/bin/luac /usr/bin/luac</span><br><span class="line">lua -v</span><br></pre></td></tr></table></figure><h2 id="升级python"><a href="#升级python" class="headerlink" title="升级python"></a>升级python</h2><p>centos7默认安装了python2.7.5,我们将它升级到2.7最后一个版本2.7.16</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">wget http://python.org/ftp/python/2.7.16/Python-2.7.16.tgz </span><br><span class="line">tar -zxvf Python-2.7.16.tgz</span><br><span class="line">cd Python-2.7.16</span><br><span class="line">#./configure </span><br><span class="line">#make all </span><br><span class="line">#make install </span><br><span class="line">#make clean </span><br><span class="line">#make distclean </span><br><span class="line">#usr/local/bin/python2.7 -V </span><br><span class="line">#mv /usr/bin/python /usr/bin/python2.6.6</span><br><span class="line">#ln -s /usr/local/bin/python2.7 /usr/bin/python</span><br><span class="line">#python -V </span><br><span class="line">#vi /usr/bin/yum</span><br><span class="line">将文件头部的#!/usr/bin/python改成#!/usr/bin/python2.6.6</span><br></pre></td></tr></table></figure><h2 id="安装golang"><a href="#安装golang" class="headerlink" title="安装golang"></a>安装golang</h2><p>yum install golang vim-golang</p><p><strong>修改gopath</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">创建 gowork 目录</span><br><span class="line">mkdir /root/code/gowork -p</span><br><span class="line"></span><br><span class="line">vim /etc/profile 添加</span><br><span class="line">export GOPATH=/root/code/gowork</span><br><span class="line">export PATH=$PATH:$GOPATH/bin</span><br><span class="line"></span><br><span class="line">保存后执行source使其生效:</span><br><span class="line">source /etc/profile</span><br><span class="line"></span><br><span class="line">之后执行`go env`来检查环境变量是否配置成功</span><br></pre></td></tr></table></figure><h2 id="安装git"><a href="#安装git" class="headerlink" title="安装git"></a>安装git</h2><p>可以直接使用命令<code>yum install git</code>进行安装,不过git版本比较低,这里使用源码进行安装</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">安装需求</span><br><span class="line"># yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel</span><br><span class="line"># yum install gcc perl-ExtUtils-MakeMaker</span><br><span class="line"># yum remove git</span><br><span class="line"></span><br><span class="line">下载git2.22.0并将git添加到环境变量中</span><br><span class="line"></span><br><span class="line"># cd /usr/src</span><br><span class="line"># wget https://www.kernel.org/pub/software/scm/git/git-2.22.0.tar.gz</span><br><span class="line"># tar xzf git-2.22.0.tar.gz</span><br><span class="line"></span><br><span class="line">安装git并添加到环境变量中</span><br><span class="line"></span><br><span class="line"># cd git-2.22.0</span><br><span class="line"># make prefix=/usr/local/git all</span><br><span class="line"># make prefix=/usr/local/git install</span><br><span class="line"># echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc</span><br><span class="line"># source /etc/bashrc</span><br><span class="line"></span><br><span class="line">查看版本号</span><br><span class="line"></span><br><span class="line"># git --version</span><br><span class="line">git version 2.22.0</span><br></pre></td></tr></table></figure><p>通过源安装<br>当然, 最后的最后, 如果你已经安装过旧版的 git, 需要先卸载才行<br>yum remove git</p><p>添加 IUS 源<br>yum install -y <a href="https://centos7.iuscommunity.org/ius-release.rpm" target="_blank" rel="noopener">https://centos7.iuscommunity.org/ius-release.rpm</a></p><p>IUS 源的软件名称一般会加上版本号和 u 字母</p><p>查看 git2u 版本<br>yum info git2u # 会发现比较新, 但不是最最新, 不过会比 yum 默认源要新很多</p><p>安装 git2u<br>yum install -y git2u</p><p>安装完成后, 再查看下版本咯<br>[root@icentos ~]# git version<br>git version 2.16.5</p><h2 id="安装svn"><a href="#安装svn" class="headerlink" title="安装svn"></a>安装svn</h2><pre><code>yum install subversion subversion-tools</code></pre><h2 id="window与centos共享访问"><a href="#window与centos共享访问" class="headerlink" title="window与centos共享访问"></a>window与centos共享访问</h2><h3 id="window通过samba共享centos目录"><a href="#window通过samba共享centos目录" class="headerlink" title="window通过samba共享centos目录"></a>window通过samba共享centos目录</h3><h3 id="centos挂载window共享目录"><a href="#centos挂载window共享目录" class="headerlink" title="centos挂载window共享目录"></a>centos挂载window共享目录</h3><h3 id="centos配置ftp服务器"><a href="#centos配置ftp服务器" class="headerlink" title="centos配置ftp服务器"></a>centos配置ftp服务器</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">安装ftp</span><br><span class="line">yum install vsftpd -y </span><br><span class="line">service vsftpd start</span><br><span class="line">chkconfig</span><br><span class="line">chkconfig vsftpd on</span><br><span class="line">建一个测试文件夹</span><br><span class="line">mkdir /var/ftp/test</span><br><span class="line">试一下 ftp://ip,一个只能下载的FTP站就好了。</span><br><span class="line">增加ftp用户密码12345678</span><br><span class="line">useradd ftpuser -s /sbin/nologin</span><br><span class="line">passwd ftpuser</span><br><span class="line">ftp123</span><br><span class="line">修改ftp配置文件</span><br><span class="line">cp /etc</span><br><span class="line">cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_back </span><br><span class="line">vim /etc/vsftpd/vsftpd.conf</span><br><span class="line">开启一下项</span><br><span class="line">write_enable=YES</span><br><span class="line">ascii_upload_enable=YES </span><br><span class="line">ascii_download_enable=YES </span><br><span class="line">ftpd_banner=Welcome to blah FTP service</span><br><span class="line">chroot_local_user=YES</span><br><span class="line">重启ftp服务</span><br><span class="line">service vsftpd restart</span><br><span class="line">在window上输入ftp://ip访问,输入用户名及密码 ftpuser/12345678即可看到/home/ftpuser/目录</span><br></pre></td></tr></table></figure><h2 id="mysql环境搭建"><a href="#mysql环境搭建" class="headerlink" title="mysql环境搭建"></a>mysql环境搭建</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">首先必须添加mysql社区repo通过输入命令</span><br><span class="line">sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm</span><br><span class="line">安装mysql</span><br><span class="line">yum install -y mysql-server mysql mysql-devel libmysqlclient-dev </span><br><span class="line">启动服务</span><br><span class="line">service mysqld start</span><br><span class="line">设置root密码</span><br><span class="line">/usr/bin/mysqladmin -u root password '12345678'</span><br><span class="line">设置mysql开机启动</span><br><span class="line">chkconfig mysqld on</span><br><span class="line">配置mysql允许远程访问</span><br><span class="line">mysql -u root -p</span><br><span class="line">执行以下命令开启远程访问限制 </span><br><span class="line">grant all privileges on *.* to 'root'@'%' identified by '12345678' with grant option;</span><br><span class="line">flush privileges; </span><br><span class="line">exit;</span><br><span class="line">重启mysql</span><br><span class="line">service mysqld restart</span><br></pre></td></tr></table></figure><h2 id="xshell通过ssh与服务器传输文件"><a href="#xshell通过ssh与服务器传输文件" class="headerlink" title="xshell通过ssh与服务器传输文件"></a>xshell通过ssh与服务器传输文件</h2><p>使用<code>yum install lrzsz</code>命令进行安装,rz命令上传 sz命令下载</p><h2 id="安装iptables防火墙"><a href="#安装iptables防火墙" class="headerlink" title="安装iptables防火墙"></a>安装iptables防火墙</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">安装</span><br><span class="line">yum install iptables-services</span><br><span class="line">设置开机自启动</span><br><span class="line">systemctl enable iptables.service</span><br><span class="line"></span><br><span class="line">service iptables start #启动服务</span><br><span class="line">service iptables stop #停止服务</span><br><span class="line">service iptables restart #重启服务</span><br><span class="line"></span><br><span class="line">关闭SELINUX </span><br><span class="line">vim /etc/selinux/config </span><br><span class="line"> #注释以下配置 </span><br><span class="line"> SELINUX=enforcing </span><br><span class="line"> SELINUXTYPE=targeted </span><br><span class="line"> </span><br><span class="line"> #增加以下配置 </span><br><span class="line"> SELINUX=disabled </span><br><span class="line"> </span><br><span class="line"> #使配置立即生效 </span><br><span class="line"> setenforce 0</span><br></pre></td></tr></table></figure><h2 id="安装nginx"><a href="#安装nginx" class="headerlink" title="安装nginx"></a>安装nginx</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line">1、安装prce(重定向支持)和openssl(https支持,如果不需要https可以不安装。)</span><br><span class="line">yum -y install pcre*</span><br><span class="line">yum -y install openssl*</span><br><span class="line">2、下载nginx 1.9.9</span><br><span class="line">wget http://nginx.org/download/nginx-1.9.9.tar.gz</span><br><span class="line">3、解压编译安装</span><br><span class="line">tar -zxvf nginx-1.9.9.tar.gz</span><br><span class="line">cd nginx-1.9.9</span><br><span class="line">./configure</span><br><span class="line">make && make install</span><br><span class="line">编译完成后会发生成了/usr/local/nginx/目录</span><br><span class="line">4.启动nginx</span><br><span class="line">/usr/local/nginx/sbin/nginx</span><br><span class="line"> 重启</span><br><span class="line"> /usr/local/nginx/sbin/nginx -s reopen</span><br><span class="line"> 关闭</span><br><span class="line"> /usr/local/nginx/sbin/nginx -s stop</span><br><span class="line"> 重新加载配置</span><br><span class="line"> /usr/local/nginx/sbin/nginx -s reload</span><br><span class="line">5.验证nginx是否启动成功</span><br><span class="line"> 执行curl http://localhost 出现下面信息表示启动成功</span><br><span class="line">6.检查</span><br><span class="line">ps -ef |grep nginx</span><br><span class="line">netstat -antup |grep 80</span><br><span class="line">7、开放80端口</span><br><span class="line"> /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT</span><br><span class="line"> /etc/rc.d/init.d/iptables save</span><br><span class="line"> service iptables restart</span><br><span class="line">9.配置web</span><br><span class="line">主配置文件/usr/local/nginx/conf/nginx.conf</span><br><span class="line">修改默认web路径(http://www.5yun.org/6634.html)</span><br><span class="line">vim /usr/local/nginx/conf/nginx.conf</span><br><span class="line">修改localtion / root 为 /var/www</span><br><span class="line">重启nginx</span><br><span class="line">/usr/local/nginx/sbin/nginx -s reopen</span><br><span class="line">在/var/www下放至web服务器</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">./configure --prefix=/usr/local/nginx-1.9.9 \</span><br><span class="line">--with-http_ssl_module --with-http_spdy_module \</span><br><span class="line">--with-http_stub_status_module --with-pcre</span><br><span class="line">如果没有error信息,就可以执行下边的安装了:</span><br><span class="line">make</span><br><span class="line">make install</span><br><span class="line">4、开启nginx进程</span><br><span class="line"></span><br><span class="line">/usr/local/nginx-1.8.0/sbin/nginx</span><br><span class="line">重启或关闭进程:</span><br><span class="line">/usr/local/nginx-1.8.0/sbin/nginx -s reload</span><br><span class="line">/usr/local/nginx-1.8.0/sbin/nginx -s stop</span><br><span class="line">5、关闭防火墙,或者添加防火墙规则就可以测试了。</span><br><span class="line">service iptables stop</span><br><span class="line">或者编辑配置文件:</span><br><span class="line">vi /etc/sysconfig/iptables</span><br><span class="line">添加这样一条开放80端口的规则后保存:</span><br><span class="line">-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT</span><br><span class="line">重启服务即可:</span><br><span class="line">service iptables restart</span><br><span class="line">ok,,可以浏览器访问了。</span><br><span class="line">Welcome to nginx!</span><br></pre></td></tr></table></figure><h2 id="redis安装"><a href="#redis安装" class="headerlink" title="redis安装"></a>redis安装</h2><p>** yum安装redis**</p><p>参考教程 <a href="https://www.cnblogs.com/wujf-myblog/p/10043197.html" target="_blank" rel="noopener">CentOS 7 yum 安装redis(更简单)</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">下载fedora的epel仓库</span><br><span class="line">yum install epel-release</span><br><span class="line">安装redis</span><br><span class="line">yum install redis</span><br><span class="line"></span><br><span class="line">使用下面的命令操作redis</span><br><span class="line"># 启动redis</span><br><span class="line">service redis start</span><br><span class="line"># 停止redis</span><br><span class="line">service redis stop</span><br><span class="line"># 查看redis运行状态</span><br><span class="line">service redis status</span><br><span class="line"># 查看redis进程</span><br><span class="line">ps -ef | grep redis</span><br><span class="line"></span><br><span class="line">开机自启动</span><br><span class="line">chkconfig redis on</span><br><span class="line"></span><br><span class="line">进入redis服务</span><br><span class="line"># 进入本机redis</span><br><span class="line">redis-cli</span><br><span class="line"># 列出所有key</span><br><span class="line">keys *</span><br><span class="line"></span><br><span class="line">防火墙开放相应端口</span><br><span class="line"># 开启6379</span><br><span class="line">/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT</span><br><span class="line"># 开启6380</span><br><span class="line">/sbin/iptables -I INPUT -p tcp --dport 6380 -j ACCEPT</span><br><span class="line"># 保存</span><br><span class="line">/etc/rc.d/init.d/iptables save</span><br><span class="line"># centos 7下执行</span><br><span class="line">service iptables save</span><br></pre></td></tr></table></figure><p><strong>编译安装Redis</strong></p><p><a href="https://segmentfault.com/a/1190000002685224" target="_blank" rel="noopener">centos6安装redis-2.8.19.tar.gz</a></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line">然后再按照下面的方式执行</span><br><span class="line">Installation</span><br><span class="line">Download, extract and compile Redis with:</span><br><span class="line">$ wget http://download.redis.io/releases/redis-3.2.6.tar.gz</span><br><span class="line">$ tar xzf redis-3.2.6.tar.gz</span><br><span class="line">$ cd redis-3.2.6</span><br><span class="line">$ make && make install</span><br><span class="line">$ cd deps/hiredis</span><br><span class="line">$ make && make install</span><br><span class="line"></span><br><span class="line">The binaries that are now compiled are available in the src directory. Run Redis with:</span><br><span class="line">$ src/redis-server</span><br><span class="line">You can interact with Redis using the built-in client:</span><br><span class="line">$ src/redis-cli</span><br><span class="line">redis> set foo bar</span><br><span class="line">OK</span><br><span class="line">redis> get foo</span><br><span class="line">"bar"</span><br><span class="line"></span><br><span class="line">修改 /etc/ld.so.conf 文件,增加 /usr/local/lib</span><br><span class="line">执行 /sbin/ldconfig</span><br><span class="line"></span><br><span class="line">1、linux下如何安装hiredis</span><br><span class="line">1)下载地址</span><br><span class="line"> https://github.com/redis/hiredis</span><br><span class="line">2)编译和安装</span><br><span class="line">解压后的文件夹执行 make;make install;</span><br><span class="line"></span><br><span class="line">启动服务器</span><br><span class="line">redis-server</span><br><span class="line">启动客户端</span><br><span class="line">redis-cli</span><br><span class="line">配置redis 后台</span><br><span class="line"> centos安装redis+三种启动方式(http://blog.csdn.net/zc474235918/article/details/50974483)</span><br></pre></td></tr></table></figure><h2 id="安装tinyxml"><a href="#安装tinyxml" class="headerlink" title="安装tinyxml"></a>安装tinyxml</h2><pre><code># wget http://dl.fedoraproject.org/pub/epel/6/x86_64/tinyxml-devel-2.6.1-1.el6.x86_64.rpm# rpm -ivh tinyxml-devel-2.6.1-1.el6.x86_64.rpm编译静态库wget https://nchc.dl.sourceforge.net/project/tinyxml/tinyxml/2.6.2/tinyxml_2_6_2.zipunzip tinyxml_2_6_2.zip -d tinyxml 修改Makefile[plain] view plain copy#OUTPUT := xmltest OUTPUT := libtinyxml.a ${OUTPUT}: ${OBJS} # ${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} ${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} #xmltest.o: tinyxml.h tinystr.h 编译安装make && install</code></pre><h2 id="手把手教你搭建自己的shadowsocks"><a href="#手把手教你搭建自己的shadowsocks" class="headerlink" title="手把手教你搭建自己的shadowsocks"></a>手把手教你搭建自己的shadowsocks</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line">Shadowsocks-go一键安装脚本</span><br><span class="line">本脚本适用环境:</span><br><span class="line">系统支持:CentOS,Debian,Ubuntu</span><br><span class="line">内存要求:≥64M</span><br><span class="line">日期:2018 年 03 月 15 日</span><br><span class="line"></span><br><span class="line">关于本脚本:</span><br><span class="line">一键安装 Go 版的 shadowsocks 最新版本 1.2.1。与 Python 版不同的是,其客户端程序能使用多个服务端配置,本脚本安装的是服务端程序。</span><br><span class="line">友情提示:如果你有问题,请先参考这篇《Shadowsocks Troubleshooting》后再问。</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">默认配置:</span><br><span class="line">服务器端口:自己设定(如不设定,默认从 9000-19999 之间随机生成)</span><br><span class="line">密码:自己设定(如不设定,默认为 teddysun.com)</span><br><span class="line">加密方式:自己设定(如不设定,默认为 aes-256-cfb)</span><br><span class="line"></span><br><span class="line">Shadowsocks for Windows 客户端下载:</span><br><span class="line">https://github.com/shadowsocks/shadowsocks-windows/releases</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">使用方法:</span><br><span class="line">使用root用户登录,运行以下命令:</span><br><span class="line">wget --no-check-certificate -O shadowsocks-go.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-go.sh</span><br><span class="line">chmod +x shadowsocks-go.sh</span><br><span class="line">./shadowsocks-go.sh 2>&1 | tee shadowsocks-go.log</span><br><span class="line">安装完成后,脚本提示如下:</span><br><span class="line"></span><br><span class="line">Congratulations, Shadowsocks-go server install completed!</span><br><span class="line">Your Server IP :your_server_ip</span><br><span class="line">Your Server Port :your_server_port</span><br><span class="line">Your Password :your_password</span><br><span class="line">Your Encryption Method:your_encryption_method</span><br><span class="line"></span><br><span class="line">Welcome to visit:https://teddysun.com/392.html</span><br><span class="line">Enjoy it!</span><br><span class="line">卸载方法:</span><br><span class="line">使用 root 用户登录,运行以下命令:</span><br><span class="line"></span><br><span class="line">./shadowsocks-go.sh uninstall</span><br><span class="line">其他事项:</span><br><span class="line">客户端配置的参考链接:https://teddysun.com/339.html</span><br><span class="line"></span><br><span class="line">安装完成后即已后台启动 Shadowsocks-go ,运行:</span><br><span class="line"></span><br><span class="line">/etc/init.d/shadowsocks status</span><br><span class="line">可以查看 Shadowsocks-go 进程是否已经启动。</span><br><span class="line">本脚本安装完成后,已将 shadowsocks-go 加入开机自启动。</span><br><span class="line"></span><br><span class="line">使用命令:</span><br><span class="line">启动:/etc/init.d/shadowsocks start</span><br><span class="line">停止:/etc/init.d/shadowsocks stop</span><br><span class="line">重启:/etc/init.d/shadowsocks restart</span><br><span class="line">状态:/etc/init.d/shadowsocks status</span><br><span class="line"></span><br><span class="line">多用户多端口配置文件示例:</span><br><span class="line">配置文件路径:/etc/shadowsocks/config.json</span><br><span class="line">{</span><br><span class="line"> "port_password":{</span><br><span class="line"> "8989":"password0",</span><br><span class="line"> "9001":"password1",</span><br><span class="line"> "9002":"password2",</span><br><span class="line"> "9003":"password3",</span><br><span class="line"> "9004":"password4"</span><br><span class="line"> },</span><br><span class="line"> "method":"your_encryption_method",</span><br><span class="line"> "timeout":600</span><br><span class="line">}</span><br><span class="line">官方版本的示例 ,详见这里。</span><br></pre></td></tr></table></figure><h2 id="设定固定IP"><a href="#设定固定IP" class="headerlink" title="设定固定IP"></a>设定固定IP</h2><pre><code>虚拟机网络适配模式设为:桥接模式+复制物理网络连接状态$sudo cp /etc/network/interfaces /etc/network/interfaces_back$sudo vim /etc/network/interfaces配置内容为auto loiface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.111netmask 255.255.255.0 gateway 192.168.0.1重启网络使之生效$sudo /etc/init.d/networking restart这时候就能ping到局域网中的电脑了。但是上不了Internet,是因为没有设置DNS的原因。DNS信息保存在/etc/resolv.conf中,一旦更改,立即生效。$sudo vim /etc/resolvconf/resolv.conf.d/head配置内容为nameserver 192.168.2.43nameserver 192.168.2.6或者直接在/etc/network/interfaces 添加dns-nameservers 192.168.2.43dns-nameservers 192.168.2.6重启生效$sudo reboot -h now查看ip信息ifconfig查看路由相关信息:route -n命令设定ipifconfig eth1 192.168.1.10 netmask 255.255.255.0 </code></pre><h2 id="相关问题"><a href="#相关问题" class="headerlink" title="相关问题"></a>相关问题</h2><ul><li><a href="http://www.th7.cn/system/lin/201407/61834.shtml" target="_blank" rel="noopener">[CentOS]如何解决gcc版本冲突?</a></li><li><a href="http://www.linuxidc.com/Linux/2015-01/112595.htm" target="_blank" rel="noopener">CentOS6.5升级手动安装GCC4.8.2</a></li><li><a href="http://www.lxway.com/421808022.htm" target="_blank" rel="noopener">linux下安装或升级GCC4.8,以支持C++11标准</a></li></ul><h2 id="相关"><a href="#相关" class="headerlink" title="相关"></a>相关</h2><ul><li><a href="http://blog.csdn.net/jcjc918/article/details/11022345" target="_blank" rel="noopener">Centos 6.4 python 2.6 升级到 2.7</a></li><li><a href="http://seisman.info/linux-environment-for-seismology-research.html" target="_blank" rel="noopener">用CentOS 7打造合适的科研环境</a></li></ul><h2 id="ssh工具"><a href="#ssh工具" class="headerlink" title="ssh工具"></a>ssh工具</h2><ul><li>xshell</li></ul><h2 id="centos7升级内核"><a href="#centos7升级内核" class="headerlink" title="centos7升级内核"></a>centos7升级内核</h2><pre><code>教程:https://www.jianshu.com/p/fdf6bb6c5b9c</code></pre><h2 id="gcc升级"><a href="#gcc升级" class="headerlink" title="gcc升级"></a>gcc升级</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz</span><br></pre></td></tr></table></figure><h2 id="相关问题-1"><a href="#相关问题-1" class="headerlink" title="相关问题"></a>相关问题</h2><ul><li><a href="http://m.zhihu.com/question/23551546" target="_blank" rel="noopener">如何在 SSH 下远程使用 IDE 编译和调试?</a></li></ul><h2 id="vim相关教程"><a href="#vim相关教程" class="headerlink" title="vim相关教程"></a>vim相关教程</h2><ul><li><a href="http://blog.jobbole.com/10250/" target="_blank" rel="noopener">25个Vim教程、视频和资源</a></li><li><a href="http://www.vpser.net/manage/vi.html" target="_blank" rel="noopener">Linux上vi(vim)编辑器使用教程</a></li><li><a href="http://blog.csdn.net/namecyf/article/details/7787479" target="_blank" rel="noopener">vim配置及插件安装管理(超级详细)</a></li><li><a href="http://www.2cto.com/os/201404/292818.html" target="_blank" rel="noopener">Ubuntu下vim插件的在线安装</a></li><li><a href="http://blog.163.com/clevertanglei900@126/blog/static/111352259201352011129641/" target="_blank" rel="noopener">vim addon manager </a></li><li><a href="http://www.cnblogs.com/junnyfeng/p/3633697.html" target="_blank" rel="noopener">vim安装YouCompleteMe 插件</a></li><li><a href="http://tieba.baidu.com/p/2672605209" target="_blank" rel="noopener">vim智能补全插件YouCompleteMe新手完全攻略</a></li><li><a href="http://blog.csdn.net/wooin/article/details/1858917" target="_blank" rel="noopener">手把手教你把Vim改装成一个IDE编程环境(图文)</a></li></ul><h2 id="文件换行符问题"><a href="#文件换行符问题" class="headerlink" title="文件换行符问题"></a>文件换行符问题</h2><pre><code>如test.sh提示换行符问题vim test.sh命令模式下输入以下内容,表示使用unix换行符,set ff=dos表示使用dos换行符set ff=unixwq</code></pre><h2 id="在Linux中查看所有正在运行的进程"><a href="#在Linux中查看所有正在运行的进程" class="headerlink" title="在Linux中查看所有正在运行的进程"></a>在Linux中查看所有正在运行的进程</h2><pre><code>[在Linux中查看所有正在运行的进程](http://blog.csdn.net/cnmilan/article/details/34104713)</code></pre><h2 id="端口占用"><a href="#端口占用" class="headerlink" title="端口占用"></a>端口占用</h2><pre><code>sudo netstat -tulnp | grep ':80'kill -9 PID</code></pre><h2 id="压缩解压缩"><a href="#压缩解压缩" class="headerlink" title="压缩解压缩"></a>压缩解压缩</h2><pre><code>解压 tar zxvf 文件名.tar.gz压缩 tar zcvf 文件名.tar.gz 目标名</code></pre><h2 id="其它"><a href="#其它" class="headerlink" title="其它"></a>其它</h2><ul><li><a href="http://jingyan.baidu.com/article/aa6a2c14e347010d4c19c48f.html" target="_blank" rel="noopener">在新版 Win10 中启用 Linux Bash 环境</a></li><li><a href="http://app.myzaker.com/news/article.php?pk=571415a51bc8e0fb08000012" target="_blank" rel="noopener">手把手教你:如何让 Windows 恋上 Linux bash</a></li><li><a href="http://blog.iytc.net/wordpress/?p=1148" target="_blank" rel="noopener">centos6、ubuntu 14.04安装ShadowSocks</a></li><li><a href="http://blog.51cto.com/holy2010/1963355" target="_blank" rel="noopener">搭建自己专属的vpn——Centos搭建vpn的几种办法</a></li><li><a href="https://blog.csdn.net/zhldt2008/article/details/52626892" target="_blank" rel="noopener">CentOS 7 开放3306端口访问</a></li></ul><h2 id="在自己vps-ubuntu上安装v2ray"><a href="#在自己vps-ubuntu上安装v2ray" class="headerlink" title="在自己vps ubuntu上安装v2ray"></a>在自己vps ubuntu上安装v2ray</h2><p>输入下面命令进行一键安装</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash <(curl -L -s https://install.direct/go.sh)</span><br></pre></td></tr></table></figure><p>安装完成后我们来编辑一下配置文件 </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim /etc/v2ray/config.json</span><br></pre></td></tr></table></figure><p>记下来inbounds里面的<br>port 28072<br>id 1656d469-bc80-48d4-a0e3-01243cf7d046<br>alterId 64</p><p>若需要配置Shadowscoks,请于inbounds同级增加以下配置</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">"inboundDetour": [</span><br><span class="line"> {</span><br><span class="line"> "protocol": "shadowsocks",</span><br><span class="line"> "port": 30001, </span><br><span class="line"> "settings": {</span><br><span class="line"> "method": "aes-256-cfb", </span><br><span class="line"> "password": "v2ray", </span><br><span class="line"> "udp": false </span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">],</span><br><span class="line">"log": {</span><br><span class="line"> "loglevel": "warning",</span><br><span class="line"> "access": "/var/log/v2ray/access.log",</span><br><span class="line"> "error": "/var/log/v2ray/error.log"</span><br><span class="line">},</span><br></pre></td></tr></table></figure><p>之后可以使用 service v2ray start|stop|status|reload|restart|force-reload 控制 V2Ray 的运行</p>]]></content>
<summary type="html">
<h1 id="CentOS-7-安装和使用"><a href="#CentOS-7-安装和使用" class="headerlink" title="CentOS-7 安装和使用"></a>CentOS-7 安装和使用</h1><h2 id="centos下载安装"><a hr
</summary>
<category term="运维" scheme="https://jinzt.github.io/categories/%E8%BF%90%E7%BB%B4/"/>
<category term="linux" scheme="https://jinzt.github.io/tags/linux/"/>
</entry>
<entry>
<title>python</title>
<link href="https://jinzt.github.io/posts/a4d4b8b8.html"/>
<id>https://jinzt.github.io/posts/a4d4b8b8.html</id>
<published>2020-04-12T12:51:33.876Z</published>
<updated>2020-04-12T09:41:54.498Z</updated>
<content type="html"><![CDATA[<h1 id="首页"><a href="#首页" class="headerlink" title="首页"></a><a href="https://git.oschina.net/xinxinyuling/note" target="_blank" rel="noopener">首页</a></h1><h2 id="基本教程"><a href="#基本教程" class="headerlink" title="基本教程"></a>基本教程</h2><ul><li><a href="https://www.python.org/" target="_blank" rel="noopener">python官网</a></li><li><a href="http://www.runoob.com/python/python-tutorial.html" target="_blank" rel="noopener">w3c教程</a></li><li><a href="http://old.sebug.net/paper/books/tornado/" target="_blank" rel="noopener">Tornado概览</a></li><li><a href="http://demo.pythoner.com/itt2zh/index.html" target="_blank" rel="noopener">Tornado模板</a></li><li><a href="http://www.yiibai.com/python/" target="_blank" rel="noopener">易百教程</a></li><li><a href="http://www.iplaypython.com/module/" target="_blank" rel="noopener">python学习与分享平台</a></li></ul><h2 id="视频教程"><a href="#视频教程" class="headerlink" title="视频教程"></a>视频教程</h2><h2 id="其它"><a href="#其它" class="headerlink" title="其它"></a>其它</h2><ul><li><a href="http://blog.csdn.net/littlethunder/article/details/25532601" target="_blank" rel="noopener">从0开始Tornado建站</a></li><li><a href="http://www.liujingze.com/tornado-projects-collection.html" target="_blank" rel="noopener">tornado的一些相关项目搜集</a></li><li><a href="http://wangxun.me/6.html" target="_blank" rel="noopener">WLBLOG</a></li><li><a href="http://www.cnblogs.com/kongqi816-boke/p/5883970.html" target="_blank" rel="noopener">Tornado实战项目(伪JD商城)</a></li><li><a href="https://www.zhihu.com/question/19707966" target="_blank" rel="noopener">有没有什么很好的 Tornado 的教材或者开源项目可以做参考的?</a></li><li><a href="http://www.tuicool.com/articles/f2eqUj" target="_blank" rel="noopener">tornado应用例子(二):使用ajax(jquery)通过前台和后台交互</a></li></ul><h2 id><a href="#" class="headerlink" title></a></h2><p><a href="https://github.com/paradoxxxzero/butterfly" target="_blank" rel="noopener">https://github.com/paradoxxxzero/butterfly</a><br><a href="https://github.com/finiteloop/blog" target="_blank" rel="noopener">https://github.com/finiteloop/blog</a></p><p>##d </p><ul><li><a href="http://python.jobbole.com/84215/" target="_blank" rel="noopener">用python为mysql实现restful接口</a></li></ul><h2 id="网络"><a href="#网络" class="headerlink" title="网络"></a>网络</h2><ul><li><a href="http://python.jobbole.com/84234/" target="_blank" rel="noopener">游戏服务器端架构升级之路</a></li><li><a href="https://www.cnblogs.com/maociping/p/5132583.html" target="_blank" rel="noopener">python网络编程——IO多路复用之epoll</a></li><li><a href="https://www.cnblogs.com/lxmhhy/p/6091730.html" target="_blank" rel="noopener">python select网络编程详细介绍</a></li></ul><p>##d</p><ul><li><a href="https://www.cnblogs.com/xiaomm/p/6325968.html" target="_blank" rel="noopener">Python实现数据库一键导出为Excel表格</a></li></ul><h2 id="大型教程"><a href="#大型教程" class="headerlink" title="大型教程"></a>大型教程</h2><ul><li><p><a href="http://docs.jinkan.org/docs/flask/" target="_blank" rel="noopener">欢迎使用 Flask</a></p></li><li><p><a href="http://www.pythondoc.com/flask-mega-tutorial/index.html" target="_blank" rel="noopener">欢迎进入Flask大型教程项目!</a></p></li><li><p><a href="https://www.oschina.net/translate/the-flask-mega-tutorial-part-i-hello-world" target="_blank" rel="noopener">Flask 教程,第一部分:Hello,World!</a></p></li><li><p><a href="http://wiki.jikexueyuan.com/project/flask-guide/the-course.html" target="_blank" rel="noopener"> Flask 用户指南</a></p></li><li><p><a href="https://www.gitlore.com/python/FlaskWeb%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8" target="_blank" rel="noopener"> python / FlaskWeb开发入门 </a></p></li></ul><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://www.jianshu.com/p/539904d556c8" target="_blank" rel="noopener">python2.7+Flask框架+新浪SAE之微信公众平台后端从无到有</a></li><li><a href="https://www.jianshu.com/p/264d55f8d652" target="_blank" rel="noopener">python+flask+sae+微信公众号开发后记</a></li><li><a href="https://www.jianshu.com/p/b12d2527a3f4" target="_blank" rel="noopener">Vue 2.0 起步(4) 轻量级后端Flask用户认证 - 微信公众号RSS</a></li></ul><h2 id="系列教程"><a href="#系列教程" class="headerlink" title="系列教程"></a>系列教程</h2><ul><li><a href="http://www.tutorialspoint.com/python/python_gui_programming.htm" target="_blank" rel="noopener">Python - GUI Programming (Tkinter)</a></li><li><a href="http://www.runoob.com/python/python-gui-tkinter.html" target="_blank" rel="noopener">Python GUI编程(Tkinter)</a></li><li><a href="https://www.ibm.com/developerworks/cn/linux/sdk/python/charm-12/" target="_blank" rel="noopener">可爱的 Python:Python 中的 TK编程</a></li><li><a href="https://www.cnblogs.com/kaituorensheng/p/3287652.html" target="_blank" rel="noopener">pyhon之Tkinter实例化学习</a></li><li><a href="https://morvanzhou.github.io/tutorials/python-basic/tkinter/" target="_blank" rel="noopener">Tkinter GUI 教程系列 | 莫烦Python</a></li><li><a href="https://blog.csdn.net/lemonwyc/article/details/38071281" target="_blank" rel="noopener">python学习笔记14–用Tkinter实现GUI编程</a></li></ul><h2 id="文章"><a href="#文章" class="headerlink" title="文章"></a>文章</h2><ul><li><p><a href="https://www.cnblogs.com/cquptzzq/p/4092535.html" target="_blank" rel="noopener">基于tcp交互的python聊天程序</a></p></li><li><p><a href="https://blog.csdn.net/hanzhenqwe/article/details/54895175" target="_blank" rel="noopener">python— 如何将自己的程序打包成exe ?</a></p></li><li><p><a href="https://blog.csdn.net/ober2012/article/details/50776334" target="_blank" rel="noopener">初用Python:Tkinter做的Http小工具</a></p></li><li><p><a href="http://www.iplaypy.com/code/gui/ui468.html" target="_blank" rel="noopener">Tkinter 实现带界面的client与server端程序</a></p></li><li><p><a href="https://www.cnblogs.com/ryan255/p/5426846.html" target="_blank" rel="noopener">python3带tkinter窗口的ftp服务器,并使用pyinstaller打包成exe</a></p></li><li><p><a href="https://blog.csdn.net/qq_32897089/article/details/74519488" target="_blank" rel="noopener">python使用tkinter写带界面的工具</a></p></li><li><p><a href="https://www.cnblogs.com/monsteryang/p/6592380.html" target="_blank" rel="noopener">python——Tkinter图形化界面及threading多线程</a></p></li><li><p><a href="https://blog.csdn.net/dezhihuang/article/details/71516103" target="_blank" rel="noopener">基于Python多线程的TCP客户端/服务端应用示例</a></p></li><li><p><a href="https://www.cnblogs.com/wwf828/p/7418181.html" target="_blank" rel="noopener">Python初学——窗口视窗Tkinter</a></p></li><li><p><a href="https://www.zhihu.com/question/32703639" target="_blank" rel="noopener">为什么很多Python开发者写GUI不用Tkinter,而要选择PyQt和wxPython或其他?</a></p></li><li><p><a href="https://www.cnblogs.com/wooya/p/5898694.html" target="_blank" rel="noopener">浅析python select模块</a></p></li></ul><h2 id="实战聊天室"><a href="#实战聊天室" class="headerlink" title="实战聊天室"></a>实战聊天室</h2><h2 id="系列教程-1"><a href="#系列教程-1" class="headerlink" title="系列教程"></a>系列教程</h2><ul><li><a href="http://www.tutorialspoint.com/python/python_gui_programming.htm" target="_blank" rel="noopener">Python - GUI Programming (Tkinter)</a></li><li><a href="http://www.runoob.com/python/python-gui-tkinter.html" target="_blank" rel="noopener">Python GUI编程(Tkinter)</a></li><li><a href="https://www.ibm.com/developerworks/cn/linux/sdk/python/charm-12/" target="_blank" rel="noopener">可爱的 Python:Python 中的 TK编程</a></li><li><a href="https://www.cnblogs.com/kaituorensheng/p/3287652.html" target="_blank" rel="noopener">pyhon之Tkinter实例化学习</a></li><li><a href="https://morvanzhou.github.io/tutorials/python-basic/tkinter/" target="_blank" rel="noopener">Tkinter GUI 教程系列 | 莫烦Python</a></li><li><a href="https://blog.csdn.net/lemonwyc/article/details/38071281" target="_blank" rel="noopener">python学习笔记14–用Tkinter实现GUI编程</a></li><li><a href="https://www.cnblogs.com/Trojan00/p/9567342.html" target="_blank" rel="noopener">Python之GUI的最终选择(Tkinter)</a></li><li><a href="https://www.e-learn.cn/content/python/1101684" target="_blank" rel="noopener">tkinter python(图形开发界面)</a></li><li><a href="https://blog.csdn.net/u012343179/article/details/78330822" target="_blank" rel="noopener">MVC架构模式在Tkinter中的运用</a></li><li><a href="https://blog.csdn.net/qq_32216775/article/details/86072899" target="_blank" rel="noopener">python socket + tkinter实现网络聊天室</a></li></ul><h2 id="文章-1"><a href="#文章-1" class="headerlink" title="文章"></a>文章</h2><ul><li><p><a href="https://www.cnblogs.com/cquptzzq/p/4092535.html" target="_blank" rel="noopener">基于tcp交互的python聊天程序</a></p></li><li><p><a href="https://blog.csdn.net/hanzhenqwe/article/details/54895175" target="_blank" rel="noopener">python— 如何将自己的程序打包成exe ?</a></p></li><li><p><a href="https://blog.csdn.net/ober2012/article/details/50776334" target="_blank" rel="noopener">初用Python:Tkinter做的Http小工具</a></p></li><li><p><a href="http://www.iplaypy.com/code/gui/ui468.html" target="_blank" rel="noopener">Tkinter 实现带界面的client与server端程序</a></p></li><li><p><a href="https://www.cnblogs.com/ryan255/p/5426846.html" target="_blank" rel="noopener">python3带tkinter窗口的ftp服务器,并使用pyinstaller打包成exe</a></p></li><li><p><a href="https://blog.csdn.net/qq_32897089/article/details/74519488" target="_blank" rel="noopener">python使用tkinter写带界面的工具</a></p></li><li><p><a href="https://www.cnblogs.com/monsteryang/p/6592380.html" target="_blank" rel="noopener">python——Tkinter图形化界面及threading多线程</a></p></li><li><p><a href="https://blog.csdn.net/dezhihuang/article/details/71516103" target="_blank" rel="noopener">基于Python多线程的TCP客户端/服务端应用示例</a></p></li><li><p><a href="https://www.cnblogs.com/wwf828/p/7418181.html" target="_blank" rel="noopener">Python初学——窗口视窗Tkinter</a></p></li><li><p><a href="https://www.zhihu.com/question/32703639" target="_blank" rel="noopener">为什么很多Python开发者写GUI不用Tkinter,而要选择PyQt和wxPython或其他?</a></p></li><li><p><a href="https://www.cnblogs.com/wooya/p/5898694.html" target="_blank" rel="noopener">浅析python select模块</a></p></li></ul><h2 id="实战聊天室-1"><a href="#实战聊天室-1" class="headerlink" title="实战聊天室"></a>实战聊天室</h2><h2 id="sd"><a href="#sd" class="headerlink" title="sd"></a>sd</h2><ul><li><p><a href="https://www.cnblogs.com/wowoo1121/p/5806566.html" target="_blank" rel="noopener">python tornado websocket 多聊天室(返回消息给部分连接者)</a></p></li><li><p><a href="http://yunjianfei.iteye.com/blog/2187247" target="_blank" rel="noopener">tornado之TCPServer性能测试</a></p></li><li><p><a href="https://www.cnblogs.com/kongqi816-boke/p/5699866.html" target="_blank" rel="noopener">Tornado解析</a></p></li><li><p><a href="http://python.jobbole.com/84234/" target="_blank" rel="noopener">游戏服务器端架构升级之路</a></p></li><li><p><a href="https://www.cnblogs.com/maociping/p/5132583.html" target="_blank" rel="noopener">python网络编程——IO多路复用之epoll</a></p></li><li><p><a href="https://www.cnblogs.com/lxmhhy/p/6091730.html" target="_blank" rel="noopener">python select网络编程详细介绍</a></p></li><li><p><a href="https://blog.csdn.net/slwhy/article/details/79603190" target="_blank" rel="noopener">python 爬取极客学院视频</a></p></li></ul><p>Python3爬取某教育平台题库保存为Word文档</p><h2 id="参考-1"><a href="#参考-1" class="headerlink" title="参考"></a>参考</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment">#!/usr/bin/python</span></span><br><span class="line"><span class="comment">#-*-encodeing:utf-8-*-</span></span><br><span class="line"><span class="keyword">import</span> tornado.web</span><br><span class="line"><span class="keyword">import</span> tornado.ioloop</span><br><span class="line"><span class="keyword">import</span> tornado.options</span><br><span class="line"><span class="keyword">import</span> multiprocessing</span><br><span class="line"><span class="keyword">from</span> tornado.options <span class="keyword">import</span> define,options</span><br><span class="line"><span class="keyword">import</span> os,sys</span><br><span class="line"></span><br><span class="line">define(<span class="string">"port"</span>, default=<span class="number">9000</span>, help=<span class="string">"run on the given port"</span>, type=int)</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">BaseHandler</span><span class="params">(tornado.web.RequestHandler)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get_current_user</span><span class="params">(self)</span>:</span></span><br><span class="line"> <span class="keyword">return</span> self.get_secure_cookie(<span class="string">'user'</span>)</span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get_template_path</span><span class="params">(self)</span>:</span></span><br><span class="line"> <span class="keyword">return</span> os.path.join(os.path.dirname(__file__),<span class="string">'templates'</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MainHandler</span><span class="params">(BaseHandler)</span>:</span></span><br><span class="line"><span class="meta"> @tornado.web.asynchronous</span></span><br><span class="line"><span class="meta"> @tornado.web.authenticated</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self)</span>:</span></span><br><span class="line"> name=tornado.escape.xhtml_escape(self.current_user)</span><br><span class="line"> self.write(<span class="string">'Hello'</span>+self.current_user)</span><br><span class="line"> self.finish()</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">LoginHandler</span><span class="params">(BaseHandler)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">lower</span><span class="params">(self,string)</span>:</span></span><br><span class="line"> <span class="keyword">return</span> string.lower()</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self)</span>:</span></span><br><span class="line"> self.write(<span class="string">'''</span></span><br><span class="line"><span class="string"><html></span></span><br><span class="line"><span class="string"> <head><title>MyDemo</title></head></span></span><br><span class="line"><span class="string"> <body></span></span><br><span class="line"><span class="string"> <form action='/login' method='post'></span></span><br><span class="line"><span class="string"> Username:<input type='text' name='username'/></span></span><br><span class="line"><span class="string"> Password:<input type='password' name='password'/></span></span><br><span class="line"><span class="string"> <input type='submit' value='Submit'/></span></span><br><span class="line"><span class="string"> </form></span></span><br><span class="line"><span class="string"> </body></span></span><br><span class="line"><span class="string"></html></span></span><br><span class="line"><span class="string">'''</span>),</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">post</span><span class="params">(self)</span>:</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> self.request.headers.get(<span class="string">'Cookie'</span>):</span><br><span class="line"> self.write(<span class="string">'Please enable your Cookie option of your broswer.'</span>)</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> self.set_secure_cookie(<span class="string">'user'</span>,self.get_argument(<span class="string">'username'</span>),expires_days=<span class="number">1</span>)</span><br><span class="line"> self.redirect(<span class="string">'/'</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">settings={</span><br><span class="line"> <span class="string">'static_path'</span>:os.path.join(os.path.dirname(__file__),<span class="string">'static'</span>),</span><br><span class="line"> <span class="string">'cookie_secret'</span>:<span class="string">'F/hsxF7kTIWGO1F6HrH78Rf4bMRe5EyFhjtReh6x+/E='</span>,</span><br><span class="line"> <span class="string">'login_url'</span>:<span class="string">'/login'</span>,</span><br><span class="line"> <span class="string">'debug'</span>:<span class="literal">True</span>,</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">app=tornado.web.Application([</span><br><span class="line"> (<span class="string">r'/'</span>,MainHandler),</span><br><span class="line"> (<span class="string">r'/login'</span>,LoginHandler),</span><br><span class="line">],**settings)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> tornado.options.parse_command_line()</span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">run</span><span class="params">(mid,port)</span>:</span></span><br><span class="line"> <span class="keyword">print</span> <span class="string">"Process %d start"</span> % mid</span><br><span class="line"> sys.stdout.flush()</span><br><span class="line"> app.listen(port)</span><br><span class="line"> tornado.ioloop.IOLoop.instance().start()</span><br><span class="line"> jobs=list()</span><br><span class="line"> <span class="keyword">for</span> mid,port <span class="keyword">in</span> enumerate(range(<span class="number">9010</span>,<span class="number">9014</span>)):</span><br><span class="line"> p=multiprocessing.Process(target=run,args=(mid,port))</span><br><span class="line"> jobs.append(p)</span><br><span class="line"> p.start()</span><br></pre></td></tr></table></figure><h2 id="微信公众号后台"><a href="#微信公众号后台" class="headerlink" title="微信公众号后台"></a>微信公众号后台</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">## -*- coding: utf-8 -*-</span></span><br><span class="line"><span class="comment">#coding=utf-8</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">import</span> traceback </span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> urllib </span><br><span class="line"><span class="keyword">import</span> urllib2</span><br><span class="line"><span class="keyword">import</span> hashlib</span><br><span class="line"><span class="keyword">import</span> threading</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> tornado.httpserver</span><br><span class="line"><span class="keyword">import</span> tornado.ioloop</span><br><span class="line"><span class="keyword">import</span> tornado.web</span><br><span class="line"><span class="keyword">import</span> tornado.autoreload</span><br><span class="line"><span class="keyword">from</span> tornado.options <span class="keyword">import</span> define, options</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> xml.etree.ElementTree <span class="keyword">as</span> ET</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> config</span><br><span class="line"><span class="keyword">from</span> wxhelper <span class="keyword">import</span> WeixinHelper</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 导入日志 并进行配置</span></span><br><span class="line"><span class="keyword">import</span> logging</span><br><span class="line">logging.basicConfig(</span><br><span class="line"> filename = os.getcwd() + <span class="string">"/web.log"</span>,</span><br><span class="line"> <span class="comment"># format = "%(levelname)-10s %(asctime)s %(filename)s %(module)s %(funcName)s %(lineno)s %(message)s",</span></span><br><span class="line"> format = <span class="string">"%(levelname)-2s %(asctime)s %(filename)s %(lineno)s %(message)s"</span>,</span><br><span class="line"> level = logging.INFO</span><br><span class="line"> )</span><br><span class="line">console = logging.StreamHandler() </span><br><span class="line">console.setLevel(logging.INFO) </span><br><span class="line">formatter = logging.Formatter(<span class="string">'%(levelname)-2s %(filename)s line:%(lineno)-2s %(message)s'</span>) </span><br><span class="line">console.setFormatter(formatter) </span><br><span class="line">logging.getLogger(<span class="string">''</span>).addHandler(console) </span><br><span class="line"><span class="comment"># CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># server config</span></span><br><span class="line">define(<span class="string">"port"</span>, default=<span class="number">444</span>, help=<span class="string">"run on the given port"</span>, type=int)</span><br><span class="line">define(<span class="string">"debug"</span>, default=<span class="literal">True</span>, help=<span class="string">"set debug mode"</span>, type=bool)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">SessionMap = {}</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">BaseHandler</span><span class="params">(tornado.web.RequestHandler)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get_current_user</span><span class="params">(self)</span>:</span></span><br><span class="line"> session_id = self.get_secure_cookie(<span class="string">'session_id'</span>)</span><br><span class="line"> <span class="keyword">if</span> session_id <span class="keyword">and</span> SessionMap.has_key(session_id):</span><br><span class="line"> data = SessionMap[session_id]</span><br><span class="line"> <span class="keyword">if</span> data[<span class="string">'over_time'</span>] < int(time.time()):</span><br><span class="line"> <span class="keyword">del</span> SessionMap[session_id]</span><br><span class="line"> self.set_secure_cookie(<span class="string">'session_id'</span>, <span class="literal">None</span>)</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">None</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> data</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">None</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__create_id</span><span class="params">(self)</span>:</span></span><br><span class="line"> new_id = session_id = <span class="keyword">lambda</span>: hashlib.sha1(<span class="string">'%s%s'</span> % (os.urandom(<span class="number">16</span>), time.time())).hexdigest()</span><br><span class="line"> <span class="keyword">return</span> new_id()</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">set_current_user</span><span class="params">(self, data)</span>:</span></span><br><span class="line"> session_id = self.get_secure_cookie(<span class="string">'session_id'</span>)</span><br><span class="line"> <span class="keyword">if</span> session_id <span class="keyword">is</span> <span class="literal">None</span>:</span><br><span class="line"> id = self.__create_id()</span><br><span class="line"> self.set_secure_cookie(<span class="string">'session_id'</span>, id)</span><br><span class="line"></span><br><span class="line"> SessionMap[session_id] = data</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">set_default_headers</span><span class="params">(self)</span>:</span></span><br><span class="line"> self.set_header(<span class="string">'Access-Control-Allow-Origin'</span>, <span class="string">'*'</span>)</span><br><span class="line"> self.set_header(<span class="string">'Access-Control-Allow-Methods'</span>, <span class="string">'POST, GET, METHODS, OPTIONS'</span>)</span><br><span class="line"> self.set_header(<span class="string">'Access-Control-Max-Age'</span>, <span class="number">1000</span>)</span><br><span class="line"> self.set_header(<span class="string">'Access-Control-Allow-Headers'</span>, <span class="string">'*'</span>)</span><br><span class="line"> <span class="comment"># self.set_header('Content-type', 'application/json')</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">IndexHandler</span><span class="params">(tornado.web.RequestHandler)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self)</span>:</span></span><br><span class="line"> self.render(<span class="string">'index.html'</span>)</span><br><span class="line"> <span class="comment"># self.write('welcom view xue zhan dao di!!!')</span></span><br><span class="line"> <span class="comment"># self.render('index.html',appId = appId, timestamp = timestamp, nonceStr=nonceStr, signature = signature)</span></span><br><span class="line"> <span class="comment"># self.redirect('http://113.106.164.45:8081/UpdateRes/web/?n', permanent=True)</span></span><br><span class="line"> <span class="comment"># </span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">OtherHtmlHandler</span><span class="params">(tornado.web.RequestHandler)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self, page)</span>:</span></span><br><span class="line"> pagename= page + <span class="string">'.html'</span></span><br><span class="line"> path = os.path.join(self.settings[<span class="string">'static_path'</span>], pagename)</span><br><span class="line"> self.render(pagename, hello=<span class="string">"helo world"</span>)</span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">post</span><span class="params">(self, page)</span>:</span></span><br><span class="line"> <span class="keyword">pass</span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">OtherHandler</span><span class="params">(tornado.web.RequestHandler)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self, page, extension)</span>:</span></span><br><span class="line"> pagename= page + <span class="string">'.'</span> + extension</span><br><span class="line"> path = os.path.join(self.settings[<span class="string">'static_path'</span>], pagename)</span><br><span class="line"> <span class="keyword">print</span> path</span><br><span class="line"> <span class="keyword">if</span> extension != <span class="string">'html'</span>:</span><br><span class="line"> <span class="keyword">with</span> open(path) <span class="keyword">as</span> f:</span><br><span class="line"> self.write(f.read())</span><br><span class="line"> <span class="keyword">pass</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 127.0.0.1/wx</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">WxHandler</span><span class="params">(BaseHandler)</span>:</span></span><br><span class="line"><span class="meta"> @tornado.web.asynchronous</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self)</span>:</span></span><br><span class="line"> logging.info(<span class="string">'-------------- WxHandler GET ------------'</span>)</span><br><span class="line"> signature = self.get_argument(<span class="string">"signature"</span>, <span class="literal">None</span>)</span><br><span class="line"> timestamp = self.get_argument(<span class="string">"timestamp"</span>, <span class="literal">None</span>)</span><br><span class="line"> nonce = self.get_argument(<span class="string">"nonce"</span>, <span class="literal">None</span>)</span><br><span class="line"> echostr = self.get_argument(<span class="string">"echostr"</span>, <span class="literal">None</span>)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> signature <span class="keyword">or</span> <span class="keyword">not</span> timestamp <span class="keyword">or</span> <span class="keyword">not</span> nonce <span class="keyword">or</span> <span class="keyword">not</span> echostr:</span><br><span class="line"> self.write(<span class="string">'access weixin failed with params'</span>)</span><br><span class="line"> logging.warning(<span class="string">"access weixin failed with params"</span>) </span><br><span class="line"> <span class="keyword">else</span>: </span><br><span class="line"> <span class="keyword">if</span> self.application.wxhelper.check_signature(signature, timestamp, nonce):</span><br><span class="line"> self.write(echostr)</span><br><span class="line"> logging.info(<span class="string">"access weixin success"</span>) </span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> self.write(<span class="string">'access weixin failed'</span>)</span><br><span class="line"> logging.warning(<span class="string">"access weixin failed"</span>)</span><br><span class="line"></span><br><span class="line"> self.finish()</span><br><span class="line"></span><br><span class="line"><span class="meta"> @tornado.web.asynchronous</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">post</span><span class="params">(self)</span>:</span></span><br><span class="line"> logging.info(<span class="string">'-------------- WxHandler POST ------------'</span>)</span><br><span class="line"> body = self.request.body</span><br><span class="line"> <span class="comment"># logging.info(body)</span></span><br><span class="line"></span><br><span class="line"> xmlData = ET.fromstring(body)</span><br><span class="line"></span><br><span class="line"> msgType = xmlData.find(<span class="string">'MsgType'</span>).text</span><br><span class="line"> toUser = xmlData.find(<span class="string">'ToUserName'</span>).text</span><br><span class="line"> fromUser = xmlData.find(<span class="string">'FromUserName'</span>).text</span><br><span class="line"> createTime = xmlData.find(<span class="string">'CreateTime'</span>).text </span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> msgType == <span class="string">'text'</span>:</span><br><span class="line"> msgId= xmlData.find(<span class="string">"MsgId"</span>).text</span><br><span class="line"> content = xmlData.find(<span class="string">'Content'</span>).text.encode(<span class="string">"utf-8"</span>)</span><br><span class="line"> createTime = int(time.time())</span><br><span class="line"> textTpl = <span class="string">"""<xml></span></span><br><span class="line"><span class="string"> <ToUserName><![CDATA[%s]]></ToUserName></span></span><br><span class="line"><span class="string"> <FromUserName><![CDATA[%s]]></FromUserName></span></span><br><span class="line"><span class="string"> <CreateTime>%s</CreateTime></span></span><br><span class="line"><span class="string"> <MsgType><![CDATA[%s]]></MsgType></span></span><br><span class="line"><span class="string"> <Content><![CDATA[%s]]></Content></span></span><br><span class="line"><span class="string"> <MsgId>%s</MsgId></span></span><br><span class="line"><span class="string"> </xml>"""</span></span><br><span class="line"> out = textTpl % (fromUser, toUser, createTime, msgType, content, msgId)</span><br><span class="line"> self.write(out) </span><br><span class="line"></span><br><span class="line"> <span class="keyword">elif</span> msgType == <span class="string">'event'</span>: </span><br><span class="line"> self.write(<span class="string">'msg type is not support '</span> + msgType)</span><br><span class="line"> logging.warning(<span class="string">"msg type is not support "</span> + msgType)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> self.write(<span class="string">'msg type is not support '</span> + msgType)</span><br><span class="line"> logging.warning(<span class="string">"msg type is not support "</span> + msgType)</span><br><span class="line"> self.finish()</span><br><span class="line"></span><br><span class="line"><span class="comment"># 授权登录</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">WxAuthLoginHandler</span><span class="params">(BaseHandler)</span>:</span></span><br><span class="line"><span class="meta"> @tornado.web.asynchronous</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self)</span>:</span></span><br><span class="line"> logging.info(<span class="string">'-------------- WxHandler GET ------------'</span>)</span><br><span class="line"> CODE = self.get_argument(<span class="string">'code'</span>, <span class="literal">None</span>)</span><br><span class="line"> <span class="comment"># STATE = self.get_argument('state', None)</span></span><br><span class="line"> <span class="keyword">if</span> CODE: </span><br><span class="line"> <span class="comment"># 获取用户session</span></span><br><span class="line"> user_data = self.get_current_user()</span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> user_data:</span><br><span class="line"> result = self.application.wxhelper.get_user_access_token(CODE)</span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> result:</span><br><span class="line"> self.write(json.dumps({<span class="string">"errmsg"</span>:<span class="string">"request user access_token failed"</span>}))</span><br><span class="line"> logging.error(<span class="string">"request user access_token failed"</span>)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> over_time = int(time.time()) + result[<span class="string">'expires_in'</span>]</span><br><span class="line"> user_data = {<span class="string">'openid'</span>:result[<span class="string">"openid"</span>],<span class="string">'access_token'</span>:result[<span class="string">"access_token"</span>], <span class="string">'over_time'</span>:over_time}</span><br><span class="line"> <span class="comment"># 写入cookie</span></span><br><span class="line"> self.set_current_user(user_data)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> user_data:</span><br><span class="line"> <span class="comment"># 重定向到游戏</span></span><br><span class="line"> new_game_url = config.game_url + <span class="string">'?openid='</span> + user_data[<span class="string">"openid"</span>] + <span class="string">'&access_token='</span>+user_data[<span class="string">"access_token"</span>]</span><br><span class="line"> new_game_url = config.game_url</span><br><span class="line"> self.redirect(new_game_url, permanent=<span class="literal">True</span>)</span><br><span class="line"> logging.info(<span class="string">"WxAuthHandler redirect game url "</span> + new_game_url)</span><br><span class="line"> <span class="comment"># print '---- redirect game url ' + new_game_url</span></span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> self.write(json.dumps({<span class="string">"errmsg"</span>:<span class="string">"weixin auth failed with code is None"</span>}))</span><br><span class="line"> logging.warning(<span class="string">"weixin auth failed with code is None"</span>)</span><br><span class="line"> </span><br><span class="line"> self.finish()</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># http://xzdd.qianz.com/reqsign</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">ReqWxSignHandler</span><span class="params">(BaseHandler)</span>:</span></span><br><span class="line"><span class="meta"> @tornado.web.asynchronous</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self)</span>:</span></span><br><span class="line"> logging.info(<span class="string">'-------------- ReqWxSignHandler GET ------------'</span>)</span><br><span class="line"> jsapi_ticket = self.application.wxhelper.get_jsapi_ticket()</span><br><span class="line"> url = config.game_url</span><br><span class="line"> ret = self.application.wxhelper.make_signature(jsapi_ticket, url)</span><br><span class="line"></span><br><span class="line"> data = json.dumps(ret)</span><br><span class="line"> logging.debug(data)</span><br><span class="line"> self.write(data)</span><br><span class="line"></span><br><span class="line"> <span class="comment">#self.render('index.html')</span></span><br><span class="line"> self.finish()</span><br><span class="line"></span><br><span class="line"><span class="meta"> @tornado.web.asynchronous</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">post</span><span class="params">(self)</span>:</span></span><br><span class="line"> encrypt_key = self.get_argument(<span class="string">'encrypt_key'</span>, <span class="literal">None</span>) </span><br><span class="line"> url = self.get_argument(<span class="string">'url'</span>, <span class="literal">None</span>) </span><br><span class="line"> <span class="keyword">if</span> encrypt_key <span class="keyword">and</span> encrypt_key == config.encrypt_key <span class="keyword">and</span> url:</span><br><span class="line"> logging.info(<span class="string">'-------------- ReqWxSignHandler POST ------------'</span>)</span><br><span class="line"> jsapi_ticket = self.application.wxhelper.get_jsapi_ticket()</span><br><span class="line"> logging.info(<span class="string">"req sign URL:"</span> + url)</span><br><span class="line"> ret = self.application.wxhelper.make_signature(jsapi_ticket, url)</span><br><span class="line"> data = json.dumps(ret)</span><br><span class="line"> logging.info(data)</span><br><span class="line"> logging.info(jsapi_ticket)</span><br><span class="line"> self.write(data)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> self.write(json.dumps({<span class="string">"errmsg"</span>:<span class="string">"req sign post params invalid"</span>}))</span><br><span class="line"> logging.warning(<span class="string">"req sign post params invalid"</span>)</span><br><span class="line"></span><br><span class="line"> self.finish()</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">WxShareHandler</span><span class="params">(BaseHandler)</span>:</span></span><br><span class="line"><span class="meta"> @tornado.web.asynchronous</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">get</span><span class="params">(self)</span>:</span></span><br><span class="line"> logging.info(<span class="string">'-------------- WxShareHandler GET ------------'</span>)</span><br><span class="line"> jsapi_ticket = self.application.wxhelper.get_jsapi_ticket()</span><br><span class="line"> url = <span class="string">"http://xzdd.qianz.com/share"</span></span><br><span class="line"> url = <span class="string">"http://127.0.0.1/share"</span></span><br><span class="line"> ret = self.application.wxhelper.make_signature(jsapi_ticket, url)</span><br><span class="line"> self.render(<span class="string">'share.html'</span>,appId = ret[<span class="string">"appId"</span>], timestamp = ret[<span class="string">"timestamp"</span>], nonceStr=ret[<span class="string">"nonceStr"</span>], signature = ret[<span class="string">"signature"</span>])</span><br><span class="line"> <span class="comment"># self.finish()</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># class ReqUserTokenHandler(BaseHandler):</span></span><br><span class="line"><span class="comment"># def get(self):</span></span><br><span class="line"><span class="comment"># # 获取用户session</span></span><br><span class="line"><span class="comment"># # self.set_default_headers()</span></span><br><span class="line"><span class="comment"># logging.info("ReqAccessTokenHandler")</span></span><br><span class="line"><span class="comment"># user_session = self.get_current_user()</span></span><br><span class="line"><span class="comment"># if not user_session:</span></span><br><span class="line"><span class="comment"># logging.warning("user_session is None")</span></span><br><span class="line"><span class="comment"># result = {"errcode":10001,"errmsg":"user session is None"}</span></span><br><span class="line"><span class="comment"># data = json.dumps(result)</span></span><br><span class="line"><span class="comment"># self.write(data)</span></span><br><span class="line"><span class="comment"># return </span></span><br><span class="line"></span><br><span class="line"><span class="comment"># # 认证</span></span><br><span class="line"><span class="comment"># ACCESS_TOKEN = None</span></span><br><span class="line"><span class="comment"># OPENDID = None</span></span><br><span class="line"><span class="comment"># auth_info = user_session.get_auth_info()</span></span><br><span class="line"><span class="comment"># if auth_info: </span></span><br><span class="line"><span class="comment"># data = {"access_token":ACCESS_TOKEN, "openid":OPENDID}</span></span><br><span class="line"><span class="comment"># data = json.dumps(result) </span></span><br><span class="line"><span class="comment"># self.write(data)</span></span><br><span class="line"><span class="comment"># else:</span></span><br><span class="line"><span class="comment"># result = {"errcode":10002,"errmsg":"user has not auth"}</span></span><br><span class="line"><span class="comment"># data = json.dumps(result) </span></span><br><span class="line"><span class="comment"># self.write(data)</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># def post(self):</span></span><br><span class="line"><span class="comment"># self.set_default_headers()</span></span><br><span class="line"><span class="comment"># result = {"errcode":10002,"errmsg":"user has not auth"}</span></span><br><span class="line"><span class="comment"># data = json.dumps(result) </span></span><br><span class="line"><span class="comment"># self.write(data)</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">RefreshWorker</span><span class="params">(threading.Thread)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__init__</span><span class="params">(self, weixin_helper)</span>:</span></span><br><span class="line"> threading.Thread.__init__(self)</span><br><span class="line"> self.weixin_helper = weixin_helper</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">run</span><span class="params">(self)</span>:</span></span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> <span class="keyword">while</span> <span class="keyword">not</span> self.weixin_helper.is_deleted:</span><br><span class="line"> <span class="keyword">while</span> <span class="keyword">not</span> self.weixin_helper.is_deleted <span class="keyword">and</span> <span class="keyword">not</span> self.weixin_helper.refresh_access_token():</span><br><span class="line"> time.sleep(<span class="number">300</span>)</span><br><span class="line"></span><br><span class="line"> time.sleep(self.weixin_helper.expires_in - <span class="number">100</span>)</span><br><span class="line"> <span class="keyword">except</span> Exception, e:</span><br><span class="line"> <span class="keyword">print</span> Exception, <span class="string">':'</span>, e</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">CustomApplication</span><span class="params">(tornado.web.Application)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__init__</span><span class="params">(self, debug=False)</span>:</span></span><br><span class="line"> handles = [</span><br><span class="line"> (<span class="string">r'/$'</span>, IndexHandler), </span><br><span class="line"> (<span class="string">r'/wx'</span>, WxHandler),</span><br><span class="line"> (<span class="string">r'/auth'</span>, WxAuthLoginHandler),</span><br><span class="line"> <span class="comment"># (r'/reqtoken', ReqUserTokenHandler),</span></span><br><span class="line"> (<span class="string">r'/reqsign'</span>, ReqWxSignHandler),</span><br><span class="line"> (<span class="string">r'/share'</span>, WxShareHandler),</span><br><span class="line"> (<span class="string">r'/(.+?)\.html'</span>, OtherHtmlHandler),</span><br><span class="line"> (<span class="string">r'/(.+?)\.(.+)'</span>, OtherHandler),</span><br><span class="line"> ]</span><br><span class="line"> settings = {</span><br><span class="line"> <span class="string">'static_path'</span>: os.path.join(os.path.dirname(__file__), <span class="string">'templates'</span>),</span><br><span class="line"> <span class="string">'template_path'</span>: os.path.join(os.path.dirname(__file__), <span class="string">'templates'</span>),</span><br><span class="line"> <span class="comment"># 'login_url': '/login.html',</span></span><br><span class="line"> <span class="string">'cookie_secret'</span>: <span class="string">"61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o"</span>,</span><br><span class="line"> <span class="string">'xsrf_cookies'</span>: <span class="literal">False</span>,</span><br><span class="line"> <span class="string">'debug'</span>:debug</span><br><span class="line"> }</span><br><span class="line"> super(CustomApplication, self).__init__(handles, **settings)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">refresh_token</span><span class="params">(self)</span>:</span></span><br><span class="line"> logging.info(<span class="string">'----------- timer refresh_token -----------'</span>)</span><br><span class="line"> self.wxhelper.refresh_access_token()</span><br><span class="line"> self.wxhelper.refresh_jsapi_ticket()</span><br><span class="line"></span><br><span class="line"> now_time = round(time.time())</span><br><span class="line"> <span class="keyword">for</span> k, v <span class="keyword">in</span> SessionMap.items():</span><br><span class="line"> <span class="keyword">if</span> v[<span class="string">'overtime'</span>] < now_time:</span><br><span class="line"> <span class="keyword">print</span> <span class="string">'clean session'</span>, k</span><br><span class="line"> <span class="keyword">del</span> SessionMap[k]</span><br><span class="line"> <span class="keyword">pass</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">main</span><span class="params">()</span>:</span></span><br><span class="line"> tornado.options.parse_command_line()</span><br><span class="line"> <span class="comment"># 实例化一个httpserver对象</span></span><br><span class="line"> application = CustomApplication(debug=options.debug)</span><br><span class="line"> application.wxhelper = WeixinHelper(config.appid, config.secret, config.token)</span><br><span class="line"></span><br><span class="line"> http_server = tornado.httpserver.HTTPServer(application)</span><br><span class="line"> http_server.listen(options.port)</span><br><span class="line"></span><br><span class="line"> tornado.ioloop.IOLoop.instance().add_timeout(<span class="number">1</span>, application.refresh_token) <span class="comment"># 启动时执行一次</span></span><br><span class="line"> tornado.ioloop.PeriodicCallback(application.refresh_token,<span class="number">3600</span>*<span class="number">1000</span>).start() <span class="comment"># 定期 2小时执行一次</span></span><br><span class="line"> </span><br><span class="line"> loop = tornado.ioloop.IOLoop.instance()</span><br><span class="line"> tornado.autoreload.start(loop)</span><br><span class="line"> logging.info(<span class="string">"web server start at port "</span> + str(options.port))</span><br><span class="line"> loop.start()</span><br><span class="line"> </span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> main()</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># taskkill /f /t /im python.exe</span></span><br></pre></td></tr></table></figure><h2 id="sd-1"><a href="#sd-1" class="headerlink" title="sd"></a>sd</h2><ul><li><a href="https://www.jianshu.com/p/264d55f8d652" target="_blank" rel="noopener">python+flask+sae+微信公众号开发后记</a></li><li><a href="https://www.colabug.com/2319287.html" target="_blank" rel="noopener">细数Python Flask微信公众号开发中遇到的那些坑</a></li><li><a href="http://python.jobbole.com/84967/" target="_blank" rel="noopener">零基础 20 分钟搭建 SAE 微信个人号后台</a></li><li><a href="https://www.jianshu.com/p/539904d556c8" target="_blank" rel="noopener">python2.7+Flask框架+新浪SAE之微信公众平台后端从无到有</a></li></ul><h2 id="项目"><a href="#项目" class="headerlink" title="项目"></a>项目</h2><p>-<a href="https://github.com/paicha/gxgk-wechat-server" target="_blank" rel="noopener">gxgk-wechat-server</a></p><ul><li><a href="https://github.com/dongweiming/wechat-admin" target="_blank" rel="noopener">wechat-admin</a></li><li><a href="https://blog.csdn.net/haihsl123456789/article/details/52935817" target="_blank" rel="noopener">第三方App接入微信登录</a></li><li><a href="https://www.jianshu.com/p/3dad7883ce14" target="_blank" rel="noopener">微信三方登录、分享、支付集成</a></li><li><a href="https://www.2cto.com/kf/201609/547597.html" target="_blank" rel="noopener">微信授权登录、分享、支付等核心内容和支付宝支付</a></li></ul><p>#</p><ul><li><a href="https://github.com/csmhwu/tensorflowbook" target="_blank" rel="noopener">深度学习应用开发TensorFlow实践</a></li></ul><p>#</p><ul><li>[TensorFlow]<a href="http://www.tensorfly.cn/中文社区](http://www.tensorfly.cn/)" target="_blank" rel="noopener">http://www.tensorfly.cn/中文社区](http://www.tensorfly.cn/)</a></li></ul><p>##</p><ul><li><a href="https://blog.csdn.net/qq_16234613/article/details/80268564" target="_blank" rel="noopener">强化学习入门简单实例 DQN</a></li><li><a href="http://www.elecfans.com/rengongzhineng/595435_a.html" target="_blank" rel="noopener">用TensorFlow构建你的第一个游戏AI入门教程</a></li></ul><h2 id="中国大学mooc"><a href="#中国大学mooc" class="headerlink" title="中国大学mooc"></a>中国大学mooc</h2><ul><li><a href="https://www.icourse163.org/course/ZUCC-1206146808" target="_blank" rel="noopener">深度学习应用开发-TensorFlow实践</a></li><li><a href="https://www.icourse163.org/course/ZJU-1003377027" target="_blank" rel="noopener">人工智能:模型与算法</a></li><li><a href="https://www.icourse163.org/course/PKU-1002536002" target="_blank" rel="noopener">人工智能实践:Tensorflow笔记</a></li></ul><h2 id="视频"><a href="#视频" class="headerlink" title="视频"></a>视频</h2><ul><li><a href="https://www.imooc.com/learn/937" target="_blank" rel="noopener">Python制作数据分析工具</a></li><li><a href="https://www.imooc.com/learn/813" target="_blank" rel="noopener">机器学习-实现简单神经网络</a></li><li><a href="https://www.imooc.com/learn/717" target="_blank" rel="noopener">初识机器学习-理论篇</a></li><li><a href="https://www.bilibili.com/video/av16001891?from=search&seid=13988327809846672654" target="_blank" rel="noopener">Tensorflow 搭建自己的神经网络</a></li><li><a href="https://www.imooc.com/learn/1063" target="_blank" rel="noopener">深度学习之神经网络入门最佳路径</a></li></ul><h2 id="视频-1"><a href="#视频-1" class="headerlink" title="视频"></a>视频</h2><ul><li><a href="https://coding.imooc.com/class/176.html#Anchor" target="_blank" rel="noopener">基于Python玩转人工智能最火框架 TensorFlow应用实践</a></li><li><a href="https://study.163.com/course/introduction/1209092816.htm" target="_blank" rel="noopener">深度学习与TensorFlow 2入门实战</a></li></ul>]]></content>
<summary type="html">
<h1 id="首页"><a href="#首页" class="headerlink" title="首页"></a><a href="https://git.oschina.net/xinxinyuling/note" target="_blank" rel="noopene
</summary>
<category term="编程语言" scheme="https://jinzt.github.io/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/"/>
<category term="编程语言" scheme="https://jinzt.github.io/tags/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/"/>
<category term="python" scheme="https://jinzt.github.io/tags/python/"/>
</entry>
<entry>
<title>编程语言/golang/知识体系</title>
<link href="https://jinzt.github.io/posts/0.html"/>
<id>https://jinzt.github.io/posts/0.html</id>
<published>2020-04-12T12:51:33.873Z</published>
<updated>2020-04-11T17:51:33.103Z</updated>
<content type="html"><![CDATA[<h1 id="go知识体系"><a href="#go知识体系" class="headerlink" title="go知识体系"></a>go知识体系</h1><h2 id="go-基础"><a href="#go-基础" class="headerlink" title="go 基础"></a>go 基础</h2><h2 id="go-调试"><a href="#go-调试" class="headerlink" title="go 调试"></a>go 调试</h2><h2 id="go-test"><a href="#go-test" class="headerlink" title="go test"></a>go test</h2><h2 id="go-文档"><a href="#go-文档" class="headerlink" title="go 文档"></a>go 文档</h2><h2 id="go-插件"><a href="#go-插件" class="headerlink" title="go 插件"></a>go 插件</h2><h2 id="go与配置中心-Apllo"><a href="#go与配置中心-Apllo" class="headerlink" title="go与配置中心 Apllo"></a>go与配置中心 Apllo</h2><ul><li><a href>apllo</a> </li></ul><h2 id="go-Uber-jaeger–一个基于Go的分布式追踪系统"><a href="#go-Uber-jaeger–一个基于Go的分布式追踪系统" class="headerlink" title="go Uber jaeger–一个基于Go的分布式追踪系统"></a>go Uber jaeger–一个基于Go的分布式追踪系统</h2><ul><li><a href="https://my.oschina.net/u/2548090/blog/1821359" target="_blank" rel="noopener">Uber jaeger–一个基于Go的分布式追踪系统</a></li></ul><h2 id="go-web开发-gin"><a href="#go-web开发-gin" class="headerlink" title="go web开发 gin"></a>go web开发 gin</h2><h2 id="go-微服务kratos"><a href="#go-微服务kratos" class="headerlink" title="go 微服务kratos"></a>go 微服务kratos</h2><h2 id="go-监控-Prometheus"><a href="#go-监控-Prometheus" class="headerlink" title="go 监控 Prometheus"></a>go 监控 Prometheus</h2><ul><li><a href="https://blog.csdn.net/hjxzb/article/details/81044583" target="_blank" rel="noopener">Prometheus笔记(二)监控go项目实时给grafana展示</a></li><li><a href="https://www.v2ex.com/t/606786" target="_blank" rel="noopener">深入理解 Prometheus(GO SDK 及 Grafana 基本面板)</a></li><li><a href="https://studygolang.com/articles/25599?fr=sidebar" target="_blank" rel="noopener">使用Prometheus和Grafana监控golang服务</a></li><li><a href="https://www.jianshu.com/p/7e7e0d06709b" target="_blank" rel="noopener">Grafana全面瓦解</a></li><li><a href="https://blog.csdn.net/zhuyu19911016520/article/details/88257073" target="_blank" rel="noopener">grafana - 监控信息可视化工具</a></li></ul><h2 id="go-etcd-服务注册与发现"><a href="#go-etcd-服务注册与发现" class="headerlink" title="go etcd 服务注册与发现"></a>go etcd 服务注册与发现</h2><ul><li><a href="https://www.jianshu.com/p/7c0d23c818a5" target="_blank" rel="noopener">go语言基于etcd的服务注册与发现</a></li><li><a href="https://www.cnblogs.com/mrblue/p/9722682.html" target="_blank" rel="noopener">Golang etcd服务注册与发现</a></li></ul><h2 id="go-gopher-lua-嵌入脚本"><a href="#go-gopher-lua-嵌入脚本" class="headerlink" title="go gopher-lua 嵌入脚本"></a>go gopher-lua 嵌入脚本</h2><ul><li><a href="https://studygolang.com/articles/18862?fr=sidebar" target="_blank" rel="noopener">当 Go 遇上了 Lua</a></li></ul><h2 id="go-goaccess-日志分析"><a href="#go-goaccess-日志分析" class="headerlink" title="go goaccess 日志分析"></a>go goaccess 日志分析</h2><ul><li><a href="https://www.goaccess.cc/" target="_blank" rel="noopener">GoAccess</a></li></ul><h2 id="go-gitlab"><a href="#go-gitlab" class="headerlink" title="go gitlab"></a>go gitlab</h2><h2 id="go-docker"><a href="#go-docker" class="headerlink" title="go docker"></a>go docker</h2><h2 id="go-redis"><a href="#go-redis" class="headerlink" title="go redis"></a>go redis</h2><h2 id="go-rabbitmq"><a href="#go-rabbitmq" class="headerlink" title="go rabbitmq"></a>go rabbitmq</h2><h2 id="go-ELK"><a href="#go-ELK" class="headerlink" title="go ELK"></a>go ELK</h2><h2 id="go-go-admin"><a href="#go-go-admin" class="headerlink" title="go go-admin"></a>go go-admin</h2><ul><li><a href="https://github.com/GoAdminGroup/go-admin" target="_blank" rel="noopener">go-admin</a></li></ul><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://www.jianshu.com/p/33d62d2f4918" target="_blank" rel="noopener">Go语言超详细学习知识体系</a></li></ul>]]></content>
<summary type="html">
<h1 id="go知识体系"><a href="#go知识体系" class="headerlink" title="go知识体系"></a>go知识体系</h1><h2 id="go-基础"><a href="#go-基础" class="headerlink" title=
</summary>
</entry>
<entry>
<title>编程语言/golang/环境搭建</title>
<link href="https://jinzt.github.io/posts/0.html"/>
<id>https://jinzt.github.io/posts/0.html</id>
<published>2020-04-12T12:51:33.871Z</published>
<updated>2020-04-11T17:51:33.103Z</updated>
<content type="html"><![CDATA[<h1 id="vscode-开发环境搭建"><a href="#vscode-开发环境搭建" class="headerlink" title="vscode 开发环境搭建"></a>vscode 开发环境搭建</h1><p>##</p><p>安装gocode</p><p>打开命令提示符(以管理员身份打开),输入:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go get -u -v github.com/nsf/gocode</span><br></pre></td></tr></table></figure><p>2)安装godef</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go get -u -v github.com/rogpeppe/godef</span><br></pre></td></tr></table></figure><p>3)安装golint</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">复制代码</span><br><span class="line"># 创建 $GOPATH/src/golang.org/x</span><br><span class="line">cd $GOPATH/src/golang.org/x</span><br><span class="line">git clone https://github.com/golang/tools.git</span><br><span class="line">git clone https://github.com/golang/lint.git</span><br><span class="line"></span><br><span class="line"># 完成以上步骤后,执行</span><br><span class="line">go get golang.org/x/lint/golint</span><br></pre></td></tr></table></figure><p>4)安装go-find-references</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go get -u -v github.com/lukehoban/go-find-references</span><br></pre></td></tr></table></figure><p>5)安装go-outline</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go get -u -v github.com/lukehoban/go-outline</span><br></pre></td></tr></table></figure><p>6)安装goreturns</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go get -u -v sourcegraph.com/sqs/goreturns</span><br></pre></td></tr></table></figure><p>7)安装gorename</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">go get -u -v golang.org/x/tools/cmd/gorename</span><br><span class="line">提示:如果还提示报错,因为前面已经git clone 下来了,可以执行执行"go install golang.org/x/tools/cmd/gorename";</span><br></pre></td></tr></table></figure><p>8)安装gopkgs</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go get -u -v github.com/tpng/gopkgs</span><br></pre></td></tr></table></figure><p>9)安装go-symbols</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go get -u -v github.com/newhook/go-symbols</span><br></pre></td></tr></table></figure><p>调试</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cd golang.org/x/</span><br><span class="line">git clone https://github.com/golang/sys.git</span><br><span class="line">go get -u github.com/go-delve/delve/cmd/dlv</span><br></pre></td></tr></table></figure><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="http://www.imooc.com/article/74025" target="_blank" rel="noopener">vscode调试golang环境搭建及配置</a></li></ul>]]></content>
<summary type="html">
<h1 id="vscode-开发环境搭建"><a href="#vscode-开发环境搭建" class="headerlink" title="vscode 开发环境搭建"></a>vscode 开发环境搭建</h1><p>##</p>
<p>安装gocode</p>
<p>
</summary>
</entry>
<entry>
<title>编程语言/golang/环境</title>
<link href="https://jinzt.github.io/posts/0.html"/>
<id>https://jinzt.github.io/posts/0.html</id>
<published>2020-04-12T12:51:33.870Z</published>
<updated>2020-04-11T17:51:33.102Z</updated>
<content type="html"><![CDATA[<h2 id="源码安装go"><a href="#源码安装go" class="headerlink" title="源码安装go"></a>源码安装go</h2><p><a href="https://golang.google.cn/dl/" target="_blank" rel="noopener">https://golang.google.cn/dl/</a></p><h2 id="文档"><a href="#文档" class="headerlink" title="文档"></a>文档</h2><p>使用godoc工具能生成web格式文档<br>命令使用<br>godoc -http=:6060<br>然后在<br><a href="http://localhost:6060/pkg/git.huoys.com/qp/cells/" target="_blank" rel="noopener">http://localhost:6060/pkg/git.huoys.com/qp/cells/</a><br>访问到项目文档<br><a href="http://godoc.ml/" target="_blank" rel="noopener">http://godoc.ml/</a></p><p><a href="https://www.youbbs.org/t/2849" target="_blank" rel="noopener">https://www.youbbs.org/t/2849</a></p><h3 id="godoc-注释规范"><a href="#godoc-注释规范" class="headerlink" title="godoc 注释规范"></a>godoc 注释规范</h3><p><a href="https://www.colabug.com/4353266.html" target="_blank" rel="noopener">https://www.colabug.com/4353266.html</a></p><h2 id="版本号"><a href="#版本号" class="headerlink" title="版本号"></a>版本号</h2><h2 id="go-test"><a href="#go-test" class="headerlink" title="go test"></a>go test</h2>]]></content>
<summary type="html">
<h2 id="源码安装go"><a href="#源码安装go" class="headerlink" title="源码安装go"></a>源码安装go</h2><p><a href="https://golang.google.cn/dl/" target="_blank"
</summary>
</entry>
<entry>
<title>编程语言/golang/收集</title>
<link href="https://jinzt.github.io/posts/24b6fe22.html"/>
<id>https://jinzt.github.io/posts/24b6fe22.html</id>
<published>2020-04-12T12:51:33.868Z</published>
<updated>2020-04-12T09:43:47.328Z</updated>
<content type="html"><![CDATA[<hr><hr><p>##</p><ul><li><a href="https://segmentfault.com/a/1190000018536993" target="_blank" rel="noopener">Go mod 使用</a></li><li><a href="https://segmentfault.com/a/1190000019314903?utm_source=tag-newest" target="_blank" rel="noopener">golang内置包管理工具go mod简明教程</a></li><li><a href="https://learnku.com/articles/33241" target="_blank" rel="noopener">将 dep 更换为 go mod</a></li></ul><h2 id><a href="#" class="headerlink" title></a></h2><h2 id="准备"><a href="#准备" class="headerlink" title="准备"></a>准备</h2><p>使用go mod需要1.11以后的版本才能使用,并且需要配置GO111MODULE环境变量<br>GO111MODULE=on(可设置三个值,分别是auto, on, off)</p><p>配置环境变量<br>新建 用户变量 变量名:GO111MODULE 变量值:on</p><p>##<br>进入仓库根目录<br>go mod init </p><h2 id="mod命令"><a href="#mod命令" class="headerlink" title="mod命令"></a>mod命令</h2><ul><li>go help mod 查看mod命令的帮助</li><li>go mod init <packageName> 初始化模块,目录下生成go.mod</packageName></li><li>go mod tidy 根据go.mod文件来处理依赖关系</li><li>go list -m all 显示依赖文件</li><li>go mod download <path@version> 下载依赖(path是包的路径,version是包的版本)</li><li>go mod vendor 复制所有依赖到模块下的vendor目录</li><li>go mod graph 输出模块所需的依赖表</li><li>go mod verify 验证模块的完整性</li></ul><h2 id="orm-库"><a href="#orm-库" class="headerlink" title="orm 库"></a>orm 库</h2><h2 id="-1"><a href="#-1" class="headerlink" title></a></h2><ul><li><p><a href="https://www.cnblogs.com/liuzhongchao/p/9497326.html" target="_blank" rel="noopener">Golang xorm工具,根据数据库自动生成 go 代码</a></p></li><li><p><a href="https://www.bbsmax.com/A/8Bz8X3VNzx/" target="_blank" rel="noopener">Go 语言,开源服务端代码自动生成 框架 - EasyGoServer</a></p></li><li><p><a href="https://blog.csdn.net/BlackCarDriver/article/details/95208399" target="_blank" rel="noopener">【go】根据数据库自动生成相应结构体代码</a></p></li><li><p><a href="https://studygolang.com/articles/22688" target="_blank" rel="noopener">生成mysql每一个表golang的CRUD生产代码</a></p></li><li><p><a href="https://huangjunwen.github.io/post/2018/sqlw-mysql/" target="_blank" rel="noopener">写了一个 MySQL 数据表和查询的 go 代码生成器</a></p></li></ul><h2 id="文档注释规范"><a href="#文档注释规范" class="headerlink" title="文档注释规范"></a>文档注释规范</h2><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><p><a href="https://studygolang.com/articles/6623" target="_blank" rel="noopener">go标准命令详解0.5 godoc</a></p></li><li><p><a href="https://www.codercto.com/a/36718.html" target="_blank" rel="noopener">GoDoc的使用</a></p></li><li><p><a href="https://www.jianshu.com/p/50c9fbf4046c" target="_blank" rel="noopener">Golang Mysql笔记(二)— CURD基础</a></p></li></ul><h2 id="-2"><a href="#-2" class="headerlink" title></a></h2><ul><li><a href="https://blog.csdn.net/alwaysrun/article/details/82919127" target="_blank" rel="noopener">go数据同步(sync与atomic包)</a></li><li><a href="https://github.com/fatih/pool?files=1" target="_blank" rel="noopener">fatih/pool go连接池</a></li><li><a href="https://blog.csdn.net/e421083458/article/details/90579036" target="_blank" rel="noopener">《Go 同步和并发设计模式》培训会后整理</a></li><li><a href="https://www.cnblogs.com/jackluo/p/6137531.html" target="_blank" rel="noopener">Golang之chan/goroutine(转)</a></li><li><a href="https://github.com/tyrchen/chatroom" target="_blank" rel="noopener">tyrchen/chatroom</a></li><li><a href="https://blog.csdn.net/gohuge/article/details/83413941" target="_blank" rel="noopener">Golang类似Erlang OTP的实现</a></li><li><a href="https://blog.csdn.net/shangguan_1234/article/details/79584856" target="_blank" rel="noopener">【GO语言】棋牌游戏服务器</a></li><li><a href="https://github.com/dbldqt/landlord" target="_blank" rel="noopener">dbldqt/landlord</a></li><li><a href="https://github.com/Terry-Ye/im" target="_blank" rel="noopener">纯go实现的分布式im即时通讯系统</a></li><li><a href="https://blog.csdn.net/warrially/article/details/88802264" target="_blank" rel="noopener">golang制作一个斗地主游戏服务器[10]:房间、桌子、玩家</a></li></ul><h2 id="-3"><a href="#-3" class="headerlink" title></a></h2><p> 2019/9/4 23:21:02<br><a href="https://my.oschina.net/mickelfeng/blog/3013119" target="_blank" rel="noopener">https://my.oschina.net/mickelfeng/blog/3013119</a></p><p> 2019/9/4 23:27:03<br><a href="https://github.com/gansidui/chatserver?files=1" target="_blank" rel="noopener">https://github.com/gansidui/chatserver?files=1</a></p><p> 2019/9/4 23:45:09<br><a href="https://www.ctolib.com/mip/fananchong-go-xserver.html" target="_blank" rel="noopener">https://www.ctolib.com/mip/fananchong-go-xserver.html</a></p><p> 2019/9/4 23:49:40<br><a href="https://www.ctolib.com/mip/connsvr.html" target="_blank" rel="noopener">https://www.ctolib.com/mip/connsvr.html</a></p><p> 2019/9/4 23:53:38<br><a href="https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/84986162" target="_blank" rel="noopener">https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/84986162</a></p><p> 0:01:49<br><a href="https://www.jianshu.com/p/64e777b87c96" target="_blank" rel="noopener">https://www.jianshu.com/p/64e777b87c96</a></p><p> 0:03:01<br><a href="https://www.codercto.com/a/52418.html" target="_blank" rel="noopener">https://www.codercto.com/a/52418.html</a></p><p> 0:16:20<br><a href="https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/84948665" target="_blank" rel="noopener">https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/84948665</a></p><p> 0:21:09<br><a href="https://blog.csdn.net/shangguan_1234/article/details/79584856" target="_blank" rel="noopener">https://blog.csdn.net/shangguan_1234/article/details/79584856</a></p><p> 0:38:38<br><a href="https://github.com/dwg255/landlord" target="_blank" rel="noopener">https://github.com/dwg255/landlord</a></p><p> 8:52:20<br><a href="https://coding.net/u/anywherecreate/p/px_game_server/git" target="_blank" rel="noopener">https://coding.net/u/anywherecreate/p/px_game_server/git</a></p><p> 9:05:15<br><a href="https://github.com/Golangltd/codeclass" target="_blank" rel="noopener">https://github.com/Golangltd/codeclass</a></p><p> 9:09:52<br><a href="https://github.com/Golangltd/codeclass" target="_blank" rel="noopener">https://github.com/Golangltd/codeclass</a></p><p> 9:12:24<br><a href="https://www.zhihu.com/question/35385236/answer/62654548" target="_blank" rel="noopener">https://www.zhihu.com/question/35385236/answer/62654548</a></p><p><a href="https://github.com/shuimuliang/qnmahjongserver" target="_blank" rel="noopener">https://github.com/shuimuliang/qnmahjongserver</a></p><p><a href="https://github.com/gochenzl/chess" target="_blank" rel="noopener">https://github.com/gochenzl/chess</a></p><p><a href="https://www.jianshu.com/p/546773568592" target="_blank" rel="noopener">https://www.jianshu.com/p/546773568592</a></p><p> 2019/9/5 9:12:24<br><a href="https://www.zhihu.com/question/35385236/answer/62654548" target="_blank" rel="noopener">https://www.zhihu.com/question/35385236/answer/62654548</a></p><p> 8:33:10<br><a href="https://github.com/tux21b/ChessBuddy?files=1" target="_blank" rel="noopener">https://github.com/tux21b/ChessBuddy?files=1</a></p><p> 8:51:38<br><a href="https://blog.csdn.net/shangguan_1234/article/details/79584856" target="_blank" rel="noopener">https://blog.csdn.net/shangguan_1234/article/details/79584856</a></p><p> 9:01:34<br><a href="https://blog.csdn.net/hnxxwyq/article/details/12995083" target="_blank" rel="noopener">https://blog.csdn.net/hnxxwyq/article/details/12995083</a></p><p> 9:12:28<br><a href="https://github.com/3zheng/railgun/blob/master/README.md" target="_blank" rel="noopener">https://github.com/3zheng/railgun/blob/master/README.md</a></p><p><a href="https://studygolang.com/topics/2167" target="_blank" rel="noopener">https://studygolang.com/topics/2167</a></p><p> 2019/9/5 0:38:38<br><a href="https://github.com/dwg255/landlord" target="_blank" rel="noopener">https://github.com/dwg255/landlord</a></p><p> 2019/9/5 8:52:20<br><a href="https://coding.net/u/anywherecreate/p/px_game_server/git" target="_blank" rel="noopener">https://coding.net/u/anywherecreate/p/px_game_server/git</a></p><p> 2019/9/5 9:05:15<br><a href="https://github.com/Golangltd/codeclass" target="_blank" rel="noopener">https://github.com/Golangltd/codeclass</a></p><p> 2019/9/5 9:09:52<br><a href="https://github.com/Golangltd/codeclass" target="_blank" rel="noopener">https://github.com/Golangltd/codeclass</a></p><p> 2019/9/5 9:12:24<br><a href="https://www.zhihu.com/question/35385236/answer/62654548" target="_blank" rel="noopener">https://www.zhihu.com/question/35385236/answer/62654548</a></p><p> 2019/9/6 8:33:10<br><a href="https://github.com/tux21b/ChessBuddy?files=1" target="_blank" rel="noopener">https://github.com/tux21b/ChessBuddy?files=1</a></p><p> 2019/9/6 8:51:38<br><a href="https://blog.csdn.net/shangguan_1234/article/details/79584856" target="_blank" rel="noopener">https://blog.csdn.net/shangguan_1234/article/details/79584856</a></p><p> 2019/9/6 9:01:34<br><a href="https://blog.csdn.net/hnxxwyq/article/details/12995083" target="_blank" rel="noopener">https://blog.csdn.net/hnxxwyq/article/details/12995083</a></p><p> 2019/9/6 9:12:28<br><a href="https://github.com/3zheng/railgun/blob/master/README.md" target="_blank" rel="noopener">https://github.com/3zheng/railgun/blob/master/README.md</a></p><p> 2019/9/6 9:14:15<br><a href="https://studygolang.com/topics/2167" target="_blank" rel="noopener">https://studygolang.com/topics/2167</a></p><p> 2019/9/7 15:41:29<br><a href="https://cloud.tencent.com/developer/article/1487549" target="_blank" rel="noopener">https://cloud.tencent.com/developer/article/1487549</a></p><p> 2019/9/8 1:17:55<br><a href="https://www.jianshu.com/p/f20cd2304aea" target="_blank" rel="noopener">https://www.jianshu.com/p/f20cd2304aea</a></p><p> 2019/9/8 2:01:10<br><a href="https://segmentfault.com/a/1190000006744213?utm_medium=referral&utm_source=tuicool" target="_blank" rel="noopener">https://segmentfault.com/a/1190000006744213?utm_medium=referral&utm_source=tuicool</a></p><p> 2019/9/8 2:29:03<br><a href="https://github.com/9b9387/zero?files=1" target="_blank" rel="noopener">https://github.com/9b9387/zero?files=1</a></p><p> 2019/9/8 2:33:51<br><a href="https://blog.csdn.net/fwhezfwhez/article/details/89487425" target="_blank" rel="noopener">https://blog.csdn.net/fwhezfwhez/article/details/89487425</a></p><p> 2019/9/8 3:46:17<br><a href="https://github.com/fwhezfwhez/tcpx?files=1" target="_blank" rel="noopener">https://github.com/fwhezfwhez/tcpx?files=1</a></p><p> 2019/9/8 4:02:38<br><a href="https://www.cnblogs.com/tohxyblog/p/8974763.html" target="_blank" rel="noopener">https://www.cnblogs.com/tohxyblog/p/8974763.html</a></p><p> 2019/9/8 4:05:27<br><a href="https://www.cnblogs.com/tohxyblog/p/8974763.html" target="_blank" rel="noopener">https://www.cnblogs.com/tohxyblog/p/8974763.html</a></p><p> 2019/9/8 4:10:05<br><a href="https://www.xuebuyuan.com/1289326.html" target="_blank" rel="noopener">https://www.xuebuyuan.com/1289326.html</a></p><p> 2019/9/8 4:11:43<br><a href="https://my.oschina.net/u/1859679/blog/842513" target="_blank" rel="noopener">https://my.oschina.net/u/1859679/blog/842513</a></p><p> 2019/9/8 4:16:12<br><a href="http://m.ishare.iask.sina.com.cn/f/32P6HS6NWpC.html" target="_blank" rel="noopener">http://m.ishare.iask.sina.com.cn/f/32P6HS6NWpC.html</a></p><p> 2019/9/8 4:21:35<br><a href="https://blog.csdn.net/chenjiayi_yun/article/details/23291731" target="_blank" rel="noopener">https://blog.csdn.net/chenjiayi_yun/article/details/23291731</a></p><p> 2019/9/8 4:28:04<br><a href="http://open.biligame.com/wiki/sdk_server_doc/" target="_blank" rel="noopener">http://open.biligame.com/wiki/sdk_server_doc/</a></p><p> 2019/9/8 4:32:22<br><a href="https://go.ctolib.com/magiclvzs-antnet.html" target="_blank" rel="noopener">https://go.ctolib.com/magiclvzs-antnet.html</a></p><p> 2019/9/8 5:17:10<br><a href="https://blog.csdn.net/diagnoa_wleng/article/details/81608795" target="_blank" rel="noopener">https://blog.csdn.net/diagnoa_wleng/article/details/81608795</a></p><p> 2019/9/8 5:27:22<br><a href="https://itbilu.com/nodejs/npm/EknY6k0FX.html" target="_blank" rel="noopener">https://itbilu.com/nodejs/npm/EknY6k0FX.html</a></p><p> 2019/9/8 5:32:06<br><a href="https://itbilu.com/nodejs/npm/EknY6k0FX.html" target="_blank" rel="noopener">https://itbilu.com/nodejs/npm/EknY6k0FX.html</a></p><p> 2019/9/8 5:42:12<br><a href="https://www.it610.com/article/4672602.htm" target="_blank" rel="noopener">https://www.it610.com/article/4672602.htm</a></p><p> 2019/9/8 5:45:17<br><a href="https://my.oschina.net/nextzeus/blog/1204620" target="_blank" rel="noopener">https://my.oschina.net/nextzeus/blog/1204620</a></p><p> 2019/9/9 2:36:37<br><a href="https://blog.csdn.net/micl200110041/article/details/82013032" target="_blank" rel="noopener">https://blog.csdn.net/micl200110041/article/details/82013032</a></p><p> 2019/9/9 2:37:21<br><a href="https://hxzqlh.com/2018/09/12/go-rate-limit/" target="_blank" rel="noopener">https://hxzqlh.com/2018/09/12/go-rate-limit/</a></p><p> 2019/9/9 2:37:58<br><a href="https://cloud.tencent.com/developer/article/1477080" target="_blank" rel="noopener">https://cloud.tencent.com/developer/article/1477080</a></p><p> 2019/9/9 2:38:23<br><a href="https://studygolang.com/articles/15890" target="_blank" rel="noopener">https://studygolang.com/articles/15890</a></p><p> 2019/9/9 2:43:15<br><a href="https://m.baidu.com/ala/c/www.ctolib.com/mip/yangwenmai-ratelimit.html" target="_blank" rel="noopener">https://m.baidu.com/ala/c/www.ctolib.com/mip/yangwenmai-ratelimit.html</a></p><p> 2019/9/9 2:45:09<br><a href="https://blog.csdn.net/zl1zl2zl3/article/details/84631824" target="_blank" rel="noopener">https://blog.csdn.net/zl1zl2zl3/article/details/84631824</a></p><p> 2019/9/9 2:45:43<br><a href="https://m.baidu.com/from=1086k/s?pn=10&usm=1&word=go%20mysql%E7%86%94%E6%96%AD%20%E9%87%8D%E8%AF%95&sa=np&rsv_pq=11803037333493205139&rsv_t=3ea7JsYxVbYW7lu%252FE6dxTZvVi5EKj8sHCcLXcEzp9siuPt8wtz8yy6OiKZY&rqid=11803037333493205139" target="_blank" rel="noopener">https://m.baidu.com/from=1086k/s?pn=10&usm=1&word=go%20mysql%E7%86%94%E6%96%AD%20%E9%87%8D%E8%AF%95&sa=np&rsv_pq=11803037333493205139&rsv_t=3ea7JsYxVbYW7lu%252FE6dxTZvVi5EKj8sHCcLXcEzp9siuPt8wtz8yy6OiKZY&rqid=11803037333493205139</a></p><p> 2019/9/9 2:46:04<br><a href="https://www.lbbniu.com/6240.html" target="_blank" rel="noopener">https://www.lbbniu.com/6240.html</a></p><p> 2019/9/9 12:33:03<br><a href="https://blog.csdn.net/weixin_33841503/article/details/91447175" target="_blank" rel="noopener">https://blog.csdn.net/weixin_33841503/article/details/91447175</a></p><p> 2019/9/11 22:06:49<br><a href="https://github.com/Hadopire/ws2tcp" target="_blank" rel="noopener">https://github.com/Hadopire/ws2tcp</a></p><p> 2019/9/11 23:01:45<br><a href="https://github.com/sarimoly/gameserver-1" target="_blank" rel="noopener">https://github.com/sarimoly/gameserver-1</a></p><p> 2019/9/11 23:09:13<br><a href="https://github.com/dyzdyz010/GameServer/blob/master/console/console.go" target="_blank" rel="noopener">https://github.com/dyzdyz010/GameServer/blob/master/console/console.go</a></p><p> 2019/9/11 23:15:18<br><a href="https://github.com/davyxu/cellmesh" target="_blank" rel="noopener">https://github.com/davyxu/cellmesh</a></p><p> 2019/9/12 0:27:01<br><a href="https://study.163.com/course/courseMain.htm?courseId=1005164022&_trace_c_p_k2_=427bab11114345e99a681f020e4fe044" target="_blank" rel="noopener">https://study.163.com/course/courseMain.htm?courseId=1005164022&_trace_c_p_k2_=427bab11114345e99a681f020e4fe044</a></p><p> 2019/9/12 0:30:32<br><a href="https://study.163.com/course/courseMain.htm?courseId=1006521005&_trace_c_p_k2_=020813f66bfc440e9afd27cb2929b5a8" target="_blank" rel="noopener">https://study.163.com/course/courseMain.htm?courseId=1006521005&_trace_c_p_k2_=020813f66bfc440e9afd27cb2929b5a8</a></p><p> 2019/9/12 0:31:12<br><a href="https://study.163.com/course/introduction/1209318815.htm" target="_blank" rel="noopener">https://study.163.com/course/introduction/1209318815.htm</a></p><p> 2019/9/12 0:33:03<br><a href="https://study.163.com/course/introduction/1004720008.htm?share=1&shareId=1018712305" target="_blank" rel="noopener">https://study.163.com/course/introduction/1004720008.htm?share=1&shareId=1018712305</a></p><p> 2019/9/12 0:37:46<br><a href="http://www.eimhe.com/thread-146949-1-1.html" target="_blank" rel="noopener">http://www.eimhe.com/thread-146949-1-1.html</a></p><p> 2019/9/13 1:55:28<br><a href="https://studygolang.com/articles/17405" target="_blank" rel="noopener">https://studygolang.com/articles/17405</a></p><p> 2019/9/13 2:02:46<br><a href="https://blog.csdn.net/axuan_k/article/details/93363778" target="_blank" rel="noopener">https://blog.csdn.net/axuan_k/article/details/93363778</a></p><p> 2019/9/13 2:03:45<br><a href="https://blog.csdn.net/matchvs/article/details/80230159" target="_blank" rel="noopener">https://blog.csdn.net/matchvs/article/details/80230159</a></p><p> 2019/9/13 2:12:12<br><a href="https://gameinstitute.qq.com/community/detail/128992" target="_blank" rel="noopener">https://gameinstitute.qq.com/community/detail/128992</a></p><p> 2019/9/13 2:20:51<br><a href="https://github.com/simonidf" target="_blank" rel="noopener">https://github.com/simonidf</a></p><p> 2019/9/13 2:39:00<br><a href="https://github.com/BaiPingg/TankGameServer" target="_blank" rel="noopener">https://github.com/BaiPingg/TankGameServer</a></p><p> 9:27:17<br><a href="https://github.com/TheAlgorithms" target="_blank" rel="noopener">https://github.com/TheAlgorithms</a></p><p> 9:27:17<br><a href="https://github.com/jinzhu/gorm" target="_blank" rel="noopener">https://github.com/jinzhu/gorm</a></p><p> 9:27:17<br><a href="https://github.com/sirupsen/logrus" target="_blank" rel="noopener">https://github.com/sirupsen/logrus</a></p><p> 9:27:17<br><a href="https://github.com/unknwon/the-way-to-go_ZH_CN" target="_blank" rel="noopener">https://github.com/unknwon/the-way-to-go_ZH_CN</a></p><p> 9:27:18<br><a href="https://github.com/unknwon/go-study-index" target="_blank" rel="noopener">https://github.com/unknwon/go-study-index</a></p><p> 9:27:18<br><a href="https://www.ctolib.com/go/docs/" target="_blank" rel="noopener">https://www.ctolib.com/go/docs/</a></p><p> 9:27:18<br><a href="https://github.com/mmcgrana/gobyexample" target="_blank" rel="noopener">https://github.com/mmcgrana/gobyexample</a></p><p> 9:27:18<br><a href="https://github.com/yudai/gotty" target="_blank" rel="noopener">https://github.com/yudai/gotty</a></p><p> 9:27:18<br><a href="https://www.ctolib.com/SolarLune-resolv.html" target="_blank" rel="noopener">https://www.ctolib.com/SolarLune-resolv.html</a></p><p> 9:27:18<br><a href="https://github.com/ffhelicopter/Go42" target="_blank" rel="noopener">https://github.com/ffhelicopter/Go42</a></p><p> 9:27:19<br><a href="https://github.com/xcxlegend/tank2d.io" target="_blank" rel="noopener">https://github.com/xcxlegend/tank2d.io</a></p><p> 9:27:19<br><a href="https://github.com/EngoEngine/engo" target="_blank" rel="noopener">https://github.com/EngoEngine/engo</a></p><p> 9:27:19<br><a href="https://www.ctolib.com/go/" target="_blank" rel="noopener">https://www.ctolib.com/go/</a></p><p> 9:27:19<br><a href="https://www.ctolib.com/go/" target="_blank" rel="noopener">https://www.ctolib.com/go/</a></p><p> 9:27:19<br><a href="https://www.ctolib.com/senghoo-golang-design-pattern.html" target="_blank" rel="noopener">https://www.ctolib.com/senghoo-golang-design-pattern.html</a></p><p> 9:27:19<br><a href="https://www.ctolib.com/chai2010-advanced-go-programming-book.html" target="_blank" rel="noopener">https://www.ctolib.com/chai2010-advanced-go-programming-book.html</a></p><p> 9:27:20<br><a href="https://www.ctolib.com/go-astar.html" target="_blank" rel="noopener">https://www.ctolib.com/go-astar.html</a></p><p> 9:27:21<br><a href="https://www.ctolib.com/Humpheh-goboy.html" target="_blank" rel="noopener">https://www.ctolib.com/Humpheh-goboy.html</a></p><p> 9:27:21<br><a href="https://www.ctolib.com/AppsComTr-Spaceship.html" target="_blank" rel="noopener">https://www.ctolib.com/AppsComTr-Spaceship.html</a></p><p> 9:27:21<br><a href="https://www.ctolib.com/dwg255-invest.html" target="_blank" rel="noopener">https://www.ctolib.com/dwg255-invest.html</a></p><p> 9:27:21<br><a href="https://www.ctolib.com/sniperHW-sanguo.html" target="_blank" rel="noopener">https://www.ctolib.com/sniperHW-sanguo.html</a></p><p> 9:27:21<br><a href="https://www.ctolib.com/GoogleCloudPlatform-open-match.html" target="_blank" rel="noopener">https://www.ctolib.com/GoogleCloudPlatform-open-match.html</a></p><p> 9:27:21<br><a href="https://github.com/keyunq/ytguess" target="_blank" rel="noopener">https://github.com/keyunq/ytguess</a></p><p> 9:27:21<br><a href="https://www.ctolib.com/lonnng-nano.html" target="_blank" rel="noopener">https://www.ctolib.com/lonnng-nano.html</a></p><p> 9:27:22<br><a href="https://www.ctolib.com/kcp-go.html" target="_blank" rel="noopener">https://www.ctolib.com/kcp-go.html</a></p><p> 9:27:22<br><a href="https://www.ctolib.com/magicsea-ga_server.html" target="_blank" rel="noopener">https://www.ctolib.com/magicsea-ga_server.html</a></p><p> 9:27:22<br><a href="https://www.ctolib.com/kcptun.html" target="_blank" rel="noopener">https://www.ctolib.com/kcptun.html</a></p><p> 9:27:22<br><a href="https://www.ctolib.com/ankur-anand-simple-go-rpc.html" target="_blank" rel="noopener">https://www.ctolib.com/ankur-anand-simple-go-rpc.html</a></p><p> 9:27:22<br><a href="https://www.ctolib.com/Unknwon-the-way-to-go_ZH_CN.html" target="_blank" rel="noopener">https://www.ctolib.com/Unknwon-the-way-to-go_ZH_CN.html</a></p><p> 9:27:22<br><a href="https://www.ctolib.com/quii-learn-go-with-tests.html" target="_blank" rel="noopener">https://www.ctolib.com/quii-learn-go-with-tests.html</a></p><p> 9:27:23<br><a href="https://github.com/chanxuehong/wechat" target="_blank" rel="noopener">https://github.com/chanxuehong/wechat</a></p><p> 9:27:23<br><a href="https://github.com/silenceper/wechat" target="_blank" rel="noopener">https://github.com/silenceper/wechat</a></p><p> 9:27:23<br><a href="https://github.com/guidao/gopay" target="_blank" rel="noopener">https://github.com/guidao/gopay</a></p><p> 9:27:23<br><a href="https://github.com/193Eric/go-wechat" target="_blank" rel="noopener">https://github.com/193Eric/go-wechat</a></p><p> 9:27:23<br><a href="https://github.com/milkbobo/gopay" target="_blank" rel="noopener">https://github.com/milkbobo/gopay</a></p><p> 9:27:23<br><a href="https://github.com/gochenzl/chess" target="_blank" rel="noopener">https://github.com/gochenzl/chess</a></p><p> 9:27:23<br><a href="https://github.com/medivhzhan/weapp" target="_blank" rel="noopener">https://github.com/medivhzhan/weapp</a></p><h2 id="-4"><a href="#-4" class="headerlink" title></a></h2><ul><li><a href="https://studygolang.com/articles/6739" target="_blank" rel="noopener">[thinking] 基于 golang interface 特性衍生的插件化处理思维</a></li><li><a href="https://blog.csdn.net/bingxuefenggu/article/details/80958747" target="_blank" rel="noopener">golang如何实现插件化编程</a></li><li><a href="https://studygolang.com/articles/17182?fr=sidebar" target="_blank" rel="noopener">Golang:Golang生成动态库及调用</a></li><li><a href="https://www.imooc.com/article/48340?block_id=tuijian_wz" target="_blank" rel="noopener">Golang笔记-Plugin初探</a></li></ul><h2 id="go-静态库-动态库"><a href="#go-静态库-动态库" class="headerlink" title="go 静态库 动态库"></a>go 静态库 动态库</h2><p>插件中定义的 struct 无法暴露出来,可以让主程序和插件程序import公共的 package 来解决<br>私有方法、变量不会被暴露出来</p><p><a href="https://blog.csdn.net/m0_38132420/article/details/84999887" target="_blank" rel="noopener">golang插件plugin从使用到放弃</a></p><p><a href="https://github.com/vladimirvivien/go-plugin-example" target="_blank" rel="noopener">vladimirvivien/go-plugin-example</a><br><a href="https://github.com/campoy/golang-plugins" target="_blank" rel="noopener">campoy/golang-plugins</a><br><a href="https://github.com/natefinch/pie" target="_blank" rel="noopener">natefinch/pie</a><br><a href="https://github.com/dullgiulio/pingo" target="_blank" rel="noopener">dullgiulio/pingo</a><br><a href="https://github.com/wendigo/go-bind-plugin" target="_blank" rel="noopener">wendigo/go-bind-plugin</a><br><a href="https://cloud.tencent.com/developer/news/355774" target="_blank" rel="noopener">chain33开发随记</a><br><a href="https://github.com/33cn/plugin" target="_blank" rel="noopener">chain33 官方插件系统</a><br><a href="https://github.com/potix/plugger" target="_blank" rel="noopener">potix/plugger</a></p><ul><li><a href="https://github.com/fananchong/go-xserver" target="_blank" rel="noopener">基于插件的服务器框架</a></li><li><a href="https://github.com/fananchong/go-xserver/blob/master/doc/ISSUE-%E6%8F%92%E4%BB%B6%E5%B7%A5%E7%A8%8B%E7%8B%AC%E7%AB%8B%E5%BB%BA%E5%BA%93%E9%97%AE%E9%A2%98.md" target="_blank" rel="noopener">插件工程独立建库问题</a></li></ul><h2 id="go-mod"><a href="#go-mod" class="headerlink" title="go mod"></a>go mod</h2><ul><li><a href="https://www.jianshu.com/p/6293503522bc" target="_blank" rel="noopener">解决vscode中golang插件依赖安装失败问题</a></li></ul><h2 id="-5"><a href="#-5" class="headerlink" title></a></h2><ul><li><a href="https://blog.csdn.net/huangshulang1234/article/details/78725967" target="_blank" rel="noopener">Go 语言构建高并发分布式系统实践</a></li></ul>]]></content>
<summary type="html">
<hr>
<hr>
<p>##</p>
<ul>
<li><a href="https://segmentfault.com/a/1190000018536993" target="_blank" rel="noopener">Go mod 使用</a></li>
<li><a
</summary>
</entry>
</feed>