-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
742 lines (513 loc) · 58.6 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#222" media="(prefers-color-scheme: dark)"><meta name="generator" content="Hexo 5.4.2">
<link rel="apple-touch-icon" sizes="180x180" href="/uploads/mario.png">
<link rel="icon" type="image/png" sizes="32x32" href="/uploads/mario.png">
<link rel="icon" type="image/png" sizes="16x16" href="/uploads/mario.png">
<link rel="mask-icon" href="/uploads/mario.png" color="#222">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" integrity="sha256-HtsXJanqjKTc8vVQjO4YMhiqFoXkfBsjBWcX91T1jr8=" crossorigin="anonymous">
<script class="next-config" data-name="main" type="application/json">{"hostname":"blog.just666.com","root":"/","images":"/images","scheme":"Gemini","darkmode":"auto","version":"8.17.1","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":{"enable":false,"style":null},"bookmark":{"enable":false,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":false,"async":false,"transition":{"menu_item":"fadeInDown","post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果:${query}","hits_time":"找到 ${hits} 个搜索结果(用时 ${time} 毫秒)","hits":"找到 ${hits} 个搜索结果"}}</script><script src="/js/config.js"></script>
<meta name="description" content="分享我的知识、经验、生活与感悟">
<meta property="og:type" content="website">
<meta property="og:title" content="Shawn's Blog">
<meta property="og:url" content="https://blog.just666.com/index.html">
<meta property="og:site_name" content="Shawn's Blog">
<meta property="og:description" content="分享我的知识、经验、生活与感悟">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="Shawn">
<meta name="twitter:card" content="summary">
<link rel="canonical" href="https://blog.just666.com/">
<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":true,"isPost":false,"lang":"zh-CN","comments":"","permalink":"","path":"index.html","title":""}</script>
<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>Shawn's Blog</title>
<noscript>
<link rel="stylesheet" href="/css/noscript.css">
</noscript>
</head>
<body itemscope itemtype="http://schema.org/WebPage">
<div class="headband"></div>
<main class="main">
<div class="column">
<header class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="site-brand-container">
<div class="site-nav-toggle">
<div class="toggle" aria-label="切换导航栏" role="button">
<span class="toggle-line"></span>
<span class="toggle-line"></span>
<span class="toggle-line"></span>
</div>
</div>
<div class="site-meta">
<a href="/" class="brand" rel="start">
<i class="logo-line"></i>
<h1 class="site-title">Shawn's Blog</h1>
<i class="logo-line"></i>
</a>
<p class="site-subtitle" itemprop="description">一个伪程序员的伪技术博客</p>
</div>
<div class="site-nav-right">
<div class="toggle popup-trigger" aria-label="搜索" role="button">
</div>
</div>
</div>
<nav class="site-nav">
<ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a></li><li class="menu-item menu-item-sitemap"><a href="/sitemap.xml" rel="section"><i class="fa fa-sitemap fa-fw"></i>站点地图</a></li>
</ul>
</nav>
</header>
<aside class="sidebar">
<div class="sidebar-inner sidebar-overview-active">
<ul class="sidebar-nav">
<li class="sidebar-nav-toc">
文章目录
</li>
<li class="sidebar-nav-overview">
站点概览
</li>
</ul>
<div class="sidebar-panel-container">
<!--noindex-->
<div class="post-toc-wrap sidebar-panel">
</div>
<!--/noindex-->
<div class="site-overview-wrap sidebar-panel">
<div class="site-author animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
<p class="site-author-name" itemprop="name">Shawn</p>
<div class="site-description" itemprop="description">分享我的知识、经验、生活与感悟</div>
</div>
<div class="site-state-wrap animated">
<nav class="site-state">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">150</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
<div class="site-state-item site-state-tags">
<a href="/tags/">
<span class="site-state-item-count">176</span>
<span class="site-state-item-name">标签</span></a>
</div>
</nav>
</div>
<div class="links-of-author animated">
<span class="links-of-author-item">
<a href="https://github.com/shawn-bluce" title="GitHub → https://github.com/shawn-bluce" rel="noopener me" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
</span>
<span class="links-of-author-item">
<a href="mailto:shawnbluce@gmail.com" title="E-Mail → mailto:shawnbluce@gmail.com" rel="noopener me" target="_blank"><i class="fa fa-envelope fa-fw"></i>E-Mail</a>
</span>
</div>
</div>
</div>
</div>
<div class="sidebar-inner sidebar-blogroll">
<div class="links-of-blogroll animated">
<div class="links-of-blogroll-title"><i class="fa fa-globe fa-fw"></i>
链接
</div>
<ul class="links-of-blogroll-list">
<li class="links-of-blogroll-item">
<a href="https://zezeshe.com/" title="https://zezeshe.com/" rel="noopener" target="_blank">Jrotty</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://www.cnblogs.com/303donatello" title="https://www.cnblogs.com/303donatello" rel="noopener" target="_blank">303Donatello</a>
</li>
<li class="links-of-blogroll-item">
<a href="http://hubojing.github.io/" title="http://hubojing.github.io/" rel="noopener" target="_blank">胡博靖</a>
</li>
<li class="links-of-blogroll-item">
<a href="http://blog.csdn.net/shouldnotappearcalm" title="http://blog.csdn.net/shouldnotappearcalm" rel="noopener" target="_blank">不应有的淡定</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://hiwannz.com/" title="https://hiwannz.com/" rel="noopener" target="_blank">见字如面</a>
</li>
</ul>
</div>
</div>
</aside>
</div>
<div class="main-inner index posts-expand">
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://blog.just666.com/2024/07/02/nas-2024/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Shawn">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Shawn's Blog">
<meta itemprop="description" content="分享我的知识、经验、生活与感悟">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content="undefined | Shawn's Blog">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2024/07/02/nas-2024/" class="post-title-link" itemprop="url">2024 年的自建 NAS 不专业不完全手册</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2024-07-02 21:48:46 / 修改时间:22:08:23" itemprop="dateCreated datePublished" datetime="2024-07-02T21:48:46+08:00">2024-07-02</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h1 id="0X00-你需要一台-NAS-吗"><a href="#0X00-你需要一台-NAS-吗" class="headerlink" title="0X00 你需要一台 NAS 吗"></a>0X00 你需要一台 NAS 吗</h1><p>不知怎么的,在移动互联网疯狂发展的今天,反而慢慢开始兴起了自建网络服务这种复古风潮。最近这些年身边的朋友同事越来越多聊到 NAS 了,甚至 B 站上出现了一小撮 NAS 区 UP 主(没错,你知道我说的是谁)。就更不说现在淘宝咸鱼上大量的 NAS 专用机箱,甚至是 3D 打印的定制化版本了。</p>
<p>你真的需要一台 NAS 吗?NAS 说白了就是一块连着网的硬盘,速度比直接插电脑上还慢一些,如果你平日里需要访问数据的设备并不多,且拥有一个台式电脑,那不如先买两块硬盘插上去。通过文件共享功能将台式机转换成一个带有存储功能的兼职 NAS。</p>
<p>如果你家里的多个手机、平板、电脑、电视都需要访问存储,或者你没有台式机可以扩容,那确实可以考虑搞一台 NAS。</p>
<p><img src="https://blog-1251664340.cos.ap-chengdu.myqcloud.com/2024/unraid-dashboard.png"></p>
<p>我自己的需求是这样的:</p>
<ul>
<li>平时喜欢摄影,每次拍摄回来的照片少则 10G 多则 50G,日积月累已经有大几百 G 了,需要备份</li>
<li>也喜欢拍一些视频,相机拍摄的码率都很高,随随便便 50G 100G 的,需要备份</li>
<li>患有仓鼠症,喜欢囤一些高清电影电视剧来看,总共搞了有差不多 8T 了</li>
<li>手机、平板、电视、电脑都需要访问上面的影视资源</li>
</ul>
<p>什么,你说你就是想要,不管需求?那就买呀,挑着贵的和好玩的买~</p>
<h1 id="0X01-我的-NAS-之路"><a href="#0X01-我的-NAS-之路" class="headerlink" title="0X01 我的 NAS 之路"></a>0X01 我的 NAS 之路</h1><p>最早的一台 NAS 是 2018 年买的 Synology DS118 性能烂到家了,也只有一个盘位,配了一块 4T 红盘,不过还是老老实实用了差不多 3 年。</p>
<p>DS118 存储告急之后打算升级 NAS,觉得自己很少用得上群晖引以为豪的软件,再加上对自己的技术实力有一捏捏🤏的信心,所以开始尝试自组 NAS。硬件选择了奔腾 G6400 + 16G 内存,第一次使用了 OMV ,觉得它对 Linux 的改动很少,所以相对来说更玩得惯。不过用了没多久还是换成了 TrueNAS Core,这套平台就稳定运行了很久。</p>
<blockquote>
<p>当时买了 8T 的 HC320,买了没几天奇亚币就上天了,我的硬盘价格也跟着上天了。时隔一周,我 899 买的硬盘店家就卖 1899 了 🤷♂️</p>
</blockquote>
<p>因为 TrueNAS Core 是基于 BSD 的系统,后来看 TrueNAS SCALE(基于 Linux 的)稳定了之后就切到了 SCALE 版本,也顺势将 G6400 升级成了 i3-10100,内存也加到了 32G。</p>
<p>升级之后的 NAS 一直稳定运行到了今年,突然有一天我觉得家里另外一台用作 homelab 的服务器开机时间太少了,然后我看着身边的一台性能「强劲」的 homelab 和一台性能「羸弱」的 NAS 陷入了沉思。沉思过后,从兜里掏出了一张「融合」:<br><img src="https://blog-1251664340.cos.ap-chengdu.myqcloud.com/2024/ronghe.png"></p>
<h1 id="0X02-有点强的硬件配置"><a href="#0X02-有点强的硬件配置" class="headerlink" title="0X02 有点强的硬件配置"></a>0X02 有点强的硬件配置</h1><p>说是融合,其实就是选用了 homelab 的 CPU内存主板和原 NAS 的机箱硬盘,大概配置如下</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Model</th>
</tr>
</thead>
<tbody><tr>
<td>CPU</td>
<td>AMD Epyc 7551P 32C64T</td>
</tr>
<tr>
<td>主板</td>
<td>SuperMicro H11SSL-i</td>
</tr>
<tr>
<td>内存</td>
<td>DDR4 16G ECC * 4</td>
</tr>
<tr>
<td>HDD</td>
<td>HC320 8T * 3</td>
</tr>
<tr>
<td>HDD</td>
<td>红盘 4T * 1</td>
</tr>
<tr>
<td>HDD</td>
<td>银河 4T * 1</td>
</tr>
<tr>
<td>SSD</td>
<td>Intel 1.6T</td>
</tr>
<tr>
<td>网卡</td>
<td>Intel 2.5G</td>
</tr>
</tbody></table>
<p><img src="https://blog-1251664340.cos.ap-chengdu.myqcloud.com/2024/unraid-configure.png"></p>
<p>试问哪个程序员不想要一台 32 核 64 线程 64G 内存 近 30T 存储容量的 NAS 呢 🤣</p>
<blockquote>
<p>配置单疑点:</p>
<ol>
<li>真有必要上这种 CPU 吗?没有,完全没有,事实上是之前 i3-10100 应付我的需求也完全没有任何问题。我只是正好有这个,卖也不怎么值钱,不如装上。</li>
<li>真有必要上 64G 内存吗?没有,完全没有,事实上之前 32G 内存 应付我的需求也完全没有任何问题。我只是…有点上头,所以上了 64G。</li>
<li>真有必要搞这么多存储吗?<del>没有,完全没有,事实上</del>🤦♂️这个还是有的,或者说因人而异,毕竟我确实要存好多照片、视频和电影电视剧。</li>
<li>听说 HC320 很拉?其实我没觉得,所谓炒豆子声确实存在一些,不过也只存在于读写的时候,但是 NAS 其实大多数时候磁盘是可以休眠的。另外我放在桌子下面使用完全不会在意,只要别放卧室就没有问题。</li>
<li>你那个 1.6T 是不是有点扎眼?这是我在咸鱼上收的二手,当时放在 homelab 上用的,现在拿过来做缓存(缓存意味着丢了也问题不大),正经自己配置缓存的话一般 250G 就妥妥够用了。</li>
</ol>
</blockquote>
<!--noindex-->
<div class="post-button">
<a class="btn" href="/2024/07/02/nas-2024/#more" rel="contents">
阅读全文 »
</a>
</div>
<!--/noindex-->
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://blog.just666.com/2024/06/19/python-faker/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Shawn">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Shawn's Blog">
<meta itemprop="description" content="分享我的知识、经验、生活与感悟">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content="undefined | Shawn's Blog">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2024/06/19/python-faker/" class="post-title-link" itemprop="url">假数据制造机:Python 中的 Faker 库</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2024-06-19 22:05:50 / 修改时间:22:07:40" itemprop="dateCreated datePublished" datetime="2024-06-19T22:05:50+08:00">2024-06-19</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h1 id="0X00-来骗,来偷袭"><a href="#0X00-来骗,来偷袭" class="headerlink" title="0X00 来骗,来偷袭"></a>0X00 来骗,来偷袭</h1><p>这次来介绍一个来骗<del>来偷袭</del>的 Python 库:Faker。我们平时经常会跟数据库、跟 csv 这些东西打交道。尤其是当你设计一个数据库表的时候,开发和测试环境中只有空荡荡一个表,没有测试数据就很尴尬。</p>
<p>Faker 就是设计来解决这种问题的,它可以快速生成各种你需要的假数据。安装和使用都非常简单:<code>pip install Faker</code> 就可以完成安装。</p>
<blockquote>
<p>这篇 mini 博客的目的是解决「不知道自己不知道」的问题,也就是说明有这么一个库可以做什么,然后介绍简单的用法;具体这个库的完整用法还是要去查看文档。</p>
</blockquote>
<p>这里给出一个简单的使用实例:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/usr/bin/env python3</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> faker <span class="keyword">import</span> Faker</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">faker = Faker(<span class="string">'zh-cn'</span>)</span><br><span class="line"></span><br><span class="line"><span class="built_in">print</span>(faker.name())</span><br><span class="line"><span class="built_in">print</span>(faker.email())</span><br><span class="line"><span class="built_in">print</span>(faker.ipv4())</span><br><span class="line"><span class="built_in">print</span>(faker.ipv4_private())</span><br><span class="line"><span class="built_in">print</span>(faker.ipv4_public())</span><br><span class="line"><span class="built_in">print</span>(faker.city_name())</span><br></pre></td></tr></table></figure>
<p>OUTPUT:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">李林</span><br><span class="line">chao83@example.com</span><br><span class="line">96.124.160.192</span><br><span class="line">192.168.72.158</span><br><span class="line">220.137.146.132</span><br><span class="line">张家港</span><br></pre></td></tr></table></figure>
<p>这里仅仅有两条需要注意的:</p>
<ol>
<li>实例化 faker 的时候记得标记语言,默认是英文信息;</li>
<li>实例化的 faker 每次调用都会生成新的假数据,只需要实例化一次即可;</li>
</ol>
<blockquote>
<p>Faker 支持生成非常非常非常多数据类型,这里就不也没必要一个个介绍出来。分享一个我自己的用法:可以用 <code>dir(faker)</code> 的方式看它究竟有多少假数据类型可用,也可以在 <code>iPython</code> 中实例化一个 <code>faker</code> 出来然后通过 <code>faker.</code> TAB 的方式进行补全,比如你输入 <code>faker.ip</code> TAB 就可以看到<code>ipv4()/ipv4_network_class()/ipv4_private()/ipve_public()/ipv6()</code>这些。</p>
</blockquote>
<p>👇下面我让 GPT 生成了一段脚本,可以看到使用 Faker 创建假数据<del>使用 AI 偷懒</del>是多么的舒爽</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/usr/bin/env python3</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> csv</span><br><span class="line"><span class="keyword">from</span> faker <span class="keyword">import</span> Faker</span><br><span class="line"></span><br><span class="line"><span class="comment"># Set up Faker with Chinese locale</span></span><br><span class="line">fake = Faker(<span class="string">'zh_CN'</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># Number of students to generate</span></span><br><span class="line">num_students = <span class="number">100</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># List to store student data</span></span><br><span class="line">students_data = []</span><br><span class="line"></span><br><span class="line"><span class="comment"># Generate data for 100 students</span></span><br><span class="line"><span class="keyword">for</span> _ <span class="keyword">in</span> <span class="built_in">range</span>(num_students):</span><br><span class="line"> student = {</span><br><span class="line"> <span class="string">"name"</span>: fake.name(),</span><br><span class="line"> <span class="string">"age"</span>: fake.random_int(<span class="built_in">min</span>=<span class="number">18</span>, <span class="built_in">max</span>=<span class="number">25</span>),</span><br><span class="line"> <span class="string">"phone_number"</span>: fake.phone_number(),</span><br><span class="line"> <span class="string">"email"</span>: fake.email(),</span><br><span class="line"> <span class="string">"address"</span>: fake.address(),</span><br><span class="line"> <span class="string">"student_id"</span>: fake.random_number(digits=<span class="number">8</span>, fix_len=<span class="literal">True</span>)</span><br><span class="line"> }</span><br><span class="line"> students_data.append(student)</span><br><span class="line"></span><br><span class="line"><span class="comment"># Define the CSV file name</span></span><br><span class="line">csv_file = <span class="string">'students_info.csv'</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Define the CSV header</span></span><br><span class="line">csv_columns = [<span class="string">"name"</span>, <span class="string">"age"</span>, <span class="string">"phone_number"</span>, <span class="string">"email"</span>, <span class="string">"address"</span>, <span class="string">"student_id"</span>]</span><br><span class="line"></span><br><span class="line"><span class="comment"># Write data to CSV file</span></span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(csv_file, mode=<span class="string">'w'</span>, newline=<span class="string">''</span>, encoding=<span class="string">'utf-8'</span>) <span class="keyword">as</span> csvfile:</span><br><span class="line"> writer = csv.DictWriter(csvfile, fieldnames=csv_columns)</span><br><span class="line"> writer.writeheader()</span><br><span class="line"> writer.writerows(students_data)</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">f'Data written to <span class="subst">{csv_file}</span> successfully.'</span>)</span><br><span class="line"><span class="keyword">except</span> IOError:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"I/O error occurred when writing to the CSV file."</span>)</span><br></pre></td></tr></table></figure>
<p>生成出来的文件如下,乍一看是不是还挺像那么回事的</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><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></pre></td><td class="code"><pre><span class="line">name,age,phone_number,email,address,student_id</span><br><span class="line">杨文,21,15651446876,xiangjing@example.net,天津市东莞县沈北新西宁街T座 528464,38652303</span><br><span class="line">任莹,20,13151815142,ming06@example.org,澳门特别行政区海门县静安谭街E座 169654,62640223</span><br><span class="line">马斌,22,15317418861,weiguiying@example.com,山西省西安市南溪海门路c座 632185,51262627</span><br><span class="line">万龙,25,18675244909,pqiao@example.org,澳门特别行政区惠州县海港陈街u座 788331,12862421</span><br><span class="line">唐莹,21,14524896623,wli@example.org,天津市马鞍山市黄浦拉萨街w座 346616,13890353</span><br><span class="line">王秀芳,24,15093668582,jie32@example.net,辽宁省佛山县魏都何街x座 791424,75220986</span><br><span class="line">李建平,21,18293878743,xiulanzhong@example.com,香港特别行政区彬市崇文北京街F座 134329,11422454</span><br><span class="line">谢丽娟,19,13242202418,pqian@example.com,新疆维吾尔自治区香港县滨城南宁路w座 529098,18889078</span><br><span class="line">薛婷,20,13807465629,zliang@example.net,北京市云市花溪刘街e座 773539,35816274</span><br><span class="line">雷丽娟,18,18165303861,yong51@example.net,湖北省济南县孝南陈街J座 484354,27706654</span><br><span class="line">朱秀兰,19,15036330967,caogang@example.com,台湾省佳县城北荆门街K座 131039,16335754</span><br><span class="line">张丽丽,24,15032876465,hanxiuying@example.org,澳门特别行政区潜江市浔阳海口路j座 179700,60603103</span><br><span class="line">赵桂兰,20,13009006486,minxie@example.com,四川省桂芝市海陵李街s座 535125,70265537</span><br><span class="line">赵春梅,24,15251434633,xiaojie@example.org,北京市南昌市朝阳嘉禾街Q座 111575,84861999</span><br><span class="line">蓝玉英,23,15006072574,xiuyingbai@example.net,辽宁省齐齐哈尔市东丽张路X座 952846,59067909</span><br><span class="line">马超,22,15023489681,ishen@example.net,山东省广州市永川任路I座 246768,57163888</span><br><span class="line">冯丽丽,19,18941560722,suyong@example.org,重庆市辉县怀柔大冶街n座 651829,48840449</span><br><span class="line">张辉,22,15525627747,edu@example.org,内蒙古自治区南京市翔安林路Y座 828410,27849301</span><br><span class="line">龙帅,20,13044861787,gangchen@example.com,福建省波县城北辽阳街B座 699463,93809855</span><br><span class="line">王秀兰,23,15123952816,liyao@example.com,重庆市海燕市永川李路U座 589932,40837105</span><br><span class="line">何秀云,22,13389508938,guojuan@example.org,宁夏回族自治区坤市华龙长沙街A座 448755,16331208</span><br><span class="line">郑建,21,14773507926,na97@example.org,湖北省北镇市牧野邯郸街Q座 441383,52901105</span><br><span class="line">黄桂香,20,15983226045,xia34@example.org,江西省长沙县西峰郑街v座 555389,38532397</span><br><span class="line">雷桂花,21,15779091442,fli@example.org,青海省重庆县魏都金路r座 438666,25582281</span><br><span class="line">洪伟,24,15034551309,bhu@example.org,甘肃省淑华市长寿沈阳街D座 781857,51371004</span><br><span class="line">侯秀荣,20,15658144733,mindeng@example.org,河南省拉萨市兴山周路q座 690193,34181753</span><br><span class="line">霍丽娟,23,14755592995,tianjie@example.org,湖北省沈阳市怀柔香港街E座 798600,59323935</span><br><span class="line">李晶,21,14789714084,luomin@example.net,湖南省北京县牧野吴街m座 527079,20443595</span><br><span class="line">何莹,20,15371237169,mwang@example.com,云南省北镇市涪城东莞路m座 835686,31431046</span><br><span class="line">冯小红,20,13929478423,na46@example.net,安徽省春梅市华龙合山路x座 783485,42282144</span><br><span class="line">王婷婷,25,18953524230,jieduan@example.net,江西省芳市城东马鞍山街H座 846377,89518293</span><br><span class="line">萧秀荣,21,15764734584,uzhang@example.com,河南省嘉禾县普陀杨路m座 946236,60617348</span><br><span class="line">卫利,22,13443120525,dujuan@example.com,宁夏回族自治区拉萨市兴山汤路U座 430226,19339491</span><br><span class="line">陈凤兰,23,15701289189,xduan@example.com,吉林省永安市吉区陈街s座 321158,51780743</span><br><span class="line">吴琳,18,14529375646,juanjia@example.com,陕西省佳县新城刘路H座 759718,89498195</span><br><span class="line">叶波,24,18061561625,xialin@example.net,西藏自治区丽丽县友好潜江街s座 970715,75555133</span><br><span class="line">赵建国,19,15825328065,yan22@example.org,青海省武汉市南长澳门路t座 428291,85520541</span><br><span class="line">刘瑞,24,15266286662,wei75@example.com,甘肃省平县翔安潮州路E座 566121,33484433</span><br><span class="line">李阳,18,15814354022,ohuang@example.com,陕西省艳市兴山柳州路W座 810774,77096319</span><br><span class="line">乔志强,22,15310103951,tao51@example.com,澳门特别行政区林市锡山丁路X座 168869,12169760</span><br><span class="line">吴想,22,13234314473,gang25@example.com,北京市海口县沙市宋街m座 592337,54436277</span><br><span class="line">潘婷婷,22,18978526383,dliao@example.net,台湾省东莞县丰都胡街J座 709057,91807647</span><br><span class="line">姚婷,21,18956219835,yuanjuan@example.com,香港特别行政区斌县孝南张街O座 130247,12811809</span><br><span class="line">汪峰,22,13315098113,ufan@example.net,河北省建平市沈北新济南路m座 170271,49070156</span><br><span class="line">李丹,23,13476665953,xiuyingxie@example.org,辽宁省大冶市吉区海门路J座 372191,70769981</span><br><span class="line">刘辉,18,15140639015,yanfeng@example.net,湖南省香港县合川尹路C座 922526,19022713</span><br><span class="line">赵雷,21,13090100149,chaoqian@example.net,北京市春梅县静安袁路W座 362649,43043458</span><br><span class="line">胡莉,25,18974156576,wangang@example.org,江苏省彬县沙市蒋街H座 208132,25741533</span><br><span class="line">冯欢,24,14777889865,yong75@example.org,陕西省太原县东城何街T座 632289,17757971</span><br><span class="line">萧楠,18,14520094716,hzhu@example.org,天津市秀兰县翔安刘街E座 388636,12886631</span><br><span class="line">万建平,19,15915290360,weima@example.org,新疆维吾尔自治区秀芳市城北贵阳路f座 220049,48199977</span><br><span class="line">张杨,24,15633549143,xia00@example.org,贵州省马鞍山市浔阳曹路b座 183259,86763091</span><br><span class="line">王伟,25,18102638719,pingzhou@example.com,云南省娟县高明太原路b座 241294,47232715</span><br><span class="line">孙桂荣,24,13214329937,dingchao@example.com,浙江省柳州县上街贾路g座 637845,57010965</span><br><span class="line">胡艳,25,14551404458,fengxiulan@example.net,宁夏回族自治区秀芳县朝阳辛集街Y座 373194,99124759</span><br><span class="line">陈桂兰,22,15705819325,ama@example.com,宁夏回族自治区雷市锡山拉萨街T座 109340,60143910</span><br><span class="line">傅帅,18,13037296868,xiuying11@example.net,山东省勇县浔阳西安街B座 734661,81970997</span><br><span class="line">张斌,25,15919070157,mingmeng@example.net,四川省斌县翔安徐街P座 873821,45687729</span><br><span class="line">吕军,21,15004718726,renjie@example.org,贵州省武汉县淄川郑州街c座 878856,95639249</span><br><span class="line">刘建平,18,15325768175,pcao@example.net,湖南省潮州县魏都永安街C座 573040,90720683</span><br><span class="line">汪桂芝,24,13320503412,zhan@example.com,黑龙江省长沙县白云武汉路D座 459772,65769168</span><br><span class="line">罗玲,24,18084432364,axiong@example.com,海南省张家港市海陵羊路N座 678692,53135397</span><br><span class="line">郝玉华,25,15038955596,shiyan@example.com,贵州省丽娟市沙市邱街j座 419562,95848846</span><br><span class="line">庞玉英,22,13728364375,ping58@example.net,新疆维吾尔自治区彬市高明王街d座 648000,64832283</span><br><span class="line">谢刚,20,13006216710,maoli@example.org,宁夏回族自治区武汉市静安高街N座 984048,66413173</span><br><span class="line">黄秀梅,24,18219872373,zengguiying@example.com,河南省淑珍市白云哈尔滨路R座 365763,90582516</span><br><span class="line">牟华,22,13473653213,gang06@example.net,四川省张家港市海陵张路W座 759909,96673716</span><br><span class="line">王玉英,20,13267038755,guiyingqiu@example.net,西藏自治区沈阳县牧野拉萨路c座 477448,11364274</span><br><span class="line">王玲,24,13609736441,exiang@example.org,香港特别行政区桂英市涪城姚街p座 415052,30258177</span><br><span class="line">邢桂兰,25,13104159794,taogao@example.net,宁夏回族自治区柳州县龙潭刘路H座 233088,29134578</span><br><span class="line">张亮,19,13946106449,bjiang@example.com,云南省辛集市清河李街i座 135971,78324297</span><br><span class="line">胡秀芳,23,18713925682,tmao@example.net,宁夏回族自治区马鞍山县牧野吴路y座 268410,96802279</span><br><span class="line">李洁,19,18765278454,xiangfang@example.com,福建省台北市长寿汕尾路o座 347366,85574490</span><br><span class="line">蒋兵,24,13400202150,chao51@example.org,台湾省关岭市新城辽阳街B座 241442,90031700</span><br><span class="line">张利,24,18090151698,qinyang@example.org,海南省重庆县清城辛集街P座 162853,15567649</span><br><span class="line">柳瑜,23,15575643433,na47@example.org,西藏自治区合肥县江北黄街Z座 356756,48715558</span><br><span class="line">袁建军,21,15243210479,songxia@example.org,山东省欣市花溪赵街L座 841242,51808908</span><br><span class="line">王秀英,24,13353152189,syang@example.org,内蒙古自治区明市永川海门街N座 900031,11089589</span><br><span class="line">徐峰,20,13931311017,pengyang@example.net,辽宁省合肥县友好林路v座 702291,39487119</span><br><span class="line">傅建军,25,15568950307,leijuan@example.com,云南省晶市闵行李街w座 387061,58657816</span><br><span class="line">温英,23,13600204215,gongli@example.net,云南省长沙县大兴重庆路A座 172765,79112040</span><br><span class="line">王浩,24,18878254393,panyan@example.org,上海市亮市魏都孙路z座 173852,89935907</span><br><span class="line">苏婷婷,25,15768731314,hdeng@example.org,湖南省博市高港台北路H座 384664,86207148</span><br><span class="line">张晨,25,14574088802,chaoma@example.com,西藏自治区哈尔滨市大东任路T座 331900,36313643</span><br><span class="line">朱鑫,25,14786084196,nazhong@example.net,内蒙古自治区文县秀英王路x座 316251,43000433</span><br><span class="line">葛宁,21,13628124785,fyin@example.com,天津市涛市合川巢湖路I座 258119,13636102</span><br><span class="line">欧建华,22,13474462477,gkang@example.net,黑龙江省梅市吉区李路Q座 346143,40699001</span><br><span class="line">周淑英,22,15394468081,ming17@example.com,黑龙江省兴城县兴山张街x座 692324,66822153</span><br><span class="line">樊凯,18,15961375610,rhu@example.com,江西省太原市合川澳门路S座 134314,47105810</span><br><span class="line">杨莉,24,14535546194,li91@example.net,辽宁省旭县东城姚街U座 534685,47600036</span><br><span class="line">宫玉珍,22,13536666673,xiaqiang@example.org,吉林省太原县山亭罗路g座 409209,61974123</span><br><span class="line">顾鹏,25,18199286199,kongping@example.com,陕西省宁市浔阳贵阳路n座 403156,29450095</span><br><span class="line">井芳,18,18600909935,azhu@example.com,江苏省嘉禾市清河张路g座 619941,69174743</span><br><span class="line">宋玉华,20,18932355002,yjia@example.org,青海省澳门市海港程路U座 652351,57624414</span><br><span class="line">张建平,22,18155187736,wangming@example.com,湖南省莉市淄川呼和浩特路A座 964393,80044659</span><br><span class="line">姜斌,24,18803574186,tao82@example.org,山西省辛集市东城胡路v座 119458,25854974</span><br><span class="line">陈颖,23,14517412603,luowei@example.org,云南省建华市魏都徐街D座 571366,43305147</span><br><span class="line">李海燕,22,15193868140,yangzhao@example.org,湖北省石家庄市丰都台北路T座 551877,56451677</span><br><span class="line">李桂荣,20,15616840094,taoguo@example.com,上海市拉萨市大东叶街d座 577821,31959883</span><br><span class="line">张婷婷,22,13166077906,li41@example.com,西藏自治区永安市永川范路i座 943614,66647808</span><br></pre></td></tr></table></figure>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://blog.just666.com/2024/03/21/linux-text-processer/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Shawn">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Shawn's Blog">
<meta itemprop="description" content="分享我的知识、经验、生活与感悟">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content="undefined | Shawn's Blog">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2024/03/21/linux-text-processer/" class="post-title-link" itemprop="url">Linux 文本三剑客 Grep/awk/sed 入门手册</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2024-03-21 21:29:31 / 修改时间:21:30:24" itemprop="dateCreated datePublished" datetime="2024-03-21T21:29:31+08:00">2024-03-21</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h1 id="0X00-前言"><a href="#0X00-前言" class="headerlink" title="0X00 前言"></a>0X00 前言</h1><p>不知道为什么,当三个好用的工具在一起的时候就会被称作:三剑客;四个好用的工具在一起的时候就会被叫做四大天王 🤔。</p>
<p>算了,这不重要。</p>
<p>这篇文章的目的是带不了解这三个工具的朋友们简单上手使用它们,默认各位是掌握了 Linux 的基本用法的,其中也会出现有关正则的内容。如果你不懂正则的话建议跳过正则的部分,并且看完这篇文章马上就去学。另外,不要因为正则看起来有点像通配符就按通配符的操作进行下去。</p>
<!--noindex-->
<div class="post-button">
<a class="btn" href="/2024/03/21/linux-text-processer/#more" rel="contents">
阅读全文 »
</a>
</div>
<!--/noindex-->
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://blog.just666.com/2024/02/22/iptables-4-newer/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Shawn">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Shawn's Blog">
<meta itemprop="description" content="分享我的知识、经验、生活与感悟">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content="undefined | Shawn's Blog">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2024/02/22/iptables-4-newer/" class="post-title-link" itemprop="url">写给新手的 Iptables 使用说明</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2024-02-22 21:08:16" itemprop="dateCreated datePublished" datetime="2024-02-22T21:08:16+08:00">2024-02-22</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2024-02-26 20:38:02" itemprop="dateModified" datetime="2024-02-26T20:38:02+08:00">2024-02-26</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h1 id="0X00-基础知识"><a href="#0X00-基础知识" class="headerlink" title="0X00 基础知识"></a>0X00 基础知识</h1><p>常用 Linux 的各位估计都知道 <code>iptables</code>、<code>firewalld</code> 和 <code>ufw</code> 这三个工具吧,或者还知道 <code>netfilter</code> 这个内核组件。但是他们究竟是什么关系呢?从关系上来讲,可以将他们分成三层:最底层是 Linux 的安全框架 netfilter,上面是用来操作 netfilter 的 iptables,再上层是 firewalld 和 ufw。</p>
<p><img src="https://blog-1251664340.cos.ap-chengdu.myqcloud.com/2024/firewall.drawio.png"></p>
<p>其中 firewalld 一般会默认安装在 RHEL 和 CentOS 中,ufw 会默认安装在 Debian 和 Ubuntu 中。不过由于很多人还是习惯直接操作 iptables 所以这次的重点就是它了。很多人会说 iptables 是防火墙,这其实并不严谨,它的标准定义应该叫做 Packet Filter 也就是包过滤工具。而且事实上也是如此,它不仅能够实现防火墙的限制流量功能,还能提供 NAT 转发的能力。</p>
<p>iptables 内部总共拥有 4 张表(table),又有多个链(chain),如下图所示。</p>
<p><img src="https://blog-1251664340.cos.ap-chengdu.myqcloud.com/2024/iptables_table.drawio.png"></p>
<p>既然是「写给新手的 iptables 使用说明」,自然是挑选最重要的一部分来介绍的,也就是 nat 和 filter 两张表。其中 filter 表应该是我们接触最多的表,它用于决定一个数据包的「命运」,比如你想将某些数据包拦截在外,或者堵住前往某地址的出口就可以用它实现。在使用 iptables 命令时不手动指定表的话就是在操作 filter 表。另一个 nat 表顾名思义就是用来配置 NAT(网络地址转换)的了。</p>
<blockquote>
<p>需要注意,严格来说本次只说明 <code>iptables</code> 和与之强相关的命令,也就是说<strong>只涉及 IPV4 的配置</strong>。如果需要配置 IPV6 的规则,则需要使用 <code>ip6tables</code> 命令,虽说两个命令大差不差,但是这里还是以 IPV4 为主,也只考虑纯 IPV4 环境。</p>
</blockquote>
<p>在开始使用命令之前,先要给出一张图作为前置知识:注意看这张图(略复杂,不过前期看不明白也不影响基本的使用)。可以看到其实流量不是从一个表一个表走下去的,而是按照链的顺序在前进,并且不同的流量会走的路径也不完全一致。<br><img src="https://blog-1251664340.cos.ap-chengdu.myqcloud.com/2024%2FNetfilter-packet-flow.svg"></p>
<p>另外再给出一些常用的命令,用来辅助后面的实验。</p>
<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><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"><span class="meta">#</span><span class="bash"> 查看 filter 表的所有规则(因为没指定表,所以是默认的 filter 表)</span></span><br><span class="line">iptables -L</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span><span class="bash"> 查看 nat 表的所有规则</span></span><br><span class="line">iptables -t nat -L</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span><span class="bash"> 删除 filter 表的所有规则</span></span><br><span class="line">iptables -F</span><br><span class="line"></span><br><span class="line"><span class="meta">#</span><span class="bash"> 删除 nat 表的所有规则</span></span><br><span class="line">iptables -t nat -F</span><br></pre></td></tr></table></figure>
<blockquote>
<p>实验环境:</p>
<p>毕竟实践出真知,建议搞一台最好两台在同一网段的虚拟机进行试验。</p>
</blockquote>
<p><strong>注意</strong>,接下来两个章节的的命令都是<strong>临时生效</strong>的,所以如果玩砸了可以直接 <code>iptables -t nat/filter -F</code> 清空规则,或者重启虚拟机从头来过。具体如何将规则写入配置中使其持久化,可以查看章节 0X03 的内容。</p>
<!--noindex-->
<div class="post-button">
<a class="btn" href="/2024/02/22/iptables-4-newer/#more" rel="contents">
阅读全文 »
</a>
</div>
<!--/noindex-->
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://blog.just666.com/2024/02/04/whats-encrypt/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Shawn">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Shawn's Blog">
<meta itemprop="description" content="分享我的知识、经验、生活与感悟">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content="undefined | Shawn's Blog">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2024/02/04/whats-encrypt/" class="post-title-link" itemprop="url">究竟什么是加密</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2024-02-04 20:48:32 / 修改时间:20:50:06" itemprop="dateCreated datePublished" datetime="2024-02-04T20:48:32+08:00">2024-02-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h1 id="0X00-什么不是加密"><a href="#0X00-什么不是加密" class="headerlink" title="0X00 什么不是加密"></a>0X00 什么不是加密</h1><p>首先要先明确一个问题:我们日常使用非常多的 md5、SHA-1、SHA-256 这些 <strong>通通都不是加密</strong>,这些叫做<strong>摘要算法</strong>。一串明文经过加密算法加密之后,是可以再次解密成明文的,但是摘要算法就不行了。</p>
<p>拿最常见的摘要算法 md5 举例:针对任何一个合法输入,md5 都会给出一个固定长度为 128 bit(32 byte)的输出,例如 <code>md5("hello, world") -> e4d7f1b4ed2e42d15898f4b27b019da4</code>。准确来说你是不能通过后面这串摘要值来反推之前的原文是什么的。因为严格来说这一串摘要值可以对应无限个不同的原文。那么摘要算法一般是拿来做什么用的呢?比较常见的是用来校验数据一致性,比如鸡太美同学编写了一个程序放到网上给大家下载使用,但是我们都知道文件传输过程中理论上可能会出错,所以他在上传之前就计算了程序的 md5 并且在传到服务器上之后再次计算 md5。如果两次计算的摘要值都是正确的,那就可以证明此次数据传输没有出现错误。接下来他把摘要值贴在了下载地址旁边,每个来下载程序的人也都可以在下载之后计算摘要值以保证下载没有出错。</p>
<p>其实不只是防止文件传输出错,还能增加一定的安全性,比如在文件被偷换之后,可以通过计算摘要值来确定文件是不是自己想要的那个。</p>
<blockquote>
<p>摘要算法既然是对任意输入都输出一个固定长度的摘要值,那么自然就会出现「撞车」事故。换句话说就是:不同的输入内容得到了相同的摘要值。具体的可以去搜索md5碰撞来查看相关资料。</p>
</blockquote>
<p>更离谱的是 BASE64,它只是<strong>编码</strong>,对编码稍稍了解且有一定敏感程度的人一眼就能看出一段文本是经过 BASE64 编码的。如果你拿它「加密」的话,别人一秒钟不到就「破解」了 🤣</p>
<p>为什么说 BASE64 编码稍稍敏感一点的人就能看出来呢?因为 BASE64 编码过后,生成的内容是 26 个小写字母 + 26 个大写字母 + 10 个数字 + 加号 + 斜杠,总共是 64 个字符,所以被称为 BASE64。如果一大串文本全都是由混在一起的数字字母加号斜杠组成,尤其最后又追加了一两个等号的情况,那可以 99% 认为它是经过 BASE64 编码的了。</p>
<p>比如下面这段文字,真的很难看不出来:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">aGVsbG8sIHdvcmxkIQ==</span><br></pre></td></tr></table></figure>
<!--noindex-->
<div class="post-button">
<a class="btn" href="/2024/02/04/whats-encrypt/#more" rel="contents">
阅读全文 »
</a>
</div>
<!--/noindex-->
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<nav class="pagination">
<span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><span class="space">…</span><a class="page-number" href="/page/30/">30</a><a class="extend next" rel="next" title="下一页" aria-label="下一页" href="/page/2/"><i class="fa fa-angle-right"></i></a>
</nav>
</div>
</main>
<footer class="footer">
<div class="footer-inner">
<div class="copyright">
©
<span itemprop="copyrightYear">2024</span>
<span class="with-love">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">Shawn</span>
</div>
<div class="powered-by">由 <a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/" rel="noopener" target="_blank">NexT.Gemini</a> 强力驱动
</div>
</div>
</footer>
<div class="back-to-top" role="button" aria-label="返回顶部">
<i class="fa fa-arrow-up fa-lg"></i>
<span>0%</span>
</div>
<a href="https://github.com/shawn-bluce" class="github-corner" title="在 GitHub 上关注我" aria-label="在 GitHub 上关注我" rel="noopener" target="_blank"><svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a>
<noscript>
<div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script>
<script src="/js/comments.js"></script><script src="/js/utils.js"></script><script src="/js/next-boot.js"></script>
</body>
</html>