-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
503 lines (236 loc) · 57.7 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Andy's blog</title>
<subtitle>面向小白编程!</subtitle>
<link href="https://shuoandy.github.io/atom.xml" rel="self"/>
<link href="https://shuoandy.github.io/"/>
<updated>2023-08-17T16:18:13.852Z</updated>
<id>https://shuoandy.github.io/</id>
<author>
<name>Andy</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>SAST2023笔记——数据库相关</title>
<link href="https://shuoandy.github.io/2023/08/16/mysql/"/>
<id>https://shuoandy.github.io/2023/08/16/mysql/</id>
<published>2023-08-16T09:45:07.285Z</published>
<updated>2023-08-17T16:18:13.852Z</updated>
<content type="html"><![CDATA[<h2 id="mysql"><a href="#mysql" class="headerlink" title="mysql"></a>mysql</h2><p>许多代码都需要在进程外存储一些数据(比如电子系的程设作业成绩管理系统…),对于小白程序员来说最简单的方法就是把数据存入文件中,有需要的时候读取文件。但显然对文件的读写操作效率太过低下,我们需要一个兼具效率、便捷性、易用性的工具,于是数据库便闪亮登场了。关系型数据库另一个特殊的作用就是可以利用外键建立表之间的关系,让我们稍后解释。</p><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><p>首先,请运行</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo apt update</span><br><span class="line">sudo apt upgrade</span><br><span class="line">sudo apt install mysql-server</span><br></pre></td></tr></table></figure><p>来安装mysql。届时可用<code>service mysql start</code>来启动mysql。</p><h3 id="创建新用户"><a href="#创建新用户" class="headerlink" title="创建新用户"></a>创建新用户</h3><p>我们先运行<code>mysql -u root -p</code>来登录 mysql 的 root 用户,之后你应该会发现终端形如:<code>mysql> </code>。我们运行<code>CREATE USER 'admin'@'%' IDENTIFIED BY '123456';</code>来创造一个名为 admin 、密码为 123456 的用户。(请注意, mysql 需要我们打出 ‘ ; ‘ 来运行命令!)然后我们在 root 里为 admin 用户添加所有数据库的权限:<code>GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';</code>,此时即可用<code>exit;</code>退出 root 用户。(我在使用 root 用户的时候遇到了一些问题,所以推荐大家通常情况下像这样新建用户来使用数据库)在终端里再次运行<code>mysql -u admin -p</code>,然后输入密码 123456 即可用 admin 身份登录 mysql 。(或者使用<code>mysql -u admin -p123456</code>可以直接登录,但这样的话密码就直接暴露在 shell 日志中了,服务器中慎用!)此时可以运行<code>SELECT USER();</code>来查看当前用户。(值得一提, SELECT 命令基本都是显示当前的 xxx 比如当前用户、当前所在数据库等等,而 SHOW 命令基本都是显示所有的 xxx 比如所有用户,所有数据表等等)</p><h3 id="创建数据表"><a href="#创建数据表" class="headerlink" title="创建数据表"></a>创建数据表</h3><p>请注意,我们现在刚刚登入这个用户,还没有选定任何数据库,所以我们需要运行:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">CREATE DATABASE hello;</span><br><span class="line"></span><br><span class="line">USE hello;</span><br></pre></td></tr></table></figure><p>来创造一个名为 hello 的数据库并使用它,此时可以使用<code>SHOW DATABASES;</code>来查看所有数据库(里面会有一些自带的系统库)或是<code>SELECT DATABASE();</code>来查看当前数据库(这里应该会显示 hello )。</p><p>然后我们运行:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">CREATE TABLE Students (</span><br><span class="line"> id INT AUTO_INCREMENT PRIMARY KEY,</span><br><span class="line"> sid CHAR(10) NOT NULL UNIQUE,</span><br><span class="line"> name VARCHAR(255) NOT NULL,</span><br><span class="line"> major VARCHAR(255) NOT NULL</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">CREATE TABLE Courses (</span><br><span class="line"> id INT AUTO_INCREMENT PRIMARY KEY,</span><br><span class="line"> cid VARCHAR(8) NOT NULL UNIQUE,</span><br><span class="line"> title VARCHAR(255) NOT NULL,</span><br><span class="line"> credit INT NOT NULL,</span><br><span class="line"> time VARCHAR(255)</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">CREATE TABLE Association (</span><br><span class="line"> id INT AUTO_INCREMENT PRIMARY KEY,</span><br><span class="line"> student_id INT,</span><br><span class="line"> course_id INT,</span><br><span class="line"> grade CHAR(2),</span><br><span class="line"> CONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES Students(id),</span><br><span class="line"> CONSTRAINT fk_course_id FOREIGN KEY (course_id) REFERENCES Courses(id)</span><br><span class="line">);</span><br></pre></td></tr></table></figure><p>来创造一些示例数据表。请注意,数据库是数据表的集合,数据库由若干数据表组成。</p><p>让我们来依次看一下这三个数据表都有什么: Students 里面有主键id,被赋予了AUTO_INCREMENT类型,这意味着缺省值将是递增的自然数,还有sid是一个不能为NULL的、不能重复(UNIQUE)的值,其余元素不再赘述; Association 里有外键 student_id 和 course_id ,他们分别外链到了 Students 和 Courses 两张数据表中的 id 属性。这里外链的效果导致假如 Association 的某条数据的 student_id 并不是真实存在的 Students 的 id ,那么就会报错。</p><p>我们可以用<code>SHOW TABLES;</code>来查看当前数据库中的所有数据表、可以使用<code>DESC Association;</code>来查看某个数据表中的所有字段、也可以使用<code>SELECT * FROM Courses;</code>来暴力查看整张表。(虽然但是,用 vscode 的拓展插件就可以快速可视化…)</p><p>此时我们尝试一些其他的操作:比如给 Studens 添加新字段:<code>ALTER TABLE Students ADD gender VARCHAR(10);</code>、删除已有字段:<code>ALTER TABLE Students DROP COLUMN gender;</code>、修改已有字段:<code>ALTER TABLE Students MODIFY COLUMN sid CHAR(20);</code>。在有权限的时候,我们还可以删库跑路:<code>DROP TABLE Students;</code>。(慎用!!)</p><p>最后,我们可以用 INSERT命令来插入具体的每条数据。(终于到这一步了…)运行<code>INSERT INTO Courses (cid, title, credit,time) VALUES('20230002', 'English', '2','3-2');</code>即可。剩余数据请照搬此法自行添加。</p><p>最终数据库效果如图(安装了vscode的Mysql插件):<br><img src="/2023/08/16/mysql/1.png"></p><h3 id="PyMySQL"><a href="#PyMySQL" class="headerlink" title="PyMySQL"></a>PyMySQL</h3><p>仅仅在终端中使用数据库未免有些太过简陋,我们实际上也可以在 Python 中使用 MySQL 。我们可以尝试运行如下代码插入数据:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">import pymysql.cursors</span><br><span class="line"></span><br><span class="line"># Connect to the database</span><br><span class="line">connection = pymysql.connect(host='localhost', #本地连接</span><br><span class="line"> user='admin', #用户名</span><br><span class="line"> password='123456', #密码</span><br><span class="line"> database='hello', #数据库名</span><br><span class="line"> charset='utf8mb4',</span><br><span class="line"> cursorclass=pymysql.cursors.DictCursor)</span><br><span class="line"></span><br><span class="line">with connection.cursor() as cursor:</span><br><span class="line"> # Create a new record in Students table</span><br><span class="line"> sql = "INSERT INTO `Students` (`sid`, `name`, `major`,`gender`) VALUES (%s, %s, %s, %s)"</span><br><span class="line"> cursor.execute(sql, ('2023000001', 'John', 'Computer Science', 'male'))</span><br><span class="line"></span><br><span class="line"># connection is not autocommit by default. So you must commit to save</span><br><span class="line"># your changes.</span><br><span class="line">connection.commit()</span><br></pre></td></tr></table></figure><h3 id="ORM"><a href="#ORM" class="headerlink" title="ORM"></a>ORM</h3><p>据说是软工后端组用操作数据库时用到的后端框架,在实际开发中经常用…但本人没有使用过,在此就不多说了。据说语法友好,甚至不用学习Mysql的语法。</p>]]></content>
<summary type="html"><h2 id="mysql"><a href="#mysql" class="headerlink" title="mysql"></a>mysql</h2><p>许多代码都需要在进程外存储一些数据(比如电子系的程设作业成绩管理系统…),对于小白程序员来说最简单的方法就是把数据存</summary>
<category term="Codes" scheme="https://shuoandy.github.io/categories/Codes/"/>
<category term="sql" scheme="https://shuoandy.github.io/tags/sql/"/>
</entry>
<entry>
<title>SAST2023笔记——Docker相关</title>
<link href="https://shuoandy.github.io/2023/08/10/docker/"/>
<id>https://shuoandy.github.io/2023/08/10/docker/</id>
<published>2023-08-10T14:43:24.605Z</published>
<updated>2023-08-16T09:46:44.700Z</updated>
<content type="html"><![CDATA[<p>我对docker是从零入手,就让我从头讲一讲docker大概是个什么东西吧…</p><h2 id="Why"><a href="#Why" class="headerlink" title="Why"></a>Why</h2><p>几乎所有码农都有过配环境的痛苦经历…这个包下不了那个包不兼容,可能还会因为操作系统的差别有非常难解决的bug…天下苦配环境久矣,那么有没有什么解决的办法呢?最无脑(先不考虑是否可行)的办法自然是建个虚拟机,把操作系统、运行环境的所有东西全打包给用户。然而显然正常电脑都不会喜欢大几十个GB的虚拟机,于是我们尝试只虚拟<strong>软件环境</strong>,docker这个轻量级的虚拟化技术也就孕育而生:它试图将应用放在容器container上运行。一般来说容器是MB级别的,对运行很友好。</p><h2 id="What"><a href="#What" class="headerlink" title="What"></a>What</h2><p>Docker有两个重要的概念:容器container和镜像image。镜像是静态定义的,而容器是动态存在的;说人话就是镜像和容器的关系类似于类和实例的关系,我们可以利用镜像创造容器。我们需要先构建一个镜像,再以此构建容器并运行。</p><p>docker hub中有很多我们现成可用的镜像,比如scratch(空镜像),python,gcc等。docker hub可以集中存储并分发镜像,我们称这种服务为<strong>注册服务</strong>。值得一提的是,每个镜像都形如<镜像名>:<标签>,标签指版本(默认值为latest),例如alpine:latest。</p><h2 id="How"><a href="#How" class="headerlink" title="How"></a>How</h2><h3 id="docker-安装"><a href="#docker-安装" class="headerlink" title="docker 安装"></a>docker 安装</h3><p>首先,在linux系统下安装docker的命令:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" # </span><br><span class="line">curl -fsSL https://get.docker.com/ | sudo -E sh</span><br></pre></td></tr></table></figure><p>请注意,这些命令可能需要root用户的权限。由于我一直使用的就是root所以没有出什么问题;倘若不然,那么你可能需要将你的用户添加到 docker 用户组中。在此之后运行<code>docker service start</code>即可。</p><h3 id="docker-run"><a href="#docker-run" class="headerlink" title="docker run"></a>docker run</h3><p>那么让我们先试试利用现成的镜像:试试运行命令<code>docker run --name test alpine echo 'Hello, world!'</code>。该命令意为通过镜像alpine(默认标签为latest,所以其实应该是alpine:latest)构建一个名为test的容器,并运行命令<code>echo 'Hello, world!'</code>来输出Hello, world!。首先docker会试图在本地寻找alpine镜像,找不到便会去注册服务下载该镜像;然后它会根据参数–name test创造一个名为test的容器并运行命令(如果没有参数–name则会随机赋予一个没什么意义的有趣英文名字,比如laughing_hermann)。请注意,所有参数都应放在镜像名前面(比如–name test应该在alpine前面)。</p><p><strong>ps:初学者可以在vscode中下载拓展包docker,这样可以可视化本地镜像和容器</strong></p><h3 id="docker-build"><a href="#docker-build" class="headerlink" title="docker build"></a>docker build</h3><p>很好!那么让我们来试一试自行构建一个镜像,让我们创造一个名为Dockerfile的文件(跟git中类似,虽然可以修改这个神奇文件的默认名,但大家基本还是会用这个固定的文件名,不要打错),然后将下列代码粘贴进去:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">FROM alpine</span><br><span class="line"></span><br><span class="line">CMD ["echo", "Hello, world!"]</span><br></pre></td></tr></table></figure><p>然后我们运行命令<code>docker build -f <path_to_Dockerfile> -t hello:hello .</code>。该命令意为用给出路径的Dockerfile,也就是基于alpine镜像构建一个名为hello、标签为hello的镜像(如果没有参数-f那么默认在当前目录寻找Dockerfile文件),并且命令最后的 ‘ . ‘ 代表dockerfile中COPY的文件路径为当前路径(回忆linux中 ‘ . ‘ 代表当前目录,而 ‘ .. ‘ 代表上一级目录)。我们会发现此时已经成功创建hello:hello镜像。效仿上面的命令,我们再运行<code>docker run --rm hello:hello</code>来输出Hello, world!,其中–rm指的是这个容器运行完毕会立刻删除。</p><h3 id="多阶段构建"><a href="#多阶段构建" class="headerlink" title="多阶段构建"></a>多阶段构建</h3><p>很好!那么让我们来试一下真的配置c++或者python的容器。例如创建一个main.cpp并粘贴下列代码:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#include <iostream></span><br><span class="line">using std::cout, std::endl;</span><br><span class="line"></span><br><span class="line">int main() {</span><br><span class="line"> cout << "Hello, world!" << endl;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>然后在Dockerfile中写到:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">FROM gcc AS build</span><br><span class="line"></span><br><span class="line">COPY main.cpp .</span><br><span class="line"></span><br><span class="line">RUN g++ main.cpp -o main -static</span><br><span class="line"></span><br><span class="line">FROM scratch</span><br><span class="line"></span><br><span class="line">COPY --from=build main .</span><br><span class="line"></span><br><span class="line">CMD ["./main"]</span><br></pre></td></tr></table></figure><p>此时的Dockerfile会令人有些困惑:为什么既基于gcc又基于scratch来创造这个镜像?那不就乱套了吗?事实上这是“多阶段构建”,因为假如直接基于gcc构建新镜像,那么因为gcc实在是太大了,最终我们的镜像会有1个多GB…事实上我们根本不需要gcc的内容,只是想利用它预处理、编译、汇编、链接出可执行文件main而已。所以我们将gcc看作工具人,制作出main就可以丢掉了,再次利用FROM scratch将空镜像作为基础镜像即可。默认将gcc构建过程视为过程0,我们可以用<code>COPY --from=0 main .</code>来利用这个过程的文件;我们也可以像这里一样为构建过程命名为build,然后用<code>COPY --from=build main .</code>来引用。请注意,多阶段构建的基础镜像永远是最后一个FROM。</p><p>对于python文件,配置过程就肉眼可见的复杂了一些…由于解释型语言的特殊性(你说得对,我选择编译型),我们需要安装一坨东西,这里给出一个示例Dockerfile:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">FROM python</span><br><span class="line"></span><br><span class="line">WORKDIR /app</span><br><span class="line"></span><br><span class="line">COPY requirements.txt .</span><br><span class="line"></span><br><span class="line">RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt \</span><br><span class="line"> pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir uwsgi && \</span><br><span class="line"> mkdir -p config</span><br><span class="line"></span><br><span class="line">COPY . .</span><br><span class="line"></span><br><span class="line">EXPOSE 80</span><br><span class="line"></span><br><span class="line">CMD ["/bin/sh", "start.sh"]</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html"><p>我对docker是从零入手,就让我从头讲一讲docker大概是个什么东西吧…</p>
<h2 id="Why"><a href="#Why" class="headerlink" title="Why"></a>Why</h2><p>几乎所有码农都有过配环境的痛苦经历…这个</summary>
<category term="Codes" scheme="https://shuoandy.github.io/categories/Codes/"/>
<category term="docker" scheme="https://shuoandy.github.io/tags/docker/"/>
</entry>
<entry>
<title>SAST2023笔记——Linux&&Git相关</title>
<link href="https://shuoandy.github.io/2023/07/19/linux&git/"/>
<id>https://shuoandy.github.io/2023/07/19/linux&git/</id>
<published>2023-07-19T00:17:28.026Z</published>
<updated>2023-08-16T09:48:24.211Z</updated>
<content type="html"><![CDATA[<h2 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h2><ul><li><p>在Linux的根目录下有很多文件(并且他们可能需要我们手动修改!)例如etc文件夹:正如其名,这个目录的意思就是一些杂七杂八的配置文件。例如其中的etc/passwd是用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息【例如train:x:1000:1000::/home/train:/usr/bin/zsh这一行就代表了用户”train”的存在】。</p></li><li><p>如果使用的命令行shell是bash,那么修改代理的时候要用到nano ~./bashrc;如果使用的命令行shell是zsh,那么修改代理的时候要用到nano ~./zshrc,然后在这个文件的最后引入配置的http或者https端口。个人认为nano比vim要更好用一些(没有乱七八糟的神奇操作要求)。</p></li><li><p>命名中以”.”开头的Linux文件(比如”.hidden”)无法用<code>ls</code>命令看到,但是可以用<code>ls -a</code>强制看到这些隐藏文件。</p></li><li><p>linux还有很多神奇的命令…例如:(你说得对,但我选择直接问chatgpt)</p></li></ul><table><thead><tr><th align="center">Command</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center"><strong>目录相关</strong></td><td align="center"></td></tr><tr><td align="center">pwd</td><td align="center">当前目录</td></tr><tr><td align="center">cd</td><td align="center">切换目录</td></tr><tr><td align="center">ls</td><td align="center">查看目录列表</td></tr><tr><td align="center">mkdir</td><td align="center">创建目录</td></tr><tr><td align="center">find</td><td align="center">在层级目录下搜索文件</td></tr><tr><td align="center"><strong>文件相关</strong></td><td align="center"></td></tr><tr><td align="center">touch</td><td align="center">创建</td></tr><tr><td align="center">mv</td><td align="center">移动(可用于重命名)</td></tr><tr><td align="center">cp</td><td align="center">拷贝</td></tr><tr><td align="center">rm</td><td align="center">删除</td></tr><tr><td align="center">chmod</td><td align="center">更改文件权限</td></tr><tr><td align="center">chown</td><td align="center">更改文件所属</td></tr><tr><td align="center">echo</td><td align="center">输出提供的文本</td></tr><tr><td align="center">file</td><td align="center">查看文件类型</td></tr><tr><td align="center">cat</td><td align="center">将文件内容输出到标准输出</td></tr><tr><td align="center"><strong>用户和组相关</strong></td><td align="center"></td></tr><tr><td align="center">useradd</td><td align="center">创建用户</td></tr><tr><td align="center">groupadd</td><td align="center">创建组</td></tr><tr><td align="center">passwd</td><td align="center">更改密码</td></tr><tr><td align="center">chpasswd</td><td align="center">批量更改密码</td></tr><tr><td align="center">su</td><td align="center">一般用于切换用户</td></tr></tbody></table><h2 id="Git"><a href="#Git" class="headerlink" title="Git"></a>Git</h2><p>首先给大家推荐一下学习git的网站: <a href="https://learngitbranching.js.org/?locale=zh_CN">https://learngitbranching.js.org/?locale=zh_CN</a> (可能是最好的git教学网站——核心就是git branch其实只是指向版本的指针而已,并不会多占很多内存,多多益善),然后推荐大家在vscode中安装git graph来图形化git分支,体验会良好很多。</p><p>直到现在我才明白分离分支究竟是什么意思:大致来说,正常操作下我们的HEAD指针都是指向某个分支的(例如master),我们的commit 或者reset操作都会使该分支一同前进/回退。但假如强行切换到一个“野”版本(例如git checkout a4d2),那么现在就不会指向任何分支了。另外要说明的是,以后最好用git switch而不是git checkout(据说后者有可能在未来的版本被废除)、并且上文的a4d2指的是某一个版本的哈希值(一般取前四位即可定位)。</p><p>这次暑培还让我学到了一些新的实用命令,比如:</p><ul><li><code>git blame</code>:可以检查每一行代码究竟是谁最后一次提交的,这样出了bug就能知道是谁搞的了。</li><li><code>git bisect</code>:如果你的当前版本有bug,而之前有一个很久远的版本没有bug,那么使用该命令吧!该命令可以二分查找究竟是哪次commit导致了bug的出现。一开始需要用<code>git bisect start [终点][起点]</code>来查找起点和终点的中位点(并且还会贴心地直接帮你切换到这个中位点版本)。此时你需要运行当前的版本来肉眼查看该版本是否有bug。如果有,那么运行<code> git bisect bad</code>,git会直接帮你切换到起点和当前版本的中位点版本;如果没有,那么运行<code> git bisect good</code>,git会直接帮你切换到终点和当前版本的中位点版本。</li></ul>]]></content>
<summary type="html"><h2 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h2><ul>
<li><p>在Linux的根目录下有很多文件(并且他们可能需要我们手动修改!)例如etc文件夹:正如其名,这个</summary>
<category term="Codes" scheme="https://shuoandy.github.io/categories/Codes/"/>
<category term="git" scheme="https://shuoandy.github.io/tags/git/"/>
<category term="linux" scheme="https://shuoandy.github.io/tags/linux/"/>
</entry>
<entry>
<title>利用github部署博客/文档</title>
<link href="https://shuoandy.github.io/2023/07/07/github_pages/"/>
<id>https://shuoandy.github.io/2023/07/07/github_pages/</id>
<published>2023-07-07T08:10:36.557Z</published>
<updated>2023-08-16T09:46:44.697Z</updated>
<content type="html"><![CDATA[<p>今天来浅谈一下我对github.io和CICD的一些理解(不会有人上完软工还不会CICD吧.jpg)。虽然我早已用到了这些东西,但原理一直都没有试图弄懂过。<br>似乎github.io就是git page,它“可以展示你的项目及项目网站的托管工具,可以理解为免费的阿里云等服务器”。</p><h3 id="关于github-pages"><a href="#关于github-pages" class="headerlink" title="关于github pages"></a>关于github pages</h3><p>推荐大家直接去看官方文档:<a href="https://docs.github.com/zh/pages/getting-started-with-github-pages/about-github-pages">https://docs.github.com/zh/pages/getting-started-with-github-pages/about-github-pages</a> (那我还在这说个屁)。</p><p>这里摘要一些我能理解的部分:github pages的站点分为用户站点/项目站点/组织站点。</p><p>用户站点/组织站点每个用户只能有一个,这也是为什么大家都把用户站点当作博客的原因。用户站点的创造方式非常固定:仓库名必须为<code><username>.github.io</code>(比如我的就是<code>ShuoAndy.github.io</code>)。除非使用的是自定义域(就像我之前买了个九块钱的域名一样),否则用户站点的url都是<code>http(s)://<username>.github.io</code>(比如<code>https://shuoandy.github.io</code>)。购买自定义域名之后可以在settings的git pages里的Custom domain中设定。事实上即便有了自定义域,这个默认的url也可以正确访问站点。</p><p>对于项目站点,每个用户可以有很多个,仓库名也可以随便取(比如我的five_is_worth_two文档就是项目站点)。除非使用的是自定义域,否则项目站点的url都是 <code>http(s)://<username>.github.io/<repository></code>(比如<code>https://shuoandy.github.io/five_is_worth_two</code>)。【对于mkdocs来说,记得去settings的git pages将分支设置为gh-pages。】</p><br><h3 id="github-workflow(工作流)"><a href="#github-workflow(工作流)" class="headerlink" title="github workflow(工作流)"></a>github workflow(工作流)</h3><p>在github中,actions的配置文件位于<code>.github/workflows/</code>目录下(是的这个目录名是固定的,不要打错字),文件名可以随便取,但后缀名必须为<code>.yml</code>或者<code>.yaml</code>。文件具体的配置字段如下(以Andy的软工文档为例):</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">name: ci </span><br><span class="line">on:</span><br><span class="line"> push:</span><br><span class="line"> branches:</span><br><span class="line"> - main</span><br><span class="line">permissions:</span><br><span class="line"> contents: write</span><br><span class="line">jobs:</span><br><span class="line"> deploy:</span><br><span class="line"> runs-on: ubuntu-latest</span><br><span class="line"> steps:</span><br><span class="line"> - uses: actions/checkout@v3</span><br><span class="line"> - uses: actions/setup-python@v4</span><br><span class="line"> with:</span><br><span class="line"> python-version: 3.x</span><br><span class="line"> - uses: actions/cache@v2</span><br><span class="line"> with:</span><br><span class="line"> key: ${{ github.ref }}</span><br><span class="line"> path: .cache</span><br><span class="line"> - run: pip install mkdocs-material </span><br><span class="line"> - run: mkdocs gh-deploy --force</span><br></pre></td></tr></table></figure><ul><li><p>name指这个工作流的名字,缺省值是这个文件的名字。</p></li><li><p>on是指定触发workflow的条件,例如这里是当git push了main分支之后会触发一系列的工作流。【Andy一开始没注意这个字段,导致push的一直是master分支而这里写的是main分支,结果一直没有触发工作流…】</p></li><li><p>permissions是工作流对本仓库的权限,不再赘述。</p></li><li><p>jobs是工作流的所有任务,其中runs-on指定了镜像的运行系统,相当于github在云端提供了一个虚拟机,这里用到了ubuntu-latest(网上说是ubuntu-18.04或ubuntu-16.04);steps指定了这个任务的所有步骤,uses都是预定义的工作流程步骤,例如actions/checkout@v3是将代码库放置在工作流的工作目录中;run就是具体的命令了,例如安装material主题(因为它不是mkdocs自带的主题)。</p></li></ul><br>]]></content>
<summary type="html"><p>今天来浅谈一下我对github.io和CICD的一些理解(不会有人上完软工还不会CICD吧.jpg)。虽然我早已用到了这些东西,但原理一直都没有试图弄懂过。<br>似乎github.io就是git page,它“可以展示你的项目及项目网站的托管工具,可以理解为免费的阿里云等</summary>
<category term="Codes" scheme="https://shuoandy.github.io/categories/Codes/"/>
<category term="git" scheme="https://shuoandy.github.io/tags/git/"/>
</entry>
<entry>
<title>笛子的单恋史32--小张【32】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS32/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS32/</id>
<published>2023-06-29T15:36:31.640Z</published>
<updated>2023-08-10T14:53:29.998Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS32/504.jpg"><br><img src="/2023/06/29/DLS32/505.jpg"><br><img src="/2023/06/29/DLS32/506.jpg"><br><img src="/2023/06/29/DLS32/507.jpg"><br><img src="/2023/06/29/DLS32/508.jpg"><br><img src="/2023/06/29/DLS32/509.jpg"><br><img src="/2023/06/29/DLS32/510.jpg"><br><img src="/2023/06/29/DLS32/511.jpg"><br><img src="/2023/06/29/DLS32/512.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS32/504.jpg"><br><img src="/2023/06/29/DLS32/505.jpg"><br><img src="/2023/06/29/DLS32/506.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史31--小张【31】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS31/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS31/</id>
<published>2023-06-29T15:36:31.540Z</published>
<updated>2023-08-10T14:53:30.000Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS31/490.jpg"><br><img src="/2023/06/29/DLS31/491.jpg"><br><img src="/2023/06/29/DLS31/492.jpg"><br><img src="/2023/06/29/DLS31/493.jpg"><br><img src="/2023/06/29/DLS31/494.jpg"><br><img src="/2023/06/29/DLS31/495.jpg"><br><img src="/2023/06/29/DLS31/496.jpg"><br><img src="/2023/06/29/DLS31/497.jpg"><br><img src="/2023/06/29/DLS31/498.jpg"><br><img src="/2023/06/29/DLS31/499.jpg"><br><img src="/2023/06/29/DLS31/500.jpg"><br><img src="/2023/06/29/DLS31/501.jpg"><br><img src="/2023/06/29/DLS31/502.jpg"><br><img src="/2023/06/29/DLS31/503.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS31/490.jpg"><br><img src="/2023/06/29/DLS31/491.jpg"><br><img src="/2023/06/29/DLS31/492.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史30--小张【30】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS30/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS30/</id>
<published>2023-06-29T15:36:31.399Z</published>
<updated>2023-08-10T14:53:30.000Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS30/479.jpg"><br><img src="/2023/06/29/DLS30/480.jpg"><br><img src="/2023/06/29/DLS30/481.jpg"><br><img src="/2023/06/29/DLS30/482.jpg"><br><img src="/2023/06/29/DLS30/483.jpg"><br><img src="/2023/06/29/DLS30/484.jpg"><br><img src="/2023/06/29/DLS30/485.jpg"><br><img src="/2023/06/29/DLS30/486.jpg"><br><img src="/2023/06/29/DLS30/487.jpg"><br><img src="/2023/06/29/DLS30/488.jpg"><br><img src="/2023/06/29/DLS30/489.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS30/479.jpg"><br><img src="/2023/06/29/DLS30/480.jpg"><br><img src="/2023/06/29/DLS30/481.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史29--小张【29】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS29/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS29/</id>
<published>2023-06-29T15:36:31.282Z</published>
<updated>2023-08-10T14:53:30.000Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS29/465.jpg"><br><img src="/2023/06/29/DLS29/466.jpg"><br><img src="/2023/06/29/DLS29/467.jpg"><br><img src="/2023/06/29/DLS29/468.jpg"><br><img src="/2023/06/29/DLS29/469.jpg"><br><img src="/2023/06/29/DLS29/470.jpg"><br><img src="/2023/06/29/DLS29/471.jpg"><br><img src="/2023/06/29/DLS29/472.jpg"><br><img src="/2023/06/29/DLS29/473.jpg"><br><img src="/2023/06/29/DLS29/474.jpg"><br><img src="/2023/06/29/DLS29/475.jpg"><br><img src="/2023/06/29/DLS29/476.jpg"><br><img src="/2023/06/29/DLS29/477.jpg"><br><img src="/2023/06/29/DLS29/478.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS29/465.jpg"><br><img src="/2023/06/29/DLS29/466.jpg"><br><img src="/2023/06/29/DLS29/467.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史28--小张【28】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS28/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS28/</id>
<published>2023-06-29T15:36:31.144Z</published>
<updated>2023-08-10T14:53:30.004Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS28/443.jpg"><br><img src="/2023/06/29/DLS28/444.jpg"><br><img src="/2023/06/29/DLS28/445.jpg"><br><img src="/2023/06/29/DLS28/446.jpg"><br><img src="/2023/06/29/DLS28/447.jpg"><br><img src="/2023/06/29/DLS28/448.jpg"><br><img src="/2023/06/29/DLS28/449.jpg"><br><img src="/2023/06/29/DLS28/450.jpg"><br><img src="/2023/06/29/DLS28/451.jpg"><br><img src="/2023/06/29/DLS28/452.jpg"><br><img src="/2023/06/29/DLS28/453.jpg"><br><img src="/2023/06/29/DLS28/454.jpg"><br><img src="/2023/06/29/DLS28/455.jpg"><br><img src="/2023/06/29/DLS28/456.jpg"><br><img src="/2023/06/29/DLS28/457.jpg"><br><img src="/2023/06/29/DLS28/458.jpg"><br><img src="/2023/06/29/DLS28/459.jpg"><br><img src="/2023/06/29/DLS28/460.jpg"><br><img src="/2023/06/29/DLS28/461.jpg"><br><img src="/2023/06/29/DLS28/462.jpg"><br><img src="/2023/06/29/DLS28/463.jpg"><br><img src="/2023/06/29/DLS28/464.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS28/443.jpg"><br><img src="/2023/06/29/DLS28/444.jpg"><br><img src="/2023/06/29/DLS28/445.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史27--小张【27】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS27/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS27/</id>
<published>2023-06-29T15:36:30.966Z</published>
<updated>2023-08-10T14:53:30.004Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS27/423.jpg"><br><img src="/2023/06/29/DLS27/424.jpg"><br><img src="/2023/06/29/DLS27/425.jpg"><br><img src="/2023/06/29/DLS27/426.jpg"><br><img src="/2023/06/29/DLS27/427.jpg"><br><img src="/2023/06/29/DLS27/428.jpg"><br><img src="/2023/06/29/DLS27/429.jpg"><br><img src="/2023/06/29/DLS27/430.jpg"><br><img src="/2023/06/29/DLS27/431.jpg"><br><img src="/2023/06/29/DLS27/432.jpg"><br><img src="/2023/06/29/DLS27/433.jpg"><br><img src="/2023/06/29/DLS27/434.jpg"><br><img src="/2023/06/29/DLS27/435.jpg"><br><img src="/2023/06/29/DLS27/436.jpg"><br><img src="/2023/06/29/DLS27/437.jpg"><br><img src="/2023/06/29/DLS27/438.jpg"><br><img src="/2023/06/29/DLS27/439.jpg"><br><img src="/2023/06/29/DLS27/440.jpg"><br><img src="/2023/06/29/DLS27/441.jpg"><br><img src="/2023/06/29/DLS27/442.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS27/423.jpg"><br><img src="/2023/06/29/DLS27/424.jpg"><br><img src="/2023/06/29/DLS27/425.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史26--小张【26】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS26/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS26/</id>
<published>2023-06-29T15:36:30.798Z</published>
<updated>2023-08-10T14:53:30.006Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS26/408.jpg"><br><img src="/2023/06/29/DLS26/409.jpg"><br><img src="/2023/06/29/DLS26/410.jpg"><br><img src="/2023/06/29/DLS26/411.jpg"><br><img src="/2023/06/29/DLS26/412.jpg"><br><img src="/2023/06/29/DLS26/413.jpg"><br><img src="/2023/06/29/DLS26/414.jpg"><br><img src="/2023/06/29/DLS26/415.jpg"><br><img src="/2023/06/29/DLS26/416.jpg"><br><img src="/2023/06/29/DLS26/417.jpg"><br><img src="/2023/06/29/DLS26/418.jpg"><br><img src="/2023/06/29/DLS26/419.jpg"><br><img src="/2023/06/29/DLS26/420.jpg"><br><img src="/2023/06/29/DLS26/421.jpg"><br><img src="/2023/06/29/DLS26/422.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS26/408.jpg"><br><img src="/2023/06/29/DLS26/409.jpg"><br><img src="/2023/06/29/DLS26/410.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史25--小张【25】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS25/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS25/</id>
<published>2023-06-29T15:36:30.666Z</published>
<updated>2023-08-10T14:53:30.007Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS25/389.jpg"><br><img src="/2023/06/29/DLS25/390.jpg"><br><img src="/2023/06/29/DLS25/391.jpg"><br><img src="/2023/06/29/DLS25/392.jpg"><br><img src="/2023/06/29/DLS25/393.jpg"><br><img src="/2023/06/29/DLS25/394.jpg"><br><img src="/2023/06/29/DLS25/395.jpg"><br><img src="/2023/06/29/DLS25/396.jpg"><br><img src="/2023/06/29/DLS25/397.jpg"><br><img src="/2023/06/29/DLS25/398.jpg"><br><img src="/2023/06/29/DLS25/399.jpg"><br><img src="/2023/06/29/DLS25/400.jpg"><br><img src="/2023/06/29/DLS25/401.jpg"><br><img src="/2023/06/29/DLS25/402.jpg"><br><img src="/2023/06/29/DLS25/403.jpg"><br><img src="/2023/06/29/DLS25/404.jpg"><br><img src="/2023/06/29/DLS25/405.jpg"><br><img src="/2023/06/29/DLS25/406.jpg"><br><img src="/2023/06/29/DLS25/407.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS25/389.jpg"><br><img src="/2023/06/29/DLS25/390.jpg"><br><img src="/2023/06/29/DLS25/391.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史24--小张【24】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS24/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS24/</id>
<published>2023-06-29T15:36:30.476Z</published>
<updated>2023-08-10T14:53:30.007Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS24/374.jpg"><br><img src="/2023/06/29/DLS24/375.jpg"><br><img src="/2023/06/29/DLS24/376.jpg"><br><img src="/2023/06/29/DLS24/377.jpg"><br><img src="/2023/06/29/DLS24/378.jpg"><br><img src="/2023/06/29/DLS24/379.jpg"><br><img src="/2023/06/29/DLS24/380.jpg"><br><img src="/2023/06/29/DLS24/381.jpg"><br><img src="/2023/06/29/DLS24/382.jpg"><br><img src="/2023/06/29/DLS24/383.jpg"><br><img src="/2023/06/29/DLS24/384.jpg"><br><img src="/2023/06/29/DLS24/385.jpg"><br><img src="/2023/06/29/DLS24/386.jpg"><br><img src="/2023/06/29/DLS24/387.jpg"><br><img src="/2023/06/29/DLS24/388.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS24/374.jpg"><br><img src="/2023/06/29/DLS24/375.jpg"><br><img src="/2023/06/29/DLS24/376.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史23--小张【23】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS23/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS23/</id>
<published>2023-06-29T15:36:30.341Z</published>
<updated>2023-08-10T14:53:30.012Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS23/361.jpg"><br><img src="/2023/06/29/DLS23/362.jpg"><br><img src="/2023/06/29/DLS23/363.jpg"><br><img src="/2023/06/29/DLS23/364.jpg"><br><img src="/2023/06/29/DLS23/365.jpg"><br><img src="/2023/06/29/DLS23/366.jpg"><br><img src="/2023/06/29/DLS23/367.jpg"><br><img src="/2023/06/29/DLS23/368.jpg"><br><img src="/2023/06/29/DLS23/369.jpg"><br><img src="/2023/06/29/DLS23/370.jpg"><br><img src="/2023/06/29/DLS23/371.jpg"><br><img src="/2023/06/29/DLS23/372.jpg"><br><img src="/2023/06/29/DLS23/373.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS23/361.jpg"><br><img src="/2023/06/29/DLS23/362.jpg"><br><img src="/2023/06/29/DLS23/363.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史22--小张【22】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS22/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS22/</id>
<published>2023-06-29T15:36:30.222Z</published>
<updated>2023-08-10T14:53:30.012Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS22/340.jpg"><br><img src="/2023/06/29/DLS22/341.jpg"><br><img src="/2023/06/29/DLS22/342.jpg"><br><img src="/2023/06/29/DLS22/343.jpg"><br><img src="/2023/06/29/DLS22/344.jpg"><br><img src="/2023/06/29/DLS22/345.jpg"><br><img src="/2023/06/29/DLS22/346.jpg"><br><img src="/2023/06/29/DLS22/347.jpg"><br><img src="/2023/06/29/DLS22/348.jpg"><br><img src="/2023/06/29/DLS22/349.jpg"><br><img src="/2023/06/29/DLS22/350.jpg"><br><img src="/2023/06/29/DLS22/351.jpg"><br><img src="/2023/06/29/DLS22/352.jpg"><br><img src="/2023/06/29/DLS22/353.jpg"><br><img src="/2023/06/29/DLS22/354.jpg"><br><img src="/2023/06/29/DLS22/355.jpg"><br><img src="/2023/06/29/DLS22/356.jpg"><br><img src="/2023/06/29/DLS22/357.jpg"><br><img src="/2023/06/29/DLS22/358.jpg"><br><img src="/2023/06/29/DLS22/359.jpg"><br><img src="/2023/06/29/DLS22/360.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS22/340.jpg"><br><img src="/2023/06/29/DLS22/341.jpg"><br><img src="/2023/06/29/DLS22/342.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史21--小张【21】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS21/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS21/</id>
<published>2023-06-29T15:36:30.039Z</published>
<updated>2023-08-10T14:53:30.013Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS21/325.jpg"><br><img src="/2023/06/29/DLS21/326.jpg"><br><img src="/2023/06/29/DLS21/327.jpg"><br><img src="/2023/06/29/DLS21/328.jpg"><br><img src="/2023/06/29/DLS21/329.jpg"><br><img src="/2023/06/29/DLS21/330.jpg"><br><img src="/2023/06/29/DLS21/331.jpg"><br><img src="/2023/06/29/DLS21/332.jpg"><br><img src="/2023/06/29/DLS21/333.jpg"><br><img src="/2023/06/29/DLS21/334.jpg"><br><img src="/2023/06/29/DLS21/335.jpg"><br><img src="/2023/06/29/DLS21/336.jpg"><br><img src="/2023/06/29/DLS21/337.jpg"><br><img src="/2023/06/29/DLS21/338.jpg"><br><img src="/2023/06/29/DLS21/339.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS21/325.jpg"><br><img src="/2023/06/29/DLS21/326.jpg"><br><img src="/2023/06/29/DLS21/327.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史20--小张【20】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS20/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS20/</id>
<published>2023-06-29T15:36:29.914Z</published>
<updated>2023-08-10T14:53:30.013Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS20/309.jpg"><br><img src="/2023/06/29/DLS20/310.jpg"><br><img src="/2023/06/29/DLS20/311.jpg"><br><img src="/2023/06/29/DLS20/312.jpg"><br><img src="/2023/06/29/DLS20/313.jpg"><br><img src="/2023/06/29/DLS20/314.jpg"><br><img src="/2023/06/29/DLS20/315.jpg"><br><img src="/2023/06/29/DLS20/316.jpg"><br><img src="/2023/06/29/DLS20/317.jpg"><br><img src="/2023/06/29/DLS20/318.jpg"><br><img src="/2023/06/29/DLS20/319.jpg"><br><img src="/2023/06/29/DLS20/320.jpg"><br><img src="/2023/06/29/DLS20/321.jpg"><br><img src="/2023/06/29/DLS20/322.jpg"><br><img src="/2023/06/29/DLS20/323.jpg"><br><img src="/2023/06/29/DLS20/324.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS20/309.jpg"><br><img src="/2023/06/29/DLS20/310.jpg"><br><img src="/2023/06/29/DLS20/311.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史19--小张【19】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS19/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS19/</id>
<published>2023-06-29T15:36:29.784Z</published>
<updated>2023-08-10T14:53:30.013Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS19/290.jpg"><br><img src="/2023/06/29/DLS19/291.jpg"><br><img src="/2023/06/29/DLS19/292.jpg"><br><img src="/2023/06/29/DLS19/293.jpg"><br><img src="/2023/06/29/DLS19/294.jpg"><br><img src="/2023/06/29/DLS19/295.jpg"><br><img src="/2023/06/29/DLS19/296.jpg"><br><img src="/2023/06/29/DLS19/297.jpg"><br><img src="/2023/06/29/DLS19/298.jpg"><br><img src="/2023/06/29/DLS19/299.jpg"><br><img src="/2023/06/29/DLS19/300.jpg"><br><img src="/2023/06/29/DLS19/301.jpg"><br><img src="/2023/06/29/DLS19/302.jpg"><br><img src="/2023/06/29/DLS19/303.jpg"><br><img src="/2023/06/29/DLS19/304.jpg"><br><img src="/2023/06/29/DLS19/305.jpg"><br><img src="/2023/06/29/DLS19/306.jpg"><br><img src="/2023/06/29/DLS19/307.jpg"><br><img src="/2023/06/29/DLS19/308.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS19/290.jpg"><br><img src="/2023/06/29/DLS19/291.jpg"><br><img src="/2023/06/29/DLS19/292.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史18--小张【18】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS18/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS18/</id>
<published>2023-06-29T15:36:29.583Z</published>
<updated>2023-08-10T14:53:30.013Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS18/269.jpg"><br><img src="/2023/06/29/DLS18/270.jpg"><br><img src="/2023/06/29/DLS18/271.jpg"><br><img src="/2023/06/29/DLS18/272.jpg"><br><img src="/2023/06/29/DLS18/273.jpg"><br><img src="/2023/06/29/DLS18/274.jpg"><br><img src="/2023/06/29/DLS18/275.jpg"><br><img src="/2023/06/29/DLS18/276.jpg"><br><img src="/2023/06/29/DLS18/277.jpg"><br><img src="/2023/06/29/DLS18/278.jpg"><br><img src="/2023/06/29/DLS18/279.jpg"><br><img src="/2023/06/29/DLS18/280.jpg"><br><img src="/2023/06/29/DLS18/281.jpg"><br><img src="/2023/06/29/DLS18/282.jpg"><br><img src="/2023/06/29/DLS18/283.jpg"><br><img src="/2023/06/29/DLS18/284.jpg"><br><img src="/2023/06/29/DLS18/285.jpg"><br><img src="/2023/06/29/DLS18/286.jpg"><br><img src="/2023/06/29/DLS18/287.jpg"><br><img src="/2023/06/29/DLS18/288.jpg"><br><img src="/2023/06/29/DLS18/289.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS18/269.jpg"><br><img src="/2023/06/29/DLS18/270.jpg"><br><img src="/2023/06/29/DLS18/271.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
<entry>
<title>笛子的单恋史17--小张【17】</title>
<link href="https://shuoandy.github.io/2023/06/29/DLS17/"/>
<id>https://shuoandy.github.io/2023/06/29/DLS17/</id>
<published>2023-06-29T15:36:29.398Z</published>
<updated>2023-08-10T14:53:30.013Z</updated>
<content type="html"><![CDATA[<p><img src="/2023/06/29/DLS17/253.jpg"><br><img src="/2023/06/29/DLS17/254.jpg"><br><img src="/2023/06/29/DLS17/255.jpg"><br><img src="/2023/06/29/DLS17/256.jpg"><br><img src="/2023/06/29/DLS17/257.jpg"><br><img src="/2023/06/29/DLS17/258.jpg"><br><img src="/2023/06/29/DLS17/259.jpg"><br><img src="/2023/06/29/DLS17/260.jpg"><br><img src="/2023/06/29/DLS17/261.jpg"><br><img src="/2023/06/29/DLS17/262.jpg"><br><img src="/2023/06/29/DLS17/263.jpg"><br><img src="/2023/06/29/DLS17/264.jpg"><br><img src="/2023/06/29/DLS17/265.jpg"><br><img src="/2023/06/29/DLS17/266.jpg"><br><img src="/2023/06/29/DLS17/267.jpg"><br><img src="/2023/06/29/DLS17/268.jpg"></p>]]></content>
<summary type="html"><p><img src="/2023/06/29/DLS17/253.jpg"><br><img src="/2023/06/29/DLS17/254.jpg"><br><img src="/2023/06/29/DLS17/255.jpg"><br><img src="/202</summary>
<category term="Comics" scheme="https://shuoandy.github.io/categories/Comics/"/>
<category term="笛子的单恋史" scheme="https://shuoandy.github.io/tags/%E7%AC%9B%E5%AD%90%E7%9A%84%E5%8D%95%E6%81%8B%E5%8F%B2/"/>
</entry>
</feed>