科技兴国 發表於 2026-3-2 10:40:00

老年人记不住命令?ShellGPT 是你的终端外挂

<h2 id="前言">前言</h2>
<p>ShellGPT = 命令行 × AI。无需记忆复杂参数,一句话生成精准命令;无需手动解析输出,管道直接丢给 AI 分析。本文详解安装配置、模型选择(白嫖阿里云)、三种使用模式(简洁/交互/会话),以及 netstat、kubectl、git 等实战场景。适合所有想在终端里"偷懒"的开发者和运维。</p>
<h2 id="安装">安装</h2>
<p>安装非常的简单粗暴,一条命令即可</p>
<pre><code>pip3 install shell-gpt
</code></pre>
<h2 id="选择模型">选择模型</h2>
<p>1)基于白piao的精神,选择了千问,至于原因:</p>
<p><img alt="shell-gpt_1" loading="lazy" src="https://img2024.cnblogs.com/blog/1416773/202603/1416773-20260302101956918-1357245187.jpg" class="lazyload"></p>
<p>阿里云百炼 ,低门槛快速入门</p>
<p>2)确定好平台之后,登陆选择模型,随便选一个即可,这里笔者选择了<code>Qwen3.5-Plus</code></p>
<p><img alt="shell-gpt_2" loading="lazy" src="https://img2024.cnblogs.com/blog/1416773/202603/1416773-20260302102005966-2116250828.jpg" class="lazyload"></p>
<p>3)点击模型查看详情,最主要的是拿到api key</p>
<p><img alt="shell-gpt_3" loading="lazy" src="https://img2024.cnblogs.com/blog/1416773/202603/1416773-20260302102011815-1819109445.jpg" class="lazyload"></p>
<p>4)生成api即可,将其按照下列格式准备着</p>
<pre><code>export OPENAI_API_KEY="sk-***********************"
export API_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
export DEFAULT_MODEL="qwen-plus"
</code></pre>
<ul>
<li><code>OPENAI_API_KEY</code>,就是刚才生成的</li>
<li><code>API_BASE_URL</code>,这是api地址,在文档中也可以找到</li>
<li><code>DEFAULT_MODEL</code>,默认使用的模型</li>
</ul>
<h2 id="初次使用">初次使用</h2>
<p>1)先配置环境变量:</p>
<pre><code>export OPENAI_API_KEY="sk-***********************"
export API_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
export DEFAULT_MODEL="qwen-plus"
</code></pre>
<p>2)hello world</p>
<pre><code>&gt; sgpt '你是谁?'
我是 ShellGPT,你的编程与系统管理助手。我专为 Linux/Debian GNU/Linux 13(代号 trixie)环境优化,熟悉 zsh
shell、包管理(apt)、服务管理(systemd)、脚本编写及常见运维任务。我能帮你调试命令、解释错误、生成安全的 Bash/Zsh 脚本、配置服务或排查网络/权限问题。所有响应力求简洁(约 100 字),并用 Markdown
增强可读性(如 code、加粗、列表等)。数据仅保留在当前对话中,不持久化。需要执行具体任务?比如:

• ✅ sudo apt update 后出错?
• ✅ 想写个自动备份脚本?
• ✅ systemctl status nginx 显示 failed?
   随时告诉我 👇
</code></pre>
<h2 id="日常使用">日常使用</h2>
<p>1)日常中工作中经常容易迷惑的命令:find,找出目录下1天前修改的文件?找出目录下1天内修改的文件?</p>
<p>这种问题使用sgpt简直不要太容易</p>
<pre><code>&gt; sgpt '找出当前目录下1天前修改的文件'
在当前目录下查找 1天前修改 的文件(即修改时间恰好为24小时前),可使用:


find . -maxdepth 1 -type f -mtime 1


⚠️ 注意:-mtime 1 表示“恰好 24–48 小时前”(即 24 ≤ 修改时间 &lt; 48 小时),这是 find 的标准行为(按完整天数向下取整)。

若需精确到1天(±几分钟),用 -mmin 更准:


find . -maxdepth 1 -type f -mmin +1439 -mmin -1441


(≈24h = 1440 分钟;+1439 表示 &gt;1439min,-1441 表示 &lt;1441min,覆盖 ±1 分钟误差)

