-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
325 lines (163 loc) · 139 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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>SayMe</title>
<subtitle>SayMeeveTime</subtitle>
<link href="http://example.com/atom.xml" rel="self"/>
<link href="http://example.com/"/>
<updated>2021-09-05T16:23:01.812Z</updated>
<id>http://example.com/</id>
<author>
<name>SayMe</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>Linux命令</title>
<link href="http://example.com/2021/09/06/Linux%E5%91%BD%E4%BB%A4/"/>
<id>http://example.com/2021/09/06/Linux%E5%91%BD%E4%BB%A4/</id>
<published>2021-09-05T16:15:57.000Z</published>
<updated>2021-09-05T16:23:01.812Z</updated>
<content type="html"><![CDATA[<h4 id="RPM"><a href="#RPM" class="headerlink" title="RPM"></a>RPM</h4><figure class="highlight shell"><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></pre></td><td class="code"><pre><span class="line">rpm </span><br><span class="line">主选项</span><br><span class="line">-i 安装</span><br><span class="line"> -e 卸载</span><br><span class="line"> -U 升级</span><br><span class="line"> -q 查找</span><br><span class="line"> 辅助选项</span><br><span class="line"> v 显示过程</span><br><span class="line"> -h --hash</span><br><span class="line"> 查询</span><br><span class="line"> -a -all 查询所有安装的包</span><br><span class="line"> -f --file 查询拥有<--file>的包</span><br><span class="line"> -p 查询一个没有安装的包</span><br><span class="line"> </span><br><span class="line"> 卸载</span><br><span class="line"> --nodeps 忽略依赖</span><br><span class="line"> </span><br><span class="line"> rpm -ql rpm包 # 查看包安装到哪里了 </span><br><span class="line"> </span><br><span class="line"> 非官方提供的由别人基于源码打包,安全无法保证 (就像Windows上你下载的 .exe 可能是别人打包好的留了后门程序)</span><br><span class="line"> rpm包一般比较旧,除非官方提供</span><br><span class="line"> rpm依赖问题比较致命</span><br></pre></td></tr></table></figure><h4 id="Yum"><a href="#Yum" class="headerlink" title="Yum"></a>Yum</h4><p> Yum客户端 : 从yum仓库下载软件包并安装</p><p> Yum仓库: 存储大量RPM软件包通过FTP|HTTP|HTTPS|file方式共享软件包</p><p>特点:</p><p> 自动解决依赖</p><p> 自动下包</p><p> 自动安装</p><p>FTP|HTTP|HTTPS|file 四种协议 共同点 都支持下载业务</p><p>ftp 根目录 /var/ftp </p><figure class="highlight shell"><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">systemctl start vsftpd#启动ftp 需要先安装</span><br><span class="line">mount /dev/cdrom /var/ftp/pub # 将有rpm包的光盘挂载到Linux上</span><br></pre></td></tr></table></figure><p>如何配置yum源</p><figure class="highlight shell"><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">cd /etc/yum.repos.d/</span><br><span class="line"><span class="meta">#</span><span class="bash">可以先将原来的移动到一个其他的目录 然后再编写自己的yum源</span></span><br><span class="line">vim xxx.repo # 写自己的yum源</span><br><span class="line">内容如下:</span><br><span class="line">name=test # yum源的名称</span><br><span class="line">baseurl=ftp://localhost/pub #地址</span><br><span class="line">gpgcheck:0 #是否检测</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>用其他网上的yum源(清华 阿里 EPEL)</p><figure class="highlight shell"><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">vim /etc/yum.conf # 查看yum配置文件</span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="分区-fdisk"><a href="#分区-fdisk" class="headerlink" title="分区 fdisk"></a>分区 fdisk</h4><pre><code> [root@Zhaomo0823 ~]# fdisk /dev/vda Welcome to fdisk (util-linux 2.23.2).Changes will remain in memory only, until you decide to write them.Be careful before using the write command.Command (m for help): mCommand action</code></pre><p> a toggle a bootable flag<br> b edit bsd disklabel<br> c toggle the dos compatibility flag<br> d delete a partition #删除分区<br> g create a new empty GPT partition table<br> G create an IRIX (SGI) partition table<br> l list known partition types # 分区类型<br> m print this menu<br> n add a new partition #新建分区<br> o create a new empty DOS partition table<br> p print the partition table #打印分区表<br> q quit without saving changes #不保存退出<br> s create a new empty Sun disklabel<br> t change a partition’s system id #更改分区系统id 设置交换分区<br> u change display/entry units<br> v verify the partition table<br> w write table to disk and exit #保存退出<br> x extra functionality (experts only)</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Command (m for help): </span><br></pre></td></tr></table></figure><p> fdisk 是一个创建和维护分区表的程序,它兼容DOS类型的分区表 BSD或者SUN 类型的磁盘列表<br> fdisk -l /dev/sdb # 查看本机下磁盘挂载情况</p><h4 id="ps-静态任务管理器"><a href="#ps-静态任务管理器" class="headerlink" title="ps 静态任务管理器"></a>ps 静态任务管理器</h4><p>top 动态任务管理器 </p><p>kill 杀死单个进程</p><p>killall 杀死一个进程树</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ps </span><br></pre></td></tr></table></figure><p>线程优先级</p><p>nice 设置进程的优先级 </p><p> 优先级默认为10 </p><p>renice 更改进程的优先级 </p><figure class="highlight shell"><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">nice --19 ping -c 500 localhost -19优先级</span><br><span class="line">nice -19 ping -c 500 localhost 19优先级</span><br><span class="line">优先级 -20 到 19 数字越小优先级越大</span><br><span class="line">nice -n 8 ping localhost # 以8 的优先级执行ping命令</span><br><span class="line">renice -n 18 进程id 调整进程的优先级 </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">renice -n 9 -u root # 修改root用户优先级为9</span><br></pre></td></tr></table></figure><h4 id="密码文件"><a href="#密码文件" class="headerlink" title="密码文件"></a>密码文件</h4><figure class="highlight shell"><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">/etc/passwd </span><br><span class="line"><span class="meta"> #</span><span class="bash"> 具体参数含义谷歌就行</span></span><br></pre></td></tr></table></figure><figure class="highlight shell"><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">/etc/shadow #目前只读文件一般也不修改 需要修改要加权 </span><br><span class="line"> # 可以查看到密码 sub512 加密</span><br><span class="line"> </span><br><span class="line"> #参数解释</span><br><span class="line"> 用户名</span><br><span class="line"> 口令(密码)</span><br><span class="line"> 最后一次修改的时间: 标识从某一时刻起到用户最后一次修改口令的天数</span><br><span class="line"> 最小时间间隔: 两次修改口令之间的最小天数</span><br><span class="line"> 最大时间间隔: 口令保持有效的最多天数,即多少天后必须修改口令</span><br><span class="line"> 警告时间: 从系统开始警告到口令正式失效的天数</span><br><span class="line"> 不活动时间: 口令过期多少天后,该账号被禁用</span><br><span class="line"> 失效时间:指示口令失效的绝对天数(从1970年1月1日开始计算)</span><br><span class="line"> 标志: 未使用</span><br></pre></td></tr></table></figure><h4 id="权限"><a href="#权限" class="headerlink" title="权限"></a>权限</h4><figure class="highlight shell"><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">chmod # 修改文件的访问权限</span><br><span class="line">命令语法 </span><br><span class="line">chmod [options] mode file ....</span><br><span class="line">命令选项</span><br><span class="line">-R 递归设置权限,针对目录有效</span><br><span class="line"></span><br><span class="line">mode 谁给什么权限</span><br><span class="line">u (所有者) g(所属组) o(其他人) a(所有人)</span><br><span class="line"></span><br><span class="line">+ - =</span><br><span class="line">权限 r 读 w 写 x 执行 </span><br><span class="line"></span><br><span class="line"> chmod g+w, o-r 文件名 # 给组加上写权限 其他人减去读的权限</span><br></pre></td></tr></table></figure><figure class="highlight shell"><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">chmod 4755 /bin/systemctl #以所有者的身份去执行此用户本不能执行的命令</span><br><span class="line"></span><br><span class="line">chmod 2755 /doc # 文件夹下继承下新建的子文件夹或者子文件继承父文件夹的属组</span><br><span class="line">chmod 1755 /opt/public/ # 公共目录 设置黏连位(谁建的谁删)</span><br></pre></td></tr></table></figure><p>详细看<a href="https://www.cnblogs.com/ftl1012/p/9260157.html">Linux 文件特殊权限详解</a></p><p>ACL 权限</p><figure class="highlight shell"><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">setfacl: #设置权限 </span><br><span class="line">setfacl -m user:用户名:rwx 文件名</span><br><span class="line">setfacl -m group:组名:rw 文件名</span><br><span class="line"></span><br><span class="line">getfacl # 获取权限</span><br><span class="line">getfacl 文件名</span><br></pre></td></tr></table></figure><figure class="highlight shell"><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">stat 文件名 # 查看文件信息 </span><br><span class="line"></span><br><span class="line">[root@Zhaomo0823 zhaomo]# stat 2.jpg </span><br><span class="line"> File: ‘2.jpg’</span><br><span class="line"> Size: 5513 Blocks: 16 IO Block: 4096 regular file</span><br><span class="line">Device: fd01h/64769dInode: 1317455 Links: 1</span><br><span class="line">Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)</span><br><span class="line">Access: 2020-12-30 11:45:06.000000000 +0800</span><br><span class="line">Modify: 2020-12-30 11:30:57.000000000 +0800</span><br><span class="line">Change: 2020-12-30 11:45:06.580375982 +0800</span><br><span class="line"> Birth: -</span><br></pre></td></tr></table></figure><h4 id="数据检索"><a href="#数据检索" class="headerlink" title="数据检索"></a>数据检索</h4><figure class="highlight shell"><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">grep </span><br><span class="line">-e 相当于 egrep</span><br><span class="line">.....</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">grep -r "root" /etc # 查看/etc文件下包含root 字符串的文件</span><br><span class="line">grep -r -l "root" /etc # 查看/etc文件下包含root 字符串的文件 只显示文件名</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><h5 id="管道"><a href="#管道" class="headerlink" title="管道"></a>管道</h5><pre><code> 上一个命令的输出到下一个命令的输入</code></pre><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cat /etc/passwd | head -2</span><br></pre></td></tr></table></figure><figure class="highlight shell"><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">sort # 排序命令</span><br><span class="line"></span><br><span class="line">sort -n num | uniq -d # 显示重复的</span><br><span class="line">sort -n num | uniq -u # 去掉重复的</span><br><span class="line"></span><br><span class="line">想去重 先排序</span><br><span class="line"></span><br><span class="line">diff # 比较是否相同</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">wc 文件名 # 统计命令</span><br></pre></td></tr></table></figure><h4 id="网络"><a href="#网络" class="headerlink" title="网络"></a>网络</h4><figure class="highlight shell"><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">yum list NetworkManager </span><br><span class="line">systemctl status NetworkManager</span><br><span class="line">yum install -y NetworkManager</span><br><span class="line">systemctl status NetworkManager</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>nmtui 文本界面下的用户界面内</p><p>nmcli 命令行设置</p><p>nm-connection-editor 图形界面设置</p><figure class="highlight shell"><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">nmtui # 启动NetworkManager</span><br><span class="line">需要执行systemctl start NetworkManager</span><br><span class="line"></span><br><span class="line">nmcli # 不知道命令可以 按二次Tab</span><br><span class="line"></span><br><span class="line">nmcli networking off # 关闭网络</span><br><span class="line">nmcli networking on # 开启网络</span><br><span class="line"></span><br><span class="line">cat /etc/hostname </span><br><span class="line">nmcli general logging # 查看登录级别</span><br><span class="line">journalctl #查看网络日志</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">nmcli </span><br><span class="line">connection</span><br><span class="line">device </span><br><span class="line">general</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">ifconfig </span><br><span class="line">systemctl restart network </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">nmcli connection edit 网卡名 #交互模式编辑网卡</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><p><a href="https://www.cnblogs.com/djlsunshine/p/9733182.html">linux中nmcli命令使用及网络配置</a></p><h4 id="文件查找"><a href="#文件查找" class="headerlink" title="文件查找"></a>文件查找</h4><figure class="highlight shell"><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></pre></td><td class="code"><pre><span class="line">find / -name passwd </span><br><span class="line">find / -empty #查看所有空文件或空文件</span><br><span class="line"></span><br><span class="line">find / -maxdepth 2 -name passwd #查看目录层级2层的 name passwd 的文件</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">find / -mindepth 2 -name passwd #从第几级开始查</span><br></pre></td></tr></table></figure><p>按文件类型查询</p><figure class="highlight shell"><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">find / -type p</span><br><span class="line">f 普通文件</span><br><span class="line">d 目录问价</span><br><span class="line">l符号链接文件</span><br><span class="line">b块设备文件</span><br><span class="line">c字符设备文件</span><br><span class="line">p管道文件</span><br><span class="line">s 套接字文件</span><br><span class="line"> </span><br><span class="line">find / -atime -3 # 三天之内访问过的</span><br><span class="line"></span><br><span class="line"> 以天为单位</span><br><span class="line"> mtime 修改时间</span><br><span class="line"> atime 访问时间</span><br><span class="line"> ctime 创建时间</span><br><span class="line"> </span><br><span class="line"> 以分钟为单位</span><br><span class="line"> _mmin</span><br><span class="line"> _amin </span><br><span class="line"> </span><br><span class="line">find / -name passwd -exec tar rvf passwd.tar {} \; # 找到名字 passwd的执行压缩 压缩为 passwd.tar </span><br></pre></td></tr></table></figure><figure class="highlight shell"><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">locate 模糊查找 查找的是Linux系统每天特定时间自动索引备份到系统数据库中的文件</span><br><span class="line"> -i </span><br><span class="line"> </span><br><span class="line"> mlocate.db # </span><br></pre></td></tr></table></figure><h4 id="压缩解压"><a href="#压缩解压" class="headerlink" title="压缩解压"></a>压缩解压</h4><figure class="highlight shell"><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">压缩 解压</span><br><span class="line">tar -cvzf etc.tar.gz /etc tar xvzf etc.tar.gz</span><br><span class="line">tar -cjvf etc.tar.bz2 /etctar -jvxf etc.tar.bz2</span><br><span class="line">tar -cvJf etc.tar.xz /etc tar -Jvxf etc.tar.xz</span><br><span class="line">tar -cvf etc.tar /etctar xvf etc.tar</span><br><span class="line"></span><br><span class="line">加- 命令顺序不改变 不加 会自动排顺序 推荐不加 </span><br><span class="line"></span><br><span class="line">ll -h 查看文件夹下文件 以大小展示</span><br></pre></td></tr></table></figure><p>bzip 文件</p><p>bunzip 解压</p><p>gzip 压缩</p><p>gunzip 解压</p><p>zcat 压缩文件名</p><p>zip xxx.zip xxx 将xxx文件压缩为xxx.zip </p><p>unzip 解压缩</p><h4 id="用户删除及属性修改"><a href="#用户删除及属性修改" class="headerlink" title="用户删除及属性修改"></a>用户删除及属性修改</h4><h3 id="用户删除"><a href="#用户删除" class="headerlink" title="用户删除"></a>用户删除</h3><figure class="highlight shell"><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">userdel userxx #只删除用户</span><br><span class="line">ls /home # 在这个下面还有只删除用户的文件夹</span><br><span class="line">rm -rf /home/userxxx # 需要再执行这个命令</span><br><span class="line">rm -rf /var/mail/userxxx # 再执行这个</span><br><span class="line"></span><br><span class="line">userdel -r userxx #删除用户及其关联文件夹</span><br><span class="line"></span><br><span class="line">vim /etc/default/useradd #如果新建用户没有指定一些选项 会有默认的组和默认/home目录和邮箱</span><br><span class="line">/etc/login.defs #shadow 密码套件配置</span><br></pre></td></tr></table></figure><h5 id="修改用户"><a href="#修改用户" class="headerlink" title="修改用户"></a>修改用户</h5><figure class="highlight shell"><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">usermod - modify a user account </span><br><span class="line"></span><br><span class="line"><span class="meta">#</span><span class="bash">语法</span></span><br><span class="line">usermod </span><br><span class="line">-a --append</span><br><span class="line"> -L --lock</span><br><span class="line"> -U--unlock</span><br><span class="line"> -m --move-home with-d</span><br><span class="line"> </span><br><span class="line">usermod -m -d /home/user01 user01 # 将user01 的家目录移动到/home/user01</span><br><span class="line">usermod -G root -a user01 # 将user01添加到root用户组</span><br></pre></td></tr></table></figure><h5 id="更改用户"><a href="#更改用户" class="headerlink" title="更改用户"></a>更改用户</h5><figure class="highlight shell"><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">man chage # 查看用法 了解即可</span><br><span class="line"></span><br><span class="line">chage user01 #修改密码年龄</span><br></pre></td></tr></table></figure><h4 id="组管理"><a href="#组管理" class="headerlink" title="组管理"></a>组管理</h4><figure class="highlight shell"><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></pre></td><td class="code"><pre><span class="line">groupadd # 新建组 </span><br><span class="line">-g, --gid GID #指定GID</span><br><span class="line">-r, --system #创建一个系统组</span><br><span class="line">-o,--non-unique #此选项允许添加一个使用非唯一GID的组</span><br><span class="line">groupdel #删除组</span><br><span class="line">groupmod #修改组属性</span><br><span class="line">gppasswd #组密码</span><br></pre></td></tr></table></figure><p>详细看<a href="https://zhuanlan.zhihu.com/p/38136194">三分钟教你理清Linux 用户与用户组关系</a> </p><h4 id="CPU"><a href="#CPU" class="headerlink" title="CPU"></a>CPU</h4><figure class="highlight shell"><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">ps -ef </span><br><span class="line">uptime # 服务器运行时间</span><br><span class="line">cat /proc/cpuinfo</span><br></pre></td></tr></table></figure><p><a href="http://www.linuxidc.com/Linux/2016-07/133515.htm">Linux下ps -ef和ps aux的区别</a></p><p>中病毒 查进程 杀进程 </p><p>重装 加补丁</p><p>单核的使用率 100% 多核 n* 100%s</p><h4 id="Linux服务"><a href="#Linux服务" class="headerlink" title="Linux服务"></a>Linux服务</h4><p>什么是服务 ?</p><p>服务三要素</p><p>服务的分类 6和7 一个采用 systemV 串行启动 systemd 并行启动</p><p>独立服务 非独立服务</p><p>独立服务: 运行在内存中,服务响应速度快,占用更多内存. 常驻内存 监听状态</p><figure class="highlight shell"><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">/usr/lib/systemd/system 服务启动脚本存放目录</span><br><span class="line"></span><br><span class="line">启动管理脚本</span><br><span class="line">ls /usr/lib/systemd/system</span><br></pre></td></tr></table></figure><p>xnited 服务</p><h4 id="Shell字符"><a href="#Shell字符" class="headerlink" title="Shell字符"></a>Shell字符</h4><figure class="highlight shell"><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">ls x? # 匹配 x后面任一字符的文件</span><br><span class="line">X* # 匹配后面出现多个字符</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">~ # 直接回到home目录</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">expr 1+1 # 计算1+1</span><br><span class="line">expr 1 \* 1 #1乘1</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><h4 id="RPM"><a href="#RPM" class="headerlink" title="RPM"></a>RPM</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><s</summary>
<category term="linux" scheme="http://example.com/tags/linux/"/>
</entry>
<entry>
<title>动态代理</title>
<link href="http://example.com/2021/08/04/%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/"/>
<id>http://example.com/2021/08/04/%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/</id>
<published>2021-08-04T02:40:16.000Z</published>
<updated>2021-08-04T03:00:52.004Z</updated>
<content type="html"><![CDATA[<figure class="highlight java"><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></pre></td><td class="code"><pre><span class="line">AOP:【动态代理】</span><br><span class="line"> * 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式;</span><br><span class="line"> * </span><br><span class="line"> * <span class="number">1</span>、导入aop模块;Spring AOP:(spring-aspects)</span><br><span class="line"> * <span class="number">2</span>、定义一个业务逻辑类(MathCalculator);在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出现异常,xxx)</span><br><span class="line"> * <span class="number">3</span>、定义一个日志切面类(LogAspects):切面类里面的方法需要动态感知MathCalculator.div运行到哪里然后执行;</span><br><span class="line"> * 通知方法:</span><br><span class="line"> * 前置通知(<span class="meta">@Before</span>):logStart:在目标方法(div)运行之前运行</span><br><span class="line"> * 后置通知(<span class="meta">@After</span>):logEnd:在目标方法(div)运行结束之后运行(无论方法正常结束还是异常结束)</span><br><span class="line"> * 返回通知(<span class="meta">@AfterReturning</span>):logReturn:在目标方法(div)正常返回之后运行</span><br><span class="line"> * 异常通知(<span class="meta">@AfterThrowing</span>):logException:在目标方法(div)出现异常以后运行</span><br><span class="line"> * 环绕通知(<span class="meta">@Around</span>):动态代理,手动推进目标方法运行(joinPoint.procced())</span><br><span class="line"> * <span class="number">4</span>、给切面类的目标方法标注何时何地运行(通知注解);</span><br><span class="line"> * <span class="number">5</span>、将切面类和业务逻辑类(目标方法所在类)都加入到容器中;</span><br><span class="line"> * <span class="number">6</span>、必须告诉Spring哪个类是切面类(给切面类上加一个注解:<span class="meta">@Aspect</span>)</span><br><span class="line"> * [<span class="number">7</span>]、给配置类中加 <span class="meta">@EnableAspectJAutoProxy</span> 【开启基于注解的aop模式】</span><br><span class="line"> * 在Spring中很多的 <span class="meta">@EnableXXX</span>;</span><br><span class="line"> * </span><br><span class="line"> * 三步:</span><br><span class="line"> * <span class="number">1</span>)、将业务逻辑组件和切面类都加入到容器中;告诉Spring哪个是切面类(<span class="meta">@Aspect</span>)</span><br><span class="line"> * <span class="number">2</span>)、在切面类上的每一个通知方法上标注通知注解,告诉Spring何时何地运行(切入点表达式)</span><br><span class="line"> * <span class="number">3</span>)、开启基于注解的aop模式;<span class="meta">@EnableAspectJAutoProxy</span></span><br><span class="line"> * </span><br><span class="line"> * AOP原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】</span><br><span class="line"> * <span class="meta">@EnableAspectJAutoProxy</span>;</span><br><span class="line"> * <span class="number">1</span>、<span class="meta">@EnableAspectJAutoProxy</span>是什么?</span><br><span class="line"> * <span class="meta">@Import(AspectJAutoProxyRegistrar.class)</span>:给容器中导入AspectJAutoProxyRegistrar</span><br><span class="line"> * 利用AspectJAutoProxyRegistrar自定义给容器中注册bean;BeanDefinetion</span><br><span class="line"> * internalAutoProxyCreator=AnnotationAwareAspectJAutoProxyCreator</span><br><span class="line"> * </span><br><span class="line"> * 给容器中注册一个AnnotationAwareAspectJAutoProxyCreator;</span><br><span class="line"> * </span><br><span class="line"> * <span class="number">2</span>、 AnnotationAwareAspectJAutoProxyCreator:</span><br><span class="line"> * AnnotationAwareAspectJAutoProxyCreator</span><br><span class="line"> * ->AspectJAwareAdvisorAutoProxyCreator</span><br><span class="line"> * ->AbstractAdvisorAutoProxyCreator</span><br><span class="line"> * ->AbstractAutoProxyCreator</span><br><span class="line"> * implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware</span><br><span class="line"> * 关注后置处理器(在bean初始化完成前后做事情)、自动装配BeanFactory</span><br><span class="line"> * </span><br><span class="line"> * AbstractAutoProxyCreator.setBeanFactory()</span><br><span class="line"> * AbstractAutoProxyCreator.有后置处理器的逻辑;</span><br><span class="line"> * </span><br><span class="line"> * AbstractAdvisorAutoProxyCreator.setBeanFactory()-》initBeanFactory()</span><br><span class="line"> * </span><br><span class="line"> * AnnotationAwareAspectJAutoProxyCreator.initBeanFactory()</span><br><span class="line"> *</span><br><span class="line"> *</span><br><span class="line"> * 流程:</span><br><span class="line"> * <span class="number">1</span>)、传入配置类,创建ioc容器</span><br><span class="line"> * <span class="number">2</span>)、注册配置类,调用refresh()刷新容器;</span><br><span class="line"> * <span class="number">3</span>)、registerBeanPostProcessors(beanFactory);注册bean的后置处理器来方便拦截bean的创建;</span><br><span class="line"> * <span class="number">1</span>)、先获取ioc容器已经定义了的需要创建对象的所有BeanPostProcessor</span><br><span class="line"> * <span class="number">2</span>)、给容器中加别的BeanPostProcessor</span><br><span class="line"> * <span class="number">3</span>)、优先注册实现了PriorityOrdered接口的BeanPostProcessor;</span><br><span class="line"> * <span class="number">4</span>)、再给容器中注册实现了Ordered接口的BeanPostProcessor;</span><br><span class="line"> * <span class="number">5</span>)、注册没实现优先级接口的BeanPostProcessor;</span><br><span class="line"> * <span class="number">6</span>)、注册BeanPostProcessor,实际上就是创建BeanPostProcessor对象,保存在容器中;</span><br><span class="line"> * 创建internalAutoProxyCreator的BeanPostProcessor【AnnotationAwareAspectJAutoProxyCreator】</span><br><span class="line"> * <span class="number">1</span>)、创建Bean的实例</span><br><span class="line"> * <span class="number">2</span>)、populateBean;给bean的各种属性赋值</span><br><span class="line"> * <span class="number">3</span>)、initializeBean:初始化bean;</span><br><span class="line"> * <span class="number">1</span>)、invokeAwareMethods():处理Aware接口的方法回调</span><br><span class="line"> * <span class="number">2</span>)、applyBeanPostProcessorsBeforeInitialization():应用后置处理器的postProcessBeforeInitialization()</span><br><span class="line"> * <span class="number">3</span>)、invokeInitMethods();执行自定义的初始化方法</span><br><span class="line"> * <span class="number">4</span>)、applyBeanPostProcessorsAfterInitialization();执行后置处理器的postProcessAfterInitialization();</span><br><span class="line"> * <span class="number">4</span>)、BeanPostProcessor(AnnotationAwareAspectJAutoProxyCreator)创建成功;--》aspectJAdvisorsBuilder</span><br><span class="line"> * <span class="number">7</span>)、把BeanPostProcessor注册到BeanFactory中;</span><br><span class="line"> * beanFactory.addBeanPostProcessor(postProcessor);</span><br><span class="line"> * =======以上是创建和注册AnnotationAwareAspectJAutoProxyCreator的过程========</span><br><span class="line"> * </span><br><span class="line"> * AnnotationAwareAspectJAutoProxyCreator => InstantiationAwareBeanPostProcessor</span><br><span class="line"> * <span class="number">4</span>)、finishBeanFactoryInitialization(beanFactory);完成BeanFactory初始化工作;创建剩下的单实例bean</span><br><span class="line"> * <span class="number">1</span>)、遍历获取容器中所有的Bean,依次创建对象getBean(beanName);</span><br><span class="line"> * getBean->doGetBean()->getSingleton()-></span><br><span class="line"> * <span class="number">2</span>)、创建bean</span><br><span class="line"> * 【AnnotationAwareAspectJAutoProxyCreator在所有bean创建之前会有一个拦截,InstantiationAwareBeanPostProcessor,会调用postProcessBeforeInstantiation()】</span><br><span class="line"> * <span class="number">1</span>)、先从缓存中获取当前bean,如果能获取到,说明bean是之前被创建过的,直接使用,否则再创建;</span><br><span class="line"> * 只要创建好的Bean都会被缓存起来</span><br><span class="line"> * <span class="number">2</span>)、createBean();创建bean;</span><br><span class="line"> * AnnotationAwareAspectJAutoProxyCreator 会在任何bean创建之前先尝试返回bean的实例</span><br><span class="line"> * 【BeanPostProcessor是在Bean对象创建完成初始化前后调用的】</span><br><span class="line"> * 【InstantiationAwareBeanPostProcessor是在创建Bean实例之前先尝试用后置处理器返回对象的】</span><br><span class="line"> * <span class="number">1</span>)、resolveBeforeInstantiation(beanName, mbdToUse);解析BeforeInstantiation</span><br><span class="line"> * 希望后置处理器在此能返回一个代理对象;如果能返回代理对象就使用,如果不能就继续</span><br><span class="line"> * <span class="number">1</span>)、后置处理器先尝试返回对象;</span><br><span class="line"> * bean = applyBeanPostProcessorsBeforeInstantiation():</span><br><span class="line"> * 拿到所有后置处理器,如果是InstantiationAwareBeanPostProcessor;</span><br><span class="line"> * 就执行postProcessBeforeInstantiation</span><br><span class="line"> * <span class="keyword">if</span> (bean != <span class="keyword">null</span>) {</span><br><span class="line">bean = applyBeanPostProcessorsAfterInitialization(bean, beanName);</span><br><span class="line">}</span><br><span class="line"> * </span><br><span class="line"> * <span class="number">2</span>)、doCreateBean(beanName, mbdToUse, args);真正的去创建一个bean实例;和<span class="number">3.6</span>流程一样;</span><br><span class="line"> * <span class="number">3</span>)、</span><br><span class="line"> * </span><br><span class="line"> * </span><br><span class="line"> * AnnotationAwareAspectJAutoProxyCreator【InstantiationAwareBeanPostProcessor】的作用:</span><br><span class="line"> * <span class="number">1</span>)、每一个bean创建之前,调用postProcessBeforeInstantiation();</span><br><span class="line"> * 关心MathCalculator和LogAspect的创建</span><br><span class="line"> * <span class="number">1</span>)、判断当前bean是否在advisedBeans中(保存了所有需要增强bean)</span><br><span class="line"> * <span class="number">2</span>)、判断当前bean是否是基础类型的Advice、Pointcut、Advisor、AopInfrastructureBean,</span><br><span class="line"> * 或者是否是切面(<span class="meta">@Aspect</span>)</span><br><span class="line"> * <span class="number">3</span>)、是否需要跳过</span><br><span class="line"> * <span class="number">1</span>)、获取候选的增强器(切面里面的通知方法)【List<Advisor> candidateAdvisors】</span><br><span class="line"> * 每一个封装的通知方法的增强器是 InstantiationModelAwarePointcutAdvisor;</span><br><span class="line"> * 判断每一个增强器是否是 AspectJPointcutAdvisor 类型的;返回<span class="keyword">true</span></span><br><span class="line"> * <span class="number">2</span>)、永远返回<span class="keyword">false</span></span><br><span class="line"> * </span><br><span class="line"> * <span class="number">2</span>)、创建对象</span><br><span class="line"> * postProcessAfterInitialization;</span><br><span class="line"> * <span class="keyword">return</span> wrapIfNecessary(bean, beanName, cacheKey);<span class="comment">//包装如果需要的情况下</span></span><br><span class="line"> * <span class="number">1</span>)、获取当前bean的所有增强器(通知方法) Object[] specificInterceptors</span><br><span class="line"> * <span class="number">1</span>、找到候选的所有的增强器(找哪些通知方法是需要切入当前bean方法的)</span><br><span class="line"> * <span class="number">2</span>、获取到能在bean使用的增强器。</span><br><span class="line"> * <span class="number">3</span>、给增强器排序</span><br><span class="line"> * <span class="number">2</span>)、保存当前bean在advisedBeans中;</span><br><span class="line"> * <span class="number">3</span>)、如果当前bean需要增强,创建当前bean的代理对象;</span><br><span class="line"> * <span class="number">1</span>)、获取所有增强器(通知方法)</span><br><span class="line"> * <span class="number">2</span>)、保存到proxyFactory</span><br><span class="line"> * <span class="number">3</span>)、创建代理对象:Spring自动决定</span><br><span class="line"> * JdkDynamicAopProxy(config);jdk动态代理;</span><br><span class="line"> * ObjenesisCglibAopProxy(config);cglib的动态代理;</span><br><span class="line"> * <span class="number">4</span>)、给容器中返回当前组件使用cglib增强了的代理对象;</span><br><span class="line"> * <span class="number">5</span>)、以后容器中获取到的就是这个组件的代理对象,执行目标方法的时候,代理对象就会执行通知方法的流程;</span><br><span class="line"> * </span><br><span class="line"> * </span><br><span class="line"> * <span class="number">3</span>)、目标方法执行;</span><br><span class="line"> * 容器中保存了组件的代理对象(cglib增强后的对象),这个对象里面保存了详细信息(比如增强器,目标对象,xxx);</span><br><span class="line"> * <span class="number">1</span>)、CglibAopProxy.intercept();拦截目标方法的执行</span><br><span class="line"> * <span class="number">2</span>)、根据ProxyFactory对象获取将要执行的目标方法拦截器链;</span><br><span class="line"> * List<Object> chain = <span class="keyword">this</span>.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);</span><br><span class="line"> * <span class="number">1</span>)、List<Object> interceptorList保存所有拦截器 <span class="number">5</span></span><br><span class="line"> * 一个默认的ExposeInvocationInterceptor 和 <span class="number">4</span>个增强器;</span><br><span class="line"> * <span class="number">2</span>)、遍历所有的增强器,将其转为Interceptor;</span><br><span class="line"> * registry.getInterceptors(advisor);</span><br><span class="line"> * <span class="number">3</span>)、将增强器转为List<MethodInterceptor>;</span><br><span class="line"> * 如果是MethodInterceptor,直接加入到集合中</span><br><span class="line"> * 如果不是,使用AdvisorAdapter将增强器转为MethodInterceptor;</span><br><span class="line"> * 转换完成返回MethodInterceptor数组;</span><br><span class="line"> * </span><br><span class="line"> * <span class="number">3</span>)、如果没有拦截器链,直接执行目标方法;</span><br><span class="line"> * 拦截器链(每一个通知方法又被包装为方法拦截器,利用MethodInterceptor机制)</span><br><span class="line"> * <span class="number">4</span>)、如果有拦截器链,把需要执行的目标对象,目标方法,</span><br><span class="line"> * 拦截器链等信息传入创建一个 CglibMethodInvocation 对象,</span><br><span class="line"> * 并调用 Object retVal = mi.proceed();</span><br><span class="line"> * <span class="number">5</span>)、拦截器链的触发过程;</span><br><span class="line"> * <span class="number">1</span>)、如果没有拦截器执行执行目标方法,或者拦截器的索引和拦截器数组-<span class="number">1</span>大小一样(指定到了最后一个拦截器)执行目标方法;</span><br><span class="line"> * <span class="number">2</span>)、链式获取每一个拦截器,拦截器执行invoke方法,每一个拦截器等待下一个拦截器执行完成返回以后再来执行;</span><br><span class="line"> * 拦截器链的机制,保证通知方法与目标方法的执行顺序;</span><br><span class="line"> * </span><br><span class="line"> * 总结:</span><br><span class="line"> * <span class="number">1</span>)、 <span class="meta">@EnableAspectJAutoProxy</span> 开启AOP功能</span><br><span class="line"> * <span class="number">2</span>)、 <span class="meta">@EnableAspectJAutoProxy</span> 会给容器中注册一个组件 AnnotationAwareAspectJAutoProxyCreator</span><br><span class="line"> * <span class="number">3</span>)、AnnotationAwareAspectJAutoProxyCreator是一个后置处理器;</span><br><span class="line"> * <span class="number">4</span>)、容器的创建流程:</span><br><span class="line"> * <span class="number">1</span>)、registerBeanPostProcessors()注册后置处理器;创建AnnotationAwareAspectJAutoProxyCreator对象</span><br><span class="line"> * <span class="number">2</span>)、finishBeanFactoryInitialization()初始化剩下的单实例bean</span><br><span class="line"> * <span class="number">1</span>)、创建业务逻辑组件和切面组件</span><br><span class="line"> * <span class="number">2</span>)、AnnotationAwareAspectJAutoProxyCreator拦截组件的创建过程</span><br><span class="line"> * <span class="number">3</span>)、组件创建完之后,判断组件是否需要增强</span><br><span class="line"> * 是:切面的通知方法,包装成增强器(Advisor);给业务逻辑组件创建一个代理对象(cglib);</span><br><span class="line"> * <span class="number">5</span>)、执行目标方法:</span><br><span class="line"> * <span class="number">1</span>)、代理对象执行目标方法</span><br><span class="line"> * <span class="number">2</span>)、CglibAopProxy.intercept();</span><br><span class="line"> * <span class="number">1</span>)、得到目标方法的拦截器链(增强器包装成拦截器MethodInterceptor)</span><br><span class="line"> * <span class="number">2</span>)、利用拦截器的链式机制,依次进入每一个拦截器进行执行;</span><br><span class="line"> * <span class="number">3</span>)、效果:</span><br><span class="line"> * 正常执行:前置通知-》目标方法-》后置通知-》返回通知</span><br><span class="line"> * 出现异常:前置通知-》目标方法-》后置通知-》异常通知</span><br><span class="line"> * </span><br><span class="line"> * </span><br><span class="line"> * </span><br><span class="line"> */</span><br><span class="line"><span class="meta">@EnableAspectJAutoProxy</span></span><br><span class="line"><span class="meta">@Configuration</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MainConfigOfAOP</span> </span>{</span><br><span class="line"> </span><br><span class="line"><span class="comment">//业务逻辑类加入容器中</span></span><br><span class="line"><span class="meta">@Bean</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> MathCalculator <span class="title">calculator</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">return</span> <span class="keyword">new</span> MathCalculator();</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="meta">@Bean</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> LogAspects <span class="title">logAspects</span><span class="params">()</span></span>{</span><br><span class="line"><span class="keyword">return</span> <span class="keyword">new</span> LogAspects();</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class=</summary>
<category term="AOP" scheme="http://example.com/tags/AOP/"/>
</entry>
<entry>
<title>设计模式</title>
<link href="http://example.com/2021/06/15/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/"/>
<id>http://example.com/2021/06/15/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</id>
<published>2021-06-15T15:25:18.000Z</published>
<updated>2021-06-21T02:48:47.569Z</updated>
<content type="html"><![CDATA[<h5 id="单一职责原则注意事项和细节"><a href="#单一职责原则注意事项和细节" class="headerlink" title="单一职责原则注意事项和细节"></a>单一职责原则注意事项和细节</h5><p>降低类的复杂度,一个类只负责一项职责.</p><p>提高类的可读性,可维护性</p><p>降低变更引起的风险</p><p>通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,才可以在方法级别保持单一职责原则.</p><p>接口和抽象层都是加缓存 可以是耦合度降低且继承或实现能更易扩展</p><p>组合比继承降低耦合性 依赖 聚合 组合方式来替换继承 </p>]]></content>
<summary type="html"><h5 id="单一职责原则注意事项和细节"><a href="#单一职责原则注意事项和细节" class="headerlink" title="单一职责原则注意事项和细节"></a>单一职责原则注意事项和细节</h5><p>降低类的复杂度,一个类只负责一项职责.</p>
<p</summary>
</entry>
<entry>
<title>HashMap和HashTable</title>
<link href="http://example.com/2021/06/14/HashMap%E5%92%8CHashTable/"/>
<id>http://example.com/2021/06/14/HashMap%E5%92%8CHashTable/</id>
<published>2021-06-14T09:01:51.000Z</published>
<updated>2021-06-14T09:02:34.132Z</updated>
<content type="html"><![CDATA[<p>考察目标:</p><ul><li>集合体系结构是否熟悉</li><li>JDk版本更新是否了解</li></ul><p>题目分析:</p><ul><li>相同点<ul><li>都是双列集合,一个键对应一个值</li><li>都是键不能重复,但是值可以重复</li></ul></li><li>不同点<ul><li>出现版本的区别<ul><li>HashMap是 JDK 1.2 版本出现的</li><li>HashTable是JDK1.0版本出现的</li></ul></li><li>线程同步的区别<ul><li>HashMap是线程不同步的</li><li>HashTable是线程同步的</li></ul></li><li>存储数据的区别<ul><li>HashMap可以存储null键和null值</li><li>HashTable不可以存储null键和null值</li></ul></li></ul></li></ul><h4 id="应用场景"><a href="#应用场景" class="headerlink" title="应用场景"></a>应用场景</h4><ul><li>双列集合优先使用HashMap集合</li><li>如果是在多线程场景下,也无需使用HashTable集合,我们可以使用ConcurrentHashMap集合,这个是线程同步的.</li><li>HashTable 集合虽然使用不多,但是它有一个给力的子类,Properties集合还在大量使用中,一般配合IO流来加载配置文件.</li></ul>]]></content>
<summary type="html"><p>考察目标:</p>
<ul>
<li>集合体系结构是否熟悉</li>
<li>JDk版本更新是否了解</li>
</ul>
<p>题目分析:</p>
<ul>
<li>相同点<ul>
<li>都是双列集合,一个键对应一个值</li>
<li>都是键不能重复,但是值可以重复<</summary>
</entry>
<entry>
<title>hexo使用笔记</title>
<link href="http://example.com/2021/04/27/hexo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/"/>
<id>http://example.com/2021/04/27/hexo%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/</id>
<published>2021-04-26T16:37:48.000Z</published>
<updated>2021-04-26T16:45:37.773Z</updated>
<content type="html"><![CDATA[<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">npm install hexo -g #安装 </span><br><span class="line">npm update hexo -g #升级 </span><br><span class="line">hexo init #初始化</span><br></pre></td></tr></table></figure><h2 id="简写"><a href="#简写" class="headerlink" title="简写"></a>简写</h2><p><code>hexo n "我的博客"</code> == <code>hexo new "我的博客"</code> #新建文章<br><code>hexo p</code> == <code>hexo publish</code><br><code>hexo g</code> == <code>hexo generate</code>#生成<br><code>hexo s</code> == <code>hexo server</code> #启动服务预览<br><code>hexo d</code> == <code>hexo deploy</code>#部署</p><h2 id="服务器"><a href="#服务器" class="headerlink" title="服务器"></a>服务器</h2><figure class="highlight bash"><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">`hexo server` <span class="comment">#Hexo 会监视文件变动并自动更新,您无须重启服务器。</span></span><br><span class="line">`hexo server -s` <span class="comment">#静态模式</span></span><br><span class="line">`hexo server -p 5000` <span class="comment">#更改端口</span></span><br><span class="line">`hexo server -i 192.168.1.1` <span class="comment">#自定义 IP</span></span><br><span class="line"></span><br><span class="line">`hexo clean` <span class="comment">#清除缓存 网页正常情况下可以忽略此条命令</span></span><br><span class="line">`hexo g` <span class="comment">#生成静态网页</span></span><br><span class="line">`hexo d` <span class="comment">#开始部署</span></span><br></pre></td></tr></table></figure><h3 id="监视文件变动"><a href="#监视文件变动" class="headerlink" title="监视文件变动"></a>监视文件变动</h3><figure class="highlight bash"><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">`hexo generate` <span class="comment">#使用 hexo生成静态文件快速而且简单</span></span><br><span class="line">`hexo generate --watch` <span class="comment">#监视文件变动</span></span><br></pre></td></tr></table></figure><h3 id="完成后部署"><a href="#完成后部署" class="headerlink" title="完成后部署"></a>完成后部署</h3><blockquote><p>两个命令的作用是相同的<br><code>hexo generate --deploy</code><br><code>hexo deploy --generate</code></p></blockquote><figure class="highlight bash"><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">hexo deploy -g</span><br><span class="line">hexo server -g</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class</summary>
</entry>
<entry>
<title>Some</title>
<link href="http://example.com/2021/04/25/Some/"/>
<id>http://example.com/2021/04/25/Some/</id>
<published>2021-04-24T16:10:33.000Z</published>
<updated>2021-04-26T16:47:58.779Z</updated>
<content type="html"><![CDATA[<h4 id="级联删除"><a href="#级联删除" class="headerlink" title="级联删除"></a>级联删除</h4><p>解决方案一:触发器</p><p> 注意使用触发器实现是将业务绑定到了数据库端,在进行系统设计时要确认方案</p><p>解决方案二: 业务层删除操作分别调用两个模块的删除功能</p><p> 注意删除主使用ID删除,删除从使用按关联ID 删除</p><p> 注意删除的顺序,先删从,后删主</p><p>解决方案三: 存储过程</p><p> 整套的疏忽层解决方案,没有单一功能使用的.</p><p>解决方案四: 依赖框架提供得到级联删除功能</p><p>解决方案五: 定时维护/垃圾数据清理</p><h4 id="String"><a href="#String" class="headerlink" title="String"></a>String</h4><p>String final 修饰不可变长度<br>StringBuffer 1.0 线程安全(同步)<br>Stringbuilder 1.5 线程不安全</p><p>SQL拼接语句内容较少 用String即可<br>如果语句内容很多 应该使用StringBuillder</p><h4 id="解决中文乱码的一个思路"><a href="#解决中文乱码的一个思路" class="headerlink" title="解决中文乱码的一个思路"></a>解决中文乱码的一个思路</h4><figure class="highlight java"><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">String fileName = <span class="keyword">new</span> String(<span class="string">"测试文件名.xlsx"</span>.getBytes(),<span class="string">"iso8859-1"</span>);</span><br><span class="line">然后再传fileName 过去</span><br></pre></td></tr></table></figure><h4 id="权限系统是一种设定用户与可操作模块之间关系的系统"><a href="#权限系统是一种设定用户与可操作模块之间关系的系统" class="headerlink" title="权限系统是一种设定用户与可操作模块之间关系的系统"></a>权限系统是一种设定用户与可操作模块之间关系的系统</h4><p>通过设定用户与可操作性的模块之间的关系,控制用户在可指定范围进行业务执行</p><p>基于用户的权限控制(UBAC: User-Based Access Control)</p><p>基于角色的权限控制(RBAC :Role-Based Access Control)</p><h4 id="TCP发送数据如何设置发送多大数据"><a href="#TCP发送数据如何设置发送多大数据" class="headerlink" title="TCP发送数据如何设置发送多大数据?"></a>TCP发送数据如何设置发送多大数据?</h4><p>如果数据拆包发送如何保证数据顺序?</p><p> 根据接收到的Seq和ACK,将发送和接收的数据进行排序’</p><p>无论是Seq还是ACK,都是针对”对方”而言的.是<strong>对方发送的数据和对方接收到的数据</strong></p>]]></content>
<summary type="html"><h4 id="级联删除"><a href="#级联删除" class="headerlink" title="级联删除"></a>级联删除</h4><p>解决方案一:触发器</p>
<p> 注意使用触发器实现是将业务绑定到了数据库端,在进行系统设计时要确认方案<</summary>
</entry>
<entry>
<title>随记</title>
<link href="http://example.com/2021/03/28/%E9%9A%8F%E8%AE%B0/"/>
<id>http://example.com/2021/03/28/%E9%9A%8F%E8%AE%B0/</id>
<published>2021-03-28T07:18:14.000Z</published>
<updated>2021-07-16T09:19:56.842Z</updated>
<content type="html"><![CDATA[<figure class="highlight sh"><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"><span class="comment">##Docker</span></span><br><span class="line">01/07</span><br><span class="line">停止所有容器 docker stop $(docker ps -a -q)</span><br><span class="line">刪除所有容器 docker rm $(docker ps -a -q)</span><br><span class="line"></span><br><span class="line">删除所有容器 docker ps -a -q|xargs docker rm </span><br><span class="line"></span><br><span class="line">docker rmi -f 容器id 容器id 容器id <span class="comment">#删除多个容器</span></span><br><span class="line">docker rmi -f $(docker images -aq) <span class="comment">#删除全部镜像</span></span><br><span class="line">Ctrl+P+Q<span class="comment"># 容器不停止退出 如果启动时忘了后台启动的话 </span></span><br><span class="line"></span><br><span class="line">docker start 容器id</span><br><span class="line">docker restart 容器id</span><br><span class="line">docker stop 容器id</span><br><span class="line">docker <span class="built_in">kill</span> 容器id<span class="comment"># 强制停止当前容器</span></span><br></pre></td></tr></table></figure><p> </p><figure class="highlight sh"><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">docker <span class="built_in">exec</span> -it 89c5b9c81e74(mysql 容器id) bash</span><br><span class="line"></span><br><span class="line">docker <span class="built_in">exec</span> -it 58ff53c77659 bash</span><br><span class="line"></span><br><span class="line">ps -ef | grep java</span><br></pre></td></tr></table></figure><p><br> mvn package -Dmaven.test.skip=true</p><h4 id="20210427"><a href="#20210427" class="headerlink" title="20210427"></a>20210427</h4><p> 内存 </p><pre><code> 线性地址空间 运行程序和指令的数据</code></pre><p>内核</p><pre><code>kernel 进不了系统 拔出内存条 用橡皮擦 擦完放进去 先加载内核 shell Tomcat Redis 等 </code></pre><p>内核开了保护模式 内核态 用户态 </p><p> 总的来说,就是线程切换或者加锁解锁都是因为需要用户态和内核态的切换,从而导致的开销大。 应用程序的执行需要依托内核提供的资源,包括CPU、存储、IO等,因此内核提供了一个统一的接口, 也就是系统调用,一个应用程序从用户态进入到内核态,就需要执行系统调用。 用户态转化为内核态时,需要执行系统调用,保存现场,也就是保存用户态的寄存器等, 然后去系统调用,并在内核态执行,最后恢复现场。并且由于内核对于用户的不信任, 因此内核需要对用户进行一些额外的检查,这就需要耗费更多的工作了</p><p>prop 获取和 attr获取值区别</p><p>0 标准输入文件 键盘<br>1 标准输出文件 显示器<br>2 标准错误输出文件 显示器</p><p>shell 输出重定向</p><blockquote><p>代表覆盖 >> 代表追加<br>如果不想把命令的输出结果保存到文件,也不想把命令的输出结果显示到屏幕上,干扰命令的执行,可以把命令的所有结果重定向到/dev/null 文件中<br> ls -l &>/dev/null</p></blockquote><p>springboot项目刚导入pom 文件 看是否构建ok 可以在命令行 输入 mvn clean install 进行构建 没问题 则证明项目搭建ok</p><p> 迁入 直接选择控件 分页自适应 不用处理 然后 那个事件冲突了要进行处理 </p><h4 id="20200925"><a href="#20200925" class="headerlink" title="20200925"></a>20200925</h4><p>API Application Programming Interface的缩写 中文意义就是应用程序接口<br>XML 可扩展标记语言,是一种程序与程序之间传输数据的标记语言<br>JSON 英文javascript object notation的缩写,是一种轻量级数据交换格式.</p><p>YML YAML Aint Markup Language 不仅是标记语言 </p><p>RESTFul 具体含义 </p><p>英文Representational State Transfer缩写<br>中文意思是”表现层状态转化”</p><p>curl Linux中访问网址</p><p>curl <a href="http://www.baidu.com/">www.baidu.com</a> 直接访问一个网页</p><p>curl -i <a href="http://www.baidu.com/">www.baidu.com</a> 显示HTTP response的头信息</p><p>curl -v <a href="http://www.baidu.com/">www.baidu.com</a><br>curl -trace output.txt <a href="http://www.baidu.com/">www.baidu.com</a> 显示一次HTTP请求的通信过程</p><p>curl -x GET/POST/PUT/DELETE <a href="http://www.baidu.com/">www.baidu.com</a> CURL 执行各种请求</p><p>ls /dev 查看某一文件下的文件<br>ls -dl /etc -d 查看目录 (不查看里面的内容)</p><p>-S 以文件的大小进行排序 </p><p>ls -lS /boot 查看boot文件夹下的文件并按倒序排序<br>ls -lSh /boot 查看boot文件夹下的文件并按倒序排序 文件单位增加可读性</p><p>初始化显示 :<br> 先内存中做 更新多次 一次性全部再到页面 减少页面更新的次数<br> 内存中更新好了之后 再挂载到页面 </p><p>更新: beforeupdate update</p><p>死亡:<br> 和RN不同 页面还展示 但是不会交互 </p><p>MySQL 安全性<br> grant select on 数据库名.* to 用户名<br> revoke select on 数据库名.* from 用户名</p>]]></content>
<summary type="html"><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="l</summary>
</entry>
<entry>
<title>SQL优化</title>
<link href="http://example.com/2021/03/28/SQL%E4%BC%98%E5%8C%96/"/>
<id>http://example.com/2021/03/28/SQL%E4%BC%98%E5%8C%96/</id>
<published>2021-03-28T03:16:08.000Z</published>
<updated>2021-03-28T03:16:34.649Z</updated>
<content type="html"><![CDATA[<p>MySQL本地路径/data/mysql<br> 索引文件就是func.MYI</p><p>MySql子查询 exists </p><p>select bo.*<br>From boys bo<br>where NOT exists (<br> select boyfriend_id<br> from beauty b<br> where bo.id = b.boyfriend_id<br>}; </p><p>select 查询列表 7 执行顺序<br>from 表 1<br>连接类型 join 表2 2<br>on 连接条件 3<br>where 筛选条件 4<br>group by 分组列表 5<br>having 分组后的筛选 6<br>order by 排序列表 8<br>limit 偏移,条目数 9</p><p>优化第一条<br>1.全职匹配我最爱<br>2.最佳左前缀法则 联合索引要连续<br>3.不在索引上做任何操作(计算 函数(自动or手动)类型转换),会导致索引失效而转向全表扫描<br>4.存储引擎不能使用索引中范围条件右边的列<br> 建一个索引 三行的 第二行使用了范围匹配 那么最后那个就用不上了</p><p>5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *<br>6.mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描<br>7.is null,is not null也无法使用索引<br>8.like 以通配符开头(‘%abc…’)mysql索引失效会变成全表扫描的操作</p><p>9.字符串不加单引号索引失效<br> 结合第三条 不要进行类型转换<br>10.少用 or 用它连接时会索引失效</p><p>定值 范围还是排序,一般order by 是给个范围<br>group by基本上都需要进行排序,会有临时表产生</p><p>一般性建议:<br> 对于 单键索引,尽量选择针对当前query过滤性更好的索引<br> 在选择组合索引的时候,当前query中过滤性最好的字段在索引字段顺序中,位置越靠前越好<br> 在选择组合索引的时候,尽量选择可以能够包含当前query中的where字句中更多字段的索引<br> 尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的</p><p>SQL支持两种方式的排序,FileSort和Index,Index效率高,<br>指MySQL扫描索引本身完成排序.FileSort方式效率较低<br> Order by满足两种情况会使用Index方式排序:<br> Order by语句使用索引最左前列<br> 使用where字句与Order by字句条件排列组合满足索引最左前列</p><p>双路排序:<br> MySQL4.1 之前是使用双路排序,字面意思就是二次扫描磁盘,最终得到数据,<br>读取行指针和orderby列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出<br>从磁盘读取排序字段,在buffer进行排序,再从磁盘取其他字段</p><p>取一批数据,要对磁盘进行了两次扫描,众所周知,I\O是很耗时的,所以在mysql4.1之后,出现了第二种改进的算法,就是单路排序<br>单路排序:<br> 从磁盘读取查询需要的所有列,按照order by列在buffer对它们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,<br>避免了第二次读取数据.并且把随机IO变成了顺序IO,但是它会使用更多的空间.</p><p>结论及引申出的问题:<br> 由于单路是后出的,总体而言好过双路<br> 但是单路有问题<br> 在sort_buffer,方法B比方法A要占用很多空间,因为方法B是把所有字段都取出,所以有可能取出的数据的总大小<br> 超出了sort_buffer 的容量,导致每次只能取sort_buffer容量大小的数据,进行排序(创建tmp文件,多路合并),排完再取<br> sort_buffer容量大小,再排……从而多次IO.</p><pre><code>本来想省一次I\O操作,反而导致了大量的I\O操作反而得不偿失.</code></pre><p>提高Order By的速度<br> 1.Order by时select * 是一个大忌只query需要的字段,这点非常重要.在这里的影响是:<br> 1.1 当Query的字段大小总和小于max_length_for_sort_data而且排序字段不是Text|BLOB类型的时候,会用<br> 改进的算法—–单路排序,否则用老算法—-多路排序.<br> 1.2两种算法的数据都有可能超出sort_buffer的容量,超出之后,会创建tmp文件进行合并排序,导致多次I\O<br> ,但是使用单路排序算法的风险会更大一些,所以要提高sort_buffer_size.</p><pre><code>2.尝试提高sort_buffer_size 不管用那种算法,提高这个参数都会提高效率,当然,要根据系统的能力去提高,因为这个参数是针对每个进程 的3.尝试提高max_lengyh_for_-sort_data 提高这个参数,会增加用改进算法的概率,但是如果设的太高,数据总容量超出sort_buffer_size的概率就增大, 明显症状是高的磁盘I\O活动和低的处理器使用率.</code></pre><p>Group by 实质是先排序后进行分组,遵照索引建的最佳左前缀<br> 当无法使用索引列,增大max_length_for_sort_data参数的设置+ 增大sort_buffer_size参数的设置<br> where高于having,能写在where限定的条件就不要去having限定了.</p><p>MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time<br>值的SQL,则会被记录到慢查询日志中.</p><p>long_query_time的默认值为10,意思是运行10秒以上的语句</p><p>通过慢查询日志来查看哪些SQL超过我们的最大忍耐时间值,然后通过修改慢SQL定义的阈值,结合explain进行全面分析</p><p>默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数.<br>当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志或多或少带来一定的性能影响.慢查询日志支持将日志记录写入文件</p><p>Show Profile </p><p>锁是计算机协调多个进程或线程并发访问某一资源的机制.</p><p>在数据库中,除传统的计算资源(如 CPU RAM I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性 有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素.从这个角度来说,锁对 数据库而言显得尤其重要,也更加复杂.</p><p>lock table mylock read,book write;</p><p>MyISAm在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行增删改操作之前,会自动给涉及的表加写锁.<br>MySQL的表级锁有两种模式<br> 表共享读锁(Table Read Lock)<br> 表独占写锁(Table Write Lock)</p><p>1.对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求.只有当2020/07/31读锁释放后,才会执行其他进程的写操作.<br>2.对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其他进程的读写操作.<br> 简而言之:就是读锁会阻塞写,但是不会阻塞读,而写锁则会把读和写都堵塞. </p><p>Myisam的读写调度是写优先,这也是myisam不适合做写为主表的引擎,因为写锁后,其他线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永远阻塞.</p><p>索引失效行锁变表锁<br> 注意这里的where条件 b=4005 。要记得当前表的b字段是字符串类型,并且加了索引,加了索引之后如果查询条件没加引号会导致失效<br> varchar 类型记得加单引号 不然 本来innodb是行锁 你操作第四行 我操作第九行 互不影响 但是因为操作varchar类型的值没有加单引号 导致行锁变表锁 另一个会话操作另外一行数据时被锁定</p><p>间隙锁危害<br> 什么是间隙锁<br> 当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁,innodb会给出复合条件的已有数据记录的索引项加锁;对于键值在条件范围内但不存在的记录,叫做”间隙(GAP)”,<br> Innodb也会对这个”间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁).<br> 危害<br> 因为Query执行过程中通过过范围查找的话,它会锁定整个范围内所有的索引键值,即使这个键值不存在.<br> 间隙锁有一个比较致命的弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会无辜的锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据.在某些场景下这可能会对性能造成很大的危害.</p><p> 如何锁定一行:<br> begin;<br> select * from test_innodb_lock where a = 8 for update;<br> commit;<br> 锁定某一行后,其他操作会被阻塞,直到锁定的行提交commit.</p><p>行锁总结:<br> innodb存储引擎由于实现了行级锁定,虽然在锁定机制的方面所带来的的性能损耗可能要比表级锁定会要高一些,但是在整体并发处理能力方面要远远优于MyISAM的表级锁定的.当系统并发量较高的时候,innodb的整体性能和MyISAM相比就会有比较明显的优势了.<br> 但是,innodb的行级锁定同样也有其脆弱的一面,当我们使用不当的时候,可能会让innodb的整体性能不仅不能比MyISAM高,甚至可能会更差.</p><p>行锁优化建议:<br> 尽可能让所有数据都通过索引来完成,避免无索引行锁升级为表锁.<br> 合理设计索引,尽可能缩小锁的范围<br> 尽可能较少检索条件,避免间隙锁<br> 尽量控制事务大小,减少锁定资源量和时间长度<br> 尽可能低级别事务隔离.<br>页锁:<br> 开销和加锁时间界于表锁和行锁之间,会出现思索哦;锁定粒度界于表锁和行锁之间,并发度一般.</p><p>主从复制主机my,ini修改:<br> 1:两个MySQL 版本尽可能一致 一个Windows 一个Linux 同一网段 可以ping通<br> 2.1:设置主服务器唯一ID server-id = 1<br> 2.2: 启用二进制日志<br> log-bin = 自己本地的路径/mysqlbin<br> log-err = 自己本地的路径/mysqlerr<br> 2.3:根目录<br> basedir = “自己本地路径到MySQL版本即可”<br> 2.4:临时目录<br> tmpdir = “自己本地路径到MySQL版本即可”<br> 2.5:数据目录<br> datadir = “自己本地路径到/Data/“</p><pre><code>read-only = 0;</code></pre><p>主从复制从机my.cnf修改:<br> 注释掉 server-id =1 打开 server-id =2<br>在Windows主句上建立账户并授权给slave<br> GRANT REPLICATION SLAVE ON <em>.</em> TO ‘zhaomo’ @’从机器数据库ip’ IDENTIFIED BY ‘123456’;<br> flush privileges;</p><p>查看主机状态:<br> show master status;<br> 记下结果中的file和position的值<br>从机命令行:<br> change master to master_host =’ip’,<br> master_user=’zhaomo’<br> master_password=’123456’<br> master_log_file=’mysqlbin.具体数字’,master_log_pos=具体值;</p><pre><code>start slave; show slave status\G 需要看到: Slave_IO_Running: Yes Slave_SQL_Running: Yes第一次配置不成功的话 要在主机上重新查看 show master status; 获取最新的结果中的file和position的值</code></pre>]]></content>
<summary type="html"><p>MySQL本地路径/data/mysql<br> 索引文件就是func.MYI</p>
<p>MySql子查询 exists </p>
<p>select bo.*<br>From boys bo<br>where NOT exists (<br> sele</summary>
</entry>
<entry>
<title>shell</title>
<link href="http://example.com/2021/03/28/shell/"/>
<id>http://example.com/2021/03/28/shell/</id>
<published>2021-03-27T16:52:45.000Z</published>
<updated>2021-03-27T16:53:01.484Z</updated>
<content type="html"><![CDATA[<h1 id="千峰Shell"><a href="#千峰Shell" class="headerlink" title="千峰Shell"></a>千峰Shell</h1><p>程序 解决问题’</p><p>编程 写代码</p><p>shell Linux系统自带的语言</p><p>机器语言 010101</p><p>汇编语言 英文010101</p><p>高级语言 编译型 ====编译 ===计算机 跨平台性能 执行速度快</p><p> 解释型 ====解释器 ===编译 计算机 跨平台性强,执行速度快 虚拟机 python Java PHP Ruby</p><p>1./etc/profile 无论哪个用户登录</p><p>2./etc/bashrc Centos bash执行时</p><p>3.~/.profile bash以login方式执行 /bash_login 图像模式下 将会被读取</p><p>4.~/.bash_login bash登录时执行 </p><p>5.~/.bash_profile bash已login方式登录 时 读取 </p><p>6.~/.bashrc</p><p>7.~/.bash_logout bash登出时 </p><p>环境变量加载</p><p>图形化界面登录时 1 3 </p><p> 图像化界面登录后,打开终端时: 2 6</p><p>文本界面登录时 2 1 5 </p><p>su 用户切换 2 1 5 </p><p> 不加参数 2 6</p><p>bash特性 </p><pre><code>1. 自动补全 功能 2. 历史命令功能 3. 别名 4. 快捷键 5. 前后台作业控制 6. 清除dead会话 7. 输入输出重定向 8. 命令排序 9. 通配符</code></pre><h6 id="快捷键"><a href="#快捷键" class="headerlink" title="快捷键"></a>快捷键</h6><p>Ctrl +A 命令首</p><p>Ctrl +E 命令尾</p><p>Ctrl +C 终止</p><p>Ctrl +U 删除或剪切光标之前</p><p>Ctrl + K 删除或剪切光标之后</p><p>Ctrl + Y 粘贴 Ctrl + U 和 Ctrl +K 的内容</p><p>Ctrl + R 在历史命令中搜索 ,按下Ctrl + R之后,就会出现搜索界面,输入内容在历史命令中搜索 </p><p>Ctrl +D 退出当前终端</p><p>Ctrl + Z 暂停 并放入后台 ,这个快捷键牵扯工作管理内容</p><p>Ctrl +S 暂停屏幕输出 </p><p>Ctrl + Q 恢复屏幕输出</p><p>前后端作业控制</p><p>Linux bash shell 单一终端界面下,经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他任务,所有的上述的这些工作可以在一个bash内实现,在同一个终端窗口完成</p><ol><li><p>前后台作业的定义</p><ol><li>前后台作业实际上对应的的也就是前后台进程,因此也就有对应的pid,在这里统称为作业</li><li>无论是前台作业还是后台作业,两者都来自当前的Shell.是当前shell的子程序</li><li>前台作业:可以由用户参与交互及控制的作业我们称为前台作业</li><li>后台作业: 在内存可以自运行的作业,用户无法参与与交互以及使用 Ctrl + C 来终止,只能通过bg或fg来调用该作业.</li></ol></li><li><p>几个常用的作业命令</p><ol><li>command & 直接让作业进入后台运行 yum -y install sl sl & </li><li>Ctrl + Z 将当前作业切换到后台</li><li>jobs 查看后台作业状态</li><li>fg % n 让后台运行的作业n切换到前台来</li><li>bg % n 让指定的作业n在后台运行</li><li>kill % n 杀死指定的作业</li></ol><p>通过jobs 方式管理作业,当前终端的作业在其他终端不可见</p></li></ol>]]></content>
<summary type="html"><h1 id="千峰Shell"><a href="#千峰Shell" class="headerlink" title="千峰Shell"></a>千峰Shell</h1><p>程序 解决问题’</p>
<p>编程 写代码</p>
<p>shell Linux系统自带</summary>
</entry>
<entry>
<title>IDEA关联一切</title>
<link href="http://example.com/2021/03/28/IDEA%E5%85%B3%E8%81%94%E4%B8%80%E5%88%87/"/>
<id>http://example.com/2021/03/28/IDEA%E5%85%B3%E8%81%94%E4%B8%80%E5%88%87/</id>
<published>2021-03-27T16:51:14.000Z</published>
<updated>2021-03-27T16:51:30.193Z</updated>
<content type="html"><![CDATA[<p>IDEA关联一切</p><p> IDEA 中 Spring 关联 </p><p>Spring Facets </p><p>与数据关联</p><p> </p><p>调试 debug</p><p> F8 逐行运行 </p><p>F9直接跳下个断点 没有就直接执行完 </p><p>shift + Ctrl + F8 </p><p>禁止所有断点 mute Breakpoints 忽略所有断电 然后按 F9</p><p>遍历一个集合 当size 大于3 时 加断点</p><p>Ctrl shift +F8 条件断点 </p><p>运行到指定行 </p><p>debug 控制台直接修改值 </p><p>Ctrl +shift +F9 在加 @Test 内运行 此测试</p><p>shift +F9 再次运行刚才运行的程序 </p><p>文件Copy F5 </p><p>文件移动 F6</p><p>只要文件名 Ctrl + C</p><p>完整路径 CTRL + Shift + C</p><p>CTRL Shift +V 调出剪贴板 </p><p>CTRL + F12 查看本类中方法</p><p>CTRL + H 类继承关系</p><p>CTRL + AlT + H main函数继承关系</p>]]></content>
<summary type="html"><p>IDEA关联一切</p>
<p> IDEA 中 Spring 关联 </p>
<p>Spring Facets </p>
<p>与数据关联</p>
<p> </p>
<p>调试 debug</p>
<p> F8 逐行运行 </p>
<</summary>
</entry>
<entry>
<title>DOS</title>
<link href="http://example.com/2021/03/28/DOS/"/>
<id>http://example.com/2021/03/28/DOS/</id>
<published>2021-03-27T16:47:55.000Z</published>
<updated>2021-03-27T16:49:22.896Z</updated>
<content type="html"><![CDATA[<h6 id="什么是批处理程序"><a href="#什么是批处理程序" class="headerlink" title="什么是批处理程序"></a>什么是批处理程序</h6><pre><code>Batch file Programming 是微软操作系统自带的原生的开发语言,不需要构建任何环境就可以执行的脚本.Batch file 批处理文件使用cmd.exe执行</code></pre><h6 id="如何编辑批处理程序"><a href="#如何编辑批处理程序" class="headerlink" title="如何编辑批处理程序"></a>如何编辑批处理程序</h6><pre><code> 使用任何文本编辑器</code></pre><h6 id="批处理程序可以做什么"><a href="#批处理程序可以做什么" class="headerlink" title="批处理程序可以做什么?"></a>批处理程序可以做什么?</h6><pre><code>使用一系列内置命令进行自动化操作: </code></pre><ol><li>匹配规则删除文件</li><li>新建文件,日志</li><li>甚至可以批量创建计算机病毒</li></ol><p>一个基本的批处理文件 输出hello world</p><figure class="highlight dos"><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">@<span class="built_in">echo</span> off</span><br><span class="line"><span class="built_in">Echo</span> "hello world"</span><br><span class="line"><span class="built_in">pause</span></span><br></pre></td></tr></table></figure><h6 id="算术运算"><a href="#算术运算" class="headerlink" title="算术运算"></a>算术运算</h6><figure class="highlight dos"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">set</span> /a <span class="number">2</span>*<span class="number">3</span> //不区分大小写</span><br></pre></td></tr></table></figure><h6 id="重定向操作运算"><a href="#重定向操作运算" class="headerlink" title="重定向操作运算"></a>重定向操作运算</h6><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">dir //查看当前目录</span><br><span class="line">echo "hello world" > a.txt //将"hello world"输出到当前文件夹下的a.txt 如果本身文件有内容 会覆盖 </span><br><span class="line">type a.txt //查看文件内容 </span><br><span class="line">echo "hello worldss" >> a.txt //将"hello worldss"输出到当前文件夹下的a.txt 如果本身文件有内容 不会覆盖 会追加 </span><br></pre></td></tr></table></figure><h6 id="管道操作运算"><a href="#管道操作运算" class="headerlink" title="管道操作运算 ( | )"></a>管道操作运算 ( | )</h6><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">dir //查看目录下的东西 </span><br><span class="line">dir |find ".txt" //dir 目录下找 .txt结尾的文件</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></pre></td><td class="code"><pre><span class="line">netstat -an //查看本机的所有网络连接 </span><br><span class="line">netstat -an |find "ESTABLISHED" //查看已建立的连接</span><br></pre></td></tr></table></figure><h6 id="基本命令格式介绍"><a href="#基本命令格式介绍" class="headerlink" title="基本命令格式介绍"></a>基本命令格式介绍</h6><pre><code>格式 : 命令 子命令 参数 操作 选项</code></pre><figure class="highlight dos"><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"><span class="built_in">net</span> /? //查看此命令的帮助 等同于 <span class="built_in">net</span> --<span class="built_in">help</span></span><br><span class="line"><span class="built_in">net</span> user test test /add //添加 用户名 test 密码 test的用户 </span><br><span class="line"><span class="built_in">net</span> user test test /<span class="built_in">help</span> // 获取完整的帮助信息 </span><br></pre></td></tr></table></figure><h6 id="批处理文件接收参数"><a href="#批处理文件接收参数" class="headerlink" title="批处理文件接收参数"></a>批处理文件接收参数</h6><figure class="highlight dos"><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">@<span class="built_in">echo</span> off</span><br><span class="line"><span class="built_in">echo</span> %<span class="number">1</span></span><br><span class="line"><span class="built_in">echo</span> %<span class="number">2</span></span><br><span class="line"><span class="built_in">net</span> user %<span class="number">1</span> %<span class="number">2</span> /add</span><br><span class="line"><span class="built_in">pause</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>上面命令存入 1.bat 文件 命令行执行命令 </p><figure class="highlight dos"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span>.bat admin <span class="number">123456</span> //创建 admin 用户 密码 <span class="number">123456</span></span><br></pre></td></tr></table></figure><h6 id="批处理注释符"><a href="#批处理注释符" class="headerlink" title="批处理注释符"></a>批处理注释符</h6><figure class="highlight dos"><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">@<span class="built_in">echo</span> off</span><br><span class="line"><span class="comment">rem program for add new user //rem 后面为注释内容</span></span><br><span class="line"><span class="built_in">echo</span> %<span class="number">1</span></span><br><span class="line"><span class="built_in">echo</span> %<span class="number">2</span></span><br><span class="line"></span><br><span class="line"><span class="comment">rem use: 1.bat username password</span></span><br><span class="line"><span class="built_in">net</span> user %<span class="number">1</span> %<span class="number">2</span> /add</span><br><span class="line"><span class="built_in">pause</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><h6 id="命令行提示符窗口设置"><a href="#命令行提示符窗口设置" class="headerlink" title="命令行提示符窗口设置"></a>命令行提示符窗口设置</h6><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">color ? //查看对应的颜色搭配</span><br><span class="line">color 0a //设置单词命令行窗口颜色</span><br><span class="line"></span><br><span class="line">title /? //查看设置命令行提示窗口标题设置</span><br><span class="line">title cmd //设置命令行提示窗口标题为cmd 原来就是 你可以更改为其他 </span><br><span class="line"></span><br></pre></td></tr></table></figure><h6 id="显示系统日期和时间"><a href="#显示系统日期和时间" class="headerlink" title="显示系统日期和时间"></a>显示系统日期和时间</h6><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">date //显示系统日期 下面要求输入</span><br><span class="line">date /T //只显示出系统日期</span><br><span class="line"></span><br><span class="line">time //显示系统时间 与上面一样</span><br><span class="line">time /T</span><br></pre></td></tr></table></figure><h6 id="启动命令介绍及使用"><a href="#启动命令介绍及使用" class="headerlink" title="启动命令介绍及使用"></a>启动命令介绍及使用</h6><figure class="highlight dos"><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"><span class="built_in">start</span> 启动新的<span class="built_in">CMD</span>窗口</span><br><span class="line"><span class="built_in">start</span> "新窗口" //启动新的DOS 窗口 <span class="built_in">title</span> 为新窗口 </span><br><span class="line"><span class="built_in">start</span> /b <span class="number">1</span>.bat admin <span class="number">123456</span> //创建用户并且这个不打开新窗口</span><br><span class="line"></span><br></pre></td></tr></table></figure><h6 id="调用其他bat文件"><a href="#调用其他bat文件" class="headerlink" title="调用其他bat文件"></a>调用其他bat文件</h6><figure class="highlight dos"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span>.bat //<span class="number">1</span>.bat 里面<span class="built_in">pause</span>前调用 <span class="number">2</span>.bat 但是不能传递参数到<span class="number">2</span>.bat</span><br></pre></td></tr></table></figure><h6 id="任务列表查看命令介绍-本地和远程"><a href="#任务列表查看命令介绍-本地和远程" class="headerlink" title="任务列表查看命令介绍(本地和远程)"></a>任务列表查看命令介绍(本地和远程)</h6><figure class="highlight dos"><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">tasklist /S 远程电脑ip /U 用户名 /P 密码</span><br><span class="line">tasklist /S <span class="number">192</span>.<span class="number">168</span>.<span class="number">0</span>.<span class="number">105</span> /U adminstrator /P zhaomo0823 </span><br><span class="line"></span><br><span class="line">tasklist /Fi "status eq running" //查看正在运行的任务</span><br><span class="line"></span><br><span class="line">tasklist /Fi "pid eq <span class="number">20536</span>" //根据pid查询</span><br><span class="line"></span><br><span class="line">tasklist /FI "pid eq <span class="number">20536</span>" /FO csv ><span class="number">1</span>.txt //将以Pid查询的结果输出到同路径下<span class="number">1</span>.txt中 </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></pre></td><td class="code"><pre><span class="line">TASKLIST </span><br><span class="line">TASKLIST /M // 列出当前使用所给 exe/dll 名称的所有任务。如果没有指定模块名称,显示所有加载的模块。</span><br><span class="line"> </span><br><span class="line">TASKLIST /V /FO CSV //显示详细任务信息并以csv格式显示</span><br><span class="line">TASKLIST /SVC /FO LIST</span><br><span class="line">TASKLIST /APPS /FI "STATUS eq RUNNING"</span><br><span class="line">TASKLIST /M wbem*</span><br><span class="line">TASKLIST /S system /FO LIST</span><br><span class="line">TASKLIST /S system /U 域\用户名 /FO CSV /NH</span><br><span class="line">TASKLIST /S system /U username /P password /FO TABLE /NH</span><br><span class="line">TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"</span><br></pre></td></tr></table></figure><h6 id="任务终止命令"><a href="#任务终止命令" class="headerlink" title="任务终止命令"></a>任务终止命令</h6><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">taskkill /? //查看帮助然后进行操作</span><br><span class="line">taskkill /pid 15236 /T //终止pid 为15236的进程 加参数T 终止指定进程和其子进程</span><br><span class="line"></span><br><span class="line">taskkill /s 远程IP /u 用户名称 /p 密码 /FI "PID eq 860" /F //远程主机杀进程必须加 /F </span><br><span class="line"></span><br><span class="line">tasklist /FI "IMAGENAME eq notepad.exe" // 查找进程notepad </span><br></pre></td></tr></table></figure><p><img src="C:\Users\zhaomo\AppData\Roaming\Typora\typora-user-images\image-20200819224323658.png"></p><h6 id="文件夹结构命令"><a href="#文件夹结构命令" class="headerlink" title="文件夹结构命令"></a>文件夹结构命令</h6><figure class="highlight dos"><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"><span class="built_in">tree</span> //当前路径或指定路径的文件夹以树型展示</span><br><span class="line"><span class="built_in">tree</span> /? //查看帮助 之后使用其他的命令 </span><br></pre></td></tr></table></figure><h6 id="关机命令介绍及使用"><a href="#关机命令介绍及使用" class="headerlink" title="关机命令介绍及使用"></a>关机命令介绍及使用</h6><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">shutdown /? </span><br><span class="line">shutdown /i //关机 添加同一局域网的ip可以进行关机 重启等命令</span><br></pre></td></tr></table></figure><h6 id="计划任务命令"><a href="#计划任务命令" class="headerlink" title="计划任务命令"></a>计划任务命令</h6><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">at /?</span><br><span class="line">SCHTASKS /QUERY /? //改为这个命令 还未学习</span><br></pre></td></tr></table></figure><h6 id="环境变量介绍"><a href="#环境变量介绍" class="headerlink" title="环境变量介绍"></a>环境变量介绍</h6><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">set //获取当前电脑配置的环境变量</span><br><span class="line">echo %OS% //输出操作系统架构</span><br></pre></td></tr></table></figure><figure class="highlight dos"><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">//小脚本</span><br><span class="line">@<span class="built_in">echo</span> off</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="variable">%OS%</span></span><br><span class="line"><span class="built_in">pause</span></span><br></pre></td></tr></table></figure><h6 id="目录浏览命令dir"><a href="#目录浏览命令dir" class="headerlink" title="目录浏览命令dir"></a>目录浏览命令dir</h6><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">dir /a 具体文件或文件夹 </span><br><span class="line">dir /a tools //查看文件夹tools内容</span><br><span class="line">dir /ah //只查看隐藏文件</span><br></pre></td></tr></table></figure><h6 id="目录新建与删除命令"><a href="#目录新建与删除命令" class="headerlink" title="目录新建与删除命令"></a>目录新建与删除命令</h6><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">mkdir test //创建test文件夹</span><br><span class="line">md test //也是创建test文件夹 md 是mkdir 的缩写</span><br><span class="line"></span><br><span class="line">rmdir test //删除文件夹 test rd 是rmdir 的缩写</span><br><span class="line"></span><br><span class="line">rmdir test /s //删除文件夹 让你进行确认</span><br></pre></td></tr></table></figure><p>目录切换命令cd</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">cd </span><br><span class="line">. 和 .. 一个点 当前目录 .. 回到上级目录</span><br></pre></td></tr></table></figure><h6 id="目录重命名"><a href="#目录重命名" class="headerlink" title="目录重命名"></a>目录重命名</h6><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">ren test test1 //重命名 test目录为test1 </span><br></pre></td></tr></table></figure><h6 id="目录拷贝命令"><a href="#目录拷贝命令" class="headerlink" title="目录拷贝命令"></a>目录拷贝命令</h6><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">mkdir test //创建文件夹test</span><br><span class="line">mkdir test1 //创建文件夹test1</span><br><span class="line">cd test1 //切换到test1目录</span><br><span class="line">echo 1111 > 1.txt //在test1目录下创建1.txt 并写入 1111</span><br><span class="line">echo 2222 > 2.txt //在test1目录下创建2.txt 并写入 2222</span><br><span class="line">echo 3333 >> 1.txt //对1.txt 追加写入 3333</span><br><span class="line"></span><br><span class="line">copy test1 test //拷贝test1目录下的1.txt 和 2.txt 到 test目录下</span><br><span class="line"></span><br><span class="line">rd test1 //因为目录不为空 不能删除</span><br><span class="line">rd test1 /s //可以删除 进行确认即可</span><br></pre></td></tr></table></figure><h6 id="文件删除命令"><a href="#文件删除命令" class="headerlink" title="文件删除命令"></a>文件删除命令</h6><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">del 文件名 //删除指定文件</span><br><span class="line">del c:\test\*.txt //删除c盘 test目录下的 所有txt文件</span><br></pre></td></tr></table></figure><h6 id="文件剪贴命令"><a href="#文件剪贴命令" class="headerlink" title="文件剪贴命令"></a>文件剪贴命令</h6><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">move 2.txt test.txt //重命名 2.txt 为test.txt</span><br><span class="line">move c:\1\test.txt c:\2\1.txt //移动1 文件夹的test.txt 到c盘 2 文件夹 并命名为1.txt</span><br></pre></td></tr></table></figure><h6 id="用户操作命令"><a href="#用户操作命令" class="headerlink" title="用户操作命令"></a>用户操作命令</h6><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">net user //查看当前系统用户</span><br><span class="line">net user 用户名称 //显示用户详细信息</span><br><span class="line">net user 用户名 /delete //删除当前用户</span><br><span class="line">net user 用户名 密码 /add // 新增用户</span><br></pre></td></tr></table></figure><h6 id="用户组操作命令"><a href="#用户组操作命令" class="headerlink" title="用户组操作命令"></a>用户组操作命令</h6><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">net localgroup //查看电脑用户组情况</span><br><span class="line">net localgroup administraators 用户名 /add //添加用户到administraators组</span><br><span class="line">net localgroup /? //查看帮助信息进行操作</span><br></pre></td></tr></table></figure><h6 id="网络联通性检测命令"><a href="#网络联通性检测命令" class="headerlink" title="网络联通性检测命令"></a>网络联通性检测命令</h6><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">ping /? //查看命令帮助使用</span><br><span class="line">ping 127.0.0.1 //查看本地网卡是否🆗</span><br></pre></td></tr></table></figure><h6 id="网络连接命令telnet"><a href="#网络连接命令telnet" class="headerlink" title="网络连接命令telnet"></a>网络连接命令telnet</h6><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">telnet /?</span><br><span class="line">nc -l -p 1111 //这个命令意思 ???</span><br></pre></td></tr></table></figure><h6 id="网络路由信息命令"><a href="#网络路由信息命令" class="headerlink" title="网络路由信息命令"></a>网络路由信息命令</h6><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">tracert /?</span><br></pre></td></tr></table></figure><img src="C:\Users\zhaomo\AppData\Roaming\Typora\typora-user-images\image-20200822005027565.png" alt="image-20200822005027565" style="zoom: 67%;" /><h6 id="网络适配器命令"><a href="#网络适配器命令" class="headerlink" title="网络适配器命令"></a>网络适配器命令</h6><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">ipconfig //</span><br><span class="line">ipconfig /all //查看详细信息</span><br><span class="line">ipconfig /renew //重新获取</span><br></pre></td></tr></table></figure><h6 id="ARP信息命令"><a href="#ARP信息命令" class="headerlink" title="ARP信息命令"></a>ARP信息命令</h6><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">arp -a //显示arp表</span><br><span class="line">arp -s // 设置Internet 地址和物理地址绑定 防止动态欺骗</span><br></pre></td></tr></table></figure><h6 id="条件判断结构"><a href="#条件判断结构" class="headerlink" title="条件判断结构"></a>条件判断结构</h6><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 off</span><br><span class="line">rem 演示if else结构 判断字符串是否为规定的字符串</span><br><span class="line"></span><br><span class="line">set v=hello</span><br><span class="line"></span><br><span class="line">if %v%==hello (echo ok) else (echo no)</span><br><span class="line"></span><br><span class="line">pause>nul //将按任意键退出输出为空设备 不显示</span><br></pre></td></tr></table></figure><h6 id="判断文件是否存在"><a href="#判断文件是否存在" class="headerlink" title="判断文件是否存在"></a>判断文件是否存在</h6><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">@echo off</span><br><span class="line"></span><br><span class="line">rem 程序用来判断判断.bat是否存在</span><br><span class="line"></span><br><span class="line">if exist C:\Users\zhaomo\Desktop\3.bat (echo ok) else (echo no) </span><br><span class="line">pause>nul</span><br></pre></td></tr></table></figure><h6 id="判断文件删除"><a href="#判断文件删除" class="headerlink" title="判断文件删除"></a>判断文件删除</h6><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 off</span><br><span class="line">if exist C:\Users\zhaomo\Desktop\1.txt (</span><br><span class="line"> echo file is find!</span><br><span class="line"> del C:\Users\zhaomo\Desktop\1.txt </span><br><span class="line">) else (</span><br><span class="line"> echo file is not find!</span><br><span class="line">)</span><br><span class="line">pause>nul</span><br></pre></td></tr></table></figure><h6 id="循环结构遍历文件夹名称"><a href="#循环结构遍历文件夹名称" class="headerlink" title="循环结构遍历文件夹名称"></a>循环结构遍历文件夹名称</h6><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">for /d %%名称 in (路径/*) do 具体操作</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></pre></td><td class="code"><pre><span class="line">@echo off</span><br><span class="line"></span><br><span class="line">rem 遍历 notes</span><br><span class="line">for /d %%a in (*) do if %%a==aaa rd %%a //遍历当前目录下的文件夹 如果文件夹名等于aaa 删除</span><br><span class="line"></span><br><span class="line">for /d %%a in(*) do echo %%a</span><br><span class="line"></span><br><span class="line">pause>nul</span><br></pre></td></tr></table></figure><h6 id="遍历文件夹下的文件-rename操作"><a href="#遍历文件夹下的文件-rename操作" class="headerlink" title="遍历文件夹下的文件(rename操作 )"></a>遍历文件夹下的文件(rename操作 )</h6><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">@echo off</span><br><span class="line"></span><br><span class="line">rem </span><br><span class="line">for /r "C:\Users\zhaomo\Desktop\111" %%v in (*.bat) do echo %%v //遍历输出</span><br><span class="line"></span><br><span class="line">echo delete all *.bat</span><br><span class="line"></span><br><span class="line">for /r "C:\Users\zhaomo\Desktop\111" %%v in (*.bat) do del %%v //删除</span><br><span class="line"></span><br><span class="line">pause>nul</span><br></pre></td></tr></table></figure><h6 id="遍历数字操作"><a href="#遍历数字操作" class="headerlink" title="遍历数字操作"></a>遍历数字操作</h6><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">@echo off</span><br><span class="line"></span><br><span class="line">rem for test</span><br><span class="line"></span><br><span class="line">for /L %%v in (1,1,20) do echo %%v</span><br><span class="line">pause>nul </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></pre></td><td class="code"><pre><span class="line">@echo off</span><br><span class="line"></span><br><span class="line">rem for test</span><br><span class="line"></span><br><span class="line">for /L %%v in (1,1,20) do ping %1.%%v</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">pause>nul </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">.\8.bat 192.168.0 //vs code中执行 ping 192.168.0.0 ~ 192.168.0.20</span><br></pre></td></tr></table></figure><h6 id="遍历文件内容操作"><a href="#遍历文件内容操作" class="headerlink" title="遍历文件内容操作"></a>遍历文件内容操作</h6><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 off</span><br><span class="line"></span><br><span class="line">rem for test</span><br><span class="line">for /f %%v in (3.bat) do echo %%v</span><br><span class="line"></span><br><span class="line">pause>nul </span><br><span class="line"></span><br><span class="line">遍历3.bat中文件内容 一行行输出 可以判断行数据 进行操作</span><br></pre></td></tr></table></figure><h6 id="Virus脚本分析-目录重复新建"><a href="#Virus脚本分析-目录重复新建" class="headerlink" title="(Virus脚本分析)目录重复新建"></a>(Virus脚本分析)目录重复新建</h6><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">@echo off</span><br><span class="line"></span><br><span class="line">rem cd C:\Documnets and Settings \%username%\Desktop</span><br><span class="line"></span><br><span class="line">cd C:\Documnets and Settings \%username%\Desktop</span><br><span class="line">:loop</span><br><span class="line">md Virus</span><br><span class="line">cd Virus</span><br><span class="line">goto loop</span><br><span class="line"></span><br><span class="line">pause>nul </span><br><span class="line">exit </span><br><span class="line"></span><br><span class="line">如何删除创建的这些文件夹</span><br></pre></td></tr></table></figure><h6 id=""><a href="#" class="headerlink" title=""></a></h6><h6 id="计算机信息展示"><a href="#计算机信息展示" class="headerlink" title="计算机信息展示"></a>计算机信息展示</h6><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">@echo off</span><br><span class="line">echo. > log.txt</span><br><span class="line">echo log File >> log.txt</span><br><span class="line">echo. >> log.txt</span><br><span class="line">echo User :%username% >> log.txt</span><br><span class="line">Date /t >>log.txt</span><br><span class="line">Time /t >>log.txt</span><br><span class="line">echo. >> log.txt</span><br><span class="line">echo Process Ran by %username% >> log.txt</span><br><span class="line">echo. >> log.txt</span><br><span class="line">tasklist >> log.txt</span><br><span class="line">echo. >> log.txt</span><br><span class="line">echo Nectwork Activities >> log.txt</span><br><span class="line">netstat -s >> log.txt</span><br><span class="line">ipconfig /all >> log.txt </span><br><span class="line">exit</span><br><span class="line"></span><br></pre></td></tr></table></figure><h6 id="交互操作介绍"><a href="#交互操作介绍" class="headerlink" title="交互操作介绍"></a>交互操作介绍</h6><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">git@gitee.com:SayMeSlient/dos.git </span><br><span class="line">12.bat 和 13.bat</span><br><span class="line"></span><br></pre></td></tr></table></figure><h6 id="计划执行操作"><a href="#计划执行操作" class="headerlink" title="计划执行操作"></a>计划执行操作</h6><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">@echo off</span><br><span class="line">rem Automate running</span><br><span class="line">at 10:00 AM /every:SU,M,TU,W,TH,F,SA "C:\1.bat"</span><br><span class="line"></span><br><span class="line">exit </span><br></pre></td></tr></table></figure><p>批处理文件转EXE</p><h2 id="Bat-To-EXE-进行转换"><a href="#Bat-To-EXE-进行转换" class="headerlink" title="Bat To EXE 进行转换 "></a>Bat To EXE 进行转换 </h2>]]></content>
<summary type="html"><h6 id="什么是批处理程序"><a href="#什么是批处理程序" class="headerlink" title="什么是批处理程序"></a>什么是批处理程序</h6><pre><code>Batch file Programming 是微软操作系统自带的原生的开发</summary>
</entry>
<entry>
<title>RDB</title>
<link href="http://example.com/2021/03/28/RDB/"/>
<id>http://example.com/2021/03/28/RDB/</id>
<published>2021-03-27T16:47:55.000Z</published>
<updated>2021-03-28T07:14:23.241Z</updated>
<content type="html"><![CDATA[<h1 id="RDB"><a href="#RDB" class="headerlink" title="RDB"></a>RDB</h1><h2 id="Redis-RDB操作"><a href="#Redis-RDB操作" class="headerlink" title="Redis RDB操作"></a>Redis RDB操作</h2><h3 id="dump-rdb-文件"><a href="#dump-rdb-文件" class="headerlink" title="dump.rdb 文件"></a>dump.rdb 文件</h3><pre><code>修改配置文件的 save 参数设置 save 60 5 # 一分钟修改五个值删除原来的dump.rdb 文件 然后再写入测试 恢复的话: 只需要将rdb文件放在redis启动目录就可以了,redis确定的时候会自动检查dump.rdb文件,恢复其中的数据查看需要存在的位置127.0.0.1:6379> config get dir1) "dir"2) "/usr/local/bin" #如果在这个目录下存在dump.rdb 文件,启动就会自动恢复127.0.0.1:6379> 优点: 1. 适合大规模的数据恢复! dump.rd 2. 对数据的完整性要求不高.缺点: 1. 需要一定的时间间隔进行进程操作!如果redis意外宕机了,这个最后一次修改数据就没有了. 2. fork进程的时候,会占用一定的内容空间.</code></pre><p><br> 生产环境一般会进行备份</p><h2 id="AOF"><a href="#AOF" class="headerlink" title="AOF"></a>AOF</h2><p> <strong>将我们所有的命令都记录下来,类似 history, 恢复的时候就把这个文件全部在执行一遍.</strong><br> </p><pre><code>以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作.AOF 保存的是appendonly.aof文件配置文件配置 appendonly no # 默认不开启的 手动开启 appendfsync everysec # 每秒持久化只需要将appendonly 改为yes 即可重启redis 即可以生效 生成了 appendonly.aof文件设置几个值 然后查看 就是一个日志文件aof文件有问题 不能启动redis,需要修复这个文件redis工具 可以使用redis-check-aof --fix 修复后 就可以重启恢复了 优点: 1.每一次修改都同步,文件的完整会更加好 2.每秒同步一次,可能会丢失一秒的数据. 3.从不同步,效率最高的!缺点: 1.相对于数据文件来说.aof 远远大于rdb ,修复速度也比rdb 慢. 2.aof运行效率也比rdb慢,所以我们redis配置就是rdb持久化而不是AOF. 重写规则说明: 如果aof文件大于64M,太大了!fork一个 新的进程来将我们的文件进行重写 AOF 默认就是文件的无限追加,文件会越来越大</code></pre><p><br> rdb一般在从机上玩 save 900 1 900秒之内更改了一个值<br> aof 一般不超过两秒的数据丢失 </p><pre><code>主从同时宕机 就会把所有数据丢掉了 </code></pre><p><br><br><br><br><br><br><br> FOMO<br> fear of missing out<br> 低参与度 又想参与每件事情的心理</p><p><br><br><br><br><br><br><br> </p>]]></content>
<summary type="html"><h1 id="RDB"><a href="#RDB" class="headerlink" title="RDB"></a>RDB</h1><h2 id="Redis-RDB操作"><a href="#Redis-RDB操作" class="headerlink" title=</summary>
</entry>
<entry>
<title>Go</title>
<link href="http://example.com/2021/03/28/Go/"/>
<id>http://example.com/2021/03/28/Go/</id>
<published>2021-03-27T16:31:01.000Z</published>
<updated>2021-03-27T16:31:33.184Z</updated>
<content type="html"><![CDATA[<h1 id="Go语言学习"><a href="#Go语言学习" class="headerlink" title="Go语言学习"></a>Go语言学习</h1><h6 id="李文周-www-liwenzhou-com"><a href="#李文周-www-liwenzhou-com" class="headerlink" title="李文周 www.liwenzhou.com"></a>李文周 <a href="http://www.liwenzhou.com/">www.liwenzhou.com</a></h6><h6 id="使用vs-code-插件"><a href="#使用vs-code-插件" class="headerlink" title="使用vs code 插件"></a>使用vs code 插件</h6><p> 看老男孩的视频 又直接导入到 go安装目录下 bin 目录下</p><h6 id="编译"><a href="#编译" class="headerlink" title="编译"></a>编译</h6><p>1.在项目目录下执行go build</p><p>2.在其他路径执行go build ,需要在后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存在当前目录下)</p><p>3.go build -o hello.exe //-o 设置build编译之后的名称</p><p>go run //像执行脚本文件一样执行go代码</p><p> go install //分为两步 先编译得到一个可执行文件 第二步 将可执行文件拷贝到 <code>GOPATH/bin</code></p><h6 id="Windows平台"><a href="#Windows平台" class="headerlink" title="Windows平台"></a>Windows平台</h6><p> 交叉编译(在Windows平台编译一个可以在Linux平台执行的可执行文件)</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">set CGO_ENABLED = 0 //禁用CGO</span><br><span class="line">set GOOS = linux //目标平台是Linux</span><br><span class="line">set GOARCH = amd64 //目标处理器架构是amd64</span><br></pre></td></tr></table></figure><p>执行 <code>go build</code></p><p>异步方法 调用<br>自定义注解 实现excel 导入导出 中文 </p><p>aop 实现日志管理</p><p>finally HashMap 设置key </p>]]></content>
<summary type="html"><h1 id="Go语言学习"><a href="#Go语言学习" class="headerlink" title="Go语言学习"></a>Go语言学习</h1><h6 id="李文周-www-liwenzhou-com"><a href="#李文周-www-liwenzho</summary>
</entry>
<entry>
<title>Hello World</title>
<link href="http://example.com/2020/10/22/hello-world/"/>
<id>http://example.com/2020/10/22/hello-world/</id>
<published>2020-10-21T16:06:57.193Z</published>
<updated>2020-10-21T16:06:57.193Z</updated>
<content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
<summary type="html"><p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for</summary>
</entry>
</feed>