ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

jrnl 命令行日记应用全览:纯文本存储、标签检索、多日记管理与 AES 加密实战指南

jrnl 命令行日记应用全览:纯文本存储、标签检索、多日记管理与 AES 加密实战指南 CLI【免费下载链接】jrnlCollect your thoughts and notes without leaving the command line.项目地址https://gitcode.com/gh_mirrors/jr/jrnl点击查看免费下载jrnl是一款面向命令行的轻量级日记应用让你无需离开终端即可随时记录、检索和回顾思绪与笔记。本文以官方 overview.md 为主线系统讲解其纯文本存储、内联标签、多日记支持、外部编辑器、AES 加密、导入导出、跨平台七大核心能力并结合仓库源码与配套文档给出可复制的命令与配置示例。读完本文你将掌握 jrnl 的完整功能地图从第一条jrnl命令写起到多日记管理、标签过滤、加密解密、格式导出以及如何按需接入外部编辑器与配置文件调优。设计哲学功能恰到好处jrnl的定位是一句简洁的话一个简单的命令行日记应用a simple journal application for the command line。它让创建、搜索、查看日记条目变得轻而易举同时刻意保持克制——正如官方文档所言jrnl 拥有你所需的大部分功能而只包含你不需要的那一小部分jrnl has most of the features you need, and few of the ones you dont。这种少即是多的设计在架构层面有直观体现日记被存储为人类可读的纯文本可选地使用 AES 加密 保护核心数据模型集中在 jrnl/journals/Journal.py其默认配置字典journal、encrypt、default_hour、timeformat、tagsymbols等直接反映了这款应用开箱即用的行为基线。纯文本存储可同步、极紧凑、永不过时jrnl 将每一本日记以纯文本形式落盘这是它最根本的存储哲学存放位置自由日记文件可以放在任何地方包括共享文件夹中从而在多个设备之间保持同步体积极小数千条条目占用空间不足 1 MiB官方文档原话为thousands of entries take up less than 1 MiB可读性极强纯文本能被几乎所有电子设备读取无论现在还是可预见的未来都不存在专有格式的锁定风险。从源码看这种设计由 jrnl/journals/ 下的三类日记实现共同支撑日记类型存储形态实现文件关键约束单文件日记一个文本文件可加密Journal.py最灵活唯一支持加密的类型文件夹日记YYYY/MM/DD.txt目录树FolderJournal.py按年月分子目录同一天多条条目共用一个.txtDayOne Classic.dayone目录 entries/子目录DayOneJournal.py兼容 DayOne Classic 原始格式细节可参见 journal-types.md文件夹日记与 DayOne Classic 均不可加密若想在三种类型间迁移官方推荐的做法是先定义一个新类型日记再用管道把旧日记以txt格式导出并导入jrnl projects --format txt | jrnl new --import内联标签用组织与检索为了让日后查找更容易jrnl 内置了**内联标签inline tags**支持默认标签符号是之所以不用#是因为在多数 shell 中#是注释元字符详见 reference-config-file.md 中tagsymbols一节的说明。你可以用标签配合其他搜索条件来定位和过滤条目jrnl Had a wonderful day at the beach with Tom and Anna.标签的检索与告警机制按标签过滤jrnl pinkie WorldDomination显示含任一标签的条目jrnl -n 5 pinkie -and WorldDomination则显示同时包含两者的最近 5 条详见 usage.md标签搜索不区分大小写且单条条目中的标签数量没有上限写入时 jrnl 会检测新标签与历史标签的相似度并给出提示如The tag works is similar to: work但这只是警告不会阻断保存查看全库标签统计jrnl --tags即--format tags。从源码看标签过滤与-and/-not等逻辑的解析集中在 jrnl/args.py其中parse_not_arg()专门处理-not -starred、-not -tagged这类反转排除语义并保证-not不允许空参。标签符号可在配置文件中通过tagsymbols自定义例如tagsymbols: #。多日记支持单文件或文件集自动时间戳jrnl 支持创建多本日记每本既可以是一个单文件也可以是一组文件文件夹结构。条目会自动以人类可读格式打上时间戳方便一次查看多条jrnl 也能轻松定位你想读或想改的条目。在配置文件中定义多日记在 reference-config-file.md 的journals键下为每本日记指定路径即可journals: default: ~/journal.txt work: ~/work.txt若日记键的值直接是路径如default: ~/journal.txt则无需额外子键若需附加该日记的专属选项则使用子键形式并至少提供journal路径encrypt: false journals: default: ~/journal.txt work: journal: ~/work.txt encrypt: true display_format: json editor: code -rw food: display_format: markdown journal: ~/recipes.txt如上例所示顶层所有可配置项都能按日记粒度覆盖work日记加密、默认以 JSON 输出、用 VSCode 现有窗口编辑food日记默认以 Markdown 输出其余沿用全局默认示例出自 advanced.md。多日记的命令行用法jrnl work at 10am: Meeting with Steve # 写入 work 日记 jrnl work -n 3 # 查看 work 日记最近 3 条 jrnl -n 3 # 查看 default 日记最近 3 条 jrnl --list # 列出配置路径与全部日记外部编辑器与你的最爱编辑器无缝协作jrnl 与你喜欢的文本编辑器配合默契你可以选择在编辑器里撰写日记条目或对条目做更复杂的批量修改。jrnl 会过滤出指定条目并把它们交给所选的外部编辑器处理。完整说明见 external-editors.md。配置与三种使用方式在 配置文件 中通过editor键指定编辑器若编辑器不在系统PATH中需写完整路径。随后有三种用法jrnl # 直接进入编辑器撰写新条目 jrnl yesterday: All my troubles seemed so far away. # 跳过编辑器命令行快速记录 jrnl yesterday: All my troubles seemed so far away. --edit # 命令行起头再进编辑器续写关键前提编辑器必须是阻塞进程blocking process——jrnl 需要等编辑器关闭临时文件后才把内容写入日记。若 jrnl 打开编辑器后立刻结束说明编辑器未阻塞常见解决方式是加等待参数。常见编辑器配置速查编辑器jrnl.yaml 配置说明Sublime Texteditor: subl -w-w等待文件关闭VS Codeeditor: code --waitWindows 下需写code.exe完整路径MacVimeditor: mvim -f-f前台等待Vim / Neovimeditor: vim或nvimLinux 下直接指定可执行名iA Writer (macOS)editor: open -b pro.writer.mac -Wn-Wn等待关闭且新开实例Notepad (Windows)editor: C:\\Program Files (x86)\\Notepad\\notepad.exe -multiInst -nosession路径需双反斜杠emacseditor: emacsclient -a -c完成后C-x #关闭 buffergediteditor: gedit -w-w/--wait等待关闭提示编辑器可能泄露敏感信息如历史记录相关缓解建议见 privacy-and-security.md。AES 加密从 v1/v2 到 v3 的演进jrnl 内置 AES 加密 支持。加密相关内容已单独立页这里给出概览与要点。加密行为概览新写入的加密日记一律使用jrnl v3 格式v1 与 v2 的加密文件是只读格式仍可打开和解密但新的加密写入总是 v3。v3 文件格式v3 每次加密写入使用随机的 16 字节盐salt存放在魔术前缀之后的 JSON 头中从而规避 v2 静态盐的弱点。文件布局如下字段大小描述JRNLv36 字节魔术前缀header_len2 字节uint16 大端头字段长度最大 64KBheaderheader_len字节Base64 编码的 JSON含saltbase64url 编码的 16 字节盐Fernet token剩余字节密文该格式的读写实现见 jrnl/encryption/Jrnlv3Encryption.py并有对应的单元测试 tests/unit/test_jrnlv3_encryption.py 以及测试数据文件 tests/data/journals/encrypted_v3.journal 可对照验证。需要注意的是在 v3 头部改为 Base64 编码之前加密的旧文件仍可正常读取下次保存时会自动写入新编码格式。加密/解密命令jrnl --encrypt [FILENAME] # 加密日记已加密时用于修改密码先问旧密码再设新密码 jrnl --decrypt [FILENAME] # 解密为纯文本指定文件名则保留原加密文件另生成明文副本警告修改配置文件中encrypt字段不会触发加密或解密它只声明日记是否加密手动改动该字段很可能导致日记文件无法加载。因此必须使用上述命令。密码与钥匙串Keychainjrnl 无法找回或重置密码——一旦丢失数据将永久不可访问。为此加密时 jrnl 会询问是否将密码存入系统钥匙串keychain存入后与日记交互时无需再输密码。若当时未存、事后又想存或只在某台电脑上存可对已加密日记再次执行jrnl --encrypt并输入相同密码即会触发钥匙串存储提示。手动解密应急兜底万一 jrnl 不可用仍可用任何支持 AES确切地说是 AES-CBC的程序手动解密关键信息如下密钥密码的 [SHA-256] 哈希IV加密日记文件的前 16 字节正文前 16 字节之后的部分按 UTF-8 编码并经 PKCS#7 填充后加密。encryption.md 中提供了针对 jrnl v2 文件基于cryptography库的 Fernet/PBKDF2与 v1 文件基于pycrypto的 AES-CBC的两份 Python 脚本示例。注意这些脚本仅用于说明即使 jrnl 消失文件仍可恢复日常请优先使用jrnl --decrypt。导入与导出多种格式自由流转jrnl 让从其他来源导入条目变得容易也能把已有条目以多种格式导出详见 formats.md。任何格式都可以与搜索组合如jrnl -contains lorem ipsum --format json也可以单独使用如jrnl --format json输出全库。格式通过 jrnl/plugins/ 下的插件机制注册json_exporter、yaml_exporter、xml_exporter、markdown_exporter、text_exporter、tag_exporter、fancy_exporter 等因此系统上可用的格式以jrnl --help实际列为准。展示类格式格式命令特点prettyjrnl --format pretty默认时间戳 标题同行正文换行缩进显示受colors、indent_character、linewrap、timeformat配置影响shortjrnl --format short/jrnl --short只显示日期与标题fancy / boxedjrnl --format fancy每条条目带边框起止分明数据类格式JSONjrnl --format json输出含tags统计与entries数组每个条目含title、body、date、time、tags、starred可配合jq做二次处理Markdownjrnl --format markdown别名md按年、月分组并自动生成#/##标题层级已有标题会被递增以适配如#变##纯文本jrnl --format text别名txt即 jrnl 落盘的存储格式最适合日记间导入导出XMLjrnl --format xml输出journal结构的 XMLYAMLjrnl --format yaml --file my_directory/仅支持导出到目录每条条目单独一个文件。报表类格式tagsjrnl --format tags别名jrnl --tags列出每个标签及其出现次数按频次降序排列。导出选项--file默认输出到终端给定--file后则写入文件与管道重定向等价jrnl --format json --file myjournal.json jrnl --format json myjournal.json若--file指向目录则每条条目导出为独立文件jrnl --format yaml --file my_entries/ # 生成如 my_entries/2013_06_03_a-beautiful-day.yaml注意使用这些格式时2 entries found 之类的提示消息写入的是stderr使用|管道时不会混入 stdout。跨平台与安装jrnl 兼容绝大多数操作系统可通过多种包管理器安装也可从源码构建见 installation.md。最简安装方式是使用 Python 3.11 环境下的pipxpipx install jrnl提示安装时不要使用sudo否则可能引发路径问题。首次运行 jrnl 时会询问日记文件创建位置及是否需要加密。安装后即可进入 基础用法 的两种模式撰写模式不带-/--参数时直接在命令行写条目与查看模式。核心交互约定是单横线参数-用于过滤日记双横线参数--用于控制显示/导出方式过滤参数可任意组合控制参数互斥。例如jrnl yesterday: Called in sick. Used the time to clean, and spent 4h on writing my book.yesterday:会被解析为时间戳第一个句号前的部分作为标题其余作为正文。完整命令行参考见 reference-command-line.md其参数解析实现位于 jrnl/args.py。开源与社区jrnl 使用 [Python] 编写由友好的开源软件爱好者社区维护遵循 GPL-3.0 许可见 LICENSE.md。仓库内还包含完整的 CHANGELOG.md、CONTRIBUTING.md 与 BDD/单元测试体系见 tests/其中 tests/bdd/features/ 下的core.feature、encrypt.feature、format.feature、multiple_journals.feature等行为特性文件恰好可以当作本文所述各项能力的可执行文档来阅读与验证。赞分享CLI【免费下载链接】jrnlCollect your thoughts and notes without leaving the command line.项目地址https://gitcode.com/gh_mirrors/jr/jrnl点击查看免费下载相关推荐5分钟快速上手Windows虚拟显示器驱动完整配置指南5分钟快速上手Windows虚拟显示器驱动完整配置指南 Virtual Display Driver是一款功能强大的Windows虚拟显示器驱动解决方案能够CLI如何永久保存微信聊天记录WeChatMsg导出工具完整指南如何永久保存微信聊天记录WeChatMsg导出工具完整指南 你是否担心重要的微信对话会因手机故障而永久消失想要将珍贵的聊天记录转换为可永久保存的文档格式Wjrnl 命令行日记进阶技巧实战指南标签共现、模板工作流与终端快记jrnl 命令行日记进阶技巧实战指南标签共现、模板工作流与终端快记 本指南基于 jrnl 在命令行中记录想法与笔记的日记工具官方文档 docs/tipsCLI上一篇Electric Agents 实体设计实战五阶段工作流与七种协调模式的完整实现指南下一篇DiceDB 多线程分片架构设计解析Store 抽象、Shard 管理与跨分片命令协调2024-08-19 架构讨论纪要创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表