<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[刘新修]]></title> 
<link>http://pic1.liuxinxiu.com:80/index.php</link> 
<description><![CDATA[刘新修的个人博客 (Liuxinxiu'S Blog)]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[刘新修]]></copyright>
<item>
<link>http://pic1.liuxinxiu.com:80/Emscripten/</link>
<title><![CDATA[centos 安装 Emscripten]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Fri, 08 Nov 2024 07:53:05 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/Emscripten/</guid> 
<description>
<![CDATA[ 
	<p><strong>centos 安装 Emscripten</strong></p><div>在CentOS上安装Emscripten需要几个步骤。以下是基本的安装指南：</div><div>&nbsp;</div><div>更新系统包：</div><div>&nbsp;</div><div><strong><span style="color: rgb(128, 0, 0);">sudo yum update</span></strong></div><div>安装Emscripten需要的依赖项：</div><div>&nbsp;</div><div><span style="color: rgb(128, 0, 0);"><strong>sudo yum install git clang make python nodejs</strong></span></div><div>获取Emscripten源代码：</div><div>&nbsp;</div><div><strong><span style="color: rgb(128, 0, 0);">git clone https://github.com/emscripten-core/emsdk.git</span></strong></div><div>进入emsdk目录并安装最新的Emscripten SDK：</div><div>&nbsp;</div><div><strong><span style="color: rgb(128, 0, 0);">cd emsdk</span></strong></div><div><strong><span style="color: rgb(128, 0, 0);">./emsdk install latest</span></strong></div><div>激活安装的SDK：</div><div>&nbsp;</div><div><strong><span style="color: rgb(128, 0, 0);">./emsdk activate latest</span></strong></div><div>加载Emscripten环境变量，可以将以下命令加入到你的.bashrc或.bash_profile中，以便在每个新的终端会话中自动设置环境变量：</div><div>&nbsp;</div><div><strong><span style="color: rgb(128, 0, 0);">source ./emsdk_env.sh</span></strong></div><div>完成以上步骤后，Emscripten应该就安装并配置好了。</div><div>&nbsp;</div><div>可以通过运行<strong>emcc --version</strong>来检查是否安装成功。</div><div>&nbsp;</div><div><div>[root@localhost emsdk]# <span style="color: rgb(128, 0, 0);"><strong>emcc --version</strong></span></div><div>shared:INFO: (Emscripten: Running sanity checks)</div><div>emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.71 (4171ae200b77a6c266b0e1ebb507d61d1ade3501)</div><div>Copyright (C) 2014 the Emscripten authors (see AUTHORS.txt)</div><div>This is free and open source software under the MIT license.</div><div>There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</div></div>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s/342/</link>
<title><![CDATA[安装Rust]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Fri, 08 Nov 2024 07:50:14 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s/342/</guid> 
<description>
<![CDATA[ 
	<p><span style="box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word; color: rgb(77, 77, 77); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures;">Rust 是一种系统级编程语言，旨在提供高性能和内存安全，同时避免常见的编程错误。</span><br style="box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word; color: rgb(77, 77, 77); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures;" /><span style="color: rgb(77, 77, 77); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures;">由 Mozilla Research 推出，Rust 自推出以来因其独特的设计理念和强大的功能而在开发者社区中迅速获得了广泛的关注和采用。</span></p><p>安装命令：</p><p><span style="color: rgb(128, 0, 0);"><strong>curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs &#124; sh</strong></span></p><p>分解说明：</p><p>curl：这是一个用于在命令行下传输数据的工具，支持多种协议（如 HTTP、HTTPS、FTP 等）。</p><p>--proto '=https'：指定只允许使用 HTTPS 协议进行传输，确保数据传输的安全性。</p><p>--tlsv1.2：强制 curl 使用 TLS 1.2 协议，这是一种安全的传输层协议。</p><p>-s：静默模式（silent），在执行过程中不会显示进度条或错误信息。</p><p>-Sf：</p><p>-S：当使用 -s（静默模式）时，-S 可以让 curl 在发生错误时仍然显示错误信息。</p><p>-f：如果服务器返回一个错误状态码（如 404），curl 会失败并返回一个错误，而不是输出错误页面的内容。</p><p>https://sh.rustup.rs：这是 Rust 官方提供的安装脚本的 URL。</p><p>&#124; sh：管道符号（&#124;）将前一个命令（curl）的输出传递给后一个命令（sh）。也就是说，下载的安装脚本将直接由 sh（shell）执行。</p><p>整体作用：</p><p>这个命令通过安全的 HTTPS 连接下载 Rust 的安装脚本，并立即在您的终端中执行该脚本，以便安装 Rust 编程语言及其工具链。</p><p>&nbsp;</p><p>输出解释</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>info: downloading installer&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>Welcome to Rust!&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>This will download and install the official compiler <span class="keyword">for</span><span> the Rust&nbsp;&nbsp;</span></span></li><li><span>programming language, and its package manager, Cargo.&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>Rustup metadata and toolchains will be installed into the Rustup&nbsp;&nbsp;</span></li><li class="alt"><span>home directory, located at:&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;/home/jjmczd/.rustup&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>This can be modified with the RUSTUP_HOME environment variable.&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>The Cargo home directory <span class="keyword">is</span><span> located at:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;/home/jjmczd/.cargo&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>This can be modified with the CARGO_HOME environment variable.&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>The cargo, rustc, rustup and other commands will be added to&nbsp;&nbsp;</span></li><li><span>Cargo's bin directory, located at:&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;/home/jjmczd/.cargo/bin&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>This path will then be added to your PATH environment variable by&nbsp;&nbsp;</span></li><li class="alt"><span>modifying the profile files located at:&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;/home/jjmczd/.profile&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;/home/jjmczd/.bashrc&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>You can uninstall at any time with rustup self uninstall and&nbsp;&nbsp;</span></li><li class="alt"><span>these changes will be reverted.&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>Current installation options:&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp; <span class="keyword">default</span><span> host triple: x86_64-unknown-linux-gnu&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; <span class="keyword">default</span><span> toolchain: stable (</span><span class="keyword">default</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; profile: <span class="keyword">default</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;modify PATH variable: yes&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>1) Proceed with standard installation (<span class="keyword">default</span><span> - just press enter)&nbsp;&nbsp;</span></span></li><li class="alt"><span>2) Customize installation&nbsp;&nbsp;</span></li><li><span>3) Cancel installation&nbsp;&nbsp;</span></li></ol></div><p>逐行解释：</p><p>info: downloading installer</p><p>解释：安装程序正在下载过程中。</p><p>Welcome to Rust!</p><p>解释：欢迎使用 Rust！</p><p>接下来的几行</p><p>解释：这些行说明了安装过程将会下载和安装 Rust 官方编译器（rustc）以及其包管理器（Cargo）。</p><p>Rustup metadata and toolchains will be installed into the Rustup home directory, located at:</p><p>解释：Rustup 的元数据和工具链将被安装到指定的 Rustup 主目录中，默认路径为 /home/jjmczd/.rustup。您可以通过设置 RUSTUP_HOME 环境变量来修改此路径。</p><p>The Cargo home directory is located at:</p><p>解释：Cargo 的主目录位于 /home/jjmczd/.cargo。同样，您可以通过设置 CARGO_HOME 环境变量来修改此路径。</p><p>The cargo, rustc, rustup and other commands will be added to Cargo's bin directory, located at:</p><p>解释：cargo、rustc、rustup 以及其他相关命令将被添加到 Cargo 的 bin 目录中，即 /home/jjmczd/.cargo/bin。</p><p>This path will then be added to your PATH environment variable by modifying the profile files located at:</p><p>解释：安装程序会将上述 bin 目录路径添加到您的 PATH 环境变量中，这通过修改您的 shell 配置文件（如 /home/jjmczd/.profile 和 /home/jjmczd/.bashrc）来实现。这样，您可以在任何终端会话中直接运行 Rust 的命令。</p><p>You can uninstall at any time with rustup self uninstall and these changes will be reverted.</p><p>解释：如果您在任何时候想要卸载 Rust，可以运行 rustup self uninstall 命令，这将撤销所有安装的更改。</p><p>Current installation options:</p><p>解释：当前的安装选项如下：</p><p>default host triple: x86_64-unknown-linux-gnu</p><p>解释：默认的主机三元组（host triple）是 x86_64-unknown-linux-gnu，表示安装的是适用于 64 位 Linux 系统的 Rust 工具链。</p><p>default toolchain: stable (default)</p><p>解释：默认的工具链是 stable 版本，这是 Rust 的稳定版本，适合大多数用户和生产环境使用。</p><p>profile: default</p><p>解释：使用的是默认的安装配置文件，包含基本的组件和设置。</p><p>modify PATH variable: yes</p><p>解释：安装程序将修改您的 PATH 环境变量，以便您可以在终端中直接使用 Rust 的命令。</p><p>安装选项菜单：</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>1) Proceed with standard installation (</span><span class="keyword">default</span><span> - just press enter)&nbsp;&nbsp;</span></span></li><li><span>2) Customize installation&nbsp;&nbsp;</span></li><li class="alt"><span>3) Cancel installation&nbsp;&nbsp;</span></li></ol></div><div><div>1) Proceed with standard installation (default - just press enter)</div><div>&nbsp;</div><div>解释：继续标准安装（默认选项）。如果您按回车键，将使用上述默认设置进行安装。</div><div>2) Customize installation</div><div>&nbsp;</div><div>解释：自定义安装。选择此选项可以让您自定义安装路径、选择不同的工具链版本或调整其他安装选项。</div><div>3) Cancel installation</div><div>&nbsp;</div><div>解释：取消安装。选择此选项将终止 Rust 的安装过程。</div><div>接下来的步骤</div><div>选择安装选项：</div><div>&nbsp;</div><div>标准安装：如果您不需要自定义安装，直接按回车键继续。这将使用默认设置进行安装。</div><div>自定义安装：如果您需要更改安装路径或选择特定的工具链版本，可以输入 2 并按照提示进行操作。</div><div>取消安装：如果您暂时不想安装 Rust，可以输入 3 取消。</div><div>完成安装：</div><div>&nbsp;</div><div><div>安装完成后，确保重新启动终端或重新加载 shell 配置文件，以便新的 PATH 设置生效。</div><div>&nbsp;</div><div>您可以通过运行以下命令来验证 Rust 是否安装成功：</div></div><div>&nbsp;</div><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>rustc --version&nbsp;&nbsp;</span></span></li><li><span>cargo --version&nbsp;&nbsp;</span></li></ol></div><div>&nbsp;</div></div><div><div>这两个命令应分别返回 Rust 编译器和 Cargo 的版本信息。</div><div>更新 Rust（可选）：</div><div>如果您已经安装过 Rust，可以通过以下命令更新到最新版本：</div><div>&nbsp;</div><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>rustup update&nbsp;&nbsp;</span></span></li></ol></div><div><div>PATH 环境变量未更新：</div><div>如果安装后运行 rustc --version 提示找不到命令，可能是因为 PATH 环境变量未正确更新。您可以手动添加 Cargo 的 bin 目录到 PATH 中，例如：</div><div><span style="color: rgb(128, 0, 0);"><strong>export PATH=&quot;$HOME/.cargo/bin:$PATH&quot;</strong></span></div><div>&nbsp;</div><div>将上述行添加到您的 ~/.bashrc 或 ~/.profile 文件中，然后重新加载配置：</div><div><span style="color: rgb(128, 0, 0);"><strong>source ~/.bashrc</strong></span></div><div>&nbsp;</div><div>&nbsp;</div><div><span style="font-family: &quot;Courier New&quot;, monospace; font-size: 12px;">wasm-pack编译命令：</span></div><div>&nbsp;</div><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>[root@localhost&nbsp;brotli-compress-vue-component]#&nbsp;wasm-pack&nbsp;build&nbsp;--target&nbsp;web&nbsp;--</span><span class="keyword">out</span><span>-name&nbsp;compress&nbsp;--</span><span class="keyword">out</span><span>-dir&nbsp;pkg&nbsp;&nbsp;</span></span></li></ol></div><div>&nbsp;</div></div><div>&nbsp;</div></div>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s/338/</link>
<title><![CDATA[SHELL 脚本删除文件或目录]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Fri, 27 Sep 2024 09:28:15 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s/338/</guid> 
<description>
<![CDATA[ 
	<p>使用SHELL脚本，删除指定文件或目录，</p><p>使用方法：bash /sh/delfiles.sh 11.txt 22.txt</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="preprocessor">#!/bin/bash</span><span>&nbsp;&nbsp;</span></span></li><li><span> </span></li><li class="alt"><span><span class="preprocessor"># 检查是否有参数传入</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">if</span><span> [ </span><span class="string">&quot;$#&quot;</span><span> -eq 0 ]; then&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;echo <span class="string">&quot;[ERROR] No files to delete! At least one parameter is required! &quot;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;exit 1&nbsp;&nbsp;</span></li><li class="alt"><span>fi&nbsp;&nbsp;</span></li><li><span><span class="preprocessor"> </span> </span></li><li class="alt"><span><span class="preprocessor"># 打印脚本名称</span><span>&nbsp;&nbsp;</span></span></li><li><span>echo <span class="string">&quot;Script Name: $0&quot;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="preprocessor"> </span> </span></li><li><span><span class="preprocessor"># 打印脚本所在的目录</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>echo <span class="string">&quot;Script Directory: $(dirname $0)&quot;</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="preprocessor"> </span> </span></li><li class="alt"><span><span class="preprocessor"># 打印当前工作目录</span><span>&nbsp;&nbsp;</span></span></li><li><span>echo <span class="string">&quot;Working Directory: $PWD&quot;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span> </span></li><li><span><span class="preprocessor"># 进入当前工作目录</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>cd $PWD&nbsp;&nbsp;</span></li><li><span>echo <span class="string">&quot;==================================================&quot;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span> </span></li><li><span> </span></li><li class="alt"><span><span class="preprocessor"># 循环遍历所有参数并删除文件</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">for</span><span> file </span><span class="keyword">in</span><span> </span><span class="string">&quot;$@&quot;</span><span>; </span><span class="keyword">do</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span> [ -f </span><span class="string">&quot;$file&quot;</span><span> ]; then&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm <span class="string">&quot;$file&quot;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo <span class="string">&quot;Deleted file ==&gt; ./$file&quot;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;elif [ -d <span class="string">&quot;$file&quot;</span><span> ]; then&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm -rf <span class="string">&quot;$file&quot;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo <span class="string">&quot;Deleted directory ==&gt; ./$file&quot;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo <span class="string">&quot;File or directory does not exist: $file&quot;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;&nbsp;</span></li><li><span>done&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>echo <span class="string">&quot;==================================================&quot;</span><span>&nbsp;&nbsp;</span></span></li></ol></div><p>&nbsp;</p>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s/331/</link>
<title><![CDATA[发布专属环境SHELL脚本]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Fri, 13 Oct 2023 09:06:16 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s/331/</guid> 
<description>
<![CDATA[ 
	<div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="preprocessor">#ifconfig</span><span>&nbsp;&nbsp;</span></span></li><li><span>echo $projectPath&nbsp;&nbsp;</span></li><li class="alt"><span>echo $developer&nbsp;&nbsp;</span></li><li><span>echo $rebuildBranch&nbsp;&nbsp;</span></li><li class="alt"><span> </span></li><li><span><span class="preprocessor">### 获取最后一层的项目名称</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>las_dir=$(basename <span class="string">&quot;$projectPath&quot;</span><span>)&nbsp;&nbsp;</span></span></li><li><span><span class="preprocessor">### 提取上一层目录的全路径</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>cur_dir=$(dirname $projectPath)&nbsp;&nbsp;</span></li><li><span><span class="preprocessor">### 获取业务线的名称第二层</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>pat_dir=$(basename <span class="string">&quot;$cur_dir&quot;</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>echo $las_dir&nbsp;&nbsp;</span></li><li><span>echo $cur_dir&nbsp;&nbsp;</span></li><li class="alt"><span>echo $pat_dir&nbsp;&nbsp;</span></li><li><span> </span></li><li class="alt"><span> </span></li><li><span><span class="preprocessor">### 通用前端发布脚本( 从本地同步来取 dist.tar.gz 文件包 )&nbsp;&nbsp;###</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>wwwroot=/data/apps/nginx/htdocs/<span class="keyword">public</span><span>/frontend$projectPath &amp;&amp;&nbsp;&nbsp;</span></span></li><li><span>cd $wwwroot &amp;&amp; pwd &amp;&amp; git fetch &amp;&amp; git checkout dev-$developer &amp;&amp;&nbsp;&nbsp;</span></li><li class="alt"><span>git pull origin dev-$developer &amp;&amp;&nbsp;&nbsp;</span></li><li><span>bash /sh/downdist.sh /data/apps/nginx/htdocs/<span class="keyword">public</span><span>/frontend$projectPath/upload/dynamicAssets.json /data/apps/nginx/htdocs/</span><span class="keyword">public</span><span>/tarfile/XXX/$developer$projectPath http:</span><span class="comment">//dl.ktm1234.com/XXX/$developer$projectPath</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span> </span></li><li><span> </span></li><li class="alt"><span> </span></li><li><span> </span></li><li class="alt"><span> </span></li><li><span> </span></li><li class="alt"><span> </span></li><li><span> </span></li><li class="alt"><span><span class="preprocessor">### 通用前端发布脚本( 从本地同步来取 dist.tar.gz 文件包 )&nbsp;&nbsp;###</span><span>&nbsp;&nbsp;</span></span></li><li><span>wwwroot=/data/apps/nginx/htdocs/<span class="keyword">public</span><span>/frontend$projectPath &amp;&amp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>cd $wwwroot &amp;&amp; pwd&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">if</span><span> [[ $rebuildBranch == </span><span class="keyword">true</span><span> ]] ;then&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo <span class="string">'---- 全新构建分支 ------'</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;git checkout . &amp;&amp; git checkout master &amp;&amp;&nbsp;&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;git branch -D dev-$developer &amp;&amp; git fetch &amp;&amp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;git checkout -b dev-$developer origin/dev-$developer &amp;&amp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;bash /sh/downdist.sh /data/apps/nginx/htdocs/<span class="keyword">public</span><span>/frontend$projectPath/upload/dynamicAssets.json /data/apps/nginx/htdocs/</span><span class="keyword">public</span><span>/tarfile/XXX/$developer$projectPath http:</span><span class="comment">//dl.ktm1234.com/XXX/$developer$projectPath</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo <span class="string">'---- 更新新版本 ------'</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;git fetch &amp;&amp; git checkout dev-$developer &amp;&amp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;git checkout . &amp;&amp; git pull origin dev-$developer &amp;&amp;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;bash /sh/downdist.sh /data/apps/nginx/htdocs/<span class="keyword">public</span><span>/frontend$projectPath/upload/dynamicAssets.json /data/apps/nginx/htdocs/</span><span class="keyword">public</span><span>/tarfile/XXX/$developer$projectPath http:</span><span class="comment">//dl.ktm1234.com/XXX/$developer$projectPath</span><span>&nbsp;&nbsp;</span></span></li><li><span>fi&nbsp;&nbsp;</span></li></ol></div>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s/321/</link>
<title><![CDATA[shell(bash)替换字符串大全]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Wed, 16 Aug 2023 03:13:34 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s/321/</guid> 
<description>
<![CDATA[ 
	<h3 style="box-sizing: border-box; outline: 0px; padding: 0px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures;">1. 替换（只替换一个）</h3><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">用<code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">varrB=$&#123;varA/str1/str2&#125;</code></p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>$ var=</span><span class="string">&quot;AAAszip_BBB.zip&quot;</span><span>;var2=$&#123;var/zip/ZIP&#125;;echo $var2&#125;;&nbsp;&nbsp;</span></span></li><li><span>AAAsZIP_BBB.zip&nbsp;&nbsp;</span></li><li class="alt"><span>$ var=<span class="string">&quot;AAAszip_BBB.zip&quot;</span><span>;var2=$&#123;var/.zip/.ZIP&#125;;echo $var2;&nbsp;&nbsp;</span></span></li><li><span>AAAszip_BBB.ZIP&nbsp;&nbsp;</span></li></ol></div><h3 style="box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures;">2. 替换（替换所有）</h3><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">用<code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">varB=$&#123;varA//str1/str2&#125;</code></p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>$ var=</span><span class="string">&quot;AAAszip_BBB.zip&quot;</span><span>;var2=$&#123;var</span><span class="comment">//zip/ZIP&#125;;echo $var2;</span><span>&nbsp;&nbsp;</span></span></li><li><span>AAAsZIP_BBB.ZIP&nbsp;&nbsp;</span></li></ol></div><h3 style="box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures;">3. 替换（替换开头一个）</h3><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">用<code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">varB=$&#123;varA/#str1/str2&#125;</code></p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>$ var=</span><span class="string">&quot;.zipAAAszip_BBB.zip_CCC&quot;</span><span>;var2=$&#123;var/#.zip/.ZIP&#125;;echo $var2;&nbsp;&nbsp;</span></span></li><li><span>.ZIPAAAszip_BBB.zip_CCC&nbsp;&nbsp;</span></li></ol></div><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">不存在<br style="box-sizing: border-box; outline: 0px; overflow-wrap: break-word;" /><code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">varB=$&#123;varA//#str1/str2&#125;</code></p><h3 style="box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures;"><a name="t4" style="box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); overflow-wrap: break-word;"></a>4. 替换（替换结尾一个）</h3><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">用<code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">varB=$&#123;varA/%str1/str2&#125;</code></p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>$ var=</span><span class="string">&quot;AAAszip_BBB.zip_CCC.zip&quot;</span><span>;var2=$&#123;var/%.zip/.ZIP&#125;;echo $var2;&nbsp;&nbsp;</span></span></li><li><span>AAAszip_BBB.zip_CCC.ZIP&nbsp;&nbsp;</span></li></ol></div><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">不存在<br style="box-sizing: border-box; outline: 0px; overflow-wrap: break-word;" /><code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">varB=$&#123;varA//%str1/str2&#125;</code></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">而且可以很好地匹配到&ldquo;.&rdquo;点号</p><h3 style="box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures;"><a name="t5" style="box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); overflow-wrap: break-word;"></a>5. 截取，删除右边，保留左边，从右起最短匹配</h3><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">用<code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">$varB=$&#123;varAa%&lt;pattern&gt;&#125;</code>，</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>$ a=</span><span class="string">&quot;aaa=bbb&quot;</span><span>;b=$&#123;a%=*&#125;;echo $b&nbsp;&nbsp;</span></span></li><li><span>aaa&nbsp;&nbsp;</span></li><li class="alt"><span>$ a=<span class="string">&quot;http://localhost:3000/china/shanghai.html&quot;</span><span>;b=$&#123;a%/*&#125;;echo $b&nbsp;&nbsp;</span></span></li><li><span>http:<span class="comment">//localhost:3000/china</span><span>&nbsp;&nbsp;</span></span></li></ol></div><h3 style="box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures;">6. 截取，删除右边，保留左边，从右起最长匹配</h3><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">用<code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">$varb=$&#123;vara%%&lt;pattern&gt;&#125;</code>从右起最长匹配</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>$ a=</span><span class="string">&quot;http://localhost:3000/china/shanghai.html&quot;</span><span>;b=$&#123;a%%/*&#125;;echo $b&nbsp;&nbsp;</span></span></li><li><span>http:&nbsp;&nbsp;</span></li></ol></div><h3 style="box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures;">7. 截取，删除左边，保留右边，从左起最短匹配</h3><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">用<code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">$varb=$&#123;vara#&lt;pattern&gt;&#125;</code></p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>$ a=</span><span class="string">&quot;aaa=bbb&quot;</span><span>;b=$&#123;a#*=&#125;;echo $b&nbsp;&nbsp;</span></span></li><li><span>bbb&nbsp;&nbsp;</span></li><li class="alt"><span>$ a=<span class="string">&quot;http://localhost:3000/china/shanghai.html&quot;</span><span>;b=$&#123;a#*/&#125;;echo $b&nbsp;&nbsp;</span></span></li><li><span>/localhost:3000/china/shanghai.html&nbsp;&nbsp;</span></li></ol></div><h3 style="box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures;">8. 截取，删除左边，保留右边，从左起最长匹配</h3><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-variant-ligatures: no-common-ligatures;">用<code style="box-sizing: border-box; outline: 0px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; overflow-wrap: break-word;">$varb=$&#123;vara##&lt;pattern&gt;&#125;</code>从左起最长匹配</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>$ a=</span><span class="string">&quot;http://localhost:3000/china/shanghai.html&quot;</span><span>;b=$&#123;a##*/&#125;;echo $b&nbsp;&nbsp;</span></span></li><li><span>shanghai.html&nbsp;&nbsp;</span></li></ol></div>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s/320/</link>
<title><![CDATA[SHELL替换字符串内容]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Fri, 11 Aug 2023 09:22:20 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s/320/</guid> 
<description>
<![CDATA[ 
	<div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="comment">//http://dl.ktm1234.com/injured/work-litigation/</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="comment">//http://dl.ktm1234.com/XXX/jiaye/injured/work-litigation/</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>var=<span class="string">&quot;http://dl.ktm1234.com/injured/work-litigation/&quot;</span><span>;var2=$&#123;var//com/com&#92;/XXX&#92;/jiaye&#125;;echo $var2;&nbsp;&nbsp;</span></span></li></ol></div><p>结果：http://dl.ktm1234.com/XXX/jiaye/injured/work-litigation/</p>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s/317/</link>
<title><![CDATA[Linux shell命令 批量删除子目录下的文件，保留指定数量的最新文件]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Wed, 26 Jul 2023 08:26:08 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s/317/</guid> 
<description>
<![CDATA[ 
	<div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="preprocessor">#!/bin/bash</span><span>&nbsp;&nbsp;</span></span></li><li><span> </span></li><li class="alt"><span><span class="preprocessor">#保留文件数</span><span>&nbsp;&nbsp;</span></span></li><li><span>ReservedNum=2&nbsp;&nbsp;</span></li><li class="alt"><span><span class="preprocessor">#要删除文件的，父级目录</span><span>&nbsp;&nbsp;</span></span></li><li><span>FileDir=/usr/docker/springCloud/project/&nbsp;&nbsp;</span></li><li class="alt"><span> </span></li><li><span><span class="preprocessor">#循环子目录列表</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">for</span><span> element </span><span class="keyword">in</span><span> `ls $FileDir`&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">do</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;# 拼接成完成目录 （父目录路径/子目录名）</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;dir_or_file=$FileDir$element&nbsp;&nbsp;</span></li><li class="alt"><span><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;# 获取子目录下的指定文件格式的总数量</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;FileNum=$(ls -l $dir_or_file &#124; grep <span class="string">'keda-'</span><span> &#124;wc -l)&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;# 输出 删除前的 指定格式的文件数量</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&nbsp;$element <span class="string">&quot;jar num:&quot;</span><span> $FileNum&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;# 如果 数量大于保留数量，那就循环删除 文件</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>(( $FileNum &gt; $ReservedNum))&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">do</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OldFile=$(ls -rt $dir_or_file &#124; grep <span class="string">'keda-'</span><span>&#124; head -1)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo&nbsp;&nbsp;$element <span class="string">&quot;Delete jar:&quot;</span><span>$OldFile&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm -rf $dir_or_file/$OldFile&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let <span class="string">&quot;FileNum--&quot;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;done&nbsp;&nbsp;</span></li><li class="alt"><span>done&nbsp;&nbsp;</span></li><li><span> </span></li><li class="alt"><span><span class="preprocessor"># 删除完后，再循环输出一下 每个子目录下的文件数量</span><span>&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">for</span><span> element </span><span class="keyword">in</span><span> `ls $FileDir`&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">do</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;dir_or_file=$FileDir$element&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;FileNum=$(ls -l $dir_or_file &#124; grep <span class="string">'keda-'</span><span> &#124;wc -l)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&nbsp;$element <span class="string">&quot;jar num:&quot;</span><span> $FileNum&nbsp;&nbsp;</span></span></li><li class="alt"><span>done&nbsp;&nbsp;</span></li></ol></div>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/shell/</link>
<title><![CDATA[SHELL命令记录]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Sat, 03 Jun 2023 03:43:05 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/shell/</guid> 
<description>
<![CDATA[ 
	<p>SHELL 获取目录</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="preprocessor">###&nbsp;提取目录中的名称</span><span>&nbsp;&nbsp;</span></span></li><li><span>las_dir=$(basename&nbsp;<span class="string">&quot;$PWD&quot;</span><span>)&nbsp;&nbsp;</span></span></li><li class="alt"><span>cur_dir=$(dirname&nbsp;$(pwd))&nbsp;&nbsp;</span></li><li><span>lat_dir=$(basename&nbsp;<span class="string">&quot;$cur_dir&quot;</span><span>)&nbsp;&nbsp;</span></span></li></ol></div><p>&nbsp;</p>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s/313/</link>
<title><![CDATA[docker容器备份成镜像结合定时器自动执行]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Sat, 03 Jun 2023 03:34:38 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s/313/</guid> 
<description>
<![CDATA[ 
	<div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="preprocessor">###&nbsp;把docker容器提交成新的镜像</span><span>&nbsp;&nbsp;</span></span></li><li><span>cd&nbsp;/data/backup&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span><span class="preprocessor">###&nbsp;备份Jenkins容器</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>docker&nbsp;commit&nbsp;-a&nbsp;<span class="string">&quot;Jesse&nbsp;Liu&quot;</span><span>&nbsp;-m&nbsp;</span><span class="string">&quot;v20230602&quot;</span><span>&nbsp;jenkins-rsync-v2&nbsp;jenkins-rsync:v2b&nbsp;&nbsp;</span></span></li><li><span>docker&nbsp;save&nbsp;-o&nbsp;jenkins-rsync-v2b.tar&nbsp;jenkins-rsync:v2b&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span><span class="preprocessor">###&nbsp;备份Nginx容器</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>docker&nbsp;commit&nbsp;-a&nbsp;<span class="string">&quot;Jesse&nbsp;Liu&quot;</span><span>&nbsp;-m&nbsp;</span><span class="string">&quot;v20230602&quot;</span><span>&nbsp;nginx-nodejs-redis-v2&nbsp;nginx-nodejs-redis:v2b&nbsp;&nbsp;</span></span></li><li><span>docker&nbsp;save&nbsp;-o&nbsp;nginx-nodejs-redis-v2b.tar&nbsp;nginx-nodejs-redis:v2b&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>docker&nbsp;commit&nbsp;-a&nbsp;<span class="string">&quot;Jesse&nbsp;Liu&quot;</span><span>&nbsp;-m&nbsp;</span><span class="string">&quot;v20230602&quot;</span><span>&nbsp;jenkins-rsync-v2&nbsp;jenkins-rsync:v2b&nbsp;&nbsp;</span></span></li><li><span>docker&nbsp;save&nbsp;-o&nbsp;jenkins-rsync-v2b.tar&nbsp;jenkins-rsync:v2b&nbsp;&nbsp;</span></li><li class="alt"><span>docker&nbsp;commit&nbsp;-a&nbsp;<span class="string">&quot;Jesse&nbsp;Liu&quot;</span><span>&nbsp;-m&nbsp;</span><span class="string">&quot;v20230602&quot;</span><span>&nbsp;nginx-nodejs-redis-v2&nbsp;nginx-nodejs-redis:v2b&nbsp;&nbsp;</span></span></li><li><span>docker&nbsp;save&nbsp;-o&nbsp;nginx-nodejs-redis-v2b.tar&nbsp;nginx-nodejs-redis:v2b&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span><span class="preprocessor">###&nbsp;SHELL脚本依次压缩导出tgz文件</span><span>&nbsp;&nbsp;</span></span></li><li><span>cd&nbsp;/data/backup&nbsp;&amp;&amp;&nbsp;&nbsp;</span></li><li class="alt"><span>rm&nbsp;-rf&nbsp;jenkins-rsync-v2b.tgz&nbsp;&amp;&amp;&nbsp;&nbsp;</span></li><li><span>rm&nbsp;-rf&nbsp;nginx-nodejs-redis-v2b.tgz&nbsp;&amp;&amp;&nbsp;&nbsp;</span></li><li class="alt"><span>docker&nbsp;rmi&nbsp;jenkins-rsync:v2b&nbsp;&amp;&amp;&nbsp;&nbsp;</span></li><li><span>docker&nbsp;rmi&nbsp;nginx-nodejs-redis:v2b&nbsp;&amp;&amp;&nbsp;&nbsp;</span></li><li class="alt"><span>docker&nbsp;commit&nbsp;-a&nbsp;<span class="string">&quot;Jesse&nbsp;Liu&quot;</span><span>&nbsp;-m&nbsp;</span><span class="string">&quot;v20230602&quot;</span><span>&nbsp;jenkins-rsync-v2&nbsp;jenkins-rsync:v2b&nbsp;&amp;&amp;&nbsp;&nbsp;</span></span></li><li><span>docker&nbsp;image&nbsp;save&nbsp;jenkins-rsync:v2b&nbsp;&gt;&nbsp;jenkins-rsync-v2b.tgz&nbsp;&amp;&amp;&nbsp;&nbsp;</span></li><li class="alt"><span>docker&nbsp;commit&nbsp;-a&nbsp;<span class="string">&quot;Jesse&nbsp;Liu&quot;</span><span>&nbsp;-m&nbsp;</span><span class="string">&quot;v20230602&quot;</span><span>&nbsp;nginx-nodejs-redis-v2&nbsp;nginx-nodejs-redis:v2b&nbsp;&amp;&amp;&nbsp;&nbsp;</span></span></li><li><span>docker&nbsp;image&nbsp;save&nbsp;nginx-nodejs-redis:v2b&nbsp;&gt;&nbsp;nginx-nodejs-redis-v2b.tgz&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span><span class="preprocessor">###&nbsp;SHELL脚本依次解压导入docker镜像</span><span>&nbsp;&nbsp;</span></span></li><li><span>docker&nbsp;image&nbsp;load&nbsp;-i&nbsp;jenkins-rsync-v2b.tgz&nbsp;&nbsp;</span></li><li class="alt"><span>docker&nbsp;image&nbsp;load&nbsp;-i&nbsp;nginx-nodejs-redis-v2b.tgz&nbsp;&nbsp;</span></li><li><span>&nbsp;</span></li><li class="alt"><span><span class="preprocessor">###&nbsp;编辑和查看定时器配置</span><span>&nbsp;&nbsp;</span></span></li><li><span>crontab&nbsp;-e&nbsp;&nbsp;</span></li><li class="alt"><span>crontab&nbsp;-l&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>每星期六的晚上11&nbsp;:&nbsp;00&nbsp;pm重启smb&nbsp;&nbsp;</span></li><li><span>0&nbsp;23&nbsp;*&nbsp;*&nbsp;6&nbsp;/etc/init.d/smb&nbsp;restart&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>每天的0:30重启smb&nbsp;&nbsp;</span></li><li class="alt"><span>30&nbsp;0&nbsp;*&nbsp;*&nbsp;*&nbsp;/etc/init.d/smb&nbsp;restart&nbsp;&nbsp;</span></li><li><span>30&nbsp;0&nbsp;*&nbsp;*&nbsp;*&nbsp;root&nbsp;/sh/docker-backup.sh&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>一分钟执行一次&nbsp;&nbsp;</span></li><li class="alt"><span>*/1&nbsp;*&nbsp;*&nbsp;*&nbsp;*&nbsp;root&nbsp;/sh/test.sh&nbsp;&nbsp;</span></li><li><span>*/1&nbsp;*&nbsp;*&nbsp;*&nbsp;*&nbsp;root&nbsp;/sh/test.sh&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;</span></li><li><span><span class="preprocessor">###&nbsp;重启定时器服务</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>chmod&nbsp;755&nbsp;/sh/test.sh&nbsp;&nbsp;</span></li><li><span>chmod&nbsp;755&nbsp;/sh/docker-backup.sh&nbsp;&nbsp;</span></li><li class="alt"><span>chmod&nbsp;755&nbsp;/sh/scp-docker.sh&nbsp;&nbsp;</span></li><li><span>systemctl&nbsp;restart&nbsp;crond&nbsp;&nbsp;</span></li></ol></div><div>&nbsp;</div>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s/312/</link>
<title><![CDATA[SSH密钥登录]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[Linux/Unix]]></category>
<pubDate>Sat, 03 Jun 2023 03:30:55 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s/312/</guid> 
<description>
<![CDATA[ 
	<p>&nbsp;### 本地机器生成密钥</p><div>ssh-keygen -t rsa</div><div>&nbsp;</div><div>[root@localhost ~]# ssh-keygen -t rsa</div><div>Generating public/private rsa key pair.</div><div>Enter file in which to save the key (/root/.ssh/id_rsa):&nbsp;</div><div>Created directory '/root/.ssh'.</div><div>Enter passphrase (empty for no passphrase):&nbsp;</div><div>Enter same passphrase again:&nbsp;</div><div>Your identification has been saved in /root/.ssh/id_rsa</div><div>Your public key has been saved in /root/.ssh/id_rsa.pub</div><div>The key fingerprint is:</div><div>SHA256:PeMmQH0e2HL+jxZjYJ6/8Hej+ANJ06gm+sUIhzCLNho root@localhost</div><div>The key's randomart image is:</div><div>+---[RSA 3072]----+</div><div>&#124;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#124;</div><div>&#124;&nbsp; &nbsp; &nbsp; &nbsp;. o&nbsp; &nbsp; &nbsp; &nbsp;&#124;</div><div>&#124;&nbsp; &nbsp;o&nbsp; . + = o&nbsp; &nbsp; &#124;</div><div>&#124;&nbsp; . +..&nbsp; Bo= .&nbsp; &nbsp;&#124;</div><div>&#124;E+ . o..SoOoo&nbsp; &nbsp; &#124;</div><div>&#124;o..&nbsp; &nbsp;ooo+o*+&nbsp; &nbsp; &#124;</div><div>&#124;.&nbsp; &nbsp; &nbsp;..+o+ooo&nbsp; &nbsp;&#124;</div><div>&#124;&nbsp; &nbsp; &nbsp;.&nbsp; .o o++...&#124;</div><div>&#124;&nbsp; &nbsp; &nbsp; ..&nbsp; &nbsp;o==+..&#124;</div><div>+----[SHA256]-----+</div><div>[root@localhost ~]#&nbsp;</div><div>&nbsp;</div><div>进入主机A ~/.ssh/ 目录，会发现生成了一对密钥</div><div>Your identification has been saved in /home/test/.ssh/id_rsa.</div><div>Your public key has been saved in /home/test/.ssh/id_rsa.pub.</div><div>&nbsp;</div><div>### A将公钥文件中的内容复制到 ==&gt; 远程服务器端B</div><div>~/.ssh/id_rsa.pub</div><div>~/.ssh/authorized_keys</div><div>&nbsp;</div><div>## 步骤如下</div><div>[root@localhost .ssh]# pwd</div><div>/root/.ssh</div><div>[root@localhost .ssh]# ll</div><div>total 12</div><div>-rw------- 1 root root 891 Jun&nbsp; 1 14:52 id_rsa</div><div>-rw-r--r-- 1 root root 228 Jun&nbsp; 1 14:52 id_rsa.pub</div><div>-rw-r--r-- 1 root root 172 Jun&nbsp; 1 22:28 known_hosts</div><div>[root@localhost .ssh]# vi /root/.ssh/authorized_keys</div><div>&nbsp;</div><div>### 粘贴id_rsa.pub内的字符串到这个文件,对于OpenSSH来说，我们需要将公钥加入到~/.ssh/authorized_keys中。每个公钥一行，千万注意不要换行，否则可能不能正常工作。</div><div>### 修改文件权限</div><div>chmod 600 /root/.ssh/authorized_keys</div><div>&nbsp;</div><div>&nbsp;</div><div>### 修改/etc/ssh/sshd_config 文件</div><div>修改/etc/ssh/sshd_config 文件，将RSAAuthentication 和 PubkeyAuthentication 后面的值都改成yes</div><div>将PasswordAuthentication yes 修改成 PasswordAuthentication no</div><div>&nbsp;</div><div>### 重启SSHD</div><div>/etc/init.d/sshd restart</div>
]]>
</description>
</item>
</channel>
</rss>