排除隐藏文件?加 -not -name ".*"。需要递归子目录?删掉 -maxdepth 1。
</code></pre>
<p>2)我只想知道命令是什么,不想听到你bb这么多没用的消息</p>
<p>加上-s参数即可</p>
<pre><code>&gt; sgpt -s '找出当前目录下1天前修改的文件'
find . -type f -mtime 1
xecute, odify, escribe, bort:
</code></pre>
<p>还贴心的询问要不要执行,敲<code>e</code>立即执行,马上就将所有的1天前修改的文件列出来</p>
<p>这简直就是老年人记不住命令的福音啊</p>
<h2 id="交互模式">交互模式</h2>
<p>进入一个完全交互式的一问一答会话环境,并且上下文感知</p>
<pre><code>&gt; sgpt --repl temp
Entering REPL mode, press Ctrl+C to exit.
&gt;&gt;&gt; 当前操作系统是什么
...
&gt;&gt;&gt; 当前内核的版本是什么
...
</code></pre>
<p>交互模式也可以进入之前的shell模式,即交互执行模式,sgpt回答给出命令之后,可以选择立即执行</p>
<pre><code>&gt; sgpt -s --repl work-cmd
Entering shell REPL mode, type to execute commands or to describe the commands, press Ctrl+C to exit.
&gt;&gt;&gt; 找出/data目录下超过一天的文件
find /data -type f -mtime +1
&gt;&gt;&gt; e

/data/test/1
/data/test/2
</code></pre>
<h2 id="会话模式">会话模式</h2>
<p>该模式最大的特点就是内容记录下来,当还需要使用该上下文的时候,可以继续询问</p>
<pre><code>&gt; sgpt --chat find-command "找出/data下的所有的log结尾的文件"
...
&gt; sgpt --chat find-command "再找出1天前的"
</code></pre>
<p>列出所有会话:</p>
<pre><code>&gt; sgpt --list-chats
/tmp/chat_cache/find-command
</code></pre>
<p>查看会话内容:</p>
<pre><code>&gt; sgpt --show-chat find-command
</code></pre>
<p>注:在交互--repl模式的内容也能够看到</p>
<h2 id="交互模式与会话模式的区别">交互模式与会话模式的区别</h2>
<p>乍一看两个模式非常相似,其实也有差别</p>
<ul>
<li>--chat 会话模式:
<ul>
<li>想快速查询信息,过一段时间又需要使用该上下文</li>
<li>在写脚本中调用</li>
</ul>
</li>
<li>--repl 交互模式:
<ul>
<li>要进行深度对话/调试</li>
<li>需要连续问很多相关问题</li>
<li>想保持专注不被打断</li>
<li>在开发过程中实时咨询</li>
</ul>
</li>
<li>chat模式与repl模式也是可以互相进入的</li>
</ul>
<p>这里据一个例子让大家更加清晰的理解</p>
<p>1)早上日常巡检系统,看看目录下有哪些文件</p>
<pre><code>&gt; sgpt --chat monday '查看/data/目录下有多少个文件'
</code></pre>
<p>2)中午的时候开始深度与sgpt交流一个关于kafka的问题</p>
<pre><code>&gt; sgpt --repl kafka-topic
</code></pre>
<p>3)下午的时候想起来上午巡检的内容,还有个地方没做完:有多少文件是1天前修改的,这时候继续上午巡检的上下文</p>
<pre><code>&gt; sgpt --chat monday '有那些文件是1天前修改的'
</code></pre>
<p>4)快要下班的时候再统计,这次为了专注下班之前完成,进入了--repl交互模式,之前会话模式的内容也能够看到</p>
<pre><code>&gt; sgpt --repl monday
... # 显示之前的上下文

&gt;&gt;&gt; 把1天前修改的文件全部删掉
...
</code></pre>
<h2 id="奇技淫巧">奇技淫巧</h2>
<p>1)netstat -nlpt | sgpt '监听了那些端口,并且把进程名打印出来'</p>
<pre><code>&gt; sudo netstat -nlpt | sgpt '监听了哪些端口,并且把进程名打印出来'
以下是监听的端口及其对应进程(去重合并 IPv4/IPv6):

• 10887/tcp → trojan
• 16067/tcp → sunloginclient
• 631/tcp &amp; 631/tcp6 → cupsd (IPP printing service)

所有服务均绑定本地(127.0.0.1 或 ::1),除 trojan(0.0.0.0:10887)外,其余均不对外网开放。建议用 sudo ss -tulpn | grep :&lt;PORT&gt; 验证详情。
</code></pre>
<p>2)kubectl describe pod xxx | sgpt "解释这里的异常"</p>
<p>3)git diff | sgpt "帮我 review 这段改动"</p>
<h2 id="总结">总结</h2>
<p>sgpt极大的增强了日常使用命令行的效率,并且也在重构命令行使用的方式</p>
<h2 id="联系我">联系我</h2>
<ul>
<li>联系我,做深入的交流<br>
<img alt="" width="500" height="200" loading="lazy" src="https://img2024.cnblogs.com/blog/1416773/202411/1416773-20241121135740959-1907948957.png#" class="lazyload"></li>
</ul>
<hr>
<p>至此,本文结束<br>
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...</p>


</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:it排球君,转载请注明原文链接:https://www.cnblogs.com/MrVolleyball/p/19658054</p>
<div>本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。 </div><br><br>
来源:https://www.cnblogs.com/MrVolleyball/p/19658054
頁: [1]
查看完整版本: 老年人记不住命令?ShellGPT 是你的终端外挂