-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
115 lines (115 loc) · 57.2 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
<!doctype html><html itemscope itemtype=http://schema.org/WebPage lang=zh-CN><head><meta name=generator content="Hugo 0.144.2"><meta name=theme content='FixIt v0.3.16-f66dc32e'><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=2"><meta name=robots content="noodp"><title>LEON BLOG</title><meta name=author content="Leon">
<meta name=description content="运维小站,分享些技术经验。"><meta name=keywords content='Hugo,FixIt'><meta itemprop=name content="LEON BLOG"><meta itemprop=description content="运维小站,分享些技术经验。"><meta itemprop=datePublished content="2025-01-07T19:07:33+08:00"><meta itemprop=dateModified content="2025-01-07T19:07:33+08:00"><meta itemprop=image content="https://liangml.github.io/logo.png"><meta property="og:url" content="https://liangml.github.io/"><meta property="og:site_name" content="LEON BLOG"><meta property="og:title" content="LEON BLOG"><meta property="og:description" content="运维小站,分享些技术经验。"><meta property="og:locale" content="zh_CN"><meta property="og:type" content="website"><meta property="og:image" content="https://liangml.github.io/logo.png"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://liangml.github.io/logo.png"><meta name=twitter:title content="LEON BLOG"><meta name=twitter:description content="运维小站,分享些技术经验。"><meta name=application-name content="Leon的小站"><meta name=apple-mobile-web-app-title content="Leon的小站"><meta name=theme-color data-light=#f8f8f8 data-dark=#252627 content="#f8f8f8"><meta name=msapplication-TileColor content="#da532c"><link rel=icon href=/favicon.svg><link rel=apple-touch-icon sizes=180x180 href=/apple-touch-icon.png><link rel=mask-icon href=/safari-pinned-tab.svg color=#5bbad5><link rel=manifest href=/site.webmanifest><link rel=canonical type=text/html href=https://liangml.github.io/ title="LEON BLOG"><link rel=alternate type=application/rss+xml href=https://liangml.github.io/index.xml title="LEON BLOG"><link rel=search type=application/json href=https://liangml.github.io/search.json title="LEON BLOG"><link rel=stylesheet href=/css/style.min.999fc44987aa81959766023190aed3b84fc2e373f70cb60d0bf85ba5d7d93d79.css integrity="sha256-mZ/ESYeqgZWXZgIxkK7TuE/C43P3DLYNC/hbpdfZPXk="><link rel=preload href=/lib/fontawesome-free/all.min.320d572dfb844e7152480b7b62374236c4896ccca3ac9d69bb03f3bc2034acb8.css integrity="sha256-Mg1XLfuETnFSSAt7YjdCNsSJbMyjrJ1puwPzvCA0rLg=" as=style onload='this.removeAttribute("onload"),this.rel="stylesheet"'><noscript><link rel=stylesheet href=/lib/fontawesome-free/all.min.320d572dfb844e7152480b7b62374236c4896ccca3ac9d69bb03f3bc2034acb8.css integrity="sha256-Mg1XLfuETnFSSAt7YjdCNsSJbMyjrJ1puwPzvCA0rLg="></noscript><link rel=preload href=/lib/animate/animate.min.5fbaeb9f8e25d7e0143bae61d4b1802c16ce7390b96ceb2d498b0d96ff4c853f.css integrity="sha256-X7rrn44l1+AUO65h1LGALBbOc5C5bOstSYsNlv9MhT8=" as=style onload='this.removeAttribute("onload"),this.rel="stylesheet"'><noscript><link rel=stylesheet href=/lib/animate/animate.min.5fbaeb9f8e25d7e0143bae61d4b1802c16ce7390b96ceb2d498b0d96ff4c853f.css integrity="sha256-X7rrn44l1+AUO65h1LGALBbOc5C5bOstSYsNlv9MhT8="></noscript><script type=application/ld+json>{"@context":"http://schema.org","@type":"WebSite","url":"https:\/\/liangml.github.io\/","inLanguage":"zh-CN","author":{"@type":"Person","name":"Leon"},"description":"运维小站,分享些技术经验。","image":"https:\/\/liangml.github.io\/favicon.ico","thumbnailUrl":"https:\/\/liangml.github.io\/favicon-32x32.png","name":"LEON BLOG"}</script><script src=/js/head/color-scheme.min.15fc6d693c4ea1331dfdbe98e8c76402340195b0a3b4047378cec39b7c827bfa.js integrity="sha256-FfxtaTxOoTMd/b6Y6MdkAjQBlbCjtARzeM7Dm3yCe/o="></script></head><body data-header-desktop=sticky data-header-mobile=auto><div class=wrapper data-page-style=normal><header class="desktop animate__faster" id=header-desktop><div class=header-wrapper data-github-corner=right><div class=header-title><a href=/ title="LEON BLOG"><img loading=lazy src=/logo.png alt="LEON BLOG" data-title="LEON BLOG" width=26 height=26 class=logo style="background:url(/images/loading.min.svg)no-repeat 50%" onload='this.title=this.dataset.title;for(const e of["style","data-title","onerror","onload"])this.removeAttribute(e);this.dataset.lazyloaded=""' onerror='this.title=this.dataset.title;for(const e of["style","data-title","onerror","onload"])this.removeAttribute(e)'><span class=header-title-text>Kylin Blog</span></a><span class=header-subtitle></span></div><nav><ul class=menu><li class="menu-item has-children"><a class=menu-link href=/archives/><i class="fa-solid fa-feather fa-fw fa-sm" aria-hidden=true></i> 文章</a><i class="dropdown-icon fa-solid fa-chevron-down" aria-hidden=true></i><ul class=sub-menu><li class=menu-item><a class=menu-link href=/categories/><i class="fa-solid fa-folder-tree fa-fw fa-sm" aria-hidden=true></i> 分类</a></li><li class=menu-item><a class=menu-link href=/collections/><i class="fa-solid fa-layer-group fa-fw fa-sm" aria-hidden=true></i> 合集</a></li><li class=menu-item><a class=menu-link href=/tags/><i class="fa-solid fa-tags fa-fw fa-sm" aria-hidden=true></i> 标签</a></li></ul></li><li class="menu-item delimiter"></li><li class="menu-item search" id=search-desktop><input type=text placeholder=搜索文章标题或内容…… id=search-input-desktop>
<a href=javascript:void(0); class="search-button search-toggle" id=search-toggle-desktop title=搜索><i class="fa-solid fa-search fa-fw" aria-hidden=true></i>
</a><a href=javascript:void(0); class="search-button search-clear" id=search-clear-desktop title=清空><i class="fa-solid fa-times-circle fa-fw" aria-hidden=true></i>
</a><span class="search-button search-loading" id=search-loading-desktop><i class="fa-solid fa-spinner fa-fw fa-spin" aria-hidden=true></i></span></li><li class="menu-item theme-switch" title=切换主题><i class="fa-solid fa-adjust fa-fw" aria-hidden=true></i></li></ul></nav></div></header><header class="mobile animate__faster" id=header-mobile><div class=header-container><div class=header-wrapper><div class=header-title><a href=/ title="LEON BLOG"><img loading=lazy src=/logo.png alt="LEON BLOG" data-title="LEON BLOG" width=26 height=26 class=logo style="background:url(/images/loading.min.svg)no-repeat 50%" onload='this.title=this.dataset.title;for(const e of["style","data-title","onerror","onload"])this.removeAttribute(e);this.dataset.lazyloaded=""' onerror='this.title=this.dataset.title;for(const e of["style","data-title","onerror","onload"])this.removeAttribute(e)'><span class=header-title-text>Kylin Blog</span></a><span class=header-subtitle></span></div><div class=menu-toggle id=menu-toggle-mobile><span></span><span></span><span></span></div></div><nav><ul class=menu id=menu-mobile><li class=search-wrapper><div class="search mobile" id=search-mobile><input type=text placeholder=搜索文章标题或内容…… id=search-input-mobile>
<a href=javascript:void(0); class="search-button search-toggle" id=search-toggle-mobile title=搜索><i class="fa-solid fa-search fa-fw" aria-hidden=true></i>
</a><a href=javascript:void(0); class="search-button search-clear" id=search-clear-mobile title=清空><i class="fa-solid fa-times-circle fa-fw" aria-hidden=true></i>
</a><span class="search-button search-loading" id=search-loading-mobile><i class="fa-solid fa-spinner fa-fw fa-spin" aria-hidden=true></i></span></div><a href=javascript:void(0); class=search-cancel id=search-cancel-mobile>取消</a></li><li class=menu-item><span class=nested-item><a class=menu-link href=/archives/><i class="fa-solid fa-feather fa-fw fa-sm" aria-hidden=true></i> 文章</a>
<i class="dropdown-icon fa-solid fa-chevron-right" aria-hidden=true></i></span><ul class=sub-menu><li class=menu-item><a class=menu-link href=/categories/><i class="fa-solid fa-folder-tree fa-fw fa-sm" aria-hidden=true></i> 分类</a></li><li class=menu-item><a class=menu-link href=/collections/><i class="fa-solid fa-layer-group fa-fw fa-sm" aria-hidden=true></i> 合集</a></li><li class=menu-item><a class=menu-link href=/tags/><i class="fa-solid fa-tags fa-fw fa-sm" aria-hidden=true></i> 标签</a></li></ul></li><li class="menu-item menu-system"><span class="menu-system-item theme-switch" title=切换主题><i class="fa-solid fa-adjust fa-fw" aria-hidden=true></i></span></li></ul></nav></div></header><div class="search-dropdown desktop"><div id=search-dropdown-desktop></div></div><div class="search-dropdown mobile"><div id=search-dropdown-mobile></div></div><main class=container><div class="page home posts"><div class=home-profile><div class=home-avatar><a href=/archives/ title=文章><img loading=lazy src=/avatar.jpg alt=Leon data-title=Leon width=96 height=96 style="background:url(/images/loading.min.svg)no-repeat 50%" onload='this.title=this.dataset.title;for(const e of["style","data-title","onerror","onload"])this.removeAttribute(e);this.dataset.lazyloaded=""' onerror='this.title=this.dataset.title;for(const e of["style","data-title","onerror","onload"])this.removeAttribute(e)'></a></div><h1 class=home-title>LEON BLOG</h1><p class=home-subtitle><span class=d-none>劫就劫皇纲,嫖就嫖娘娘!</span><span class=typeit><template>劫就劫皇纲,嫖就嫖娘娘!</template></span></p><div class=links><a href=https://github.com/liangml title=GitHub target=_blank rel="external nofollow noopener noreferrer me"><i class="fa-brands fa-github-alt fa-fw" aria-hidden=true></i>
</a><a href=/index.xml title=RSS target=_blank rel="external nofollow noopener noreferrer me"><i class="fa-solid fa-rss fa-fw" aria-hidden=true></i></a></div></div><article class="single summary" itemscope itemtype=http://schema.org/Article><h2 class=single-title itemprop="name headline"><a href=/posts/kubernetes/>Kubernetes</a></h2><div class=post-meta><span class=post-author><span class=author><i class="fa-solid fa-user-circle" aria-hidden=true></i>
Leon</span></span> <span class=post-publish title='2025-01-07 19:07:33'>发布于 <time datetime=2025-01-07>2025-01-07</time></span><span class=post-included-in> 收录于 <a href=/categories/kubernetes/ class=post-category title="分类 - Kubernetes"><i class="fa-regular fa-folder fa-fw" aria-hidden=true></i> Kubernetes</a> 和 <a href=/collections/kubernetes/ class=post-collection title="合集 - Kubernetes"><i class="fa-solid fa-layer-group fa-fw" aria-hidden=true></i> Kubernetes</a></span></div><div class=content><h3 id=资源清单格式 class=heading-element><span>资源清单格式</span>
<a href=#%e8%b5%84%e6%ba%90%e6%b8%85%e5%8d%95%e6%a0%bc%e5%bc%8f class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt> 1
</span><span class=lnt> 2
</span><span class=lnt> 3
</span><span class=lnt> 4
</span><span class=lnt> 5
</span><span class=lnt> 6
</span><span class=lnt> 7
</span><span class=lnt> 8
</span><span class=lnt> 9
</span><span class=lnt>10
</span><span class=lnt>11
</span><span class=lnt>12
</span><span class=lnt>13
</span><span class=lnt>14
</span><span class=lnt>15
</span><span class=lnt>16
</span><span class=lnt>17
</span><span class=lnt>18
</span><span class=lnt>19
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nt>apiVersion</span><span class=p>:</span><span class=w> </span><span class=l>group/apiversion # 指定当前的组和版本(写的资源清单具体去哪个路径下调代码)。如果没有给定 group 名称,那么默认为 core,可以使用 kubectl api-versions</span><span class=w> </span><span class=c># 获取当前 k8s 版本上所有的 apiVersion 版本信息( 每个版本可能不同 )</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=nt>kind</span><span class=p>:</span><span class=w> </span><span class=l>Service </span><span class=w> </span><span class=c>#资源类别</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=nt>metadata</span><span class=p>:</span><span class=w> </span><span class=c>#资源元数据</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>pod-demo </span><span class=w> </span><span class=c>#资源对象名称;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>namespace</span><span class=p>:</span><span class=w> </span><span class=l>default #使用名称级别的资源才需要填写;</span><span class=w> </span><span class=c>#处于default名称空间下;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>lables</span><span class=p>:</span><span class=w> </span><span class=c>#标签,筛选操作;一般用于集群内部的筛选功能;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>app</span><span class=p>:</span><span class=w> </span><span class=l>myapp </span><span class=w> </span><span class=c>#标签</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>annotations</span><span class=p>:</span><span class=w> </span><span class=c># 主要目的是方便用户阅读查找</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=nt>spec</span><span class=p>:</span><span class=w> </span><span class=c># 期望的状态(disired state)</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>containers</span><span class=p>:</span><span class=w> </span><span class=c>#代表mainC;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>myapp-1 </span><span class=w> </span><span class=c>#mainC子对象1名称;列表开头使用 -开头</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>wangyanglinux/myapp:v1</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>busybox-1 </span><span class=w> </span><span class=c>#mainC子对象2名称;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>busybox:1.35.0</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>command</span><span class=p>:</span><span class=w> </span><span class=c>#此处代表的是ENTRYPOINT;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=s2>"/bin/sh"</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=s2>"-c"</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=s2>"sleep 3600"</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w></span><span class=nt>status</span><span class=p>:</span><span class=w> </span><span class=c># 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义</span></span></span></code></pre></td></tr></table></div></div><h3 id=字段格式配置 class=heading-element><span>字段格式配置</span>
<a href=#%e5%ad%97%e6%ae%b5%e6%a0%bc%e5%bc%8f%e9%85%8d%e7%bd%ae class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span><span class=lnt>2
</span><span class=lnt>3
</span><span class=lnt>4
</span><span class=lnt>5
</span><span class=lnt>6
</span><span class=lnt>7
</span><span class=lnt>8
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>apiVersion <string> <span class=c1>#表示字符串类型</span>
</span></span><span class=line><span class=cl>metadata <Object> <span class=c1>#表示需要嵌套多层字段</span>
</span></span><span class=line><span class=cl>labels <map<span class=o>[</span>string<span class=o>]</span>string> <span class=c1>#表示由k:v组成的映射</span>
</span></span><span class=line><span class=cl>finalizers <<span class=o>[]</span>string> <span class=c1>#表示字串列表</span>
</span></span><span class=line><span class=cl>ownerReferences <<span class=o>[]</span>Object> <span class=c1>#表示对象列表</span>
</span></span><span class=line><span class=cl>hostPID <boolean> <span class=c1>#布尔类型</span>
</span></span><span class=line><span class=cl>priority <integer> <span class=c1>#整型</span>
</span></span><span class=line><span class=cl>name <string> -required- <span class=c1>#如果类型后面接 -required-,表示为必填字段</span></span></span></code></pre></td></tr></table></div></div><h3 id=常用资源清单格式定义 class=heading-element><span>常用资源清单格式定义</span>
<a href=#%e5%b8%b8%e7%94%a8%e8%b5%84%e6%ba%90%e6%b8%85%e5%8d%95%e6%a0%bc%e5%bc%8f%e5%ae%9a%e4%b9%89 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><blockquote><p>Object :对象,下方是对象的属性<br>list:类别,下方包含多个数组,每个数组是一个对象<br>String:字符串 后边直接跟value的值</p></div><div class=post-footer><a href=/posts/kubernetes/>阅读全文</a><div class=post-tags><i class="fa-solid fa-tags fa-fw me-1" aria-hidden=true></i><a href=/tags/k8s/ class=post-tag>K8s</a></div></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h2 class=single-title itemprop="name headline"><a href=/posts/golang-guide/>Golang-Guide</a></h2><div class=post-meta><span class=post-author><span class=author><i class="fa-solid fa-user-circle" aria-hidden=true></i>
Leon</span></span> <span class=post-publish title='2024-11-22 15:31:08'>发布于 <time datetime=2024-11-22>2024-11-22</time></span><span class=post-included-in> 收录于 <a href=/categories/golang/ class=post-category title="分类 - Golang"><i class="fa-regular fa-folder fa-fw" aria-hidden=true></i> Golang</a> 和 <a href=/collections/programs/ class=post-collection title="合集 - Programs"><i class="fa-solid fa-layer-group fa-fw" aria-hidden=true></i> Programs</a></span></div><div class=content><h3 id=uber-goguide-的中文翻译 class=heading-element><span><a href=https://github.com/uber-go/guide target=_blank rel="external nofollow noopener noreferrer">uber-go/guide</a> 的中文翻译</span>
<a href=#uber-goguide-%e7%9a%84%e4%b8%ad%e6%96%87%e7%bf%bb%e8%af%91 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><h3 id=english class=heading-element><span><a href=https://github.com/uber-go/guide/blob/master/style.md target=_blank rel="external nofollow noopener noreferrer">English</a></span>
<a href=#english class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><h3 id=uber-go-语言编码规范 class=heading-element><span>Uber Go 语言编码规范</span>
<a href=#uber-go-%e8%af%ad%e8%a8%80%e7%bc%96%e7%a0%81%e8%a7%84%e8%8c%83 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><p><a href=https://www.uber.com/ target=_blank rel="external nofollow noopener noreferrer">Uber</a> 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter。其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 <a href=https://github.com/uber-go/zap target=_blank rel="external nofollow noopener noreferrer">zap</a>、<a href=https://github.com/jaegertracing/jaeger target=_blank rel="external nofollow noopener noreferrer">jaeger</a> 等。2018 年年末 Uber 将内部的 <a href=https://github.com/uber-go/guide target=_blank rel="external nofollow noopener noreferrer">Go 风格规范</a> 开源到 GitHub,经过一年的积累和更新,该规范已经初具规模,并受到广大 Gopher 的关注。本文是该规范的中文版本。本版本会根据原版实时更新。</p></div><div class=post-footer><a href=/posts/golang-guide/>阅读全文</a><div class=post-tags><i class="fa-solid fa-tags fa-fw me-1" aria-hidden=true></i><a href=/tags/golang/ class=post-tag>Golang</a></div></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h2 class=single-title itemprop="name headline"><a href=/posts/poetry/>Poetry: Python虚拟环境管理</a></h2><div class=post-meta><span class=post-author><span class=author><i class="fa-solid fa-user-circle" aria-hidden=true></i>
Leon</span></span> <span class=post-publish title='2024-10-31 10:54:34'>发布于 <time datetime=2024-10-31>2024-10-31</time></span><span class=post-included-in> 收录于 <a href=/categories/python/ class=post-category title="分类 - Python"><i class="fa-regular fa-folder fa-fw" aria-hidden=true></i> Python</a> 和 <a href=/collections/programs/ class=post-collection title="合集 - Programs"><i class="fa-solid fa-layer-group fa-fw" aria-hidden=true></i> Programs</a></span></div><div class=content><blockquote><p>macos 使用</p></blockquote><h3 id=install class=heading-element><span>install</span>
<a href=#install class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>brew install poetry</span></span></code></pre></td></tr></table></div></div><h3 id=初始化 class=heading-element><span>初始化</span>
<a href=#%e5%88%9d%e5%a7%8b%e5%8c%96 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span><span class=lnt>2
</span><span class=lnt>3
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>mkdir project-demo
</span></span><span class=line><span class=cl><span class=nb>cd</span> project-demo
</span></span><span class=line><span class=cl>poetry init</span></span></code></pre></td></tr></table></div></div><h3 id=管理虚拟环境 class=heading-element><span>管理虚拟环境</span>
<a href=#%e7%ae%a1%e7%90%86%e8%99%9a%e6%8b%9f%e7%8e%af%e5%a2%83 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><ul><li>创建虚拟环境</li><li>虚拟环境的命名模式为 项目名-随机数-python版本</li></ul><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>poetry env use PYTHONPATH</span></span></code></pre></td></tr></table></div></div><ul><li>查看当前虚拟环境</li></ul><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>poetry env list</span></span></code></pre></td></tr></table></div></div><ul><li>查看当前poetry配置</li></ul><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>poetry config --list </span></span></code></pre></td></tr></table></div></div><ul><li>允许在项目目录下创建虚拟环境</li></ul><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>poetry config virtualenvs.in-project true</span></span></code></pre></td></tr></table></div></div><blockquote><p>如果已经创建了环境需要先移除 <code>poetry env remove PYTHONPATH</code><br>创建目录:poetry env use PYTHONPATH</p></div><div class=post-footer><a href=/posts/poetry/>阅读全文</a><div class=post-tags><i class="fa-solid fa-tags fa-fw me-1" aria-hidden=true></i><a href=/tags/poetry/ class=post-tag>Poetry</a></div></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h2 class=single-title itemprop="name headline"><a href=/posts/nodejs/>Nodejs</a></h2><div class=post-meta><span class=post-author><span class=author><i class="fa-solid fa-user-circle" aria-hidden=true></i>
Leon</span></span> <span class=post-publish title='2024-10-29 18:10:27'>发布于 <time datetime=2024-10-29>2024-10-29</time></span><span class=post-included-in> 收录于 <a href=/categories/nodejs/ class=post-category title="分类 - Nodejs"><i class="fa-regular fa-folder fa-fw" aria-hidden=true></i> Nodejs</a> 和 <a href=/collections/programs/ class=post-collection title="合集 - Programs"><i class="fa-solid fa-layer-group fa-fw" aria-hidden=true></i> Programs</a></span></div><div class=content><h3 id=问题集锦 class=heading-element><span>问题集锦</span>
<a href=#%e9%97%ae%e9%a2%98%e9%9b%86%e9%94%a6 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><h4 id=lib64libstdcso6-version-cxxabi_139-not-found-canvasnode-解决办法centos class=heading-element><span>/lib64/libstdc++.so.6: version `CXXABI_1.3.9’ not found canvas.node 解决办法(CentOS)</span>
<a href=#lib64libstdcso6-version-cxxabi_139-not-found-canvasnode-%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95centos class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h4><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>npx node-pre-gyp rebuild -C ./node_modules/canvas</span></span></code></pre></td></tr></table></div></div></div><div class=post-footer><a href=/posts/nodejs/>阅读全文</a><div class=post-tags><i class="fa-solid fa-tags fa-fw me-1" aria-hidden=true></i><a href=/tags/nodejs/ class=post-tag>Nodejs</a></div></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h2 class=single-title itemprop="name headline"><a href=/posts/macosboot/>Macosboot</a></h2><div class=post-meta><span class=post-author><span class=author><i class="fa-solid fa-user-circle" aria-hidden=true></i>
Leon</span></span> <span class=post-publish title='2024-10-28 15:48:16'>发布于 <time datetime=2024-10-28>2024-10-28</time></span><span class=post-included-in> 收录于 <a href=/categories/macos/ class=post-category title="分类 - Macos"><i class="fa-regular fa-folder fa-fw" aria-hidden=true></i> Macos</a> 和 <a href=/collections/system/ class=post-collection title="合集 - System"><i class="fa-solid fa-layer-group fa-fw" aria-hidden=true></i> System</a></span></div><div class=content><h3 id=macos-启动过程 class=heading-element><span>macos 启动过程</span>
<a href=#macos-%e5%90%af%e5%8a%a8%e8%bf%87%e7%a8%8b class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><h3 id=launchd开启之后会依次去完成以下的工作 class=heading-element><span>launchd开启之后,会依次去完成以下的工作:</span>
<a href=#launchd%e5%bc%80%e5%90%af%e4%b9%8b%e5%90%8e%e4%bc%9a%e4%be%9d%e6%ac%a1%e5%8e%bb%e5%ae%8c%e6%88%90%e4%bb%a5%e4%b8%8b%e7%9a%84%e5%b7%a5%e4%bd%9c class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><ul><li>根据<code>/System/Library/LaunchDaemons</code> 和<code>/Library/LaunchDaemons</code>路径下的plist文件,加载系统级守护进程;</li><li>注册上述守护进程需要的套接字及文件描述符;</li><li>根据plist文件中的KeepAlive键值,启动那些需要在系统周期内一直保持的进程;</li><li>根据plist文件中的设定,在条件满足时启动进程;</li><li>关机时,给所有由launchd开启的进程发送SIGTERM信号。
我们将log信息中的内容与<code>/System/Library/LaunchDaemons</code>路径下的plist进行对照,发现在系统开启之初的bootlog,blued,mDNSResponder等都能再该路径下找到。</li></ul><h4 id=launchdaemons路径下的plist指定的进程启动是否存在一定的先后顺序呢 class=heading-element><span>LaunchDaemons路径下的plist指定的进程启动是否存在一定的先后顺序呢?</span>
<a href=#launchdaemons%e8%b7%af%e5%be%84%e4%b8%8b%e7%9a%84plist%e6%8c%87%e5%ae%9a%e7%9a%84%e8%bf%9b%e7%a8%8b%e5%90%af%e5%8a%a8%e6%98%af%e5%90%a6%e5%ad%98%e5%9c%a8%e4%b8%80%e5%ae%9a%e7%9a%84%e5%85%88%e5%90%8e%e9%a1%ba%e5%ba%8f%e5%91%a2 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h4><blockquote><p>在launchd依次完成的工作中,可以看到它是先注册套接字和文件描述符,然后才去启动进程,因此plist指定的进程的启动先后顺序并不明确。</p></div><div class=post-footer><a href=/posts/macosboot/>阅读全文</a><div class=post-tags><i class="fa-solid fa-tags fa-fw me-1" aria-hidden=true></i><a href=/tags/macos/ class=post-tag>Macos</a></div></div></article><article class="single summary" itemscope itemtype=http://schema.org/Article><h2 class=single-title itemprop="name headline"><a href=/posts/shell/>Shell</a></h2><div class=post-meta><span class=post-author><span class=author><i class="fa-solid fa-user-circle" aria-hidden=true></i>
Leon</span></span> <span class=post-publish title='2024-10-17 18:34:22'>发布于 <time datetime=2024-10-17>2024-10-17</time></span><span class=post-included-in> 收录于 <a href=/categories/shell/ class=post-category title="分类 - Shell"><i class="fa-regular fa-folder fa-fw" aria-hidden=true></i> Shell</a> 和 <a href=/collections/programs/ class=post-collection title="合集 - Programs"><i class="fa-solid fa-layer-group fa-fw" aria-hidden=true></i> Programs</a></span></div><div class=content><h3 id=ps命令 class=heading-element><span><code>ps</code>命令</span>
<a href=#ps%e5%91%bd%e4%bb%a4 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><h4 id=查看进程启动时间 class=heading-element><span>查看进程启动时间</span>
<a href=#%e6%9f%a5%e7%9c%8b%e8%bf%9b%e7%a8%8b%e5%90%af%e5%8a%a8%e6%97%b6%e9%97%b4 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h4><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-shell data-lang=shell><span class=line><span class=cl>ps -eo pid,lstart,etime,cmd <span class=p>|</span>grep <span class=nv>$PID</span></span></span></code></pre></td></tr></table></div></div><h3 id=shell-判断 class=heading-element><span>shell 判断</span>
<a href=#shell-%e5%88%a4%e6%96%ad class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span><span class=lnt>2
</span><span class=lnt>3
</span><span class=lnt>4
</span><span class=lnt>5
</span><span class=lnt>6
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-plain data-lang=plain><span class=line><span class=cl>-eq # 等于
</span></span><span class=line><span class=cl>-ne # 不等于
</span></span><span class=line><span class=cl>-gt # 大于
</span></span><span class=line><span class=cl>-lt # 小于
</span></span><span class=line><span class=cl>-ge # 大于等于
</span></span><span class=line><span class=cl>-le # 小于等于</span></span></code></pre></td></tr></table></div></div><h3 id=ip地址判断 class=heading-element><span>IP地址判断</span>
<a href=#ip%e5%9c%b0%e5%9d%80%e5%88%a4%e6%96%ad class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><div class=highlight><div class=chroma><table class=lntable><tr><td class=lntd><pre tabindex=0 class=chroma><code><span class=lnt>1
</span></code></pre></td><td class=lntd><pre tabindex=0 class=chroma><code class=language-plain data-lang=plain><span class=line><span class=cl>((2(5[0-5]|[0-4]\\\\d))|[0-1]?\\\\d{1,2})(\\\\.((2(5[0-5]|[0-4]\\\\d))|[0-1]?\\\\d{1,2})){3}</span></span></code></pre></td></tr></table></div></div><h3 id=字符串运算 class=heading-element><span>字符串运算</span>
<a href=#%e5%ad%97%e7%ac%a6%e4%b8%b2%e8%bf%90%e7%ae%97 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><table><thead><tr><th style=text-align:left>运算符</th><th style=text-align:left>说明</th><th style=text-align:left>举例</th></tr></thead><tbody><tr><td style=text-align:left>=</td><td style=text-align:left>检测两个字符串是否相等,相等返回 true。</td><td style=text-align:left>[ $a = $b ] 返回 false。</td></tr><tr><td style=text-align:left>!=</td><td style=text-align:left>检测两个字符串是否不相等,不相等返回 true。</td><td style=text-align:left>[ $a != $b ] 返回 true。</td></tr><tr><td style=text-align:left>-z</td><td style=text-align:left>检测字符串长度是否为0,为0返回 true。</td><td style=text-align:left>[ -z $a ] 返回 false。</td></tr><tr><td style=text-align:left>-n</td><td style=text-align:left>检测字符串长度是否不为 0,不为 0 返回 true。</td><td style=text-align:left>[ -n “$a” ] 返回 true。</td></tr><tr><td style=text-align:left>$</td><td style=text-align:left>检测字符串是否不为空,不为空返回 true。</td><td style=text-align:left>[ $a ] 返回 true。</td></tr></tbody></table><h3 id=文件测试运算符 class=heading-element><span>文件测试运算符</span>
<a href=#%e6%96%87%e4%bb%b6%e6%b5%8b%e8%af%95%e8%bf%90%e7%ae%97%e7%ac%a6 class=heading-mark><svg class="octicon octicon-link" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5.0 114.95 4.95l-2.5 2.5a3.5 3.5.0 01-4.95.0.751.751.0 01.018-1.042.751.751.0 011.042-.018 1.998 1.998.0 002.83.0l2.5-2.5a2.002 2.002.0 00-2.83-2.83l-1.25 1.25a.751.751.0 01-1.042-.018.751.751.0 01-.018-1.042zm-4.69 9.64a1.998 1.998.0 002.83.0l1.25-1.25a.751.751.0 011.042.018.751.751.0 01.018 1.042l-1.25 1.25a3.5 3.5.0 11-4.95-4.95l2.5-2.5a3.5 3.5.0 014.95.0.751.751.0 01-.018 1.042.751.751.0 01-1.042.018 1.998 1.998.0 00-2.83.0l-2.5 2.5a1.998 1.998.0 000 2.83z"/></svg></a></h3><table><thead><tr><th style=text-align:left>操作符</th><th style=text-align:left>说明</th><th style=text-align:left>举例</th></tr></thead><tbody><tr><td style=text-align:left>-b file</td><td style=text-align:left>检测文件是否是块设备文件,如果是,则返回 true。</td><td style=text-align:left>[ -b $file ] 返回 false。</td></tr><tr><td style=text-align:left>-c file</td><td style=text-align:left>检测文件是否是字符设备文件,如果是,则返回 true。</td><td style=text-align:left>[ -c $file ] 返回 false。</td></tr><tr><td style=text-align:left>-d file</td><td style=text-align:left>检测文件是否是目录,如果是,则返回 true。</td><td style=text-align:left>[ -d $file ] 返回 false。</td></tr><tr><td style=text-align:left>-f file</td><td style=text-align:left>检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。</td><td style=text-align:left>[ -f $file ] 返回 true。</td></tr><tr><td style=text-align:left>-g file</td><td style=text-align:left>检测文件是否设置了 SGID 位,如果是,则返回 true。</td><td style=text-align:left>[ -g $file ] 返回 false。</td></tr><tr><td style=text-align:left>-k file</td><td style=text-align:left>检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。</td><td style=text-align:left>[ -k $file ] 返回 false。</td></tr><tr><td style=text-align:left>-p file</td><td style=text-align:left>检测文件是否是有名管道,如果是,则返回 true。</td><td style=text-align:left>[ -p $file ] 返回 false。</td></tr><tr><td style=text-align:left>-u file</td><td style=text-align:left>检测文件是否设置了 SUID 位,如果是,则返回 true。</td><td style=text-align:left>[ -u $file ] 返回 false。</td></tr><tr><td style=text-align:left>-r file</td><td style=text-align:left>检测文件是否可读,如果是,则返回 true。</td><td style=text-align:left>[ -r $file ] 返回 true。</td></tr><tr><td style=text-align:left>-w file</td><td style=text-align:left>检测文件是否可写,如果是,则返回 true。</td><td style=text-align:left>[ -w $file ] 返回 true。</td></tr><tr><td style=text-align:left>-x file</td><td style=text-align:left>检测文件是否可执行,如果是,则返回 true。</td><td style=text-align:left>[ -x $file ] 返回 true。</td></tr><tr><td style=text-align:left>-s file</td><td style=text-align:left>检测文件是否为空(文件大小是否大于0),不为空返回 true。</td><td style=text-align:left>[ -s $file ] 返回 true。</td></tr><tr><td style=text-align:left>-e file</td><td style=text-align:left>检测文件(包括目录)是否存在,如果是,则返回 true。</td><td style=text-align:left>[ -e $file ] 返回 true。</td></tr></tbody></table><p>其他检查符:<br>-S: 判断某文件是否 socket。<br>-L: 检测文件是否存在并且是一个符号链接。</p></div><div class=post-footer><a href=/posts/shell/>阅读全文</a><div class=post-tags><i class="fa-solid fa-tags fa-fw me-1" aria-hidden=true></i><a href=/tags/shell/ class=post-tag>Shell</a></div></div></article><ul class=pagination><li class="page-item active"><span class=page-link><a href=/>1</a></span></li><li class=page-item><span class=page-link><a href=/page/2/>2</a></span></li><li class=page-item><span class=page-link><a href=/page/3/>3</a></span></li><li class=page-item><span class=page-link aria-hidden=true>…</span></li><li class=page-item><span class=page-link><a href=/page/5/>5</a></span></li></ul></div></main><footer class=footer><div class=footer-container><div class="footer-line powered">由 <a href=https://gohugo.io/ target=_blank rel="external nofollow noopener noreferrer" title="Hugo 0.144.2"><img class=hugo-icon src=/images/hugo.min.svg alt="Hugo logo"> Hugo</a> 强力驱动 | 主题 - <a href=https://github.com/hugo-fixit/FixIt target=_blank rel=external title="FixIt v0.3.16-f66dc32e"><img class=fixit-icon src=/images/fixit.min.svg alt="FixIt logo"> FixIt</a></div><div class="footer-line copyright" itemscope itemtype=http://schema.org/CreativeWork><i class="fa-regular fa-copyright fa-fw" aria-hidden=true></i>
<span itemprop=copyrightYear>2019 - 2025</span><span class=author itemprop=copyrightHolder>
<a href=/>Leon</a></span><span class="license footer-divider"><a rel:"license external nofollow noopener noreferrer" href:"https://creativecommons.org/licenses/by-nc/4.0/" target:"_blank">CC BY-NC 4.0</a></span></div><div class="footer-line statistics"><span class=site-time title=网站运行中……><i class="fa-solid fa-heartbeat fa-fw animate-icon" aria-hidden=true></i><span class="run-times ms-1">网站运行中……</span></span></div><div class="footer-line visitor"><span id=busuanzi_container_site_uv title=总访客数><i class="fa-regular fa-user fa-fw me-1" aria-hidden=true></i><span id=busuanzi_value_site_uv><i class="fa-solid fa-spinner fa-spin fa-fw" aria-hidden=true></i></span></span><span id=busuanzi_container_site_pv class=footer-divider title=总访问量><i class="fa-regular fa-eye fa-fw me-1" aria-hidden=true></i><span id=busuanzi_value_site_pv><i class="fa-solid fa-spinner fa-spin fa-fw" aria-hidden=true></i></span></span></div></div></footer></div><div class=widgets><div class="fixed-buttons animate__faster d-none"><div class="fixed-button back-to-top" role=button aria-label=回到顶部><i class="fa-solid fa-arrow-up fa-fw" aria-hidden=true></i><span class=variant-numeric>0%</span></div><div class="fixed-button view-comments d-none" role=button aria-label=查看评论><i class="fa-solid fa-comment fa-fw" aria-hidden=true></i></div></div><a href=https://github.com/liangml title="在 GitHub 上查看源代码" target=_blank rel="external nofollow" class="github-corner right d-none-mobile"><svg viewBox="0 0 250 250" aria-hidden="true" width="56" height="56"><path d="M0 0 115 115h15l12 27L250 250V0z"/><path d="M128.3 109C113.8 99.7 119 89.6 119 89.6 122 82.7 120.5 78.6 120.5 78.6 119.2 72 123.4 76.3 123.4 76.3 127.3 80.9 125.5 87.3 125.5 87.3 122.9 97.6 130.6 101.9 134.4 103.2" fill="currentcolor" style="transform-origin:130px 106px" class="octo-arm"/><path d="M115 115C114.9 115.1 118.7 116.5 119.8 115.4l13.9-13.8C136.9 99.2 139.9 98.4 142.2 98.6 133.8 88 127.5 74.4 143.8 58 148.5 53.4 154 51.2 159.7 51 160.3 49.4 163.2 43.6 171.4 40.1 171.4 40.1 176.1 42.5 178.8 56.2 183.1 58.6 187.2 61.8 190.9 65.4 194.5 69 197.7 73.2 200.1 77.6 213.8 80.2 216.3 84.9 216.3 84.9 212.7 93.1 206.9 96 205.4 96.6 205.1 102.4 203 107.8 198.3 112.5 181.9 128.9 168.3 122.5 157.7 114.1 157.9 116.9 156.7 120.9 152.7 124.9L141 136.5C139.8 137.7 141.6 141.9 141.8 141.8z" fill="currentcolor" class="octo-body"/></svg></a><div id=mask></div><div class=reading-progress-bar style=left:0;top:0></div><noscript><div class=noscript-warning>该网站在启用 JavaScript 的情况下效果最佳。</div></noscript></div><link rel=stylesheet href=/lib/lightgallery/css/lightgallery-bundle.min.120f067ebd6f322339e2ccccd7e87e334d7c7ea5b2bd553f325f2ae3c3ae6fe8.css integrity="sha256-Eg8Gfr1vMiM54szM1+h+M018fqWyvVU/Ml8q48Oub+g="><link rel=preload href=/lib/katex/katex.min.7e5db7914b97e596a36c1abb67ccc7f174f8bb71d38c9a88c55b262ed1737f97.css integrity="sha256-fl23kUuX5ZajbBq7Z8zH8XT4u3HTjJqIxVsmLtFzf5c=" as=style onload='this.removeAttribute("onload"),this.rel="stylesheet"'><noscript><link rel=stylesheet href=/lib/katex/katex.min.7e5db7914b97e596a36c1abb67ccc7f174f8bb71d38c9a88c55b262ed1737f97.css integrity="sha256-fl23kUuX5ZajbBq7Z8zH8XT4u3HTjJqIxVsmLtFzf5c="></noscript><script src=/lib/autocomplete/autocomplete.min.ae2da1bd62c6469ee27770ad1cddf2e8296d8a7f6d85b091463e5200c5e320af.js integrity="sha256-ri2hvWLGRp7id3CtHN3y6Cltin9thbCRRj5SAMXjIK8=" defer></script><script src=/lib/fuse/fuse.min.c57339c3fa16b1d69d9a6b46749a8139ef8d4fc9bbfe48144ff897aa7d4222ec.js integrity="sha256-xXM5w/oWsdadmmtGdJqBOe+NT8m7/kgUT/iXqn1CIuw=" defer></script><script src=/lib/lightgallery/lightgallery.min.7de2854e7954105f2b91ff5983749c4e3c7af51e05aae279f8a5d66994a85777.js integrity="sha256-feKFTnlUEF8rkf9Zg3ScTjx69R4FquJ5+KXWaZSoV3c=" defer></script><script src=/lib/lightgallery/plugins/thumbnail/lg-thumbnail.min.4fbc3ec1878e90348b71b3594d8ef27c4f10a1a4c6d5e74948d0ee59018fd87c.js integrity="sha256-T7w+wYeOkDSLcbNZTY7yfE8QoaTG1edJSNDuWQGP2Hw=" defer></script><script src=/lib/lightgallery/plugins/zoom/lg-zoom.min.821a2adb8005511c0ad9ef6f395c1b74beacc2da194cd13a4ac43d341246e085.js integrity="sha256-ghoq24AFURwK2e9vOVwbdL6swtoZTNE6SsQ9NBJG4IU=" defer></script><script src=/lib/sharer/sharer.min.ba5171a78670b031914e623431a33a3d73c1ea9897e552ba73bc2c2da7c777b9.js integrity="sha256-ulFxp4ZwsDGRTmI0MaM6PXPB6piX5VK6c7wsLafHd7k=" async defer></script><script src=/lib/typeit/index.umd.96b5f642c8fe44454a419adf52ef6949f8b3b6f071f6dff508773b5bbd6444c8.js integrity="sha256-lrX2Qsj+REVKQZrfUu9pSfiztvBx9t/1CHc7W71kRMg=" defer></script><script src=/lib/katex/katex.min.9f45307c5794ed247a0d095f3a62e52ef2215a67b2327203a7fd919959ae79d1.js integrity="sha256-n0UwfFeU7SR6DQlfOmLlLvIhWmeyMnIDp/2RmVmuedE=" defer></script><script src=/lib/katex/auto-render.min.7b57d427ac6270677daf8d8380ded2cc73336f9149a167b8e1fe0d6ef66604ae.js integrity="sha256-e1fUJ6xicGd9r42DgN7SzHMzb5FJoWe44f4NbvZmBK4=" defer></script><script src=/lib/katex/copy-tex.min.07770af90943a1de1a1010794bc78c6a7346d46d48fb63e35cc76ba76b827604.js integrity="sha256-B3cK+QlDod4aEBB5S8eManNG1G1I+2PjXMdrp2uCdgQ=" defer></script><script src=/lib/katex/mhchem.min.f0ca03df194b8c3d6017ff455db6a0ef98857905663fa311a6cded788b15340b.js integrity="sha256-8MoD3xlLjD1gF/9FXbag75iFeQVmP6MRps3teIsVNAs=" defer></script><script src=/lib/pangu/pangu.min.8feca3e7a71d118d82c2456d1b2cf5f1f3726c51a930627c2711b7192c8edbe2.js integrity="sha256-j+yj56cdEY2CwkVtGyz18fNybFGpMGJ8JxG3GSyO2+I=" defer></script><script src=https://vercount.one/js async defer></script><script>window.config={code:{copyTitle:"复制到剪贴板",editLockTitle:"锁定可编辑代码块",editUnLockTitle:"解锁可编辑代码块",editable:!0,maxShownLines:50},enablePWA:!0,lightgallery:!0,math:{delimiters:[{display:!0,left:"$$",right:"$$"},{display:!0,left:"\\[",right:"\\]"},{display:!0,left:"\\begin{equation}",right:"\\end{equation}"},{display:!0,left:"\\begin{equation*}",right:"\\end{equation*}"},{display:!0,left:"\\begin{align}",right:"\\end{align}"},{display:!0,left:"\\begin{align*}",right:"\\end{align*}"},{display:!0,left:"\\begin{alignat}",right:"\\end{alignat}"},{display:!0,left:"\\begin{alignat*}",right:"\\end{alignat*}"},{display:!0,left:"\\begin{gather}",right:"\\end{gather}"},{display:!0,left:"\\begin{CD}",right:"\\end{CD}"},{display:!1,left:"$",right:"$"},{display:!1,left:"\\(",right:"\\)"}],strict:!1},pangu:{enable:!0,selector:"article"},search:{distance:100,findAllMatches:!1,fuseIndexURL:"/search.json",highlightTag:"em",ignoreFieldNorm:!1,ignoreLocation:!1,isCaseSensitive:!1,location:0,maxResultLength:10,minMatchCharLength:2,noResultsFound:"没有找到结果",snippetLength:30,threshold:.3,type:"fuse",useExtendedSearch:!1},siteTime:"2018-02-06T11:15:22+08:00",typeit:{cursorChar:"|",cursorSpeed:1e3,duration:-1,loop:!1,speed:100},version:"v0.3.16-f66dc32e"}</script><script src=/js/theme.min.0daa504da430d5723626cca1801d04ac125316adbe008489bd4ebe37d7bd9a01.js integrity="sha256-DapQTaQw1XI2JsyhgB0ErBJTFq2+AISJvU6+N9e9mgE=" defer></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-TDTX88VL0X",{anonymize_ip:!0})</script><script src="https://www.googletagmanager.com/gtag/js?id=G-TDTX88VL0X" async></script><script>var _hmt=_hmt||[];(function(){var e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?0efb33ce4bda317225be7158a8517fd0",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script></body></html>