<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>技术笔记 on Frytea</title>
    <link>https://frytea.com/categories/%E6%8A%80%E6%9C%AF%E7%AC%94%E8%AE%B0/</link>
    <description>Recent content in 技术笔记 on Frytea</description>
    <image>
      <title>Frytea</title>
      <url>https://frytea.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://frytea.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 13 Apr 2026 09:01:49 +0000</lastBuildDate>
    <atom:link href="https://frytea.com/categories/%E6%8A%80%E6%9C%AF%E7%AC%94%E8%AE%B0/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>openFuyao NPU-Operator故障排查</title>
      <link>https://frytea.com/archives/1655/</link>
      <pubDate>Mon, 13 Apr 2026 09:01:49 +0000</pubDate>
      <guid>https://frytea.com/archives/1655/</guid>
      <description>&lt;h2 id=&#34;故障-pod-describe&#34;&gt;故障 pod describe&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 ~]# kubectl -n kube-system describe pod ascend-device-plugin-ll46f 
Name:                 ascend-device-plugin-ll46f
Namespace:            kube-system
Priority:             2000001000
Priority Class Name:  system-node-critical
Service Account:      ascend-device-plugin-sa
Node:                 master1/10.17.30.131
Start Time:           Mon, 30 Mar 2026 11:08:32 +0800
Labels:               app.kubernetes.io/managed-by=npu-operator
                      controller-revision-hash=7df5dcb887
                      helm.sh/chart=npu-operator-0.15.0
                      name=ascend-device-plugin-ds
                      pod-template-generation=1
Annotations:          cni.projectcalico.org/containerID: c1f2adcaeaaf2bdcf0a6e09730f68231a293074e31d58f61997f714dfb520878
                      cni.projectcalico.org/podIP: 192.168.137.118/32
                      cni.projectcalico.org/podIPs: 192.168.137.118/32
                      scheduler.alpha.kubernetes.io/critical-pod: 
                      seccomp.security.alpha.kubernetes.io/pod: runtime/default
Status:               Running
IP:                   192.168.137.118
IPs:
  IP:           192.168.137.118
Controlled By:  DaemonSet/ascend-device-plugin
Init Containers:
  init-permission:
    Container ID:  containerd://4406968a522bea48dfefebae81ec53644312762af4781c25de689952ed6c2d27
    Image:         cr.openfuyao.cn/openfuyao/busybox:1.36.1
    Image ID:      cr.openfuyao.cn/openfuyao/busybox@sha256:4b8407fadd8100c61b097d63efe992b2c033e7d371c9117f7a9462fe87e31176
    Port:          &amp;lt;none&amp;gt;
    Host Port:     &amp;lt;none&amp;gt;
    Command:
      sh
      -c
      chown 9000:9000 /var/log/mindx-dl /var/log/mindx-dl/devicePlugin
      chmod 750 /var/log/mindx-dl/devicePlugin
      
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 30 Mar 2026 15:28:32 +0800
      Finished:     Mon, 30 Mar 2026 15:28:32 +0800
    Ready:          True
    Restart Count:  1
    Environment:    &amp;lt;none&amp;gt;
    Mounts:
      /var/log/mindx-dl/devicePlugin from log-path (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-gfldg (ro)
Containers:
  device-plugin-01:
    Container ID:  containerd://fcc0c4742285847e2621a9a9217502307fc7e28644fbf86b32f9c11d67a2c0ab
    Image:         cr.openfuyao.cn/openfuyao/ascend-image/ascend-k8sdeviceplugin:v6.0.0
    Image ID:      cr.openfuyao.cn/openfuyao/ascend-image/ascend-k8sdeviceplugin@sha256:a5b9612b21bcd35384f9f19a05b2d7915b865e7b2be6a30bfd7806a9b8a86f58
    Port:          &amp;lt;none&amp;gt;
    Host Port:     &amp;lt;none&amp;gt;
    Command:
      /bin/bash
      -c
      --
    Args:
      device-plugin  -useAscendDocker=true -volcanoType=false -logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Tue, 31 Mar 2026 10:28:58 +0800
      Finished:     Tue, 31 Mar 2026 10:28:58 +0800
    Ready:          False
    Restart Count:  274
    Limits:
      cpu:     500m
      memory:  500Mi
    Requests:
      cpu:     500m
      memory:  500Mi
    Environment:
      NODE_NAME:   (v1:spec.nodeName)
    Mounts:
      /tmp from tmp (rw)
      /usr/local/Ascend/driver from hiai-driver (ro)
      /var/lib/kubelet/device-plugins from device-plugin (rw)
      /var/lib/kubelet/pod-resources from pod-resource (rw)
      /var/log/mindx-dl/devicePlugin from log-path (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-gfldg (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True 
  Initialized                 True 
  Ready                       False 
  ContainersReady             False 
  PodScheduled                True 
Volumes:
  device-plugin:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/device-plugins
    HostPathType:  
  pod-resource:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/pod-resources
    HostPathType:  
  hiai-driver:
    Type:          HostPath (bare host directory volume)
    Path:          /usr/local/Ascend/driver
    HostPathType:  
  log-path:
    Type:          HostPath (bare host directory volume)
    Path:          /var/log/mindx-dl/devicePlugin
    HostPathType:  DirectoryOrCreate
  tmp:
    Type:          HostPath (bare host directory volume)
    Path:          /tmp
    HostPathType:  
  kube-api-access-gfldg:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              openfuyao.com/npu.present=
Tolerations:                 CriticalAddonsOnly op=Exists
                             device-plugin=v2:NoSchedule
                             huawei.com/Ascend910:NoSchedule op=Exists
                             node-role.kubernetes.io/control-plane:NoSchedule
                             node-role.kubernetes.io/master:NoSchedule
                             node.kubernetes.io/disk-pressure:NoSchedule op=Exists
                             node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists
                             node.kubernetes.io/pid-pressure:NoSchedule op=Exists
                             node.kubernetes.io/unreachable:NoExecute op=Exists
                             node.kubernetes.io/unschedulable:NoSchedule op=Exists
Events:
  Type     Reason   Age                     From     Message
  ----     ------   ----                    ----     -------
  Normal   Pulled   16m (x205 over 18h)     kubelet  (combined from similar events): Successfully pulled image &amp;#34;cr.openfuyao.cn/openfuyao/ascend-image/ascend-k8sdeviceplugin:v6.0.0&amp;#34; in 403ms (403ms including waiting). Image size: 48017174 bytes.
  Warning  BackOff  2m47s (x5216 over 18h)  kubelet  Back-off restarting failed container device-plugin-01 in pod ascend-device-plugin-ll46f_kube-system(8edcd384-ab2d-4998-8077-5ac58801c79e)
  Normal   Pulling  66s (x227 over 19h)     kubelet  Pulling image &amp;#34;cr.openfuyao.cn/openfuyao/ascend-image/ascend-k8sdeviceplugin:v6.0.0&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;故障-pod-dev-检查&#34;&gt;故障 pod /dev 检查&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 fuyao-26.3-rc3]# kubectl  -n kube-system exec -it daemonsets/ascend-device-plugin -- ls /dev
Defaulted container &amp;#34;device-plugin-01&amp;#34; out of: device-plugin-01, init-permission (init)
autofs           null               tty10  tty34  tty58    vcs5
bsg              ppp                tty11  tty35  tty59    vcs6
btrfs-control    ptmx               tty12  tty36  tty6     vcsa
bus              pts                tty13  tty37  tty60    vcsa1
core             random             tty14  tty38  tty61    vcsa2
cpu_dma_latency  raw                tty15  tty39  tty62    vcsa3
cuse             relationship_ctrl  tty16  tty4   tty63    vcsa4
davinci0         rfkill             tty17  tty40  tty7     vcsa5
davinci_manager  rtc0               tty18  tty41  tty8     vcsa6
devmm_svm        sda                tty19  tty42  tty9     vcsu
dri              sda1               tty2   tty43  ttyAMA0  vcsu1
fb0              sda2               tty20  tty44  ttyS0    vcsu2
fd               sg0                tty21  tty45  ttyS1    vcsu3
full             sg1                tty22  tty46  ttyS2    vcsu4
fuse             sg2                tty23  tty47  ttyS3    vcsu5
hidraw0          shm                tty24  tty48  uhid     vcsu6
hidraw1          snapshot           tty25  tty49  uinput   vfio
hisi_hdc         sr0                tty26  tty5   urandom  vga_arbiter
hwrng            sr1                tty27  tty50  usbmon0  vhost-net
input            stderr             tty28  tty51  usbmon1  vhost-vsock
kmsg             stdin              tty29  tty52  usbmon2  vport2p1
loop-control     stdout             tty3   tty53  vcs      zero
mapper           termination-log    tty30  tty54  vcs1
mem              tty                tty31  tty55  vcs2
mqueue           tty0               tty32  tty56  vcs3
net              tty1               tty33  tty57  vcs4
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;故障-pod-驱动检查&#34;&gt;故障 pod 驱动检查&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 fuyao-26.3-rc3]# kubectl  -n kube-system exec -it daemonsets/ascend-device-plugin -- ls -lha /usr/local/Ascend/driver
Defaulted container &amp;#34;device-plugin-01&amp;#34; out of: device-plugin-01, init-permission (init)
total 44K
drwxr-xr-x  8 root root 4.0K Mar 27 08:03 .
drwxr-xr-x  3 root root 4.0K Mar 31 02:34 ..
drwxr-xr-x  2 root root 4.0K Mar 27 08:01 bin
-r--r--r--  1 root root   20 Mar 27 08:01 build.info
dr-xr-x---  2 root root 4.0K Mar 27 08:01 device
dr-x------ 41 root root 4.0K Mar 27 08:01 kernel
drwxr-xr-x  6 root root 4.0K Mar 27 08:01 lib64
-r--r-----  1 root root   56 Mar 27 08:01 scene.info
dr-xr-x---  2 root root 4.0K Mar 27 08:01 script
drwxr-xr-x  2 root root 4.0K Mar 27 08:01 tools
-r--r--r--  1 root root  352 Mar 27 08:03 version.info
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;故障-pod-日志&#34;&gt;故障 pod 日志&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 ~]# kubectl -n kube-system logs daemonsets/ascend-device-plugin --previous
Defaulted container &amp;#34;device-plugin-01&amp;#34; out of: device-plugin-01, init-permission (init)
[INFO]     2026/03/31 06:46:54.593254 1       hwlog/api.go:108    devicePlugin.log&amp;#39;s logger init success
[INFO]     2026/03/31 06:46:54.593449 1       main.go:187    ascend device plugin starting and the version is v6.0.0_linux-aarch64
[INFO]     2026/03/31 06:46:54.593494 1       main.go:188    ascend device plugin starting scene is center
[INFO]     2026/03/31 06:46:54.787930 1       devmanager/devmanager.go:104    the dcmi version is 24.1.rc3
[ERROR]    2026/03/31 06:46:54.788019 1       devmanager/devmanager.go:211    get error card quantity: 0
[ERROR]    2026/03/31 06:46:54.788052 1       devmanager/devmanager.go:195    get card list failed for init
[ERROR]    2026/03/31 06:46:54.788101 1       main.go:203    init devmanager failed, err: auto init failed, err: get card list failed for init
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;故障-pod-驱动检查-1&#34;&gt;故障 pod 驱动检查&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 ~]# kubectl -n kube-system exec -it daemonsets/ascend-device-plugin -- bash -c &amp;#39;find /usr/local/Ascend/driver -name libdcmi.so 2&amp;gt;/dev/null; echo $LD_LIBRARY_PATH&amp;#39;
Defaulted container &amp;#34;device-plugin-01&amp;#34; out of: device-plugin-01, init-permission (init)
/usr/local/Ascend/driver/lib64/driver/libdcmi.so
command terminated with exit code 137
[root@master1 ~]# ps -ef | grep -E &amp;#39;dmp_daemon|slogd&amp;#39; | grep -v grep
root       21578       1  0 Mar30 ?        00:00:19 /usr/sbin/rsyslogd -n -i/var/run/rsyslogd.pid
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;检查服务状态&#34;&gt;检查服务状态？&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 ~]# systemctl status ascend-dmi
Unit ascend-dmi.service could not be found.
[root@master1 ~]# systemctl status ascend-dkms
Unit ascend-dkms.service could not be found.
[root@master1 ~]# systemctl status npu-smi
Unit npu-smi.service could not be found.
[root@master1 ~]# find / -name dmp_daemon 2&amp;gt;/dev/null
[root@master1 ~]# find / -name slogd 2&amp;gt;/dev/null
[root@master1 ~]# ls -l /var/dmp_daemon /var/slogd 2&amp;gt;/dev/null
[root@master1 ~]# 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;dcmi 问题，需硬件排查&lt;/p&gt;</description>
    </item>
    <item>
      <title>openFuyao 2603 共测测试报告</title>
      <link>https://frytea.com/archives/1654/</link>
      <pubDate>Mon, 13 Apr 2026 09:01:27 +0000</pubDate>
      <guid>https://frytea.com/archives/1654/</guid>
      <description>&lt;h1 id=&#34;相关链接&#34;&gt;相关链接&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;特性清单: &lt;a href=&#34;https://gitcode.com/openFuyao/release-management/blob/main/openFuyao-26.03/release-plan.md&#34;&gt;https://gitcode.com/openFuyao/release-management/blob/main/openFuyao-26.03/release-plan.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;安装部署前置环境校验工具使用指导: &lt;a href=&#34;https://gitcode.com/openFuyao/sig-installation/blob/master/docs/zh/user_guide/cluster_installation_deployment/environment_pre_check_tool_guide.md&#34;&gt;https://gitcode.com/openFuyao/sig-installation/blob/master/docs/zh/user_guide/cluster_installation_deployment/environment_pre_check_tool_guide.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;测试环境&#34;&gt;测试环境&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;CPU: &lt;code&gt;Kunpeng-920&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;OS: &lt;code&gt;openEuler 24.03 LTS SP3 aarch64&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fuyao Version: &lt;code&gt;v26.03 rc3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;docker: &lt;code&gt;2:18.09.0-346.oe2403sp3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;测试特性&#34;&gt;测试特性&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 在线部署；&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 离线包制备；&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 离线部署；&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 安装部署前置检查工具；&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; NPU Operator；&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; AI推理套件；&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;建议优化点&#34;&gt;建议优化点&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;环境检测工具，检查 iptables 默认策略是否放行，若未放行可能在部署成功后无法访问；默认防火墙策略为 FORWARD DROP ，对集群运行和访问带来的潜在问题；&lt;/li&gt;
&lt;li&gt;运行 cli 前检查是否存在命令并及时抛出错误；检查 &lt;code&gt;tar&lt;/code&gt; / &lt;code&gt;unzip&lt;/code&gt; 是否安装，安装过程有很多地方会用到，而且出错时不会得到明显的解压失败报错，难以定位问题。&lt;/li&gt;
&lt;li&gt;安装命令变化，考虑上下兼容性？&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;场景记录&#34;&gt;场景记录&lt;/h1&gt;
&lt;h2 id=&#34;离线部署管理面和业务面集群&#34;&gt;离线部署管理面和业务面集群&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CPU: &lt;code&gt;Kunpeng-920&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;OS: &lt;code&gt;openEuler 24.03 LTS SP3 aarch64&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fuyao Version: &lt;code&gt;v26.03 rc3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;docker: &lt;code&gt;2:18.09.0-346.oe2403sp3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;arm64 环境下构建离线制品包为什么会执行 amd64 的 bin&lt;/p&gt;</description>
    </item>
    <item>
      <title>openFuyao InferNex AI推理集成部署 310P(300I Pro) 环境问题记录及解决</title>
      <link>https://frytea.com/archives/1653/</link>
      <pubDate>Mon, 13 Apr 2026 08:53:36 +0000</pubDate>
      <guid>https://frytea.com/archives/1653/</guid>
      <description>&lt;p&gt;AI推理集成部署（InferNex）是一个专为云原生环境下AI推理服务优化所设计的端到端集成部署方案。该方案基于Kubernetes Gateway API Inference Extension (GIE) 和主流LLM技术栈构建，通过Helm Chart将开源网关、智能路由、高性能推理后端、全局KVCache管理、扩缩容决策框架及推理可观测体系等核心加速模块无缝集成。它提供从请求接入、动态路由、推理执行到资源管理与监控的完整加速链路，旨在提升推理吞吐量并降低TTFT/TPOT时延，实现一站式的高效AI服务部署体验。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ascend 310P &#43; openFuyao &#43; NPU-Operator 故障排查</title>
      <link>https://frytea.com/archives/1651/</link>
      <pubDate>Wed, 01 Apr 2026 14:26:36 +0000</pubDate>
      <guid>https://frytea.com/archives/1651/</guid>
      <description>&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h2 id=&#34;故障-pod-describe&#34;&gt;故障 pod describe&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 ~]# kubectl -n kube-system describe pod ascend-device-plugin-ll46f 
Name:                 ascend-device-plugin-ll46f
Namespace:            kube-system
Priority:             2000001000
Priority Class Name:  system-node-critical
Service Account:      ascend-device-plugin-sa
Node:                 master1/10.17.30.131
Start Time:           Mon, 30 Mar 2026 11:08:32 +0800
Labels:               app.kubernetes.io/managed-by=npu-operator
                      controller-revision-hash=7df5dcb887
                      helm.sh/chart=npu-operator-0.15.0
                      name=ascend-device-plugin-ds
                      pod-template-generation=1
Annotations:          cni.projectcalico.org/containerID: c1f2adcaeaaf2bdcf0a6e09730f68231a293074e31d58f61997f714dfb520878
                      cni.projectcalico.org/podIP: 192.168.137.118/32
                      cni.projectcalico.org/podIPs: 192.168.137.118/32
                      scheduler.alpha.kubernetes.io/critical-pod: 
                      seccomp.security.alpha.kubernetes.io/pod: runtime/default
Status:               Running
IP:                   192.168.137.118
IPs:
  IP:           192.168.137.118
Controlled By:  DaemonSet/ascend-device-plugin
Init Containers:
  init-permission:
    Container ID:  containerd://4406968a522bea48dfefebae81ec53644312762af4781c25de689952ed6c2d27
    Image:         cr.openfuyao.cn/openfuyao/busybox:1.36.1
    Image ID:      cr.openfuyao.cn/openfuyao/busybox@sha256:4b8407fadd8100c61b097d63efe992b2c033e7d371c9117f7a9462fe87e31176
    Port:          &amp;lt;none&amp;gt;
    Host Port:     &amp;lt;none&amp;gt;
    Command:
      sh
      -c
      chown 9000:9000 /var/log/mindx-dl /var/log/mindx-dl/devicePlugin
      chmod 750 /var/log/mindx-dl/devicePlugin
      
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 30 Mar 2026 15:28:32 +0800
      Finished:     Mon, 30 Mar 2026 15:28:32 +0800
    Ready:          True
    Restart Count:  1
    Environment:    &amp;lt;none&amp;gt;
    Mounts:
      /var/log/mindx-dl/devicePlugin from log-path (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-gfldg (ro)
Containers:
  device-plugin-01:
    Container ID:  containerd://fcc0c4742285847e2621a9a9217502307fc7e28644fbf86b32f9c11d67a2c0ab
    Image:         cr.openfuyao.cn/openfuyao/ascend-image/ascend-k8sdeviceplugin:v6.0.0
    Image ID:      cr.openfuyao.cn/openfuyao/ascend-image/ascend-k8sdeviceplugin@sha256:a5b9612b21bcd35384f9f19a05b2d7915b865e7b2be6a30bfd7806a9b8a86f58
    Port:          &amp;lt;none&amp;gt;
    Host Port:     &amp;lt;none&amp;gt;
    Command:
      /bin/bash
      -c
      --
    Args:
      device-plugin  -useAscendDocker=true -volcanoType=false -logFile=/var/log/mindx-dl/devicePlugin/devicePlugin.log -logLevel=0
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Tue, 31 Mar 2026 10:28:58 +0800
      Finished:     Tue, 31 Mar 2026 10:28:58 +0800
    Ready:          False
    Restart Count:  274
    Limits:
      cpu:     500m
      memory:  500Mi
    Requests:
      cpu:     500m
      memory:  500Mi
    Environment:
      NODE_NAME:   (v1:spec.nodeName)
    Mounts:
      /tmp from tmp (rw)
      /usr/local/Ascend/driver from hiai-driver (ro)
      /var/lib/kubelet/device-plugins from device-plugin (rw)
      /var/lib/kubelet/pod-resources from pod-resource (rw)
      /var/log/mindx-dl/devicePlugin from log-path (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-gfldg (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True 
  Initialized                 True 
  Ready                       False 
  ContainersReady             False 
  PodScheduled                True 
Volumes:
  device-plugin:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/device-plugins
    HostPathType:  
  pod-resource:
    Type:          HostPath (bare host directory volume)
    Path:          /var/lib/kubelet/pod-resources
    HostPathType:  
  hiai-driver:
    Type:          HostPath (bare host directory volume)
    Path:          /usr/local/Ascend/driver
    HostPathType:  
  log-path:
    Type:          HostPath (bare host directory volume)
    Path:          /var/log/mindx-dl/devicePlugin
    HostPathType:  DirectoryOrCreate
  tmp:
    Type:          HostPath (bare host directory volume)
    Path:          /tmp
    HostPathType:  
  kube-api-access-gfldg:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              openfuyao.com/npu.present=
Tolerations:                 CriticalAddonsOnly op=Exists
                             device-plugin=v2:NoSchedule
                             huawei.com/Ascend910:NoSchedule op=Exists
                             node-role.kubernetes.io/control-plane:NoSchedule
                             node-role.kubernetes.io/master:NoSchedule
                             node.kubernetes.io/disk-pressure:NoSchedule op=Exists
                             node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists
                             node.kubernetes.io/pid-pressure:NoSchedule op=Exists
                             node.kubernetes.io/unreachable:NoExecute op=Exists
                             node.kubernetes.io/unschedulable:NoSchedule op=Exists
Events:
  Type     Reason   Age                     From     Message
  ----     ------   ----                    ----     -------
  Normal   Pulled   16m (x205 over 18h)     kubelet  (combined from similar events): Successfully pulled image &amp;#34;cr.openfuyao.cn/openfuyao/ascend-image/ascend-k8sdeviceplugin:v6.0.0&amp;#34; in 403ms (403ms including waiting). Image size: 48017174 bytes.
  Warning  BackOff  2m47s (x5216 over 18h)  kubelet  Back-off restarting failed container device-plugin-01 in pod ascend-device-plugin-ll46f_kube-system(8edcd384-ab2d-4998-8077-5ac58801c79e)
  Normal   Pulling  66s (x227 over 19h)     kubelet  Pulling image &amp;#34;cr.openfuyao.cn/openfuyao/ascend-image/ascend-k8sdeviceplugin:v6.0.0&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;故障-pod-dev-检查&#34;&gt;故障 pod /dev 检查&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 fuyao-26.3-rc3]# kubectl  -n kube-system exec -it daemonsets/ascend-device-plugin -- ls /dev
Defaulted container &amp;#34;device-plugin-01&amp;#34; out of: device-plugin-01, init-permission (init)
autofs           null               tty10  tty34  tty58    vcs5
bsg              ppp                tty11  tty35  tty59    vcs6
btrfs-control    ptmx               tty12  tty36  tty6     vcsa
bus              pts                tty13  tty37  tty60    vcsa1
core             random             tty14  tty38  tty61    vcsa2
cpu_dma_latency  raw                tty15  tty39  tty62    vcsa3
cuse             relationship_ctrl  tty16  tty4   tty63    vcsa4
davinci0         rfkill             tty17  tty40  tty7     vcsa5
davinci_manager  rtc0               tty18  tty41  tty8     vcsa6
devmm_svm        sda                tty19  tty42  tty9     vcsu
dri              sda1               tty2   tty43  ttyAMA0  vcsu1
fb0              sda2               tty20  tty44  ttyS0    vcsu2
fd               sg0                tty21  tty45  ttyS1    vcsu3
full             sg1                tty22  tty46  ttyS2    vcsu4
fuse             sg2                tty23  tty47  ttyS3    vcsu5
hidraw0          shm                tty24  tty48  uhid     vcsu6
hidraw1          snapshot           tty25  tty49  uinput   vfio
hisi_hdc         sr0                tty26  tty5   urandom  vga_arbiter
hwrng            sr1                tty27  tty50  usbmon0  vhost-net
input            stderr             tty28  tty51  usbmon1  vhost-vsock
kmsg             stdin              tty29  tty52  usbmon2  vport2p1
loop-control     stdout             tty3   tty53  vcs      zero
mapper           termination-log    tty30  tty54  vcs1
mem              tty                tty31  tty55  vcs2
mqueue           tty0               tty32  tty56  vcs3
net              tty1               tty33  tty57  vcs4
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;故障-pod-驱动检查&#34;&gt;故障 pod 驱动检查&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 fuyao-26.3-rc3]# kubectl  -n kube-system exec -it daemonsets/ascend-device-plugin -- ls -lha /usr/local/Ascend/driver
Defaulted container &amp;#34;device-plugin-01&amp;#34; out of: device-plugin-01, init-permission (init)
total 44K
drwxr-xr-x  8 root root 4.0K Mar 27 08:03 .
drwxr-xr-x  3 root root 4.0K Mar 31 02:34 ..
drwxr-xr-x  2 root root 4.0K Mar 27 08:01 bin
-r--r--r--  1 root root   20 Mar 27 08:01 build.info
dr-xr-x---  2 root root 4.0K Mar 27 08:01 device
dr-x------ 41 root root 4.0K Mar 27 08:01 kernel
drwxr-xr-x  6 root root 4.0K Mar 27 08:01 lib64
-r--r-----  1 root root   56 Mar 27 08:01 scene.info
dr-xr-x---  2 root root 4.0K Mar 27 08:01 script
drwxr-xr-x  2 root root 4.0K Mar 27 08:01 tools
-r--r--r--  1 root root  352 Mar 27 08:03 version.info
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;故障-pod-日志&#34;&gt;故障 pod 日志&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 ~]# kubectl -n kube-system logs daemonsets/ascend-device-plugin --previous
Defaulted container &amp;#34;device-plugin-01&amp;#34; out of: device-plugin-01, init-permission (init)
[INFO]     2026/03/31 06:46:54.593254 1       hwlog/api.go:108    devicePlugin.log&amp;#39;s logger init success
[INFO]     2026/03/31 06:46:54.593449 1       main.go:187    ascend device plugin starting and the version is v6.0.0_linux-aarch64
[INFO]     2026/03/31 06:46:54.593494 1       main.go:188    ascend device plugin starting scene is center
[INFO]     2026/03/31 06:46:54.787930 1       devmanager/devmanager.go:104    the dcmi version is 24.1.rc3
[ERROR]    2026/03/31 06:46:54.788019 1       devmanager/devmanager.go:211    get error card quantity: 0
[ERROR]    2026/03/31 06:46:54.788052 1       devmanager/devmanager.go:195    get card list failed for init
[ERROR]    2026/03/31 06:46:54.788101 1       main.go:203    init devmanager failed, err: auto init failed, err: get card list failed for init
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;故障-pod-驱动检查-1&#34;&gt;故障 pod 驱动检查&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 ~]# kubectl -n kube-system exec -it daemonsets/ascend-device-plugin -- bash -c &amp;#39;find /usr/local/Ascend/driver -name libdcmi.so 2&amp;gt;/dev/null; echo $LD_LIBRARY_PATH&amp;#39;
Defaulted container &amp;#34;device-plugin-01&amp;#34; out of: device-plugin-01, init-permission (init)
/usr/local/Ascend/driver/lib64/driver/libdcmi.so
command terminated with exit code 137
[root@master1 ~]# ps -ef | grep -E &amp;#39;dmp_daemon|slogd&amp;#39; | grep -v grep
root       21578       1  0 Mar30 ?        00:00:19 /usr/sbin/rsyslogd -n -i/var/run/rsyslogd.pid
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;检查服务状态&#34;&gt;检查服务状态？&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@master1 ~]# systemctl status ascend-dmi
Unit ascend-dmi.service could not be found.
[root@master1 ~]# systemctl status ascend-dkms
Unit ascend-dkms.service could not be found.
[root@master1 ~]# systemctl status npu-smi
Unit npu-smi.service could not be found.
[root@master1 ~]# find / -name dmp_daemon 2&amp;gt;/dev/null
[root@master1 ~]# find / -name slogd 2&amp;gt;/dev/null
[root@master1 ~]# ls -l /var/dmp_daemon /var/slogd 2&amp;gt;/dev/null
[root@master1 ~]# 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;dcmi 问题，需硬件排查&lt;/p&gt;</description>
    </item>
    <item>
      <title>KDE Plasma6 禁用全局菜单，恢复正常应用菜单</title>
      <link>https://frytea.com/archives/1650/</link>
      <pubDate>Wed, 01 Apr 2026 05:55:30 +0000</pubDate>
      <guid>https://frytea.com/archives/1650/</guid>
      <description>&lt;h2 id=&#34;前情提要&#34;&gt;前情提要&lt;/h2&gt;
&lt;p&gt;不知道从什么时候开始，KDE Plasma 默认启用类似 macOS 的全局应用菜单。&lt;/p&gt;
&lt;p&gt;即应用窗口标题栏下方不显示菜单，而是移动到顶部菜单栏中“全局菜单”小组件中。&lt;/p&gt;
&lt;p&gt;但问题是，Linux 桌面生态生态复杂，X11 Wayland Qt GTK 等等技术太过复杂，很难保证常用软件都能够正常显示全局菜单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>终极指南：在 Linux 裸机服务器上快速部署 Moltbot (原 Clawbot) 并集成飞书</title>
      <link>https://frytea.com/archives/1617/</link>
      <pubDate>Thu, 29 Jan 2026 12:00:15 +0000</pubDate>
      <guid>https://frytea.com/archives/1617/</guid>
      <description>&lt;h2 id=&#34;引言&#34;&gt;引言&lt;/h2&gt;
&lt;p&gt;2026 年初，一个名为 Moltbot（前身为 Clawbot）的开源 AI 代理（Agent）框架席卷了开发者社区。该框架允许用户将强大的 AI 模型（例如 OpenAI 的 GPT 系列、Anthropic 的 Claude 等）与 WhatsApp、Telegram、Discord 等日常通讯工具集成，从而通过聊天即可操控电脑、执行任务、获取信息。特斯拉前 AI 主管 Andrej Karpathy 的推荐更是使其迅速走红，其 GitHub 项目在短时间内获得了超过 60,000 个星标。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows 配置 Claude Code 解决  settings.json 不生效</title>
      <link>https://frytea.com/archives/1616/</link>
      <pubDate>Fri, 09 Jan 2026 08:28:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1616/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;默认情况下 Windows 安装的 &lt;code&gt;Claude Code&lt;/code&gt; 会从这个位置读取配置：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:\Users\&amp;lt;YOUR_NAME&amp;gt;\.claude
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其他系统则类似的找到 &lt;code&gt;~/.claude&lt;/code&gt; 路径。&lt;/p&gt;
&lt;p&gt;官方流程在安装结束后就完成了，可以直接登录使用。如果需要修改配置将 &lt;code&gt;Claude Code&lt;/code&gt; 接入第三方 API，就需要修改这里的 &lt;code&gt;settings.json&lt;/code&gt; 配置文件，可以使用 &lt;code&gt;CC-Switch&lt;/code&gt; 或是手动编写，但是修改后会发现不生效。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows 配置 Claude Code 全流程</title>
      <link>https://frytea.com/archives/1615/</link>
      <pubDate>Fri, 09 Jan 2026 08:22:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1615/</guid>
      <description>&lt;p&gt;今天终于跑通了 Windows 下运行 Claoude Code 的全流程，不借助 WSL ，原生运行。起因是自己需要一个可以长期运行任务的云桌面，这方面还是 Windows 最好用。不得不说相比于 &lt;code&gt;Linux/macOS&lt;/code&gt; ，&lt;code&gt;Windows&lt;/code&gt; 下运行 &lt;code&gt;Claude Code&lt;/code&gt; 实在太多坑了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI 生图精品提示词｜第二期：城市星球</title>
      <link>https://frytea.com/archives/1613/</link>
      <pubDate>Sat, 13 Dec 2025 07:04:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1613/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;若没有特别说明，默认使用 &lt;a href=&#34;https://ailoft.net/&#34;&gt;AiLoft&lt;/a&gt; 提供的 &lt;code&gt;Nano Banana Pro&lt;/code&gt; 模型生成。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;城市星球系列封面图&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/13/o33ock.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;本次带来《城市星球》系列，先看效果图：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Refs: &lt;a href=&#34;https://x.com/TechieBySA/status/1999577563295826208&#34;&gt;https://x.com/TechieBySA/status/1999577563295826208&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;广州城市星球&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/13/ntiazl.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;北京城市星球&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/13/ntowrk.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;厦门城市星球&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/13/nu86cj.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;香港城市星球&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/13/nv58qh.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;芝加哥城市星球&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/13/nv9wkq.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;澳门城市星球&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/13/nvfosd.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;提示词如下：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Create a hyperrealistic miniature planet showcasing [GuangZhou] with famous landmarks seamlessly curving around the spherical surface. Position bold 3D white text ”[CITY]” naturally integrated across the lush green central parkland with realistic shadows and dimensional depth. Capture from a top-down orbiting angle that emphasizes the dramatic planet curvature. Use soft golden hour daylight filtering through partly cloudy skies, casting gentle shadows on emerald grass and surrounding trees. The background should blend into a swirling atmospheric sky. Apply vibrant greens, warm earth tones, and soft blues. Render in polished photorealistic style with fine architectural detail.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以讲示例中的 &lt;code&gt;GuangZhou&lt;/code&gt; 换成其他城市，例如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI 生图精品提示词｜第一期</title>
      <link>https://frytea.com/archives/1547/</link>
      <pubDate>Sat, 06 Dec 2025 06:47:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1547/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;若没有特别说明，默认使用 &lt;a href=&#34;https://ailoft.net/&#34;&gt;AiLoft&lt;/a&gt; 提供的 &lt;code&gt;Nano Banana Pro&lt;/code&gt; 模型生成。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;本期封面图：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;英文封面图&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/07/10ytg97.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;中文封面图&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/07/10y3vde.webp&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;3d-q-版迷你概念商店&#34;&gt;3D Q 版迷你概念商店&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Refs: &lt;a href=&#34;https://x.com/dotey/status/1995190286775881780&#34;&gt;https://x.com/dotey/status/1995190286775881780&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;说明：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;🍌 nano banana prompt
3D chibi-style miniature concept store of {Brand Name}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;提示词：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;3D chibi-style miniature concept store of {Brand Name}, creatively designed with an exterior inspired by the brand&amp;#39;s most iconic product or packaging (such as a giant {brand&amp;#39;s core product, e.g., chicken bucket/hamburger/donut/roast duck}). The store features two floors with large glass windows clearly showcasing the cozy and finely decorated interior: {brand&amp;#39;s primary color}-themed decor, warm lighting, and busy staff dressed in outfits matching the brand. Adorable tiny figures stroll or sit along the street, surrounded by benches, street lamps, and potted plants, creating a charming urban scene. Rendered in a miniature cityscape style using Cinema 4D, with a blind-box toy aesthetic, rich in details and realism, and bathed in soft lighting that evokes a relaxing afternoon atmosphere. --ar 2:3

Brand name: Starbucks
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;效果图：
Starbucks
&lt;img alt=&#34;3D chibi-style miniature concept store of Starbucks&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/12/06/ntjen3.webp&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes kubectl --raw 使用指南</title>
      <link>https://frytea.com/archives/1546/</link>
      <pubDate>Mon, 10 Nov 2025 13:08:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1546/</guid>
      <description>&lt;h2 id=&#34;什么是-kubectl-raw&#34;&gt;什么是 kubectl &amp;ndash;raw?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;kubectl --raw&lt;/code&gt; 是一个强大的底层工具,允许你直接访问 Kubernetes API Server 的 REST API,绕过 kubectl 的客户端逻辑、准入控制器(Admission Controllers)和 Webhook。&lt;/p&gt;</description>
    </item>
    <item>
      <title>磁盘使用分析工具对比：du vs ncdu vs gdu vs dust</title>
      <link>https://frytea.com/archives/1545/</link>
      <pubDate>Mon, 03 Nov 2025 15:14:51 +0000</pubDate>
      <guid>https://frytea.com/archives/1545/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Claude Sonnet 4.5 协助编写。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;在日常的系统管理和磁盘空间清理工作中，我们经常需要分析磁盘使用情况。本文将对比四个常用的磁盘使用分析工具：传统的 &lt;code&gt;du&lt;/code&gt;、经典的交互式工具 &lt;code&gt;ncdu&lt;/code&gt;、现代化的 &lt;code&gt;gdu&lt;/code&gt; 和 &lt;code&gt;dust&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>彻底解决阿里云和 tailscale 冲突</title>
      <link>https://frytea.com/archives/1543/</link>
      <pubDate>Mon, 27 Oct 2025 15:20:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1543/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;如果你在一台阿里云服务器安装并启动了 tailscale，大概率会出现&lt;strong&gt;阿里云服务器无法上网的问题&lt;/strong&gt;，根本原因为阿里云服务器默认DNS与tailscale网段产生冲突。&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS 单独为鼠标或触控板开启自然滚动</title>
      <link>https://frytea.com/archives/1541/</link>
      <pubDate>Sat, 18 Oct 2025 16:31:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1541/</guid>
      <description>&lt;p&gt;macOS 系统配置“自然滚动”，虽然鼠标和触控板都可以配置，但是两个控制是同步的，更改任意一个另一个都会跟着动。&lt;/p&gt;
&lt;p&gt;一直是这样，也没有要更改的意思。&lt;/p&gt;
&lt;p&gt;使用 &lt;a href=&#34;https://github.com/linearmouse/linearmouse&#34;&gt;LinearMouse&lt;/a&gt; 这个软件可以实现单独为触控板开启自然滚动，鼠标不开启自然滚动。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go 拉取 gitcode.com 私有 mod</title>
      <link>https://frytea.com/archives/1537/</link>
      <pubDate>Tue, 14 Oct 2025 11:51:14 +0000</pubDate>
      <guid>https://frytea.com/archives/1537/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;某个项目 mod 托管在 &lt;code&gt;gitcode&lt;/code&gt;，无法拉取。&lt;code&gt;git&lt;/code&gt; 登陆也不行，需要配置 &lt;code&gt;git&lt;/code&gt; 针对 &lt;code&gt;gitcode&lt;/code&gt; 默认走 &lt;code&gt;ssh&lt;/code&gt; 协议：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global url.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh://git@gitcode.com&amp;#34;&lt;/span&gt;.insteadOf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://gitcode.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在网上查到比较多的是针对 &lt;code&gt;gitlab&lt;/code&gt; 或 &lt;code&gt;github&lt;/code&gt; 的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# gitlab&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global url.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh://git@gitlab-company&amp;#34;&lt;/span&gt;.insteadOf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://gitlab.xxx.cn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# github的同理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global url.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh://git@github-company&amp;#34;&lt;/span&gt;.insteadOf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置后就可以正常 &lt;code&gt;go mod tidy&lt;/code&gt; 了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git 将某个文件恢复到其他分支的状态</title>
      <link>https://frytea.com/archives/1536/</link>
      <pubDate>Tue, 14 Oct 2025 04:05:22 +0000</pubDate>
      <guid>https://frytea.com/archives/1536/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 下面两种写法二选一
git checkout dev -- path/to/config.yaml

git restore --source=dev -- path/to/config.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以上命令都做了一件事情：假设我当前在 &lt;code&gt;main&lt;/code&gt; 分支，希望将 &lt;code&gt;path/to/config.yaml&lt;/code&gt; 恢复到 &lt;code&gt;dev&lt;/code&gt; 分支的状态。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSH 通过跳板机连接</title>
      <link>https://frytea.com/archives/1535/</link>
      <pubDate>Tue, 14 Oct 2025 04:05:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1535/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;有两种方式可以实现通过跳板机直接连接目标服务器 SSH.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# ProxyJump（推荐方式）OpenSSH &amp;gt;= 7.3
ssh -J user@jump-server.dealiaxy.com:10023 user@target.dealiaxy.com
# 在这条命令中，-J 后面指定了跳板机的地址（user@jump-server.dealiaxy.com）和端口（10023）。SSH 会先与跳板机建立连接，然后通过跳板机转发流量到目标服务器 target.dealiaxy.com。整个过程只需要一次登录操作，极大简化了访问流程。
# ProxyCommand
ssh -o &amp;#34;ProxyCommand ssh -W %h:%p user@jump-server.dealiaxy.com -p 10023&amp;#34; user@target.dealiaxy.com
# 在这个命令中，-o &amp;#34;ProxyCommand&amp;#34; 选项指定了一个自定义的命令来通过跳板机进行连接。具体地，ssh -W %h:%p 会将目标主机（%h）和端口（%p）转发给跳板机，然后通过跳板机建立与目标主机的连接。
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;refs&#34;&gt;Refs&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/deali/p/18678315&#34;&gt;SSH 跳板机原理与配置：实现无缝跳板连接，一步直达目标主机&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>lxc 使用 chronyc 构建 ntp 服务</title>
      <link>https://frytea.com/archives/1534/</link>
      <pubDate>Tue, 14 Oct 2025 04:04:52 +0000</pubDate>
      <guid>https://frytea.com/archives/1534/</guid>
      <description>&lt;p&gt;lxc 启动 chronyd 是无法直接启动的，因为用到了很多未授权的权限。&lt;/p&gt;
&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;lxc与宿主机共用内核，因此时间也是共用的，无需同步。如果你想构建一个 ntp 服务，不需要同步时间，可以像下面这样做：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Synology 群晖重置 Syncthing 密码</title>
      <link>https://frytea.com/archives/1521/</link>
      <pubDate>Sat, 13 Sep 2025 17:07:13 +0000</pubDate>
      <guid>https://frytea.com/archives/1521/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;进入群晖终端执行这个：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo vim /volume1/@appdata/syncthing/config.xml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将其中的 &lt;code&gt;password&lt;/code&gt; 这一行删掉即可，注意备份。&lt;/p&gt;
&lt;h1 id=&#34;refs&#34;&gt;Refs&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/synology/comments/12vq2qi/syncthing_config_file_location/?tl=zh-hans&#34;&gt;https://www.reddit.com/r/synology/comments/12vq2qi/syncthing_config_file_location/?tl=zh-hans&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>让 LLM 看到真实世界的 Playwright MCP</title>
      <link>https://frytea.com/archives/1519/</link>
      <pubDate>Sun, 07 Sep 2025 14:22:41 +0000</pubDate>
      <guid>https://frytea.com/archives/1519/</guid>
      <description>&lt;p&gt;Playwright MCP 是一个模型上下文协议（MCP）服务器，使用 &lt;a href=&#34;https://playwright.dev&#34;&gt;Playwright&lt;/a&gt; 提供浏览器自动化功能。该服务器使 LLM 能够通过结构化的可访问性快照与网页交互，从而绕过对屏幕截图或视觉调整模型的需求。&lt;/p&gt;</description>
    </item>
    <item>
      <title>磁盘占用分析利器 ncdu</title>
      <link>https://frytea.com/archives/1518/</link>
      <pubDate>Sun, 07 Sep 2025 14:22:16 +0000</pubDate>
      <guid>https://frytea.com/archives/1518/</guid>
      <description>&lt;p&gt;现在使用 &lt;a href=&#34;https://dev.yorhel.nl/ncdu&#34;&gt;&lt;code&gt;ncdu&lt;/code&gt;&lt;/a&gt; 的话，只需要执行一次就可以查询目录大小并排序，且删除文件也很方便，不会出错。&lt;/p&gt;
&lt;h1 id=&#34;基本用法&#34;&gt;基本用法&lt;/h1&gt;
&lt;p&gt;安装：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# ubuntu
sudo apt install ncdu
# centos
sudo yum install ncdu
# macOS
brew install ncdu
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;使用&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 统计当前所在目录及子目录的文件占用情况
ncdu

# 统计指定的 /data 目录
ncdu /data

# 将 /data 目录的情况输出到 ~/ncdu.txt
ncdu /data -o ~/ncdu.txt

# 加载本地根据，而不是进行实时统计
ncdu -f ~/ncdu.txt 
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhaojun.vip/archives/66/&#34;&gt;Linux 命令行工具 ncdu 磁盘占用分析利器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://formulae.brew.sh/formula/ncdu&#34;&gt;ncdu - brew&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>自建 gitlab 徽标问题导致项目 500 问题解决</title>
      <link>https://frytea.com/archives/1516/</link>
      <pubDate>Thu, 28 Aug 2025 14:33:56 +0000</pubDate>
      <guid>https://frytea.com/archives/1516/</guid>
      <description>&lt;h1 id=&#34;问题&#34;&gt;问题&lt;/h1&gt;
&lt;p&gt;最近内部 gitlab 某些项目打开就 500 了， 看 gitlab 报错日志如下：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gitlab  | {&amp;#34;method&amp;#34;:&amp;#34;GET&amp;#34;,&amp;#34;path&amp;#34;:&amp;#34;/xxx/xxx&amp;#34;,&amp;#34;format&amp;#34;:&amp;#34;html&amp;#34;,&amp;#34;controller&amp;#34;:&amp;#34;ProjectsController&amp;#34;,&amp;#34;action&amp;#34;:&amp;#34;show&amp;#34;,&amp;#34;status&amp;#34;:500,&amp;#34;time&amp;#34;:&amp;#34;2025-08-28T00:51:41.511Z&amp;#34;,&amp;#34;params&amp;#34;:[{&amp;#34;key&amp;#34;:&amp;#34;namespace_id&amp;#34;,&amp;#34;value&amp;#34;:&amp;#34;xxx&amp;#34;},{&amp;#34;key&amp;#34;:&amp;#34;id&amp;#34;,&amp;#34;value&amp;#34;:&amp;#34;xxx&amp;#34;}],&amp;#34;remote_ip&amp;#34;:&amp;#34;10.17.7.63&amp;#34;,&amp;#34;user_id&amp;#34;:74,&amp;#34;username&amp;#34;:&amp;#34;xxxgitlab | {&amp;#34;method&amp;#34;:&amp;#34;GET&amp;#34;,&amp;#34;path&amp;#34;:&amp;#34;/xxx/xxx&amp;#34;,&amp;#34;format&amp;#34;:&amp;#34;html&amp;#34;,&amp;#34;controller&amp;#34;:&amp;#34;ProjectsController&amp;#34;,&amp;#34;action&amp;#34;:&amp;#34;show&amp;#34;,&amp;#34;status&amp;#34;:500,&amp;#34;time&amp;#34;:&amp;#34;2025-08-28T00:51:41.511Z&amp;#34;,&amp;#34;params&amp;#34;:[{&amp;#34;key&amp;#34;:&amp;#34;namespace_id&amp;#34;,&amp;#34;value&amp;#34;:&amp;#34;xxx&amp;#34;},{&amp;#34;key&amp;#34;:&amp;#34;id&amp;#34;,&amp;#34;value&amp;#34;:&amp;#34;xxx&amp;#34;}],&amp;#34;remote_ip&amp;#34;:&amp;#34;10.17.7.63&amp;#34;,&amp;#34;user_id&amp;#34;:74,&amp;#34;username&amp;#34;:&amp;#34;xxx&amp;#34;,&amp;#34;ua&amp;#34;:&amp;#34;Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0&amp;#34;,&amp;#34;correlation_id&amp;#34;:&amp;#34;01K3Q2F5DXP8Y33B25TW9SSMYM&amp;#34;,&amp;#34;meta.user&amp;#34;:&amp;#34;xxx&amp;#34;,&amp;#34;meta.project&amp;#34;:&amp;#34;xxx/xxx&amp;#34;,&amp;#34;meta.root_namespace&amp;#34;:&amp;#34;storage&amp;#34;,&amp;#34;meta.caller_id&amp;#34;:&amp;#34;ProjectsController#show&amp;#34;,&amp;#34;meta.remote_ip&amp;#34;:&amp;#34;10.17.7.63&amp;#34;,&amp;#34;meta.feature_category&amp;#34;:&amp;#34;projects&amp;#34;,&amp;#34;meta.client_id&amp;#34;:&amp;#34;user/74&amp;#34;,&amp;#34;redis_calls&amp;#34;:21,&amp;#34;redis_duration_s&amp;#34;:0.007123,&amp;#34;redis_read_bytes&amp;#34;:2997,&amp;#34;redis_write_bytes&amp;#34;:2370,&amp;#34;redis_cache_calls&amp;#34;:20,&amp;#34;redis_cache_duration_s&amp;#34;:0.006591,&amp;#34;redis_cache_read_bytes&amp;#34;:2816,&amp;#34;redis_cache_write_bytes&amp;#34;:1035,&amp;#34;redis_shared_state_calls&amp;#34;:1,&amp;#34;redis_shared_state_duration_s&amp;#34;:0.000532,&amp;#34;redis_shared_state_read_bytes&amp;#34;:181,&amp;#34;redis_shared_state_write_bytes&amp;#34;:1335,&amp;#34;db_count&amp;#34;:41,&amp;#34;db_write_count&amp;#34;:0,&amp;#34;db_cached_count&amp;#34;:10,&amp;#34;cpu_s&amp;#34;:2.291446,&amp;#34;mem_objects&amp;#34;:394125,&amp;#34;mem_bytes&amp;#34;:52397272,&amp;#34;mem_mallocs&amp;#34;:198648,&amp;#34;mem_total_bytes&amp;#34;:68162272,&amp;#34;queue_duration_s&amp;#34;:0.009214,&amp;#34;exception.class&amp;#34;:&amp;#34;Rack::Timeout::RequestTimeoutException&amp;#34;,&amp;#34;exception.message&amp;#34;:&amp;#34;Request ran for longer than 60000ms&amp;#34;,&amp;#34;exception.backtrace&amp;#34;:[&amp;#34;lib/gitlab/url_blocker.rb:113:in `getaddrinfo&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/url_blocker.rb:113:in `get_address_info&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/url_blocker.rb:48:in `validate!&amp;#39;&amp;#34;,&amp;#34;app/validators/addressable_url_validator.rb:83:in `validate_each&amp;#39;&amp;#34;,&amp;#34;app/models/badge.rb:43:in `build_rendered_url&amp;#39;&amp;#34;,&amp;#34;app/models/badge.rb:36:in `rendered_image_url&amp;#39;&amp;#34;,&amp;#34;app/models/badges/project_badge.rb:15:in `rendered_image_url&amp;#39;&amp;#34;,&amp;#34;app/views/projects/_home_panel.html.haml:93&amp;#34;,&amp;#34;app/views/projects/_home_panel.html.haml:89&amp;#34;,&amp;#34;app/views/projects/_home_panel.html.haml:87&amp;#34;,&amp;#34;app/views/projects/show.html.haml:14&amp;#34;,&amp;#34;app/controllers/application_controller.rb:128:in `render&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:538:in `block in allow_gitaly_ref_name_caching&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/gitaly_client.rb:341:in `allow_ref_name_caching&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:537:in `allow_gitaly_ref_name_caching&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:487:in `set_current_admin&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/session.rb:11:in `with_session&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:478:in `set_session_storage&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/i18n.rb:99:in `with_locale&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/i18n.rb:105:in `with_user_locale&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:472:in `set_locale&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:466:in `set_current_context&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/rails_queue_duration.rb:33:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/rack_middleware.rb:16:in `block in call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/web_transaction.rb:21:in `run&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/rack_middleware.rb:16:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/speedscope.rb:13:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/request_profiler/middleware.rb:17:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/jira/middleware.rb:19:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/go.rb:20:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/etag_caching/middleware.rb:21:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/multipart.rb:172:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/read_only/controller.rb:50:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/read_only.rb:18:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/same_site_cookies.rb:27:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/basic_health_check.rb:25:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/request_context.rb:21:in `call&amp;#39;&amp;#34;,&amp;#34;config/initializers/fix_local_cache_middleware.rb:11:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/requests_rack_middleware.rb:74:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/release_env.rb:12:in `call&amp;#39;&amp;#34;],&amp;#34;db_duration_s&amp;#34;:0.23847,&amp;#34;view_duration_s&amp;#34;:0.0,&amp;#34;duration_s&amp;#34;:73.05203}&amp;#34;,&amp;#34;ua&amp;#34;:&amp;#34;Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0&amp;#34;,&amp;#34;correlation_id&amp;#34;:&amp;#34;01K3Q2F5DXP8Y33B25TW9SSMYM&amp;#34;,&amp;#34;meta.user&amp;#34;:&amp;#34;xxx&amp;#34;,&amp;#34;meta.project&amp;#34;:&amp;#34;xxx/xxx&amp;#34;,&amp;#34;meta.root_namespace&amp;#34;:&amp;#34;storage&amp;#34;,&amp;#34;meta.caller_id&amp;#34;:&amp;#34;ProjectsController#show&amp;#34;,&amp;#34;meta.remote_ip&amp;#34;:&amp;#34;10.17.7.63&amp;#34;,&amp;#34;meta.feature_category&amp;#34;:&amp;#34;projects&amp;#34;,&amp;#34;meta.client_id&amp;#34;:&amp;#34;user/74&amp;#34;,&amp;#34;redis_calls&amp;#34;:21,&amp;#34;redis_duration_s&amp;#34;:0.007123,&amp;#34;redis_read_bytes&amp;#34;:2997,&amp;#34;redis_write_bytes&amp;#34;:2370,&amp;#34;redis_cache_calls&amp;#34;:20,&amp;#34;redis_cache_duration_s&amp;#34;:0.006591,&amp;#34;redis_cache_read_bytes&amp;#34;:2816,&amp;#34;redis_cache_write_bytes&amp;#34;:1035,&amp;#34;redis_shared_state_calls&amp;#34;:1,&amp;#34;redis_shared_state_duration_s&amp;#34;:0.000532,&amp;#34;redis_shared_state_read_bytes&amp;#34;:181,&amp;#34;redis_shared_state_write_bytes&amp;#34;:1335,&amp;#34;db_count&amp;#34;:41,&amp;#34;db_write_count&amp;#34;:0,&amp;#34;db_cached_count&amp;#34;:10,&amp;#34;cpu_s&amp;#34;:2.291446,&amp;#34;mem_objects&amp;#34;:394125,&amp;#34;mem_bytes&amp;#34;:52397272,&amp;#34;mem_mallocs&amp;#34;:198648,&amp;#34;mem_total_bytes&amp;#34;:68162272,&amp;#34;queue_duration_s&amp;#34;:0.009214,&amp;#34;exception.class&amp;#34;:&amp;#34;Rack::Timeout::RequestTimeoutException&amp;#34;,&amp;#34;exception.message&amp;#34;:&amp;#34;Request ran for longer than 60000ms&amp;#34;,&amp;#34;exception.backtrace&amp;#34;:[&amp;#34;lib/gitlab/url_blocker.rb:113:in `getaddrinfo&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/url_blocker.rb:113:in `get_address_info&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/url_blocker.rb:48:in `validate!&amp;#39;&amp;#34;,&amp;#34;app/validators/addressable_url_validator.rb:83:in `validate_each&amp;#39;&amp;#34;,&amp;#34;app/models/badge.rb:43:in `build_rendered_url&amp;#39;&amp;#34;,&amp;#34;app/models/badge.rb:36:in `rendered_image_url&amp;#39;&amp;#34;,&amp;#34;app/models/badges/project_badge.rb:15:in `rendered_image_url&amp;#39;&amp;#34;,&amp;#34;app/views/projects/_home_panel.html.haml:93&amp;#34;,&amp;#34;app/views/projects/_home_panel.html.haml:89&amp;#34;,&amp;#34;app/views/projects/_home_panel.html.haml:87&amp;#34;,&amp;#34;app/views/projects/show.html.haml:14&amp;#34;,&amp;#34;app/controllers/application_controller.rb:128:in `render&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:538:in `block in allow_gitaly_ref_name_caching&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/gitaly_client.rb:341:in `allow_ref_name_caching&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:537:in `allow_gitaly_ref_name_caching&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:487:in `set_current_admin&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/session.rb:11:in `with_session&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:478:in `set_session_storage&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/i18n.rb:99:in `with_locale&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/i18n.rb:105:in `with_user_locale&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:472:in `set_locale&amp;#39;&amp;#34;,&amp;#34;app/controllers/application_controller.rb:466:in `set_current_context&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/rails_queue_duration.rb:33:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/rack_middleware.rb:16:in `block in call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/web_transaction.rb:21:in `run&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/rack_middleware.rb:16:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/speedscope.rb:13:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/request_profiler/middleware.rb:17:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/jira/middleware.rb:19:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/go.rb:20:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/etag_caching/middleware.rb:21:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/multipart.rb:172:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/read_only/controller.rb:50:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/read_only.rb:18:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/same_site_cookies.rb:27:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/basic_health_check.rb:25:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/request_context.rb:21:in `call&amp;#39;&amp;#34;,&amp;#34;config/initializers/fix_local_cache_middleware.rb:11:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/metrics/requests_rack_middleware.rb:74:in `call&amp;#39;&amp;#34;,&amp;#34;lib/gitlab/middleware/release_env.rb:12:in `call&amp;#39;&amp;#34;],&amp;#34;db_duration_s&amp;#34;:0.23847,&amp;#34;view_duration_s&amp;#34;:0.0,&amp;#34;duration_s&amp;#34;:73.05203}
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;问题分析&#34;&gt;问题分析&lt;/h1&gt;
&lt;p&gt;经过 claude 的分析，发现是 badge 加载失败导致的&lt;/p&gt;</description>
    </item>
    <item>
      <title>harbor Chartmuseum helm 图表缓存刷新</title>
      <link>https://frytea.com/archives/1515/</link>
      <pubDate>Thu, 28 Aug 2025 14:33:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1515/</guid>
      <description>&lt;p&gt;harbor 集成 Chartmuseum 实现 helm 图表的存储。&lt;/p&gt;
&lt;p&gt;Chartmuseum 对于图表索引缓存的处理有问题，删除、重传 chart 不会刷新索引，需要手动刷新。&lt;/p&gt;
&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;操作步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;停止 harbor，例如： &lt;code&gt;docker compose stop&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;删除 &lt;code&gt;/data/chart_storage/{project}/index-cache.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;删除 &lt;code&gt;/data/redis/*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启动 harbor，例如： &lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;记得备份。&lt;/p&gt;</description>
    </item>
    <item>
      <title>grep exclude 排除</title>
      <link>https://frytea.com/archives/1514/</link>
      <pubDate>Thu, 28 Aug 2025 14:32:39 +0000</pubDate>
      <guid>https://frytea.com/archives/1514/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--exclude=FILE_PATTERN  skip files and directories matching FILE_PATTERN
--exclude-from=FILE     skip files matching any file pattern from FILE
--exclude-dir=PATTERN   directories that match PATTERN will be skipped.
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;refs&#34;&gt;Refs:&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/pengdonglin137/p/3569218.html&#34;&gt;grep时排除指定的文件和目录&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Debian 11 &#43; PVE LACP Mac 冲突问题调查与解决方案</title>
      <link>https://frytea.com/archives/1512/</link>
      <pubDate>Fri, 15 Aug 2025 00:25:46 +0000</pubDate>
      <guid>https://frytea.com/archives/1512/</guid>
      <description>&lt;p&gt;By TL.S&lt;/p&gt;
&lt;h2 id=&#34;问题背景&#34;&gt;问题背景&lt;/h2&gt;
&lt;p&gt;在Debian 11 + Proxmox VE环境中，当配置LACP（Link Aggregation Control Protocol）绑定接口时，有一个环境遇到一个令人困惑的问题：&lt;strong&gt;相同硬件配置的多台服务器上，所有服务器的同名bond接口都被分配了相同的MAC地址&lt;/strong&gt;。这种情况会导致严重的网络连接问题，特别是在集群环境中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Code 实用技巧</title>
      <link>https://frytea.com/archives/1509/</link>
      <pubDate>Thu, 07 Aug 2025 14:43:03 +0000</pubDate>
      <guid>https://frytea.com/archives/1509/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;CLAUDE.md（规则文件）＝ 冰箱家规
先把“进门换鞋、10点关灯、刀具归位”写清楚，Claude 做任何事之前都要看一遍并遵守。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Task（多任务并行）＝ 多台家电同时干活
扫地机器人+洗碗机+空调一起开工，Claude 同时跑多个任务，效率翻倍。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS 7 重置 root 密码</title>
      <link>https://frytea.com/archives/1508/</link>
      <pubDate>Thu, 07 Aug 2025 14:34:31 +0000</pubDate>
      <guid>https://frytea.com/archives/1508/</guid>
      <description>&lt;h1 id=&#34;引言&#34;&gt;引言&lt;/h1&gt;
&lt;p&gt;很多遗留系统都采用 CentOS 系统，经常出现忘记密码，故在此记录方法。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以下内容转自  &lt;a href=&#34;https://jaminzhang.github.io/linux/CentOS-7-Reset-root-Password/&#34;&gt;CentOS 7 重置 root 密码&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;centos-7-重置-root-密码&#34;&gt;CentOS 7 重置 root 密码&lt;/h1&gt;
&lt;p&gt;与之前的 CentOS 5、 CentOS 6 不同的是，当忘记 CentOS 7 root 密码，并采用 GRUB2 为启动器时，&lt;br&gt;
将无法通过单用户模式重置 root 密码，下面介绍 CentOS 7 如何重置 root 密码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>telnet 如何退出</title>
      <link>https://frytea.com/archives/1507/</link>
      <pubDate>Thu, 07 Aug 2025 14:33:53 +0000</pubDate>
      <guid>https://frytea.com/archives/1507/</guid>
      <description>&lt;p&gt;telnet 的退出 分成两种，一中是在telnet命令中，直接输入 quit 或者 q 即可退出。 二种情况是 已经进入了端口中，需要先从端口中退出，然后再退出telnet。&lt;/p&gt;</description>
    </item>
    <item>
      <title>kubernetes 的挂载传播(mount propagation)机制</title>
      <link>https://frytea.com/archives/1506/</link>
      <pubDate>Thu, 07 Aug 2025 14:31:47 +0000</pubDate>
      <guid>https://frytea.com/archives/1506/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;以下内容转载自：&lt;a href=&#34;https://www.myway5.com/index.php/2020/04/05/kubernetes-mount-propagation/&#34;&gt;kubernetes 的挂载传播(mount propagation)机制&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;今天在看 &lt;a href=&#34;https://github.com/aylei/kubectl-debug&#34;&gt;kubectl-debug&lt;/a&gt; 这个项目的时候，看到其部署文件的 volumeMounuts 中使用了一个 mountPropagation 字段，因为不清楚这个字段的作用，就做了一下了解。mount propagation 背后的东西还是很多的，因此整理了这篇文章，顺便梳理一下知识点。&lt;/p&gt;</description>
    </item>
    <item>
      <title>vim 将命令输出到当前位置</title>
      <link>https://frytea.com/archives/1505/</link>
      <pubDate>Thu, 07 Aug 2025 14:31:18 +0000</pubDate>
      <guid>https://frytea.com/archives/1505/</guid>
      <description>&lt;p&gt;在Vim 中，可以使用 &lt;code&gt;:read !command&lt;/code&gt; 命令将外部命令 &lt;code&gt;command&lt;/code&gt; 的输出插入到当前光标所在位置的下一行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>harbor 替换 ssl 证书</title>
      <link>https://frytea.com/archives/1504/</link>
      <pubDate>Thu, 07 Aug 2025 14:31:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1504/</guid>
      <description>&lt;p&gt;最近内网 harbor 经常迁移，迁移到新地址后 ssl 证书需针对新的地址签发。（当然如果你直接使用 http 就不会有这个烦恼，至于为什么i不直接使用 http 就不多说了）。&lt;/p&gt;
&lt;p&gt;这里记录一下签发新的 ssl 证书并迁移的命令，方便后面使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI提效之使用 cherry-studio &#43; k8sgpt 实现 AI 巡检 k8s</title>
      <link>https://frytea.com/archives/1502/</link>
      <pubDate>Tue, 29 Jul 2025 01:43:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1502/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/k8sgpt-ai/k8sgpt&#34;&gt;&lt;code&gt;k8sgpt&lt;/code&gt;&lt;/a&gt; 能够赋予每个人的 &lt;code&gt;Kubernetes&lt;/code&gt; 超能力，能够用简单的语言扫描 &lt;code&gt;Kubernetes&lt;/code&gt; 集群、诊断和分类问题。利用 &lt;code&gt;k8sgpt&lt;/code&gt; 的 &lt;code&gt;mcp&lt;/code&gt; 服务，可以为 LLM 赋予访问 k8s 集群的可能性。&lt;/p&gt;
&lt;p&gt;工作原理图：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;sequenceDiagram
    actor U as User
    participant CS as Cherry Studio
    participant KG as k8sgpt
    participant K as K8s API Server
    U-&amp;gt;&amp;gt;+CS: Add k8sgpt MCP server
    CS-&amp;gt;&amp;gt;+KG: Check k8sgpt
    KG--&amp;gt;&amp;gt;-CS: k8sgpt is work
    CS--&amp;gt;&amp;gt;-U: Success to Add MCP

    U-&amp;gt;&amp;gt;+CS: Ask some Question about K8s cluster
    CS-&amp;gt;&amp;gt;+KG: Get someinfo throuth MCP
    KG-&amp;gt;&amp;gt;+K: Get Cluster Info By API
    K--&amp;gt;&amp;gt;-KG: Return Cluster info
    KG--&amp;gt;&amp;gt;-CS: Return Info About K8s
    CS--&amp;gt;&amp;gt;CS: Handle Info
    CS--&amp;gt;&amp;gt;-U: Return Answer about K8s cluster
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;安装-k8sgpt&#34;&gt;安装 k8sgpt&lt;/h2&gt;
&lt;p&gt;首先安装 k8sgpt 工具：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Code Subagents 快速开始</title>
      <link>https://frytea.com/archives/1501/</link>
      <pubDate>Tue, 29 Jul 2025 01:26:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1501/</guid>
      <description>&lt;p&gt;在Claude Code中的AI子代理，可用于特定任务的工作流程和改进的上下文管理。&lt;/p&gt;
&lt;p&gt;Claude Code中的自定义子代理是专门的AI助手，可以被调用来处理特定类型的任务。它们通过提供具有自定义系统提示、工具和独立上下文窗口的特定任务配置，实现更高效的问题解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 自签名 CA 证书安装方法</title>
      <link>https://frytea.com/archives/1495/</link>
      <pubDate>Fri, 11 Jul 2025 09:55:40 +0000</pubDate>
      <guid>https://frytea.com/archives/1495/</guid>
      <description>&lt;p&gt;在 Linux 中运行 docker, containerd, helm 等应用时需要信任自签署证书保护的内部仓库服务，此时需要注入自签名 CA 证书，以 Ubunut 为例。在 Ubuntu 系统中，CA 证书信任主要存储在以下目录：&lt;/p&gt;</description>
    </item>
    <item>
      <title>SEMrush vs Ahrefs vs SimilarWeb 功能对比表</title>
      <link>https://frytea.com/archives/1493/</link>
      <pubDate>Wed, 02 Jul 2025 10:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1493/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;By Claude Sonnet 4&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;功能对比表&#34;&gt;功能对比表&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;功能特性&lt;/th&gt;
          &lt;th&gt;SEMrush&lt;/th&gt;
          &lt;th&gt;Ahrefs&lt;/th&gt;
          &lt;th&gt;SimilarWeb&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;关键词研究&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 强大的关键词工具&lt;br&gt;• 关键词难度分析&lt;br&gt;• 相关关键词建议&lt;br&gt;• 搜索量数据&lt;/td&gt;
          &lt;td&gt;✅ 优秀的关键词工具&lt;br&gt;• Keywords Explorer&lt;br&gt;• 点击量预测&lt;br&gt;• 父主题分析&lt;/td&gt;
          &lt;td&gt;⚠️ 基础关键词数据&lt;br&gt;• 主要关注流量分析&lt;br&gt;• 关键词功能相对有限&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;反向链接分析&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 全面的外链分析&lt;br&gt;• 外链审计工具&lt;br&gt;• 竞争对手外链&lt;br&gt;• Link Building工具&lt;/td&gt;
          &lt;td&gt;⭐ 业界最强外链数据&lt;br&gt;• 最大的活跃爬虫&lt;br&gt;• Site Explorer功能&lt;br&gt;• 外链质量评估&lt;/td&gt;
          &lt;td&gt;❌ 不提供外链分析&lt;br&gt;• 主要专注流量数据&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;网站流量分析&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 流量分析工具&lt;br&gt;• 有机搜索流量&lt;br&gt;• 付费流量分析&lt;br&gt;• 社交媒体流量&lt;/td&gt;
          &lt;td&gt;✅ 基础流量估算&lt;br&gt;• 主要通过搜索数据&lt;br&gt;• 流量价值计算&lt;/td&gt;
          &lt;td&gt;⭐ 最详细的流量数据&lt;br&gt;• 直接流量测量&lt;br&gt;• 用户行为分析&lt;br&gt;• 移动vs桌面流量&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;竞争对手分析&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 全面竞争分析&lt;br&gt;• 竞争对手关键词&lt;br&gt;• 广告策略分析&lt;br&gt;• 市场份额数据&lt;/td&gt;
          &lt;td&gt;✅ 强大竞争分析&lt;br&gt;• 内容差距分析&lt;br&gt;• 竞争对手外链&lt;br&gt;• 排名对比&lt;/td&gt;
          &lt;td&gt;⭐ 最佳行业分析&lt;br&gt;• 市场情报&lt;br&gt;• 受众重叠分析&lt;br&gt;• 行业基准对比&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;技术SEO审计&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 全面站点审计&lt;br&gt;• 技术问题检测&lt;br&gt;• 页面优化建议&lt;br&gt;• 站点健康评分&lt;/td&gt;
          &lt;td&gt;✅ 优秀站点审计&lt;br&gt;• Site Audit工具&lt;br&gt;• 技术问题优先级&lt;br&gt;• 页面速度分析&lt;/td&gt;
          &lt;td&gt;❌ 不提供技术SEO工具&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;内容营销&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 内容营销工具&lt;br&gt;• 话题研究&lt;br&gt;• 内容审计&lt;br&gt;• 社交媒体调度&lt;/td&gt;
          &lt;td&gt;✅ 内容研究工具&lt;br&gt;• Content Explorer&lt;br&gt;• 热门内容分析&lt;br&gt;• 内容差距分析&lt;/td&gt;
          &lt;td&gt;⚠️ 内容表现数据&lt;br&gt;• 社交分享数据&lt;br&gt;• 内容趋势分析&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;广告智能&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;⭐ 最强PPC分析&lt;br&gt;• Google Ads分析&lt;br&gt;• 展示广告研究&lt;br&gt;• 购物广告数据&lt;br&gt;• 广告文案分析&lt;/td&gt;
          &lt;td&gt;✅ 基础PPC数据&lt;br&gt;• 付费搜索分析&lt;br&gt;• 广告历史数据&lt;/td&gt;
          &lt;td&gt;✅ 展示广告分析&lt;br&gt;• 广告网络数据&lt;br&gt;• 创意广告研究&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;本地SEO&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 本地SEO工具&lt;br&gt;• 本地排名跟踪&lt;br&gt;• Google我的商家管理&lt;/td&gt;
          &lt;td&gt;⚠️ 基础本地SEO功能&lt;/td&gt;
          &lt;td&gt;❌ 不专注本地SEO&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;报告功能&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 丰富报告模板&lt;br&gt;• 自定义报告&lt;br&gt;• 自动化报告&lt;br&gt;• 品牌化报告&lt;/td&gt;
          &lt;td&gt;✅ 清晰的报告&lt;br&gt;• 数据导出&lt;br&gt;• API访问&lt;/td&gt;
          &lt;td&gt;✅ 专业报告&lt;br&gt;• 行业报告&lt;br&gt;• 高级数据可视化&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;数据准确性&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 良好准确性&lt;br&gt;• 大量数据源&lt;br&gt;• 定期更新&lt;/td&gt;
          &lt;td&gt;⭐ 高度准确&lt;br&gt;• 实时数据更新&lt;br&gt;• 最新外链数据&lt;/td&gt;
          &lt;td&gt;⭐ 最准确流量数据&lt;br&gt;• 直接测量&lt;br&gt;• 面板数据&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;-价格对比&#34;&gt;💰 价格对比&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;工具&lt;/th&gt;
          &lt;th&gt;起始价格&lt;/th&gt;
          &lt;th&gt;主要套餐&lt;/th&gt;
          &lt;th&gt;企业级&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;SEMrush&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;$119.95/月&lt;/td&gt;
          &lt;td&gt;Pro套餐&lt;/td&gt;
          &lt;td&gt;定制价格&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Ahrefs&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;$99/月&lt;/td&gt;
          &lt;td&gt;Lite套餐&lt;/td&gt;
          &lt;td&gt;$999/月&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;SimilarWeb&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;定制价格&lt;/td&gt;
          &lt;td&gt;企业级定价&lt;/td&gt;
          &lt;td&gt;高端定制&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;-选择建议&#34;&gt;🎯 选择建议&lt;/h2&gt;
&lt;h3 id=&#34;选择-semrush-如果您需要&#34;&gt;选择 &lt;strong&gt;SEMrush&lt;/strong&gt; 如果您需要：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;全方位的数字营销工具套件&lt;/li&gt;
&lt;li&gt;强大的PPC广告分析&lt;/li&gt;
&lt;li&gt;社交媒体管理功能&lt;/li&gt;
&lt;li&gt;本地SEO优化&lt;/li&gt;
&lt;li&gt;内容营销和调度工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;选择-ahrefs-如果您需要&#34;&gt;选择 &lt;strong&gt;Ahrefs&lt;/strong&gt; 如果您需要：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;最准确的反向链接数据&lt;/li&gt;
&lt;li&gt;深度的SEO分析&lt;/li&gt;
&lt;li&gt;内容研究和差距分析&lt;/li&gt;
&lt;li&gt;技术SEO审计&lt;/li&gt;
&lt;li&gt;清晰直观的用户界面&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;选择-similarweb-如果您需要&#34;&gt;选择 &lt;strong&gt;SimilarWeb&lt;/strong&gt; 如果您需要：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;最准确的网站流量数据&lt;/li&gt;
&lt;li&gt;深入的行业和市场分析&lt;/li&gt;
&lt;li&gt;竞争情报和基准对比&lt;/li&gt;
&lt;li&gt;用户行为和受众分析&lt;/li&gt;
&lt;li&gt;企业级市场研究&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-最终建议&#34;&gt;💡 最终建议&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;初创公司/小企业&lt;/strong&gt;：推荐 Ahrefs（性价比高，功能全面）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;营销代理商&lt;/strong&gt;：推荐 SEMrush（工具最全面，报告功能强）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大型企业/市场研究&lt;/strong&gt;：推荐 SimilarWeb（数据最准确，分析最深入）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以考虑先试用免费版本或申请演示，根据具体需求做最终决定。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 进程绑定NUMA节点或CPU核心</title>
      <link>https://frytea.com/archives/1488/</link>
      <pubDate>Thu, 05 Jun 2025 09:20:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1488/</guid>
      <description>&lt;p&gt;对于CPU和NUMA架构的介绍本文不再做叙述，感兴趣的可自行查看：&lt;a href=&#34;https://www.cnblogs.com/Xinenhui/p/17972709&#34;&gt;Linux&amp;ndash;CPU简述&lt;/a&gt;，&lt;a href=&#34;https://www.cnblogs.com/Xinenhui/p/17897482.html&#34;&gt;Linux&amp;ndash;内存管理浅谈&lt;/a&gt;。&lt;/p&gt;
&lt;h1 id=&#34;进程绑定numa节点或cpu核心的意义&#34;&gt;进程绑定NUMA节点或cpu核心的意义&lt;/h1&gt;
&lt;p&gt;NUMA 架构将内存和cpu分散在不同的 NUMA 节点上，每个节点都有自己的本地内存和cpu处理器，&lt;strong&gt;将进程绑定到特定的 NUMA 节点或cpu上，可以让进程直接访问本地内存和CPU，减少访问远程节点开销，提高访问速度，从而提高程序性能&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>判断GPT是否降智的几个问题</title>
      <link>https://frytea.com/archives/1487/</link>
      <pubDate>Thu, 05 Jun 2025 09:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1487/</guid>
      <description>&lt;h1 id=&#34;判别方法&#34;&gt;判别方法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;以下问题，问3-4次&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;要多问几次，有的第一次不会降，其实问一次就被标记了，新开两三个对话再问一下&lt;/p&gt;
&lt;h2 id=&#34;方法一小数点数字比大小&#34;&gt;方法一：小数点数字比大小&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;6.9 和 6.11 哪一个大？&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;降智回答：6.11大&lt;br&gt;
正确回答：也会出错，但会分析纠正，得出6.9更大&lt;/p&gt;</description>
    </item>
    <item>
      <title>Harmony next hap 安装</title>
      <link>https://frytea.com/archives/1486/</link>
      <pubDate>Wed, 28 May 2025 15:08:58 +0000</pubDate>
      <guid>https://frytea.com/archives/1486/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;./hdc shell
hdc app install -r xxx.hap
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.huawei.com/consumer/cn/blog/topic/03137966529669104&#34;&gt;【TOOLS使用】OpenHarmony命令行工具hdc安装应用指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ost.51cto.com/posts/25430#5FOH_44&#34;&gt;OpenHarmony设备安装hap应用的5种方式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/likuai2010/auto-installer&#34;&gt;https://github.com/likuai2010/auto-installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/likuai2010/ClashMeta&#34;&gt;https://github.com/likuai2010/ClashMeta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[OpenHarmony设备安装hap应用的5种方式](&lt;a href=&#34;https://www.bearkey.net/thread&#34;&gt;https://www.bearkey.net/thread&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>k3s k8s 快速部署轻量节点监控方案 beszel</title>
      <link>https://frytea.com/archives/1484/</link>
      <pubDate>Thu, 08 May 2025 13:21:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1484/</guid>
      <description>&lt;p&gt;在逛 Reddit 时看到 &lt;a href=&#34;https://www.reddit.com/r/selfhosted/comments/1kho3qe/what_are_some_very_simple_status_dashboards/&#34;&gt;这篇帖子&lt;/a&gt; 发现 &lt;a href=&#34;https://beszel.dev/&#34;&gt;beszel&lt;/a&gt; 这个熟悉又陌生的名字。看了一下官网发现还支持 kubernetes 的部署，直接使用 &lt;code&gt;daemonset&lt;/code&gt; 就可以在所有节点自动部署 &lt;code&gt;agent&lt;/code&gt; ，虽然还需要手动在 &lt;code&gt;hub&lt;/code&gt; 添加，但已经很方便,用了一下不错。&lt;/p&gt;</description>
    </item>
    <item>
      <title>k3s-k8s 实现 DevOps 方案横向对比</title>
      <link>https://frytea.com/archives/1483/</link>
      <pubDate>Wed, 07 May 2025 10:03:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1483/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;目前在用 Keel，感觉良好。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;主流方案对比&#34;&gt;主流方案对比&lt;/h1&gt;
&lt;p&gt;以下是几种可以在 K3s 中实现轻量级 DevOps 解决方案对比：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;方案&lt;/th&gt;
          &lt;th&gt;资源占用&lt;/th&gt;
          &lt;th&gt;易用性&lt;/th&gt;
          &lt;th&gt;Web UI&lt;/th&gt;
          &lt;th&gt;集成能力&lt;/th&gt;
          &lt;th&gt;配置复杂度&lt;/th&gt;
          &lt;th&gt;特点&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;ArgoCD&lt;/td&gt;
          &lt;td&gt;中等&lt;/td&gt;
          &lt;td&gt;★★★★☆&lt;/td&gt;
          &lt;td&gt;优秀&lt;/td&gt;
          &lt;td&gt;原生支持 Git/镜像更新&lt;/td&gt;
          &lt;td&gt;中等&lt;/td&gt;
          &lt;td&gt;GitOps 专注，声明式部署&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;FluxCD&lt;/td&gt;
          &lt;td&gt;低&lt;/td&gt;
          &lt;td&gt;★★★☆☆&lt;/td&gt;
          &lt;td&gt;基础(最新版改进)&lt;/td&gt;
          &lt;td&gt;原生支持 Git/镜像更新&lt;/td&gt;
          &lt;td&gt;中等&lt;/td&gt;
          &lt;td&gt;GitOps 专注，自动化程度高&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Drone&lt;/td&gt;
          &lt;td&gt;低&lt;/td&gt;
          &lt;td&gt;★★★★☆&lt;/td&gt;
          &lt;td&gt;优秀&lt;/td&gt;
          &lt;td&gt;需配置触发器&lt;/td&gt;
          &lt;td&gt;低&lt;/td&gt;
          &lt;td&gt;轻量级，无需 CRD&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Jenkins X&lt;/td&gt;
          &lt;td&gt;高&lt;/td&gt;
          &lt;td&gt;★★☆☆☆&lt;/td&gt;
          &lt;td&gt;良好&lt;/td&gt;
          &lt;td&gt;丰富&lt;/td&gt;
          &lt;td&gt;高&lt;/td&gt;
          &lt;td&gt;功能全面但较重&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Tekton&lt;/td&gt;
          &lt;td&gt;中等&lt;/td&gt;
          &lt;td&gt;★★★☆☆&lt;/td&gt;
          &lt;td&gt;需安装Dashboard&lt;/td&gt;
          &lt;td&gt;高度可定制&lt;/td&gt;
          &lt;td&gt;中高&lt;/td&gt;
          &lt;td&gt;云原生管道&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Keel&lt;/td&gt;
          &lt;td&gt;极低&lt;/td&gt;
          &lt;td&gt;★★★★★&lt;/td&gt;
          &lt;td&gt;简单&lt;/td&gt;
          &lt;td&gt;专注镜像更新&lt;/td&gt;
          &lt;td&gt;极低&lt;/td&gt;
          &lt;td&gt;超轻量，专注自动部署&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;方案详细分析&#34;&gt;方案详细分析&lt;/h1&gt;
&lt;h2 id=&#34;1-argocd&#34;&gt;1. ArgoCD&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;优势：&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>k8s 配置访问私有镜像仓库</title>
      <link>https://frytea.com/archives/1482/</link>
      <pubDate>Wed, 07 May 2025 06:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1482/</guid>
      <description>&lt;p&gt;harbor 私有仓库、aliyun acr 等同理。&lt;/p&gt;
&lt;h1 id=&#34;创建凭据&#34;&gt;创建凭据&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;以创建 &lt;code&gt;docker-registry-creds&lt;/code&gt; 为例，按需调整名称&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl create secret docker-registry docker-registry-creds --docker-server&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;私有仓库域名&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--docker-email&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;test@test.com 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--docker-username&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;******&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--docker-password&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;******&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 参数解释&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --docker-server 是私有docker仓库全限定域名(FQDN)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --docker-username 是机器人账户的username，需要用单引号引起来。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --docker-password 是机器人账户生成的token，需要用单引号引起来。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --docker-email 是docker邮箱（非必须）。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 这样就成功地将集群中的docker凭据设置为名为docker-registry-creds的secret。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;使用凭据&#34;&gt;使用凭据&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;containers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;&amp;lt;私有仓库域名&amp;gt;/kubernetes/nginx:latest &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;containerPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;imagePullSecrets&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;docker-registry-creds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/even160941/p/15504870.html&#34;&gt;Kubernetes配置Secret访问Harbor私有镜像仓库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>GoAccess 分析多网站日志方法</title>
      <link>https://frytea.com/archives/1481/</link>
      <pubDate>Tue, 29 Apr 2025 03:59:14 +0000</pubDate>
      <guid>https://frytea.com/archives/1481/</guid>
      <description>&lt;p&gt;&lt;strong&gt;GoAccess&lt;/strong&gt; 是一个开源的&lt;strong&gt;实时&lt;/strong&gt; &lt;strong&gt;网络日志分析器&lt;/strong&gt;和交互式查看器，可以在 &lt;code&gt;*nix&lt;/code&gt; 系统的&lt;strong&gt;终端&lt;/strong&gt;中或通过&lt;strong&gt;浏览器&lt;/strong&gt;运行。
&lt;img alt=&#34;cli&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/04/29/j5g5tq.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;browser&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/04/29/j5ks1p.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;默认情况下，&lt;code&gt;goacccess&lt;/code&gt; 分析 &lt;code&gt;COMBINED&lt;/code&gt; 类型的日志，也是 nginx/apache 默认的形式。&lt;code&gt;goaccess&lt;/code&gt; 是支持多站点分析的，根据官网说法，只要日志格式中带有 &lt;code&gt;%v&lt;/code&gt; 就会开启，其实比较简单的做法是使用 &lt;code&gt;VCOMBINED&lt;/code&gt; 类型的日志分析即可。想要分析 &lt;code&gt;VCOMBINED&lt;/code&gt; 类型的日志，需要在 &lt;code&gt;nginx&lt;/code&gt; 等日志中做一点点细微的调整。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Octant - 以开发人员为中心的开源 Kubernetes Web 界面</title>
      <link>https://frytea.com/archives/1480/</link>
      <pubDate>Mon, 28 Apr 2025 09:13:17 +0000</pubDate>
      <guid>https://frytea.com/archives/1480/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Octant 是一个以开发人员为中心的开源 Kubernetes Web 界面，可让您检查 Kubernetes 集群及其应用程序，能够帮助开发人员更好理解 Kubernetes 集群复杂性的平台。在&lt;a href=&#34;https://www.youtube.com/watch?v=jpBfgJpTcfw&amp;amp;t=129s&amp;amp;ab_channel=Kubernetes&#34;&gt;这里&lt;/a&gt;发现的。&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;虽然 &lt;strong&gt;VMware 已结束该项目的积极开发&lt;/strong&gt; ，但看起来确实很好用，收藏备用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tailscale 自建 DERP 并配置 SSL 完整教程</title>
      <link>https://frytea.com/archives/1479/</link>
      <pubDate>Tue, 22 Apr 2025 13:38:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1479/</guid>
      <description>&lt;p&gt;Tailscale 在很多场景有着广泛应用，&lt;code&gt;k3s&lt;/code&gt; 天然有针对它的支持，最近在基于这个方案构建遍布全球的分布式私有网络。官方的 &lt;code&gt;DERP&lt;/code&gt; 服务质量并不稳定， 自建后稳定很多，本文记录详细的过程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenManus 使用记录</title>
      <link>https://frytea.com/archives/1478/</link>
      <pubDate>Mon, 21 Apr 2025 08:35:45 +0000</pubDate>
      <guid>https://frytea.com/archives/1478/</guid>
      <description>&lt;h1 id=&#34;安装运行&#34;&gt;安装运行&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装 uv（一个快速的 Python 包管理器）：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl -LsSf https://astral.sh/uv/install.sh | sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 克隆仓库：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git clone https://github.com/mannaandpoem/OpenManus.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd OpenManus
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 创建并激活虚拟环境：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ uv venv --python 3.12
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ source .venv/bin/activate  &lt;span style=&#34;color:#75715e&#34;&gt;# Unix/macOS 系统&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Windows 系统使用：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# .venv\Scripts\activate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装依赖：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ uv pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 浏览器自动化工具（可选）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ playwright install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 在 config 目录创建 config.toml 文件（可从示例复制）：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cp config/config.example.toml config/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ vim config/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 一行命令运行 OpenManus：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ python main.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;实际效果&#34;&gt;实际效果&lt;/h1&gt;
&lt;p&gt;开始执行：&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 Nginx Ingress returns 413 Entity Too Large</title>
      <link>https://frytea.com/archives/1475/</link>
      <pubDate>Mon, 21 Apr 2025 08:34:15 +0000</pubDate>
      <guid>https://frytea.com/archives/1475/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;配置 &lt;code&gt;ingress&lt;/code&gt; 服务时调整一下大小即可：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress-with-annotations
  annotations:
    nginx.org/proxy-connect-timeout: &amp;#34;30s&amp;#34;
    nginx.org/proxy-read-timeout: &amp;#34;20s&amp;#34;
    nginx.org/client-max-body-size: &amp;#34;4m&amp;#34;
    nginx.org/server-snippets: |
      location / {
        return 302 /coffee;
      }      
spec:
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /tea
        pathType: Prefix
        backend:
          service:
            name: tea-svc
            port:
              number: 80
      - path: /coffee
        pathType: Prefix
        backend:
          service:
            name: coffee-svc
            port:
              number: 80
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/64759983/nginx-ingress-returns-413-entity-too-large&#34;&gt;Nginx Ingress returns 413 Entity Too Large&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/#using-annotations&#34;&gt;Advanced configuration with Annotations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>绘图模型效果对比之城市气象</title>
      <link>https://frytea.com/archives/1476/</link>
      <pubDate>Mon, 21 Apr 2025 08:34:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1476/</guid>
      <description>&lt;h1 id=&#34;promot&#34;&gt;Promot&lt;/h1&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;A highly detailed and photorealistic image of Akmenė, Pemagatshel, Lithuania, during a cloudy day with a temperature feel of 7.0°C. The scene captures the historic Church of St. John the Baptist, its intricate brickwork and architectural features glistening from recent rain. The wet pavement reflects the overcast sky, which is 76.0% cloud covered, creating a soft, diffused light that highlights the textures of the buildings and surrounding lush greenery. The foreground includes puddles forming on the cobblestone streets, while the background features dense, misty forests framing the town. The composition employs the rule of thirds, with the church positioned to the right, leading lines from the street guiding the viewer’s eye through the scene. The lighting enhances the mood, maintaining clarity and brightness, with details visible in the shadows. The overall atmosphere is tranquil and inviting, embodying the rich cultural heritage and natural beauty of Akmenė.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Refs: &lt;a href=&#34;https://todayaiweather.com/cities/akmene/weather/2025-04-21-fa0d310b-ff01-41e7-a002-c33f735aa311&#34;&gt;Akmenė, Lithuania Weather Art&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】k8s 认知路线</title>
      <link>https://frytea.com/archives/1474/</link>
      <pubDate>Mon, 21 Apr 2025 08:11:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1474/</guid>
      <description>&lt;h1 id=&#34;from-v&#34;&gt;From V&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;以下内容转载自 &lt;a href=&#34;https://www.v2ex.com/t/968514#r_13557021&#34;&gt;https://www.v2ex.com/t/968514#r_13557021&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;k8s 这个东西真的内容太多了，没有啥系统性的资料，里面各种知识点真的没法说，太多了，最好的就是看官方文档，并且结合工作当中的实践慢慢积累，才能由浅入深，只是看文档想掌握深点，个人感觉很困难。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenFOAM 两大分支的详细比较</title>
      <link>https://frytea.com/archives/1473/</link>
      <pubDate>Mon, 21 Apr 2025 03:05:26 +0000</pubDate>
      <guid>https://frytea.com/archives/1473/</guid>
      <description>&lt;p&gt;OpenFOAM 的两个主要分支源自同一项目，但在 2011 年后走上了不同的发展道路。下面详细比较这两个版本的历史、版本发布情况、技术差异和适用场景。&lt;/p&gt;
&lt;h2 id=&#34;历史背景&#34;&gt;历史背景&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;分叉原因&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenFOAM 最初由 Henry Weller 和他的团队在 20 世纪 90 年代开发&lt;/li&gt;
&lt;li&gt;2004 年成立了 OpenCFD Ltd 公司商业化 OpenFOAM&lt;/li&gt;
&lt;li&gt;2011 年，SGI (Silicon Graphics International) 收购了 OpenCFD Ltd&lt;/li&gt;
&lt;li&gt;2012 年，ESI Group 从 SGI 购买了 OpenCFD Ltd&lt;/li&gt;
&lt;li&gt;这一系列收购后，原开发团队的一部分成立了 OpenFOAM Foundation，分叉了代码库&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;版本发布历史&#34;&gt;版本发布历史&lt;/h2&gt;
&lt;h3 id=&#34;openfoam-foundation-版本&#34;&gt;OpenFOAM Foundation 版本&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;命名规则&lt;/strong&gt;：使用版本号（如 v2106, v2212）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;发布频率&lt;/strong&gt;：通常每年 1-2 次大版本&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;版本轨迹&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;v2.0.0（2011 年，首个独立版本）&lt;/li&gt;
&lt;li&gt;v2.3.0（2014 年）&lt;/li&gt;
&lt;li&gt;v4.0（2016 年）&lt;/li&gt;
&lt;li&gt;v7（2019 年）&lt;/li&gt;
&lt;li&gt;v9（2021 年）&lt;/li&gt;
&lt;li&gt;v10（2022 年）&lt;/li&gt;
&lt;li&gt;v11（2023 年）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;openfoam-plus-版本&#34;&gt;OpenFOAM+ (plus) 版本&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;命名规则&lt;/strong&gt;：使用年份+月份（如 v1906, v2206）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;发布频率&lt;/strong&gt;：每年 2 次，通常在 6 月和 12 月&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;版本轨迹&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;v3.0+（2015 年）&lt;/li&gt;
&lt;li&gt;v1606+（2016 年）&lt;/li&gt;
&lt;li&gt;v1806+（2018 年）&lt;/li&gt;
&lt;li&gt;v2006（2020 年）&lt;/li&gt;
&lt;li&gt;v2206（2022 年）&lt;/li&gt;
&lt;li&gt;v2312（2023 年）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;技术差异&#34;&gt;技术差异&lt;/h2&gt;
&lt;h3 id=&#34;1-代码结构与架构&#34;&gt;1. 代码结构与架构&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Foundation 版本&lt;/strong&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>第一个 CUDA 程序之矩阵运算计算效能对比</title>
      <link>https://frytea.com/archives/1472/</link>
      <pubDate>Sat, 19 Apr 2025 02:21:24 +0000</pubDate>
      <guid>https://frytea.com/archives/1472/</guid>
      <description>&lt;p&gt;这是一个使用 CUDA 进行编程的实际例子，对比 CPU 和 GPU 在执行矩阵乘法时的性能差异。&lt;/p&gt;
&lt;h1 id=&#34;运行效果&#34;&gt;运行效果&lt;/h1&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;(base) root@gpu-1095cf160ec353b4e35a9-1-zqa76jnvthlx:~/data/CUDA/first# ./gpu_matrix_mult
GPU 执行时间: 0.000475046 秒
(base) root@gpu-1095cf160ec353b4e35a9-1-zqa76jnvthlx:~/data/CUDA/first# ./cpu_matrix_mult 
CPU 执行时间: 14.3784 秒
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;程序实例&#34;&gt;程序实例&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;示例：矩阵乘法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;矩阵乘法是一个非常适合用 GPU 加速的计算密集型任务。我们将实现一个简单的矩阵乘法，分别在 CPU 和 GPU 上运行，并比较它们的执行时间。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Archlinux KDE Apache JMeter 配置高分屏缩放</title>
      <link>https://frytea.com/archives/1471/</link>
      <pubDate>Thu, 17 Apr 2025 06:11:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1471/</guid>
      <description>&lt;p&gt;ArchLinux 下安装 &lt;code&gt;jmeter&lt;/code&gt; 很简单：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;yay -S jmeter
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;但是在现代高分辨率显示器下 GUI 的字体和图标都很小 ：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;JMeter 缩放前&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2025/04/17/n8u28t.webp&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;查阅文档后发现只需带有一个参数运行即可：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;JVM_ARGS=&amp;#34;-Dsun.java2d.uiScale=200%&amp;#34; jmeter
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;也可以把这个参数写入启动脚本中：&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 gitlab-runner 移除残留文件  permission denied</title>
      <link>https://frytea.com/archives/1470/</link>
      <pubDate>Tue, 15 Apr 2025 06:54:45 +0000</pubDate>
      <guid>https://frytea.com/archives/1470/</guid>
      <description>&lt;p&gt;最近使用遇到一些问题：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Running with gitlab-runner 17.10.0 (67b2b2db)
  on wz-arm64-host-runner8 Q3NRHTCy, system ID: s_a7d2f872e9b4
Preparing the &amp;#34;shell&amp;#34; executor 00:00
Using Shell (bash) executor...
Preparing environment 00:00
Running on xxx-runner8...
Getting source from Git repository 00:01
Fetching changes with git depth set to 50...
重新初始化已存在的 Git 仓库于 /home/gitlab-runner/builds/Q3NRHTCy/0/cloud/xxx-top/.git/
Checking out 2356a4c2 as detached HEAD (ref is release/2.6)...
warning: 删除 xxx/xxx/xxx/xxx/xxx-1.0/Makefile 失败: 权限不够
Cleaning up project directory and file based variables 00:00
ERROR: Job failed: exit status 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最后发现是某一级路径的所有者被改变为 &lt;code&gt;root&lt;/code&gt; 导致无法删除，造成该现象的原因未知。通过查阅资料和文档，在 gitlab-runner 的配置文件增加一行 &lt;code&gt;pre_get_sources_script&lt;/code&gt; 解决：&lt;/p&gt;</description>
    </item>
    <item>
      <title>nginx-ingress 配置路由 302</title>
      <link>https://frytea.com/archives/1469/</link>
      <pubDate>Tue, 15 Apr 2025 06:54:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1469/</guid>
      <description>&lt;h1 id=&#34;demo-ingress&#34;&gt;demo ingress&lt;/h1&gt;
&lt;p&gt;这个实例中，实现将 &lt;code&gt;访问 https://image.frytea.com/Avatar.jpg 请求302到 https://image.frytea.com/i/Avatar.jpg&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;networking.k8s.io/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Ingress&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;namespace&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;imagehost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;annotations&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;cert-manager.io/cluster-issuer&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dnspod-cluster-issuer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;nginx.ingress.kubernetes.io/configuration-snippet&lt;/span&gt;: |&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      location = /Avatar.jpg {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        return 301 https://image.frytea.com/i/Avatar.jpg$is_args$args;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;ingressClassName&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;tls&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;hosts&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;image.frytea.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;imagehost-cdn.frytea.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;cdn-imagehost.frytea.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;secretName&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;image-frytea-com-tls&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;rules&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;host&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;image.frytea.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;http&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;paths&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;pathType&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Prefix&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;backend&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;service&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;port&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;web&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;直接配置会提示报错：&lt;/p&gt;</description>
    </item>
    <item>
      <title>常见 S3 存储服务多维度横评（附1TB存储传输成本）</title>
      <link>https://frytea.com/archives/1467/</link>
      <pubDate>Sat, 12 Apr 2025 16:18:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1467/</guid>
      <description>&lt;p&gt;之前看到猫猫大佬的 &lt;a href=&#34;https://catcat.blog/object-storage-pricing-comparison-1tb-storage-transfer-benchmark.html&#34;&gt;对象存储服务商价格对比：1TB存储与1TB流量基准分析&lt;/a&gt; 这篇文章很有启发。正好最近在探索物美价廉、稳定可靠的 S3 数据存储方案，将自己熟悉的、网上常见的一些提供 S3 的厂商服务做个整理，按照 &lt;code&gt;1TB&lt;/code&gt; 数据存储和传输成本为指标做一个横评表格。希望给选购 S3 服务需求的人们有一些启发。&lt;/p&gt;</description>
    </item>
    <item>
      <title>k8s 触发 pod 重新拉取镜像平滑升级的方法</title>
      <link>https://frytea.com/archives/1466/</link>
      <pubDate>Thu, 10 Apr 2025 09:29:10 +0000</pubDate>
      <guid>https://frytea.com/archives/1466/</guid>
      <description>&lt;p&gt;下面介绍更新 Deployment 以重新拉取相同标签镜像的方法，不要只会杀 pod 触发了，个人最喜欢&lt;strong&gt;方法二&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;当镜像名称和标签都没有变化，但需要重新拉取镜像时（比如镜像内容已更新但标签保持不变），可以采用以下方法：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clickhouse 迁移后 permission denied 问题解决</title>
      <link>https://frytea.com/archives/1465/</link>
      <pubDate>Thu, 10 Apr 2025 09:28:48 +0000</pubDate>
      <guid>https://frytea.com/archives/1465/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;Clickhouse 迁移数据后，很容易出现权限问题导致无法启动，运行以下命令后重启即可解决。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chown -R clickhouse /var/lib/clickhouse /var/log/clickhouse-server /etc/clickhouse-server /etc/clickhouse-client
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ClickHouse/ClickHouse/issues/7902&#34;&gt;Clickhouse failed to start, permission denied #7902&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Linux CPU 运行模式及功耗分析</title>
      <link>https://frytea.com/archives/1464/</link>
      <pubDate>Wed, 09 Apr 2025 01:55:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1464/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;本文第一章节主要内容转载自：&lt;a href=&#34;https://www.cnblogs.com/shhnwangjian/p/13321730.html&#34;&gt;linux cpu 运行模式&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;CPU动态节能技术用于降低服务器功耗，通过选择系统空闲状态不同的电源管理策略，可以实现不同程度降低服务器功耗，更低的功耗策略意味着CPU唤醒更慢对性能 影响更大。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux vim vi 翻页跳转命令快捷键</title>
      <link>https://frytea.com/archives/1463/</link>
      <pubDate>Mon, 07 Apr 2025 09:24:05 +0000</pubDate>
      <guid>https://frytea.com/archives/1463/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;以下组合若没有特殊说明，基本都是键位组合。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;vim翻页&#34;&gt;vim翻页&lt;/h1&gt;
&lt;h2 id=&#34;vim翻半页&#34;&gt;vim翻半页&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ctr-d&lt;/code&gt;：向后翻半页&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctr-u&lt;/code&gt;：向前翻半页&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;vim整整页&#34;&gt;vim整整页&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ctr+f&lt;/code&gt;：向后翻整页&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctr+b&lt;/code&gt;：向前翻整页&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;vim跳转&#34;&gt;vim跳转&lt;/h1&gt;
&lt;h2 id=&#34;vim跳首行&#34;&gt;vim跳首行&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;g+g&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:1&lt;/code&gt;&lt;br&gt;
第二种方式需要输入：&lt;br&gt;
先按&lt;code&gt;shift+:&lt;/code&gt;&lt;br&gt;
再输入&lt;code&gt;1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;vim跳尾行&#34;&gt;vim跳尾行&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;shift+g&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:$&lt;/code&gt;&lt;br&gt;
第二种方式需要输入：&lt;br&gt;
先按&lt;code&gt;shift+:&lt;/code&gt;&lt;br&gt;
再输入&lt;code&gt;$&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/Andya/p/12983159.html&#34;&gt;Linux—vim/vi 翻页跳转命令快捷键&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>git 拉取所有 branch 和 tag 到本地并推送到远程</title>
      <link>https://frytea.com/archives/1462/</link>
      <pubDate>Mon, 07 Apr 2025 09:23:34 +0000</pubDate>
      <guid>https://frytea.com/archives/1462/</guid>
      <description>&lt;p&gt;需要一个正常的可工作仓库，而不是裸镜像仓库。以下是在不使用 &lt;code&gt;--mirror&lt;/code&gt; 选项的情况下，拉取所有分支和标签并推送到新仓库的步骤：&lt;/p&gt;
&lt;h3 id=&#34;步骤-1-克隆源仓库&#34;&gt;步骤 1: 克隆源仓库&lt;/h3&gt;
&lt;p&gt;首先，正常克隆源仓库：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rails 性能分析工具 rack-mini-profiler 和 bullet</title>
      <link>https://frytea.com/archives/1441/</link>
      <pubDate>Mon, 07 Apr 2025 09:21:44 +0000</pubDate>
      <guid>https://frytea.com/archives/1441/</guid>
      <description>&lt;p&gt;rack-mini-profiler 和 bullet 是ruby 开发中两个广受欢迎的性能分析工具。&lt;/p&gt;
&lt;p&gt;Bullet 更加实用，提得建议更加直接有效，rack-mini-profiler 信息丰富，需要更细致的排查时使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>全球国家、城市、地区开源数据库</title>
      <link>https://frytea.com/archives/1440/</link>
      <pubDate>Mon, 07 Apr 2025 09:21:31 +0000</pubDate>
      <guid>https://frytea.com/archives/1440/</guid>
      <description>&lt;p&gt;以 JSON、MYSQL、PSQL、SQLITE、XML、YAML 和 CSV 格式提供城市、州、国家/地区的完整数据库。所有国家、州和城市都覆盖并填充了不同的组合和版本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rails Active Record 常用命令</title>
      <link>https://frytea.com/archives/1439/</link>
      <pubDate>Mon, 07 Apr 2025 09:21:19 +0000</pubDate>
      <guid>https://frytea.com/archives/1439/</guid>
      <description>&lt;p&gt;主要命令&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rake db:migrate
rake db:rollback

rake db:migrate:up
rake db:migrate:down

rake db:migrate:redo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;指定版本号的回滚&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rake db:migrate:down VERSION=20141119130134
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;回滚最近几个迁移&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rake db:rollback STEP=n
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;n 代表个数。注意：是最近几个，它们会被一起移除。&lt;/p&gt;
&lt;p&gt;其它类似命令：&lt;/p&gt;
&lt;p&gt;只执行指定版本号的迁移&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rake db:migrate VERSION=20141119130134
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;只执行最近几次迁移&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rails Rake 简介与编写</title>
      <link>https://frytea.com/archives/1438/</link>
      <pubDate>Mon, 07 Apr 2025 09:21:09 +0000</pubDate>
      <guid>https://frytea.com/archives/1438/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;来源：&lt;a href=&#34;https://ruby-china.org/topics/27846&#34;&gt;Rake 简介与编写&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;rake-用法简介&#34;&gt;Rake 用法简介&lt;/h1&gt;
&lt;h2 id=&#34;rake-简介&#34;&gt;rake 简介&lt;/h2&gt;
&lt;p&gt;Rake 的意思是 Ruby Make，一个用 ruby 开发的代码构建工具。&lt;/p&gt;
&lt;p&gt;1.以任务的方式创建和运行脚本 当然，你可以用脚本来创建每一个你希望自动运行的任务。但是，对于大型的应用来说，你几乎总是需要为数据库迁移 (比如 Rails 中 db:migrate 任务)、清空缓存、或者代码维护等等编写脚本。对于每一项任务，你可能都需要写若干脚本，这会让你的管理变得复杂。那么，把它们用任务的方式整理到一起，会让管理变得轻松很多。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何调试 Vim 脚本</title>
      <link>https://frytea.com/archives/1437/</link>
      <pubDate>Mon, 07 Apr 2025 09:20:57 +0000</pubDate>
      <guid>https://frytea.com/archives/1437/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;来源： &lt;a href=&#34;https://harttle.land/2018/12/05/vim-debug.html&#34;&gt;如何调试 Vim 脚本&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;使用 &lt;code&gt;-D&lt;/code&gt; 参数可以开启 Debug 模式， 在 Debug 模式中可以使用 &lt;code&gt;cont&lt;/code&gt;, &lt;code&gt;next&lt;/code&gt;, &lt;code&gt;interrupt&lt;/code&gt;, &lt;code&gt;step&lt;/code&gt;, &lt;code&gt;quit&lt;/code&gt; 等调试命令， 以及 &lt;code&gt;breakadd&lt;/code&gt;, &lt;code&gt;breakdel&lt;/code&gt; 来添加和移除断点。 使用 &lt;code&gt;-u&lt;/code&gt; 来禁止加载任何配置文件，使用 &lt;code&gt;:source&lt;/code&gt; 命令逐个加载。 使用 &lt;code&gt;:set verbose&lt;/code&gt; 和 &lt;code&gt;:set verbosefile&lt;/code&gt; 等 &lt;a href=&#34;https://harttle.land/2017/01/30/variables-in-vim.html&#34;&gt;配置变量&lt;/a&gt; 可以设置日志级别和输出文件， &lt;code&gt;-V&lt;/code&gt; 启动参数也可以起到同样的作用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>tailscale zerotier wireguard  横向对比</title>
      <link>https://frytea.com/archives/1461/</link>
      <pubDate>Mon, 07 Apr 2025 09:20:35 +0000</pubDate>
      <guid>https://frytea.com/archives/1461/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;References: Gemini 2.5 Pro&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;本文对比一下 Tailscale、ZeroTier 和 WireGuard 这三个流行的虚拟网络/VPN 解决方案。&lt;/p&gt;
&lt;p&gt;需要明确一点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WireGuard&lt;/strong&gt; 是一个现代、快速、简单的 &lt;strong&gt;VPN 协议&lt;/strong&gt;。它本身只负责建立安全的点对点隧道，不包含用户管理、密钥分发、NAT 穿透等便捷功能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailscale&lt;/strong&gt; 和 &lt;strong&gt;ZeroTier&lt;/strong&gt; 都是基于特定技术（Tailscale 基于 WireGuard，ZeroTier 有自己的协议）构建的&lt;strong&gt;完整解决方案或服务&lt;/strong&gt;。它们旨在简化虚拟网络的创建和管理，内置了用户认证、设备管理、NAT 穿透等功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;关键特性对比&#34;&gt;关键特性对比&lt;/h1&gt;
&lt;p&gt;以下是它们的详细对比：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tailscale 自建 Derp</title>
      <link>https://frytea.com/archives/1460/</link>
      <pubDate>Mon, 07 Apr 2025 09:20:20 +0000</pubDate>
      <guid>https://frytea.com/archives/1460/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;必需：将 env &lt;code&gt;DERP_DOMAIN&lt;/code&gt; 设置为您的域&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -e DERP_DOMAIN=derper.your-domain.com -p 80:80 -p 443:443 -p 3478:3478/udp fredliang/derper
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;也有其他不使用域名的方法，参考文献自行探索&lt;/p&gt;&lt;/blockquote&gt;
&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://tailscale.com/kb/1118/custom-derp-servers&#34;&gt;Custom DERP Servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/fredliang44/derper-docker&#34;&gt;fredliang44/derper-docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.xiaoiluo.com/article/tailscale-derp&#34;&gt;🗒️逃离网络限制：使用Tailscale+自建DERP组建私有局域网的终极指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://icloudnative.io/posts/custom-derp-servers/#%E4%BD%BF%E7%94%A8%E7%BA%AF-ip&#34;&gt;Tailscale 基础教程：部署私有 DERP 中继服务器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Ceph 检查 rbd io 排名</title>
      <link>https://frytea.com/archives/1459/</link>
      <pubDate>Mon, 07 Apr 2025 09:19:22 +0000</pubDate>
      <guid>https://frytea.com/archives/1459/</guid>
      <description>&lt;p&gt;好的，在 Ceph 中查看哪个 RBD (RADOS Block Device) 镜像的 I/O 读写最高，最常用的方法是使用 &lt;code&gt;rbd perf image iotop&lt;/code&gt; 或 &lt;code&gt;rbd perf image iostat&lt;/code&gt; 命令。&lt;/p&gt;
&lt;p&gt;这两个命令都需要指定 &lt;strong&gt;存储池 (pool)&lt;/strong&gt; 的名称，因为 RBD 镜像是存在于特定的存储池中的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>k8s csi-driver-nfs的一个坑</title>
      <link>https://frytea.com/archives/1458/</link>
      <pubDate>Mon, 31 Mar 2025 10:01:43 +0000</pubDate>
      <guid>https://frytea.com/archives/1458/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;发现 k8s csi 组的社区项目 &lt;a href=&#34;https://github.com/kubernetes-csi/csi-driver-nfs&#34;&gt;csi-driver-nfs&lt;/a&gt; &lt;code&gt;v4.10&lt;/code&gt; 到 &lt;code&gt;v4.11&lt;/code&gt; 至少这两个版本存在删除 &lt;code&gt;pv&lt;/code&gt; 时会连带将整个根删除的问题。&lt;/p&gt;
&lt;p&gt;声明 &lt;code&gt;StorageClass&lt;/code&gt; 时虽然支持 &lt;code&gt;subDir&lt;/code&gt; ，类似这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;storage.k8s.io/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;StorageClass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nfs-aliyun-gz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;provisioner&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nfs.csi.k8s.io&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;parameters&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;share&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/csi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;server&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;28364f4a1fa-eok75.cn-guangzhou.nas.aliyuncs.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#server: &amp;#34;172.26.12.20&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#subDir: &amp;#34;${pvc.metadata.namespace}/${pvc.metadata.name}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;reclaimPolicy&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Delete&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#volumeBindingMode: WaitForFirstConsumer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;volumeBindingMode&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Immediate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;allowVolumeExpansion&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;mountOptions&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#  - nolock,tcp,noresvport&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#ae81ff&#34;&gt;vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但如果类似这样使用 &lt;code&gt;subDir&lt;/code&gt; 声明路径，同命名空间下的其他 pvc 删除，会导致整个 subDir 根目录都被删除。目前官方 pr 已经修复，但实测还是有问题，有空再研究一下代码，不知道是不是刻意为之。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一条命令测试 pg 查询延迟</title>
      <link>https://frytea.com/archives/1457/</link>
      <pubDate>Mon, 31 Mar 2025 10:01:13 +0000</pubDate>
      <guid>https://frytea.com/archives/1457/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ apt install postgresql-client
$ time psql &amp;#34;postgresql://xxx:xxxx@x.x.x.x:5432/today_ai_weather&amp;#34; -c &amp;#34;\timing on&amp;#34;  -c &amp;#34;SELECT 1&amp;#34;  
Timing is on.  
?column?    
----------  
       1  
(1 row)  
  
Time: 172.842 ms  
  
real    0m1.063s  
user    0m0.029s  
sys     0m0.020s
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>k3s 容器 mirror 配置方法</title>
      <link>https://frytea.com/archives/1456/</link>
      <pubDate>Mon, 31 Mar 2025 10:00:40 +0000</pubDate>
      <guid>https://frytea.com/archives/1456/</guid>
      <description>&lt;h1 id=&#34;tl-dr&#34;&gt;TL; DR&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root@tencent-sh1:~# cat /etc/rancher/k3s/registries.yaml 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mirrors:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;docker.io&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    endpoint:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://harbor.xxx.me&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rewrite:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(.*)&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mirror-dockerhub/&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;registry.k8s.io&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    endpoint:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://harbor.xxx.me&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rewrite:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(.*)&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mirror-registry-k8s-io/&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ghcr.io&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    endpoint:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://harbor.xxx.me&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rewrite:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(.*)&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mirror-registry-ghcr-io/&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;quay.io&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    endpoint:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://harbor.xxx.me&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rewrite:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(.*)&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mirror-registry-quay-io/&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上是我的配置，在 &lt;code&gt;harbor&lt;/code&gt; 中镜像以上镜像源，之后这样 配置即可。&lt;/p&gt;
&lt;p&gt;如果没有路径，比如使用 &lt;code&gt;registry&lt;/code&gt; 镜像，忽略 &lt;code&gt;rewrite&lt;/code&gt; 部分即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>wordpress 使用 k8s 部署并使用 nginx ingress 代理无限 302 到 ssl 问题解决</title>
      <link>https://frytea.com/archives/1455/</link>
      <pubDate>Mon, 31 Mar 2025 09:59:51 +0000</pubDate>
      <guid>https://frytea.com/archives/1455/</guid>
      <description>&lt;p&gt;发现容器化之后，wp 网站打开一直尝试 302 到 https 的页面，即使我当前已经是 https 了，经过排查是由于代理提供了 ssl 但 wordpress 不知道，默认会再重定向一次，出现无限 302 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ArchLinux pacman 一键找到最快的镜像源清单</title>
      <link>https://frytea.com/archives/1454/</link>
      <pubDate>Fri, 14 Mar 2025 17:26:36 +0000</pubDate>
      <guid>https://frytea.com/archives/1454/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -s &amp;#34;https://archlinux.org/mirrorlist/?country=CN&amp;amp;protocol=https&amp;amp;use_mirror_status=on&amp;#34; | sed -e &amp;#39;s/^#Server/Server/&amp;#39; -e &amp;#39;/^#/d&amp;#39; | rankmirrors -n 5 -
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;运行这个命令，即可自动从 archlinux 官方 mirror 清单获取中国 (&lt;code&gt;CN&lt;/code&gt;) 的镜像清单，并调用 &lt;code&gt;rankmirrors&lt;/code&gt;  测速得到速度最快的前5个。&lt;/p&gt;
&lt;p&gt;配置到 &lt;code&gt;/etc/pacman.d/mirrorlist&lt;/code&gt; 目录中即可使用。&lt;/p&gt;
&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Mirrors&#34;&gt;Ranking an existing mirror list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://man.archlinux.org/man/extra/pacman-contrib/rankmirrors.8.en&#34;&gt;https://man.archlinux.org/man/extra/pacman-contrib/rankmirrors.8.en&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>LLM 聚合 API 价格对比</title>
      <link>https://frytea.com/archives/1453/</link>
      <pubDate>Fri, 14 Mar 2025 17:26:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1453/</guid>
      <description>&lt;p&gt;List&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gpt-4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gpt-4o&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;claude-3-7-sonnet-20250219&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;`claude-3-7-sonn&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;单位：Inout/Output /M&lt;/p&gt;&lt;/blockquote&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Model&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;gpt-4o&lt;/code&gt;&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;gpt-4o-mini&lt;/code&gt;&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;deepseek-r1&lt;/code&gt;&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;deepseek-v3&lt;/code&gt;&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;claude-3-7-sonnet&lt;/code&gt;&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;claude-3-5-sonnet&lt;/code&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://uniapi.ai/&#34;&gt;UniAPI&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$0.2871/$1.1484&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$2.376/$11.88&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$2.376/$11.88&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://www.gptapi.us/&#34;&gt;GPTAPI&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;¥0.07/¥0.14&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;¥5.25/¥26.25&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;¥5.25/¥26.25&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://openrouter.ai/&#34;&gt;OpenRouter&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$5/$7&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$3/$15&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$3/$15&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://aihubmix.com/&#34;&gt;AiHubMix&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$0.62/$2.48&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$3.3/$16.5&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://api.v3.cm/&#34;&gt;V3 API&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$1.8/$7.2&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$7.4/$37&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;refereneces&#34;&gt;Refereneces&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://openrouter.ai/&#34;&gt;https://openrouter.ai/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://aihubmix.com&#34;&gt;https://aihubmix.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://api.v3.cm/&#34;&gt;https://api.v3.cm/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ohmygpt.com/&#34;&gt;https://www.ohmygpt.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://uniapi.ai&#34;&gt;https://uniapi.ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>k8s 使用 pv-migrate  迁移 pvc</title>
      <link>https://frytea.com/archives/1452/</link>
      <pubDate>Fri, 14 Mar 2025 17:25:34 +0000</pubDate>
      <guid>https://frytea.com/archives/1452/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;安装&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;wget https://github.com/utkuozdemir/pv-migrate/releases/download/v1.7.1/pv-migrate_v1.7.1_linux_x86_64.tar.gz
tar -xvf pv-migrate_v1.7.1_linux_x86_64.tar.gz
mv pv-migrate /usr/local/bin
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;用法&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pv-migrate migrate \
  --source-namespace default \
  --dest-namespace default \
  localpv-vol csi-lvmpv

🚀 Starting migration
💭 Will attempt 3 strategies: mnt2, svc, lbsvc
🚁 Attempting strategy: mnt2
📂 Copying data... 100% |██████████████████████████████| (3.4 GB/s)     
📂 Copying data...   0% |                              |  [0s:0s]🧹 Cleaning up
📂 Copying data... 100% |██████████████████████████████|         
✨ Cleanup done
✅ Migration succeeded
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://openebs.io/docs/user-guides/data-migration/migration-using-pv-migrate&#34;&gt;Migration from Legacy Storage to Latest Storage Solution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/utkuozdemir/pv-migrate&#34;&gt;https://github.com/utkuozdemir/pv-migrate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>k3s 部署 kube-prometheus-stack 监控栈</title>
      <link>https://frytea.com/archives/1450/</link>
      <pubDate>Fri, 14 Mar 2025 17:24:28 +0000</pubDate>
      <guid>https://frytea.com/archives/1450/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm show values prometheus-community/kube-prometheus-stack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm show values prometheus-community/kube-prometheus-stack &amp;gt; values.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Edit values.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm install prometheus-community prometheus-community/kube-prometheus-stack  --namespace monitoring -f values.yaml --create-namespace
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# update values.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ helm upgrade --install prometheus-community prometheus-community/kube-prometheus-stack  --namespace monitoring -f values.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack#configuration&#34;&gt;kube-prometheus-stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://forums.rancher.cn/t/kube-prometheus-stack-k3s/2702/1&#34;&gt;实战指南：使用 kube-prometheus-stack 监控 K3s 集群&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>k8s-k3s 标记节点暂时不可用及排空</title>
      <link>https://frytea.com/archives/1449/</link>
      <pubDate>Fri, 14 Mar 2025 17:24:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1449/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 标记为不可调度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl cordon NODE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 将运行的pod平滑的赶到其他节点上&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl drain NODE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 重新变得可调度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl uncordon NODE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/linux985/p/16374819.html&#34;&gt;K8S中的cordon、uncordon和drain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/zh-cn/docs/reference/kubectl/generated/kubectl_cordon/&#34;&gt;kubectl cordon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>helm operation 中断锁死问题解决</title>
      <link>https://frytea.com/archives/1448/</link>
      <pubDate>Fri, 14 Mar 2025 10:00:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1448/</guid>
      <description>&lt;p&gt;两种方案：&lt;/p&gt;
&lt;h1 id=&#34;解决办法&#34;&gt;解决办法&lt;/h1&gt;
&lt;h2 id=&#34;方法一卸载重装&#34;&gt;方法一，卸载重装&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;helm uninstall &amp;lt;release name&amp;gt; -n &amp;lt;namespace&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;方法二回滚&#34;&gt;方法二，回滚&lt;/h2&gt;
&lt;p&gt;This error can happen for few reasons, but it most commonly occurs when there is an interruption during the upgrade/install process as you already mentioned.&lt;br&gt;
发生此错误的原因有很多，但最常见的原因是升级/安装过程中出现中断，正如您之前提到的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>将当前系统做成 docker 镜像</title>
      <link>https://frytea.com/archives/1447/</link>
      <pubDate>Wed, 12 Mar 2025 01:45:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1447/</guid>
      <description>&lt;h1 id=&#34;tl-dr&#34;&gt;TL; DR&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Step1: 将当前系统打包&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;系统进行格式转化并压缩，执行如下命令，生成一个镜像的centos7-base.tar的文件&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 示例打包命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar --numeric-owner --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/proc --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/sys -zcvpf /data/centos7-svr.tar.gz /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar --numeric-owner &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/proc --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/sys &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/var/lib/vz &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/root &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/media &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;~ &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;-zcvpf ~/hci6-ci-base.tar.gz /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar -cvpf /home/buildrpm.tar --directory&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/ --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;proc --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;sys --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;dev --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;run /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --numeric-owner:执行所属&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --exclude：排除那些文件或者目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# -zcvf ：打包压缩 p保持文件的绝对路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Step2: 导入镜像并运行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;把镜像文件centos7-svr.tar.gz放到装有docker的系统上&lt;/p&gt;</description>
    </item>
    <item>
      <title>cert-manager CNAME 问题记录</title>
      <link>https://frytea.com/archives/1446/</link>
      <pubDate>Thu, 06 Mar 2025 03:59:28 +0000</pubDate>
      <guid>https://frytea.com/archives/1446/</guid>
      <description>&lt;p&gt;在研究 &lt;code&gt;cert-manager&lt;/code&gt; 使用 &lt;code&gt;webhook&lt;/code&gt; 方式调用 &lt;code&gt;dnspod&lt;/code&gt; 使用 &lt;code&gt;DNS-01&lt;/code&gt; 方式签发 SSL 证书遇到问题，一直得到错误：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;I0306 03:48:38.870605       1 controller.go:144] &amp;#34;syncing item&amp;#34; logger=&amp;#34;cert-manager.controller&amp;#34;
I0306 03:48:38.870714       1 dns.go:118] &amp;#34;checking DNS propagation&amp;#34; logger=&amp;#34;cert-manager.controller.Check&amp;#34; resource_name=&amp;#34;test1-tsh1-frytea-com-1-3300738485-2689263791&amp;#34; resource_namespace=&amp;#34;default&amp;#34; resource_kind=&amp;#34;Challenge&amp;#34; resource_version=&amp;#34;
v1&amp;#34; dnsName=&amp;#34;test1.tsh1.frytea.com&amp;#34; type=&amp;#34;DNS-01&amp;#34; resource_name=&amp;#34;test1-tsh1-frytea-com-1-3300738485-2689263791&amp;#34; resource_namespace=&amp;#34;default&amp;#34; resource_kind=&amp;#34;Challenge&amp;#34; resource_version=&amp;#34;v1&amp;#34; domain=&amp;#34;test1.tsh1.frytea.com&amp;#34; nameservers=[&amp;#34;223.5.5.5:53&amp;#34;,&amp;#34;8.8.8.8:53&amp;#34;]
I0306 03:48:38.879628       1 wait.go:94] &amp;#34;Updating FQDN&amp;#34; logger=&amp;#34;cert-manager.controller&amp;#34; resource_name=&amp;#34;test1-tsh1-frytea-com-1-3300738485-2689263791&amp;#34; resource_namespace=&amp;#34;default&amp;#34; resource_kind=&amp;#34;Challenge&amp;#34; resource_version=&amp;#34;v1&amp;#34; dnsName=&amp;#34;test
1.tsh1.frytea.com&amp;#34; type=&amp;#34;DNS-01&amp;#34; fqdn=&amp;#34;_acme-challenge.test1.tsh1.frytea.com.&amp;#34; cname=&amp;#34;tsh1.frytea.com.&amp;#34;
I0306 03:48:38.897174       1 wait.go:145] &amp;#34;Looking up TXT records&amp;#34; logger=&amp;#34;cert-manager.controller&amp;#34; resource_name=&amp;#34;test1-tsh1-frytea-com-1-3300738485-2689263791&amp;#34; resource_namespace=&amp;#34;default&amp;#34; resource_kind=&amp;#34;Challenge&amp;#34; resource_version=&amp;#34;v1&amp;#34; dns
Name=&amp;#34;test1.tsh1.frytea.com&amp;#34; type=&amp;#34;DNS-01&amp;#34; fqdn=&amp;#34;tsh1.frytea.com.&amp;#34;
E0306 03:48:38.897227       1 sync.go:208] &amp;#34;propagation check failed&amp;#34; err=&amp;#34;DNS record for \&amp;#34;test1.tsh1.frytea.com\&amp;#34; not yet propagated&amp;#34; logger=&amp;#34;cert-manager.controller&amp;#34; resource_name=&amp;#34;test1-tsh1-frytea-com-1-3300738485-2689263791&amp;#34; resource_nam
espace=&amp;#34;default&amp;#34; resource_kind=&amp;#34;Challenge&amp;#34; resource_version=&amp;#34;v1&amp;#34; dnsName=&amp;#34;test1.tsh1.frytea.com&amp;#34; type=&amp;#34;DNS-01&amp;#34;I0306 03:48:38.897688       1 controller.go:164] &amp;#34;finished processing work item&amp;#34; logger=&amp;#34;cert-manager.controller&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我使用了以下资源：&lt;/p&gt;</description>
    </item>
    <item>
      <title>ProxmoxVE (PVE) NAT 网络配置方法</title>
      <link>https://frytea.com/archives/1445/</link>
      <pubDate>Tue, 04 Mar 2025 01:32:45 +0000</pubDate>
      <guid>https://frytea.com/archives/1445/</guid>
      <description>&lt;p&gt;伪装允许只有私有 IP 地址的访客使用主机 IP 地址来访问网络，以处理传出流量。每个传出数据包都会被重写 iptables ，使其看起来来自主机，响应也会相应地被重写以路由到原始发件人。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 备份和恢复 docker volume 脚本分享</title>
      <link>https://frytea.com/archives/1443/</link>
      <pubDate>Thu, 27 Feb 2025 15:36:16 +0000</pubDate>
      <guid>https://frytea.com/archives/1443/</guid>
      <description>&lt;h1 id=&#34;脚本&#34;&gt;脚本&lt;/h1&gt;
&lt;h2 id=&#34;dump&#34;&gt;Dump&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;docker-volume-dump.sh &lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dump_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;~/docker-volume-dump
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; ! -d $dump_dir &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  mkdir -p $dump_dir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; volume in &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;docker volume ls -q&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  dump_file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$dump_dir/$volume.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -f $dump_file &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt; set -x; echo rm $dump_file; &lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Dump docker volume \&amp;#34;&lt;/span&gt;$volume&lt;span style=&#34;color:#e6db74&#34;&gt;\&amp;#34; to \&amp;#34;&lt;/span&gt;$dump_file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  docker run --rm -v $volume:/from alpine sh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cd /from; tar -cf - .&amp;#34;&lt;/span&gt; | gzip &amp;gt; $dump_dir/$volume.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;restore&#34;&gt;Restore&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;docker-volume-restore.sh&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dump_dir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;~/docker-volume-dump
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; file in ~/docker-volume-dump/* ; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  volume&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;basename $file&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  volume&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;volume%%.*&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$volume&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  docker volume inspect $volume &amp;amp;&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; $? -eq &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt; set -x; docker volume rm $volume 1&amp;gt;/dev/null &lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt; set -x; docker volume create $volume 1&amp;gt;/dev/null &lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  cat $file | docker run --rm -i -v $volume:/to alpine sh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;tar zxvf - -C /to&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gist.github.com/bborysenko/f48b3b75e7bb7af0534e94377db14c51&#34;&gt;bborysenko/docker-volume-dump.sh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>ArchLinux 休眠到交换文件</title>
      <link>https://frytea.com/archives/1436/</link>
      <pubDate>Thu, 27 Feb 2025 15:35:55 +0000</pubDate>
      <guid>https://frytea.com/archives/1436/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;来源： &lt;a href=&#34;https://harttle.land/2019/10/19/hibernate-archlinux.html&#34;&gt;ArchLinux 休眠到交换文件&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Linux 使用交换分区来休眠，首先冻结所有进程并申请足够的交换内存（位于磁盘），把当前内存都存进去。 然后下次启动时，initramfs 会直接加载上次休眠时的内存状态，跳过内核的 init 过程。 因此首先需要有足够大的交换分区或交换文件；再把内核指向到休眠的分区上；最后再配置 initramfs 让它加载休眠的内存文件。 官方文档请参考 &lt;a href=&#34;https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#Hibernation&#34;&gt;Power_management/Suspend_and_hibernate#Hibernation&lt;/a&gt;， 本文细述如何休眠到交换文件，并对其中一些概念和细节进行了解释。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 下大小写敏感的搜索-替换</title>
      <link>https://frytea.com/archives/1435/</link>
      <pubDate>Thu, 27 Feb 2025 15:35:46 +0000</pubDate>
      <guid>https://frytea.com/archives/1435/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;来源： &lt;a href=&#34;https://harttle.land/2019/12/12/vim-case-sensitive.html&#34;&gt;Vim 下大小写敏感的搜索/替换&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Vim 中的搜索默认是大小写敏感的，即搜索 &lt;code&gt;vim&lt;/code&gt; 不会匹配到 &lt;code&gt;Vim&lt;/code&gt;。 这一点跟多数编辑器/IDE 都不同，因此 Vim 的默认设置其实很不顺手。 本文来分享一些个性化的配置方法，让 Vim 下的大小写敏感/不敏感用起来更加顺手。 比如当搜索词包含大写时应用大小写敏感搜索；其他情况应用大小写不敏感搜索。&lt;/p&gt;</description>
    </item>
    <item>
      <title>对 tail -f 使用管道</title>
      <link>https://frytea.com/archives/1434/</link>
      <pubDate>Thu, 27 Feb 2025 15:35:38 +0000</pubDate>
      <guid>https://frytea.com/archives/1434/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;来源： &lt;a href=&#34;https://harttle.land/2020/06/06/tail-f-pipe.html&#34;&gt;对 tail -f 使用管道&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;最近发现 &lt;code&gt;tail -f&lt;/code&gt; 时管道后面的程序都会被卡住，才发现 grep，sed，awk 不直接输出到 TTY 时都是带缓冲的。平时跟在 &lt;code&gt;cat&lt;/code&gt; 后使用没问题是因为输入管道关闭触发了 flush。本文详细解释其中的坑，以及怎么让 sed, awk, grep 立即 flush。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 寄存器完全手册</title>
      <link>https://frytea.com/archives/1432/</link>
      <pubDate>Sun, 23 Feb 2025 06:04:43 +0000</pubDate>
      <guid>https://frytea.com/archives/1432/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;转载自 &lt;a href=&#34;https://harttle.land/2016/07/25/vim-registers.html&#34;&gt;Vim 寄存器完全手册&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;常见文本编辑器都会提供剪切板来支持复制粘贴，Vim 也不例外。 不同的是 Vim 提供了 10 类共 48 个寄存器，提供无与伦比的寄存功能。 最常用的 &lt;code&gt;y&lt;/code&gt; 操作将会拷贝到默认的匿名寄存器中，我们也可以指定具体拷贝到哪个寄存器中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 宏录制和重放</title>
      <link>https://frytea.com/archives/1431/</link>
      <pubDate>Sun, 23 Feb 2025 06:04:35 +0000</pubDate>
      <guid>https://frytea.com/archives/1431/</guid>
      <description>&lt;h1 id=&#34;tldr&#34;&gt;TL;DR&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;qa&lt;/code&gt;: 录制到寄存器 &lt;code&gt;a&lt;/code&gt; 中，可使用 &lt;code&gt;a-z&lt;/code&gt; 26 个命名寄存器&lt;/li&gt;
&lt;li&gt;开始操作，做的所有操作都会录制下来，重放时自动操作；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;q&lt;/code&gt;: 结束录制&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@a&lt;/code&gt; 重放一次；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;100@a&lt;/code&gt; 重放100次；&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;例子&#34;&gt;例子&lt;/h1&gt;
&lt;p&gt;在编辑某个文件的时候，可能会出现需要对某种特定的操作进行许多次的情况，以编辑下面的文件为例：&lt;/p&gt;</description>
    </item>
    <item>
      <title>ArchLinux 快速本地部署 DeepSeek</title>
      <link>https://frytea.com/archives/1444/</link>
      <pubDate>Tue, 18 Feb 2025 07:19:37 +0000</pubDate>
      <guid>https://frytea.com/archives/1444/</guid>
      <description>&lt;p&gt;在 ArchLinux 下借助 Ollama 可以快速运行一个小参数体量的 DeepSeek 本地模型，在我的环境上 纯 CPU 推理也可以获得很快的体验。&lt;/p&gt;
&lt;h1 id=&#34;安装环境&#34;&gt;安装环境&lt;/h1&gt;
&lt;p&gt;一行命令即可装好 ollama&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ sudo pacman -S ollama
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;模型&#34;&gt;模型&lt;/h1&gt;
&lt;p&gt;从 &lt;a href=&#34;https://ollama.com/library/deepseek-r1&#34;&gt;ollama 的 DeepSeek-R1模型页面&lt;/a&gt; 可以看到可拉取的模型，包括全量的 &lt;code&gt;671b&lt;/code&gt; 模型，以及精炼的小模型表现同样出色。：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker 官方脚本一键安装</title>
      <link>https://frytea.com/archives/1429/</link>
      <pubDate>Wed, 22 Jan 2025 06:47:51 +0000</pubDate>
      <guid>https://frytea.com/archives/1429/</guid>
      <description>&lt;p&gt;使用官方脚本安装&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL https://res.frytea.com/d/Dev/Docker/get_docker.sh | bash -s docker --mirror Aliyun
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL https://res.frytea.com/d/Dev/Docker/get_docker.sh | DOWNLOAD_URL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http://192.168.25.10/docker  bash -s docker
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ustc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL https://get.docker.com -o get-docker.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo DOWNLOAD_URL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;https://mirrors.ustc.edu.cn/docker-ce sh get-docker.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 也可以自己在内网做一个镜像，将脚本和 docker 软件源全部镜像，可以实现全内网高速安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL http://192.168.25.9/raw/general/docker/install-docker.sh -o get-docker.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo DOWNLOAD_URL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http://192.168.25.10/docker sh get-docker.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsSL http://192.168.25.9/raw/general/docker/install-docker.sh |  DOWNLOAD_URL&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http://192.168.25.10/docker bash -s
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装完成后使能 docker 服务：&lt;/p&gt;</description>
    </item>
    <item>
      <title>s3cmd  常见用法</title>
      <link>https://frytea.com/archives/1419/</link>
      <pubDate>Mon, 20 Jan 2025 15:30:24 +0000</pubDate>
      <guid>https://frytea.com/archives/1419/</guid>
      <description>&lt;h2 id=&#34;常见用法&#34;&gt;常见用法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;列举所有 Buckets&lt;br&gt;
&lt;code&gt;$ s3cmd ls&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;创建 bucket，且 bucket 名称是唯一的，不能重复。&lt;br&gt;
&lt;code&gt;s3cmd mb s3://my-bucket-name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;删除空 bucket&lt;br&gt;
&lt;code&gt;s3cmd rb s3://my-bucket-name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;列举 Bucket 中的内容&lt;br&gt;
&lt;code&gt;s3cmd ls s3://my-bucket-name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;上传 file.txt 到某个 bucket，&lt;br&gt;
&lt;code&gt;s3cmd put file.txt s3://my-bucket-name/file.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;上传并将权限设置为所有人可读&lt;br&gt;
&lt;code&gt;s3cmd put --acl-public file.txt s3://my-bucket-name/file.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;批量上传文件&lt;br&gt;
&lt;code&gt;s3cmd put ./* s3://my-bucket-name/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;下载文件&lt;br&gt;
&lt;code&gt;s3cmd get s3://my-bucket-name/file.txt file.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;批量下载&lt;br&gt;
&lt;code&gt;s3cmd get s3://my-bucket-name/* ./&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;删除文件&lt;br&gt;
&lt;code&gt;s3cmd del s3://my-bucket-name/file.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;来获得对应的bucket所占用的空间大小&lt;br&gt;
&lt;code&gt;s3cmd du -H s3://my-bucket-name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;设置S3 bucket的Public权限&lt;br&gt;
&lt;code&gt;s3cmd setacl s3://myexamplebucket.calvium.com/ --acl-public --recursive&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;临时链接&#34;&gt;临时链接&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;s3cmd signurl s3://example-bucket/image.jpg 1657457538
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;em&gt;example-bucket&lt;/em&gt; — the name of the bucket that hosts the file,&lt;/li&gt;
&lt;li&gt;&lt;em&gt;image.jpg&lt;/em&gt; — the file you want to share,&lt;/li&gt;
&lt;li&gt;&lt;em&gt;1657457538&lt;/em&gt; — link expiry time in the Timestamp format, use the &lt;a href=&#34;https://epochconverter.com&#34;&gt;converter&lt;/a&gt; to convert time formats.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gcore.com/docs/storage/manage-object-storage/configure-aws-sli-s3cmd-and-aws-javascript-sdk/generate-temporary-links-to-files-with-aws-cli-and-s3cmd#generate-links-in-s3cmd&#34;&gt;Generate temporary links to files with AWS CLI and S3cmd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/sunhongleibibi/p/11661123.html&#34;&gt;s3cmd的使用&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Rails 7  已有项目引入 Bootstrap 3</title>
      <link>https://frytea.com/archives/1418/</link>
      <pubDate>Sat, 18 Jan 2025 15:42:59 +0000</pubDate>
      <guid>https://frytea.com/archives/1418/</guid>
      <description>&lt;p&gt;若是新项目，在 Rails 7 之后直接使用 &lt;code&gt;rails new test -j esbuild --css bootstrap&lt;/code&gt; 即可，若是已有项目，使用下面步骤引入：&lt;/p&gt;
&lt;h1 id=&#34;主要步骤&#34;&gt;主要步骤&lt;/h1&gt;
&lt;h2 id=&#34;安装-cssbundling-rails-管理-css&#34;&gt;安装 &lt;code&gt;cssbundling-rails&lt;/code&gt; 管理 CSS&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bundle add cssbundling-rails
./bin/rails css:install:bootstrap
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;做了以下几件事情：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它会创建 &lt;code&gt;builds&lt;/code&gt; 文件夹，并在清单文件中链接它&lt;/li&gt;
&lt;li&gt;它会删除 &lt;code&gt;application.css&lt;/code&gt; 文件，因为它会生成自己的文件。&lt;/li&gt;
&lt;li&gt;它添加了一个 &lt;code&gt;package.json&lt;/code&gt; 文件来存储 Javascript 依赖项。&lt;/li&gt;
&lt;li&gt;它会安装 &lt;code&gt;foreman&lt;/code&gt; gem，并为其生成一个配置文件。&lt;/li&gt;
&lt;li&gt;它添加了一个 &lt;code&gt;bin/dev&lt;/code&gt; 脚本来启动 rails 服务器，并监视 CSS 文件的任何更改。&lt;/li&gt;
&lt;li&gt;它会创建特定于 Bootstrap 的 &lt;code&gt;scss&lt;/code&gt; 文件，该文件将被捆绑到一个 &lt;code&gt;application.css&lt;/code&gt; 文件中。&lt;/li&gt;
&lt;li&gt;它将安装 &lt;code&gt;package.json&lt;/code&gt; 文件中列出的所有 Javascript 依赖项。&lt;/li&gt;
&lt;li&gt;它将 Bootstrap 字体路径附加到 assets 路径。&lt;/li&gt;
&lt;li&gt;它将 Bootstrap Javascript 导入添加到 &lt;code&gt;application.js&lt;/code&gt; 文件中。&lt;/li&gt;
&lt;li&gt;最后，它配置 &lt;code&gt;build：css&lt;/code&gt; 命令并运行它来构建 &lt;code&gt;application.css&lt;/code&gt; 文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;安装-jsbundling-rails-处理-js-绑定&#34;&gt;安装 &lt;code&gt;jsbundling-rails&lt;/code&gt; 处理 JS 绑定&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bundle add jsbundling-rails
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./bin/rails javascript:install:esbuild
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上述脚本做了这些事情：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ruby 多版本管理工具 rbenv</title>
      <link>https://frytea.com/archives/1420/</link>
      <pubDate>Thu, 09 Jan 2025 09:55:44 +0000</pubDate>
      <guid>https://frytea.com/archives/1420/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/rbenv/rbenv&#34;&gt;rbenv&lt;/a&gt; （Simple Ruby Version Management） 允许您在 Ruby 的多个版本之间轻松切换。它简单、不引人注目，并遵循 UNIX 的传统，即只做一件事的单一用途工具。&lt;/p&gt;
&lt;h2 id=&#34;安装方法&#34;&gt;安装方法&lt;/h2&gt;
&lt;h2 id=&#34;安装-rbenv&#34;&gt;安装 &lt;code&gt;rbenv&lt;/code&gt;&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Archlinux
sudo pacman -S rbenv
# macOS
brew install rbenv
# Debian/Ubuntu
sudo apt install rbenv
# Fedora/RHEL
sudo dnf install rbenv
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;安装--ruby-build&#34;&gt;安装  &lt;code&gt;ruby-build&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;使用 rbenv 安装 ruby 版本需要用到 &lt;code&gt;install&lt;/code&gt; 命令，但是该 &lt;code&gt;rbenv install&lt;/code&gt; 命令不是开箱即用的 rbenv 提供的，而是由 ruby-build 插件提供的，下面一同安装：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 GCOP AI 助力提升 git commit 效率</title>
      <link>https://frytea.com/archives/1423/</link>
      <pubDate>Sat, 04 Jan 2025 01:54:12 +0000</pubDate>
      <guid>https://frytea.com/archives/1423/</guid>
      <description>&lt;p&gt;最近在 &lt;a href=&#34;https://www.ruanyifeng.com/blog/2024/12/weekly-issue-331.html&#34;&gt;阮老师博客&lt;/a&gt; 看到一款这个 &lt;a href=&#34;https://gcop.zeeland.top&#34;&gt;GCOP&lt;/a&gt;，一个基于 LLM 的 Git 提交消息生成和 Git 工作流程优化工具，试用了一下确实不错。接入 LLM 即可自动分析 git 修改生成 commit 消息，比我之前做的 git-commit 生成器好用多了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux buffer-cache 占用过高性能调整</title>
      <link>https://frytea.com/archives/1411/</link>
      <pubDate>Sat, 04 Jan 2025 01:39:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1411/</guid>
      <description>&lt;h1 id=&#34;什么是-buffcache&#34;&gt;什么是 buff/cache？&lt;/h1&gt;
&lt;p&gt;在 &lt;code&gt;Linux 2.4&lt;/code&gt; 的内存管理中，&lt;code&gt;buffer&lt;/code&gt; 指 Linux 内存的：&lt;code&gt;Buffer cache&lt;/code&gt;。&lt;code&gt;cache&lt;/code&gt; 指 Linux 内存中的：&lt;code&gt;Page cache&lt;/code&gt;。一般呢，是这么解释两者的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>VirtualBox VERR_NO_LOW_MEMORY 解决</title>
      <link>https://frytea.com/archives/1412/</link>
      <pubDate>Sat, 04 Jan 2025 01:39:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1412/</guid>
      <description>&lt;p&gt;Archlinux 下内存有很多，但 VB 报错内存不足 VM 无法启动，free 可以看到内存大部分被 buffer 占用。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;free -h
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              total        used        free      shared  buff/cache   available  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;内存：          30Gi        13Gi        1Gi       2.3Gi       18.7Gi        17Gi  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;交换：          31Gi       1.7Gi        30Gi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;论坛找到一种强制驱逐 buffer 占用的方法：&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitHub 个人仓库批量备份到自建 Gitea</title>
      <link>https://frytea.com/archives/1417/</link>
      <pubDate>Fri, 03 Jan 2025 10:12:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1417/</guid>
      <description>&lt;p&gt;这是一个自动将 GitHub 仓库镜像到 Gitea 的 Shell 脚本。支持批量同步所有仓库，可以设置跳过特定仓库，并具有良好的错误处理机制。&lt;/p&gt;
&lt;p&gt;由于 GitHub 仓库较多，因为各种原因担心数据风险和访问困难。代码托管在自建 gitea 虽然访问快，但是脱离了生态很难跟其他的 PaaS 平台对接。&lt;/p&gt;</description>
    </item>
    <item>
      <title>支持 helm 的 harbor 版本</title>
      <link>https://frytea.com/archives/1409/</link>
      <pubDate>Mon, 30 Dec 2024 15:54:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1409/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Harbor在v1.6版本开始支持Helm Chart仓库功能，- 从v2.6.0 开始弃用Chartmuseum，并在v2.8.0中开始删除。更多详情，请参阅讨论：https://github.com/goharbor/harbor/discussions/15057 从 v2.6.0 开始弃用 Notary（签名者和服务器），并在 v2.8.0 中开始删除。更多详情，请参阅讨论：https://github.com/goharbor/harbor/discussions/16612&lt;/p&gt;</description>
    </item>
    <item>
      <title>配置 harbor 及 docker 等使用 https</title>
      <link>https://frytea.com/archives/1408/</link>
      <pubDate>Mon, 30 Dec 2024 15:53:59 +0000</pubDate>
      <guid>https://frytea.com/archives/1408/</guid>
      <description>&lt;p&gt;默认情况下，Harbor不提供证书。可以在没有安全性的情况下部署Harbor，这样您就可以通过HTTP连接到它。但是，只有在没有连接到外部internet的空间隙测试或开发环境中才可以使用HTTP。在没有空间隙的环境中使用HTTP会暴露给中间人攻击。在生产环境中，始终使用HTTPS。如果启用带公证人的内容信任对所有images进行正确签名，则必须使用HTTPS。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【Ai Agent】智能体实验之城市天气画报</title>
      <link>https://frytea.com/archives/1416/</link>
      <pubDate>Fri, 27 Dec 2024 10:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1416/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;计划进行一系列 AI Agent 实验，欢迎交流。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;相关信息&#34;&gt;相关信息&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;平台: 自建 &lt;a href=&#34;https://dify.ai/&#34;&gt;Dify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;类型：AI Agent&lt;/li&gt;
&lt;li&gt;使用LLM：
&lt;ul&gt;
&lt;li&gt;gpt-4o-mini&lt;/li&gt;
&lt;li&gt;Dall-e 3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;参考：&lt;a href=&#34;https://www.coze.cn&#34;&gt;扣子&lt;/a&gt; 的城市天气画报模板。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;dsl&#34;&gt;DSL&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;description&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;icon&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;🤖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;icon_background&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#FFEAD5&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;mode&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;agent-chat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;城市天气画报&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;use_icon_as_answer_icon&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;model_config&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;agent_mode&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;max_iteration&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;prompt&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;strategy&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;function_call&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;tools&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;provider_id&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gaode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;provider_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gaode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;provider_type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;builtin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;tool_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;天气预报&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;tool_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gaode_weather&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;tool_parameters&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;city&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;provider_id&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;dalle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;provider_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;dalle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;provider_type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;builtin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;tool_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;DALL-E 3 绘画&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;tool_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;dalle3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;tool_parameters&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;n&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;prompt&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;quality&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;style&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;annotation_reply&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;chat_prompt_config&lt;/span&gt;: {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;completion_prompt_config&lt;/span&gt;: {}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;dataset_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;datasets&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;datasets&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;reranking_enable&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;retrieval_model&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;multiple&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;top_k&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;dataset_query_variable&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;external_data_tools&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;file_upload&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;allowed_file_extensions&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.JPG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.JPEG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.PNG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.GIF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.WEBP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.SVG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.MP4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.MOV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.MPEG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;.MPGA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;allowed_file_types&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;allowed_file_upload_methods&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;remote_url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#ae81ff&#34;&gt;local_file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;detail&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;high&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;number_limits&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;transfer_methods&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;remote_url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;local_file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;number_limits&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;model&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;completion_params&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;stop&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;mode&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;chat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gpt-4o-mini&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;provider&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;openai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;more_like_this&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;opening_statement&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;回复 1 开始创作今日城市天气画报。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;pre_prompt&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;查找城市 {{city}} 今天的天气情况，生成一段简单的话描述这个场景，提供给 dalle 绘制一幅图片。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;prompt_type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;simple&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;retriever_resource&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;sensitive_word_avoidance&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;configs&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;speech_to_text&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;suggested_questions&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;suggested_questions_after_answer&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;text_to_speech&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enabled&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;language&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;voice&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;user_input_form&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;text-input&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;default&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;城市&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;max_length&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;48&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;required&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;variable&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;city&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.1.5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;效果展示&#34;&gt;效果展示&lt;/h2&gt;
&lt;p&gt;界面：&lt;/p&gt;</description>
    </item>
    <item>
      <title>收藏一个上古软件，在 Linux 终端上使用行编辑器 ed</title>
      <link>https://frytea.com/archives/1407/</link>
      <pubDate>Tue, 24 Dec 2024 11:23:18 +0000</pubDate>
      <guid>https://frytea.com/archives/1407/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;这个看似简单的编辑器为用户提供了许多易于学习和使用的命令。
这款产生自资源极其有限时期的产物，似乎还很有助于理解 &lt;code&gt;vi/vim&lt;/code&gt; 和 &lt;code&gt;emacs&lt;/code&gt; 的一些设计。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;GNU &lt;code&gt;ed&lt;/code&gt; 命令是一个行编辑器。它被认为是标准的 Unix 文本编辑器，因为它是首个出现在 Unix 的文本编辑器，并且它曾经无处不在，你在任何一个 POSIX 系统中都能找到它（通常来说，你现在也可以）。在某种程度上，你可以很容易看出来它是第一个文本编辑器，因为它在许多方面的功能都十分基础。和其他大多数的文本编辑器不同，它不会打开一个属于自己的窗口或显示区域，事实上，在默认情况下，它甚至不会提示用户输入文字。从另一个方面来说，它在交互功能上的缺失也可以成为一个优点。它是一个多功能的编辑器，你可以用简短的命令控制它，无论是在交互式的命令行中，还是在编写的 shell 脚本里。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Buildah 简明教程：让镜像构建更轻量，告别 Docker 依赖</title>
      <link>https://frytea.com/archives/1403/</link>
      <pubDate>Tue, 24 Dec 2024 11:23:04 +0000</pubDate>
      <guid>https://frytea.com/archives/1403/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;来源：&lt;a href=&#34;https://www.lixueduan.com/posts/cloudnative/03-buildah/&#34;&gt;Buildah 简明教程：让镜像构建更轻量，告别 Docker 依赖&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Buildah 是一个专注于构建 OCI 镜像的工具，Buildah CLI 工具使用底层 OCI 技术实现（例如 containers/image&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; 和 containers/storage&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;)。&lt;/p&gt;
&lt;p&gt;OCI 三剑客包括：&lt;/p&gt;</description>
    </item>
    <item>
      <title>tmux 加大缓冲区大小</title>
      <link>https://frytea.com/archives/1398/</link>
      <pubDate>Sat, 21 Dec 2024 06:53:29 +0000</pubDate>
      <guid>https://frytea.com/archives/1398/</guid>
      <description>&lt;p&gt;永久配置&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ vim ~/.tmux.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+ set -g history-limit &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 注：默认为2000行，这里设置为5000行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;动态配置&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tmux set-option history-limit &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tmux
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;运行时配置&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tmux
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;C-B&amp;gt; :set-option history-limit &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/dakewei/p/13156787.html&#34;&gt;tmux如何加大回滚的缓冲区大小？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>在Word文档中添加打勾的小方框</title>
      <link>https://frytea.com/archives/1410/</link>
      <pubDate>Sat, 21 Dec 2024 06:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1410/</guid>
      <description>&lt;p&gt;用户在做电子调查报告或者填写一些资料表，会遇到一些word文档中有小方框【□】，需要在里面打钩【√】&lt;/p&gt;
&lt;h2 id=&#34;方法&#34;&gt;方法&lt;/h2&gt;
&lt;p&gt;方法一：将光标定位于需要打钩的地方，选择【插入】→【符号】→【其他符号】，在弹出的符号栏里，字体选择【Windings2】，然后便可以找到现成的打钩样式，点击插入，再关闭即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>推送 helm 到 harbor</title>
      <link>https://frytea.com/archives/1406/</link>
      <pubDate>Fri, 20 Dec 2024 11:00:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1406/</guid>
      <description>&lt;p&gt;大致流程如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo add harbor https://myharbor.mydomain.com/chartrepo/myproject --username myusername --password mypassword
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm plugin install https://github.com/chartmuseum/helm-push
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo add chartmuseum http://localhost:8080
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm cm-push mychart/ chartmuseum
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/chartmuseum/helm-push&#34;&gt;helm cm-push plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/liabio/p/16915672.html&#34;&gt;使用 Helm Cli 将 chart 推送到 Harbor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.shabby.in/create-your-helm-chart-3/&#34;&gt;helm入门指南（三）- Chart语法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>自托管 AIGC UI APP 汇总</title>
      <link>https://frytea.com/archives/1405/</link>
      <pubDate>Fri, 20 Dec 2024 04:16:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1405/</guid>
      <description>&lt;p&gt;该清单搜集人类创造的最先进最好用的开源 AIGC APP 方案，包括但不限于对话、识图、生图、TTS、知识库、多模态、工作流编排，主要搜集支持自托管，可容器化部署的方案。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用脚本镜像 helm charts 仓库</title>
      <link>https://frytea.com/archives/1402/</link>
      <pubDate>Wed, 18 Dec 2024 10:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1402/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 源 Harbor 配置  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SOURCE_HARBOR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;harbor.xxx.com&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SOURCE_PROJECT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xx-xxx&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#SOURCE_PROJECT=&amp;#34;xxx&amp;#34;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#SOURCE_USER=&amp;#34;username&amp;#34;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#SOURCE_PASS=&amp;#34;password&amp;#34;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 目标 Harbor 配置  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DEST_HARBOR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;192.168.25.8:10443&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DEST_PROJECT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xxx-xxx&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DEST_USER&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DEST_PASS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xxx@xxx&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DEST_CA_FILE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/etc/docker/certs.d/192.168.25.8:10443/ca.crt&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 添加源和目标 Harbor 仓库/  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo remove source-repo &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; true  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo remove dest-repo &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; true  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo add source-repo https://$SOURCE_HARBOR/chartrepo/$SOURCE_PROJECT &lt;span style=&#34;color:#75715e&#34;&gt;#--username $SOURCE_USER --password $SOURCE_PASS  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo add dest-repo https://$DEST_HARBOR/chartrepo/$DEST_PROJECT --username $DEST_USER --password $DEST_PASS --ca-file $DEST_CA_FILE  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 更新 repo  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo update  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 获取所有 charts  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;charts&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;helm search repo source-repo/ -o json | jq -r &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.[].name&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 遍历并同步每个 chart  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; chart in $charts  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sync with [&lt;/span&gt;$chart&lt;span style=&#34;color:#e6db74&#34;&gt;]&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;# 获取所有版本t  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   versions&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;helm search repo $chart -l -o json | jq -r &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.[].version&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   chart_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chart#source-repo/&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;# 遍历每个版本c  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; version in $versions  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sync with [&lt;/span&gt;$chart&lt;span style=&#34;color:#e6db74&#34;&gt;] [&lt;/span&gt;$version&lt;span style=&#34;color:#e6db74&#34;&gt;]&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#75715e&#34;&gt;# 下载特定版本的 chart  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       helm pull $chart --version $version  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#75715e&#34;&gt;# 推送到目标仓库t  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       helm cm-push &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chart_name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;-&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;version&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;.tgz dest-repo --ca-file $DEST_CA_FILE  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#75715e&#34;&gt;# 清理下载的文件c  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       rm &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;chart_name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;-&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;version&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;.tgz  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Delve 调试 GO 程序</title>
      <link>https://frytea.com/archives/1397/</link>
      <pubDate>Wed, 18 Dec 2024 10:17:17 +0000</pubDate>
      <guid>https://frytea.com/archives/1397/</guid>
      <description>&lt;p&gt;目前 Go 语言支持 GDB、LLDB 和 Delve 几种调试器。其中 GDB 是最早支持的调试工具，LLDB 是 macOS 系统推荐的标准调试工具。但是 GDB 和 LLDB 对 Go 语言的专有特性都缺乏很大支持，而只有 Delve 是专门为 Go 语言设计开发的调试工具。而且 Delve 本身也是采用 Go 语言开发，对 Windows 平台也提供了一样的支持。本节我们基于 Delve 简单解释如何调试 Go 汇编程序。&lt;/p&gt;</description>
    </item>
    <item>
      <title>以沙箱的方式运行容器-安全容器Kata Containers</title>
      <link>https://frytea.com/archives/1393/</link>
      <pubDate>Wed, 18 Dec 2024 10:17:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1393/</guid>
      <description>&lt;h1 id=&#34;一系统环境&#34;&gt;一.系统环境&lt;/h1&gt;
&lt;p&gt;本文主要基于Kubernetes1.22.2和Linux操作系统Ubuntu 18.04。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;服务器版本&lt;/th&gt;
          &lt;th&gt;docker软件版本&lt;/th&gt;
          &lt;th&gt;Kubernetes(k8s)集群版本&lt;/th&gt;
          &lt;th&gt;Kata软件版本&lt;/th&gt;
          &lt;th&gt;containerd软件版本&lt;/th&gt;
          &lt;th&gt;CPU架构&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Ubuntu 18.04.5 LTS&lt;/td&gt;
          &lt;td&gt;Docker version 20.10.14&lt;/td&gt;
          &lt;td&gt;v1.22.2&lt;/td&gt;
          &lt;td&gt;1.11.5&lt;/td&gt;
          &lt;td&gt;1.6.4&lt;/td&gt;
          &lt;td&gt;x86_64&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Kubernetes集群架构：k8scludes1作为master节点，k8scludes2，k8scludes3作为worker节点。&lt;/p&gt;</description>
    </item>
    <item>
      <title>快速清理 docker 容器和镜像等资源</title>
      <link>https://frytea.com/archives/1392/</link>
      <pubDate>Sat, 14 Dec 2024 14:59:47 +0000</pubDate>
      <guid>https://frytea.com/archives/1392/</guid>
      <description>&lt;p&gt;这些命令总是记不住，或者说不用心去记，所以记录在本文中，以便将来查询。&lt;/p&gt;
&lt;h2 id=&#34;列出所有的容器-id&#34;&gt;列出所有的容器 ID&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker ps -aq
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;停止所有的容器&#34;&gt;停止所有的容器&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker stop $(docker ps -aq)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;删除所有的容器&#34;&gt;删除所有的容器&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker rm $(docker ps -aq)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;删除所有的镜像&#34;&gt;删除所有的镜像&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker rmi $(docker images -q)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;复制文件&#34;&gt;复制文件&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker cp mycontainer:/opt/file.txt /opt/local/
docker cp /opt/local/file.txt mycontainer:/opt/
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;删除所有不使用的镜像&#34;&gt;删除所有不使用的镜像&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker image prune --force --all
docker image prune -f -a
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;删除所有停止的容器&#34;&gt;删除所有停止的容器&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker container prune -f
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;清理资源&#34;&gt;清理资源&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 删除未使用的数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker system prune
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 清理所有未使用的镜像&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker system prune -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://colobu.com/2018/05/15/Stop-and-remove-all-docker-containers-and-images/&#34;&gt;停止、删除所有的docker容器和镜像&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>HA 可用性表格</title>
      <link>https://frytea.com/archives/1401/</link>
      <pubDate>Sat, 14 Dec 2024 14:59:30 +0000</pubDate>
      <guid>https://frytea.com/archives/1401/</guid>
      <description>&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Availability %&lt;/th&gt;
          &lt;th&gt;Downtime per year&lt;/th&gt;
          &lt;th&gt;Downtime per quarter&lt;/th&gt;
          &lt;th&gt;Downtime per month&lt;/th&gt;
          &lt;th&gt;Downtime per week&lt;/th&gt;
          &lt;th&gt;Downtime per day (24 hours)&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;90% (&amp;ldquo;one nine&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;36.53 days&lt;/td&gt;
          &lt;td&gt;9.13 days&lt;/td&gt;
          &lt;td&gt;73.05 hours&lt;/td&gt;
          &lt;td&gt;16.80 hours&lt;/td&gt;
          &lt;td&gt;2.40 hours&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;95% (&amp;ldquo;one nine five&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;18.26 days&lt;/td&gt;
          &lt;td&gt;4.56 days&lt;/td&gt;
          &lt;td&gt;36.53 hours&lt;/td&gt;
          &lt;td&gt;8.40 hours&lt;/td&gt;
          &lt;td&gt;1.20 hours&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;97% (&amp;ldquo;one nine seven&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;10.96 days&lt;/td&gt;
          &lt;td&gt;2.74 days&lt;/td&gt;
          &lt;td&gt;21.92 hours&lt;/td&gt;
          &lt;td&gt;5.04 hours&lt;/td&gt;
          &lt;td&gt;43.20 minutes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;98% (&amp;ldquo;one nine eight&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;7.31 days&lt;/td&gt;
          &lt;td&gt;43.86 hours&lt;/td&gt;
          &lt;td&gt;14.61 hours&lt;/td&gt;
          &lt;td&gt;3.36 hours&lt;/td&gt;
          &lt;td&gt;28.80 minutes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99% (&amp;ldquo;two nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;3.65 days&lt;/td&gt;
          &lt;td&gt;21.9 hours&lt;/td&gt;
          &lt;td&gt;7.31 hours&lt;/td&gt;
          &lt;td&gt;1.68 hours&lt;/td&gt;
          &lt;td&gt;14.40 minutes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.5% (&amp;ldquo;two nines five&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;1.83 days&lt;/td&gt;
          &lt;td&gt;10.98 hours&lt;/td&gt;
          &lt;td&gt;3.65 hours&lt;/td&gt;
          &lt;td&gt;50.40 minutes&lt;/td&gt;
          &lt;td&gt;7.20 minutes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.8% (&amp;ldquo;two nines eight&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;17.53 hours&lt;/td&gt;
          &lt;td&gt;4.38 hours&lt;/td&gt;
          &lt;td&gt;87.66 minutes&lt;/td&gt;
          &lt;td&gt;20.16 minutes&lt;/td&gt;
          &lt;td&gt;2.88 minutes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.9% (&amp;ldquo;three nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;8.77 hours&lt;/td&gt;
          &lt;td&gt;2.19 hours&lt;/td&gt;
          &lt;td&gt;43.83 minutes&lt;/td&gt;
          &lt;td&gt;10.08 minutes&lt;/td&gt;
          &lt;td&gt;1.44 minutes&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.95% (&amp;ldquo;three nines five&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;4.38 hours&lt;/td&gt;
          &lt;td&gt;65.7 minutes&lt;/td&gt;
          &lt;td&gt;21.92 minutes&lt;/td&gt;
          &lt;td&gt;5.04 minutes&lt;/td&gt;
          &lt;td&gt;43.20 seconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.99% (&amp;ldquo;four nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;52.60 minutes&lt;/td&gt;
          &lt;td&gt;13.15 minutes&lt;/td&gt;
          &lt;td&gt;4.38 minutes&lt;/td&gt;
          &lt;td&gt;1.01 minutes&lt;/td&gt;
          &lt;td&gt;8.64 seconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.995% (&amp;ldquo;four nines five&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;26.30 minutes&lt;/td&gt;
          &lt;td&gt;6.57 minutes&lt;/td&gt;
          &lt;td&gt;2.19 minutes&lt;/td&gt;
          &lt;td&gt;30.24 seconds&lt;/td&gt;
          &lt;td&gt;4.32 seconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.999% (&amp;ldquo;five nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;5.26 minutes&lt;/td&gt;
          &lt;td&gt;1.31 minutes&lt;/td&gt;
          &lt;td&gt;26.30 seconds&lt;/td&gt;
          &lt;td&gt;6.05 seconds&lt;/td&gt;
          &lt;td&gt;864.00 milliseconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.9999% (&amp;ldquo;six nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;31.56 seconds&lt;/td&gt;
          &lt;td&gt;7.89 seconds&lt;/td&gt;
          &lt;td&gt;2.63 seconds&lt;/td&gt;
          &lt;td&gt;604.80 milliseconds&lt;/td&gt;
          &lt;td&gt;86.40 milliseconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.99999% (&amp;ldquo;seven nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;3.16 seconds&lt;/td&gt;
          &lt;td&gt;0.79 seconds&lt;/td&gt;
          &lt;td&gt;262.98 milliseconds&lt;/td&gt;
          &lt;td&gt;60.48 milliseconds&lt;/td&gt;
          &lt;td&gt;8.64 milliseconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.999999% (&amp;ldquo;eight nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;315.58 milliseconds&lt;/td&gt;
          &lt;td&gt;78.89 milliseconds&lt;/td&gt;
          &lt;td&gt;26.30 milliseconds&lt;/td&gt;
          &lt;td&gt;6.05 milliseconds&lt;/td&gt;
          &lt;td&gt;864.00 microseconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.9999999% (&amp;ldquo;nine nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;31.56 milliseconds&lt;/td&gt;
          &lt;td&gt;7.89 milliseconds&lt;/td&gt;
          &lt;td&gt;2.63 milliseconds&lt;/td&gt;
          &lt;td&gt;604.80 microseconds&lt;/td&gt;
          &lt;td&gt;86.40 microseconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.99999999% (&amp;ldquo;ten nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;3.16 milliseconds&lt;/td&gt;
          &lt;td&gt;788.40 microseconds&lt;/td&gt;
          &lt;td&gt;262.80 microseconds&lt;/td&gt;
          &lt;td&gt;60.48 microseconds&lt;/td&gt;
          &lt;td&gt;8.64 microseconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.999999999% (&amp;ldquo;eleven nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;315.58 microseconds&lt;/td&gt;
          &lt;td&gt;78.84 microseconds&lt;/td&gt;
          &lt;td&gt;26.28 microseconds&lt;/td&gt;
          &lt;td&gt;6.05 microseconds&lt;/td&gt;
          &lt;td&gt;864.00 nanoseconds&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;99.9999999999% (&amp;ldquo;twelve nines&amp;rdquo;)&lt;/td&gt;
          &lt;td&gt;31.56 microseconds&lt;/td&gt;
          &lt;td&gt;7.88 microseconds&lt;/td&gt;
          &lt;td&gt;2.63 microseconds&lt;/td&gt;
          &lt;td&gt;604.81 nanoseconds&lt;/td&gt;
          &lt;td&gt;86.40 nanoseconds&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/High_availability&#34;&gt;High availability - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Linux SWAP 占用情况排查 - smem</title>
      <link>https://frytea.com/archives/1399/</link>
      <pubDate>Fri, 13 Dec 2024 10:52:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1399/</guid>
      <description>&lt;p&gt;最近发现 ArchLinux 的 32G 内存经常出现 OOM，分配 SWAP 后分多少就占多少，很奇怪，就想办法排查一下，找到了 &lt;code&gt;smem&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;smem 是一款能提供大量 Linux 系统内存使用报告的工具。与现有工具不同，smem 可以报告比例集大小 (PSS)，这对虚拟内存系统中库和应用程序使用的内存量来说更有意义。
&amp;ndash; &lt;a href=&#34;https://www.selenic.com/smem/&#34;&gt;smem memory reporting tool&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>毫秒到秒以及更多关于时间尺度</title>
      <link>https://frytea.com/archives/1400/</link>
      <pubDate>Fri, 13 Dec 2024 10:39:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1400/</guid>
      <description>&lt;h1 id=&#34;秒&#34;&gt;秒&lt;/h1&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;fractions of a second&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;metric name&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;0,000 000 000 000 000 000 000 001&lt;/td&gt;
          &lt;td&gt;yoctosecond [ ys ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0,000 000 000 000 000 000 001&lt;/td&gt;
          &lt;td&gt;zeptosecond [ zs ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0,000 000 000 000 000 001&lt;/td&gt;
          &lt;td&gt;attosecond [ as ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0,000 000 000 000 001&lt;/td&gt;
          &lt;td&gt;femtosecond [ fs ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0,000 000 000 001 [ trillionth ]&lt;/td&gt;
          &lt;td&gt;picosecond [ ps ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0,000 000 001 [ billionth ]&lt;/td&gt;
          &lt;td&gt;nanosecond [ ns ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0,000 001 [ millionth ]&lt;/td&gt;
          &lt;td&gt;microsecond [ _µ_s ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0,001 [ thousandth ]&lt;/td&gt;
          &lt;td&gt;millisecond [ ms ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0.01 [ hundredth ]&lt;/td&gt;
          &lt;td&gt;centisecond [ cs ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;1.0&lt;/td&gt;
          &lt;td&gt;second [ s ]&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;秒到年&#34;&gt;秒到年&lt;/h1&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;seconds to years&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;60 seconds&lt;/td&gt;
          &lt;td&gt;= 1 minute [ mean solar ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;59.83617 seconds&lt;/td&gt;
          &lt;td&gt;= 1 minute [ sidereal ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;60 minutes&lt;/td&gt;
          &lt;td&gt;= 1 hour&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;24 hours&lt;/td&gt;
          &lt;td&gt;= 1 day&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3,600 seconds&lt;/td&gt;
          &lt;td&gt;= 1 hour&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;86,400 seconds&lt;/td&gt;
          &lt;td&gt;= 1 day [ mean solar ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;86,164.09 seconds&lt;/td&gt;
          &lt;td&gt;= 1 day [ sidereal ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;7 days&lt;/td&gt;
          &lt;td&gt;= 1 week&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;168 hours&lt;/td&gt;
          &lt;td&gt;= 1 week&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;14 days&lt;/td&gt;
          &lt;td&gt;= 1 fortnight&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;28, 29, 30 or 31 days&lt;/td&gt;
          &lt;td&gt;= 1 month&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;365 days&lt;/td&gt;
          &lt;td&gt;= 1 year&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;366 days&lt;/td&gt;
          &lt;td&gt;= 1 leap year&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;12 months&lt;/td&gt;
          &lt;td&gt;= 1 year&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;31,536,000 seconds&lt;/td&gt;
          &lt;td&gt;= 1 year [ calendar ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;31,558,150 seconds&lt;/td&gt;
          &lt;td&gt;= 1 year [ sidereal ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;31,556,930 seconds&lt;/td&gt;
          &lt;td&gt;= 1 year [ tropical ]&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;9,460,550,000,000,000 metres&lt;/td&gt;
          &lt;td&gt;= 1 light year&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;299,792,458 metres per second ( m/s )&lt;/td&gt;
          &lt;td&gt;= speed of light&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;parsec&lt;/td&gt;
          &lt;td&gt;= approx. 3.25 light years&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;周年纪念日&#34;&gt;周年纪念日&lt;/h1&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;year intervals - anniversaries&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;number of years&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Biennial&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Triennial&lt;/td&gt;
          &lt;td&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quadrennial&lt;/td&gt;
          &lt;td&gt;4&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quinquennial&lt;/td&gt;
          &lt;td&gt;5&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Hexennial *&lt;/td&gt;
          &lt;td&gt;6&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Septennial&lt;/td&gt;
          &lt;td&gt;7&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Octennial&lt;/td&gt;
          &lt;td&gt;8&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Novennial&lt;/td&gt;
          &lt;td&gt;9&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Decennial&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Hendecennial *&lt;/td&gt;
          &lt;td&gt;11&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Duodecennial&lt;/td&gt;
          &lt;td&gt;12&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Tredecennial *&lt;/td&gt;
          &lt;td&gt;13&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quindecennial&lt;/td&gt;
          &lt;td&gt;15&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Sextodecennial *&lt;/td&gt;
          &lt;td&gt;16&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Septendecennial&lt;/td&gt;
          &lt;td&gt;17&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Vigintennial *&lt;/td&gt;
          &lt;td&gt;20&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Trigentennial *&lt;/td&gt;
          &lt;td&gt;30&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quadragennial&lt;/td&gt;
          &lt;td&gt;40&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quinquagenary&lt;/td&gt;
          &lt;td&gt;50&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Sexagennial *&lt;/td&gt;
          &lt;td&gt;60&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Septuagennial *&lt;/td&gt;
          &lt;td&gt;70&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Septuagesiquintennial *&lt;/td&gt;
          &lt;td&gt;75&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Octogintennial *&lt;/td&gt;
          &lt;td&gt;80&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Nonagintennial *&lt;/td&gt;
          &lt;td&gt;90&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Centennial&lt;/td&gt;
          &lt;td&gt;100&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quasquicentennial&lt;/td&gt;
          &lt;td&gt;125&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Sesquicentennial&lt;/td&gt;
          &lt;td&gt;150&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Terquasquicentennial or Septaquintaquinquecentennial *&lt;/td&gt;
          &lt;td&gt;175&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Bicentennial&lt;/td&gt;
          &lt;td&gt;200&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quasquibicentennial *&lt;/td&gt;
          &lt;td&gt;225&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Semiquincentennial *&lt;/td&gt;
          &lt;td&gt;250&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Tercentennial&lt;/td&gt;
          &lt;td&gt;300&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Semiseptcentennial *&lt;/td&gt;
          &lt;td&gt;350&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quatercentenary&lt;/td&gt;
          &lt;td&gt;400&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quincentennial&lt;/td&gt;
          &lt;td&gt;500&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Sexcentennial *&lt;/td&gt;
          &lt;td&gt;600&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Septcentennial *&lt;/td&gt;
          &lt;td&gt;700&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Octocentennial&lt;/td&gt;
          &lt;td&gt;800&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Millenial&lt;/td&gt;
          &lt;td&gt;1,000&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Quindecimillenial&lt;/td&gt;
          &lt;td&gt;15,000&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.simetric.co.uk/si_time.htm&#34;&gt;Time measurements &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>linux vps dd windows</title>
      <link>https://frytea.com/archives/1389/</link>
      <pubDate>Fri, 13 Dec 2024 10:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1389/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh || wget -O reinstall.sh $_

bash reinstall.sh windows \
     --image-name &amp;#39;Windows 11 Enterprise LTSC 2024&amp;#39; \
     --lang zh-cn
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt=&#34;官网 dd windows 效果图&#34; loading=&#34;lazy&#34; src=&#34;https://cdn-imagehost.frytea.com/images/2024/12/09/j3diad.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;Powered By &lt;a href=&#34;https://github.com/bin456789/reinstall&#34;&gt;一键DD/重装脚本&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/bin456789/reinstall&#34;&gt;bin456789/reinstall&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>AI Prompt 整理</title>
      <link>https://frytea.com/archives/1396/</link>
      <pubDate>Thu, 12 Dec 2024 10:50:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1396/</guid>
      <description>&lt;h2 id=&#34;prompt-原则&#34;&gt;prompt 原则&lt;/h2&gt;
&lt;p&gt;1、写出清晰而具体的指示，清晰不是指短，而是尽量详细，可采用分隔符避免自己的要求和内容的混淆，分隔符形式不限：&lt;code&gt;“””&lt;/code&gt;, &lt;code&gt;&amp;lt; &amp;gt;&lt;/code&gt;, &lt;code&gt;{}&lt;/code&gt;
2、给模型思考的时间。如果答案不对，可以尝试不断变化提问方式，直到得出想要结果。可以采用简化或分解问题的方式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>dig获取并批量路由IP地址到指定网关</title>
      <link>https://frytea.com/archives/1386/</link>
      <pubDate>Thu, 12 Dec 2024 10:50:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1386/</guid>
      <description>&lt;h2 id=&#34;安装-dig&#34;&gt;安装 dig&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Debian/Ubuntu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt-get install knot-dnsutils
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# CentOS/RHEL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dnf install bind-utils
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;批量进行&#34;&gt;批量进行&lt;/h2&gt;
&lt;p&gt;下面以 frytea.com 为例，使用 dig 命令获取 frytea.com 的 IP 地址，然后添加路由规则。以下是具体步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;首先使用 dig 获取 IP 地址：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dig frytea.com +short
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;将获取到的每个 IPv4 地址添加路由规则：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 假设 dig 获取到的 IP 是 1.2.3.4，则运行：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip route add 1.2.3.4/32 via 192.168.25.18
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果你想要一个自动化的脚本来完成这个任务，可以使用以下命令：&lt;/p&gt;</description>
    </item>
    <item>
      <title>查看文件所属 RPM 包的方法</title>
      <link>https://frytea.com/archives/1387/</link>
      <pubDate>Wed, 11 Dec 2024 23:20:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1387/</guid>
      <description>&lt;p&gt;在 Linux 系统中，有几种方法可以查看文件属于哪个 RPM 包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用 &lt;code&gt;rpm -qf&lt;/code&gt; 命令：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpm -qf /path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpm -qf /bin/ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;使用 &lt;code&gt;dnf provides&lt;/code&gt; 或 &lt;code&gt;yum provides&lt;/code&gt; 命令：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dnf provides /path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 或&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum provides /path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dnf provides /bin/ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;如果是已安装的包，也可以使用 &lt;code&gt;which&lt;/code&gt; 和 &lt;code&gt;rpm -qf&lt;/code&gt; 组合：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpm -qf &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;which command_name&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git 覆写上次提交</title>
      <link>https://frytea.com/archives/1385/</link>
      <pubDate>Wed, 11 Dec 2024 23:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1385/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;
&lt;p&gt;在日常使用 Git 版本控制工具的时候，我们有时会遇到需要修改上次&lt;code&gt;commit&lt;/code&gt;提交信息的情况，例如：修改上次提交信息中的错误内容，或者想为上次提交加入些新内容等等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 网卡多队列配置方法</title>
      <link>https://frytea.com/archives/1395/</link>
      <pubDate>Tue, 10 Dec 2024 10:03:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1395/</guid>
      <description>&lt;p&gt;多队列是指网络接口卡具有在多个发送和接收队列上并行处理网络数据包的能力。在使用网卡多队列时，通常需要配置网络中断亲和性（IRQ Affinity），将不同的队列中断分配给特定的CPU处理，而不是由任意的CPU处理，这有助于减少CPU之间的争用并提高网络性能。本文介绍如何配置Linux系统的网卡多队列的网络中断亲和性和修改网卡多队列数。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 GDB 调试 Go 程序</title>
      <link>https://frytea.com/archives/1394/</link>
      <pubDate>Tue, 10 Dec 2024 10:03:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1394/</guid>
      <description>&lt;h2 id=&#34;进入调试&#34;&gt;进入调试&lt;/h2&gt;
&lt;p&gt;使用前，请先确保机器上已经安装 GDB&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[root@localhost code]# which gdb /usr/bin/gdb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;准备就绪后，以下列测试程序为例&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;msg&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello, world&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;msg&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后执行 如下命令进行编译，里面有好多个参数，有疑问的可以自行搜索引擎&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux overcommit 及 oom-killer 机制</title>
      <link>https://frytea.com/archives/1388/</link>
      <pubDate>Fri, 06 Dec 2024 10:11:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1388/</guid>
      <description>&lt;p&gt;通常是因为某时刻应用程序大量请求内存导致系统内存不足造成的，这通常会触发 Linux 内核里的 Out of Memory (OOM) killer，OOM killer 会杀掉某个进程(用户态进程，不是内核线程)以腾出内存留给系统用，不致于让系统立刻崩溃。&lt;/p&gt;</description>
    </item>
    <item>
      <title>listmonk 导入 Mailchimp 邮件清单</title>
      <link>https://frytea.com/archives/1379/</link>
      <pubDate>Fri, 06 Dec 2024 10:06:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1379/</guid>
      <description>&lt;p&gt;使用单行 &lt;code&gt;perl&lt;/code&gt; 脚本将 Mailchimp 导出的数据转换为 listmonk 可用的清单。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;perl -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;print qq{email,name,attributes\n};while(&amp;lt;&amp;gt;){ my @r = split /,/; next unless $r[0] =~ /@/; map { s/&amp;#34;//g } @r; my $name = $r[1]; $name .= &amp;#34; $r[2]&amp;#34; if $r[2]; $name ||= &amp;#34;Unknown Name&amp;#34;; print qq{$r[0],&amp;#34;$name&amp;#34;,&amp;#34;{&amp;#34;&amp;#34;mailchimp&amp;#34;&amp;#34;: true}&amp;#34;\n}}&amp;#39;&lt;/span&gt; subscribed_segment_export_xxxxx.csv 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/knadh/listmonk/issues/688&#34;&gt; mailchimp export convertor one-liner #688 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>基于 listmonk 实现 rss to mail</title>
      <link>https://frytea.com/archives/1380/</link>
      <pubDate>Fri, 06 Dec 2024 10:06:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1380/</guid>
      <description>&lt;h2 id=&#34;listmonk-部署&#34;&gt;listmonk 部署&lt;/h2&gt;
&lt;p&gt;安装 &lt;a href=&#34;https://listmonk.app/docs/installation/#docker&#34;&gt;官方教程&lt;/a&gt; 进行即可，大致如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Download the compose file to the current directory.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -LO https://github.com/knadh/listmonk/raw/master/docker-compose.yml
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Run the services in the background.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;rss-to-mail-脚本&#34;&gt;rss to mail 脚本&lt;/h2&gt;
&lt;p&gt;主程序 &lt;code&gt;main.py&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 	&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; feedparser
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; requests
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; json
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; logging
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; time &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; sleep
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; dateutil &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; parser
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; typing &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; List, Dict
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; re
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# 配置日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	logging&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;basicConfig(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    level&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;logging&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;DEBUG,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%(asctime)s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; - &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%(levelname)s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; - &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%(message)s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    handlers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        logging&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;FileHandler(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;rss_checker.log&amp;#39;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        logging&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;StreamHandler()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	logger &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; logging&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;getLogger(__name__)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	RSS_URL &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;getenv(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;RSS_URL&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://xxx.com/feed/&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	LISTMONK_API_URL &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;getenv(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;LISTMONK_API_URL&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://listmonk.xxx.com/api/campaigns&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	LISTMONK_TOKEN &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;getenv(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;LISTMONK_TOKEN&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bot:xxx&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	LISTMONK_SEND_LIST_ID &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;getenv(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;LISTMONK_SEND_LIST_ID&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	LISTMONK_SEND_LIST_IDS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [LISTMONK_SEND_LIST_ID]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;RSSChecker&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;__init__&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rss_url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; RSS_URL
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;listmonk_url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; LISTMONK_API_URL
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;headers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;token&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; LISTMONK_TOKEN
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;max_retries &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;retry_delay &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# seconds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clean_html_content&lt;/span&gt;(self, html_content: str) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; str:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;清理HTML内容，移除以http://或https://开头的内容&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; html_content:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;# 移除以http://或https://开头的内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            cleaned_content &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; re&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sub(&lt;span style=&#34;color:#e6db74&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https?://\S+&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, html_content)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;# 清理多余的空白字符&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            cleaned_content &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; re&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sub(&lt;span style=&#34;color:#e6db74&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\s+&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;, cleaned_content)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;strip()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; cleaned_content
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; e:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;error(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;清理HTML内容时出错: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;str(e)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; html_content  &lt;span style=&#34;color:#75715e&#34;&gt;# 如果处理失败，返回原始内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_last_check_time&lt;/span&gt;(self) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; str:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;last_check.txt&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                last_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; f&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;strip()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;debug(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;读取到上次检查时间: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;last_time&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; last_time
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;warning(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;未找到上次检查时间文件&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;save_check_time&lt;/span&gt;(self, time: str) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;last_check.txt&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                f&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;write(time)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;debug(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;保存本次检查时间: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;time&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; e:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;error(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;保存检查时间时出错: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;str(e)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;create_email_content&lt;/span&gt;(self, entries: List[Dict]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; str:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;创建美化的HTML邮件内容&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        html_content &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	        &amp;lt;style&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .header {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                text-align: center;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin-bottom: 40px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                padding: 20px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                background-color: #f8f9fa;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                border-radius: 8px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .main-title {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                font-size: 28px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                color: #2c3e50;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin-bottom: 10px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .subtitle {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                font-size: 20px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                color: #34495e;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin-bottom: 15px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .blog-name {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                font-size: 24px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                color: #16a085;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin-bottom: 10px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .blog-description {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                font-size: 16px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                color: #7f8c8d;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin-bottom: 20px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .article-container {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                font-family: Arial, sans-serif;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                max-width: 800px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin: 0 auto;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                padding: 20px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .article {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin-bottom: 30px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                border-bottom: 1px solid #eee;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                padding-bottom: 20px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .article-title {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                color: #333;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                font-size: 24px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin-bottom: 10px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .article-summary {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                color: #666;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                line-height: 1.6;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                margin-bottom: 15px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .read-more {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                display: inline-block;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                padding: 8px 15px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                background-color: #4CAF50;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                color: white;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                text-decoration: none;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                border-radius: 4px;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            .read-more:hover {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                background-color: #45a049;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	        &amp;lt;/style&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	        &amp;lt;div class=&amp;#34;article-container&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            &amp;lt;div class=&amp;#34;header&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                &amp;lt;h1 class=&amp;#34;main-title&amp;#34;&amp;gt;烹茶室（Oskyla 晴空阁） 更新了！&amp;lt;/h1&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                &amp;lt;h2 class=&amp;#34;subtitle&amp;#34;&amp;gt;欢迎访问 Frytea&amp;#39;s Blog&amp;lt;/h2&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                &amp;lt;h3 class=&amp;#34;blog-name&amp;#34;&amp;gt;Oskyla 烹茶室&amp;lt;/h3&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                &amp;lt;p class=&amp;#34;blog-description&amp;#34;&amp;gt;价值信息藏书阁，统一门户入口。&amp;lt;/p&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            &amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	        &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; entry &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; entries:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;# 清理文章标题和摘要中的HTML内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            clean_title &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;clean_html_content(entry&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;title)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            clean_summary &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;clean_html_content(entry&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;summary)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            html_content &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            &amp;lt;div class=&amp;#34;article&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                &amp;lt;h2 class=&amp;#34;article-title&amp;#34;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;clean_title&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/h2&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                &amp;lt;div class=&amp;#34;article-summary&amp;#34;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;clean_summary&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	                &amp;lt;a href=&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;entry&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;link&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; class=&amp;#34;read-more&amp;#34;&amp;gt;阅读全文&amp;lt;/a&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            &amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;	            &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        html_content &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;/div&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; html_content
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;publish_campaign&lt;/span&gt;(self, campaign_id: int) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; bool:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; attempt &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;max_retries):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                publish_url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;listmonk_url&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;campaign_id&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/status&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                response &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;put(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    publish_url,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;headers,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    json&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;running&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;status_code &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;info(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;活动 &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;campaign_id&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 发布成功&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;warning(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;发布尝试 &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attempt &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 失败: HTTP &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;status_code&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; attempt &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;max_retries &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    sleep(self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;retry_delay)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;exceptions&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;RequestException &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; e:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;error(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;发布API请求异常: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;str(e)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; attempt &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;max_retries &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    sleep(self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;retry_delay)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;send_newsletter&lt;/span&gt;(self, new_entries: List[Dict]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; bool:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            content &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create_email_content(new_entries)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;# 获取文章数量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            article_count &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; len(new_entries)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;# 清理标题中的HTML内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;#titles = &amp;#34;, &amp;#34;.join(self.clean_html_content(entry.title) for entry in new_entries)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Frytea&amp;#39;s Blog 更新通知&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;subject&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Frytea&amp;#39;s Blog 更新了 &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;article_count&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 篇新文章&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;lists&amp;#34;&lt;/span&gt;: LISTMONK_SEND_LIST_IDS,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content_type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;html&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;: content,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;regular&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;debug(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;准备发送的数据: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;dumps(data, indent&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            response &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;post(self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;listmonk_url, headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;headers, json&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;data)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;status_code &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                campaign_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;json()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;, {})&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; campaign_id:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;publish_campaign(campaign_id)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;error(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;创建活动失败: HTTP &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;status_code&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; e:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;error(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;发送邮件时出错: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;str(e)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;check_and_send&lt;/span&gt;(self) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;info(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;开始解析RSS源: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rss_url&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            feed &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; feedparser&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;parse(self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rss_url)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; feed&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;bozo:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;error(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RSS解析错误: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;feed&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;bozo_exception&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; feed&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;entries:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;warning(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;RSS源没有任何条目&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            last_check &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_last_check_time()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            new_entries &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;#for entry in feed.entries:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;#    if not last_check or entry.published &amp;gt; last_check:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#75715e&#34;&gt;#        new_entries.append(entry)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; entry &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; feed&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;entries:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#75715e&#34;&gt;# 将字符串解析为 datetime 对象&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                entry_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; parser&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;parse(entry&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;published)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                last_check_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; parser&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;parse(last_check) &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; last_check &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; last_check_time &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; entry_time &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; last_check_time:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    new_entries&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(entry)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; new_entries:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;info(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;检测到 &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;len(new_entries)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 篇新文章&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;send_newsletter(new_entries):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                    self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;save_check_time(max(entry&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;published &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; entry &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; new_entries))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;info(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;没有新文章&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	        &lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; e:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	            logger&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;error(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;执行过程中出现未预期的错误: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;str(e)&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, exc_info&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    checker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; RSSChecker()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    checker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;check_and_send()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;依赖 &lt;code&gt;requirements.txt&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker 部署 mautic 并增加插件和翻译包等</title>
      <link>https://frytea.com/archives/1381/</link>
      <pubDate>Tue, 03 Dec 2024 11:49:59 +0000</pubDate>
      <guid>https://frytea.com/archives/1381/</guid>
      <description>&lt;h2 id=&#34;docker-部署方法&#34;&gt;Docker 部署方法&lt;/h2&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://github.com/mautic/docker-mautic/tree/mautic5/examples&#34;&gt;https://github.com/mautic/docker-mautic/tree/mautic5/examples&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;增加插件&#34;&gt;增加插件&lt;/h2&gt;
&lt;p&gt;使用如下 &lt;code&gt;Dockerfile&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;FROM mautic/mautic:5-apache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;COPY ./plugins/ /var/www/html/docroot/plugins/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结合以下 &lt;code&gt;Makefile&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-makefile&#34; data-lang=&#34;makefile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;all&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        docker build -t mautic/mautic:5-apache-my .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;整个目录架构是这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root@tencent-gz1:/data/docker/mautic/add-something# tree -L &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── Dockerfile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── Makefile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── plugins
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   └── MauticRssToEmailBundle
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└── translations
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    └── zh_CN.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行&lt;/p&gt;
&lt;h2 id=&#34;增加语言包&#34;&gt;增加语言包&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;Dockerfile&lt;/code&gt; 增加一个目录：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ceph RBD 查看实际占用top</title>
      <link>https://frytea.com/archives/1375/</link>
      <pubDate>Mon, 02 Dec 2024 10:12:37 +0000</pubDate>
      <guid>https://frytea.com/archives/1375/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rbd du -p ssd | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;NR&amp;gt;1 {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   size=$4  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   unit=$5  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   if (unit==&amp;#34;MiB&amp;#34;) size=size  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   else if (unit==&amp;#34;GiB&amp;#34;) size=size*1024  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   else if (unit==&amp;#34;TiB&amp;#34;) size=size*1024*1024  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   print size &amp;#34; &amp;#34; unit &amp;#34; &amp;#34; $0  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&amp;#39;&lt;/span&gt; | sort -nr | head -n &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt; | cut -d&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; -f3-
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;by claude 3.5&lt;/p&gt;
&lt;p&gt;效果：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;root@pve1:~# rbd du -p ssd | awk &amp;#39;  
NR&amp;gt;1 {  
   size=$4  
   unit=$5  
   if (unit==&amp;#34;MiB&amp;#34;) size=size  
   else if (unit==&amp;#34;GiB&amp;#34;) size=size*1024  
   else if (unit==&amp;#34;TiB&amp;#34;) size=size*1024*1024  
   print size &amp;#34; &amp;#34; unit &amp;#34; &amp;#34; $0  
}&amp;#39; | sort -nr | head -n 50 | cut -d&amp;#34; &amp;#34; -f3-  
&amp;lt;TOTAL&amp;gt;                                              111 TiB    47 TiB  
vm-1033-disk-0                                        20 TiB    20 TiB  
vm-1054-disk-1@bak20240731                          1000 GiB   677 GiB  
vm-503-disk-3                                        500 GiB   500 GiB  
vm-502-disk-3                                        500 GiB   500 GiB  
vm-501-disk-3                                        500 GiB   500 GiB  
vm-1054-disk-1@bak20231106                          1000 GiB   475 GiB  
vm-497-disk-0@backup0530                             500 GiB   340 GiB  
vm-1279-disk-1                                       320 GiB   320 GiB  
vm-1090-disk-0                                       300 GiB   300 GiB
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Bash 条件判断</title>
      <link>https://frytea.com/archives/1374/</link>
      <pubDate>Mon, 02 Dec 2024 10:12:28 +0000</pubDate>
      <guid>https://frytea.com/archives/1374/</guid>
      <description>&lt;p&gt;本章介绍 Bash 脚本的条件判断语法。&lt;/p&gt;
&lt;h2 id=&#34;if-结构&#34;&gt;&lt;code&gt;if&lt;/code&gt; 结构&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;if&lt;/code&gt;是最常用的条件判断结构，只有符合给定条件时，才会执行指定的命令。它的语法如下。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;if commands; then
  commands
[elif commands; then
  commands...]
[else
  commands]
fi
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个命令分成三个部分：&lt;code&gt;if&lt;/code&gt;、&lt;code&gt;elif&lt;/code&gt;和&lt;code&gt;else&lt;/code&gt;。其中，后两个部分是可选的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SmokePing 搭建及多节点探测</title>
      <link>https://frytea.com/archives/1373/</link>
      <pubDate>Sat, 30 Nov 2024 17:59:28 +0000</pubDate>
      <guid>https://frytea.com/archives/1373/</guid>
      <description>&lt;h2 id=&#34;linuxserver-版-docker&#34;&gt;linuxserver 版 docker&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;smokeping&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;lscr.io/linuxserver/smokeping:latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;smokeping&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;PUID=1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;PGID=1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;TZ=Asia/Shanghai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;MASTER_URL=http://&amp;lt;master-host-ip&amp;gt;:80/smokeping/&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#optional&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;SHARED_SECRET=password&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#optional&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;CACHE_DIR=/tmp&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#optional&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./data/config:/config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./data/data:/data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;unless-stopped&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中的 &lt;code&gt;data/config/Targets&lt;/code&gt; 为监控目标配置。&lt;/p&gt;
&lt;h2 id=&#34;配置说明&#34;&gt;配置说明&lt;/h2&gt;
&lt;h3 id=&#34;general&#34;&gt;&lt;code&gt;General&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;自行配置。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;*** General ***

owner    = frytea.com
contact  = songtianlun@frytea.com
mailhost = my.mail.host
# NOTE: do not put the Image Cache below cgi-bin
# since all files under cgi-bin will be executed ... this is not
# good for images.
cgiurl   = http://localhost/smokeping/smokeping.cgi
# specify this to get syslog logging
syslogfacility = local0
# each probe is now run in its own process
# disable this to revert to the old behaviour
# concurrentprobes = no
display_name = Frytea&amp;#39;s SmokePing

@include /config/pathnames
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;probes&#34;&gt;&lt;code&gt;Probes&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;配置侦测频率。&lt;/p&gt;</description>
    </item>
    <item>
      <title>常用在线网络测试工具的对比矩阵</title>
      <link>https://frytea.com/archives/1382/</link>
      <pubDate>Sat, 30 Nov 2024 16:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1382/</guid>
      <description>&lt;p&gt;常用网络测试工具的对比矩阵:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;工具网站&lt;/th&gt;
          &lt;th&gt;PING&lt;/th&gt;
          &lt;th&gt;TCPing&lt;/th&gt;
          &lt;th&gt;MTR&lt;/th&gt;
          &lt;th&gt;DNS&lt;/th&gt;
          &lt;th&gt;HTTP(S)&lt;/th&gt;
          &lt;th&gt;端口扫描&lt;/th&gt;
          &lt;th&gt;路由追踪&lt;/th&gt;
          &lt;th&gt;IP 查询&lt;/th&gt;
          &lt;th&gt;多节点&lt;/th&gt;
          &lt;th&gt;SSL证书&lt;/th&gt;
          &lt;th&gt;IPv6&lt;/th&gt;
          &lt;th&gt;API&lt;/th&gt;
          &lt;th&gt;特色功能&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://ping.pe&#34;&gt;ping.pe&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;全球节点,命令行风格&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://ping.chinaz.com&#34;&gt;ping.chinaz.com&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;国内节点覆盖全,历史记录&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://www.itdog.cn&#34;&gt;itdog.cn&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;界面友好,检测报告详细&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://www.17ce.com&#34;&gt;17ce.com&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;性能监控,故障分析&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://tools.ipip.net&#34;&gt;ipip.net&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;IP地理位置,AS信息&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://tool.lu&#34;&gt;tool.lu&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;工具集合,便捷使用&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://www.boce.com&#34;&gt;boce.com&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;网站监控,性能分析&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://ping.eu&#34;&gt;ping.eu&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;-&lt;/td&gt;
          &lt;td&gt;欧洲节点为主&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://zhale.me/&#34;&gt;zhale.me&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;全球1000+网络拨测节点，模拟用户访问域名/IP，实用小工具，运维必备&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://ping.sx&#34;&gt;ping.sx&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://www.tance.cc/&#34;&gt;tance.cc&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;a href=&#34;https://www.cesu.net/&#34;&gt;cesu.net&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;功能说明:&lt;/p&gt;</description>
    </item>
    <item>
      <title>RockLinux 安装 Docker</title>
      <link>https://frytea.com/archives/1371/</link>
      <pubDate>Fri, 29 Nov 2024 10:40:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1371/</guid>
      <description>&lt;p&gt;Docker Engine 可以在 Rocky Linux 服务器上运行原生 Docker 风格的容器工作负载。在运行完整的 Docker Desktop 环境时，有时会首选这种方式。&lt;/p&gt;
&lt;h2 id=&#34;添加-docker-仓库&#34;&gt;添加 Docker 仓库&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;dnf&lt;/code&gt; 工具将 Docker 仓库添加到你的 Rocky Linux 服务器。输入：&lt;/p&gt;</description>
    </item>
    <item>
      <title>常用公共 DNS 服务器</title>
      <link>https://frytea.com/archives/1372/</link>
      <pubDate>Fri, 29 Nov 2024 10:40:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1372/</guid>
      <description>&lt;h2 id=&#34;汇总表格&#34;&gt;汇总表格&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;名称&lt;/th&gt;
          &lt;th&gt;IPv4&lt;/th&gt;
          &lt;th&gt;IPv6&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;DNSPod&lt;/td&gt;
          &lt;td&gt;119.29.29.29&lt;/td&gt;
          &lt;td&gt;2402:4e00::&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;AliDNS&lt;/td&gt;
          &lt;td&gt;223.5.5.5 223.6.6.6&lt;/td&gt;
          &lt;td&gt;2400:3200::1 2400:3200:baba::1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;BaiduDNS&lt;/td&gt;
          &lt;td&gt;180.76.76.76&lt;/td&gt;
          &lt;td&gt;2400:da00::6666&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;360DNS&lt;/td&gt;
          &lt;td&gt;101.226.4.6 218.30.118.6&lt;/td&gt;
          &lt;td&gt;123.125.81.6 140.207.198.6&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;114DNS&lt;/td&gt;
          &lt;td&gt;114.114.114.114 114.114.115.115&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;ChinaDNS&lt;/td&gt;
          &lt;td&gt;1.2.4.8 210.2.4.8&lt;/td&gt;
          &lt;td&gt;2001:dc7:1000::1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;OneDNS&lt;/td&gt;
          &lt;td&gt;117.50.11.11 117.50.22.22&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;Hi!XNS DNS&lt;/td&gt;
          &lt;td&gt;40.73.101.101&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;TWNIC DNS&lt;/td&gt;
          &lt;td&gt;101.101.101.101 101.102.103.104&lt;/td&gt;
          &lt;td&gt;2001:de4::101 2001:de4::102&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;国内知名公共-dns-服务器&#34;&gt;国内知名公共 DNS 服务器&lt;/h2&gt;
&lt;h3 id=&#34;腾讯-dns-dnspod&#34;&gt;腾讯 DNS (DNSPod)&lt;/h3&gt;
&lt;p&gt;由 DNSPod 提供的公共免费 DNS，后来 DNSPod 被腾讯(Tencent)收购，现在属于腾讯公司所有，稳定性和连通性也是不错的，经测试海外也可以使用。 DNSPod 除了 IPv4，现在同时支持 IPv6 DNS 和 DoT/DoH 服务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ArchLinux 图片压缩工具</title>
      <link>https://frytea.com/archives/1370/</link>
      <pubDate>Fri, 29 Nov 2024 10:39:52 +0000</pubDate>
      <guid>https://frytea.com/archives/1370/</guid>
      <description>&lt;p&gt;在 Arch Linux 下有几个优秀的 PNG 图片压缩工具：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;OptiPNG&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pacman -S optipng
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 使用示例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;optipng -o5 image.png    &lt;span style=&#34;color:#75715e&#34;&gt;# o5 表示优化级别，范围是 0-7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;c&lt;span style=&#34;color:#e6db74&#34;&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2. **pngquant**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;```&lt;/span&gt;bash
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pacman -S pngquant
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 使用示例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pngquant --quality&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;65-80 image.png  &lt;span style=&#34;color:#75715e&#34;&gt;# 设置质量范围在65-80之间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;Trimage&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;这是一个带 GUI 界面的工具，可以同时压缩 PNG 和 JPEG&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装（从 AUR）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yay -S trimage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;strong&gt;oxipng&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装（从 AUR）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yay -S oxipng
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 使用示例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;oxipng -o &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; image.png    &lt;span style=&#34;color:#75715e&#34;&gt;# o4 表示优化级别，范围是 0-6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;个人推荐：&lt;/p&gt;</description>
    </item>
    <item>
      <title>K8s 第一个容器及服务 whoami</title>
      <link>https://frytea.com/archives/1367/</link>
      <pubDate>Thu, 28 Nov 2024 10:11:38 +0000</pubDate>
      <guid>https://frytea.com/archives/1367/</guid>
      <description>&lt;h2 id=&#34;示例资源清单&#34;&gt;示例资源清单&lt;/h2&gt;
&lt;p&gt;示例部署资源清单：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;apps/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Deployment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;whoami-deploy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;replicas&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;selector&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;matchLabels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;whoami&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;release&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;canary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;template&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;whoami&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;release&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;canary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;containers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;whoami&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;traefik/whoami:v1.10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;containerPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;whoami&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;NodePort&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;selector&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;whoami&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;release&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;canary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;port&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;targetPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# pod port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;nodePort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;30080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;部署：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl apply -f xxx.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;关键参数说明&#34;&gt;关键参数说明&lt;/h2&gt;
&lt;p&gt;我来为您解释这个 Kubernetes 配置文件中的关键参数：&lt;/p&gt;</description>
    </item>
    <item>
      <title>kuboard v3 快速部署</title>
      <link>https://frytea.com/archives/1366/</link>
      <pubDate>Thu, 28 Nov 2024 10:11:29 +0000</pubDate>
      <guid>https://frytea.com/archives/1366/</guid>
      <description>&lt;p&gt;Kuboard 官网给的 k8s 单节点快速部署似乎不太好用，直接用 docker 的翻译了一份，用于快速部署。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;apps/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Deployment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;namespace&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;replicas&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;selector&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;matchLabels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;template&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;labels&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;containers&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;eipwork/kuboard:v3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;containerPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;containerPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10081&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;env&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;KUBOARD_ENDPOINT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://192.168.26.133:30080&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 请替换为您的实际内网 IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;KUBOARD_AGENT_SERVER_TCP_PORT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10081&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;volumeMounts&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;mountPath&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;/data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;hostPath&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;/etc/kuboard/data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;DirectoryOrCreate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard-svc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;namespace&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;selector&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kuboard&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;port&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;targetPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;nodePort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;30080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;port&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10081&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;targetPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10081&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;NodePort&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kubard 官网：https://kuboard.cn/&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 22.04设置DNS</title>
      <link>https://frytea.com/archives/1365/</link>
      <pubDate>Thu, 28 Nov 2024 10:11:14 +0000</pubDate>
      <guid>https://frytea.com/archives/1365/</guid>
      <description>&lt;p&gt;DNS域名系统是网络基础架构的核心部分，提供了一种将域名转换为IP地址的方法。&lt;/p&gt;
&lt;p&gt;您可以将DNS视为互联网的电话簿。注意这篇文章不是在Ubuntu 22.04配置自己的DNS服务器。而是给客户端配置DNS的IP地址。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Obsidian 多设备同步方案整理</title>
      <link>https://frytea.com/archives/1377/</link>
      <pubDate>Tue, 26 Nov 2024 11:21:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1377/</guid>
      <description>&lt;p&gt;同步方案大致有下面这几种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/vrtmrz/obsidian-livesync&#34;&gt;&lt;code&gt;obsidian-livesync&lt;/code&gt;(插件)&lt;/a&gt;：自托管在线同步，支持实时同步，社区活跃，使用自建 &lt;code&gt;CouchDB&lt;/code&gt; 数据库存放数据；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/remotely-save/remotely-save&#34;&gt;&lt;code&gt;remotely-save&lt;/code&gt;(插件)&lt;/a&gt;：支持S3 (Amazon S3/Cloudflare R2/Backblaze B2/&amp;hellip;)、Dropbox、webdav (NextCloud/InfiniCLOUD/Synology/&amp;hellip;)、OneDrive 等数据源。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Vinzent03/obsidian-git&#34;&gt;&lt;code&gt;obsidian git&lt;/code&gt;(插件)&lt;/a&gt;：集成 git，主要是 git 做版本管理的，用起来不是很方便。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;obsidian-sync&lt;/code&gt;(官方同步)：官方方案，无需多言，每月4$。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;对比表格&#34;&gt;对比表格&lt;/h2&gt;
&lt;p&gt;claude 对以上方案的对比如下表：&lt;/p&gt;</description>
    </item>
    <item>
      <title>查找文件所属 rpm 安装包的方法</title>
      <link>https://frytea.com/archives/1364/</link>
      <pubDate>Sat, 23 Nov 2024 03:00:12 +0000</pubDate>
      <guid>https://frytea.com/archives/1364/</guid>
      <description>&lt;p&gt;我来介绍几种在 RPM 系统中查找文件所属包的方法:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对于已安装的文件，使用 &lt;code&gt;rpm -qf&lt;/code&gt; 命令:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rpm -qf /path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;使用 &lt;code&gt;dnf provides&lt;/code&gt; 命令(适用于已安装或未安装的文件):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dnf provides /path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;使用 &lt;code&gt;yum provides&lt;/code&gt; 命令(与 dnf provides 类似):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum provides /path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;举个实际例子:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubespray 部署生产级 k8s 集群</title>
      <link>https://frytea.com/archives/1363/</link>
      <pubDate>Sat, 23 Nov 2024 03:00:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1363/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/kubernetes-sigs/kubespray&#34;&gt;kubespray&lt;/a&gt; 是基于 &lt;a href=&#34;https://docs.ansible.com/ansible/latest/index.html&#34;&gt;ansible&lt;/a&gt; 开发的一套 K8s 生命周期管理软件，由 k8s 官方 sig 维护。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;遇到问题多读文档，搞清楚命令意味着什么再操作。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;部署方法&#34;&gt;部署方法&lt;/h2&gt;
&lt;h3 id=&#34;获取部署程序&#34;&gt;获取部署程序&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 从 kubespray 官方仓库拉取
git clone --depth=1 https://github.com/kubernetes-sigs/kubespray.git
# 切换到 v2.26.0 版本，不同版本对应支持不同 k8s 版本，根据需要切换
git checkout v2.26.0

# 进入部署程序目录
cd kubespray

# 创建 python 虚拟环境，激活，并安装依赖
python3 -m venv .venv
source .venv/bin/activate
pip3 install -r  requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;定义部署节点信息&#34;&gt;定义部署节点信息&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 从集群配置模板拷贝一份
cp -rfp inventory/sample inventory/mycluster

# 定义节点 IP 清单，将 IP 更换为自己节点的 IP
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

# 根据需要调整节点角色
inventory/mycluster/hosts.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;执行以上命令后会在生成一份节点角色清单在 &lt;code&gt;inventory/mycluster/hosts.yaml&lt;/code&gt; 路径下，可以根据需要调整，如调整希望作为 master 的节点、运行 etcd 的节点、作为 worker 的节点等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWRT 软件源整理</title>
      <link>https://frytea.com/archives/1354/</link>
      <pubDate>Sat, 23 Nov 2024 02:59:38 +0000</pubDate>
      <guid>https://frytea.com/archives/1354/</guid>
      <description>&lt;h2 id=&#34;软件源整理&#34;&gt;软件源整理&lt;/h2&gt;
&lt;h3 id=&#34;官方镜像站&#34;&gt;官方镜像站&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;OpenWRT官方下载站点&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://downloads.openwrt.org/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;这是 OpenWRT的主站点，提供所有官方版本的固件和软件包。该站点是获取最新稳定版、开发版（snapshot）和历史版本的主要来源。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;OpenWRT官方GitHub仓库&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://github.com/openwrt/openwrt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;虽然主要用于代码存储和开发，但也提供了一些资源和文档链接。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;国内镜像站&#34;&gt;国内镜像站&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;清华大学开源软件镜像站&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://mirrors.tuna.tsinghua.edu.cn/openwrt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;提供了OpenWRT各个版本的镜像，非常稳定和快速。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;中科大开源镜像站&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://mirrors.ustc.edu.cn/openwrt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;也是一个非常可靠的镜像源，提供OpenWRT的各个版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;阿里云开源镜像站&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://mirrors.aliyun.com/openwrt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;提供稳定的OpenWRT镜像下载服务。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;strong&gt;重庆大学开源镜像站&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://mirrors.cqu.edu.cn/openwrt/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;同样是一个可以选择的国内镜像源。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;strong&gt;南京大学开源镜像站&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://mirror.nju.edu.cn/openwrt/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;提供了OpenWRT的多版本支持。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;&lt;strong&gt;上海交通大学开源镜像站&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://mirror.sjtu.edu.cn/openwrt/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;提供稳定的开源软件镜像服务。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;&lt;strong&gt;兰州大学开源镜像站&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://mirror.lzu.edu.cn/openwrt/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;提供多个开源项目的镜像下载。界面有点意思。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;&lt;strong&gt;浙江大学开源镜像站&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://mirrors.zju.edu.cn/openwrt/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;提供多种开源软件项目的镜像。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;个人镜像站&#34;&gt;个人镜像站&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;OpenWRT.AI软件仓库：&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://dl.openwrt.ai/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kiddin9&#34;&gt;Kiddin9&lt;/a&gt;的自建软件仓库，目前只支持OpenWRT 23.05版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;如何选择和使用镜像站&#34;&gt;如何选择和使用镜像站&lt;/h2&gt;
&lt;p&gt;在OpenWRT路由器上配置官方软件源通常不需要额外操作，因为默认情况下，OpenWRT已经配置了官方软件源。只需运行&lt;code&gt;opkg update&lt;/code&gt;命令以确保软件包列表是最新的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>镜像操作神器 skopeo 用法总结</title>
      <link>https://frytea.com/archives/1353/</link>
      <pubDate>Sat, 23 Nov 2024 02:59:30 +0000</pubDate>
      <guid>https://frytea.com/archives/1353/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://github.com/containers/skopeo&#34;&gt;skopeo&lt;/a&gt;&lt;/strong&gt; 是一个命令行工具，可对容器镜像和容器存储进行操作。 在没有dockerd的环境下，使用 &lt;strong&gt;skopeo&lt;/strong&gt; 操作镜像是非常方便的。&lt;/p&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;
&lt;h3 id=&#34;包管理器&#34;&gt;包管理器&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# RHEL / CentOS Stream ≥ 8
sudo dnf install skopeo

# RHEL/CentOS ≤ 7.x
yum install skopeo

# openSUSE:
sudo zypper install skopeo

# alpine:
sudo apk add skopeo

# macOS:
brew install skopeo

# ArchLinux
sudo pacman -S skopeo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其他系统见 &lt;a href=&#34;https://github.com/containers/skopeo/blob/master/install.md&#34;&gt;安装文档&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>开源项目管理软件对比总结</title>
      <link>https://frytea.com/archives/1350/</link>
      <pubDate>Sat, 23 Nov 2024 02:59:22 +0000</pubDate>
      <guid>https://frytea.com/archives/1350/</guid>
      <description>&lt;p&gt;以下是 Kanboard、Wekan、Taiga、OpenProject 和 Redmine 这五个软件的对比表格：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;功能/属性&lt;/th&gt;
          &lt;th&gt;Kanboard&lt;/th&gt;
          &lt;th&gt;Wekan&lt;/th&gt;
          &lt;th&gt;Taiga&lt;/th&gt;
          &lt;th&gt;OpenProject&lt;/th&gt;
          &lt;th&gt;Redmine&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;软件类型&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;项目管理&lt;/td&gt;
          &lt;td&gt;项目管理&lt;/td&gt;
          &lt;td&gt;项目管理及敏捷开发&lt;/td&gt;
          &lt;td&gt;项目管理及协作&lt;/td&gt;
          &lt;td&gt;项目管理&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;开源&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;界面语言&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;多语言支持&lt;/td&gt;
          &lt;td&gt;多语言支持&lt;/td&gt;
          &lt;td&gt;多语言支持&lt;/td&gt;
          &lt;td&gt;多语言支持&lt;/td&gt;
          &lt;td&gt;多语言支持&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;主要功能&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;看板、任务管理、时间跟踪&lt;/td&gt;
          &lt;td&gt;看板、任务管理&lt;/td&gt;
          &lt;td&gt;敏捷管理、Scrum、Kanban&lt;/td&gt;
          &lt;td&gt;甘特图、时间跟踪、资源管理&lt;/td&gt;
          &lt;td&gt;问题跟踪、甘特图、日历&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;安装方式&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;自托管、Docker&lt;/td&gt;
          &lt;td&gt;自托管、Docker&lt;/td&gt;
          &lt;td&gt;自托管、云托管、Docker&lt;/td&gt;
          &lt;td&gt;自托管、云托管、Docker&lt;/td&gt;
          &lt;td&gt;自托管、云托管、Docker&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;集成功能&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;少量插件、API&lt;/td&gt;
          &lt;td&gt;API、与其他系统集成&lt;/td&gt;
          &lt;td&gt;GitHub、GitLab、Slack 等&lt;/td&gt;
          &lt;td&gt;多种插件、API&lt;/td&gt;
          &lt;td&gt;丰富的插件与API支持&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;适用团队规模&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;小型到中型&lt;/td&gt;
          &lt;td&gt;小型到中型&lt;/td&gt;
          &lt;td&gt;中型到大型，可扩展&lt;/td&gt;
          &lt;td&gt;小型到大型&lt;/td&gt;
          &lt;td&gt;小型到大型&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;界面友好性&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;简单直观&lt;/td&gt;
          &lt;td&gt;简单直观&lt;/td&gt;
          &lt;td&gt;现代但稍复杂&lt;/td&gt;
          &lt;td&gt;功能丰富但可能更复杂&lt;/td&gt;
          &lt;td&gt;简单直观，但界面略显陈旧&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;社区活跃度&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;中等&lt;/td&gt;
          &lt;td&gt;高&lt;/td&gt;
          &lt;td&gt;高&lt;/td&gt;
          &lt;td&gt;高&lt;/td&gt;
          &lt;td&gt;高&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;移动应用支持&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;无&lt;/td&gt;
          &lt;td&gt;无&lt;/td&gt;
          &lt;td&gt;第三方应用或网页&lt;/td&gt;
          &lt;td&gt;无官方移动应用&lt;/td&gt;
          &lt;td&gt;无官方移动应用&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;特别支持功能&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;强调简单性和看板视图&lt;/td&gt;
          &lt;td&gt;实时协作和活动流&lt;/td&gt;
          &lt;td&gt;支持敏捷项目管理流程&lt;/td&gt;
          &lt;td&gt;适合多种项目管理方法&lt;/td&gt;
          &lt;td&gt;自定义字段、复杂权限管理&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Redmine 是一个久经考验的项目管理和问题跟踪工具，以其强大的可扩展性和插件系统而著称。它适合那些需要高度定制化和强大问题跟踪功能的团队。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 使用 rinetd 实现端口转发重定向</title>
      <link>https://frytea.com/archives/1357/</link>
      <pubDate>Sat, 23 Nov 2024 02:59:11 +0000</pubDate>
      <guid>https://frytea.com/archives/1357/</guid>
      <description>&lt;h3 id=&#34;工具介绍&#34;&gt;工具介绍&lt;/h3&gt;
&lt;p&gt;linux 下简单好用的工具 rinetd，实现端口映射 / 转发 / 重定向。&lt;/p&gt;
&lt;p&gt;用于有效地将连接从一个 IP 地址 / 端口组合重定向到另一 IP 地址 / 端口组合。在操作虚拟服务器、防火墙等时很有用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>mysql bin 日志过大处理方法</title>
      <link>https://frytea.com/archives/1356/</link>
      <pubDate>Sat, 23 Nov 2024 02:59:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1356/</guid>
      <description>&lt;p&gt;我来帮您解决 MySQL binlog 文件占用空间过大的问题。以下是几个处理方案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;清理旧的 binlog 文件&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看当前的 binlog 文件列表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SHOW&lt;/span&gt; BINARY LOGS;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 手动删除指定日期之前的 binlog
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;PURGE BINARY LOGS &lt;span style=&#34;color:#66d9ef&#34;&gt;BEFORE&lt;/span&gt; DATE_SUB(NOW(), INTERVAL &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DAY&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 或者删除指定文件之前的所有日志
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;PURGE BINARY LOGS &lt;span style=&#34;color:#66d9ef&#34;&gt;TO&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mysql-bin.000123&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;&lt;strong&gt;设置 binlog 自动清理策略&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 设置 binlog 保留天数（比如保留7天）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;GLOBAL&lt;/span&gt; expire_logs_days &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- MySQL 8.0之后使用以下命令
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;GLOBAL&lt;/span&gt; binlog_expire_logs_seconds &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;604800&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;-- 7天 = 7*24*60*60秒
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;修改配置文件优化&lt;/strong&gt;
在 &lt;code&gt;my.cnf&lt;/code&gt; 或 &lt;code&gt;my.ini&lt;/code&gt; 中添加：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置 binlog 过期时间（天）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;expire_logs_days&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# MySQL 8.0+ 使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;binlog_expire_logs_seconds&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;604800&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置单个 binlog 文件的最大值（默认1G）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_binlog_size&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;100M&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;建议采取的步骤：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes 使用 Kubectl 重启 Pod 的多种方法</title>
      <link>https://frytea.com/archives/1349/</link>
      <pubDate>Wed, 20 Nov 2024 10:10:31 +0000</pubDate>
      <guid>https://frytea.com/archives/1349/</guid>
      <description>&lt;p&gt;大家可能都知道 &lt;code&gt;kubectl&lt;/code&gt; 其实没有 &lt;code&gt;restart pod&lt;/code&gt; 这个命令，这个主要是由于在 &lt;code&gt;k8s&lt;/code&gt; 中 &lt;code&gt;pod&lt;/code&gt; 的管理属于 &lt;code&gt;rs&lt;/code&gt; 等控制器，并不需要运维手动维护，但有时候，我们修改了 &lt;code&gt;configmap&lt;/code&gt; 的配置文件后，希望重启 &lt;code&gt;pod&lt;/code&gt; 加载配置，此时就需要 “重启”  &lt;code&gt;Pod&lt;/code&gt;。这里说的“重启”是加了引号的，准确地来说，是重建 &lt;code&gt;pod&lt;/code&gt;，给用户的感觉是重启。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 earlyoom 提前终止 Linux 高内存占用进程</title>
      <link>https://frytea.com/archives/1348/</link>
      <pubDate>Wed, 20 Nov 2024 10:09:47 +0000</pubDate>
      <guid>https://frytea.com/archives/1348/</guid>
      <description>&lt;p&gt;当我在服务器上运行一个不太重要的进程时，它的内存使用量会随实际情况不断发生变化，当它的内存超过某个阈值时，我想要 kill 掉它并重启该进程。为了满足我这个需求，我了解到了 &lt;code&gt;earlyoom&lt;/code&gt; 这个程序。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes 使用 multus 插件增加子接口并固定 ip</title>
      <link>https://frytea.com/archives/1347/</link>
      <pubDate>Tue, 19 Nov 2024 16:17:46 +0000</pubDate>
      <guid>https://frytea.com/archives/1347/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;k8s.cni.cncf.io/v1&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;NetworkAttachmentDefinition  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;macvlan8  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;namespace&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;multicast  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;config&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   &amp;#34;cniVersion&amp;#34;: &amp;#34;0.3.1&amp;#34;,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   &amp;#34;plugins&amp;#34;: [  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       &amp;#34;type&amp;#34;: &amp;#34;macvlan&amp;#34;,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       &amp;#34;capabilities&amp;#34;: { &amp;#34;ips&amp;#34;: true },  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       &amp;#34;master&amp;#34;: &amp;#34;eth1&amp;#34;,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       &amp;#34;mode&amp;#34;: &amp;#34;bridge&amp;#34;,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       &amp;#34;ipam&amp;#34;: {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;         &amp;#34;type&amp;#34;: &amp;#34;static&amp;#34;,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;         &amp;#34;addresses&amp;#34;: [  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;             {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                 &amp;#34;address&amp;#34;: &amp;#34;192.168.25.62/22&amp;#34;,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                 &amp;#34;gateway&amp;#34;: &amp;#34;192.168.27.254&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;             }  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;         ],  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;         &amp;#34;routes&amp;#34;: [  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;             { &amp;#34;dst&amp;#34;: &amp;#34;192.168.24.0/22&amp;#34;, &amp;#34;gw&amp;#34;: &amp;#34;192.168.27.254&amp;#34; },  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;             { &amp;#34;dst&amp;#34;: &amp;#34;192.168.5.0/24&amp;#34; }  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;         ]  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       }  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;     }  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;   ]  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; }&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例负载：&lt;/p&gt;</description>
    </item>
    <item>
      <title>kubernetes 使用 multus 为 pod 增加子接口</title>
      <link>https://frytea.com/archives/1346/</link>
      <pubDate>Fri, 15 Nov 2024 13:01:05 +0000</pubDate>
      <guid>https://frytea.com/archives/1346/</guid>
      <description>&lt;h2 id=&#34;部署-multus-cni&#34;&gt;部署 multus-cni&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/k8snetworkplumbingwg/multus-cni.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat ./deployments/multus-daemonset-thick.yml | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;创建-networkattachmentdefinition&#34;&gt;创建 NetworkAttachmentDefinition&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;NetworkAttachmentDefinition&lt;/code&gt; 是 Kubernetes 中的一个自定义资源定义（Custom Resource Definition，简称 CRD）。这是由 Multus CNI 插件引入的，用于在 Kubernetes 中定义和管理额外的网络接口。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oracle Cloud （甲骨文云）全球各主要地区 IP 测试地址</title>
      <link>https://frytea.com/archives/1344/</link>
      <pubDate>Fri, 15 Nov 2024 13:00:43 +0000</pubDate>
      <guid>https://frytea.com/archives/1344/</guid>
      <description>&lt;h1 id=&#34;亚太地区&#34;&gt;亚太地区&lt;/h1&gt;
&lt;p&gt;日本东部 东京：&lt;/p&gt;
&lt;p&gt;objectstorage.ap-tokyo-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;日本中部 大阪：&lt;/p&gt;
&lt;p&gt;objectstorage.ap-osaka-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;韩国中部 首尔：&lt;/p&gt;
&lt;p&gt;objectstorage.ap-seoul-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;韩国北部 春川：&lt;/p&gt;
&lt;p&gt;objectstorage.ap-chuncheon-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;新加坡&lt;/p&gt;
&lt;p&gt;objectstorage.ap-singapore-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;澳大利亚东部 悉尼：&lt;/p&gt;
&lt;p&gt;objectstorage.ap-sydney-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;澳大利亚东南部 墨尔本：&lt;/p&gt;
&lt;p&gt;objectstorage.ap-melbourne-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;印度西部 孟买：&lt;/p&gt;
&lt;p&gt;objectstorage.ap-mumbai-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;印度南部 海得拉巴：&lt;/p&gt;
&lt;p&gt;objectstorage.ap-hyderabad-1.oraclecloud.com&lt;/p&gt;
&lt;p&gt;以色列中部 耶路撒冷：&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 PVE 报错 rbd error list images</title>
      <link>https://frytea.com/archives/1345/</link>
      <pubDate>Thu, 14 Nov 2024 11:47:06 +0000</pubDate>
      <guid>https://frytea.com/archives/1345/</guid>
      <description>&lt;p&gt;针对下列报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    2021-05-26 11:06:11 ERROR: Failed to sync data - rbd error: rbd: listing images failed: &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; No such file or directory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;解决方法&#34;&gt;解决方法&lt;/h2&gt;
&lt;p&gt;进入命令行，执行&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 查看 rbd 清单
rbd ls -l &amp;lt;cephpool-name&amp;gt;
# 例如：
rbd ls -l data

# 使用命令删除错误磁盘镜像
rbd rm &amp;lt;img-name&amp;gt; -p &amp;lt;cephpool-name&amp;gt;

# 例如
rbd rm vm-111-disk-0 -p data
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://foxi.buduanwang.vip/virtualization/1077.html/&#34;&gt; PVE迁移报错rbd error: rbd: listing images failed: (2) No such file or directory (500) &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;#ProxmoxVE #Ceph&lt;/p&gt;</description>
    </item>
    <item>
      <title>getopts 处理 shell 参数</title>
      <link>https://frytea.com/archives/1337/</link>
      <pubDate>Thu, 14 Nov 2024 11:46:53 +0000</pubDate>
      <guid>https://frytea.com/archives/1337/</guid>
      <description>&lt;p&gt;处理命令行参数是一个相似而又复杂的事情，为此，&lt;code&gt;C&lt;/code&gt;提供了&lt;code&gt;getopt/getopt_long&lt;/code&gt;等函数，&lt;br&gt;
C++的&lt;code&gt;boost&lt;/code&gt;提供了&lt;code&gt;Options&lt;/code&gt;库，在&lt;code&gt;shell&lt;/code&gt;中，处理此事的是&lt;code&gt;getopts&lt;/code&gt;和&lt;code&gt;getopt&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;getopts&lt;/code&gt;和&lt;code&gt;getopt&lt;/code&gt;功能相似但又不完全相同，其中&lt;code&gt;getopt&lt;/code&gt;是独立的可执行文件，而&lt;code&gt;getopts&lt;/code&gt;是由Bash内置的。&lt;br&gt;
先来看看参数传递的典型用法:&lt;/p&gt;</description>
    </item>
    <item>
      <title>rsync 用法教程</title>
      <link>https://frytea.com/archives/1336/</link>
      <pubDate>Mon, 11 Nov 2024 13:51:44 +0000</pubDate>
      <guid>https://frytea.com/archives/1336/</guid>
      <description>&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;rsync 是一个常用的 Linux 应用程序，用于文件同步。&lt;/p&gt;
&lt;p&gt;它可以在本地计算机与远程计算机之间，或者两个本地目录之间同步文件（但不支持两台远程计算机之间的同步）。它也可以当作文件复制工具，替代&lt;code&gt;cp&lt;/code&gt;和&lt;code&gt;mv&lt;/code&gt;命令。&lt;/p&gt;</description>
    </item>
    <item>
      <title>k8s 使用官方 compose 部署 plausible</title>
      <link>https://frytea.com/archives/1335/</link>
      <pubDate>Mon, 11 Nov 2024 13:50:41 +0000</pubDate>
      <guid>https://frytea.com/archives/1335/</guid>
      <description>&lt;h1 id=&#34;k8s-使用官方-compose-部署-plausible&#34;&gt;k8s 使用官方 compose 部署 plausible&lt;/h1&gt;
&lt;p&gt;主要记录使用 kompose 转换部署 compose 程序的思路，具体过程根据情况调整。&lt;/p&gt;
&lt;p&gt;首先获取官方 compose 配置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone -b v2.1.4 --single-branch https://github.com/plausible/community-edition plausible-ce
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd plausible-ce
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;调整配置&#34;&gt;调整配置&lt;/h1&gt;
&lt;p&gt;之后根据需要定制配置文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ touch .env
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BASE_URL=https://plausible.example.com&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; .env
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SECRET_KEY_BASE=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;openssl rand -base64 48&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; .env
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 服务暴露根据需要配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 这里采用反代的方法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HTTP_PORT=8000&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; .env
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之后定制一下 compose.yaml，其中有一些不合理的地方，直接使用 kompose 转换会出问题：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 替换文本</title>
      <link>https://frytea.com/archives/1334/</link>
      <pubDate>Sun, 10 Nov 2024 11:40:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1334/</guid>
      <description>&lt;p&gt;在vim中&lt;strong&gt;查找和替换命令&lt;/strong&gt;需要在&lt;strong&gt;末行模式&lt;/strong&gt;下执行。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;命令&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:%s/旧文本/新文本/g&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;全局替换。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:s/旧文本/新闻本/g&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;可视区域替换。&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:%s/旧文本/新文本/gc&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;确认替换。(推荐使用)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;全局替换&#34;&gt; 全局替换&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;:%s/旧文本/新文本/g&lt;/code&gt;命令：用新文本一次性替换文件中所有出现的旧文本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>限制线程数避免Hugo资源耗尽被杀</title>
      <link>https://frytea.com/archives/1333/</link>
      <pubDate>Sun, 10 Nov 2024 11:40:10 +0000</pubDate>
      <guid>https://frytea.com/archives/1333/</guid>
      <description>&lt;p&gt;如果项目很大，hugo默认启动物理核心数个线程并发，但如果已有程序占用，就可能导致 hugo 进程杀死。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;hugo --gc --minify
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;此时可以尝试使用下面这个命令：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;HUGO_NUMWORKERMULTIPLIER=2 hugo --gc --minify --cacheDir /root/archive/cacge
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;主要是这两个参数：&lt;/p&gt;</description>
    </item>
    <item>
      <title>apt 源 Connection reset by peer 问题解决</title>
      <link>https://frytea.com/archives/1331/</link>
      <pubDate>Fri, 08 Nov 2024 10:08:14 +0000</pubDate>
      <guid>https://frytea.com/archives/1331/</guid>
      <description>&lt;p&gt;在 apt 2.1.9 及以后的版本中，apt 的 HTTP Pipelining 特性与 Nginx 服务器疑似存在一定的不兼容问题，可能导致高带宽从镜像站下载大量软件包 （例如系统升级）时出现偶发的 Connection reset by peer 错误&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 能否使用 ACL 默认为新目录配置粘滞位</title>
      <link>https://frytea.com/archives/1326/</link>
      <pubDate>Fri, 08 Nov 2024 10:08:07 +0000</pubDate>
      <guid>https://frytea.com/archives/1326/</guid>
      <description>&lt;p&gt;答案是不能直接实现，可以简介做到，详情向下看：&lt;/p&gt;
&lt;p&gt;This is a configuration that allows members of a group, &lt;em&gt;acltest&lt;/em&gt;, to create and modify group files while disallowing the deletion and renaming of files except by their owner and &amp;ldquo;others,&amp;rdquo; nothing. Using the username, &lt;em&gt;lev&lt;/em&gt; and assuming umask of 022:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;groupadd acltest
usermod -a -G acltest lev
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Log out of the root account and the &lt;em&gt;lev&lt;/em&gt; account. Log in and become root or use &lt;em&gt;sudo&lt;/em&gt;: 注销 root 账户和 lev 账户。登录并成为 root 或使用 sudo：&lt;/p&gt;</description>
    </item>
    <item>
      <title>软件架构开发模型特征总结</title>
      <link>https://frytea.com/archives/1338/</link>
      <pubDate>Fri, 08 Nov 2024 10:07:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1338/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;瀑布模型：结构化方法。开发阶段性、需求明确、文档齐全、风险控制弱；&lt;/li&gt;
&lt;li&gt;原型模型：迭代方法，分为原先开发与目标软件开发，需求不太明确；&lt;/li&gt;
&lt;li&gt;螺旋模型：迭代方法。瀑布与原型（演化）模型i结合体。适用于大型、复杂、风险项目。&lt;/li&gt;
&lt;li&gt;喷泉模型：面向对象方法。复用好、开发过程无间隙、节省时间；&lt;/li&gt;
&lt;li&gt;V模型：开发与测试结合；&lt;/li&gt;
&lt;li&gt;变换模型：适用于形式开发；&lt;/li&gt;
&lt;li&gt;智能模型：适用于i基于规则的专家系统；&lt;/li&gt;
&lt;li&gt;快速应用开发RAD：基于构件的开发方法。用户参与、开发或复用构件、模块化要求高，不适用新技术；&lt;/li&gt;
&lt;li&gt;RUP/UP：用例驱动、架构为中心、迭代、增量&lt;/li&gt;
&lt;li&gt;可重用构建模型：基于构件的开发方法。开发或复用构件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;#系统架构设计&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 文件管理之隐藏属性</title>
      <link>https://frytea.com/archives/1327/</link>
      <pubDate>Sun, 03 Nov 2024 06:40:03 +0000</pubDate>
      <guid>https://frytea.com/archives/1327/</guid>
      <description>&lt;p&gt;linux文件属性包括文件的许多特征，通常有文件类型、文件大小、文件所有者、文件所属组、文件最后修改时间等，而隐藏属性是属于文件的特殊性质。这些隐藏属性在linux中可以通过&lt;code&gt;chattr&lt;/code&gt;命令进行设置，通过&lt;code&gt;lsattr&lt;/code&gt;命令查看。&lt;/p&gt;</description>
    </item>
    <item>
      <title>宝塔面板手动编译安装 PHP 插件 fileinfo</title>
      <link>https://frytea.com/archives/1330/</link>
      <pubDate>Sat, 02 Nov 2024 06:22:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1330/</guid>
      <description>&lt;p&gt;以 php 8.2 为例，具体根据实际情况调整，主要是其中的 &lt;code&gt;-O2&lt;/code&gt; 参数，在低性能服务器下容易编译死机。&lt;/p&gt;
&lt;p&gt;需先配置 2～4 GB 的 SWAP 后继续。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /www/server/php/82/src/ext/fileinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/www/server/php/82/bin/phpize
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./configure --with-php-config&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/www/server/php/82/bin/php-config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;s#CFLAGS = -g -O2#CFLAGS = -std=c99 -g #g&amp;#34;&lt;/span&gt; Makefile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;extension=/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/fileinfo.so&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /www/server/php/82/etc/php.ini
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;extension=/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/fileinfo.so&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /www/server/php/82/etc/php-cli.ini
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/etc/init.d/php-fpm-82 restart
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/memeguigui/article/details/129836186&#34;&gt;宝塔面板php8.1安装fileinfo失败或无法安装的解决方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bt.cn/bbs/forum.php?mod=viewthread&amp;amp;tid=138723&amp;amp;highlight=fileinfo&#34;&gt;【已完成】无法安装php8.0 fileinfo扩展&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bt.cn/bbs/thread-77608-1-1.html&#34;&gt;【已解决】php8.0安装fileinfo扩展失败&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Linux 文件管理之默认权限 umask</title>
      <link>https://frytea.com/archives/1324/</link>
      <pubDate>Thu, 31 Oct 2024 12:46:41 +0000</pubDate>
      <guid>https://frytea.com/archives/1324/</guid>
      <description>&lt;p&gt;一般来说 Linux 上的文件或目录使用一组默认的权限进行创建，&lt;code&gt;umask&lt;/code&gt; 命令可用于查看或设置创建新文件的时的默认权限。&lt;/p&gt;
&lt;p&gt;不带任何选项参数的情况下使用 &lt;code&gt;umask&lt;/code&gt; 命令就是查看当前的掩码值：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 文件管理之特殊权限</title>
      <link>https://frytea.com/archives/1323/</link>
      <pubDate>Tue, 29 Oct 2024 17:19:03 +0000</pubDate>
      <guid>https://frytea.com/archives/1323/</guid>
      <description>&lt;p&gt;除了读取、写入、执行权限之外还有其他一些较少用到的特殊权限设置。&lt;/p&gt;
&lt;h3 id=&#34;suidset-user-id&#34;&gt;SUID（Set User ID）&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls -l /usr/bin/passwd /etc/passwd /etc/shadow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-r--r-- &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; root root    &lt;span style=&#34;color:#ae81ff&#34;&gt;1443&lt;/span&gt; Apr  &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; 22:39 /etc/passwd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rw-r----- &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; root shadow   &lt;span style=&#34;color:#ae81ff&#34;&gt;974&lt;/span&gt; Apr  &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; 22:39 /etc/shadow
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-rwsr-xr-x &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; root root   &lt;span style=&#34;color:#ae81ff&#34;&gt;63960&lt;/span&gt; Feb  &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;2020&lt;/span&gt; /usr/bin/passwd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在使用 &lt;code&gt;passwd&lt;/code&gt; 命令（&lt;code&gt;/usr/bin/passwd&lt;/code&gt;）修改密码时，会修改存储密码的配置文件 &lt;code&gt;/etc/shadow&lt;/code&gt;（在之前的文章有提到，历史上密码存储于 &lt;code&gt;/etc/passwd&lt;/code&gt; 中但现在已经不是了）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 文件管理常规操作</title>
      <link>https://frytea.com/archives/1322/</link>
      <pubDate>Tue, 29 Oct 2024 17:18:52 +0000</pubDate>
      <guid>https://frytea.com/archives/1322/</guid>
      <description>&lt;p&gt;文件权限(文件模式)指定谁可以在 Linux 系统上访问、改变或执行一个文件。它确保只有授权的用户和进程可以访问文件和目录。&lt;/p&gt;
&lt;p&gt;通过命令 &lt;code&gt;ls -l&lt;/code&gt; 就可以获得文件的权限、属主与属组等信息：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 粘滞位 Sticky Bit</title>
      <link>https://frytea.com/archives/1325/</link>
      <pubDate>Mon, 28 Oct 2024 10:09:46 +0000</pubDate>
      <guid>https://frytea.com/archives/1325/</guid>
      <description>&lt;p&gt;粘滞（sticky）位来自「远古」Unix 的遗留产物，用于将可执行文件标记为「不可交换」。&lt;/p&gt;
&lt;p&gt;Linux 会忽略文件上设置的粘滞位，如果对目录设置了粘滞位，则能够阻止用户删除或者重命名其中的文件，除非用户是该目录的属主，或者是文件的属主，又或者是超级用户。&lt;/p&gt;</description>
    </item>
    <item>
      <title>架构风格总结</title>
      <link>https://frytea.com/archives/1319/</link>
      <pubDate>Sat, 26 Oct 2024 09:18:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1319/</guid>
      <description>&lt;h1 id=&#34;架构风格总结&#34;&gt;架构风格总结&lt;/h1&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;mindmap
  root((软件架构风格))
    数据流
      批处理
        (一个接一个，以整体为单位)
      管道/过滤器
        (前一个输出是后一个输入)
        (实例: 传统编译器)
    调用/返回
      主程序/子程序
        (显式调用，主程序直接调用子程序)
      面向对象
        (对象是构件，通过对象调用封装的方法和属性)
      层次结构
        (分层，每层最多影响其上下两层，有调用关系)
    独立构件
      进程通信
        (进程间独立的消息传递，同步异步)
      事件驱动
        (不直接调用，通过事件驱动)
        (实例: 语法高亮、错误提示)
    虚拟机
      解释器
        (解释自定义规则，解释引擎、存储区、数据结构)
      规则系统
        (规则集、规则解释器、选择器和工作内存)
        (用于DSS和人工智能、专家系统)
      (实例: 自定义流程，按流程执行，规则随时改变)
    仓库/数据共享风格
      数据库
        (中央共享数据源，独立处理单元)
      超文本
        (网状连接，多用于互联网)
      黑板
        (用于问题复杂、解空间大的软件系统)
        (实例: 语音识别、知识推理)
    闭环-过程控制
      (发出控制命令并接受反馈，循环往复达到平衡)
      (实例: 汽车定速巡航、空调温度调节)
    C2风格
      (通过连接件绑定的并行构件网络)
      (构件和连接件、顶部和底部)
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;背诵版&lt;/p&gt;</description>
    </item>
    <item>
      <title>软件架构设计必备概念</title>
      <link>https://frytea.com/archives/1318/</link>
      <pubDate>Sat, 26 Oct 2024 09:18:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1318/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;背诵版。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;软件架构风格&#34;&gt;软件架构风格&lt;/h2&gt;
&lt;p&gt;描述特定软件系统组织方式的惯用模式，组织方式描述了系统的组成构件和这些构件的组织方式，惯用模式则反映众多系统共有的结构和语义。&lt;/p&gt;
&lt;h2 id=&#34;架构风险&#34;&gt;架构风险&lt;/h2&gt;
&lt;p&gt;架构设计中潜在的、存在问题的架构决策所带来的隐患。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes helm 部署 prometheus stack</title>
      <link>https://frytea.com/archives/1316/</link>
      <pubDate>Tue, 22 Oct 2024 14:25:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1316/</guid>
      <description>&lt;p&gt;Pometheus-Oerator 已经准备弃用，采用社区维护的 prometheus stack 部署。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# install&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm install prometheus-stack prometheus-community/kube-prometheus-stack -n monitoring --create-namespace
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# upgrade&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm upgrade prometheus-stack prometheus-community/kube-prometheus-stack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# uninstall&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm uninstall prometheus-stack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack&#34;&gt;https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>kompose 转换 docker compose 应用为 k8s 资源清单</title>
      <link>https://frytea.com/archives/1315/</link>
      <pubDate>Tue, 22 Oct 2024 00:02:57 +0000</pubDate>
      <guid>https://frytea.com/archives/1315/</guid>
      <description>&lt;p&gt;Compose是Docker Compose到容器编排（如Kubernetes或OpenShift）的转换工具。&lt;/p&gt;
&lt;p&gt;官方Kubernetes项目，仓库位于github.com/kubernetes/kompose。&lt;/p&gt;</description>
    </item>
    <item>
      <title>kubernetes 部署 cert-manager 快速实现自动 ssl</title>
      <link>https://frytea.com/archives/1314/</link>
      <pubDate>Sun, 20 Oct 2024 10:45:51 +0000</pubDate>
      <guid>https://frytea.com/archives/1314/</guid>
      <description>&lt;p&gt;简单记录，使用 cloudflare dns 自动完成域名 ssl 证书申请并配置到 ingress 的关键步骤。&lt;/p&gt;
&lt;h1 id=&#34;安装&#34;&gt;安装&lt;/h1&gt;
&lt;p&gt;使用 helm 安装方法如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm repo add jetstack https://charts.jetstack.io --force-update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;helm install &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  cert-manager jetstack/cert-manager &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --namespace cert-manager &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --create-namespace &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --version v1.16.1 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --set crds.enabled&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;配置&#34;&gt;配置&lt;/h1&gt;
&lt;p&gt;使用 cloudflare 密钥自动认证&lt;/p&gt;</description>
    </item>
    <item>
      <title>临时解决 vagrant 不支持 virtualbox7.1</title>
      <link>https://frytea.com/archives/1313/</link>
      <pubDate>Sat, 19 Oct 2024 16:25:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1313/</guid>
      <description>&lt;p&gt;介绍一种临时解决 &lt;code&gt;Recent version of Virtualbox 7.1.0 is not supported by vagrant 2.4.1&lt;/code&gt; 的方法：&lt;/p&gt;
&lt;h1 id=&#34;解决方案&#34;&gt;解决方案&lt;/h1&gt;
&lt;h2 id=&#34;方案一&#34;&gt;方案一&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo viVirtualBoxVM|virtualboxvm&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     VBoxManage|vboxmanage&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-        exec &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$INSTALL_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;/VBoxManage&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+	&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt; $@ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;--version&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+	  echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;7.0.0r164728&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+	&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+          exec &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$INSTALL_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;/VBoxManage&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+	&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         ;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     VBoxSDL|vboxsdl&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         exec &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$INSTALL_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;/VBoxSDL&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;方案二&#34;&gt;方案二&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo vim /opt/vagrant/embedded/gems/gems/vagrant-2.4.1/plugins/providers/virtualbox/driver
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ diff -u meta.rb.orig meta.rb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--- meta.rb.orig        2024-09-16 11:37:37.017440100 +0100
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+++ meta.rb     2024-09-16 11:33:51.312254400 +0100
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@@ -69,6 +69,7 @@
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;6.0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; Version_6_0,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;6.1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; Version_6_1,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;7.0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; Version_7_0,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;7.1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;gt; Version_7_0,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; @@version.start_with?&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;4.2.14&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/hashicorp/vagrant/issues/13501&#34;&gt;Recent version of Virtualbox 7.1.0 is not supported by vagrant 2.4.1 #13501&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>查看 linux 安装时间</title>
      <link>https://frytea.com/archives/1312/</link>
      <pubDate>Fri, 18 Oct 2024 16:48:10 +0000</pubDate>
      <guid>https://frytea.com/archives/1312/</guid>
      <description>&lt;p&gt;想要评估一下自己当前使用的 linux 工作环境已经持续多久，询问 claude3.5 得到了几个方法：&lt;/p&gt;
&lt;h1 id=&#34;ai-的答案&#34;&gt;ai 的答案&lt;/h1&gt;
&lt;p&gt;要查看您的 Arch Linux 安装时间，您可以尝试以下几种方法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;查看根文件系统的创建时间：
打开终端，输入以下命令：&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 archlinux fcitx5 中文输入错漏乱序问题</title>
      <link>https://frytea.com/archives/1297/</link>
      <pubDate>Fri, 20 Sep 2024 01:17:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1297/</guid>
      <description>&lt;p&gt;不知道配置了什么，突然输入中文经常出现错漏乱字，&lt;/p&gt;
&lt;p&gt;类似这样：输入“dacheng” 变成 edachng&lt;/p&gt;
&lt;p&gt;拼音顺序混乱，导致乱字。&lt;/p&gt;
&lt;p&gt;最后在 deepin 找到一个解决方法，尝试后确实有用：&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 containerd Name is already used</title>
      <link>https://frytea.com/archives/1208/</link>
      <pubDate>Sun, 25 Aug 2024 04:00:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1208/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FATA&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0000&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt; is already used by I
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;D &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a1e09c7badd41dd267050f3edeb16c9d6dabf5762fcbfc481eb1ae01ae34e64d&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解决办法：&lt;/p&gt;</description>
    </item>
    <item>
      <title>neovim 打通 OS 剪贴板</title>
      <link>https://frytea.com/archives/1183/</link>
      <pubDate>Sun, 25 Aug 2024 04:00:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1183/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pacman -S wl-clipboard
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Kubernetes 1.22.17 源码阅读指南</title>
      <link>https://frytea.com/archives/1267/</link>
      <pubDate>Sun, 25 Aug 2024 03:59:58 +0000</pubDate>
      <guid>https://frytea.com/archives/1267/</guid>
      <description>&lt;h1 id=&#34;kubernetes-12217-源码阅读指南&#34;&gt;Kubernetes 1.22.17 源码阅读指南&lt;/h1&gt;
&lt;h2 id=&#34;1-代码结构概览&#34;&gt;1. 代码结构概览&lt;/h2&gt;
&lt;p&gt;Kuberne&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubeadm 版本与 API 版本对应</title>
      <link>https://frytea.com/archives/1227/</link>
      <pubDate>Sun, 25 Aug 2024 03:59:44 +0000</pubDate>
      <guid>https://frytea.com/archives/1227/</guid>
      <description>&lt;p&gt;以下是 Kubeadm 版本与其 API 版本的大致对应关系：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Kubeadm v1.11&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>git 创建全新分支</title>
      <link>https://frytea.com/archives/1187/</link>
      <pubDate>Sun, 25 Aug 2024 03:59:34 +0000</pubDate>
      <guid>https://frytea.com/archives/1187/</guid>
      <description>&lt;p&gt;要在当前仓库创建一个不包含任何文件的新分支,可以使用以下Git命令:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git switch




--orphan &amp;lt;new-branch-name&amp;gt;
git commit --allow-empty -m &amp;#34;Initial commit&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这两个命令的解释:&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux下显示dd命令的进度</title>
      <link>https://frytea.com/archives/1195/</link>
      <pubDate>Sun, 25 Aug 2024 03:59:24 +0000</pubDate>
      <guid>https://frytea.com/archives/1195/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo dd if=/dev/zero of=/tmp/zero.img status=p




rogress
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;linux下显示dd命令的进度：&lt;/p&gt;</description>
    </item>
    <item>
      <title>archlinux 列出来自 aur 安装的包</title>
      <link>https://frytea.com/archives/1206/</link>
      <pubDate>Sun, 25 Aug 2024 03:58:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1206/</guid>
      <description>&lt;p&gt;在 Arch Linux 中，要检索出使用 yay 安装的包，您可以使用以下方法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用 p&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>用 testdisk 恢复 Linux 上已删除的文件</title>
      <link>https://frytea.com/archives/1245/</link>
      <pubDate>Sun, 25 Aug 2024 03:57:20 +0000</pubDate>
      <guid>https://frytea.com/archives/1245/</guid>
      <description>&lt;h1 id=&#34;安装-testdisk&#34;&gt;安装 testdisk&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install testdisk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nstall testdis
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 恢复文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;首先，你必须以 root 身份登录，或者有 sudo 权限才能使用 testdisk。如果你没有 sudo 访问权限，你会在这个过程一开始就被踢出，而如果你选择创建了一个日志文件的话，最终会有这样的消息：
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;TestDisk exited normally.
jdoe is not in the sudoers file.  This incident will be reported.&lt;/p&gt;</description>
    </item>
    <item>
      <title>简单工厂模式</title>
      <link>https://frytea.com/archives/1148/</link>
      <pubDate>Sun, 25 Aug 2024 03:57:04 +0000</pubDate>
      <guid>https://frytea.com/archives/1148/</guid>
      <description>&lt;h1 id=&#34;uml&#34;&gt;UML&lt;/h1&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;classDiagram
    class Product {




&amp;lt;&amp;lt;interface&amp;gt;&amp;gt;
        +operation()
    }
    class ConcreteProductA {
        +operation()
    }
    class ConcreteProductB {
        +operation()
    }
    class SimpleFactory {
        +createProduct(string) Product
    }
    Product &amp;lt;|.. ConcreteProductA
    Product &amp;lt;|.. ConcreteProductB
    SimpleFactory ..&amp;gt; Product
    SimpleFactory ..&amp;gt; ConcreteProductA
    SimpleFactory ..&amp;gt; ConcreteProductB
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;go-sample&#34;&gt;Go Sample&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Product 接口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Product&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Operation&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// ConcreteProductA 结构体&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ConcreteProductA&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ConcreteProductA&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Operation&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ConcreteProductA&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// ConcreteProductB 结构体&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ConcreteProductB&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ConcreteProductB&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Operation&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ConcreteProductB&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// SimpleFactory 结构体&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SimpleFactory&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SimpleFactory&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;CreateProduct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;productType&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Product&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;switch&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;productType&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ConcreteProductA&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;B&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ConcreteProductB&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;factory&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SimpleFactory&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;productA&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;factory&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CreateProduct&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;productA&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Operation&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;productB&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;factory&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CreateProduct&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;B&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;productB&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Operation&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>数据存储单位</title>
      <link>https://frytea.com/archives/1146/</link>
      <pubDate>Sun, 25 Aug 2024 03:56:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1146/</guid>
      <description>&lt;h2 id=&#34;二进制&#34;&gt;二进制&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;标识&lt;/th&gt;
          &lt;th&gt;单位&lt;/th&gt;
          &lt;th&gt;大小&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Bit&lt;/td&gt;
          &lt;td&gt;位&lt;/td&gt;
          &lt;td&gt;1/0&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Byte&lt;/td&gt;
          &lt;td&gt;字节&lt;/td&gt;
          &lt;td&gt;8 Bit&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;KiB&lt;/td&gt;
          &lt;td&gt;千&lt;/td&gt;
          &lt;td&gt;1024 Byte/$2^{10}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;MiB&lt;/td&gt;
          &lt;td&gt;兆&lt;/td&gt;
          &lt;td&gt;1024 KB/$2^{20}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;GiB&lt;/td&gt;
          &lt;td&gt;吉&lt;/td&gt;
          &lt;td&gt;1024 MB/$2^{30}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;TiB&lt;/td&gt;
          &lt;td&gt;太&lt;/td&gt;
          &lt;td&gt;1024 GB/$2^{40}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;PiB&lt;/td&gt;
          &lt;td&gt;拍&lt;/td&gt;
          &lt;td&gt;1024 TB/$2^{50}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;EiB&lt;/td&gt;
          &lt;td&gt;艾&lt;/td&gt;
          &lt;td&gt;1024 PB/$2^{60}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ZiB&lt;/td&gt;
          &lt;td&gt;泽&lt;/td&gt;
          &lt;td&gt;1024 EB/$2^{70}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;YiB&lt;/td&gt;
          &lt;td&gt;尧&lt;/td&gt;
          &lt;td&gt;1024 ZB/$2^{80}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;十进制&#34;&gt;十进制&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;缩写&lt;/th&gt;
          &lt;th&gt;名字&lt;/th&gt;
          &lt;th&gt;次方&lt;/th&gt;
          &lt;th&gt;描述&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;KB&lt;/td&gt;
          &lt;td&gt;千&lt;/td&gt;
          &lt;td&gt;$10^{3}$&lt;/td&gt;
          &lt;td&gt;千字节&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;MB&lt;/td&gt;
          &lt;td&gt;兆&lt;/td&gt;
          &lt;td&gt;$10^{6}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;GB&lt;/td&gt;
          &lt;td&gt;吉&lt;/td&gt;
          &lt;td&gt;$10^{9}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;TB&lt;/td&gt;
          &lt;td&gt;太&lt;/td&gt;
          &lt;td&gt;$10^{12}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;PB&lt;/td&gt;
          &lt;td&gt;拍&lt;/td&gt;
          &lt;td&gt;$10^{15}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;EB&lt;/td&gt;
          &lt;td&gt;艾&lt;/td&gt;
          &lt;td&gt;$10^{18}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ZB&lt;/td&gt;
          &lt;td&gt;泽&lt;/td&gt;
          &lt;td&gt;$10^{21}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;YB&lt;/td&gt;
          &lt;td&gt;尧&lt;/td&gt;
          &lt;td&gt;$10^{24}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;RB&lt;/td&gt;
          &lt;td&gt;容&lt;/td&gt;
          &lt;td&gt;$10^{27}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;QB&lt;/td&gt;
          &lt;td&gt;昆&lt;/td&gt;
          &lt;td&gt;$10^{30}$&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.51cto.com/sddai/3075057&#34;&gt;数据存储单位的换算关系（TB、PB、EB、ZB、YB）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82&#34;&gt;字节 - wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>linux 配置登陆 MOTD</title>
      <link>https://frytea.com/archives/1216/</link>
      <pubDate>Sun, 25 Aug 2024 03:55:31 +0000</pubDate>
      <guid>https://frytea.com/archives/1216/</guid>
      <description>&lt;p&gt;登录时显示的消息确实有一个特定的名称。这个消息通常被称为&amp;quot;登录标语&amp;quot;或&amp;quot;欢迎横幅&amp;quot;。在Linux系统&lt;/p&gt;</description>
    </item>
    <item>
      <title>ubuntu 配置 nfs 服务</title>
      <link>https://frytea.com/archives/1220/</link>
      <pubDate>Sat, 27 Jul 2024 08:43:42 +0000</pubDate>
      <guid>https://frytea.com/archives/1220/</guid>
      <description>&lt;h1 id=&#34;步骤&#34;&gt;步骤&lt;/h1&gt;
&lt;h2 id=&#34;步骤一安装nfs服务器软件包&#34;&gt;步骤一：安装NFS服务器软件包&lt;/h2&gt;
&lt;p&gt;首先，打开终端窗口，并以管理员权限运行以下命令来&lt;/p&gt;</description>
    </item>
    <item>
      <title>ubuntu 克隆 netplan dhcp ip 冲突问题</title>
      <link>https://frytea.com/archives/1218/</link>
      <pubDate>Sat, 27 Jul 2024 08:43:23 +0000</pubDate>
      <guid>https://frytea.com/archives/1218/</guid>
      <description>&lt;p&gt;在被克隆的机器上编辑 &lt;code&gt;/etc/netplan/xx-installer-config.yaml&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows XP 所有版本密钥集合</title>
      <link>https://frytea.com/archives/1185/</link>
      <pubDate>Sat, 27 Jul 2024 08:43:13 +0000</pubDate>
      <guid>https://frytea.com/archives/1185/</guid>
      <description>&lt;p&gt;![Windows XP Logo](&lt;a href=&#34;https://cdn-imagehost.frytea.co&#34;&gt;https://cdn-imagehost.frytea.co&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 解决  x86/split lock detection</title>
      <link>https://frytea.com/archives/1252/</link>
      <pubDate>Sat, 27 Jul 2024 08:43:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1252/</guid>
      <description>&lt;p&gt;1、add in &lt;code&gt;/etc/default/grub&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;GRUB_CMDLINE_LINU




X_DEFAULT=&amp;#34;quiet split_lock_detect=off&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2、now run &lt;code&gt;update-grub&lt;/code&gt; and &lt;code&gt;reboot&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>VirtualBox 安装 macOS</title>
      <link>https://frytea.com/archives/1285/</link>
      <pubDate>Sat, 27 Jul 2024 08:42:43 +0000</pubDate>
      <guid>https://frytea.com/archives/1285/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VBoxManage modifyvm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Type Your Virtual Mac
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;hine Name Here&amp;#34;&lt;/span&gt; --cpuidset &lt;span style=&#34;color:#ae81ff&#34;&gt;00000001&lt;/span&gt; 000106e5 &lt;span style=&#34;color:#ae81ff&#34;&gt;00100800&lt;/span&gt; 0098e3fd bfebfbff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VBoxManage setextradata &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Type Your Virtual Machine Name Here&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;VBoxInternal/Devices/efi/0/Config/DmiSystemProduct&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iMac11,3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VBoxManage setextradata &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Type Your Virtual Machine Name Here&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;VBoxInternal/Devices/efi/0/Config/DmiSystemVersion&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VBoxManage setextradata &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Type Your Virtual Machine Name Here&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;VBoxInternal/Devices/efi/0/Config/DmiBoardProduct&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Iloveapple&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VBoxManage setextradata &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Type Your Virtual Machine Name Here&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;VBoxInternal/Devices/smc/0/Config/DeviceKey&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VBoxManage setextradata &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Type Your Virtual Machine Name Here&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;VBoxInternal/Devi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.maketecheasier.com/install-macos-virtualbox/&#34;&gt;How to Install macOS in VirtualBox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Docker  交叉编译多架构镜像</title>
      <link>https://frytea.com/archives/1271/</link>
      <pubDate>Sat, 27 Jul 2024 08:42:31 +0000</pubDate>
      <guid>https://frytea.com/archives/1271/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装模拟器（用于多平台镜像构建）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run --rm --privi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;leged tonistiigi/binfmt:latest --install all
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 查看构建器，查阅支持的构建架构&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker buildx ls
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/497510466&#34;&gt;docker交叉编译&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Linux 生成随机字符串的方法</title>
      <link>https://frytea.com/archives/1276/</link>
      <pubDate>Sun, 30 Jun 2024 04:54:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1276/</guid>
      <description>&lt;h1 id=&#34;linux-生成随机字符串的方法&#34;&gt;Linux 生成随机字符串的方法&lt;/h1&gt;
&lt;p&gt;随机字符串常用于创建随机账号或密码，Linux 可用以下方法生成随机字符串。&lt;/p&gt;
&lt;p&gt;1.生成由大写字母组成的随机字符串：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ head /dev/urandom | tr -dc A-Z | head -c 20

NRXFYZRTUEDXTVPJAYJW
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2.生成由小写字母组成的随机字符串：&lt;/p&gt;</description>
    </item>
    <item>
      <title>debian 软件包仓库优先级配置</title>
      <link>https://frytea.com/archives/1270/</link>
      <pubDate>Sun, 30 Jun 2024 04:53:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1270/</guid>
      <description>&lt;p&gt;在 Debian 和 Ubuntu 系统中，可以通过配置 APT 包管理器的优先级来管理多个软件仓库&lt;/p&gt;</description>
    </item>
    <item>
      <title>软件分发方法概述</title>
      <link>https://frytea.com/archives/1137/</link>
      <pubDate>Sun, 30 Jun 2024 04:53:10 +0000</pubDate>
      <guid>https://frytea.com/archives/1137/</guid>
      <description>&lt;p&gt;分发软件有多种方式，具体取决于你的目标受众和软件的类型。以下是一些常见的软件分发方式：&lt;/p&gt;
&lt;h3 id=&#34;在&#34;&gt;在&lt;/h3&gt;</description>
    </item>
    <item>
      <title>自建多设备电子书阅读及进度同步方案</title>
      <link>https://frytea.com/archives/1179/</link>
      <pubDate>Sun, 30 Jun 2024 04:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1179/</guid>
      <description>&lt;p&gt;方案构成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[KOreader](&lt;a href=&#34;https://github.com/koreader/ko&#34;&gt;https://github.com/koreader/ko&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>在 Docker 中运行 Docker DinD</title>
      <link>https://frytea.com/archives/1250/</link>
      <pubDate>Sun, 30 Jun 2024 04:52:36 +0000</pubDate>
      <guid>https://frytea.com/archives/1250/</guid>
      <description>&lt;h1 id=&#34;step-by-step&#34;&gt;Step-By-Step&lt;/h1&gt;
&lt;h2 id=&#34;step-1-pull-the-dind-image&#34;&gt;Step 1: Pull the DinD Image&lt;/h2&gt;
&lt;p&gt;Th&lt;/p&gt;</description>
    </item>
    <item>
      <title>archlinux 升级忽略某软件包</title>
      <link>https://frytea.com/archives/1284/</link>
      <pubDate>Sun, 30 Jun 2024 04:52:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1284/</guid>
      <description>&lt;p&gt;在 Arch Linux 中，有时你可能会看到提示，例如“添加 &lt;code&gt;python-numpy&lt;/code&gt; 到 `&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 获取 cloud 镜像快速初始化 VM</title>
      <link>https://frytea.com/archives/1175/</link>
      <pubDate>Sun, 23 Jun 2024 02:11:48 +0000</pubDate>
      <guid>https://frytea.com/archives/1175/</guid>
      <description>&lt;p&gt;以 &lt;code&gt;centos 7&lt;/code&gt; 为例，类似的可以获取 [debian](&lt;a href=&#34;https://cdimage.d&#34;&gt;https://cdimage.d&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux 前后台切换</title>
      <link>https://frytea.com/archives/1188/</link>
      <pubDate>Sun, 23 Jun 2024 02:09:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1188/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;code&gt;command  &amp;amp;&lt;/code&gt; 让进程在后台运行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jobs –l&lt;/code&gt; 查看后台运行的进程&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>代码量统计方案</title>
      <link>https://frytea.com/archives/1182/</link>
      <pubDate>Sun, 23 Jun 2024 02:08:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1182/</guid>
      <description>&lt;p&gt;有两种，一种是在线工具，一种是拉取到本地统计。&lt;/p&gt;
&lt;p&gt;公开的中小型开源从仓库可以用在线工具，离线的私有或&lt;/p&gt;</description>
    </item>
    <item>
      <title>python setup.py 安装和卸载</title>
      <link>https://frytea.com/archives/1223/</link>
      <pubDate>Sun, 23 Jun 2024 02:07:33 +0000</pubDate>
      <guid>https://frytea.com/archives/1223/</guid>
      <description>&lt;p&gt;安装&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;python3&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;卸&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tmux 常用快捷键</title>
      <link>https://frytea.com/archives/1255/</link>
      <pubDate>Sun, 23 Jun 2024 02:06:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1255/</guid>
      <description>&lt;h2 id=&#34;终端中使用-tmux-命令&#34;&gt;终端中使用 Tmux 命令&lt;/h2&gt;
&lt;p&gt;启动 tmux 使用 -s 命令指定会话名称，使用 -n 命令&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 registry/distribution 自建Docker Hub镜像服务</title>
      <link>https://frytea.com/archives/1180/</link>
      <pubDate>Sun, 23 Jun 2024 02:05:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1180/</guid>
      <description>&lt;h2 id=&#34;自建方法&#34;&gt;自建方法&lt;/h2&gt;
&lt;h3 id=&#34;镜像-dockerhub&#34;&gt;镜像 dockerhub&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;registry&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;registry:2.8.2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;#network_mode: &amp;#34;host&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	  &lt;span style=&#34;color:#f92672&#34;&gt;REGISTRY_HTTP_ADDR&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.0.0.0:5000&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	  &lt;span style=&#34;color:#f92672&#34;&gt;REGISTRY_PROXY_REMOTEURL&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://registry-1.docker.io&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	  &lt;span style=&#34;color:#f92672&#34;&gt;REGISTRY_PROXY_TTL&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;168h &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	  &lt;span style=&#34;color:#f92672&#34;&gt;HTTPS_PROXY&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://192.168.25.18:7890&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;registry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	  - &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	  - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./registry:/var/lib/registry&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker-compose -f registry.yml up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;镜像-quay&#34;&gt;镜像 quay&lt;/h3&gt;
&lt;p&gt;类似的原理可以镜像 &lt;code&gt;quay.io&lt;/code&gt; 等等：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;mirror-quay-io&lt;/span&gt;:  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;registry:2.8.2  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#f92672&#34;&gt;REGISTRY_HTTP_ADDR&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.0.0.0:5000&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#f92672&#34;&gt;REGISTRY_PROXY_REMOTEURL&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://quay.io&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#f92672&#34;&gt;REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#f92672&#34;&gt;REGISTRY_PROXY_TTL&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;168h  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#f92672&#34;&gt;HTTPS_PROXY&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://192.168.25.18:8890&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     - &lt;span style=&#34;color:#ae81ff&#34;&gt;5003&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./data/quay.io:/var/lib/registry&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参数说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED&lt;/code&gt;：开启 schema1 支持，默认关闭&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REGISTRY_PROXY_REMOTEURL&lt;/code&gt;： 镜像上游地址&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REGISTRY_PROXY_TTL&lt;/code&gt;： 镜像过期时间&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;客户端用法&#34;&gt;客户端用法&lt;/h2&gt;
&lt;p&gt;正常使用即可：&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux 显示 16 进制内容 - xxd</title>
      <link>https://frytea.com/archives/1243/</link>
      <pubDate>Thu, 30 May 2024 16:27:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1243/</guid>
      <description>&lt;p&gt;命令用法&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ xxd [options] [infile [outfile]]
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Python 虚拟环境工具 conda 用法</title>
      <link>https://frytea.com/archives/1264/</link>
      <pubDate>Wed, 29 May 2024 14:19:17 +0000</pubDate>
      <guid>https://frytea.com/archives/1264/</guid>
      <description>&lt;p&gt;Miniconda是一款免费的conda最小安装程序，仅包含conda、Python以及二者所依赖的&lt;/p&gt;</description>
    </item>
    <item>
      <title>pve lxc 映射主机路径到容器</title>
      <link>https://frytea.com/archives/1193/</link>
      <pubDate>Wed, 29 May 2024 14:18:56 +0000</pubDate>
      <guid>https://frytea.com/archives/1193/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pct set &lt;span style=&#34;color:#ae81ff&#34;&gt;103&lt;/span&gt; -mp1 /host/dir,mp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/container/m
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ount/point
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可以直接修改配置文件  &lt;code&gt;/etc/pve/nodes/NODE/lxc/ID.conf&lt;/code&gt; 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 防暴力破解 - fail2ban</title>
      <link>https://frytea.com/archives/1241/</link>
      <pubDate>Wed, 29 May 2024 14:18:41 +0000</pubDate>
      <guid>https://frytea.com/archives/1241/</guid>
      <description>&lt;p&gt;安装&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo yum install fail2ban
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;install fail2ban 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;服务状态&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 下使用 ClamAV 扫描病毒</title>
      <link>https://frytea.com/archives/1236/</link>
      <pubDate>Wed, 29 May 2024 14:18:28 +0000</pubDate>
      <guid>https://frytea.com/archives/1236/</guid>
      <description>&lt;p&gt;安装&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt-get install clamav
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更新病毒库&lt;/p&gt;</description>
    </item>
    <item>
      <title>archlinux gnome 安装 fcitx5 及扩展面板</title>
      <link>https://frytea.com/archives/1278/</link>
      <pubDate>Sun, 26 May 2024 08:38:07 +0000</pubDate>
      <guid>https://frytea.com/archives/1278/</guid>
      <description>&lt;p&gt;安装后中文输入更友好。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pacman -S fcitx5 fcitx5-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;configtool fcitx5-qt libime fcitx5-chinese-addons fcitx5-chinese-addons
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装 gnome 扩展替换 fcitx5 原生&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yay -S gnome-shell-extension-kimpanel-git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://aur.archlinux.org/packages/gnome-shell-extension-kimpanel-git&#34;&gt;https://aur.archlinux.org/packages/gnome-shell-extension-kimpanel-git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Fcitx5&#34;&gt;https://wiki.archlinux.org/title/Fcitx5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#GNOME&#34;&gt;https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#GNOME&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://extensions.gnome.org/extension/261/kimpanel/&#34;&gt;https://extensions.gnome.org/extension/261/kimpanel/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/Fcitx5&#34;&gt;https://wiki.archlinux.org/title/Fcitx5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>pixel4 xl 安装 PixysOS v7.1.2 Beta4</title>
      <link>https://frytea.com/archives/1275/</link>
      <pubDate>Sun, 26 May 2024 08:37:36 +0000</pubDate>
      <guid>https://frytea.com/archives/1275/</guid>
      <description>&lt;p&gt;从酷安的得知有人为 pixel 4 xl 做出了支持 3d face unlocked 的 基于 a&lt;/p&gt;</description>
    </item>
    <item>
      <title>gitlab 迁移后CI/CD页面500错误问题</title>
      <link>https://frytea.com/archives/1177/</link>
      <pubDate>Sun, 26 May 2024 08:37:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1177/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# gitlab-rails console&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Ci::Runner.all.upda
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;te_all&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;token_encrypted: nil&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gitlab-rails dbconsole
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;UPDATE projects SET runners_token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; null, runners_token_encrypted &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; null;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 将所有项目的runners_token和runners_token_encrypted字段设置为null。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;UPDATE namespaces SET runners_token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; null, runners_token_encrypted &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; null;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 将所有命名空间（例如用户或组）的runners_token和runners_token_encrypted字段设置为null。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;UPDATE application_settings SET runners_registration_token_encrypted &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; null;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 将GitLab应用程序设置中的runners_registration_token_encrypted字段设置为null。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.luckzym.com/posts/b341120e/&#34;&gt;Gitlab数据迁移&amp;amp;在线升级后出现CI/CD页面500错误问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.u.tsukuba.ac.jp/~s2036012/tech/webmaster/gitlab-upgrade.html&#34;&gt;Gitlab 升级那些事儿&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bytebase.com/blog/upgrade-gitlab-enterprise-edition-major-version-13-14/&#34;&gt;GitLab Upgrade from 13 to 14&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>使用 ModelArts 训练并发布手写数字识别模型</title>
      <link>https://frytea.com/archives/1156/</link>
      <pubDate>Sun, 26 May 2024 08:36:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1156/</guid>
      <description>&lt;h1 id=&#34;资源准备&#34;&gt;资源准备&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/songt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ianlun/Handwritten_Digit_Recognition_Based_on_MNIST.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将以上内容，保存目录结构上传到 OBS。&lt;/p&gt;</description>
    </item>
    <item>
      <title>containerd 命令行工具 nerdctl 和 crictl</title>
      <link>https://frytea.com/archives/1281/</link>
      <pubDate>Sun, 26 May 2024 08:35:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1281/</guid>
      <description>&lt;p&gt;&lt;code&gt;nerdctl&lt;/code&gt;和&lt;code&gt;crictl&lt;/code&gt;都是用于管理和操作容器的命令行工具，但是它们在开发者、设计目的和&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux 查看运行 xwayland 程序清单</title>
      <link>https://frytea.com/archives/1186/</link>
      <pubDate>Sat, 18 May 2024 16:30:45 +0000</pubDate>
      <guid>https://frytea.com/archives/1186/</guid>
      <description>&lt;p&gt;可以使用 &lt;code&gt;xlsclients&lt;/code&gt; 命令查看正在使用 X（包括 XWayland）服务器的客户端列表&lt;/p&gt;</description>
    </item>
    <item>
      <title>GNOME 新增应用状态图标拓展</title>
      <link>https://frytea.com/archives/1212/</link>
      <pubDate>Sat, 18 May 2024 16:30:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1212/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo pacman -S gnome-shell-extension-app
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;indicator
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# reboot or logout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gnome-extensions enable &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;gnome-extensions list | grep -m &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; appindicatorsupport&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/title/GNOME#Navigation&#34;&gt;https://wiki.archlinux.org/title/GNOME#Navigation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Archlinux 基于 waydroid运行 android</title>
      <link>https://frytea.com/archives/1207/</link>
      <pubDate>Sat, 18 May 2024 16:29:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1207/</guid>
      <description>&lt;p&gt;该方案仅支持基于 Wayland 的 Linux 桌面环境，如 sway, gnome, kde6。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Harbor使用方法</title>
      <link>https://frytea.com/archives/1268/</link>
      <pubDate>Sat, 19 Aug 2023 04:19:51 +0000</pubDate>
      <guid>https://frytea.com/archives/1268/</guid>
      <description>&lt;p&gt;Harbor使用方法 修改配置文件 首先需要在客户端配置号 Harbor 地址，配置文件在： /et&lt;/p&gt;</description>
    </item>
    <item>
      <title>debian 挂载官方 iso 为本地 apt 软件源</title>
      <link>https://frytea.com/archives/1240/</link>
      <pubDate>Sat, 19 Aug 2023 04:19:20 +0000</pubDate>
      <guid>https://frytea.com/archives/1240/</guid>
      <description>&lt;p&gt;debian 挂载官方 iso 为本地 apt 软件源 首先，下载debian 10.1.0 amd&lt;/p&gt;</description>
    </item>
    <item>
      <title>go 闭包函数问题</title>
      <link>https://frytea.com/archives/1273/</link>
      <pubDate>Sat, 19 Aug 2023 04:16:49 +0000</pubDate>
      <guid>https://frytea.com/archives/1273/</guid>
      <description>&lt;p&gt;go 闭包函数问题 在 Go 里，闭包里的变量会被共享使用，这就意味着当你在运行闭包函数的时候，函数&lt;/p&gt;</description>
    </item>
    <item>
      <title>多 GPU CUDA 压力测试</title>
      <link>https://frytea.com/archives/1238/</link>
      <pubDate>Sat, 19 Aug 2023 04:15:25 +0000</pubDate>
      <guid>https://frytea.com/archives/1238/</guid>
      <description>&lt;p&gt;多 GPU CUDA 压力测试 1.下载软件 $ wget &lt;a href=&#34;https://codeload.git&#34;&gt;https://codeload.git&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别</title>
      <link>https://frytea.com/archives/1147/</link>
      <pubDate>Sat, 19 Aug 2023 04:14:01 +0000</pubDate>
      <guid>https://frytea.com/archives/1147/</guid>
      <description>&lt;p&gt;开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别 借阮一峰大佬的图说明&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 终端获取本机公网 IP 的方法</title>
      <link>https://frytea.com/archives/1199/</link>
      <pubDate>Sat, 19 Aug 2023 04:13:06 +0000</pubDate>
      <guid>https://frytea.com/archives/1199/</guid>
      <description>&lt;p&gt;Linux 终端获取本机公网 IP 的方法 下方任意命令均可： $ wget -qO- https:&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPT4检验方法</title>
      <link>https://frytea.com/archives/1141/</link>
      <pubDate>Wed, 16 Aug 2023 10:00:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1141/</guid>
      <description>&lt;p&gt;方法一：鲁迅为什么暴打周树人 GPT-3.5：胡编乱造 GPT-4：鲁迅和周树人是同一个人 gpt3&lt;/p&gt;</description>
    </item>
    <item>
      <title>Youtube Premium 优惠攻略</title>
      <link>https://frytea.com/archives/1176/</link>
      <pubDate>Sun, 13 Aug 2023 08:40:22 +0000</pubDate>
      <guid>https://frytea.com/archives/1176/</guid>
      <description>&lt;p&gt;分享优惠方法个人订购 Youtube Premium 的方法.&lt;/p&gt;
&lt;p&gt;最近续订港区个人 Youtube&lt;/p&gt;</description>
    </item>
    <item>
      <title>搬瓦工所有机房信息及测试 IP 一览（2023）</title>
      <link>https://frytea.com/archives/1178/</link>
      <pubDate>Sun, 13 Aug 2023 08:40:22 +0000</pubDate>
      <guid>https://frytea.com/archives/1178/</guid>
      <description>&lt;p&gt;整理搬瓦工所有机房.&lt;/p&gt;
&lt;h2 id=&#34;搬瓦工入口&#34;&gt;搬瓦工入口&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;搬瓦工官网：[bandwagonhost.com&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>iperf3 网络性能测试</title>
      <link>https://frytea.com/archives/1247/</link>
      <pubDate>Mon, 31 Jul 2023 07:46:53 +0000</pubDate>
      <guid>https://frytea.com/archives/1247/</guid>
      <description>&lt;p&gt;iperf3 网络性能测试 快速测试 经典测试 # 服务端执行 $ iperf3 -s # 客户端执&lt;/p&gt;</description>
    </item>
    <item>
      <title>自建 speedtest 服务端 web 并使用 cli 测试内网带宽</title>
      <link>https://frytea.com/archives/1215/</link>
      <pubDate>Tue, 25 Jul 2023 09:36:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1215/</guid>
      <description>&lt;p&gt;自建 speedtest 服务端 web 并使用 cli 测试内网带宽 LibreSpeed 是一个&lt;/p&gt;</description>
    </item>
    <item>
      <title>vim 分割窗口打开内建 shell</title>
      <link>https://frytea.com/archives/1190/</link>
      <pubDate>Tue, 25 Jul 2023 09:23:36 +0000</pubDate>
      <guid>https://frytea.com/archives/1190/</guid>
      <description>&lt;p&gt;vim 分割窗口打开内建 shell Neovim 和 Vim &amp;gt;= 8.2 通过 :ter[mi&lt;/p&gt;</description>
    </item>
    <item>
      <title>debian 挂载 iso 为本地 apt 软件源</title>
      <link>https://frytea.com/archives/1217/</link>
      <pubDate>Sat, 22 Jul 2023 02:16:27 +0000</pubDate>
      <guid>https://frytea.com/archives/1217/</guid>
      <description>&lt;p&gt;debian 挂载 iso 为本地 apt 软件源 首先，下载debian 10.1.0 amd64&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debian 开启 IOMMU 支持</title>
      <link>https://frytea.com/archives/1253/</link>
      <pubDate>Sat, 22 Jul 2023 02:11:50 +0000</pubDate>
      <guid>https://frytea.com/archives/1253/</guid>
      <description>&lt;p&gt;Debian 开启 IOMMU 支持 vi /etc/default/grub 找到 GRUB_C&lt;/p&gt;</description>
    </item>
    <item>
      <title>nexus3 上传 docker 镜像</title>
      <link>https://frytea.com/archives/1274/</link>
      <pubDate>Wed, 19 Jul 2023 06:00:03 +0000</pubDate>
      <guid>https://frytea.com/archives/1274/</guid>
      <description>&lt;p&gt;nexus3 上传 docker 镜像 docker login 192.168.25.8:8082&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS 内存测试 memtest</title>
      <link>https://frytea.com/archives/1231/</link>
      <pubDate>Wed, 19 Jul 2023 02:52:55 +0000</pubDate>
      <guid>https://frytea.com/archives/1231/</guid>
      <description>&lt;p&gt;macOS 内存测试 memtest 安装方法，命令行下执行： brew install memte&lt;/p&gt;</description>
    </item>
    <item>
      <title>查看所有由 docker-compose 启动的 docker</title>
      <link>https://frytea.com/archives/1263/</link>
      <pubDate>Wed, 19 Jul 2023 02:51:10 +0000</pubDate>
      <guid>https://frytea.com/archives/1263/</guid>
      <description>&lt;p&gt;查看所有由 docker-compose 启动的 docker Docker Compose会为其创&lt;/p&gt;</description>
    </item>
    <item>
      <title>ipmitool 基本使用</title>
      <link>https://frytea.com/archives/1280/</link>
      <pubDate>Mon, 17 Jul 2023 03:47:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1280/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# account&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool user list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool user set password &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; password@123
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# network&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# show network&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool lan print
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set to static and show network&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool lan set &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; ipsrc static
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool lan set &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;  ipaddr 192.168.24.6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool lan set  &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; netmask 255.255.252.0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool lan set  &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; defgw ipaddr 192.168.27.254 ipmitool lan print
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置共享网口模式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool delloem lan set shared with lom1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ipmitool delloem lan set shared
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;检查运行日志&#34;&gt;检查运行日志&lt;/h1&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ipmitool sel list
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;SEL = System Event Log (系统事件日志)&lt;/code&gt;
显示系统的硬件事件历史记录，包括:硬件故障、电源事件、温度警告、风扇故障、其他系统关键事件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSH 密钥类型及格式</title>
      <link>https://frytea.com/archives/1282/</link>
      <pubDate>Mon, 26 Jun 2023 02:07:27 +0000</pubDate>
      <guid>https://frytea.com/archives/1282/</guid>
      <description>&lt;p&gt;SSH 密钥类型及格式 在使用 ssh-keygen 命令生成密钥对时，有这几个参数需要被注意： #&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 java 手动执行生成的类文件</title>
      <link>https://frytea.com/archives/1256/</link>
      <pubDate>Tue, 20 Jun 2023 15:59:20 +0000</pubDate>
      <guid>https://frytea.com/archives/1256/</guid>
      <description>&lt;p&gt;使用 java 手动执行生成的类文件 下面以执行使用 mvn compile 编译好的 cn.gso&lt;/p&gt;</description>
    </item>
    <item>
      <title>检查网站的TLS版本</title>
      <link>https://frytea.com/archives/1279/</link>
      <pubDate>Fri, 26 May 2023 02:52:34 +0000</pubDate>
      <guid>https://frytea.com/archives/1279/</guid>
      <description>&lt;p&gt;检查网站的TLS版本 有时候需要知道某个网站支持的TLS的版本。现在SSL 2.0和SSL 3.0都&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 target is busy 的一种方法</title>
      <link>https://frytea.com/archives/1213/</link>
      <pubDate>Thu, 25 May 2023 09:26:42 +0000</pubDate>
      <guid>https://frytea.com/archives/1213/</guid>
      <description>&lt;p&gt;解决 target is busy 的一种方法 最近手头一台 PVE 集群的 ceph 地址变化，导&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS 禁用 Safari 下载自动解压</title>
      <link>https://frytea.com/archives/1205/</link>
      <pubDate>Thu, 25 May 2023 01:07:05 +0000</pubDate>
      <guid>https://frytea.com/archives/1205/</guid>
      <description>&lt;p&gt;macOS 禁用 Safari 下载自动解压 1.选择Safari 浏览器的「偏好设定」。 2.在「&lt;/p&gt;</description>
    </item>
    <item>
      <title>debian bullseye iptables 配置持久化</title>
      <link>https://frytea.com/archives/1258/</link>
      <pubDate>Tue, 23 May 2023 02:07:50 +0000</pubDate>
      <guid>https://frytea.com/archives/1258/</guid>
      <description>&lt;p&gt;debian bullseye iptables 配置持久化 在Debian 11中，iptable&lt;/p&gt;</description>
    </item>
    <item>
      <title>sshd 拒绝连接错误 refused connected from</title>
      <link>https://frytea.com/archives/1283/</link>
      <pubDate>Fri, 19 May 2023 02:16:16 +0000</pubDate>
      <guid>https://frytea.com/archives/1283/</guid>
      <description>&lt;p&gt;sshd 拒绝连接错误 refused connected from 最近发现一种会导致 sshd&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 常见主设备号设备清单</title>
      <link>https://frytea.com/archives/1138/</link>
      <pubDate>Thu, 18 May 2023 02:34:59 +0000</pubDate>
      <guid>https://frytea.com/archives/1138/</guid>
      <description>&lt;p&gt;Linux 常见主设备号设备清单 在Linux系统中，设备通常通过主设备号和次设备号来标识。主设备号&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 常见固定主次设备号设备清单</title>
      <link>https://frytea.com/archives/1134/</link>
      <pubDate>Thu, 18 May 2023 02:06:09 +0000</pubDate>
      <guid>https://frytea.com/archives/1134/</guid>
      <description>&lt;p&gt;Linux 常见固定主次设备号设备清单 在 Unix 或 Linux 系统中，一些设备的主次设备号是&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unix/Linux 常见设备清单</title>
      <link>https://frytea.com/archives/1136/</link>
      <pubDate>Thu, 18 May 2023 02:01:10 +0000</pubDate>
      <guid>https://frytea.com/archives/1136/</guid>
      <description>&lt;p&gt;Unix/Linux 常见设备清单 以下是在 Unix 或 Linux 系统的 /dev 目录下一些&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unix/Linux 常见设备类型前缀清单</title>
      <link>https://frytea.com/archives/1143/</link>
      <pubDate>Thu, 18 May 2023 01:58:28 +0000</pubDate>
      <guid>https://frytea.com/archives/1143/</guid>
      <description>&lt;p&gt;Unix/Linux 常见设备类型前缀清单 在Unix和Linux系统中，/dev目录下的设备文件前&lt;/p&gt;</description>
    </item>
    <item>
      <title>替换 apt-key 导入私有公钥</title>
      <link>https://frytea.com/archives/1192/</link>
      <pubDate>Wed, 17 May 2023 03:29:33 +0000</pubDate>
      <guid>https://frytea.com/archives/1192/</guid>
      <description>&lt;p&gt;替换 apt-key 导入私有公钥 在使用 apt-key 导入私钥时会遇到以下警告： Warnin&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 迁入 Win xp/2003 解决蓝屏问题</title>
      <link>https://frytea.com/archives/1194/</link>
      <pubDate>Fri, 12 May 2023 02:47:52 +0000</pubDate>
      <guid>https://frytea.com/archives/1194/</guid>
      <description>&lt;p&gt;PVE 迁入 Win xp/2003 解决蓝屏问题 Windows xp/2003 或是 Windo&lt;/p&gt;</description>
    </item>
    <item>
      <title>群晖 nas 连接 Headscale</title>
      <link>https://frytea.com/archives/1225/</link>
      <pubDate>Thu, 11 May 2023 09:42:54 +0000</pubDate>
      <guid>https://frytea.com/archives/1225/</guid>
      <description>&lt;p&gt;群晖 nas 连接 Headscale tailscale up &amp;ndash;reset &amp;ndash;login-s&lt;/p&gt;</description>
    </item>
    <item>
      <title>LXC 开机自启</title>
      <link>https://frytea.com/archives/1189/</link>
      <pubDate>Mon, 08 May 2023 11:56:54 +0000</pubDate>
      <guid>https://frytea.com/archives/1189/</guid>
      <description>&lt;p&gt;LXC 开机自启 旧版本的 LXC 和新版本的 LXC 操作命令略有不同，请注意，我这里使用的是 l&lt;/p&gt;</description>
    </item>
    <item>
      <title>LXC 直通硬盘</title>
      <link>https://frytea.com/archives/1246/</link>
      <pubDate>Sat, 06 May 2023 10:29:03 +0000</pubDate>
      <guid>https://frytea.com/archives/1246/</guid>
      <description>&lt;p&gt;LXC 直通硬盘 lxc 直通磁盘大致需要以下步骤： 配置 cgroup 规则，赋予 lxc 容器对&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 distrobuilder 制作 LXC/LXD 镜像</title>
      <link>https://frytea.com/archives/1230/</link>
      <pubDate>Fri, 05 May 2023 08:55:44 +0000</pubDate>
      <guid>https://frytea.com/archives/1230/</guid>
      <description>&lt;p&gt;使用 distrobuilder 制作 LXC/LXD 镜像 distrobuilder 是 LXC&lt;/p&gt;</description>
    </item>
    <item>
      <title>检查当前机器是不是虚拟机并确认底层虚拟化技术</title>
      <link>https://frytea.com/archives/776/</link>
      <pubDate>Sun, 30 Apr 2023 16:06:47 +0000</pubDate>
      <guid>https://frytea.com/archives/776/</guid>
      <description>&lt;p&gt;要确定当前运行的系统是否在虚拟机（VM）中，并了解底层虚拟化技术，可以使用一些命令和工具进行检查。以下是几种方法：&lt;/p&gt;
&lt;p&gt;使用 dmidecode 命令：
dmidecode 是一个用于获取 BIOS、系统、主板和处理器信息的工具。要使用 dmidecode，请确保您已安装它。然后，可以运行以下命令：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Surge 从零开始配置</title>
      <link>https://frytea.com/archives/782/</link>
      <pubDate>Sun, 30 Apr 2023 16:06:42 +0000</pubDate>
      <guid>https://frytea.com/archives/782/</guid>
      <description>&lt;p&gt;Surge for macOS 基于 &lt;a href=&#34;https://raw.githubusercontent.com/Hackl0us/SS-Rule-Snippet/master/LAZY_RULES/Surge.conf&#34;&gt;这份&lt;/a&gt; 修改。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Surge 的规则配置手册: https://manual.nssurge.com/

[General]
loglevel = notify
# 从 Surge iOS 4 / Surge Mac 3.3.0 起，工具开始支持 DoH
doh-server = https://doh.pub/dns-query, https://dns.alidns.com/dns-query
# https://dns.alidns.com/dns-query, https://13800000000.rubyfish.cn/, https://doh.360.cn/dns-query, https://dns.google/dns-query
dns-server = 223.5.5.5, 114.114.114.114
tun-excluded-routes = 0.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.168.0.0/16, 192.88.99.0/24, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 255.255.255.255/32
skip-proxy = localhost, *.local, injections.adguard.org, local.adguard.org, captive.apple.com, guzzoni.apple.com, 0.0.0.0/8, 10.0.0.0/8, 17.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.168.0.0/16, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4, 255.255.255.255/32

wifi-assist = true
allow-wifi-access = true
wifi-access-http-port = 6152
wifi-access-socks5-port = 6153
http-listen = 0.0.0.0:6152
socks5-listen = 0.0.0.0:6153

external-controller-access = 请指定密码@0.0.0.0:6170
replica = false

tls-provider = openssl
network-framework = false
exclude-simple-hostnames = true
ipv6 = true

test-timeout = 4
proxy-test-url = http://www.gstatic.com/generate_204
geoip-maxmind-url = https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb

[Replica]
hide-apple-request = true
hide-crashlytics-request = true
use-keyword-filter = false
hide-udp = false

# -----------------------------
# Surge 的几种策略配置规范，请参考 https://manual.nssurge.com/policy/proxy.html
# 不同的代理策略有*很多*可选参数，请参考上方连接的 Parameters 一段，根据需求自行添加参数。
#
# Surge 现已支持 UDP 转发功能，请参考: https://trello.com/c/ugOMxD3u/53-udp-%E8%BD%AC%E5%8F%91
# Surge 现已支持 TCP-Fast-Open 技术，请参考: https://trello.com/c/ij65BU6Q/48-tcp-fast-open-troubleshooting-guide
# Surge 现已支持 ss-libev 的全部加密方式和混淆，请参考: https://trello.com/c/BTr0vG1O/47-ss-libev-%E7%9A%84%E6%94%AF%E6%8C%81%E6%83%85%E5%86%B5
# -----------------------------

[Proxy]
ProxyHTTP = http, 1.2.3.4, 443, username, password
ProxyHTTPS = https, 1.2.3.4, 443, username, password
ProxySOCKS5 = socks5, 1.2.3.4, 443, username, password
ProxySOCKS5TLS = socks5-tls, 1.2.3.4, 443, username, password
ProxySS = ss, 1.2.3.4, 8000, encrypt-method=chacha20-ietf-poly1305, password=abcd1234
ProxyTrojan = trojan, 192.168.20.6, 443, password=password1
ProxySnell = snell, 1.2.3.4, 8000, psk=password

[Proxy Group]
Proxy = select, ProxyHTTP, ProxyHTTPS, ProxySOCKS5, ProxySOCKS5TLS, ProxySS, ProxyTrojan, ProxySnell

[Rule]
# 自定义规则
## 您可以在此处插入自定义规则

# 实用规则片段集
# RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-News.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-proxy.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/Apple-direct.list,DIRECT
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/CN.list,DIRECT
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/common-ad-keyword.list,REJECT-TINYGIF
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/Basic/foreign.list,Proxy
RULE-SET,https://cdn.jsdelivr.net/gh/Hackl0us/SS-Rule-Snippet@master/Rulesets/Surge/App/social/Telegram.list,Proxy
RULE-SET,LAN,DIRECT

# 最终规则
GEOIP,CN,DIRECT
FINAL,Proxy,dns-failed

[URL Rewrite]
# 请开启 MITM 并在域名中加入 www.google.cn
^https?://(www.)?(g|google).cn https://www.google.com 302
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://surge.mitsea.com/&#34;&gt;Surge 官方手册的汉化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Hackl0us/SS-Rule-Snippet&#34;&gt;SS Rule Snippet &lt;/a&gt;: 搜集、整理、维护 Surge / Quantumult (X) / Shadowrocket / Surfboard / clash (Premium) 实用规则&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>dnsmasq 多网卡分网段配置</title>
      <link>https://frytea.com/archives/784/</link>
      <pubDate>Sun, 30 Apr 2023 16:06:39 +0000</pubDate>
      <guid>https://frytea.com/archives/784/</guid>
      <description>&lt;p&gt;在 dnsmasq 的配置文件 &lt;code&gt;/etc/dnsmasq.conf&lt;/code&gt; 中使用类似下面的配置：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bind-interfaces
dhcp-range=eth1,10.192.10.50,10.192.10.200,12h
dhcp-range=eth2,10.192.20.50,10.192.20.200,12h
dhcp-range=eth3,10.192.30.50,10.192.30.200,12h
dhcp-option=option:dns-server,119.29.29.29
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;接口实现一个 dnsmasq 实例，同时在多张网卡启动 DHCP 服务，并分配不同网段的 IP 地址。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AutoGPT 用法</title>
      <link>https://frytea.com/archives/785/</link>
      <pubDate>Sun, 30 Apr 2023 16:06:36 +0000</pubDate>
      <guid>https://frytea.com/archives/785/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/Torantulino/Auto-GPT.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Auto-GPT&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Rename .env.template to .env and fill in your OPENAI_API_KEY. If you plan to use Speech Mode, fill in your ELEVEN_LABS_API_KEY as well.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python scripts/main.py
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# You will find activity and error logs in the folder ./output/logs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python scripts/main.py --debug
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Torantulino/Auto-GPT&#34;&gt;https://github.com/Torantulino/Auto-GPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://beta.elevenlabs.io/&#34;&gt;https://beta.elevenlabs.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://agentgpt.reworkd.ai/&#34;&gt;https://agentgpt.reworkd.ai/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>apt 查看软件库中软件包所有可用版本</title>
      <link>https://frytea.com/archives/786/</link>
      <pubDate>Sun, 30 Apr 2023 16:06:32 +0000</pubDate>
      <guid>https://frytea.com/archives/786/</guid>
      <description>&lt;p&gt;要查看软件库中现有的所有可用版本，您可以使用以下命令：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt-cache madison &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将 &lt;code&gt;&amp;lt;package-name&amp;gt;&lt;/code&gt; 替换为您要查看版本信息的软件包名称。此命令将显示所有可用版本的软件包及其详细信息，包括软件包名称、版本号、发行版、构建日期和软件源等信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>判断 IP 或端口被封(墙)</title>
      <link>https://frytea.com/archives/787/</link>
      <pubDate>Sun, 30 Apr 2023 16:06:29 +0000</pubDate>
      <guid>https://frytea.com/archives/787/</guid>
      <description>&lt;h2 id=&#34;ip-检测&#34;&gt;IP 检测&lt;/h2&gt;
&lt;h3 id=&#34;命令行方式&#34;&gt;命令行方式&lt;/h3&gt;
&lt;p&gt;最简单的是在命令行窗口上测试&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ ping x.x.x.x.
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;在线方式&#34;&gt;在线方式&lt;/h3&gt;
&lt;p&gt;可使用网站 &lt;a href=&#34;http://ping.chinaz.com/&#34;&gt;Ping检测&lt;/a&gt; 进行测试&lt;/p&gt;
&lt;h3 id=&#34;判断&#34;&gt;判断&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;如果国内和国外都 ping 不通，则是海外服务器的问题&lt;/li&gt;
&lt;li&gt;如果国内 ping 不通，国外能 ping 通，那么 IP 被封了&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;端口检测&#34;&gt;端口检测&lt;/h2&gt;
&lt;h3 id=&#34;命令行方式-1&#34;&gt;命令行方式&lt;/h3&gt;
&lt;p&gt;使用 telnet 命令测试端口：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 安装指定版本 docker</title>
      <link>https://frytea.com/archives/789/</link>
      <pubDate>Sun, 30 Apr 2023 16:06:25 +0000</pubDate>
      <guid>https://frytea.com/archives/789/</guid>
      <description>&lt;p&gt;如果你过去安装过 docker，先删掉：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get remove docker docker-engine docker.io containerd runc
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;首先安装依赖：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;信任 Docker 的 GPG 公钥并添加仓库：
发行版&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  &amp;#34;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirror.nju.edu.cn/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable&amp;#34; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;安装最新&lt;/p&gt;</description>
    </item>
    <item>
      <title>debmirror 镜像 nexus3 apt 仓库</title>
      <link>https://frytea.com/archives/790/</link>
      <pubDate>Sun, 30 Apr 2023 16:06:21 +0000</pubDate>
      <guid>https://frytea.com/archives/790/</guid>
      <description>&lt;p&gt;nexus3 没有很好的目录重命名方法。&lt;/p&gt;
&lt;p&gt;使用 apt-mirror 镜像会出错，实测 debmirror 没问题。下面记录方法：&lt;/p&gt;
&lt;p&gt;首先导入公钥&lt;/p&gt;
&lt;h2 id=&#34;导入-apt-公钥&#34;&gt;导入 apt 公钥&lt;/h2&gt;
&lt;p&gt;如果你已经有了公钥文件（如 &lt;code&gt;public.key&lt;/code&gt;），你可以使用以下命令将其导入到 GPG 密钥环和 APT 的受信任密钥列表中：&lt;/p&gt;</description>
    </item>
    <item>
      <title>debian/ubuntu 防火墙 ufw 简单使用</title>
      <link>https://frytea.com/archives/1211/</link>
      <pubDate>Sun, 30 Apr 2023 03:17:46 +0000</pubDate>
      <guid>https://frytea.com/archives/1211/</guid>
      <description>&lt;p&gt;debian/ubuntu 防火墙 ufw 简单使用 什么是 UFW ？ UFW，即简单防火墙 Un&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023 即刻 AIGC 大目录 – 第五期</title>
      <link>https://frytea.com/archives/1172/</link>
      <pubDate>Thu, 27 Apr 2023 14:17:40 +0000</pubDate>
      <guid>https://frytea.com/archives/1172/</guid>
      <description>&lt;p&gt;转载自: &lt;a href=&#34;https://web.okjike.com/originalPost/64449055c&#34;&gt;https://web.okjike.com/originalPost/64449055c&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023 即刻 AIGC 大目录 – 第四期</title>
      <link>https://frytea.com/archives/1173/</link>
      <pubDate>Thu, 27 Apr 2023 14:17:23 +0000</pubDate>
      <guid>https://frytea.com/archives/1173/</guid>
      <description>&lt;p&gt;转载自: &lt;a href=&#34;https://web.okjike.com/originalPost/6416d5724&#34;&gt;https://web.okjike.com/originalPost/6416d5724&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023 即刻 AIGC 大目录 – 第三期</title>
      <link>https://frytea.com/archives/1170/</link>
      <pubDate>Thu, 27 Apr 2023 14:16:55 +0000</pubDate>
      <guid>https://frytea.com/archives/1170/</guid>
      <description>&lt;p&gt;转载自: &lt;a href=&#34;https://web.okjike.com/originalPost/63ec05d0f&#34;&gt;https://web.okjike.com/originalPost/63ec05d0f&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023 即刻 AIGC 大目录 – 第二期</title>
      <link>https://frytea.com/archives/1164/</link>
      <pubDate>Thu, 27 Apr 2023 14:16:39 +0000</pubDate>
      <guid>https://frytea.com/archives/1164/</guid>
      <description>&lt;p&gt;转载自: &lt;a href=&#34;https://web.okjike.com/originalPost/63bb54481&#34;&gt;https://web.okjike.com/originalPost/63bb54481&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>2023 即刻 AIGC 大目录 – 第一期</title>
      <link>https://frytea.com/archives/1152/</link>
      <pubDate>Thu, 27 Apr 2023 14:08:58 +0000</pubDate>
      <guid>https://frytea.com/archives/1152/</guid>
      <description>&lt;p&gt;转载自: &lt;a href=&#34;https://web.okjike.com/originalPost/638c6bb9c&#34;&gt;https://web.okjike.com/originalPost/638c6bb9c&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>检查当前终端是不是 Docker</title>
      <link>https://frytea.com/archives/775/</link>
      <pubDate>Thu, 27 Apr 2023 14:07:15 +0000</pubDate>
      <guid>https://frytea.com/archives/775/</guid>
      <description>&lt;p&gt;要确定当前运行的终端是否在 Docker 容器内，可以检查容器特定的文件和环境变量。以下是一种方法，通过查看 /proc/1/cgroup 文件来判断：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cat /proc/1/cgroup
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;观察输出的内容。如果您看到与 Docker 相关的内容（如 docker 或 containerd），则表示您当前正在 Docker 容器内运行。例如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>批量修改 git 仓库地址</title>
      <link>https://frytea.com/archives/788/</link>
      <pubDate>Thu, 27 Apr 2023 14:07:01 +0000</pubDate>
      <guid>https://frytea.com/archives/788/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;⚠️ 以下命令将修改您代码仓库的远程地址，请确保明确了解命令的含义在做操作。
如果不确定请提前做好数据备份！！！&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;find ./ -type f -name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;config&amp;#34;&lt;/span&gt; -exec perl -i -pe &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/192\.168\.66\.43/10.168.68.43/g&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上命令递归的将当前 (&lt;code&gt;./&lt;/code&gt;) 目录下所有 git 配置文件 (&lt;code&gt;.git/config&lt;/code&gt;) 中 &lt;code&gt;192.168.66.43&lt;/code&gt; 替换为 &lt;code&gt;10.168.68.43&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>AIGC Weekly</title>
      <link>https://frytea.com/archives/1159/</link>
      <pubDate>Wed, 26 Apr 2023 01:20:02 +0000</pubDate>
      <guid>https://frytea.com/archives/1159/</guid>
      <description>&lt;p&gt;工具：Midjourney v5 blue glass curved background wall&lt;/p&gt;</description>
    </item>
    <item>
      <title>AIGC Weekly</title>
      <link>https://frytea.com/archives/1171/</link>
      <pubDate>Wed, 26 Apr 2023 01:11:09 +0000</pubDate>
      <guid>https://frytea.com/archives/1171/</guid>
      <description>&lt;p&gt;工具：Midjourney v5 提示词：Rainbow holographic pcd, in t&lt;/p&gt;</description>
    </item>
    <item>
      <title>AIGC Weekly 16  AIGC周刊</title>
      <link>https://frytea.com/archives/1153/</link>
      <pubDate>Wed, 26 Apr 2023 01:07:19 +0000</pubDate>
      <guid>https://frytea.com/archives/1153/</guid>
      <description>&lt;p&gt;工具：Midjourney Niji v5 提示词：Femme, cyberpunk akira s&lt;/p&gt;</description>
    </item>
    <item>
      <title>AIGC Weekly</title>
      <link>https://frytea.com/archives/1160/</link>
      <pubDate>Tue, 25 Apr 2023 16:28:52 +0000</pubDate>
      <guid>https://frytea.com/archives/1160/</guid>
      <description>&lt;p&gt;工具：Midjourney v5 提示词：light mode gradient backgroun&lt;/p&gt;</description>
    </item>
    <item>
      <title>git 整体提交记录(rabase)后合并(merge)</title>
      <link>https://frytea.com/archives/1198/</link>
      <pubDate>Sat, 22 Apr 2023 15:44:24 +0000</pubDate>
      <guid>https://frytea.com/archives/1198/</guid>
      <description>&lt;p&gt;⚠️ 无论是 rebase 还是 merge 都是一项危险操作，请确保充分理解的命令的含义，并确保每&lt;/p&gt;</description>
    </item>
    <item>
      <title>git 整体提交记录(rabase)后合并(merge) </title>
      <link>https://frytea.com/archives/783/</link>
      <pubDate>Sat, 22 Apr 2023 07:44:24 +0000</pubDate>
      <guid>https://frytea.com/archives/783/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;⚠️ 无论是 &lt;code&gt;rebase&lt;/code&gt; 还是 &lt;code&gt;merge&lt;/code&gt; 都是一项危险操作，请确保充分理解的命令的含义，并确保每一行代码无误后再继续。
如果不确定，请一定记得做好数据备份！！！&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;为了合并 dev 分支到 master 分支，同时确保代码不丢失且提交记录规整，你可以使用交互式的 git rebase 命令。这允许你重新排列、修改、合并或分割提交。以下是操作步骤：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tiddlywiki 单体/文件夹互转</title>
      <link>https://frytea.com/archives/781/</link>
      <pubDate>Sat, 22 Apr 2023 07:40:07 +0000</pubDate>
      <guid>https://frytea.com/archives/781/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TiddlyWiki单文件转文件夹命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TiddlyWiki文件夹转单文件命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tiddlywiki ./mywikifolder --rendertiddler &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;$:/core/save/all&amp;#39;&lt;/span&gt; mywiki.html text/plain
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/553848135&#34;&gt;TiddlyWiki文件夹版与HTML版相互转换&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>在浏览器里运行 ChatGPT 和 Stable Diffusion</title>
      <link>https://frytea.com/archives/780/</link>
      <pubDate>Thu, 20 Apr 2023 13:58:02 +0000</pubDate>
      <guid>https://frytea.com/archives/780/</guid>
      <description>&lt;p&gt;现在可以在浏览器里运行 ChatGPT 和 Stable Diffusion 了，详细请看：https://skybyte.me/79.html&lt;/p&gt;
&lt;p&gt;M1 M2 电脑可以直接运行，其他电脑也可以试试，快来试试吧！&lt;/p&gt;</description>
    </item>
    <item>
      <title>一次 AutoGPT 试用体验</title>
      <link>https://frytea.com/archives/1165/</link>
      <pubDate>Mon, 17 Apr 2023 12:37:11 +0000</pubDate>
      <guid>https://frytea.com/archives/1165/</guid>
      <description>&lt;p&gt;任务 SkyByte Bolger 专注于提升 skybyte.me 博客访问量，博客围绕云计算与&lt;/p&gt;</description>
    </item>
    <item>
      <title>在自己的电脑运行清华开源语言模型 ChatGLM-6B</title>
      <link>https://frytea.com/archives/779/</link>
      <pubDate>Sat, 15 Apr 2023 10:14:00 +0000</pubDate>
      <guid>https://frytea.com/archives/779/</guid>
      <description>&lt;p&gt;有人说 AIGC 用 2 年时间走完了互联网 10 年的路，因为大家看到的是围绕 AI 的产品在最近如雨后春笋般涌现，看不到的事各领域大佬早在几年前已经开始了相关布局。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 Linux 和 M1 macOS 上自托管运行清华开源语言模型 ChatGLM-6B</title>
      <link>https://frytea.com/archives/1154/</link>
      <pubDate>Sat, 15 Apr 2023 09:47:48 +0000</pubDate>
      <guid>https://frytea.com/archives/1154/</guid>
      <description>&lt;p&gt;ChatGLM-6B 是一个由清华 THUDM 开源的、支持中英双语的对话语言模型，基于 Gener&lt;/p&gt;</description>
    </item>
    <item>
      <title>推荐一份 ChatGPT 中文调教指南</title>
      <link>https://frytea.com/archives/1169/</link>
      <pubDate>Thu, 13 Apr 2023 15:00:09 +0000</pubDate>
      <guid>https://frytea.com/archives/1169/</guid>
      <description>&lt;p&gt;《🧠ChatGPT 中文调教指南》 是一份帮助你“调教”chatGPT 的指南，可以给人许多灵感。&lt;/p&gt;</description>
    </item>
    <item>
      <title>确认当前终端是否运行在 LXC 容器</title>
      <link>https://frytea.com/archives/774/</link>
      <pubDate>Mon, 10 Apr 2023 14:56:37 +0000</pubDate>
      <guid>https://frytea.com/archives/774/</guid>
      <description>&lt;p&gt;要确定当前运行的系统是否在 LXC 容器中，可以检查特定的环境变量和文件。以下是一种方法，通过查看 /proc/1/environ 文件来判断：&lt;/p&gt;
&lt;p&gt;在终端中运行以下命令：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cat /proc/1/environ | tr &amp;#39;\0&amp;#39; &amp;#39;\n&amp;#39; | grep &amp;#39;^container=&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;观察输出的内容。如果输出包含 container=lxc，则表示您当前正在 LXC 容器内运行。例如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】理解 DALL·E 2， Stable Diffusion和 Midjourney 的工作原理</title>
      <link>https://frytea.com/archives/1162/</link>
      <pubDate>Sun, 09 Apr 2023 16:48:29 +0000</pubDate>
      <guid>https://frytea.com/archives/1162/</guid>
      <description>&lt;p&gt;【随着 AIGC 的兴起，各位小伙伴们对文生图工具 DALL-E 2、Stable Diffusio&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 MacBook 上运行开源版 AI 图像生成模型之 Mochi Diffusion</title>
      <link>https://frytea.com/archives/778/</link>
      <pubDate>Sun, 09 Apr 2023 07:11:00 +0000</pubDate>
      <guid>https://frytea.com/archives/778/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/godly-devotion/MochiDiffusion&#34;&gt;Mochi Diffusion&lt;/a&gt; 是一个开源的在 Mac 上原生运行 Stable Diffusion 的客户端，可以在 iOS 和 Mac 上使用 Stable Diffusion 画图而无需联网。&lt;/p&gt;
&lt;p&gt;Stable Diffusion 作为当前火爆 AI 图像生成中的开源方案，得到广泛关注。使用下面介绍的客户端可以在 MacBook 上相对快速的将这一模型运行起来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>安装启动 Git LFS 大型文件处理模块</title>
      <link>https://frytea.com/archives/777/</link>
      <pubDate>Sun, 09 Apr 2023 07:02:46 +0000</pubDate>
      <guid>https://frytea.com/archives/777/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Git LFS（Large File Storage）是一个 Git 扩展，用于更有效地处理大型文件。

在基于 git 托管大模型的平台拉取 AI 模型时常常需要开启这一功能。

要在不同的操作系统上安装 Git LFS，请按照以下步骤操作：

## 第一步、安装 Git LFS

### 对于 macOS

如果你已经安装了 Homebrew，你可以使用以下命令安装 Git LFS：
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;brew install git-lfs&lt;/p&gt;</description>
    </item>
    <item>
      <title>运行在 macOS 中的 Linux —— multipass 方案</title>
      <link>https://frytea.com/archives/773/</link>
      <pubDate>Sun, 09 Apr 2023 07:02:12 +0000</pubDate>
      <guid>https://frytea.com/archives/773/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/canonical/multipass&#34;&gt; multipass&lt;/a&gt; 用于编排虚拟 Ubuntu 实例&lt;/p&gt;
&lt;p&gt;下载 pkg 安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass find
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass launch ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass info &amp;lt;VM Name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass shell &amp;lt;VM Name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass exec &amp;lt;VM Name&amp;gt; -- lsb_release -a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass stop &amp;lt;VM Name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass delete &amp;lt;VM Name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ multipass purge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://icloudnative.io/posts/use-podman-in-macos/&#34;&gt;在 macOS 中使用 Podman&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>运行在 macOS 中的 Linux —— OrbStack 方案</title>
      <link>https://frytea.com/archives/772/</link>
      <pubDate>Sun, 09 Apr 2023 07:02:08 +0000</pubDate>
      <guid>https://frytea.com/archives/772/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://orbstack.dev/&#34;&gt;OrbStack&lt;/a&gt;) 是在 macOS 上运行 Docker 容器和 Linux 机器的快速、轻量级和简单的方式。它是一个超级充电版 WSL 和 Docker 桌面替代品，所有这些都在一个易于使用的应用程序中实现。&lt;/p&gt;
&lt;p&gt;GitHub：&lt;a href=&#34;https://github.com/orbstack&#34;&gt;https://github.com/orbstack&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 批量销毁虚拟机</title>
      <link>https://frytea.com/archives/771/</link>
      <pubDate>Sat, 08 Apr 2023 06:56:44 +0000</pubDate>
      <guid>https://frytea.com/archives/771/</guid>
      <description>&lt;p&gt;可以使用以下命令一次性删除所有 QEMU 虚拟机：&lt;/p&gt;
&lt;h2 id=&#34;串行&#34;&gt;串行&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;qm list | awk &amp;#39;NR&amp;gt;1 {print $1}&amp;#39; | xargs -I {} qm destroy {}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;解释：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;qm list&lt;/code&gt; 命令获取所有虚拟机的列表。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;awk &#39;NR&amp;gt;1 {print $1}&#39;&lt;/code&gt; 命令跳过第一行（表头）并提取 VMID 列。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xargs -I {} qm destroy {}&lt;/code&gt; 命令将每个 VMID 作为参数传递给 &lt;code&gt;qm destroy&lt;/code&gt; 命令，从而删除每个虚拟机。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意：此命令会删除所有虚拟机，请确保在执行前已进行适当备份和确认。&lt;/p&gt;</description>
    </item>
    <item>
      <title>拯救全网的 ChatGPT 解封攻略</title>
      <link>https://frytea.com/archives/770/</link>
      <pubDate>Mon, 03 Apr 2023 15:46:22 +0000</pubDate>
      <guid>https://frytea.com/archives/770/</guid>
      <description>&lt;p&gt;不知为什么最近 OpenAI 账号大批量被封这条新闻火遍各大媒体，还以为真的发生了什么大事。好在手里的这几个帐号暂时无恙。&lt;/p&gt;
&lt;p&gt;对于这一消息，我第一反应是质疑，数据来源是什么？显然是没有根据的，甚至有一些网友做了 &lt;a href=&#34;https://mp.weixin.qq.com/s/DS7bT7ssICqQ42J57fj9wA&#34;&gt;验证&lt;/a&gt; ，来论证此次大规模封号的空穴来风。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】拯救全网的 ChatGPT 解封攻略</title>
      <link>https://frytea.com/archives/1151/</link>
      <pubDate>Mon, 03 Apr 2023 15:32:36 +0000</pubDate>
      <guid>https://frytea.com/archives/1151/</guid>
      <description>&lt;p&gt;以下内容转载自：拯救全网的 Chatgpt 解封攻略，有需要的朋友可以试试，侵删。 第一步：邮件说明&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 Mac 快速上手 Stable Diffusion —— Mochi Diffusion</title>
      <link>https://frytea.com/archives/1174/</link>
      <pubDate>Mon, 03 Apr 2023 15:20:39 +0000</pubDate>
      <guid>https://frytea.com/archives/1174/</guid>
      <description>&lt;p&gt;Mochi Diffusion 是一个开源的在 Mac 上原生运行 Stable Diffusion&lt;/p&gt;</description>
    </item>
    <item>
      <title>介绍一个 AI 提示词学习网站 —— Learn Prompting</title>
      <link>https://frytea.com/archives/1168/</link>
      <pubDate>Mon, 03 Apr 2023 15:10:35 +0000</pubDate>
      <guid>https://frytea.com/archives/1168/</guid>
      <description>&lt;p&gt;现如今，OpenAI 已经向人们论证了机器学习对整个人类工作生活的颠覆性，会使用 AI 工具或将成为&lt;/p&gt;</description>
    </item>
    <item>
      <title>在自己的电脑运行开源版 ChatGPT —— gpt4all</title>
      <link>https://frytea.com/archives/769/</link>
      <pubDate>Sun, 02 Apr 2023 07:20:46 +0000</pubDate>
      <guid>https://frytea.com/archives/769/</guid>
      <description>&lt;p&gt;GPT4All 是基于大量干净的助手数据（包括代码、故事和对话）训练而成的聊天机器人，数据包括 ～800k 条 GPT-3.5-Turbo 生成数据，基于 LLaMa 完成，M1 Mac、Windows 等环境都能运行。或许就像它的名字所暗示的那样，人人都能用上个人 GPT 的时代已经来了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>运行开源版 ChatGPT —— gpt4all</title>
      <link>https://frytea.com/archives/1158/</link>
      <pubDate>Sun, 02 Apr 2023 07:17:50 +0000</pubDate>
      <guid>https://frytea.com/archives/1158/</guid>
      <description>&lt;p&gt;GPT4All 是基于大量干净的助手数据（包括代码、故事和对话）训练而成的聊天机器人，数据包括～80&lt;/p&gt;</description>
    </item>
    <item>
      <title>ChatGPT 给出的计算机科学学习计划</title>
      <link>https://frytea.com/archives/768/</link>
      <pubDate>Sat, 01 Apr 2023 07:43:57 +0000</pubDate>
      <guid>https://frytea.com/archives/768/</guid>
      <description>&lt;p&gt;尝试询问 chatGPT 计算机科学学习计划：&lt;/p&gt;
&lt;p&gt;我目前是一名云计算工程师，不是计算机科班出身，学习过基础的计算机导论、程序设计基础、C 程序开发以及 C++ 程序设计开发。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何提升博客访问量</title>
      <link>https://frytea.com/archives/767/</link>
      <pubDate>Sat, 01 Apr 2023 06:11:19 +0000</pubDate>
      <guid>https://frytea.com/archives/767/</guid>
      <description>&lt;p&gt;最近在探索提升博客访问量的方法，以下是 ChatGPT4 给出的答案：&lt;/p&gt;
&lt;p&gt;要增加博客的访问量，你可以采取以下策略：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;高质量内容：确保你的博客内容有趣、有价值、有深度，并且符合你的目标受众的需求。定期发布新文章以保持读者的兴趣。&lt;/li&gt;
&lt;li&gt;优化搜索引擎排名（SEO）：对你的博客进行搜索引擎优化，以提高在搜索引擎结果页面（SERP）中的排名。这包括关键词研究、合适的标题和元标签、内容结构优化等。&lt;/li&gt;
&lt;li&gt;社交媒体推广：通过在各大社交媒体平台（如微博、微信、豆瓣等）分享你的文章，可以吸引更多的访问量。创建社交媒体帐户，与读者互动并建立关系。&lt;/li&gt;
&lt;li&gt;互动与合作：在其他博客或论坛上留言、评论和互动，可以让更多人了解你的博客。此外，与其他博主或行业专家合作也可以增加曝光度。&lt;/li&gt;
&lt;li&gt;邮件营销：建立邮件订阅列表，定期向订阅者发送更新通知和精选内容。这可以帮助增加回访用户和博客的活跃度。&lt;/li&gt;
&lt;li&gt;分析和调整：使用网站分析工具（如 Google Analytics）来了解访问者的行为和偏好，从而调整内容策略和营销方法。&lt;/li&gt;
&lt;li&gt;广告投放：如果有预算，可以尝试在搜索引擎或社交媒体平台投放广告，以提高博客的曝光度。&lt;/li&gt;
&lt;li&gt;设计和用户体验：确保博客的设计美观、易于阅读和导航。一个良好的用户体验可以留住访问者，并将他们转化为忠实读者。&lt;/li&gt;
&lt;li&gt;创作独特的、病毒式内容：发布有趣、独特且容易传播的内容，可以吸引大量新访问者。&lt;/li&gt;
&lt;li&gt;参加线上线下活动：参加与你博客主题相关的活动、研讨会或会议，可以扩大你的人脉并提高知名度。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通过这些策略，你可以有效地增加博客的访问量。请注意，这些方法可能需要时间和耐心，但长期来看，它们将带来稳定的访问流量。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一种 ChatGPT 充值的方法—— nobepay</title>
      <link>https://frytea.com/archives/766/</link>
      <pubDate>Fri, 31 Mar 2023 16:26:34 +0000</pubDate>
      <guid>https://frytea.com/archives/766/</guid>
      <description>&lt;p&gt;ChatGPT 是一种人工智能自然语言处理模型，为了获得更好的性能和效果，通常需要进行充值。在进行 ChatGPT 充值时，有很多数字货币支付服务可供选择，其中 Nobepay 可能是一个比较好的选择。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一种 ChatGPT 充值的方法 —— Depay</title>
      <link>https://frytea.com/archives/765/</link>
      <pubDate>Fri, 31 Mar 2023 16:22:44 +0000</pubDate>
      <guid>https://frytea.com/archives/765/</guid>
      <description>&lt;p&gt;最近研究 OpenAI 旗下 ChatGPT 的付费方法。&lt;/p&gt;
&lt;p&gt;ChatGPT 是一种基于人工智能的自然语言处理模型，目前已经被广泛应用于各种领域，如聊天机器人、智能客服、文本摘要等。&lt;/p&gt;
&lt;p&gt;在使用 ChatGPT 进行开发和测试时，有时需要对模型进行充值，以便获取更好的性能和效果。本文将介绍一种 ChatGPT 充值的方法——使用 Depay 进行付款。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AIGC Weekly</title>
      <link>https://frytea.com/archives/1157/</link>
      <pubDate>Thu, 30 Mar 2023 14:52:50 +0000</pubDate>
      <guid>https://frytea.com/archives/1157/</guid>
      <description>&lt;p&gt;以下内容转载自：https://op7418.zhubai.love/posts/225203050&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS 使用 dd 制作 USB 启动盘</title>
      <link>https://frytea.com/archives/764/</link>
      <pubDate>Thu, 30 Mar 2023 14:39:40 +0000</pubDate>
      <guid>https://frytea.com/archives/764/</guid>
      <description>&lt;p&gt;安装操作系统时，当前常用的方式是获取操作系统对应的 ISO 文件，并制作 U 盘启动盘，使用 U 盘引导系统进行安装。&lt;/p&gt;
&lt;p&gt;当使用 MacOS 时，可以很方便的利用系统自带工具，完成上述工作，具体步骤如下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>推荐几个 AI 生成 logo 的方法</title>
      <link>https://frytea.com/archives/1167/</link>
      <pubDate>Thu, 30 Mar 2023 14:11:20 +0000</pubDate>
      <guid>https://frytea.com/archives/1167/</guid>
      <description>&lt;p&gt;最近在筹划这个新的博客网站，再次遇到头疼的 logo 问题，本着将精力用在刀刃上的决心，这种事情还是&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于chatGPT 创建个人知识库助手 – copilot hub</title>
      <link>https://frytea.com/archives/1161/</link>
      <pubDate>Thu, 30 Mar 2023 13:57:05 +0000</pubDate>
      <guid>https://frytea.com/archives/1161/</guid>
      <description>&lt;p&gt;目前 chatGPT 的资料截止 2021，许多资料是过时的，如何使用自己现有的资料构建个人的 ch&lt;/p&gt;</description>
    </item>
    <item>
      <title>破解海外 ChatGPT 检测技巧</title>
      <link>https://frytea.com/archives/1155/</link>
      <pubDate>Thu, 30 Mar 2023 13:51:11 +0000</pubDate>
      <guid>https://frytea.com/archives/1155/</guid>
      <description>&lt;p&gt;以下内容转载自：https://web.okjike.com/originalPost/6421ac&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 ChatGPT 学日语</title>
      <link>https://frytea.com/archives/1150/</link>
      <pubDate>Thu, 30 Mar 2023 13:48:32 +0000</pubDate>
      <guid>https://frytea.com/archives/1150/</guid>
      <description>&lt;p&gt;看到一些即友会使用 ChatGPT 学日语，感觉很有意思，在这里分享一下： 启发开始用 ChatGP&lt;/p&gt;</description>
    </item>
    <item>
      <title>虚拟磁盘扩容后扩展 LVM vg</title>
      <link>https://frytea.com/archives/763/</link>
      <pubDate>Wed, 29 Mar 2023 10:42:08 +0000</pubDate>
      <guid>https://frytea.com/archives/763/</guid>
      <description>&lt;h2 id=&#34;新空间分区&#34;&gt;新空间分区&lt;/h2&gt;
&lt;p&gt;在使用 fdisk 工具将新增的磁盘空间分配到 LVM PV 上时，您需要按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;运行 &lt;code&gt;fdisk -l&lt;/code&gt; 命令查看系统中当前可用的磁盘和分区信息。&lt;/li&gt;
&lt;li&gt;运行 &lt;code&gt;fdisk /dev/sdX&lt;/code&gt; 命令（其中 sdX 表示要调整大小的磁盘），以编辑该磁盘的分区表。&lt;/li&gt;
&lt;li&gt;使用命令 &lt;code&gt;p&lt;/code&gt; 查看磁盘分区表，确定要修改的分区号码。&lt;/li&gt;
&lt;li&gt;使用命令 &lt;code&gt;n&lt;/code&gt; 创建一个新的分区。按照提示输入分区类型、起始和结束位置等信息即可。请注意，新分区的起始位置必须与现有的 LVM PV 的终止位置相同。&lt;/li&gt;
&lt;li&gt;使用命令 &lt;code&gt;t&lt;/code&gt; 更改新分区的类型。选择类型 8e，以便将其设置为 LVM 分区类型。&lt;/li&gt;
&lt;li&gt;使用命令 &lt;code&gt;w&lt;/code&gt; 将新的分区表写入磁盘，并退出 fdisk 工具。&lt;/li&gt;
&lt;li&gt;运行 &lt;code&gt;pvresize /dev/sdXn&lt;/code&gt; 命令（其中 sdXn 表示新创建的 LVM PV 分区设备文件名）以将新分区添加到现有的 LVM 物理卷中。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完成以上步骤后，您可以使用 lvextend 命令扩展逻辑卷的大小，并使用 resize2fs 命令调整文件系统大小以反映新的逻辑卷大小。&lt;/p&gt;</description>
    </item>
    <item>
      <title>查看 Docker cp 进度</title>
      <link>https://frytea.com/archives/762/</link>
      <pubDate>Wed, 29 Mar 2023 01:18:12 +0000</pubDate>
      <guid>https://frytea.com/archives/762/</guid>
      <description>&lt;p&gt;docker cp 命令本身不提供进度查看功能。但是，您可以使用第三方工具，如 pv（Pipe Viewer）在执行 docker cp 时查看进度。以下是使用 pv 查看 docker cp 进度的步骤：&lt;/p&gt;</description>
    </item>
    <item>
      <title>迁移 Docker volume 到本地挂载点</title>
      <link>https://frytea.com/archives/760/</link>
      <pubDate>Tue, 28 Mar 2023 10:22:02 +0000</pubDate>
      <guid>https://frytea.com/archives/760/</guid>
      <description>&lt;p&gt;要将 Docker volume 迁移到本地挂载点，您需要执行以下步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;首先，确保已停止正在使用此 volume 的所有容器。您可以使用以下命令停止容器（将 &amp;lt;container_name&amp;gt; 替换为您的容器名称）：    ```
docker stop &amp;lt;container_name&amp;gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1. 使用 docker cp 命令将 volume 的内容复制到本地文件系统。首先，创建一个临时容器，将要迁移的 volume 挂载到该容器：    ```
docker run -d --name temp_container -v &amp;lt;volume_name&amp;gt;:/volume_data busybox tail -f /dev/null
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将 &amp;lt;volume_name&amp;gt; 替换为要迁移的 volume 的名称。&lt;/p&gt;</description>
    </item>
    <item>
      <title>适合海淘的诺贝 nobepay 虚拟信用卡申请 – 小 z 博客</title>
      <link>https://frytea.com/archives/1163/</link>
      <pubDate>Tue, 28 Mar 2023 08:57:03 +0000</pubDate>
      <guid>https://frytea.com/archives/1163/</guid>
      <description>&lt;p&gt;以下内容转载自 适合海淘的诺贝 nobepay 虚拟信用卡申请 - 小 z 博客 虚拟信用卡是一种新&lt;/p&gt;</description>
    </item>
    <item>
      <title>服务器使用 systemd 自动启动 wireguard</title>
      <link>https://frytea.com/archives/761/</link>
      <pubDate>Mon, 27 Mar 2023 15:34:04 +0000</pubDate>
      <guid>https://frytea.com/archives/761/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Generate a valid and working WireGuard configuration file /etc/wireguard/wg0.conf. Our setup guide offers details.    Note: You may have to replace the Endpoint hostname with the WireGuard server IP address in the WireGuard configuration file. DNS may or may not be applied when systemd brings the wg0 interface up.&lt;/li&gt;
&lt;li&gt;Add the WireGuard service to systemd&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;   sudo systemctl enable wg-quick@wg0.service
   sudo systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Start the new service immediately:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo systemctl start wg-quick@wg0
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Reboot your computer system to verify the automatic connection on startup works as expected.&lt;/li&gt;
&lt;li&gt;Check the service status:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;   systemctl status wg-quick@wg0
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;To remove the service and clean up the system:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo systemctl stop wg-quick@wg0
sudo systemctl disable wg-quick@wg0.service
sudo rm -i /etc/systemd/system/wg-quick@wg0*
sudo systemctl daemon-reload
sudo systemctl reset-failed
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ivpn.net/knowledgebase/linux/linux-autostart-wireguard-in-systemd/&#34;&gt;Autostart WireGuard in systemd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>【转】推荐一家支持USDT充值的虚拟信用卡Depay，支持OpenAI（ChatGPT）绑定</title>
      <link>https://frytea.com/archives/1166/</link>
      <pubDate>Sun, 26 Mar 2023 07:40:15 +0000</pubDate>
      <guid>https://frytea.com/archives/1166/</guid>
      <description>&lt;p&gt;以下内容转载自 推荐一家支持 USDT 充值的虚拟信用卡 Depay，支持 OpenAI（ChatG&lt;/p&gt;</description>
    </item>
    <item>
      <title>管理情绪的秘诀：5 个实用技巧</title>
      <link>https://frytea.com/archives/758/</link>
      <pubDate>Sun, 19 Mar 2023 13:52:09 +0000</pubDate>
      <guid>https://frytea.com/archives/758/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2023/03/19/20230319215058b1af78af0c79e49f.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;情绪是每个人都拥有的一种自然反应。有时候我们会因为情绪失控而做出一些后悔的决定，这不仅会影响到我们自己的生活，也会对周围的人产生负面影响。所以，学会管理情绪是非常重要的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AIGC 相关资源合辑</title>
      <link>https://frytea.com/archives/757/</link>
      <pubDate>Sun, 19 Mar 2023 13:01:10 +0000</pubDate>
      <guid>https://frytea.com/archives/757/</guid>
      <description>&lt;p&gt;近期 AIGC 相关工具爆火，相关产品喷涌而出，每天都有很多有意思的东西出来，因此特别在这里做一下整理，方便乐于探索的人们。&lt;/p&gt;
&lt;h2 id=&#34;ai-资源站点&#34;&gt;AI 资源站点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://17yongai.com/&#34;&gt;一起用AI 先行于未来&lt;/a&gt;: 一个 AI 工具门户类站点&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ainavpro.com/&#34;&gt;AI 导航&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://aifure.com/&#34;&gt;AIfure&lt;/a&gt;: AI 作品赏析&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://aigc.cn/&#34;&gt;AIGC中文导航&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ai-工具合辑&#34;&gt;AI 工具合辑&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://openai.com/blog/chatgpt&#34;&gt;ChatGPT&lt;/a&gt;：全能战士，地表最强&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://openai.com/product/dall-e-2&#34;&gt;Dall-E-2&lt;/a&gt;：神级 Al 绘画工具&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://runwayml.com/&#34;&gt;Runway&lt;/a&gt;：一句话生成一段视频&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://podcast.adobe.com/&#34;&gt;Adobe Podcast&lt;/a&gt;： Al 录音处理工具&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://murf.ai/&#34;&gt;Murf&lt;/a&gt;：Al 文字转语音工具，生成真人演讲&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://repurpose.io/&#34;&gt;Repurpose 10&lt;/a&gt;：自动发布社交媒体工具&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fireflies.ai/&#34;&gt;Fireflies&lt;/a&gt;： Al 会议记录工具。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://timelyapp.com/&#34;&gt;Timelt&lt;/a&gt;: 时间管理大师&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://donotpay.com/&#34;&gt;Do Not Pay&lt;/a&gt;: 解決法律问题&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.chatbot.com/integrations/livechat/&#34;&gt;Chatbot Live&lt;/a&gt;: 聊天机器人&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.jasper.ai/&#34;&gt;Jasper AI&lt;/a&gt;: 专为写文家而生&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.synthesia.io/&#34;&gt;Synthesia&lt;/a&gt;: 生成真人视频&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jenni.ai/&#34;&gt;Jenni Al&lt;/a&gt;: 帮你写论文的&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://beta.tome.app/&#34;&gt;Tome&lt;/a&gt;: 写故事&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;chatgpt-镜像&#34;&gt;ChatGPT 镜像&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;来源于 &lt;a href=&#34;https://github.com/xx025/carrot/&#34;&gt;carrot&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>最近使用 AI 的一点感受 —— 快速验证及落地方案</title>
      <link>https://frytea.com/archives/756/</link>
      <pubDate>Sun, 19 Mar 2023 10:15:14 +0000</pubDate>
      <guid>https://frytea.com/archives/756/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2023/03/19/2023031918131953d83b0e0934d918.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;近期，聊天机器人技术 GPT-3 火遍了整个互联网。GPT-3 在自然语言处理方面的出色表现，引起了大家对 AI 的关注和探索。作为一名从事相关领域的工程师，我最近也有了一些感受。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从百度文心一言发布标志着海内外AI正面竞争的开始</title>
      <link>https://frytea.com/archives/755/</link>
      <pubDate>Sat, 18 Mar 2023 14:09:21 +0000</pubDate>
      <guid>https://frytea.com/archives/755/</guid>
      <description>&lt;p&gt;近年来，人工智能技术在全球范围内得到了快速发展，AI 技术的应用场景也在不断扩大。而近期，百度公司推出的文心一言产品发布，标志着海内外 AI 正面竞争的开始。这是一个令人振奋的消息，也意味着未来将有更多的 AI 技术创新，为社会带来更多的便利和改变。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 删除/离开集群</title>
      <link>https://frytea.com/archives/753/</link>
      <pubDate>Thu, 16 Mar 2023 11:34:00 +0000</pubDate>
      <guid>https://frytea.com/archives/753/</guid>
      <description>&lt;h2 id=&#34;删除节点&#34;&gt;删除节点&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;用于从集群中删除无效节点。&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /etc/pve/nodes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf &amp;lt;YOUR DELETE NODE NAME&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pvecm delnode &amp;lt;YOUR DELETE NODE NAME&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;离开集群&#34;&gt;离开集群&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;用户节点离开集群。&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 离线的节点操作
systemctl stop pve-cluster.service
systemctl stop corosync.service
pmxcfs -l
rm /etc/pve/corosync.conf
rm -rf /etc/corosync/*
killall pmxcfs
systemctl start pve-cluster.service
cd /etc/pve/nodes
ls
rm -rf /etc/pve/nodes/&amp;lt;YOUR DELETE NODE NAME&amp;gt;
pvecm delnode &amp;lt;YOUR DELETE NODE NAME&amp;gt;

 
# 正常的节点操作：
cd /etc/pve/nodes
rm -rf &amp;lt;YOUR DELETE NODE NAME&amp;gt;
pvecm delnode &amp;lt;YOUR DELETE NODE NAME&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/jackadam/p/15763362.html&#34;&gt;PVE Proxmox Virtual Environment 学习笔记（五）集群节点故障&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>SSH 密钥类型</title>
      <link>https://frytea.com/archives/754/</link>
      <pubDate>Thu, 16 Mar 2023 05:10:24 +0000</pubDate>
      <guid>https://frytea.com/archives/754/</guid>
      <description>&lt;p&gt;GitHub 改变了他们的安全协议，不再允许使用使用 SHA-1 加密算法的 RSA 密钥进行访问，而我目前使用 ssh 默认策略生成的就是这种类型的密钥，结果就是无法提交代码。&lt;/p&gt;
&lt;p&gt;一种比较简便的方式是生成 ed25519 替换现有的，且两个密钥是不同的名称，可以共存。&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS 清理时间机器快照</title>
      <link>https://frytea.com/archives/750/</link>
      <pubDate>Tue, 14 Mar 2023 00:48:24 +0000</pubDate>
      <guid>https://frytea.com/archives/750/</guid>
      <description>&lt;p&gt;安装 Asahi Linux 发现磁盘可用空间为 0，查阅文档发现是时间机器的问题。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;We&amp;#39;re going to resize this partition:
  APFS [Macintosh HD] (245.11 GB, 6 volumes)
  Total size: 245.11 GB
  Free space: 132.23 GB
  Available space: 0 B
  Overhead: 94.23 GB
  Minimum total size: 245.11 GB (100.00%)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;开启时间机器后系统会自动进行本地快照，这将会占满所所有可用空间，需要手动清理一下:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dockerfile 禁止弹出 apt 安装交互视图</title>
      <link>https://frytea.com/archives/749/</link>
      <pubDate>Mon, 13 Mar 2023 00:41:20 +0000</pubDate>
      <guid>https://frytea.com/archives/749/</guid>
      <description>&lt;p&gt;在 Dockerfile 中执行 apt 安装时，有些软件包可能会在安装过程中弹出交互式视图，例如询问用户是否接受软件包许可证或配置软件包参数等。在 Docker 构建过程中，由于无法进行交互式操作，这些视图可能会导致构建失败或出现不可预期的结果。为避免这些问题，可以通过以下方法避免在 Docker 构建过程中弹出交互式视图：&lt;/p&gt;</description>
    </item>
    <item>
      <title>ChatGPT VS Notion AI</title>
      <link>https://frytea.com/archives/752/</link>
      <pubDate>Sun, 12 Mar 2023 12:23:34 +0000</pubDate>
      <guid>https://frytea.com/archives/752/</guid>
      <description>&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;在当今世界中，涌现了许多基于人工智能的工具和平台，旨在简化各种功能。聊天机器人和虚拟助手是近年来广受欢迎的两个例子。 ChatGPT 和 Notion AI 是提供基于人工智能的解决方案的两个平台。在本篇博客文章中，我们将比较 ChatGPT 和 Notion AI，以了解它们的优点和缺点，并最终帮助您决定哪一个更适合您的业务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>chatGPT 席卷全球后，我们的工作方式会发生什么变化</title>
      <link>https://frytea.com/archives/751/</link>
      <pubDate>Sun, 12 Mar 2023 12:22:08 +0000</pubDate>
      <guid>https://frytea.com/archives/751/</guid>
      <description>&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;/h2&gt;
&lt;p&gt;在过去的几年中，人工智能技术的快速发展一直在推动着我们的生活和工作方式的变革。近来，一种新型的人工智能技术——GPT-3 已经引起了广泛的关注。chatGPT 作为 GPT-3 的一个变种，它的出现在聊天机器人领域的应用无疑会给我们的工作方式带来很多变化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 手动创建 lvm-thin-pool 加入多磁盘</title>
      <link>https://frytea.com/archives/748/</link>
      <pubDate>Sun, 12 Mar 2023 05:21:21 +0000</pubDate>
      <guid>https://frytea.com/archives/748/</guid>
      <description>&lt;p&gt;新建存储池，包括多块硬盘&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsblk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pvcreate /dev/sdb /dev/sdc /dev/sdd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vgcreate thin-pool /dev/sdb /dev/sdc /dev/sdd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lvcreate -T thin-pool/data -l +99%FREE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pvesm add lvmthin thin-pool-data --content rootdir,images --thinpool data --vgname thin-pool
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.proxmox.com/threads/adding-a-disk-and-set-it-as-lvm-thin-help-needed-please.111724/&#34;&gt;adding a disk and set it as lvm-thin: help needed, please&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>virsh 批量克隆虚拟机</title>
      <link>https://frytea.com/archives/747/</link>
      <pubDate>Sun, 12 Mar 2023 05:21:17 +0000</pubDate>
      <guid>https://frytea.com/archives/747/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 快速克隆&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;virt-clone --auto-clone --original vm-euler --name vm-euler-2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;批量克隆&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i in &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;1..64&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; virt-clone --auto-clone --original vm-euler --name vm-euler-$i ; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://linux.die.net/man/1/virt-clone&#34;&gt;virt-clone(1) - Linux man page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>ChatGPT 现象概述</title>
      <link>https://frytea.com/archives/746/</link>
      <pubDate>Wed, 08 Mar 2023 09:52:58 +0000</pubDate>
      <guid>https://frytea.com/archives/746/</guid>
      <description>&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;近年来，聊天机器人越来越受欢迎，许多公司和个人使用它们与客户交互或进行对话。其中一种聊天机器人是 ChatGPT，因其生成类似人类响应的能力而引起关注。在本篇博客中，我们将概述 ChatGPT 现象及其对聊天机器人行业的影响。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arch Linux 高分屏缩放方案</title>
      <link>https://frytea.com/archives/742/</link>
      <pubDate>Thu, 02 Mar 2023 15:09:06 +0000</pubDate>
      <guid>https://frytea.com/archives/742/</guid>
      <description>&lt;p&gt;linux 下高分屏适配当前在 macos/windows/Linux 中的排位尚属末尾，采用整数倍缩放效果尚好（例如 100%、200%），但是若是使用非整数倍缩放（125%、175%）常常会体会到窗口模糊。&lt;/p&gt;</description>
    </item>
    <item>
      <title>firefox 使用侧边标签栏替换顶部标签栏</title>
      <link>https://frytea.com/archives/745/</link>
      <pubDate>Wed, 01 Mar 2023 13:13:35 +0000</pubDate>
      <guid>https://frytea.com/archives/745/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2023/03/01/20230301094433c3dfd88e4540899f.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装侧边插件-tab-tree&#34;&gt;安装侧边插件 tab-tree&lt;/h2&gt;
&lt;p&gt;推荐安装使用 &lt;a href=&#34;https://addons.mozilla.org/zh-CN/firefox/addon/tree-style-tab/&#34;&gt;Tree Style Tab&lt;/a&gt; 插件实现侧边插件，其他插件也可自行探索。&lt;/p&gt;
&lt;h2 id=&#34;配置自动隐藏顶栏&#34;&gt;配置自动隐藏顶栏&lt;/h2&gt;
&lt;p&gt;地址栏输入&lt;/p&gt;
&lt;p&gt;&lt;code&gt;about:config —&amp;gt; toolkit.legacyUserProfileCustomizations.stylesheets —&amp;gt; true&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;帮助—&amp;gt; 更多排障信息—&amp;gt; 配置文件夹—&amp;gt; 打开文件夹—&amp;gt; 新建 chrome 文件夹&lt;/p&gt;</description>
    </item>
    <item>
      <title>整理 Notion 导出文档名称</title>
      <link>https://frytea.com/archives/743/</link>
      <pubDate>Tue, 28 Feb 2023 11:40:56 +0000</pubDate>
      <guid>https://frytea.com/archives/743/</guid>
      <description>&lt;p&gt;从 Notion 导出 md 格式的文档，默认会对文件名做一些处理，&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2023/02/28/202302281809111b4ea3d003517a7d.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;大概是这样，会讲过长的文档名称压缩，在首行使用 md 一级标签标记文件名，再将文档截断为图示的样子。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arch Linux ARM 安装 electron 版微信</title>
      <link>https://frytea.com/archives/741/</link>
      <pubDate>Sun, 19 Feb 2023 02:39:42 +0000</pubDate>
      <guid>https://frytea.com/archives/741/</guid>
      <description>&lt;p&gt;偶然逛 ArchWiki 的 &lt;a href=&#34;https://wiki.archlinuxcn.org/zh-hans/%E5%BE%AE%E4%BF%A1&#34;&gt;微信&lt;/a&gt; 页面，发现在 Arch 下提供了很多种运行微信的方案，在我的 ARM 版 ARCH 下搜索了一下，发现提供了一个基于 electron 直接可用的微信：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo pacman -Ss wechat  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;archlinuxcn/electronic-wechat-uos-bin v2.3.1.fix-2  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Linux 下更好用的微信客户端. 更多功能, 更少bug. 使用Electron构建, 利用UOS请求头修复了登陆问题.  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;archlinuxcn/wine-wechat-setup 1.2-1  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Setup and run WeChat Windows version with Wine &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Chinese version&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装 electron 版的尝试一下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parallels m1 安装 arch 虚拟机并配置 KDE 和辅助程序</title>
      <link>https://frytea.com/archives/740/</link>
      <pubDate>Sat, 11 Feb 2023 11:32:00 +0000</pubDate>
      <guid>https://frytea.com/archives/740/</guid>
      <description>&lt;p&gt;最近在探索 m1 MacBook 下运行 linux 虚拟机的可能性，计划未来在 linux 虚拟机下完成所有开发工作，parallels desktop 天然提供了 debian/ubuntu/fedora 等 linux 发行版支持，但是在我个人使用场景中还是多少有些问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>arm64 版 picgo 提示已损坏解决办法</title>
      <link>https://frytea.com/archives/739/</link>
      <pubDate>Thu, 09 Feb 2023 14:31:00 +0000</pubDate>
      <guid>https://frytea.com/archives/739/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/Molunerfinn/PicGo&#34;&gt;PicGo&lt;/a&gt; 是一款很好用的图床辅助软件，一直在使用。&lt;/p&gt;
&lt;p&gt;最新下载最新版的 picGo arm64 版安装，提示已损坏，执行以下命令解决：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo xattr -d com.apple.quarantine &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/Applications/PicGo.app&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/1zilc/fishing-funds/issues/149#issuecomment-928044197&#34;&gt;https://github.com/1zilc/fishing-funds/issues/149#issuecomment-928044197&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Molunerfinn/PicGo/issues/1055&#34;&gt;https://github.com/Molunerfinn/PicGo/issues/1055&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Emacs 集成 Github Copilot</title>
      <link>https://frytea.com/archives/738/</link>
      <pubDate>Thu, 09 Feb 2023 14:21:22 +0000</pubDate>
      <guid>https://frytea.com/archives/738/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/zerolfx/copilot.el&#34;&gt;copilot.el&lt;/a&gt;  是一个&lt;strong&gt;非官方&lt;/strong&gt;实现的 Github Copilot 插件，实测在 x86/arm64 、macos/debian 下均可使用，下面介绍最关键的几个配置步骤。&lt;/p&gt;
&lt;h2 id=&#34;准备&#34;&gt;准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Emacs &amp;gt;= 27&lt;/li&gt;
&lt;li&gt;安装 node.js&lt;/li&gt;
&lt;li&gt;emacs 安装好 &lt;code&gt;e&lt;/code&gt;, &lt;code&gt;editorconfig&lt;/code&gt; 插件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上是对您环境最基础的要求，确认无误后继续下一步。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 批量创建、配置虚拟机 IP、网卡、启停及销毁</title>
      <link>https://frytea.com/archives/737/</link>
      <pubDate>Wed, 08 Feb 2023 00:46:10 +0000</pubDate>
      <guid>https://frytea.com/archives/737/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 从模版批量派生，100 虚拟机仅需2 min&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i in &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;001..128&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; qm clone &lt;span style=&#34;color:#ae81ff&#34;&gt;336&lt;/span&gt; 11$i --name stl-ceph-bare-node$i --pool stl-ceph-cluster2; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 使用 cloud-init 批量配置 ip，需在模版提前装好 cloud-init 软件包并添加设备&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i in &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;1..128&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; num&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;echo $i | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{printf(&amp;#34;%03d&amp;#34;,$0)}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;; qm set 10&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;num&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;  --ipconfig1 ip&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;10.24.88.$i/24,gw&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;10.24.88.254; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 批量断开网络接口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i in &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;002..128&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; qm set 10$i --net0 virtio,link_down&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;1; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 批量开机&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i in &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;001..128&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; qm start 10$i; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 批量销毁&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i in &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;001..111&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; qm destroy 10$i; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>PVE 虚拟机导入 vmdk 磁盘</title>
      <link>https://frytea.com/archives/736/</link>
      <pubDate>Wed, 01 Feb 2023 01:45:31 +0000</pubDate>
      <guid>https://frytea.com/archives/736/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;先把磁盘镜像上传到 pve 服务器中，若空间不足可挂载本地存储；&lt;/li&gt;
&lt;li&gt;把 &lt;code&gt;vmdk&lt;/code&gt; 转为 &lt;code&gt;qcow2&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;qemu-img convert -O qcow2 test.vmdk test.qcow2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注：&lt;code&gt;-O&lt;/code&gt; 是大写的字母 &lt;code&gt;O&lt;/code&gt;&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;使用 &lt;code&gt;qm importdisk&lt;/code&gt; 命令导入&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ qm importdisk  &amp;lt;vmid&amp;gt; &amp;lt;images-name&amp;gt; &amp;lt;storage pool&amp;gt;  --format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;lt;disk-fs&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# vmid：vm的id 例如102&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# images-name：磁盘镜像的名字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# storage poll: 存储磁盘镜像的位置，一般写存储的名称，如pve01data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# disk-fs: 磁盘镜像格式  raw/vmdk/qcow2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/467105568&#34;&gt;vmware vmdk虚拟机导入到proxmox ve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.proxmox.com/threads/import-vm-from-esxi-6-0.107151/&#34;&gt;import VM from ESXi 6.0 - Proxmox Forums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pve.proxmox.com/wiki/Migration_of_servers_to_Proxmox_VE#Physical-to-Virtual_.28P2V.29&#34;&gt;Migration of servers to Proxmox VE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>iptables 设置默认规则</title>
      <link>https://frytea.com/archives/735/</link>
      <pubDate>Tue, 31 Jan 2023 12:48:53 +0000</pubDate>
      <guid>https://frytea.com/archives/735/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;设置默认的规则
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iptables -P INPUT DROP &lt;span style=&#34;color:#75715e&#34;&gt;# 配置默认的不让进&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iptables -P FORWARD DROP &lt;span style=&#34;color:#75715e&#34;&gt;# 默认的不允许转发&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iptables -P OUTPUT ACCEPT &lt;span style=&#34;color:#75715e&#34;&gt;# 默认的可以出去&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wangchujiang.com/linux-command/c/iptables.html#%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4%E7%9A%84%E8%A7%84%E5%88%99&#34;&gt;iptables - Linux man&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>macOS 安装 Emacs</title>
      <link>https://frytea.com/archives/733/</link>
      <pubDate>Fri, 27 Jan 2023 08:14:00 +0000</pubDate>
      <guid>https://frytea.com/archives/733/</guid>
      <description>&lt;p&gt;macOS 下可选择多种 Emacs GUI ，建议 Emacs Mac Port。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/railwaycat/homebrew-emacsmacport&#34;&gt;Emacs Mac Port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://emacsformacosx.com/&#34;&gt;Emacs For Mac OS X&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;安装-emacs-mac-port&#34;&gt;安装 Emacs mac Port&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;brew tap railwaycat/emacsmacport
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;brew install --cask emacs-mac
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2023/01/27/2023012716128513933236e6d1c4dce.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;相较于 Emacs For Mac OS X ，Emacs Mac Port 界面效果更好，裸 Emacs 的图标更加美观，建议使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 dos2unix 解决跨操作系统换行符问题</title>
      <link>https://frytea.com/archives/728/</link>
      <pubDate>Mon, 16 Jan 2023 00:29:00 +0000</pubDate>
      <guid>https://frytea.com/archives/728/</guid>
      <description>&lt;p&gt;&lt;code&gt;dos2unix&lt;/code&gt; 是将 &lt;code&gt;Windows&lt;/code&gt; 格式文件转换为 &lt;code&gt;Unix/Linux&lt;/code&gt; 格式的实用命令。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;unix2dos&lt;/code&gt; 则是和 &lt;code&gt;dos2unix&lt;/code&gt; 互为孪生的一个命令，将 &lt;code&gt;Linux&amp;amp;Unix&lt;/code&gt; 格式文件转换为 &lt;code&gt;Windows&lt;/code&gt; 格式文件的命令。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;各个操作系统安装方法如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;OS X
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    brew install dos2unix
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Debian
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    apt-get install dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    apt-get install dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Alpine
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    apk add dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Arch Linux
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pacman -S dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Kali Linux
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    apt-get install dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CentOS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    yum install dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Fedora
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dnf install dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Windows &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;WSL2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sudo apt-get update sudo apt-get install dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Raspbian
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    apt-get install dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Dockerfile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dockerfile.run/dos2unix 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Docker
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    docker run cmd.cat/dos2unix dos2unix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下面以 &lt;a href=&#34;https://learnxinyminutes.com/docs/zh-cn/elisp-cn/&#34;&gt;15分钟学会Emacs Lisp&lt;/a&gt; 教学源文件为例展示效果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prometheus 部署 Black Exporter 黑盒监控 DNS-TCP-ICMP</title>
      <link>https://frytea.com/archives/727/</link>
      <pubDate>Sun, 15 Jan 2023 00:27:24 +0000</pubDate>
      <guid>https://frytea.com/archives/727/</guid>
      <description>&lt;p&gt;建议软件包安装，二进制安装请自行解决配置问题，docker安装需考虑网络问题。&lt;/p&gt;
&lt;h2 id=&#34;linux-软件包直接部署&#34;&gt;linux 软件包直接部署&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install prometheus-blackbox-exporter
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;二进制部署&#34;&gt;二进制部署&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 下载安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.23.0/blackbox_exporter-0.23.0.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xvf  blackbox_exporter-0.23.0.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mv blackbox_exporter-0.23.0.linux-amd64/ /usr/local/blackbox_exporter
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 创建配置文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &amp;gt; /data/black_exporter/black_exporter.yml &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;modules:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  http_2xx:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: http
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 20s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    http:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      preferred_ip_protocol: &amp;#34;ip4&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  http_post_2xx_query:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: http
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 20s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    http:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      preferred_ip_protocol: &amp;#34;ip4&amp;#34; ##使用ipv4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      method: POST
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      headers:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        Content-Type: application/json ##header头
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      body: &amp;#39;{&amp;#34;hmac&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;params&amp;#34;:{&amp;#34;publicFundsKeyWords&amp;#34;:&amp;#34;xxx&amp;#34;}}&amp;#39; ##传参
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  tls_connect_tls:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 5s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    tcp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      tls: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  tcp_connect:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 5s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; #
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  pop3s_banner:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    tcp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      query_response:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - expect: &amp;#34;^+OK&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      tls: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      tls_config:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        insecure_skip_verify: false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  ssh_banner:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    tcp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      query_response:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - expect: &amp;#34;^SSH-2.0-&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  irc_banner:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    tcp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      query_response:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - send: &amp;#34;NICK prober&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - send: &amp;#34;USER prober prober prober :prober&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - expect: &amp;#34;PING :([^ ]+)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        send: &amp;#34;PONG ${1}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - expect: &amp;#34;^:[^ ]+ 001&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  icmp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: icmp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 20s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置systemd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &amp;gt; /etc/systemd/system/blackbox_exporter.service &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;[Unit]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Description=blackbox_exporter
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Documentation=https://prometheus.io/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;After=network.target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;[Service]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Type=simple
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;User=prometheus
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ExecStart=/usr/local/bin/blackbox_exporter  --config.file=/data/blackbox-exporter/black-exporter.yml
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Restart=on-failure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;[Install]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;WantedBy=multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 启动服务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl enable blackbox_exporter.service 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl start blackbox_exporter.service 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl status blackbox_exporter.service 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;docker-部署&#34;&gt;Docker 部署&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run --rm &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -p 9115/tcp &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --name blackbox_exporter &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -v &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;pwd&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;:/config &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  quay.io/prometheus/blackbox-exporter:latest --config.file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/config/blackbox.yml
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 创建配置文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &amp;gt; /data/docker/blackbox-exporter/black-exporter.yml &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;modules:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  http_2xx:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: http
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 20s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    http:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      preferred_ip_protocol: &amp;#34;ip4&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  http_post_2xx_query:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: http
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 20s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    http:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      preferred_ip_protocol: &amp;#34;ip4&amp;#34; ##使用ipv4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      method: POST
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      headers:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        Content-Type: application/json ##header头
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      body: &amp;#39;{&amp;#34;hmac&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;params&amp;#34;:{&amp;#34;publicFundsKeyWords&amp;#34;:&amp;#34;xxx&amp;#34;}}&amp;#39; ##传参
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  tls_connect_tls:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 5s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    tcp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      tls: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  tcp_connect:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 5s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; #
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  pop3s_banner:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    tcp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      query_response:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - expect: &amp;#34;^+OK&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      tls: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      tls_config:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        insecure_skip_verify: false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  ssh_banner:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    tcp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      query_response:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - expect: &amp;#34;^SSH-2.0-&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  irc_banner:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: tcp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    tcp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      query_response:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - send: &amp;#34;NICK prober&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - send: &amp;#34;USER prober prober prober :prober&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - expect: &amp;#34;PING :([^ ]+)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        send: &amp;#34;PONG ${1}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;      - expect: &amp;#34;^:[^ ]+ 001&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  icmp:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    prober: icmp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    timeout: 20s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run -d &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --net myDefault &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --restart always &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -p 9115:9115/tcp &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --name blackbox-exporter &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -v /data/docker/blackbox-exporter:/config &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  songtianlun/blackbox-exporter:v0.23.0 --config.file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/config/black-exporter.yml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;测试使用&#34;&gt;测试使用&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl http://192.168.5.152:9115/probe?target&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;www.frytea.com&amp;amp;module&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http_2xx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;prometeus-使用&#34;&gt;prometeus 使用&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# https monitor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;job_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hci-https-monitor&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;metrics_path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;/probe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;params&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;module&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;tls_connect_tls]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;static_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;targets&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://192.168.5.221:8006&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://192.168.5.222:8006&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://192.168.5.187:8006&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;relabel_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;source_labels&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;__address__]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;__param_target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;source_labels&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;__param_target]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;instance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;__address__&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;replacement&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10.19.0.1&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9115&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# The blackbox exporter&amp;#39;s real hostname:port.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# http monitor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;job_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hci-http-monitor&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;metrics_path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;/probe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;params&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;module&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;http_2xx]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;static_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;targets&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;http://192.168.5.221:3000&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;relabel_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;source_labels&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;__address__]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;__param_target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;source_labels&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;__param_target]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;instance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;__address__&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;replacement&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10.19.0.1&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9115&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# The blackbox exporter&amp;#39;s real hostname:port.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# icmp 监控&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;job_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hci-icmp-monitor&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;scrape_interval&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1m&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;metrics_path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;/probe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;params&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;module&lt;/span&gt;: [ &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;icmp&amp;#34;&lt;/span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;static_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;targets&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.5.254&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.5.221&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.5.222&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.5.187&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;relabel_configs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;source_labels&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;__address__]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;__param_target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;source_labels&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;__param_target]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;instance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;target_label&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;__address__&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;replacement&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10.19.0.1&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9115&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# The blackbox exporter&amp;#39;s real hostname:port.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Grafana导入Dashboard-ID：7587&lt;/p&gt;</description>
    </item>
    <item>
      <title>Paralles Desktop 修改虚拟机用户密码</title>
      <link>https://frytea.com/archives/726/</link>
      <pubDate>Wed, 11 Jan 2023 02:42:51 +0000</pubDate>
      <guid>https://frytea.com/archives/726/</guid>
      <description>&lt;p&gt;最近在使用 Paralles Desktop 过程中，发现一旦忘记用户密码，是一件挺麻烦的事情。尝试各种方法打不开 grub 启动菜单。&lt;/p&gt;
&lt;p&gt;后来发现可以使用其提供的命令工具修改用户密码，很好用，在此记录：&lt;/p&gt;</description>
    </item>
    <item>
      <title>m1 MacBook 安装 asahi linux 磁盘调整失败解决</title>
      <link>https://frytea.com/archives/725/</link>
      <pubDate>Tue, 10 Jan 2023 13:05:22 +0000</pubDate>
      <guid>https://frytea.com/archives/725/</guid>
      <description>&lt;p&gt;尝试在 MacBook Air m1 安装 asahi linux ，在磁盘分区过程遭遇报错，具体过程没有留下来，是类似这样的报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error: doc-id tree: record exists &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; doc-id 64, file-id &lt;span style=&#34;color:#ae81ff&#34;&gt;9665861&lt;/span&gt; but no inode references this doc-id
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;大致解决是要进恢复模式，之后使用急救程序尝试修复。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 使用 chrony 进行 NTP 时间同步及自建方法</title>
      <link>https://frytea.com/archives/721/</link>
      <pubDate>Sun, 08 Jan 2023 10:45:31 +0000</pubDate>
      <guid>https://frytea.com/archives/721/</guid>
      <description>&lt;p&gt;chrony是网络时间协议的实现。它可以替代ntpd，后者是NTP的参考实现。它在类Unix操作系统上运行，并在GNU GPL v2下发布。&lt;/p&gt;
&lt;p&gt;服务端和客户端配置文件都是同一个，分别配置为服务器和客户端即可使用，
配置文件在 &lt;code&gt;/etc/chrony.conf or /etc/chrony/chrony.conf&lt;/code&gt; ，具体看版本，
可以使用 &lt;code&gt;man chrony&lt;/code&gt; 确认一下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 删除 LVM 步骤</title>
      <link>https://frytea.com/archives/723/</link>
      <pubDate>Sat, 07 Jan 2023 11:55:57 +0000</pubDate>
      <guid>https://frytea.com/archives/723/</guid>
      <description>&lt;p&gt;以下为删除 LVM 步骤，需要按照顺序执行：&lt;/p&gt;
&lt;h2 id=&#34;step1-卸载文件系统&#34;&gt;Step1. 卸载文件系统&lt;/h2&gt;
&lt;p&gt;卸载 LV 上的文件系统。&lt;/p&gt;
&lt;p&gt;a.执行命令 &lt;code&gt;mount –l&lt;/code&gt; 命令查看目前LV挂载到本地的目录。
b. 执行 &lt;code&gt;umount&lt;/code&gt; 挂载的目录卸载挂载在LV上的文件系统。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 禁用 SWAP</title>
      <link>https://frytea.com/archives/722/</link>
      <pubDate>Fri, 06 Jan 2023 00:37:44 +0000</pubDate>
      <guid>https://frytea.com/archives/722/</guid>
      <description>&lt;p&gt;在服务器和容器平台建议关闭 SWAP，避免内存交换影响服务器性能，甚至引发数据丢失。&lt;/p&gt;
&lt;p&gt;一、不重启电脑，禁用启用swap，立刻生效&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 禁用命令

sudo swapoff -a

# 启用命令

sudo swapon -a

# 查看交换分区的状态
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo free -m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;二、重新启动电脑，永久禁用Swap&lt;/p&gt;</description>
    </item>
    <item>
      <title>pkg-config 自动补全 C 编译库依赖</title>
      <link>https://frytea.com/archives/719/</link>
      <pubDate>Thu, 05 Jan 2023 00:43:52 +0000</pubDate>
      <guid>https://frytea.com/archives/719/</guid>
      <description>&lt;p&gt;pkg-config 是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。&lt;/p&gt;
&lt;h2 id=&#34;工作原理&#34;&gt;工作原理&lt;/h2&gt;
&lt;p&gt;其工作原理如下：
当安装一个库时（例如从&lt;a href=&#34;https://zh.wikipedia.org/wiki/RPM%E5%A5%97%E4%BB%B6%E7%AE%A1%E7%90%86%E5%93%A1&#34; title=&#34;RPM套件管理员&#34;&gt;RPM&lt;/a&gt;，&lt;a href=&#34;https://zh.wikipedia.org/wiki/Deb&#34; title=&#34;Deb&#34;&gt;deb&lt;/a&gt;或其他二进制包管理系统），会包括一个后缀名为 &lt;code&gt;pc&lt;/code&gt; 的文件，它会放入某个文件夹下（依赖于你的系统设置）。
例如，在 &lt;code&gt;Linux&lt;/code&gt; 为该软件的库文件所在文件夹 &lt;code&gt;lib&lt;/code&gt; 之下的子文件夹 &lt;code&gt;pkgconfig&lt;/code&gt; 。
并把该子文件夹加入 &lt;code&gt;pkg-config&lt;/code&gt; 的环境变量 &lt;code&gt;PKG_CONFIG_PATH&lt;/code&gt; 作为搜索路径，例如在 &lt;code&gt;bash&lt;/code&gt; 配置文件中加入一行：&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 linux 中解析 lib 文件</title>
      <link>https://frytea.com/archives/720/</link>
      <pubDate>Wed, 04 Jan 2023 00:23:51 +0000</pubDate>
      <guid>https://frytea.com/archives/720/</guid>
      <description>&lt;p&gt;解析 lib 文件可以获取一些二进制库的版本历史信息，例如解析 &lt;code&gt;/usr/lib64/libc.so.6&lt;/code&gt; 即可解析到 glibc 的版本历史。&lt;/p&gt;
&lt;p&gt;在Linux中，有许多工具可以用来解析库文件（ &lt;code&gt;.lib&lt;/code&gt; 文件）。 可以使用工具如 &lt;code&gt;nm&lt;/code&gt; ， &lt;code&gt;objdump&lt;/code&gt;  和 &lt;code&gt;readelf&lt;/code&gt; 来查看库文件的符号表，包含在库文件中的对象文件的信息，以及库文件的其他信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从 Windows 迭代看为什么要用 Linux</title>
      <link>https://frytea.com/archives/1277/</link>
      <pubDate>Sat, 24 Dec 2022 10:59:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1277/</guid>
      <description>&lt;p&gt;Windows 的待机问题、兼容问题，已经总是被人诟病的“监控”问题，促使我不断探索除 Window&lt;/p&gt;</description>
    </item>
    <item>
      <title>阿里云域名续费优惠口令（com和cn续费优惠）- 2022</title>
      <link>https://frytea.com/archives/689/</link>
      <pubDate>Fri, 16 Dec 2022 12:28:00 +0000</pubDate>
      <guid>https://frytea.com/archives/689/</guid>
      <description>&lt;p&gt;购买/续费云产品之前，找找优惠码是一个好习惯。&lt;/p&gt;
&lt;p&gt;最近续费自己的 .com 域名，发现官方提供了优惠码，可以便宜一些。&lt;/p&gt;
&lt;p&gt;获取方法是： &lt;code&gt;关注公众号“阿里云企航”，在输入框中输入“优惠口令”，即可自动回复当前最新可用的优惠口令&lt;/code&gt; ，下面是我在2022年12月获取到的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>查询谷歌账号注册时间方法（2022）</title>
      <link>https://frytea.com/archives/683/</link>
      <pubDate>Fri, 16 Dec 2022 00:35:00 +0000</pubDate>
      <guid>https://frytea.com/archives/683/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2022/12/16/2022121608379701c465b4803f3b586.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;谷歌查看注册时间 具体方法如下：&lt;/p&gt;
&lt;p&gt;打开“管理您的 Google 帐号”&lt;/p&gt;
&lt;p&gt;打开“数据和隐私设置”&lt;/p&gt;
&lt;p&gt;打开“您使用的应用和服务中的数据”-“下载或删除您的数据”-“下载您的数据”&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux (Debian 系) 安装官方微信 (Electron，非 wine 版)</title>
      <link>https://frytea.com/archives/677/</link>
      <pubDate>Fri, 09 Dec 2022 14:00:00 +0000</pubDate>
      <guid>https://frytea.com/archives/677/</guid>
      <description>&lt;p&gt;使用 Linux 作为唯一主力系统的阻力之一，就来自于微信。&lt;/p&gt;
&lt;p&gt;微信大概是目前大多数人都无法离开的软件，而在 Linux 下安装微信在此前是比较复杂的，这对于使用 Linux 工作生活存在一些障碍。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ChatGPT 注册方法（附万能接码方法）</title>
      <link>https://frytea.com/archives/671/</link>
      <pubDate>Tue, 06 Dec 2022 15:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/671/</guid>
      <description>&lt;p&gt;ChatGPT 是一个训练有素的语言模型，由 OpenAI 公司训练而成。目的是帮助回答问题，提供信息和支持，但不具备人类的感知能力，也不会回答所有问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以上自我介绍原始内容来自 ChatGPT 回答。&lt;/p&gt;</description>
    </item>
    <item>
      <title>部署 Prometheus 主机监控完全体</title>
      <link>https://frytea.com/archives/664/</link>
      <pubDate>Fri, 02 Dec 2022 01:57:00 +0000</pubDate>
      <guid>https://frytea.com/archives/664/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2022/12/02/202212020957362a5ac543b2ec7f2be.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;监控完全体 = Prometheus + Node Exporter + cadvisor + grafana&lt;/p&gt;
&lt;p&gt;Prometheus 作为轮转数据库，从各个服务器采集数据；
node-exporter 作为数据采集器，接受 prometheus 采集请求，上报主机各项参数；
vadvisor 作为容器数据采集器，接受 prometheus 采集请求，上报主机 docker 各项参数；
grafana 作为看板，从 prometheus 查询数据做数据可视化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>mermaid.js 效果相册</title>
      <link>https://frytea.com/archives/663/</link>
      <pubDate>Thu, 24 Nov 2022 06:38:35 +0000</pubDate>
      <guid>https://frytea.com/archives/663/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://mermaid-js.github.io/mermaid/#/&#34;&gt;mermaid&lt;/a&gt; 是一款 javascript 库，能够轻而易举地通过文本代码绘图。&lt;/p&gt;
&lt;p&gt;作为普通用户，将其理解为一种绘图的语言即可，集成它之后就可以在 markdown 的轻松插入特定语法编写的各类图示了，而且不需要像 plantuml 一样需要外部服务器，目前 &lt;a href=&#34;https://www.notion.so/&#34;&gt;notion&lt;/a&gt; 、 &lt;a href=&#34;https://obsidian.md/&#34;&gt;obsidian&lt;/a&gt; 等都已原生支持该特性，许多博客主题也支持该语法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Juice FS 初探 ｜ 一种为 VPS 提供无限磁盘空间的解决方案</title>
      <link>https://frytea.com/archives/660/</link>
      <pubDate>Sun, 20 Nov 2022 13:56:00 +0000</pubDate>
      <guid>https://frytea.com/archives/660/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2022/11/20/202211202157973a3a77a11832318cf.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JuiceFS&lt;/strong&gt; 是一款面向云原生设计的高性能分布式文件系统，在 Apache 2.0 开源协议下发布。提供完备的 &lt;a href=&#34;https://en.wikipedia.org/wiki/POSIX&#34;&gt;POSIX&lt;/a&gt; 兼容性，可将几乎所有对象存储接入本地作为海量本地磁盘使用，亦可同时在跨平台、跨地区的不同主机上挂载读写。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2022 年注册美区 Apple ID 方法概述（使用美区 Paypal）</title>
      <link>https://frytea.com/archives/659/</link>
      <pubDate>Sun, 20 Nov 2022 09:43:00 +0000</pubDate>
      <guid>https://frytea.com/archives/659/</guid>
      <description>&lt;p&gt;有些工作需要用到的软件只有美区 Apple Store 才有，还有一些想玩的游戏也是在国区无法下载，因此注册一个自己的美区 Appid ID 就能方便很多，这里记录一下注册方法。&lt;/p&gt;
&lt;p&gt;本方案越需要花费 9/35 RMB，且需要 VISA(国区即可)信用卡，介意者绕道。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nginx Proxy Manager - Docker 建站最佳伴侣</title>
      <link>https://frytea.com/archives/658/</link>
      <pubDate>Sun, 20 Nov 2022 02:28:00 +0000</pubDate>
      <guid>https://frytea.com/archives/658/</guid>
      <description>&lt;p&gt;很长一段时间中，我都在思考容器建站的可行性。&lt;/p&gt;
&lt;p&gt;容器有诸多益处，各类好处就不一一列举了。&lt;/p&gt;
&lt;p&gt;在企业场景下，K8s 几乎一骑绝尘，可以完成大规模集群统一管理，完成几乎所有 Web 资源的自动调度。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenEuler 防火墙放通端口 (以 8084 为例)</title>
      <link>https://frytea.com/archives/648/</link>
      <pubDate>Thu, 17 Nov 2022 01:56:00 +0000</pubDate>
      <guid>https://frytea.com/archives/648/</guid>
      <description>&lt;p&gt;最近使用 OpenEuler 部署项目，发现防火墙放通端口的方法找不到，因此在这里记录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;root@localhost Porting-advisor_2.5.RC1_linux-x86-64&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# firewall-cmd --query-port=8084/tcp --permanent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;no
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;root@localhost Porting-advisor_2.5.RC1_linux-x86-64&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# firewall-cmd --add-port=8084/tcp --permanent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;root@localhost Porting-advisor_2.5.RC1_linux-x86-64&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# firewall-cmd --reload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;success
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;root@localhost Porting-advisor_2.5.RC1_linux-x86-64&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# firewall-cmd --query-port=8084/tcp --permanent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>kali linux 配置 xrdp 远程桌面服务</title>
      <link>https://frytea.com/archives/645/</link>
      <pubDate>Tue, 08 Nov 2022 06:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/645/</guid>
      <description>&lt;p&gt;xrdp 的配置让我充满疑惑，今天误打误撞完成了 kali 下的 xrdp 配置，能够顺利远程桌面进入 kali，这里记录一些可能必须的步骤，以备后用。&lt;/p&gt;
&lt;p&gt;首先按照 kali 官网给出的 xrdp 配置脚本：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 语言命名规范整理</title>
      <link>https://frytea.com/archives/1139/</link>
      <pubDate>Mon, 07 Nov 2022 18:44:16 +0000</pubDate>
      <guid>https://frytea.com/archives/1139/</guid>
      <description>&lt;p&gt;GO 语言精简命名规范汇集.&lt;/p&gt;
&lt;p&gt;本文内容整理自《Go语言精进之路：从新手到高手的编程思想、方法和技巧&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS 使用 arping 扫描 ip 冲突</title>
      <link>https://frytea.com/archives/644/</link>
      <pubDate>Mon, 07 Nov 2022 06:51:47 +0000</pubDate>
      <guid>https://frytea.com/archives/644/</guid>
      <description>&lt;p&gt;最近工作网络不稳定，多个常用 IP 出现冲突，就连 DHCP 获取到的 IP 也会立刻冲突，原因等待相关人员去解决，今天简单记录 macOS 下 IP 冲突检测的原因。&lt;/p&gt;
&lt;p&gt;一般检查 IP 是否被占用的方法是使用 ping&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS12 使用 UTM 体验 macOS 13 Ventura (多图预警)</title>
      <link>https://frytea.com/archives/643/</link>
      <pubDate>Thu, 03 Nov 2022 16:23:00 +0000</pubDate>
      <guid>https://frytea.com/archives/643/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://getutm.app&#34;&gt;UTM&lt;/a&gt; 是苹果 IOS、macOS 生态下的一款开源的虚拟机软件，底层基于 QEMU 或 Apple 虚拟化，能够在苹果操作系统上以半虚拟化（同 CPU 架构）或全虚拟化（异构 CPU 系统）的形式运行 Linux、Windows 以及 macOS。&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS12 使用 UTM 体验 macOS13</title>
      <link>https://frytea.com/archives/1196/</link>
      <pubDate>Thu, 03 Nov 2022 06:44:16 +0000</pubDate>
      <guid>https://frytea.com/archives/1196/</guid>
      <description>&lt;p&gt;使用 UTM 在 macOS 12 下体验最新 macOS 13系统，附多图.&lt;/p&gt;
&lt;p&gt;[UTM](htt&lt;/p&gt;</description>
    </item>
    <item>
      <title>根本解决C程序 ignoring return value of ‘***’</title>
      <link>https://frytea.com/archives/641/</link>
      <pubDate>Wed, 02 Nov 2022 05:22:00 +0000</pubDate>
      <guid>https://frytea.com/archives/641/</guid>
      <description>&lt;p&gt;最近在移植一个 C 项目时出现如下报错：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;xxxxxx.c:990:4: error: ignoring return value of ‘chroot’, declared with attribute warn_unused_result [-Werror=unused-result]
  990 |    chroot(&amp;#34;/&amp;#34;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;之所以报错等级为 Error ，是因为 GCC 编译具有参数 &lt;code&gt;-Werror&lt;/code&gt;，将警告当作错误：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 使用 diff 分栏对比文本差异</title>
      <link>https://frytea.com/archives/640/</link>
      <pubDate>Wed, 02 Nov 2022 02:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/640/</guid>
      <description>&lt;p&gt;首先看一下帮助文档：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ diff --help  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;用法：diff &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;选项&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;... 文件列表  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;逐行比较&amp;lt;各文件&amp;gt;。  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;长选项的必需参数也是相应短选项的必需参数。  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --normal                  以正常的 diff 方式输出 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;默认&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -q, --brief                   只有在文件不同时报告  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -s, --report-identical-files  当两个一样时仍然显示结果  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -c, -C NUM, --context&lt;span style=&#34;color:#f92672&#34;&gt;[=&lt;/span&gt;NUM&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;   同时输出 NUM 行（默认为 &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; 行）的复制上下文内容  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -u, -U 数量, --unified&lt;span style=&#34;color:#f92672&#34;&gt;[=&lt;/span&gt;数量&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; 输出 &amp;lt;数量&amp;gt;（默认为 3）行一致化上下文  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -e, --ed                      以 ed script 方式输出  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -n, --rcs                     以 RCS diff 格式输出  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -y, --side-by-side            以两栏的格式输出  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -W, --width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;数量              每行显示最多 &amp;lt;数量&amp;gt;（默认 130）个字符  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --left-column             当有两行相同时只显示左边栏的一行  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --suppress-common-lines   当有两行相同时不显示  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -p, --show-c-function         显示每个变更位于哪个 C 函数中  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -F, --show-function-line&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;正则 显示匹配给定&amp;lt;正则&amp;gt;表达式的最近一行  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --label 标签              使用给定&amp;lt;标签&amp;gt;替代文件名和时间戳  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                 （可以重复）  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -t, --expand-tabs             将输出中的 tab 转换成空格  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -T, --initial-tab             每行先加上 tab 字符，使 tab 字符可以对齐  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --tabsize&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;数字           TAB 格的宽度，默认为 &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt; 个打印列宽  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --suppress-blank-empty    在空的输出行之前去除空白或制表符  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -l, --paginate                将输出送至 “pr” 指令来分页  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -r, --recursive                 连同所有子目录一起比较  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --no-dereference            不要跟随符号链接  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -N, --new-file                  不存在的文件以空文件方式处理  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --unidirectional-new-file   若第一文件不存在，以空文件处理  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --ignore-file-name-case     忽略文件名大小写的区别  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --no-ignore-file-name-case  不忽略文件名大小写的区别  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -x, --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;模式              排除匹配 &amp;lt;模式&amp;gt; 的文件  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -X, --exclude-from&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;文件         排除所有匹配在&amp;lt;文件&amp;gt;中列出的模式的文件  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -S, --starting-file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;文件        当比较目录時，由&amp;lt;文件&amp;gt;开始比较  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --from-file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;文件1           将&amp;lt;文件1&amp;gt;和操作数中的所有文件/目录作比较；  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                   &amp;lt;文件1&amp;gt;可以是目录  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --to-file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;文件2             将操作数中的所有文件/目录和&amp;lt;文件2&amp;gt;作比较；  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                   &amp;lt;文件2&amp;gt;可以是目录  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -i, --ignore-case               忽略文件内容大小写的区别  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -E, --ignore-tab-expansion      忽略由制表符宽度造成的差异  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -Z, --ignore-trailing-space     忽略每行末端的空格  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -b, --ignore-space-change       忽略由空格数不同造成的差异  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -w, --ignore-all-space          忽略所有空格  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -B, --ignore-blank-lines        忽略任何因空行而造成的差异  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -I, --ignore-matching-lines&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;正则 若某行完全匹配 &amp;lt;正则&amp;gt;，则忽略由该行造成的差异  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -a, --text                      所有文件都以文本方式处理  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --strip-trailing-cr         去除输入内容每行末端的回车（CR）字符  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -D, --ifdef&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;名称                输出的内容以 ‘#ifdef &amp;lt;名称&amp;gt;’ 方式标明差异  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --GTYPE-group-format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;GFMT   以 GFMT 格式处理 GTYPE 输入行组  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --line-format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;LFMT          以 LFMT 格式处理每一行资料  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --LTYPE-line-format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;LFMT    以 LFMT 格式处理 LTYPE 输入的行  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   这些格式化选项提供对 diff 输出的精细控制，从而泛化 -D/--ifdef。  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   LTYPE 可以是 “old”、“new” 或 “unchanged”。GTYPE 可以是 LTYPE 的选择  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   或是 “changed”。  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   （仅）GFMT 可包括：  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %&amp;lt;  该组中每行属于&amp;lt;文件1&amp;gt;的差异  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %&amp;gt;  该组中每行属于&amp;lt;文件2&amp;gt;的差异  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;  该组中同时在&amp;lt;文件1&amp;gt;和&amp;lt;文件2&amp;gt;出现的每一行  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;-&lt;span style=&#34;color:#f92672&#34;&gt;][&lt;/span&gt;宽度&lt;span style=&#34;color:#f92672&#34;&gt;][&lt;/span&gt;.&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;精确度&lt;span style=&#34;color:#f92672&#34;&gt;]]{&lt;/span&gt;doxX&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;字符  以 printf 格式表示该&amp;lt;字符&amp;gt;代表的内容  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       大写&amp;lt;字符&amp;gt;表示属于新的文件，小写表示属于旧的文件。&amp;lt;字符&amp;gt;的意义如下：  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         F  行组中第一行的行号  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         L  行组中最后一行的行号  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         N  行数 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;L-F+1 &lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         E  F-1  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         M  L+1  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;A&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;B?T:E&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  如果 A 等于 B 那么 T 否则 E  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   （仅）LFMT 可包括：  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %L  该行的内容  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %l  该行的内容，但不包括结束的换行符  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;-&lt;span style=&#34;color:#f92672&#34;&gt;][&lt;/span&gt;宽度&lt;span style=&#34;color:#f92672&#34;&gt;][&lt;/span&gt;.&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;精确度&lt;span style=&#34;color:#f92672&#34;&gt;]]{&lt;/span&gt;doxX&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;n  以 printf 格式表示的输入行号  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   GFMT 或 LFMT 都可包括：  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %%        %  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %c&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;C&amp;#39;&lt;/span&gt;     单个字符 C  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     %c&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\OOO&amp;#39;&lt;/span&gt;  八进制码 OOO 所代表的字符  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     C         字符 C（处上述转义外的其他字符代表它们自身）  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -d, --minimal            尽可能找出最小的差异集  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --horizon-lines&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;数量 保持指定行数的一致前后缀  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --speed-large-files  假设文件十分大而且文件中含有许多微小的差异  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --color&lt;span style=&#34;color:#f92672&#34;&gt;[=&lt;/span&gt;何时&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;       给输出上色；“何时”可以是“never”（从不）、  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            “always”（总是）或“auto”（自动，默认）；  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            仅指定 --color 与 --color&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;auto&amp;#39;&lt;/span&gt; 效果相同  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --palette&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;调色板     在 --color 选项启用时使用的颜色；&amp;lt;调色板&amp;gt;参数应当是  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            一个冒号分隔的列表以提供 terminfo capabilities 信息  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --help               显示此帮助信息并退出  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -v, --version            输出版本信息并退出  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &amp;lt;文件列表&amp;gt; 的格式可以是“文件1 文件2”、“目录1 目录2”、“目录 文件”或  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     “文件 目录”。  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;如果使用 --from-file 或 --to-file 选项，&amp;lt;文件名&amp;gt; 的格式则不受限制。  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;如果 FILE 是 “-”，则由标准输入读取内容。  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;如果输入相同，则退出状态为 0；1 表示输入不同；2 表示有错误产生。  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;报告程序错误到: bug-diffutils@gnu.org  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;报告翻译错误到: https://translationproject.org/teams/zh_CN.html  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GNU diffutils 主页: &amp;lt;https://www.gnu.org/software/diffutils/&amp;gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;使用 GNU 软件的通用帮助：&amp;lt;https://www.gnu.org/gethelp/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用的时候可以横排查看不同的地方：&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux grep 过滤多个单词</title>
      <link>https://frytea.com/archives/636/</link>
      <pubDate>Mon, 31 Oct 2022 09:49:00 +0000</pubDate>
      <guid>https://frytea.com/archives/636/</guid>
      <description>&lt;p&gt;有时会需要使用 grep 做多关键词匹配，这里给出集中方法，简单记录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;word1\|word2\|word3&amp;#39;&lt;/span&gt; /path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Search all text files ###&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;word*&amp;#39;&lt;/span&gt; *.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Search all python files for &amp;#39;wordA&amp;#39; or &amp;#39;wordB&amp;#39; ###&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wordA*&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wordB&amp;#39;&lt;/span&gt; *.py
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep -E &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;word1|word2&amp;#39;&lt;/span&gt; *.doc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep -e string1 -e string2 *.pl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep -E &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;word1|word2&amp;#34;&lt;/span&gt; *.c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### Show all the lines that do not match given pattern/words/strings ###&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep -v &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bar\|foo&amp;#39;&lt;/span&gt; /dir1/dir2/file1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep -E -v &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;pattern1|pattern2&amp;#39;&lt;/span&gt; /path/to/file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cyberciti.biz/faq/searching-multiple-words-string-using-grep/&#34;&gt;How To Search Multiple Words / String Pattern Using grep Command on Bash shell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>群晖 Docker 配置镜像源和私有源</title>
      <link>https://frytea.com/archives/1286/</link>
      <pubDate>Wed, 26 Oct 2022 10:18:19 +0000</pubDate>
      <guid>https://frytea.com/archives/1286/</guid>
      <description>&lt;p&gt;记录群晖 Docker 配置和重启.&lt;/p&gt;
&lt;p&gt;最近在自建 Docker 镜像源和私有源，发现群晖的 Doc&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 m1 macOS 下 Alacritty 解决不断请求权限问题</title>
      <link>https://frytea.com/archives/1221/</link>
      <pubDate>Mon, 17 Oct 2022 11:29:39 +0000</pubDate>
      <guid>https://frytea.com/archives/1221/</guid>
      <description>&lt;p&gt;一行命令解决 Alacritty 不断请求权限问题.&lt;/p&gt;
&lt;p&gt;m1 芯片的 MacBook 在效能方面很强&lt;/p&gt;</description>
    </item>
    <item>
      <title>一次简单的http-get攻击</title>
      <link>https://frytea.com/archives/1259/</link>
      <pubDate>Wed, 31 Aug 2022 07:08:22 +0000</pubDate>
      <guid>https://frytea.com/archives/1259/</guid>
      <description>&lt;p&gt;记录一次简单 Dos 攻击方法，提升网络安全意识.&lt;/p&gt;
&lt;p&gt;使用 [http-get-dos](https&lt;/p&gt;</description>
    </item>
    <item>
      <title>VMware ovftool arm zip 包安装</title>
      <link>https://frytea.com/archives/634/</link>
      <pubDate>Thu, 25 Aug 2022 03:59:10 +0000</pubDate>
      <guid>https://frytea.com/archives/634/</guid>
      <description>&lt;p&gt;ovftool 是 VMware 提供的一款开放的导入、导出 OVF 格式虚拟机的 CLI 工具，支持 X86 和 Arm。&lt;/p&gt;
&lt;p&gt;官方提供两种，一种是类似 &lt;code&gt;.bundle&lt;/code&gt; 安装包，另一种是 &lt;code&gt;zip&lt;/code&gt; 压缩包。本文介绍 &lt;code&gt;zip&lt;/code&gt; 压缩包使用方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux USB 设备基础理论</title>
      <link>https://frytea.com/archives/633/</link>
      <pubDate>Wed, 24 Aug 2022 10:04:46 +0000</pubDate>
      <guid>https://frytea.com/archives/633/</guid>
      <description>&lt;p&gt;通过扫描以下目录获取物理节点所有 USB 设备：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/sys/bus/usb/devices/usb*
/sys/bus/usb/devices/usb*/$busnum-*
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;从该文件系统收集某一个设备的主要信息如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;busnum&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;class&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;devnum&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;manufacturer&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;QEMU&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;port&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;prodid&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0001&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;product&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;QEMU USB Tablet&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;speed&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;12&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;usbpath&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;vendid&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0627&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;文件含义&#34;&gt;文件含义&lt;/h2&gt;
&lt;p&gt;目录下部分文件含义如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;busnum&lt;/code&gt;: 总线号&lt;/li&gt;
&lt;li&gt;&lt;code&gt;devnum&lt;/code&gt;: 设备号（该总线的第几台设备）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;speed&lt;/code&gt;: 速率&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bDeviceClass&lt;/code&gt;: 设备类型&lt;/li&gt;
&lt;li&gt;&lt;code&gt;idVendor&lt;/code&gt;: 设备的生产商ID,由USB设备生产商向USB-IF官方来统一管理和申请&lt;/li&gt;
&lt;li&gt;&lt;code&gt;idProduct&lt;/code&gt;: 该生产商生产的产品编号，同一厂商下的不同idProduct代表着该公司不同的产品系列&lt;/li&gt;
&lt;li&gt;&lt;code&gt;product&lt;/code&gt;: 制造商&lt;/li&gt;
&lt;li&gt;&lt;code&gt;manufacturer&lt;/code&gt;: 产品&lt;/li&gt;
&lt;li&gt;&lt;code&gt;serial&lt;/code&gt;： USB 硬件设备序列号 ，例如 &lt;code&gt;0000:00:01.2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;定位方法&#34;&gt;定位方法&lt;/h2&gt;
&lt;p&gt;定位某一个 USB 设备的方法有两种：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 qemu-img 转换镜像格式</title>
      <link>https://frytea.com/archives/632/</link>
      <pubDate>Tue, 16 Aug 2022 08:00:04 +0000</pubDate>
      <guid>https://frytea.com/archives/632/</guid>
      <description>&lt;p&gt;qemu-img镜像格式转换工具支持vhd、vmdk、qcow2、raw、vhdx、qcow、vdi或qed社区格式的镜像的相互转换。&lt;/p&gt;
&lt;h2 id=&#34;查看信息&#34;&gt;查看信息&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ qemu-img info vzdump-qemu-125-2022_08_16-13_40_42.vma                                                                                                                                                                                    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;image: vzdump-qemu-125-2022_08_16-13_40_42.vma                                                                                                                                                                                                                                
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;file format: raw                                                                                                                                                                                                                                                              
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;virtual size: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; GiB &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3221810176&lt;/span&gt; bytes&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;                                                                                                                                                                                                                                        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;disk size: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ qemu-img info vzdump-qemu-125-2022_08_16-13_40_42.qcow2 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;image: vzdump-qemu-125-2022_08_16-13_40_42.qcow2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;file format: qcow2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;virtual size: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; GiB &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3221810176&lt;/span&gt; bytes&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;disk size: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cluster_size: &lt;span style=&#34;color:#ae81ff&#34;&gt;65536&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Format specific information:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    compat: 1.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    compression type: zlib
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lazy refcounts: false
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    refcount bits: &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    corrupt: false
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    extended l2: false
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;格式转换&#34;&gt;格式转换&lt;/h2&gt;
&lt;p&gt;执行如下命令转换镜像文件格式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Win11 手动调整任务栏大小 ｜ 定制任务栏 2022</title>
      <link>https://frytea.com/archives/631/</link>
      <pubDate>Mon, 15 Aug 2022 03:14:00 +0000</pubDate>
      <guid>https://frytea.com/archives/631/</guid>
      <description>&lt;p&gt;最近自己的 MacBook Air M1 资源吃紧，干起活来常常被内存拖累。&lt;/p&gt;
&lt;p&gt;虽然平时都是远程开发，但终端一多，网页一多，很容易达到性能瓶颈导致工作效率下降。于是心生一计，在计算资源较充足的开发服务器上开一台高性能的桌面虚拟机，恰好此前一直没有使用过 Win11，趁此机会体验一下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perl 特性之不安全的依赖</title>
      <link>https://frytea.com/archives/630/</link>
      <pubDate>Wed, 27 Jul 2022 06:56:22 +0000</pubDate>
      <guid>https://frytea.com/archives/630/</guid>
      <description>&lt;p&gt;最近写 Perl 程序时遇到一个很奇怪的问题：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Insecure dependency in unlink while running with -T switch at ../tmpfile.pl line 44.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;经过检查，发现这是 Perl 语言一个特性，在运行时使用 &lt;code&gt;-w&lt;/code&gt; 或 &lt;code&gt;-T&lt;/code&gt; 都意味着 &amp;ldquo;万无一失&amp;rdquo; 标志。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Openwrt 使用 Wireguard 异地组网（远程家庭网所有设备）</title>
      <link>https://frytea.com/archives/1261/</link>
      <pubDate>Sat, 23 Apr 2022 07:42:39 +0000</pubDate>
      <guid>https://frytea.com/archives/1261/</guid>
      <description>&lt;p&gt;使用 Wireguard 、OpenWrt、VPS 完成异地组网.&lt;/p&gt;
&lt;p&gt;最近入手了一款友善 Nano&lt;/p&gt;</description>
    </item>
    <item>
      <title>shell 中格式化显示 json 字符串</title>
      <link>https://frytea.com/archives/629/</link>
      <pubDate>Wed, 20 Apr 2022 02:11:00 +0000</pubDate>
      <guid>https://frytea.com/archives/629/</guid>
      <description>&lt;p&gt;有时需要在终端环境中查看 json 数据，比如使用 &lt;code&gt;curl&lt;/code&gt;  调试接口时。直接看到的 json 数据是类似这样的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{&amp;#34;foo&amp;#34;: &amp;#34;lorem&amp;#34;, &amp;#34;bar&amp;#34;: &amp;#34;ipsum&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;foo&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;lorem&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bar&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ipsum&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果想要以更直观的方式格式化显示 json 数据，可以利用 &lt;code&gt;python3&lt;/code&gt; 提供的标准库 &lt;code&gt;json&lt;/code&gt; 来实现：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxmox VE (PVE) 销毁集群</title>
      <link>https://frytea.com/archives/628/</link>
      <pubDate>Thu, 14 Apr 2022 02:43:42 +0000</pubDate>
      <guid>https://frytea.com/archives/628/</guid>
      <description>&lt;p&gt;当 pve 集群某节点出现问题时，可能导致所有主机均无法连接到 WEB 管理后台，此时可以尝试以下方法将正常节点的集群状态销毁，在需要时重建集群，从而保证仍在线节点可用：&lt;/p&gt;</description>
    </item>
    <item>
      <title>iso 和 img 的区别</title>
      <link>https://frytea.com/archives/1219/</link>
      <pubDate>Wed, 06 Apr 2022 14:22:49 +0000</pubDate>
      <guid>https://frytea.com/archives/1219/</guid>
      <description>&lt;p&gt;最近经常接触各种系统镜像，大部分是 *.iso 格式（如 debian ），少部分是 *.img&lt;/p&gt;</description>
    </item>
    <item>
      <title>*.iso 和 *.img 的区别</title>
      <link>https://frytea.com/archives/627/</link>
      <pubDate>Wed, 06 Apr 2022 06:22:49 +0000</pubDate>
      <guid>https://frytea.com/archives/627/</guid>
      <description>&lt;p&gt;最近经常接触各种系统镜像，大部分是 &lt;code&gt;*.iso&lt;/code&gt; 格式（如 debian ），少部分是 &lt;code&gt;*.img&lt;/code&gt; 格式（如 cirros），这两者究竟有何区别，最终在维基百科找到比较可靠的一段描述：&lt;/p&gt;</description>
    </item>
    <item>
      <title>k3s 使用 Letsencrypt 和 Traefik 完成 https 入口部署</title>
      <link>https://frytea.com/archives/1232/</link>
      <pubDate>Tue, 08 Mar 2022 06:43:39 +0000</pubDate>
      <guid>https://frytea.com/archives/1232/</guid>
      <description>&lt;p&gt;k3s自动完成 ssl 证书签发和续签方法，并使用 https 协议暴露服务方法介绍。&lt;/p&gt;
&lt;p&gt;完成了 k&lt;/p&gt;</description>
    </item>
    <item>
      <title>公网部署 k3s 集群方法总结</title>
      <link>https://frytea.com/archives/1191/</link>
      <pubDate>Tue, 08 Mar 2022 06:36:35 +0000</pubDate>
      <guid>https://frytea.com/archives/1191/</guid>
      <description>&lt;p&gt;基于公网完成跨云厂商服务器 k3s 集群部署&lt;/p&gt;
&lt;p&gt;Kubernetes 在当下的火热程度不必多言，但由&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes Pod 配置文件(完整注释)</title>
      <link>https://frytea.com/archives/1142/</link>
      <pubDate>Fri, 04 Feb 2022 05:06:26 +0000</pubDate>
      <guid>https://frytea.com/archives/1142/</guid>
      <description>&lt;p&gt;汇集几乎全部 k8s 配置项注释，方便查阅和学习&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# yaml格式的pod定义文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;完整内容：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;v1        　　&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 必选，版本号，例如v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Pod                &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 必选，Pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:       　　　　　　&lt;span style=&#34;color:#75715e&#34;&gt;# 必选，元数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string             &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 必选，Pod名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;namespace&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string        &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 必选，Pod所属的命名空间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;labels&lt;/span&gt;:       　　　　　　  &lt;span style=&#34;color:#75715e&#34;&gt;# 自定义标签&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string      　   &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 自定义标签名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;annotations&lt;/span&gt;:              &lt;span style=&#34;color:#75715e&#34;&gt;# 自定义注释列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string           &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 自定义注释列表名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:                     &lt;span style=&#34;color:#75715e&#34;&gt;# 必选，Pod中容器的详细定义&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;containers&lt;/span&gt;:               &lt;span style=&#34;color:#75715e&#34;&gt;# 必选，Pod中容器列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string             &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 必选，容器名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string            &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 必选，容器的镜像名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;imagePullPolicy&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;Always | Never | IfNotPresent]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                              &lt;span style=&#34;color:#75715e&#34;&gt;# 获取镜像的策略&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#75715e&#34;&gt;# Alawys 下载镜像&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#75715e&#34;&gt;# IfnotPresent 优先使用本地镜像，否则下载镜像&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#75715e&#34;&gt;# Nerver 仅使用本地镜像&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;command&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;string]        &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 容器的启动命令列表，如不指定，使用打包时使用的启动命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;args&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;string]           &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 容器的启动命令参数列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;workingDir&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string       &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 容器的工作目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumeMounts&lt;/span&gt;:             &lt;span style=&#34;color:#75715e&#34;&gt;# 挂载到容器内部的存储卷配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string             &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 引用pod定义的共享存储卷的名称，需用volumes[]部分定义的的卷名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;mountPath&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string        &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 存储卷在容器内mount的绝对路径，应少于512字符&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;readOnly&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;boolean        &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 是否为只读模式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:                    &lt;span style=&#34;color:#75715e&#34;&gt;# 需要暴露的端口库号列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string             &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 端口号名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;containerPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;int       &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 容器需要监听的端口号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;hostPort&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;int            &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 容器所在主机需要监听的端口号，默认与Container相同&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;protocol&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string         &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 端口协议，支持TCP和UDP，默认TCP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;env&lt;/span&gt;:                      &lt;span style=&#34;color:#75715e&#34;&gt;# 容器运行前需设置的环境变量列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string             &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 环境变量名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string            &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 环境变量的值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;resources&lt;/span&gt;:                &lt;span style=&#34;color:#75715e&#34;&gt;# 资源限制和请求的设置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;limits&lt;/span&gt;:                   &lt;span style=&#34;color:#75715e&#34;&gt;# 资源限制的设置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;cpu&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string              &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Cpu的限制，单位为core数，将用于docker run --cpu-shares参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;memory&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string           &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 内存限制，单位可以为Mib/Gib，将用于docker run --memory参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;requests&lt;/span&gt;:                 &lt;span style=&#34;color:#75715e&#34;&gt;# 资源请求的设置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;cpu&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string              &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Cpu请求，容器启动的初始可用数量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;memory&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string           &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 内存请求，容器启动的初始可用数量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;livenessProbe&lt;/span&gt;:            &lt;span style=&#34;color:#75715e&#34;&gt;# 对Pod内的容器健康检查的设置，当探测无响应几次后将自动重启该容器，检查方法有exec、httpGet和tcpSocket，对一个容器只需设置其中一种方法即可&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;exec&lt;/span&gt;:                     &lt;span style=&#34;color:#75715e&#34;&gt;# 对Pod容器内检查方式设置为exec方式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;command&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;string]        &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# exec方式需要制定的命令或脚本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;httpGet&lt;/span&gt;:                  &lt;span style=&#34;color:#75715e&#34;&gt;# 对Pod内个容器健康检查方法设置为HttpGet，需要制定Path、port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;port&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;number&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;host&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;scheme&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;HttpHeaders&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;tcpSocket&lt;/span&gt;:                &lt;span style=&#34;color:#75715e&#34;&gt;# 对Pod内个容器健康检查方式设置为tcpSocket方式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#f92672&#34;&gt;port&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;number&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;initialDelaySeconds&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;# 容器启动完成后首次探测的时间，单位为秒&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;timeoutSeconds&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# 对容器健康检查探测等待响应的超时时间，单位秒，默认1秒&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;periodSeconds&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;         &lt;span style=&#34;color:#75715e&#34;&gt;# 对容器监控检查的定期探测时间设置，单位秒，默认10秒一次&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;successThreshold&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;failureThreshold&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;securityContext&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#f92672&#34;&gt;privileged&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restartPolicy&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;Always | Never | OnFailure]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                              &lt;span style=&#34;color:#75715e&#34;&gt;# Pod的重启策略，&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                              &lt;span style=&#34;color:#75715e&#34;&gt;# Always 一旦不管以何种方式终止运行，kubelet都将重启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                              &lt;span style=&#34;color:#75715e&#34;&gt;# OnFailure表示只有Pod以非0退出码退出才重启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	                              &lt;span style=&#34;color:#75715e&#34;&gt;# Nerver表示不再重启该Pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;nodeSelector&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;obeject    &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 设置NodeSelector表示将该Pod调度到包含这个label的node上，以key：value的格式指定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;imagePullSecrets&lt;/span&gt;:         &lt;span style=&#34;color:#75715e&#34;&gt;# Pull镜像时使用的secret名称，以key：secretkey格式指定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;hostNetwork&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# 是否使用主机网络模式，默认为false，如果设置为true，表示使用宿主机网络&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:                  &lt;span style=&#34;color:#75715e&#34;&gt;# 在该pod上定义共享存储卷列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string           &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 共享存储卷名称 （volumes类型有很多种）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;emptyDir&lt;/span&gt;: {}            &lt;span style=&#34;color:#75715e&#34;&gt;# 类型为emtyDir的存储卷，与Pod同生命周期的一个临时目录。为空值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;hostPath&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string       &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 类型为hostPath的存储卷，表示挂载Pod所在宿主机的目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string         &lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Pod所在宿主机的目录，将被用于同期中mount的目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;secret&lt;/span&gt;:                 &lt;span style=&#34;color:#75715e&#34;&gt;# 类型为secret的存储卷，挂载集群与定义的secre对象到容器内部&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;scretname&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;items&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;key&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;configMap&lt;/span&gt;:              &lt;span style=&#34;color:#75715e&#34;&gt;#类型为configMap的存储卷，挂载预定义的configMap对象到容器内部&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;items&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        - &lt;span style=&#34;color:#f92672&#34;&gt;key&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;path&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes.io/zh/docs/&#34;&gt;Kubernetes 文档/&lt;/a&gt;&lt;a href=&#34;https://kubernetes.io/zh/docs/concepts/&#34;&gt;概念/&lt;/a&gt;&lt;a href=&#34;https://kubernetes.io/zh/docs/concepts/configuration/&#34;&gt;配置&lt;/a&gt; By k8s&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/flying1819/articles/9039529.html&#34;&gt;k8s yaml格式的Pod配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>kubernetes 核心技术概念</title>
      <link>https://frytea.com/archives/1149/</link>
      <pubDate>Fri, 04 Feb 2022 05:04:34 +0000</pubDate>
      <guid>https://frytea.com/archives/1149/</guid>
      <description>&lt;p&gt;汇集 k8s 核心概念，帮助理解&lt;/p&gt;
&lt;h2 id=&#34;复制控制器-replication-controlle&#34;&gt;复制控制器（ `Replication Controlle&lt;/h2&gt;</description>
    </item>
    <item>
      <title>Kubernetes 系列文章概述</title>
      <link>https://frytea.com/archives/1135/</link>
      <pubDate>Fri, 04 Feb 2022 05:02:37 +0000</pubDate>
      <guid>https://frytea.com/archives/1135/</guid>
      <description>&lt;p&gt;Kubernetes系列文章概述&lt;/p&gt;
&lt;p&gt;接触，了解 k8s 已经有一段时间了，但由于工作内容没有涉及到，&lt;/p&gt;</description>
    </item>
    <item>
      <title>INOTIFY - 监听事件</title>
      <link>https://frytea.com/archives/626/</link>
      <pubDate>Thu, 27 Jan 2022 01:35:37 +0000</pubDate>
      <guid>https://frytea.com/archives/626/</guid>
      <description>&lt;p&gt;Linux 2.6.13 内核中引入了新的文件系统变化通知机制 &lt;code&gt;inotify&lt;/code&gt; ，使用该特性提供的用户态调用 api ，可以方便的完成文件变化监听。&lt;/p&gt;
&lt;p&gt;各种语言基本都提供了对该接口的调用方法： &lt;code&gt;C&lt;/code&gt; 不必多说， &lt;code&gt;Perl&lt;/code&gt; 使用 &lt;code&gt;[Linux::Inotify2](https://metacpan.org/pod/Linux::Inotify2)&lt;/code&gt; ， &lt;code&gt;Golang&lt;/code&gt; 使用 &lt;code&gt;golang.org/x/sys/unix&lt;/code&gt; ， &lt;code&gt;Python&lt;/code&gt; 则使用 &lt;code&gt;[pyinotify](https://github.com/seb-m/pyinotify)&lt;/code&gt; 即可完成调用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wiki.js 离线部署方法 ｜ 离线拉取语言包</title>
      <link>https://frytea.com/archives/625/</link>
      <pubDate>Thu, 27 Jan 2022 01:25:31 +0000</pubDate>
      <guid>https://frytea.com/archives/625/</guid>
      <description>&lt;p&gt;最近想在内网搭建一套 Wiki，在调研了各种 wiki 的搭建方式、功能之后，选择了 wiki.js。但是在部署过程中，发现其默认是通过公网拉取语言包等资源，内网安装需要一些特别的方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS 使用 remote-viewer 连接 spice ｜ PC 连接 spice 云桌面</title>
      <link>https://frytea.com/archives/1260/</link>
      <pubDate>Tue, 25 Jan 2022 07:12:46 +0000</pubDate>
      <guid>https://frytea.com/archives/1260/</guid>
      <description>&lt;p&gt;介绍三种桌面平台下连接 spice 云桌面的方法。&lt;/p&gt;
&lt;p&gt;最近需要使用到云桌面办公，但目前仅支持 win&lt;/p&gt;</description>
    </item>
    <item>
      <title>macOS 使用 remote-viewer 连接 spice 服务 ｜ PC 连接 spice 云桌面方法</title>
      <link>https://frytea.com/archives/624/</link>
      <pubDate>Tue, 25 Jan 2022 07:10:58 +0000</pubDate>
      <guid>https://frytea.com/archives/624/</guid>
      <description>&lt;p&gt;最近需要使用到云桌面办公，但目前仅支持 windows 客户端。后经过询问，发现是使用 spice 协议链接，提供地址后，即可使用第三方客户端链接。&lt;/p&gt;
&lt;p&gt;MacOS 平台下没有很好的支持 spice 协议的图形化客户端，但是可以使用 &lt;code&gt;remote-viewer&lt;/code&gt; 这个工具，也比较好用，下面介绍安装方法：&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 SSH 无操作自动断开 | pychram 超时无响应</title>
      <link>https://frytea.com/archives/623/</link>
      <pubDate>Wed, 19 Jan 2022 01:49:24 +0000</pubDate>
      <guid>https://frytea.com/archives/623/</guid>
      <description>&lt;p&gt;工作中常需要连接着服务器，下班或暂时离开时会出现一段时间不操作终端，此时就会自动断开。&lt;/p&gt;
&lt;p&gt;这本身无伤大雅，重连即可，直到我发现，一些依赖 SSH 提供的服务也会因此受到影响，比如 &lt;code&gt;Pychram&lt;/code&gt; 远程开发，会在一段时间后无响应，只能重启 Pychram 解决，很影响效率。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 传值 or 传引用</title>
      <link>https://frytea.com/archives/622/</link>
      <pubDate>Wed, 19 Jan 2022 01:11:11 +0000</pubDate>
      <guid>https://frytea.com/archives/622/</guid>
      <description>&lt;p&gt;先说结论：python不允许程序员选择采用传值还是传引用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果函数收到的是一个 &lt;strong&gt;可变对象&lt;/strong&gt; （比如 &lt;strong&gt;字典&lt;/strong&gt; 或者 &lt;strong&gt;列表&lt;/strong&gt; ）的引用，就能修改对象的原始值－－相当于通过“&lt;strong&gt;传引用&lt;/strong&gt;”来传递对象。&lt;/li&gt;
&lt;li&gt;如果函数收到的是一个 &lt;strong&gt;不可变对象&lt;/strong&gt; （比如 &lt;strong&gt;数字&lt;/strong&gt; 、 &lt;strong&gt;字符&lt;/strong&gt; 或者 &lt;strong&gt;元组&lt;/strong&gt; ）的引用，就不能直接修改原始对象－－相当于通过“&lt;strong&gt;传值&lt;/strong&gt;&amp;lsquo;来传递对象。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在函数传值，或函数内部函数引用外部变量时，基本符合这个逻辑，比如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 下的文件锁</title>
      <link>https://frytea.com/archives/620/</link>
      <pubDate>Thu, 13 Jan 2022 06:30:39 +0000</pubDate>
      <guid>https://frytea.com/archives/620/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;本文内容为 Linux 系统通用，各个语言实现可能稍有不同，但原理相同。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;当多个进程或多个程序都想要修同一个文件的时候，如果不加控制，多进程或多程序将可能导致文件更新的丢失。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perl //= 和 ||= 的区别 | 附实验</title>
      <link>https://frytea.com/archives/619/</link>
      <pubDate>Wed, 12 Jan 2022 07:42:03 +0000</pubDate>
      <guid>https://frytea.com/archives/619/</guid>
      <description>&lt;h2 id=&#34;结论&#34;&gt;结论&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$var//=2&lt;/code&gt;：等价于 &lt;code&gt;defined($var)||2&lt;/code&gt;，即 &lt;strong&gt;未定义&lt;/strong&gt; 时才赋值为 &lt;code&gt;2&lt;/code&gt; ，否则不变（ 即使是 &lt;code&gt;0&lt;/code&gt;或 &lt;code&gt;空字符串&lt;/code&gt;  ）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$var||=2&lt;/code&gt; ：除非定义且为 &lt;code&gt;true&lt;/code&gt; 才不会赋值，否则赋值（比如 &lt;code&gt;0&lt;/code&gt; 或 &lt;code&gt;空字符串&lt;/code&gt; 时）为2。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;heading&#34;&gt;//=&lt;/h2&gt;
&lt;h3 id=&#34;step-1-空串&#34;&gt;Step-1 空串&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#e6db74&#34;&gt;//&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;$var&amp;#39;\n&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# perl atest4.pl &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step-2-0&#34;&gt;Step-2 0&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#e6db74&#34;&gt;//&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;$var&amp;#39;\n&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# perl atest4.pl &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step-3-1&#34;&gt;Step-3 1&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#e6db74&#34;&gt;//&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;$var&amp;#39;\n&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# perl atest4.pl &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step-4-undef&#34;&gt;Step-4 undef&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;undef;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#e6db74&#34;&gt;//&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;$var&amp;#39;\n&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# perl atest4.pl &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;heading-1&#34;&gt;||=&lt;/h2&gt;
&lt;h3 id=&#34;step-1-空串-1&#34;&gt;Step-1 空串&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;||=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; $var;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# perl atest4.pl &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step-2-0-1&#34;&gt;Step-2 0&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;||=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; $var;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# perl atest4.pl &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step-3-1-1&#34;&gt;Step-3 1&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;||=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; $var;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# perl atest4.pl &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step-4-undef-1&#34;&gt;Step-4 undef&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;undef;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$var&lt;span style=&#34;color:#f92672&#34;&gt;||=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; $var;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# perl atest4.pl &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Perl 常用内置函数 -r -e 等</title>
      <link>https://frytea.com/archives/617/</link>
      <pubDate>Tue, 11 Jan 2022 07:55:24 +0000</pubDate>
      <guid>https://frytea.com/archives/617/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;r: File is readable by effective uid&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;gid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;w: File is writable by effective uid&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;gid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;x: File is executable by effective uid&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;gid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;o: File is owned by effective uid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;R: File is readable by real uid&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;gid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;W: File is writable by real uid&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;gid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;X: File is executable by real uid&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;gid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;O: File is owned by real uid&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;e: File exists&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;z: File has zero size (is empty)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;s: File has nonzero size (returns size in bytes)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;f: File is a plain file&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;d: File is a directory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;l: File is a symbolic link&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;p: File is a named pipe (FIFO), &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; Filehandle is a pipe&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;S: File is a socket&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;b: File is a block special file&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;c: File is a character special file&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;t: Filehandle is opened to a tty&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;u: File has setuid bit set&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;g: File has setgid bit set&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;k: File has sticky bit set&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;T: File is an ASCII text file (heuristic guess)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;B: File is a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;binary&amp;#34;&lt;/span&gt; file (opposite of &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;T)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;M: Script start time minus file modification time, in days&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;A: Same &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; access time&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;C: Same &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; inode change time (Unix, may differ &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; other platforms)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://perldoc.perl.org/perlfunc#Alphabetical-Listing-of-Perl-Functions&#34;&gt;Alphabetical Listing of Perl Functions&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/6172957/what-does-if-f-filename-in-perl-do&#34;&gt;What does if( -f &lt;filename&gt; ) in Perl do?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/qq_21478261/article/details/105399532&#34;&gt;perl中 -e, -z, -s, -M, -A, -C, -r, -w, -x, -o, -f, -d , -l 含义&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>什么是 WEB3 以及其发展概要</title>
      <link>https://frytea.com/archives/615/</link>
      <pubDate>Fri, 31 Dec 2021 09:17:07 +0000</pubDate>
      <guid>https://frytea.com/archives/615/</guid>
      <description>&lt;p&gt;要问何为 Web3，就先从什么味 Web2 和 Web1 来说起吧。&lt;/p&gt;
&lt;p&gt;最近在网上看到 Web3 的概念很火热，比肩区块链、元宇宙，其实貌似一整个未来，特意整理一下认为比较好的材料分享出来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>国内对象存储/CDN服务价格汇总</title>
      <link>https://frytea.com/archives/1145/</link>
      <pubDate>Thu, 30 Dec 2021 12:14:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1145/</guid>
      <description>&lt;p&gt;汇集国内主流对象存储、CDN服务价格&lt;/p&gt;
&lt;p&gt;话不多说，直接上表格。&lt;/p&gt;
&lt;h2 id=&#34;价格表国内https价格&#34;&gt;价格表(国内HTTPS价格)&lt;/h2&gt;</description>
    </item>
    <item>
      <title>国内对象存储/CDN服务价格横评</title>
      <link>https://frytea.com/archives/614/</link>
      <pubDate>Thu, 30 Dec 2021 12:11:59 +0000</pubDate>
      <guid>https://frytea.com/archives/614/</guid>
      <description>&lt;p&gt;话不多说，直接上表格。&lt;/p&gt;
&lt;h2 id=&#34;价格表国内https价格&#34;&gt;价格表(国内HTTPS价格)&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;名称&lt;/th&gt;
          &lt;th&gt;存储免费额度(GB)&lt;/th&gt;
          &lt;th&gt;存储费用(元 / GB / 日)&lt;/th&gt;
          &lt;th&gt;流量免费额度&lt;/th&gt;
          &lt;th&gt;流量费用(元/GB)&lt;/th&gt;
          &lt;th&gt;CDN流量费用&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;多吉云&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
          &lt;td&gt;0.003&lt;/td&gt;
          &lt;td&gt;20&lt;/td&gt;
          &lt;td&gt;0.11&lt;/td&gt;
          &lt;td&gt;0.11&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;七牛云&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
          &lt;td&gt;0.098-0.145&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.29&lt;/td&gt;
          &lt;td&gt;0.28&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;腾讯云&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.099-0.118&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.5&lt;/td&gt;
          &lt;td&gt;0.21&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;阿里云&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.12&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.25-0.5&lt;/td&gt;
          &lt;td&gt;0.24&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;又拍云&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.0043&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.5&lt;/td&gt;
          &lt;td&gt;0.29&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;百度智能云&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.119-0.15&lt;/td&gt;
          &lt;td&gt;\&lt;/td&gt;
          &lt;td&gt;0.25-0.49&lt;/td&gt;
          &lt;td&gt;0.20&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;注：价格整理于2021年12月30日；存储指对象存储，流量指对象存储公网流出流量。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 安装 GitKraken 并汉化</title>
      <link>https://frytea.com/archives/613/</link>
      <pubDate>Thu, 30 Dec 2021 01:31:05 +0000</pubDate>
      <guid>https://frytea.com/archives/613/</guid>
      <description>&lt;p&gt;GitKraken 是一款超好用的 git 可视化(gui)工具，但是官方不提供多语言支持，今天就以 Ubuntu 平台为例介绍一下安装方法。&lt;/p&gt;
&lt;h2 id=&#34;安装及汉化&#34;&gt;安装及汉化&lt;/h2&gt;
&lt;p&gt;首先在 GitKraken 官网下载安装包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitKraken 官网： &lt;a href=&#34;https://www.gitkraken.com/&#34;&gt;https://www.gitkraken.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果是 debian 系操系统可下载其中的 deb 版本，之后安装即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>深挖 docker 默认网络 | 为什么 docker 默认网络能上外网</title>
      <link>https://frytea.com/archives/612/</link>
      <pubDate>Tue, 28 Dec 2021 06:49:46 +0000</pubDate>
      <guid>https://frytea.com/archives/612/</guid>
      <description>&lt;p&gt;为什么默认配置创建出来的 docker 容器可以访问外网，为什么监听对应端口就能对外暴露docker服务，一张图搞清楚。&lt;/p&gt;
&lt;p&gt;首先 Docker 有四中网络模式， 分别是 Bridge、Host、Container、None，默认使用 Bridge，今天就来讲讲 Bridge。&lt;/p&gt;</description>
    </item>
    <item>
      <title>理解网桥、集线器、交换机、路由器的本质</title>
      <link>https://frytea.com/archives/611/</link>
      <pubDate>Tue, 28 Dec 2021 02:19:27 +0000</pubDate>
      <guid>https://frytea.com/archives/611/</guid>
      <description>&lt;p&gt;一直弄不清楚这几者的区别，加之现代的三层交换机，就更搞不清楚几者的关系了。&lt;/p&gt;
&lt;p&gt;后来发现试图以现代产品的思维理解这几个概念是极其容易混淆的，必须回归到几者最本质的样子，再去拓展才行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 实战项目解决循环依赖问题</title>
      <link>https://frytea.com/archives/610/</link>
      <pubDate>Mon, 27 Dec 2021 06:15:49 +0000</pubDate>
      <guid>https://frytea.com/archives/610/</guid>
      <description>&lt;h2 id=&#34;问题重现&#34;&gt;问题重现&lt;/h2&gt;
&lt;p&gt;在一次简单的代码合并后，发现 Python 项目跑不起来了，报错如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh://root@192.168.226.76:22/usr/bin/python3 -B -u /tmp/pycharm_project_882/mimic_daemon_server/helper_main.py
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Traceback &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;most recent call last&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/pycharm_project_882/mimic_daemon_server/helper_main.py&amp;#34;&lt;/span&gt;, line 1, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    from mimic_daemon_server import create_app
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/pycharm_project_882/mimic_daemon_server/__init__.py&amp;#34;&lt;/span&gt;, line 14, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    from mimic_daemon_server.nodes import nodes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/pycharm_project_882/mimic_daemon_server/nodes/__init__.py&amp;#34;&lt;/span&gt;, line 2, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    from . import route
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/pycharm_project_882/mimic_daemon_server/nodes/route.py&amp;#34;&lt;/span&gt;, line 5, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    from mimic_daemon_server.guest_common import ReplicationConfig
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/pycharm_project_882/mimic_daemon_server/guest_common/__init__.py&amp;#34;&lt;/span&gt;, line 3, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    from .abstract_config import AbstractConfig
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/pycharm_project_882/mimic_daemon_server/guest_common/abstract_config.py&amp;#34;&lt;/span&gt;, line 16, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    import mimic_daemon_server.qemu_server.Drive
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/pycharm_project_882/mimic_daemon_server/qemu_server/__init__.py&amp;#34;&lt;/span&gt;, line 25, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    from .QemuConfig import QemuConfig
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/pycharm_project_882/mimic_daemon_server/qemu_server/QemuConfig.py&amp;#34;&lt;/span&gt;, line 12, in &amp;lt;module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    from mimic_daemon_server.guest_common import AbstractConfig
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ImportError: cannot import name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;AbstractConfig&amp;#39;&lt;/span&gt; from &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mimic_daemon_server.guest_common&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;/tmp/pycharm_project_882/mimic_daemon_server/guest_common/__init__.py&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;进程已结束,退出代码1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于我在 Python 领域还是个初学者，没有遇到类似问题，但是根据分析，问题应该是出在了 &lt;strong&gt;循环依赖&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perl 调试打印 HASH 内容</title>
      <link>https://frytea.com/archives/608/</link>
      <pubDate>Thu, 23 Dec 2021 06:14:27 +0000</pubDate>
      <guid>https://frytea.com/archives/608/</guid>
      <description>&lt;p&gt;在调试 Perl 程序时常常需要打印哈希表内容，虽然可以直接使用 &lt;code&gt;foreach&lt;/code&gt; 打印，但数据复杂了就难办了，此时可以将 Hash 表转换为 json 文本再打印：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;use&lt;/span&gt; JSON;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;my&lt;/span&gt; $data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;info&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;struct&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test1&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test1&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test2&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test2&amp;#39;&lt;/span&gt;}};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;my&lt;/span&gt; $json &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; JSON;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#$json-&amp;gt;sort_by(sub { ncmp($JSON::PP::a, $JSON::PP::b) });&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;my&lt;/span&gt; $json_text &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $json&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;pretty&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;encode ($data);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;print&lt;/span&gt; $json_text;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果没有 json 包需要安装一下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享一个快捷内网、漏洞扫描工具 fscan</title>
      <link>https://frytea.com/archives/607/</link>
      <pubDate>Tue, 21 Dec 2021 01:10:30 +0000</pubDate>
      <guid>https://frytea.com/archives/607/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/shadow1ng/fscan&#34;&gt;fscan&lt;/a&gt; 是一款 go 语言写成 “一款内网综合扫描工具，方便一键自动化、全方位漏扫扫描”。是我在刷 &lt;a href=&#34;https://github.com/kon9chunkit&#34;&gt;kon9chunkit&lt;/a&gt; 发起的 &lt;strong&gt;&lt;a href=&#34;https://github.com/kon9chunkit/GitHub-Chinese-Top-Charts&#34;&gt;GitHub中文排行榜&lt;/a&gt;&lt;/strong&gt; 时发现的。&lt;/p&gt;
&lt;p&gt;该工具&lt;strong&gt;支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别&lt;/strong&gt;等功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows 禁用 AppXSVC 解决 CPU 占用高问题</title>
      <link>https://frytea.com/archives/606/</link>
      <pubDate>Thu, 16 Dec 2021 03:26:36 +0000</pubDate>
      <guid>https://frytea.com/archives/606/</guid>
      <description>&lt;p&gt;在一台虚拟机上安装了 Windows 10 lstc 2021 版，启动后发现 CPU 占用率一直居高不下，查看任务管理器发现是一个叫 &lt;code&gt;wsapp&lt;/code&gt; 的系统服务服务占用 CPU 过高，搜索后发现对应的是 &lt;code&gt;AppX Deployment Service&lt;/code&gt; 系统服务，是用来提供 微软应用商店服务服务的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>无代理国内镜像加速 GitHub 资源拉取</title>
      <link>https://frytea.com/archives/1237/</link>
      <pubDate>Wed, 15 Dec 2021 07:32:54 +0000</pubDate>
      <guid>https://frytea.com/archives/1237/</guid>
      <description>&lt;p&gt;一种非代理加速拉取 github 资源的方法.&lt;/p&gt;
&lt;p&gt;常见的github加速方法如修改 &lt;code&gt;hosts&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决拉取 github 仓库报错 “gnutls_handshake () failed” 问题</title>
      <link>https://frytea.com/archives/1210/</link>
      <pubDate>Wed, 15 Dec 2021 07:25:55 +0000</pubDate>
      <guid>https://frytea.com/archives/1210/</guid>
      <description>&lt;p&gt;由于代理导致 github 无法正常拉取的解决办法.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gnutls_handshake()




failed: The TLS connection was non-properly terminated.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最近为新配置的虚机拉取库，但是从 GitHub 拉取库总是出问题，查阅网上文献将问题锁定在代理，但是找了一圈还是没有找到答案。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git 常用操作</title>
      <link>https://frytea.com/archives/1233/</link>
      <pubDate>Wed, 15 Dec 2021 07:21:48 +0000</pubDate>
      <guid>https://frytea.com/archives/1233/</guid>
      <description>&lt;p&gt;记录常用 git 操作命令，方便速查.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 注：若没有标记“远程”，则默认为操作本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;地分支。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 检查当前状态 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git status
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 避免协同时自动生成 merge commit （把远程最新的 commit 以变基的方式同步到本地）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git pull --rebase
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 跟踪新文件（.标识当前目录下所有文件，也可指定文件）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git add .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 删除暂存区文件(修改.gitignore 后需移除暂存区生效)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git rm --cached README
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 查看变化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git diff
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 提交更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git commit -m &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Story 182: Fix benchmarks for speed&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 新增分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git branch newBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 切换分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git checkout newBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 修改分支名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git branch -m oldBranchName newBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 新增分支并切换至新分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git checkout -b newBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 将新分支内容合并至当前分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git merge newBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 删除(本地)分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git branch -d newBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 将本地分支推送到远端(若不存在则新建)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git push origin localBranchName:remoteBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 删除(远程)分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git push origin :deleteBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 从远程拉取分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git checkout -b localBranchName origin/remoteBranchName
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 如果不成功，执行 git fetch，再重试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 集中撤销提交&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 不删除工作空间改动代码，撤销commit，不撤销git add .&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git reset --soft HEAD~1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 不删除工作空间改动代码，撤销commit，并且撤销git add . 操作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git reset --mixed HEAD~1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 删除工作空间改动代码，撤销commit，撤销git add .&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git reset --hard HEAD~1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 回退到指定 commit 版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git reset --hard 1094a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 查看节点树&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git log --oneline --graph --decorate --all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%AF%8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%93%E5%BA%93&#34;&gt;2.2 Git 基础 - 记录每次更新到仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6&#34;&gt;3.2 Git 分支 - 分支的新建与合并&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/weboof/article/details/100517928&#34;&gt;git新增、修改、删除本地和远程分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.yiibai.com/git/git_fetch.html&#34;&gt;git fetch命令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/lfxiao/p/9378763.html&#34;&gt;git commit之后，想撤销commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Git 修改提交历史中的邮箱和用户名</title>
      <link>https://frytea.com/archives/1200/</link>
      <pubDate>Wed, 15 Dec 2021 07:16:03 +0000</pubDate>
      <guid>https://frytea.com/archives/1200/</guid>
      <description>&lt;p&gt;重写 git commit 历史中的邮箱和用户名.&lt;/p&gt;
&lt;p&gt;内网提交需要校验企业邮箱，有时邮箱设置错误导致&lt;/p&gt;</description>
    </item>
    <item>
      <title>更换 PVE7 软件仓库源和 CT模板（LXC）源为国内源</title>
      <link>https://frytea.com/archives/605/</link>
      <pubDate>Tue, 14 Dec 2021 01:05:00 +0000</pubDate>
      <guid>https://frytea.com/archives/605/</guid>
      <description>&lt;p&gt;PVE7 安装后默认配置的 apt 软件源和 CT(LXC)容器模板源均是官方默认的，国内使用性能不佳，建议替换为 清华 Tuna 提供的国内镜像源，速度将有一个较大的提升。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git 修改提交过的邮箱和用户名</title>
      <link>https://frytea.com/archives/604/</link>
      <pubDate>Mon, 13 Dec 2021 02:00:16 +0000</pubDate>
      <guid>https://frytea.com/archives/604/</guid>
      <description>&lt;p&gt;内网提交需要校验企业邮箱，但有时邮箱设置错误导致 &lt;code&gt;commit&lt;/code&gt; 的邮箱有问题，此时可以通过修改已提交记录中的邮箱来修复，无需重新提交。&lt;/p&gt;
&lt;p&gt;经过检索，发现两种方法，分别适用于修改一次和修改多次，引文在最后都有注明。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 LeanCloud 云引擎部署 React Web 应用</title>
      <link>https://frytea.com/archives/603/</link>
      <pubDate>Sun, 12 Dec 2021 14:48:58 +0000</pubDate>
      <guid>https://frytea.com/archives/603/</guid>
      <description>&lt;p&gt;最近在探索 &lt;a href=&#34;https://kubesphere.com.cn&#34;&gt;KubeSphere&lt;/a&gt; 和 &lt;a href=&#34;https://kubernetes.io&#34;&gt;K8s&lt;/a&gt;，东西毫无疑问是好东西，学了在未来也很有用，但是用在个人开发上实在是费用有点高，当然也不太敢用在个人开源项目上，因此我再次开始探索适用于个人全栈应用托管平台。&lt;/p&gt;
&lt;p&gt;提供这类 PaaS 云平台服务的公司有一些，比如 2007 年就开始开发的 &lt;a href=&#34;https://heroku.com&#34;&gt;Heroku&lt;/a&gt;，也有 &lt;a href=&#34;https://vercel.com/&#34;&gt;Vercel&lt;/a&gt; 这类现代化的 Web 应用托管平台，在国内则有 &lt;a href=&#34;https://www.leancloud.cn&#34;&gt;Leancloud&lt;/a&gt; 这种 BaaS 平台也可实现类似功能。&lt;/p&gt;
&lt;h2 id=&#34;背景资料&#34;&gt;背景资料&lt;/h2&gt;
&lt;p&gt;之前做移动端开发就使用过 Leancloud，绝对是国内少数几个能提供给部分免费资源做开发学习使用的良心平台了，使用它来做数据托管非常好用，再也不用担心自己的软件数据库没有保障了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>云原生初体验 ｜ 使用 3C 活动服务器体验 KubeSphere</title>
      <link>https://frytea.com/archives/1254/</link>
      <pubDate>Tue, 07 Dec 2021 15:49:51 +0000</pubDate>
      <guid>https://frytea.com/archives/1254/</guid>
      <description>&lt;p&gt;记录对云原生的初体验，顺带测评 3C云活动价服务器.&lt;/p&gt;
&lt;p&gt;一直对云原生超级感兴趣，自己的博客、图床、资&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 内核模块 pve-kernal 编译安装方法</title>
      <link>https://frytea.com/archives/1262/</link>
      <pubDate>Mon, 06 Dec 2021 06:29:16 +0000</pubDate>
      <guid>https://frytea.com/archives/1262/</guid>
      <description>&lt;p&gt;介绍 pve 虚拟化系统内核的编译安装方法.&lt;/p&gt;
&lt;p&gt;以 pve-release-6.x ，基于 debi&lt;/p&gt;</description>
    </item>
    <item>
      <title>GDB 调试 QEMU 源码（跟踪 QMP 协议执行细节）</title>
      <link>https://frytea.com/archives/1203/</link>
      <pubDate>Mon, 06 Dec 2021 06:13:17 +0000</pubDate>
      <guid>https://frytea.com/archives/1203/</guid>
      <description>&lt;p&gt;使用 GDB 跟踪 QEMU 的具体执行细节.&lt;/p&gt;
&lt;p&gt;接 [上文](&lt;a href=&#34;https://www.frytea&#34;&gt;https://www.frytea&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Qemu，KVM，Virsh 概念指南</title>
      <link>https://frytea.com/archives/1214/</link>
      <pubDate>Mon, 06 Dec 2021 06:10:11 +0000</pubDate>
      <guid>https://frytea.com/archives/1214/</guid>
      <description>&lt;p&gt;一次搞懂 qemu、kvm、virsh 区别.&lt;/p&gt;
&lt;p&gt;当你安装了一台Linux，想启动一个KVM虚拟机的&lt;/p&gt;</description>
    </item>
    <item>
      <title>Libvirt domblkinfo 命令源码跟踪记 (GDB)</title>
      <link>https://frytea.com/archives/1257/</link>
      <pubDate>Mon, 06 Dec 2021 06:03:38 +0000</pubDate>
      <guid>https://frytea.com/archives/1257/</guid>
      <description>&lt;p&gt;使用 GDB 跟踪 libvirt 命令执行过程的具体执行细节.&lt;/p&gt;
&lt;p&gt;最近发现环境中 KVM 虚拟机磁&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 Cloud Studio 撰写、预览 Hugo 的配置方法</title>
      <link>https://frytea.com/archives/1265/</link>
      <pubDate>Thu, 02 Dec 2021 06:32:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1265/</guid>
      <description>&lt;p&gt;使用 Cloud Studio 在云端编辑、预览、发布博客。&lt;/p&gt;
&lt;p&gt;![https://cdn-imag&lt;/p&gt;</description>
    </item>
    <item>
      <title>从零构建 Docker 镜像 | 申威下从零构建 debian 并打包为 docker</title>
      <link>https://frytea.com/archives/1242/</link>
      <pubDate>Thu, 02 Dec 2021 02:24:39 +0000</pubDate>
      <guid>https://frytea.com/archives/1242/</guid>
      <description>&lt;p&gt;基于 debootstrap 从零生成最小 debian 并制作 docker 镜像.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[de&lt;/p&gt;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>从零构建 Docker 镜像 | 基于 busybox 制作 | 深入理解 Docker 镜像构建</title>
      <link>https://frytea.com/archives/1229/</link>
      <pubDate>Fri, 26 Nov 2021 08:16:40 +0000</pubDate>
      <guid>https://frytea.com/archives/1229/</guid>
      <description>&lt;p&gt;基于 busybox 无依赖的构建带有基础 unix 工具集的 docker 镜像.&lt;/p&gt;
&lt;h2 id=&#34;前置知&#34;&gt;前置知&lt;/h2&gt;</description>
    </item>
    <item>
      <title>perl &#39;-&amp;gt;&#39; 和 &#39;::&#39; 的区别 | 方法和函数的区别</title>
      <link>https://frytea.com/archives/1222/</link>
      <pubDate>Wed, 24 Nov 2021 17:38:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1222/</guid>
      <description>&lt;p&gt;最近在看 PVE 源码时看到这样一段： # old code uses PVE::RPCEnviro&lt;/p&gt;</description>
    </item>
    <item>
      <title>perl &#39;-&amp;gt;&#39; 和 &#39;::&#39; 的区别 | 方法和函数的区别</title>
      <link>https://frytea.com/archives/600/</link>
      <pubDate>Wed, 24 Nov 2021 09:38:00 +0000</pubDate>
      <guid>https://frytea.com/archives/600/</guid>
      <description>&lt;p&gt;最近在看 PVE 源码时看到这样一段：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# old code uses PVE::RPCEnvironment::get(); 使用冒号表示调用函数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# new code should use PVE::RPCEnvironment-&amp;gt;get(); 使用箭头表示法调用方法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;sub&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; PVE::RESTEnvironment&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;get();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;好奇两种调用方式是什么区别，经过研究，我在这篇文章&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;找到答案，两者差异在于：&lt;/p&gt;</description>
    </item>
    <item>
      <title>最新 2021 Win10 LTSC 20H1 安装激活方法</title>
      <link>https://frytea.com/archives/599/</link>
      <pubDate>Sun, 21 Nov 2021 06:54:27 +0000</pubDate>
      <guid>https://frytea.com/archives/599/</guid>
      <description>&lt;p&gt;我个人日常使用操作系统主要是 Linux 或 MacOS，但在一些特殊情况下，一些工作使用 Windows 桌面处理起来会方便一些（比如 Linux 环境时需要首发企业微信等），于是我会在公司内网云平台或是台式机上安装一个 Win10 桌面系统。&lt;/p&gt;</description>
    </item>
    <item>
      <title>深入理解 Linux 启动过程 | QEMU 启动 linux 内核和自制根文件系统</title>
      <link>https://frytea.com/archives/1272/</link>
      <pubDate>Wed, 17 Nov 2021 03:29:39 +0000</pubDate>
      <guid>https://frytea.com/archives/1272/</guid>
      <description>&lt;p&gt;故事开始的地方，深入 Linux 系统的启动流程，自己编译内核并制作根文件系统，并使用 QEMU 模&lt;/p&gt;</description>
    </item>
    <item>
      <title>两种终端跑分方法介绍 | Linux 下如何跑分</title>
      <link>https://frytea.com/archives/1209/</link>
      <pubDate>Wed, 17 Nov 2021 01:20:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1209/</guid>
      <description>&lt;p&gt;介绍两种 Linux 环境下测试硬件性能的方法.&lt;/p&gt;
&lt;p&gt;在 Linux 环境下如何测试 CPU 等硬件和&lt;/p&gt;</description>
    </item>
    <item>
      <title>把 FireFox 装进 Docker ｜ VPS/群晖 搭建『云端/内网 浏览器』</title>
      <link>https://frytea.com/archives/1181/</link>
      <pubDate>Fri, 12 Nov 2021 15:54:19 +0000</pubDate>
      <guid>https://frytea.com/archives/1181/</guid>
      <description>&lt;p&gt;云端服务器安装远程浏览器。&lt;/p&gt;
&lt;p&gt;为了操作家里的群晖服务器，之前一直是通过 VPN 或是Todesk、向&lt;/p&gt;</description>
    </item>
    <item>
      <title>申威（神/声）（SW）1621 &#43; UOS 20 编译安装 Docker | 容器国产化适配</title>
      <link>https://frytea.com/archives/598/</link>
      <pubDate>Wed, 10 Nov 2021 10:08:00 +0000</pubDate>
      <guid>https://frytea.com/archives/598/</guid>
      <description>&lt;h2 id=&#34;环境&#34;&gt;环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OS: &lt;code&gt;UOS 20 1021 12011.101&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;CPU: &lt;code&gt;SW_64&lt;/code&gt; &lt;code&gt;SW1621&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;步骤&#34;&gt;步骤&lt;/h2&gt;
&lt;h3 id=&#34;本地编译-runc&#34;&gt;本地编译 runc&lt;/h3&gt;
&lt;p&gt;1.解压 runc 源码至 &lt;code&gt;~/go/src/github.com/opencontainers&lt;/code&gt; 目录；&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~/go/                                                                                
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└── src                                                                                              
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    └── github.com                                                                                       
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        └── opencontainers                                                                           
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            └── runc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.进入 &lt;code&gt;runc&lt;/code&gt; 主目录，替换 &lt;code&gt;vendor/golang.org/x/sys/unix&lt;/code&gt; 目录为申威平台 &lt;code&gt;golang1.14.1&lt;/code&gt; 源码 &lt;code&gt;go-sw64-1.14.1/src/cmd/vendor/golang.org/x/sys/unix&lt;/code&gt; 目录。&lt;/p&gt;
&lt;p&gt;3.修改 &lt;code&gt;libcontainer/system/syscall_linux_64.go&lt;/code&gt; 文件，在文件头添加 sw64 架构定义 &lt;code&gt;//+build sw64&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 下新硬盘分区、格式化、挂载全流程</title>
      <link>https://frytea.com/archives/597/</link>
      <pubDate>Tue, 09 Nov 2021 07:45:00 +0000</pubDate>
      <guid>https://frytea.com/archives/597/</guid>
      <description>&lt;p&gt;互联网上搜索到的 Linux 环境新磁盘配置方法资料质量都不尽如人意，因此自己整理了一份，日常 Linux 磁盘分区时查阅足够了，主要是用到了 &lt;code&gt;fdisk&lt;/code&gt; 命令。&lt;/p&gt;
&lt;h2 id=&#34;fdisk-基本使用&#34;&gt;&lt;code&gt;fdisk&lt;/code&gt; 基本使用&lt;/h2&gt;
&lt;p&gt;新增硬盘后，在linux系统下输入 &lt;code&gt;fdisk -l&lt;/code&gt; 命令查看当前磁盘信息：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 解决远程连接的“Gtk-WARNING **: cannot open display;”</title>
      <link>https://frytea.com/archives/595/</link>
      <pubDate>Mon, 08 Nov 2021 10:43:30 +0000</pubDate>
      <guid>https://frytea.com/archives/595/</guid>
      <description>&lt;h2 id=&#34;问题重现&#34;&gt;问题重现&lt;/h2&gt;
&lt;p&gt;在使用 libvirt 管理虚拟机时，有时会用到 virt-manager 提供的图形界面管理虚拟机，查看 vnc 输出等，但是常常会得到如下错误：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;virt-manager:25381&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: Gtk-WARNING **: 08:55:23.876: cannot open display:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;linux-解决&#34;&gt;Linux 解决&lt;/h2&gt;
&lt;p&gt;如果是在 Linux 桌面环境，解决方法很简单，只需要这样连接远程服务器就可以了：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 对比文件差异 | Linux 下同屏查看文件差异并修改</title>
      <link>https://frytea.com/archives/594/</link>
      <pubDate>Mon, 08 Nov 2021 04:31:37 +0000</pubDate>
      <guid>https://frytea.com/archives/594/</guid>
      <description>&lt;p&gt;在 windows 下有如 Beyond Compare 这样的文本对比工具，而在 Linux 其实预装了很好用的文本对比工具 → &lt;code&gt;vimdiff&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;使用方法很简单：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vimdiff &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;options&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; file1 file2 &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;file3 &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;file4&lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;比如这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vimdiff Release Release.new
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果是这样的：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;https://imagehost-cdn.frytea.com/images/2021/11/08/2021-11-08-12-28-16e0dfc839621b06b8.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2021/11/08/2021-11-08-12-28-16e0dfc839621b06b8.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;可以使用 &lt;code&gt;Ctrl + w + 方向键 # 切换到前／下／上／后一个窗格&lt;/code&gt; 切换窗格，使用 &lt;code&gt;i&lt;/code&gt; 进行编辑，操作同多窗口 &lt;code&gt;Vim&lt;/code&gt; ，使用起来很方便，效果很惊艳，效率很高。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perl 编译安装 （Linux）</title>
      <link>https://frytea.com/archives/1197/</link>
      <pubDate>Fri, 05 Nov 2021 01:20:18 +0000</pubDate>
      <guid>https://frytea.com/archives/1197/</guid>
      <description>&lt;p&gt;Centos 下演示编译安装 Perl 环境的方法.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perl&lt;/strong&gt;是[高端](https://&lt;/p&gt;</description>
    </item>
    <item>
      <title>配置 Ubuntu 软件包管理 apt 的国内镜像源（Debian 系通用）</title>
      <link>https://frytea.com/archives/1202/</link>
      <pubDate>Fri, 05 Nov 2021 00:46:42 +0000</pubDate>
      <guid>https://frytea.com/archives/1202/</guid>
      <description>&lt;p&gt;Ubuntu 软件包管理采用国内镜像源的配置方法.&lt;/p&gt;
&lt;p&gt;Ubuntu 是目前较为流行的 Linux 发&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 20.04 修改网卡配置</title>
      <link>https://frytea.com/archives/1239/</link>
      <pubDate>Fri, 05 Nov 2021 00:32:22 +0000</pubDate>
      <guid>https://frytea.com/archives/1239/</guid>
      <description>&lt;p&gt;Ubuntu 新版网络配置方法.&lt;/p&gt;
&lt;p&gt;近期常常用到 Ubuntu 20.04 server 镜像，在一&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 16.04 网卡配置方法</title>
      <link>https://frytea.com/archives/1269/</link>
      <pubDate>Fri, 05 Nov 2021 00:30:54 +0000</pubDate>
      <guid>https://frytea.com/archives/1269/</guid>
      <description>&lt;p&gt;Ubuntu 旧版网卡配置方法.&lt;/p&gt;
&lt;p&gt;ubuntu 16.04 配置网卡的方法还是比较经典的做法，与&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 实现零空间开销交换两个数的值</title>
      <link>https://frytea.com/archives/1266/</link>
      <pubDate>Wed, 03 Nov 2021 06:48:31 +0000</pubDate>
      <guid>https://frytea.com/archives/1266/</guid>
      <description>&lt;p&gt;C 实现的不引入新变量交换两数的方法.&lt;/p&gt;
&lt;p&gt;最近看到一个问题感觉很有意思：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“如何在不申请临时变&lt;/p&gt;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Linux 系统时间校对方法</title>
      <link>https://frytea.com/archives/1248/</link>
      <pubDate>Wed, 03 Nov 2021 06:44:16 +0000</pubDate>
      <guid>https://frytea.com/archives/1248/</guid>
      <description>&lt;p&gt;使用 ntp 校对 Linux 系统时间的方法.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Linux&lt;/code&gt; 中有个 &lt;code&gt;ntp&lt;/code&gt; 包可以自动校&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bash快捷指令</title>
      <link>https://frytea.com/archives/1244/</link>
      <pubDate>Wed, 03 Nov 2021 06:39:21 +0000</pubDate>
      <guid>https://frytea.com/archives/1244/</guid>
      <description>&lt;p&gt;常用指令速查.&lt;/p&gt;
&lt;h2 id=&#34;查看磁盘使用情况命令&#34;&gt;查看磁盘使用情况命令&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ df -lh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 查看磁盘使用情况及文件系统挂载位置， -h 为根据大小适当显示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ fdisk -l              &lt;span style=&#34;color:#75715e&#34;&gt;# 查看磁盘分区表及分区结构, -l 获得所有硬盘的分区情况&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ du -sh                &lt;span style=&#34;color:#75715e&#34;&gt;# 查看当前目录的大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ du -lh --max-depth&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 查看当前目录下一级子文件和子目录占用的磁盘容量。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# df -lh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;文件系统                        容量  已用  可用 已用% 挂载点
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;devtmpfs                        937M     &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;  937M    0% /dev
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tmpfs                           958M     &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;  958M    0% /dev/shm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tmpfs                           383M  924K  383M    1% /run
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/mapper/fedora_fedora-root   15G  5.1G   10G   34% /
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tmpfs                           958M  4.0K  958M    1% /tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/sda2                      1014M  193M  822M   19% /boot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/sda1                       599M  8.5M  591M    2% /boot/efi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tmpfs                           192M  4.0K  192M    1% /run/user/0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# fdisk -l&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Disk /dev/sda：127 GiB，136365211648 字节，266338304 个扇区
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;磁盘型号：Virtual Disk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;单元：扇区 / &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; * 512 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;扇区大小&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;逻辑/物理&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;：512 字节 / &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I/O 大小&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;最小/最佳&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;：4096 字节 / &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;磁盘标签类型：gpt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;磁盘标识符：83C725D2-CC2F-428D-9B8F-195886809B76
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;设备          起点      末尾      扇区   大小 类型
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/sda1     &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;1230847&lt;/span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;1228800&lt;/span&gt;   600M EFI 系统
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/sda2  &lt;span style=&#34;color:#ae81ff&#34;&gt;1230848&lt;/span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;3327999&lt;/span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;2097152&lt;/span&gt;     1G Linux 文件系统
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/sda3  &lt;span style=&#34;color:#ae81ff&#34;&gt;3328000&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;266336255&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;263008256&lt;/span&gt; 125.4G Linux LVM
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Disk /dev/mapper/fedora_fedora-root：15 GiB，16106127360 字节，31457280 个扇区
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;单元：扇区 / &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; * 512 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;扇区大小&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;逻辑/物理&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;：512 字节 / &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I/O 大小&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;最小/最佳&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;：4096 字节 / &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Disk /dev/zram0：957 MiB，1003487232 字节，244992 个扇区
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;单元：扇区 / &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; * 4096 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;扇区大小&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;逻辑/物理&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;：4096 字节 / &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;I/O 大小&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;最小/最佳&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;：4096 字节 / &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt; 字节
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;git-设置和取消代理&#34;&gt;git 设置和取消代理&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global http.proxy http://192.168.6.233:7890
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global https.proxy https://192.168.6.233:7890
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global http.proxy http://127.0.0.1:7890
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global https.proxy https://127.0.0.1:7890
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;只对github进行代理，对国内的仓库不影响
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global http.https://github.com.proxy http://192.168.6.107:7890
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global https.https://github.com.proxy https://192.168.6.107:7890
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global http.https://github.com.proxy http://127.0.0.1:7890
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global https.https://github.com.proxy https://127.0.0.1:7890
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global --unset http.proxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global --unset https.proxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm config delete proxy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;设置和取消代理&#34;&gt;设置和取消代理&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;export&lt;/span&gt; http_proxy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.6.233&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7890&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;export&lt;/span&gt; https_proxy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.6.233&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7890&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;export&lt;/span&gt; http_proxy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;socks5://127.0.0.1:7070&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;export&lt;/span&gt; https_proxy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;socks5://127.0.0.1:7070&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;要取消该设置：&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unset http_proxy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unsethttps_proxy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.huaweicloud.com/articles/0ae40c31c4f17389a3313b022bcbdd21.html&#34;&gt;Linux查看磁盘使用情况命令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.runoob.com/w3cnote/linux-view-disk-space.html&#34;&gt;Linux 查看磁盘空间&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/db2china/article/details/84032137&#34;&gt;linux 查看当前目录占用空间&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Tcpdump</title>
      <link>https://frytea.com/archives/1204/</link>
      <pubDate>Wed, 03 Nov 2021 06:37:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1204/</guid>
      <description>&lt;p&gt;一个运行在命令行下的抓包工具.&lt;/p&gt;
&lt;p&gt;本文整理转自：[tcpdump参数解析及使用详解](https:/&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 一键编译运行 C/C&#43;&#43;</title>
      <link>https://frytea.com/archives/1184/</link>
      <pubDate>Wed, 03 Nov 2021 06:30:19 +0000</pubDate>
      <guid>https://frytea.com/archives/1184/</guid>
      <description>&lt;p&gt;一种按键映射自动编译运行 C/C++ 的方法&lt;/p&gt;
&lt;p&gt;下面这段 &lt;code&gt;vimrc&lt;/code&gt; 配置提供了一个按键映射，实&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 多窗口、多文件之间切换</title>
      <link>https://frytea.com/archives/1251/</link>
      <pubDate>Wed, 03 Nov 2021 06:24:33 +0000</pubDate>
      <guid>https://frytea.com/archives/1251/</guid>
      <description>&lt;p&gt;介绍 vim 多窗口以及多文件之间的切换方法&lt;/p&gt;
&lt;h2 id=&#34;一vim-多文件多窗口&#34;&gt;一、vim 多文件、多窗口&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ vim file1 file2 ... filen &lt;span style=&#34;color:#75715e&#34;&gt;# 打开所有想要打开的文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或在 vim 中使用以下命令：&lt;/p&gt;</description>
    </item>
    <item>
      <title>vim 代码折叠之设置默认代码不折叠</title>
      <link>https://frytea.com/archives/1235/</link>
      <pubDate>Wed, 03 Nov 2021 06:22:02 +0000</pubDate>
      <guid>https://frytea.com/archives/1235/</guid>
      <description>&lt;p&gt;简单介绍 vim 代码折叠及配置&lt;/p&gt;
&lt;p&gt;配置 &lt;code&gt;foldmethod&lt;/code&gt; 可以定义折叠方式，有6种可选方式&lt;/p&gt;</description>
    </item>
    <item>
      <title>VIM 文件自动添加头部注释的方法</title>
      <link>https://frytea.com/archives/1249/</link>
      <pubDate>Wed, 03 Nov 2021 06:13:38 +0000</pubDate>
      <guid>https://frytea.com/archives/1249/</guid>
      <description>&lt;p&gt;一种 vim 创建文件时自动添加头部注释的方法&lt;/p&gt;
&lt;p&gt;修改 &lt;code&gt;/etc/vimrc&lt;/code&gt; 或 `~/.vim&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 安装插件管理器 Vundle</title>
      <link>https://frytea.com/archives/1228/</link>
      <pubDate>Wed, 03 Nov 2021 06:04:30 +0000</pubDate>
      <guid>https://frytea.com/archives/1228/</guid>
      <description>&lt;p&gt;Vundle 是 Vim bundle 的简称,是一个 Vim 插件管理器&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Vundle&lt;/code&gt; 是&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uname</title>
      <link>https://frytea.com/archives/1201/</link>
      <pubDate>Sun, 31 Oct 2021 03:47:24 +0000</pubDate>
      <guid>https://frytea.com/archives/1201/</guid>
      <description>&lt;p&gt;打印当前计算机和操作系统的名称、版本及其他细节.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;uname&lt;/strong&gt;（_unix name_的简写&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tmux</title>
      <link>https://frytea.com/archives/1224/</link>
      <pubDate>Sat, 30 Oct 2021 16:26:08 +0000</pubDate>
      <guid>https://frytea.com/archives/1224/</guid>
      <description>&lt;p&gt;一个终端复用器。&lt;/p&gt;
&lt;p&gt;Tmux 是一个终端复用器（terminal multiplexer），用起来就&lt;/p&gt;</description>
    </item>
    <item>
      <title>优质软件集</title>
      <link>https://frytea.com/archives/1144/</link>
      <pubDate>Thu, 28 Oct 2021 07:08:22 +0000</pubDate>
      <guid>https://frytea.com/archives/1144/</guid>
      <description>&lt;p&gt;汇总个人在用/用过的优质软件，开源为主，方便查阅并与大家分享.&lt;/p&gt;
&lt;h2 id=&#34;日用软件集&#34;&gt;日用软件集&lt;/h2&gt;
&lt;p&gt;名称&lt;/p&gt;
&lt;p&gt;类别&lt;/p&gt;</description>
    </item>
    <item>
      <title>deb 软件包里都有什么</title>
      <link>https://frytea.com/archives/591/</link>
      <pubDate>Thu, 28 Oct 2021 03:32:28 +0000</pubDate>
      <guid>https://frytea.com/archives/591/</guid>
      <description>&lt;p&gt;日常工作学习常常会在 Debian 系操作系统中完成，特别是最近自己开始打包、安装，发现 .deb 安装包甚至可以包含内核，且 Debian 就是通过这种方式来管理内核的，那么 deb 软件包中究竟有那些内容呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Adsense 注意事项</title>
      <link>https://frytea.com/archives/590/</link>
      <pubDate>Wed, 27 Oct 2021 16:21:06 +0000</pubDate>
      <guid>https://frytea.com/archives/590/</guid>
      <description>&lt;p&gt;最近刚刚通过了 Google Adsense 的审核，加入了其联盟，兴奋之余不忘思考，既然如此艰难的通过了审核，虽然我也不知道为什么之前为什么一直不通过（没有给出具体原因），我也不知道为什么突然就通过了。总之来之不易，一定加倍珍惜，多多输出好的内容来回报社会。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CDN 中的 「回源HOST」与「源站」</title>
      <link>https://frytea.com/archives/589/</link>
      <pubDate>Wed, 27 Oct 2021 16:11:48 +0000</pubDate>
      <guid>https://frytea.com/archives/589/</guid>
      <description>&lt;p&gt;在配置网站 CDN 时总是搞不清其中「回源HOST」与「源站」的区别，因此在这里简单记录。&lt;/p&gt;
&lt;p&gt;源站和回源HOST的区别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;源站：源站决定了回源时请求到的&lt;strong&gt;具体IP地址&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;回源HOST：回源HOST决定了回源请求访问到该IP地址上的&lt;strong&gt;具体站点&lt;/strong&gt;。回源HOST即&lt;strong&gt;回源域名&lt;/strong&gt;，当源站服务器上提供多个域名服务时，CDN节点回源时在源站访问的具体站点域名。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;例子一源站是域名&#34;&gt;&lt;strong&gt;例子一：源站是域名&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;如果源站为**&lt;code&gt;www.a.com&lt;/code&gt;&lt;strong&gt;，回源HOST为&lt;/strong&gt;&lt;code&gt;www.b.com&lt;/code&gt;&lt;strong&gt;。那么实际回源是请求到&lt;/strong&gt;&lt;code&gt;www.a.com&lt;/code&gt;&lt;strong&gt;解析到的IP地址其对应主机上的&lt;/strong&gt;&lt;code&gt;www.b.com&lt;/code&gt;**站点。&lt;/p&gt;</description>
    </item>
    <item>
      <title>新 Hugo 博客相关记录笔记</title>
      <link>https://frytea.com/archives/588/</link>
      <pubDate>Wed, 27 Oct 2021 16:10:00 +0000</pubDate>
      <guid>https://frytea.com/archives/588/</guid>
      <description>&lt;p&gt;2021年10月21日，基于以下原因，我打算重建自己的博客，这次直接使用顶级域名：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.frytea.com&#34;&gt;blog.frytea.com&lt;/a&gt; 内容太过庞杂，不成体系，很难重新做规整；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.frytea.com&#34;&gt;blog.frytea.com&lt;/a&gt; 目前采用的付费主题虽然各方面做的都比较均衡，但是在google网站扫描过程中还是发现许多加载缓慢的因素，无法优化；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.frytae.com&#34;&gt;blog.frytae.com&lt;/a&gt; 作为我的主站申请 google adsense 多次没有通过，原因未知；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.frytea.com&#34;&gt;blog.frytea.com&lt;/a&gt; 目前主题由于其定位，无法作为一个个人网站的索引，目前是分成两套体系分别进行。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;新网站目标&#34;&gt;新网站目标&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;内容成体系、有结构、有深度&lt;/li&gt;
&lt;li&gt;可作为个人引导页，引导到我的各种其他站点&lt;/li&gt;
&lt;li&gt;SEO 友好&lt;/li&gt;
&lt;li&gt;包含各种宣传自己的页面：产品集、个人简历等；&lt;/li&gt;
&lt;li&gt;分专题来撰写文章：技术探索、奇思妙想、人生复盘；最终希望每一部分都能作为一本书进行。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;新网站参考&#34;&gt;新网站参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;静态网站生成引擎使用：&lt;a href=&#34;https://gohugo.io&#34;&gt;hugo&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;网站博客主题基于 &lt;a href=&#34;https://github.com/adityatelange/hugo-PaperMod/&#34;&gt;PaperMod&lt;/a&gt; 进行定制；&lt;/li&gt;
&lt;li&gt;网站评论系统使用 &lt;a href=&#34;https://valine.js.org/&#34;&gt;Valine&lt;/a&gt; 并采用其拓展用用 &lt;a href=&#34;https://github.com/zhaojun1998/Valine-Admin&#34;&gt;Valine-Admin&lt;/a&gt; 强化功能；&lt;/li&gt;
&lt;li&gt;网站背景使用 &lt;a href=&#34;https://www.svgbackgrounds.com&#34;&gt;SVG Background&lt;/a&gt; 生成；&lt;/li&gt;
&lt;li&gt;内容协议采用 &lt;a href=&#34;http://creativecommons.org/licenses/by-nc-sa/4.0/&#34;&gt;知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;字体参考 《&lt;strong&gt;&lt;a href=&#34;https://ridiqulous.com/chinese-webfont-guide/&#34;&gt;中文网页字体设置方案：从 font-family 到 font-display&lt;/a&gt;&lt;/strong&gt;》进行配置；&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;网站定制开发参考&#34;&gt;网站定制开发参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/adityatelange/hugo-PaperMod/wiki&#34;&gt;PaperMod Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/clairecodes/how-to-create-a-polka-dot-background-with-css-23m0&#34;&gt;How to Create a Polka Dot Background with CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://huangzhongde.cn/post/2020-02-20-hugo-comments-plugin-valine/&#34;&gt;Hugo评论插件集成之Valine&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.affde.com/zh-CN/how-to-get-adsense-approval.html&#34;&gt;如何在2020年快速获得Adsense批准（提示和技巧）&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developers.google.com/search/blog/2014/10/best-practices-for-xml-sitemaps-rssatom&#34;&gt;Best practices for XML sitemaps &amp;amp; RSS/Atom feeds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gohugo.io/templates/rss/&#34;&gt;Hugo RSS Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gohugo.io/templates/sitemap-template/&#34;&gt;Hugo Sitemap Template&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ridiqulous.com/chinese-webfont-guide/&#34;&gt;中文网页字体设置方案：从 font-family 到 font-display&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;参考博客
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://creative.clox.nu&#34;&gt;I&amp;rsquo;m cloxnu&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://huangzhongde.cn&#34;&gt;黄忠德的博客&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;免责声明参考
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://plumwine.me/terms/&#34;&gt;Plum Wine Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.runoob.com/disclaimer&#34;&gt;菜鸟教程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ldqk.xyz/disclaimer&#34;&gt;网站免责声明与法律条文&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;http://www.oldding.net/mianzeshengming&#34;&gt;老丁的技术博客免责声明&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Homebrew 安装策略（M1芯片 Macbook）</title>
      <link>https://frytea.com/archives/587/</link>
      <pubDate>Wed, 27 Oct 2021 16:08:29 +0000</pubDate>
      <guid>https://frytea.com/archives/587/</guid>
      <description>&lt;p&gt;换了 m1 芯片的 Macbook 之后第一个感受到的就是使用 homebrew 的不一样，由于不同的芯片架构，其安装方法也有不同，在这简单记录。&lt;/p&gt;
&lt;h2 id=&#34;arm-mac-安装步骤&#34;&gt;Arm Mac 安装步骤&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# arm homebrew 同时设为国内源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/bin/zsh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl -fsSL https://gitee.com/huwei1024/HomebrewCN/raw/master/Homebrew.sh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 可在 .bashrc 追加下列内容实现 intel 和 arm 共存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias abrew&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;arch -arm64 /opt/homebrew/bin/brew&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias ibrew&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;arch -x86_64 /usr/local/bin/brew&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;安装更新国内-homebrew-镜像源&#34;&gt;安装更新国内 homebrew 镜像源&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-jsx&#34; data-lang=&#34;jsx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/bin/zsh -c &amp;#34;$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;说明&#34;&gt;说明&lt;/h2&gt;
&lt;p&gt;根据官方规划，ARM 版 Homebrew 必须安装在 &lt;code&gt;/opt/homebrew&lt;/code&gt; 路径下，而非此前的 &lt;code&gt;/usr/local/Homebrew&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>pve-kernal 编译安装步骤</title>
      <link>https://frytea.com/archives/586/</link>
      <pubDate>Wed, 20 Oct 2021 01:55:57 +0000</pubDate>
      <guid>https://frytea.com/archives/586/</guid>
      <description>&lt;p&gt;以 pve-release-6.x ，基于 debian buster 为例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Step1: 配置国内 PVE 镜像源&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置 pve 软件包国内镜像源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian buster pve-no-subscription&amp;#34;&lt;/span&gt; &amp;gt; /etc/apt/sources.list.d/pve-no-subscription.list
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ wget https://enterprise.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-6.x.gpg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Setp2：安装依赖包&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install build dependencies (i got these from the pve-kernel/debian/control file):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install asciidoc-base automake bc bison cpio debhelper dh-python file flex gcc git kmod libdw-dev libelf-dev libiberty-dev libnuma-dev libpve-common-perl libslang2-dev libssl-dev libtool lintian lz4 perl-modules python-minimal rsync sed sphinx-common tar xmlto zlib1g-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Step3：获取 pve-kernel 源码&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clone proxmox-kernel&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tmux 使用笔记</title>
      <link>https://frytea.com/archives/585/</link>
      <pubDate>Wed, 13 Oct 2021 06:30:27 +0000</pubDate>
      <guid>https://frytea.com/archives/585/</guid>
      <description>&lt;p&gt;Tmux 是一个终端复用器（terminal multiplexer），用起来就离不开。网上有很多 Tmux 使用指南，但是用下来发现还是自己整理一遍才能真正的记住，于是有了这篇文章，本文意在整理 tmux 最常用操作，详细的操作指南请移步 「&lt;a href=&#34;https://man.openbsd.org/OpenBSD-current/man1/tmux.1&#34;&gt;tmux(1) manual page&lt;/a&gt;」。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cloud-init 概述及 PVE 下创建步骤说明</title>
      <link>https://frytea.com/archives/583/</link>
      <pubDate>Tue, 12 Oct 2021 03:45:28 +0000</pubDate>
      <guid>https://frytea.com/archives/583/</guid>
      <description>&lt;p&gt;Cloud-init 是一个程序，它在启动时在客户机上运行，是用于 &lt;strong&gt;跨平台云实例初始化&lt;/strong&gt; 的行业标准多分发方法。它支持所有主要的 &lt;strong&gt;公共云提供商、私有云基础设施的供应系统和裸机安装&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一个 Notion 一站式记账复盘看板系统 ｜ BJ-PFD 正式发布</title>
      <link>https://frytea.com/archives/578/</link>
      <pubDate>Sat, 25 Sep 2021 15:40:00 +0000</pubDate>
      <guid>https://frytea.com/archives/578/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;今天发生了不少事情，孟晚舟历经千余天终于归国，探访了某通信城，再次回味某一本哈利波特，后被堵在 Apple Store 外面，滑了两下 Pixel 3，汇总了下旧红包，继续设计另一个 full-stack 作品，以及继续努力工作。&lt;/p&gt;</description>
    </item>
    <item>
      <title>原生 clash linux 环境配置方法</title>
      <link>https://frytea.com/archives/577/</link>
      <pubDate>Fri, 24 Sep 2021 02:53:26 +0000</pubDate>
      <guid>https://frytea.com/archives/577/</guid>
      <description>&lt;h2 id=&#34;环境&#34;&gt;环境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu Desktop 20.04 理论适用大部分 Linux 发行版&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Dreamacro&#34;&gt;Dreamacro&lt;/a&gt; / &lt;strong&gt;&lt;a href=&#34;https://github.com/Dreamacro/clash&#34;&gt;clash&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;方法&#34;&gt;方法&lt;/h2&gt;
&lt;h3 id=&#34;步骤一配置-clash-执行程序&#34;&gt;步骤一：配置 clash 执行程序&lt;/h3&gt;
&lt;p&gt;首先从 clash 的github仓拉取稳定版二进制可执行文件&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-jsx&#34; data-lang=&#34;jsx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;wget&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//github.com/Dreamacro/clash/releases/download/v1.7.1/clash-linux-amd64-v1.7.1.gz
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gzip&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clash&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;linux&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;amd64&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.7.1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;gz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mv&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clash&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;linux&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;amd64&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.7.1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bin&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chmod&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bin&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clash&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;为&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clash&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;添加绑定低位端口的权限&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;这样运行clash的时候无需root权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setcap&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cap_net_bind_service&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ep&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bin&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;步骤二配置-clash&#34;&gt;步骤二：配置 clash&lt;/h3&gt;
&lt;p&gt;此时执行 clash ，不会有任何效果，仅仅提供一个 默认端口监听：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker 内部安装 postfix</title>
      <link>https://frytea.com/archives/576/</link>
      <pubDate>Sat, 18 Sep 2021 09:42:36 +0000</pubDate>
      <guid>https://frytea.com/archives/576/</guid>
      <description>&lt;p&gt;今天写 Dockerfile 定制 Docker 镜像需要在内部安装 postfix ，但是其默认安装后会弹出配置界面，DOcker 构建过程是无法进行交互的，结果就是卡在该界面无法继续：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;https://imagehost-cdn.frytea.com/images/2021/09/18/_1631946203798041f1bce8fb47a294.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2021/09/18/_1631946203798041f1bce8fb47a294.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;搜寻一圈发现一个github仓库（&lt;a href=&#34;https://github.com/cisagov&#34;&gt;cisagov&lt;/a&gt;/&lt;strong&gt;&lt;a href=&#34;https://github.com/cisagov/postfix-docker&#34;&gt;postfix-docker&lt;/a&gt;&lt;/strong&gt;）中打包镜像时也包含了 postfix，在这里找到了解决办法，很简单：&lt;/p&gt;</description>
    </item>
    <item>
      <title>自动递归下载依赖 deb 包 bash 脚本</title>
      <link>https://frytea.com/archives/575/</link>
      <pubDate>Sat, 18 Sep 2021 09:35:23 +0000</pubDate>
      <guid>https://frytea.com/archives/575/</guid>
      <description>&lt;h2 id=&#34;说明&#34;&gt;说明&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;脚本自动递归下载给定包列表deb包及其依赖包，深度3层；&lt;/li&gt;
&lt;li&gt;若指定参数则下载给定的包及其依赖包（目前仅支持指定1个包，不支持多包）；&lt;/li&gt;
&lt;li&gt;若无参数则默认下载列表中给出的包机器依赖包；&lt;/li&gt;
&lt;li&gt;下载到当前目录；&lt;/li&gt;
&lt;li&gt;请提前配置好源。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;logfile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;./auto_deps_log
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 需要获取其所依赖包的包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 或者用$1，从命令行输入库名字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;libs&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gdisk logrotate pciutils systemd lvm2 udev logrotate libfuse2 iptables libnetfilter-conntrack3 libnfnetlink0 libusb-1.0-0 cpio xfsprogs libprotobuf-c1 liblmdb0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ret&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; getDepends&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fileName is&amp;#34;&lt;/span&gt; $1&amp;gt;&amp;gt;$logfile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;# use tr to del &amp;lt; &amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   ret&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;apt-cache depends $1|grep Depends |cut -d: -f2 |tr -d &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   echo $ret|tee  -a $logfile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; ! -n &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$*&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; ;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;you have not input a word! get list: &lt;/span&gt;$libs&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;the list you input is &lt;/span&gt;$*&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    libs&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;get &lt;/span&gt;$libs&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# download libs dependen. deep in 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; $i -lt &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; ;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    let i++
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo $i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# download libs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    newlist&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; j in $libs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        added&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;getDepends $j&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        newlist&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$newlist&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;$added&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        apt-get download $added $j
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    libs&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$newlist
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.jianshu.com/p/31159cd0e2fa&#34;&gt;shell获取命令行参数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/faster/p/13887759.html&#34;&gt;apt一键下载deb包及其依赖&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Bullet Journal for Notion 之个人财务架构 ｜ 好的设计胜千言</title>
      <link>https://frytea.com/archives/574/</link>
      <pubDate>Mon, 13 Sep 2021 14:41:50 +0000</pubDate>
      <guid>https://frytea.com/archives/574/</guid>
      <description>&lt;p&gt;前些日子发布的 Bullet Journal 模版及其附属看板程序 BJ-PFD 得到许多朋友的关注，看到大家的留言我很开心。根据之前发布的教程，在您的 Notion 中应该有了一个比较完备的 Bullet Journa 复盘模版，并且可以使用 BJ-PFD 看到统计的个人财物报表了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bullet Journal for Notion 之快速入门</title>
      <link>https://frytea.com/archives/573/</link>
      <pubDate>Sat, 11 Sep 2021 08:49:10 +0000</pubDate>
      <guid>https://frytea.com/archives/573/</guid>
      <description>&lt;p&gt;前些日子我的 BJ for Notion 辅助看板工具 —— BJ-PFD，专注于个人财务看板的小工具正式发布啦。再公布了预览之后得到许多热心网友的关注，我也真心的希望这个小工具能带给更多人价值。于是今天就带来了这篇《Bullet Journal for Notion 之快速入门》，目的在于快速配置，从注册 Notion 开始，带您快速看到效果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows Terminal 快速快捷键指南</title>
      <link>https://frytea.com/archives/572/</link>
      <pubDate>Fri, 10 Sep 2021 10:06:00 +0000</pubDate>
      <guid>https://frytea.com/archives/572/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + T&lt;/code&gt; 打开默认配置文件的新标签。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + N&lt;/code&gt; 其他指定配置文件新标签。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt + Shift + D&lt;/code&gt; 复制并拆分窗格。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Alt + N&lt;/code&gt; 切换打开的控制台&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt;+ &lt;code&gt;+&lt;/code&gt; 复制垂直窗格&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;-&lt;/code&gt; 复制水平窗格&lt;/li&gt;
&lt;li&gt;按住 &lt;code&gt;Alt&lt;/code&gt; 键，然后使用光标键在键盘上的 &lt;strong&gt;活动窗格之间切换&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt + Shift&lt;/code&gt; 并使用光标键相应地&lt;strong&gt;调整窗格&lt;/strong&gt;的大小。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt + Shift + W&lt;/code&gt;  或输入终端的标准退出命令（通常是 &lt;code&gt;exit&lt;/code&gt; ）来关闭活动窗格或选项卡。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;+&lt;/code&gt; 和 &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;-&lt;/code&gt; 来调整活动终端的&lt;strong&gt;文本大小 or&lt;/strong&gt; 按住 &lt;code&gt;Ctrl&lt;/code&gt;  并滚动鼠标滚轮。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl&lt;/code&gt;  +  ⬆ or ⬇ or &lt;code&gt;Page Up&lt;/code&gt; or &lt;code&gt;Page Down&lt;/code&gt; 键 &lt;strong&gt;滚动视窗&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + F&lt;/code&gt; 打开搜索框&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/272082726&#34;&gt;Windows Terminal完整指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_42815609/article/details/107451481&#34;&gt;Windows Terminal 窗口/控制台切换快捷键总结&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sitepoint.com/windows-terminal/&#34;&gt;Windows Terminal: The Complete Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Bullet Journal for Notion 之概览</title>
      <link>https://frytea.com/archives/571/</link>
      <pubDate>Thu, 09 Sep 2021 16:31:00 +0000</pubDate>
      <guid>https://frytea.com/archives/571/</guid>
      <description>&lt;p&gt;最近几乎花费全部业余时间制作了一个 BJ for Notion 辅助看板工具，配合我做的 Bj 模版使用。本文主要就是做一个预览，具体的使用方法后面慢慢出文介绍。话不多说，直接看效果吧！&lt;/p&gt;</description>
    </item>
    <item>
      <title>Libpcap 落地包转发及性能调优</title>
      <link>https://frytea.com/archives/570/</link>
      <pubDate>Tue, 07 Sep 2021 07:34:30 +0000</pubDate>
      <guid>https://frytea.com/archives/570/</guid>
      <description>&lt;p&gt;近期接到一个需求，需要使用 libpcap 从某网卡抓包发送到另一张网卡，关于 libpcap 的使用方法在这里不再赘述，网上有很多教程，本文最后会给出一个示例程序。这里记录一个转发效率性能调优的方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一键在 vs code online 中打开任意 github 仓库</title>
      <link>https://frytea.com/archives/568/</link>
      <pubDate>Fri, 03 Sep 2021 09:58:13 +0000</pubDate>
      <guid>https://frytea.com/archives/568/</guid>
      <description>&lt;p&gt;之前有大佬开发过一个项目 &lt;code&gt;[github1s](https://github.com/conwnet/github1s)&lt;/code&gt; ，利用 GitHub action ，仅需在任意 github 仓库在 &lt;code&gt;github&lt;/code&gt; 后面加上 &lt;code&gt;1s&lt;/code&gt; 即可在一个在线的 VS code 中打开这个项目。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;https://imagehost-cdn.frytea.com/images/2021/09/03/2021-09-03-5.51.4487ec1eade813be27.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2021/09/03/2021-09-03-5.51.4487ec1eade813be27.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;就在前不久，Github 官方发布了类似的功能，进一步简化了这个过程，仅需在仓库的 web 页面，按下 &lt;code&gt;.&lt;/code&gt; 键，没错就是键盘上那个句号，github 就会打开一个在线的 VS code 并开启该仓库，您就可以更方便的浏览这个仓库了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>虚拟机 img 镜像密码修改</title>
      <link>https://frytea.com/archives/567/</link>
      <pubDate>Fri, 03 Sep 2021 07:29:19 +0000</pubDate>
      <guid>https://frytea.com/archives/567/</guid>
      <description>&lt;p&gt;本文介绍使用 &lt;code&gt;libguestfs-tools&lt;/code&gt; 修改镜像文件密码的方法。&lt;/p&gt;
&lt;h2 id=&#34;步骤&#34;&gt;步骤&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# CentOS Linux release 7.9.2009 (AltArch)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 鲲鹏 ARM 服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;第一步检查并修改qemu访问虚拟机镜像的权限&#34;&gt;第一步：检查并修改qemu访问虚拟机镜像的权限&lt;/h3&gt;
&lt;p&gt;修改 qemu 配置文件 &lt;code&gt;/etc/libvirt/qemu.conf&lt;/code&gt;，将 &lt;code&gt;user = &amp;quot;root&amp;quot;&lt;/code&gt; 和 &lt;code&gt;group = &amp;quot;root&amp;quot;&lt;/code&gt;  注释取消，并重启 libvirtd 或重启宿主机。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GDB 调试 QEMU 源码跟踪 QMP 协议执行</title>
      <link>https://frytea.com/archives/566/</link>
      <pubDate>Fri, 03 Sep 2021 01:53:08 +0000</pubDate>
      <guid>https://frytea.com/archives/566/</guid>
      <description>&lt;p&gt;接上文，通过跟踪 libvirt 的源码，找到 &lt;code&gt;virsh domblkinfo&lt;/code&gt; 最终是使用 &lt;a href=&#34;https://wiki.qemu.org/Documentation/QMP&#34;&gt;QMP&lt;/a&gt;  协议从 QEMU 获取到关键字为 &lt;code&gt;query-block&lt;/code&gt; 的数据，其中带有 &lt;code&gt;wr_highest_offset&lt;/code&gt; 字段，该字段被 libvirt 认定为 磁盘利用率中 &lt;code&gt;Allocation&lt;/code&gt; 值的来源。&lt;/p&gt;
&lt;p&gt;今天就尝试在 QEMU 中找到获取 &lt;code&gt;wr_highest_offset&lt;/code&gt;  字段的方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GDB 调试 libvirt 源码之 domblkinfo 命令源码跟踪记</title>
      <link>https://frytea.com/archives/565/</link>
      <pubDate>Thu, 02 Sep 2021 05:42:00 +0000</pubDate>
      <guid>https://frytea.com/archives/565/</guid>
      <description>&lt;p&gt;最近发现环境中 KVM 虚拟机磁盘利用率查不准，使用 virsh 命令查看磁盘使用情况得到如下结果：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# virsh domblkinfo 20 vda --human&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Capacity:       2.000 GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Allocation:     2.000 GiB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Physical:       2.000 GiB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;显然是有问题的，正常的数值三个应该不通，进入系统查看磁盘使用率也仅有 2% 左右，因此试图通过检查源码的方式查看是否正确。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 Clash for windows 端口为 0 导致无法使用</title>
      <link>https://frytea.com/archives/564/</link>
      <pubDate>Mon, 30 Aug 2021 01:58:33 +0000</pubDate>
      <guid>https://frytea.com/archives/564/</guid>
      <description>&lt;p&gt;今天更新完 Windows 重启后发现上不了网了，检查 clash for windows 发现监听端口为 &lt;strong&gt;0&lt;/strong&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;https://imagehost-cdn.frytea.com/images/2021/08/30/20210830095030627b1fa801f19241.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2021/08/30/20210830095030627b1fa801f19241.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;这就不正常了，检查了一下 &lt;code&gt;C:\Users\&amp;lt;username&amp;gt;\.config\clash\logs&lt;/code&gt; 的日志，发现这行报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;level&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;error msg&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Start Mixed(http and socks) server error: listen tcp 127.0.0.1:7890: bind: An attempt was made to access a socket in a way forbidden by its access permissions.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;貌似是端口无法被正常绑定，网上找了一下原因，发现遇到该问题的人不少，大致这样解决：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perl 程序后台执行示例</title>
      <link>https://frytea.com/archives/563/</link>
      <pubDate>Thu, 26 Aug 2021 03:51:48 +0000</pubDate>
      <guid>https://frytea.com/archives/563/</guid>
      <description>&lt;p&gt;最近阅读 PVE 源码发现一处源码这样使用了 &lt;code&gt;fork()&lt;/code&gt; 方法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$spid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; fork();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;defined ($spid)) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    die &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;can&amp;#39;t put server into background - fork failed&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	} &lt;span style=&#34;color:#66d9ef&#34;&gt;elsif&lt;/span&gt; ($spid) { &lt;span style=&#34;color:#75715e&#34;&gt;# parent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	    exit (&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;自己写示例发现这种方法可以使程序进入后台执行状态，大概原理是 &lt;strong&gt;fork 子进程，退出主进程，使得程序被 1 号父进程接管，在终端表现则是进入了后台执行状态&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Perl 面向对象之基类(use base)</title>
      <link>https://frytea.com/archives/562/</link>
      <pubDate>Wed, 25 Aug 2021 08:39:33 +0000</pubDate>
      <guid>https://frytea.com/archives/562/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-perl&#34; data-lang=&#34;perl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;use&lt;/span&gt; base somemodule;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 相当于以下两句的结合：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;BEGIN&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;use&lt;/span&gt; somemodule ();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    push @ISA, &lt;span style=&#34;color:#e6db74&#34;&gt;qw(somemodule)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 也可以同时 use base 两个或者两个以上的模块，即多继承，例如：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;use&lt;/span&gt; base &lt;span style=&#34;color:#e6db74&#34;&gt;qw(Foo Bar)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;BEGIN&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;use&lt;/span&gt; Foo ();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;use&lt;/span&gt; Bar ();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    push @ISA, &lt;span style=&#34;color:#e6db74&#34;&gt;qw(Foo Bar)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Perl&lt;/code&gt;  里 类方法通过 &lt;code&gt;@ISA&lt;/code&gt; 数组继承，这个数组里面包含其他包（类）的名字，变量的继承必须明确设定。&lt;/li&gt;
&lt;li&gt;多继承就是这个 &lt;code&gt;@ISA&lt;/code&gt; 数组包含多个类（包）名字。&lt;/li&gt;
&lt;li&gt;通过 &lt;code&gt;@ISA&lt;/code&gt; 只能继承&lt;strong&gt;方法&lt;/strong&gt;，&lt;strong&gt;不能继承数据&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.runoob.com/perl/perl-object-oriented.html&#34;&gt;Perl 面向对象&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/zll01/article/details/4520237&#34;&gt;Perl 中的 use base 的用法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Perl 模块路径指定（调试环境）</title>
      <link>https://frytea.com/archives/561/</link>
      <pubDate>Wed, 25 Aug 2021 08:33:50 +0000</pubDate>
      <guid>https://frytea.com/archives/561/</guid>
      <description>&lt;p&gt;在调试 Perl 测试程序时，常常需要在测试路劲执行 Perl 脚本，相应的 &lt;code&gt;.pm&lt;/code&gt; 模块测试程序也需并不在 Perl 默认的模块路径下，使用以下语句即可指定模块检索路径。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/perl
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;use lib &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;use Person;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Person 包模块与当前脚本同级，可用上面两行代码指定包位置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/ganmao/article/details/2733872&#34;&gt;Perl模块安装到非默认路径及其使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.sina.com.cn/s/blog_3fe961ae0102vikm.html&#34;&gt;两种指定Perl模块目录的方法(PERLLIB和use lib)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>QEMU 编译报错 undefined reference to g_app_info_launch_default_for_uri_finish 解决过程</title>
      <link>https://frytea.com/archives/560/</link>
      <pubDate>Fri, 20 Aug 2021 03:56:31 +0000</pubDate>
      <guid>https://frytea.com/archives/560/</guid>
      <description>&lt;p&gt;编译 QEMU 时报如下错误：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/lib/gcc/x86_64-redhat-linux/&lt;span style=&#34;color:#ae81ff&#34;&gt;4.8&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;/../../../../lib64/libgtk-&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;.so&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; undefined reference to `g_app_info_launch_default_for_uri_finish&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_type_check_instance_is_fundamentally_a&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/lib/gcc/x86_64-redhat-linux/&lt;span style=&#34;color:#ae81ff&#34;&gt;4.8&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;/../../../../lib64/libgtk-&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;.so&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; undefined reference to `g_app_info_launch_default_for_uri_async&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_strv_contains&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/lib/gcc/x86_64-redhat-linux/&lt;span style=&#34;color:#ae81ff&#34;&gt;4.8&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;/../../../../lib64/libgtk-&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;.so&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; undefined reference to `g_list_model_get_type&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_drive_is_removable&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/lib/gcc/x86_64-redhat-linux/&lt;span style=&#34;color:#ae81ff&#34;&gt;4.8&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;/../../../../lib64/libgtk-&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;.so&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; undefined reference to `g_application_get_resource_base_path&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_log_structured_standard&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/lib/gcc/x86_64-redhat-linux/&lt;span style=&#34;color:#ae81ff&#34;&gt;4.8&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;/../../../../lib64/libgtk-&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;.so&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; undefined reference to `g_type_get_instance_count&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_list_model_get_n_items&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/lib/gcc/x86_64-redhat-linux/&lt;span style=&#34;color:#ae81ff&#34;&gt;4.8&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;/../../../../lib64/libgtk-&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;.so&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; undefined reference to `g_file_enumerator_iterate&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libgtk-3.so: undefined reference to `g_param_spec_get_name_quark&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/lib/gcc/x86_64-redhat-linux/&lt;span style=&#34;color:#ae81ff&#34;&gt;4.8&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;/../../../../lib64/libgtk-&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;.so&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; undefined reference to `g_list_model_get_item&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;collect2&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; error&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; ld returned &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; exit status
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; *** [qemu-system-x86_64] Error &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; *** [subdir-x86_64-softmmu] Error &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;先看一下报错的动态链接库依赖了哪些库：&lt;/p&gt;</description>
    </item>
    <item>
      <title>鲲鹏ARM环境编译升级虚拟化组件（QEMU&#43;libvirt）</title>
      <link>https://frytea.com/archives/559/</link>
      <pubDate>Wed, 18 Aug 2021 01:57:00 +0000</pubDate>
      <guid>https://frytea.com/archives/559/</guid>
      <description>&lt;p&gt;在 鲲鹏 arm 环境下可以直接使用 yum 安装相关虚拟化组件（以 centos 为例）：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;yum -y install qemu* libvirt* AAVMF virt-install
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;但是软件库中的虚拟化组件版本较老，不支持 &lt;code&gt;spice&lt;/code&gt; 等，而且对端口有限制，无法使用 &lt;code&gt;virt-manager&lt;/code&gt; ，也无法对接 openstack 使用，因此需要分别升级 QEMU， libvirt。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一键修改Windows远程桌面（RDP）端口号</title>
      <link>https://frytea.com/archives/555/</link>
      <pubDate>Tue, 10 Aug 2021 03:25:36 +0000</pubDate>
      <guid>https://frytea.com/archives/555/</guid>
      <description>&lt;p&gt;本文主要内容来微软官方文档，命令未 PowerShell 命令，管理员权限运行，最后给出链接。&lt;/p&gt;
&lt;p&gt;若要查看当前 RDP 端口，可使用以下 PowerShell 命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Get-ItemProperty -Path &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp&amp;#39;&lt;/span&gt; -name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PortNumber&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;若要修改 RDP 端口，可使用以下命令（以3390为例）：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac 下解决 zsh: no matches found: postcss@^7</title>
      <link>https://frytea.com/archives/554/</link>
      <pubDate>Sun, 08 Aug 2021 11:22:24 +0000</pubDate>
      <guid>https://frytea.com/archives/554/</guid>
      <description>&lt;p&gt;mac开发引入 tailwindcss 库时遇到如下错误：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zsh: no matches found: postcss@^7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以这样解决：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 官网给出的命令如下&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@&lt;span style=&#34;color:#ae81ff&#34;&gt;\^&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; autoprefixer@&lt;span style=&#34;color:#ae81ff&#34;&gt;\^&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# mac的zsh中需要这样，因为错误的 ^ 解析&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ohmyzsh/ohmyzsh/issues/449&#34;&gt;zsh: no matches found: HEAD^ #449&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tailwindlabs/tailwindcss/discussions/3575&#34;&gt;zsh: no matches found: postcss@^7 #3575&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>解决OpenVPN证书过期问题</title>
      <link>https://frytea.com/archives/553/</link>
      <pubDate>Sun, 01 Aug 2021 15:36:00 +0000</pubDate>
      <guid>https://frytea.com/archives/553/</guid>
      <description>&lt;p&gt;使用 Synology 提供的 VPN Server 一阵子，突然用不了了，大意是说 SSL 证书过期了，但是不知道如何解决，网络搜索也没有结果，试过了重置套件，无法解决。&lt;/p&gt;
&lt;p&gt;最后查阅文档发现，VPN Server 是依赖了群晖设置中的证书。&lt;/p&gt;</description>
    </item>
    <item>
      <title>virt-manager 启动提示 virt qemu-sock no such file or directory</title>
      <link>https://frytea.com/archives/548/</link>
      <pubDate>Fri, 09 Jul 2021 10:08:00 +0000</pubDate>
      <guid>https://frytea.com/archives/548/</guid>
      <description>&lt;p&gt;检查后应该是 &lt;code&gt;virtqemud&lt;/code&gt; 服务没起来导致的，编译安装默认生成的服务路径在 &lt;code&gt;/usr/local/*&lt;/code&gt; 下，而我们指定了安装在默认位置 &lt;code&gt;/usr&lt;/code&gt; ，参考 systemd 无法启动的解决方法即可解决该问题。&lt;/p&gt;
&lt;p&gt;首先看一下 &lt;code&gt;/usr/sbin/virtqemud&lt;/code&gt; 这个文件是存在的，下面继续操作，首先使能该服务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Centos7.6 下编译安装 Libvirt 7.5</title>
      <link>https://frytea.com/archives/546/</link>
      <pubDate>Wed, 07 Jul 2021 06:47:00 +0000</pubDate>
      <guid>https://frytea.com/archives/546/</guid>
      <description>&lt;p&gt;&lt;code&gt;libvirt&lt;/code&gt; 是目前使用最为广泛的对KVM虚拟机进行管理的工具和 &lt;code&gt;API&lt;/code&gt; 。 &lt;code&gt;Libvirtd&lt;/code&gt; 是一个 &lt;code&gt;daemon&lt;/code&gt; 进程，可以被本地的 &lt;code&gt;virsh&lt;/code&gt; 调用，也可以被远程的 &lt;code&gt;virsh&lt;/code&gt; 调用， &lt;code&gt;Libvirtd&lt;/code&gt; 调用 &lt;code&gt;qemu-kvm&lt;/code&gt; 操作虚拟机。下面介绍 Centos7.6 下编译安装 Libvirt 7.5 的方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C实现不用临时变量交换两个数的值（一行代码）</title>
      <link>https://frytea.com/archives/545/</link>
      <pubDate>Wed, 07 Jul 2021 03:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/545/</guid>
      <description>&lt;p&gt;最近看到一个问题感觉很有意思：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“如何在不申请临时变量的情况下交换两个数的值？”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;思考许久没有思路，查阅一番发现方法不少，在这里介绍四种方法：&lt;/p&gt;
&lt;h2 id=&#34;方法一&#34;&gt;方法一&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;swap&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;p, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;q)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;a &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;a &lt;span style=&#34;color:#f92672&#34;&gt;^&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;b;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;b &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;b &lt;span style=&#34;color:#f92672&#34;&gt;^&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;a;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;a &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;a &lt;span style=&#34;color:#f92672&#34;&gt;^&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;b;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;提示：异或运算符 &lt;code&gt;^&lt;/code&gt; 也称 &lt;code&gt;XOR&lt;/code&gt; 运算符，它的规则是若参加运算的两个二进位同号，则结果为 &lt;code&gt;0&lt;/code&gt; （假）；异号为 &lt;code&gt;1&lt;/code&gt;（真）。即 &lt;code&gt;0 ^ 0 = 0&lt;/code&gt; , &lt;code&gt;0 ^ 1 = 1&lt;/code&gt; , &lt;code&gt;1 ^ 0 = 1&lt;/code&gt; , &lt;code&gt;1 ^ 1 = 0&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 下 Shell 命令寻址顺序</title>
      <link>https://frytea.com/archives/544/</link>
      <pubDate>Tue, 06 Jul 2021 08:32:10 +0000</pubDate>
      <guid>https://frytea.com/archives/544/</guid>
      <description>&lt;h2 id=&#34;起源&#34;&gt;起源&lt;/h2&gt;
&lt;p&gt;当出现 &lt;code&gt;PATH&lt;/code&gt; 下有一个与系统命令重名的命令时，先执行哪一个呢？当 &lt;code&gt;PATH&lt;/code&gt; 下有多个重名命令，会执行哪一个呢？这就涉及到 SHELL 执行命令的寻找顺序。&lt;/p&gt;
&lt;h2 id=&#34;默认顺序&#34;&gt;默认顺序&lt;/h2&gt;
&lt;p&gt;shel在执行命令时，并不是直接就在PATH路径中查找，而是按照固定的位置依次寻找命令。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux虚拟化入门（五）KVM 管理命令指南</title>
      <link>https://frytea.com/archives/543/</link>
      <pubDate>Mon, 05 Jul 2021 07:04:46 +0000</pubDate>
      <guid>https://frytea.com/archives/543/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;code&gt;qemu-img&lt;/code&gt;是QEMU的磁盘管理工具&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;格式: qemu-img command &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;command options&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command：
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		check 						   对磁盘镜像文件进行一致性检查，查找镜像文件中的错误
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		create 						   创建一个可以指定格式、大小、名称的镜像文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		convert 					   镜像文件格式转换
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		info 						   展示镜像文件的信息
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;virsh&lt;/code&gt; kvm虚拟机管理工具&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;root@node1 ~&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# virsh help&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command：
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Domain Management &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;domain&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    attach-device                  从一个XML文件附加装置
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    attach-disk                    附加磁盘设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    attach-interface               获得网络界面
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    autostart                      自动开始一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    blkdeviotune                   设定或者查询块设备 I/O 调节参数。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    blkiotune                      获取或者数值 blkio 参数
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    blockcommit                    启动块提交操作。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    blockcopy                      启动块复制操作。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    blockjob                       管理活跃块操作
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    blockpull                      使用其后端映像填充磁盘。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    blockresize                    创新定义域块设备大小
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    change-media                   更改 CD 介质或者软盘驱动器
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    console                        连接到客户会话
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cpu-stats                      显示域 cpu 统计数据
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    create                         从一个 XML 文件创建一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    define                         从一个 XML 文件定义（但不开始）一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    desc                           显示或者设定域描述或者标题
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    destroy                        销毁（停止）域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    detach-device                  从一个 XML 文件分离设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    detach-device-alias            detach device from an alias
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    detach-disk                    分离磁盘设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    detach-interface               分离网络界面
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domdisplay                     域显示连接 URI
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domfsfreeze                    Freeze domain&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s mounted filesystems.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domfsthaw                      Thaw domain&amp;#39;&lt;/span&gt;s mounted filesystems.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domfsinfo                      Get information of domain&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s mounted filesystems.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domfstrim                      在域挂载的文件系统中调用 fstrim。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domhostname                    输出域主机名
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domid                          把一个域名或 UUID 转换为域 id
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domif-setlink                  设定虚拟接口的链接状态
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domiftune                      获取/设定虚拟接口参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domjobabort                    忽略活跃域任务
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domjobinfo                     域任务信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domname                        将域 id 或 UUID 转换为域名
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domrename                      rename a domain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    dompmsuspend                   使用电源管理功能挂起域
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    dompmwakeup                    从 pmsuspended 状态唤醒域
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domuuid                        把一个域名或 id 转换为域 UUID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domxml-from-native             将原始配置转换为域 XML
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domxml-to-native               将域 XML 转换为原始配置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    dump                           把一个域的内核 dump 到一个文件中以方便分析
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    dumpxml                        XML 中的域信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    edit                           编辑某个域的 XML 配置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    event                          Domain Events
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    inject-nmi                     在虚拟机中输入 NMI
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    iothreadinfo                   view domain IOThreads
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    iothreadpin                    control domain IOThread affinity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    iothreadadd                    add an IOThread to the guest domain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    iothreaddel                    delete an IOThread from the guest domain
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    send-key                       向虚拟机发送序列号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    send-process-signal            向进程发送信号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    lxc-enter-namespace            LXC 虚拟机进入名称空间
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    managedsave                    管理域状态的保存
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    managedsave-remove             删除域的管理保存
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    managedsave-edit               edit XML for a domain&amp;#39;&lt;/span&gt;s managed save state file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    managedsave-dumpxml            Domain information of managed save state file in XML
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    managedsave-define             redefine the XML &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; a domain&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s managed save state file
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    memtune                        获取或者数值内存参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    perf                           Get or set perf event
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    metadata                       show or set domain&amp;#39;&lt;/span&gt;s custom XML metadata
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    migrate                        将域迁移到另一个主机中
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    migrate-setmaxdowntime         设定最大可耐受故障时间
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    migrate-getmaxdowntime         get maximum tolerable downtime
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    migrate-compcache              获取/设定压缩缓存大小
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    migrate-setspeed               设定迁移带宽的最大值
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    migrate-getspeed               获取最长迁移带宽
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    migrate-postcopy               Switch running migration from pre-copy to post-copy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    numatune                       获取或者数值 numa 参数
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    qemu-attach                    QEMU 附加
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    qemu-monitor-command           QEMU 监控程序命令
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    qemu-monitor-event             QEMU Monitor Events
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    qemu-agent-command             QEMU 虚拟机代理命令
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    reboot                         重新启动一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    reset                          重新设定域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    restore                        从一个存在一个文件中的状态恢复一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    resume                         重新恢复一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    save                           把一个域的状态保存到一个文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    save-image-define              为域的保存状态文件重新定义 XML
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    save-image-dumpxml             在 XML 中保存状态域信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    save-image-edit                为域保存状态文件编辑 XML
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    schedinfo                      显示/设置日程安排变量
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    screenshot                     提取当前域控制台快照并保存到文件中
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    set-lifecycle-action           change lifecycle actions
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    set-user-password              set the user password inside the domain
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    setmaxmem                      改变最大内存限制值
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    setmem                         改变内存的分配
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    setvcpus                       改变虚拟 CPU 的号
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    shutdown                       关闭一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    start                          开始一个（以前定义的）非活跃的域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    suspend                        挂起一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ttyconsole                     tty 控制台
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    undefine                       取消定义一个域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    update-device                  从 XML 文件中关系设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vcpucount                      域 vcpu 计数
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vcpuinfo                       详细的域 vcpu 信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vcpupin                        控制或者查询域 vcpu 亲和性
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    emulatorpin                    控制火车查询域模拟器亲和性
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vncdisplay                     vnc 显示
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    guestvcpus                     query or modify state of vcpu in the guest &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;via agent&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    setvcpu                        attach/detach vcpu or groups of threads
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domblkthreshold                set the threshold &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; block-threshold event &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; a given block device or it&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s backing chain element
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; Domain Monitoring (help keyword &amp;#39;&lt;/span&gt;monitor&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domblkerror                    在块设备中显示错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domblkinfo                     域块设备大小信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domblklist                     列出所有域块
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domblkstat                     获得域设备块状态
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domcontrol                     域控制接口状态
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domif-getlink                  获取虚拟接口链接状态
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    domifaddr                      Get network interfaces&amp;#39;&lt;/span&gt; addresses &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; a running domain
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domiflist                      列出所有域虚拟接口
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domifstat                      获得域网络接口状态
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dominfo                        域信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dommemstat                     获取域的内存统计
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domstate                       域状态
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domstats                       get statistics about one or multiple domains
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domtime                        domain time
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    list                           列出域
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Host and Hypervisor &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;host&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    allocpages                     Manipulate pages pool size
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    capabilities                   性能
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cpu-baseline                   计算基线 CPU
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cpu-compare                    使用 XML 文件中描述的 CPU 与主机 CPU 进行对比
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cpu-models                     CPU models
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    domcapabilities                domain capabilities
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    freecell                       NUMA可用内存
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    freepages                      NUMA free pages
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    hostname                       打印管理程序主机名
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    hypervisor-cpu-baseline        compute baseline CPU usable by a specific hypervisor
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    hypervisor-cpu-compare         compare a CPU with the CPU created by a hypervisor on the host
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    maxvcpus                       连接 vcpu 最大值
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    node-memory-tune               获取或者设定节点内存参数
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodecpumap                     节点 cpu 映射
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodecpustats                   输出节点的 cpu 状统计数据。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodeinfo                       节点信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodememstats                   输出节点的内存状统计数据。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodesuspend                    在给定时间段挂起主机节点
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sysinfo                        输出 hypervisor sysinfo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    uri                            打印管理程序典型的URI
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    version                        显示版本
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Interface &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;interface&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-begin                    生成当前接口设置快照，可在今后用于提交 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;iface-commit&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; 或者恢复 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;iface-rollback&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-bridge                   生成桥接设备并为其附加一个现有网络设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-commit                   提交 iface-begin 后的更改并释放恢复点
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-define                   define an inactive persistent physical host interface or modify an existing persistent one from an XML file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-destroy                  删除物理主机接口（启用它请执行 &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;if-down&amp;#34;&lt;/span&gt;）
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-dumpxml                  XML 中的接口信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-edit                     为物理主机界面编辑 XML 配置
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-list                     物理主机接口列表
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-mac                      将接口名称转换为接口 MAC 地址
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-name                     将接口 MAC 地址转换为接口名称
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-rollback                 恢复到之前保存的使用 iface-begin 生成的更改
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-start                    启动物理主机接口（启用它请执行 &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;if-up&amp;#34;&lt;/span&gt;）
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-unbridge                 分离其辅助设备后取消定义桥接设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    iface-undefine                 取消定义物理主机接口（从配置中删除）
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Network Filter &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;filter&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-define                使用 XML 文件定义或者更新网络过滤器
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-dumpxml               XML 中的网络过滤器信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-edit                  为网络过滤器编辑 XML 配置
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-list                  列出网络过滤器
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-undefine              取消定义网络过滤器
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-binding-create        create a network filter binding from an XML file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-binding-delete        delete a network filter binding
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-binding-dumpxml       XML 中的网络过滤器信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nwfilter-binding-list          list network filter bindings
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Networking &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;network&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-autostart                  自动开始网络
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-create                     从一个 XML 文件创建一个网络
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-destroy                    销毁（停止）网络
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-dhcp-leases                print lease info &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; a given network
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-dumpxml                    XML 中的网络信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-edit                       为网络编辑 XML 配置
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-event                      Network Events
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-info                       网络信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-list                       列出网络
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-name                       把一个网络UUID 转换为网络名
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-start                      开始一个&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;以前定义的&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;不活跃的网络
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-undefine                   undefine a persistent network
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-update                     更新现有网络配置的部分
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    net-uuid                       把一个网络名转换为网络UUID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Node Device &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;nodedev&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodedev-create                 根据节点中的 XML 文件定义生成设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodedev-destroy                销毁（停止）节点中的设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodedev-detach                 将节点设备与其设备驱动程序分离
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodedev-dumpxml                XML 中的节点设备详情
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodedev-list                   这台主机中中的枚举设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodedev-reattach               重新将节点设备附加到他的设备驱动程序中
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodedev-reset                  重置节点设备
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    nodedev-event                  Node Device Events
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Secret &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;secret&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    secret-define                  定义或者修改 XML 中的 secret
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    secret-dumpxml                 XML 中的 secret 属性
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    secret-event                   Secret Events
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    secret-get-value               secret 值输出
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    secret-list                    列出 secret
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    secret-set-value               设定 secret 值
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    secret-undefine                取消定义 secret
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Snapshot &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;snapshot&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-create                使用 XML 生成快照
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-create-as             使用一组参数生成快照
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-current               获取或者设定当前快照
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-delete                删除域快照
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-dumpxml               为域快照转储 XML
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-edit                  编辑快照 XML
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-info                  快照信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-list                  为域列出快照
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-parent                获取快照的上级快照名称
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    snapshot-revert                将域转换为快照
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Storage Pool &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;pool&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    find-storage-pool-sources-as   找到潜在存储池源
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    find-storage-pool-sources      发现潜在存储池源
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-autostart                 自动启动某个池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-build                     建立池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-create-as                 从一组变量中创建一个池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-create                    从一个 XML 文件中创建一个池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-define-as                 在一组变量中定义池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-define                    define an inactive persistent storage pool or modify an existing persistent one from an XML file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-delete                    删除池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-destroy                   销毁（删除）池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-dumpxml                   XML 中的池信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-edit                      为存储池编辑 XML 配置
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-info                      存储池信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-list                      列出池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-name                      将池 UUID 转换为池名称
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-refresh                   刷新池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-start                     启动一个（以前定义的）非活跃的池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-undefine                  取消定义一个不活跃的池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-uuid                      把一个池名称转换为池 UUID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pool-event                     Storage Pool Events
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Storage Volume &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;volume&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-clone                      克隆卷。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-create-as                  从一组变量中创建卷
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-create                     从一个 XML 文件创建一个卷
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-create-from                生成卷，使用另一个卷作为输入。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-delete                     删除卷
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-download                   将卷内容下载到文件中
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-dumpxml                    XML 中的卷信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-info                       存储卷信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-key                        为给定密钥或者路径返回卷密钥
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-list                       列出卷
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-name                       为给定密钥或者路径返回卷名
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-path                       为给定密钥或者路径返回卷路径
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-pool                       为给定密钥或者路径返回存储池
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-resize                     创新定义卷大小
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-upload                     将文件内容上传到卷中
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vol-wipe                       擦除卷
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Virsh itself &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;help keyword &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;virsh&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cd                             更改当前目录
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo                           echo 参数
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    exit                           退出这个非交互式终端
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    help                           打印帮助
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pwd                            输出当前目录
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    quit                           退出这个非交互式终端
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    connect                        连接（重新连接）到 hypervisor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/csdnlb/article/details/105080300&#34;&gt;KVM-virsh学习(虚拟机磁盘管理)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/qiuhom-1874/p/13508231.html&#34;&gt;虚拟化技术之kvm管理工具virsh常用基础命令（一）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Linux虚拟化入门（四）KVM 创建一个 Centos 实例</title>
      <link>https://frytea.com/archives/542/</link>
      <pubDate>Mon, 05 Jul 2021 07:04:00 +0000</pubDate>
      <guid>https://frytea.com/archives/542/</guid>
      <description>&lt;h2 id=&#34;前提条件&#34;&gt;前提条件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;完整 KVM 环境&lt;/li&gt;
&lt;li&gt;Centos 镜像&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;步骤&#34;&gt;步骤&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;第一步、创建磁盘&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;qemu-img create -f qcow2 centos_kvm1.qcow2 16G
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;第二步、安装虚拟机&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;virt-install &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--virt-type&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;kvm &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;centos-kvm &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--hvm &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--vcpus&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--memory&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--cdrom&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/srv/kvm/CentOS-7-x86_64-Minimal-1810.iso &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--disk path&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/srv/kvm/centos_kvm1.qcow2,size&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;16,format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;qcow2 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--graphics vnc,password&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;kvm,listen&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;::,port&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5911&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--network bridge&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;virbr0 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--autostart &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;--force
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装成功后使用任意一个可以访问KVM宿主机的带有桌面的设备上的 VNC viewer 进入 &lt;code&gt;YourIp:5911&lt;/code&gt; 输入密码 &lt;code&gt;kvm&lt;/code&gt; 就可以进入虚拟机，然后继续安装了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux虚拟化入门（三）Fedora 安装 KVM 管理环境</title>
      <link>https://frytea.com/archives/541/</link>
      <pubDate>Mon, 05 Jul 2021 07:03:00 +0000</pubDate>
      <guid>https://frytea.com/archives/541/</guid>
      <description>&lt;h2 id=&#34;部署步骤&#34;&gt;部署步骤&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;第一步、&lt;strong&gt;检查环境要求&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用如下命令检查您的 CPU 是否支持虚拟化：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ egrep &amp;#39;^flags.*(vmx|svm)&amp;#39; /proc/cpuinfo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果没有&lt;strong&gt;任何&lt;/strong&gt;输出，则说明您的系统不支持相关扩展功能。您仍然可以使用 QEMU/KVM ，但是虚拟将只能使用软件虚拟化（想当慢）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux虚拟化入门（二）Hyper-V 开启 KVM 嵌套虚拟化</title>
      <link>https://frytea.com/archives/540/</link>
      <pubDate>Mon, 05 Jul 2021 07:02:00 +0000</pubDate>
      <guid>https://frytea.com/archives/540/</guid>
      <description>&lt;p&gt;日常办公使用 Windows 平台，需要研究 KVM 的使用，此时就需要在 Windows 提供的 Hyper-V 工具运行 Linux 虚拟机来测试 KVM 相关的使用，但是在 Hyper-V 虚拟机中再次运行 KVM 虚拟化属于嵌套虚拟化，需要开启相关功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux虚拟化入门（一）Qemu，KVM，Virsh 概念指南</title>
      <link>https://frytea.com/archives/539/</link>
      <pubDate>Mon, 05 Jul 2021 07:02:00 +0000</pubDate>
      <guid>https://frytea.com/archives/539/</guid>
      <description>&lt;p&gt;当你安装了一台Linux，想启动一个KVM虚拟机的时候，你会发现需要安装不同的软件，启动虚拟机的时候，有多种方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;virsh start&lt;/li&gt;
&lt;li&gt;kvm命令&lt;/li&gt;
&lt;li&gt;qemu命令&lt;/li&gt;
&lt;li&gt;qemu-kvm命令&lt;/li&gt;
&lt;li&gt;qemu-system-x86_64命令&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;qemu&#34;&gt;QEMU&lt;/h2&gt;
&lt;p&gt;首先看qemu，其中关键字emu，全称emulator，模拟器，所以单纯使用qemu是采用的&lt;strong&gt;完全虚拟化&lt;/strong&gt;的模式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43;中冒号（:）和双冒号（::）的用法总结</title>
      <link>https://frytea.com/archives/536/</link>
      <pubDate>Wed, 09 Jun 2021 03:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/536/</guid>
      <description>&lt;h2 id=&#34;冒号用法&#34;&gt;冒号（:）用法&lt;/h2&gt;
&lt;p&gt;（1）表示&lt;strong&gt;机构内位域&lt;/strong&gt;的定义（即该变量占几个 bit 空间）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_XXX&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; a:&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; c;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} ; XXX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;（2）&lt;strong&gt;构造函数&lt;/strong&gt;后面的冒号起分割作用，是类给&lt;strong&gt;成员变量赋值&lt;/strong&gt;的方法，初始化列表，更适用于成员变量的常量 &lt;code&gt;const&lt;/code&gt; 型。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Typecho 博客文首自动添加本页链接</title>
      <link>https://frytea.com/archives/535/</link>
      <pubDate>Wed, 09 Jun 2021 01:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/535/</guid>
      <description>&lt;p&gt;自己的博客不觉间已经上线两年多了，随着内容和浏览量的增加，我的博客开始被一些搬运站盯上，常常搜索自己博客内容却在其他人博客里找到完全一样的内容，关键是还不署名！&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bullet Journal （肆）&amp;amp; 日常管理</title>
      <link>https://frytea.com/archives/534/</link>
      <pubDate>Tue, 08 Jun 2021 16:06:00 +0000</pubDate>
      <guid>https://frytea.com/archives/534/</guid>
      <description>&lt;p&gt;不知不觉，Bullet Journal 模版系列文章就要迎来尾声啦。今天带来的是 Bullet Journal 中的核心部分 —— 日常管理。&lt;/p&gt;
&lt;p&gt;我认为 Bullet Journal 的核心就在于其每日记录，用最快的方式回顾这一天，顺便为其加入复盘的属性，让每一天发生的特别的、有趣的事情留在你的 Bullet Journal 中。等一个月完毕，或是一年后的某一天翻开某一天的 Bullet Journal ，还能回忆起当时的那种感动。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从 Redis 表项看 SONiC 架构</title>
      <link>https://frytea.com/archives/533/</link>
      <pubDate>Tue, 08 Jun 2021 09:18:00 +0000</pubDate>
      <guid>https://frytea.com/archives/533/</guid>
      <description>&lt;p&gt;SONiC 系统的架构由各种模块组成，这些模块通过集中式和可扩展的基础架构相互交互。这个基础设施依赖于使用一个 &lt;strong&gt;redis-database&lt;/strong&gt; 引擎来提供一个独立于语言的接口，一个在所有 SONiC 子系统之间进行数据持久化、复制和多进程通信的方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bullet Journal （叁）&amp;amp; 目标管理 ｜ 一起来规划人生吧</title>
      <link>https://frytea.com/archives/531/</link>
      <pubDate>Sat, 29 May 2021 02:52:00 +0000</pubDate>
      <guid>https://frytea.com/archives/531/</guid>
      <description>&lt;p&gt;本系列文章已经过半，前面讲过了什么是 Bullet Journal，如何使用 Notion，以及使用 Notion 进行财务管理的方法，文章得到了一些共鸣，这是我继续下去最大的动力。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bullet Journal （二）&amp;amp; 财务管理</title>
      <link>https://frytea.com/archives/530/</link>
      <pubDate>Thu, 20 May 2021 14:17:00 +0000</pubDate>
      <guid>https://frytea.com/archives/530/</guid>
      <description>&lt;p&gt;Bullet Journal 是一个可以让我们生活过的更加井井有条的工具，好生活所需的一切条件之中，财务一定是逃不开的基础。上文已经介绍了 Notion 的基本使用，Bullet Journal 第二期就来讲讲如何使用 Notion 来进行财务管理吧，主要包括预算、预算监控、收支管理、投资管理以及财务分配等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bullet Journal （一） &amp;amp; Notion</title>
      <link>https://frytea.com/archives/529/</link>
      <pubDate>Sat, 15 May 2021 13:33:00 +0000</pubDate>
      <guid>https://frytea.com/archives/529/</guid>
      <description>&lt;p&gt;前面介绍过 Bullet Journal 的前世今生：《Bullet Journal 的前世今生 ｜ 效率至上（https://blog.frytea.com/archives/488/）》。近期打算写一个系列文章，主要介绍在 Notion 下进行 bullet journal 的方法和效果，包括个人财务管理、目标管理、日常管理等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 Fedora 无法访问码云私有库问题</title>
      <link>https://frytea.com/archives/526/</link>
      <pubDate>Sat, 17 Apr 2021 02:30:00 +0000</pubDate>
      <guid>https://frytea.com/archives/526/</guid>
      <description>&lt;p&gt;本文首发于：https://blog.frytea.com/archives/526/&lt;/p&gt;
&lt;p&gt;近期在 Fedora 33 系统上总是无法访问 gitee 私有库，得到以下报错：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git clone git@gitee.com:songtianlun/workflow.git
正克隆到 &amp;#39;workflow&amp;#39;...
git@gitee.com: Permission denied (publickey).
fatal: 无法读取远程仓库。

请确认您有正确的访问权限并且仓库存在。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;使用 &lt;code&gt;ssh -v git@gitee.com&lt;/code&gt; 命令检查得到以下输出：&lt;/p&gt;</description>
    </item>
    <item>
      <title>为 Windows 10 新增物理网卡子接口</title>
      <link>https://frytea.com/archives/525/</link>
      <pubDate>Mon, 12 Apr 2021 00:55:00 +0000</pubDate>
      <guid>https://frytea.com/archives/525/</guid>
      <description>&lt;p&gt;本文首发于：https://blog.frytea.com/archives/525/&lt;/p&gt;
&lt;p&gt;在进行网络设备调试时常常会使用到多 IP ，Linux 上可以很方便的为物理网卡配置子接口解决，但是在 Windows 上如果物理网卡必须使用 DHCP 就无法再配置多 IP 了，只能暂时的使用 USB 转网卡解决。近期突然灵机一动，能不能使用 Windows 10 天然支持的 WSL 来解决这个问题，经过本人实测，是可以的，方法也很简单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>三步激活 StarUML V4.0.1 (WIN10为例) | 仅供学习</title>
      <link>https://frytea.com/archives/524/</link>
      <pubDate>Wed, 07 Apr 2021 13:05:00 +0000</pubDate>
      <guid>https://frytea.com/archives/524/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://staruml.io/&#34;&gt;StarUML&lt;/a&gt; 是一个开源的 &lt;code&gt;UML&lt;/code&gt; 工具列表软件，它遵守 &lt;code&gt;GNU GPL&lt;/code&gt; 的一个修订版。&lt;code&gt;StarUML&lt;/code&gt; 项目宣称的目标是代替大型的商业 UML 工具软件，如 &lt;code&gt;IBM&lt;/code&gt; 的 &lt;code&gt;Rational Rose&lt;/code&gt; ， &lt;code&gt;Borland&lt;/code&gt; 公司的 &lt;code&gt;Together&lt;/code&gt; 。&lt;code&gt;StarUML&lt;/code&gt; 支持 UML2.0 定义的大多数图，是一款跨平台且轻量高效的现代 UML 绘图工具。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows CMD 换肤</title>
      <link>https://frytea.com/archives/518/</link>
      <pubDate>Wed, 03 Mar 2021 01:28:25 +0000</pubDate>
      <guid>https://frytea.com/archives/518/</guid>
      <description>&lt;p&gt;由于经常使用到 Windows 下的 CMD 终端进行各种操作，特别是集成了 Ubuntu 子系统之后，在 Windows 平台上进行 C 开发更方便了。为了呼出 WSL 子系统，我习惯在 CMD 下进行，可默认皮肤不够美观，为了让自己心情愉悦，检索了一番换肤方法，并在此简单记录。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 Win10 热点无法上网及与 Hyper-V 虚拟网卡冲突问题</title>
      <link>https://frytea.com/archives/514/</link>
      <pubDate>Fri, 26 Feb 2021 08:49:38 +0000</pubDate>
      <guid>https://frytea.com/archives/514/</guid>
      <description>&lt;p&gt;最近给 Win10 电脑加装了一个无线网卡，想要开热点使用，但是发现手机连上之后显示无法联网，在这里记录解决办法。&lt;/p&gt;
&lt;p&gt;首先查看一下当前电脑上网使用的网卡是哪一张，我当前使用的是 Hyper-V 虚拟的一个桥接网卡 &lt;code&gt;vEthernet (NetBridge)&lt;/code&gt; 开启 wifi 热点后新增的网卡是 &lt;code&gt; 本地连接* 12&lt;/code&gt; 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>NMAP 基础扫描</title>
      <link>https://frytea.com/archives/507/</link>
      <pubDate>Tue, 26 Jan 2021 09:18:25 +0000</pubDate>
      <guid>https://frytea.com/archives/507/</guid>
      <description>&lt;p&gt;以下几个示例带领你快速了解nmap的基本扫描方法，更多详情请查阅nmap手册。&lt;/p&gt;
&lt;h3 id=&#34;1nmap-简单扫描&#34;&gt;1、Nmap 简单扫描&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nmap &amp;lt;target ip address&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nmap 192.168.41.41
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;直接指定需要扫描的主机IP开始扫描，返回详细描述。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 多进程通信开发之 UNIX domain Socket 通信机制从 TCP 切换为 UDP</title>
      <link>https://frytea.com/archives/505/</link>
      <pubDate>Wed, 13 Jan 2021 10:09:00 +0000</pubDate>
      <guid>https://frytea.com/archives/505/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Unix domain socket 或者 IPC socket是一种终端，可以使同一台操作系统上的两个或多个进程进行数据通信。提供 UDP 和 TCP 两种通信机制。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;因为一些原因，项目现有软件架构采用的都是 &lt;code&gt;IPC sockte&lt;/code&gt; 中的 &lt;code&gt;TCP&lt;/code&gt; 通信机制，虽然保证了通信的可靠性，但近期需要对该程序进行热迁移（基于 &lt;code&gt;criu&lt;/code&gt; ），有连接的 IPC 套接字状态很难被保存和恢复，而 无连接的 UDP 只需要保证服务端先冻结、先恢复即可实现程序整体状态迁移，因此写下本文，记录迁移过程，最后提供示例程序，可以自行通过 &lt;code&gt;BCompare&lt;/code&gt; 等文本对比工具对比差异。&lt;/p&gt;</description>
    </item>
    <item>
      <title>无需代理直接加速各种 GitHub 资源拉取 | 国内镜像赋能 | 助力开发</title>
      <link>https://frytea.com/archives/504/</link>
      <pubDate>Mon, 04 Jan 2021 06:05:45 +0000</pubDate>
      <guid>https://frytea.com/archives/504/</guid>
      <description>&lt;p&gt;常见的github加速方法如修改 &lt;code&gt;hosts&lt;/code&gt; 文件、魔法上网、设置 &lt;code&gt;proxy&lt;/code&gt; 等方法在此不在赘述，本文主要介绍在不进行多余网络配置的情况下，直接使用提供了github国内镜像服务的网站进行github各种资源拉取加速，在这里向各位提供github国内镜像服务的大佬们致敬。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一种C程序使用IPC多进程共享内存并实现热迁移的方法</title>
      <link>https://frytea.com/archives/501/</link>
      <pubDate>Wed, 30 Dec 2020 16:23:00 +0000</pubDate>
      <guid>https://frytea.com/archives/501/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;在软件中，术语共享内存指可被多个进程存取的内存，一个进程是一段程序的单个运行实例。在这种情况下，共享内存被用作进程间的通讯。——WikiPedia&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker 热迁移探索，基于CRIU实现运行状态迁移</title>
      <link>https://frytea.com/archives/499/</link>
      <pubDate>Wed, 23 Dec 2020 05:57:29 +0000</pubDate>
      <guid>https://frytea.com/archives/499/</guid>
      <description>&lt;h2 id=&#34;版本限制&#34;&gt;版本限制&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Docker: &lt;code&gt;17.06.0-ce&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;criu: &lt;code&gt;3.12&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;kernal: &lt;code&gt;3.10.0-957.el7.x86_64&lt;/code&gt; || &lt;code&gt;5.10.2-1.el7.elrepo.x86_64&lt;/code&gt; (Optional)&lt;/li&gt;
&lt;li&gt;os: &lt;code&gt;CentOS Linux release 7.9.2009 (Core)&lt;/code&gt; (Optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;实测在该环境下，容器热迁移可用，热迁移成功与否与 &lt;code&gt;docker&lt;/code&gt; 和 &lt;code&gt;criu&lt;/code&gt; 版本强相关。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;环境部署&#34;&gt;环境部署&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Docker 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo yum install -y yum-utils
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo yum-config-manager &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    --add-repo &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    https://download.docker.com/linux/centos/docker-ce.repo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo yum list docker-ce --showduplicates | sort -r
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo yum install docker-ce-17.06.0.ce
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo systemctl start docker
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 启动Docker实验特征&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim **/etc/docker/daemon.json
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+ &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;experimental&amp;#34;&lt;/span&gt;: true &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# criu 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo yum install criu -y
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Go安装(可选)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://golang.org/dl/go1.15.6.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim /etc/profile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+ export PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$PATH:/usr/local/go/bin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source /etc/profile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;热迁移示例&#34;&gt;热迁移示例&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# On the host&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker run -d --name looper2 --security-opt seccomp:unconfined busybox &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;         /bin/sh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# wait a few seconds to give the container an opportunity to print a few lines, then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker checkpoint create looper2 checkpoint2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# check your container &amp;amp; print log file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker logs looper2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# On the client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker create --name looper-clone --security-opt seccomp:unconfined busybox &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;         /bin/sh -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker start --checkpoint&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;checkpoint2 looper-clone
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# check your container&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docekr ps
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker logs looper-clone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上步骤将容器 &lt;code&gt;looper2&lt;/code&gt; 的状态迁移到 &lt;code&gt;looper-clone&lt;/code&gt; ，可实现当前容器、跨容器的状态迁移，甚至可以实现跨主机的迁移，只需将该目录 &lt;code&gt;/var/lib/docker/{docker id}/checnkpoints/&lt;/code&gt; 下面与检查点同名的文件夹迁移即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>tcpdump 过滤数据包长度</title>
      <link>https://frytea.com/archives/496/</link>
      <pubDate>Tue, 15 Dec 2020 06:31:23 +0000</pubDate>
      <guid>https://frytea.com/archives/496/</guid>
      <description>&lt;p&gt;tcpdump 支持 &lt;code&gt;protocol[x:x]&lt;/code&gt; 表达式，用于指定某协议[起始偏移量:数值类型长度],&lt;/p&gt;
&lt;p&gt;如指定IP包长度大于100:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tcpdump -i eth0 -n &#39;ip[2:2] &amp;gt; 100&#39;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;捕获tcp目标端口在10000和20000之间的包：&lt;/p&gt;</description>
    </item>
    <item>
      <title>聊聊搜索引擎的那些事儿 ｜ 又一款国产搜索引擎502了</title>
      <link>https://frytea.com/archives/491/</link>
      <pubDate>Sun, 29 Nov 2020 02:33:20 +0000</pubDate>
      <guid>https://frytea.com/archives/491/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;本文创作背景音乐：Beautiful Relaxing Music: Norway&amp;rsquo;s Nature, Violin Music, Flute Music, Piano Music, Harp Music：https://youtu.be/XEfDYMngJeE&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;2019年6月左右，一款国人打造的搜索引擎横空出世——多吉搜索。设计初衷为「不追踪，不误导」。但从字面和slogin来看像极了以注重用户隐私而著称的「DuckDuckGo」，甚至于作者自己也承认，在初期，自己没有太多设计方面的灵感，因此写好搜索引擎核心代码之后就借了一个自己最喜欢的皮，发布了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>BuJo ｜ 使用Notion进行个人账目管理、投资管理</title>
      <link>https://frytea.com/archives/490/</link>
      <pubDate>Sat, 28 Nov 2020 05:23:00 +0000</pubDate>
      <guid>https://frytea.com/archives/490/</guid>
      <description>&lt;p&gt;Notion 是一款国人开发，依托于AWS的云笔记软件，以功能强大、兼容Markdown而著称。自从接触了Notion，笔者就预感这款软件有着无限可能。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2020/11/28/20201128131710e25232d13f8aa14f.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bullet Journal 的前世今生 ｜ 效率至上</title>
      <link>https://frytea.com/archives/488/</link>
      <pubDate>Fri, 20 Nov 2020 14:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/488/</guid>
      <description>&lt;p&gt;《子弹笔记》的作者赖德·卡罗尔，为了体现这套方法的速度、效率、内容和目的，决定称其为“子弹笔记术”（Bullet Journal，简称Bujo）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>苹果M1芯片对大众生活的影响 ｜ M1现存问题及未来发展 ｜ MacBook</title>
      <link>https://frytea.com/archives/486/</link>
      <pubDate>Wed, 18 Nov 2020 14:33:25 +0000</pubDate>
      <guid>https://frytea.com/archives/486/</guid>
      <description>&lt;p&gt;苹果在今年（2020年）11月11日凌晨举办的今秋第三场线上发布会上发布了搭载Apple自研M1芯片的Mac，分别是MacBook Air、13寸MacBook Pro 以及 Mac mini。苹果这一“不讲武德”直接干翻老大哥英特尔的行为在科技圈引起轩然大波，苹果这一举动也为死水般的笔记本市场溅起一阵阵波浪。那这苹果自研芯片究竟会给人们的生活带来什么变化呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>随机命令自动测试脚本 | SecureCRT 下 Python 实现</title>
      <link>https://frytea.com/archives/485/</link>
      <pubDate>Tue, 17 Nov 2020 03:52:00 +0000</pubDate>
      <guid>https://frytea.com/archives/485/</guid>
      <description>&lt;p&gt;在进行命令终端软件开发及通信道路开发时，常常需要测试终端的稳定性，此时通过命令脚本自动化的敲命令可以节省许多人力，这里写了一个SecureCRT终端模拟软件下python实现的自动化测试脚本，可以从命令列表中随笔选取命令进行测试，具有设置睡眠时间及超时发现功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>frp实现内网穿透 | frp服务端配置 | frp客户端配置</title>
      <link>https://frytea.com/archives/482/</link>
      <pubDate>Fri, 13 Nov 2020 06:59:00 +0000</pubDate>
      <guid>https://frytea.com/archives/482/</guid>
      <description>&lt;p&gt;frp 是一个专注于内网穿透的高性能的反向代理应用，支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。&lt;/p&gt;</description>
    </item>
    <item>
      <title>群晖OpenVPN服务器网关配置</title>
      <link>https://frytea.com/archives/481/</link>
      <pubDate>Fri, 13 Nov 2020 06:19:50 +0000</pubDate>
      <guid>https://frytea.com/archives/481/</guid>
      <description>&lt;p&gt;使用群晖OpenVpn服务套件搭建了VPN服务后，导出配置文件，默认是不会在客户端的  &lt;code&gt;openvpn.ovpn&lt;/code&gt; 文件中设置重定向网关选项的，此时连接上VPN是无法通过该VPN访问互联网的，只能访问局域网。如果想要访问互联网，打开网管重定向即可：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用git将code同时提交多个远程仓</title>
      <link>https://frytea.com/archives/480/</link>
      <pubDate>Fri, 13 Nov 2020 03:40:08 +0000</pubDate>
      <guid>https://frytea.com/archives/480/</guid>
      <description>&lt;p&gt;想用一次git提交到多个仓库，可以通过以下命令实现：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置第一个远程仓库
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;git git remote add origin https:&lt;span style=&#34;color:#75715e&#34;&gt;//github.com/w4ctech/hellogit.git
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 新增一个远程仓库
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;git remote set&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;add origin https:&lt;span style=&#34;color:#75715e&#34;&gt;//gitee.com/w4ctech/hellogit.git
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 新增另一个远程仓库
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;git remote set&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;add origin  https:&lt;span style=&#34;color:#75715e&#34;&gt;//git.coding.net/w4ctech/hellogit.git
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 查看当前远程仓库
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;git remote &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此后的只需一次提交，就会将代码提交至三个仓库，如需删除某个仓库，只需执行：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git 回滚到某个 commit 上及返回主分支</title>
      <link>https://frytea.com/archives/479/</link>
      <pubDate>Fri, 13 Nov 2020 03:39:24 +0000</pubDate>
      <guid>https://frytea.com/archives/479/</guid>
      <description>&lt;h2 id=&#34;1-代码回退&#34;&gt;1. 代码回退&lt;/h2&gt;
&lt;p&gt;首先要用 &lt;code&gt;git log&lt;/code&gt; 查看回到的版本，然后用以下命令，将本地代码回退到某个版本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git reset --hard HEAD^        回退到上个版本
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git reset --hard commit_id    退到/进到 指定 commit_id
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果需要将回退的某个版本提交远程，可执行以下命令：&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决群晖Moment不显示拷入照片</title>
      <link>https://frytea.com/archives/477/</link>
      <pubDate>Sat, 07 Nov 2020 15:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/477/</guid>
      <description>&lt;p&gt;近期趁着双十一购入群晖一台，装好Moments，将照片导入Moment文件夹，但刷新并没有在Moments主页看到直接考入文件夹内的照片。&lt;/p&gt;
&lt;p&gt;开始以为是正在转码，搜索一圈也有人这么说，后来有人提出是由于权限问题，于是尝试修复。&lt;/p&gt;</description>
    </item>
    <item>
      <title>局域网内跨平台传输文件、文字 ｜ Dukto</title>
      <link>https://frytea.com/archives/474/</link>
      <pubDate>Fri, 30 Oct 2020 03:34:00 +0000</pubDate>
      <guid>https://frytea.com/archives/474/</guid>
      <description>&lt;p&gt;在日常生活和实际工作中经常需要涉及到局域网内多设备传输文件，此前尝试过飞鸽传书，发现Mac平台体验并不好，也不够可靠；使用NAS等网络存储设备可以解决，但不能随时随地都带这个NAS，此时通过一款可跨平台传输文件的工具在网内分享文件就可极大提升效率。&lt;/p&gt;</description>
    </item>
    <item>
      <title>iTerms 常用快捷键</title>
      <link>https://frytea.com/archives/472/</link>
      <pubDate>Thu, 22 Oct 2020 07:21:00 +0000</pubDate>
      <guid>https://frytea.com/archives/472/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;切换 tab： &lt;code&gt;⌘+←&lt;/code&gt; , &lt;code&gt;⌘+→&lt;/code&gt; , &lt;code&gt;⌘+{&lt;/code&gt; , &lt;code&gt;⌘+}&lt;/code&gt; , &lt;code&gt;⌘+数字&lt;/code&gt; 直接定位到该 tab；&lt;/li&gt;
&lt;li&gt;新建 tab： &lt;code&gt;⌘+t&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;顺序切换 pane： &lt;code&gt;⌘+[&lt;/code&gt; , &lt;code&gt;⌘+]&lt;/code&gt; ；&lt;/li&gt;
&lt;li&gt;按方向切换 pane： &lt;code&gt;⌘+Option+方向键&lt;/code&gt; ；&lt;/li&gt;
&lt;li&gt;切分屏幕： &lt;code&gt;⌘+d&lt;/code&gt;  水平切分， &lt;code&gt;⌘+Shift+d&lt;/code&gt;  垂直切分；&lt;/li&gt;
&lt;li&gt;智能查找，支持正则查找： &lt;code&gt;⌘+f&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;多个Tab、窗口执行同一个命令： &lt;code&gt;⌘Command + ⇧Shift + I&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;你应该知道的 iTerm2 使用方法&amp;ndash;MAC终端工具：&lt;a href=&#34;http://wulfric.me/2015/08/iterm2/&#34;&gt;http://wulfric.me/2015/08/iterm2/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Send command to all iTerm 2 panes：&lt;a href=&#34;https://blog.blakesimpson.co.uk/page.php?id=35&amp;amp;title=send-command-to-all-iterm-2-panes&#34;&gt;https://blog.blakesimpson.co.uk/page.php?id=35&amp;amp;title=send-command-to-all-iterm-2-panes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;iTerms多个Tab、窗口执行同一个命令：&lt;a href=&#34;https://blog.csdn.net/u014440417/article/details/81136505&#34;&gt;https://blog.csdn.net/u014440417/article/details/81136505&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Python执行或远程执行shell命令</title>
      <link>https://frytea.com/archives/471/</link>
      <pubDate>Wed, 21 Oct 2020 13:34:00 +0000</pubDate>
      <guid>https://frytea.com/archives/471/</guid>
      <description>&lt;p&gt;最近想要实现通过脚本循环再 Linux 下运行 shell 命令，经过探索发现使用 Python 语言有几种解决方案，在此简单记录。&lt;/p&gt;
&lt;h2 id=&#34;方案一脚本本地执行命令&#34;&gt;方案一：脚本本地执行命令&lt;/h2&gt;
&lt;p&gt;在 Python 中有两个库都可以实现运行 shell 命令的效果：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; subprocess
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用方法也很简单：&lt;/p&gt;</description>
    </item>
    <item>
      <title>终端抓包神器 ｜ tcpdump参数解析及使用</title>
      <link>https://frytea.com/archives/470/</link>
      <pubDate>Tue, 20 Oct 2020 09:21:00 +0000</pubDate>
      <guid>https://frytea.com/archives/470/</guid>
      <description>&lt;p&gt;本文整理转自：&lt;a href=&#34;https://blog.csdn.net/hzhsan/article/details/43445787&#34;&gt;tcpdump参数解析及使用详解&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;tcpdump介绍&#34;&gt;&lt;strong&gt;tcpdump介绍&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/Tcpdump&#34;&gt;tcpdump&lt;/a&gt; 是一个运行在命令行下的抓包工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。tcpdump 适用于大多数的类Unix系统操作系统(如linux,BSD等)。类Unix系统的 tcpdump 需要使用libpcap这个捕捉数据的库就像 windows下的WinPcap。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SecureCRT下Python脚本编写</title>
      <link>https://frytea.com/archives/469/</link>
      <pubDate>Thu, 15 Oct 2020 13:40:00 +0000</pubDate>
      <guid>https://frytea.com/archives/469/</guid>
      <description>&lt;p&gt;本文主要内容转自：&lt;a href=&#34;https://www.cnblogs.com/zhaoyujiao/p/4908627.html&#34;&gt;SecureCRT中python脚本编写学习指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SecureCRT 支持 VB、JavaScript、Python 等多种脚本语言。&lt;/p&gt;
&lt;h2 id=&#34;一使用-python-语言实现-securecrt-中的-dialog-功能&#34;&gt;一、&lt;strong&gt;使用 python 语言实现 SecureCRT 中的 Dialog 功能&lt;/strong&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# $language = &amp;#34;Python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# $interface = &amp;#34;1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#crt.Dialog.FileOpenDialog([title,[buttonLabel,[defaultFilename,[filter]]]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#弹出一个对话框，用于选择单个文件;如果选择了具体文件则返回该文件的绝对路径，如果选择了弹窗的“取消”，则返回空。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;filePath &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;  crt.Dialog.FileOpenDialog&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;please open a file&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;open&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a.log&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(*.log)|*.log&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#filePath =  crt.Dialog.FileOpenDialog(&amp;#34;&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;a.log&amp;#34;,&amp;#34;&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#crt.Dialog.MessageBox(message, [title, [icon|buttons]]) 警告、按钮类型弹出一个消息框，可以定义按钮，使用按钮和文本消息来实现和用户的简单对话；&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;filePath,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;,64|0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;会话已断开&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,64|2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;确认是否退出&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,32|1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;确认是否退出&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,32|3&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;是否继续安装&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,32|4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;此会话已打开&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,48|5&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;无法连接此窗口&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,16|6&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#crt.Dialog.Prompt(message [, title [,default [,isPassword ]]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#弹出一个输入框，用户可以填写文字，比如填写文件名，填写路径，填写IP地址等,运行结果如果点击&amp;#39;ok&amp;#39;，返回输入的字符串，否则返回&amp;#34;&amp;#34; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;password &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Dialog.Prompt&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;,False&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;password,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;,64|0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;password &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Dialog.Prompt&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;,True&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;password,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;,64|0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;二使用-python-语言实现-securecrt-中的-screen-功能&#34;&gt;二、&lt;strong&gt;使用 python 语言实现 SecureCRT 中的 Screen 功能&lt;/strong&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# $language = &amp;#34;Python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# $interface = &amp;#34;1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# CurrentColumn返回当前光标的列坐标。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curCol &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;  crt.Screen.CurrentColumn
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;str&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;curCol&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# CurrentRow返回当前光标的行坐标。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curRow &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Screen.CurrentRow
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;str&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;curRow&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Columns 返回当前屏幕的最大列宽&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cols &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Screen.Columns
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;str&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;cols&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Rows 返回当前屏幕的最大行宽&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rows &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Screen.Rows
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;str&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;rows&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#IgnoreEscape 定义当使用WaitForString、WaitForStrings和ReadString这三个方法时是否获取Escape字符（特殊字符如回车）默认是会获取的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.IgnoreEscape &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; False
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;crt.Screen.ReadString&lt;span style=&#34;color:#f92672&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\03&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;,5&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#获取ctrl+c&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.IgnoreEscape &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; True
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;crt.Screen.ReadString&lt;span style=&#34;color:#f92672&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\03&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;,2&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;#不获取ctrl+c&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# MatchIndex 定义当使用WaitForStrings和ReadString这三个方法时会根据参数的位置 获取返回值，从1开始计算，如果没有一个匹配则返回0.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;outPut &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Screen.ReadString&lt;span style=&#34;color:#f92672&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;warning&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;,10&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Screen.MatchIndex
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Timed out!&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Found &amp;#39;error&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Found &amp;#39;warning&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 3&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Found &amp;#39;#&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Synchronous 设置屏幕的同步属性。若设置为false，则在脚本中使用WaitForString、WaitForStrings、ReadString函数时可能存在丢失一部分数据的现象，设置为true后可能会存在屏幕卡顿的情况，默认为false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Synchronous &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; True
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.ReadString&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.WaitForString&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.WaitForStrings&lt;span style=&#34;color:#f92672&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;conf t\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 方法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Clear()清屏功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# crt.Screen.Clear()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get()按照坐标取出一个矩形框内的屏幕上的字符(即从某行某列开始到其它行其它列)，不包含字符串中的回车换行符，所以这个多用于获取无格式的光标处字符串或某小段特定区域字符串。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;out &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Screen.Get&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;row1, col1, row2, col2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;out&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# get2()解释按照坐标取出一个矩形框内的屏幕上的字符(即从某行某列开始到其它行其它列)，包含字符串中的回车换行符，所以这个多用于获取大段带格式的字符串。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Get2&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;row1, col1, row2, col2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# IgnoreCase 使用全局参数设置控制在使用WaitForString、WaitForStrings和ReadString这三个函数时是否对大小写敏感，默认为false大小写字符串都会检查，设置为true时则不会检测大小写。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.IgnoreCase &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; True
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;show memory\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.WaitForString&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;more&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.WaitForStrings&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;more&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.ReadString&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;more&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Send() 向远端设备或者屏幕发送字符串，当向屏幕发送字符串时需要指定第二个参数为Ture&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;show version\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\nhello,world!\r\n&amp;#34;&lt;/span&gt;,True&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.IgnoreCase &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; True
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;crt.Screen.WaitForString&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;more&amp;#34;&lt;/span&gt;,10&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;:    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# SendKeys()向当前窗口发送按键，包含组合按键，比如可以发送类似&amp;#34;CTRL+ALT+C&amp;#34;等这样的组合键，这样写即可：crt.screen.sendkeys(&amp;#34;^%c&amp;#34;);这个功能需要语言本身支持，目前只有VBS和JS脚本可以使用。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# SendSpecial()可以发送特殊控制码，这个控制码是Crt内置的功能，具体可以包含的有Menu、Telnet、VT functions功能列表中提供的所有功能，&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.SendSpecial&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;vT_HOLD_SCREEN&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# WaitForCursor()等待光标移动，当移动时返回值为true，当有超时时间参数且超时时返回false，否则会一直等待光标移动。利用这个功能可以用来判断一个命令的输出是否结束，&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.WaitForCursor&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;5&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\nhello,world!\r\n&amp;#34;&lt;/span&gt;,True&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt; crt.Screen.WaitForCursor&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;5&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;show version\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# WaitForKey()检测有键盘按键时返回true，当有超时时间参数且超时时返回false，否则会一直等待按键&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;crt.Screen.WaitForKey&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;5&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Screen.Send&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;show version\r\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# WaitForString()一般用于发送命令后等待某字符串&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# crt.Screen.WaitForString(string,[timeout],[bCaseInsensitive])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.WaitForString&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;,10&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# WaitForStrings()与WaitForString是同样的功能，可以等待多个字符串&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;outPut &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Screen.WaitForStrings&lt;span style=&#34;color:#f92672&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;warning&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;,10&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; crt.Screen.MatchIndex
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Timed out!&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Found &amp;#39;error&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Found &amp;#39;warning&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;index &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 3&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crt.Dialog.MessageBox&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Found &amp;#39;#&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ReadString()与WaitForStrings功能类似，都是等待某几个字符出现，不同的是它还会读取字符串之前出现的所有字符。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crt.Screen.ReadString&lt;span style=&#34;color:#f92672&#34;&gt;([&lt;/span&gt;string1,string2..&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;timeout&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;bCaseInsensitive&lt;span style=&#34;color:#f92672&#34;&gt;])&lt;/span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1. string，必选参数，等待的字符串，最少有一个，可以是特殊字符比如:&lt;span style=&#34;color:#ae81ff&#34;&gt;\r\n&lt;/span&gt;；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2. timeout，可选参数，超时时间，当检测不到对应字符串时会返回false，没有此参数时会一直等待；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3. bCaseInsensitive，可选参数，大小写不敏感，默认值是false，表示将检测字符串的大小写，当为true时不检测大小写。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;三实例&#34;&gt;三、实例&lt;/h2&gt;
&lt;h3 id=&#34;1-实例一循环运行命令&#34;&gt;1. 实例一，循环运行命令&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# $language = &amp;#34;python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# $interface = &amp;#34;1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# This automatically generated script may need to be&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# edited in order to work correctly.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; time
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;start_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; time&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;time()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;end_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; time&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;time()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Main&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		end_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; time&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;time()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		crt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Screen&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Synchronous &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		crt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Screen&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Send(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;?&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 		crt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Screen&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Send(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\r\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		crt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Screen&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Send(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\r\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		time&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sleep(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	running_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; end_time &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; start_time
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	msg &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;会话已断开&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;running ms : &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; str(running_time) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;start ms   : &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; str(start_time) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ent ms     : &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; str(end_time) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	crt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Dialog&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;MessageBox(msg,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;session&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Main()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SecureCRT 中 python 脚本编写学习指南：&lt;a href=&#34;https://www.cnblogs.com/zhaoyujiao/p/4908627.html&#34;&gt;https://www.cnblogs.com/zhaoyujiao/p/4908627.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;友情链接：&lt;/strong&gt;&lt;a href=&#34;http://www.cnblogs.com/OnOwnRoad/&#34;&gt;http://www.cnblogs.com/OnOwnRoad/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python time sleep()方法：&lt;a href=&#34;https://www.runoob.com/python/att-time-sleep.html&#34;&gt;https://www.runoob.com/python/att-time-sleep.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python（2）变量声明、变量类型：&lt;a href=&#34;https://blog.csdn.net/qq20004604/article/details/78176329&#34;&gt;https://blog.csdn.net/qq20004604/article/details/78176329&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python 日期和时间：&lt;a href=&#34;https://www.runoob.com/python/python-date-time.html&#34;&gt;https://www.runoob.com/python/python-date-time.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;可能是最全面的 python 字符串拼接总结：&lt;a href=&#34;https://segmentfault.com/a/1190000015475309&#34;&gt;https://segmentfault.com/a/1190000015475309&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;python 中整数，浮点数和字符串的转换：&lt;a href=&#34;https://blog.csdn.net/mx_windforce/article/details/9009455&#34;&gt;https://blog.csdn.net/mx_windforce/article/details/9009455&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;python 毫秒级 sleep：&lt;a href=&#34;https://www.cnblogs.com/mmix2009/p/3223188.html&#34;&gt;https://www.cnblogs.com/mmix2009/p/3223188.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python 获取以毫秒为单位的时间戳：&lt;a href=&#34;https://www.jianshu.com/p/9a8bfc04dbac&#34;&gt;https://www.jianshu.com/p/9a8bfc04dbac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;python 基础学习 04（死循环）：&lt;a href=&#34;https://blog.csdn.net/yujin2010good/article/details/51278706&#34;&gt;https://blog.csdn.net/yujin2010good/article/details/51278706&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Make参数</title>
      <link>https://frytea.com/archives/468/</link>
      <pubDate>Wed, 14 Oct 2020 15:03:11 +0000</pubDate>
      <guid>https://frytea.com/archives/468/</guid>
      <description>&lt;p&gt;&lt;code&gt;-b&lt;/code&gt; &lt;code&gt;-m&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这两个参数的作用是忽略和其它版本make的兼容性。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-B&lt;/code&gt; &lt;code&gt;–always-make&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;认为所有的目标都需要更新（重编译）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;-C&lt;/code&gt; &lt;code&gt;–directory=&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;指定读取makefile的目录。如果有多个“-C”参数，make的解释是后面的路径以前面的作为相对路径，并以最后的目录作为被指定目录。如：“make –C ~hchen/test –C prog”等价于“make –C ~hchen/test/prog”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Makefile实例：批量编译多个目标</title>
      <link>https://frytea.com/archives/467/</link>
      <pubDate>Wed, 14 Oct 2020 14:56:37 +0000</pubDate>
      <guid>https://frytea.com/archives/467/</guid>
      <description>&lt;p&gt;gist: &lt;a href=&#34;https://gist.github.com/songtianlun/8984626fd80cd20b7c2e71f95caaf8d1&#34;&gt;https://gist.github.com/songtianlun/8984626fd80cd20b7c2e71f95caaf8d1&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Batch Single C file MakeFile

# 指定CPU架构 Architecture -&amp;gt; ARCH
ARCH ?= 
CC = $(ARCH)gcc
SUFFIX = .c
CFLAGS += -Wall -g
LD = 

CUR_SOURCE = $(wildcard *$(SUFFIX))
CUR_TARGETS = $(patsubst %$(SUFFIX), %, $(CUR_SOURCE))

all:$(CUR_TARGETS)

# %:%.c 是一个表示与目标相同 文件的模式变量 
$(CUR_TARGETS):%:%$(SUFFIX)
	$(CC) $&amp;lt; $(CFLAGS) -o $@ $(LD)

# 指定伪目标
.PHONY:clean all
	clean:
		-rm -rf $(TARGETS)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;arch 这个词到底是什么意思？：&lt;a href=&#34;https://www.v2ex.com/t/389388&#34;&gt;https://www.v2ex.com/t/389388&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;玩转Makefile | 一次编译多个目标：&lt;a href=&#34;https://blog.csdn.net/yychuyu/article/details/79950414&#34;&gt;https://blog.csdn.net/yychuyu/article/details/79950414&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Makefile中部分函数的使用</title>
      <link>https://frytea.com/archives/466/</link>
      <pubDate>Wed, 14 Oct 2020 14:55:08 +0000</pubDate>
      <guid>https://frytea.com/archives/466/</guid>
      <description>&lt;h2 id=&#34;foreach&#34;&gt;&lt;code&gt;foreach&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;一、作用&lt;/p&gt;
&lt;p&gt;循环处理文件列表。&lt;/p&gt;
&lt;p&gt;二、格式&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$(foreach var text commond)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;var&lt;/code&gt;：局部变量&lt;/p&gt;
&lt;p&gt;&lt;code&gt;text&lt;/code&gt;：文件列表，空格隔开，每一次取一个值赋值为变量var&lt;/p&gt;
&lt;p&gt;&lt;code&gt;commond&lt;/code&gt;：对var变量进行操作（一般会使用var变量，不然没意义），每次操作结果都会以空格隔开，最后返回空格隔开的列表。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Makefile基础语法</title>
      <link>https://frytea.com/archives/465/</link>
      <pubDate>Wed, 14 Oct 2020 14:53:18 +0000</pubDate>
      <guid>https://frytea.com/archives/465/</guid>
      <description>&lt;p&gt;&lt;code&gt;Makefile&lt;/code&gt; 是描述文件依赖关系的说明，由若干个规则组成，每个 &lt;strong&gt;规则&lt;/strong&gt; 的格式如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;目标：依赖关系
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;tab键&amp;gt; 命令
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目标&lt;/strong&gt; 是指 &lt;code&gt;make&lt;/code&gt; 最终要创造的产物，也是 &lt;code&gt;make&lt;/code&gt; 执行的动作名称，例如 &lt;code&gt;clean&lt;/code&gt; ；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;依赖关系&lt;/strong&gt; 是指编译目标体需要依赖的一个或多个文件列表；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;命令&lt;/strong&gt; 是指为了从依赖文件创造目标文件所需执行的命令。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;make&lt;/code&gt; 执行的动作也是一个目标，为避免该目标和文件目标冲突，可以使用以下格式将动作指定伪目标：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Make/Makefile 简介</title>
      <link>https://frytea.com/archives/464/</link>
      <pubDate>Wed, 14 Oct 2020 14:52:50 +0000</pubDate>
      <guid>https://frytea.com/archives/464/</guid>
      <description>&lt;p&gt;&lt;code&gt;Make&lt;/code&gt; 工具可用于在 &lt;code&gt;Unix-like&lt;/code&gt; 和 &lt;code&gt;Microsoft Windows&lt;/code&gt; 系统上，根据 &lt;code&gt;Makrfile&lt;/code&gt; 文件指定的目标及步骤，自动编译构建、更新目标文件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;类Unix&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Makefile起源于&lt;a href=&#34;https://en.wikipedia.org/wiki/Unix-like&#34;&gt;类Unix&lt;/a&gt;系统，在此类环境中仍然是主要的软件构建机制。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Windows&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows通过其nmake实用程序支持各种makefile文件。可以在Windows的&lt;a href=&#34;https://en.wikipedia.org/wiki/Cygwin&#34;&gt;Cygwin&lt;/a&gt;环境或&lt;a href=&#34;https://en.wikipedia.org/wiki/Mingw&#34;&gt;Mingw中&lt;/a&gt;执行类似Unix的标准makefile 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>自建KMS服务器 | 持续激活Windows</title>
      <link>https://frytea.com/archives/462/</link>
      <pubDate>Fri, 09 Oct 2020 08:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/462/</guid>
      <description>&lt;p&gt;最近在 GitHub 上发现一个项目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dylanbai8&#34;&gt;dylanbai8&lt;/a&gt;/&lt;strong&gt;&lt;a href=&#34;https://github.com/dylanbai8/kmspro&#34;&gt;kmspro&lt;/a&gt;：&lt;/strong&gt;&lt;a href=&#34;https://github.com/dylanbai8/kmspro&#34;&gt;https://github.com/dylanbai8/kmspro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;该项目中提供了一个可以一键安装KMS服务器的脚本，可以在 Linux / Windows 设备上一键安装 KMS 服务器，未来就可以通过自建的KMS服务器激活Windows服务了，使用方法也很简单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chevereto 配合 Picgo 打造个人相册/图床解决方案</title>
      <link>https://frytea.com/archives/459/</link>
      <pubDate>Mon, 05 Oct 2020 00:54:00 +0000</pubDate>
      <guid>https://frytea.com/archives/459/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://chevereto.com/&#34;&gt;Chevereto&lt;/a&gt; 是一款很好用&lt;strong&gt;图床工具&lt;/strong&gt;，可以实现一键上传、一键 &lt;code&gt;Markdown&lt;/code&gt; 引用等功能，最近发现还可以和 &lt;a href=&#34;https://molunerfinn.com/PicGo/&#34;&gt;Picgo&lt;/a&gt; 配合起来使用，打造更加方便实用个人图床。&lt;/p&gt;
&lt;p&gt;Picgo 是&lt;strong&gt;一个用于快速上传图片并获取图片 URL 链接的工具&lt;/strong&gt;，支持全桌面客户端，应该是目前本人用过最好用的图床链接工具了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微PE制作U盘启动盘，并安装Win10</title>
      <link>https://frytea.com/archives/457/</link>
      <pubDate>Mon, 28 Sep 2020 13:59:45 +0000</pubDate>
      <guid>https://frytea.com/archives/457/</guid>
      <description>&lt;p&gt;&lt;code&gt;微PE&lt;/code&gt; 是一款很好用的 &lt;code&gt;WinPE&lt;/code&gt; （Windows预先安装环境（英语：Microsoft Windows Preinstallation Environment），简称Windows PE或WinPE）工具箱，可以用来制作一个随插随用的U盘启动盘，并且不影响U盘的日常使用，在 &lt;code&gt;Windows&lt;/code&gt; 系统电脑的系统出问题时会是救命般的存在。下面就来介绍一下如何制作 &lt;code&gt;PE启动盘&lt;/code&gt; ，并使用它来安装 &lt;code&gt;Win10&lt;/code&gt; 操作系统。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 特殊权限 SUID,SGID,SBIT</title>
      <link>https://frytea.com/archives/454/</link>
      <pubDate>Wed, 16 Sep 2020 02:05:00 +0000</pubDate>
      <guid>https://frytea.com/archives/454/</guid>
      <description>&lt;p&gt;setuid 和 setgid 分别是 set uid ID upon execution 和 set group ID upon execution 的缩写。我们一般会再次把它们缩写为 suid 和 sgid。它们是控制文件访问的权限标志(flag)，它们分别允许用户以可执行文件的 owner 或 owner group 的权限运行可执行文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python解析变长结构体</title>
      <link>https://frytea.com/archives/453/</link>
      <pubDate>Mon, 14 Sep 2020 08:21:00 +0000</pubDate>
      <guid>https://frytea.com/archives/453/</guid>
      <description>&lt;p&gt;最近接到一个需求，需要使用 Python 解析 C 来的数据包，而数据包中的格式是通过如下结构体定义的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;msg_t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; oid;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; msg_len;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; msg_data[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}MSG_T;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中的 &lt;code&gt;msg_data&lt;/code&gt; 字符串的长度是由 &lt;code&gt;msg_len&lt;/code&gt; 给出的，因此需要首先解析出 &lt;code&gt;msg_len&lt;/code&gt; 的数值，再读取 &lt;code&gt;msg_len&lt;/code&gt; 的内容。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python3下基于Scapy库完成网卡抓包解析</title>
      <link>https://frytea.com/archives/451/</link>
      <pubDate>Mon, 07 Sep 2020 06:55:08 +0000</pubDate>
      <guid>https://frytea.com/archives/451/</guid>
      <description>&lt;p&gt;Scapy是一个可以让用户发送、侦听和解析并伪装网络报文的Python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;Python&lt;/code&gt; 代码中可以通过 &lt;code&gt;sniff&lt;/code&gt; 函数调用抓包分析，并对抓到的包进行回调操作。&lt;/p&gt;</description>
    </item>
    <item>
      <title>LEDE(OpenWrt)安装openclash ｜旁路由技巧 ｜ 配置网络流量全部通过旁路由</title>
      <link>https://frytea.com/archives/450/</link>
      <pubDate>Fri, 04 Sep 2020 04:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/450/</guid>
      <description>&lt;p&gt;今天我们来安装一个运行在OpenWrt上的Clash客户端，兼容Shadowsocks、ShadowsocksR、Vmess、Trojan、Snell等协议，可以根据灵活的规则配置实现策略代理。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Esxi安装LEDE(OpenWrt) ｜ 旧电脑变旁路由</title>
      <link>https://frytea.com/archives/449/</link>
      <pubDate>Fri, 04 Sep 2020 04:09:00 +0000</pubDate>
      <guid>https://frytea.com/archives/449/</guid>
      <description>&lt;p&gt;在上篇文章中介绍了如何将旧电脑变成私有云计算数据中心，今天就来讲讲如何在这个数据中心安装一个 OpenWrt ，使其摇身一变为庞路由。&lt;/p&gt;
&lt;p&gt;在继续之前简单介绍 LEDE 和 OpenWrt 的区别：&lt;/p&gt;</description>
    </item>
    <item>
      <title>变废为宝 ｜ 旧电脑变云数据中心 ｜ Esxi 配置</title>
      <link>https://frytea.com/archives/448/</link>
      <pubDate>Fri, 04 Sep 2020 03:43:05 +0000</pubDate>
      <guid>https://frytea.com/archives/448/</guid>
      <description>&lt;p&gt;VMware Inc. 是虚拟机软件行业的老大，vSphere 是在VMware数据中心产品下的一套软件，ESXi, vSphere client 和 vCeneter 都是 vSphere 的组件。ESXi是 vSphere 中最重要的一个组件。ESXi 是虚拟化服务。所有的虚拟机都是运行在 ESXi 服务上面。为了安装，管理和访问这些虚拟机，你需要另外的 vSphere 套件，也就是 vSphere client 或 vCenter。vSphere client允许管理员访问 ESXi 服务并管理虚拟机。vSphere client 是安装在客户机(也就是管理员的笔记本)上面。vSphere client 被用来连接 ESXi 服务器和管理任务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决SSH登录缓慢</title>
      <link>https://frytea.com/archives/446/</link>
      <pubDate>Wed, 02 Sep 2020 09:52:00 +0000</pubDate>
      <guid>https://frytea.com/archives/446/</guid>
      <description>&lt;h2 id=&#34;解决方法&#34;&gt;解决方法&lt;/h2&gt;
&lt;p&gt;第一步：修改SSH服务端配置文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim /etc/ssh/sshd_config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第二步：按照下面说明进行修改：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- GSSAPIAuthentication yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+ GSSAPIAuthentication no
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- UseDNS yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;+ UseDNS no
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;UseDNS选项是打开的话，服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名，然后根据查询出的客户端主机名进行DNS正向A记录查询，并验证是否与原始 IP地址一致，通过此种措施来防止客户端欺骗&lt;/li&gt;
&lt;li&gt;GSSAPIAuthentication 认证很少用到，关闭可以加快SSH访问速度&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SSH 中的 GSSAPI 相关选项： &lt;a href=&#34;https://jaminzhang.github.io/linux/GSSAPI-related-options-in-ssh-configuration/&#34;&gt;https://jaminzhang.github.io/linux/GSSAPI-related-options-in-ssh-configuration/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;通过关闭 UseDNS和GSSAPIAuthentication选项加速 SSH登录： &lt;a href=&#34;https://www.cnblogs.com/wjoyxt/p/3790537.html&#34;&gt;https://www.cnblogs.com/wjoyxt/p/3790537.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>OpsnSSH抓包分析 | SSH协议分析</title>
      <link>https://frytea.com/archives/440/</link>
      <pubDate>Mon, 24 Aug 2020 11:30:00 +0000</pubDate>
      <guid>https://frytea.com/archives/440/</guid>
      <description>&lt;p&gt;SSH 协议是建立在不安全的网络之上的进行远程安全登陆的协议。它是一个协议族，其中有三个子协议，分别是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1、传输层协议&lt;code&gt;[SSH-TRANS]&lt;/code&gt;:提供服务器验证、完整性和保密性功能,建立在传统的 TCP/IP 协议之上。&lt;/li&gt;
&lt;li&gt;2、验证协议&lt;code&gt;[SSH-USERAUTH]&lt;/code&gt;:向服务器验证客户端用户，有基于用户名密码和公钥两种验证方式，建立在传输层协议&lt;code&gt;[SSH-TRANS]&lt;/code&gt;之上。&lt;/li&gt;
&lt;li&gt;3、连接协议&lt;code&gt;[SSH-CONNECT]&lt;/code&gt;:将加密隧道复用为若干逻辑信道。它建立在验证协议之上。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;https://imagehost-cdn.frytea.com/20200820115639.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/20200820115639.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux下文件系统技巧 | 统计个数 | 只见文件或目录</title>
      <link>https://frytea.com/archives/439/</link>
      <pubDate>Mon, 24 Aug 2020 02:42:00 +0000</pubDate>
      <guid>https://frytea.com/archives/439/</guid>
      <description>&lt;h2 id=&#34;统计个数&#34;&gt;统计个数&lt;/h2&gt;
&lt;p&gt;查看某目录下文件的个数&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls -l | grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^-&amp;#34;&lt;/span&gt; | wc -l
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls -l /etc | grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^-&amp;#34;&lt;/span&gt; | wc -l
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;134&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ find ./company -type f | wc -l
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Example &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo find /etc -type f | wc -l
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3829&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看某目录下文件的个数，包括子目录里的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Putty个性化配置</title>
      <link>https://frytea.com/archives/437/</link>
      <pubDate>Fri, 21 Aug 2020 02:19:52 +0000</pubDate>
      <guid>https://frytea.com/archives/437/</guid>
      <description>&lt;p&gt;终端工具用一圈，还是Putty简单好用。就是Putty难看的外观、不清晰的字体劝退了许多人，今天就简单介绍一种快速美化putty的方法。&lt;/p&gt;
&lt;p&gt;Putty的配置文件通过注册表来记录，因此通过修改注册表来修改其配置。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu20.04修改网卡配置</title>
      <link>https://frytea.com/archives/435/</link>
      <pubDate>Thu, 20 Aug 2020 01:52:00 +0000</pubDate>
      <guid>https://frytea.com/archives/435/</guid>
      <description>&lt;p&gt;近期常常用到Ubuntu20.04server镜像，在一次虚拟机配置时不小心配错了ip，修在网络配置时找了一大圈教程都是无效。最后发现&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“ubuntu从17.10开始，已放弃在 &lt;code&gt;/etc/network/interfaces&lt;/code&gt; 里固定IP的配置，即使配置也不会生效，而是改成netplan方式 ，配置写在 &lt;code&gt;/etc/netplan/01-netcfg.yaml&lt;/code&gt; 或者类似名称的yaml文件里”&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Aria2 &#43; Rclone 实现离线下载 | 完美脚本配置 | 解决无法上传问题</title>
      <link>https://frytea.com/archives/433/</link>
      <pubDate>Wed, 19 Aug 2020 12:08:00 +0000</pubDate>
      <guid>https://frytea.com/archives/433/</guid>
      <description>&lt;p&gt;首先声明，本文完美脚本来自于： &lt;a href=&#34;https://github.com/P3TERX/aria2.conf&#34;&gt;P3TERX/aria2.conf&lt;/a&gt;，本文记录的是安装完美脚本 2020.08.08 版本时遇到的问题。&lt;/p&gt;
&lt;h2 id=&#34;安装步骤&#34;&gt;安装步骤&lt;/h2&gt;
&lt;h3 id=&#34;第一步安装-aria2&#34;&gt;第一步，安装 Aria2&lt;/h3&gt;
&lt;p&gt;这里使用 &lt;a href=&#34;https://github.com/P3TERX/aria2.sh&#34;&gt;Aria2 一键安装管理脚本 增强版&lt;/a&gt;，执行下面的代码下载并运行脚本，出现脚本操作菜单输入 &lt;code&gt;1&lt;/code&gt; 开始安装。&lt;/p&gt;</description>
    </item>
    <item>
      <title>个性化终端 | zsh bash oh-my-zsh</title>
      <link>https://frytea.com/archives/430/</link>
      <pubDate>Sat, 15 Aug 2020 04:09:00 +0000</pubDate>
      <guid>https://frytea.com/archives/430/</guid>
      <description>&lt;p&gt;一直搞不清楚各类终端的区别，最近看到一张图描述的不错。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;http://imagehost-cdn.frytea.com/20200808163258.png&#34; loading=&#34;lazy&#34; src=&#34;http://imagehost-cdn.frytea.com/20200808163258.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;自己装虚拟机发现为什么自己的虚拟机默认sh这么丑，而且自动补全不好用，今天才发现原来看到很好看的终端默认sh是zsh，而非bash。&lt;/p&gt;</description>
    </item>
    <item>
      <title>VirtualBox无限嵌套方法 | 虚拟机套娃</title>
      <link>https://frytea.com/archives/429/</link>
      <pubDate>Sat, 15 Aug 2020 03:18:14 +0000</pubDate>
      <guid>https://frytea.com/archives/429/</guid>
      <description>&lt;p&gt;接上文，最近研究移动办公环境，采用VirtualBox虚拟机环境，由于一些桌面办公软件必须采用Windows系统，因此采用VirtualBox虚拟出一台ltsc版的win10系统，此时需要再搭建一个Linux编程环境，如果独立再开虚拟机，就无法共享win10虚拟机的vpn，之后发现VirtualBox其实是可以无限嵌套的，在此记录方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Win10 LTSC 激活方法 | Win10专业版(永久激活)长期服务版 LTSC 2019密钥</title>
      <link>https://frytea.com/archives/428/</link>
      <pubDate>Sat, 15 Aug 2020 01:17:45 +0000</pubDate>
      <guid>https://frytea.com/archives/428/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;本文核心内容转自雨林木风资讯：&lt;a href=&#34;http://www.ylmfwin100.com/&#34;&gt;http://www.ylmfwin100.com/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;最近计划打造一套随身携带的移动办公环境，可以做到在陌生环境或是临时办公场所，运行自己的虚拟系统或是远程系统，避免数据泄露。考虑了远程桌面+虚拟机两种方案，但考虑到中国境内网络环境复杂，远程桌面常常会因为一些原因中断服务，因此计划配置虚拟机解决这个问题。虚拟机的话系统方面，编程当然是Ubuntu了，除此之外还需要一个撰写文档或是做日常处理的桌面，于是选择了win10 ltsc 这款轻量级系统，之后选择VirtualBox作为虚拟化平台，原因是开源+跨平台。以下是win10 ltsc版激活方法：&lt;/p&gt;</description>
    </item>
    <item>
      <title>一站式安装 X终端全家桶 ｜ XShell Xstp Xmanager ｜ 官方渠道 ｜ 破解</title>
      <link>https://frytea.com/archives/427/</link>
      <pubDate>Fri, 14 Aug 2020 00:40:00 +0000</pubDate>
      <guid>https://frytea.com/archives/427/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;由 NetSarang 公司推出的一系列终端模拟软件：XShell、Xftp、XManager 提供了强大且安全的远程终端模拟功能，是 Windows 平台上比较强大的终端模拟软件之一，几乎是开发者必备软件之一。众所周知该软件分为 评估版本、家庭/学校免费版、激活码注册收费版，而破解往往需要基于&lt;strong&gt;激活码注册收费版&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>VMware 安装运行 deepin 虚拟机 | 体验中国深度</title>
      <link>https://frytea.com/archives/426/</link>
      <pubDate>Thu, 13 Aug 2020 11:49:06 +0000</pubDate>
      <guid>https://frytea.com/archives/426/</guid>
      <description>&lt;h2 id=&#34;一安装步骤&#34;&gt;一、安装步骤&lt;/h2&gt;
&lt;h3 id=&#34;第一步准备系统镜像&#34;&gt;第一步，准备系统镜像&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;镜像在官网下载即可。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;深度官网：&lt;a href=&#34;https://www.deepin.org/zh/&#34;&gt;https://www.deepin.org/zh/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;第二步创建虚拟机&#34;&gt;第二步，创建虚拟机&lt;/h3&gt;
&lt;p&gt;在Vmware Wordstation 中新建一个虚拟机，选择标准安装即可，镜像直接加载刚刚下载好的镜像即可，在选择客户机操作系统时选择 &lt;code&gt;Ubuntu 64&lt;/code&gt; 位。&lt;/p&gt;</description>
    </item>
    <item>
      <title>计算机基础之位运算 | 按位取反</title>
      <link>https://frytea.com/archives/424/</link>
      <pubDate>Thu, 06 Aug 2020 11:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/424/</guid>
      <description>&lt;p&gt;程序中的所有数在计算机内存中都是以二进制的形式储存的。位操作是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上，位运算比加减运算略快，通常位运算比乘除法运算要快很多。在现代架构中，情况并非如此：位运算的运算速度通常与加法运算相同（仍然快于乘法运算）。（摘自维基百科）&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决拉取github仓库报错“gnutls_handshake() failed”问题</title>
      <link>https://frytea.com/archives/421/</link>
      <pubDate>Mon, 27 Jul 2020 00:21:00 +0000</pubDate>
      <guid>https://frytea.com/archives/421/</guid>
      <description>&lt;p&gt;本文首发于：https://blog.frytea.com/archives/421/&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gnutls_handshake&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; failed: The TLS connection was non-properly terminated.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最近为新配置的虚机拉取库，但是从 GitHub 拉取库总是出问题，查阅网上文献将问题锁定在代理，但是找了一圈还是没有找到答案。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim安装插件管理器Vundle</title>
      <link>https://frytea.com/archives/418/</link>
      <pubDate>Sun, 26 Jul 2020 11:17:16 +0000</pubDate>
      <guid>https://frytea.com/archives/418/</guid>
      <description>&lt;h2 id=&#34;安装vundle&#34;&gt;安装vundle&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;默认安装在/.vim/bundle/vundle下；&lt;/p&gt;
&lt;h2 id=&#34;配置说明&#34;&gt;配置说明：&lt;/h2&gt;
&lt;p&gt;插件有三种类型:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Github上vim-scripts仓库的插件&lt;/li&gt;
&lt;li&gt;Github上非vim-scripts仓库的插件&lt;/li&gt;
&lt;li&gt;不在Github上的插件
对于不同的插件，vundle自动管理和下载插件的时候，有不同的地址填写方法，有如下三类：&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
&lt;li&gt;在Github上vim-scripts用户下的仓库,只需要写出repos（仓库）名称&lt;/li&gt;
&lt;li&gt;在Github其他用户下的repos, 需要写出&amp;quot;用户名/repos名&amp;quot;&lt;/li&gt;
&lt;li&gt;不在Github上的插件，需要写出git全路径&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;配置vundle插件&#34;&gt;&lt;strong&gt;配置vundle插件：&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;可以在终端通过vim打开~/.vimrc文件，&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu下为vim安装YouCompleteMe插件</title>
      <link>https://frytea.com/archives/419/</link>
      <pubDate>Sun, 26 Jul 2020 11:17:00 +0000</pubDate>
      <guid>https://frytea.com/archives/419/</guid>
      <description>&lt;h2 id=&#34;前提条件&#34;&gt;前提条件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;已安装 Vundle  (参考 &lt;a href=&#34;https://blog.frytea.com/archives/419/&#34;&gt;Vim安装插件管理器Vundle&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;Vim 版本 ≥ Vim 7.4.1578+ （查看 &lt;code&gt;vim --version&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;
&lt;p&gt;第一步，使用Vundle安装YouCompleteM&lt;/p&gt;
&lt;p&gt;在.vimrc中添加以下内容&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-jsx&#34; data-lang=&#34;jsx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Plugin&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Valloric/YouCompleteMe&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后拉取源码（或是 &lt;code&gt;:PluginInstall&lt;/code&gt; 也可）&lt;/p&gt;</description>
    </item>
    <item>
      <title>VIM 创建程序文件自动添加头部注释</title>
      <link>https://frytea.com/archives/416/</link>
      <pubDate>Sun, 26 Jul 2020 11:16:37 +0000</pubDate>
      <guid>https://frytea.com/archives/416/</guid>
      <description>&lt;p&gt;修改 &lt;code&gt;/etc/vimrc&lt;/code&gt; 或 &lt;code&gt;~/.vimrc&lt;/code&gt;，在文件最后添加以下内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; 当新建 .h .c .hpp .cpp .mk .sh等文件时自动调用SetTitle 函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;autocmd BufNewFile *.[ch],*.hpp,*.cpp,Makefile,*.mk,*.sh exec &amp;#34;&lt;/span&gt;:call SetTitle&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; 加入注释 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;func SetComment&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;1,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/*================================================================&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;,   &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   Copyright (C) &amp;#34;&lt;/span&gt;.strftime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; IEucd Inc. All rights reserved.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+1, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+2, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   文件名称：&amp;#34;&lt;/span&gt;.expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+3, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   创 建 者：SongTL, songtianlun@comleader.com.cn&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+4, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   创建日期：&amp;#34;&lt;/span&gt;.strftime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y年%m月%d日&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+5, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   描    述：&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+6, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+7, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;================================================================*/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+8, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+9, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;endfunc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; 加入shell,Makefile注释
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;func SetComment_sh()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        call setline(3, &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#================================================================&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;4, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   Copyright (C) &amp;#34;&lt;/span&gt;.strftime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; IEucd Inc. All rights reserved.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;5, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;6, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   文件名称：&amp;#34;&lt;/span&gt;.expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;7, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   创 建 者：SongTL, songtianlun@comleader.com.cn&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;8, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   创建日期：&amp;#34;&lt;/span&gt;.strftime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y年%m月%d日&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;9, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   描    述：&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;10, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;11, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#================================================================&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;12, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;13, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;endfunc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; 定义函数SetTitle，自动插入文件头 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;func SetTitle()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        if &amp;amp;filetype == &amp;#39;make&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                call setline(1,&amp;#34;&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                call setline(2,&amp;#34;&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                call SetComment_sh()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        elseif &amp;amp;filetype == &amp;#39;sh&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                call setline(1,&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/system/bin/sh&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;2,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call SetComment_sh&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             call SetComment&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:e&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hpp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+10, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#ifndef _&amp;#34;&lt;/span&gt;.toupper&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;_H&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+11, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#define _&amp;#34;&lt;/span&gt;.toupper&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;_H&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+12, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#ifdef __cplusplus&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+13, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;extern \&amp;#34;C\&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+14, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+15, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#endif&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+16, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+17, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#ifdef __cplusplus&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+18, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;}&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+19, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#endif&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+20, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#endif //&amp;#34;&lt;/span&gt;.toupper&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;_H&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             elseif expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:e&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;h&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+10, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#pragma once&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             elseif &amp;amp;filetype &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+10,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#include \&amp;#34;&amp;#34;&lt;/span&gt;.expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.h\&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             elseif &amp;amp;filetype &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cpp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+10, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#include \&amp;#34;&amp;#34;&lt;/span&gt;.expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.h\&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             endif
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        endif
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;endfun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用效果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>VIM个性化配置（一）</title>
      <link>https://frytea.com/archives/417/</link>
      <pubDate>Sun, 26 Jul 2020 11:16:00 +0000</pubDate>
      <guid>https://frytea.com/archives/417/</guid>
      <description>&lt;h2 id=&#34;配置&#34;&gt;&lt;strong&gt;配置&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;只需在Home目录创建一个 &lt;code&gt;~/.vimrc&lt;/code&gt; ****文件即可以配置 &lt;code&gt;vim&lt;/code&gt; 了，如需安装插件，在 &lt;code&gt;~/.vim&lt;/code&gt; 目录下创建一个bundle文件夹，插件装在里面。（需安装 &lt;code&gt;Vundle&lt;/code&gt; 插件管理器），将以下内容拷入&lt;code&gt;~/.vimrc&lt;/code&gt; ****文件中即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim 版本升级（Vim8）</title>
      <link>https://frytea.com/archives/415/</link>
      <pubDate>Sun, 26 Jul 2020 11:15:57 +0000</pubDate>
      <guid>https://frytea.com/archives/415/</guid>
      <description>&lt;h2 id=&#34;安装步骤&#34;&gt;安装步骤&lt;/h2&gt;
&lt;h3 id=&#34;第一步下载源码&#34;&gt;第一步，下载源码&lt;/h3&gt;
&lt;p&gt;到&lt;a href=&#34;https://github.com/vim/vim/releases&#34;&gt;Vim官方Github仓库&lt;/a&gt;下载目前最新的Vim Release版本&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://codeload.github.com/vim/vim/tar.gz/v8.2.1258
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;第二步解压&#34;&gt;第二步，解压&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mv v8.2.1258  vim-v8.2.1258.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar -xvzf vim-v8.2.1258.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;第三步编译安装&#34;&gt;第三步，编译安装&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd vim-8.2.1258/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ./configure --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$HOME/.local --enable-python3interp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yes &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;这里注意一下我们需要用configure配置一下安装的路径，将Vim8安装到自己账户的目录下，避免干扰到系统上的其他用户&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--enable-python3interp=yes&lt;/code&gt; 添加 python3 支持&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在这里可能会遇到 &lt;code&gt;no terminal library found&lt;/code&gt; 错误：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows 开机自启VMware虚拟机</title>
      <link>https://frytea.com/archives/413/</link>
      <pubDate>Wed, 22 Jul 2020 01:08:11 +0000</pubDate>
      <guid>https://frytea.com/archives/413/</guid>
      <description>&lt;p&gt;由于进行Linux下软件开发，需要频繁使用 VMware 虚拟机，为提高效率找到一种开机启动启动 VMware 虚拟机的方法，可以大大提升效率。&lt;/p&gt;
&lt;h2 id=&#34;第一步编写脚本&#34;&gt;第一步，编写脚本&lt;/h2&gt;
&lt;p&gt;首先编写 &lt;code&gt;自启&lt;/code&gt; 脚本 &lt;code&gt;vm_start.bat&lt;/code&gt; ，内容如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>VIM 创建程序文件自动添加头部注释</title>
      <link>https://frytea.com/archives/412/</link>
      <pubDate>Mon, 20 Jul 2020 12:04:23 +0000</pubDate>
      <guid>https://frytea.com/archives/412/</guid>
      <description>&lt;p&gt;修改 &lt;code&gt;/etc/vimrc&lt;/code&gt; ，在文件最后添加以下内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; 当新建 .h .c .hpp .cpp .mk .sh等文件时自动调用SetTitle 函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;autocmd BufNewFile *.[ch],*.hpp,*.cpp,Makefile,*.mk,*.sh exec &amp;#34;&lt;/span&gt;:call SetTitle&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; 加入注释 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;func SetComment&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;1,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/*================================================================&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;,   &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   Copyright (C) &amp;#34;&lt;/span&gt;.strftime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; IEucd Inc. All rights reserved.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+1, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+2, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   文件名称：&amp;#34;&lt;/span&gt;.expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+3, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   创 建 者：SongTL, songtianlun@comleader.com.cn&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+4, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   创建日期：&amp;#34;&lt;/span&gt;.strftime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y年%m月%d日&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+5, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*   描    述：&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+6, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+7, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;================================================================*/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+8, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+9, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;endfunc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; 加入shell,Makefile注释
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;func SetComment_sh()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        call setline(3, &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#================================================================&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;4, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   Copyright (C) &amp;#34;&lt;/span&gt;.strftime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; IEucd Inc. All rights reserved.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;5, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;6, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   文件名称：&amp;#34;&lt;/span&gt;.expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;7, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   创 建 者：SongTL, songtianlun@comleader.com.cn&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;8, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   创建日期：&amp;#34;&lt;/span&gt;.strftime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y年%m月%d日&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;9, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#   描    述：&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;10, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;11, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#================================================================&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;12, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;13, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;endfunc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; 定义函数SetTitle，自动插入文件头 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;func SetTitle()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        if &amp;amp;filetype == &amp;#39;make&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                call setline(1,&amp;#34;&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                call setline(2,&amp;#34;&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                call SetComment_sh()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        elseif &amp;amp;filetype == &amp;#39;sh&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                call setline(1,&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/system/bin/sh&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call setline&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;2,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call SetComment_sh&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             call SetComment&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:e&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hpp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+10, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#ifndef _&amp;#34;&lt;/span&gt;.toupper&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;_H&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+11, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#define _&amp;#34;&lt;/span&gt;.toupper&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;_H&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+12, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#ifdef __cplusplus&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+13, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;extern \&amp;#34;C\&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+14, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+15, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#endif&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+16, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+17, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#ifdef __cplusplus&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+18, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;}&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+19, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#endif&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+20, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#endif //&amp;#34;&lt;/span&gt;.toupper&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;_H&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             elseif expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:e&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;h&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+10, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#pragma once&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             elseif &amp;amp;filetype &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+10,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#include \&amp;#34;&amp;#34;&lt;/span&gt;.expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.h\&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             elseif &amp;amp;filetype &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cpp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                call append&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;line&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;+10, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#include \&amp;#34;&amp;#34;&lt;/span&gt;.expand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%:t:r&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.h\&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             endif
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        endif
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;endfun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用效果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>【简记】Linux 计划任务 Crontab</title>
      <link>https://frytea.com/archives/411/</link>
      <pubDate>Mon, 20 Jul 2020 03:45:40 +0000</pubDate>
      <guid>https://frytea.com/archives/411/</guid>
      <description>&lt;h2 id=&#34;cron-简介&#34;&gt;cron 简介&lt;/h2&gt;
&lt;p&gt;cron 是 UNIX, SOLARIS，LINUX 下的一个十分有用的工具。通过 cron 脚本能使计划任务定期地在系统后台自动运行。&lt;/p&gt;
&lt;h2 id=&#34;cron-命令&#34;&gt;cron 命令&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;crontab -e&lt;/code&gt;  – 编辑该用户的 crontab，当指定 crontab 不存在时新建。
&lt;code&gt;crontab -l&lt;/code&gt; – 列出该用户的 crontab。
&lt;code&gt;crontab -r&lt;/code&gt; – 删除该用户的 crontab。
&lt;code&gt;crontab -u&amp;lt;用户名称&amp;gt;&lt;/code&gt; – 指定要设定 crontab 的用户名称。&lt;/p&gt;</description>
    </item>
    <item>
      <title>VS Code 免密登录Linux服务器</title>
      <link>https://frytea.com/archives/410/</link>
      <pubDate>Mon, 20 Jul 2020 01:38:00 +0000</pubDate>
      <guid>https://frytea.com/archives/410/</guid>
      <description>&lt;p&gt;使用 VS Code 中提供的 &lt;code&gt;Remote Development&lt;/code&gt; 可以实现连接远程服务器，管理文件、远程调试、远程管理等功能，实现远程开发。今天主要介绍如何通过配置SSH公钥实现 VC Code 免密登录 Linux 服务器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux部署私钥实现免密登录</title>
      <link>https://frytea.com/archives/409/</link>
      <pubDate>Mon, 20 Jul 2020 01:37:37 +0000</pubDate>
      <guid>https://frytea.com/archives/409/</guid>
      <description>&lt;h3 id=&#34;第一步生成密钥对windows或linux均可&#34;&gt;第一步，生成密钥对（windows或linux均可）：&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-keygen
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之后一路回车，默认不设密码，默认目录为 &lt;code&gt;~/.ssh&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;第二步部署公钥至服务器端linux并赋权限&#34;&gt;第二步，部署公钥至服务器端（Linux），并赋权限&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat id_rsa.pub &amp;gt;&amp;gt; authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo chmod &lt;span style=&#34;color:#ae81ff&#34;&gt;600&lt;/span&gt; authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo chmod &lt;span style=&#34;color:#ae81ff&#34;&gt;700&lt;/span&gt; ~/.ssh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;将 &lt;code&gt;id_rsa.pub&lt;/code&gt; 替换为你的公钥路径即可，如果是在本地生成需上传至服务器端。&lt;/li&gt;
&lt;li&gt;这项操作可以部署多个公钥，命令会在 &lt;code&gt;authorized_keys&lt;/code&gt; 后面追加，而 Linux 公钥验证检测 &lt;code&gt;authorized_keys&lt;/code&gt; 文件中的公钥&lt;/li&gt;
&lt;li&gt;一个萝卜一个坑，一个公钥只运行一个用户使用登录&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;第三步检查密钥登陆功能是否开启&#34;&gt;第三步，检查密钥登陆功能是否开启&lt;/h3&gt;
&lt;p&gt;1、打开SSH配置文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>在终端打印地图</title>
      <link>https://frytea.com/archives/407/</link>
      <pubDate>Sat, 18 Jul 2020 09:58:34 +0000</pubDate>
      <guid>https://frytea.com/archives/407/</guid>
      <description>&lt;p&gt;无意间突发奇想，能否在终端中打印地图，然后找到了一篇文章介绍，只需运行这行代码：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ telnet mapscii.me
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 若未安装telnet需安装一下&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ yum install telnet -y
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt-get install telnet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;就可以看到这幅令人惊艳的地图了：&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决git不小心提交大文件导致无法提交问题</title>
      <link>https://frytea.com/archives/406/</link>
      <pubDate>Fri, 17 Jul 2020 07:37:55 +0000</pubDate>
      <guid>https://frytea.com/archives/406/</guid>
      <description>&lt;p&gt;在一次不小心向GitHub提交了一个1GB文件后，出现一个令人崩溃的错误：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: error: Trace: a22b6b202ddb6da3e2795ca71663de19
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: error: See http://git.io/iEPt8g &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; more information.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: error: File system_status/test_26457 is 1024.00 MB; this exceeds GitHub&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;s file size limit of 100.00 MB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更崩溃的是，在此之后又进行了几次提交，可不能因为这次手误丢掉几次提交成果呀。&lt;br /&gt;在网上浏览一圈后找到解决方法：&lt;/p&gt;</description>
    </item>
    <item>
      <title>计算 Linux 内存使用率方法及C实现</title>
      <link>https://frytea.com/archives/405/</link>
      <pubDate>Thu, 16 Jul 2020 07:21:33 +0000</pubDate>
      <guid>https://frytea.com/archives/405/</guid>
      <description>&lt;p&gt;&lt;br /&gt;通过获取Linux中的 &lt;code&gt;/proc/stat&lt;/code&gt; 文件中的内容可以获取系统内存的详细信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# cat /proc/meminfo &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MemTotal:        &lt;span style=&#34;color:#ae81ff&#34;&gt;3880404&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MemFree:         &lt;span style=&#34;color:#ae81ff&#34;&gt;3182248&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MemAvailable:    &lt;span style=&#34;color:#ae81ff&#34;&gt;3396580&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Buffers:           &lt;span style=&#34;color:#ae81ff&#34;&gt;39588&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Cached:           &lt;span style=&#34;color:#ae81ff&#34;&gt;355616&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SwapCached:            &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Active:           &lt;span style=&#34;color:#ae81ff&#34;&gt;318708&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inactive:         &lt;span style=&#34;color:#ae81ff&#34;&gt;252380&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Active&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;anon&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:     &lt;span style=&#34;color:#ae81ff&#34;&gt;176120&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inactive&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;anon&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:      &lt;span style=&#34;color:#ae81ff&#34;&gt;248&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Active&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;file&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:     &lt;span style=&#34;color:#ae81ff&#34;&gt;142588&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Inactive&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;file&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:   &lt;span style=&#34;color:#ae81ff&#34;&gt;252132&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Unevictable:           &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mlocked:               &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SwapTotal:             &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SwapFree:              &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Dirty:                 &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Writeback:             &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AnonPages:        &lt;span style=&#34;color:#ae81ff&#34;&gt;175940&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mapped:            &lt;span style=&#34;color:#ae81ff&#34;&gt;54184&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Shmem:               &lt;span style=&#34;color:#ae81ff&#34;&gt;488&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Slab:              &lt;span style=&#34;color:#ae81ff&#34;&gt;62040&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SReclaimable:      &lt;span style=&#34;color:#ae81ff&#34;&gt;48712&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SUnreclaim:        &lt;span style=&#34;color:#ae81ff&#34;&gt;13328&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;KernelStack:        &lt;span style=&#34;color:#ae81ff&#34;&gt;2672&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PageTables:         &lt;span style=&#34;color:#ae81ff&#34;&gt;6080&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NFS_Unstable:          &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Bounce:                &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WritebackTmp:          &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CommitLimit:     &lt;span style=&#34;color:#ae81ff&#34;&gt;1940200&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Committed_AS:     &lt;span style=&#34;color:#ae81ff&#34;&gt;615340&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VmallocTotal:   &lt;span style=&#34;color:#ae81ff&#34;&gt;34359738367&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VmallocUsed:       &lt;span style=&#34;color:#ae81ff&#34;&gt;14160&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;VmallocChunk:   &lt;span style=&#34;color:#ae81ff&#34;&gt;34359715580&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HardwareCorrupted:     &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;AnonHugePages:     &lt;span style=&#34;color:#ae81ff&#34;&gt;36864&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CmaTotal:              &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CmaFree:               &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HugePages_Total:       &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HugePages_Free:        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HugePages_Rsvd:        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HugePages_Surp:        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hugepagesize:       &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DirectMap4k:       &lt;span style=&#34;color:#ae81ff&#34;&gt;53120&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DirectMap2M:     &lt;span style=&#34;color:#ae81ff&#34;&gt;3092480&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DirectMap1G:     &lt;span style=&#34;color:#ae81ff&#34;&gt;3145728&lt;/span&gt; kB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;各字段含义见下表：&lt;/p&gt;</description>
    </item>
    <item>
      <title>计算 Linux CPU 利用率</title>
      <link>https://frytea.com/archives/404/</link>
      <pubDate>Wed, 15 Jul 2020 10:01:00 +0000</pubDate>
      <guid>https://frytea.com/archives/404/</guid>
      <description>&lt;p&gt;在 Linux 系统中的 &lt;code&gt;/proc/stat&lt;/code&gt; 文件中存储了CPU 活动的信息，该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致，以下通过实例来说明数据该文件中各字段的含义。&lt;br /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 内存参数详细说明</title>
      <link>https://frytea.com/archives/403/</link>
      <pubDate>Tue, 14 Jul 2020 10:30:00 +0000</pubDate>
      <guid>https://frytea.com/archives/403/</guid>
      <description>&lt;p&gt;在 Linux 下 &lt;code&gt;free&lt;/code&gt; 命令可以看出系统当前内存状况，附上 &lt;code&gt;-k&lt;/code&gt; , &lt;code&gt;-m&lt;/code&gt; , &lt;code&gt;-g&lt;/code&gt; 可以分别输出对应单位的内存状况：&lt;br /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Usage:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; free &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;options&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Options:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -b, --bytes         show output in bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -k, --kilo          show output in kilobytes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -m, --mega          show output in megabytes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; -g, --giga          show output in gigabytes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --tera          show output in terabytes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     --peta          show output in petabytes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以某台 Linux Ecs 为例，运行 &lt;code&gt;free -m &lt;/code&gt; 后的输出如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 下 Sysstat 系统监控程序详解</title>
      <link>https://frytea.com/archives/402/</link>
      <pubDate>Tue, 14 Jul 2020 05:58:00 +0000</pubDate>
      <guid>https://frytea.com/archives/402/</guid>
      <description>&lt;p&gt;&lt;code&gt;Sysstat&lt;/code&gt; 包包含许多商业单位共有的各种实用程序，用于监控系统性能和使用活动:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;iostat&lt;/code&gt;  (1) 报告设备、分区和网络文件系统的CPU统计和硬盘吞吐效率的数据。 # 核心工具&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mpstat&lt;/code&gt;  (1) 报告单个或组合处理器相关的统计数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pidstat&lt;/code&gt;  (1) 报告Linux任务 (进程) 的统计信息: I/O、CPU、内存等。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tapestat&lt;/code&gt;  (1) 报告连接到系统的磁带驱动器的统计信息。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cifsiostat&lt;/code&gt;  (1) 报告CIFS统计。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sysstat&lt;/code&gt;  (5) 只是sysstat配置文件的手动页面，给出了sysstat命令使用的环境变量的含义。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Sysstat&lt;/code&gt; 还包含您可以通过 &lt;code&gt;cron&lt;/code&gt; 或 &lt;code&gt;systemd&lt;/code&gt; 计划收集和记录性能和活动数据的工具:&lt;/p&gt;</description>
    </item>
    <item>
      <title>安装 Linux系统监控工具 systat</title>
      <link>https://frytea.com/archives/401/</link>
      <pubDate>Tue, 14 Jul 2020 03:01:00 +0000</pubDate>
      <guid>https://frytea.com/archives/401/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Sysstat是一种在Linux系统服务器中常用的软件工具包，可以用来监控服务器的性能。比如可以监控CPU、硬盘、网络等数据，我们可以用来进行分析服务器的性能和资源的使用效率。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 中 /proc 文件系统内容详述</title>
      <link>https://frytea.com/archives/400/</link>
      <pubDate>Tue, 14 Jul 2020 01:06:35 +0000</pubDate>
      <guid>https://frytea.com/archives/400/</guid>
      <description>&lt;p&gt;Linux 下的 &lt;code&gt;/proc&lt;/code&gt; 文件系统中提供了许多有用的信息，除了基本的CPU使用率、版本号等，你甚至还可以在这里直接看到内核的输出。下面这张表，简单列举 &lt;code&gt;/proc&lt;/code&gt; 中文件的含义：&lt;/p&gt;</description>
    </item>
    <item>
      <title>拯救你的硬盘，一切井井有条</title>
      <link>https://frytea.com/archives/399/</link>
      <pubDate>Sun, 05 Jul 2020 02:06:00 +0000</pubDate>
      <guid>https://frytea.com/archives/399/</guid>
      <description>&lt;p&gt;由于一直研究计算机相关技术，从开始的500GB硬盘，带后来1TB的移动硬盘，再到后来4TB移动硬盘，再到后来移动NAS。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/20200705100710.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;随着数据量的不断增长，一昧的扩容硬盘也许不是一个最佳的选择，如果文件只是简单堆放，就真的同一堆数据垃圾没有两样。经过一天的整理、探索、构思，结合以往数据整理的方法，重新设计了一种个人文件数据库的存储方案，从存储介质到存储结构做了重新整合，同时考虑了个体在群体中活动可能需要产生联系的文档方案。下面就来介绍一下，其实数据，不一定非要存在硬盘里！硬盘容量，不是越大越好！&lt;/p&gt;</description>
    </item>
    <item>
      <title>VIM学习使用笔记</title>
      <link>https://frytea.com/archives/398/</link>
      <pubDate>Fri, 03 Jul 2020 10:07:00 +0000</pubDate>
      <guid>https://frytea.com/archives/398/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;如果是初学vi，运行一下 &lt;code&gt;vimtutor&lt;/code&gt;是个聪明的决定。 （如果你的系统环境不是中文，而你想使用中文的vimtutor，就运行 &lt;code&gt;vimtutor zh&lt;/code&gt;）&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;学习笔记&#34;&gt;学习笔记&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.frytea.com/archives/391/&#34;&gt;Vim第一讲 基础操作&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim第七讲 帮助、个性化和补全</title>
      <link>https://frytea.com/archives/397/</link>
      <pubDate>Fri, 03 Jul 2020 10:06:46 +0000</pubDate>
      <guid>https://frytea.com/archives/397/</guid>
      <description>&lt;h2 id=&#34;71-获取帮助信息&#34;&gt;7.1 获取帮助信息&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 使用在线帮助系统 **
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统，请选择如下三种方
法之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;按下 &lt;code&gt;&amp;lt;HELP&amp;gt;&lt;/code&gt; 键 (如果键盘上有的话)&lt;/li&gt;
&lt;li&gt;按下 &lt;code&gt;&amp;lt;F1&amp;gt;&lt;/code&gt; 键 (如果键盘上有的话)&lt;/li&gt;
&lt;li&gt;输入 &lt;code&gt;:help&lt;/code&gt; &amp;lt;回车&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;请阅读帮助窗口中的文字以了解帮助是如何工作的。
输入 &lt;code&gt;CTRL-W&lt;/code&gt; CTRL-W 可以使您在窗口之间跳转。
输入 &lt;code&gt;:q &amp;lt;回车&amp;gt;&lt;/code&gt; 可以关闭帮助窗口。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim第六讲 插入、附加、复制粘贴、高级选项</title>
      <link>https://frytea.com/archives/396/</link>
      <pubDate>Fri, 03 Jul 2020 10:06:35 +0000</pubDate>
      <guid>https://frytea.com/archives/396/</guid>
      <description>&lt;h2 id=&#34;61-打开类命令&#34;&gt;6.1 打开类命令&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 o 将在光标的下方打开新的一行并进入插入模式。**
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;输入小写的 &lt;code&gt;o&lt;/code&gt; 在光标 &lt;em&gt;下方&lt;/em&gt; 打开新的一行，这个命令会使您
进入插入模式。&lt;/li&gt;
&lt;li&gt;然后输入一些文字，按 &lt;code&gt;&amp;lt;ESC&amp;gt;&lt;/code&gt; 键退出插入模式而进入正常模式。&lt;/li&gt;
&lt;li&gt;为了在光标 &lt;em&gt;上方&lt;/em&gt; 打开新的一行，只需要输入大写的 &lt;code&gt;O&lt;/code&gt; 而不是小写的 o
就可以了。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;62-附加类命令&#34;&gt;6.2 附加类命令&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 a 将可在光标之后插入文本。 **
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;接着输入 &lt;code&gt;e&lt;/code&gt; 移动光标至需添加单词的末尾。&lt;/li&gt;
&lt;li&gt;输入小写的 &lt;code&gt;a&lt;/code&gt; 则可在光标之后插入文本了。&lt;/li&gt;
&lt;li&gt;按 &lt;code&gt;&amp;lt;ESC&amp;gt;&lt;/code&gt; 键退出插入模式回到正常模式。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;提示： &lt;code&gt;a&lt;/code&gt;、 &lt;code&gt;i&lt;/code&gt; 和 &lt;code&gt;A&lt;/code&gt; 都会带您进入插入模式，惟一的区别在于字符插入的位置。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim第五讲 内部命令、另存、部分保存、插入文件</title>
      <link>https://frytea.com/archives/395/</link>
      <pubDate>Fri, 03 Jul 2020 10:06:20 +0000</pubDate>
      <guid>https://frytea.com/archives/395/</guid>
      <description>&lt;h2 id=&#34;51-在-vim-内执行外部命令的方法&#34;&gt;5.1 在 VIM 内执行外部命令的方法&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 :! 然后紧接着输入一个外部命令可以执行该外部命令。**
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;按下我们所熟悉的 &lt;code&gt;:&lt;/code&gt; 命令使光标移动到屏幕底部。这样您就可以输入一行命令了。&lt;/li&gt;
&lt;li&gt;接着输入感叹号 &lt;code&gt;!&lt;/code&gt; 这个字符，这样就允许您执行外部的 shell 命令了。&lt;/li&gt;
&lt;li&gt;我们以 &lt;code&gt;ls&lt;/code&gt; 命令为例。输入 &lt;code&gt;!ls &amp;lt;回车&amp;gt;&lt;/code&gt; 。该命令就会列举出您当前目录的
内容，就如同您在命令行提示符下输入 &lt;code&gt;ls&lt;/code&gt; 命令的结果一样。如果 &lt;code&gt;!ls&lt;/code&gt; 没起
作用，您可以试试 &lt;code&gt;:!dir&lt;/code&gt; 看看。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;提示：所有的外部命令都可以以这种方式执行，包括带命令行参数的那些。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim第四讲 搜索、查找、替换</title>
      <link>https://frytea.com/archives/394/</link>
      <pubDate>Fri, 03 Jul 2020 10:06:07 +0000</pubDate>
      <guid>https://frytea.com/archives/394/</guid>
      <description>&lt;h2 id=&#34;41-定位及文件状态&#34;&gt;4.1 定位及文件状态&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 CTRL-G 显示当前编辑文件中当前光标所在行位置以及文件状态信息。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     输入大写 G 则直接跳转到文件中的某一指定行。**
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;按下 CTRL 键不放开然后按 g 键。我们称这个键组合为 &lt;code&gt;CTRL-G&lt;/code&gt;。
您会看到页面最底部出现一个状态信息行，显示的内容是当前编辑的文件名
和文件中光标位置。请记住行号，它会在步骤3中用到。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;提示：您也许会在屏幕的右下角看到光标位置，这会在 &amp;lsquo;ruler&amp;rsquo; 选项设置时发生 (参见 &lt;code&gt;:help &#39;ruler&#39;&lt;/code&gt;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim第三讲 置入、替换、更改</title>
      <link>https://frytea.com/archives/393/</link>
      <pubDate>Fri, 03 Jul 2020 10:05:52 +0000</pubDate>
      <guid>https://frytea.com/archives/393/</guid>
      <description>&lt;h2 id=&#34;31-置入类命令&#34;&gt;3.1 置入类命令&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 p 将最后一次删除的内容置入光标之后。 **
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; b&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Violets are blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; c&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Intelligence is learned,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; d&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Can you learn too?
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; |a&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Roses are red,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ dd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;|
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; b&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Violets are blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; c&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Intelligence is learned,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; d&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Can you learn too?
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ p
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;|---&amp;gt; a&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Roses are red,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; b&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Violets are blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; c&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Intelligence is learned,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; d&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; Can you learn too?
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;32-替换&#34;&gt;3.2 替换&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 r 和一个字符替换光标所在位置的字符。**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  Whan this lime was t|uoed in, someone presswd some wrojg keys!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  When this line was typed in, someone pressed some wrong keys!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ry
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  Whan this lime was t|yoed in, someone presswd some wrojg keys!
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  When this line was typed in, someone pressed some wrong keys!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;33-更改&#34;&gt;3.3 更改&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 要改变文本直到一个单词的末尾，请输入 ce **
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; This line has a few w|ptfd that mrrf changing usf the change operator.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; This line has a few words that need changing using the change operator.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ce ords
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; This line has a few words| that mrrf changing usf the change operator.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; This line has a few words that need changing using the change operator.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ &amp;lt;Esc&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;34-使用c更改更多&#34;&gt;3.4 使用c更改更多&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 更改类操作符可以与删除中使用的同样的动作配合使用。 **&lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; The end of this line needs |some help to make it like the second.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; The end of this line needs to be corrected using the  c$  command.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ c$ to be corrected using the  c$  command.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; The end of this line needs to be corrected using the  c$  command.|
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; The end of this line needs to be corrected using the  c$  command.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ &amp;lt;Esc&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;要重新置入已经删除的文本内容，请按小写字母 &lt;code&gt;p&lt;/code&gt; 键。该操作可以将已删除
的文本内容置于光标之后。如果最后一次删除的是一个整行，那么该行将置
于当前光标所在行的下一行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim第二讲 删除、重复、撤销</title>
      <link>https://frytea.com/archives/392/</link>
      <pubDate>Fri, 03 Jul 2020 10:05:38 +0000</pubDate>
      <guid>https://frytea.com/archives/392/</guid>
      <description>&lt;h2 id=&#34;21-简单命令&#34;&gt;2.1 简单命令&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 dw 可以从光标处删除至一个单词的末尾。**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; Tha words don&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;t |belong paper in this sentence.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$ dw
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;---&amp;gt; Tha words don&amp;#39;&lt;/span&gt;t paper in this sentence.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;22-更多删除&#34;&gt;2.2 更多删除&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 d$ 从当前光标删除到行末。**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; |Somebody typed the end of this line twice. end of this line twice.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ d$
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; |
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;23-命令和对象&#34;&gt;2.3 命令和对象&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;许多改变文本的命令都由一个操作符和一个动作构成。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  使用删除操作符 d 的删除命令的格式如下：
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        d   motion
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  其中：
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d      - 删除操作符。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    motion - 操作符的操作对象&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;在下面列出&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  简单的动作列表：
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    w - 从当前光标当前位置直到下一个单词起始处，不包括它的第一个字符。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    e - 从当前光标当前位置直到单词末尾，包括最后一个字符。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $ - 从当前光标当前位置直到当前行末。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  因此输入 de 会从当前光标位置删除到单词末尾。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;24-重复动作计数器&#34;&gt;2.4 重复动作计数器&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 在动作前输入数字会使它重复那么多次。 **
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; This is just a |line with words you can move around in.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  1. 输入 2w 使光标向前移动两个单词。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; This is just a line with |words you can move around in.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  2. 输入 3e 使光标向前移动到第三个单词的末尾。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; This is just a line with words you can| move around in.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  3. 输入 &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;数字零&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; 移动光标到行首。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt; |This is just a |line with words you can move around in.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;25-删除更多&#34;&gt;2.5 删除更多&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 使用格式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;d   number&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;数字&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;   motion
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  this |ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ d2w
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  this |line FGHI JK LMN OP of words is Q RS TUV cleaned up.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ d3e
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  this line  |OP of words is Q RS TUV cleaned up.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;26-删除整行&#34;&gt;2.6 删除整行&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 dd 可以删除整一个当前行。 **
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# exmample&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  |1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Roses are red,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Mud is fun,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  3&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Violets are blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  I have a car,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  5&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Clocks tell time,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  6&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Sugar is sweet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  7&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  And so are you.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ dd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;|---&amp;gt;  2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Mud is fun,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  3&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Violets are blue,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  I have a car,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  5&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Clocks tell time,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  6&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Sugar is sweet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  7&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  And so are you.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ 2dd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;|---&amp;gt;  4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  I have a car,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  5&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Clocks tell time,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  6&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Sugar is sweet
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---&amp;gt;  7&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  And so are you.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;27-撤销命令&#34;&gt;2.7 撤销命令&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 输入 u 来撤消最后执行的命令，输入 U 来撤消对整行的修改。 **
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** CTRL-R 重做被撤消的命令 **
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;欲从当前光标删除至下一个单词，请输入： &lt;code&gt;dw&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;欲从当前光标删除至当前行末尾，请输入： &lt;code&gt;d$&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;欲删除整行，请输入： &lt;code&gt;dd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;欲重复一个动作，请在它前面加上一个数字： &lt;code&gt;2w&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在正常模式下修改命令的格式是：
&lt;code&gt;operator [number] motion&lt;/code&gt;
其中：
&lt;code&gt;operator&lt;/code&gt; - 操作符，代表要做的事情，比如 d 代表删除
&lt;code&gt;[number]&lt;/code&gt; - 可以附加的数字，代表动作重复的次数
&lt;code&gt;motion&lt;/code&gt; - 动作，代表在所操作的文本上的移动，例如 w 代表单词(word)，
&lt;code&gt;$&lt;/code&gt; 代表行末等等。&lt;/li&gt;
&lt;li&gt;欲移动光标到行首，请按数字0键： &lt;code&gt;0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;欲撤消以前的操作，请输入： &lt;code&gt;u&lt;/code&gt;  (小写的u)
欲撤消在一行中所做的改动，请输入： &lt;code&gt;U&lt;/code&gt; (大写的U)
欲撤消以前的撤消命令，恢复以前的操作结果，请输入： &lt;code&gt;CTRL-R&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Vim第一讲 基础操作</title>
      <link>https://frytea.com/archives/391/</link>
      <pubDate>Fri, 03 Jul 2020 10:05:10 +0000</pubDate>
      <guid>https://frytea.com/archives/391/</guid>
      <description>&lt;h2 id=&#34;11-移动光标&#34;&gt;1.1 移动光标&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 要移动光标，请依照说明分别按下 h、j、k、l 键。 **
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             ^
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             k              提示： h 的键位于左边，每次按下就会向左移动。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &amp;lt; h       l &amp;gt;               l 的键位于右边，每次按下就会向右移动。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             j                     j 键看起来很象一支尖端方向朝下的箭头。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;12-进入和退出&#34;&gt;1.2 进入和退出&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim somefile &lt;span style=&#34;color:#75715e&#34;&gt;#进入&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;:q 退出
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;13-删除&#34;&gt;1.3 删除&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 在正常&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Normal&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;模式下，按下 x 键来删除光标所在位置的字符。**
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;14-插入&#34;&gt;1.4 插入&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 在正常模式下，可以按下 i 键来插入文本。**
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;15-添加&#34;&gt;1.5 添加&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 按 A 键以添加文本。 **
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;16-保存&#34;&gt;1.6 保存&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** 使用 :wq 以保存文件并退出。 **
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;光标在屏幕文本中的移动既可以用箭头键，也可以使用 &lt;code&gt;hjkl&lt;/code&gt; 字母键。
&lt;code&gt;h&lt;/code&gt; (左移) &lt;code&gt;j&lt;/code&gt; (下行) &lt;code&gt;k&lt;/code&gt; (上行) &lt;code&gt;l&lt;/code&gt; (右移)&lt;/p&gt;</description>
    </item>
    <item>
      <title>GCC -l选项：手动添加链接库</title>
      <link>https://frytea.com/archives/390/</link>
      <pubDate>Fri, 03 Jul 2020 02:06:02 +0000</pubDate>
      <guid>https://frytea.com/archives/390/</guid>
      <description>&lt;p&gt;最近研究C语言CRC循环冗余校验，找到一个开源的库：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/lammertb/libcrc&#34;&gt;lammertb/libcrc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其中有实例代码，但是无论如何运行不起来，报错如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;root@frytea-dev-test examples&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# gcc tstcrc.c -o tstcrc -L ~/libcrc/include&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/tmp/ccEcajcY.o: In &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;main&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x2db): undefined reference to `update_crc_16&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x2f6&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_16&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x311): undefined reference to `update_crc_dnp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x330&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_sick&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x34b): undefined reference to `update_crc_ccitt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x366&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_ccitt&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x381): undefined reference to `update_crc_ccitt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x39c&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_kermit&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x3b6): undefined reference to `update_crc_32&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x42c&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_16&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x441): undefined reference to `update_crc_16&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x456&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_dnp&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x46f): undefined reference to `update_crc_sick&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x484&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_ccitt&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x499): undefined reference to `update_crc_ccitt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x4ae&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_ccitt&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x4c3): undefined reference to `update_crc_kermit&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x4d7&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_32&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x53d): undefined reference to `update_crc_16&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x554&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_16&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x56b): undefined reference to `update_crc_dnp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x586&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_sick&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x59d): undefined reference to `update_crc_ccitt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x5b4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_ccitt&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x5cb): undefined reference to `update_crc_ccitt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tstcrc.c:&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;.text+0x5e2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: undefined reference to &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;update_crc_kermit&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;tstcrc.c:(.text+0x5f8): undefined reference to `update_crc_32&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;collect2: error: ld returned &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; exit status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;排查原因后发现是库没有连接，需要手动连接仓库下 &lt;code&gt;lib&lt;/code&gt; 文件夹中的 &lt;code&gt;libcrc.a&lt;/code&gt; 文件，运行如下编印命令成功编译：&lt;/p&gt;</description>
    </item>
    <item>
      <title>资源分享之计算机网络虚拟实践</title>
      <link>https://frytea.com/archives/387/</link>
      <pubDate>Sat, 20 Jun 2020 02:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/387/</guid>
      <description>&lt;p&gt;喜欢整理一些资源，之后放在知识库或是资源站里，等待着有缘人去发现，可等了许久发现：有的人需要它，可就是找不到；有些人不需要它，却误打误撞地看到了。反思之后以为，做了一些事情就要学会声明，比如我个人就可以直接发给我认为需要的人，或者像现在一样，发一篇文章，需要的同学可以收藏。&lt;br /&gt;计算机网络是计算机核心课程之一，人们无时无刻不在享受计算机网络各种协议带来的便利，可这么庞大而又错综复杂的网络，是如何保证高校可用的呢？我的设备又是怎么在茫茫人海中找到我想要联系的那个她的呢？这些都可以在计算机网络的学习中找到答案。&lt;br /&gt;学《计算机网络》这门课是在2018年年底的样子，到了2020年这门课已经成为省双一流建设学科了，虽然不知道有多厉害，但听其他老师说这门课有一个很庞大的备课团队，分工明确，水平极高。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决ClashR打开配置空白</title>
      <link>https://frytea.com/archives/341/</link>
      <pubDate>Tue, 16 Jun 2020 14:24:53 +0000</pubDate>
      <guid>https://frytea.com/archives/341/</guid>
      <description>&lt;p&gt;由于做程序设计常常会需要国外网站，因此一个靠谱的代理非常有必要。&lt;/p&gt;
&lt;p&gt;此前写过一篇 &lt;a href=&#34;https://blog.frytea.com/archives/39/&#34;&gt;私有 vpn 搭建工具集合及靠谱的 vpn 提供商&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;最近发现 ClashR 这款很好用的代理客户端，客户端可以在我的资源站下载：&lt;a href=&#34;https://res.frytea.com/Application/&#34;&gt;Frytea&amp;rsquo;s Res&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决Win10下H3C网络设备模拟器无法启动问题</title>
      <link>https://frytea.com/archives/338/</link>
      <pubDate>Wed, 10 Jun 2020 02:39:04 +0000</pubDate>
      <guid>https://frytea.com/archives/338/</guid>
      <description>&lt;p&gt;由于工作学习需要，需在win10上安装H3C网络设备模拟器，但无奈安装好后各种启动不起来。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image9dc86ee623493f66.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2020/06/10/image9dc86ee623493f66.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;查看日之后发现报错如下：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Traceback (most recent call last):
  File &amp;#34;HCLUpdate.py&amp;#34;, line 9, in &amp;lt;module&amp;gt;
  File &amp;#34;Ui_PopUp.pyc&amp;#34;, line 10, in &amp;lt;module&amp;gt;
  File &amp;#34;PyQt4\QtGui.pyc&amp;#34;, line 12, in &amp;lt;module&amp;gt;
  File &amp;#34;PyQt4\QtGui.pyc&amp;#34;, line 10, in __load
ImportError: DLL load failed: 操作系统无法运行 %1。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;刚开始以为是Python问题，其实这个方向是错误的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决Windows下帮助文件打开空白</title>
      <link>https://frytea.com/archives/337/</link>
      <pubDate>Wed, 10 Jun 2020 01:22:43 +0000</pubDate>
      <guid>https://frytea.com/archives/337/</guid>
      <description>&lt;p&gt;今天从某官网下载了一份帮助文档，正常解压，正常弹出警告。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image051039f58682ae88.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2020/06/10/image051039f58682ae88.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;可点击打开后傻眼了，整个文档都是空白的，只能看到目录结构。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;imaged99bb42d3346f306.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2020/06/10/imaged99bb42d3346f306.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;经过一番搜索找到解决方案，只需&lt;strong&gt;右键属性&lt;/strong&gt;，勾选解除锁定，保存即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【ZMQ】第一个C服务器</title>
      <link>https://frytea.com/archives/335/</link>
      <pubDate>Mon, 08 Jun 2020 08:47:00 +0000</pubDate>
      <guid>https://frytea.com/archives/335/</guid>
      <description>&lt;h2 id=&#34;技术背景&#34;&gt;技术背景&lt;/h2&gt;
&lt;p&gt;ØMQ （也拼写作ZeroMQ，0MQ或ZMQ)，号称号称是“史上最快的消息队列”，基于c语言开发。ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层，像框架一样的一个socket library，他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库，可在多个线程、内核和主机盒之间弹性伸缩。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minecraft 从安装到入门</title>
      <link>https://frytea.com/archives/325/</link>
      <pubDate>Thu, 02 Apr 2020 02:47:00 +0000</pubDate>
      <guid>https://frytea.com/archives/325/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;近期才入坑 Minecraft ，自建了服务器，写了一篇文章记录服务器配置过程：&lt;a href=&#34;https://blog.frytea.com/archives/322/&#34;&gt;适当愉悦，自建 Minecraft 服务器&lt;/a&gt;。 高深的东西咱也不懂，就感觉一群朋友在一起创造自己的世界挺有意思的，撰文目的在于指导像我一样的从未接触过 Minecraft 的新手进入 Minecraft 的世界，并会持续更新一些小技巧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>适当愉悦，自建 Minecraft 服务器</title>
      <link>https://frytea.com/archives/322/</link>
      <pubDate>Fri, 27 Mar 2020 03:32:00 +0000</pubDate>
      <guid>https://frytea.com/archives/322/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;背景 1&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;原来总是认为，玩游戏都是不务正业。直到自己在学习生活中遇到挫折又无处宣泄，长时间的坏心情下才感觉到有这么一个发泄情感、寻找愉悦的途径是很重要的。
必须要控制好度，当心情不好、遭遇不幸、遇到挫折，就需要适当的放松，松弛有度，是为了更好的出发。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[编程题]和为S的连续正数序列</title>
      <link>https://frytea.com/archives/320/</link>
      <pubDate>Tue, 03 Mar 2020 10:01:00 +0000</pubDate>
      <guid>https://frytea.com/archives/320/</guid>
      <description>&lt;h2 id=&#34;题目来源&#34;&gt;题目来源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe&#34;&gt;牛客网首页 &amp;gt; 试题广场 &amp;gt; 和为S的连续正数序列&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;时间限制：C/C++ 1秒，其他语言2秒空间限制：C/C++ 32M，其他语言64M&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;题目描述&#34;&gt;题目描述&lt;/h2&gt;
&lt;p&gt;小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!&lt;/p&gt;</description>
    </item>
    <item>
      <title>[编程题]evaluate-reverse-polish-notati</title>
      <link>https://frytea.com/archives/319/</link>
      <pubDate>Tue, 25 Feb 2020 03:44:00 +0000</pubDate>
      <guid>https://frytea.com/archives/319/</guid>
      <description>&lt;h2 id=&#34;题目来源&#34;&gt;题目来源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nowcoder.com/questionTerminal/22f9d7dd89374b6c8289e44237c70447&#34;&gt;牛客网首页 &amp;gt; 试题广场 &amp;gt; evaluate-reverse-polish-notati&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;时间限制：C/C++ 1秒，其他语言2秒空间限制：C/C++ 32M，其他语言64M&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;题目描述&#34;&gt;题目描述&lt;/h2&gt;
&lt;p&gt;链接：https://www.nowcoder.com/questionTerminal/22f9d7dd89374b6c8289e44237c70447
来源：牛客网&lt;/p&gt;</description>
    </item>
    <item>
      <title>助力求职之STAR法则</title>
      <link>https://frytea.com/archives/318/</link>
      <pubDate>Mon, 24 Feb 2020 10:03:00 +0000</pubDate>
      <guid>https://frytea.com/archives/318/</guid>
      <description>&lt;p&gt;最近在投递简历，投了至少100个岗位，收获甚少，主要问题还在于自己是第一次求职，简历总是会出现一些问题，需要在不断的被拒中寻求方法。&lt;/p&gt;
&lt;p&gt;今天收到一份被标记 &lt;code&gt;不合适&lt;/code&gt; 的求职申请，得知一个 STAR 法则。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[编程题]minimum-depth-of-binary-tree</title>
      <link>https://frytea.com/archives/317/</link>
      <pubDate>Sun, 23 Feb 2020 10:18:00 +0000</pubDate>
      <guid>https://frytea.com/archives/317/</guid>
      <description>&lt;h2 id=&#34;题目来源&#34;&gt;题目来源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nowcoder.com/questionTerminal/e08819cfdeb34985a8de9c4e6562e724?f=discussion&#34;&gt;牛客网首页 &amp;gt; 试题广场 &amp;gt; minimum-depth-of-binary-tree&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;时间限制：C/C++ 1秒，其他语言2秒空间限制：C/C++ 32M，其他语言64M&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;题目描述&#34;&gt;题目描述&lt;/h2&gt;
&lt;p&gt;求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[编程题]进制转换</title>
      <link>https://frytea.com/archives/315/</link>
      <pubDate>Sat, 22 Feb 2020 08:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/315/</guid>
      <description>&lt;h2 id=&#34;题目来源&#34;&gt;题目来源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nowcoder.com/questionTerminal/8f3df50d2b9043208c5eed283d1d4da6&#34;&gt;牛客网首页 &amp;gt; 试题广场 &amp;gt; 进制转换&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;时间限制：C/C++ 1秒，其他语言2秒空间限制：C/C++ 32M，其他语言64M&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;题目描述&#34;&gt;题目描述&lt;/h2&gt;
&lt;p&gt;写出一个程序，接受一个十六进制的数，输出该数值的十进制表示。（多组同时输入 ）&lt;/p&gt;</description>
    </item>
    <item>
      <title>这款云盘在国内表现很惊艳了！</title>
      <link>https://frytea.com/archives/314/</link>
      <pubDate>Tue, 18 Feb 2020 13:51:53 +0000</pubDate>
      <guid>https://frytea.com/archives/314/</guid>
      <description>&lt;p&gt;前些日子在全球主机论坛看到这篇帖子：&lt;a href=&#34;https://www.hostloc.com/forum.php?mod=viewthread&amp;amp;tid=643457&#34;&gt;还在为空间小而烦恼么 世纪互联 onedrive 解烦恼&lt;/a&gt;. 大概是说 Zephyr 大佬小店里出售的 &lt;a href=&#34;https://www.yiyi.one/cart.php?a=add&amp;amp;pid=18&#34;&gt;世纪互联Office365 A1 for EDU&lt;/a&gt; 现在使用优惠码 &lt;code&gt;newyear2020&lt;/code&gt; 购买有很大的优惠，此前需要 123 RMB 才能买到的账号现在仅需 50 RMB 即可。看中这个东西好久了， 果断下单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一键配置 Seafile 云盘并开启 https 访问</title>
      <link>https://frytea.com/archives/313/</link>
      <pubDate>Thu, 13 Feb 2020 07:42:00 +0000</pubDate>
      <guid>https://frytea.com/archives/313/</guid>
      <description>&lt;p&gt;前些日子终于受够了臃肿的 Nextcloud ，将其完全卸载，寻觅已久之后选择了 Seafile 云盘。之所以放弃 Nextcloud，大致有以下原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;插件丰富，功能强大的同时带来运行缓慢的问题&lt;/li&gt;
&lt;li&gt;PHP 执行长时间大内存任务时容易出错&lt;/li&gt;
&lt;li&gt;iPhone 客户端莫名闪退，Linux 客户端无法打开&lt;/li&gt;
&lt;li&gt;Rclone 执行长时间文件读取操作时会容易出错，同第二条&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;综上原因，虽然 Nextclud 有着完整的功能和完善的生态，但并不适合目前的我个人使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitLab 神奇问题之ssl</title>
      <link>https://frytea.com/archives/311/</link>
      <pubDate>Thu, 06 Feb 2020 18:12:01 +0000</pubDate>
      <guid>https://frytea.com/archives/311/</guid>
      <description>&lt;p&gt;今天配置 GitLab 时为 GitLab Pages 配置 SSL 总是有问题，大概表现为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不开启 ssl 就无法让 gitlab pages 实现 https 访问&lt;/li&gt;
&lt;li&gt;开启 ssl 后可能无法访问&lt;/li&gt;
&lt;li&gt;对设置变更后可能需要重新部署 pages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;经过长时间的摸索，发现 gitlab pages 的配置有三级：&lt;/p&gt;</description>
    </item>
    <item>
      <title>迁移 GitLab 小记</title>
      <link>https://frytea.com/archives/310/</link>
      <pubDate>Thu, 06 Feb 2020 11:30:00 +0000</pubDate>
      <guid>https://frytea.com/archives/310/</guid>
      <description>&lt;p&gt;由于服务器到期等因素，需要对 GitLab 进行迁移，在此记下一段历程。&lt;/p&gt;
&lt;p&gt;首先要保证迁入和迁出 GitLab 的版本是一致的，使用这一条指令：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我的两个服务器输出分别是：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 迁入服务器
$ cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.7.5-ee
# 迁出服务器
$ cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.5.2-ee
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;升级-gitlab&#34;&gt;升级 GitLab&lt;/h2&gt;
&lt;p&gt;因此需要对服务器进行升级。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决VMeare 安装 Android x86 错误</title>
      <link>https://frytea.com/archives/309/</link>
      <pubDate>Wed, 05 Feb 2020 14:04:25 +0000</pubDate>
      <guid>https://frytea.com/archives/309/</guid>
      <description>&lt;p&gt;今天尝试使用 VMware 安装Android x86 9.0 时出现一个问题。&lt;/p&gt;
&lt;p&gt;安装过程参考教程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_43913500/article/details/88760557&#34;&gt;VMware实现Android x86 8.1 从安装到使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.npbeta.com/2017/11/vmware_android/&#34;&gt;VMware 安装 Android x86 7.1.2 64 位&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安装镜像来源：https://www.android-x86.org/download&lt;/p&gt;</description>
    </item>
    <item>
      <title>还记得使用手机的最基本诉求吗</title>
      <link>https://frytea.com/archives/308/</link>
      <pubDate>Wed, 05 Feb 2020 13:51:00 +0000</pubDate>
      <guid>https://frytea.com/archives/308/</guid>
      <description>&lt;p&gt;时值今日，智能手机的普及使得手机在生活中充当的角色越来越多。强劲的硬件可以承担起更大的运算任务，人们不断挖掘智能手机运算里的极限，进而不断推进智能手机硬件的发展。&lt;/p&gt;</description>
    </item>
    <item>
      <title>你会查列车的信用吗？</title>
      <link>https://frytea.com/archives/307/</link>
      <pubDate>Wed, 05 Feb 2020 07:51:44 +0000</pubDate>
      <guid>https://frytea.com/archives/307/</guid>
      <description>&lt;p&gt;今天在 &lt;a href=&#34;https://www.v2ex.com/&#34;&gt;V2EX&lt;/a&gt; 看到一篇帖子：&lt;a href=&#34;https://www.v2ex.com/t/637138#reply0&#34;&gt;坐火车 - 火车实时位置、行驶轨迹路线地图、历史准点率&lt;/a&gt; ，大概是说发帖者开发了一个微信小程序，可以用来查看火车的实时位置、行驶轨迹线路地图、历史准点率，甚至在新版本中提供了列车评价、同行微信群、到站提醒，特别还有一个历史准点率功能，感觉很好很强大！&lt;/p&gt;</description>
    </item>
    <item>
      <title>华为鲲鹏服务器初探</title>
      <link>https://frytea.com/archives/306/</link>
      <pubDate>Tue, 04 Feb 2020 09:29:21 +0000</pubDate>
      <guid>https://frytea.com/archives/306/</guid>
      <description>&lt;h2 id=&#34;起因&#34;&gt;起因&lt;/h2&gt;
&lt;p&gt;报名了华为云微认证  &lt;a href=&#34;https://edu.huaweicloud.com/certifications/32f661c5c9a142c8ad3ef050cce337a2&#34;&gt;轻松玩转Kubernetes&lt;/a&gt; ，需要一台北京四区的华为云 ECS 做客户机进行实验，发现华为云的 &lt;a href=&#34;https://developer.huaweicloud.com/campus&#34;&gt;云创校园&lt;/a&gt; 活动新推出了鲲鹏云服务器套餐，&lt;strong&gt;通用计算增强型云服务器，搭载自研华为鲲鹏920处理器及25GE智能高速网卡，提供强劲鲲鹏算力和高性能网络,购买指定配置服务可享受9元/月优惠,并赠送相同时长主机安全&lt;/strong&gt;，遂买来测试+实验。&lt;/p&gt;</description>
    </item>
    <item>
      <title>告别 Android 开发“Read timed out”</title>
      <link>https://frytea.com/archives/304/</link>
      <pubDate>Sat, 01 Feb 2020 07:34:00 +0000</pubDate>
      <guid>https://frytea.com/archives/304/</guid>
      <description>&lt;h2 id=&#34;问题背景&#34;&gt;问题背景&lt;/h2&gt;
&lt;p&gt;困扰博主近一个月的问题，导致近一个月没办法进行 Android 开发的问题终于解决了！&lt;/p&gt;
&lt;h2 id=&#34;问题错误特征&#34;&gt;问题错误特征&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Could not run phased build action using Gradle distribution &#39;https://services.gradle.org/distributions/gradle-5.5.1-all.zip&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;A problem occurred configuring root project &#39;PlanAssistant&#39;.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Could not resolve all artifacts for configuration &#39;:classpath&#39;.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Could not resolve com.android.tools.build:gradle:3.5.3.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Could not get resource &#39;https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.pom&#39;.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Could not GET &#39;https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.5.3/gradle-3.5.3.pom&#39;.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read timed out&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;就是这一句 &lt;code&gt;Read timed out&lt;/code&gt;，在过去的一个月里，我天天都看到这句报错，始终找不到比较好的解决方案。经过各种 Google，Baidu，bing，发现解决方案大致分为两种：&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于 Ubuntu 平台安装 OS X 10.15 虚拟机</title>
      <link>https://frytea.com/archives/302/</link>
      <pubDate>Thu, 30 Jan 2020 12:06:00 +0000</pubDate>
      <guid>https://frytea.com/archives/302/</guid>
      <description>&lt;p&gt;OS X 系统启动时会识别计算机主板，针对非苹果电脑拒绝启动，就算是虚拟机，也有天然的限制不可以随便安装 OS X 虚拟机，本文就介绍了在 Ubuntu 平台上使用 VMware Workstation 安装 OS X 10.15&lt;/p&gt;</description>
    </item>
    <item>
      <title>一个方便转存 Google Drive 分享文件的方法</title>
      <link>https://frytea.com/archives/301/</link>
      <pubDate>Thu, 30 Jan 2020 03:40:00 +0000</pubDate>
      <guid>https://frytea.com/archives/301/</guid>
      <description>&lt;p&gt;用过 Google Drive (以下简称GD) 的朋友们应该都清楚，GD 分享的文件可以一键添加到自己的云盘中，速度很快，一度让我感觉 Google 好牛，但仔细一看会发现这并不是将文件转存到自己的 GD 中，以大神分享的爱情公寓5资源为例：&lt;/p&gt;</description>
    </item>
    <item>
      <title>今天，你上云了吗？</title>
      <link>https://frytea.com/archives/300/</link>
      <pubDate>Fri, 24 Jan 2020 04:05:00 +0000</pubDate>
      <guid>https://frytea.com/archives/300/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;注：本文部分内容摘自《中国公有云服务市场（2019上半年）跟踪》报告，若有侵权立即删除。作者根据行文逻辑穿插个人理解，若有不当指出还请不吝指出！&lt;/p&gt;</description>
    </item>
    <item>
      <title>这项技术解决了博客访问的大问题</title>
      <link>https://frytea.com/archives/299/</link>
      <pubDate>Thu, 23 Jan 2020 03:35:00 +0000</pubDate>
      <guid>https://frytea.com/archives/299/</guid>
      <description>&lt;p&gt;由于一些原因，我的博客暂时托管在香港某家服务提供商的云主机之上，虽然商家已经尽权力为线路做了优化，但是到达大陆一些地域的访问速度还是不太理想，特别是在一些本人长期驻留的地域。&lt;/p&gt;</description>
    </item>
    <item>
      <title>版本控制及代码托管平台综述</title>
      <link>https://frytea.com/archives/297/</link>
      <pubDate>Sun, 19 Jan 2020 16:50:00 +0000</pubDate>
      <guid>https://frytea.com/archives/297/</guid>
      <description>&lt;p&gt;版本控制是协助软件开发的重要工具之一，根据维基百科中“版本控制”词条的描述，版本控制（英语：Version control）是维护工程蓝图的标准作法，能追踪工程蓝图从诞生一直到定案的过程。此外，版本控制也是一种软件工程技巧，借此能在软件开发的过程中，确保由不同人所编辑的同一程序文件都得到同步。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为Linux发行版安装中文字体</title>
      <link>https://frytea.com/archives/296/</link>
      <pubDate>Thu, 16 Jan 2020 03:17:00 +0000</pubDate>
      <guid>https://frytea.com/archives/296/</guid>
      <description>&lt;p&gt;前文提到博主为自己的 &lt;code&gt;ThinkPad E450&lt;/code&gt; 安装了一款来自爱尔兰的 &lt;code&gt;Linux/GNU 发行版&lt;/code&gt; 作为主力系统使用：&lt;a href=&#34;https://blog.frytea.com/archives/293/&#34;&gt;这款来自爱尔兰的操作系统真的是爱了&lt;/a&gt;。近期需要进行文字处理工作，安装了&lt;code&gt; WPS 2019 Linux 版&lt;/code&gt; ，但是发现这款外来的 &lt;code&gt;Linux/GNU 发行版&lt;/code&gt; 并没有自带一些常用的中文字体，如 宋体、仿宋、黑体 等字体，经过一番检索，博主使用从 Windows 10 家庭中文版中提取出中文字体导入，并在系统中刷新字体以使字体生效。下面就来讲讲详细步骤：&lt;/p&gt;</description>
    </item>
    <item>
      <title>一种高兼容度的通用文档解决方案</title>
      <link>https://frytea.com/archives/294/</link>
      <pubDate>Thu, 09 Jan 2020 10:12:00 +0000</pubDate>
      <guid>https://frytea.com/archives/294/</guid>
      <description>&lt;p&gt;你是否经常遇到这种情况：辛苦调好格式写好的 word 文档到其他人电脑上格式就莫名其妙的乱了；word 和 wps 处理的 docx 文档，不同的软件之间打开就是会出现一些很细微的差异。不得不说，就连微软自己将 office 系列软件的定位就是指一款 &lt;code&gt;文字处理软件&lt;/code&gt;，在这样的软件之上可以完成几乎所有的格式调整工作，但并不保证不同的设备、软件之间可以互相通用；此外如果是记录笔记或是进行文字创作，等格式调整完毕或许创作热情早就燃烧殆尽，word 在此时就不是一个很好的选择了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>这款来自爱尔兰的操作系统真的是爱了</title>
      <link>https://frytea.com/archives/293/</link>
      <pubDate>Tue, 07 Jan 2020 03:15:11 +0000</pubDate>
      <guid>https://frytea.com/archives/293/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;2020-01-07-10-04-31-.png&#34; loading=&#34;lazy&#34; src=&#34;https://imagehost-cdn.frytea.com/images/2020/01/07/2020-01-07-10-04-31-.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Zorin OS，是一个基于Ubuntu的GNU/Linux发行版。其目的是尽可能的模拟Windows的操作习惯，让用户可以方便的使用Zorin OS。为了让Windows用户更方便的使用Zorin，Zorin操作系统预装了Wine。同时，Zorin有自己特有的Zorin Look Changer(Zorin Appearance)，该软件可以用来方便的切换桌面的外观，比如切换成Windows7的外观或Mac外观。(WikiPedia)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Typecho 调取随机文章</title>
      <link>https://frytea.com/archives/292/</link>
      <pubDate>Mon, 06 Jan 2020 12:17:00 +0000</pubDate>
      <guid>https://frytea.com/archives/292/</guid>
      <description>&lt;p&gt;想要在博客每一篇博文结束的时候加上几篇博客其他文章，之后找到一个可以实现随机调取制定数量文章的方法，代码来源 &lt;a href=&#34;https://www.boke8.net/&#34;&gt;博客吧&lt;/a&gt;。实现方法很简单，并且可以根据自己的需求定制。&lt;/p&gt;
&lt;h2 id=&#34;打开方式&#34;&gt;打开方式&lt;/h2&gt;
&lt;p&gt;1、将下面的代码添加至主题的functions.php文件：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Typecho插件之飘雪插件</title>
      <link>https://frytea.com/archives/290/</link>
      <pubDate>Mon, 06 Jan 2020 11:44:17 +0000</pubDate>
      <guid>https://frytea.com/archives/290/</guid>
      <description>&lt;p&gt;这或许是一个很容易找到的东西，Typecho 博客飘雪花特效插件 Snowstorm，但是很奇怪的，博主好像就是很喜欢雪的那一个。而且每次看到飘雪就容易激发心中那些略显悲伤的回忆，算了，我还是很喜欢雪，郑州下了两天的小雨滴，要积雪还得在一阵子，就让我的博客下下雪吧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>时空位置与大数据</title>
      <link>https://frytea.com/archives/289/</link>
      <pubDate>Mon, 06 Jan 2020 02:51:00 +0000</pubDate>
      <guid>https://frytea.com/archives/289/</guid>
      <description>&lt;p&gt;在这个人人都谈大数据，处处皆用大数据的时代，我们身边的这些大数据究竟如何产生，又有多大的体量了呢？根据一份2013年的报告显示，2013 年中国产生的数据总量超过0.8ZB（相当于8亿TB），2 倍于2012 年，相当于2009 年全球的数据总量。预计到2020 年，中国产生的数据总量将是2013年的10倍，超过8.5ZB。（来源，ZDNET《数据中心2013：硬件重构与软件定义》年度技术报告）&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何随时随地免费使用中国知网？</title>
      <link>https://frytea.com/archives/287/</link>
      <pubDate>Fri, 03 Jan 2020 10:07:00 +0000</pubDate>
      <guid>https://frytea.com/archives/287/</guid>
      <description>&lt;p&gt;一般图书馆、高校研究机构都购买有万方、知网数据库，有时是通过 &lt;code&gt;ip&lt;/code&gt; 认证进行登陆的，机构登陆后即可下载文献资料，但是有时在代理环境或是不在教育网环境中却急需查询一些文献时怎么办呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>一种用于Linux 自动更换精美壁纸的方法</title>
      <link>https://frytea.com/archives/285/</link>
      <pubDate>Thu, 26 Dec 2019 05:13:00 +0000</pubDate>
      <guid>https://frytea.com/archives/285/</guid>
      <description>&lt;p&gt;本文介绍一种使用脚本自动获取 &lt;code&gt;Unsplsh&lt;/code&gt; 精美图片并设置为桌面的方法，最终效果为命令行使用一条指令达到上述效果。理论上说，本文原理可用于所有 &lt;code&gt;Gnome&lt;/code&gt; 桌面环境的 &lt;code&gt;Linux&lt;/code&gt; 发行版。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 安装 Android Studio</title>
      <link>https://frytea.com/archives/284/</link>
      <pubDate>Tue, 24 Dec 2019 09:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/284/</guid>
      <description>&lt;p&gt;网上关于 &lt;code&gt;Linux&lt;/code&gt;  环境下安装  &lt;code&gt;Android Studio&lt;/code&gt; 的教程很多，但是因发行版的不同而异，在这里记录使用官网提供的打包好的安装包安装在 &lt;code&gt;Zorin&lt;/code&gt; 系统上并创建快捷方式的方法：&lt;/p&gt;
&lt;p&gt;第一步：官网下载安装包&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitLab Pipline 使用 mkdocs 及 docs-material 自动编译生成静态页面并自动提交 GitLab Pages</title>
      <link>https://frytea.com/archives/275/</link>
      <pubDate>Tue, 03 Dec 2019 10:33:00 +0000</pubDate>
      <guid>https://frytea.com/archives/275/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;又被一个问题折磨疯了，然后又在一个莫名其妙的地方解决了？？？&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.mkdocs.org/&#34;&gt;MkDocs&lt;/a&gt; 是一个快速、简单、快捷可用的静态网站生成工具，文档使用 Markdown 书写，并仅需一个 YAML 配置文件。静态页面生成工具有 &lt;a href=&#34;https://docsify.js.org/#/&#34;&gt;Docsify&lt;/a&gt;, &lt;a href=&#34;https://vuepress.vuejs.org/&#34;&gt;VurPress&lt;/a&gt;, &lt;a href=&#34;https://github.com/GitbookIO/gitbook&#34;&gt;GitBook&lt;/a&gt;, &lt;a href=&#34;https://hexo.io/zh-cn/index.html&#34;&gt;hexo&lt;/a&gt;, &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; 等等。本人使用过 &lt;code&gt;Hexo&lt;/code&gt;和 &lt;code&gt;Docsify&lt;/code&gt;，直到我发现了 MkDocs 以及它的绝配主题 &lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/&#34;&gt;mkdocs-material&lt;/a&gt; ，&lt;code&gt;Mkdocs&lt;/code&gt; 的目录下仅需一个配置文件，然后就是完全的 MakeDown 文件即可，没有其他多余的配置，深得我心。今天就来讲讲如何为它配置一下 GitLabPipline 实现自动生成并提交到 GitLabPages。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kvm 虚拟机安装 OnlyOffice</title>
      <link>https://frytea.com/archives/272/</link>
      <pubDate>Sun, 01 Dec 2019 11:22:00 +0000</pubDate>
      <guid>https://frytea.com/archives/272/</guid>
      <description>&lt;h2 id=&#34;onlyoffice&#34;&gt;OnlyOffice&lt;/h2&gt;
&lt;p&gt;OnlyOffice 是一个开源的办公套件，由 Ascensio System SIA 公司开发，提供了在线文档编辑、文档管理、文档协作、邮件和项目管理等功能。(WikiPedia)&lt;/p&gt;
&lt;p&gt;打开官网可以看到 OnlyOffice 提供企业版、高校版等多个收费版本，在这里我们安装开源免费的 &lt;a href=&#34;https://www.onlyoffice.com/zh/download.aspx&#34;&gt;社区版&lt;/a&gt;。社区版提供多种安装方式，在这里我们选择&lt;code&gt;使用官方ONLYOFFICE Docker容器安装ONLYOFFICE社区版及其正常运行所需的全部依赖项&lt;/code&gt;。旨在最大程度的重现官方建议的环境节约时间。请注意，官方建议安装环境为 &lt;code&gt;2C/6G/40GB&lt;/code&gt; 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【GitLab CI/CD】记一个脑残问题  `too large archive`</title>
      <link>https://frytea.com/archives/271/</link>
      <pubDate>Sat, 30 Nov 2019 16:01:00 +0000</pubDate>
      <guid>https://frytea.com/archives/271/</guid>
      <description>&lt;p&gt;昨天到今天，我终于解决了一个脑残的问题！！&lt;/p&gt;
&lt;p&gt;事情是这样子的，我自己搭建了 GitLab ，并导入了我在 GitHub 所有的仓库，并打算未来就在这里提交我的代码了。一方面是因为 GitHub 实在是太慢了，目前使用 iPad 代理切换不智能；另一方面是我想要搭建自己的一套 Git Hosting + CI/CD 系统。搭建过程很顺利、导入过程也十分顺利，但是到了 CI/CD 这里就出了问题，我想要通过 GitLab Runner 编译我的 MKDocs 页面并自动部署到 GitLab Pages，但我被一个错误坑了整整两天：&lt;/p&gt;</description>
    </item>
    <item>
      <title>综述 DevOps</title>
      <link>https://frytea.com/archives/1140/</link>
      <pubDate>Thu, 28 Nov 2019 20:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1140/</guid>
      <description>&lt;p&gt;DevOps 常见于各大云计算提供商。DevOpe被用于打破开发者和运维者之间的壁垒，目的是缩短软件&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitLab 绑定 GCP 使用 Auto DevOps（可领取GCP $200.00 赠金）</title>
      <link>https://frytea.com/archives/269/</link>
      <pubDate>Thu, 28 Nov 2019 13:44:00 +0000</pubDate>
      <guid>https://frytea.com/archives/269/</guid>
      <description>&lt;p&gt;Auto DevOps provides pre-defined CI/CD configuration which allows you to automatically detect, build, test,
deploy, and monitor your applications. Leveraging CI/CD best practices and tools, Auto DevOps aims
to simplify the setup and execution of a mature &amp;amp; modern software development lifecycle.&lt;/p&gt;
&lt;p&gt;GitLab 的 Auto DevOps 是一个亮点，博主对于其特性还不够了解，在此不多谈。本文仅介绍如何为自建的 GitLab 绑定 Google Kubernets Engine (GKE)。&lt;/p&gt;</description>
    </item>
    <item>
      <title>综述 DevOps </title>
      <link>https://frytea.com/archives/268/</link>
      <pubDate>Thu, 28 Nov 2019 12:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/268/</guid>
      <description>&lt;p&gt;&lt;code&gt;DevOps&lt;/code&gt; 常见于各大云计算提供商。&lt;code&gt;DevOpe&lt;/code&gt;被用于打破开发者和运维者之间的壁垒，目的是缩短软件开发周期并提供高质量的持续集成。&lt;/p&gt;
&lt;p&gt;[tip type=&amp;ldquo;info&amp;rdquo; title=&amp;ldquo;DevOps&amp;rdquo;]&lt;/p&gt;
&lt;p&gt;DevOps is a set of practices that combines software development (Dev) and information-technology operations (Ops) which aims to shorten the systems development life cycle and provide continuous delivery with high software quality. (WikiPedia)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 使用 DNSMasq 自建 DNS 服务器</title>
      <link>https://frytea.com/archives/267/</link>
      <pubDate>Thu, 28 Nov 2019 08:35:00 +0000</pubDate>
      <guid>https://frytea.com/archives/267/</guid>
      <description>&lt;p&gt;DNS(Domain Name System) 是一个为计算机、服务器或其他任何需要接入互联网或私有网络提供分级域名分发系统(hierarchical and decentralized naming system)。&lt;/p&gt;
&lt;p&gt;在内网中又一台服务器提供服务，为了使用使其可以在公共网络中访问到需要为它分配 ip 或者使用端口转发、内网穿透等，但绑定域名后域名解析到公网ip，如果在内网访问的话就写多此一举。因此在内网自建一台 DNS 服务器，使其优先级高于公网域名解析服务器，进而实现内网访问解析为内网 ip 且不影响外网访问的目的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>KVM虚拟机安装 GitLab EE</title>
      <link>https://frytea.com/archives/266/</link>
      <pubDate>Thu, 28 Nov 2019 08:20:00 +0000</pubDate>
      <guid>https://frytea.com/archives/266/</guid>
      <description>&lt;p&gt;GitLab 是一个基于网页的软件开发生命周期管理工具，提供了 git 代码仓库、知识库、问题追踪、CI/CD 流水线功能，使用开源许可证，由 GitLab 公司开发（来自 WikiPedia）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>自建网盘之 NextCloud 终极记录</title>
      <link>https://frytea.com/archives/265/</link>
      <pubDate>Wed, 27 Nov 2019 02:34:00 +0000</pubDate>
      <guid>https://frytea.com/archives/265/</guid>
      <description>&lt;p&gt;自建过许多网盘，试过 可道云、Seafile、FileRun、Nextcloud，但Nextcloud的如下特性吸引了我：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完整、好用的客户端，包括 windows、mac、android、ios &amp;hellip;&lt;/li&gt;
&lt;li&gt;强大的插件扩展，如 Talk, Contacts, notes, Maps &amp;hellip;&lt;/li&gt;
&lt;li&gt;完整的第三方扩展，支持 Amazie S3, OneDrive, DropBox, Google Drive, Ftp, WebDav &amp;hellip;&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上种种吸引了我进行了无数次的配置、尝试、探索。我在 &lt;code&gt;Centos, Debian, Ubuntu, Docker, Cpanel Virtual Hosting&lt;/code&gt; 上都尝试过配置 &lt;code&gt;Nextcloud&lt;/code&gt; , 但最终发现，还是官方首推的 &lt;code&gt;sudo snap install nextcloud&lt;/code&gt; 方式是最稳定的，此外的自建环境 (Linux + Nginx + Php + MySQL) 总是会出各种各样的兼容性、异常报错，而这些异常报错会在一些莫名其妙、意想不到的地方出现让人在一个莫名其妙的地方掉坑。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 MySQL 报错 “ Column count of mysql.user is wrong...”</title>
      <link>https://frytea.com/archives/264/</link>
      <pubDate>Sat, 23 Nov 2019 12:34:00 +0000</pubDate>
      <guid>https://frytea.com/archives/264/</guid>
      <description>&lt;p&gt;新建 MySQL 账户报错：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Column count of mysql.user is wrong. Expected 45, found 43. Created with MySQL 5 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;错误是由于你曾经升级过数据库，升级完后没有使用mysql_upgrade升级数据结构造成的。&lt;/p&gt;
&lt;p&gt;解决办法：使用&lt;code&gt;mysql_upgrade&lt;/code&gt;命令&lt;/p&gt;</description>
    </item>
    <item>
      <title>kvm 虚拟化安装 Ubuntu 18.04 server</title>
      <link>https://frytea.com/archives/1234/</link>
      <pubDate>Sat, 23 Nov 2019 10:37:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1234/</guid>
      <description>&lt;p&gt;本文续上篇 《裸金属服务器 kvm 虚拟化安装 win10》继续记录使用 KVM 在 Centos&lt;/p&gt;</description>
    </item>
    <item>
      <title>NextCloud手动添加文件并列出</title>
      <link>https://frytea.com/archives/263/</link>
      <pubDate>Sat, 23 Nov 2019 03:08:50 +0000</pubDate>
      <guid>https://frytea.com/archives/263/</guid>
      <description>&lt;p&gt;NextCloud 自带的数据目录在列目录时都是通过数据库查询，如果需要手动在磁盘目录上添加文件并使用nextcloud列出就需要手动扫描。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo -u www php console.php files:scan --all
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这条命令是官方提供的，但是实际使用时会报错如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title> kvm 虚拟化安装 Ubuntu 18.04 server</title>
      <link>https://frytea.com/archives/262/</link>
      <pubDate>Sat, 23 Nov 2019 02:37:00 +0000</pubDate>
      <guid>https://frytea.com/archives/262/</guid>
      <description>&lt;p&gt;本文续上篇 &lt;a href=&#34;https://blog.frytea.com/archives/261/&#34;&gt;《裸金属服务器 kvm 虚拟化安装 win10》&lt;/a&gt;继续记录使用 &lt;code&gt;KVM&lt;/code&gt; 在 &lt;code&gt;Centos 7.5&lt;/code&gt; 裸金属服务器上安装 &lt;code&gt;Ubuntu 18.04 Server&lt;/code&gt;的过程及遇到的问题。&lt;/p&gt;
&lt;h2 id=&#34;资源准备&#34;&gt;资源准备&lt;/h2&gt;
&lt;p&gt;首先要配置好 &lt;code&gt;KVM&lt;/code&gt; 环境，上文已经详细说明，磁盘配置类似的使用 &lt;code&gt;qemu-img create -f qcow2 ubuntu.qcow2 100G &lt;/code&gt; 命令创建虚拟磁盘，系统镜像可以去官网下载:&lt;/p&gt;</description>
    </item>
    <item>
      <title>裸金属服务器kvm虚拟化安装win10</title>
      <link>https://frytea.com/archives/261/</link>
      <pubDate>Thu, 21 Nov 2019 08:39:00 +0000</pubDate>
      <guid>https://frytea.com/archives/261/</guid>
      <description>&lt;p&gt;受够了小鸡的各种卡顿以及各种套路，就想要一只&amp;quot;大鸡&amp;quot;，趁着双十一的余热购入&lt;a href=&#34;https://www.dzisp.cn&#34;&gt;达州创梦网络&lt;/a&gt;的&lt;a href=&#34;https://www.dzisp.cn/baremetal/&#34;&gt;江苏宿迁高防裸金属服务器&lt;/a&gt;（一种集合了虚拟机和物理机优点的产物），本人没有使用或配置过独立服务器，不过多评价。但和普通的 VPS 相比，裸金属服务器属于物理服务器，我的数据和其他用户数据做到了物理隔离，同时服务器本身是支持二次虚拟化的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【持续集成】Android使用Github Action自动打包并发布Fir.im内测</title>
      <link>https://frytea.com/archives/260/</link>
      <pubDate>Sun, 17 Nov 2019 13:36:00 +0000</pubDate>
      <guid>https://frytea.com/archives/260/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;B8A09718-BB0F-4896-82E9-332323220F15.jpeg&#34; loading=&#34;lazy&#34; src=&#34;https://blog.frytea.com/usr/uploads/2019/11/832379560.jpeg#shadow&#34;&gt;&lt;/p&gt;
&lt;p&gt;!!!&lt;/p&gt;
&lt;center&gt; Photo by Mesut Kaya on Unsplash &lt;/center&gt;
!!!
&lt;p&gt;为什么封面图是一张旅游的照片？因为使用 CI/CD 等工具高效的完成工作，就可以出去玩了！&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/features/actions&#34;&gt;GitHub Actions&lt;/a&gt; 是 &lt;a href=&#34;https://github.com&#34;&gt;GitHub&lt;/a&gt; 官方提供并免费提供给开源仓库使用的持续集成服务，在进入本文主题之前，先讲讲什么是持续集成 (CI/CD) 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 步打造自己的资讯阅读平台</title>
      <link>https://frytea.com/archives/170/</link>
      <pubDate>Tue, 29 Oct 2019 11:26:00 +0000</pubDate>
      <guid>https://frytea.com/archives/170/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;80FD1A99-BECC-43D7-A791-3B8BBC4BF6B0.jpeg&#34; loading=&#34;lazy&#34; src=&#34;https://blog.frytea.com/usr/uploads/2019/11/1252541376.jpeg#shadow&#34;&gt;&lt;/p&gt;
&lt;p&gt;!!!&lt;/p&gt;
&lt;center&gt; Photo by Roman Kraft on Unsplash &lt;/center&gt;
!!!
&lt;p&gt;今天偶然看到一个GitHub仓库，创建者计划制做一个工具，用来连接中文独立博客博主，打造一个面向独立博客的推荐、曝光、资讯互通及阅读平台，为此使用这个仓库收集中文独立博客，并通过 &lt;code&gt;js&lt;/code&gt; 处理搜集到的数据显示在 &lt;code&gt;README&lt;/code&gt; 中，数据在之后会整合到他打造的平台中，实现上述目标。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GTD高效工具之 WorkFlowy 推荐</title>
      <link>https://frytea.com/archives/169/</link>
      <pubDate>Sat, 26 Oct 2019 15:30:00 +0000</pubDate>
      <guid>https://frytea.com/archives/169/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;ED5AC20B-E893-412A-AFCA-5F5FB9E30F05.jpeg&#34; loading=&#34;lazy&#34; src=&#34;http://frytea-data.test.upcdn.net/ED5AC20B-E893-412A-AFCA-5F5FB9E30F05.jpeg#shadow&#34;&gt;&lt;/p&gt;
&lt;p&gt;!!!&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;[tag outline] Photo by Andrew Neel on Unsplash [/tag]&lt;/p&gt;
&lt;/center&gt;
!!!
&lt;p&gt;GTD（Getting Things Done / 尽管去做），是一种行为管理的方法，也是戴维·艾伦（英语：David Allen (author)）写的一本书的书名。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【趣味操作】Terminals显示带有酷炫linux标志的基本硬件信息</title>
      <link>https://frytea.com/archives/168/</link>
      <pubDate>Mon, 21 Oct 2019 09:39:00 +0000</pubDate>
      <guid>https://frytea.com/archives/168/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;77DEA736-675A-4501-9002-2F81E22731B3.jpeg&#34; loading=&#34;lazy&#34; src=&#34;http://frytea-data.test.upcdn.net/77DEA736-675A-4501-9002-2F81E22731B3.jpeg#shadow&#34;&gt;&lt;/p&gt;
&lt;p&gt;!!!&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;[tag outline] Photo by Sai Kiran Anagani on Unsplash [/tag]&lt;/p&gt;
&lt;/center&gt;
!!!
&lt;p&gt;你是否还对 Linux 系统看上去“可怕”的命令行望而却步呢？其实在它看似“简陋”的背后，拥有着无限强大的功能性、拓展性甚至趣味性。今天就来介绍一款有意思的命令，使用它你就可以看到字符串背后的美好！&lt;/p&gt;</description>
    </item>
    <item>
      <title>泛谈云计算</title>
      <link>https://frytea.com/archives/166/</link>
      <pubDate>Sun, 13 Oct 2019 11:09:12 +0000</pubDate>
      <guid>https://frytea.com/archives/166/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;EB0C1FAB-78FF-451F-843B-764E13FB3A18.jpeg&#34; loading=&#34;lazy&#34; src=&#34;http://frytea-data.test.upcdn.net/EB0C1FAB-78FF-451F-843B-764E13FB3A18.jpeg#shadow&#34;&gt;&lt;/p&gt;
&lt;p&gt;!!!&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;[tag outline] Photo by Avi Richards on Unsplash [/tag]&lt;/p&gt;
&lt;/center&gt;
!!!
&lt;p&gt;“大数据与云计算”可谓是当今很火热的两个词，许多相关的竞赛、项目不断捧热这些新型的词汇。但是究竟什么才是云计算，它究竟可以带给我们什么变革？本文按照作者个人认识行文，试图以最简单的方式传达作者对于云计算的思考。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deepin（Linux）下实现Android投屏</title>
      <link>https://frytea.com/archives/34/</link>
      <pubDate>Tue, 18 Jun 2019 00:39:00 +0000</pubDate>
      <guid>https://frytea.com/archives/34/</guid>
      <description>&lt;h1 id=&#34;deepinlinux下实现android投屏&#34;&gt;Deepin（Linux）下实现Android投屏&lt;/h1&gt;
&lt;p&gt;最近需要演示自己的安卓开发作品，因此需要在自己的主力操作系统（Deepin）上实现安卓投屏，之后才好连接电脑在班级里演示。找寻一圈之后终于发现了开源的Linux端投屏神器&lt;code&gt;Scrcpy&lt;/code&gt;. 因此在这里简单记录配置过程，方便后用。&lt;/p&gt;
&lt;p&gt;项目源码：&lt;a href=&#34;https://github.com/Genymobile/scrcpy&#34;&gt;Scrcpy的GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;简单说明&#34;&gt;简单说明&lt;/h2&gt;
&lt;p&gt;Scripe支持桌面全平台。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It works on GNU/Linux, Windows and MacOS.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;但是在这里主要记录下Linux下的Deepin系统配置。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android编程之Navigation项目迁移AndroidX踩坑记录</title>
      <link>https://frytea.com/archives/27/</link>
      <pubDate>Wed, 08 May 2019 11:19:00 +0000</pubDate>
      <guid>https://frytea.com/archives/27/</guid>
      <description>&lt;h1 id=&#34;android编程之navigation项目迁移androidx踩坑记录&#34;&gt;Android编程之Navigation项目迁移AndroidX踩坑记录&lt;/h1&gt;
&lt;p&gt;androidx 是对 android.support.xxx 包的整理后产物。由于之前的support包过于混乱，所以，google推出了 androidX。&lt;/p&gt;
&lt;p&gt;在项目迁移AndroidX的过程中遇到一些问题，特别是Navigation抽屉页面迁移的过程中遇到一些问题，跟着网上的教程走完了全程，却总是闪退，原因直指xml布局文件。&lt;/p&gt;
&lt;p&gt;经过一番斗争，终于完成了Android studio原生Navigation Drawer Activity的AndroidX迁移工作，在这里仅以此为例，记录迁移流程，及注意细节。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux下使用rclone挂载网盘到本地</title>
      <link>https://frytea.com/archives/31/</link>
      <pubDate>Mon, 06 May 2019 15:58:00 +0000</pubDate>
      <guid>https://frytea.com/archives/31/</guid>
      <description>&lt;p&gt;Rclone 是一个支持挂载多数国外网盘的工具。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://rclone.org/&#34;&gt;Rclone官网传送们&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;目前 Rclone 支持挂载的网盘有：Google Drive、 Dropbox 、Google Cloud Storage 、Microsoft One Drive 、Hubic、 Backblaze B2 、Yandex Disk 、Openstack Swift / Rackspace cloud files / Memset Memstore 等。更强大的是，Rclone 还支持 SFTP 、FTP 、HTTP 挂载。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows Update服务启动弹出“拒绝访问的解决方案</title>
      <link>https://frytea.com/archives/49/</link>
      <pubDate>Sat, 13 Apr 2019 14:25:00 +0000</pubDate>
      <guid>https://frytea.com/archives/49/</guid>
      <description>&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;说起 windows 自动更新相信这是让很多人又爱又恨的东西，爱在于它可以带给我们更新更安全的系统，让我们的生活添加一些新意；而恨就在于其常常在我们不知情的情况下强行开始更新并运行很久的时间。&lt;/p&gt;
&lt;p&gt;作者对于 windows 自动更新忍无可忍，从注册表层关闭了 windows 自动更新；但是当时年少无知，只图一时爽快，确实很长的一段时间没有再更新，但是当有一天我需要自动更新的时候却发现自动更新的服务怎么也打不开了，具体表现在开启 windows update 服务会提示拒绝访问&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://raw.githubusercontent.com/songtianlun/Image-Hosting/image/20190413122206.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;经过多次的探索，终于在今天成功开启了自动更新，并开始了一次漫长的更新，第一次感觉到了自动更新是多麽的开心！！在这里记录下这一过程，会开启，会关闭，才算真正学会这一大法，本文介绍方法反之即可作为彻底禁用自动更新的办法！&lt;/p&gt;</description>
    </item>
    <item>
      <title>私有vpn搭建工具集合及靠谱的vpn提供商</title>
      <link>https://frytea.com/archives/39/</link>
      <pubDate>Fri, 12 Apr 2019 12:04:00 +0000</pubDate>
      <guid>https://frytea.com/archives/39/</guid>
      <description>&lt;p&gt;经过本人两年多的实际体验，自建 *** 的方式风险、稳定性等都有待考究，并不是由一台海外服务器就能成的，m感时期可能几分钟就没了，因此还是比较推荐 「专业的人做专业的事」。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Win10安装Rational_Rose_2007步骤及安装包下载</title>
      <link>https://frytea.com/archives/45/</link>
      <pubDate>Thu, 11 Apr 2019 14:34:00 +0000</pubDate>
      <guid>https://frytea.com/archives/45/</guid>
      <description>&lt;p&gt;经典IBM给力软件，UML建模利器，亲身体验，安装步骤及资源全聚合。&lt;/p&gt;
&lt;h1 id=&#34;win10-安装rational_rose_2007-步骤及安装包下载&#34;&gt;Win10 安装Rational_Rose_2007 步骤及安装包下载&lt;/h1&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;Rational rose是一款创建UML模型的软件，由于其相对古老，因此安装流程较为曲折，在这里分享自己的安装经历，记录自己，方便他人。&lt;/p&gt;
&lt;p&gt;安装分为两部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;虚拟光驱工具Alcohol120%的安装&lt;/li&gt;
&lt;li&gt;Rational rose软件安装包的打开&lt;/li&gt;
&lt;li&gt;软件安装&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>vue项目使用axios对接第三方api，并做跨域处理</title>
      <link>https://frytea.com/archives/40/</link>
      <pubDate>Sun, 17 Mar 2019 09:51:00 +0000</pubDate>
      <guid>https://frytea.com/archives/40/</guid>
      <description>&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;使用 vue 框架对接第三方接口时，常常使用 anxios。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有很多时候你在构建应用时需要访问一个 API 并展示其数据。做这件事的方法有好几种，而使用基于 promise 的 HTTP 客户端 axios 则是其中非常流行的一种。
&lt;a href=&#34;https://cn.vuejs.org/v2/cookbook/using-axios-to-consume-apis.html&#34;&gt;vue官网描述&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>私人网盘搭建之centos下安装cloudreve</title>
      <link>https://frytea.com/archives/29/</link>
      <pubDate>Fri, 15 Mar 2019 05:10:00 +0000</pubDate>
      <guid>https://frytea.com/archives/29/</guid>
      <description>&lt;h1 id=&#34;简介&#34;&gt;简介&lt;/h1&gt;
&lt;p&gt;cloudreve是基于ThinkPHP构建的网盘系统，能够助您以较低成本快速搭建起公私兼备的网盘。
&lt;a href=&#34;https://cloudreve.org/&#34;&gt;主页&lt;/a&gt; | &lt;a href=&#34;https://forum.cloudreve.org/&#34;&gt;论坛&lt;/a&gt; | &lt;a href=&#34;https://drive.aoaoao.me/&#34;&gt;演示站&lt;/a&gt; | &lt;a href=&#34;https://jq.qq.com/?_wv=1027&amp;amp;k=5TX6sJY&#34;&gt;QQ群&lt;/a&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;http://pnabaentf.bkt.clouddn.com//20190315140056.png&#34;&gt;
支持的存储介质
&lt;img loading=&#34;lazy&#34; src=&#34;http://pnabaentf.bkt.clouddn.com//20190315140113.png&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;安装步骤&#34;&gt;安装步骤&lt;/h1&gt;
&lt;h2 id=&#34;第一步官网下载安装包&#34;&gt;第一步：官网下载安装包&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://cloudreve.org/download.php&#34;&gt;官网地址下载地址&lt;/a&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;http://pnabaentf.bkt.clouddn.com//20190315135200.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;第二步解压到网页根目录&#34;&gt;第二步：解压到网页根目录&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://pnabaentf.bkt.clouddn.com//20190315135258.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;第三步配置伪静态&#34;&gt;第三步：配置伪静态&lt;/h2&gt;
&lt;p&gt;以下为针对nginx的代码&lt;/p&gt;</description>
    </item>
    <item>
      <title>Centos系统安装docker</title>
      <link>https://frytea.com/archives/37/</link>
      <pubDate>Tue, 12 Mar 2019 03:13:00 +0000</pubDate>
      <guid>https://frytea.com/archives/37/</guid>
      <description>&lt;h2 id=&#34;主要步骤&#34;&gt;主要步骤&lt;/h2&gt;
&lt;p&gt;1、Docker 要求 CentOS 系统的内核版本高于 3.10 ，查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。&lt;/p&gt;
&lt;p&gt;通过 uname -r 命令查看你当前的内核版本&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ uname -r
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://pnabaentf.bkt.clouddn.com//20190312111724.png&#34;&gt;
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue项目使用经验积累</title>
      <link>https://frytea.com/archives/42/</link>
      <pubDate>Tue, 12 Mar 2019 02:51:00 +0000</pubDate>
      <guid>https://frytea.com/archives/42/</guid>
      <description>&lt;h1 id=&#34;参考文献&#34;&gt;参考文献&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/qq_29483485/article/details/86605215&#34;&gt;vue 引入自定义js方法并调用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/csl125/article/details/84867305&#34;&gt;在vue项目中使用地图api,在vue-cli搭建的项目中使用高德地图定位&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.jianshu.com/p/3dc7bad83021&#34;&gt;Vue - 监听文本框数据的三种方法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Vue项目api加载json文件</title>
      <link>https://frytea.com/archives/44/</link>
      <pubDate>Sun, 10 Mar 2019 04:00:00 +0000</pubDate>
      <guid>https://frytea.com/archives/44/</guid>
      <description>&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;在 vue 项目开发过程中，免不了的要进行 api 接口的调用，当后端接口未搭建完成时，可以使用 json 文件模拟数据调用来搭建功能，同时有一些相关数据也是需要本地 json 文件支持，于是在这里介绍自己实战项目内嵌 api 接口调用本地数据 json 的方式&lt;/p&gt;</description>
    </item>
    <item>
      <title>获取指定尺寸随机美图</title>
      <link>https://frytea.com/archives/1226/</link>
      <pubDate>Sat, 09 Mar 2019 11:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/1226/</guid>
      <description>&lt;p&gt;简介 unsplash是一个美图资源站点，站点提供大量高质量美图，重点突出，极其美丽，是获取资源的不&lt;/p&gt;</description>
    </item>
    <item>
      <title>获取指定尺寸随机美图 </title>
      <link>https://frytea.com/archives/51/</link>
      <pubDate>Sat, 09 Mar 2019 03:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/51/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://source.unsplash.com/random/1366x768&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;unsplash是一个美图资源站点，站点提供大量高质量美图，重点突出，极其美丽，是获取资源的不二选择，同时该站点还提供了一系列接口，在这里介绍一种获取随机美图的方式&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue项目使用leaflet&#43;heatmap.js加载热力图</title>
      <link>https://frytea.com/archives/41/</link>
      <pubDate>Fri, 08 Mar 2019 16:29:00 +0000</pubDate>
      <guid>https://frytea.com/archives/41/</guid>
      <description>&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;最近做数字工程实践涉及到大量的地图操作，刚开始跳过依赖于 supermap iclient for JavaScript，但是越做深入越发现局限性太大，于是开始考虑使用开源地图库做各项操作，本文记录在 vue 项目中引入原生 leaflet 及 heatmap 打开地图及显示热力图的各项操作。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue项目使用Vue2Leaflet插件实现地图显示</title>
      <link>https://frytea.com/archives/43/</link>
      <pubDate>Sun, 03 Mar 2019 10:47:00 +0000</pubDate>
      <guid>https://frytea.com/archives/43/</guid>
      <description>&lt;h1 id=&#34;简介&#34;&gt;简介&lt;/h1&gt;
&lt;p&gt;vue是一个渐进式javascript框架，用来快速构建网页项目，在vue框架之上结构化leaflet地图库的产物vue2leaflet可以在vue项目中很方便的加载地图，下面简单介绍一个vue2leaflet加载地图的过程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows下纯控制台配置vue环境并创建第一个vue项目</title>
      <link>https://frytea.com/archives/48/</link>
      <pubDate>Fri, 01 Mar 2019 01:50:00 +0000</pubDate>
      <guid>https://frytea.com/archives/48/</guid>
      <description>&lt;h1 id=&#34;概述&#34;&gt;概述&lt;/h1&gt;
&lt;p&gt;本文叙述如何在windows环境下完全使用cmd控制台配置vue环境并使用控制台创建vue项目，最终使用webstorm运行。&lt;/p&gt;
&lt;h1 id=&#34;环境配置&#34;&gt;环境配置&lt;/h1&gt;
&lt;h2 id=&#34;第一步nodejs安装&#34;&gt;第一步:node.js安装&lt;/h2&gt;
&lt;p&gt;Vue项目通常通过webpack工具来构建，而webpack命令的执行是依赖node.js的环境的，所以首先要安装node.js。node.js的官方地址为：&lt;a href=&#34;https://link.jianshu.com/?t=https://nodejs.org/en/download/&#34;&gt;https://nodejs.org/en/download/&lt;/a&gt;，下载相应版本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebStorm中使用Git同步代码到Github</title>
      <link>https://frytea.com/archives/47/</link>
      <pubDate>Wed, 27 Feb 2019 02:01:00 +0000</pubDate>
      <guid>https://frytea.com/archives/47/</guid>
      <description>&lt;h1 id=&#34;webstorm下配置github实现代码同步&#34;&gt;WebStorm下配置GitHub实现代码同步&lt;/h1&gt;
&lt;p&gt;项目开发时使用GitHub作为公共代码仓库托管代码，可以极大的提高团队合作效率，同时也可以实现代码云端存储等，方便自己也方便大家！下面记录一下自己配置webstorm同步github的过程，仅供参考。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hexo在GitHub及gitee配置小记</title>
      <link>https://frytea.com/archives/56/</link>
      <pubDate>Fri, 22 Feb 2019 07:51:00 +0000</pubDate>
      <guid>https://frytea.com/archives/56/</guid>
      <description>&lt;h2 id=&#34;问题小记&#34;&gt;问题小记&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;hexo d操作后将源代码上传而不是上传静态网页
解决方案是设置git账户，&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git config --global user.name &amp;#34;liuxianan&amp;#34;// 你的github用户名，非昵称
$ git config --global user.email  &amp;#34;xxx@qq.com&amp;#34;// 填写你的github注册邮箱
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;猜测还有可能是因为cloud studio的不稳定性&lt;/p&gt;</description>
    </item>
    <item>
      <title>网页版终端webssh2配置</title>
      <link>https://frytea.com/archives/33/</link>
      <pubDate>Thu, 21 Feb 2019 10:17:00 +0000</pubDate>
      <guid>https://frytea.com/archives/33/</guid>
      <description>&lt;p&gt;开源项目webssh2可以实现浏览器访问终端，参照网上教程实践后，记录步骤如下：&lt;/p&gt;
&lt;p&gt;安装NVM&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装稳定版node.js&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvm ls-remote --lts  查询最新版本号
 
        v8.13.0   (LTS: Carbon)
        v8.14.0   (LTS: Carbon)
-&amp;gt;      v8.14.1   (Latest LTS: Carbon)
 
nvm install 8.14.1
# 版本号随时可能改变，请使用 nvm ls-remote --lts 查询最新版本号。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下载webssh2&lt;/p&gt;</description>
    </item>
    <item>
      <title>Markdown语法</title>
      <link>https://frytea.com/archives/58/</link>
      <pubDate>Thu, 21 Feb 2019 07:46:00 +0000</pubDate>
      <guid>https://frytea.com/archives/58/</guid>
      <description>&lt;p&gt;Markdown 是一种可以使用普通文本编辑器编写的标记语言，通过简单的标记语法，它可以使普通文本内容具有一定的格式。因为其简单的语法及强大的拓展，可以让人专注于写作，不必要过于关注排版，是撰写文章的利器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux后台运行hexo</title>
      <link>https://frytea.com/archives/50/</link>
      <pubDate>Thu, 21 Feb 2019 07:22:00 +0000</pubDate>
      <guid>https://frytea.com/archives/50/</guid>
      <description>&lt;p&gt;hexo是一个非常高效的博客，但由于其设计特点，目的是为了转换为静态页面，因此不必要一直在后台运行，但是我想随时随地写博客同步到github，使用hexo admin编辑器，这就需要hexo一直在后台运行，于是在网上找到了pm2托管的方式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hexo右上角添加GitHub Corner</title>
      <link>https://frytea.com/archives/52/</link>
      <pubDate>Thu, 21 Feb 2019 05:46:00 +0000</pubDate>
      <guid>https://frytea.com/archives/52/</guid>
      <description>&lt;p&gt;使用hexo主题及github发布了博客，想在现有博客上添加一个github corner，于是使用下面的方法，由于我只想在主页添加，于是在主题目录下找到index.swig文件，添加如下代码：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用aria2实现离线下载</title>
      <link>https://frytea.com/archives/36/</link>
      <pubDate>Wed, 23 Jan 2019 13:56:00 +0000</pubDate>
      <guid>https://frytea.com/archives/36/</guid>
      <description>&lt;p&gt;迅雷、百度网盘等的下载工具体验是越来越差了。作为一家独大的下载工具迅雷虽然其下载能力一流，但商业化太过严重，即使开通会员也不能保证一个稳定的下载体验。也许用户需要的不是一个好看的页面，需要的只是一个纯净的下载环境。在这样的环境下，自己搭建一个离线下载站就显得非常有必要。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android 集成腾讯定位</title>
      <link>https://frytea.com/archives/28/</link>
      <pubDate>Thu, 17 Jan 2019 15:44:00 +0000</pubDate>
      <guid>https://frytea.com/archives/28/</guid>
      <description>&lt;h1 id=&#34;android-集成腾讯定位&#34;&gt;Android 集成腾讯定位&lt;/h1&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;在安卓软件开发过程中需要用到定位，在对比了国内比较知名的三种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高德定位&lt;/li&gt;
&lt;li&gt;百度定位&lt;/li&gt;
&lt;li&gt;腾讯定位&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后选择了第三种，腾讯定位，原因主要是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持获取WGS-84坐标&lt;/li&gt;
&lt;li&gt;支持网络定位&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Wordpress邮件通知插件Notification使用小记</title>
      <link>https://frytea.com/archives/55/</link>
      <pubDate>Thu, 17 Jan 2019 07:39:00 +0000</pubDate>
      <guid>https://frytea.com/archives/55/</guid>
      <description>&lt;p&gt;Notification是wordpress上一款功能强劲的插件，可以实现wordpress各种事件的邮件通知功能，更可以根据自己的实际需求定制自己的邮件通知内容，插件提供了很多的短代码，能够很方便的协助用户完成邮件的模板创建。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ArcGis综合运用实践</title>
      <link>https://frytea.com/archives/46/</link>
      <pubDate>Tue, 15 Jan 2019 09:46:00 +0000</pubDate>
      <guid>https://frytea.com/archives/46/</guid>
      <description>&lt;h2 id=&#34;准备工作&#34;&gt;准备工作&lt;/h2&gt;
&lt;p&gt;环境：windows 10 home&lt;br&gt;
软件：Arcgis 10.5&lt;br&gt;
数据：&lt;br&gt;
（1）新乡市矢量边界&lt;br&gt;
（2）包含新乡及周边的dem高程数据&lt;br&gt;
（3）新乡市多波段合成遥感数据&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wordpress评论区爆炸特效</title>
      <link>https://frytea.com/archives/54/</link>
      <pubDate>Tue, 15 Jan 2019 02:26:00 +0000</pubDate>
      <guid>https://frytea.com/archives/54/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.songtianlun.cn/wp-content/uploads/2019/01/image-30.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;一直羡慕别人的博客输入有这样一个特效，想自己做一个，终于在这个博客找到了解决方案，于是尝试一下成功了！&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.macrr.com/comment-input-effects.html&#34;&gt;WordPress优化：给博客添加评论输入特效&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;第一步：下载js代码，放入网站目录某文件夹下，我放在【/www/wwwroot/blog.songtianlun.cn/wp-content/themes/hestia/mouseclink】目录下&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 常用命令</title>
      <link>https://frytea.com/archives/38/</link>
      <pubDate>Mon, 14 Jan 2019 12:32:00 +0000</pubDate>
      <guid>https://frytea.com/archives/38/</guid>
      <description>&lt;h1 id=&#34;linux常用命令&#34;&gt;Linux常用命令&lt;/h1&gt;
&lt;h2 id=&#34;端口占用查询&#34;&gt;端口占用查询&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;netstat -apn
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;centos查看端口占用情况命令&#34;&gt;Centos查看端口占用情况命令&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;比如查看80端口占用情况使用如下命令：&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;lsof -i tcp:80&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;列出所有端口&#34;&gt;列出所有端口&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;netstat -ntlp&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;程序归属master为例&#34;&gt;程序归属（master为例）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;locate  master | grep &#39;/master$&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;初始化新安装命令生效&#34;&gt;初始化（新安装命令生效）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo updatedb
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;进程管理&#34;&gt;进程管理&lt;/h2&gt;
&lt;h3 id=&#34;查进程&#34;&gt;查进程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ps命令查找与进程相关的PID号：
    ps a 显示现行终端机下的所有程序，包括其他用户的程序。
    ps -A 显示所有程序。
    ps c 列出程序时，显示每个程序真正的指令名称，而不包含路径，参数或常驻服务的标示。
    ps -e 此参数的效果和指定&amp;quot;A&amp;quot;参数相同。
    ps e 列出程序时，显示每个程序所使用的环境变量。
    ps f 用ASCII字符显示树状结构，表达程序间的相互关系。
    ps -H 显示树状结构，表示程序间的相互关系。
    ps -N 显示所有的程序，除了执行ps指令终端机下的程序之外。
    ps s 采用程序信号的格式显示程序状况。
    ps S 列出程序时，包括已中断的子程序资料。
    ps -t&amp;lt;终端机编号&amp;gt; 指定终端机编号，并列出属于该终端机的程序的状况。
    ps u 以用户为主的格式来显示程序状况。
    ps x 显示所有程序，不以终端机来区分。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;杀进程&#34;&gt;杀进程&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;使用kill命令结束进程：kill xxx
 例：kill －9 324
   Linux下还提供了一个killall命令，可以直接使用进程的名字而不是进程标识号，例如：# killall -9 NAME
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;ssh使用&#34;&gt;SSH使用&lt;/h2&gt;
&lt;h3 id=&#34;1-ssh远程登录服务器&#34;&gt;1 ssh远程登录服务器&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ssh username@remote_ip 
#将username换成自己的用户名，将remote_ip换成远程服务器的ip地址
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;2-将文件文件夹从远程服务器拷至本地scp&#34;&gt;2 将文件/文件夹从远程服务器拷至本地(scp)&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;scp -r username@remote_ip:/home/username/remotefile.txt 
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;3-将文件文件夹从本地拷至远程服务器scp&#34;&gt;3 将文件/文件夹从本地拷至远程服务器(scp)&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;scp -r localfile.txt username@remote_ip:/home/username/
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;4-将文件文件夹从远程服务器拷至本地rsync&#34;&gt;4 将文件/文件夹从远程服务器拷至本地(rsync)&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rsync -v -u -a --delete --rsh=ssh –stats username@remote_ip:/home/username/remotefile.txt .
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;5-将文件文件夹从本地拷至远程服务器rsync&#34;&gt;5 将文件/文件夹从本地拷至远程服务器(rsync)&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rsync -v -u -a --delete --rsh=ssh --stats localfile.txt username@remote_ip:/home/username/
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;6-连接远程ssh非22端口的服务器ssh端口为12345&#34;&gt;6 连接远程ssh非22端口的服务器(ssh端口为12345)&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ssh -p 12345 username@remote_ip
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;7-远程拷贝ssh非22端口的服务器文件ssh端口为12345&#34;&gt;7 远程拷贝ssh非22端口的服务器文件(ssh端口为12345)&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;scp -P 12345 local_file username@remote_ip:remote_dir

scp -P 12345 username@remote_ip:remote_file local_dir

scp -o port=12345 username@remote_ip:remote_file local_dir

scp -P 12345 -r local_dir/.* username@remote_ip:remote_dir
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;拷贝目录，-r是将目录下的目录递归拷贝。&amp;quot;.*&amp;ldquo;是将隐藏文件也拷贝过去。需要先在远端创建好相应的目录。&lt;/p&gt;</description>
    </item>
    <item>
      <title>vps使用Shadowsocks搭建vpn</title>
      <link>https://frytea.com/archives/30/</link>
      <pubDate>Sat, 12 Jan 2019 03:52:00 +0000</pubDate>
      <guid>https://frytea.com/archives/30/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Create a SOCKS5 Proxy Server with Shadowsocks on Ubuntu and CentOS 7&#34; loading=&#34;lazy&#34; src=&#34;https://www.linode.com/docs/networking/vpn/create-a-socks5-proxy-server-with-shadowsocks-on-ubuntu-and-centos7/shadowsocks.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;简介&#34;&gt;简介&lt;/h2&gt;
&lt;p&gt;编程需要经常需要翻墙，当年的我天真无邪上了不少当，每次的 vpn 经历无一不遇奸商！于是下决心搭建自己的 vpn！就在今天，vpn 终于搭建成功，在这里分享一下成功的喜悦同时贴出自己搭建的过程仅供参考！&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wordpress鼠标指针样式自定义</title>
      <link>https://frytea.com/archives/53/</link>
      <pubDate>Fri, 11 Jan 2019 16:55:00 +0000</pubDate>
      <guid>https://frytea.com/archives/53/</guid>
      <description>&lt;p&gt;继续折腾自己的博客！&lt;/p&gt;
&lt;p&gt;今天要做的事自定义鼠标样式！需要做的是增加css样式！&lt;/p&gt;
&lt;p&gt;第一步：选择鼠标样式，最好是两个状态，正常和链接，即普通的箭头和小手&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.songtianlun.cn/wp-content/uploads/2019/01/image-9.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;第二步：将样式的cur文件上传至服务器&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wordpress鼠标点击出现爱心</title>
      <link>https://frytea.com/archives/60/</link>
      <pubDate>Fri, 11 Jan 2019 16:37:00 +0000</pubDate>
      <guid>https://frytea.com/archives/60/</guid>
      <description>&lt;p&gt;同上文，眼馋各大博主博客令人眼前一亮的设计，想要给自己博客也打扮打扮，今天就来弄弄鼠标点击出现爱心的效果吧！&lt;/p&gt;
&lt;p&gt;采用了代码方式实现，很简单：&lt;/p&gt;
&lt;p&gt;第一步：在主题根目录创建js文件，写入如下代码：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wordpress 添加下雪特效</title>
      <link>https://frytea.com/archives/59/</link>
      <pubDate>Fri, 11 Jan 2019 15:48:00 +0000</pubDate>
      <guid>https://frytea.com/archives/59/</guid>
      <description>&lt;p&gt;最近非常热衷于逛博客，各大博主博客都非常出彩，弄得我心里面痒痒的也想弄，就先从一个下雪效果开始吧！&lt;/p&gt;
&lt;p&gt;在网上找了很多资料，最后找到一个非常靠谱的，步骤非常简单！&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wordpress自动推送新文章收录百度</title>
      <link>https://frytea.com/archives/57/</link>
      <pubDate>Fri, 11 Jan 2019 15:14:00 +0000</pubDate>
      <guid>https://frytea.com/archives/57/</guid>
      <description>&lt;p&gt;百度站长工具提供了很多种页面收录方式，在百度资源搜索平台提供了多种提交方式，比如自动提交，手动提交，以及sitemap。&lt;/p&gt;
&lt;p&gt;百度资源搜索平台：&lt;a href=&#34;https://ziyuan.baidu.com/&#34;&gt;https://ziyuan.baidu.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在这里介绍两种方式，一种是使用代码的方式，一种是使用插件，不知道是否能成功，如果大家能在百度搜索到这篇文章，自然代表着成功啦！&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wordpress检测文章手否被百度收录</title>
      <link>https://frytea.com/archives/61/</link>
      <pubDate>Fri, 11 Jan 2019 14:38:00 +0000</pubDate>
      <guid>https://frytea.com/archives/61/</guid>
      <description>&lt;p&gt;开通博客后就痴迷于让更多的人看到自己的博客，在百度搜索资源提交链接，又配置了文章自动提交百度的代码，还是想知道文章是否被百度收录，于是找到了下面这篇文章：&lt;/p&gt;</description>
    </item>
    <item>
      <title>私人网盘nextcloud配置问题解决</title>
      <link>https://frytea.com/archives/32/</link>
      <pubDate>Thu, 10 Jan 2019 03:29:00 +0000</pubDate>
      <guid>https://frytea.com/archives/32/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.songtianlun.cn/wp-content/uploads/2019/01/image-7.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装流程&#34;&gt;安装流程&lt;/h2&gt;
&lt;p&gt;配置流程非常简单，主要是参考了下面这篇博文配置，在宝塔面板下安装nextcloud，非常简单。&lt;/p&gt;
&lt;p&gt;博文跳转:&lt;a href=&#34;https://www.vpsss.net/5780.html&#34;&gt;https://www.vpsss.net/5780.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;大概总结以下步骤：&lt;/p&gt;
&lt;p&gt;第一步：官网下载安装包：&lt;a href=&#34;https://nextcloud.com/&#34;&gt;https://nextcloud.com/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>DirectoryLister搭建个人资源分享站点及私人云盘搭建小记</title>
      <link>https://frytea.com/archives/35/</link>
      <pubDate>Tue, 08 Jan 2019 14:53:00 +0000</pubDate>
      <guid>https://frytea.com/archives/35/</guid>
      <description>&lt;p&gt;喜大普奔！本站开通了资源共享站点及私人云盘！&lt;/p&gt;
&lt;p&gt;简直是好一通折腾，故事说来话长，本文主要谈谈私人共享站点搭建过程中遇到的问题及体会&lt;/p&gt;
&lt;h2 id=&#34;引言&#34;&gt;引言&lt;/h2&gt;
&lt;p&gt;一直想要搭建一个属于自己的资源共享小站，把一些不好寻找的资源放在站点上供我的朋友们下载，随着博客、主页的陆续开通，想着时机已到，于是开始着手准备了解各种资源。&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能生活管家项目之一-系统简介 </title>
      <link>https://frytea.com/archives/26/</link>
      <pubDate>Mon, 03 Dec 2018 18:30:00 +0000</pubDate>
      <guid>https://frytea.com/archives/26/</guid>
      <description>&lt;p&gt;&lt;strong&gt;用“智能”决策生活，篆刻生活印记&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;随着技术的发展和人类的进步，人们的生活节奏越来越快，每一天都淹没在“数据”的海洋中。我们在享受先进技术、快捷网络以及城市便捷性的同时，越来越追求精神层面的享受。但同样的，在我们中常常会有一些人，他们难以适应日新月异的快节奏生活，于是越来越多的面对这个忙碌的世界感到迷茫，不知道一天都做了什么，不知道一天这么多事情该如何处理。随着时代的发展，我们每一天都有越来越多的事情等待完成，人们的步伐越来越快，渐渐的忘记了我们去过那里，忘记了我们去做过什么，忽略了我们的生活结构是怎样。“复盘”是帮助一个人进步很好的方式，但快节奏的生活让越来越多的人忘记了自己的轨迹，更难以去优化自己的生活轨迹；换句话说，我们将自己有限的精力放在了更重要的地方，可记录并优化生活结构这样非常有助于我们提高生活效率的方式却常常无法完成。
于是，我们想到了开发“智能生活管家”系统，以用户APP的方式和用户交互并提供相关功能，我们希望将自己所学专业知识，运用到实际生活中，甚至能够帮助人们更好的生活！&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
