-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlocal-search.xml
184 lines (88 loc) · 349 KB
/
local-search.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
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>Powershell基础和应用</title>
<link href="/2022/09/24/powershell%E5%9F%BA%E7%A1%80%E5%92%8C%E5%BA%94%E7%94%A8/"/>
<url>/2022/09/24/powershell%E5%9F%BA%E7%A1%80%E5%92%8C%E5%BA%94%E7%94%A8/</url>
<content type="html"><![CDATA[<h1 id="书"><a href="#书" class="headerlink" title="书"></a>书</h1><p><img src="2022-09-23-10-40-23-image.png" alt="2022-09-23-10-40-23-image"></p><p>这本书,重点是教会我们如何 通过自学掌握所有这些可以通过 PowerShell 操作的服务器级别产品。Exchange Server、SQL Server、System Center</p><p>而不是告诉我们每个产品怎么使用</p><h1 id="自学的技巧"><a href="#自学的技巧" class="headerlink" title="自学的技巧"></a>自学的技巧</h1><p>不要害怕失败,希望你有一台虚拟机,然后在虚拟里实验 PowerShell。学生们经常会问类似这类问题:“如果我做了这个和那个,会发生什么?”我们的回答往往是“不知道,自己试试”。在虚拟机做实验是一个好办法,最坏的情况也只不过是将虚拟机回滚到某个快照点,对吧?所以无论做什么,都请试一试。</p><p>不要害怕使用帮助并确保阅读示例。我们不止一次强调过这一点,但好像没人愿意听。我们仍然会看到很多学生在我们眼皮底下使用 Google 寻找示例。为什么那么害怕帮助文档?如果你都愿意读别人的博客了,为什么不先尝试在帮助文档中阅读示例?</p><p>请注意,在屏幕上,每一点信息可能都非常重要——请不要跳过不是你目前正在寻找的信息。你很容易这样做,但请不要这么做。要查看每一部分信息,并尝试发现该信息的用处,以及使用该信息能够推算出什么。</p><p>如果尝试一种方法不奏效,不要挠墙——请尝试其他方法。</p><h1 id="终端"><a href="#终端" class="headerlink" title="终端"></a>终端</h1><p><img src="2022-09-23-10-46-59-image.png" alt="2022-09-23-10-46-59-image"></p><p><code>PS C:\Windows\system32></code></p><p>PS: powershell, 后面是当前工作目录</p><h1 id="命令"><a href="#命令" class="headerlink" title="命令"></a>命令</h1><h2 id="认识命令"><a href="#认识命令" class="headerlink" title="认识命令"></a>认识命令</h2><p>powershell 中叫 cmdlet,例如一个简单的列出当前目录下的所有文件</p><figure class="highlight powershell"><table><tr><td class="gutter"><div class="code-wrapper"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></div></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">PS</span> C:\Windows\system32> <span class="hljs-built_in">cd</span> c:/<br><span class="hljs-built_in">PS</span> C:\> <span class="hljs-built_in">ls</span><br><br><br> 目录: C:\<br><br><br>Mode LastWriteTime Length Name<br><span class="hljs-literal">----</span> <span class="hljs-literal">-------------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">----</span><br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">9</span>/<span class="hljs-number">19</span> <span class="hljs-number">9</span>:<span class="hljs-number">22</span> <span class="hljs-number">2020</span><span class="hljs-literal">-09-16-myblog</span><br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">4</span>/<span class="hljs-number">29</span> <span class="hljs-number">13</span>:<span class="hljs-number">48</span> pcwlenv<br>d<span class="hljs-literal">-r---</span> <span class="hljs-number">2022</span>/<span class="hljs-number">9</span>/<span class="hljs-number">21</span> <span class="hljs-number">8</span>:<span class="hljs-number">43</span> Program Files<br>d<span class="hljs-literal">-r---</span> <span class="hljs-number">2022</span>/<span class="hljs-number">7</span>/<span class="hljs-number">14</span> <span class="hljs-number">9</span>:<span class="hljs-number">30</span> Program Files (x86)<br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">7</span>/<span class="hljs-number">19</span> <span class="hljs-number">8</span>:<span class="hljs-number">34</span> Temp<br>d<span class="hljs-literal">-r---</span> <span class="hljs-number">2022</span>/<span class="hljs-number">9</span>/<span class="hljs-number">21</span> <span class="hljs-number">12</span>:<span class="hljs-number">27</span> Users<br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">7</span>/<span class="hljs-number">29</span> <span class="hljs-number">8</span>:<span class="hljs-number">21</span> Windows<br><span class="hljs-literal">-a----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">4</span>/<span class="hljs-number">29</span> <span class="hljs-number">13</span>:<span class="hljs-number">42</span> <span class="hljs-number">0</span> dcdspdbg.log<br><span class="hljs-literal">-a----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">7</span>/<span class="hljs-number">12</span> <span class="hljs-number">11</span>:<span class="hljs-number">31</span> <span class="hljs-number">12288</span> DumpStack.log<br><span class="hljs-literal">-a----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">8</span>/<span class="hljs-number">11</span> <span class="hljs-number">12</span>:<span class="hljs-number">56</span> <span class="hljs-number">2637</span> priv.pfx<br><br><br><span class="hljs-built_in">PS</span> C:\> <span class="hljs-built_in">ls</span> <span class="hljs-literal">-name</span><br><span class="hljs-number">2020</span><span class="hljs-literal">-09-16-myblog</span><br>pcwlenv<br>Program Files<br>Program Files (x86)<br>Temp<br>Users<br>Windows<br>dcdspdbg.log<br>DumpStack.log<br>priv.pfx<br></code></pre></td></tr></table></figure><p>或者</p><figure class="highlight powershell"><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></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">PS</span> C:\> <span class="hljs-built_in">Get-ChildItem</span><br><br><br> 目录: C:\<br><br><br>Mode LastWriteTime Length Name<br><span class="hljs-literal">----</span> <span class="hljs-literal">-------------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">----</span><br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">9</span>/<span class="hljs-number">19</span> <span class="hljs-number">9</span>:<span class="hljs-number">22</span> <span class="hljs-number">2020</span><span class="hljs-literal">-09-16-myblog</span><br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">4</span>/<span class="hljs-number">29</span> <span class="hljs-number">13</span>:<span class="hljs-number">48</span> pcwlenv<br>d<span class="hljs-literal">-r---</span> <span class="hljs-number">2022</span>/<span class="hljs-number">9</span>/<span class="hljs-number">21</span> <span class="hljs-number">8</span>:<span class="hljs-number">43</span> Program Files<br>d<span class="hljs-literal">-r---</span> <span class="hljs-number">2022</span>/<span class="hljs-number">7</span>/<span class="hljs-number">14</span> <span class="hljs-number">9</span>:<span class="hljs-number">30</span> Program Files (x86)<br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">7</span>/<span class="hljs-number">19</span> <span class="hljs-number">8</span>:<span class="hljs-number">34</span> Temp<br>d<span class="hljs-literal">-r---</span> <span class="hljs-number">2022</span>/<span class="hljs-number">9</span>/<span class="hljs-number">21</span> <span class="hljs-number">12</span>:<span class="hljs-number">27</span> Users<br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">7</span>/<span class="hljs-number">29</span> <span class="hljs-number">8</span>:<span class="hljs-number">21</span> Windows<br><span class="hljs-literal">-a----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">4</span>/<span class="hljs-number">29</span> <span class="hljs-number">13</span>:<span class="hljs-number">42</span> <span class="hljs-number">0</span> dcdspdbg.log<br><span class="hljs-literal">-a----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">7</span>/<span class="hljs-number">12</span> <span class="hljs-number">11</span>:<span class="hljs-number">31</span> <span class="hljs-number">12288</span> DumpStack.log<br><span class="hljs-literal">-a----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">8</span>/<span class="hljs-number">11</span> <span class="hljs-number">12</span>:<span class="hljs-number">56</span> <span class="hljs-number">2637</span> priv.pfx<br><br><br><span class="hljs-built_in">PS</span> C:\> <span class="hljs-built_in">Get-ChildItem</span> <span class="hljs-literal">-Name</span><br><span class="hljs-number">2020</span><span class="hljs-literal">-09-16-myblog</span><br>pcwlenv<br>Program Files<br>Program Files (x86)<br>Temp<br>Users<br>Windows<br>dcdspdbg.log<br>DumpStack.log<br>priv.pfx<br></code></pre></td></tr></table></figure><p>注意,这里,可以发现命令<code>ls</code> 和 <code>Get-ChildItem</code>是一样的作用,这里和 Linux 不一样</p><ol><li><p>windows 中,为了兼容 linux 命令,部分与 linux 一样的命令, 例如 ls, 只是 windows 命令的别名(windows 别名只能引用命令本身,不能引用命令+选项。ls 只能对应 get-childitem)</p></li><li><p>windows 中, 字符不区分大小写。LS, Ls, lS, 均是 ls 命令。get-childitem 还是 Get-CHILDITEM 均一样。为了方便书写,统一小写。</p></li><li><p>windows 中也支持 tab 键补全命令,选项,目录路径</p></li><li><p>windows 中终端也支持 ctrl + a, ctrl + e, ctrl + l。需要打开终端功能。<code>Set-PSReadLineOption -EditMode emacs</code>, 这个命令在会话中执行只是当前会话有效,终端重启之后就无效了,所以需要写在配置文件中,windows 在会话启动时,会读取的配置文件. <code>$PSHOME -> $PROFILE</code></p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-variable">$PSHOME</span><br>profile.ps1<br>Microsoft.PowerShell_profile.ps1<br><br>(<span class="hljs-built_in">SPLIT-PATH</span> <span class="hljs-variable">$PROFILE</span>)<br>profile.ps1<br>Microsoft.PowerShell_profile.ps1<br><br><span class="hljs-comment"># 验证方式</span><br><br><span class="hljs-comment">## 会话启动时,定义变量</span><br><br> <span class="hljs-built_in">set-content</span> <span class="hljs-variable">$PSHOME</span>/Microsoft.PowerShell_profile.ps1 <span class="hljs-literal">-value</span> <span class="hljs-string">"'PSHOME MPS'`n[System.Environment]::SetEnvironmentVariable('PATH',`$Env:PATH+';;C:\Users\slc\apps\go-ipfs-v0.12.2\go-ipfs')"</span><br><br><span class="hljs-comment">## 会话启动时,定义别名。</span><br><br> <span class="hljs-built_in">set-content</span> <span class="hljs-variable">$PSHOME</span>/profile.ps1 <span class="hljs-literal">-value</span> <span class="hljs-string">"'PSHOME PS'`nNew-Alias ifconfig ipconfig"</span><br><br><span class="hljs-comment">## 会话启动时,定义变量</span><br><br> <span class="hljs-built_in">set-content</span> <span class="hljs-string">"<span class="hljs-variable">$</span>(Split-Path <span class="hljs-variable">$PROFILE</span> -Parent)/Microsoft.PowerShell_profile.ps1"</span> <span class="hljs-literal">-value</span> <span class="hljs-string">"'profile MPS'`n[System.Environment]::SetEnvironmentVariable('PATH',`$Env:PATH+';;C:\Users\slc\apps\go-ipfs-v0.12.2\go-ipfs')"</span><br><br><span class="hljs-comment">## 会话启动时,也可以定义PS提示符变量,运行命令等等</span><br><br> <span class="hljs-built_in">set-content</span> <span class="hljs-string">"<span class="hljs-variable">$</span>(Split-Path <span class="hljs-variable">$PROFILE</span> -Parent)/profile.ps1"</span> <span class="hljs-literal">-value</span> <span class="hljs-string">"'profile PS'`nSet-PSReadLineOption -EditMode emacs`nfunction prompt() { (get-date).ToShortTimeString() + ' [PS] ' + (Get-Location) + ' :> ' }`nNew-NetFirewallRule -DisplayName '9000 django test' -Direction Inbound -LocalPort 9000 -Protocol tcp -Action Allow`n"</span><br></code></pre></td></tr></table></figure><p><img src="2022-09-23-11-16-12-image.png" alt="2022-09-23-11-16-12-image"></p></li><li><p>由 4 中给配置文件,会话启动前会加载一些文件.</p></li></ol><p>我们配置配置环境变量时,引用当前命令读的环境变量不是<code>$path</code> 而是<code>$env:path</code></p><p>我们在文本中,需要换行,linux 是<code>\n, \e, \t</code> 。windows 对应</p><figure class="highlight powershell"><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><code class="hljs powershell">`n<br>`e<br>`t<br>...<br></code></pre></td></tr></table></figure><p>从以上示例,我们可以看出 windows 命令的格式</p><p><code>Get-ChildItem -Name</code></p><ul><li><p>命令: get-childitem, 动词-名词</p><ul><li>获取 windows 支持哪些动作<code>get-verb</code>, 常用的动作就是 C (new) U (set) R (get) D (remove)</li></ul></li><li><p>选项: -name, 帮助中获取</p></li></ul><h2 id="命令帮助"><a href="#命令帮助" class="headerlink" title="命令帮助"></a>命令帮助</h2><p>如何知道 windows 上有哪些命令,<code>show-command</code>,会显示所有模块所有命令。</p><p>搜索命令, powershell 有文档维护自己的所有命令和模块对应的命令。即使你的系统没有安装这个命令,我们也可以搜索到命令及帮助。</p><p>首先,一个系统我们需要安装帮助文件,或者是系统的帮助文件是需要定时更新的。</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Update-Help</span><br></code></pre></td></tr></table></figure><blockquote><p>帮助可以自己手工联网更新,也可以离线更新。</p></blockquote><p>更新帮助后,我们可以搜索一些命令相关的帮助的主题。例如:</p><blockquote><p>user, privilege 权限,process 进程,net 网络,常用的关键字</p></blockquote><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-comment"># 进程相关</span><br><span class="hljs-number">12</span>:<span class="hljs-number">13</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> help *<span class="hljs-keyword">process</span>*<br><br>Name Category Module Synopsis<br><span class="hljs-literal">----</span> <span class="hljs-literal">--------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">--------</span><br><span class="hljs-built_in">Enter-PSHostProcess</span> Cmdlet Microsoft.PowerShell.Core Connects to and enters into an interactive session with a local <span class="hljs-keyword">process</span>.<br><span class="hljs-built_in">Exit-PSHostProcess</span> Cmdlet Microsoft.PowerShell.Core Closes an interactive session with a local <span class="hljs-keyword">process</span>.<br><span class="hljs-built_in">Get-PSHostProcessInfo</span> Cmdlet Microsoft.PowerShell.Core Gets <span class="hljs-keyword">process</span> information about the PowerShell host.<br><span class="hljs-built_in">Debug-Process</span> Cmdlet Microsoft.PowerShell.M... Debugs one or more processes running on the local computer.<br><span class="hljs-built_in">Get-Process</span> Cmdlet Microsoft.PowerShell.M... Gets the processes that are running on the local computer or a remote computer.<br><span class="hljs-built_in">Start-Process</span> Cmdlet Microsoft.PowerShell.M... Starts one or more processes on the local computer.<br><span class="hljs-built_in">Stop-Process</span> Cmdlet Microsoft.PowerShell.M... Stops one or more running processes.<br><span class="hljs-built_in">Wait-Process</span> Cmdlet Microsoft.PowerShell.M... Waits <span class="hljs-keyword">for</span> the processes to be stopped before accepting more input.<br><span class="hljs-built_in">Get-AppvVirtualProcess</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">AppvClient</span> ...</span><br><span class="hljs-built_in">Start-AppvVirtualProcess</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">AppvClient</span> ...</span><br><span class="hljs-built_in">ConvertTo-ProcessMitigationPolicy</span> Cmdlet ProcessMitigations <span class="hljs-built_in">ConvertTo-ProcessMitigationPolicy</span>...<br><span class="hljs-built_in">Get-ProcessMitigation</span> Cmdlet ProcessMitigations <span class="hljs-built_in">Get-ProcessMitigation</span>...<br><span class="hljs-built_in">Set-ProcessMitigation</span> Cmdlet ProcessMitigations <span class="hljs-built_in">Set-ProcessMitigation</span>...<br></code></pre></td></tr></table></figure><ul><li><p>name, process 相关的命令</p></li><li><p>category,命令类型。windows 中一般有 cmdlet 命令,函数命令,….</p><ul><li><p>cmdlet 命令,原生的 ps 命令,由.net 编写,google 搜索 cmdlet 关键字,返回结果主要关于 powershell 的。</p></li><li><p>Function 函数,其实使用方式和 cmdlet 命令一样,只是不由.net 编写,而且 powershell 自己的脚本语言编写。</p></li><li><p>Application: windows 的应用程序</p></li></ul></li><li><p>Module,命令属于哪些模块</p><ul><li><p>查看所有模块 <code>Get-Module -ListAvailable</code> ,查看安装的模块<code>Get-Module</code></p><p>命令是属于模块的,所以安装的模块对应的命令就是我们可以使用的 cmdlet 命令。</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">12</span>:<span class="hljs-number">48</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Module</span><br><br>ModuleType Version Name ExportedCommands<br><span class="hljs-literal">----------</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">----------------</span><br>Manifest <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management {<span class="hljs-built_in">Add-Computer</span>, <span class="hljs-built_in">Add-Content</span>, <span class="hljs-built_in">Checkpoint-Computer</span>, <span class="hljs-built_in">Clear-Content</span>...}<br>Manifest <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Utility {<span class="hljs-built_in">Add-Member</span>, <span class="hljs-built_in">Add-Type</span>, <span class="hljs-built_in">Clear-Variable</span>, <span class="hljs-built_in">Compare-Object</span>...}<br>Manifest <span class="hljs-number">2.0</span>.<span class="hljs-number">0.0</span> NetSecurity {<span class="hljs-built_in">Get-DAPolicyChange</span>, <span class="hljs-built_in">New-NetIPsecAuthProposal</span>, <span class="hljs-built_in">New-NetIPsecMainModeCryptoProposal</span>, <span class="hljs-built_in">New-NetIPsecQuickModeCryptoProposal</span>...}<br>Script <span class="hljs-number">2.0</span>.<span class="hljs-number">0</span> PSReadline {<span class="hljs-built_in">Get-PSReadLineKeyHandler</span>, <span class="hljs-built_in">Get-PSReadLineOption</span>, <span class="hljs-built_in">Remove-PSReadLineKeyHandler</span>, <span class="hljs-built_in">Set-PSReadLineKeyHandler</span>...}<br></code></pre></td></tr></table></figure><p>12:49 [PS] C:\Windows\system32 :> Get-Command -Module Microsoft.PowerShell.Management</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs"><br></code></pre></td></tr></table></figure></li></ul></li><li><p>Synops,就是描述。</p></li></ul><p>现在我们可以看到,动作及命令,我们现在需要看看有哪些进程</p><figure class="highlight powershell"><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><code class="hljs powershell"> <span class="hljs-built_in">Get-Process</span><br> Handles NPM(K) PM(K) WS(K) CPU(s) Id <span class="hljs-built_in">SI</span> ProcessName<br><span class="hljs-literal">-------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">-----</span> <span class="hljs-literal">-----</span> <span class="hljs-literal">------</span> <span class="hljs-literal">--</span> <span class="hljs-literal">--</span> <span class="hljs-literal">-----------</span><br> <span class="hljs-number">424</span> <span class="hljs-number">33</span> <span class="hljs-number">18192</span> <span class="hljs-number">21976</span> <span class="hljs-number">14.94</span> <span class="hljs-number">12280</span> <span class="hljs-number">1</span> <span class="hljs-number">360</span>EntMsgCenter<br> <span class="hljs-number">3167</span> <span class="hljs-number">235</span> <span class="hljs-number">448632</span> <span class="hljs-number">73704</span> <span class="hljs-number">571.95</span> <span class="hljs-number">9948</span> <span class="hljs-number">1</span> <span class="hljs-number">360</span>tray<br> <span class="hljs-number">284</span> <span class="hljs-number">14</span> <span class="hljs-number">15136</span> <span class="hljs-number">19204</span> <span class="hljs-number">93.17</span> <span class="hljs-number">5236</span> <span class="hljs-number">0</span> audiodg<br> <span class="hljs-number">345</span> <span class="hljs-number">26</span> <span class="hljs-number">29412</span> <span class="hljs-number">32084</span> <span class="hljs-number">0.19</span> <span class="hljs-number">5172</span> <span class="hljs-number">1</span> CefSharp.BrowserSubprocess<br> <span class="hljs-number">481</span> <span class="hljs-number">32</span> <span class="hljs-number">124300</span> <span class="hljs-number">38740</span> <span class="hljs-number">0.22</span> <span class="hljs-number">12404</span> <span class="hljs-number">1</span> CefSharp.BrowserSubprocess<br></code></pre></td></tr></table></figure><p>如何拿到 notepad 相关的进程?</p><p>linux 中,<code>ps -ef | grep get-process</code> ,对于过滤,我们使用文本处理三剑客 grep/awk/sed,进行过滤处理,即可。 linux 的输出 是文本。</p><p>而 windows 中,过滤,我们不需要这些文本处理工具。他的输出是一个个对象的集合。所以以上 get-process 的输出其实是一行行对象(不看第 1 列),列就是对象的属性。所以过滤其实就是过滤对象的属性值。</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-comment"># 先启动一个notepad, powershell中运行</span><br>notepad<br><br><span class="hljs-comment"># 过滤对象的属性,这里的name,就是对象的属性。 ?表示匹配, name属性。-match正则匹配。notepad是值</span><br><span class="hljs-number">12</span>:<span class="hljs-number">18</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> | ? name <span class="hljs-operator">-Match</span> notepad<br><br>Handles NPM(K) PM(K) WS(K) CPU(s) Id <span class="hljs-built_in">SI</span> ProcessName<br><span class="hljs-literal">-------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">-----</span> <span class="hljs-literal">-----</span> <span class="hljs-literal">------</span> <span class="hljs-literal">--</span> <span class="hljs-literal">--</span> <span class="hljs-literal">-----------</span><br> <span class="hljs-number">684</span> <span class="hljs-number">35</span> <span class="hljs-number">47252</span> <span class="hljs-number">65960</span> <span class="hljs-number">0.48</span> <span class="hljs-number">17848</span> <span class="hljs-number">1</span> Notepad<br> <span class="hljs-number">676</span> <span class="hljs-number">35</span> <span class="hljs-number">47476</span> <span class="hljs-number">60208</span> <span class="hljs-number">1.27</span> <span class="hljs-number">21288</span> <span class="hljs-number">1</span> Notepad<br><br><br><span class="hljs-comment"># 如何知道这1行行对象的属性有哪些 ?</span><br><span class="hljs-number">12</span>:<span class="hljs-number">19</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> | <span class="hljs-built_in">gm</span><br><br><br> TypeName:System.Diagnostics.Process<br><br>Name MemberType Definition<br><span class="hljs-literal">----</span> <span class="hljs-literal">----------</span> <span class="hljs-literal">----------</span><br>Handles AliasProperty Handles = Handlecount<br>Name AliasProperty Name = ProcessName<br></code></pre></td></tr></table></figure><p>过滤某个进程,可以按对象过滤,还有一种方式,就是命令自带的过滤。一般 windows 命令均会自带过滤的参数。</p><p>如何看命令的选项及参数?</p><figure class="highlight powershell"><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></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-comment"># 命令的帮助</span><br><span class="hljs-comment"># help command</span><br><span class="hljs-number">12</span>:<span class="hljs-number">20</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> help <span class="hljs-built_in">Get-Process</span><br><br>名称<br> <span class="hljs-built_in">Get-Process</span><br><br>摘要<br> Gets the processes that are running on the local computer or a remote computer.<br><br><br>语法<br> <span class="hljs-built_in">Get-Process</span> [[-<span class="hljs-type">Name</span>] <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">ComputerName</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">FileVersionInfo</span>] [-<span class="hljs-type">Module</span>] [<<span class="hljs-type">CommonParameters</span>>]<br><br> <span class="hljs-built_in">Get-Process</span> [-<span class="hljs-type">ComputerName</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">FileVersionInfo</span>] <span class="hljs-literal">-Id</span> <System.Int32[]> [-<span class="hljs-type">Module</span>] [<<span class="hljs-type">CommonParameters</span>>]<br><br> <span class="hljs-built_in">Get-Process</span> [-<span class="hljs-type">ComputerName</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">FileVersionInfo</span>] <span class="hljs-literal">-InputObject</span> <System.Diagnostics.Process[]> [-<span class="hljs-type">Module</span>] [<<span class="hljs-type">CommonParameters</span>>]<br><br> <span class="hljs-built_in">Get-Process</span> <span class="hljs-literal">-Id</span> <System.Int32[]> <span class="hljs-literal">-IncludeUserName</span> [<<span class="hljs-type">CommonParameters</span>>]<br><br> <span class="hljs-built_in">Get-Process</span> [[-<span class="hljs-type">Name</span>] <<span class="hljs-type">System.String</span>[]>] <span class="hljs-literal">-IncludeUserName</span> [<<span class="hljs-type">CommonParameters</span>>]<br><br> <span class="hljs-built_in">Get-Process</span> <span class="hljs-literal">-IncludeUserName</span> <span class="hljs-literal">-InputObject</span> <System.Diagnostics.Process[]> [<<span class="hljs-type">CommonParameters</span>>]<br><br><br>说明<br> The `Get<span class="hljs-literal">-Process</span>` cmdlet gets the processes on a local or remote computer.<br><br> Without parameters, this cmdlet gets all of the processes on the local computer. You can also specify a particular <span class="hljs-keyword">process</span> by <span class="hljs-keyword">process</span> name or <span class="hljs-keyword">process</span> ID (PID) or pass a <span class="hljs-keyword">process</span> object through the pipeline to this cmdlet.<br><br> By default, this cmdlet returns a <span class="hljs-keyword">process</span> object that has detailed information about the <span class="hljs-keyword">process</span> and supports methods that let you <span class="hljs-built_in">start</span> and stop the <span class="hljs-keyword">process</span>. You can also use the parameters of the `Get<span class="hljs-literal">-Process</span>` cmdlet to get file v<br> ersion information <span class="hljs-keyword">for</span> the program that runs <span class="hljs-keyword">in</span> the <span class="hljs-keyword">process</span> and to get the modules that the <span class="hljs-keyword">process</span> loaded.<br><br><br>相关链接<br> Online Version: https://docs.microsoft.com/powershell/module/microsoft.powershell.management/<span class="hljs-built_in">get-process</span>?view=powershell<span class="hljs-literal">-5</span>.<span class="hljs-number">1</span>&WT.mc_id=<span class="hljs-built_in">ps</span><span class="hljs-literal">-gethelp</span><br> <span class="hljs-built_in">Debug-Process</span><br> <span class="hljs-built_in">Get-Process</span><br> <span class="hljs-built_in">Start-Process</span><br> <span class="hljs-built_in">Stop-Process</span><br> <span class="hljs-built_in">Wait-Process</span><br><br>备注<br> 若要查看示例,请键入: <span class="hljs-string">"get-help Get-Process -examples"</span>.<br> 有关详细信息,请键入: <span class="hljs-string">"get-help Get-Process -detailed"</span>.<br> 若要获取技术信息,请键入: <span class="hljs-string">"get-help Get-Process -full"</span>.<br> 有关在线帮助,请键入: <span class="hljs-string">"get-help Get-Process -online"</span><br></code></pre></td></tr></table></figure><p>在帮助中,我们可以看到有几个段</p><ul><li><p>名称</p></li><li><p>摘要,命令的功能</p></li><li><p>语法,命令的使用方式</p></li><li><p>说明</p></li><li><p>相关链接</p></li><li><p>备注,<strong>获取其他帮助**</strong></p></li></ul><p>这几个段和 Linux 是类似的,一般我们着重看摘要和语法。语法部分,我们只需要注意<code>[]</code> 是可以省略的。<code><></code>是必给的。<code>string[]</code>表示数组,元素为一个个字符串。<code>number[]</code>, 数组,元素为一个个数字。<code>[<Common-Parameters>]</code> 表示所有 powershell 命令通用的参数。<code> help about_CommonParameters</code> 这样获取相关的参数。</p><p>还有一个重点,是备注。一般一个命令不会使用,可以以下步骤</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-comment"># 看看命令的功能和语法</span><br>help <span class="hljs-built_in">Get-Process</span><br><br><span class="hljs-comment"># 看看命令的示例</span><br>help <span class="hljs-built_in">Get-Process</span> <span class="hljs-literal">-Examples</span><br><br><span class="hljs-comment"># 示例不够详细,也可以看看在线的文档。会自动打开网页,进入命令的帮助页。还是中文</span><br>help <span class="hljs-built_in">Get-Process</span> <span class="hljs-literal">-Online</span><br></code></pre></td></tr></table></figure><p>例如,我们看到的在线文档的帮助。这个合作怎么使用,已相当完整了。</p><p><img src="2022-09-23-12-26-43-image.png" alt="2022-09-23-12-26-43-image"></p><h2 id="模块命令"><a href="#模块命令" class="headerlink" title="模块命令"></a>模块命令</h2><p>一般使用一个产品,会提供 powershell 相应模块,我们只需要加载模块,就可以看到模块的命令。</p><p>powershell 获取命令帮助的第 2 种方法<code>get-command</code>,他有 2 个可选参数对应动作<code>-verb</code>, 名称<code>-noun</code> 支持通配。帮助的种类<code>-CommandType</code>。哪些模块<code>-module</code></p><p>先看看帮助<code>help get-command</code></p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-built_in">Get-Command</span> [[-<span class="hljs-type">Name</span>] <<span class="hljs-type">System.String</span>[]>] [[-<span class="hljs-type">ArgumentList</span>] <<span class="hljs-type">System.Object</span>[]>] [-<span class="hljs-type">All</span>] [-<span class="hljs-type">CommandType</span> {<span class="hljs-type">Alias</span> | <span class="hljs-type">Function</span> | <span class="hljs-type">Filter</span> | <span class="hljs-type">Cmdlet</span> | <span class="hljs-type">ExternalScript</span> | <span class="hljs-type">Application</span> | <span class="hljs-type">Script</span> | <span class="hljs-type">Workflow</span> | <span class="hljs-type">Configuration</span> | <span class="hljs-type">All</span>}] [-<span class="hljs-type">FullyQualifiedModule</span> <<br> <span class="hljs-type">Microsoft.PowerShell.Commands.ModuleSpecification</span>[]>] [-<span class="hljs-type">ListImported</span>] [-<span class="hljs-type">Module</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">ParameterName</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">ParameterType</span> <<span class="hljs-type">System.Management.Automation.PSTypeName</span>[]>] [-<span class="hljs-type">ShowCommandInfo</span>] [-<span class="hljs-type">Syntax</span>] [-<span class="hljs-type">TotalCo</span><br> <span class="hljs-type">unt</span> <<span class="hljs-type">System.Int32</span>>] [<<span class="hljs-type">CommonParameters</span>>]<br></code></pre></td></tr></table></figure><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Get-Command</span> [[-<span class="hljs-type">ArgumentList</span>] <<span class="hljs-type">System.Object</span>[]>] [-<span class="hljs-type">All</span>] [-<span class="hljs-type">FullyQualifiedModule</span> <<span class="hljs-type">Microsoft.PowerShell.Commands.ModuleSpecification</span>[]>] [-<span class="hljs-type">ListImported</span>] [-<span class="hljs-type">Module</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">Noun</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">ParameterName</span> <<span class="hljs-type">System.Strin</span><br> <span class="hljs-type">g</span>[]>] [-<span class="hljs-type">ParameterType</span> <<span class="hljs-type">System.Management.Automation.PSTypeName</span>[]>] [-<span class="hljs-type">ShowCommandInfo</span>] [-<span class="hljs-type">Syntax</span>] [-<span class="hljs-type">TotalCount</span> <<span class="hljs-type">System.Int32</span>>] [-<span class="hljs-type">Verb</span> <<span class="hljs-type">System.String</span>[]>] [<<span class="hljs-type">CommonParameters</span>>]<br></code></pre></td></tr></table></figure><p>这里有 2 个语法,</p><p><code>get-command string[]</code> 表示获取字符串列表的所有命令</p><p><code>get-command object[]</code></p><p>例如,获取 ls, cat 命令</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">12</span>:<span class="hljs-number">54</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-built_in">ls</span>,<span class="hljs-built_in">cat</span><br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Alias <span class="hljs-built_in">ls</span> -> <span class="hljs-built_in">Get-ChildItem</span><br>Alias <span class="hljs-built_in">cat</span> -> <span class="hljs-built_in">Get-Content</span><br><br><br><span class="hljs-number">12</span>:<span class="hljs-number">55</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-built_in">ls</span><br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Alias <span class="hljs-built_in">ls</span> -> <span class="hljs-built_in">Get-ChildItem</span><br></code></pre></td></tr></table></figure><p>windows 中,兼容 linux 的命令,可以从这里看出是别名,如何知道 windows 有哪些别名?</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-comment"># 别名相关的主题?</span><br><span class="hljs-number">12</span>:<span class="hljs-number">56</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> help *alias*<br><br>Name Category Module Synopsis<br><span class="hljs-literal">----</span> <span class="hljs-literal">--------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">--------</span><br><span class="hljs-built_in">Export-Alias</span> Cmdlet Microsoft.PowerShell.U... Exports information about currently defined aliases to a file.<br><span class="hljs-built_in">Get-Alias</span> Cmdlet Microsoft.PowerShell.U... Gets the aliases <span class="hljs-keyword">for</span> the current session.<br><span class="hljs-built_in">Import-Alias</span> Cmdlet Microsoft.PowerShell.U... Imports an alias list from a file.<br><span class="hljs-built_in">New-Alias</span> Cmdlet Microsoft.PowerShell.U... Creates a new alias.<br><span class="hljs-built_in">Set-Alias</span> Cmdlet Microsoft.PowerShell.U... Creates or changes an alias <span class="hljs-keyword">for</span> a cmdlet or other command <span class="hljs-keyword">in</span> the current PowerShell session.<br><span class="hljs-built_in">Get-ModuleAliases</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">AdminToolbox</span> ...</span><br>about_Aliases HelpFile<br>about_Alias_Provider HelpFile<br></code></pre></td></tr></table></figure><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-comment"># 可以看到 get-alias</span><br><span class="hljs-number">12</span>:<span class="hljs-number">57</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> help <span class="hljs-built_in">get-alias</span><br><br>名称<br> <span class="hljs-built_in">Get-Alias</span><br><br>摘要<br> Gets the aliases <span class="hljs-keyword">for</span> the current session.<br><br><br>语法<br> <span class="hljs-built_in">Get-Alias</span> [-<span class="hljs-type">Definition</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">Exclude</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">Scope</span> <<span class="hljs-type">System.String</span>>] [<<span class="hljs-type">CommonParameters</span>>]<br><br> <span class="hljs-built_in">Get-Alias</span> [[-<span class="hljs-type">Name</span>] <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">Exclude</span> <<span class="hljs-type">System.String</span>[]>] [-<span class="hljs-type">Scope</span> <<span class="hljs-type">System.String</span>>] [<<span class="hljs-type">CommonParameters</span>>]<br></code></pre></td></tr></table></figure><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">12</span>:<span class="hljs-number">57</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">get-alias</span><br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Alias % -> <span class="hljs-built_in">ForEach-Object</span><br>Alias ? -> <span class="hljs-built_in">Where-Object</span><br>Alias <span class="hljs-built_in">ac</span> -> <span class="hljs-built_in">Add-Content</span><br>Alias <span class="hljs-built_in">asnp</span> -> <span class="hljs-built_in">Add-PSSnapin</span><br>Alias <span class="hljs-built_in">cat</span> -> <span class="hljs-built_in">Get-Content</span><br>Alias <span class="hljs-built_in">cd</span> -> <span class="hljs-built_in">Set-Location</span><br>Alias <span class="hljs-built_in">CFS</span> -> <span class="hljs-built_in">ConvertFrom-String</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Utility<br>Alias <span class="hljs-built_in">chdir</span> -> <span class="hljs-built_in">Set-Location</span><br>Alias <span class="hljs-built_in">clc</span> -> <span class="hljs-built_in">Clear-Content</span><br></code></pre></td></tr></table></figure><p>这样我们就拿到了 powershell 会话的所有别名</p><p>现在获取 get-childitem 命令</p><ol><li><p>直接给命令</p></li><li><p>给动作,匹配相关的名称</p></li></ol><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">12</span>:<span class="hljs-number">58</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-built_in">get-childitem</span><br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Cmdlet <span class="hljs-built_in">Get-ChildItem</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br><br><br><span class="hljs-number">12</span>:<span class="hljs-number">59</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-literal">-Verb</span> get <span class="hljs-literal">-Noun</span> *item*<br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br><span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">Get-DAEntryPointTableItem</span> <span class="hljs-title">1</span>.<span class="hljs-title">0</span>.<span class="hljs-title">0</span>.<span class="hljs-title">0</span> <span class="hljs-title">DirectAccessClientComponents</span></span><br><span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">Get-SFTPChildItem</span> <span class="hljs-title">3</span>.<span class="hljs-title">0</span>.<span class="hljs-title">6</span> <span class="hljs-title">Posh-SSH</span></span><br><span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">Get-TestDriveItem</span> <span class="hljs-title">3</span>.<span class="hljs-title">4</span>.<span class="hljs-title">0</span> <span class="hljs-title">Pester</span></span><br>Cmdlet <span class="hljs-built_in">Get-ChildItem</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-ControlPanelItem</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Item</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-ItemProperty</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-ItemPropertyValue</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-SCPItem</span> <span class="hljs-number">3.0</span>.<span class="hljs-number">6</span> Posh<span class="hljs-literal">-SSH</span><br>Cmdlet <span class="hljs-built_in">Get-SFTPItem</span> <span class="hljs-number">3.0</span>.<span class="hljs-number">6</span> Posh<span class="hljs-literal">-SSH</span><br></code></pre></td></tr></table></figure><p>这里可以看出,get-childitem 命令来自<code>Microsoft.PowerShell.Management</code> 模块。</p><p>查看这个模块对应的命令</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Get-Command</span> <span class="hljs-literal">-Module</span> Microsoft.PowerShell.Management<br></code></pre></td></tr></table></figure><p>查看这个模块对应的 get 命令</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">01</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-literal">-Module</span> Microsoft.PowerShell.Management <span class="hljs-literal">-Verb</span> get<br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Cmdlet <span class="hljs-built_in">Get-ChildItem</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Clipboard</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-ComputerInfo</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-ComputerRestorePoint</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Content</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-ControlPanelItem</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-EventLog</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-HotFix</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Item</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-ItemProperty</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-ItemPropertyValue</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Location</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Process</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-PSDrive</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-PSProvider</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-TimeZone</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Transaction</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-WmiObject</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br></code></pre></td></tr></table></figure><p>查看这个模块 get 命令,其中时间相关的命令</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">02</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-literal">-Module</span> Microsoft.PowerShell.Management <span class="hljs-literal">-Verb</span> get <span class="hljs-literal">-Noun</span> *time*<br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Cmdlet <span class="hljs-built_in">Get-TimeZone</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br></code></pre></td></tr></table></figure><h1 id="安装命令"><a href="#安装命令" class="headerlink" title="安装命令"></a>安装命令</h1><h2 id="仓库"><a href="#仓库" class="headerlink" title="仓库"></a>仓库</h2><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">03</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-PSRepository</span><br><br>Name InstallationPolicy SourceLocation<br><span class="hljs-literal">----</span> <span class="hljs-literal">------------------</span> <span class="hljs-literal">--------------</span><br>PSGallery Trusted https://www.powershellgallery.com/api/v2<br></code></pre></td></tr></table></figure><ul><li><p>这个 psrepo 相关的操作,通过以上的帮助来探索即可</p></li><li><p>配置仓库,修改仓库,删除仓库….</p></li></ul><h1 id="搜索软件"><a href="#搜索软件" class="headerlink" title="搜索软件"></a>搜索软件</h1><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">05</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> help *module* Name Category Module Synopsis<br><span class="hljs-literal">----</span> <span class="hljs-literal">--------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">--------</span><br>ImportSystemModules <span class="hljs-function"><span class="hljs-keyword">Function</span> ...</span><br><span class="hljs-built_in">Find-Module</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">PowerShellGet</span> ...</span><br><span class="hljs-built_in">Get-InstalledModule</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">PowerShellGet</span> ...</span><br><span class="hljs-built_in">Install-Module</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">PowerShellGet</span> ...</span><br><span class="hljs-built_in">Publish-Module</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">PowerShellGet</span> ...</span><br><span class="hljs-built_in">Save-Module</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">PowerShellGet</span> ...</span><br><span class="hljs-built_in">Uninstall-Module</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">PowerShellGet</span> ...</span><br><span class="hljs-built_in">Update-Module</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">PowerShellGet</span> ...</span><br><span class="hljs-built_in">Update-ModuleManifest</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">PowerShellGet</span> ...</span><br><span class="hljs-built_in">Export-ModuleMember</span> Cmdlet Microsoft.PowerShell.Core Specifies the module members that are exported.<br><span class="hljs-built_in">Get-Module</span> Cmdlet Microsoft.PowerShell.Core List the modules imported <span class="hljs-keyword">in</span> the current session or that can be imported from the PSModulePath.<br><span class="hljs-built_in">Import-Module</span> Cmdlet Microsoft.PowerShell.Core Adds modules to the current session.<br><span class="hljs-built_in">New-Module</span> Cmdlet Microsoft.PowerShell.Core Creates a new dynamic module that exists only <span class="hljs-keyword">in</span> memory.<br><span class="hljs-built_in">New-ModuleManifest</span> Cmdlet Microsoft.PowerShell.Core Creates a new module manifest.<br><span class="hljs-built_in">Remove-Module</span> Cmdlet Microsoft.PowerShell.Core Removes modules from the current session.<br><span class="hljs-built_in">Test-ModuleManifest</span> Cmdlet Microsoft.PowerShell.Core Verifies that a module manifest file accurately describes the contents of a module.<br><span class="hljs-built_in">Get-ModuleAliases</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">AdminToolbox</span> ...</span><br><span class="hljs-built_in">Get-CPowerShellModuleInstallPath</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">Carbon</span> ...</span><br><span class="hljs-built_in">Test-ModuleLoaded</span> <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">core</span> ...</span><br>InModuleScope <span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">Pester</span> ...</span><br>about_Modules HelpFile<br>about_Module_Manifests HelpFile<br>about_PSModulePath HelpFile <br></code></pre></td></tr></table></figure><p>可以看到有一个 find 命令,应该是查找命令相关的.</p><p>install,就表示安装命令</p><p>获取相应的帮助</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">help <span class="hljs-built_in">Find-Module</span> <span class="hljs-literal">-online</span><br></code></pre></td></tr></table></figure><p>查找 powershell 相关的模块</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Find-Module</span> PowerShell*<br></code></pre></td></tr></table></figure><p>查找指定版本</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">find-module</span> PowerShellGet <span class="hljs-literal">-RequiredVersion</span> <span class="hljs-number">1.6</span>.<span class="hljs-number">5</span><br></code></pre></td></tr></table></figure><p>在指定仓库内查找</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Find-Module</span> PowerShellGet <span class="hljs-literal">-Repository</span> PSGallery<br></code></pre></td></tr></table></figure><p>基于 name, description, and tags 搜索相关的模块</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Find-Module</span> <span class="hljs-literal">-Filter</span> net<br></code></pre></td></tr></table></figure><p>基于 tag 搜索</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Find-Module</span> <span class="hljs-literal">-Tag</span> CrescendoBuilt<br></code></pre></td></tr></table></figure><p>例如我们搜索 kubernetes 搜索</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">20</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Find-Module</span> kubernetes<br><br>Version Name Repository Description<br><span class="hljs-literal">-------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">----------</span> <span class="hljs-literal">-----------</span><br><span class="hljs-number">1.0</span>.<span class="hljs-number">0</span> Kubernetes PSGallery Kubernetes<br><br><br><span class="hljs-number">13</span>:<span class="hljs-number">24</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Install-Module</span> Kubernetes<br></code></pre></td></tr></table></figure><p>查看安装的模块</p><figure class="highlight powershell"><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></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">25</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-InstalledModule</span><br><br>Version Name Repository Description<br><span class="hljs-literal">-------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">----------</span> <span class="hljs-literal">-----------</span><br><span class="hljs-number">11.0</span>.<span class="hljs-number">3</span> AdminToolbox PSGallery Master module <span class="hljs-keyword">for</span> a collection of modules. These modules are varied <span class="hljs-keyword">in</span> their tasks. The overall purpose of them being to provide a powerfull Toolset to improve IT Ad...<br><span class="hljs-number">1.8</span>.<span class="hljs-number">0</span> AdminToolbox.ActiveDirectory PSGallery Functions <span class="hljs-keyword">for</span> Active Directory<br><span class="hljs-number">4.8</span>.<span class="hljs-number">0</span> AdminToolbox.EndpointManagement PSGallery Functions <span class="hljs-keyword">for</span> management of endpoints<br><span class="hljs-number">1.9</span>.<span class="hljs-number">0</span> AdminToolbox.Exchange PSGallery Functions <span class="hljs-keyword">for</span> Exchange Management<br><span class="hljs-number">4.12</span>.<span class="hljs-number">0</span> AdminToolbox.FFTools PSGallery Expedite simple ffmpeg actions<br><span class="hljs-number">1.13</span>.<span class="hljs-number">0</span> AdminToolbox.FileManagement PSGallery File Management Functions<br><span class="hljs-number">2.15</span>.<span class="hljs-number">0</span> AdminToolbox.FortiWizard PSGallery Functions that generate configuration scripts and manage FortiOS.<br><span class="hljs-number">1.6</span>.<span class="hljs-number">0</span> AdminToolbox.Fun PSGallery Functions that have no purpose<br><span class="hljs-number">1.2</span>.<span class="hljs-number">0</span> AdminToolbox.MSGraph PSGallery Microsoft Graph interactive API Functions<br><span class="hljs-number">2.13</span>.<span class="hljs-number">0</span> AdminToolbox.Networking PSGallery Network Troubleshooting Functions<br><span class="hljs-number">2.10</span>.<span class="hljs-number">0</span> AdminToolbox.Office365 PSGallery Functions <span class="hljs-keyword">for</span> working with Office365 and Azure modules<br><span class="hljs-number">1.9</span>.<span class="hljs-number">0</span> AdminToolbox.Remoting PSGallery Functions <span class="hljs-keyword">for</span> remote management and access.<br><span class="hljs-number">4.8</span>.<span class="hljs-number">0</span> AdminToolbox.VMWareAutomate PSGallery Functions to Automate Bulk VMWare Tasks<br><span class="hljs-number">2.11</span>.<span class="hljs-number">3</span> Carbon PSGallery Carbon is a PowerShell module <span class="hljs-keyword">for</span> automating the configuration Windows <span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-number">2008</span>, and <span class="hljs-number">2012</span> and automation the installation and configuration of Windows applications...<br><span class="hljs-number">1.9</span> core PSGallery Module with various generic functions that could be used <span class="hljs-keyword">in</span> any script<br><span class="hljs-number">1.0</span>.<span class="hljs-number">2</span> <span class="hljs-built_in">Get-IPInfo</span> PSGallery Quickly look up IP Information including location, ISP and Organization<br><span class="hljs-number">7.8</span>.<span class="hljs-number">0</span> ImportExcel PSGallery PowerShell module to import/export Excel spreadsheets, without Excel....<br><span class="hljs-number">1.1</span>.<span class="hljs-number">1</span> IPTools PSGallery This module offers a <span class="hljs-built_in">set</span> of tools to manage IP networks and devices.<br><span class="hljs-number">1.0</span>.<span class="hljs-number">0</span> Kubernetes PSGallery Kubernetes<br><span class="hljs-number">3.0</span>.<span class="hljs-number">6</span> Posh<span class="hljs-literal">-SSH</span> PSGallery Provide SSH and SCP functionality <span class="hljs-keyword">for</span> executing commands against remote hosts.<br><span class="hljs-number">0.3</span>.<span class="hljs-number">0.0</span> PoshPrivilege PSGallery Module designed to use allow easier access to work with User Rights (privileges)<br><span class="hljs-number">1.3</span>.<span class="hljs-number">1</span> ProgramManagement PSGallery This Module makes it easier to Install/Uninstall programs on Windows, regardless of the method of installation (PSGet, Chocolatey CmdLine, .msi, etc). GitHub: https:...<br><span class="hljs-number">1.0</span>.<span class="hljs-number">22</span> PSEventViewer PSGallery Simple module allowing parsing of event logs. Has its own quirks...<br><span class="hljs-number">0.9</span>.<span class="hljs-number">3</span> ud<span class="hljs-literal">-netmon</span> PSGallery Web<span class="hljs-literal">-based</span> GUI (PowerShell Universal Dashboard) that pings specified Remote Hosts on your Domain every <span class="hljs-number">5</span> seconds. GitHub: https://github.com/pldmgg/UD<span class="hljs-literal">-NetMon</span><br><span class="hljs-number">2.1</span>.<span class="hljs-number">1</span> WindowsKeyboardManagement PSGallery Allows keys on the physical keyboard to be remapped, and redefine programs associated with multimedia keys. <span class="hljs-keyword">For</span> example, you can remap the <span class="hljs-string">"Scroll Lock"</span> key to the<br></code></pre></td></tr></table></figure><p>导入模块</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">25</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Import-Module</span> Kubernetes<br><span class="hljs-number">13</span>:<span class="hljs-number">25</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Module</span><br><br>ModuleType Version Name ExportedCommands<br><span class="hljs-literal">----------</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">----------------</span><br>Manifest <span class="hljs-number">1.0</span>.<span class="hljs-number">0</span> Kubernetes<br></code></pre></td></tr></table></figure><p>获取模块相关的命令</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">26</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-literal">-Module</span> Kubernetes<br></code></pre></td></tr></table></figure><h1 id="远程执行命令"><a href="#远程执行命令" class="headerlink" title="远程执行命令"></a>远程执行命令</h1><p>打开远程功能,</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">27</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Enable-PSRemoting</span><br></code></pre></td></tr></table></figure><p>功能打开后,会侦听 5985 端口</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">31</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-NetTCPConnection</span> <span class="hljs-literal">-State</span> Listen <span class="hljs-literal">-LocalPort</span> <span class="hljs-number">5985</span><br><br>LocalAddress LocalPort RemoteAddress RemotePort State AppliedSetting OwningProcess<br><span class="hljs-literal">------------</span> <span class="hljs-literal">---------</span> <span class="hljs-literal">-------------</span> <span class="hljs-literal">----------</span> <span class="hljs-literal">-----</span> <span class="hljs-literal">--------------</span> <span class="hljs-literal">-------------</span><br>:: <span class="hljs-number">5985</span> :: <span class="hljs-number">0</span> Listen <span class="hljs-number">4</span><br></code></pre></td></tr></table></figure><p>远程连接</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Invoke-Command</span> <span class="hljs-literal">-ComputerName</span> <span class="hljs-string">"192.168.13.103"</span> <span class="hljs-literal">-Credential</span> (<span class="hljs-built_in">Get-Credential</span>) { <span class="hljs-built_in">Get-ComputerInfo</span> }<br></code></pre></td></tr></table></figure><h1 id="提供者"><a href="#提供者" class="headerlink" title="提供者"></a>提供者</h1><p>psprovider,本质上是一个适配器,把一切都模拟成文件操作。统一使用 get-item, new-item, remove-item 来操作,适配器负责将这些操作转换成对应适配器后的操作。</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">13</span>:<span class="hljs-number">35</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-PSProvider</span><br><br>Name Capabilities Drives<br><span class="hljs-literal">----</span> <span class="hljs-literal">------------</span> <span class="hljs-literal">------</span><br>Registry ShouldProcess, Transactions {HKLM, HKCU}<br>Alias ShouldProcess {Alias}<br>Environment ShouldProcess {Env}<br>FileSystem <span class="hljs-keyword">Filter</span>, ShouldProcess, Credentials {C, D, E, F...}<br><span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-title">ShouldProcess</span></span> {Function}<br>Variable ShouldProcess {Variable}<br>WSMan Credentials {WSMan}<br>Certificate ShouldProcess {Cert}<br></code></pre></td></tr></table></figure><p>这里,有很多适配器,均可以通过一套接口操作。操作每个适配器,可以有多个操作入口,例如下面的文件系统,有 CDEFG,这些入口。注册表有 HKCU/HKLM。</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">02</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-PSDrive</span><br><br>Name Used (GB) Free (GB) Provider Root CurrentLocation<br><span class="hljs-literal">----</span> <span class="hljs-literal">---------</span> <span class="hljs-literal">---------</span> <span class="hljs-literal">--------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">---------------</span><br>Alias Alias<br>C <span class="hljs-number">112.18</span> <span class="hljs-number">8.23</span> FileSystem C:\ Windows\system32<br>Cert Certificate \<br>D <span class="hljs-number">71.20</span> <span class="hljs-number">50.80</span> FileSystem D:\<br>E <span class="hljs-number">40.41</span> <span class="hljs-number">81.59</span> FileSystem E:\<br>Env Environment<br>F <span class="hljs-number">0.09</span> <span class="hljs-number">100.94</span> FileSystem F:\<br><span class="hljs-function"><span class="hljs-keyword">Function</span> <span class="hljs-keyword">Function</span></span><br>G <span class="hljs-number">50.93</span> <span class="hljs-number">396.19</span> FileSystem G:\<br>HKCU Registry HKEY_CURRENT_USER<br>HKLM Registry HKEY_LOCAL_MACHINE<br>Variable Variable<br>WSMan WSMan<br></code></pre></td></tr></table></figure><p>例如查看 C:/盘的文件</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">05</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">ls</span> <span class="hljs-literal">-Name</span> c:/<br><span class="hljs-number">2020</span><span class="hljs-literal">-09-16-myblog</span><br>pcwlenv<br>Program Files<br>Program Files (x86)<br>Temp<br>Users<br>Windows<br>dcdspdbg.log<br>DumpStack.log<br>priv.pfx<br></code></pre></td></tr></table></figure><p>查看 hkcu 下的内容</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">05</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">ls</span> hkcu:/ <span class="hljs-literal">-name</span><br>AppEvents<br>Console<br>Control Panel<br>Environment<br>EUDC<br>Keyboard Layout<br>Layout<br>Network<br>Printers<br>Software<br>System<br>Uninstall<br>Volatile Environment<br>wdsafeloadat<br></code></pre></td></tr></table></figure><p><img src="2022-09-23-14-06-14-image.png" alt="2022-09-23-14-06-14-image"></p><p>刚刚好,一一对应。</p><h2 id="item-属性"><a href="#item-属性" class="headerlink" title="item 属性"></a>item 属性</h2><p>一个项对应的属性。比如只读、项创建时间、长度等。</p><p>一般这个 item 是只读的,当提供是注册表时,是可以修改的。</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">29</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Item</span> HKCU:\Console\<br><br><br> Hive: HKEY_CURRENT_USER<br><br><br>Name Property<br><span class="hljs-literal">----</span> <span class="hljs-literal">--------</span><br>Console ColorTable00 : <span class="hljs-number">789516</span><br> ColorTable01 : <span class="hljs-number">14300928</span><br> ColorTable02 : <span class="hljs-number">958739</span><br> ColorTable03 : <span class="hljs-number">14521914</span><br></code></pre></td></tr></table></figure><p>查看属性</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">30</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-ItemProperty</span> HKCU:\Console\<br><br><br>ColorTable00 : <span class="hljs-number">789516</span><br>ColorTable01 : <span class="hljs-number">14300928</span><br>ColorTable02 : <span class="hljs-number">958739</span><br>ColorTable03 : <span class="hljs-number">14521914</span><br>ColorTable04 : <span class="hljs-number">2035653</span><br>ColorTable05 : <span class="hljs-number">9967496</span><br>ColorTable06 : <span class="hljs-number">40129</span><br>ColorTable07 : <span class="hljs-number">13421772</span><br>ColorTable08 : <span class="hljs-number">7763574</span><br>ColorTable09 : <span class="hljs-number">16742459</span><br></code></pre></td></tr></table></figure><p>修改属性</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Set-ItemProperty</span> <span class="hljs-literal">-Path</span> <span class="hljs-string">"HKLM:\Software\ContosoCompany"</span> <span class="hljs-literal">-Name</span> <span class="hljs-string">"NoOfEmployees"</span> <span class="hljs-literal">-Value</span> <span class="hljs-number">824</span><br></code></pre></td></tr></table></figure><h2 id="item-操作"><a href="#item-操作" class="headerlink" title="item 操作"></a>item 操作</h2><p>以 filesystem 为例</p><h3 id="添加文件或目录"><a href="#添加文件或目录" class="headerlink" title="添加文件或目录"></a>添加文件或目录</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">32</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">new-item</span> d:/<span class="hljs-built_in">test-2022</span><span class="hljs-literal">-9-23</span><br><br><br> 目录: D:\<br><br><br>Mode LastWriteTime Length Name<br><span class="hljs-literal">----</span> <span class="hljs-literal">-------------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">----</span><br><span class="hljs-literal">-a----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">9</span>/<span class="hljs-number">23</span> <span class="hljs-number">14</span>:<span class="hljs-number">38</span> <span class="hljs-number">0</span> <span class="hljs-built_in">test-2022</span><span class="hljs-literal">-9-23</span><br><br><br><span class="hljs-number">14</span>:<span class="hljs-number">38</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">new-item</span> <span class="hljs-literal">-Type</span> Directory d:/<span class="hljs-built_in">test-d</span><br><br><br> 目录: D:\<br><br><br>Mode LastWriteTime Length Name<br><span class="hljs-literal">----</span> <span class="hljs-literal">-------------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">----</span><br>d<span class="hljs-literal">-----</span> <span class="hljs-number">2022</span>/<span class="hljs-number">9</span>/<span class="hljs-number">23</span> <span class="hljs-number">14</span>:<span class="hljs-number">38</span> <span class="hljs-built_in">test-d</span><br></code></pre></td></tr></table></figure><p>注意,在行首的<code>-</code>, <code>d</code>,用来区别文件类型的。创建目录另一个<code>mkdir</code></p><h3 id="删除目录或目录"><a href="#删除目录或目录" class="headerlink" title="删除目录或目录"></a>删除目录或目录</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">38</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Remove-Item</span> d:/<span class="hljs-built_in">test-d</span><br><span class="hljs-number">14</span>:<span class="hljs-number">39</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Remove-Item</span> D:\<span class="hljs-built_in">test-2022</span><span class="hljs-literal">-9-23</span><br></code></pre></td></tr></table></figure><h1 id="进程管理"><a href="#进程管理" class="headerlink" title="进程管理"></a>进程管理</h1><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">39</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-literal">-Noun</span> <span class="hljs-keyword">Process</span><br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Cmdlet <span class="hljs-built_in">Debug-Process</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Get-Process</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Start-Process</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Stop-Process</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Wait-Process</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br></code></pre></td></tr></table></figure><h1 id="服务管理"><a href="#服务管理" class="headerlink" title="服务管理"></a>服务管理</h1><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">40</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-literal">-Noun</span> Service<br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Alias <span class="hljs-built_in">Remove-Service</span> <span class="hljs-number">2.11</span>.<span class="hljs-number">3</span> Carbon<br>Cmdlet <span class="hljs-built_in">Get-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">New-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Restart-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Resume-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Set-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Start-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Stop-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Suspend-Service</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br></code></pre></td></tr></table></figure><h1 id="管道"><a href="#管道" class="headerlink" title="管道"></a>管道</h1><p>由于 powershell 输出的均为对象,管道传递的是对象。linux 的管道传递的是字符串。</p><p>管道的对象修改仅在使用 ft/fl 之后</p><p>使用 select 可以将输出结果显示更少,或更多。默认显示有限,但是对象有很多的属性,为了完全显示,可以使用<code>| select *</code></p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Get-Process</span> notepad | <span class="hljs-built_in">select</span> *<br></code></pre></td></tr></table></figure><p>当选择所有字段,就会显示对象所有属性,一行显示不下,就会纵向显示。也可以显示更少的</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">49</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> notepad | <span class="hljs-built_in">select</span> name,id,cpu,VirtualMemorySize<br><br>Name Id CPU VirtualMemorySize<br><span class="hljs-literal">----</span> <span class="hljs-literal">--</span> <span class="hljs-literal">---</span> <span class="hljs-literal">-----------------</span><br>Notepad <span class="hljs-number">17848</span> <span class="hljs-number">0.5625</span> <span class="hljs-number">560594944</span><br>Notepad <span class="hljs-number">21288</span> <span class="hljs-number">1.390625</span> <span class="hljs-number">564748288</span><br></code></pre></td></tr></table></figure><p>这里显示的改变了,但是每行还是对象。</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">50</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> notepad | <span class="hljs-built_in">select</span> name,id,cpu,VirtualMemorySize | <span class="hljs-built_in">gm</span><br><br><br> TypeName:Selected.System.Diagnostics.Process<br><br>Name MemberType Definition<br><span class="hljs-literal">----</span> <span class="hljs-literal">----------</span> <span class="hljs-literal">----------</span><br>Equals Method bool Equals(System.Object obj)<br>GetHashCode Method int GetHashCode()<br>GetType Method <span class="hljs-built_in">type</span> GetType()<br>ToString Method string ToString()<br>CPU NoteProperty System.Double CPU=<span class="hljs-number">0.5625</span><br>Id NoteProperty int Id=<span class="hljs-number">17848</span><br>Name NoteProperty string Name=Notepad<br>VirtualMemorySize NoteProperty int VirtualMemorySize=<span class="hljs-number">560594944</span><br></code></pre></td></tr></table></figure><p>注意输出是<code>TypeName:Selected.System.Diagnostics.Proc</code></p><p>更少的字段输出的是表格,我们显示列</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">51</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> notepad | <span class="hljs-built_in">select</span> name,id,cpu,VirtualMemorySize | <span class="hljs-built_in">fl</span><br><br><br>Name : Notepad<br>Id : <span class="hljs-number">17848</span><br>CPU : <span class="hljs-number">0.5625</span><br>VirtualMemorySize : <span class="hljs-number">560594944</span><br><br>Name : Notepad<br>Id : <span class="hljs-number">21288</span><br>CPU : <span class="hljs-number">1.390625</span><br>VirtualMemorySize : <span class="hljs-number">564748288</span><br></code></pre></td></tr></table></figure><p>显示列之后,对象就不存在了</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">51</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> notepad | <span class="hljs-built_in">select</span> name,id,cpu,VirtualMemorySize | <span class="hljs-built_in">fl</span> | <span class="hljs-built_in">gm</span><br><br><br> TypeName:Microsoft.PowerShell.Commands.Internal.Format.FormatStartData<br></code></pre></td></tr></table></figure><p>ft/fl 均一样</p><p>当 select 之后,我们还可以使用对象的操作,ft/fl 之后,就不能使用对象的操作了</p><p>select 之后,期望 name 显示为 processname</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">15</span>:<span class="hljs-number">12</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> notepad | <span class="hljs-built_in">select</span> name,id,cpu,VirtualMemorySize<br><br>Name Id CPU VirtualMemorySize<br><span class="hljs-literal">----</span> <span class="hljs-literal">--</span> <span class="hljs-literal">---</span> <span class="hljs-literal">-----------------</span><br>Notepad <span class="hljs-number">17848</span> <span class="hljs-number">0.578125</span> <span class="hljs-number">560594944</span><br>Notepad <span class="hljs-number">21288</span> <span class="hljs-number">1.390625</span> <span class="hljs-number">564748288</span><br></code></pre></td></tr></table></figure><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">15</span>:<span class="hljs-number">14</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> notepad | <span class="hljs-built_in">select</span> <span class="hljs-selector-tag">@</span>{L=<span class="hljs-string">'ProcessName'</span>;E={<span class="hljs-variable">$_</span>.name} },id,cpu,VirtualMemorySize<br><br>ProcessName Id CPU VirtualMemorySize<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">--</span> <span class="hljs-literal">---</span> <span class="hljs-literal">-----------------</span><br>Notepad <span class="hljs-number">17848</span> <span class="hljs-number">0.578125</span> <span class="hljs-number">560594944</span><br>Notepad <span class="hljs-number">21288</span> <span class="hljs-number">1.390625</span> <span class="hljs-number">564748288</span><br></code></pre></td></tr></table></figure><p>这里的修改显示字段名的语法可以使用在 select 中,<code>@{L='ProcessName';E={$_.name} }</code> L 是显示的名,E 是表达式,可以求值。值就是每行这个字段显示的值。</p><h1 id="格式化"><a href="#格式化" class="headerlink" title="格式化"></a>格式化</h1><p>之前我们显示的表格,可以通过 select 来显示更少或更多字段</p><p>有 ft,可以显示为表格,fl 显示为列。</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">54</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Service</span><br><br>Status Name DisplayName<br><span class="hljs-literal">------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-----------</span><br>Stopped AarSvc_503<span class="hljs-built_in">ac</span> AarSvc_503<span class="hljs-built_in">ac</span><br>Stopped AJRouter AllJoyn Router Service<br>Stopped ALG Application Layer Gateway Service<br>Stopped AppIDSvc Application Identity<br>Running Appinfo Application Information<br>Stopped AppMgmt Application Management<br>Stopped AppReadiness App Readiness<br>Stopped AppVClient Microsoft App<span class="hljs-literal">-V</span> Client<br>Stopped AppXSvc AppX Deployment Service (AppXSVC)<br>Stopped AssignedAccessM... AssignedAccessManager 服务<br>Running AudioEndpointBu... Windows Audio Endpoint Builder<br>Running Audiosrv Windows Audio<br>Stopped autotimesvc 手机网络时间<br></code></pre></td></tr></table></figure><p>这里可以看出有<code>...</code>省略,说明没有显示完。我们可以添加选项显示完</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">54</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Service</span> | <span class="hljs-built_in">ft</span> <span class="hljs-literal">-AutoSize</span> <span class="hljs-literal">-Wrap</span><br><br>Status Name DisplayName<br><span class="hljs-literal">------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-----------</span><br>Stopped AarSvc_503<span class="hljs-built_in">ac</span> AarSvc_503<span class="hljs-built_in">ac</span><br>Stopped AJRouter AllJoyn Router Service<br>Stopped ALG Application Layer Gateway Service<br>Stopped AppIDSvc Application Identity<br>Running Appinfo Application Information<br>Stopped AppMgmt Application Management<br>Stopped AppReadiness App Readiness<br>Stopped AppVClient Microsoft App<span class="hljs-literal">-V</span> Client<br>Stopped AppXSvc AppX Deployment Service (AppXSVC)<br>Stopped AssignedAccessManagerSvc AssignedAccessManager 服务<br></code></pre></td></tr></table></figure><h1 id="powershell-脚本编程"><a href="#powershell-脚本编程" class="headerlink" title="powershell 脚本编程"></a>powershell 脚本编程</h1><h2 id="循环"><a href="#循环" class="headerlink" title="循环"></a>循环</h2><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-keyword">for</span> ((<span class="hljs-variable">$i</span> = <span class="hljs-number">0</span>), (<span class="hljs-variable">$j</span> = <span class="hljs-number">0</span>); <span class="hljs-variable">$i</span> <span class="hljs-operator">-lt</span> <span class="hljs-number">10</span>; <span class="hljs-variable">$i</span>++, <span class="hljs-variable">$j</span>++)<br>{<br> <span class="hljs-string">"`$i:<span class="hljs-variable">$i</span>"</span><br> <span class="hljs-string">"`$j:<span class="hljs-variable">$j</span>"</span><br>}<br></code></pre></td></tr></table></figure><p>命令直接循环</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">46</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> notepad<br><br>Handles NPM(K) PM(K) WS(K) CPU(s) Id <span class="hljs-built_in">SI</span> ProcessName<br><span class="hljs-literal">-------</span> <span class="hljs-literal">------</span> <span class="hljs-literal">-----</span> <span class="hljs-literal">-----</span> <span class="hljs-literal">------</span> <span class="hljs-literal">--</span> <span class="hljs-literal">--</span> <span class="hljs-literal">-----------</span><br> <span class="hljs-number">655</span> <span class="hljs-number">33</span> <span class="hljs-number">47000</span> <span class="hljs-number">52196</span> <span class="hljs-number">0.56</span> <span class="hljs-number">17848</span> <span class="hljs-number">1</span> Notepad<br> <span class="hljs-number">676</span> <span class="hljs-number">35</span> <span class="hljs-number">47476</span> <span class="hljs-number">57476</span> <span class="hljs-number">1.39</span> <span class="hljs-number">21288</span> <span class="hljs-number">1</span> Notepad<br><br><br><span class="hljs-number">14</span>:<span class="hljs-number">46</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Process</span> notepad | %{ <span class="hljs-variable">$_</span>.name }<br>Notepad<br>Notepad<br></code></pre></td></tr></table></figure><ul><li>这里的%是 foreach 的别名,会遍历 每个对象。 {} 是语句块,是循环每个对象,其中引用每一个对象使用<code>$_</code></li></ul><h2 id="选择"><a href="#选择" class="headerlink" title="选择"></a>选择</h2><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">help about_If<br></code></pre></td></tr></table></figure><p>判断文件时,我们使用 test 表达式</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">56</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-built_in">Get-Command</span> <span class="hljs-literal">-Verb</span> test <span class="hljs-literal">-Module</span> Microsoft.PowerShell.Management<br><br>CommandType Name Version Source<br><span class="hljs-literal">-----------</span> <span class="hljs-literal">----</span> <span class="hljs-literal">-------</span> <span class="hljs-literal">------</span><br>Cmdlet <span class="hljs-built_in">Test-ComputerSecureChannel</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Test-Connection</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br>Cmdlet <span class="hljs-built_in">Test-Path</span> <span class="hljs-number">3.1</span>.<span class="hljs-number">0.0</span> Microsoft.PowerShell.Management<br></code></pre></td></tr></table></figure><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">57</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-keyword">if</span>(<span class="hljs-built_in">test-path</span> d:/test) { <span class="hljs-string">'123'</span> } <span class="hljs-keyword">else</span> { <span class="hljs-string">'not exist'</span> }<br>not exist<br></code></pre></td></tr></table></figure><h2 id="字符串替换"><a href="#字符串替换" class="headerlink" title="字符串替换"></a>字符串替换</h2><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">help about_Comparison_Operators<br></code></pre></td></tr></table></figure><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">14</span>:<span class="hljs-number">57</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-string">"hello world"</span> <span class="hljs-operator">-replace</span> <span class="hljs-string">'ll\S\s'</span>,<span class="hljs-string">'123'</span><br>he123world<br></code></pre></td></tr></table></figure><ul><li>正则匹配,目标字符串</li></ul><h2 id="算术运算"><a href="#算术运算" class="headerlink" title="算术运算"></a>算术运算</h2><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell">help about_Arithmetic_Operators<br></code></pre></td></tr></table></figure><p>命令行可以直接进行一些算术操作</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">15</span>:<span class="hljs-number">09</span> [<span class="hljs-type">PS</span>] C:\Windows\system32 :> <span class="hljs-number">1</span>+<span class="hljs-number">2</span>+<span class="hljs-number">3</span>+<span class="hljs-number">4</span><br><span class="hljs-number">10</span><br></code></pre></td></tr></table></figure><h2 id="编写脚本"><a href="#编写脚本" class="headerlink" title="编写脚本"></a>编写脚本</h2><p>脚本策略</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Set-ExecutionPolicy</span> RemoteSigned<br></code></pre></td></tr></table></figure><p>RemoteSigned 表示 PowerShell<strong>可以运行本地任何脚本</strong>,同时<strong>也可以执行受信任的 CA 签发的数字证书签名之后的远程脚本</strong>。“远程脚本”是指存在于远端计算机上的脚本,经常通过通用命名规则(UNC)方式访问这些脚本。我们也会将那些来自于网络上的脚本称为“远程脚本”。Internet Explorer、Firefox 和 Outlook 中提供的可下载的脚本,我们均可视为来自网络的脚本。在某些版本的 Windows 中,会区分网络路径以及 UNC 路径。在这些场景中,本地网络中的 UNC 都不会认为是“远程”。</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-comment"><#</span><br><span class="hljs-comment"><span class="hljs-doctag">.SYNOPSIS</span></span><br><span class="hljs-comment"> 从1个或多个计算机获取逻辑磁盘信息</span><br><span class="hljs-comment"><span class="hljs-doctag">.DESCRIPTION</span></span><br><span class="hljs-comment"> 使用WMI接口从1或多个主机获取, 可用空间大于50%的win32_logicaldisk实例。 显示磁盘驱动,空间空间,总大小,空闲百分比</span><br><span class="hljs-comment"><span class="hljs-doctag">.PARAMETER drivetype</span></span><br><span class="hljs-comment"> 磁盘类型,默认3</span><br><span class="hljs-comment"><span class="hljs-doctag">.PARAMETER gtfree</span></span><br><span class="hljs-comment"> 可用空间百分比</span><br><span class="hljs-comment"><span class="hljs-doctag">.PARAMETER computername</span></span><br><span class="hljs-comment"> 远程计算机名</span><br><span class="hljs-comment"><span class="hljs-doctag">.EXAMPLE</span></span><br><span class="hljs-comment"> get-disk -computername localhost -drivetype 3 -gtfree 80</span><br><span class="hljs-comment">#></span><br><span class="hljs-function">[<span class="hljs-type">cmdletbinding</span>()]</span><br><span class="hljs-keyword">param</span> (<br> [<span class="hljs-built_in">int</span>]<span class="hljs-variable">$drivetype</span> = <span class="hljs-number">3</span>,<br> [<span class="hljs-built_in">int</span>]<span class="hljs-variable">$gtfree</span>=<span class="hljs-number">50</span>,<br> [<span class="hljs-type">Parameter</span>(<span class="hljs-type">Mandatory</span>=<span class="hljs-variable">$true</span>,<span class="hljs-type">HelpMessage</span>=<span class="hljs-string">"enter a or a set computer to query"</span>)]<br> [<span class="hljs-built_in">string</span>]<span class="hljs-variable">$computername</span><br>)<br><br><span class="hljs-built_in">Get-WmiObject</span> win32_logicaldisk <span class="hljs-literal">-com</span> <span class="hljs-variable">$computername</span> <span class="hljs-literal">-filter</span> <span class="hljs-string">"drivetype=<span class="hljs-variable">$drivetype</span>"</span> | ? { (<span class="hljs-variable">$_</span>.freespace / <span class="hljs-variable">$_</span>.size * <span class="hljs-number">100</span> ) <span class="hljs-operator">-gt</span> <span class="hljs-variable">$gtfree</span>} | <span class="hljs-built_in">select</span> deviceid,<br> <span class="hljs-selector-tag">@</span>{L=<span class="hljs-string">'freesize(gb)'</span>;E={<span class="hljs-variable">$_</span>.freespace / <span class="hljs-number">1</span>gb <span class="hljs-operator">-as</span> [<span class="hljs-built_in">int</span>]}},<br> <span class="hljs-selector-tag">@</span>{L=<span class="hljs-string">'size(gb)'</span>;E={<span class="hljs-variable">$_</span>.size / <span class="hljs-number">1</span>gb <span class="hljs-operator">-as</span> [<span class="hljs-built_in">int</span>]}},<br> <span class="hljs-selector-tag">@</span>{L=<span class="hljs-string">'%free'</span>;E={ <span class="hljs-variable">$_</span>.freespace / <span class="hljs-variable">$_</span>.size *<span class="hljs-number">100</span> <span class="hljs-operator">-as</span> [<span class="hljs-built_in">int</span>]}}<br></code></pre></td></tr></table></figure><ol><li><p><code><# #></code> 定义脚本的帮助。<code>.KEYWORD</code> 定义语法,变量对应的参数和值,和描述。 示例。powershell 会自动解析为, 帮助的各部分</p></li><li><p>参数段</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-function">[<span class="hljs-type">cmdletbinding</span>()]</span><br><span class="hljs-keyword">param</span> (<br> [<span class="hljs-built_in">int</span>]<span class="hljs-variable">$drivetype</span> = <span class="hljs-number">3</span>,<br> [<span class="hljs-built_in">int</span>]<span class="hljs-variable">$gtfree</span>=<span class="hljs-number">50</span>,<br> [<span class="hljs-type">Parameter</span>(<span class="hljs-type">Mandatory</span>=<span class="hljs-variable">$true</span>,<span class="hljs-type">HelpMessage</span>=<span class="hljs-string">"enter a or a set computer to query"</span>)]<br> [<span class="hljs-built_in">string</span>]<span class="hljs-variable">$computername</span><br>)<br></code></pre></td></tr></table></figure></li></ol><p><code>[cmdletbinding()]</code> 固定语法在<code>param()</code>前</p><p><code>$drivetype = 3</code> 这个是定义变量,powershell 会自动解析为命令行参数,忽略大小写。 -drivetype, -drive, 可以简短格式,要求惟一</p><p><code>[int]</code> <code>[string]</code></p><p><code>[Parameter(Mandatory=$true,HelpMessage="enter a or a set computer to query")]</code> 是参数检验,要求字符,要求整整型。要求必给,不给,交互式提示输入。</p><ol start="3"><li><p>脚本内容部分</p><figure class="highlight powershell"><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><code class="hljs powershell"><span class="hljs-built_in">Get-WmiObject</span> win32_logicaldisk <span class="hljs-literal">-com</span> <span class="hljs-variable">$computername</span> <span class="hljs-literal">-filter</span> <span class="hljs-string">"drivetype=<span class="hljs-variable">$drivetype</span>"</span> | ? { (<span class="hljs-variable">$_</span>.freespace / <span class="hljs-variable">$_</span>.size * <span class="hljs-number">100</span> ) <span class="hljs-operator">-gt</span> <span class="hljs-variable">$gtfree</span>} | <span class="hljs-built_in">select</span> deviceid,<br> <span class="hljs-selector-tag">@</span>{L=<span class="hljs-string">'freesize(gb)'</span>;E={<span class="hljs-variable">$_</span>.freespace / <span class="hljs-number">1</span>gb <span class="hljs-operator">-as</span> [<span class="hljs-built_in">int</span>]}},<br> <span class="hljs-selector-tag">@</span>{L=<span class="hljs-string">'size(gb)'</span>;E={<span class="hljs-variable">$_</span>.size / <span class="hljs-number">1</span>gb <span class="hljs-operator">-as</span> [<span class="hljs-built_in">int</span>]}},<br> <span class="hljs-selector-tag">@</span>{L=<span class="hljs-string">'%free'</span>;E={ <span class="hljs-variable">$_</span>.freespace / <span class="hljs-variable">$_</span>.size *<span class="hljs-number">100</span> <span class="hljs-operator">-as</span> [<span class="hljs-built_in">int</span>]}}<br></code></pre></td></tr></table></figure></li></ol><p>这里就是命令,只是可变的部分已抽成参数。</p><p>执行</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">15</span>:<span class="hljs-number">23</span> [<span class="hljs-type">PS</span>] D:\ :> .\test.ps1 -?<br><br>名称<br> D:\test.ps1<br><br>摘要<br> 从<span class="hljs-number">1</span>个或多个计算机获取逻辑磁盘信息<br><br><br>语法<br> D:\test.ps1 [[-<span class="hljs-type">drivetype</span>] <<span class="hljs-built_in">Int</span><span class="hljs-type">32</span>>] [[-<span class="hljs-type">gtfree</span>] <<span class="hljs-built_in">Int</span><span class="hljs-type">32</span>>] [-<span class="hljs-type">computername</span>] <St<br> ring> [<<span class="hljs-type">CommonParameters</span>>]<br><br><br>说明<br> 使用WMI接口从<span class="hljs-number">1</span>或多个主机获取, 可用空间大于<span class="hljs-number">50</span>%的win32_logicaldisk实例。 显<br> 示磁盘驱动,空间空间,总大小,空闲百分比<br><br><br>相关链接<br><br>备注<br> 若要查看示例,请键入: <span class="hljs-string">"get-help D:\test.ps1 -examples"</span>.<br> 有关详细信息,请键入: <span class="hljs-string">"get-help D:\test.ps1 -detailed"</span>.<br> 若要获取技术信息,请键入: <span class="hljs-string">"get-help D:\test.ps1 -full"</span>.<br></code></pre></td></tr></table></figure><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs powershell">D:\test.ps1 [[-<span class="hljs-type">drivetype</span>] <<span class="hljs-built_in">Int</span><span class="hljs-type">32</span>>] [[-<span class="hljs-type">gtfree</span>] <<span class="hljs-built_in">Int</span><span class="hljs-type">32</span>>] [-<span class="hljs-type">computername</span>] <St<br> ring> [<<span class="hljs-type">CommonParameters</span>>]<br></code></pre></td></tr></table></figure><p>说明每个参数均可以按位置传递参数。</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-number">15</span>:<span class="hljs-number">23</span> [<span class="hljs-type">PS</span>] D:\ :> .\test.ps1<br><br>位于命令管道位置 <span class="hljs-number">1</span> 的 cmdlet test.ps1<br>请为以下参数提供值:<br>(请键入 !? 以查看帮助。)<br>computername: localhost<br><br>deviceid freesize(gb) size(gb) %free<br><span class="hljs-literal">--------</span> <span class="hljs-literal">------------</span> <span class="hljs-literal">--------</span> <span class="hljs-literal">-----</span><br>E: <span class="hljs-number">82</span> <span class="hljs-number">122</span> <span class="hljs-number">67</span><br>F: <span class="hljs-number">101</span> <span class="hljs-number">101</span> <span class="hljs-number">100</span><br>G: <span class="hljs-number">396</span> <span class="hljs-number">447</span> <span class="hljs-number">89</span><br></code></pre></td></tr></table></figure>]]></content>
<categories>
<category>周末直播分享</category>
</categories>
<tags>
<tag>linux</tag>
</tags>
</entry>
<entry>
<title>Nginx通用配置</title>
<link href="/2022/07/31/Nginx%E9%80%9A%E7%94%A8%E9%85%8D%E7%BD%AE/"/>
<url>/2022/07/31/Nginx%E9%80%9A%E7%94%A8%E9%85%8D%E7%BD%AE/</url>
<content type="html"><![CDATA[<h1 id="获取nginx配置"><a href="#获取nginx配置" class="headerlink" title="获取nginx配置"></a>获取nginx配置</h1><p>配置格式</p><figure class="highlight crmsh"><table><tr><td class="gutter"><div class="code-wrapper"><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></pre></div></td><td class="code"><pre><code class="hljs crmsh"><span class="hljs-comment"># global</span><br><br><span class="hljs-comment"># 4</span><br>stream {<br>...<br>}<br><span class="hljs-comment"># 7</span><br>http {<br>...<br>server {<br>...<br><span class="hljs-keyword">location</span> <span class="hljs-title">/ {</span><br><span class="hljs-title">root</span><br>index<br>}<br>}<br><br>server {<br>...<br><span class="hljs-keyword">location</span> <span class="hljs-title">/ {</span><br><span class="hljs-title">root</span> <br>index<br>}<br>}<br>}<br><br>types {<br>...<br>}<br><br><br></code></pre></td></tr></table></figure><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><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br></pre></td><td class="code"><pre><code class="hljs bash">[root@nginx-2 ~]<span class="hljs-comment"># nginx -T</span><br><span class="hljs-comment"># 语法检查</span><br>nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok<br>nginx: configuration file /apps/nginx/conf/nginx.conf <span class="hljs-built_in">test</span> is successful<br><br><span class="hljs-comment"># 配置文件/apps/nginx/conf/nginx.conf</span><br><span class="hljs-comment"># configuration file /apps/nginx/conf/nginx.conf:</span><br><br><br><span class="hljs-comment">####################### 全局段 #######################</span><br><span class="hljs-comment">#user nobody;</span><br>worker_processes 1;<br><br><span class="hljs-comment">#error_log logs/error.log;</span><br><span class="hljs-comment">#error_log logs/error.log notice;</span><br><span class="hljs-comment">#error_log logs/error.log info;</span><br><br><span class="hljs-comment">#pid logs/nginx.pid;</span><br><br><span class="hljs-comment">####################### 事件配置段 #######################</span><br>events {<br> worker_connections 1024;<br>}<br><br><span class="hljs-comment">####################### http配置段 #######################</span><br>http {<br><span class="hljs-comment">####################### http中的配置 #######################</span><br> include mime.types;<br> default_type application/octet-stream;<br><br> <span class="hljs-comment">#log_format main '$remote_addr - $remote_user [$time_local] "$request" '</span><br> <span class="hljs-comment"># '$status $body_bytes_sent "$http_referer" '</span><br> <span class="hljs-comment"># '"$http_user_agent" "$http_x_forwarded_for"';</span><br><br> <span class="hljs-comment">#access_log logs/access.log main;</span><br><br> sendfile on;<br> <span class="hljs-comment">#tcp_nopush on;</span><br><br> <span class="hljs-comment">#keepalive_timeout 0;</span><br> keepalive_timeout 65;<br><br> <span class="hljs-comment">#gzip on;</span><br><span class="hljs-comment">####################### server配置段 #######################</span><br> server {<br> <span class="hljs-comment">####################### 虚拟主机配置 #######################</span><br> listen 80;<br> server_name localhost;<br><br> <span class="hljs-comment">#charset koi8-r;</span><br><br> <span class="hljs-comment">#access_log logs/host.access.log main;</span><br><br><span class="hljs-comment">####################### location配置段 #######################</span><br> location / {<br> <span class="hljs-comment">####################### url配置 #######################</span><br> root html;<br> index index.html index.htm;<br> }<br><br> <span class="hljs-comment">#error_page 404 /404.html;</span><br><br> <span class="hljs-comment"># redirect server error pages to the static page /50x.html</span><br> <span class="hljs-comment">#</span><br> error_page 500 502 503 504 /50x.html;<br> location = /50x.html {<br> root html;<br> }<br><br> <span class="hljs-comment"># proxy the PHP scripts to Apache listening on 127.0.0.1:80</span><br> <span class="hljs-comment">#</span><br> <span class="hljs-comment">#location ~ \.php$ {</span><br> <span class="hljs-comment"># proxy_pass http://127.0.0.1;</span><br> <span class="hljs-comment">#}</span><br><br> <span class="hljs-comment"># pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000</span><br> <span class="hljs-comment">#</span><br> <span class="hljs-comment">#location ~ \.php$ {</span><br> <span class="hljs-comment"># root html;</span><br> <span class="hljs-comment"># fastcgi_pass 127.0.0.1:9000;</span><br> <span class="hljs-comment"># fastcgi_index index.php;</span><br> <span class="hljs-comment"># fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;</span><br> <span class="hljs-comment"># include fastcgi_params;</span><br> <span class="hljs-comment">#}</span><br><br> <span class="hljs-comment"># deny access to .htaccess files, if Apache's document root</span><br> <span class="hljs-comment"># concurs with nginx's one</span><br> <span class="hljs-comment">#</span><br> <span class="hljs-comment">#location ~ /\.ht {</span><br> <span class="hljs-comment"># deny all;</span><br> <span class="hljs-comment">#}</span><br> }<br><br><br> <span class="hljs-comment"># another virtual host using mix of IP-, name-, and port-based configuration</span><br> <span class="hljs-comment">#</span><br> <span class="hljs-comment">#server {</span><br> <span class="hljs-comment"># listen 8000;</span><br> <span class="hljs-comment"># listen somename:8080;</span><br> <span class="hljs-comment"># server_name somename alias another.alias;</span><br><br> <span class="hljs-comment"># location / {</span><br> <span class="hljs-comment"># root html;</span><br> <span class="hljs-comment"># index index.html index.htm;</span><br> <span class="hljs-comment"># }</span><br> <span class="hljs-comment">#}</span><br><br><br> <span class="hljs-comment"># HTTPS server</span><br> <span class="hljs-comment">#</span><br> <span class="hljs-comment">#server {</span><br> <span class="hljs-comment"># listen 443 ssl;</span><br> <span class="hljs-comment"># server_name localhost;</span><br><br> <span class="hljs-comment"># ssl_certificate cert.pem;</span><br> <span class="hljs-comment"># ssl_certificate_key cert.key;</span><br><br> <span class="hljs-comment"># ssl_session_cache shared:SSL:1m;</span><br> <span class="hljs-comment"># ssl_session_timeout 5m;</span><br><br> <span class="hljs-comment"># ssl_ciphers HIGH:!aNULL:!MD5;</span><br> <span class="hljs-comment"># ssl_prefer_server_ciphers on;</span><br><br> <span class="hljs-comment"># location / {</span><br> <span class="hljs-comment"># root html;</span><br> <span class="hljs-comment"># index index.html index.htm;</span><br> <span class="hljs-comment"># }</span><br> <span class="hljs-comment">#}</span><br><br>}<br><br><span class="hljs-comment"># configuration file /apps/nginx/conf/mime.types:</span><br><br>types {<br> text/html html htm shtml;<br> text/css css;<br> text/xml xml;<br> image/gif gif;<br> image/jpeg jpeg jpg;<br> application/javascript js;<br> application/atom+xml atom;<br> application/rss+xml rss;<br><br> text/mathml mml;<br> text/plain txt;<br> text/vnd.sun.j2me.app-descriptor jad;<br> text/vnd.wap.wml wml;<br> text/x-component htc;<br><br> image/avif avif;<br> image/png png;<br> image/svg+xml svg svgz;<br> image/tiff tif tiff;<br> image/vnd.wap.wbmp wbmp;<br> image/webp webp;<br> image/x-icon ico;<br> image/x-jng jng;<br> image/x-ms-bmp bmp;<br><br> font/woff woff;<br> font/woff2 woff2;<br><br> application/java-archive jar war ear;<br> application/json json;<br> application/mac-binhex40 hqx;<br> application/msword doc;<br> application/pdf pdf;<br> application/postscript ps eps ai;<br> application/rtf rtf;<br> application/vnd.apple.mpegurl m3u8;<br> application/vnd.google-earth.kml+xml kml;<br> application/vnd.google-earth.kmz kmz;<br> application/vnd.ms-excel xls;<br> application/vnd.ms-fontobject eot;<br> application/vnd.ms-powerpoint ppt;<br> application/vnd.oasis.opendocument.graphics odg;<br> application/vnd.oasis.opendocument.presentation odp;<br> application/vnd.oasis.opendocument.spreadsheet ods;<br> application/vnd.oasis.opendocument.text odt;<br> application/vnd.openxmlformats-officedocument.presentationml.presentation<br> pptx;<br> application/vnd.openxmlformats-officedocument.spreadsheetml.sheet<br> xlsx;<br> application/vnd.openxmlformats-officedocument.wordprocessingml.document<br> docx;<br> application/vnd.wap.wmlc wmlc;<br> application/wasm wasm;<br> application/x-7z-compressed 7z;<br> application/x-cocoa cco;<br> application/x-java-archive-diff jardiff;<br> application/x-java-jnlp-file jnlp;<br> application/x-makeself run;<br> application/x-perl pl pm;<br> application/x-pilot prc pdb;<br> application/x-rar-compressed rar;<br> application/x-redhat-package-manager rpm;<br> application/x-sea sea;<br> application/x-shockwave-flash swf;<br> application/x-stuffit sit;<br> application/x-tcl tcl tk;<br> application/x-x509-ca-cert der pem crt;<br> application/x-xpinstall xpi;<br> application/xhtml+xml xhtml;<br> application/xspf+xml xspf;<br> application/zip zip;<br><br> application/octet-stream bin exe dll;<br> application/octet-stream deb;<br> application/octet-stream dmg;<br> application/octet-stream iso img;<br> application/octet-stream msi msp msm;<br><br> audio/midi mid midi kar;<br> audio/mpeg mp3;<br> audio/ogg ogg;<br> audio/x-m4a m4a;<br> audio/x-realaudio ra;<br><br> video/3gpp 3gpp 3gp;<br> video/mp2t ts;<br> video/mp4 mp4;<br> video/mpeg mpeg mpg;<br> video/quicktime mov;<br> video/webm webm;<br> video/x-flv flv;<br> video/x-m4v m4v;<br> video/x-mng mng;<br> video/x-ms-asf asx asf;<br> video/x-ms-wmv wmv;<br> video/x-msvideo avi;<br>}<br></code></pre></td></tr></table></figure><p>版本</p><figure class="highlight jboss-cli"><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><code class="hljs jboss-cli">[root@nginx-2 ~]<span class="hljs-comment"># nginx -V</span><br>nginx <span class="hljs-keyword">version</span>: nginx/1.22.0<br>built by gcc 4.8.5 20150623 <span class="hljs-params">(Red Hat 4.8.5-44)</span> <span class="hljs-params">(GCC)</span> <br>built with OpenSSL 1.0.2k-fips 26 Jan 2017<br>TLS SNI support enabled<br>configure arguments: <span class="hljs-params">--prefix=/apps/nginx</span> <span class="hljs-params">--user=nginx</span> <span class="hljs-params">--group=nginx</span> <span class="hljs-params">--with-compat</span> <span class="hljs-params">--with-file-aio</span> <span class="hljs-params">--with-threads</span> <span class="hljs-params">--with-http_addition_module</span> <span class="hljs-params">--with-http_auth_request_module</span> <span class="hljs-params">--with-http_gunzip_module</span> <span class="hljs-params">--with-http_gzip_static_module</span> <span class="hljs-params">--with-http_random_index_module</span> <span class="hljs-params">--with-http_realip_module</span> <span class="hljs-params">--with-http_secure_link_module</span> <span class="hljs-params">--with-http_slice_module</span> <span class="hljs-params">--with-http_ssl_module</span> <span class="hljs-params">--with-http_stub_status_module</span> <span class="hljs-params">--with-http_sub_module</span> <span class="hljs-params">--with-http_v2_module</span> <span class="hljs-params">--with-stream</span> <span class="hljs-params">--with-stream_realip_module</span> <span class="hljs-params">--with-stream_ssl_module</span> <span class="hljs-params">--with-stream_ssl_preread_module</span> <span class="hljs-params">--with-http_geoip_module=dynamic</span> <span class="hljs-params">--with-stream_geoip_module=dynamic</span><br>[root@nginx-2 ~]<span class="hljs-comment"># </span><br></code></pre></td></tr></table></figure><p>由nginx -T可以得到几个配置段</p><ul><li>全局 nginx配置相关</li><li>event IO模型配置段</li><li>http web服务器, http代理<ul><li>server<ul><li>location</li></ul></li></ul></li><li>stream tcp代理</li></ul><h2 id="全局配置"><a href="#全局配置" class="headerlink" title="全局配置"></a>全局配置</h2><figure class="highlight nginx"><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></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">user</span> nginx;<br><span class="hljs-attribute">worker_processes</span> auto;<br><span class="hljs-attribute">worker_cpu_affinity</span> auto;<br><span class="hljs-attribute">error_log</span> logs/<span class="hljs-literal">error</span>.log <span class="hljs-literal">error</span>;<br><span class="hljs-attribute">pid</span> logs/nginx.pid;<br><span class="hljs-comment">#这个数字包括Nginx的所有连接(例如与代理服务器的连接等),⽽不仅仅是与客户端的连接,另⼀个考虑因素是实际的并发连接数不能超过系统级别的最⼤打开⽂件数的限制.</span><br><span class="hljs-attribute">worker_rlimit_nofile</span> <span class="hljs-number">65536</span>; <br><span class="hljs-comment">#/proc/sys/fs/file-max 所有进程最大的文件数</span><br><br><span class="hljs-section">events</span> {<br> <span class="hljs-comment">#设置单个work进程的最大并发连接数 总并发 = worker_connections * worker_processes</span><br> <span class="hljs-attribute">worker_connections</span> <span class="hljs-number">10000</span>;<br> <span class="hljs-attribute">use</span> <span class="hljs-literal">epoll</span>;<br> <span class="hljs-comment">#优化同⼀时刻只有⼀个请求⽽避免多个睡眠进程被唤醒的设置,on为防⽌被同时唤醒,默认为off,全部唤醒的过程也成为"惊群",因此nginx刚安装完以后要进⾏适当的优化。</span><br> <span class="hljs-attribute">accept_mutex</span> <span class="hljs-literal">on</span>; <br> <span class="hljs-comment">#Nginx服务器的每个⼯作进程可以同时接受多个新的⽹络连接,但是需要在配置⽂件中配置,此指令默认为关闭,即默认为⼀个⼯作进程只能⼀次接受⼀个新的⽹络连接,打开后⼏个同时接受多个。</span><br> <span class="hljs-attribute">multi_accept</span> <span class="hljs-literal">on</span>; <br> <br>}<br></code></pre></td></tr></table></figure><h2 id="http段配置"><a href="#http段配置" class="headerlink" title="http段配置"></a>http段配置</h2><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">http</span> {<br> <span class="hljs-comment">#导⼊⽀持的⽂件类型</span><br> <span class="hljs-attribute">include</span> mime.types;<br> <span class="hljs-attribute">default_type</span> application/octet-stream;<br><br><br> <span class="hljs-attribute">log_format</span> main <span class="hljs-string">'<span class="hljs-variable">$remote_addr</span> - <span class="hljs-variable">$remote_user</span> [<span class="hljs-variable">$time_local</span>] "<span class="hljs-variable">$request</span>" '</span><br> <span class="hljs-string">'<span class="hljs-variable">$status</span> <span class="hljs-variable">$body_bytes_sent</span> "<span class="hljs-variable">$http_referer</span>" '</span><br> <span class="hljs-string">'"<span class="hljs-variable">$http_user_agent</span>" "<span class="hljs-variable">$http_x_forwarded_for</span>"'</span>;<br><br> <span class="hljs-comment">#access_log logs/access.log main;</span><br><span class="hljs-attribute">log_format</span> access_json <span class="hljs-string">'{"<span class="hljs-variable">@timestamp</span>":"<span class="hljs-variable">$time_iso8601</span>",'</span> <span class="hljs-comment">#访问时间</span><br> <span class="hljs-string">'"host":"<span class="hljs-variable">$server_addr</span>",'</span> <span class="hljs-comment">#访问的nginx主机地址</span><br> <span class="hljs-string">'"clientip":"<span class="hljs-variable">$remote_addr</span>",'</span> <span class="hljs-comment">#访问nginx客户端地址</span><br> <span class="hljs-string">'"size":<span class="hljs-variable">$body_bytes_sent</span>,'</span> <span class="hljs-comment">#传输到客户端的字节数,不算响应头</span><br> <span class="hljs-string">'"responsetime":<span class="hljs-variable">$request_time</span>,'</span> <span class="hljs-comment">#处理请求的时间</span><br> <span class="hljs-string">'"upstreamtime":"<span class="hljs-variable">$upstream_response_time</span>",'</span> <br> <span class="hljs-string">'"upstreamhost":"<span class="hljs-variable">$upstream_addr</span>",'</span><br> <span class="hljs-string">'"http_host":"<span class="hljs-variable">$host</span>",'</span> <span class="hljs-comment">#请求的主机名</span><br> <span class="hljs-string">'"uri":"<span class="hljs-variable">$uri</span>",'</span> <span class="hljs-comment">#uri </span><br> <span class="hljs-string">'"domain":"<span class="hljs-variable">$host</span>",'</span> <br> <span class="hljs-string">'"xff":"<span class="hljs-variable">$http_x_forwarded_for</span>",'</span> <span class="hljs-comment">#如果用户是从CDN代理转发过来的会显示所有转发的地址</span><br> <span class="hljs-string">'"referer":"<span class="hljs-variable">$http_referer</span>",'</span> <span class="hljs-comment">#显示客户端从那个页面到来的</span><br> <span class="hljs-string">'"tcp_xff":"<span class="hljs-variable">$proxy_protocol_addr</span>",'</span> <span class="hljs-comment">#获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串</span><br> <span class="hljs-string">'"http_user_agent":"<span class="hljs-variable">$http_user_agent</span>",'</span> <span class="hljs-comment">#客户端信息</span><br> <span class="hljs-string">'"status":"<span class="hljs-variable">$status</span>"}'</span>; <span class="hljs-comment">#状态码</span><br> <span class="hljs-attribute">access_log</span> logs/access.log access_json; <span class="hljs-comment">#使用日志格式</span><br><br> <span class="hljs-comment"># 第2阶段不等待</span><br> <span class="hljs-attribute">sendfile</span> <span class="hljs-literal">on</span>;<br><span class="hljs-comment"># 场景: 在磁盘上有较⼤⽂件的场合,⽐如视频、⾳频等。当文件大于4M时不会使用sendfile, 不会磁盘加载到内核了,直接读磁盘。第1阶段和第2阶段均省略。</span><br><span class="hljs-attribute">directio</span> <span class="hljs-number">4m</span>;<br><br> <span class="hljs-comment"># 在开启了sendfile的情况下,多个文件合并请求后统⼀发送给客户端。</span><br> <span class="hljs-comment"># 场景: 高并发on减少开销。并发小on有延迟。</span><br> <span class="hljs-attribute">tcp_nopush</span> <span class="hljs-literal">off</span>;<br> <br><span class="hljs-comment"># ⽤asynchronous file I/O(AIO)功能,需要编译开启 --with-file-aio</span><br><span class="hljs-attribute">aio</span> <span class="hljs-literal">on</span>; <br><br> <br> <span class="hljs-comment">############# 长连接 start #############</span><br> <span class="hljs-comment"># 设置会话保持时间,如果写俩个参数表示, 后面的参数会告诉客户端, 第1个是保持时间</span><br> <span class="hljs-attribute">keepalive_timeout</span> <span class="hljs-number">65</span> <span class="hljs-number">65</span>;<br> <span class="hljs-comment"># 连接后允许传输的最大文件数量 过小时,一个会话如果达到请求数量,nginx会主动断开连接,造成nginx端出现大量TIME_WAIT</span><br> <span class="hljs-attribute">keepalive_requests</span> <span class="hljs-number">2000</span>; <br> <span class="hljs-comment"># 在开启了keepalived模式下的连接是否启⽤TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,⽴即发送⽤户相应报⽂。</span><br> <span class="hljs-comment"># 场景: 默认on 等0.2让数据包累积之后发送,高并发减少开销。并发小on有延迟。</span><br><span class="hljs-attribute">tcp_nodelay</span> <span class="hljs-literal">off</span>; <br><span class="hljs-comment"># 禁用ie6不建立长连接;</span><br><span class="hljs-attribute">keepalive_disable</span> msie6; <br> <span class="hljs-comment">############# 长连接 stop #############</span><br> <br><br><br><span class="hljs-comment">############# 压缩 start #############</span><br><span class="hljs-attribute">gzip</span> <span class="hljs-literal">on</span>; <br><span class="hljs-attribute">gzip_comp_level</span> <span class="hljs-number">5</span>;<br><br><span class="hljs-comment"># IE6 不压缩</span><br><span class="hljs-attribute">gzip_disable</span> <span class="hljs-string">"MSIE [1-6]\."</span>;<br><span class="hljs-comment"># 即使http 1.0也支持压缩,默认1.1</span><br><span class="hljs-attribute">gzip_http_version</span> <span class="hljs-number">1</span>.<span class="hljs-number">0</span>;<br><br><span class="hljs-attribute">gzip_min_length</span> <span class="hljs-number">1k</span>; <span class="hljs-comment"># 至少1k文件才压缩</span><br><span class="hljs-attribute">gzip_types</span> text/plain application/json application/javascript application/x-javascript text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;<br><span class="hljs-comment"># 压缩打开时, 响应报⽂⾸部插⼊“Vary: Accept-Encoding”</span><br><span class="hljs-attribute">gzip_vary</span> <span class="hljs-literal">on</span>;<br><span class="hljs-comment">############# 压缩 stop #############</span><br><br><span class="hljs-comment">############# 上传优化 start #############</span><br><br><span class="hljs-comment"># 设置允许客⼾端上传单个⽂件的最⼤值,默认值为1m</span><br><span class="hljs-comment"># 如果上传大小超过nginx限制,nginx会返回 413 错误代码 </span><br> <span class="hljs-attribute">client_max_body_size</span> <span class="hljs-number">1024m</span>;<br> <span class="hljs-comment"># 上传请求体大于16k默认值,会文件缓存</span><br> <span class="hljs-attribute">client_body_buffer_size</span> <span class="hljs-number">16k</span>;<br> <span class="hljs-attribute">client_body_temp_path</span> /apps/nginx/client_body_temp <span class="hljs-number">1</span> <span class="hljs-number">2</span> <span class="hljs-number">2</span>;<br><span class="hljs-comment">############# 上传优化 stop #############</span><br> <br><span class="hljs-comment">############# 文件响应缓存 start #############</span><br><span class="hljs-comment"># 最大缓存10000个文件,非活动数据超时时长60s</span><br><span class="hljs-attribute">open_file_cache</span> max=<span class="hljs-number">10000</span> inactive=<span class="hljs-number">60s</span>;<br><br><span class="hljs-comment"># 每间隔60s检查⼀下缓存数据有效性</span><br><span class="hljs-attribute">open_file_cache_valid</span> <span class="hljs-number">60s</span>;<br><br><span class="hljs-comment"># 60秒内⾄少被命中访问5次才被标记为活动数据; 没有5次就是非活动,60s过期。同时会被清理。</span><br><span class="hljs-attribute">open_file_cache_min_uses</span> <span class="hljs-number">5</span>;<br><br><span class="hljs-comment"># 缓存错误信息 </span><br><span class="hljs-attribute">open_file_cache_errors</span> <span class="hljs-literal">on</span>;<br><br><span class="hljs-comment">############# 文件响应缓存 stop #############</span><br><br><span class="hljs-comment">############# 响应配置 start #############</span><br><span class="hljs-comment"># 流程 Client -> Nginx</span><br><span class="hljs-comment"># Nginx响应给客户端时,添加首部</span><br><span class="hljs-attribute">add_header</span> X-cache <span class="hljs-variable">$upstream_cache_status</span>;<br><span class="hljs-attribute">add_header</span> X-Via MageEdu;<br><br><span class="hljs-comment"># 安全</span><br><span class="hljs-comment"># 隐藏Nginx server版本。配置在http块中</span><br><span class="hljs-attribute">server_tokens</span> <span class="hljs-literal">off</span>; <br><br><span class="hljs-comment">############# 响应配置 stop #############</span><br><br><span class="hljs-comment">############# proxy_pass 相关代理配置 start #############</span><br><span class="hljs-comment"># 流程 Client -> Nginx Proxy -> Real Server</span><br><span class="hljs-comment"># 当前配置的是 Nginx Proxy -> Real Server</span><br><br><span class="hljs-comment">##### 建立连接 ===</span><br><span class="hljs-comment"># 建立连接版本</span><br><span class="hljs-attribute">proxy_http_version</span> <span class="hljs-number">1</span>.<span class="hljs-number">0</span>; <br><br><span class="hljs-comment"># 建立连接超时,建立失败503</span><br> <span class="hljs-attribute">proxy_connect_timeout</span> <span class="hljs-number">60s</span>;<br> <span class="hljs-comment"># 读请求的超时, 如果后端mysql查询时间太长, 默认值就会让nginx给用户响应502.</span><br> <span class="hljs-attribute">proxy_read_timeout</span> <span class="hljs-number">60s</span>;<br> <span class="hljs-comment"># 写请求的超时, 如果后端mysql写入时间太长, 默认值就会让nginx给用户响应502.</span><br> <span class="hljs-attribute">proxy_send_timeout</span> <span class="hljs-number">60s</span>;<br><span class="hljs-comment">##### 建立连接 ===~~~</span><br><br><span class="hljs-comment">##### 传递首部 ===</span><br><span class="hljs-comment"># 后端apache: /etc/httpd/conf/httpd.conf LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{UserAgent}i\"" combined 其中%{}i 表示引用HTTP首部</span><br> <span class="hljs-comment"># 后端nginx: /apps/nginx/conf/nginx.conf "$http_x_forwarded_for"' #默认⽇志格式就有此配置 http_开头表示引用HTTP首部</span><br> <br> <span class="hljs-comment"># 场景1: 后端需要真实的客户端IP</span><br> <span class="hljs-comment"># Client -> Nginx Proxy -> Real Server(apache, Nginx)</span><br> <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$remote_addr</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br> <span class="hljs-comment"># Client -> Nginx Proxy1 -> Nginx Proxy2 -> Nginx Proxy2 -> Real Server(apache, Nginx)</span><br> <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;<br> <br> <span class="hljs-comment"># 场景2: 后端nginx需要依据Host首部选择虚拟主机</span><br> <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>; <br> <br> <br> <span class="hljs-comment"># 代理模式下,大量转发时,Ngx直接读缓存,直接转发。</span><br> <span class="hljs-comment"># 当设定 proxy_set_header或hide_header,用于保存http报文header的hash表上限。</span><br> <span class="hljs-attribute">proxy_headers_hash_bucket_size</span> <span class="hljs-number">128</span>;<br> <span class="hljs-comment"># 设定 hash bucket size最大空间。字节</span><br> <span class="hljs-attribute">proxy_headers_hash_max_size</span> <span class="hljs-number">512</span>;<br> <span class="hljs-comment"># 保存server_name的hash表及上限。字节</span><br> <span class="hljs-attribute">server_names_hash_bucket_size</span> <span class="hljs-number">512</span>;<br> <span class="hljs-attribute">server_names_hash_max_size</span> <span class="hljs-number">512</span>;<br> <br><span class="hljs-comment">##### 传递首部 ===~~~</span><br><br><span class="hljs-comment">##### 响应请求 ===</span><br><span class="hljs-comment"># 默认隐藏后端传递给客户端 “Date”, “Server”, “X-Pad”, and “X-Accel-...” 首部</span><br><span class="hljs-comment"># 额外定义隐藏,后端本身支持了跨域,nginx处也配置跨域时,需要把后端的跨域首部隐藏. proxy_hide_header Access-Control-Allow-Origin;</span><br><span class="hljs-comment">#proxy_hide_header field;</span><br><span class="hljs-comment"># 许可传递后端的首部,从代理服务器传递给客户端. 本来后端默认隐藏server, 现在许可传递Server, 当然这不安全。</span><br><span class="hljs-comment">#proxy_pass_header field;</span><br><br><span class="hljs-comment"># 场景: 客户端发起请求后,主动断开时,nginx如何处理? off,默认配置时, 大量的499表示"当前请求"后端响应慢,用户等的不耐烦了。后端太慢</span><br> <span class="hljs-comment"># 默认off, nginx直接中断client连接,直接记录499响应码。但是后端还在处理请求。</span><br> <span class="hljs-comment"># on表示nginx会忽略客户中断,一直等后端响应。要么200,要么超时502。</span><br> <span class="hljs-attribute">proxy_ignore_client_abort</span> <span class="hljs-literal">off</span>;<br><span class="hljs-comment">##### 响应请求 ===~~~</span><br><br><span class="hljs-comment">##### 缓存响应 ===</span><br><br> <span class="hljs-comment"># 以指定key缓存。默认$scheme$proxy_host$request_uri;</span><br> <span class="hljs-attribute">proxy_cache_key</span> <span class="hljs-variable">$request_uri</span>;<br> <span class="hljs-comment"># 定义对特定响应码的响应内容的缓存时⻓. 200 302 301 缓存10m分钟</span><br> <span class="hljs-comment"># any表示除了200,302,301缓存1m.</span><br> <span class="hljs-attribute">proxy_cache_valid</span> <span class="hljs-number">200</span> <span class="hljs-number">302</span> <span class="hljs-number">301</span> <span class="hljs-number">10m</span>; <br> <span class="hljs-attribute">proxy_cache_valid</span> any <span class="hljs-number">1m</span>; <br> <br> <span class="hljs-comment"># 缓存的位置</span><br> <span class="hljs-comment"># levels=1:2:2 缓存目录。1表示16进制0-f. 将文件md5从后向前取,第1个为1级子目录,第2-3为2级目录,第4-5为三级目录。加速查找</span><br> <span class="hljs-comment"># proxycache:20m 缓存区域名,大小(主要用来存放key和metadata)</span><br> <span class="hljs-comment"># inactive 缓存有效期</span><br> <span class="hljs-comment"># max_size 占用磁盘空间大小,在inactive时间内,有效缓存, 看会有多少缓存。</span><br> <span class="hljs-attribute">proxy_cache_path</span> /apps/nginx/cache/proxy_temp levels=<span class="hljs-number">1</span>:<span class="hljs-number">2</span>:<span class="hljs-number">2</span> keys_zone=proxycache:<span class="hljs-number">20m</span> inactive=<span class="hljs-number">120s</span> max_size=<span class="hljs-number">1g</span>;<br> <br> <br><span class="hljs-comment"># 后端不可用使用缓存?不需要</span><br><span class="hljs-comment"># ngx_http_upstream_module 可以4层检查后端,不在线会自动下线。</span><br><span class="hljs-comment"># 后端全部挂了,zabbix有监控。</span><br><span class="hljs-comment"># proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;</span><br><br><br><span class="hljs-comment">##### 缓存响应 ===~~~</span><br><br><br><span class="hljs-comment">############# proxy_pass 相关代理配置 stop #############</span><br><br><span class="hljs-comment">############# fastcgi_pass 相关代理配置 start #############</span><br> <span class="hljs-attribute">fastcgi_cache_key</span> <span class="hljs-variable">$request_uri</span>;<br> <span class="hljs-attribute">fastcgi_cache_path</span> /apps/nginx/cache/fastcgi_temp levels=<span class="hljs-number">1</span>:<span class="hljs-number">2</span>:<span class="hljs-number">2</span> keys_zone=fastcgicache:<span class="hljs-number">20m</span> inactive=<span class="hljs-number">120s</span> max_size=<span class="hljs-number">1g</span>;<br> <span class="hljs-comment">#fastcgi_cache_stale</span><br> <span class="hljs-attribute">fastcgi_cache_valid</span> <span class="hljs-number">200</span> <span class="hljs-number">302</span> <span class="hljs-number">301</span> <span class="hljs-number">10m</span>;<br> <span class="hljs-attribute">fastcgi_cache_valid</span> any <span class="hljs-number">1m</span>;<br><span class="hljs-comment">############# fastcgi_pass 相关代理配置 stop #############</span><br><br> <span class="hljs-comment"># server 配置独立</span><br> <span class="hljs-attribute">include</span> conf.d/<span class="hljs-regexp">*.conf</span>;<br>}<br></code></pre></td></tr></table></figure><figure class="highlight crystal"><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><code class="hljs crystal">install -dv cache/{proxy_temp,fastcgi_temp}<br><br>[root<span class="hljs-variable">@localhost</span> ~]<span class="hljs-comment"># which nginx</span><br><span class="hljs-regexp">/apps/nginx</span><span class="hljs-regexp">/sbin/nginx</span><br>[root<span class="hljs-variable">@localhost</span> ~]<span class="hljs-comment"># nginx -t</span><br>[root<span class="hljs-variable">@localhost</span> ~]<span class="hljs-comment"># systemctl restart nginx</span><br></code></pre></td></tr></table></figure><h2 id="server段配置"><a href="#server段配置" class="headerlink" title="server段配置"></a>server段配置</h2><h1 id="基本的web网站"><a href="#基本的web网站" class="headerlink" title="基本的web网站"></a>基本的web网站</h1><figure class="highlight awk"><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></pre></td><td class="code"><pre><code class="hljs awk">[root@localhost nginx]<span class="hljs-comment"># cat /apps/nginx/conf/conf.d/default.conf </span><br>server {<br> listen <span class="hljs-number">80</span>;<br> <span class="hljs-comment">#listen 443 ssl;</span><br> <span class="hljs-comment">#server_name blog.mykernel.cn www.mykernel.cn mykernel.cn;</span><br> <span class="hljs-comment"># 证书</span><br> <span class="hljs-comment">#ssl_certificate /apps/nginx/certs/4899578_mykernel.cn.pem;</span><br> <span class="hljs-comment"># 私钥</span><br> <span class="hljs-comment">#ssl_certificate_key /apps/nginx/certs/4899578_mykernel.cn.key;</span><br> <span class="hljs-comment"># ssl缓存</span><br> <span class="hljs-comment">#ssl_session_cache shared:sslcache:20m;</span><br> <span class="hljs-comment"># 缓存失效</span><br> <span class="hljs-comment">#ssl_session_timeout 10m;</span><br><br> location / {<br> <span class="hljs-comment">#if ( $scheme ~* "http$") {</span><br> <span class="hljs-comment"># rewrite ^(.*)$ https://mykernel.cn$1 permanent;</span><br> <span class="hljs-comment">#}</span><br> root <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/html/</span>;<br> }<br> <br> location ^~ <span class="hljs-regexp">/static/</span> {<br> expires <span class="hljs-number">90</span>d; <span class="hljs-comment">#设置⽂件过期时间</span><br> }<br><br> location /statics { <span class="hljs-comment">#旧版本程序中的请求路径需要重写请求路径后再响应给客户端,不需要在跳转⾄其他location</span><br> root <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/html/</span>;<br> index index.html;<br> rewrite ^<span class="hljs-regexp">/statics/</span>(.*) <span class="hljs-regexp">/static/</span><span class="hljs-variable">$1</span> <span class="hljs-keyword">break</span>;<br> }<br>}<br></code></pre></td></tr></table></figure><h1 id="ssl配置"><a href="#ssl配置" class="headerlink" title="ssl配置"></a>ssl配置</h1><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">install -dv <span class="hljs-regexp">/apps/</span>nginx/certs<br></code></pre></td></tr></table></figure><p>准备ca</p><figure class="highlight stata"><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><code class="hljs stata">private_key=<span class="hljs-keyword">ca</span>.key<br>certificate=<span class="hljs-keyword">ca</span>.pem<br>openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout <span class="hljs-variable">$private_key</span> -<span class="hljs-keyword">out</span> <span class="hljs-variable">$certificate</span> -nodes -subj '/C=CN/<span class="hljs-keyword">ST</span>=<span class="hljs-keyword">SC</span>/<span class="hljs-keyword">L</span>=<span class="hljs-keyword">CD</span>/O=OPS/<span class="hljs-keyword">OU</span>=OPS/CN=<span class="hljs-keyword">ca</span>.mykernel.cn' -verbose<br></code></pre></td></tr></table></figure><p>准备自己的公钥和秘钥</p><figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs stata">openssl req -newkey rsa:4096 -keyout blog.mykernel.key -<span class="hljs-keyword">out</span> blog.mykernel.csr \<br> -nodes -days 365 -subj '/C=CN/<span class="hljs-keyword">ST</span>=<span class="hljs-keyword">SC</span>/<span class="hljs-keyword">L</span>=<span class="hljs-keyword">CD</span>/O=OPS/<span class="hljs-keyword">OU</span>=OPS/CN=blog.mykernel.cn' -verbose<br></code></pre></td></tr></table></figure><p>签发多域名证书 domain.ext</p><figure class="highlight ini"><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><code class="hljs ini"><span class="hljs-attr">basicConstraints</span>=CA:<span class="hljs-literal">FALSE</span><br><span class="hljs-attr">subjectAltName</span> = @alt_names<br><span class="hljs-section">[alt_names]</span><br><span class="hljs-attr">DNS.1</span> = mykernel.cn<br><span class="hljs-attr">DNS.2</span> = www.mykernel.cn<br><span class="hljs-attr">DNS.3</span> = blog.mykernel.cn<br></code></pre></td></tr></table></figure><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs stylus">openssl x509 -req -CA <span class="hljs-variable">$certificate</span> -CAkey <span class="hljs-variable">$private_key</span> -<span class="hljs-keyword">in</span> blog<span class="hljs-selector-class">.mykernel</span><span class="hljs-selector-class">.csr</span> -out blog<span class="hljs-selector-class">.mykernel</span><span class="hljs-selector-class">.crt</span> -days <span class="hljs-number">365</span> -CAcreateserial -extfile domain.ext<br></code></pre></td></tr></table></figure><p>查看证书</p><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><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><code class="hljs bash">[root@localhost ~]<span class="hljs-comment"># openssl x509 -in blog.mykernel.crt -noout -text | grep -E -C 3 'Subject|Issuer'</span><br> Serial Number:<br> fb:a6:13:f3:7a:05:4c:ac<br> Signature Algorithm: sha256WithRSAEncryption<br> Issuer: C=CN, ST=SC, L=CD, O=OPS, OU=OPS, CN=ca.mykernel.cn <span class="hljs-comment"># 签发</span><br> Validity<br> Not Before: Jul 9 09:53:41 2022 GMT<br> Not After : Jul 9 09:53:41 2023 GMT<br> Subject: C=CN, ST=SC, L=CD, O=OPS, OU=OPS, CN=blog.mykernel.cn<br> Subject Public Key Info:<br> Public Key Algorithm: rsaEncryption<br> Public-Key: (4096 bit)<br> Modulus:<br>--<br><br> X509v3 Basic Constraints: <br> CA:FALSE<br> X509v3 Subject Alternative Name: <br> DNS:mykernel.cn, DNS:www.mykernel.cn, DNS:blog.mykernel.cn <span class="hljs-comment"># 多子域名</span><br> Signature Algorithm: sha256WithRSAEncryption<br> 25:91:57:9d:d2:00:1f:a6:3c:e6:d9:06:7d:ff:bd:e1:1c:a6:<br></code></pre></td></tr></table></figure><figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs gradle">[root@localhost ~]# cp blog.mykernel.crt blog.mykernel.key <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/certs/</span><br></code></pre></td></tr></table></figure><figure class="highlight awk"><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><code class="hljs awk">server {<br> listen <span class="hljs-number">80</span>;<br> listen <span class="hljs-number">443</span> ssl;<br> server_name blog.mykernel.cn www.mykernel.cn mykernel.cn;<br> <span class="hljs-comment"># 证书</span><br> ssl_certificate <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/certs/</span>blog.mykernel.crt;<br> <span class="hljs-comment"># 私钥</span><br> ssl_certificate_key <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/certs/</span>blog.mykernel.key;<br> <span class="hljs-comment"># ssl缓存</span><br> ssl_session_cache shared:sslcache:<span class="hljs-number">20</span>m;<br> <span class="hljs-comment"># 缓存失效</span><br> ssl_session_timeout <span class="hljs-number">10</span>m;<br><br> location / {<br> <span class="hljs-keyword">if</span> ( <span class="hljs-variable">$scheme</span> ~* <span class="hljs-string">"http$"</span>) {<br> rewrite ^(.*)$ https:<span class="hljs-regexp">//</span>blog.mykernel.cn<span class="hljs-variable">$1</span> permanent;<br> }<br> root <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/html/</span>;<br> index index.html;<br> try_files <span class="hljs-variable">$uri</span><span class="hljs-regexp">/index.html /i</span>ndex.html =<span class="hljs-number">404</span>;<br> }<br>}<br></code></pre></td></tr></table></figure><p>准备域名</p><figure class="highlight arcade"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs arcade">echo <span class="hljs-string">'127.0.0.1 blog.mykernel.cn mykernel.cn www.mykernel.cn'</span> >> <span class="hljs-regexp">/etc/</span>hosts<br></code></pre></td></tr></table></figure><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs stylus">curl <span class="hljs-attr">--cacert</span> /root/ca<span class="hljs-selector-class">.pem</span> -L www<span class="hljs-selector-class">.mykernel</span>.cn<br></code></pre></td></tr></table></figure><h1 id="alias"><a href="#alias" class="headerlink" title="alias"></a>alias</h1><figure class="highlight gradle"><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><code class="hljs gradle">location /about {<br> root <span class="hljs-regexp">/data/</span>nginx<span class="hljs-regexp">/html/</span>; #必须要在cp⽬录中创建⼀个about⽬录才可以访问,否则报错。<br> index index.html;<br>}<br><br>location /about { <br> alias <span class="hljs-regexp">/data/</span>nginx<span class="hljs-regexp">/html/</span>abc; #当访问about的时候,会显示alias定义的<span class="hljs-regexp">/data/</span>nginx<span class="hljs-regexp">/html/</span>pc⾥⾯的内容。<br> index index.html;<br>}<br></code></pre></td></tr></table></figure><h1 id="location优先级"><a href="#location优先级" class="headerlink" title="location优先级"></a>location优先级</h1><figure class="highlight excel"><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><code class="hljs excel">=<br>^~ 前缀<br>~* 不区分大小写<br>~ 区分大小写<br>普通路径匹配 /<br><br><br># 其他字段<br>$ 结尾<br>\ 转义<br></code></pre></td></tr></table></figure><h1 id="访问控制"><a href="#访问控制" class="headerlink" title="访问控制"></a>访问控制</h1><h2 id="4层"><a href="#4层" class="headerlink" title="4层"></a>4层</h2><figure class="highlight nginx"><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><code class="hljs nginx"><span class="hljs-section">location</span> /admin {<br> <span class="hljs-attribute">alias</span> /data/nginx/html/admin;<br> <span class="hljs-attribute">index</span> index.html;<br> <span class="hljs-attribute">allow</span> <span class="hljs-number">192.168.10.1</span>; <br> <span class="hljs-attribute">deny</span> <span class="hljs-number">10.0.0.0</span>/<span class="hljs-number">16</span>;<br> <span class="hljs-attribute">deny</span> all; <span class="hljs-comment">#先允许⼩部分,再拒绝⼤部分</span><br>}<br></code></pre></td></tr></table></figure><h2 id="7层"><a href="#7层" class="headerlink" title="7层"></a>7层</h2><figure class="highlight abnf"><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><code class="hljs abnf"><span class="hljs-attribute">location</span> <span class="hljs-operator">=</span> /login {<br> root /data/nginx/html<span class="hljs-comment">;</span><br> index index.html<span class="hljs-comment">;</span><br> auth_basic <span class="hljs-string">"login password"</span><span class="hljs-comment">;</span><br> auth_basic_user_file /apps/nginx/conf/.htpasswd<span class="hljs-comment">;</span><br>}<br></code></pre></td></tr></table></figure><p>准备认证文件</p><figure class="highlight awk"><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><code class="hljs awk"><span class="hljs-comment"># httpd-tools</span><br><span class="hljs-comment"># apache2-utils</span><br>htpasswd -cbm <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/conf/</span>.htpasswd user1 <span class="hljs-number">123456</span><br>htpasswd -bm <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/conf/</span>.htpasswd user2 <span class="hljs-number">123456</span><br></code></pre></td></tr></table></figure><h1 id="自定义错误"><a href="#自定义错误" class="headerlink" title="自定义错误"></a>自定义错误</h1><figure class="highlight awk"><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><code class="hljs awk">server {<br> error_page <span class="hljs-number">404</span> /<span class="hljs-number">404</span>.html;<br><br> <span class="hljs-comment"># redirect server error pages to the static page /50x.html</span><br> <span class="hljs-comment">#</span><br> error_page <span class="hljs-number">500</span> <span class="hljs-number">502</span> <span class="hljs-number">503</span> <span class="hljs-number">504</span> /<span class="hljs-number">50</span>x.html;<br> location = /<span class="hljs-number">50</span>x.html {<br> root <span class="hljs-regexp">/usr/</span>share<span class="hljs-regexp">/nginx/</span>html;<br> }<br>}<br></code></pre></td></tr></table></figure><h1 id="自定义访问日志"><a href="#自定义访问日志" class="headerlink" title="自定义访问日志"></a>自定义访问日志</h1><figure class="highlight awk"><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><code class="hljs awk">server {<br> server_name mykernel.cn;<br> access_log <span class="hljs-regexp">/data/</span>nginx<span class="hljs-regexp">/logs/my</span>kernel.cn_access.log; <span class="hljs-comment">#访问日志</span><br> error_log <span class="hljs-regexp">/data/</span>nginx<span class="hljs-regexp">/logs/my</span>kernel.cn_error.log; <span class="hljs-comment">#错误日志</span><br>}<br></code></pre></td></tr></table></figure><h1 id="检查文件是否存在"><a href="#检查文件是否存在" class="headerlink" title="检查文件是否存在"></a>检查文件是否存在</h1><figure class="highlight awk"><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><code class="hljs awk">location / {<br> root <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/html/</span>;<br> index index.html;<br> <span class="hljs-comment">#echo $uri;</span><br> try_files <span class="hljs-variable">$uri</span><span class="hljs-regexp">/index.html /i</span>ndex.html =<span class="hljs-number">404</span>;<br>}<br></code></pre></td></tr></table></figure><h1 id="下载服务器"><a href="#下载服务器" class="headerlink" title="下载服务器"></a>下载服务器</h1><figure class="highlight autoit"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs autoit">[root<span class="hljs-symbol">@localhost</span> html]<span class="hljs-meta"># cd /apps/nginx/html/download/</span><br>[root<span class="hljs-symbol">@localhost</span> download]<span class="hljs-meta"># touch centos{7,8} ubuntu{7,8} </span><br></code></pre></td></tr></table></figure><figure class="highlight nginx"><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><code class="hljs nginx"><span class="hljs-section">location</span> /download {<br> <span class="hljs-comment"># ⾃动索引功能</span><br> <span class="hljs-attribute">autoindex</span> <span class="hljs-literal">on</span>; <br> <span class="hljs-comment"># 计算⽂件确切⼤⼩(单位bytes),off只显示⼤概⼤⼩(单位kb、mb、gb)</span><br> <span class="hljs-attribute">autoindex_exact_size</span> <span class="hljs-literal">on</span>; <br> <span class="hljs-comment"># 显示本机时间⽽⾮GMT(格林威治)时间</span><br> <span class="hljs-attribute">autoindex_localtime</span> <span class="hljs-literal">on</span>; <br> <span class="hljs-attribute">root</span> /apps/nginx/html/;<br> <span class="hljs-attribute">limit_rate</span> <span class="hljs-number">10k</span>;<br>}<br></code></pre></td></tr></table></figure><p><img src="20220731091814.png" alt="image-20220709173501413"></p><h1 id="nginx状态页"><a href="#nginx状态页" class="headerlink" title="nginx状态页"></a>nginx状态页</h1><figure class="highlight crmsh"><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><code class="hljs crmsh"><span class="hljs-keyword">location</span> <span class="hljs-title">/nginx_status</span> {<br> stub_status;<br> <span class="hljs-comment">#allow 192.168.10.1;</span><br> allow <span class="hljs-number">127.0</span>.<span class="hljs-number">0.1</span>;<br> <span class="hljs-keyword">deny</span> all;<br> } <br></code></pre></td></tr></table></figure><figure class="highlight tap"><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><code class="hljs tap">[root@localhost ~]<span class="hljs-comment"># curl localhost/nginx_status</span><br>Active connections:<span class="hljs-number"> 1 </span><br>server accepts handled requests<br><span class="hljs-number"> 29 </span>29<span class="hljs-number"> 29 </span><br>Reading:<span class="hljs-number"> 0 </span>Writing:<span class="hljs-number"> 1 </span>Waiting:<span class="hljs-number"> 0 </span><br></code></pre></td></tr></table></figure><figure class="highlight clean"><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><code class="hljs clean"># Active connections:# 在线用户和空闲线程<br># accepts: 接受的客户端请求的总数<br># handled: 处理完成的客户端请求的总数, 一般和接受一样,除非是worker_connections限制等被拒绝的连接。<br># requests: 客户端发来的总的请求数<br># Reading: 正在读取客户端请求报⽂⾸部的连接数<br># Writing: 正在向客户端发送响应报⽂过程中的连接数<br># Waiting: 正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing),<br></code></pre></td></tr></table></figure>]]></content>
<categories>
<category>周末直播分享</category>
</categories>
<tags>
<tag>nginx</tag>
</tags>
</entry>
<entry>
<title>Nginx-编译安装</title>
<link href="/2022/07/09/Nginx-%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85/"/>
<url>/2022/07/09/Nginx-%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85/</url>
<content type="html"><![CDATA[<h1 id="回顾"><a href="#回顾" class="headerlink" title="回顾"></a>回顾</h1><p>上一节中,我们讲了[ <a href="https://slcnx.github.io/2022/06/12/vmware%E5%AE%89%E8%A3%85%E7%B3%BB%E7%BB%9F/">https://slcnx.github.io/2022/06/12/vmware%E5%AE%89%E8%A3%85%E7%B3%BB%E7%BB%9F/</a> ], vmware安装规划中,如何单机部署, 高可用部署。 本节讲讲其中一个小服务nginx,nginx用来提供公司网页的,基于用户体验的过程的原理如下:</p><p><img src="20220708133820.png" alt="image-20220708133818176"></p><p>这里电脑从输入<a href="http://www.baidu.com到查看到百度,这一个过程中,需要本地计算机**浏览器**发起http请求,请求支持http协议的**web服务器**,拿到http响应。http协议规范定义了**请求和响应**的格式,[">www.baidu.com到查看到百度,这一个过程中,需要本地计算机**浏览器**发起http请求,请求支持http协议的**web服务器**,拿到http响应。http协议规范定义了**请求和响应**的格式,[</a> <a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Messages">https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Messages</a> ], 而http协议是一种规范其实现是具体的软件,其客户端软件, 图形界面的浏览器(chrome, 360, firefox),命令行的curl命令。而服务端软件有<code>httpd, nginx</code>。</p><p>我们在上一节中使用nginx作为静态站点,而没有使用apache的httpd,其原因就需要对比这两个软件的区别了。</p><h1 id="nginx和apache的区别"><a href="#nginx和apache的区别" class="headerlink" title="nginx和apache的区别"></a>nginx和apache的区别</h1><h2 id="请求到达服务器处理"><a href="#请求到达服务器处理" class="headerlink" title="请求到达服务器处理"></a>请求到达服务器处理</h2><p><img src="20220708163408.png" alt="Nginx IO模型"></p><blockquote><p>参考: [ <a href="https://www.modb.pro/db/401325">https://www.modb.pro/db/401325</a> ]</p></blockquote><p>浏览器请求到Linux服务器,基于请求的端口到达用户空间的进程,进程处理http协议的请求,基于URI解析协议, 域名,路径。从而找到对应的处理请求的配置,再加载合适的文件或代理到合适的后端应用服务器。</p><ul><li>动态请求,基于相应的协议获取数据。</li><li>静态请求,需要读磁盘上的文件,就需要发起系统调用,<strong>内核加载数据到内核空间,进程从内核空间将数据拷贝到用户空间</strong>。这个是一次文件IO</li></ul><p>请求到达用户空间的web进程的几种方式</p><ul><li><p><code>阻塞式IO</code></p><ul><li>请求数据未完全被内核加载到缓冲区时,进程是阻塞的。进程不占用CPU,并在等待队列中。直到数据加载完成,一次中断事件让内核把等待队列中的进程唤醒到达运行队列,这个时间进程才拿到数据,进行处理数据。</li><li>一个进程处理一个请求</li></ul></li><li><p><code>非阻塞IO</code></p><ul><li><p>进程调用函数时,只要未加载完成,就返回error。未加载完成就不是error, 处理数据。下面是模拟的代码,不是error处理数据,是error会做完其他事后再循环,浪费大量CPU进行查看数据是否完成。</p><figure class="highlight applescript"><table><tr><td class="gutter"><div class="code-wrapper"><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></div></td><td class="code"><pre><code class="hljs applescript"><span class="hljs-keyword">while</span> <span class="hljs-literal">true</span>; do <br><span class="hljs-keyword">if</span> [ `<span class="hljs-built_in">read</span>` !== “<span class="hljs-keyword">error</span><span class="hljs-string">" ]; then</span><br><span class="hljs-string">#处理数据</span><br><span class="hljs-string">fi</span><br><span class="hljs-string"># 做其他事</span><br><span class="hljs-string">done</span><br></code></pre></td></tr></table></figure></li></ul></li></ul><p>由于阻塞式IO不能处理多个请求,所以有了IO多路复用,专用于处理多个请求,io多路复用,支持select/poll/epoll。</p><ul><li><code>select</code><ul><li>很多系统均支持</li><li>进程调用select之后,就和非阻塞IO一样,立即知道有没有数据。没有数据做其他的事。有数据就下一次问select时就拿到数据加载数据到内存,进行后续处理。</li><li>select就可以维护多个连接,使用一个数组,要知道数组中哪个连接有新的数据来,需要遍历一次数组,时间复杂度是O(n)。</li><li>select默认的连接上限1024</li></ul></li><li><code>poll</code><ul><li>windows不支持</li><li>维护多个连接是链表,没有连接上限。知道哪个连接有数据来是遍历,时间复杂 度是O(n)</li></ul></li><li><code>epoll</code><ul><li>进程调用epoll之后,会注册一个信号,这个信号函数会有后续的处理,所以当数据准备好之后,就调用进程的后续函数进行加载数据到用户空间的内存,再处理。</li><li>维护连接是hash表,知道哪个连接有数据来是遍历,时间复杂 度是O(1)。</li></ul></li></ul><p>以上5种IO模型,<strong>在内核准备数据时</strong>,<strong>进程</strong>除了第1个均是非阻塞,非阻塞中除了epoll 信号驱动之外均是同步,即进程轮轮循查看数据是否就绪。<strong>在数据准备好之后</strong>,均由各自函数加载数据到用户空间,进行处理。</p><p><img src="20220708171022.png" alt="网络&操作系统-linux五种IO模型| 池元烨的博客"></p><blockquote><p>引用自: [ <a href="http://chiyuanye.com/2019/02/25/five-IO-models.html">http://chiyuanye.com/2019/02/25/five-IO-models.html</a> ]</p></blockquote><p>而<code>aio_read</code>这个函数是异步的,内核准备数据,数据加载到用户空间进程内存,均由内核完成,完成之后通知进程。进程进行后续操作。</p><h2 id="区别"><a href="#区别" class="headerlink" title="区别"></a>区别</h2><p>apache有2.2和2.4 这2个版本。均有3个处理模块,( prefork, work, event )。</p><ul><li>apache<ul><li>prefork, select IO模型</li><li>work, poll IO模型</li><li>event, event IO模型</li></ul></li><li>nginx <ul><li>aio_read</li></ul></li></ul><p>nignx特点: <strong>异步非阻塞IO</strong>,<strong>解决C10K问题</strong>(10K Connections),且是<strong>免费的、开源的、⾼性能的HTTP服务器</strong>和<strong>HTTP反向代理服务器</strong>、<strong>邮件代理服务器</strong>、以及<strong>TCP/UDP代理服务器</strong>。</p><p>Nginx的优势在于:<strong>反向代理</strong>,静态资源Web服务,rewrite规则,稳定性, 模块化设计,静态文件处理,内存消耗,节省带宽,稳定性高,支持热部署,可以高并发连接等优点。</p><p>Netcraft公司于1994年底在英国成⽴,多年来⼀直致⼒于互联⽹市场以及在线安全⽅⾯的咨询服务,其中在国际上最具影响⼒的当属其针对⽹站服务器,域名解析/主机提供商,以及SSL市场所做的客观严谨的分析研究。</p><p>[ <a href="https://news.netcraft.com/">https://news.netcraft.com/</a> ] nginx 自19起始稳居第1。而之前一直是apache占主导地位。</p><p><img src="20220708165430.png" alt="image-20220708165429539"></p><blockquote><p>引用自: [ <a href="https://zhangzhuo.ltd/articles/2021/05/17/1621240754222.html">https://zhangzhuo.ltd/articles/2021/05/17/1621240754222.html</a> ]</p></blockquote><h1 id="nginx介绍"><a href="#nginx介绍" class="headerlink" title="nginx介绍"></a>nginx介绍</h1><p>模块化设计,较好的扩展性 高可靠性 支持热部署:不停机更新配置⽂件,升级版本,更换⽇志⽂件 低内存消耗:10000个keep-alive连接模式下的⾮活动连接,仅需2.5M内存 <em><strong>event</strong></em>-<em><strong>driven</strong></em>,<em><strong>aio</strong></em>,<em><strong>mmap</strong></em>,<em><strong>sendfile</strong></em> </p><blockquote><p><img src="20220708172130.png" alt="image-20220708172129010"></p><p>mmap要比普通的read系统调用少了一次copy的过程。因为read调用,进程是无法直接访问kernel space的,所以在read系统调用返回前,内核需要将数据从内核复制到进程指定的buffer。但mmap之后,进程可以直接访问mmap的数据(page cache)。<strong>第2个阶段 kernel > user space不需要了。</strong></p><p>引用自: [ <a href="https://blog.csdn.net/universsky2015/article/details/115114706">https://blog.csdn.net/universsky2015/article/details/115114706</a> ]</p><p><em>作为web服务器的时候打开sendfile加快静态⽂件传输,指定是否使⽤sendfile系统调⽤来传输⽂件,sendfile通过DMA(直接内存访问)⽅式直接访问⽂件数据,并通过传输协议发送,从⽽避免了数据在内核缓冲区和⽤户缓冲区之间的拷⻉,操作效率很⾼,被称之为零拷⻉,从<strong>硬盘>kernel>user space封装>kernel>协议栈</strong>,直接到: <strong>硬盘>> kernel buffer (快速拷⻉到kernel socket buffer) >>协议栈。</strong></em></p></blockquote><h2 id="环境初始化"><a href="#环境初始化" class="headerlink" title="环境初始化"></a>环境初始化</h2><ol><li><p>准备nginx主机</p></li><li><p>实验归划</p><p><img src="20220708210651.png" alt="image-20220708210648579"></p><table><thead><tr><th>IP</th><th>主机名</th><th>用途</th><th>备注</th></tr></thead><tbody><tr><td>172.16.100.100</td><td>template-centos.magedu.com</td><td>模板机</td><td></td></tr><tr><td>172.16.100.101</td><td>nginx-1.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.102</td><td>nginx-2.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.103</td><td>nginx-3.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.104</td><td>nginx-4.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.105</td><td>nginx-5.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.106</td><td>nginx-6.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.107</td><td>nginx-7.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.108</td><td>nginx-8.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.109</td><td>nginx-9.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.110</td><td>nginx-10.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.111</td><td>php-1.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.112</td><td>php-2.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.113</td><td>php-3.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.114</td><td>php-4.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.115</td><td>php-5.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.116</td><td>php-6.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.117</td><td>php-7.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.118</td><td>php-8.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.119</td><td>php-9.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.120</td><td>php-10.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.121</td><td>mysql-1.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.122</td><td>mysql-2.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.123</td><td>mysql-3.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.124</td><td>mysql-4.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.125</td><td>mysql-5.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.126</td><td>mysql-6.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.127</td><td>mysql-7.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.128</td><td>mysql-8.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.129</td><td>mysql-9.magedu.com</td><td></td><td></td></tr><tr><td>172.16.100.130</td><td>mysql-10.magedu.com</td><td></td><td></td></tr></tbody></table></li><li><p>准备网络, vmnet9, 172.16.0.0/16 网络。</p></li><li><p>克隆 最初,调整配置,快照初始,准备模板主机</p></li><li><p>初始化主机为模板主机。</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs routeros">bash init.sh <span class="hljs-attribute">--resourceslimit</span>=1 <span class="hljs-attribute">--kernelparams</span>=1 <span class="hljs-attribute">--basepkgs</span>=1 <span class="hljs-attribute">--chinese</span>=0 <span class="hljs-attribute">--eth0</span>=1 <span class="hljs-attribute">--umirror</span>=0 <span class="hljs-attribute">--port</span>=6655 <span class="hljs-attribute">--allow-root-login</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">--allow-pass-login</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">--root-password</span>=<span class="hljs-string">'#^DzGp)DIN+1M)'</span> <span class="hljs-attribute">--hostname</span>=template-centos.magedu.com <span class="hljs-attribute">--ipaddr</span>=172.16.100.100 <span class="hljs-attribute">--netmask</span>=255.255.0.0 <span class="hljs-attribute">--gateway</span>=172.16.100.2 <span class="hljs-attribute">--dns</span>=223.6.6.6 <span class="hljs-attribute">--author</span>=songliangcheng <span class="hljs-attribute">--qq</span>=2192383945 <span class="hljs-attribute">--desc</span>=<span class="hljs-string">"A test toy"</span><br></code></pre></td></tr></table></figure><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs awk">rm -f <span class="hljs-regexp">/etc/</span>sysconfig<span class="hljs-regexp">/network-scripts/i</span>fcfg-ens33<br>reboot<br></code></pre></td></tr></table></figure></li><li><p>修改网络</p></li><li><p>准备网关</p><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></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment">#准备网关,172.16.0.2</span><br>TYPE=Ethernet<br>BOOTPROTO=static<br>DEVICE=eth1<br>ONBOOT=<span class="hljs-built_in">yes</span><br>IPADDR=172.16.0.2<br>NETMASK=255.255.0.0<br></code></pre></td></tr></table></figure><figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">sysctl</span> -w net.ipv4.ip_forward=<span class="hljs-number">1</span><br><span class="hljs-attribute">iptables</span> -t nat -I POSTROUTING -s <span class="hljs-number">172.16.0.0</span>/<span class="hljs-number">16</span> -o eth0 -j MASQUERADE<br></code></pre></td></tr></table></figure><p>现在<code>ping www.baidu.com</code></p><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs applescript"><span class="hljs-comment"># 本机看到</span><br>[root@template-centos ~]<span class="hljs-comment"># tcpdump -nn -vv -i eth0 icmp</span><br>tcpdump: listening <span class="hljs-keyword">on</span> eth0, link-type EN10MB (Ethernet), capture size <span class="hljs-number">262144</span> bytes<br><span class="hljs-number">20</span>:<span class="hljs-number">22</span>:<span class="hljs-number">32.070572</span> IP (tos <span class="hljs-number">0x0</span>, ttl <span class="hljs-number">64</span>, <span class="hljs-built_in">id</span> <span class="hljs-number">18283</span>, <span class="hljs-built_in">offset</span> <span class="hljs-number">0</span>, flags [DF], proto ICMP (<span class="hljs-number">1</span>), <span class="hljs-built_in">length</span> <span class="hljs-number">84</span>)<br> <span class="hljs-number">172.16</span><span class="hljs-number">.100</span><span class="hljs-number">.100</span> > <span class="hljs-number">110.242</span><span class="hljs-number">.68</span><span class="hljs-number">.4</span>: ICMP echo request, <span class="hljs-built_in">id</span> <span class="hljs-number">1485</span>, seq <span class="hljs-number">28</span>, <span class="hljs-built_in">length</span> <span class="hljs-number">64</span><br><span class="hljs-number">20</span>:<span class="hljs-number">22</span>:<span class="hljs-number">32.113527</span> IP (tos <span class="hljs-number">0x0</span>, ttl <span class="hljs-number">127</span>, <span class="hljs-built_in">id</span> <span class="hljs-number">30763</span>, <span class="hljs-built_in">offset</span> <span class="hljs-number">0</span>, flags [none], proto ICMP (<span class="hljs-number">1</span>), <span class="hljs-built_in">length</span> <span class="hljs-number">84</span>)<br> <span class="hljs-number">110.242</span><span class="hljs-number">.68</span><span class="hljs-number">.4</span> > <span class="hljs-number">172.16</span><span class="hljs-number">.100</span><span class="hljs-number">.100</span>: ICMP echo reply, <span class="hljs-built_in">id</span> <span class="hljs-number">1485</span>, seq <span class="hljs-number">28</span>, <span class="hljs-built_in">length</span> <span class="hljs-number">64</span><br><br><span class="hljs-comment"># 网关看到</span><br> <span class="hljs-number">192.168</span><span class="hljs-number">.131</span><span class="hljs-number">.100</span> > <span class="hljs-number">110.242</span><span class="hljs-number">.68</span><span class="hljs-number">.4</span>: ICMP echo request, <span class="hljs-built_in">id</span> <span class="hljs-number">1485</span>, seq <span class="hljs-number">62</span>, <span class="hljs-built_in">length</span> <span class="hljs-number">64</span><br><span class="hljs-number">20</span>:<span class="hljs-number">23</span>:<span class="hljs-number">06.167984</span> IP (tos <span class="hljs-number">0x0</span>, ttl <span class="hljs-number">128</span>, <span class="hljs-built_in">id</span> <span class="hljs-number">30800</span>, <span class="hljs-built_in">offset</span> <span class="hljs-number">0</span>, flags [none], proto ICMP (<span class="hljs-number">1</span>), <span class="hljs-built_in">length</span> <span class="hljs-number">84</span>)<br> <span class="hljs-number">110.242</span><span class="hljs-number">.68</span><span class="hljs-number">.4</span> > <span class="hljs-number">192.168</span><span class="hljs-number">.131</span><span class="hljs-number">.100</span>: ICMP echo reply, <span class="hljs-built_in">id</span> <span class="hljs-number">1485</span>, seq <span class="hljs-number">62</span>, <span class="hljs-built_in">length</span> <span class="hljs-number">64</span><br></code></pre></td></tr></table></figure><p>172.16.100.100 -> 192.168.131.100 -> 110.242.68.4 (修改源为网关的可以出去的IP)</p><p>172.16.100.100 <- 192.168.131.100 <- 110.242.68.4 ( 修改目标为内网IP)</p></li><li><p>重启验证ip, 域名解析, kernel params, crontab, ssh, alias</p></li><li><p>关机快照。template, </p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-number">6655</span><br><span class="hljs-string">root</span><br><span class="hljs-comment">#^DzGp)DIN+1M)</span><br></code></pre></td></tr></table></figure></li></ol><p>准备第1个节点</p><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></pre></td><td class="code"><pre><code class="hljs bash">bash init.sh --hostname=nginx-1.magedu.com --ipaddr=172.16.100.101 --netmask=255.255.0.0 --gateway=172.16.100.2 --dns=223.6.6.6 --root-password=<span class="hljs-string">'7HmqYhjwvNBuYW2X'</span><br>reboot<br>验证ip,网络, 主机名<br></code></pre></td></tr></table></figure><h2 id="编译安装nginx"><a href="#编译安装nginx" class="headerlink" title="编译安装nginx"></a>编译安装nginx</h2><p><a href="https://nginx.org/en/download.html">https://nginx.org/en/download.html</a></p><p>Stable version <a href="https://nginx.org/download/nginx-1.22.0.tar.gz"> nginx-1.22.0</a></p><h3 id="制作rpm"><a href="#制作rpm" class="headerlink" title="制作rpm"></a>制作rpm</h3><p>进入nginx的源码仓库: [ <a href="http://nginx.org/packages/centos/7Server/SRPMS/">http://nginx.org/packages/centos/7Server/SRPMS/</a> ]</p><p>下载安装geoip</p><figure class="highlight apache"><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><code class="hljs apache"><span class="hljs-attribute">wget</span> http://nginx.org/packages/centos/<span class="hljs-number">7</span>Server/SRPMS/nginx-module-geoip-<span class="hljs-number">1</span>.<span class="hljs-number">22</span>.<span class="hljs-number">0</span>-<span class="hljs-number">1</span>.el7.ngx.src.rpm<br><br><span class="hljs-attribute">rpm</span> -ivh nginx-module-geoip-<span class="hljs-number">1</span>.<span class="hljs-number">22</span>.<span class="hljs-number">0</span>-<span class="hljs-number">1</span>.el7.ngx.src.rpm <br></code></pre></td></tr></table></figure><p>准备yum-utils</p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs mipsasm">yum <span class="hljs-keyword">install </span>yum-utils rpm-<span class="hljs-keyword">build </span>-y<br></code></pre></td></tr></table></figure><p>构建rpm包</p><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></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> /root/rpmbuild/SPECS<br><span class="hljs-comment"># 安装依赖的模板</span><br><span class="hljs-comment"># yum-builddep nginx-module-geoip.spec --downloadonly --downloaddir=/root/pkgs </span><br><span class="hljs-comment"># ls /root/pkgs/ | xargs -I {} echo {} | sed 's@-[0-9].*@@' | xargs</span><br>cpp e2fsprogs e2fsprogs-libs gcc GeoIP GeoIP-devel geoipupdate glibc glibc-common glibc-devel glibc-headers kernel-headers keyutils-libs-devel krb5-devel krb5-libs libcom_err libcom_err-devel libgcc libgomp libkadm5 libmpc libselinux libselinux-devel libselinux-python libselinux-utils libsepol-devel libss libverto-devel mpfr openssl openssl-devel openssl-libs pcre2 pcre2-devel pcre2-utf16 pcre2-utf32 pcre-devel zlib zlib-devel<br> <br></code></pre></td></tr></table></figure><p> rpmbuild -bb nginx-module-geoip.spec </p><div class="code-wrapper"><pre><code class="hljs"># rpm [root@localhost SPECS]# ls ../RPMS/x86_64/ nginx-module-geoip-1.22.0-1.el7.ngx.x86_64.rpm nginx-module-geoip-debuginfo-1.22.0-1.el7.ngx.x86_64.rpmrpmbuild -bb nginx</code></pre></div><p>得到依赖</p><figure class="highlight nsis"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nsis">cpp e2fsprogs e2fsprogs-libs gcc GeoIP GeoIP-devel geoipupdate glibc glibc-common glibc-devel glibc-headers kernel-headers keyutils-libs-devel krb5-devel krb5-libs libcom_err libcom_err-devel libgcc libgomp libkadm5 libmpc libselinux libselinux-devel libselinux-python libselinux-utils libsepol-devel libss libverto-devel mpfr openssl openssl-devel openssl-libs pcre2 pcre2-devel pcre2-utf16 pcre2-utf32 pcre-devel <span class="hljs-literal">zlib</span> <span class="hljs-literal">zlib</span>-devel<br></code></pre></td></tr></table></figure><p> 安装rpm之后得到编译参数</p> <figure class="highlight clean"><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><code class="hljs clean">[root@localhost SPECS]# rpm -ivh ../RPMS/x86_64/nginx<span class="hljs-number">-1.22</span><span class="hljs-number">.0</span><span class="hljs-number">-1.</span>el7.ngx.x86_64.rpm <br>准备中... ################################# [<span class="hljs-number">100</span>%]<br>正在升级/安装...<br> <span class="hljs-number">1</span>:nginx<span class="hljs-number">-1</span>:<span class="hljs-number">1.22</span><span class="hljs-number">.0</span><span class="hljs-number">-1.</span>el7.ngx ################################# [<span class="hljs-number">100</span>%]<br>----------------------------------------------------------------------<br><br>Thanks for using nginx!<br><br>Please find the official documentation for nginx here:<br>* https:<span class="hljs-comment">//nginx.org/en/docs/</span><br><br>Please subscribe to nginx-announce mailing list to get<br>the most important news about nginx:<br>* https:<span class="hljs-comment">//nginx.org/en/support.html</span><br><br>Commercial subscriptions for nginx are available on:<br>* https:<span class="hljs-comment">//nginx.com/products/</span><br></code></pre></td></tr></table></figure><figure class="highlight gradle"><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><code class="hljs gradle">[root@localhost SPECS]# nginx -V<br> nginx version: nginx/<span class="hljs-number">1.22</span>.<span class="hljs-number">0</span><br> built by gcc <span class="hljs-number">4.8</span>.<span class="hljs-number">5</span> <span class="hljs-number">20150623</span> (Red Hat <span class="hljs-number">4.8</span>.<span class="hljs-number">5</span>-<span class="hljs-number">44</span>) (GCC) <br> built with OpenSSL <span class="hljs-number">1.0</span>.<span class="hljs-number">2</span>k-fips <span class="hljs-number">26</span> Jan <span class="hljs-number">2017</span><br> TLS SNI support enabled<br> configure arguments: --prefix=<span class="hljs-regexp">/etc/</span>nginx --sbin-path=<span class="hljs-regexp">/usr/</span>sbin<span class="hljs-regexp">/nginx --modules-path=/u</span>sr<span class="hljs-regexp">/lib64/</span>nginx<span class="hljs-regexp">/modules --conf-path=/</span>etc<span class="hljs-regexp">/nginx/</span>nginx.conf --error-log-path=<span class="hljs-regexp">/var/</span>log<span class="hljs-regexp">/nginx/</span>error.log --http-log-path=<span class="hljs-regexp">/var/</span>log<span class="hljs-regexp">/nginx/</span>access.log --pid-path=<span class="hljs-regexp">/var/</span>run<span class="hljs-regexp">/nginx.pid --lock-path=/</span>var<span class="hljs-regexp">/run/</span>nginx.lock --http-client-body-temp-path=<span class="hljs-regexp">/var/</span>cache<span class="hljs-regexp">/nginx/</span>client_temp --http-proxy-temp-path=<span class="hljs-regexp">/var/</span>cache<span class="hljs-regexp">/nginx/</span>proxy_temp --http-fastcgi-temp-path=<span class="hljs-regexp">/var/</span>cache<span class="hljs-regexp">/nginx/</span>fastcgi_temp --http-uwsgi-temp-path=<span class="hljs-regexp">/var/</span>cache<span class="hljs-regexp">/nginx/u</span>wsgi_temp --http-scgi-temp-path=<span class="hljs-regexp">/var/</span>cache<span class="hljs-regexp">/nginx/</span>scgi_temp --user=nginx --<span class="hljs-keyword">group</span>=nginx --with-compat --with-<span class="hljs-keyword">file</span>-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt=<span class="hljs-string">'-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'</span> --with-ld-opt=<span class="hljs-string">'-Wl,-z,relro -Wl,-z,now -pie'</span><br></code></pre></td></tr></table></figure><p> 抽取部分</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs jboss-cli"><span class="hljs-string">./configure</span> <span class="hljs-params">--prefix=/apps/nginx</span> <span class="hljs-params">--user=nginx</span> <span class="hljs-params">--group=nginx</span> <span class="hljs-params">--with-compat</span> <span class="hljs-params">--with-file-aio</span> <span class="hljs-params">--with-threads</span> <span class="hljs-params">--with-http_addition_module</span> <span class="hljs-params">--with-http_auth_request_module</span> <span class="hljs-params">--with-http_gunzip_module</span> <span class="hljs-params">--with-http_gzip_static_module</span> <span class="hljs-params">--with-http_random_index_module</span> <span class="hljs-params">--with-http_realip_module</span> <span class="hljs-params">--with-http_secure_link_module</span> <span class="hljs-params">--with-http_slice_module</span> <span class="hljs-params">--with-http_ssl_module</span> <span class="hljs-params">--with-http_stub_status_module</span> <span class="hljs-params">--with-http_sub_module</span> <span class="hljs-params">--with-http_v2_module</span> <span class="hljs-params">--with-stream</span> <span class="hljs-params">--with-stream_realip_module</span> <span class="hljs-params">--with-stream_ssl_module</span> <span class="hljs-params">--with-stream_ssl_preread_module</span> <span class="hljs-params">--with-http_geoip_module=dynamic</span> <span class="hljs-params">--with-stream_geoip_module=dynamic</span><br></code></pre></td></tr></table></figure><h3 id="编译安装-ubuntu-centos均可"><a href="#编译安装-ubuntu-centos均可" class="headerlink" title="编译安装 (ubuntu/centos均可)"></a>编译安装 (ubuntu/centos均可)</h3> <figure class="highlight jboss-cli"><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><code class="hljs jboss-cli">[root@nginx-2 ~]<span class="hljs-comment"># tar xvf nginx-1.22.0.tar.gz -C /usr/local/src/</span><br><br>yum install cpp e2fsprogs e2fsprogs-libs gcc GeoIP GeoIP-devel geoipupdate glibc glibc-common glibc-devel glibc-headers kernel-headers keyutils-libs-devel krb5-devel krb5-libs libcom_err libcom_err-devel libgcc libgomp libkadm5 libmpc libselinux libselinux-devel libselinux-python libselinux-utils libsepol-devel libss libverto-devel mpfr openssl openssl-devel openssl-libs pcre2 pcre2-devel pcre2-utf16 pcre2-utf32 pcre-devel zlib zlib-devel -y<br><br><span class="hljs-string">./configure</span> <span class="hljs-params">--prefix=/apps/nginx</span> \<br><span class="hljs-params">--user=nginx</span> <span class="hljs-params">--group=nginx</span> \<br><span class="hljs-params">--with-compat</span> <span class="hljs-params">--with-file-aio</span> <span class="hljs-params">--with-threads</span> \<br><span class="hljs-params">--with-http_addition_module</span> <span class="hljs-params">--with-http_auth_request_module</span> <span class="hljs-params">--with-http_gunzip_module</span> <span class="hljs-params">--with-http_gzip_static_module</span> <span class="hljs-params">--with-http_random_index_module</span> \<br><span class="hljs-params">--with-http_realip_module</span> <span class="hljs-params">--with-http_secure_link_module</span> <span class="hljs-params">--with-http_slice_module</span> <span class="hljs-params">--with-http_ssl_module</span> \<br><span class="hljs-params">--with-http_stub_status_module</span> <span class="hljs-params">--with-http_sub_module</span> <span class="hljs-params">--with-http_v2_module</span> \<br><span class="hljs-params">--with-stream</span> <span class="hljs-params">--with-stream_realip_module</span> <span class="hljs-params">--with-stream_ssl_module</span> <span class="hljs-params">--with-stream_ssl_preread_module</span> \<br><span class="hljs-params">--with-http_geoip_module=dynamic</span> <span class="hljs-params">--with-stream_geoip_module=dynamic</span><br><br></code></pre></td></tr></table></figure><p>你将看到以下输出 </p> <figure class="highlight livecodeserver"><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></pre></td><td class="code"><pre><code class="hljs livecodeserver">Configuration summary<br> + <span class="hljs-keyword">using</span> threads<br> + <span class="hljs-keyword">using</span> <span class="hljs-keyword">system</span> PCRE2 library<br> + <span class="hljs-keyword">using</span> <span class="hljs-keyword">system</span> OpenSSL library<br> + <span class="hljs-keyword">using</span> <span class="hljs-keyword">system</span> zlib library<br><br> nginx path prefix: <span class="hljs-string">"/apps/nginx"</span><br> nginx binary <span class="hljs-built_in">file</span>: <span class="hljs-string">"/apps/nginx/sbin/nginx"</span><br> nginx modules path: <span class="hljs-string">"/apps/nginx/modules"</span><br> nginx configuration prefix: <span class="hljs-string">"/apps/nginx/conf"</span><br> nginx configuration <span class="hljs-built_in">file</span>: <span class="hljs-string">"/apps/nginx/conf/nginx.conf"</span><br> nginx pid <span class="hljs-built_in">file</span>: <span class="hljs-string">"/apps/nginx/logs/nginx.pid"</span><br> nginx error <span class="hljs-built_in">log</span> <span class="hljs-built_in">file</span>: <span class="hljs-string">"/apps/nginx/logs/error.log"</span><br> nginx <span class="hljs-keyword">http</span> access <span class="hljs-built_in">log</span> <span class="hljs-built_in">file</span>: <span class="hljs-string">"/apps/nginx/logs/access.log"</span><br> nginx <span class="hljs-keyword">http</span> client request body temporary <span class="hljs-built_in">files</span>: <span class="hljs-string">"client_body_temp"</span><br> nginx <span class="hljs-keyword">http</span> proxy temporary <span class="hljs-built_in">files</span>: <span class="hljs-string">"proxy_temp"</span><br> nginx <span class="hljs-keyword">http</span> fastcgi temporary <span class="hljs-built_in">files</span>: <span class="hljs-string">"fastcgi_temp"</span><br> nginx <span class="hljs-keyword">http</span> uwsgi temporary <span class="hljs-built_in">files</span>: <span class="hljs-string">"uwsgi_temp"</span><br> nginx <span class="hljs-keyword">http</span> scgi temporary <span class="hljs-built_in">files</span>: <span class="hljs-string">"scgi_temp"</span><br></code></pre></td></tr></table></figure><p>之后,编译安装</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">make -j $(<span class="hljs-built_in">nproc</span>) && make install -j $(<span class="hljs-built_in">nproc</span>)<br></code></pre></td></tr></table></figure><figure class="highlight autoit"><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><code class="hljs autoit">[root<span class="hljs-symbol">@nginx</span><span class="hljs-number">-2</span> nginx<span class="hljs-number">-1.22</span><span class="hljs-number">.0</span>]<span class="hljs-meta"># cd /apps/nginx/</span><br>[root<span class="hljs-symbol">@nginx</span><span class="hljs-number">-2</span> nginx]<span class="hljs-meta"># groupadd -g 2022 nginx</span><br>[root<span class="hljs-symbol">@nginx</span><span class="hljs-number">-2</span> nginx]<span class="hljs-meta"># useradd -u 2022 -s /sbin/nologin nginx -g nginx</span><br><br>[root<span class="hljs-symbol">@nginx</span><span class="hljs-number">-2</span> nginx]<span class="hljs-meta"># ./sbin/nginx -g <span class="hljs-string">'daemon off;'</span> # 需要在前台</span><br></code></pre></td></tr></table></figure><p>浏览器访问 <a href="http://172.16.100.102/">http://172.16.100.102/</a></p><p><img src="20220708214530.png" alt="image-20220708214528854"></p><p>ctrl c 终止后,准备服务脚本</p><figure class="highlight awk"><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><code class="hljs awk"><span class="hljs-comment"># 为当前nginx添加版本方便升级nginx, 回退</span><br>mv <span class="hljs-regexp">/apps/</span>nginx<span class="hljs-regexp">/ /</span>apps/nginx-<span class="hljs-number">1.22</span>.<span class="hljs-number">0</span><br><br><span class="hljs-comment"># 自动生成服务脚本 github</span><br>curl -L https:<span class="hljs-regexp">//</span>raw.githubusercontent.com<span class="hljs-regexp">/slcnx/</span>post-precompile<span class="hljs-regexp">/main/</span>post-precompile.sh | bash -s -- -ap <span class="hljs-regexp">/apps/</span>nginx-<span class="hljs-number">1.22</span>.<span class="hljs-number">0</span> -s <span class="hljs-string">"./sbin/nginx -g 'daemon off;'"</span><br><br><span class="hljs-comment"># 自动生成服务脚本 gitee</span><br>curl -L https:<span class="hljs-regexp">//gi</span>tee.com<span class="hljs-regexp">/slcnx/</span>post-precompile<span class="hljs-regexp">/raw/m</span>aster<span class="hljs-regexp">/post-precompile.sh | sed 's/</span>\r<span class="hljs-regexp">//</span><span class="hljs-string">' | bash -s -- -ap /apps/nginx-1.22.0 -s "./sbin/nginx -g '</span>daemon off;<span class="hljs-string">'"</span><br></code></pre></td></tr></table></figure><h3 id="添加模块"><a href="#添加模块" class="headerlink" title="添加模块"></a>添加模块</h3><h4 id="echo模块"><a href="#echo模块" class="headerlink" title="echo模块"></a>echo模块</h4><p>编译方法: [ <a href="https://github.com/openresty/echo-nginx-module#installation">https://github.com/openresty/echo-nginx-module#installation</a> ]</p><p>下载包: [ <a href="https://github.com/openresty/echo-nginx-module/releases/tag/v0.62">https://github.com/openresty/echo-nginx-module/releases/tag/v0.62</a> ]</p><p>基于以上的编译二次编译</p><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><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash">./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_geoip_module=dynamic --with-stream_geoip_module=dynamic --add-module=/usr/local/src/echo-nginx-module-0.62/<br><br><br>make -j $(<span class="hljs-built_in">nproc</span>) && make install -j $(<span class="hljs-built_in">nproc</span>)<br><br><br>nginx -V<br><br>systemctl restart nginx<br></code></pre></td></tr></table></figure><h4 id="ssl模块"><a href="#ssl模块" class="headerlink" title="ssl模块"></a>ssl模块</h4><p>引用自: [ <a href="https://www.cnblogs.com/Oejfr/p/14902721.html">https://www.cnblogs.com/Oejfr/p/14902721.html</a> ]</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">wget https:<span class="hljs-regexp">//</span>www.openssl.org<span class="hljs-regexp">/source/</span>openssl-<span class="hljs-number">3.0</span>.<span class="hljs-number">5</span>.tar.gz<br></code></pre></td></tr></table></figure><figure class="highlight jboss-cli"><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><code class="hljs jboss-cli"><span class="hljs-string">./configure</span> <span class="hljs-params">--prefix=/apps/nginx</span> <span class="hljs-params">--user=nginx</span> <span class="hljs-params">--group=nginx</span> <span class="hljs-params">--with-compat</span> <span class="hljs-params">--with-file-aio</span> <span class="hljs-params">--with-threads</span> <span class="hljs-params">--with-http_addition_module</span> <span class="hljs-params">--with-http_auth_request_module</span> <span class="hljs-params">--with-http_gunzip_module</span> <span class="hljs-params">--with-http_gzip_static_module</span> <span class="hljs-params">--with-http_random_index_module</span> <span class="hljs-params">--with-http_realip_module</span> <span class="hljs-params">--with-http_secure_link_module</span> <span class="hljs-params">--with-http_slice_module</span> <span class="hljs-params">--with-http_ssl_module</span> <span class="hljs-params">--with-http_stub_status_module</span> <span class="hljs-params">--with-http_sub_module</span> <span class="hljs-params">--with-http_v2_module</span> <span class="hljs-params">--with-stream</span> <span class="hljs-params">--with-stream_realip_module</span> <span class="hljs-params">--with-stream_ssl_module</span> <span class="hljs-params">--with-stream_ssl_preread_module</span> <span class="hljs-params">--with-http_geoip_module=dynamic</span> <span class="hljs-params">--with-stream_geoip_module=dynamic</span> <span class="hljs-params">--with-openssl=/root/openssl-3</span>.0.5<br><br>make -j $<span class="hljs-params">(nproc)</span> && make install -j $<span class="hljs-params">(nproc)</span><br><br>nginx -V<br><br>systemctl restart nginx<br></code></pre></td></tr></table></figure><h1 id="作业"><a href="#作业" class="headerlink" title="作业"></a>作业</h1><ol><li>独立完成nginx yum安装,apt安装。</li><li>独立完成nginx制作rpm,添加echo模块,升级ssl,同时制作rpm。</li><li>独立完成nginx编译安装,添加echo模块,升级ssl。</li></ol>]]></content>
<categories>
<category>周末直播分享</category>
</categories>
<tags>
<tag>linux</tag>
</tags>
</entry>
<entry>
<title>Vmware安装系统</title>
<link href="/2022/06/12/vmware%E5%AE%89%E8%A3%85%E7%B3%BB%E7%BB%9F/"/>
<url>/2022/06/12/vmware%E5%AE%89%E8%A3%85%E7%B3%BB%E7%BB%9F/</url>
<content type="html"><![CDATA[<h1 id="主机初始化前规划"><a href="#主机初始化前规划" class="headerlink" title="主机初始化前规划"></a>主机初始化前规划</h1><p><img src="20220611105932.png" alt="image-20220611105931193"></p><p><a href="./vmware%E5%AE%89%E8%A3%85%E8%A7%84%E5%88%92.xlsx">安装规划</a></p><p>haproxy 高可用, 配置动静分离: [<a href="https://blog.51cto.com/blief/1751806]">https://blog.51cto.com/blief/1751806]</a></p><ul><li>更新, 回滚:下线,更新,上线。</li><li>加节点, 配置haproxy代理,配置tomcat, 重新发应用。</li></ul><p>Kubernetes时代</p><ul><li>更新: <code>kubectl set image -n ns deploy/myapp container_name=镜像名</code>, </li><li>回滚: <code>kubectl rollout undo -n ns deploy/myapp</code></li></ul><h1 id="系统安装"><a href="#系统安装" class="headerlink" title="系统安装"></a>系统安装</h1><ol><li><p>下载</p><p>centos: [<a href="https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/]">https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/]</a></p><ul><li>centos 8 遇到源问题 [<a href="https://help.aliyun.com/document_detail/405635.html]">https://help.aliyun.com/document_detail/405635.html]</a></li><li>centos 6 源遇到问题[<a href="https://help.aliyun.com/document_detail/193569.html%EF%BC%BD">https://help.aliyun.com/document_detail/193569.html]</a></li><li>centos 停止维护如何应对 [<a href="https://help.aliyun.com/document_detail/347584.html]">https://help.aliyun.com/document_detail/347584.html]</a></li></ul><p>ubuntu: [<a href="https://mirrors.aliyun.com/ubuntu-releases/focal/ubuntu-20.04.4-live-server-amd64.iso]">https://mirrors.aliyun.com/ubuntu-releases/focal/ubuntu-20.04.4-live-server-amd64.iso]</a></p><ul><li>ubuntu 16 继续安全更新 [<a href="https://help.aliyun.com/document_detail/267548.html]">https://help.aliyun.com/document_detail/267548.html]</a></li></ul><figure class="highlight routeros"><table><tr><td class="gutter"><div class="code-wrapper"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></div></td><td class="code"><pre><code class="hljs routeros"><span class="hljs-comment"># 修改网卡名</span><br>net.<span class="hljs-attribute">ifnames</span>=0 <span class="hljs-attribute">biosdevname</span>=0<br></code></pre></td></tr></table></figure></li><li><p>安装,完成,快照。<code>os</code></p></li><li><p>初始化,验证,快照。 <code>init</code></p></li><li><p>完整克隆,改主机名,IP,重启验证,快照。</p></li></ol><h1 id="初始化脚本"><a href="#初始化脚本" class="headerlink" title="初始化脚本"></a>初始化脚本</h1><p><code>http://blog.mykernel.cn</code> 我的博客</p><p>使用<code>bash script.sh -h</code></p><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><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span><br><span class="hljs-comment">#</span><br><span class="hljs-comment">#********************************************************************</span><br><span class="hljs-comment">#Author: Songliangcheng</span><br><span class="hljs-comment">#QQ: 2192383945</span><br><span class="hljs-comment">#Date: 2020-11-10</span><br><span class="hljs-comment">#FileName: linux_template_install.sh</span><br><span class="hljs-comment">#URL: http://www.magedu.com</span><br><span class="hljs-comment">#Description: 借鉴N49同学N49030 广州 程昱余脚本所写</span><br><span class="hljs-comment">#Copyright (C): 2020 All rights reserved</span><br><span class="hljs-comment">#********************************************************************</span><br><span class="hljs-comment"># openssh-server配置</span><br>PORT=22<br>ALLOW_ROOT_LOGIN=<span class="hljs-built_in">yes</span><br>ALLOW_PASS_LOGIN=<span class="hljs-built_in">yes</span><br><span class="hljs-comment"># root密码配置</span><br>ROOT_PASS=<span class="hljs-string">"123456"</span><br><span class="hljs-comment"># 主机名配置</span><br>HOSTNAME=chengdu-huayang-linux39-template-0-167.magedu.local<br><span class="hljs-comment"># 网络配置</span><br>IPADDR=192.168.0.123<br>NETMASK=255.255.255.0<br>GATEWAY=192.168.0.1<br>DNS1=223.6.6.6 <br>AUTHOR=magedu<br>QQ=1062670898,2967305595<br>DESCRIBE=<span class="hljs-string">"A test Script from www.magedu.com"</span><br>CURRENT_DIR=$(<span class="hljs-built_in">dirname</span> $(<span class="hljs-built_in">readlink</span> -f <span class="hljs-variable">$0</span>))<br><br><span class="hljs-comment"># 配置vimrc环境</span><br><span class="hljs-function"><span class="hljs-title">set_vimrc</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置vimrc环境"</span><br><span class="hljs-built_in">cat</span>>~/.vimrc<<<span class="hljs-string">EOF</span><br><span class="hljs-string">set nu</span><br><span class="hljs-string">set cul</span><br><span class="hljs-string">set tabstop=2</span><br><span class="hljs-string">set expandtab</span><br><span class="hljs-string">set shiftwidth=2</span><br><span class="hljs-string">set ai</span><br><span class="hljs-string">set softtabstop=2</span><br><span class="hljs-string">map <F2> :set paste <CR> o</span><br><span class="hljs-string">map <F3> :set expandtab <CR> :%retab! <CR> :wq! <CR></span><br><span class="hljs-string">map <F4> :set binary <CR> :set noendofline <CR> :wq! <CR></span><br><span class="hljs-string">autocmd BufNewFile *.sh exec ":call SetTitle()"</span><br><span class="hljs-string">function SetTitle()</span><br><span class="hljs-string"> if expand("%:e") == 'sh'</span><br><span class="hljs-string"> call setline(1,"#!/bin/bash")</span><br><span class="hljs-string"> call setline(2,"#")</span><br><span class="hljs-string"> call setline(3,"#********************************************************************")</span><br><span class="hljs-string"> call setline(4,"#Author: $1")</span><br><span class="hljs-string"> call setline(5,"#QQ: $2")</span><br><span class="hljs-string"> call setline(6,"#Date: ".strftime("%Y-%m-%d"))</span><br><span class="hljs-string"> call setline(7,"#FileName: ".expand("%"))</span><br><span class="hljs-string"> call setline(8,"#URL: http://blog.mykernel.cn")</span><br><span class="hljs-string"> call setline(9,"#Description: $3")</span><br><span class="hljs-string"> call setline(10,"#Copyright (C): ".strftime("%Y")." All rights reserved")</span><br><span class="hljs-string"> call setline(11,"#********************************************************************")</span><br><span class="hljs-string"> call setline(12,"")</span><br><span class="hljs-string"> endif</span><br><span class="hljs-string">endfunc</span><br><span class="hljs-string">autocmd BufNewFile * normal G</span><br><span class="hljs-string">EOF</span><br><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><br><br><br><br><span class="hljs-comment"># 配置中文</span><br><span class="hljs-function"><span class="hljs-title">set_chinese</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置中文"</span><br>yum -y install kde-l10n-Chinese glibc-common<br>localedef -c -f UTF-8 -i zh_CN zh_CN.utf8<br><span class="hljs-built_in">echo</span> <span class="hljs-string">'</span><br><span class="hljs-string">export LANG=zh_CN.utf8</span><br><span class="hljs-string">'</span> > /etc/profile.d/chinese.sh<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><span class="hljs-function"><span class="hljs-title">set_chinese_ubuntu</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置中文"</span><br>apt update<br><span class="hljs-keyword">if</span> [ $? -ne 0 ]; <span class="hljs-keyword">then</span><br>pkill apt-get<br>pkill apt-get<br>apt update<br><span class="hljs-keyword">fi</span><br>apt-get install language-pack-zh* -y<br><span class="hljs-built_in">echo</span> <span class="hljs-string">'LANG="zh_CN.UTF-8"'</span> > /etc/default/locale<br>dpkg-reconfigure --frontend=noninteractive locales<br>update-locale LANG=zh_CN.UTF-8<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><br><span class="hljs-comment"># 配置openssh-server</span><br><span class="hljs-function"><span class="hljs-title">set_openssh_server</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置openssh-server"</span><br><span class="hljs-built_in">cat</span> > /etc/ssh/sshd_config <<<span class="hljs-string">EOF</span><br><span class="hljs-string">Port ${1:-22}</span><br><span class="hljs-string">HostKey /etc/ssh/ssh_host_rsa_key</span><br><span class="hljs-string">HostKey /etc/ssh/ssh_host_ecdsa_key</span><br><span class="hljs-string">HostKey /etc/ssh/ssh_host_ed25519_key</span><br><span class="hljs-string">SyslogFacility AUTHPRIV</span><br><span class="hljs-string">PermitRootLogin ${2:-prohibit-password}</span><br><span class="hljs-string">AuthorizedKeysFile.ssh/authorized_keys</span><br><span class="hljs-string">PasswordAuthentication ${3:-yes}</span><br><span class="hljs-string">#PubkeyAuthentication yes</span><br><span class="hljs-string">ChallengeResponseAuthentication no</span><br><span class="hljs-string">GSSAPIAuthentication yes</span><br><span class="hljs-string">GSSAPICleanupCredentials no</span><br><span class="hljs-string">UsePAM yes</span><br><span class="hljs-string">X11Forwarding yes</span><br><span class="hljs-string">UseDNS no</span><br><span class="hljs-string">AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES</span><br><span class="hljs-string">AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT</span><br><span class="hljs-string">AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE</span><br><span class="hljs-string">AcceptEnv XMODIFIERS</span><br><span class="hljs-string">Subsystemsftp/usr/libexec/openssh/sftp-server</span><br><span class="hljs-string">EOF</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><span class="hljs-function"><span class="hljs-title">set_openssh_server_ubuntu</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置openssh-server"</span><br><span class="hljs-built_in">cat</span> > /etc/ssh/sshd_config <<<span class="hljs-string">EOF</span><br><span class="hljs-string">Port ${1:-22}</span><br><span class="hljs-string">HostKey /etc/ssh/ssh_host_rsa_key</span><br><span class="hljs-string">HostKey /etc/ssh/ssh_host_ecdsa_key</span><br><span class="hljs-string">HostKey /etc/ssh/ssh_host_ed25519_key</span><br><span class="hljs-string">SyslogFacility AUTHPRIV</span><br><span class="hljs-string">PermitRootLogin ${2:-prohibit-password}</span><br><span class="hljs-string">AuthorizedKeysFile.ssh/authorized_keys</span><br><span class="hljs-string">PasswordAuthentication ${3:-yes}</span><br><span class="hljs-string">#PubkeyAuthentication yes</span><br><span class="hljs-string">ChallengeResponseAuthentication no</span><br><span class="hljs-string">GSSAPIAuthentication yes</span><br><span class="hljs-string">GSSAPICleanupCredentials no</span><br><span class="hljs-string">UsePAM yes</span><br><span class="hljs-string">X11Forwarding yes</span><br><span class="hljs-string">UseDNS no</span><br><span class="hljs-string">AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES</span><br><span class="hljs-string">AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT</span><br><span class="hljs-string">AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE</span><br><span class="hljs-string">AcceptEnv XMODIFIERS</span><br><span class="hljs-string">Subsystemsftp/usr/lib/openssh/sftp-server</span><br><span class="hljs-string">EOF</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><span class="hljs-comment"># 配置root密码</span><br><span class="hljs-function"><span class="hljs-title">set_root_passwd</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置root密码"</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$1</span>"</span> | passwd --stdin root<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><span class="hljs-function"><span class="hljs-title">set_root_passwd_ubuntu</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置root密码"</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"root:<span class="hljs-variable">$1</span>"</span> | chpasswd<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><br><span class="hljs-comment"># 配置主机名</span><br><span class="hljs-function"><span class="hljs-title">set_hostname</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置主机名"</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$1</span>"</span> > /etc/hostname<br>hostnamectl set-hostname <span class="hljs-string">"<span class="hljs-variable">$1</span>"</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><span class="hljs-comment"># 配置网卡名</span><br><span class="hljs-function"><span class="hljs-title">set_ethX</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置网卡名"</span><br>sed -Ei.bak <span class="hljs-string">'/GRUB_CMDLINE_LINUX=/s/quiet.*$/quiet net.ifnames=0 biosdevname=0"/'</span> /etc/default/grub<br>grub2-mkconfig -o /boot/grub2/grub.cfg > /dev/null<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><span class="hljs-function"><span class="hljs-title">set_ethX_ubuntu</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置网卡名"</span><br>sed -Ei.bak <span class="hljs-string">'/GRUB_CMDLINE_LINUX=/s/quiet.*$/quiet net.ifnames=0 biosdevname=0"/'</span> /etc/default/grub<br>update-grub<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><br><span class="hljs-comment"># 获取掩码长度</span><br><span class="hljs-function"><span class="hljs-title">mask2cdr</span></span> ()<br>{<br> <span class="hljs-comment"># Assumes there's no "255." after a non-255 byte in the mask</span><br> <span class="hljs-built_in">local</span> x=<span class="hljs-variable">${1##*255.}</span><br> <span class="hljs-built_in">set</span> -- 0^^^128^192^224^240^248^252^254^ $(( (<span class="hljs-variable">${#1}</span> - <span class="hljs-variable">${#x}</span>)*<span class="hljs-number">2</span> )) <span class="hljs-variable">${x%%.*}</span><br> x=<span class="hljs-variable">${1%%$3*}</span><br> <span class="hljs-built_in">echo</span> $(( <span class="hljs-variable">$2</span> + (<span class="hljs-variable">${#x}</span>/<span class="hljs-number">4</span>) ))<br>}<br><br><br><span class="hljs-comment"># 配置IP</span><br><span class="hljs-function"><span class="hljs-title">set_ip</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置IP"</span><br><span class="hljs-built_in">cat</span> > /etc/sysconfig/network-scripts/ifcfg-eth0 <<<span class="hljs-string">EOF</span><br><span class="hljs-string">TYPE=Ethernet</span><br><span class="hljs-string">BOOTPROTO=static</span><br><span class="hljs-string">DEVICE=eth0</span><br><span class="hljs-string">ONBOOT=yes</span><br><span class="hljs-string">IPADDR=$1</span><br><span class="hljs-string">NETMASK=$2</span><br><span class="hljs-string">GATEWAY=$3</span><br><span class="hljs-string">#DNS1=192.168.0.1</span><br><span class="hljs-string">EOF</span><br><br><br><span class="hljs-built_in">cat</span> > /etc/resolv.conf <<<span class="hljs-string">EOF</span><br><span class="hljs-string">nameserver $4</span><br><span class="hljs-string">EOF</span><br><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><span class="hljs-function"><span class="hljs-title">set_ip_ubuntu</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置IP"</span><br><br><span class="hljs-built_in">cat</span> > /etc/netplan/01-netcfg.yaml <<<span class="hljs-string">EOF</span><br><span class="hljs-string"># This file describes the network interfaces available on your system</span><br><span class="hljs-string"># For more information, see netplan(5).</span><br><span class="hljs-string">network:</span><br><span class="hljs-string"> version: 2</span><br><span class="hljs-string"> renderer: networkd</span><br><span class="hljs-string"> ethernets:</span><br><span class="hljs-string"> eth0:</span><br><span class="hljs-string"> dhcp4: no</span><br><span class="hljs-string"> addresses: [$1/$(mask2cdr $2)]</span><br><span class="hljs-string"> gateway4: $3</span><br><span class="hljs-string"> nameservers:</span><br><span class="hljs-string"> addresses: [$4]</span><br><span class="hljs-string">EOF</span><br>netplan apply<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><br><br><span class="hljs-comment"># 安装常用命令</span><br><span class="hljs-function"><span class="hljs-title">set_install_basepkgs</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始安装常用命令"</span><br>yum remove -y NetworkManager* firewalld*<br><span class="hljs-comment"># 卸载NetworkManger之后dns会出问题</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">'nameserver 114.114.114.114'</span> > /etc/resolv.conf<br>yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop ntpdate lsof<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br><br><span class="hljs-built_in">echo</span> <span class="hljs-string">"关闭selinux"</span><br>sed -Ei.bak <span class="hljs-string">'/SELINUX=/s/(SELINUX=)enforcing/\1disabled/'</span> /etc/selinux/config<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><br><span class="hljs-function"><span class="hljs-title">set_install_basepkgs_ubuntu</span></span>() {<br>apt purge ufw lxd lxd-client lxcfs lxc-common -y<br>apt install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute gcc make openssh-server lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip lsof make curl iputils-ping net-tools -y <br>}<br><span class="hljs-comment"># 优化系统资源限制</span><br><span class="hljs-function"><span class="hljs-title">set_limit</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始优化系统资源限制"</span><br><span class="hljs-built_in">cat</span> > /etc/security/limits.conf <<<span class="hljs-string">'EOF'</span><br>root soft core unlimited<br>root hard core unlimited<br>root soft <span class="hljs-built_in">nproc</span> 1000000<br>root hard <span class="hljs-built_in">nproc</span> 1000000<br>root soft nofile 1000000<br>root hard nofile 1000000<br>root soft memlock 32000<br>root hard memlock 32000<br>root soft msgqueue 8192000<br>root hard msgqueue 8192000<br>* soft core unlimited<br>* hard core unlimited<br>* soft <span class="hljs-built_in">nproc</span> 1000000<br>* hard <span class="hljs-built_in">nproc</span> 1000000<br>* soft nofile 1000000<br>* hard nofile 1000000<br>* soft memlock 32000<br>* hard memlock 32000<br>* soft msgqueue 8192000<br>* hard msgqueue 8192000<br>EOF<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><br><span class="hljs-comment"># 开始优化内核参数</span><br><span class="hljs-function"><span class="hljs-title">set_kernel_params</span></span>() {<br><span class="hljs-built_in">cat</span> > /etc/sysctl.conf <<<span class="hljs-string">'EOF'</span><br><span class="hljs-comment"># 1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。</span><br><span class="hljs-comment"># 减少DDoS攻击,校验数据包的反向路径,如果反向路径不合适,则直接丢弃数据包,避免过多的无效连接消耗系统资源。</span><br><span class="hljs-comment"># 防止IP Spoofing,校验数据包的反向路径,如果客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳路径,则直接丢弃数据包,不会向伪造IP的客户端回复响应。</span><br>net.ipv4.conf.default.rp_filter = 1<br><span class="hljs-comment"># 监听非本机</span><br>net.ipv4.ip_nonlocal_bind = 1<br><span class="hljs-comment"># 转发</span><br>net.ipv4.ip_forward = 1<br><span class="hljs-comment">#处理无源路由的包</span><br>net.ipv4.conf.default.accept_source_route = 0<br><span class="hljs-comment">#关闭sysrq功能</span><br>kernel.sysrq = 0<br><span class="hljs-comment">#core文件名中添加pid作为扩展名</span><br>kernel.core_uses_pid = 1<br><span class="hljs-comment"># tcp_syncookies是一个开关,是否打开SYN Cookie功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN的重试次数。</span><br>net.ipv4.tcp_syncookies = 1<br><span class="hljs-comment"># docker</span><br>net.bridge.bridge-nf-call-ip6tables = 1<br>net.bridge.bridge-nf-call-iptables = 1<br>net.bridge.bridge-nf-call-arptables = 1<br><span class="hljs-comment"># docker运行时,需要设置为1</span><br>fs.may_detach_mounts = 1<br><span class="hljs-comment">#修改消息队列长度</span><br>kernel.msgmnb = 65536<br>kernel.msgmax = 65536<br><span class="hljs-comment">#设置最大内存共享段大小bytes</span><br>kernel.shmmax = 68719476736<br>kernel.shmall = 4294967296<br><br>net.ipv4.tcp_window_scaling = 1<br>net.ipv4.tcp_sack = 1<br>net.core.wmem_default = 8388608<br>net.core.rmem_default = 8388608<br>net.core.rmem_max = 16777216<br>net.core.wmem_max = 16777216<br>net.core.netdev_max_backlog = 262144<br><span class="hljs-comment"># net.core.somaxconn 是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。什么是backlog呢?backlog就是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog。而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。 </span><br>net.core.somaxconn = 20480<br>net.core.optmem_max = 81920<br><span class="hljs-comment"># tcp_max_syn_backlog 进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.</span><br>net.ipv4.tcp_max_syn_backlog = 262144<br>net.ipv4.tcp_syn_retries = 3<br>net.ipv4.tcp_retries1 = 3<br>net.ipv4.tcp_retries2 = 15<br><span class="hljs-comment"># 在使用 iptables 做 nat 时,发现内网机器 ping 某个域名 ping 的通,而使用 curl 测试不通, 原来是 net.ipv4.tcp_timestamps 设置了为 1 ,即启用时间戳</span><br>net.ipv4.tcp_timestamps = 0<br><span class="hljs-comment"># tw_reuse 只对客户端起作用,开启后客户端在1s内回收</span><br>net.ipv4.tcp_tw_reuse = 1<br><span class="hljs-comment"># recycle 同时对服务端和客户端启作用。如果服务端断开一个NAT用户可能会影响。</span><br>net.ipv4.tcp_tw_recycle = 0<br>net.ipv4.tcp_fin_timeout = 1<br><span class="hljs-comment"># Nginx 之类的中间代理一定要关注这个值,因为它对你的系统起到一个保护的作用,一旦端口全部被占用,服务就异常了。 tcp_max_tw_buckets 能帮你降低这种情况的发生概率,争取补救时间。</span><br>net.ipv4.tcp_max_tw_buckets = 20000<br><span class="hljs-comment"># 这个值表示系统所能处理不属于任何进程的socket数量,当我们需要快速建立大量连接时,就需要关注下这个值了。 </span><br>net.ipv4.tcp_max_orphans = 327680<br><span class="hljs-comment"># 15. 现大量fin-wait-1</span><br><span class="hljs-comment">#首先,fin发送之后,有可能会丢弃,那么发送多少次这样的fin包呢?fin包的重传,也会采用退避方式,在2.6.358内核中采用的是指数退避,2s,4s,最后的重试次数是由</span><br>net.ipv4.tcp_synack_retries = 1<br>net.ipv4.tcp_syncookies = 1<br><span class="hljs-comment"># KeepAlive的空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2小时)</span><br>net.ipv4.tcp_keepalive_time = 300<br><span class="hljs-comment"># KeepAlive探测包的发送间隔,默认值为75s</span><br>net.ipv4.tcp_keepalive_intvl = 30<br><span class="hljs-comment"># 在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包次数,默认值为9(次)</span><br>net.ipv4.tcp_keepalive_probes = 3<br><span class="hljs-comment"># 允许超载使用内存,避免内存快到极限报错</span><br>vm.overcommit_memory = 1<br><span class="hljs-comment"># 0,内存不足启动oom killer. 1内存不足,kernel panic(系统重启) 或oom. 2. 内存不足, 强制kernel panic. (系统重启) </span><br>vm.panic_on_oom=0<br>vm.swappiness = 10<br><span class="hljs-comment">#net.ipv4.conf.eth1.rp_filter = 0</span><br><span class="hljs-comment">#net.ipv4.conf.lo.arp_ignore = 1</span><br><span class="hljs-comment">#net.ipv4.conf.lo.arp_announce = 2</span><br><span class="hljs-comment">#net.ipv4.conf.all.arp_ignore = 1</span><br><span class="hljs-comment">#net.ipv4.conf.all.arp_announce = 2</span><br>net.ipv4.tcp_mem = 786432 1048576 1572864<br>net.ipv4.tcp_rmem = 4096 87380 4194304<br>net.ipv4.tcp_wmem = 4096 16384 4194304<br><span class="hljs-comment"># 随机端口的范围</span><br>net.ipv4.ip_local_port_range = 10001 65000<br><br><span class="hljs-comment"># inotify监听文件数量</span><br>fs.inotify.max_user_watches=89100<br><br><span class="hljs-comment"># 文件打开数量</span><br><span class="hljs-comment"># 所有进程 </span><br>fs.file-max=52706963<br><span class="hljs-comment"># 单个进程</span><br>fs.nr_open=52706963<br>EOF<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><br><span class="hljs-comment"># 镜像</span><br><span class="hljs-function"><span class="hljs-title">set_mirrors_aliyun_ubuntu</span></span>() {<br>sed -i.bak -e <span class="hljs-string">'[email protected]@mirrors.aliyun.com@g'</span> -e <span class="hljs-string">'[email protected]@mirrors.aliyun.com@g'</span> /etc/apt/sources.list<br>apt update<br>}<br><br><span class="hljs-comment"># 配置时间同步</span><br><span class="hljs-function"><span class="hljs-title">set_time_sync</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置时间同步"</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">'*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &> /dev/null'</span> > /var/spool/cron/root<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><span class="hljs-comment"># 配置时间同步</span><br><span class="hljs-function"><span class="hljs-title">set_time_sync_ubuntu</span></span>() {<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"开始配置时间同步"</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">'*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &> /dev/null'</span> > /var/spool/cron/crontabs/root<br><span class="hljs-built_in">echo</span> <span class="hljs-string">"配置成功"</span><br>}<br><br><span class="hljs-keyword">function</span> usage {<br><span class="hljs-built_in">cat</span> << <span class="hljs-string">END</span><br><span class="hljs-string">$(basename $0) OPTION ...</span><br><span class="hljs-string">--port=<port> ssh服务监听的端口, 默认22</span><br><span class="hljs-string">--allow-root-login=<prohibit-password|yes> ssh配置是否让root能登陆,默认prohibit-password.</span><br><span class="hljs-string">--allow-pass-login=<yes|no> ssh配置是否让pass能登陆,默认yes</span><br><span class="hljs-string">--root-password=<root_pass> 配置root登陆密码,默认123456</span><br><span class="hljs-string">--hostname=<hostname> 配置主机名,cd-hy-linux39-centos-0-167.magedu.local</span><br><span class="hljs-string">--ipaddr=<ipaddr> 配置IP, 默认192.168.0.123</span><br><span class="hljs-string">--netmask=<netmask> 配置掩码, 默认255.255.255.0</span><br><span class="hljs-string">--gateway=<gateway> 配置网关,默认192.168.0.1</span><br><span class="hljs-string">--dns=<dns> 配置DNS, 默认223.6.6.6</span><br><span class="hljs-string">--author=<author> 配置vimrc生成脚本的作者, 默认magedu</span><br><span class="hljs-string">--qq=<author> 配置vimrc生成脚本的qq, 我的班主任萌萌老师: 2967305595</span><br><span class="hljs-string">--desc=<desc> 配置vimrc生成脚本的描述, 默认: A test Script from magedu</span><br><span class="hljs-string"> --chinese= 配置中文, openstack python2, 不要启用</span><br><span class="hljs-string"> --eth0= 配置eth0接口</span><br><span class="hljs-string"> --resourceslimit= 配置资源限制</span><br><span class="hljs-string"> --kernelparams= 配置内核优化</span><br><span class="hljs-string"> --basepkgs= 配置基础包</span><br><span class="hljs-string"> --umirror= 配置镜像加速, only ubuntu</span><br><span class="hljs-string"></span><br><span class="hljs-string"></span><br><span class="hljs-string"> # 所有功能 非中文</span><br><span class="hljs-string"># bash $(basename $0) \</span><br><span class="hljs-string">--port=22 --allow-root-login=yes --allow-pass-login=yes \</span><br><span class="hljs-string">--root-password=123456 \</span><br><span class="hljs-string">--hostname=ubuntu-template.magedu.local \</span><br><span class="hljs-string">--ipaddr=192.168.0.123 --netmask=255.255.255.0 --gateway=192.168.0.1 \</span><br><span class="hljs-string">--dns=223.6.6.6 \</span><br><span class="hljs-string">--author=songliangcheng --qq=2192383945 --desc="A test toy" \</span><br><span class="hljs-string">--resourceslimit=1 \</span><br><span class="hljs-string">--kernelparams=1 \</span><br><span class="hljs-string">--basepkgs=1 \</span><br><span class="hljs-string">--chinese=0 \</span><br><span class="hljs-string">--eth0=0 \</span><br><span class="hljs-string">--umirror=1 </span><br><span class="hljs-string"></span><br><span class="hljs-string"></span><br><span class="hljs-string"> 示例:只配置主机名和vimrc和参数优化 中文</span><br><span class="hljs-string"># bash $(basename $0) \</span><br><span class="hljs-string">--hostname=ubuntu-template.magedu.local \</span><br><span class="hljs-string">--author=songliangcheng --qq=2192383945 --desc="A test toy" \</span><br><span class="hljs-string">--resourceslimit=1 \</span><br><span class="hljs-string">--kernelparams=1 \</span><br><span class="hljs-string">--basepkgs=1 \</span><br><span class="hljs-string">--chinese=1 \</span><br><span class="hljs-string">--eth0=0 \</span><br><span class="hljs-string">--umirror=1 </span><br><span class="hljs-string"> </span><br><span class="hljs-string">示例: 无操作</span><br><span class="hljs-string">bash -x linux_template_install.sh --resourceslimit=0 --kernelparams=0 --basepkgs=0 --chinese=0 --eth0=0 --umirror=0</span><br><span class="hljs-string"></span><br><span class="hljs-string">END</span><br><br>}<br><br><br>ssh=0<br>pass=0<br>hname=0<br>vimrc=0<br>net=0<br>chinese=0<br>eth0=0<br>resourceslimit=0<br>kernelparams=0<br>basepkgs=0<br>umirror=0<br><span class="hljs-keyword">for</span> option<br><span class="hljs-keyword">do</span><br> <span class="hljs-keyword">case</span> <span class="hljs-string">"<span class="hljs-variable">$option</span>"</span> <span class="hljs-keyword">in</span><br> -*=*) value=`<span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$option</span>"</span> | sed -e <span class="hljs-string">'s/[-_a-zA-Z0-9]*=//'</span>` ;;<br> *) value=<span class="hljs-string">""</span> ;;<br> <span class="hljs-keyword">esac</span><br><br> <span class="hljs-keyword">case</span> <span class="hljs-string">"<span class="hljs-variable">$option</span>"</span> <span class="hljs-keyword">in</span><br> --<span class="hljs-built_in">help</span>) <br>usage<br><span class="hljs-built_in">exit</span> 1<br>;; <br>--port=*)<br>PORT=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>ssh=1<br>;;<br>--allow-root-login=*)<br>ALLOW_ROOT_LOGIN=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>ssh=1<br>;;<br>--allow-pass-login=*)<br>ALLOW_PASS_LOGIN=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>ssh=1<br>;;<br>--root-password=*)<br>ROOT_PASS=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>pass=1<br>;;<br>--hostname=*)<br>HOSTNAME=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>hname=1<br>;;<br>--ipaddr=*)<br>IPADDR=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>net=1<br>;;<br>--netmask=*)<br>NETMASK=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>net=1<br>;;<br>--gateway=*)<br>GATEWAY=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>net=1<br>;;<br>--dns=*)<br>DNS1=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>net=1<br>;;<br>--author=*)<br>AUTHOR=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>vimrc=1<br>;;<br>--qq=*)<br>QQ=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>vimrc=1<br>;;<br>--desc=*)<br>DESCRIBE=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br>vimrc=1<br>;;<br> --chinese=*)<br> chinese=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br> ;;<br> --eth0=*)<br> eth0=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br> ;;<br> --resourceslimit=*)<br> resourceslimit=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br> ;;<br> --kernelparams=*)<br> kernelparams=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br> ;;<br> --basepkgs=*)<br> basepkgs=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br> ;;<br> --umirror=*)<br> umirror=<span class="hljs-string">"<span class="hljs-variable">$value</span>"</span><br> ;;<br> *)<br> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$0</span>: error: invalid option \"<span class="hljs-variable">$option</span>\""</span><br>usage<br> <span class="hljs-built_in">exit</span> 1<br> ;;<br><span class="hljs-keyword">esac</span><br><span class="hljs-keyword">done</span><br><br><br>[ -z <span class="hljs-string">"<span class="hljs-variable">$option</span>"</span> ] && <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$0</span>: error: invalid option \"<span class="hljs-variable">$option</span>\""</span> && <span class="hljs-built_in">exit</span> 1<br><br><br><br><br><span class="hljs-function"><span class="hljs-title">centos_init</span></span>() {<br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$vimrc</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置vim环境</span><br>set_vimrc <span class="hljs-string">"<span class="hljs-variable">$AUTHOR</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$QQ</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$DESCRIBE</span>"</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$chinese</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置中文</span><br>set_chinese<br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$ssh</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置ssh</span><br><span class="hljs-comment"># ubuntu: Subsystemsftp /usr/lib/openssh/sftp-server</span><br><span class="hljs-comment"># set_openssh_server 端口 是否允许root登陆 是否允许密码登陆</span><br>set_openssh_server <span class="hljs-variable">$PORT</span> <span class="hljs-variable">$ALLOW_ROOT_LOGIN</span> <span class="hljs-variable">$ALLOW_PASS_LOGIN</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$pass</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置root密码</span><br>set_root_passwd <span class="hljs-string">"<span class="hljs-variable">$ROOT_PASS</span>"</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$hname</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置主机名</span><br><span class="hljs-comment"># 地区-机房-业务-服务-ip后缀.域名.后缀</span><br><span class="hljs-comment"># chengdu-huayang-linux39-centos-0-167.magedu.local</span><br>set_hostname <span class="hljs-string">"<span class="hljs-variable">$HOSTNAME</span>"</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$eth0</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_ethX<br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$net</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># set_ip IP MASK GATEWAY</span><br>set_ip <span class="hljs-string">"<span class="hljs-variable">$IPADDR</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$NETMASK</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$GATEWAY</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$DNS1</span>"</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$basepkgs</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 安装基础包</span><br>set_install_basepkgs<br><span class="hljs-keyword">fi</span><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$resourceslimit</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置限制和内核参数</span><br>set_limit<br><span class="hljs-keyword">fi</span><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$kernelparams</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_kernel_params<br><span class="hljs-keyword">fi</span><br><span class="hljs-comment"># 配置时间同步</span><br>set_time_sync<br><span class="hljs-comment"># 提示</span><br><span class="hljs-comment"># Set Logon failure handling</span><br><span class="hljs-comment">#限制登入失败三次,普通账号锁定5分钟,root账号锁定5分钟</span><br><span class="hljs-keyword">if</span> ! grep -q root_unlock_time=300 /etc/pam.d/sshd; <span class="hljs-keyword">then</span><br>sed -i <span class="hljs-string">'/^#%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300'</span> /etc/pam.d/sshd<br><span class="hljs-keyword">fi</span> <br>}<br><span class="hljs-function"><span class="hljs-title">ubuntu_init</span></span>() {<br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$umirror</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置镜像源</span><br>set_mirrors_aliyun_ubuntu<br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$chinese</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置中文</span><br>set_chinese_ubuntu<br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$vimrc</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_vimrc <span class="hljs-string">"<span class="hljs-variable">$AUTHOR</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$QQ</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$DESCRIBE</span>"</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$ssh</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_openssh_server_ubuntu <span class="hljs-variable">$PORT</span> <span class="hljs-variable">$ALLOW_ROOT_LOGIN</span> <span class="hljs-variable">$ALLOW_PASS_LOGIN</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$pass</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_root_passwd_ubuntu <span class="hljs-string">"<span class="hljs-variable">$ROOT_PASS</span>"</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$hname</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_hostname <span class="hljs-string">"<span class="hljs-variable">$HOSTNAME</span>"</span><br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$eth0</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_ethX_ubuntu<br><span class="hljs-keyword">fi</span><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$net</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_ip_ubuntu <span class="hljs-string">"<span class="hljs-variable">$IPADDR</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$NETMASK</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$GATEWAY</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$DNS1</span>"</span><br><span class="hljs-keyword">fi</span><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$basepkgs</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_install_basepkgs_ubuntu<br><span class="hljs-keyword">fi</span><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$resourceslimit</span> -eq 1 ]; <span class="hljs-keyword">then</span><br><span class="hljs-comment"># 配置限制和内核参数</span><br>set_limit<br><span class="hljs-keyword">fi</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-variable">$kernelparams</span> -eq 1 ]; <span class="hljs-keyword">then</span><br>set_kernel_params<br><span class="hljs-keyword">fi</span><br><span class="hljs-comment"># 配置时间同步</span><br>set_time_sync_ubuntu<br>}<br><br><span class="hljs-comment"># Set Shell History and TMOUT</span><br><span class="hljs-comment"># HISTSIZE has been set to 10000</span><br>sed -i <span class="hljs-string">'s/^HISTSIZE=.*$/HISTSIZE=10000/g'</span> /etc/profile <br><span class="hljs-comment"># HISTTIMEFORMAT has been set to "Number-Time-User-Command"</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">'export HISTTIMEFORMAT="%F %T `whoami` "'</span> > /etc/profile.d/secuirty.sh<br><span class="hljs-comment"># 终端超时10分钟</span><br><span class="hljs-built_in">echo</span> TMOUT=600 >> /etc/profile.d/secuirty.sh<br><br><span class="hljs-keyword">if</span> <span class="hljs-built_in">which</span> apt &> /dev/null; <span class="hljs-keyword">then</span><br>ubuntu_init<br><span class="hljs-keyword">else</span><br>centos_init<br><span class="hljs-keyword">fi</span><br><span class="hljs-built_in">cat</span> << <span class="hljs-string">EOF</span><br><span class="hljs-string"># reboot</span><br><span class="hljs-string">请reboot, 验证ip, 域名解析, kernel params, crontab, ssh, alias</span><br><span class="hljs-string">EOF</span><br><br><span class="hljs-built_in">cd</span> <span class="hljs-variable">$CURRENT_DIR</span><br><span class="hljs-built_in">rm</span> -f <span class="hljs-variable">$0</span><br></code></pre></td></tr></table></figure>]]></content>
<categories>
<category>周末直播分享</category>
</categories>
<tags>
<tag>linux</tag>
</tags>
</entry>
<entry>
<title>Linux历史</title>
<link href="/2022/05/14/Linux%E5%8E%86%E5%8F%B2/"/>
<url>/2022/05/14/Linux%E5%8E%86%E5%8F%B2/</url>
<content type="html"><![CDATA[<h1 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h1><p>linux发展历</p><span id="more"></span>]]></content>
<categories>
<category>个人总结</category>
</categories>
<tags>
<tag>linux</tag>
</tags>
</entry>
<entry>
<title>个人计划</title>
<link href="/2022/05/14/%E4%B8%AA%E4%BA%BA%E8%AE%A1%E5%88%92/"/>
<url>/2022/05/14/%E4%B8%AA%E4%BA%BA%E8%AE%A1%E5%88%92/</url>
<content type="html"><![CDATA[<h1 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h1><p>刚学linux, 做一些计划。</p><span id="more"></span><h1 id="时间安排"><a href="#时间安排" class="headerlink" title="时间安排"></a>时间安排</h1><p><img src="image-20220514205710517.png" alt="image-20220514205710517"></p>]]></content>
<categories>
<category>个人总结</category>
</categories>
<tags>
<tag>linux</tag>
</tags>
</entry>
<entry>
<title>快速搭建自己的个人博客</title>
<link href="/2022/05/13/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
<url>/2022/05/13/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/</url>
<content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>完全免费</p><ol><li><p>通过<strong>淘宝账号</strong>登陆, <code>codeup.aliyun.com</code>, 免费。</p></li><li><p>登陆 <code>github.com</code> ,注册一个账号,免费。我这里账号是<code>slcnx</code></p></li><li><p>安装windows git, <a href="https://gitforwindows.org/">https://gitforwindows.org/</a> 下载之后,直接安装。</p><p>需要先验证git, windows 打开 <code>CMD</code> , 输入 <code>git --version</code> <strong>看到</strong>版本号,说明git安装OK</p><p><img src="image-20220513093045210.png" alt="image-20220513093045210"></p></li><li><p>安装windows node, <a href="https://nodejs.org/en/download/">https://nodejs.org/en/download/</a> 下载之后,直接安装</p><p>需要先验证node, windows 打开 <code>CMD</code> , 输入 <code>node --version</code> <strong>看到</strong>版本号,说明node安装OK</p><p><img src="image-20220513093341959.png" alt="image-20220513093341959"></p></li><li><p>安装vscode, <a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a> 下载之后,直接安装</p></li><li><p>安装typora, <a href="https://typora.io/releases/all">https://typora.io/releases/all</a> 下载, 直接安装</p></li></ol><span id="more"></span><h1 id="准备hexo基础模板"><a href="#准备hexo基础模板" class="headerlink" title="准备hexo基础模板"></a>准备hexo基础模板</h1><p>克隆git, 在CMD执行, 以下目录</p><figure class="highlight awk"><table><tr><td class="gutter"><div class="code-wrapper"><pre><span class="line">1</span><br></pre></div></td><td class="code"><pre><code class="hljs awk">git clone --recurse-submodules https:<span class="hljs-regexp">//gi</span>thub.com<span class="hljs-regexp">/slcnx/</span>hexo-template.git blog<br></code></pre></td></tr></table></figure><blockquote><p>不成功多执行几次, 当看到100% 就表示成功了</p></blockquote><p><img src="image-20220513094643815.png" alt="image-20220513094643815"></p><p>现在进入克隆目录</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cd</span> blog<br></code></pre></td></tr></table></figure><p><img src="image-20220513093934096.png" alt="image-20220513093934096"></p><p>克隆子项目<code>git submodule update --init --recursive</code></p><p><img src="image-20220513094748529.png" alt="image-20220513094748529"></p><p>现在安装依赖<code> npm install</code></p><p><img src="image-20220513095055192.png" alt="image-20220513095055192"></p><p>现在在命令行输入 <code>start .</code></p><p><img src="image-20220513093954383.png" alt="image-20220513093954383"></p><p>看到以下界面</p><p><img src="image-20220513094013505.png" alt="image-20220513094013505"></p><h1 id="vscode打开目录-运行服务"><a href="#vscode打开目录-运行服务" class="headerlink" title="vscode打开目录, 运行服务"></a>vscode打开目录, 运行服务</h1><p>回到上一级目录,<code>blog</code>目录, 右键 <strong>通过 Code</strong> 打开</p><p><img src="image-20220513094214889.png" alt="image-20220513094214889"></p><p>进入到以下界面</p><p><img src="image-20220513094228729.png" alt="image-20220513094228729"></p><p>现在安装插件, 并退出vscode程序,之后重新 <code>blog</code>目录, 右键 <strong>通过 Code</strong> 打开</p><p><img src="image-20220513094320097.png" alt="image-20220513094320097"></p><p>现在快捷键 <strong>ctrl + shift + `</strong> 运行 <strong>npx hexo s</strong> </p><p><img src="image-20220513095212339.png" alt="image-20220513095212339"></p><p>访问本地的4000 <a href="http://localhost:4000/">http://localhost:4000/</a></p><p><img src="image-20220513095237808.png" alt="image-20220513095237808"></p><h1 id="github准备"><a href="#github准备" class="headerlink" title="github准备"></a>github准备</h1><h2 id="准备github仓库"><a href="#准备github仓库" class="headerlink" title="准备github仓库"></a>准备github仓库</h2><p>查看自己的账号名 , 我的为 <code>slcnx</code></p><p><img src="image-20220513095332738.png" alt="image-20220513095332738"></p><p>新建仓库 <code>slcnx.github.io</code> 格式是<code>用户名.github.io</code></p><p><img src="image-20220513095640820.png" alt="image-20220513095640820"></p><p><img src="image-20220513095652519.png" alt="image-20220513095652519"></p><h2 id="添加一个测试文件"><a href="#添加一个测试文件" class="headerlink" title="添加一个测试文件"></a>添加一个测试文件</h2><p><img src="image-20220513095752726.png" alt="image-20220513095752726"></p><p>一定要添加<code>index.html</code></p><p><img src="image-20220513095822054.png" alt="image-20220513095822054"></p><p>添加之后,刷新网页,过3分钟的样子,右下角出现 active</p><p><img src="image-20220513095942064.png" alt="image-20220513095942064"></p><p>访问网页 <a href="https://slcnx.github.io/">https://slcnx.github.io</a> <code>用户名.github.io</code></p><p><img src="image-20220513100016239.png" alt="image-20220513100016239"></p><p>现在表示github.com已经正常</p><h2 id="配置github"><a href="#配置github" class="headerlink" title="配置github"></a>配置github</h2><p><img src="image-20220513100103791.png" alt="image-20220513100103791"></p><p><img src="image-20220513100129679.png" alt="image-20220513100129679"></p><p>现在需要生成一个公钥和密钥<code>ssh-keygen -t rsa -b 4096 -f id_rsa_2048 -P ''</code> 命令一定要对</p><blockquote><p>此处一定要在<code>Linux</code>主机上生成。之后下载 id_rsa_2048 id_rsa_2048.pub 到本地 博客blog目录</p></blockquote><p>vscode中查看公钥,复制公钥</p><p><img src="image-20220513100509093.png" alt="image-20220513100509093"></p><p><img src="image-20220513100606627.png" alt="image-20220513100606627"></p><p>看到以下内容表示OK</p><p><img src="image-20220513100630996.png" alt="image-20220513100630996"></p><h2 id="获取github的ssh地址"><a href="#获取github的ssh地址" class="headerlink" title="获取github的ssh地址"></a>获取github的ssh地址</h2><p><img src="image-20220513100825116.png" alt="image-20220513100825116"> </p><p><code>[email protected]:slcnx/slcnx.github.io.git</code> </p><p>有docker的同学可以, 可以运行以下命令验证是否正常。<b style="color: red;">没有docker的同学,就不需要执行以下命令</b></p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs stylus">docker build <span class="hljs-attr">--build-arg</span> GITHUB=git@github<span class="hljs-selector-class">.com</span>:slcnx/slcnx<span class="hljs-selector-class">.github</span><span class="hljs-selector-class">.io</span><span class="hljs-selector-class">.git</span> <span class="hljs-attr">--build-arg</span> EMAIL=<span class="hljs-string">'[email protected]'</span> <span class="hljs-attr">--build-arg</span> GUSER=<span class="hljs-string">'songliangcheng'</span> ./<br></code></pre></td></tr></table></figure><h1 id="codeup准备"><a href="#codeup准备" class="headerlink" title="codeup准备"></a>codeup准备</h1><h2 id="准备codeup仓库"><a href="#准备codeup仓库" class="headerlink" title="准备codeup仓库"></a>准备codeup仓库</h2><p><img src="image-20220513101358650.png" alt="image-20220513101358650"></p><p><img src="image-20220513101431944.png" alt="image-20220513101431944"></p><p>获取https地址 <code>https://codeup.aliyun.com/5f73e5a3728df4b180fab5ca/myblog-2022-05-13.git</code></p><p><img src="image-20220513101457691.png" alt="image-20220513101457691"></p><h2 id="本地推送代码"><a href="#本地推送代码" class="headerlink" title="本地推送代码"></a>本地推送代码</h2><p>先在blog目录中, 即进入CMD中,在blog目录中</p><figure class="highlight dsconfig"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs dsconfig"><span class="hljs-string">git</span> <span class="hljs-string">remote</span> <span class="hljs-built_in">set-url</span> <span class="hljs-string">origin</span> <span class="hljs-string">https</span>://<span class="hljs-string">codeup</span>.<span class="hljs-string">aliyun</span>.<span class="hljs-string">com</span>/<span class="hljs-string">5f73e5a3728df4b180fab5ca</span>/<span class="hljs-string">myblog-2022-05-14</span>.<span class="hljs-string">git</span><br></code></pre></td></tr></table></figure><p><img src="image-20220513101730325.png" alt="image-20220513101730325"></p><p>推送代码, 双击push.sh</p><p><img src="image-20220513101816443.png" alt="image-20220513101816443"></p><p>代码仓库, 已经有数据了</p><p><img src="image-20220513101839833.png" alt="image-20220513101839833"></p><h2 id="添加流水线"><a href="#添加流水线" class="headerlink" title="添加流水线"></a>添加流水线</h2><h3 id="进入流水线页面"><a href="#进入流水线页面" class="headerlink" title="进入流水线页面"></a>进入流水线页面</h3><p><img src="image-20220513101902870.png" alt="image-20220513101902870"></p><p><img src="image-20220513101910710.png" alt="image-20220513101910710"></p><p><img src="image-20220513101941108.png" alt="image-20220513101941108"></p><h3 id="配置流水线"><a href="#配置流水线" class="headerlink" title="配置流水线"></a>配置流水线</h3><p>因为代码中有submodule, 就启用</p><p><img src="image-20220513102015626.png" alt="image-20220513102015626"></p><p>定义构建镜像</p><p><img src="image-20220513102242848.png" alt="image-20220513102242848"></p><p><img src="image-20220513102317624.png" alt="image-20220513102317624"></p><p>配置构建参考,<strong>非常关键</strong>, 这里有3个参数</p><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></pre></td><td class="code"><pre><code class="hljs bash">EMAIL 你的QQ邮箱 <br>GUSER 你的用户名,任意<br>GITHUB 这里一定是你上面github创建的仓库的ssh地址,参考4.4获取githubssh地址。我的为 [email protected]:slcnx/slcnx.github.io.git<br></code></pre></td></tr></table></figure><p><img src="image-20220513103303012.png" alt="image-20220513103303012"></p><p>不需要发布所以删除kubernetes</p><p><img src="image-20220513102349111.png" alt="image-20220513102349111"></p><p>保存并运行</p><p><img src="image-20220513102407557.png" alt="image-20220513102407557"></p><h3 id="运行流水线"><a href="#运行流水线" class="headerlink" title="运行流水线"></a>运行流水线</h3><p><img src="image-20220513102417620.png" alt="image-20220513102417620"></p><h3 id="查看日志"><a href="#查看日志" class="headerlink" title="查看日志"></a>查看日志</h3><p><img src="image-20220513102440868.png" alt="image-20220513102440868"></p><p><img src="image-20220513103852668.png" alt="image-20220513103852668"></p><h3 id="查看github-com"><a href="#查看github-com" class="headerlink" title="查看github.com"></a>查看github.com</h3><p><img src="image-20220513103918387.png" alt="image-20220513103918387"></p><h1 id="查看网页"><a href="#查看网页" class="headerlink" title="查看网页"></a>查看网页</h1><p><a href="https://slcnx.github.io/">https://slcnx.github.io/</a></p><p><img src="image-20220513102518346.png" alt="image-20220513102518346"></p><h1 id="写新的文章"><a href="#写新的文章" class="headerlink" title="写新的文章"></a>写新的文章</h1><h2 id="添加文章"><a href="#添加文章" class="headerlink" title="添加文章"></a>添加文章</h2><p>运行<code>addarticle.sh</code>脚本, 写标题 <strong>第3个文章</strong></p><p><img src="image-20220513102558031.png" alt="image-20220513102558031"></p><p>会自动弹出博客编写页面 编写<strong>第3个文章</strong></p><p><img src="image-20220513103034036.png" alt="image-20220513103034036"></p><p><img src="image-20220513103100965.png" alt="image-20220513103100965"></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-meta">---</span><br><span class="hljs-attr">title:</span> <span class="hljs-string">第3个文章</span><br><span class="hljs-attr">tags:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">linux</span><br><span class="hljs-attr">categories:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">hexo</span><br><span class="hljs-attr">date:</span> <span class="hljs-number">2022-05-13 10:26:14</span><br><span class="hljs-meta">---</span><br><span class="hljs-meta"></span><br><span class="hljs-comment"># 背景</span><br><br><span class="hljs-string">hello</span><br><br><span class="hljs-type">![image</span><span class="hljs-number">-20220513102937310</span><span class="hljs-string">](第3个文章/image-20220513102937310.png)</span><br><br><span class="hljs-string"><!--more--></span><br></code></pre></td></tr></table></figure><h2 id="发布文章"><a href="#发布文章" class="headerlink" title="发布文章"></a>发布文章</h2><p>运行push.sh脚本</p><p><img src="image-20220513102729742.png" alt="image-20220513102729742"></p><h2 id="查看网页-1"><a href="#查看网页-1" class="headerlink" title="查看网页"></a>查看网页</h2><p><img src="image-20220513104016387.png" alt="image-20220513104016387"></p><h1 id="自定义网页样式"><a href="#自定义网页样式" class="headerlink" title="自定义网页样式"></a>自定义网页样式</h1><p><a href="https://slcnx.github.io/2022/05/12/%E5%85%8D%E8%B4%B9%E6%90%9E%E7%BD%91%E7%AB%99-gitpages/#%E5%BC%80%E5%8F%91%E6%96%B9%E5%BC%8F">本地开发</a></p>]]></content>
<categories>
<category>周末直播分享</category>
</categories>
<tags>
<tag>git</tag>
<tag>linux</tag>
</tags>
</entry>
</search>