linux-tutorial/linux/soft/nexus-ops.html

168 lines
49 KiB
HTML
Raw Normal View History

2021-05-13 17:44:54 +08:00
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Nexus 运维 | LINUX-TUTORIAL</title>
<meta name="generator" content="VuePress 1.8.2">
<link rel="icon" href="/linux-tutorial/favicon.ico">
<meta name="description" content="数据库教程">
<link rel="preload" href="/linux-tutorial/assets/css/0.styles.45d9d031.css" as="style"><link rel="preload" href="/linux-tutorial/assets/js/app.79a38eea.js" as="script"><link rel="preload" href="/linux-tutorial/assets/js/4.fb6e0f89.js" as="script"><link rel="preload" href="/linux-tutorial/assets/js/63.9cbf9f2b.js" as="script"><link rel="preload" href="/linux-tutorial/assets/js/5.cb43ecfb.js" as="script"><link rel="prefetch" href="/linux-tutorial/assets/js/10.7933187b.js"><link rel="prefetch" href="/linux-tutorial/assets/js/11.b9b41530.js"><link rel="prefetch" href="/linux-tutorial/assets/js/12.70a5dba8.js"><link rel="prefetch" href="/linux-tutorial/assets/js/13.857dcc43.js"><link rel="prefetch" href="/linux-tutorial/assets/js/14.5a603a55.js"><link rel="prefetch" href="/linux-tutorial/assets/js/15.d217acb7.js"><link rel="prefetch" href="/linux-tutorial/assets/js/16.ad565eae.js"><link rel="prefetch" href="/linux-tutorial/assets/js/17.d43e9f56.js"><link rel="prefetch" href="/linux-tutorial/assets/js/18.aa00ff43.js"><link rel="prefetch" href="/linux-tutorial/assets/js/19.43ce44b3.js"><link rel="prefetch" href="/linux-tutorial/assets/js/20.5618e1ff.js"><link rel="prefetch" href="/linux-tutorial/assets/js/21.1c5a41d7.js"><link rel="prefetch" href="/linux-tutorial/assets/js/22.fbe9fdf1.js"><link rel="prefetch" href="/linux-tutorial/assets/js/23.a4fb0e74.js"><link rel="prefetch" href="/linux-tutorial/assets/js/24.e3a23b69.js"><link rel="prefetch" href="/linux-tutorial/assets/js/25.9896afe9.js"><link rel="prefetch" href="/linux-tutorial/assets/js/26.96164082.js"><link rel="prefetch" href="/linux-tutorial/assets/js/27.391033bb.js"><link rel="prefetch" href="/linux-tutorial/assets/js/28.703f74c2.js"><link rel="prefetch" href="/linux-tutorial/assets/js/29.02a952cb.js"><link rel="prefetch" href="/linux-tutorial/assets/js/30.7e13628f.js"><link rel="prefetch" href="/linux-tutorial/assets/js/31.c4652f75.js"><link rel="prefetch" href="/linux-tutorial/assets/js/32.05d2cbec.js"><link rel="prefetch" href="/linux-tutorial/assets/js/33.3b265df8.js"><link rel="prefetch" href="/linux-tutorial/assets/js/34.26330a03.js"><link rel="prefetch" href="/linux-tutorial/assets/js/35.417d706d.js"><link rel="prefetch" href="/linux-tutorial/assets/js/36.0ed775e0.js"><link rel="prefetch" href="/linux-tutorial/assets/js/37.34430c74.js"><link rel="prefetch" href="/linux-tutorial/assets/js/38.87d5e0ff.js"><link rel="prefetch" href="/linux-tutorial/assets/js/39.7b648b3e.js"><link rel="prefetch" href="/linux-tutorial/assets/js/40.3b7a219e.js"><link rel="prefetch" href="/linux-tutorial/assets/js/41.e727eee9.js"><link rel="prefetch" href="/linux-tutorial/assets/js/42.0134c187.js"><link rel="prefetch" href="/linux-tutorial/assets/js/43.175e982f.js"><link rel="prefetch" href="/linux-tutorial/assets/js/44.72d90888.js"><link rel="prefetch" href="/linux-tutorial/assets/js/45.d49955bd.js"><link rel="prefetch" href="/linux-tutorial/assets/js/46.a9c290ec.js"><link rel="prefetch" href="/linux-tutorial/assets/js/47.cc639f04.js"><link rel="prefetch" href="/linux-tutorial/assets/js/48.98c78321.js"><link rel="prefetch" href="/linux-tutorial/assets/js/49.a7c3afed.js"><link rel="prefetch" href="/linux-tutorial/assets/js/50.22d8c542.js"><link rel="prefetch" href="/linux-tutorial/assets/js/51.28055fcd.js"><link rel="prefetch" href="/linux-tutorial/assets/js/52.f8103df5.js"><link rel="prefetch" href="/linux-tutorial/assets/js/53.76541550.js"><link rel="prefetch" href="/linux-tutorial/assets/js/54.e78d2776.js"><link rel="prefetch" href="/linux-tutorial/assets/js/55.3ce3079c.js"><link rel="prefetch" href="/linux-tutorial/assets/js/56.832958c9.js"><link rel="prefetch" href="/linux-tutorial/assets/js/57.961ce896.js"><link rel="prefetch" href="/linux-tutorial/assets/js/58.6d6fbc82.js"><link rel="prefetch" href="/linux-tutorial/assets/js/59.d5e48112.js"><link rel="prefetch" href="/linux-tutorial/assets/js/6.c8f4721c.js"><link rel="prefetch" href="/linux-tutorial/assets/js/60.7927b23b.js"><link rel="prefetch" href="/linux-tutorial/assets/js/61.ee233f24.js"><link rel="prefetch" href="/l
<link rel="stylesheet" href="/linux-tutorial/assets/css/0.styles.45d9d031.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/linux-tutorial/" class="home-link router-link-active"><img src="images/dunwu-logo-100.png" alt="LINUX-TUTORIAL" class="logo"> <span class="site-name can-hide">LINUX-TUTORIAL</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/linux-tutorial/linux/cli/" class="nav-link">
Linux 命令
</a></div><div class="nav-item"><a href="/linux-tutorial/linux/ops/" class="nav-link">
Linux 运维
</a></div><div class="nav-item"><a href="/linux-tutorial/linux/soft/" class="nav-link router-link-active">
Linux 软件运维
</a></div><div class="nav-item"><a href="/linux-tutorial/docker/" class="nav-link">
Docker 教程
</a></div><div class="nav-item"><a href="https://github.com/dunwu/blog" target="_blank" rel="noopener noreferrer" class="nav-link external">
🎯 博客
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <a href="https://github.com/dunwu/linux-tutorial" target="_blank" rel="noopener noreferrer" class="repo-link">
Github
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/linux-tutorial/linux/cli/" class="nav-link">
Linux 命令
</a></div><div class="nav-item"><a href="/linux-tutorial/linux/ops/" class="nav-link">
Linux 运维
</a></div><div class="nav-item"><a href="/linux-tutorial/linux/soft/" class="nav-link router-link-active">
Linux 软件运维
</a></div><div class="nav-item"><a href="/linux-tutorial/docker/" class="nav-link">
Docker 教程
</a></div><div class="nav-item"><a href="https://github.com/dunwu/blog" target="_blank" rel="noopener noreferrer" class="nav-link external">
🎯 博客
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <a href="https://github.com/dunwu/linux-tutorial" target="_blank" rel="noopener noreferrer" class="repo-link">
Github
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>Nexus 运维</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/linux-tutorial/linux/soft/nexus-ops.html#一、nexus-安装" class="sidebar-link">一、Nexus 安装</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/linux-tutorial/linux/soft/nexus-ops.html#二、nexus-使用" class="sidebar-link">二、Nexus 使用</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#启动-停止-nexus" class="sidebar-link">启动/停止 Nexus</a></li><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#配置-maven-仓库" class="sidebar-link">配置 maven 仓库</a></li><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#配置-yum-仓库" class="sidebar-link">配置 yum 仓库</a></li><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#定时任务" class="sidebar-link">定时任务</a></li></ul></li><li><a href="/linux-tutorial/linux/soft/nexus-ops.html#三、开机自启动" class="sidebar-link">三、开机自启动</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/linux-tutorial/linux/soft/nexus-ops.html#四、nexus-和-maven" class="sidebar-link">四、Nexus 和 Maven</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#配置-settings-xml" class="sidebar-link">配置 settings.xml</a></li><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#配置-pom-xml" class="sidebar-link">配置 pom.xml</a></li><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#执行-maven-构建" class="sidebar-link">执行 maven 构建</a></li></ul></li><li><a href="/linux-tutorial/linux/soft/nexus-ops.html#五、备份和迁移" class="sidebar-link">五、备份和迁移</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#备份" class="sidebar-link">备份</a></li><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#迁移" class="sidebar-link">迁移</a></li></ul></li><li><a href="/linux-tutorial/linux/soft/nexus-ops.html#六、faq" class="sidebar-link">六、FAQ</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/linux-tutorial/linux/soft/nexus-ops.html#配置-install4j-java-home" class="sidebar-link">配置 INSTALL4JJAVAHOME</a></li></ul></li><li><a href="/linux-tutorial/linux/soft/nexus-ops.html#参考资料" class="sidebar-link">参考资料</a><ul class="sidebar-sub-headers"></ul></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="nexus-运维"><a href="#nexus-运维" class="header-anchor">#</a> Nexus 运维</h1> <blockquote><p>Nexus 是一个强大的 Maven 仓库管理器,可以用来搭建 Maven 私服。</p> <p>关键词maven, nexus</p> <p>部署环境:</p> <ul><li>Nexus 3.13.0</li> <li>JDK 1.8</li> <li>Maven 3.5.4</li></ul></blockquote> <h2 id="一、nexus-安装"><a href="#一、nexus-安装" class="header-anchor">#</a> 一、Nexus 安装</h2> <p>进入<a href="https://www.sonatype.com/download-oss-sonatype" target="_blank" rel="noopener noreferrer">官方下载地址<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height=
<span class="token function">wget</span> -O /opt/maven/nexus-unix.tar.gz http://download.sonatype.com/nexus/3/nexus-3.13.0-01-unix.tar.gz
</code></pre></div><ul><li>【解压】执行 <code>tar -zxf nexus-unix.tar.gz</code> 命令,会解压出两个目录:
<ul><li><code>nexus-&lt;version&gt;</code> - 程序目录。包含了 Nexus 运行所需要的文件。是 Nexus 运行必须的。
<ul><li><code>nexus-&lt;version&gt;/etc</code> - 配置目录。
<ul><li><code>nexus-&lt;version&gt;/etc/nexus.properties</code> - nexus 核心配置文件(默认 etc 目录下有 <code>nexus-default.properties</code>,可以基于此修改)。</li></ul></li></ul></li> <li><code>sonatype-work</code> - 仓库目录。包含了 Nexus 生成的配置文件、日志文件、仓库文件等。当我们需要备份 Nexus 的时候默认备份此目录即可。</li></ul></li> <li>[修改环境变量】执行 <code>vim /etc/profile</code>,在文件尾部添加以下内容:</li></ul> <div class="language- extra-class"><pre class="language-text"><code>NEXUS_HOME=/usr/program/nexus2.11.4
export NEXUS_HOME
</code></pre></div><p>刷新环境变量:<code>source /etc/profile</code></p> <ul><li>【检查安装是否成功】执行 <code>nexus -version</code> 查看是否安装成功。</li> <li>【防火墙】
<ul><li>iptabes
<ul><li>添加规则:<code>iptables -I INPUT -p tcp -m tcp --dport 8081 -j ACCEPT</code></li> <li>载入规则:<code>/etc/rc.d/init.d/iptables save</code></li> <li>重启 iptables<code>service iptables restart</code></li></ul></li> <li>firewalld
<ul><li>添加规则:<code>firewall-cmd --zone=public --add-port=8081/tcp --permanent</code></li> <li>载入规则:<code>firewall-cmd --reload</code></li></ul></li></ul></li></ul> <h2 id="二、nexus-使用"><a href="#二、nexus-使用" class="header-anchor">#</a> 二、Nexus 使用</h2> <h3 id="启动-停止-nexus"><a href="#启动-停止-nexus" class="header-anchor">#</a> 启动/停止 Nexus</h3> <p>进入 <code>nexus-3.13.0-01/bin</code> 目录,有一个可执行脚本 nexus。</p> <p>执行 <code>./nexus</code>,可以查看允许执行的参数,如下所示,含义可谓一目了然:</p> <div class="language-shell extra-class"><pre class="language-shell"><code>$ ./nexus
Usage: ./nexus <span class="token punctuation">{</span>start<span class="token operator">|</span>stop<span class="token operator">|</span>run<span class="token operator">|</span>run-redirect<span class="token operator">|</span>status<span class="token operator">|</span>restart<span class="token operator">|</span>force-reload<span class="token punctuation">}</span>
</code></pre></div><ul><li>启动 nexus - <code>./nexus start</code></li> <li>停止 nexus - <code>./nexus stop</code></li> <li>重启 nexus - <code>./nexus restart</code></li></ul> <p>Nexus 的默认启动端口为 <code>8081</code>,启动成功后,在浏览器中访问 <code>http://&lt;ip&gt;:8081</code>,欢迎页面如下图所示:</p> <p><img src="https://raw.githubusercontent.com/dunwu/images/dev/snap/20181127203131.png" alt="img"></p> <p>点击右上角 Sign in 登录,默认用户名/密码为:<code>admin/admin123</code></p> <h3 id="配置-maven-仓库"><a href="#配置-maven-仓库" class="header-anchor">#</a> 配置 maven 仓库</h3> <p>Nexus 中的仓库有以下类型:</p> <ul><li><code>hosted</code> - 宿主仓库。主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件;</li> <li><code>proxy</code> - 代理仓库。代理公共的远程仓库;</li> <li><code>virtual</code> - 虚拟仓库。用于适配 Maven 1</li> <li><code>group</code> - 仓库组。Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。</li></ul> <p><img src="https://raw.githubusercontent.com/dunwu/images/dev/cs/java/javalib/maven/nexus.png" alt="img"></p> <p>建议配置如下:</p> <ul><li><strong>hosted 仓库</strong> <ul><li><strong>maven-releases</strong> - 存储私有仓库的发行版 jar 包</li> <li><strong>maven-snapshots</strong> - 存储私有仓库的快照版(调试版本) jar 包</li></ul></li> <li><strong>proxy 仓库</strong> <ul><li><strong>maven-central-maven</strong> - 中央库(如果没有配置 mirror默认就从这里下载 jar 包),从 https://repo1.maven.org/maven2/ 获取资源</li> <li><strong>maven-aliyun</strong> - 国内 maven 仓库,提高访问速度。</li></ul></li> <li><strong>group 仓库</strong> <ul><li><strong>maven-public</strong> - 私有仓库的公共空间,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置 settings.xml 中使用。</li></ul></li></ul> <p><img src="https://raw.githubusercontent.com/dunwu/images/dev/snap/20181127203156.png" alt="img"></p> <blockquote><p>其中:</p> <p><strong>maven-central</strong><strong>maven-public</strong><strong>maven-release</strong><strong>maven-snapshot</strong> 仓库是默认配置好的 maven 仓库。maven-central 配置的是 <code>https://repo1.maven.org/maven2/</code> 的代理仓库,即 maven 中央仓库地址。</p></blockquote> <p>参考配置如下:</p> <p><img src="https://raw.githubusercontent.com/dunwu/images/dev/snap/20200403165258.png" alt="img"></p> <p>推荐配置的代理仓库:</p> <ul><li>OSS SNAPSHOT 仓库:<code>http://oss.jfrog.org/artifactory/oss-snapshot-local/</code></li> <li>aliyun 仓库(受限于国内网络,可以通过它来加速):<code>http://maven.aliyun.com/nexus/content/groups/public/</code></li></ul> <h3 id="配置-yum-仓库"><a href="#配置-yum-仓库" class="header-anchor">#</a> 配置 yum 仓库</h3> <p><img src="https://raw.githubusercontent.com/dunwu/images/dev/snap/20200403201609.png" alt="img"></p> <p>推荐配置的 yum 代理仓库:</p> <ul><li>aliyun yum 仓库:<code>http://mirrors.aliyun.com/centos</code></li></ul> <p>配置本地 yum</p> <p>1新增 nexus.repo 文件,内容如下:</p> <div class="language-ini extra-class"><pre class="language-ini"><code><span class="token selector">[base]</span>
<span class="token constant">name</span><span class="token attr-value"><span class="token punctuation">=</span>Nexus</span>
<span class="token constant">baseurl</span><span class="token attr-value"><span class="token punctuation">=</span> http://&lt;nexus host&gt;:&lt;nexus port&gt;/repository/yum-aliyun/$releasever/os/$basearch/</span>
<span class="token constant">enabled</span><span class="token attr-value"><span class="token punctuation">=</span>1</span>
<span class="token constant">gpgcheck</span><span class="token attr-value"><span class="token punctuation">=</span>0</span>
<span class="token constant">priority</span><span class="token attr-value"><span class="token punctuation">=</span>1</span>
</code></pre></div><p>2更新 yum 缓存,执行以下命令:</p> <div class="language-shell extra-class"><pre class="language-shell"><code>yum clean all
yum makecache
</code></pre></div><h3 id="定时任务"><a href="#定时任务" class="header-anchor">#</a> 定时任务</h3> <p>随着 jar 包越来越多,尤其是 SNAPSHOT 包由于不限制重复上传,尤其容易导致磁盘空间膨胀。所以,需要定期进行清理或修复。</p> <p>Nexus 内置了多个定时任务,可以执行清理。</p> <p>【示例】定期清理 SNAPSHOST</p> <p><img src="https://raw.githubusercontent.com/dunwu/images/dev/snap/20200403173030.png" alt="img"></p> <h2 id="三、开机自启动"><a href="#三、开机自启动" class="header-anchor">#</a> 三、开机自启动</h2> <p>作为常用服务,有必要将 Nexus 设为 <code>systemd</code> 服务,以便在断电恢复后自动重启。</p> <p>配置方法如下:</p> <p><code>/lib/systemd/system</code> 目录下创建 <code>nexus.service</code> 文件,内容如下:</p> <div class="language-ini extra-class"><pre class="language-ini"><code><span class="token selector">[Unit]</span>
<span class="token constant">Description</span><span class="token attr-value"><span class="token punctuation">=</span>nexus</span>
<span class="token constant">After</span><span class="token attr-value"><span class="token punctuation">=</span>network.target</span>
<span class="token selector">[Service]</span>
<span class="token constant">Type</span><span class="token attr-value"><span class="token punctuation">=</span>forking</span>
<span class="token constant">LimitNOFILE</span><span class="token attr-value"><span class="token punctuation">=</span>65536 #警告处理</span>
<span class="token constant">Environment</span><span class="token attr-value"><span class="token punctuation">=</span>RUN_AS_USER=root</span>
<span class="token constant">ExecStart</span><span class="token attr-value"><span class="token punctuation">=</span>/opt/maven/nexus-3.13.0-01/bin/nexus start</span>
<span class="token constant">ExecReload</span><span class="token attr-value"><span class="token punctuation">=</span>/opt/maven/nexus-3.13.0-01/bin/nexus restart</span>
<span class="token constant">ExecStop</span><span class="token attr-value"><span class="token punctuation">=</span>/opt/maven/nexus-3.13.0-01/bin/nexus stop</span>
<span class="token constant">Restart</span><span class="token attr-value"><span class="token punctuation">=</span>on-failure</span>
<span class="token constant">PrivateTmp</span><span class="token attr-value"><span class="token punctuation">=</span>true</span>
<span class="token selector">[Install]</span>
<span class="token constant">WantedBy</span><span class="token attr-value"><span class="token punctuation">=</span>multi-user.target</span>
</code></pre></div><p>保存后,可以使用以下命令应用 nexus 服务:</p> <ul><li><code>systemctl enable nexus</code> - 启动 nexus 开机启动</li> <li><code>systemctl disable nexus</code> - 关闭 nexus 开机启动</li> <li><code>systemctl start nexus</code> - 启动 nexus 服务</li> <li><code>systemctl stop nexus</code> - 停止 nexus 服务</li> <li><code>systemctl restart nexus</code> - 重启 nexus 服务</li></ul> <blockquote><p>执行 <code>systemctl enable nexus</code> 后,再执行 reboot 重启,重连后,可以检测是否成功开机自动重启。</p></blockquote> <h2 id="四、nexus-和-maven"><a href="#四、nexus-和-maven" class="header-anchor">#</a> 四、Nexus 和 Maven</h2> <p>Nexus 是 maven 私服。现在Nexus 服务器已经部署好了,如何配合 maven 使用呢?</p> <h3 id="配置-settings-xml"><a href="#配置-settings-xml" class="header-anchor">#</a> 配置 settings.xml</h3> <p>如果要使用 Nexus还必须在 <code>settings.xml</code><code>pom.xml</code> 中配置认证信息。</p> <p>一份完整的 <code>settings.xml</code></p> <div class="language-xml extra-class"><pre class="language-xml"><code><span class="token prolog">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>settings</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>http://maven.apache.org/SETTINGS/1.0.0<span class="token punctuation">&quot;</span></span>
<span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">&quot;</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>pluginGroups</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>pluginGroup</span><span class="token punctuation">&gt;</span></span>org.sonatype.plugins<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>pluginGroup</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>pluginGroups</span><span class="token punctuation">&gt;</span></span>
<span class="token comment">&lt;!--设置本地 maven 仓库--&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>localRepository</span><span class="token punctuation">&gt;</span></span>D:\Tools\maven\.m2<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>localRepository</span><span class="token punctuation">&gt;</span></span>
<span class="token comment">&lt;!--Maven 私服账号信息--&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>servers</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>server</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>releases<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>username</span><span class="token punctuation">&gt;</span></span>admin<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>username</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>password</span><span class="token punctuation">&gt;</span></span>admin123<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>password</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>server</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>server</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>snapshots<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>username</span><span class="token punctuation">&gt;</span></span>admin<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>username</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>password</span><span class="token punctuation">&gt;</span></span>admin123<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>password</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>server</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>servers</span><span class="token punctuation">&gt;</span></span>
<span class="token comment">&lt;!--Maven 镜像地址--&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mirrors</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mirror</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>public<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>mirrorOf</span><span class="token punctuation">&gt;</span></span>*<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mirrorOf</span><span class="token punctuation">&gt;</span></span>
<span class="token comment">&lt;!--Nexus 服务器地址--&gt;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url</span><span class="token punctuation">&gt;</span></span>http://10.255.255.224:8081/repository/maven-public/<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mirror</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>mirrors</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>profiles</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>profile</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>zp<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>repositories</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>repository</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>central<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url</span><span class="token punctuation">&gt;</span></span>http://central<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>releases</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>enabled</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>enabled</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>releases</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>snapshots</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>enabled</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>enabled</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>snapshots</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>repository</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>repositories</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>pluginRepositories</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>pluginRepository</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>central<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url</span><span class="token punctuation">&gt;</span></span>http://central<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>releases</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>enabled</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>enabled</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>releases</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>snapshots</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>enabled</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>enabled</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>updatePolicy</span><span class="token punctuation">&gt;</span></span>always<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>updatePolicy</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>snapshots</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>pluginRepository</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>pluginRepositories</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>profile</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>profiles</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>activeProfiles</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>activeProfile</span><span class="token punctuation">&gt;</span></span>zp<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>activeProfile</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>activeProfiles</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>settings</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><h3 id="配置-pom-xml"><a href="#配置-pom-xml" class="header-anchor">#</a> 配置 pom.xml</h3> <p><code>pom.xml</code> 中添加如下配置,这样就可以执行 <code>mvn deploy</code>,将本地构建的 jar、war 等包发布到私服上。</p> <div class="language-xml extra-class"><pre class="language-xml"><code> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>distributionManagement</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>repository</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>releases<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>name</span><span class="token punctuation">&gt;</span></span>Releases<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>name</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url</span><span class="token punctuation">&gt;</span></span>http://10.255.255.224:8081/repository/maven-releases<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>repository</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>snapshotRepository</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>id</span><span class="token punctuation">&gt;</span></span>snapshots<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>id</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>name</span><span class="token punctuation">&gt;</span></span>Snapshot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>name</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url</span><span class="token punctuation">&gt;</span></span>http://10.255.255.224:8081/repository/maven-snapshots<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>snapshotRepository</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>distributionManagement</span><span class="token punctuation">&gt;</span></span>
</code></pre></div><blockquote><p>🔔 注意:</p> <ul><li><code>&lt;repository&gt;</code><code>&lt;snapshotRepository&gt;</code> 的 id 必须和 <code>settings.xml</code> 配置文件中的 <code>&lt;server&gt;</code> 标签中的 id 匹配。</li> <li><code>&lt;url&gt;</code> 标签的地址需要和 maven 私服的地址匹配。</li></ul></blockquote> <h3 id="执行-maven-构建"><a href="#执行-maven-构建" class="header-anchor">#</a> 执行 maven 构建</h3> <p>如果要使用 <code>settings.xml</code> 中的私服配置,必须通过指定 <code>-P zp</code> 来激活 profile。</p> <p>示例:</p> <div class="language-shell extra-class"><pre class="language-shell"><code><span class="token comment"># 编译并打包 maven 项目</span>
$ mvn clean package -Dmaven.skip.test<span class="token operator">=</span>true -P zp
<span class="token comment"># 编译并上传 maven 交付件jar 包)</span>
$ mvn clean deploy -Dmaven.skip.test<span class="token operator">=</span>true -P zp
</code></pre></div><blockquote><p>至此,已经可以正常向 Nexus 上传、下载 jar 包。</p></blockquote> <h2 id="五、备份和迁移"><a href="#五、备份和迁移" class="header-anchor">#</a> 五、备份和迁移</h2> <p>Nexus 三个重要目录:</p> <table><thead><tr><th style="text-align:left;">名称</th> <th style="text-align:left;">目录名</th> <th style="text-align:left;">重要配置文件</th></tr></thead> <tbody><tr><td style="text-align:left;">nexus 主目录</td> <td style="text-align:left;">nexus-2.6.4-02</td> <td style="text-align:left;">conf/nexus.properties 里面有 sonatype-work 的地址</td></tr> <tr><td style="text-align:left;">sonatype-work 目录</td> <td style="text-align:left;">sonatype-work</td> <td style="text-align:left;">nexus/conf/nexus.xml 里面有 storage 的地址</td></tr> <tr><td style="text-align:left;">storage 目录</td> <td style="text-align:left;">storage</td> <td style="text-align:left;">里面主要是各种程序的 jar 包等</td></tr></tbody></table> <h3 id="备份"><a href="#备份" class="header-anchor">#</a> 备份</h3> <p>Nexus 的数据都存储在 sonatype-work 目录,备份 Nexus 数据只需要将其打包即可。</p> <h3 id="迁移"><a href="#迁移" class="header-anchor">#</a> 迁移</h3> <p>将原 Nexus 服务器中的 sonatype-work 目录迁移到新 Nexus 服务器的 sonatype-work 目录下。</p> <h2 id="六、faq"><a href="#六、faq" class="header-anchor">#</a> 六、FAQ</h2> <h3 id="配置-install4j-java-home"><a href="#配置-install4j-java-home" class="header-anchor">#</a> 配置 INSTALL4J_JAVA_HOME</h3> <p>我在工作中遇到 nexus systemctl 服务无法自启动的问题,通过查看状态,发现以下报错:</p> <div class="language- extra-class"><pre class="language-text"><code>Please define INSTALL4J_JAVA_HOME to point to a suitable JVM
</code></pre></div><p>通过排查,找到原因:即使环境上已安装 JDK且配置了 JAVA_HOME但 nexus 仍然无法正确找到 JDK需要在 <code>/bin/nexus</code> 中指定 <code>INSTALL4J_JAVA_HOME_OVERRIDE=&lt;JDK安装路径&gt;</code></p> <h2 id="参考资料"><a href="#参考资料" class="header-anchor">#</a> 参考资料</h2> <ul><li><a href="https://blog.csdn.net/clj198606061111/article/details/52200928" target="_blank" rel="noopener noreferrer">maven 私库 nexus3 安装及使用<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li> <li><a href="https://www.cnblogs.com/jtlgb/p/7473837.html" target="_blank" rel="noopener noreferrer">Nexus 安装 使用说明<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li> <li><a href="http://www.eryajf.net/2002.html" target="_blank" rel="noopener noreferrer">企业级开源仓库 nexus3 实战应用–使用 nexus3 配置 yum 私有仓库<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/dunwu/linux-tutorial/edit/master/docs/linux/soft/nexus-ops.md" target="_blank" rel="noopener noreferrer">帮助我们改善此页面!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <div class="last-updated"><span class="prefix">上次更新:</span> <span class="time">19 minutes ago</span></div></footer> <!----> </main></div><div class="global-ui"><!----><!----></div></div>
<script src="/linux-tutorial/assets/js/app.79a38eea.js" defer></script><script src="/linux-tutorial/assets/js/4.fb6e0f89.js" defer></script><script src="/linux-tutorial/assets/js/63.9cbf9f2b.js" defer></script><script src="/linux-tutorial/assets/js/5.cb43ecfb.js" defer></script>
</body>
</html>