<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>命令行 &#8211; mylogs.cn</title>
	<atom:link href="https://mylogs.cn/tag/%e5%91%bd%e4%bb%a4%e8%a1%8c/feed/" rel="self" type="application/rss+xml" />
	<link>https://mylogs.cn</link>
	<description>发现、记录、分享</description>
	<lastBuildDate>Fri, 14 Aug 2026 20:03:31 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>别再用了：7 个被弃用的 Linux 命令与现代替代</title>
		<link>https://mylogs.cn/stop-using-deprecated-linux-commands/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 20:03:15 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[开源工具]]></category>
		<category><![CDATA[系统管理]]></category>
		<category><![CDATA[软件教程]]></category>
		<category><![CDATA[运维]]></category>
		<guid isPermaLink="false">https://mylogs.cn/stop-using-deprecated-linux-commands/</guid>

					<description><![CDATA[多年来，Linux 世界里陆续有一些命令被官方或社区标注为「已弃用」。它们往往还能运行，但要么存在安全隐患，要 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">多年来，Linux 世界里陆续有一些命令被官方或社区标注为「已弃用」。它们往往还能运行，但要么存在安全隐患，要么早已停止维护，或者被功能更全、Bug 更少的现代工具取代。下面整理了七个最常见、却该逐步退场的命令，以及各自的替代方案。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e80176&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e80176" class="wp-block-image size-large aligncenter wp-lightbox-container"><img fetchpriority="high" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/3c5eb3b65cac254a34574023a99031cb_header.webp" alt="别再用了：7 个被弃用的 Linux 命令与现代替代" class="wp-image-4874" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/3c5eb3b65cac254a34574023a99031cb_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/3c5eb3b65cac254a34574023a99031cb_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/3c5eb3b65cac254a34574023a99031cb_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/3c5eb3b65cac254a34574023a99031cb_header-768x432.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：How-To Geek</figcaption></figure>





<h2 class="wp-block-heading">cron：交给 systemd 定时器或 launchd</h2>



<p class="wp-block-paragraph">在众多被弃用的命令里，cron 大概是最让人又爱又恨的一个。它语法别扭，环境变量也最难调试。在现代 Linux 发行版上，systemd 已经接管了大量启动与定时任务，查看已有定时器只需一行：</p>



<p class="wp-block-paragraph"><code>systemctl list-timers</code></p>



<p class="wp-block-paragraph">在 macOS 上，cron 同样不再推荐，替代者是 launchd——它能做的远不止定时任务，还能在电脑关机时规划需要补跑的工作。</p>



<h2 class="wp-block-heading">ifconfig：用 ip 取代</h2>



<p class="wp-block-paragraph"><code>ifconfig</code> 属于老旧的 net-tools 套件，如今已被 <code>ip</code> 命令取代。<code>ip address</code> 一行就能看到网卡、IP 地址与对外路由等全部网络信息。虽然用网站查 IP 也很方便，但排查本机网络问题时，本地命令永远比一个随时可能停服的远程站点可靠。</p>



<h2 class="wp-block-heading">nslookup：dig 更强大</h2>



<p class="wp-block-paragraph"><code>nslookup</code> 用来查询域名解析，而 <code>dig</code> 做的是同一件事，却提供了更丰富的调试信息和更清晰的输出格式。对于只想快速查个地址的场景，nslookup 勉强够用；一旦需要详细记录类型或排错，dig 应当是首选。</p>



<h2 class="wp-block-heading">neofetch：fastfetch 等后继者</h2>



<p class="wp-block-paragraph">那个在终端里打印彩色 ASCII logo 的 neofetch 已于 2024 年正式停更。好在替代品层出不穷，其中 fastfetch 因持续活跃维护、可高度自定义而最受推崇；相比之下，ufetch、pfetch 等同类项目大多已归档。如果只想炫一下系统配置，fastfetch 是目前最稳的选择。</p>



<h2 class="wp-block-heading">scp：大目录用 rsync 更快</h2>



<p class="wp-block-paragraph"><code>scp</code> 基于 SSH 安全拷贝文件，简单任务很好用，但它已被 <code>rsync</code> 取代。两者上传单个文件的写法几乎一样，可一旦涉及需要反复同步的目录，rsync 只传输差异部分，效率远高于 scp 每次整文件重传。</p>



<h2 class="wp-block-heading">netstat：ss 是升级版</h2>



<p class="wp-block-paragraph"><code>netstat</code> 同样来自过时的 net-tools 套件，现代等价物是归属 iproute2 的 <code>ss</code>。它能显示开放套接字、路由表与网络统计，是排查连接与流量性能的更好工具。</p>



<h2 class="wp-block-heading">which：type 更准确</h2>



<p class="wp-block-paragraph"><code>which</code> 用来定位命令路径，但在部分系统上它只是一个可执行程序，无法感知 shell 内建命令，因此信息并不完整。更可靠的做法是用 shell 内建的 <code>type</code>——它能清楚区分这条命令究竟是内建指令、函数、别名还是独立程序，必要时同样支持 <code>-a</code> 参数列出所有匹配项。</p>



<p class="wp-block-paragraph">迁移到这些现代命令，短期看只是换个写法，长期却能少踩很多坑，也顺手获得更多功能。</p>



<p class="has-small-font-size wp-block-paragraph">来源：How-To Geek（作者 Bobby Jack）</p>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker 看着吓人？先记住这七条终端命令</title>
		<link>https://mylogs.cn/docker-%e7%9c%8b%e7%9d%80%e5%90%93%e4%ba%ba%ef%bc%9f%e5%85%88%e8%ae%b0%e4%bd%8f%e8%bf%99%e4%b8%83%e6%9d%a1%e7%bb%88%e7%ab%af%e5%91%bd%e4%bb%a4/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 11:27:06 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[效率工具]]></category>
		<guid isPermaLink="false">https://mylogs.cn/docker-%e7%9c%8b%e7%9d%80%e5%90%93%e4%ba%ba%ef%bc%9f%e5%85%88%e8%ae%b0%e4%bd%8f%e8%bf%99%e4%b8%83%e6%9d%a1%e7%bb%88%e7%ab%af%e5%91%bd%e4%bb%a4/</guid>

					<description><![CDATA[一、为什么 Docker 让人犯怵 第一次接触 Docker 的人，往往被镜像、容器、卷、端口、Compose [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">一、为什么 Docker 让人犯怵</h2>



<p class="wp-block-paragraph">第一次接触 Docker 的人，往往被镜像、容器、卷、端口、Compose 文件和满屏命令劝退，以为必须懂开发才能上手。镜像（image）可以理解成打包好的应用「蓝图」，容器（container）则是照蓝图跑起来的运行实例，二者并不相同。MakeUseOf 一位撰稿人分享，他真正跑起几个自托管应用后才发现，日常反复用的其实就是那么七八条命令。先把这七条记熟，Docker 就不再难懂。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e817da&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e817da" class="wp-block-image size-large aligncenter wp-lightbox-container"><img decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header.webp" alt="Docker 看着吓人？先记住这七条终端命令" class="wp-image-4824" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/6fb2fca48a76c4fa6dc4637cf4f04da5_header-768x432.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：MakeUseOf</figcaption></figure>





<h2 class="wp-block-heading">二、七条核心命令</h2>



<ol class="wp-block-list"><li>docker pull nginx：从镜像仓库下载名为 nginx 的镜像，相当于把「原材料」备好；</li><li>docker run -d &#8211;name myserver -p 8080:80 nginx：把镜像变成运行中的容器；-d 后台运行，&#8211;name 起名，-p 把本机 8080 端口映射到容器内 80 端口；</li><li>docker ps：查看正在运行的容器名称、状态、镜像与端口；加 -a（docker ps -a）可看已停止的；</li><li>docker logs myserver：查看容器输出日志，定位启动报错、配置或连接问题；加 -f 实时跟踪；</li><li>docker exec -it myserver sh：进入容器内部开一个交互终端，像在本机一样查文件、跑命令；</li><li>docker stop myserver：用完先停而非删，容器保留在系统里，下次一条命令就能再起；</li><li>docker rm myserver：确定不再需要时彻底删除容器（镜像仍在）。</li></ol>



<p class="wp-block-paragraph">一个最小流程就是：pull 拉镜像、run 起容器、ps 确认在跑、logs 排错、stop 收工。</p>



<h2 class="wp-block-heading">三、理解工作流就不慌</h2>



<p class="wp-block-paragraph">镜像像图纸，容器是照图纸跑起来的实体。端口映射（-p 8080:80）的意思是：在浏览器访问本机 8080，流量会被转进容器里的 80 端口，这样外面的电脑才能打开容器里的服务。七条命令足以起步，其余等踩坑时现学现用。</p>



<h2 class="wp-block-heading">注意事项</h2>



<p class="wp-block-paragraph">docker pull 并非每次必用，Docker 在 run 时缺镜像会自动补拉，但理解「镜像与容器」的关系能少走很多弯路。myserver 只是容器名占位符，换成自己实际名字即可；忘了名字就 docker ps 看 NAMES 列。删除容器前若仍在运行，要先 docker stop 再 docker rm，否则会报错。</p>



<p class="wp-block-paragraph">来源：MakeUseOf</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Claude Code 总闯祸？5 个钩子替你踩刹车</title>
		<link>https://mylogs.cn/claude-code-%e6%80%bb%e9%97%af%e7%a5%b8%ef%bc%9f5-%e4%b8%aa%e9%92%a9%e5%ad%90%e6%9b%bf%e4%bd%a0%e8%b8%a9%e5%88%b9%e8%bd%a6/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 05:09:27 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[AI工具]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[开发效率]]></category>
		<guid isPermaLink="false">https://mylogs.cn/claude-code-%e6%80%bb%e9%97%af%e7%a5%b8%ef%bc%9f5-%e4%b8%aa%e9%92%a9%e5%ad%90%e6%9b%bf%e4%bd%a0%e8%b8%a9%e5%88%b9%e8%bd%a6/</guid>

					<description><![CDATA[Claude Code 推理代码很在行，却不会像人一样在动手前先想后果。好在它提供&#8221;钩子（Hook [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Claude Code 推理代码很在行，却不会像人一样在动手前先想后果。好在它提供&#8221;钩子（Hooks）&#8221;机制：在工具调用前或后自动触发一段脚本，用确定性的规则拦住危险操作。把这些钩子写进 .claude/settings.json，Claude Code 就从&#8221;需要时刻盯着的工具&#8221;变成&#8221;可以放心交键盘的搭档&#8221;。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e82d9f&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e82d9f" class="wp-block-image size-large aligncenter wp-lightbox-container"><img decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/c9a1e3_makeuseof_claude_hooks_header.webp" alt="Claude Code 总闯祸？5 个钩子替你踩刹车" class="wp-image-4794" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/c9a1e3_makeuseof_claude_hooks_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/c9a1e3_makeuseof_claude_hooks_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/c9a1e3_makeuseof_claude_hooks_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/c9a1e3_makeuseof_claude_hooks_header-768x432.webp 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：MakeUseOf</figcaption></figure>





<h2 class="wp-block-heading">一、拦住毁灭性命令</h2>



<p class="wp-block-paragraph">Bash 工具每次调用前加一道 PreToolUse 守卫，扫描命令文本，命中危险模式就拦截。脚本从标准输入读 JSON，取出 command 字段，匹配 rm -rf、dd if=、mkfs 等就退出码 2，Claude 会收到原因并改提替代方案，而不是盲目重试。</p>



<pre class="wp-block-code"><code>#!/bin/bash
command=$(cat | jq -r &#x27;.tool_input.command&#x27;)
[[ &quot;$command&quot; =~ rm\ -rf|dd\ if=|mkfs\. ]] &amp;&amp; echo &quot;Blocked: destructive command&quot; &gt;&amp;2 &amp;&amp; exit 2
exit 0</code></pre>



<h2 class="wp-block-heading">二、保护密钥和环境变量</h2>



<p class="wp-block-paragraph">针对 Edit、Write 工具加钩子，禁止改写路径里含 .env、secrets、credentials 的文件。这一步格外重要：调试配置时 Claude 常想&#8221;顺手修一下&#8221;环境文件，而密钥文件恰恰最不该由 AI 在无人看管时改动。</p>



<pre class="wp-block-code"><code>#!/bin/bash
path=$(cat | jq -r &#x27;.tool_input.file_path&#x27;)
[[ &quot;$path&quot; =~ \.env|secrets|credentials ]] &amp;&amp; echo &quot;Blocked: protected file&quot; &gt;&amp;2 &amp;&amp; exit 2
exit 0</code></pre>



<h2 class="wp-block-heading">三、阻止强制推送和危险 Git 操作</h2>



<p class="wp-block-paragraph">Git 事故最难挽回，因为它会改写共享历史。钩子可专门识别 git push &#8211;force、推送到 main 或 master，以及 git reset &#8211;hard，在命令执行前拦下，避免一个下午的工作被静默清空。</p>



<pre class="wp-block-code"><code>#!/bin/bash
command=$(cat | jq -r &#x27;.tool_input.command&#x27;)
[[ &quot;$command&quot; =~ push\ --force|push\ .*\ main|reset\ --hard ]] &amp;&amp; echo &quot;Blocked: dangerous git command&quot; &gt;&amp;2 &amp;&amp; exit 2
exit 0</code></pre>



<h2 class="wp-block-heading">四、拦住破坏性的数据库语句</h2>



<p class="wp-block-paragraph">对含 DROP TABLE、TRUNCATE 的命令直接拒绝，并返回结构化 JSON 说明原因，让 Claude 在下一次尝试时调整方向，而不是单纯报错。</p>



<pre class="wp-block-code"><code>#!/bin/bash
command=$(cat | jq -r &#x27;.tool_input.command&#x27;)
[[ &quot;$command&quot; =~ DROP\ TABLE|TRUNCATE ]] &amp;&amp; echo &#x27;{&quot;hookSpecificOutput&quot;:{&quot;hookEventName&quot;:&quot;PreToolUse&quot;,&quot;permissionDecision&quot;:&quot;deny&quot;,&quot;permissionDecisionReason&quot;:&quot;Destructive SQL detected&quot;}}&#x27;</code></pre>



<h2 class="wp-block-heading">五、规范包管理器与 CI 配置</h2>



<p class="wp-block-paragraph">若项目用 pnpm，检测到 npm install 就拦下，避免生成冲突的锁文件；同理可禁止改动 CI 配置和生产部署脚本，除非人工明确批准。这类小错累积起来，破坏力不亚于一次大事故。</p>



<pre class="wp-block-code"><code>#!/bin/bash
command=$(cat | jq -r &#x27;.tool_input.command&#x27;)
[[ -f pnpm-lock.yaml &amp;&amp; &quot;$command&quot; =~ ^npm\ install ]] &amp;&amp; echo &quot;Blocked: use pnpm instead&quot; &gt;&amp;2 &amp;&amp; exit 2
exit 0</code></pre>



<h2 class="wp-block-heading">统一接入：一个 JSON 文件</h2>



<p class="wp-block-paragraph">以上钩子都写在 .claude/settings.json 的 PreToolUse 数组里，按工具（Bash、Edit、Write）配置 matcher。脚本可用 Bash 加 jq 编写，也可用 Python 写更易读的逻辑，建议随仓库提交，让所有协作者共用同一套护栏。</p>



<pre class="wp-block-code"><code>{
  &quot;hooks&quot;: {
    &quot;PreToolUse&quot;: [
      { &quot;matcher&quot;: &quot;Bash&quot;, &quot;hooks&quot;: [{ &quot;type&quot;: &quot;command&quot;, &quot;command&quot;: &quot;.claude/hooks/block-destructive-bash.sh&quot; }] },
      { &quot;matcher&quot;: &quot;Edit|Write&quot;, &quot;hooks&quot;: [{ &quot;type&quot;: &quot;command&quot;, &quot;command&quot;: &quot;.claude/hooks/protect-secrets.sh&quot; }] }
    ]
  }
}</code></pre>



<p class="wp-block-paragraph">注意事项：钩子依赖 jq 解析输入；拦截以正则匹配命令文本，复杂场景建议结合官方文档细化规则，避免误伤正常操作。</p>



<p class="wp-block-paragraph">来源：MakeUseOf</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>一条命令，看出下载文件来自哪个网站</title>
		<link>https://mylogs.cn/%e4%b8%80%e6%9d%a1%e5%91%bd%e4%bb%a4%ef%bc%8c%e7%9c%8b%e5%87%ba%e4%b8%8b%e8%bd%bd%e6%96%87%e4%bb%b6%e6%9d%a5%e8%87%aa%e5%93%aa%e4%b8%aa%e7%bd%91%e7%ab%99/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Mon, 10 Aug 2026 20:32:45 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[NTFS]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Windows技巧]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[文件安全]]></category>
		<guid isPermaLink="false">https://mylogs.cn/%e4%b8%80%e6%9d%a1%e5%91%bd%e4%bb%a4%ef%bc%8c%e7%9c%8b%e5%87%ba%e4%b8%8b%e8%bd%bd%e6%96%87%e4%bb%b6%e6%9d%a5%e8%87%aa%e5%93%aa%e4%b8%aa%e7%bd%91%e7%ab%99/</guid>

					<description><![CDATA[下载文件夹里堆了几十个安装包，过一阵子再看，常常想不起某个 exe 到底是从官网下的还是从论坛转来的。更常见的 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">下载文件夹里堆了几十个安装包，过一阵子再看，常常想不起某个 exe 到底是从官网下的还是从论坛转来的。更常见的情况是：双击下载来的程序，系统弹出「此文件来自其他计算机，可能被阻止以帮助保护该计算机」；用 Office 打开下载的表格，顶部横幅提示进入受保护的视图，编辑按钮点不了。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e85ae4&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e85ae4" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="799" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/a9a9345094493146ae707ca5b2e47784_header.webp" alt="一条命令，看出下载文件来自哪个网站" class="wp-image-4357" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/a9a9345094493146ae707ca5b2e47784_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/a9a9345094493146ae707ca5b2e47784_header-300x200.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/a9a9345094493146ae707ca5b2e47784_header-1024x682.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/a9a9345094493146ae707ca5b2e47784_header-768x511.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：MakeUseOf</figcaption></figure>





<p class="wp-block-paragraph">这些提示不是凭空冒出来的。NTFS 文件系统里有一个沿用了 33 年的机制——替代数据流（Alternate Data Streams，简称 ADS），一个文件除了肉眼能看到的正文，还能挂上若干个独立命名的「附加层」。文件名、图标、文件大小都不露痕迹，资源管理器也从未打算显示它。Windows 正是用其中一个叫 Zone.Identifier 的流，记下这个文件从哪儿来。</p>



<h2 class="wp-block-heading">一、先做个实验，亲眼看见第二层</h2>



<p class="wp-block-paragraph">MakeUseOf 撰稿人 Afam Onyimadu 给出的验证步骤只要一分钟：</p>



<ol class="wp-block-list"><li>任意文件夹里右键 →「新建」→「文本文档」，命名 test.txt，写一句话后保存关闭。</li><li>点击资源管理器地址栏，输入 <code>cmd</code> 回车，在当前目录打开命令提示符。</li><li>执行 <code>notepad test.txt:secret.txt</code>，在弹出的记事本里随便写点内容，保存关闭。</li><li>回到命令行执行 <code>dir</code>，列表里依然只有 test.txt，看不出异常。</li><li>再执行 <code>dir /r</code>，test.txt 下面会多出一行以 <code>$DATA</code> 结尾的记录，带着自己的名字和体积。</li></ol>



<p class="wp-block-paragraph">这不是文件里藏了另一个文件，而是同一条文件记录上挂了第二条数据流。查属性、比大小都发现不了。</p>



<h2 class="wp-block-heading">二、查出下载文件的真实来源</h2>



<p class="wp-block-paragraph">把同样的动作用到下载目录，收获会更实用：</p>



<ol class="wp-block-list"><li>在「下载」文件夹地址栏输入 <code>cmd</code> 回车，执行 <code>dir /r</code>。</li><li>很多文件下方会出现名为 <code>Zone.Identifier</code> 的流。</li><li>用 <code>notepad 文件名:Zone.Identifier</code> 直接打开它（文件名含空格时用引号括起来）。</li><li>里面通常有一行 <code>ZoneId=3</code>，代表文件来自「Internet 区域」而非本机创建；有些还带 HostUrl 和 ReferrerUrl，直接指向当初的下载地址。</li></ol>



<p class="wp-block-paragraph">习惯用 PowerShell 的话，<code>Get-Item -Path "C:\Users\用户名\Downloads\setup.exe" -Stream *</code> 能列出同一份信息。</p>



<h2 class="wp-block-heading">三、确认可信后再解除锁定</h2>



<p class="wp-block-paragraph">这套标记就是所谓的「网络来源标记」（Mark of the Web），它会让系统和部分软件对文件加以限制。确认来源可靠后再解除：</p>



<ol class="wp-block-list"><li>右键文件 →「属性」→「常规」选项卡，拉到窗口底部的「安全」一行。</li><li>勾选旁边的「解除锁定」复选框，点击「应用」再点「确定」——只勾不点应用不生效。</li><li>需要批量处理时，在目标目录打开 PowerShell 执行 <code>dir -Recurse | Unblock-File</code>，或对单个文件用 <code>Unblock-File -Path "完整路径"</code>。</li><li>压缩包建议先对 zip 本身解除锁定再解压，否则解出来的文件可能继承同样的标记。</li></ol>



<h2 class="wp-block-heading">四、几点值得留意的地方</h2>



<p class="wp-block-paragraph">从挂载的 ISO 或 IMG 镜像里取出的文件，并不总能可靠地带上 Zone.Identifier。没有标记就不触发警告——自微软默认拦截来自互联网的宏之后，攻击者转而更多使用 ISO 附件，正是钻了这个空子。收到陌生人发来的 ISO 附件，警惕程度应高于普通文档。</p>



<p class="wp-block-paragraph">另外，附加流的存活取决于文件系统和传输方式。把带流的文件复制到 FAT32 格式的 U 盘，再执行 <code>dir /r</code>，可见内容还在，附加的那一层已经消失。资源管理器虽不显示这些流，安全软件却能识别，微软免费提供的 Sysmon 就专门有一类事件用于记录流的创建。</p>



<p class="wp-block-paragraph">来源：MakeUseOf</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Claude Code 新增跨会话消息，一个会话能喊醒另一个</title>
		<link>https://mylogs.cn/claude-code-cross-session-messaging-2/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Sun, 09 Aug 2026 05:02:56 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[AI 编程]]></category>
		<category><![CDATA[Anthropic]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[人工智能]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[开发者工具]]></category>
		<category><![CDATA[跨会话]]></category>
		<guid isPermaLink="false">https://mylogs.cn/claude-code-cross-session-messaging-2/</guid>

					<description><![CDATA[如果你同时开着好几个 Claude Code 会话在跑不同的活，新版本里它们终于能互相「说话」了。根据官方文档 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">如果你同时开着好几个 Claude Code 会话在跑不同的活，新版本里它们终于能互相「说话」了。根据官方文档，跨会话消息功能需要 Claude Code v2.1.224 及以上版本，且仅在 macOS 和 Linux 上可用。当会话满足条件后，消息功能默认开启，无需额外设置。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e86b80&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e86b80" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="630" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/8384af7a934376fbdfa8f2612e668b3c_header.webp" alt="Claude Code 新增跨会话消息，一个会话能喊醒另一个" class="wp-image-4154" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/8384af7a934376fbdfa8f2612e668b3c_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/8384af7a934376fbdfa8f2612e668b3c_header-300x158.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/8384af7a934376fbdfa8f2612e668b3c_header-1024x538.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/8384af7a934376fbdfa8f2612e668b3c_header-768x403.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：Claude Code</figcaption></figure>





<p class="wp-block-paragraph">实现上，Claude 借助两个工具来完成这件事：ListAgents 用来发现当前能联系到哪些会话，SendMessage 则按名字把消息投递给其中一个。借助同一个 SendMessage，Claude 也能在同一个会话内部或团队里给子智能体发消息。官方文档主要讲的是不同独立会话之间的消息往来。</p>



<p class="wp-block-paragraph">最常见的使用场景，是一个会话手里有了另一个会话正需要的东西。比如某个会话改动了代码、引发破坏性变更，或者做出了某个决定，Claude 可以主动把要点总结后发给正在相关区域干活的会话，免去用户在多个终端之间来回复制粘贴；当多个会话在同一个代码仓库的不同工作副本上并行推进时，也能互相通报各自的进展；跑得久的迁移或测试任务，还能把状态回报给正在盯着的那个会话。此外，如果消息来自另一台机器或网页端，Claude 也能跨设备回一句。</p>



<p class="wp-block-paragraph">消息本身只是一段纯文本，而不是完整的对话历史或文件。Claude 会在工具调用之间读取消息，因此不会打断正在跑的操作；当接收方空闲时，则开一个新轮次来处理。每条到达的消息都要经过接收方的入站规则检查，最终落到三种结果之一：送达（Delivered）、暂存（Held）或拒收（Refused）。一旦送达，这条消息会像用户亲手输入的提示一样计入用量，接收方也能以同样方式回复——跨机器的一来一回除外。</p>



<p class="wp-block-paragraph">权限边界按会话各自隔离。Claude 被明确要求，绝不为另一个会话去做自身会话里被拒绝或拦下的操作，这类工作应当绕回交给你。在接收方一侧，它自身的权限提示和规则依旧对所有消息生效。你可以用 <code>/list-agents</code> 命令查看哪些会话可达，用 <code>crossSessionInbound</code> 设置来决定如何对待来自其他会话的消息：accept 直接送达、hold 先挂着等确认、refuse 直接丢弃。</p>



<p class="wp-block-paragraph">对重度使用 Claude Code 的开发者来说，这意味着并行多会话的协作终于有了内置的「对讲机」，而不必再靠人肉在终端间搬运信息。</p>



<p class="has-small-font-size wp-block-paragraph">来源：Claude Code 官方文档</p>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>为了几条命令开 WSL？现在真没必要了</title>
		<link>https://mylogs.cn/%e4%b8%ba%e4%ba%86%e5%87%a0%e6%9d%a1%e5%91%bd%e4%bb%a4%e5%bc%80-wsl%ef%bc%9f%e7%8e%b0%e5%9c%a8%e7%9c%9f%e6%b2%a1%e5%bf%85%e8%a6%81%e4%ba%86/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Sun, 09 Aug 2026 02:46:03 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[Coreutils]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WSL]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[效率工具]]></category>
		<guid isPermaLink="false">https://mylogs.cn/%e4%b8%ba%e4%ba%86%e5%87%a0%e6%9d%a1%e5%91%bd%e4%bb%a4%e5%bc%80-wsl%ef%bc%9f%e7%8e%b0%e5%9c%a8%e7%9c%9f%e6%b2%a1%e5%bf%85%e8%a6%81%e4%ba%86/</guid>

					<description><![CDATA[在 Windows 上找一个几天前改过名的配置文件、从一堆日志里筛出报错行，习惯了 Linux 终端的人往往手 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">在 Windows 上找一个几天前改过名的配置文件、从一堆日志里筛出报错行，习惯了 Linux 终端的人往往手比脑子快——还没想清楚，WSL 的标签页已经开好了。问题是，为了这么几条命令挂着一整个 Linux 子系统，每次都要从一个环境跳到另一个环境再跳回来，思路就被打断了。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e879f3&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e879f3" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/3b0a34d89e572efab141dfb9dd8c0189_header.webp" alt="为了几条命令开 WSL？现在真没必要了" class="wp-image-4132" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/3b0a34d89e572efab141dfb9dd8c0189_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/3b0a34d89e572efab141dfb9dd8c0189_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/3b0a34d89e572efab141dfb9dd8c0189_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/3b0a34d89e572efab141dfb9dd8c0189_header-768x432.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：MakeUseOf</figcaption></figure>





<p class="wp-block-paragraph">MakeUseOf 撰稿人 Afam Onyimadu 分享，他复盘之后发现自己真正离不开的只有八条命令：ls、grep、find、cat、sort、head、tail、wc。微软在 Build 2026 上推出的 Coreutils for Windows 正好补的就是这个缺口——它基于 Rust 编写的 uutils/coreutils 项目，把 coreutils、findutils（find、xargs）和一个 GNU 兼容的 grep 打包在一起，原生跑在 Windows 上。</p>



<h2 class="wp-block-heading">一、安装与验证</h2>



<ol class="wp-block-list"><li>打开管理员权限的终端，执行 <code>winget install Microsoft.Coreutils</code>，也可以从 GitHub 的 microsoft/coreutils 仓库下载安装包。</li><li>安装程序会把工具写入系统 PATH。磁盘上其实只落了一个 <code>C:\Program Files\coreutils\coreutils.exe</code>，再用 NTFS 硬链接生成 ls.exe、cat.exe 等一堆同名入口，程序靠自己被调用时的文件名决定执行哪个工具。</li><li>执行 <code>cat --version</code> 验证，正常应返回 uutils 的版本号。每条命令都支持 <code>--help</code> 查看完整参数。</li></ol>



<h2 class="wp-block-heading">二、先解决 PowerShell 的别名冲突</h2>



<p class="wp-block-paragraph">这是最容易踩的坑。PowerShell 自带 ls、cat、pwd 等内置别名，优先级高于 PATH，敲下去跑的仍是 Get-ChildItem、Get-Content。</p>



<ol class="wp-block-list"><li>诊断：执行 <code>Get-Command cat</code>，若 CommandType 显示 Alias，就是命中了别名。</li><li>临时解除当前会话的别名：<code>Remove-Item alias:cat -Force</code>；想长期生效，把这行写进 <code>$PROFILE</code>，每个冲突命令各写一行。</li><li>也可以直接带后缀调用，比如 <code>ls.exe</code>。</li><li>最省事的办法是改用命令提示符（CMD），CMD 下不存在这类别名冲突。微软文档里有一张兼容对照表，标出了 PowerShell 7.4 及以上版本中「已安装但会冲突」的工具。</li></ol>



<h2 class="wp-block-heading">三、可以直接照搬的用法</h2>



<p class="wp-block-paragraph"><code>ls -la</code> 和递归 <code>find</code> 都能原生跑通，<code>grep -r</code> 在整个项目目录里搜索也正常。该撰稿人常用的日志排查管线 <code>cat access.log | grep 500 | sort | uniq | wc -l</code> 可以原样执行；批量重命名文件、裁剪日志输出的几个 bash 单行脚本，几乎不用改就跑起来了——同样的逻辑若改写成 PowerShell，得换一套语法和对象管线思路。此外，在大型项目目录上做递归 grep 和 find，因为少了一层文件系统转换，速度比在 WSL 里更快。</p>



<h2 class="wp-block-heading">四、这些命令没有</h2>



<p class="wp-block-paragraph">chmod、chown、chroot、tty、who、id 依赖 Windows 不具备的 POSIX 权限模型，kill 和 timeout 则因为 Windows 没有 POSIX 信号，一并缺席。dir、more、expand、whoami 是微软刻意没收录的，避免覆盖 Windows 自带版本。另外要留意：<code>/dev/null</code> 在 Windows 这边写作 <code>NUL</code>；CRLF 行尾会影响 wc 的字节统计和正则里的 <code>$</code> 锚点匹配，脚本对输出精度敏感的话，上线前先测一遍。</p>



<p class="wp-block-paragraph">微软目前仍把它标为预览版。真正涉及包管理器、容器和完整 Linux 环境的活，还是归 WSL。</p>



<p class="wp-block-paragraph">来源：MakeUseOf</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>命令背了就忘？十五年老手只靠这四招</title>
		<link>https://mylogs.cn/%e5%91%bd%e4%bb%a4%e8%83%8c%e4%ba%86%e5%b0%b1%e5%bf%98%ef%bc%9f%e5%8d%81%e4%ba%94%e5%b9%b4%e8%80%81%e6%89%8b%e5%8f%aa%e9%9d%a0%e8%bf%99%e5%9b%9b%e6%8b%9b/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Sat, 08 Aug 2026 11:26:07 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[AI辅助]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[效率工具]]></category>
		<category><![CDATA[终端命令]]></category>
		<guid isPermaLink="false">https://mylogs.cn/%e5%91%bd%e4%bb%a4%e8%83%8c%e4%ba%86%e5%b0%b1%e5%bf%98%ef%bc%9f%e5%8d%81%e4%ba%94%e5%b9%b4%e8%80%81%e6%89%8b%e5%8f%aa%e9%9d%a0%e8%bf%99%e5%9b%9b%e6%8b%9b/</guid>

					<description><![CDATA[打开终端，想执行一条上个月刚用过的长命令，脑子里只剩下前两个单词。参数顺序忘了，某个短横杠后面跟的是哪个字母也 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">打开终端，想执行一条上个月刚用过的长命令，脑子里只剩下前两个单词。参数顺序忘了，某个短横杠后面跟的是哪个字母也想不起来，只能一遍遍按方向键往上翻历史记录，翻了三十行还是没找到。这种场景，几乎每个用命令行的人都经历过。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e88b64&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e88b64" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/cc8d64e2e03c9f0d55f8eeb7b767570c_header.webp" alt="命令背了就忘？十五年老手只靠这四招" class="wp-image-4096" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/cc8d64e2e03c9f0d55f8eeb7b767570c_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/cc8d64e2e03c9f0d55f8eeb7b767570c_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/cc8d64e2e03c9f0d55f8eeb7b767570c_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/cc8d64e2e03c9f0d55f8eeb7b767570c_header-768x432.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：How-To Geek</figcaption></figure>





<p class="wp-block-paragraph">How-To Geek 撰稿人 Graeme Peacock 有十五年 Linux 使用经验，用过 Ubuntu、Arch、Gentoo，2016 年起长期使用 Qubes。他坦言前十年自己只用原生 Bash 加 Tab 补全。他的核心结论是：命令行高手并不是把所有命令都背下来了，而是搭好了一套让大脑不必记忆的工具链。以下四种方法可以直接照搬。</p>



<h2 class="wp-block-heading">一、装一个模糊历史搜索工具</h2>



<p class="wp-block-paragraph">这是四招里效果最立竿见影的一条。所谓「模糊搜索」，指的是允许拼错、允许只输入零碎片段的近似匹配。</p>



<ol class="wp-block-list"><li>安装 fzf，这是模糊搜索的底层工具。</li><li>在其基础上接入历史搜索插件，可选 Atuin，或者 zsh 用户常用的 zsh-fzf-history-search。</li><li>需要找旧命令时，不再按方向键上翻，而是直接输入几个记得住的碎片，例如命令名 sed、参数片段 i、文件名片段 foob。</li><li>工具会在成千上万条历史记录里筛出最接近的那一条，回车即可执行。</li></ol>



<p class="wp-block-paragraph">Graeme Peacock 的历史记录里存着数万条命令，其中大量长命令仅在参数上有细微差别，靠人工回忆几乎不可能区分。他给出的评价是：如果今天只记住一件事，那就记住装 fzf。</p>



<h2 class="wp-block-heading">二、给高频命令起「助记别名」</h2>



<p class="wp-block-paragraph">助记别名指的是用别名里的每个字母对应命令的一个组成部分，看一眼就能反推出完整命令。他日常使用 Git 的一套 zsh 插件别名如下：</p>



<ul class="wp-block-list"><li>gcam 对应 git commit &#8211;all &#8211;message</li><li>gbD 对应 git branch &#8211;delete &#8211;force</li><li>gp 对应 git push</li><li>gcan! 对应 git commit &#8211;all &#8211;no-edit &#8211;amend</li></ul>



<p class="wp-block-paragraph">这类别名最适合那种天天要用、但每次只有一个参数在变的命令，比如提交信息。</p>



<h2 class="wp-block-heading">三、把复杂需求封装成 Bash 函数</h2>



<p class="wp-block-paragraph">当一条命令需要传多个值或多个选项时，别名就不够用了。这时写一个两三行的 Bash 函数把它包起来即可，不必写成完整脚本。</p>



<p class="wp-block-paragraph">函数要保持短小、只做一件事，这样才能像积木一样用管道串起来，组成 foo | bar | baz 这样的流水线。遇到输出 JSON 的命令，再接一道 jq 处理，复杂输出就不会看错。日积月累攒出一个函数库，拼装长命令会轻松很多。</p>



<h2 class="wp-block-heading">四、把 AI 当最后一道保险</h2>



<p class="wp-block-paragraph">Graeme Peacock 承认自己在开发工作中经常让 Claude 直接跑调试命令，那些命令他自己敲要花十分钟；模型扫描文件、收集上下文、拼出上千字符的命令序列只需几秒，写一个一次性 Python 脚本同样如此。</p>



<p class="wp-block-paragraph">不过他把这条放在最后是有原因的：AI 给出的答案属于「快，但不保证对」。他本人正在把 Claude 关进开发容器里运行，理由很直接——模型执行 rm -rf 和执行别的命令一样快。他自己还额外用虚拟机做隔离。</p>



<h2 class="wp-block-heading">需要留意的地方</h2>



<p class="wp-block-paragraph">Graeme Peacock 强调，tar xvf、git commit -am、ls -al 这类命令他确实是记住的，但超出这个范围就靠 &#8211;help、man 手册和上述四种方法组合应对。模糊历史搜索是主力，AI 只在实在想不起来或压根不知道该用什么命令时才动用。</p>



<p class="wp-block-paragraph">来源：How-To Geek</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>开三个终端，不用再来回复制粘贴了</title>
		<link>https://mylogs.cn/claude-code-cross-session-messaging/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Sat, 08 Aug 2026 03:27:05 +0000</pubDate>
				<category><![CDATA[科技]]></category>
		<category><![CDATA[AI代理]]></category>
		<category><![CDATA[AI编程]]></category>
		<category><![CDATA[Anthropic]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[开发者工具]]></category>
		<guid isPermaLink="false">https://mylogs.cn/claude-code-cross-session-messaging/</guid>

					<description><![CDATA[同时开着好几个 Claude Code 窗口的开发者，长期要交一笔隐形的“人肉中转费”：后端那个会话刚发现接口 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">同时开着好几个 Claude Code 窗口的开发者，长期要交一笔隐形的“人肉中转费”：后端那个会话刚发现接口签名变了，前端那个会话还在照老写法调；一个会话跑完迁移脚本得出结论，另一个卡在同样的问题上等答案。把消息从这个终端搬到那个终端，一直是人来做的。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e8a2a8&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e8a2a8" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="600" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/f095f43b2eb0841ce2374732b1f9cb40_header.webp" alt="开三个终端，不用再来回复制粘贴了" class="wp-image-4042" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/f095f43b2eb0841ce2374732b1f9cb40_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/f095f43b2eb0841ce2374732b1f9cb40_header-300x150.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/f095f43b2eb0841ce2374732b1f9cb40_header-1024x512.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/f095f43b2eb0841ce2374732b1f9cb40_header-768x384.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：9to5Mac</figcaption></figure>





<p class="wp-block-paragraph">Anthropic 在 8 月 7 日通过官方开发者账号 @ClaudeDevs 宣布，从 Claude Code v2.1.224 版本开始，不同会话之间可以直接互相发消息，这项功能被称为“跨会话消息传递”（Cross-session messaging）。</p>



<h2 class="wp-block-heading">会话之间到底传了什么</h2>



<p class="wp-block-paragraph">官方文档对这项能力的描述很克制：跨会话消息传递让 Claude 把一条消息从一个 Claude Code 会话送到另一个会话。当一个会话里的改动破坏了另一个会话正在构建的东西时，Claude 可以在用户察觉之前就发出预警；当一个会话解开了另一个会话卡住的问题时，答案也能被及时送过去。</p>



<p class="wp-block-paragraph">关键在于传递的内容边界。@ClaudeDevs 在发布推文中写道：</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">不必再在另一个会话里把来龙去脉重讲一遍，现在可以让 Claude 去讲。它发送的是一段摘要，而不是完整的对话历史或文件，另一个会话会在任务进行中接收到它。</p>
</blockquote>



<p class="wp-block-paragraph">也就是说，跨会话消息本质上是一段由 Claude 自己撰写、写给另一个 Claude 的纯文本，附带发送方的名称和一个回复地址。对话历史不会跟着走，项目文件也不会。如果需要迁移的是完整上下文而非一个结论，对应的机制仍然是恢复会话，而不是发消息。</p>



<p class="wp-block-paragraph">实现层面新增了两个工具，用户不需要手动调用：ListAgents 负责发现当前可以联系到哪些会话，SendMessage 负责按名称把文本投递过去。在任意会话中输入斜杠命令 <code>/list-agents</code>（别名 <code>/peers</code>）即可查看可达会话列表，其中包含当前会话内的子代理、同一台机器上的其他本地会话（含后台会话），以及在远程控制连接状态下位于其他机器或网页端的会话。</p>



<p class="wp-block-paragraph">会话通过名称相互识别，可以用 <code>/rename</code> 或启动参数 <code>--name</code> 指定，也可以由 Claude Code 依据工作目录自动生成。若两个会话重名，列表会额外显示各自的工作目录以便区分。</p>



<pre class="wp-block-code"><code># 启动时直接命名
claude --name migration
claude --name payments-api

# 在任一会话中查看可达列表
/list-agents</code></pre>



<h2 class="wp-block-heading">权限这道闸门没有松动</h2>



<p class="wp-block-paragraph">Anthropic 列出的典型场景包括四类：移交一项调查发现、协调并行的工作树（worktree）、获取长时间运行任务的状态，以及跨机器回复。</p>



<p class="wp-block-paragraph">值得关注的是这项功能在权限上的保守设计。跨会话消息不能用于批准权限请求，也不能修改配置。像 <code>/compact</code> 这样的指令传过去只会被当作纯文本，不会被当成命令执行。如果接收方要按消息内容动手，仍会照常向用户弹出权限确认。换句话说，来自另一个会话的消息，永远不等同于用户本人的授权。</p>



<p class="wp-block-paragraph">同一版本还引入了 crossSessionInbound 与 dialogExpiry 两项设置。发往以绕过权限模式（bypassPermissions）运行的会话的消息会被暂扣，直到用户批准；发往其他会话的消息则自动投递。此外，这一版修复了一个可靠性缺陷——此前即便写入对方收件箱实际失败，SendMessage 也会显示“消息已发送”，现在投递失败会明确报错。</p>



<p class="wp-block-paragraph">为防止会话之间陷入互相喊话的死循环，Claude Code 对同一发送方的重复消息做了限流，短时间内到达的完全相同的消息会被丢弃，每个会话待读消息上限为 50 条。</p>



<h2 class="wp-block-heading">使用门槛与适用边界</h2>



<p class="wp-block-paragraph">该功能要求 Claude Code 版本不低于 v2.1.224，且运行在 macOS 或 Linux 上（包含 WSL 2），暂不支持原生 Windows。满足条件后默认开启，无需额外配置。同一台机器上的会话通过本地套接字通信，不经过 Anthropic 服务器；跨机器场景目前只支持“回复”，即 Claude 无法主动向远程或网页端会话发起对话。</p>



<p class="wp-block-paragraph">需要说明的是，跨会话消息并非万能胶。Claude Code 对相邻场景各有专门机制：搬运完整上下文用会话恢复，由 Claude 自行派生并监管的一组代理用代理团队（agent teams），在一处观察和操控多个会话用代理视图，用手机操控会话用远程控制，把持续集成结果这类外部事件推入会话则用频道（channels）。跨会话消息真正填补的，是两个由用户自己开启、自己驾驭的并行会话之间的那次交接。</p>



<p class="wp-block-paragraph">同版本一并落地的还有另外两项能力：面向团队版与企业版的自托管运行器（self-hosted runner），允许把网页、移动端和桌面端会话的实际计算放在自有机器或容器上执行，适合有数据驻留或内网访问要求的组织；以及压缩包插件源，支持通过 HTTPS 拉取单个 zip 文件安装插件，无需 git 或 npm，并可选用 SHA-256 校验值锁定。</p>



<p class="wp-block-paragraph">对于习惯同时开三四个终端跑不同模块的开发者而言，这次更新省下的不是算力，而是那些反复复制粘贴的碎片时间。</p>



<p class="has-small-font-size wp-block-paragraph">来源：9to5Mac、Anthropic 官方文档、@ClaudeDevs</p>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>几千个小文件拷到一半失败？换条命令就顺了</title>
		<link>https://mylogs.cn/%e5%87%a0%e5%8d%83%e4%b8%aa%e5%b0%8f%e6%96%87%e4%bb%b6%e6%8b%b7%e5%88%b0%e4%b8%80%e5%8d%8a%e5%a4%b1%e8%b4%a5%ef%bc%9f%e6%8d%a2%e6%9d%a1%e5%91%bd%e4%bb%a4%e5%b0%b1%e9%a1%ba%e4%ba%86/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Fri, 07 Aug 2026 12:54:23 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[Robocopy]]></category>
		<category><![CDATA[Windows技巧]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[效率工具]]></category>
		<category><![CDATA[文件传输]]></category>
		<guid isPermaLink="false">https://mylogs.cn/%e5%87%a0%e5%8d%83%e4%b8%aa%e5%b0%8f%e6%96%87%e4%bb%b6%e6%8b%b7%e5%88%b0%e4%b8%80%e5%8d%8a%e5%a4%b1%e8%b4%a5%ef%bc%9f%e6%8d%a2%e6%9d%a1%e5%91%bd%e4%bb%a4%e5%b0%b1%e9%a1%ba%e4%ba%86/</guid>

					<description><![CDATA[你搬过游戏目录或者手机备份就知道那种憋屈：几千个小文件丢进资源管理器，进度条先卡着不动半天，因为 Window [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">你搬过游戏目录或者手机备份就知道那种憋屈：几千个小文件丢进资源管理器，进度条先卡着不动半天，因为 Windows 要先把文件数清点一遍、扫完目录、准备好传输才真正开始复制。更糟的是中途一旦失败，没有续传，只能删掉半截文件夹从头再来。Windows 自带的 Robocopy 就是冲这个场景来的，它执行命令后立刻开拷，根本不数文件。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e8b4c2&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e8b4c2" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/6fb9b645907b69766d0c8f0581565329_header.webp" alt="几千个小文件拷到一半失败？换条命令就顺了" class="wp-image-3977" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/6fb9b645907b69766d0c8f0581565329_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/6fb9b645907b69766d0c8f0581565329_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/6fb9b645907b69766d0c8f0581565329_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/6fb9b645907b69766d0c8f0581565329_header-768x432.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：XDA Developers</figcaption></figure>





<h2 class="wp-block-heading">实测差多少</h2>



<p class="wp-block-paragraph">XDA 撰稿人 Abhishek Kumar Mishra 用 14GB、8000 多个文件的手机备份对比：Robocopy 用时 1 分 05 秒，系统自带复制 1 分 25 秒。再换 27.5GB 的游戏安装目录（4150 个文件、265 个文件夹），资源管理器跑了 4 分 44 秒，Robocopy 只要 3 分 39 秒。</p>



<h2 class="wp-block-heading">常用参数记这几个</h2>



<p class="wp-block-paragraph">打开终端，基本写法是 <code>robocopy 源路径 目标路径 /E</code>。</p>



<ul class="wp-block-list"><li><code>/E</code>：连同子文件夹一起复制，包括空文件夹；</li><li><code>/MT</code>：多线程同时拷多个文件，在固态硬盘上提升最明显；</li><li><code>/Z</code>：可重启模式，中断后尝试接着传，别把重试次数设太大，免得死循环；</li><li><code>/COPY:DAT</code>：保留数据、属性和时间戳；</li><li><code>/MIR</code>：镜像模式，让目标端和源端完全一致——目标端多出来的文件会被删掉，慎用；</li><li><code>/L</code>：只列出将要执行的操作、不真动文件，试跑专用。</li></ul>



<h2 class="wp-block-heading">让它自己跑</h2>



<p class="wp-block-paragraph">把常用命令存成 .bat 批处理文件，再用任务计划程序建个任务，设好每天几点触发并指向这个文件，增量同步就不用管了。</p>



<p class="wp-block-paragraph">说白了，Robocopy 不适合日常拖两个文件，它的主场是海量小文件和深层嵌套目录。上手前先加 <code>/L</code> 空跑一遍，尤其是打算用 <code>/MIR</code> 的时候。</p>



<p class="wp-block-paragraph">来源：XDA Developers</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>存了三份，照样找不回上周二那版</title>
		<link>https://mylogs.cn/%e5%ad%98%e4%ba%86%e4%b8%89%e4%bb%bd%ef%bc%8c%e7%85%a7%e6%a0%b7%e6%89%be%e4%b8%8d%e5%9b%9e%e4%b8%8a%e5%91%a8%e4%ba%8c%e9%82%a3%e7%89%88/</link>
		
		<dc:creator><![CDATA[steve, zhang]]></dc:creator>
		<pubDate>Thu, 06 Aug 2026 20:40:43 +0000</pubDate>
				<category><![CDATA[经验与技巧]]></category>
		<category><![CDATA[Restic]]></category>
		<category><![CDATA[命令行]]></category>
		<category><![CDATA[开源工具]]></category>
		<category><![CDATA[数据备份]]></category>
		<category><![CDATA[数据安全]]></category>
		<guid isPermaLink="false">https://mylogs.cn/%e5%ad%98%e4%ba%86%e4%b8%89%e4%bb%bd%ef%bc%8c%e7%85%a7%e6%a0%b7%e6%89%be%e4%b8%8d%e5%9b%9e%e4%b8%8a%e5%91%a8%e4%ba%8c%e9%82%a3%e7%89%88/</guid>

					<description><![CDATA[外置硬盘拖一份、云盘自动同步一份、第二块硬盘再放一份——你大概也是这么给自己壮胆的。MakeUseOf 撰稿人 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">外置硬盘拖一份、云盘自动同步一份、第二块硬盘再放一份——你大概也是这么给自己壮胆的。MakeUseOf 撰稿人 Afam Onyimadu 这样存了好几年，直到他要找一份改动前的表格，翻遍三个地方，拿到的全是同一个「此刻」的版本。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a90933e8c3ef&quot;}" data-wp-interactive="core/image" data-wp-key="6a90933e8c3ef" class="wp-block-image size-large aligncenter wp-lightbox-container"><img loading="lazy" decoding="async" width="1200" height="675" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://mylogs.cn/wp-content/uploads/2026/08/b92e61375cb2175d86575b6501056e6f_header.webp" alt="存了三份，照样找不回上周二那版" class="wp-image-3866" style="max-width:100%;height:auto;" srcset="https://mylogs.cn/wp-content/uploads/2026/08/b92e61375cb2175d86575b6501056e6f_header.webp 1200w, https://mylogs.cn/wp-content/uploads/2026/08/b92e61375cb2175d86575b6501056e6f_header-300x169.webp 300w, https://mylogs.cn/wp-content/uploads/2026/08/b92e61375cb2175d86575b6501056e6f_header-1024x576.webp 1024w, https://mylogs.cn/wp-content/uploads/2026/08/b92e61375cb2175d86575b6501056e6f_header-768x432.webp 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">图片来源：MakeUseOf</figcaption></figure>





<p class="wp-block-paragraph">我的判断是：这不是备份做得不够多，而是从头到尾就没做备份。副本只保存当下，删除会同步、覆盖会同步；勒索软件加密了本机文件，同步一跑，三份一起完蛋。</p>



<h2 class="wp-block-heading">先分清副本和备份</h2>



<p class="wp-block-paragraph">四个问题一问就明白：能取回昨天的版本吗？能确认备份文件本身完好吗？除了最新版还留着别的版本吗？今天的改动会不会覆盖昨天的备份？副本的答案基本都是否，而快照式备份工具的答案都是是。</p>



<h2 class="wp-block-heading">用 Restic 建一个带历史的仓库</h2>



<p class="wp-block-paragraph">Restic 是免费开源的命令行备份工具，Windows、macOS、Linux 都能用。它不复制文件夹，而是给每次备份拍一张快照，记录那一刻的完整状态，且只存变化的部分，留一长串历史并不怎么占空间。按官方快速上手，流程是这样：</p>



<ol class="wp-block-list"><li>先设好仓库位置和密码两个环境变量：<code>RESTIC_REPOSITORY</code> 指向存放目录，<code>RESTIC_PASSWORD</code> 填一个足够强的密码；</li><li>初始化仓库，只需做一次：<code>restic init</code>；</li><li>备份指定目录：<code>restic backup <目录路径></code>；</li><li>查看历史快照：<code>restic snapshots</code>，记下想要那一版的快照 ID；</li><li>取回文件：<code>restic restore --target <恢复到哪> <快照ID></code>；</li><li>定期体检：<code>restic check</code>，想连数据一起校验就加 <code>--read-data</code>。</li></ol>



<h2 class="wp-block-heading">两点提醒</h2>



<p class="wp-block-paragraph">一是真正的验证得恢复到另一台设备上——本机有隐藏故障时，在本机做的恢复测试看着都正常。二是别把副本一脚踢开，云盘同步、外置硬盘拷贝依旧是跨设备搬运数据最快的办法，只是从今天起别再管它叫备份。</p>



<p class="wp-block-paragraph">一个能回答「上周二那版在哪」的系统，才配叫保险。你手里那份，属于哪一类？</p>



<p class="wp-block-paragraph">来源：MakeUseOf</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
