你的 bash 历史出卖了你:bash-history-profiler 开发手记

举报
哦啦啦啦啦 发表于 2026/10/02 16:45:19 2026/10/02
【摘要】 上传你的 ~/.bash_history,它告诉你:你到底是消防员、架构师、摸鱼大师、包工头、偏执狂、数据侠,还是装包狂魔。为什么要做这个每个用命令行的人都有自己的"指纹"。有人满屏 kubectl,有人 grep | awk | sed 一管到底,有人 ls && cd && cat 三连装忙。这些习惯藏在 ~/.bash_history 里,几千条命令,自己从不回头看,但它们比任何自我评...

上传你的 ~/.bash_history,它告诉你:你到底是消防员、架构师、摸鱼大师、包工头、偏执狂、数据侠,还是装包狂魔。

为什么要做这个

每个用命令行的人都有自己的"指纹"。有人满屏 kubectl,有人 grep | awk | sed 一管到底,有人 ls && cd && cat 三连装忙。这些习惯藏在 ~/.bash_history 里,几千条命令,自己从不回头看,但它们比任何自我评价都诚实。

我想做一个工具,把这段历史变成一面镜子——不是冷冰冰的统计报表,而是一张"人格画像",带点毒舌,带点幽默,让你看完会心一笑,然后默默 history -c。

设计思路

1. 七种人格

核心创意是"人格画像"。我定义了七种开发者人格,每种对应一组关键词:

人格 emoji 特征
消防员 🚒 kill、restart、systemctl 刻进肌肉记忆
架构师 🏗️ docker、kubectl、terraform 搭乐高
摸鱼大师 🐚 ls、cd、cat、echo 占半壁江山
包工头 🔨 git、commit、push 三连是一天
偏执狂 🛡️ chmod、sudo、whoami 权限执念
数据侠 📊 管道比命令多,grep awk sed 一管到底
装包狂魔 📦 apt npm pip yum 人生就是装包

每种人格有一段毒舌描述。比如摸鱼大师:

你的终端里,ls、cd、cat、echo 四个命令占了半壁江山。打开终端 ✓,cd 到项目目录 ✓,ls 查看文件 ✓,cat 读一遍配置 ✓——一套流程下来,像极了认真工作的样子。其实你自己都知道:今天的有效产出,约等于零。但没关系,老板看到的是满屏的终端闪烁。

这些描述是手写的,不是 AI 生成的。每一段都反复改过,目标是"笑着认领"而不是"被冒犯"。

2. 评分机制

不是简单的关键词匹配计数。流程是:

def _score_personalities(entries):
    # 1. 统计每种人格关键词的命中次数
    # 2. 归一化到 0-100
    # 3. 取最高分作为主人格
    # 4. 置信度 = 主人格分数 / 第二人格分数 的比值

置信度决定描述语气:

  • ≥ 80 分:"人设非常稳固,名副其实"
  • ≥ 55 分:"画风逐渐清晰,粉墨登场"
  • < 55 分:"人格画像尚在演化中,继续折腾,迟早成型"

这样不会出现"你用了两次 git 就是包工头"的荒谬结论。

3. 危险操作检测

除了人格画像,还扫描高危操作:

DANGEROUS_OPS = {
    "rm -rf":     "☠️ 删库级操作",
    "kill -9":    "🔪 强杀进程",
    "chmod 777":  "🚪 全开权限",
    "mkfs":       "💥 格式化磁盘",
    ":(){ :|:& };:": "💣 fork 炸弹",
    "> /dev/sda": "🧨 直写裸设备",
    ...
}

每条都用正则匹配,不是简单的字符串包含。比如 rm -rf 的正则:

r"\brm\s+(-[a-z]*r[a-z]*f|-f[a-z]*r|--recursive[^;]*--force|--force[^;]*--recursive)"

这样能匹配 rm -rf、rm -fr、rm --recursive --force 等各种变体,但不会误报 rm file.txt。

检测到高危操作后,slogan 会加一句:

高危操作检出 13 次,建议给手上的服务器买好保险。

4. 命令分类

除了人格,还把命令分到七个大类:运维类、网络类、文件操作类、开发类、数据处理类、系统管理类、包管理类、安全类。每条命令属于哪类靠关键词表查,一个命令可以属于多类(比如 ssh 同时是运维类和网络类)。

分类统计让用户看到自己的"能力分布"——你是全面发展型还是偏科型。

5. 工作时间分析

如果 bash history 带时间戳(HISTTIMEFORMAT 开启的情况下),会分析你的命令在一天 24 小时的分布。凌晨三点还在 git push?工作日和周末的比例?这些数据比你自己记得清楚。

6. Web 界面

用 Flask 做了一个极简 Web 界面,三种输入方式:

  1. 上传文件 — 直接上传 .bash_history 文件
  2. 粘贴文本 — 复制粘贴命令历史
  3. 本机分析 — 一键读取本机 ~/.bash_history(仅限本地运行)

上传上限 8MB——对 bash history 来说够用了,如果你历史超过 8MB,大概该考虑一下是不是该 history -c 了。

报告页面展示:人格画像卡片 + Top 20 命令 + 危险操作列表 + 分类统计 + 工作时间分布 + 毒舌 slogan。

技术选择

Flask 而不是纯 CLI:因为这个工具的受众是"想看看自己是什么人格"的开发者,Web 界面比 CLI 更有"测试"的感觉。上传文件、等一秒、出结果,体验更像一个小游戏。

只用一个依赖:requirements.txt 里只有 Flask>=2.0。分析引擎 analyzer.py 是纯 Python 标准库,不依赖 Flask。这意味着如果你想把它集成到别的地方,直接 import analyzer 就行。

正则而不是 shell 解析:命令解析用正则表达式提取命令名(第一个 token),不调用 bash 去解析。更快,也更安全——不会意外执行任何东西。

一些数字

  • analyzer.py:约 420 行,包含 7 种人格定义、12 种危险操作检测、8 种命令分类
  • app.py:30 行,Flask 路由 + 文件上传
  • 依赖:1 个(Flask)
  • 人格描述:手写 7 段,每段 3-4 句,总计约 500 字中文

反思

人格定义是最难的部分。不是技术上难,是"写得准"难。早期版本的"架构师"描述提到了 Kubernetes,后来发现很多运维人也用 kubectl,两 种人格会打架。最后通过关键词去重解决——kubectl 在两种人格里都出现,但架构师还额外有 terraform、helm、docker-compose,这些是运维人不太用的。

毒舌的度很难拿捏。写得太温和不好笑,写得太狠会冒犯人。最后的标准是:如果我自己看到这个描述会笑着认领,那就过关。比如"装包狂魔"的描述里有一句"而真正让你退休的,是那个你三年前装的依赖终于 CVE 爆发"——每个用过 npm 的人都会会心一笑。

正则匹配危险操作值得反复测试。rm -rf 的正则改了三版。第一版太宽松,rm readme.md 也报高危;第二版太严格,rm -rf /(多空格)漏了;第三版用 \s+ 匹配任意空白,才算稳定。

如果重来做的话,会加一个"人格演变"功能——按时间分段,展示"你去年是摸鱼大师,今年进化成了架构师"。不过这需要时间戳数据,很多用户的 bash history 不带时间戳,所以优先级不高。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。