{"@attributes":{"version":"2.0"},"channel":{"title":"TripleZ's Blog","link":"https:\/\/blog.triplez.cn\/","description":"Recent content on TripleZ's Blog","generator":"Hugo -- gohugo.io","language":"zh-cn","lastBuildDate":"Tue, 29 Aug 2023 23:13:39 +0800","item":[{"title":"\u5982\u4f55\u4f18\u96c5\u5730\u5bfb\u627e Tesla \uff1f","link":"https:\/\/blog.triplez.cn\/posts\/how-to-find-your-tesla-elegantly\/","pubDate":"Tue, 29 Aug 2023 23:13:39 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/how-to-find-your-tesla-elegantly\/","description":"<p>\u8fd1\u671f\uff0cTesla APP \u53d1\u5e03\u4e86 4.24.0 \u7248\u672c\uff0c\u5728 iOS \u7684\u201c\u5feb\u6377\u6307\u4ee4\u201d\u4e2d\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u90e8\u5206 Tesla \u547d\u4ee4\u4e86\uff01\u501f\u52a9\u5feb\u6377\u6307\u4ee4\uff0c\u4f60\u80fd\u5f88\u4f18\u96c5\u5730\u627e\u5230\u4f60\u7684 Tesla \uff01<\/p>\n<p>\u6709\u65f6\u5019\u6211\u4eec\u5c06\u8f66\u505c\u5728\u4e86\u5730\u5e93\u4e2d\u7684\u4e00\u4e2a\u4e0d\u5e38\u53bb\u7684\u4f4d\u7f6e\uff0c\u7528\u8f66\u65f6\u5f80\u5f80\u5c31\u627e\u4e0d\u5230\u8f66\u3002\u4e4b\u524d\u6211\u7ecf\u5e38\u4f7f\u7528 Tesla APP \u4e0a\u7684\u201c\u9e23\u7b1b\u201d\u529f\u80fd\u6765\u52a0\u901f\u81ea\u5df1\u627e\u8f66\u7684\u901f\u5ea6\uff0c\u800c\u5728\u8fd1\u671f\uff0cTesla APP \u53d1\u5e03\u4e86 4.24.0 \u7248\u672c\uff0c\u5728 iOS \u7684\u201c\u5feb\u6377\u6307\u4ee4\u201d\u4e2d\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u90e8\u5206 Tesla \u547d\u4ee4\u4e86\uff01\u8fd9\u662f\u4e00\u4e2a\u975e\u5e38\u4ee4\u4eba\u5174\u594b\u7684\u529f\u80fd\uff01\u56e0\u4e3a\u8fd9\u610f\u5473\u7740\uff0c\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u8bbe\u5b9a\u4e00\u4e2a iOS \u5feb\u6377\u6307\u4ee4\uff0c\u76f4\u63a5\u547c\u5524 Siri \u6765\u5bfb\u627e\u6211\u4eec\u7684 Tesla \u3002<\/p>\n<p><a href=\"https:\/\/www.icloud.com\/shortcuts\/5e5754b692b646e9a00e599a33a8dd36\">\u5b89\u88c5\u300c\u6211\u7684 Tesla \u5728\u54ea\u91cc?\u300d\u5feb\u6377\u6307\u4ee4<\/a><\/p>\n<p>\u4f7f\u7528\u65b9\u6cd5\uff1a<\/p>\n<ul>\n<li>\u5bf9 iPhone \u8bf4\u51fa\u300c\u563f Siri \uff0c\u6211\u7684 Tesla \u5728\u54ea\u91cc\uff1f\u300d\u6765\u89e6\u53d1\u5feb\u6377\u6307\u4ee4\uff0c\u8fd0\u884c\u540e\u6839\u636e\u63d0\u793a\u64cd\u4f5c\u5373\u53ef\u3002<\/li>\n<\/ul>\n<hr>\n<p>Q: \u4e3a\u4ec0\u4e48\u5feb\u6377\u6307\u4ee4\u5b89\u88c5\u540e\u65e0\u6cd5\u4f7f\u7528\uff1f<\/p>\n<p>A: \u8bf7\u786e\u4fdd iPhone \u4e0a\u7684 Tesla APP \u7248\u672c\u5728 4.24.0 \u53ca\u4ee5\u4e0a\u3002<\/p>\n<p>Q: \u53ef\u4ee5\u5728 Android \u8bbe\u5907\u4e0a\u4f7f\u7528\u5417\uff1f<\/p>\n<p>A: \u6b64\u5feb\u6377\u6307\u4ee4\u4f9d\u8d56 iOS\uff0c\u65e0\u6cd5\u5728 Android \u8bbe\u5907\u4e0a\u4f7f\u7528\u3002<\/p>"},{"title":"Mastering Git Cherry-pick","link":"https:\/\/blog.triplez.cn\/posts\/mastering-git-cherry-pick\/","pubDate":"Fri, 08 Apr 2022 00:33:11 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/mastering-git-cherry-pick\/","description":"<p>\u672c\u6587\u5e0c\u671b\u6559\u4f60\u5982\u4f55\u6210\u4e3a\u4e00\u4e2a <code>git cherry-pick<\/code> \u7684 \u201cmaster\u201d\uff01\u901a\u8fc7\u4f7f\u7528 <code>git cherry-pick<\/code> \u6765\u8f7b\u677e\u5730\u7ef4\u62a4\u591a\u4e2a\u5206\u652f\u7248\u672c\uff0c\u518d\u4e5f\u4e0d\u4f1a\u8ba9 multi-version maintaining  \u6210\u4e3a\u4f60\u5fc3\u5934\u4e0a\u7684\u90a3\u628a\u4ee4\u4f60\u5c61\u6b21\u75db\u5fc3\u7684\u5251\u4e86\uff01<\/p>\n<p>\u672c\u6587\u6240\u6709\u5185\u5bb9\u90fd\u4f1a\u57fa\u4e8e\u4ee5\u4e0b\uff08\u7cbe\u5fc3\u6784\u9020\u7684\uff09\u793a\u4f8b\uff0c\u8be5\u4f8b\u5b50\u6db5\u76d6\u4e86\u5927\u90e8\u5206\u5de5\u7a0b\u4e0a\u5bb9\u6613\u51fa\u73b0\u7684 Git log pattern\uff08\u5982\u6709\u5176\u4ed6 corner-case \uff0c\u6b22\u8fce<a href=\"mailto:me@triplez.cn\">\u8054\u7cfb\u6211<\/a>\uff0c\u4e00\u8d77\u52aa\u529b\u8ba9\u8be5\u6587\u53d8\u5f97\u5bf9\u5927\u5bb6\u66f4\u6709\u5e2e\u52a9\uff09\u3002<\/p>\n<p>\u8d2f\u7a7f\u672c\u6587\u7684\u793a\u4f8b\u573a\u666f\uff0c\u8fd9\u662f\u8be5\u793a\u4f8b\u57fa\u4e8e\u65f6\u95f4\u5e8f\u7684 Git \u63d0\u4ea4\u5386\u53f2\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-18\">18<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ git --no-pager log --oneline --graph --date-order\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* f2c1619 <span class=\"o\">(<\/span>HEAD -&gt; red<span class=\"o\">)<\/span> R6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">*   e6899ea R5 merge branch <span class=\"s1\">&#39;blue&#39;<\/span> into <span class=\"s1\">&#39;red&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span><span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>* <span class=\"se\">\\ <\/span>  0979d45 R4 merge branch <span class=\"s1\">&#39;green&#39;<\/span> into <span class=\"s1\">&#39;red&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span><span class=\"se\">\\ \\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span><span class=\"p\">|<\/span> <span class=\"p\">|<\/span> * 186da41 <span class=\"o\">(<\/span>blue<span class=\"o\">)<\/span> B3\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span> * <span class=\"p\">|<\/span> c950910 <span class=\"o\">(<\/span>green<span class=\"o\">)<\/span> G3\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* <span class=\"p\">|<\/span> <span class=\"p\">|<\/span> 17e2629 R3\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span> <span class=\"p\">|<\/span> * 69edfc9 B2\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span> * <span class=\"p\">|<\/span> 059425a G2\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span> * <span class=\"p\">|<\/span> 05719c8 G1\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span> <span class=\"p\">|<\/span> * ebb218d B1\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span> <span class=\"p\">|<\/span>\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* \/ 8c6595b R2\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">|<\/span>\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 6581ff8 R1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 2787f8f <span class=\"o\">(<\/span>master<span class=\"o\">)<\/span> init commit\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><details>\n<summary><mark>\u5feb\u901f\u521b\u5efa\u8be5\u793a\u4f8b\u3002<\/mark><\/summary>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-17\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-18\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-19\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-20\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-21\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-22\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-23\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-24\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-25\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-26\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-27\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-27\">27<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">mkdir cherry-pick<span class=\"p\">;<\/span> <span class=\"nb\">cd<\/span> cherry-pick\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git init\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;init&#34;<\/span> &gt;&gt; init<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;init commit&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git checkout -b red\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;red&#34;<\/span> &gt;&gt; red<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;R1&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git branch green\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git branch blue\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;red&#34;<\/span> &gt;&gt; red<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;R2&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git checkout blue\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;blue&#34;<\/span> &gt;&gt; blue<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;B1&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git checkout green\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;green&#34;<\/span> &gt;&gt; green<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;G1&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;green&#34;<\/span> &gt;&gt; green<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;G2&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git checkout blue\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;blue&#34;<\/span> &gt;&gt; blue<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;B2&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git checkout red\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;red&#34;<\/span> &gt;&gt; red<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;R3&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git checkout green\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;green&#34;<\/span> &gt;&gt; green<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;G3&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git checkout blue\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;blue&#34;<\/span> &gt;&gt; blue<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;B3&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git checkout red\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git merge green -m <span class=\"s2\">&#34;R4 merge branch &#39;green&#39; into &#39;red&#39;&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git merge blue -m <span class=\"s2\">&#34;R5 merge branch &#39;blue&#39; into &#39;red&#39;&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s2\">&#34;red&#34;<\/span> &gt;&gt; red<span class=\"p\">;<\/span> git add -A<span class=\"p\">;<\/span> git commit -m <span class=\"s2\">&#34;R6&#34;<\/span><span class=\"p\">;<\/span> sleep <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git --no-pager log --oneline --graph --date-order\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/details>\n<br\/>\n<p>\u5f53\u524d Git \u63d0\u4ea4\u5386\u53f2\u793a\u610f\u56fe\u5982\u4e0b\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/blog.triplez.cn\/img\/mastering-git-cherry-pick\/git-cherry-pick-overall.jpg#center\"\n         alt=\"\u63d0\u4ea4\u8bb0\u5f55\u793a\u610f\u56fe\"\/> <figcaption>\n            \u63d0\u4ea4\u8bb0\u5f55\u793a\u610f\u56fe\n        <\/figcaption>\n<\/figure>\n\n<p>Git cherry-pick \u7684\u547d\u4ee4\u7684\u57fa\u672c\u539f\u7406\u662f\u6839\u636e\u7528\u6237\u6240\u9009\u62e9\u7684\u63d0\u4ea4\uff0c\u6839\u636e\u63d0\u4ea4\u4e2d\u7684\u5dee\u5f02\u4fe1\u606f\uff08diff\uff09\u5c06\u8fd9\u4e9b\u63d0\u4ea4\u79fb\u690d\u81f3\u7528\u6237\u76ee\u6807\u7248\u672c\u4e2d\u3002\u5982\u5c06 hotfix \u5e94\u7528\u81f3\u5176\u4ed6 LTS \u7248\u672c\u4e2d\u662f\u8be5\u529f\u80fd\u7684\u4e00\u4e2a\u5178\u578b\u5e94\u7528\u3002<\/p>\n<p><code>git cherry-pick<\/code> \u7684\u5927\u81f4\u7528\u6cd5\u4e3a\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">git cherry-pick <span class=\"o\">[<\/span>options<span class=\"o\">]<\/span> &lt;commit&gt;...\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6b64\u5904\u7684 <code>&lt;commit&gt;...<\/code> \u5373\u4e3a\u7528\u6237\u5e0c\u671b\u79fb\u690d\u7684\u63d0\u4ea4\uff08\u96c6\u5408\uff09\uff0c\u8fd9\u662f\u672c\u6587\u8ba8\u8bba\u7684\u8981\u70b9\u3002<\/p>\n<p><code>&lt;commit&gt;<\/code> \u53ef\u4ee5\u4e3a\u5355\u4e00\u63d0\u4ea4\uff08commit\uff09\uff0c\u4e5f\u53ef\u4ee5\u4e3a\u4e00\u4e2a\u7248\u672c\u533a\u95f4\uff08revision range\uff09\u3002\u82e5\u4e3a revision range\uff0c\u5219\u8be5\u547d\u4ee4\u4f1a\u5c06\u8be5 revision range \u4e2d\u7684\u6240\u6709 commit \u90fd\u89e3\u6790\u51fa\u6765\uff0c\u6700\u7ec8\u6210\u4e3a\u4e00\u8fde\u4e32\u7684\u5355\u4e00 commit <sup id=\"fnref:1\"><a href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\">1<\/a><\/sup>\u3002<code>cherry-pick<\/code> \u53ef\u4ee5\u540c\u65f6\u63a5\u53d7\u591a\u4e2a <code>&lt;commit&gt;<\/code> \uff0c\u6b64\u65f6\u8868\u73b0\u7c7b\u4f3c\u4e8e <code>git rev-list<\/code> \u4e2d\u7684 <code>--no-walk<\/code> \u884c\u4e3a<sup id=\"fnref:2\"><a href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\">2<\/a><\/sup>\u3002<\/p>\n<p>\u90a3\u6211\u4eec\u4f9d\u6b21\u6765\u8ba8\u8bba <code>&lt;commit&gt;...<\/code> \u4e3a\u5355\u4e00 commit \u4ee5\u53ca revision range \u7684\u60c5\u51b5\u3002<\/p>\n<h2 id=\"single-commit\">Single commit<\/h2>\n<h3 id=\"normal-commit\">Normal commit<\/h3>\n<p>\u56de\u5230\u4e0a\u6587\u7684\u4f8b\u5b50\uff0c\u5982\u679c\u4ec5\u9700\u8981\u5c06 <code>G2<\/code> \u9009\u53d6\u51fa\u6765\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u64cd\u4f5c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u56de\u5230 master \u65b0\u5efa\u4e00\u6761\u5206\u652f\u7528\u4e8e\u6d4b\u8bd5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git checkout master\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git checkout -b cp-single-normal-commit\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># G2 \u7684\u63d0\u4ea4 SHA \u503c\u4e3a 059425a<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git cherry-pick 059425a\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6b64\u65f6\u4f1a\u51fa\u73b0\u5408\u5e76\u51b2\u7a81\uff08merge conflict\uff09\uff0c\u8f93\u51fa\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-4-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">CONFLICT (modify\/delete): green deleted in HEAD and modified in 059425a (G2). Version 059425a (G2) of green left in tree.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">error: could not apply 059425a... G2\n<\/span><\/span><span class=\"line\"><span class=\"cl\">hint: after resolving the conflicts, mark the corrected paths\n<\/span><\/span><span class=\"line\"><span class=\"cl\">hint: with &#39;git add &lt;paths&gt;&#39; or &#39;git rm &lt;paths&gt;&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">hint: and commit the result with &#39;git commit&#39;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8fd9\u6bb5\u5185\u5bb9\u544a\u77e5\u6211\u4eec\u8fd9\u4e9b\u4fe1\u606f\uff1a<code>green<\/code> \u6587\u4ef6\u5728\u5f53\u524d\uff08\u6682\u5b58\uff09\u7248\u672c <code>HEAD<\/code> \u4e2d\u5e76\u4e0d\u5b58\u5728\uff0c\u4f46\u5728\u9009\u53d6\u7684 <code>G2<\/code> \u63d0\u4ea4\u4e2d\u5b58\u5728\u3002\u5982\u679c\u9700\u8981\u8be5\u6587\u4ef6\uff0c\u5219\u4f7f\u7528 <code>git add<\/code> \u5c06\u5176\u63d0\u4ea4\u81f3\u6682\u5b58\u533a\uff0c\u82e5\u5e0c\u671b\u4fdd\u7559\u5f53\u524d\u6682\u5b58\u7248\u672c\u7684\u72b6\u6001\uff0c\u5373\u5220\u9664\u8be5\u6587\u4ef6\uff0c\u5219\u4f7f\u7528 <code>git rm<\/code> \u5c06 <code>green<\/code> \u6587\u4ef6\u820d\u5f03\u3002<\/p>\n<p>\u6211\u4eec\u5e0c\u671b\u5728\u9009\u53d6 G2 \u4e4b\u540e\u80fd\u591f\u4fdd\u7559 <code>green<\/code> \u6587\u4ef6\uff0c\u6545\u91c7\u53d6\u5982\u4e0b\u64cd\u4f5c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-5-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-5-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-5-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-5-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u5c06 green \u63d0\u4ea4\u81f3\u6682\u5b58\u533a<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git add green\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u5df2\u4fee\u590d\u6240\u6709\u5408\u5e76\u51b2\u7a81\uff0c\u7ee7\u7eed\u8fdb\u884c cherry-pick<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git cherry-pick --continue\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6b64\u65f6 cherry-pick \u64cd\u4f5c\u5df2\u7ecf\u5b8c\u6210\uff0c\u5982\u679c\u7ee7\u7eed\u6267\u884c <code>git cherry-pick --continue<\/code> \uff0c\u5219\u6b64\u65f6\u4f1a\u663e\u793a <code>error: no cherry-pick or revert in progress<\/code> \uff0c\u5373\u5f53\u524d\u6ca1\u6709\u8fdb\u884c\u4efb\u4f55 cherry-pick \u4efb\u52a1\u3002<\/p>\n<p>\u67e5\u770b\u4e00\u4e0b\u5f53\u524d\u7684\u63d0\u4ea4\u8bb0\u5f55\uff0c\u5219\u4f1a\u53d1\u73b0 <code>G2<\/code> \u5df2\u7ecf\u5728\u6211\u4eec\u5f53\u524d\u7684\u5206\u652f <code>cp-single-normal-commit<\/code> \u4e0a\u4e86\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-6-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ git --no-pager log --oneline --graph --date-order\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* <span class=\"m\">0457362<\/span> <span class=\"o\">(<\/span>HEAD -&gt; cp-single-normal-commit<span class=\"o\">)<\/span> G2\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 2787f8f <span class=\"o\">(<\/span>master<span class=\"o\">)<\/span> init commit\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"merge-commit\">Merge commit<\/h3>\n<p>\u90a3\u5982\u679c\u6211\u4eec\u60f3\u9009\u53d6\u4e00\u4e2a merge commit \u5462\uff0c\u6bd4\u5982\u5c06 <code>R4<\/code> \u9009\u53d6\u51fa\u6765\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-7-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-7-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-7-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-7-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-7-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u56de\u5230 master \u65b0\u5efa\u4e00\u6761\u5206\u652f\u7528\u4e8e\u6d4b\u8bd5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git checkout master\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git checkout -b cp-single-merge-commit\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># R4 \u7684\u63d0\u4ea4 SHA \u503c\u4e3a 0979d45<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git cherry-pick 0979d45\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5f53\u6267\u884c\u5b8c\u8fd9\u6761 <code>cherry-pick<\/code> \u547d\u4ee4\u4e4b\u540e\uff0c\u4f60\u4f1a\u5f97\u5230\u4ee5\u4e0b\u8f93\u51fa\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-8-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-8-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">error: commit 0979d45f1b46f72730188c5c01b3f2c7f41b18e6 is a merge but no -m option was given.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">fatal: cherry-pick failed\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c<code>cherry-pick<\/code> \u4e0d\u5904\u7406 merge commit \u5e76\u76f4\u63a5\u62a5\u9519\u3002\u56e0\u4e3a\u5728 merge commit \u4e2d\uff0c\u4f1a\u6709\u591a\u4e2a parent \u4fe1\u606f\uff0c\u4f46\u6b64\u65f6 Git \u5e76\u4e0d\u77e5\u9053\u8be5\u4f7f\u7528\u54ea\u4e2a parent \u4f5c\u4e3a mainline\u3002\u5728\u9519\u8bef\u4fe1\u606f\u4e2d\uff0c\u4e5f\u540c\u65f6\u63d0\u793a\u4e86\u6211\u4eec\uff0c\u5982\u679c\u8981\u9009\u53d6 merge commit \uff0c\u5219\u9700\u8981\u4f7f\u7528 <code>-m<\/code> \uff08\u4ea6\u4e3a <code>--mainline<\/code>\uff09\u9009\u9879\u6765\u6307\u5b9a\u54ea\u4e2a parent \u662f\u4e3b\u7ebf<sup id=\"fnref:3\"><a href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\">3<\/a><\/sup>\u3002<\/p>\n<p>\u901a\u8fc7 <code>git show<\/code> \u547d\u4ee4\u53ef\u4ee5\u83b7\u5f97 merge commit \u7684\u591a\u4e2a parent\uff0c\u4e14\u4ece 1 \u5f00\u59cb\u7f16\u53f7\u3002\u7531\u4e8e\u8be5\u4f8b\u4e2d\u6211\u4eec\u9700\u8981\u9009\u53d6\u7684 mainline parent \u662f <code>R3(17e2629)<\/code> \uff0c\u56e0\u6b64\u5728 <code>cherry-pick<\/code> \u4e2d\u9009\u62e9\u7684\u662f <code>-m 1<\/code>\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-9-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-9-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-9-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-9-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-9-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-9-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-9-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-9-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-9-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-9-5\">5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-9-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-9-6\">6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-9-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-9-7\">7<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ git --no-pager show 0979d45\n<\/span><\/span><span class=\"line\"><span class=\"cl\">commit 0979d45f1b46f72730188c5c01b3f2c7f41b18e6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Merge: 17e2629 c950910\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Author: Triple-Z &lt;me@triplez.cn&gt;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Date:   Thu Mar <span class=\"m\">31<\/span> 01:29:31 <span class=\"m\">2022<\/span> +0800\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    R4 merge branch <span class=\"s1\">&#39;green&#39;<\/span> into <span class=\"s1\">&#39;red&#39;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8ba9\u6211\u4eec\u518d\u6765\u8bd5\u4e00\u6b21\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-10-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-10-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ git cherry-pick -m <span class=\"m\">1<\/span> 0979d45\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>cherry-pick<\/code> \u5706\u6ee1\u5b8c\u6210\uff01\u6b64\u65f6\u518d\u770b\u4e00\u4e0b\u5f53\u524d\u7684\u63d0\u4ea4\u8bb0\u5f55\uff0c\u5219\u53d1\u73b0\u5728 <code>cp-single-merge-commit<\/code> \u5206\u652f\u4e0a\u4ea7\u751f\u4e86\u4e00\u4e2a\u65b0\u7684 <code>R4<\/code> \u63d0\u4ea4\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-11-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-11-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-11-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-11-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-11-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-11-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ git --no-pager log --oneline --graph --date-order\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 987aba7 <span class=\"o\">(<\/span>HEAD -&gt; cp-single-merge-commit<span class=\"o\">)<\/span> R4 merge branch <span class=\"s1\">&#39;green&#39;<\/span> into <span class=\"s1\">&#39;red&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 2787f8f <span class=\"o\">(<\/span>master<span class=\"o\">)<\/span> init commit\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u73b0\u5728\u6211\u4eec\u518d\u6765\u8bb2\u8bb2\u521a\u521a\u7684 <code>-m 1<\/code> \u53d1\u751f\u4e86\u4ec0\u4e48\u3002\u5982\u679c\u73b0\u5728\u53bb\u770b <code>cp-single-merge-commit<\/code> \u8fd9\u4e2a\u6d4b\u8bd5\u5206\u652f\u4e0a\u7684\u6587\u4ef6\uff0c\u5219\u4f1a\u53d1\u73b0\u6709 <code>green<\/code> \uff0c\u800c\u6ca1\u6709 <code>red<\/code> \u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-12-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-12-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-12-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-12-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-12-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-12-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-12-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-12-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ ls -lh\n<\/span><\/span><span class=\"line\"><span class=\"cl\">total <span class=\"m\">16<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-rw-r--r--  <span class=\"m\">1<\/span> triplez  staff    18B  <span class=\"m\">4<\/span>  <span class=\"m\">7<\/span> 19:06 green\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-rw-r--r--  <span class=\"m\">1<\/span> triplez  staff     5B  <span class=\"m\">3<\/span> <span class=\"m\">31<\/span> 01:29 init\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8fd9\u662f\u56e0\u4e3a\u6211\u4eec\u5728\u9009\u53d6 merge commit \u65f6\uff0c\u4f7f\u7528\u7684\u662f mainline 1 \uff0c\u5373 <code>red<\/code> \u5206\u652f\u3002\u56e0\u6b64 <code>cherry-pick<\/code> \u4e8b\u5b9e\u662f\u4ee5 <code>red<\/code> \u4e3a\u57fa\u7840\uff0c\u5bfb\u627e mainline 2 <code>green<\/code> \u5206\u652f\u4e0e <code>red<\/code> \u7684\u5dee\u5f02\uff0c\u9009\u53d6\u7684\u5c31\u662f <code>green<\/code> \u5206\u652f\u4e0a\u6240\u505a\u7684\u4fee\u6539\u4e86\u3002<\/p>\n<h2 id=\"revision-range\">Revision range<\/h2>\n<p>Git \u4e2d\u53ef\u7528\u591a\u79cd\u65b9\u6cd5\u6765\u8868\u793a revision \uff08\u7248\u672c\uff0c\u6216\u4fee\u8ba2\u5feb\u7167\uff09<sup id=\"fnref:4\"><a href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\">4<\/a><\/sup>\uff0c\u8fd9\u91cc\u6211\u4eec\u4e3b\u8981\u8ba8\u8bba revision range\uff08\u7248\u672c\u533a\u95f4\uff09<sup id=\"fnref:5\"><a href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\">5<\/a><\/sup>\u3002<\/p>\n<p>\u5bf9\u4e8e revision range\uff0c\u6709\u4ee5\u4e0b\u516d\u79cd\u8868\u793a\u6cd5\uff1a<\/p>\n<ol>\n<li>\n<p><code>^&lt;rev&gt;<\/code> \uff1a\uff08\u8131\u5b57\u7b26-\u8868\u793a\u6cd5\uff09\u8868\u793a<strong>\u6392\u9664<\/strong> <code>&lt;rev&gt;<\/code> \u4ee5\u53ca\u5b83<u>\u6240\u6709\u53ef\u5230\u8fbe<\/u>\u7684\u7236\u8f88 commit\u3002<\/p>\n<\/li>\n<li>\n<p><code>&lt;r1&gt;..&lt;r2&gt;<\/code>\uff08\u4e24\u70b9-\u8303\u56f4\u8868\u793a\u6cd5\uff09\uff1a\u7b49\u540c\u4e8e <code>^r1 r2<\/code> \uff0c\u5373 <strong>\u5305\u542b<\/strong> <code>&lt;r2&gt;<\/code> \u4ee5\u53ca\u5176\u53ef\u5230\u8fbe\u7684\u7236\u8f88 commit \uff0c\u5e76<strong>\u6392\u9664<\/strong> <code>&lt;r1&gt;<\/code> \u4ee5\u53ca\u5176\u53ef\u5230\u8fbe\u7684\u7236\u8f88 commit\u3002<\/p>\n<blockquote>\n<p>\u5982\u679c\u9700\u8981\u5305\u62ec <code>&lt;r1&gt;<\/code>\uff0c\u53ef\u4f7f\u7528\u8fd9\u79cd\u5199\u6cd5\uff1a<code>&lt;r1&gt;^..&lt;r2&gt;<\/code> \u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p><code>&lt;r1&gt;...&lt;r2&gt;<\/code> \uff08\u4e09\u70b9-\u5bf9\u79f0\u5dee\u5206\u8868\u793a\u6cd5\uff09\uff1a<strong>\u5305\u542b<\/strong>\u6240\u6709 <code>&lt;r1&gt;<\/code> <u>\u6216<\/u> <code>&lt;r2&gt;<\/code> \u53ca\u5176\u53ef\u5230\u8fbe\u7684\u7236\u8f88 commit\uff0c\u5e76<strong>\u6392\u9664<\/strong> <code>&lt;r1&gt;<\/code> <u>\u548c<\/u> <code>&lt;r2&gt;<\/code> \u4e24\u8005\u53ef\u5230\u8fbe\u7684<u>\u5171\u540c<\/u>\u7236\u8f88 commit\u3002<\/p>\n<\/li>\n<li>\n<p><code>&lt;rev&gt;^@<\/code> \uff1a<strong>\u5305\u542b<\/strong> <code>&lt;rev&gt;<\/code> \u7684\u6240\u6709\u7236\u8f88\uff0c\u4f46<strong>\u6392\u9664<\/strong> <code>&lt;rev&gt;<\/code> \u672c\u8eab\u3002<\/p>\n<\/li>\n<li>\n<p><code>&lt;rev&gt;^!<\/code> \uff1a<strong>\u5305\u542b<\/strong> <code>&lt;rev&gt;<\/code> \u672c\u8eab\uff0c\u4f46<strong>\u6392\u9664<\/strong> <code>&lt;rev&gt;<\/code> \u6240\u6709\u7236\u8f88\u3002\u5373\u8868\u793a\u5355\u4e2a <code>&lt;rev&gt;<\/code> commit\u3002<\/p>\n<blockquote>\n<p>\u6ce8\u610f\uff1a <code>&lt;rev&gt;<\/code> \uff08\u8868\u793a <code>&lt;rev&gt;<\/code> \u53ca\u5176\u6240\u6709\u7236\u8f88\uff09\u5728 revision range \u7684\u8bed\u5883\u4e2d\u4e0d\u540c\u4e8e <code>&lt;rev&gt;^!<\/code> \u3002\u4ec5\u6709\u6307\u5b9a <code>--no-walk<\/code> \u53c2\u6570\u65f6\uff0c\u4e24\u8005\u624d\u53ef\u4ee5\u8ba4\u4e3a\u662f\u76f8\u540c\u7684\uff08\u90fd\u4ec5\u8868\u793a <code>&lt;rev&gt;<\/code> \u672c\u8eab\uff09\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p><code>&lt;rev&gt;^-[&lt;n&gt;]<\/code> \uff1a<strong>\u5305\u542b<\/strong> <code>&lt;rev&gt;<\/code> \u53ca\u5176\u6240\u6709\u7236\u8f88\uff0c\u4f46<strong>\u6392\u9664<\/strong> <code>&lt;rev&gt;<\/code> \u7684\u7b2c <code>&lt;n&gt;<\/code> \u4e2a parent \u53ca\u5176\u53ef\u5230\u8fbe\u7684\u6240\u6709\u7236\u8f88\u3002 <code>&lt;n&gt;<\/code> \u7684\u7f3a\u7701\u503c\u4e3a 1\u3002<\/p>\n<\/li>\n<\/ol>\n<p>\u770b\u8d77\u6765\u5f88\u590d\u6742\uff0c\u6211\u4eec\u6765\u7528\u6587\u4e2d\u7684\u573a\u666f\u6765\u4e3e\u4e24\u4e2a\u8303\u56f4\u8868\u793a\u6cd5\u7684\u4f8b\u5b50\u3002<\/p>\n<p>\u9996\u5148\uff0c\u8003\u8651 <code>&lt;r1&gt;<\/code> \u548c <code>&lt;r2&gt;<\/code> \u90fd\u5728\u540c\u4e00\u5206\u652f\u4e0a\u7684\u60c5\u51b5\uff0c\u5982 <code>G1 (05719c8)<\/code> \u548c <code>G3 (c950910)<\/code>\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-13-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-13-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-13-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-13-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-13-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-13-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-13-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-13-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-13-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-13-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u56de\u5230 master \u65b0\u5efa\u4e00\u6761\u5206\u652f\u7528\u4e8e\u6d4b\u8bd5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git checkout master\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git checkout -b cp-range-same-branch\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># G1 \u7684\u63d0\u4ea4 SHA \u503c\u4e3a 05719c8\uff0cG3 \u7684 SHA \u503c\u4e3a c950910<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git cherry-pick 05719c8^..c950910\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>05719c8(G1)^..c950910(G3)<\/code> \u7684\u542b\u4e49\u5e94\u5f53\u662f\uff1a<\/p>\n<ul>\n<li><strong>\u5305\u542b<\/strong> <code>G3<\/code> \u53ca\u5176\u6240\u6709\u7236\u8f88\u3002<\/li>\n<li>\u5e76<strong>\u6392\u9664<\/strong> <code>G1<\/code> \u7684\u6240\u6709\u7236\u8f88\uff08\u4e0d\u6392\u9664 <code>G1<\/code>\uff09\u3002<\/li>\n<\/ul>\n<p>\u56e0\u6b64\u7ed3\u679c\u5e94\u5f53\u662f\u9009\u51fa\u4ece <code>G1<\/code> \u5230 <code>G3<\/code> \u7684\u6240\u6709\u63d0\u4ea4\uff0c\u793a\u610f\u56fe\u5982\u4e0b\uff0c\u9ec4\u8272\u4e3a\u88ab\u5305\u542b\u7684\u8282\u70b9\uff0c\u7070\u8272\u5219\u4ee3\u8868\u88ab\u6392\u9664\u7684\u8282\u70b9\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/blog.triplez.cn\/img\/mastering-git-cherry-pick\/git-cherry-pick-g1-g3.jpg#center\"\n         alt=\"git cheery-pick G1^..G3\"\/> <figcaption>\n            git cheery-pick G1^..G3\n        <\/figcaption>\n<\/figure>\n\n<p>\u8ba9\u6211\u4eec\u518d\u770b\u770b\u5f53\u524d\u7684\u63d0\u4ea4\u8bb0\u5f55\u3002Bingo\uff01 <code>G1<\/code> \uff0c<code>G2<\/code> \uff0c<code>G3<\/code> \u8fd9\u4e09\u4e2a\u63d0\u4ea4\u5df2\u7ecf\u88ab\u9009\u53d6\u51fa\u6765\u4e86\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-14-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-14-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-14-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-14-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-14-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-14-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-14-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-14-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-14-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-14-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ git --no-pager log --oneline --graph --date-order\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 32eac39 <span class=\"o\">(<\/span>HEAD -&gt; cp-range-same-branch<span class=\"o\">)<\/span> G3\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* d3b1130 G2\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* c82c4c7 G1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 2787f8f <span class=\"o\">(<\/span>master<span class=\"o\">)<\/span> init commit\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u90a3 <code>&lt;r1&gt;<\/code> \u548c <code>&lt;r2&gt;<\/code> \u5728\u4e0d\u540c\u5206\u652f\u4e0a\uff0c\u662f\u4ec0\u4e48\u60c5\u51b5\u5462\uff1f<\/p>\n<p>\u6211\u4eec\u4ee5 <code>G1 (05719c8)<\/code> \u548c <code>B2 (69edfc9)<\/code> \u4f5c\u4e3a\u7528\u4f8b\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-15-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-15-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-15-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-15-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-15-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-15-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-15-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-15-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-15-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-15-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u56de\u5230 master \u65b0\u5efa\u4e00\u6761\u5206\u652f\u7528\u4e8e\u6d4b\u8bd5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git checkout master\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git checkout -b cp-range-diff-branch\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># G1 \u7684\u63d0\u4ea4 SHA \u503c\u4e3a 05719c8\uff0cB2 \u7684 SHA \u503c\u4e3a 69edfc9<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ git cherry-pick 05719c8^..69edfc9\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>05719c8(G1)^..69edfc9(B2)<\/code> \u7684\u542b\u4e49\u5e94\u5f53\u662f\uff1a<\/p>\n<ul>\n<li><strong>\u5305\u542b<\/strong> <code>B2<\/code> \u53ca\u5176\u6240\u6709\u7236\u8f88\u3002<\/li>\n<li>\u5e76<strong>\u6392\u9664<\/strong> <code>G1<\/code> \u7684\u6240\u6709\u7236\u8f88\uff08\u4e0d\u6392\u9664 <code>G1<\/code>\uff09\u3002<\/li>\n<\/ul>\n<p>\u7531\u4e8e <code>B2<\/code> \u53ca\u5176\u6240\u6709\u7236\u8f88\u4e2d\uff0c\u5e76\u4e0d\u5305\u62ec <code>G1<\/code>\u3002\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u5c06 <code>G1^..B2<\/code> \u7406\u89e3\u4e3a\u5305\u542b <code>B2<\/code> \u53ca\u5176\u6240\u6709\u7236\u8f88\uff0c\u4e14\u6392\u9664 <code>B2<\/code> \u548c <code>G1<\/code> \u7684\u5171\u540c\u7236\u8f88\u540e\u7684\u7ed3\u679c\u3002\u81ea\u7136\u5c31\u53ea\u5269\u4e0b <code>B1<\/code> \u548c <code>B2<\/code> \u4e24\u4e2a commit \u4e86\u3002\u793a\u610f\u56fe\u5982\u4e0b\uff0c\u9ec4\u8272\u4e3a\u88ab\u5305\u542b\u7684\u8282\u70b9\uff0c\u7070\u8272\u5219\u4ee3\u8868\u88ab\u6392\u9664\u7684\u8282\u70b9\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/blog.triplez.cn\/img\/mastering-git-cherry-pick\/git-cherry-pick-g1-b2.jpg#center\"\n         alt=\"git cherry-pick G1^..B2\"\/> <figcaption>\n            git cherry-pick G1^..B2\n        <\/figcaption>\n<\/figure>\n\n<p>\u8ba9\u6211\u4eec\u518d\u770b\u770b\u5f53\u524d\u7684\u63d0\u4ea4\u8bb0\u5f55\uff0c\u786e\u5b9e\u662f\u53ea\u9009\u62e9\u4e86 <code>B1<\/code> \u548c <code>B2<\/code> \u4e24\u4e2a\u63d0\u4ea4\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-16-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-16-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-16-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-16-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-16-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-16-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-16-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-16-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ git --no-pager log --oneline --graph --date-order\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* e63f214 <span class=\"o\">(<\/span>HEAD -&gt; cp-range-diff-branch<span class=\"o\">)<\/span> B2\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* aed6717 B1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 2787f8f <span class=\"o\">(<\/span>master<span class=\"o\">)<\/span> init commit\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"rerere\">Rerere<\/h2>\n<p>Rerere \u662f\u201c\u91cd\u7528\u5df2\u8bb0\u5f55\u7684\u51b2\u7a81\u89e3\u51b3\u65b9\u6848\uff08reuse recorded resolution\uff09\u201d\uff0c\u5b83\u662f\u4e00\u79cd\u7b80\u5316\u51b2\u7a81\u89e3\u51b3\u7684\u65b9\u6cd5<sup id=\"fnref:6\"><a href=\"#fn:6\" class=\"footnote-ref\" role=\"doc-noteref\">6<\/a><\/sup> <sup id=\"fnref:7\"><a href=\"#fn:7\" class=\"footnote-ref\" role=\"doc-noteref\">7<\/a><\/sup>\u3002<\/p>\n<p>\u5982\u679c\u4f60\u7ecf\u5e38\u8fdb\u884c\u5927\u91cf\u7684 merge, rebase \u6216 cherry-pick\uff0c\u6216\u5728\u7ef4\u62a4\u4e00\u4e2a\u957f\u671f\u4e0d\u540c\u4e8e\u4e3b\u5e72\u7684\u5206\u652f<sup id=\"fnref:8\"><a href=\"#fn:8\" class=\"footnote-ref\" role=\"doc-noteref\">8<\/a><\/sup>\uff0c\u90a3\u4e48\u975e\u5e38\u5efa\u8bae\u5f00\u542f <code>rerere<\/code> \u529f\u80fd\u3002<\/p>\n<p>\u5f00\u542f <code>rerere<\/code> \u975e\u5e38\u7b80\u5355\uff0c\u4ec5\u9700\u8981\u8fdb\u884c\u4e00\u6b21\u5168\u5c40\u914d\u7f6e\u5373\u53ef\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-17-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-17-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ git config --global rerere.enabled <span class=\"nb\">true<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p>\u5728\u672c\u5730\u4ed3\u5e93\u4e2d\u76f4\u63a5\u521b\u5efa <code>.git\/rr-cache<\/code> \u6587\u4ef6\u5939\uff0c\u4e5f\u53ef\u4ee5\u4e3a\u8be5\u4ed3\u5e93\u5f00\u542f <code>rerere<\/code>\u3002<\/p>\n<\/blockquote>\n<h2 id=\"whats-next\">What&rsquo;s next<\/h2>\n<p>\u5728\u7b14\u8005\u64b0\u5199\u8be5\u6587\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e5f\u770b\u5230\u4e86 Microsoft \u7684 Raymond Chen \u5199\u7684 <a href=\"https:\/\/devblogs.microsoft.com\/oldnewthing\/20180323-01\/?p=98325\">Stop cherry-picking, start merging \u7cfb\u5217\u6587\u7ae0<\/a>\uff0c\u4ed6\u5728\u5176\u4e2d\u63d0\u53ca\u4e86\u8bb8\u591a\u5de5\u7a0b\u5b9e\u8df5\u4e2d cherry-pick \u53ef\u80fd\u5bfc\u81f4\u7684 pitfall\u3002\u63a5\u4e0b\u6765\u7684\u65f6\u95f4\u91cc\uff0c\u7b14\u8005\u5c06\u4f1a\u9010\u4e00\u9605\u8bfb\u8be5\u7cfb\u5217\u6587\u7ae0\uff0c\u5e76\u6839\u636e\u6587\u4e2d\u6848\u4f8b\u53bb\u5206\u6790 cherry-pick \u662f\u5426\u80fd\u591f\u5728\u5e38\u7528\u8f6f\u4ef6\u5f00\u53d1\u5de5\u4f5c\u6d41\u7ed9\u6211\u4eec\u5e26\u6765\u8db3\u591f\u7684\u6536\u76ca\uff0c\u4ee5\u53ca\uff0c\u662f\u5426\u5e94\u8be5 stop cherry-picking, start merging\u3002<\/p>\n<p>\u53ea\u6709\u5728\u6df1\u5165\u4e86\u89e3\u5de5\u5177\u540e\uff0c\u6211\u4eec\u624d\u80fd\u66f4\u597d\u5730\u8fd0\u7528\u5de5\u5177\uff0c\u771f\u6b63\u5b9e\u73b0\u6548\u7387\u63d0\u5347\u3002<\/p>\n<div class=\"footnotes\" role=\"doc-endnotes\">\n<hr>\n<ol>\n<li id=\"fn:1\">\n<p>git-cherry-pick &lt;commit&gt;&hellip; <br\/><a href=\"https:\/\/git-scm.com\/docs\/git-cherry-pick#Documentation\/git-cherry-pick.txt-ltcommitgt82308203\">https:\/\/git-scm.com\/docs\/git-cherry-pick#Documentation\/git-cherry-pick.txt-ltcommitgt82308203<\/a>&#160;<a href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:2\">\n<p>git-rev-list &ndash;no-walk<br\/><a href=\"https:\/\/git-scm.com\/docs\/git-rev-list#Documentation\/git-rev-list.txt---no-walksortedunsorted\">https:\/\/git-scm.com\/docs\/git-rev-list#Documentation\/git-rev-list.txt---no-walksortedunsorted<\/a>&#160;<a href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:3\">\n<p>git-cherry-pick -m, &ndash;mainline<br\/><a href=\"https:\/\/git-scm.com\/docs\/git-cherry-pick#Documentation\/git-cherry-pick.txt--mltparent-numbergt\">https:\/\/git-scm.com\/docs\/git-cherry-pick#Documentation\/git-cherry-pick.txt--mltparent-numbergt<\/a>&#160;<a href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:4\">\n<p>gitrevisions: Specifying Revisions<br\/><a href=\"https:\/\/git-scm.com\/docs\/gitrevisions\/#_specifying_revisions\">https:\/\/git-scm.com\/docs\/gitrevisions\/#_specifying_revisions<\/a>&#160;<a href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:5\">\n<p>gitrevisions: Specifying Ranges<br\/><a href=\"https:\/\/git-scm.com\/docs\/gitrevisions\/#_specifying_ranges\">https:\/\/git-scm.com\/docs\/gitrevisions\/#_specifying_ranges<\/a>&#160;<a href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:6\">\n<p>Pro Git (zh): Git \u5de5\u5177 - Rerere<br\/><a href=\"https:\/\/git-scm.com\/book\/zh\/v2\/Git-%E5%B7%A5%E5%85%B7-Rerere#ef_rerere\">https:\/\/git-scm.com\/book\/zh\/v2\/Git-%E5%B7%A5%E5%85%B7-Rerere#ef_rerere<\/a>&#160;<a href=\"#fnref:6\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:7\">\n<p>Pro Git (en): Git Tools - Rerere<br\/><a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Git-Tools-Rerere\">https:\/\/git-scm.com\/book\/en\/v2\/Git-Tools-Rerere<\/a>&#160;<a href=\"#fnref:7\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:8\">\n<p>Pro Git (zh): \u5206\u5e03\u5f0f Git - \u7ef4\u62a4\u9879\u76ee - Rerere<br\/><a href=\"https:\/\/git-scm.com\/book\/zh\/v2\/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E7%BB%B4%E6%8A%A4%E9%A1%B9%E7%9B%AE#_rerere\">https:\/\/git-scm.com\/book\/zh\/v2\/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E7%BB%B4%E6%8A%A4%E9%A1%B9%E7%9B%AE#_rerere<\/a>&#160;<a href=\"#fnref:8\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>"},{"title":"\u901a\u8fc7 systemd \u670d\u52a1\u914d\u7f6e\u94fe\u63a5\u52a8\u6001\u5e93","link":"https:\/\/blog.triplez.cn\/posts\/systemd-binary-service-dynamic-linking\/","pubDate":"Thu, 31 Mar 2022 20:31:19 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/systemd-binary-service-dynamic-linking\/","description":"<h2 id=\"\u5e8f\">\u5e8f<\/h2>\n<p>\u5728\u8bbe\u7f6e\u52a8\u6001\u94fe\u63a5\u7684\u65b9\u6cd5\u4e2d\uff0c<code>rpath<\/code> \u6709\u5176\u81ea\u8eab\u7684\u95ee\u9898<sup id=\"fnref:1\"><a href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\">1<\/a><\/sup> \uff0c <code>ld.so.conf<\/code> \u4e3a OS \u5168\u5c40\u914d\u7f6e\uff0c\u53ef\u80fd\u4f1a\u56e0\u4e3a\u5355\u4e00\u670d\u52a1\u7684\u52a8\u6001\u5e93\u7248\u672c\u800c\u5f71\u54cd\u5230\u5176\u4ed6\u670d\u52a1\uff0c\u4e0d\u662f\u4e00\u4e2a\u4f18\u96c5\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\u90a3\u5982\u4f55\u624d\u80fd\u4e0d\u501f\u52a9 <code>rpath<\/code> \u548c <code>ld.so.conf<\/code> \uff0c\u5373\u80fd\u4f7f\u76ee\u6807\u670d\u52a1\u627e\u5230\u5bf9\u5e94\u7684\u52a8\u6001\u94fe\u63a5\u5e93\uff0c\u53c8\u80fd\u4e0d\u5f71\u54cd\u5176\u4ed6\u670d\u52a1\u5462\uff1f<\/p>\n<h2 id=\"ld_library_path\">LD_LIBRARY_PATH<\/h2>\n<p>\u5bf9\u4e8e\u52a8\u6001\u94fe\u63a5\u5e93\u7684\u8def\u5f84\u914d\u7f6e\u800c\u8a00\uff0c\u9664\u4e86 <code>rpath<\/code> \u548c <code>ld.so.conf<\/code> \uff0c\u8fd8\u6709 <code>LD_LIBRARY_PATH<\/code>\u3002\u53ea\u8981\u5728\u4e8c\u8fdb\u5236\u542f\u52a8\u7684\u73af\u5883\u4e2d\u8bbe\u7f6e <code>LD_LIBRARY_PATH<\/code> \u53d8\u91cf\uff0c\u5219 <code>glibc<\/code> \u4f1a\u5c06\u8be5\u53d8\u91cf\u4e2d\u7684\u8def\u5f84\u914d\u7f6e\u4f5c\u4e3a\u52a8\u6001\u94fe\u63a5\u5e93\u7684\u67e5\u627e\u8def\u5f84\u4e4b\u4e00\uff0c\u4f7f\u5f97\u4e8c\u8fdb\u5236\u53ef\u6267\u884c\u6587\u4ef6\u80fd\u591f\u6b63\u5e38\u94fe\u63a5\u5230\u5176\u4f9d\u8d56\u7684\u52a8\u6001\u94fe\u63a5\u5e93\u3002<\/p>\n<p><code>LD_LIBRARY_PATH<\/code> \u4f1a\u5728\u5f53\u524d shell session \u4e2d\u201c\u5168\u5c40\u201d\u751f\u6548\uff0c\u4e0d\u8fc7\uff0c\u7531\u4e8e\u7b14\u8005\u670d\u52a1\u91c7\u7528 systemd \u6765\u7ba1\u7406\u5176\u751f\u547d\u5468\u671f\uff0c\u6309\u7167\u4e0a\u8ff0\u601d\u8def\uff0c\u5e94\u8be5\u53ea\u9700\u8981\u5728\u670d\u52a1\u542f\u52a8\u524d\uff0c\u5c06 <code>LD_LIBRARY_PATH<\/code> \u6ce8\u5165\u542f\u52a8\u73af\u5883\u5373\u53ef\uff0c\u8fd9\u6837\u8fd8\u80fd\u591f\u501f\u52a9 systemd \u6765\u5b9e\u73b0\u4e00\u5b9a\u7a0b\u5ea6\u7684\u73af\u5883\u201c\u9694\u79bb\u201d\u3002systemd \u670d\u52a1\u914d\u7f6e\u4e2d\u7684 <code>Environment<\/code> \u5b57\u6bb5\u662f\u7528\u4e8e\u63cf\u8ff0\u542f\u52a8\u73af\u5883\u7684\u73af\u5883\u53d8\u91cf\u7684\uff0c\u6211\u4eec\u5148\u5728\u8fd9\u91cc\u52a0\u5165 <code>LD_LIBRARY_PATH<\/code> \uff08\u5982\u4e0b\uff09\uff0c\u91cd\u65b0\u52a0\u8f7d systemd \u914d\u7f6e\u5e76\u91cd\u542f\u670d\u52a1\uff0c\u89c2\u5bdf\u6548\u679c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-22\">22<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-diff\" data-lang=\"diff\"><span class=\"line\"><span class=\"cl\"> [Unit]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Description=Nginx\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> After=syslog.target network.target remote-fs.target nss-lookup.target\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [Service]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> User=triplez\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Group=triplez\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Type=forking\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gi\">+Environment=&#34;LD_LIBRARY_PATH=\/your\/path\/to\/openssl\/lib:\/your\/path\/to\/jemalloc\/lib:\/your\/path\/to\/luajit\/lib&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gi\"><\/span> PIDFile=\/run\/nginx\/nginx.pid\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> RuntimeDirectory=nginx\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> RuntimeDirectoryMode=0755\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ExecStartPre=\/your\/path\/to\/nginx -t\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ExecStart=\/your\/path\/to\/nginx\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ExecReload=\/bin\/kill -s HUP $MAINPID\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ExecStop=\/bin\/kill -s QUIT $MAINPID\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> PrivateTmp=true\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Restart=always\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [Install]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> WantedBy=multi-user.target\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ sudo systemctl daemon-reload\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ sudo systemctl restart nginx.service\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4e8b\u5b9e\u4e0a\uff0c\u5bf9\u4e8e\u5927\u591a\u6570\u670d\u52a1\uff0c\u53ea\u9700\u8981\u52a0\u5165\u73af\u5883\u53d8\u91cf\u5373\u53ef\u89e3\u51b3\u95ee\u9898\u3002\u4f46\u5f88\u4e0d\u5e78\u7684\u662f\uff0c\u7531\u4e8e\u6211\u4eec\u7684\u670d\u52a1\u9700\u8981\u76d1\u542c 1024 \u53ca\u4ee5\u4e0b\u7aef\u53e3\uff08\u5982 80\u3001443\uff09\uff0c\u7b14\u8005\u5bf9\u4e8c\u8fdb\u5236\u53ef\u6267\u884c\u6587\u4ef6\u8fdb\u884c\u4e86 <code>setcap<\/code> \u64cd\u4f5c\uff0c\u8d4b\u4e88\u5176\u76d1\u542c\u4f4e\u4f4d\u7aef\u53e3\u7684\u80fd\u529b\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ sudo getcap \/your\/path\/to\/nginx\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/your\/path\/to\/nginx <span class=\"o\">=<\/span> cap_net_bind_service+ep\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"capability\">Capability<\/h2>\n<p>\u7531\u4e8e\u8be5\u6587\u4ef6\u542b\u6709 capability\uff0c<code>glibc<\/code> \u4f1a\u5c06 <code>LD_LIBRARY_PATH<\/code> \u5ffd\u7565<sup id=\"fnref:2\"><a href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\">2<\/a><\/sup> <sup id=\"fnref:3\"><a href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\">3<\/a><\/sup>\uff0c\u5bfc\u81f4\u670d\u52a1\u8fd8\u662f\u65e0\u6cd5\u6b63\u786e\u94fe\u63a5\u5230\u52a8\u6001\u5e93\u4e0a\u3002<\/p>\n<p>\u4e86\u89e3\u539f\u56e0\u4e4b\u540e\uff0c\u63a5\u4e0b\u6765\u8981\u505a\u7684\u4e8b\u60c5\u4e5f\u5f88\u6e05\u6670\u4e86\uff1a\u4e00\u662f\u5148\u5c06\u4e8c\u8fdb\u5236\u53ef\u6267\u884c\u6587\u4ef6\u4e0a\u7684 capability \u79fb\u9664\uff08<code>chown<\/code> \u5c31\u53ef\u4ee5\u5c06\u5176\u79fb\u9664\uff0c <code>setcap -ep<\/code> \u4ea6\u53ef\uff09\uff0c\u4e8c\u662f\u5229\u7528 systemd \u7684\u670d\u52a1\u914d\u7f6e\u6765\u5b9e\u73b0\u914d\u7f6e capability \uff08\u5982\u4e0b\uff09\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-17\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-18\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-19\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-20\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-21\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-22\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-23\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-24\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-24\">24<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-diff\" data-lang=\"diff\"><span class=\"line\"><span class=\"cl\"> [Unit]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Description=Nginx\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> After=syslog.target network.target remote-fs.target nss-lookup.target\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [Service]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> User=triplez\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Group=triplez\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Type=forking\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Environment=&#34;LD_LIBRARY_PATH=\/your\/path\/to\/openssl\/lib:\/your\/path\/to\/jemalloc\/lib:\/your\/path\/to\/luajit\/lib&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> PIDFile=\/run\/nginx\/nginx.pid\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> RuntimeDirectory=nginx\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> RuntimeDirectoryMode=0755\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ExecStartPre=\/your\/path\/to\/nginx -t\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ExecStart=\/your\/path\/to\/nginx\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ExecReload=\/bin\/kill -s HUP $MAINPID\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ExecStop=\/bin\/kill -s QUIT $MAINPID\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gi\">+CapabilityBoundingSet=CAP_NET_BIND_SERVICE\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gi\">+AmbientCapabilities=CAP_NET_BIND_SERVICE\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gi\"><\/span> PrivateTmp=true\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Restart=always\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [Install]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> WantedBy=multi-user.target\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d systemd \u914d\u7f6e\u5e76\u91cd\u542f\u670d\u52a1\uff0c\u95ee\u9898\u5b8c\u7f8e\u89e3\u51b3\u3002<\/p>\n<div class=\"footnotes\" role=\"doc-endnotes\">\n<hr>\n<ol>\n<li id=\"fn:1\">\n<p>RpathIssue<br\/><a href=\"https:\/\/wiki.debian.org\/RpathIssue\">https:\/\/wiki.debian.org\/RpathIssue<\/a>&#160;<a href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:2\">\n<p>Use of file capabilities disables LD_LIBRARY_PATH - Red Hat Bugzilla<br\/><a href=\"https:\/\/bugzilla.redhat.com\/show_bug.cgi?id=448594\">https:\/\/bugzilla.redhat.com\/show_bug.cgi?id=448594<\/a>&#160;<a href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<li id=\"fn:3\">\n<p>shared libraries - Linux capabilities (setcap) seems to disable LD_LIBRARY_PATH - Stack Overflow<br\/><a href=\"https:\/\/stackoverflow.com\/questions\/9843178\/linux-capabilities-setcap-seems-to-disable-ld-library-path\">https:\/\/stackoverflow.com\/questions\/9843178\/linux-capabilities-setcap-seems-to-disable-ld-library-path<\/a>&#160;<a href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\">&#x21a9;&#xfe0e;<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>\n"},{"title":"chaosblade \u751f\u6210\u6307\u5b9a CPU \u5229\u7528\u7387\u8d1f\u8f7d\u7684\u539f\u7406","link":"https:\/\/blog.triplez.cn\/posts\/chaosblade-specific-cpu-load\/","pubDate":"Wed, 26 Jan 2022 22:21:45 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/chaosblade-specific-cpu-load\/","description":"<p>\u6700\u8fd1\u7b14\u8005\u5728\u505a\u7684\u4e00\u4e2a\u964d\u7ea7\u529f\u80fd\uff0c\u4e0e\u673a\u5668\u8d44\u6e90\u60c5\u51b5\u5bc6\u5207\u76f8\u5173\u3002\u7136\u800c\u5728\u6d4b\u8bd5\u65f6\u53d1\u73b0\u63a7\u5236 CPU \u5229\u7528\u7387\u6765\u6784\u9020\u6d4b\u8bd5\u6761\u4ef6\uff0c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5bb9\u6613\u7684\u4e8b\u60c5\u3002\u501f\u52a9\u65f6\u95f4\u7247\u7684\u601d\u60f3\uff0c\u7b14\u8005\u7528\u4e00\u4e2a\u975e\u5e38\u7b80\u5355\u7684 shell \u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u89e3\u51b3\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002\u4f46\u8f6c\u5ff5\u4e00\u60f3\uff0c\u5bf9\u4e8e\u6df7\u6c8c\u6d4b\u8bd5\u7684\u8f6f\u4ef6\uff0c\u8fd9\u5e94\u8be5\u662f\u4e2a\u5fc5\u5907\u80fd\u529b\u3002\u67e5\u627e\u4e86\u4e00\u4e0b chaosblade \u7684\u76f8\u5173\u8d44\u6599\uff0c\u679c\u7136\u652f\u6301\u751f\u6210\u6307\u5b9a CPU \u5229\u7528\u7387\u7684\u8d1f\u8f7d\u3002\u6545\u8bfb\u4e86\u8bfb\u5176\u8fd9\u90e8\u5206\u6e90\u7801\uff0c\u770b\u770b\u5b83\u662f\u600e\u4e48\u5b9e\u73b0\u7684\u3002<\/p>\n<p>\u4f7f\u7528 <code>chaosblade<\/code> \u6765\u6784\u9020\u6307\u5b9a CPU \u5229\u7528\u7387\u7684\u8d1f\u8f7d\u975e\u5e38\u7b80\u5355\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-1\">1<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">blade create cpu load --cpu-percent <span class=\"m\">80<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5373\u80fd\u591f\u751f\u6210\u4f7f CPU \u5229\u7528\u7387\u5230\u8fbe 80% \u7684\u8d1f\u8f7d\u3002<\/p>\n<p><code>burncpu<\/code> \u7684\u6838\u5fc3\u903b\u8f91\u4f4d\u4e8e\u8fd9\u91cc\uff1a <a href=\"https:\/\/github.com\/chaosblade-io\/chaosblade-exec-os\/blob\/318c52d83a851bc75012abc7d880d4f440f1f972\/exec\/bin\/burncpu\/burncpu.go#L140-L168\">https:\/\/github.com\/chaosblade-io\/chaosblade-exec-os\/blob\/318c52d83a851bc75012abc7d880d4f440f1f972\/exec\/bin\/burncpu\/burncpu.go#L140-L168<\/a><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-17\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-18\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-19\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-20\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-21\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-22\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-23\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-24\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-25\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-26\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-27\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-28\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-29\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-30\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-31\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-31\">31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-32\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-32\">32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-33\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-33\">33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-34\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-34\">34<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-35\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-35\">35<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-36\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-36\">36<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-37\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-37\">37<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-38\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-38\">38<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-39\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-39\">39<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-40\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-40\">40<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-41\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-41\">41<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-42\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-42\">42<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-43\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-43\">43<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-44\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-44\">44<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-45\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-45\">45<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-46\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-46\">46<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-47\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-47\">47<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-48\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-48\">48<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-49\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-49\">49<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-50\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-50\">50<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-51\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-51\">51<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-52\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-52\">52<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-53\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-53\">53<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-54\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-54\">54<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-55\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-55\">55<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-56\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-56\">56<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-57\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-57\">57<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-58\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-58\">58<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-59\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-59\">59<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-60\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-60\">60<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-61\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-61\">61<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-62\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-62\">62<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-63\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-63\">63<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-64\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-64\">64<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-65\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-65\">65<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-66\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-66\">66<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-67\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-67\">67<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-68\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-68\">68<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-69\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-69\">69<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-70\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-70\">70<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-71\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-71\">71<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-72\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-72\">72<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-73\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-73\">73<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-74\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-74\">74<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-75\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-75\">75<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-76\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-76\">76<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-77\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-77\">77<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-78\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-78\">78<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">burnCpu<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">runtime<\/span><span class=\"p\">.<\/span><span class=\"nf\">GOMAXPROCS<\/span><span class=\"p\">(<\/span><span class=\"nx\">cpuCount<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"kd\">var<\/span> <span class=\"nx\">totalCpuPercent<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">float64<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"kd\">var<\/span> <span class=\"nx\">curProcess<\/span> <span class=\"o\">*<\/span><span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">Process<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"kd\">var<\/span> <span class=\"nx\">curCpuPercent<\/span> <span class=\"kt\">float64<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"kd\">var<\/span> <span class=\"nx\">err<\/span> <span class=\"kt\">error<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">totalCpuPercent<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">.<\/span><span class=\"nf\">Percent<\/span><span class=\"p\">(<\/span><span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nx\">Second<\/span><span class=\"p\">,<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span>  <span class=\"c1\">\/\/ \u83b7\u53d6\u5f53\u524d\u6240\u6709 CPU \u4e00\u79d2\u5185\u5e73\u5747\u5229\u7528\u7387\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"c1\">\/\/ ...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">curProcess<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewProcess<\/span><span class=\"p\">(<\/span><span class=\"nb\">int32<\/span><span class=\"p\">(<\/span><span class=\"nx\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">Getpid<\/span><span class=\"p\">()))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ ...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">curCpuPercent<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">curProcess<\/span><span class=\"p\">.<\/span><span class=\"nf\">CPUPercent<\/span><span class=\"p\">()<\/span>  <span class=\"c1\">\/\/ \u83b7\u53d6\u5f53\u524d\u8fdb\u7a0b\u7684 CPU \u5229\u7528\u7387\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"c1\">\/\/ ...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">otherCpuPercent<\/span> <span class=\"o\">:=<\/span> <span class=\"p\">(<\/span><span class=\"mf\">100.0<\/span> <span class=\"o\">-<\/span> <span class=\"p\">(<\/span><span class=\"nx\">totalCpuPercent<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">-<\/span> <span class=\"nx\">curCpuPercent<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mf\">100.0<\/span>  <span class=\"c1\">\/\/ \u9664\u53bb\u5df2\u6709\u8fdb\u7a0b\uff0c\u53ef\u64cd\u4f5c\u7684 CPU \u5229\u7528\u7387\u3002\u503c\u7684\u8303\u56f4\u4e3a [0, 1]\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"k\">go<\/span> <span class=\"kd\">func<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"nx\">t<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewTicker<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nx\">Second<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"k\">for<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"k\">select<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"c1\">\/\/ timer 3s\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t<span class=\"k\">case<\/span> <span class=\"o\">&lt;-<\/span><span class=\"nx\">t<\/span><span class=\"p\">.<\/span><span class=\"nx\">C<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t<span class=\"nx\">totalCpuPercent<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">.<\/span><span class=\"nf\">Percent<\/span><span class=\"p\">(<\/span><span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nx\">Second<\/span><span class=\"p\">,<\/span> <span class=\"kc\">false<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t<span class=\"c1\">\/\/ ...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t\t<span class=\"nx\">curCpuPercent<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">curProcess<\/span><span class=\"p\">.<\/span><span class=\"nf\">CPUPercent<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t<span class=\"c1\">\/\/ ...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t\t<span class=\"nx\">otherCpuPercent<\/span> <span class=\"p\">=<\/span> <span class=\"p\">(<\/span><span class=\"mf\">100.0<\/span> <span class=\"o\">-<\/span> <span class=\"p\">(<\/span><span class=\"nx\">totalCpuPercent<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">-<\/span> <span class=\"nx\">curCpuPercent<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mf\">100.0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"p\">}()<\/span>  <span class=\"c1\">\/\/ \u6bcf 3s \u66f4\u65b0\u4e00\u6b21 totalCpuPercent, curCpuPercent \u548c otherCpuPercent\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">if<\/span> <span class=\"nx\">climbTime<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span> <span class=\"p\">{<\/span>  <span class=\"c1\">\/\/ \u4e0d\u9700\u8981\u722c\u5761\u65f6\u95f4\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t<span class=\"nx\">slopePercent<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">float64<\/span><span class=\"p\">(<\/span><span class=\"nx\">cpuPercent<\/span><span class=\"p\">)<\/span>  <span class=\"c1\">\/\/ \u722c\u5761\u503c\u4e0e\u76ee\u6807\u503c\u4e00\u81f4\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"c1\">\/\/ ...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\">\/\/ cpuCount \u662f\u7531 runtime.NumCPU() \u5f97\u6765\uff0c\u83b7\u53d6\u7684\u662f\u5f53\u524d CPU \u7684\u903b\u8f91\u6838\u6570\u91cf\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"k\">for<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">cpuCount<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"k\">go<\/span> <span class=\"kd\">func<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"nx\">busy<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">int64<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"nx\">idle<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">int64<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"nx\">all<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">int64<\/span><span class=\"p\">(<\/span><span class=\"mi\">10000000<\/span><span class=\"p\">)<\/span>    <span class=\"c1\">\/\/ \u8bbe\u5b9a 10ms \u4e3a\u4e00\u4e2a\u5468\u671f\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t<span class=\"nx\">dx<\/span> <span class=\"o\">:=<\/span> <span class=\"mf\">0.0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"nx\">ds<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">Duration<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"k\">for<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"o\">%<\/span> <span class=\"mi\">1000<\/span> <span class=\"p\">{<\/span>  <span class=\"c1\">\/\/ \u6b7b\u5faa\u73af\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t\t<span class=\"nx\">startTime<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">Now<\/span><span class=\"p\">().<\/span><span class=\"nf\">UnixNano<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t<span class=\"k\">if<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span> <span class=\"p\">{<\/span>  <span class=\"c1\">\/\/ \u6bcf 1000 \u6b21\u8fdb\u5165\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/ \u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u662f\u6574\u4e2a burncpu \u7684\u7075\u9b42\u3002\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/ \u6211\u4eec\u6700\u7ec8\u5e0c\u671b\u83b7\u5f97\u7684\u662f slopePercent% \u7684 CPU \u5229\u7528\u7387\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/ \u5e94\u8be5\u751f\u6210\u7684 CPU \u538b\u529b\u5373\u4e3a (slopePercent - totalCpuPercent[0])%\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/ \u7406\u60f3\u6761\u4ef6\u4e0b\uff0c\u6211\u4eec\u53ea\u9700\u5bf9 (slopePercent - totalCpuPercent[0]) \u4e2a 0.1ms \u65f6\u95f4\u7247\u8bbe\u7f6e\u4e3a busy \u72b6\u6001\u5373\u53ef\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/ \u4f46\u7531\u4e8e\u7cfb\u7edf\u4e2d\u5b58\u5728\u5176\u4ed6\u8fdb\u7a0b\uff0cburncpu \u65e0\u6cd5\u771f\u6b63\u83b7\u5f97\u5230 (slopePercent - totalCpuPercent[0]) \u4e2a 0.1ms \u65f6\u95f4\u7247\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/ \u56e0\u6b64\u9700\u8981\u6309\u6bd4\u4f8b\u653e\u5927\u65f6\u95f4\u7247\u7684\u4e2a\u6570\uff0c\u800c\u8fd9\u4e2a\u6bd4\u4f8b\u5219\u662f\u5f53\u65f6 burncpu \u5b9e\u9645\u53ef\u7528\u7684 CPU \u5229\u7528\u7387\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/ \u5c06\u8fd9\u4e2a\u8d4b\u503c\u8bed\u53e5\u8f6c\u6362\u4e3a\u5982\u4e0b\u65b9\u7a0b\uff0c\u5219\u66f4\u597d\u7406\u89e3\u4e86\uff1a\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/   slopePercent  = totalCpuPercent + dx * otherCpuPercent\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/       ^                 ^           ^                 ^\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"c1\">\/\/ \u6700\u7ec8\u83b7\u5f97\u7684CPU\u5229\u7528\u7387 \u5f53\u524dCPU\u5229\u7528\u7387 \u4e00\u4e2a\u5468\u671f\u5185busy\u7684\u65f6\u95f4\u7247\u4e2a\u6570 burnCpu\u771f\u6b63\u53ef\u64cd\u4f5c\u7684CPU\u6bd4\u4f8b\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t\t\t<span class=\"nx\">dx<\/span> <span class=\"p\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">slopePercent<\/span> <span class=\"o\">-<\/span> <span class=\"nx\">totalCpuPercent<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span> <span class=\"o\">\/<\/span> <span class=\"nx\">otherCpuPercent<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t\t<span class=\"nx\">busy<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">busy<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">int64<\/span><span class=\"p\">(<\/span><span class=\"nx\">dx<\/span><span class=\"o\">*<\/span><span class=\"mi\">100000<\/span><span class=\"p\">)<\/span>  <span class=\"c1\">\/\/ \u6709 dx \u4e2a 0.1ms \u9700\u8981\u4e3a busy \u72b6\u6001\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t\t\t<span class=\"k\">if<\/span> <span class=\"nx\">busy<\/span> <span class=\"p\">&lt;<\/span> <span class=\"mi\">0<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t\t\t<span class=\"nx\">busy<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t\t<span class=\"nx\">idle<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">all<\/span> <span class=\"o\">-<\/span> <span class=\"nx\">busy<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t\t<span class=\"k\">if<\/span> <span class=\"nx\">idle<\/span> <span class=\"p\">&lt;<\/span> <span class=\"mi\">0<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t\t\t<span class=\"nx\">idle<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t\t<span class=\"nx\">ds<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">ParseDuration<\/span><span class=\"p\">(<\/span><span class=\"nx\">strconv<\/span><span class=\"p\">.<\/span><span class=\"nf\">FormatInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">idle<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s\">&#34;ns&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t<span class=\"k\">for<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">Now<\/span><span class=\"p\">().<\/span><span class=\"nf\">UnixNano<\/span><span class=\"p\">()<\/span><span class=\"o\">-<\/span><span class=\"nx\">startTime<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">busy<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t\t<span class=\"p\">}<\/span>  <span class=\"c1\">\/\/ \u963b\u585e CPU\uff0c\u4f7f CPU \u4f4d\u4e8e busy \u72b6\u6001\uff0c\u76f4\u81f3\u8bbe\u5b9a\u7684\u65f6\u95f4\u7247\u7ed3\u675f\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t\t<span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">Sleep<\/span><span class=\"p\">(<\/span><span class=\"nx\">ds<\/span><span class=\"p\">)<\/span> <span class=\"c1\">\/\/ \u7a7a\u95f2 CPU\uff0c\u4f7f CPU \u5904\u4e8e idle \u72b6\u6001\uff0c\u76f4\u81f3\u8bbe\u5b9a\u7684\u65f6\u95f4\u7247\u7ed3\u675f\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t\t\t\t<span class=\"nx\">runtime<\/span><span class=\"p\">.<\/span><span class=\"nf\">Gosched<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"p\">}()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">select<\/span> <span class=\"p\">{}<\/span>  <span class=\"c1\">\/\/ \u963b\u585e burnCpu \u51fd\u6570\uff0c\u4fdd\u6d3b goroutines\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"Lexer & Parser Toolchain","link":"https:\/\/blog.triplez.cn\/posts\/lexer-parser-toolchain\/","pubDate":"Tue, 25 Jan 2022 21:29:19 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/lexer-parser-toolchain\/","description":"<blockquote>\n<p>\u63a8\u8350\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u7f16\u8bd1\u5668\u5de5\u5177\u94fe\u5165\u95e8\u6559\u7a0b\uff1a <a href=\"https:\/\/pandolia.net\/tinyc\/index.html\">https:\/\/pandolia.net\/tinyc\/index.html<\/a><\/p>\n<\/blockquote>\n<h2 id=\"lexer---flex\">Lexer - flex<\/h2>\n<p>flex \u6587\u4ef6\u683c\u5f0f\uff1a<\/p>\n<blockquote>\n<p><a href=\"https:\/\/pandolia.net\/tinyc\/ch8_flex.html\">https:\/\/pandolia.net\/tinyc\/ch8_flex.html<\/a><\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-11\">11<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">%{\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Declarations\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Definitions\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%%\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Rules\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%%\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">User subroutines\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\n<p>Declarations\uff1a\u58f0\u660e\uff0c\u4f1a\u88ab\u539f\u6837\u590d\u5236\u5165 <code>lex.yy.c<\/code> \u3002\u4e00\u822c\u7528\u4e8e\u58f0\u660e\u5168\u5c40\u53d8\u91cf\u548c\u51fd\u6570\u3002<\/p>\n<\/li>\n<li>\n<p>Definitions\uff1a\u5b9a\u4e49\uff0c\u53ef\u4ee5\u5b9a\u4e49\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u540d\u5b57\uff0c\u7528\u4e8e Rules \u4e2d\u4f7f\u7528\uff0c\u901a\u8fc7\u540d\u5b57\u76f4\u63a5\u4f7f\u7528\u9884\u5b9a\u4e49\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u3002<\/p>\n<\/li>\n<li>\n<p>Rules\uff1a\u89c4\u5219\uff0c\u6bcf\u4e00\u884c\u90fd\u662f\u4e00\u6761\u89c4\u5219\uff0c\u7531\u5339\u914d\u6a21\u5f0f pattern \uff08\u6b63\u5219\u8868\u8fbe\u5f0f\uff09\u548c\u4e8b\u4ef6 action \uff08C \u4ee3\u7801\uff09\u7ec4\u6210\u3002<\/p>\n<\/li>\n<li>\n<p>User subroutines\uff1a\u7528\u6237\u5b9a\u4e49\u8fc7\u7a0b\uff0c\u4f1a\u88ab\u539f\u6837\u590d\u5236\u5230 <code>lex.yy.c<\/code> \u7684\u6700\u672b\u5c3e\u3002<\/p>\n<\/li>\n<li>\n<p><code>yywrap()<\/code> \u7528\u4e8e\u628a\u591a\u4e2a\u8f93\u5165\u6587\u4ef6\u6253\u5305\u6210\u4e00\u4e2a\u8f93\u5165\uff0c\u5f53 <code>yylex<\/code> \u5c06\u4e00\u4e2a\u6587\u4ef6\u8bfb\u5165\u5230\u7ed3\u5c3e EOF \u65f6\uff0c\u4f1a\u5411 <code>yywrap<\/code> \u8be2\u95ee\u662f\u5426\u7ee7\u7eed\u3002\u82e5\u9700\u8fde\u7eed\u89e3\u6790\u591a\u4e2a\u6587\u4ef6\uff0c\u9700\u8981\u5728 yywrap \u4e2d\u6253\u5f00\u6587\u4ef6\uff0c\u5e76\u8fd4\u56de 0\u3002\u8fd4\u56de 1 \u5219\u8868\u793a\u540e\u9762\u6ca1\u6709\u6587\u4ef6\u53ef\u4ee5\u8bfb\u53d6\u4e86\uff0c\u4f7f\u5f97 <code>yylex<\/code> \u51fd\u6570\u7ed3\u675f\u3002<\/p>\n<\/li>\n<li>\n<p><code>yytext<\/code>\uff1a\u521a\u521a\u5339\u914d\u5230\u7684\u5b57\u7b26\u4e32\u7684\u503c\u3002<\/p>\n<\/li>\n<li>\n<p><code>yyleng<\/code>\uff1a\u521a\u521a\u5339\u914d\u5230\u7684\u5b57\u7b26\u4e32\u7684\u957f\u5ea6\u3002<\/p>\n<\/li>\n<\/ul>\n<p>\u5982\u4e00\u4e2a\u7b80\u5355\u7684\u8ba1\u7b97\u5668\u5b9e\u73b0\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-13\">13<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">%{\n<\/span><\/span><span class=\"line\"><span class=\"cl\">#include &#34;y.tab.h&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%%\n<\/span><\/span><span class=\"line\"><span class=\"cl\">[0-9]+          { yylval = atoi(yytext); return T_NUM; }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">[-\/+*()\\n]      { return yytext[0]; }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.               { return 0; \/* end when meet everything else *\/ }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%%\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">int yywrap(void) { \n<\/span><\/span><span class=\"line\"><span class=\"cl\">    return 1;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"parser---yaccbison\">Parser - Yacc\/Bison<\/h2>\n<p>bison \u53ef\u4ee5\u8ba4\u4e3a\u662f yacc \u7684\u5f00\u6e90\u5b9e\u73b0\u3002<\/p>\n<p>Bison \u6587\u4ef6\u7684\u683c\u5f0f\uff1a<\/p>\n<blockquote>\n<p><a href=\"https:\/\/pandolia.net\/tinyc\/ch13_bison.html\">https:\/\/pandolia.net\/tinyc\/ch13_bison.html<\/a><\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-11\">11<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">%{\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Declarations\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Definitions\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%%\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Productions\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%%\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">User subroutines\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\n<p>Declarations\uff1a\u58f0\u660e\uff0c\u4f1a\u88ab\u539f\u6837\u590d\u5236\u5165 <code>y.tab.c<\/code> \u3002\u4e00\u822c\u7528\u4e8e\u58f0\u660e\u5168\u5c40\u53d8\u91cf\u548c\u51fd\u6570\u3002<\/p>\n<\/li>\n<li>\n<p>Definitions\uff1a\u5b9a\u4e49\uff0c\u53ef\u4ee5\u5b9a\u4e49 bison \u4e13\u6709\u7684\u53d8\u91cf\u3002<\/p>\n<ul>\n<li><code>%token<\/code>\uff1a\u5355\u5b57\u7b26 token \uff08token type \u503c\u4e0e\u5b57\u7b26\u7684 ASCII \u7801\u76f8\u540c\uff09\u4e0d\u9700\u8981\u4f7f\u7528 <code>%token<\/code> \u8fdb\u884c\u9884\u5b9a\u4e49\uff0c\u5176\u4ed6\u7c7b\u578b\u7684 token \u90fd\u9700\u8981\u4f7f\u7528 <code>%token<\/code> \u8fdb\u884c\u9884\u5b9a\u4e49\u3002bison \u4f1a\u81ea\u52a8\u4e3a token \u5206\u914d\u4e00\u4e2a\u7f16\u53f7\uff0c\u5e76\u5199\u5165 <code>y.tab.h<\/code> \u4e2d\uff0c\u56e0\u6b64\u5728 flex \u6587\u4ef6\u4e2d\u662f\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\u7684\u3002<\/li>\n<li><code>%left<\/code> \u3001<code>%right<\/code>\uff1a\u8868\u793a\u7b26\u53f7\u662f\u5de6\uff08\u5de6\u5411\u53f3\uff09\u3001\u53f3\uff08\u53f3\u5411\u5de6\uff09\u7ed3\u5408\u7684\u3002<\/li>\n<li><code>%nonassoc<\/code> \uff1a\u8868\u793a\u7b26\u53f7\u662f\u4e0d\u53ef\u7ed3\u5408\u7684\uff0c\u5982 <code>x op y op z<\/code> \u662f\u975e\u6cd5\u7684\u3002<\/li>\n<li><code>%prec<\/code>\uff1a\u4e0a\u4e0b\u6587\u4f9d\u8d56\u7684\u4f18\u5148\u7ea7\uff0c\u5982\u300c\u8d1f\u53f7\u300d\u5c31\u662f\u4e00\u4e2a\u5f88\u5178\u578b\u7684\u4f8b\u5b50\uff0c\u89c1 <a href=\"https:\/\/www.gnu.org\/software\/bison\/manual\/html_node\/Contextual-Precedence.html\">Context-Dependent Precedence<\/a>\u3002<\/li>\n<li>\u66f4\u591a\u5b9a\u4e49\u53ef\u89c1 <a href=\"https:\/\/www.gnu.org\/software\/bison\/manual\/html_node\/Declarations.html\">bison Declarations<\/a>\u3002<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Productions\uff1a<\/p>\n<ul>\n<li>\n<p><code>:<\/code> \u4ee3\u8868 <code>-&gt;<\/code>\uff0c\u6216 EBNF \u5f0f\u4e2d\u7684 <code>=<\/code>\u3002<\/p>\n<\/li>\n<li>\n<p><code>|<\/code> \u7528\u4e8e\u5206\u9694\u540c\u4e00\u4e2a\u975e\u7ec8\u7ed3\u7b26\u7684\u4e0d\u540c\u4ea7\u751f\u5f0f\u3002<\/p>\n<\/li>\n<li>\n<p><code>\/* empty *\/<\/code> \uff0c\u82e5\u4ea7\u751f\u5f0f\u53f3\u8fb9\u4e3a $\\epsilon$ \u65f6\uff0c\u4e0d\u9700\u8981\u5199\u4efb\u4f55\u7b26\u53f7\uff0c\u53ef\u5199\u4e3a\u6ce8\u91ca <code>\/* empty *\/<\/code>\u3002<\/p>\n<\/li>\n<li>\n<p><code>;<\/code> \u8868\u793a\u7ed3\u675f\u4e00\u4e2a\u975e\u7ec8\u7ed3\u7b26\u7684\u4ea7\u751f\u5f0f\u3002<\/p>\n<\/li>\n<li>\n<p>\u6bcf\u4e2a\u4ea7\u751f\u5f0f\u540e\u9762\u82b1\u62ec\u53f7\u5185\uff0c\u90fd\u662f\u4e00\u6bb5 C \u4ee3\u7801\uff0c\u53ef\u5728\u4ea7\u751f\u5f0f\u88ab\u5e94\u7528\u65f6\u6267\u884c\u3002<\/p>\n<\/li>\n<li>\n<p>\u4f8b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">s : S E &#39;\\n&#39;       { printf(&#34;ans = %d\\n&#34;, $2); }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  | \/* empty *\/    { \/* empty *\/}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  ;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/li>\n<\/ul>\n<\/li>\n<li>\n<p>User subroutines\uff1a\u7528\u6237\u5b9a\u4e49\u8fc7\u7a0b\uff0c\u4f1a\u88ab\u539f\u6837\u590d\u5236\u5230 <code>y.tab.c<\/code> \u7684\u6700\u672b\u5c3e\u3002<\/p>\n<\/li>\n<\/ul>\n<p>bison \u4f1a\u5c06\u8bed\u6cd5\u4ea7\u751f\u5f0f\u4ee5\u53ca\u7b26\u53f7\u4f18\u5148\u7ea7\u8f6c\u6362\u6210\u4e00\u4e2a C \u8bed\u8a00\u7684 LALR(1) \u52a8\u4f5c\u8868\uff0c\u8f93\u51fa\u5230 <code>y.tab.c<\/code> \u4e2d\u3002\u5e76\u4f1a\u5c06\u8fd9\u4e2a\u52a8\u4f5c\u8868\u8f6c\u6362\u4e3a\u53ef\u8bfb\u5f62\u5f0f\u8f93\u51fa\u81f3 <code>y.output<\/code> \u4e2d\u3002<\/p>\n<p>bison \u4f1a\u6839\u636e\u81ea\u5b9a\u4e49\u8bed\u6cd5\u6587\u4ef6\u5728 <code>y.tab.c<\/code> \u4e2d\u751f\u6210\u4e00\u4e2a\u51fd\u6570 <code>int yyparse(void)<\/code> \u3002\u8fd9\u4e2a\u51fd\u6570\u6309\u7167 LR(1) \u89e3\u6790\u6d41\u7a0b\uff0c\u5bf9\u8bcd\u6cd5\u5206\u6790\u4e2d\u5f97\u5230\u7684 token \u6d41\u8fdb\u884c\u89e3\u6790\u3002\u6bcf\u5f53\u8bfb\u53d6\u4e0b\u4e00\u4e2a\u7b26\u53f7\u65f6\uff0c\u5c31\u4f1a\u6267\u884c\u4e00\u6b21 <code>x = yylex()<\/code> \u3002\u6bcf\u5f53\u8981\u6267\u884c\u4e00\u4e2a\u6298\u53e0\u52a8\u4f5c\uff08reduce\uff09\u65f6\uff0c\u76f8\u5e94\u7684\u4ea7\u751f\u5f0f\u540e\u7684 C \u4ee3\u7801\u5c06\u88ab\u6267\u884c\uff0c\u6267\u884c\u5b8c\u540e\u5c06\u76f8\u5e94\u7684\u72b6\u6001\u51fa\u6808\u3002<\/p>\n<p>\u82e5 token \u6d41\u4e0d\u5408\u6cd5\uff0c<code>yyparse<\/code> \u4f1a\u5728\u7b2c\u4e00\u6b21\u51fa\u9519\u7684\u5730\u65b9\u7ec8\u6b62\uff0c\u5e76\u8c03\u7528 <code>yyerror<\/code> \u51fd\u6570\uff0c\u6700\u540e\u8fd4\u56de 1\u3002<\/p>\n<p>\u5728 reduce \u52a8\u4f5c\u65f6\uff0c\u53ef\u7528 <code>$1<\/code>, <code>$2<\/code> &hellip; <code>$n<\/code> \u6765\u5f15\u7528\u5c5e\u6027\u6808\u7684\u5c5e\u6027\uff08\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4ea7\u751f\u5f0f\u4e2d\u7684\u7b2c n \u4e2a\u5c5e\u6027\u5185\u5bb9\uff0c\u5e76\u5728\u6700\u540e\u5c06\u8fd9\u4e2a\u72b6\u6001\u4e0b\u7684\u5c5e\u6027\u51fa\u6808\u3002\u5176\u4e2d\uff0c<code>$$<\/code> \u4ee3\u8868\u4ea7\u751f\u5f0f\u5de6\u4fa7\u7684\u7ec8\u7ed3\u7b26\uff0c\u53ef\u5728 reduce \u52a8\u4f5c\u8bbe\u7f6e <code>$$<\/code> \u7684\u503c\uff0c\u6700\u540e\u5c06 <code>$$<\/code> \u5165\u6808\u3002<\/p>\n<p>\u5982\u4e00\u4e2a\u7b80\u5355\u7684\u8ba1\u7b97\u5668\u5b9e\u73b0\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-4-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-17\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-18\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-19\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-20\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-21\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-22\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-23\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-24\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-25\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-26\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-27\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-28\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-29\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-30\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-30\">30<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">%{\n<\/span><\/span><span class=\"line\"><span class=\"cl\">#include &lt;stdio.h&gt;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">void yyerror(const char* msg) {}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">int yylex();\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%token T_NUM\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%left &#39;+&#39; &#39;-&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%left &#39;*&#39; &#39;\/&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%%\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">S   :   S E &#39;\\n&#39;        { printf(&#34;ans = %d\\n&#34;, $2); }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    |   \/* empty *\/     { \/* empty *\/ }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    ;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">E   :   E &#39;+&#39; E         { $$ = $1 + $3; }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    |   E &#39;-&#39; E         { $$ = $1 - $3; }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    |   E &#39;*&#39; E         { $$ = $1 * $3; }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    |   E &#39;\/&#39; E         { $$ = $1 \/ $3; }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    |   T_NUM           { $$ = $1; }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    |   &#39;(&#39; E &#39;)&#39;       { $$ = $2; }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    ;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">%%\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">int main() {\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    return yyparse();\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"grub rescue>,  Oops!","link":"https:\/\/blog.triplez.cn\/posts\/grub-rescue-oops\/","pubDate":"Sun, 28 Nov 2021 21:56:16 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/grub-rescue-oops\/","description":"<p>\u6559\u4f60\u5982\u4f55\u4fee\u590d\u4e22\u5931\u7684 Linux GRUB \u542f\u52a8\u5f15\u5bfc\u3002<\/p>\n<h2 id=\"\u8d77\u56e0\">\u8d77\u56e0<\/h2>\n<p>\u4e3a\u4e86\u518d\u5c06\u795e\u8239 Z7 \u7528\u8d77\u6765\uff0c\u7b14\u8005\u51b3\u5b9a\u6269\u5c55\u5176\u4ec5\u6709 200GB \u7684\u6e38\u620f\u5206\u533a\u7a7a\u95f4\u3002\u7136\u800c\u7531\u4e8e\u53ef\u7528\u7a7a\u95f4\u7684\u4f4d\u7f6e\u5e76\u4e0d\u8fde\u7eed\uff0cWindows \u81ea\u5e26\u78c1\u76d8\u5de5\u5177\u65e0\u6cd5\u5904\u7406\u8fd9\u79cd\u60c5\u51b5\uff0c\u4e14\u7b14\u8005\u5e76\u4e0d\u5e0c\u671b\u5c06\u5206\u533a\u8f6c\u4e3a\u52a8\u6001\u5206\u533a\uff0c\u56e0\u6b64\u4f7f\u7528\u4e86\u4e00\u4e2a\u7b2c\u4e09\u65b9\u8f6f\u4ef6 <a href=\"https:\/\/www.easeus.com\/partition-manager\/epm-free.html\">EaseUS Partition Master Free<\/a> \u6765\u5b8c\u6210\u78c1\u76d8\u6570\u636e\u7684\u8fc1\u79fb\u548c\u5206\u533a\u91cd\u5206\u914d\u5de5\u4f5c\u3002\u5c31\u5728\u8bbe\u7f6e\u597d\u5206\u533a\uff0c\u91cd\u542f\u4e86\u4e4b\u540e\uff0c\u5c4f\u5e55\u4e0a\u8d6b\u7136\u663e\u793a\u7740\u4e00\u4e2a\u547d\u4ee4\u884c\u754c\u9762\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-3\">3<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">error: unknown filesystem.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Entering rescue mode...\n<\/span><\/span><span class=\"line\"><span class=\"cl\">grub rescue&gt; \n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>Oops\uff01\u96be\u9053\u91cd\u65b0\u5206\u4e2a\u533a\u5c31\u628a\u7cfb\u7edf\u641e\u6302\u4e86\u5417\uff1f\uff01<code>grub rescue&gt;<\/code> \u8fd9\u4e2a\u547d\u4ee4\u884c\u754c\u9762\u5728\u6211\u5fc3\u4e2d\u4e00\u76f4\u662f\u5669\u68a6\u822c\u7684\u5b58\u5728\uff0c\u4e4b\u524d\u9047\u5230\u90fd\u53ea\u80fd\u9009\u62e9\u8ba1\u7b97\u673a\u4e09\u5927\u6cd5\u5b9d\u4e4b\u4e00\uff1a\u91cd\u88c5\u6765\u89e3\u51b3\u95ee\u9898\u3002<\/p>\n<p>\u65e2\u7136\u53cc\u7cfb\u7edf\u91cc\u7684 Linux \u8fdb\u4e0d\u53bb\u4e86\uff0c\u90a3\u6211\u8bd5\u8bd5\u76f4\u63a5\u8fdb Windows\uff1f\u4e8e\u662f\u91cd\u542f\u4e86\u4e00\u4e0b\u673a\u5668\uff0c\u901a\u8fc7 BIOS \u76f4\u63a5\u8fdb\u5165\u4e86\u7cfb\u7edf\u76d8\u4f4d\u4e8e SSD \u4e2d\u7684 Windows\u3002\u597d\u5bb6\u4f19\uff0c\u8fd9\u80fd\u6b63\u5e38\u542f\u52a8\uff0c\u90a3\u95ee\u9898\u5c31\u4e0d\u5927\u4e86\u3002<\/p>\n<p>Windows \u78c1\u76d8\u5206\u533a\u7684\u91cd\u5206\u914d\u5de5\u4f5c\u5f97\u5230\u4e86\u9a8c\u8bc1\uff0c\u770b\u4e0a\u53bb\u975e\u5e38\u5b8c\u7f8e\u3002\u7b14\u8005\u7528\u4e8e\u5b58\u50a8\u6e38\u620f\u7684\u4e13\u7528\u5206\u533a\u5df2\u7ecf\u6269\u5bb9\u81f3 ~450GB \uff0c\u90a3\u63a5\u4e0b\u6765\u8fd8\u662f\u4fee\u590d\u4e0b Linux \u542f\u52a8\u5f15\u5bfc\u7684\u95ee\u9898\u5427\u3002<\/p>\n<p>\u7ecf\u8fc7\u4e00\u756a\u7b80\u5355\u7684\u641c\u7d22\uff0c\u7b14\u8005\u6478\u6e05\u4e86\u5176\u4e2d\u5927\u6982\u7684\u539f\u56e0\uff1a\u5728\u8fdb\u884c Windows \u78c1\u76d8\u64cd\u4f5c\u65f6\uff0c\u5bf9\u6574\u4e2a HDD \u505a\u4e86\u5206\u533a\u3001\u5408\u5e76\u7b49\u5904\u7406\uff0c\u5bfc\u81f4 GPT \u5143\u6570\u636e\u53d1\u751f\u4e86\u6539\u53d8\uff0cLinux \u7684\u5f15\u5bfc\u7a0b\u5e8f GRUB \u81ea\u7136\u5c31\u65e0\u6cd5\u627e\u5230\u4e4b\u524d\u7684 <code>\/boot<\/code> \u542f\u52a8\u5206\u533a\u4e86\uff0c\u8fd9\u4e5f\u662f\u62a5\u51fa <code>error: unknown filesystem<\/code> \u7684\u539f\u56e0\u3002<\/p>\n<h2 id=\"\u5728-grub-rescue-\u4e2d\u4fee\u590d\u542f\u52a8\u9879\">\u5728 grub rescue \u4e2d\u4fee\u590d\u542f\u52a8\u9879<\/h2>\n<p>\u7531\u4e8e\u662f\u786c\u76d8\u5143\u6570\u636e\u53d1\u751f\u4e86\u6539\u53d8\u5bfc\u81f4 GRUB \u5931\u6548\uff0c\u90a3\u6211\u4eec\u7684\u601d\u8def\u5c31\u662f\u66f4\u65b0 GRUB \u4e2d\u7684\u914d\u7f6e\u3002<\/p>\n<p>\u9996\u5148\u8981\u627e\u5230\u76ee\u524d Linux \u7684 <code>\/boot<\/code> \u542f\u52a8\u5206\u533a\u7684\u4f4d\u7f6e\uff0c\u5728 <code>grub rescue<\/code> \u4e2d\uff0c\u53ef\u4ee5\u7528 <code>ls<\/code> \u6765\u5bfb\u627e\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">grub rescue&gt; ls\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">(<\/span>hd0<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd0,gpt7<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd0,gpt6<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd0,gpt5<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd0,gpt4<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd0,gpt3<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd0,gpt2<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd0,gpt1<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd1<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd1,gpt3<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd1,gpt2<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>hd1,gpt1<span class=\"o\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u76f4\u63a5\u8f93\u5165 <code>ls<\/code> \uff0c\u5373\u53ef\u5f97\u5230\u6240\u6709\u7684\u5206\u533a\u4f4d\u7f6e\u3002\u4f46\u662f\u542f\u52a8\u5206\u533a\u5230\u5e95\u662f\u54ea\u4e2a\u5462\uff1f\u6211\u4eec\u53ef\u4ee5\u7ee7\u7eed\u7528 <code>ls<\/code> \u6765\u67e5\u627e\uff0c\u5148\u8bd5\u8bd5 <code>(hd0,gpt1)<\/code> \u8fd9\u4e2a\u5206\u533a\u5427\u3002<\/p>\n<blockquote>\n<p>\u6b64\u5904\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6211\u4eec\u8981\u67e5\u627e\u7684\u662f <code>\/boot\/grub<\/code> \u8fd9\u4e2a\u6587\u4ef6\u5939\u76ee\u5f55\u5b58\u5728\u7684\u5206\u533a\u3002\u7531\u4e8e\u7b14\u8005\u7684 <code>\/boot<\/code> \u542f\u52a8\u5206\u533a\u662f\u5355\u72ec\u6302\u8f7d\u7684\uff0c\u6240\u4ee5\u67e5\u627e\u7684\u8def\u5f84\u662f <code>&lt;partition&gt;\/grub<\/code> \u3002\u82e5\u5b89\u88c5\u7684 Linux \u5e76\u6ca1\u6709\u5355\u72ec\u6302\u8f7d <code>\/boot<\/code> \u542f\u52a8\u5206\u533a\uff0c\u5219\u67e5\u627e\u8def\u5f84\u5e94\u4e3a <code>&lt;partition&gt;\/boot\/grub<\/code>\u3002<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">grub rescue&gt; ls <span class=\"o\">(<\/span>hd0,gpt1<span class=\"o\">)<\/span>\/grub\n<\/span><\/span><span class=\"line\"><span class=\"cl\">error: unknown filesystem.\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8f93\u51fa\u4e3a <code>error: unknown filesystem.<\/code> \uff0c\u8bf4\u660e\u8fd9\u4e2a\u5206\u533a\u5e76\u4e0d\u662f\u6211\u4eec\u60f3\u8981\u7684\u542f\u52a8\u5206\u533a\uff0c\u90a3\u518d\u8bd5\u8bd5\u4e0b\u4e00\u4e2a\u5206\u533a\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">grub rescue&gt; ls <span class=\"o\">(<\/span>hd0,gpt2<span class=\"o\">)<\/span>\/grub\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/ ..\/ x86_64-efi\/ grubenv themes\/ fonts\/ grub.cfg\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>Bingo\uff01\u8fd9\u5c31\u662f\u6211\u4eec\u8981\u627e\u7684\u4e1c\u897f\u4e2b\uff01\u597d\uff0c\u8bb0\u4e0b\u8fd9\u4e2a\u5206\u533a <code>(hd0,gpt2)<\/code>\uff0c\u5b83\u5c31\u662f\u6211\u4eec\u5b9d\u8d35\u7684\u542f\u52a8\u5206\u533a\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u5c31\u662f\u7ed9 GRUB \u4fee\u6539\u542f\u52a8\u914d\u7f6e\uff0c\u53ea\u8981\u6539\u4e24\u4e2a\u53c2\u6570\u5373\u53ef\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-4-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">grub rescue&gt; <span class=\"nb\">set<\/span> <span class=\"nv\">root<\/span><span class=\"o\">=(<\/span>hd0,gpt2<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">grub rescue&gt; <span class=\"nb\">set<\/span> <span class=\"nv\">prefix<\/span><span class=\"o\">=(<\/span>hd0,gpt2<span class=\"o\">)<\/span>\/grub\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5c06 <code>root<\/code> \u8bbe\u7f6e\u4e3a\u542f\u52a8\u5206\u533a\u3002<\/li>\n<li>\u5c06 <code>prefix<\/code> \u8bbe\u7f6e\u4e3a <code>grub<\/code> \u5b89\u88c5\u6587\u4ef6\u5939\u3002\u82e5 <code>\/boot<\/code> \u672a\u6302\u8f7d\u5355\u72ec\u5206\u533a\uff0c\u4e5f\u53ef\u80fd\u4e3a <code>&lt;partition&gt;\/boot\/grub<\/code>\u3002<\/li>\n<\/ul>\n<p>\u914d\u7f6e\u4e5f\u4fee\u6539\u597d\u4e86\u4e4b\u540e\uff0c\u91cd\u65b0\u4f7f GRUB \u8fdb\u5165\u666e\u901a\u6a21\u5f0f\u5c31\u53ef\u4ee5\u627e\u56de\u6211\u4eec\u7684\u542f\u52a8\u9879\u4e86\uff01<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-5-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-5-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">grub rescue&gt; insmod normal\n<\/span><\/span><span class=\"line\"><span class=\"cl\">grub rescue&gt; normal\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6267\u884c\u5b8c\u540e\uff0c\u5e94\u8be5\u80fd\u770b\u5230\u6211\u4eec\u719f\u6089\u7684 GRUB \u5f15\u5bfc\u754c\u9762\u4e86\u3002<\/p>\n<h2 id=\"\u6301\u4e45\u5316\">\u6301\u4e45\u5316<\/h2>\n<p>\u4e8b\u5b9e\u4e0a\uff0c\u8fd9\u6837\u7684\u4fee\u590d\u53ea\u662f\u6682\u65f6\u7684\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5bf9 GRUB \u914d\u7f6e\u8fdb\u884c\u6301\u4e45\u5316\u7684\u66f4\u65b0\uff0c\u5426\u5219\u6bcf\u6b21\u5f00\u673a\u90fd\u8981\u8fd9\u6837\u64cd\u4f5c\u4e00\u904d\u3002<\/p>\n<p>\u8fdb\u5165 Linux\uff0c\u6253\u5f00\u7ec8\u7aef\uff0c\u8f93\u5165\u5982\u4e0b\u547d\u4ee4\uff0cGRUB \u5c31\u4f1a\u81ea\u52a8\u66f4\u65b0\u914d\u7f6e\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-6-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">$ sudo update-grub\n<\/span><\/span><span class=\"line\"><span class=\"cl\">$ sudo grub-install \/dev\/sda\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>\/dev\/sda<\/code> \u4e3a Linux \u7684\u5b89\u88c5\u78c1\u76d8\u3002<\/p>\n<p>\u53ef\u4ee5\u518d\u91cd\u542f\u4e00\u6b21\u8ba1\u7b97\u673a\uff0c\u9a8c\u8bc1 Linux \u542f\u52a8\u5f15\u5bfc\u662f\u5426\u4fee\u590d\u6210\u529f\u3002<\/p>\n<h2 id=\"references\">References<\/h2>\n<ul>\n<li>Repair Linux boot failures in GRUB 2 rescue mode<\/br>\n<a href=\"https:\/\/www.howtoforge.com\/tutorial\/repair-linux-boot-with-grub-rescue\/\">https:\/\/www.howtoforge.com\/tutorial\/repair-linux-boot-with-grub-rescue\/<\/a><\/li>\n<li>grub rescue \u6551\u63f4\u6a21\u5f0f\u7684\u5904\u7406<\/br>\n<a href=\"http:\/\/xstarcd.github.io\/wiki\/Linux\/grub_rescue.html\">http:\/\/xstarcd.github.io\/wiki\/Linux\/grub_rescue.html<\/a><\/li>\n<li>Linux \u7cfb\u7edf\u5f15\u5bfc\u5931\u8d25\uff0c\u51fa\u73b0 grub rescue \u6062\u590d\u754c\u9762 - \u5c11\u6570\u6d3e<\/br>\n<a href=\"https:\/\/sspai.com\/post\/55875\">https:\/\/sspai.com\/post\/55875<\/a><\/li>\n<\/ul>"},{"title":"\u6d45\u8c08 beancount \u501f\u6b3e\u8fd8\u6b3e\u4ea4\u6613\u8bb0\u5f55\u65b9\u6cd5","link":"https:\/\/blog.triplez.cn\/posts\/beancount-lend-return-bookkeeping-method\/","pubDate":"Tue, 10 Aug 2021 22:38:24 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/beancount-lend-return-bookkeeping-method\/","description":"<p>\u672c\u6587\u57fa\u4e8e\u7684\u5047\u8bbe\u662f\uff1a\u53cb\u4eba A \u9700\u8981\u8d2d\u4e70\u4ea7\u54c1 B\uff0c\u4f46\u9700\u8981\u4f60\u6765\u4ee3\u4ed6\u8d2d\u4e70\u3002\u63a2\u8ba8\u4ee5\u4e0b\u51e0\u79cd\u4e8b\u4ef6\u53d1\u751f\u987a\u5e8f\u7684\u8bb0\u8d26\u65b9\u6cd5\u3002<\/p>\n<p>\u9664\u4e86\u81ea\u5df1\u5df2\u6709\u7684 <code>Assets:Bank:Z<\/code> \u5916\uff0c\u9700\u8981\u989d\u5916\u5efa\u7acb\u8fd9\u4e9b\u8d26\u6237\uff1a<\/p>\n<ul>\n<li><code>Assets:Receivables:A<\/code><\/li>\n<\/ul>\n<h2 id=\"\u5148\u8f6c\u8d26\u518d\u4ea4\u6613\">\u5148\u8f6c\u8d26\uff0c\u518d\u4ea4\u6613<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-15\">15<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">; \u8f6c\u8d26\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-00 * &#34;A transfer money&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Receivables:A -1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Bank:Z         1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \n<\/span><\/span><span class=\"line\"><span class=\"cl\">; \u6b64\u65f6 Assets:Bank:Z \u8d26\u6237\u8d77\u7740\u4ee3\u6301\u8d44\u91d1\u7684\u4f5c\u7528\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; \u4ea4\u6613\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 * &#34;Buy B for A&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Bank:Z         -1000.00 CNY  \n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Receivables:A   1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \n<\/span><\/span><span class=\"line\"><span class=\"cl\">; \u6574\u4e2a\u8fc7\u7a0b\u7ed3\u675f\u540e\u5404\u8d26\u6237\u4f59\u989d\uff1a\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; Assets:Bank:Z             0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; Assets:Receivables:A      0.00 CNY\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u5148\u4ea4\u6613\u518d\u8f6c\u8d26\u57ab\u4ed8\">\u5148\u4ea4\u6613\uff0c\u518d\u8f6c\u8d26\uff08\u57ab\u4ed8\uff09<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-16\">16<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">; \u4ea4\u6613\uff08\u57ab\u4ed8\uff09\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-00 * &#34;Buy B for A&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Receivables:A  1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Bank:Z        -1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \n<\/span><\/span><span class=\"line\"><span class=\"cl\">; \u6b64\u65f6 Assets:Bank:Z \u8d26\u6237\u8d77\u7740\u57ab\u4ed8\u8d44\u91d1\u7684\u4f5c\u7528\uff0c\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; Assets:Receivables:A \u7528\u4e8e\u5e94\u6536\u6765\u81ea A \u7684\u6b3e\u9879\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; \u8f6c\u8d26\uff08\u8fd8\u6b3e\uff09\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 * &#34;A transfer money&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Bank:Z          1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Receivables:A  -1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \n<\/span><\/span><span class=\"line\"><span class=\"cl\">; \u4ea4\u6613\u7ed3\u675f\u540e\u5404\u8d26\u6237\u4f59\u989d\uff1a\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; Assets:Bank:Z             0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; Assets:Receivables:A      0.00 CNY\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u8f6c\u8d26\u548c\u4ea4\u6613\u540c\u6b65\">\u8f6c\u8d26\u548c\u4ea4\u6613\u540c\u6b65<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-10\">10<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">; \u8f6c\u8d26+\u4ea4\u6613\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-00 * &#34;A transfer money to buy B&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Receivables:A -1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Bank:Z         1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Bank:Z        -1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Assets:Receivables:A  1000.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; \u4ea4\u6613\u7ed3\u675f\u540e\u5404\u8d26\u6237\u4f59\u989d\uff1a\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; Assets:Bank:Z              0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; Assets:Receivables:A       0.00 CNY\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"\u6708\u5ea6\u8bb0\u8d26\u5de5\u4f5c\u6d41","link":"https:\/\/blog.triplez.cn\/posts\/monthly-bookkeeping-workflow\/","pubDate":"Sun, 27 Jun 2021 12:57:49 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/monthly-bookkeeping-workflow\/","description":"<h2 id=\"\u51c6\u5907\u5de5\u4f5c\">\u51c6\u5907\u5de5\u4f5c<\/h2>\n<ul>\n<li>\u4e00\u90e8\u88c5\u6709 <code>beancount<\/code> \u3001<code>fava<\/code> \u4ee5\u53ca <code>double-entry-generator<\/code> \u7684 Mac \u6216 PC\u3002<\/li>\n<li>\u4e00\u90e8 iPhone \u6216 Android \u624b\u673a\u3002<\/li>\n<li>\u672c\u5730\u5b58\u50a8\u4e2a\u4eba <code>my-bookkeepings<\/code> \u8d26\u672c\u6700\u65b0\u5185\u5bb9\u3002<\/li>\n<\/ul>\n<h2 id=\"\u5f00\u59cb\u5de5\u4f5c\">\u5f00\u59cb\u5de5\u4f5c\uff01<\/h2>\n<details>\n<summary>Balance CheatSheet<\/summary>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-0-16\">16<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">; wechat pay balance\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-00 document Assets:Digital:Wechat:Cash &#34;.\/path\/to\/your_wechat_bills.csv&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance  Assets:Digital:Wechat:Cash    &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; alipay balance\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-00 document Assets:Digital:Alipay:Cash &#34;.\/path\/to\/your_alipay_bills.csv&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance  Assets:Digital:Alipay:Cash    &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">; bank balance\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:ICBC:Savings          &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:ICBC:SocialSecurity   &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:BOCOM:Savings         &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:BOC:Savings           &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Liabilities:CreditCard:CN:ICBC       &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">1111-11-19 balance Liabilities:CreditCard:CN:CMB        &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">1111-11-20 balance Liabilities:CreditCard:CN:BOCOM      &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/details>\n<h3 id=\"\u5bfc\u5165\u5fae\u4fe1\u652f\u4ed8\u8d26\u5355\">\u5bfc\u5165\u5fae\u4fe1\u652f\u4ed8\u8d26\u5355<\/h3>\n<p>\u5148\u67e5\u770b\u4e0a\u6708\u5fae\u4fe1 beancount \u8d26\u5355\uff0c\u786e\u5b9a\u6700\u540e\u5bfc\u5165\u65e5\u3002<\/p>\n<p>\u5728<a href=\"https:\/\/blog.triplez.cn\/posts\/bills-export-methods\/#%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98\">\u300c\u5fae\u4fe1\u300d\u4e2d\u5bfc\u51fa<\/a>\u4ece\u6700\u540e\u5bfc\u5165\u65e5\u81f3\u4eca\u65e5\u7684\u5fae\u4fe1\u652f\u4ed8\u8d26\u5355\u3002<\/p>\n<p>\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u751f\u6210\u8d26\u5355\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-1-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-1-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-1-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">double-entry-generator translate <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --config .\/config\/double-entry-generator\/wechat.yaml <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --provider wechat <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --output tmp-wechat.beancount <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  your_wechat_bills.csv\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4fee\u6539\u76f8\u5173 <code>FIXME<\/code> \u8d26\u6237\u4ea4\u6613\uff08posting\uff09\u3002<\/p>\n<p>\u5728\u5f53\u6708 <code>index.beancount<\/code> \u4e2d\u6dfb\u52a0\u5fae\u4fe1\u652f\u4ed8\u7684\u76f8\u5173 <code>balance<\/code> \u548c <code>document<\/code> \u8bed\u53e5\uff0c\u4f8b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-2-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-2-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-2-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">0000-00-00 document Assets:Digital:Wechat:Cash &#34;.\/path\/to\/your_wechat_bills.csv&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance  Assets:Digital:Wechat:Cash    &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p><code>balance<\/code> \u65e5\u671f\u5fc5\u987b\u4e3a <code>T+1<\/code>\uff0c\u5426\u5219\u8bed\u53e5\u4f1a\u5ffd\u7565\u4eca\u65e5\u4ea4\u6613\uff0c\u5bfc\u81f4\u5bf9\u8d26\u5931\u8d25\u3002<\/p>\n<p>\u82e5\u5bf9\u8d26\u5931\u8d25\uff0c\u7279\u522b\u662f\u5c0f\u989d\u5dee\u5f02\uff0c\u6781\u6709\u53ef\u80fd\u662f\u300c\u96f6\u94b1\u901a\u300d\u53d1\u653e\u5229\u606f\u6240\u81f4\u3002\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5fae\u4fe1\u300c\u96f6\u94b1\u901a\u300d\u7684\u5229\u606f\u53d1\u653e\u5e76\u4e0d\u5305\u62ec\u5728\u5fae\u4fe1\u5bfc\u51fa\u7684\u8d26\u5355\u5f53\u4e2d\u3002<\/p>\n<p>\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u4ece\u300c\u7406\u8d22\u901a\u300d\u8f6c\u5165\u81f3\u300c\u94f6\u884c\u5361\u300d\u7684\u4ea4\u6613\uff0c\u5fae\u4fe1\u652f\u4ed8\u662f\u6ca1\u6709\u8bb0\u5f55\u7684\uff0c\u89c1<a href=\"https:\/\/github.com\/deb-sig\/double-entry-generator\/issues\/29#issuecomment-888331269\">\u8fd9\u91cc<\/a>\u3002<\/p>\n<\/blockquote>\n<h3 id=\"\u5bfc\u5165\u652f\u4ed8\u5b9d\u8d26\u5355\">\u5bfc\u5165\u652f\u4ed8\u5b9d\u8d26\u5355<\/h3>\n<p>\u5148\u67e5\u770b\u4e0a\u6708\u652f\u4ed8\u5b9d beancount \u8d26\u5355\uff0c\u786e\u5b9a\u6700\u540e\u5bfc\u5165\u65e5\u3002<\/p>\n<p>\u5728<a href=\"https:\/\/blog.triplez.cn\/posts\/bills-export-methods\/#%E6%94%AF%E4%BB%98%E5%AE%9D\">\u300c\u652f\u4ed8\u5b9d\u300d\u5bfc\u51fa<\/a>\u4ece\u6700\u540e\u5bfc\u5165\u65e5\u81f3\u4eca\u65e5\u7684\u652f\u4ed8\u5b9d\u8d26\u5355\u3002<\/p>\n<p>\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u751f\u6210\u8d26\u5355\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-3-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-3-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-3-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">double-entry-generator translate <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --config .\/config\/double-entry-generator\/alipay.yaml <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --provider alipay <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --output tmp-alipay.beancount <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  your_alipay_bills.csv\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4fee\u6539\u76f8\u5173 <code>FIXME<\/code> \u8d26\u6237\u4ea4\u6613\uff08posting\uff09\u3002<\/p>\n<p>\u5728\u5f53\u6708 <code>index.beancount<\/code> \u4e2d\u6dfb\u52a0\u652f\u4ed8\u5b9d\u7684\u76f8\u5173 <code>balance<\/code> \u548c <code>document<\/code> \u8bed\u53e5\uff0c\u4f8b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-4-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-4-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-4-2\">2<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">0000-00-00 document Assets:Digital:Alipay:Cash &#34;.\/path\/to\/your_alipay_bills.csv&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance  Assets:Digital:Alipay:Cash    &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p><code>balance<\/code> \u65e5\u671f\u5fc5\u987b\u4e3a <code>T+1<\/code>\uff0c\u5426\u5219\u8bed\u53e5\u4f1a\u5ffd\u7565\u4eca\u65e5\u4ea4\u6613\uff0c\u5bfc\u81f4\u5bf9\u8d26\u5931\u8d25\u3002<\/p>\n<\/blockquote>\n<h3 id=\"\u5bfc\u5165\u706b\u5e01\u8d26\u5355\">\u5bfc\u5165\u706b\u5e01\u8d26\u5355<\/h3>\n<p>\uff08\u53ef\u9009\uff0c\u4f9d\u636e\u6708\u5ea6\u662f\u5426\u6709\u706b\u5e01\u4ea4\u6613\uff09<\/p>\n<p>\u5148\u67e5\u770b\u4e0a\u6708\u706b\u5e01 beancount \u8d26\u5355\uff0c\u786e\u5b9a\u6700\u540e\u5bfc\u5165\u65e5\u3002<\/p>\n<p>\u5728<a href=\"https:\/\/blog.triplez.cn\/posts\/bills-export-methods\/#%E7%81%AB%E5%B8%81-global\">\u300c\u706b\u5e01\u300d\u5bfc\u51fa<\/a>\u4ece\u6700\u540e\u5bfc\u5165\u65e5\u81f3\u4eca\u65e5\u7684\u706b\u5e01\u8d26\u5355\u3002<\/p>\n<p>\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u751f\u6210\u8d26\u5355\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-5-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-5-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-5-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-5-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-5-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-5-5\">5<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">double-entry-generator translate <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --config .\/config\/double-entry-generator\/huobi.yaml <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --provider huobi <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --output tmp-huobi.beancount <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  your_huobi_bills.csv\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4fee\u6539\u76f8\u5173 <code>FIXME<\/code> \u8d26\u6237\u4ea4\u6613\uff08posting\uff09\u3002<\/p>\n<h3 id=\"\u5bfc\u5165\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\u8d26\u5355\">\u5bfc\u5165\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\u8d26\u5355<\/h3>\n<p>\u5148\u67e5\u770b\u4e0a\u6708\u5de5\u5546\u94f6\u884c beancount \u8d26\u5355\uff0c\u786e\u5b9a\u6700\u540e\u5bfc\u5165\u65e5\u3002<\/p>\n<p>\u5728<a href=\"https:\/\/blog.triplez.cn\/posts\/bills-export-methods\/#%E4%B8%AD%E5%9B%BD%E5%B7%A5%E5%95%86%E9%93%B6%E8%A1%8C\">\u300c\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\u300d\u5bfc\u51fa<\/a>\u4ece\u6700\u540e\u5bfc\u5165\u65e5\u81f3\u4eca\u65e5\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\u7684\u501f\u8bb0\u5361\u548c\u4fe1\u7528\u5361\u8d26\u5355\u3002<\/p>\n<p>\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u751f\u6210\u8d26\u5355\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-6-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-8\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-9\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-10\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-11\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-12\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-13\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-14\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-15\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-16\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-6-17\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-6-17\">17<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u751f\u6210\u8d37\u8bb0\u5361\u8d26\u5355<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">double-entry-generator translate <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --config .\/config\/double-entry-generator\/icbc-1120-5595.yaml <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --provider icbc <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --output tmp-icbc-1120-5595.beancount <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  your_icbc_1120_5595_bills.csv\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u751f\u6210\u501f\u8bb0\u5361\u8d26\u5355<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">double-entry-generator translate <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --config .\/config\/double-entry-generator\/icbc-9855.yaml <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --provider icbc <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --output tmp-icbc-9855.beancount <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  your_icbc_9855_bills.csv\n<\/span><\/span><span class=\"line\"><span class=\"cl\">double-entry-generator translate <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --config .\/config\/double-entry-generator\/icbc-5868.yaml <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --provider icbc <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  --output tmp-icbc-5868.beancount <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>  your_icbc_5868_bills.csv\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4fee\u6539\u76f8\u5173 <code>FIXME<\/code> \u8d26\u6237\u4ea4\u6613\uff08posting\uff09\u3002<\/p>\n<p>\u5728\u5f53\u6708 <code>index.beancount<\/code> \u4e2d\u6dfb\u52a0\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\u7684\u76f8\u5173 <code>balance<\/code> \u548c <code>document<\/code> \u8bed\u53e5\uff0c\u4f8b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-7-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-7-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-7-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-7-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-7-4\">4<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">0000-00-00 document Assets:Bank:CN:ICBC:Savings &#34;.\/path\/to\/your_icbc_debit_bills.csv&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-00 document Liabilities:CreditCard:CN:ICBC &#34;.\/path\/to\/your_icbc_credit_bills.csv&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:ICBC:Savings          &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Liabilities:CreditCard:CN:ICBC       &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5bfc\u5165\u5176\u4ed6\u94f6\u884c\u5361\u8d26\u5355\">\u5bfc\u5165\u5176\u4ed6\u94f6\u884c\u5361\u8d26\u5355<\/h3>\n<p><code>double-entry-generator<\/code> \u76ee\u524d\u4ec5\u652f\u6301\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\u8d26\u5355\u7684\u8f6c\u6362\uff0c\u9274\u4e8e\u4e2a\u4eba\u4f7f\u7528\u94f6\u884c\u5361\u7684\u4ea4\u6613\u8f83\u5c11\uff08&lt;10 \u7b14\/\u6708\uff09\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u624b\u52a8\u8bb0\u8d26\u3002<\/p>\n<p>\u6253\u5f00\uff1a<\/p>\n<ul>\n<li>\u4e2d\u56fd\u5de5\u5546\u94f6\u884c<\/li>\n<li>\u62db\u5546\u94f6\u884c<\/li>\n<li>\u4e2d\u56fd\u94f6\u884c<\/li>\n<li>\u4ea4\u901a\u94f6\u884c<\/li>\n<\/ul>\n<p>\u5148\u5199\u4e00\u4e2a <code>T+1<\/code> \u7684 <code>balance<\/code> \u5bf9\u8d26\u8bed\u53e5\uff0c\u5bf9\u76f8\u5173\u7684\u8d26\u6237\u8fdb\u884c\u65ad\u8a00\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-8-1\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-1\">1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-8-2\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-2\">2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-8-3\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-3\">3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-8-4\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-4\">4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-8-5\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-5\">5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-8-6\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-6\">6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-8-7\"><a style=\"outline: none; text-decoration:none; color:inherit\" href=\"#hl-8-7\">7<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:ICBC:Savings          &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:ICBC:SocialSecurity   &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:BOCOM:Savings         &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Assets:Bank:CN:BOC:Savings           &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0000-00-01 balance Liabilities:CreditCard:CN:ICBC       &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">1111-11-19 balance Liabilities:CreditCard:CN:CMB        &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><span class=\"line\"><span class=\"cl\">1111-11-20 balance Liabilities:CreditCard:CN:BOCOM      &lt;balance_value&gt; ~ 0.00 CNY\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p>\u7b14\u8005\u7684\u4fe1\u7528\u5361\u8d26\u5355\u5206\u522b\u662f\u6bcf\u6708 1 \u65e5\u548c 19 \u65e5\u51fa\u8d26\uff0c\u6545\u5c06\u4fe1\u7528\u5361\u65ad\u8a00\u7684\u65e5\u671f\u8bbe\u4e3a\u5f53\u6708 1 \u65e5\u4ee5\u53ca 19 \u65e5\u3002<\/p>\n<p>\u5de5\u5546\u94f6\u884c\u4fe1\u7528\u5361\u53ef\u4ee5\u770b\u5230\u5b9e\u65f6\u4f59\u989d\uff0c\u800c\u62db\u884c\u548c\u4ea4\u884c\u7684\u53ea\u80fd\u5728\u51fa\u8d26\u5f53\u5929\u624d\u53ef\u83b7\u5f97\u4f59\u989d\u3002\u56e0\u6b64\u5de5\u884c\u4fe1\u7528\u5361\u53ef\u4ee5\u76f4\u63a5\u65ad\u8a00\u5f53\u65e5\u4f59\u989d\uff0c\u800c\u62db\u884c\u3001\u4ea4\u884c\u94f6\u884c\u5361\u9700\u8981\u65ad\u8a00\u51fa\u8d26\u65e5\u4e0e\u4f59\u989d\u3002<\/p>\n<p>\u4e00\u822c <code>0000-00-01<\/code> \u4e3a\u8bb0\u8d26\u5f53\u65e5 <code>T+1<\/code> \uff0c\u800c <code>1111-11<\/code> \u4e00\u822c\u4e3a\u8bb0\u8d26\u5f53\u6708\u7684\u6708\u4efd\u3002<\/br>\n\ud83c\udf30\uff1a\u82e5\u8bb0\u8d26\u65f6\u95f4\u4e3a <code>2023-01-25<\/code> \uff0c\u5219 <code>0000-00-01<\/code> \u5e94\u6539\u4e3a <code>2023-01-26<\/code> \uff0c<code>1111-11<\/code> \u5e94\u6539\u4e3a <code>2023-01<\/code> \u3002<\/p>\n<\/blockquote>\n<p>\u67e5\u627e\u5f53\u6708\u76f8\u5173\u94f6\u884c\u5361\u8d26\u5355\uff0c\u624b\u52a8\u8bb0\u5f55\u5728\u5f53\u6708\u7684 <code>index.beancount<\/code> \u4e2d\u3002<\/p>\n<h2 id=\"\u603b\u7ed3\">\u603b\u7ed3<\/h2>\n<p>\u4ee5\u6708\u4e3a\u7c92\u5ea6\uff0c\u5fae\u4fe1\u3001\u652f\u4ed8\u5b9d\u8d26\u5355\u57fa\u672c\u90fd\u80fd\u591f\u6b63\u5e38\u8f6c\u6362\uff0c\u6574\u4e2a\u5de5\u4f5c\u6d41\u4e0b\u6765\u9700\u8981\u82b1\u8d39\u7684\u65f6\u95f4\u6210\u672c\u5728\u4e8c\u5341\u5206\u949f\u4ee5\u5185\u3002<\/p>\n<p>\u4f7f\u7528 <a href=\"https:\/\/github.com\/deb-sig\/double-entry-generator\/\"><code>double-entry-generator<\/code><\/a> \u80fd\u591f\u57fa\u672c\u5b9e\u73b0\u4e2a\u4eba\u8bb0\u8d26\u671f\u671b\uff0c\u53ef\u4ee5\u8003\u8651\u56fa\u5316\u8be5\u5de5\u4f5c\u6d41\uff0c\u4ee5\u957f\u671f\u4f7f\u7528\u3002<\/p>\n<h2 id=\"\u76f8\u5173\u94fe\u63a5\">\u76f8\u5173\u94fe\u63a5<\/h2>\n<ol>\n<li>beancount\/beancount<\/br>\n<a href=\"https:\/\/github.com\/beancount\/beancount\">https:\/\/github.com\/beancount\/beancount<\/a><\/li>\n<li>beancount\/fava<\/br>\n<a href=\"https:\/\/github.com\/beancount\/fava\">https:\/\/github.com\/beancount\/fava<\/a><\/li>\n<li>deb-sig\/double-entry-generator<\/br>\n<a href=\"https:\/\/github.com\/deb-sig\/double-entry-generator\">https:\/\/github.com\/deb-sig\/double-entry-generator<\/a><\/li>\n<li>\u591a\u79cd\u652f\u4ed8\u8d26\u6237\u7684\u8d26\u5355\u5bfc\u51fa\u53ca\u67e5\u770b\u65b9\u6cd5\u6c47\u603b<\/br>\n<a href=\"https:\/\/blog.triplez.cn\/posts\/bills-export-methods\/\">https:\/\/blog.triplez.cn\/posts\/bills-export-methods\/<\/a><\/li>\n<\/ol>\n"},{"title":"\u591a\u79cd\u652f\u4ed8\u8d26\u6237\u7684\u8d26\u5355\u5bfc\u51fa\u53ca\u67e5\u770b\u65b9\u6cd5\u6c47\u603b","link":"https:\/\/blog.triplez.cn\/posts\/bills-export-methods\/","pubDate":"Sat, 19 Jun 2021 11:05:38 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/bills-export-methods\/","description":"<h2 id=\"\u7b2c\u4e09\u65b9\u7535\u5b50\u652f\u4ed8\">\u7b2c\u4e09\u65b9\u7535\u5b50\u652f\u4ed8<\/h2>\n<h3 id=\"\u5fae\u4fe1\u652f\u4ed8\">\u5fae\u4fe1\u652f\u4ed8<\/h3>\n<ol>\n<li>\n<p>\u6253\u5f00\u201c\u5fae\u4fe1\u201d\uff0c\u70b9\u51fb\u201c\u6211\u7684\u201d\uff0c\u70b9\u51fb\u201c\u652f\u4ed8\u201d\uff0c\u8fdb\u5165\u5982\u4e0b\u754c\u9762\uff1a<\/p>\n<figure class=\"align-center \">\n       <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210517140448564.png#center\"\/> \n   <\/figure>\n\n<\/li>\n<li>\n<p>\u70b9\u51fb\u201c\u94b1\u5305\u201d\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u201c\u8d26\u5355\u201d\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u7684\u201c\u5e38\u89c1\u95ee\u9898\u201d\u3002<\/p>\n<figure class=\"align-center \">\n       <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210517140717511.png#center\"\/> \n   <\/figure>\n\n<\/li>\n<li>\n<p>\u70b9\u51fb\u201c\u4e0b\u8f7d\u8d26\u5355\u201d\u3002<\/p>\n<figure class=\"align-center \">\n       <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210517140740746.png#center\"\/> \n   <\/figure>\n\n<\/li>\n<li>\n<p>\u9009\u62e9\u201c\u7528\u4e8e\u4e2a\u4eba\u5bf9\u8d26\u201d\u3002<\/p>\n<figure class=\"align-center \">\n       <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210517140814585.png#center\"\/> \n   <\/figure>\n\n<\/li>\n<li>\n<p>\u81ea\u884c\u9009\u62e9\u9700\u8981\u5bfc\u51fa\u7684\u65e5\u671f\u8303\u56f4\uff0c\u586b\u5199\u81ea\u5df1\u7684\u90ae\u7bb1\u5373\u53ef\u3002<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"\u652f\u4ed8\u5b9d\">\u652f\u4ed8\u5b9d<\/h3>\n<p>\u6253\u5f00\u300c\u652f\u4ed8\u5b9d\u300dAPP\uff0c\u5728\u83dc\u5355\u680f\u4e2d\u70b9\u51fb\u300c\u6211\u7684\u300d\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210619105626698.png#center\"\/> \n<\/figure>\n\n<p>\u8fdb\u5165\u300c\u8d26\u5355\u300d\uff0c\u70b9\u51fb\u53f3\u4e0a\u89d2\u300c&hellip;\u300d\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210619104713644.png#center\"\/> \n<\/figure>\n\n<p>\u9009\u62e9\u300c\u5f00\u5177\u4ea4\u6613\u6d41\u6c34\u8bc1\u660e\u300d\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210619105742606.png#center\"\/> \n<\/figure>\n\n<p>\u5728\u300c\u9009\u62e9\u7533\u8bf7\u7528\u9014\u300d\u4e2d\u9009\u62e9\u300c\u7528\u4e8e\u4e2a\u4eba\u5bf9\u8d26\u300d\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210619105952389.png#center\"\/> \n<\/figure>\n\n<p>\u9009\u62e9\u9700\u8981\u7684\u4ea4\u6613\u65f6\u95f4\u8303\u56f4\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210619105910073.png#center\"\/> \n<\/figure>\n\n<p>\u586b\u5199\u7535\u5b50\u90ae\u7bb1\u540e\uff0c\u5373\u53ef\u83b7\u53d6\u8d26\u5355\u3002<\/p>\n<h4 id=\"\u4f59\u989d\u5b9d\">\u4f59\u989d\u5b9d<\/h4>\n<p>\u6253\u5f00<a href=\"https:\/\/yebprod.alipay.com\/yeb\/asset.htm\">\u4f59\u989d\u5b9d\u7f51\u7ad9<\/a>\uff0c\u9009\u62e9\u65e5\u671f\uff0c\u70b9\u51fb\u201c\u4e0b\u8f7d\u201d\u5373\u53ef\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210522013459796.png#center\"\/> \n<\/figure>\n\n<h2 id=\"\u94f6\u884c\">\u94f6\u884c<\/h2>\n<h3 id=\"\u501f\u8bb0\u5361\">\u501f\u8bb0\u5361<\/h3>\n<h4 id=\"\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\">\u4e2d\u56fd\u5de5\u5546\u94f6\u884c<\/h4>\n<p>\u767b\u5f55<a href=\"https:\/\/mybank.icbc.com.cn\/icbc\/newperbank\/perbank3\/frame\/frame_index.jsp\">\u4e2d\u56fd\u5de5\u5546\u94f6\u884c\u4e2a\u4eba\u7f51\u4e0a\u94f6\u884c<\/a>\uff0c\u5728\u300c\u6211\u7684\u5361\u5305\u300d\u4e2d\u9009\u62e9\u67d0\u4e2a\u94f6\u884c\u5361\uff0c\u70b9\u51fb\u300c\u660e\u7ec6\u300d\u6309\u94ae\uff0c\u8fdb\u5165\u300c\u660e\u7ec6\u67e5\u8be2\u300d\u3002<\/p>\n<blockquote>\n<p>macOS \u9700\u8981\u4f7f\u7528 Safari \u5e76\u5b89\u88c5\u5de5\u884c\u63d2\u4ef6\u624d\u53ef\u6b63\u5e38\u767b\u5f55\u3002<\/p>\n<\/blockquote>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210529004103252.png#center\"\/> \n<\/figure>\n\n<p>\u9009\u62e9\u9700\u8981\u7684\u65f6\u95f4\u533a\u95f4\uff0c\u5728\u300c\u4e0b\u8f7d\u660e\u7ec6\u683c\u5f0f\u300d\u9009\u62e9 \u300cEXCEL \u683c\u5f0f\uff08.csv\uff09\u300d\uff0c\u70b9\u51fb\u300c\u4e0b\u8f7d\u300d\u540e\uff0c\u63d0\u793a\u201c\u660e\u7ec6\u6b63\u5728\u4e0b\u8f7d\u4e2d\uff0c\u8bf7\u7a0d\u540e\u56de\u5230\u672c\u4ea4\u6613\u9875\u9762\u67e5\u770b\u4e0b\u8f7d\u7ed3\u679c\u201d\u3002\u7a0d\u7b49\u7247\u523b\uff0c\u9875\u9762\u63d0\u793a\u201c\u60a8\u7684\u5386\u53f2\u660e\u7ec6\u4e0b\u8f7d\u5df2\u7ecf\u5904\u7406\u6210\u529f\uff0c\u8bf7\u60a8\u518d\u6b21\u8fdb\u5165\u660e\u7ec6\u67e5\u8be2\u9875\u9762\u8fdb\u884c\u4e0b\u8f7d\uff01\u201d\u3002\u6b64\u65f6\u91cd\u65b0\u70b9\u51fb\u300c\u67e5\u8be2\u300d\uff0c\u5728\u300c\u4e0b\u8f7d\u300d\u6309\u94ae\u65c1\u8fb9\u4f1a\u51fa\u73b0\u53ef\u4e0b\u8f7d\u7ed3\u679c\u7684\u94fe\u63a5\uff0c\u70b9\u51fb\u5373\u53ef\u4e0b\u8f7d\u771f\u6b63\u7684 csv \u8d26\u5355\u6587\u4ef6\uff08\u4e0d\u8981\u5fd8\u8bb0\u91cd\u65b0\u5c06\u4e0b\u8f7d\u683c\u5f0f\u6539\u4e3a csv\uff09\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/image-20210529005155486.png#center\"\/> \n<\/figure>\n\n<h4 id=\"\u4ea4\u901a\u94f6\u884c\">\u4ea4\u901a\u94f6\u884c<\/h4>\n<p>\u624b\u673a\u300c\u4ea4\u901a\u94f6\u884c APP\u300d-&gt;\u67e5\u627e\u201c\u4ea4\u6613\u660e\u7ec6\u201d-&gt;\u6700\u4e0b\u9762\u201c\u662f\u5426\u9700\u8981\u5f00\u7acb\u4ea4\u6613\u660e\u7ec6\u8bc1\u660e\uff1f\u201d\u70b9\u51fb\u300c\u7acb\u5373\u7533\u8bf7\u300d-&gt;\u300c\u4ea4\u6613\u660e\u7ec6\u6e05\u5355\u300d-&gt;\u300c\u7535\u5b50\u7248\u300d-&gt; \u9009\u62e9\u65e5\u671f-&gt;\u586b\u5199\u7535\u5b50\u90ae\u7bb1-&gt;\u300c\u786e\u8ba4\u5f00\u7acb\u300d-&gt;\u8f93\u5165\u94f6\u884c\u5361\u5bc6\u7801-&gt;\u5f00\u7acb\u6210\u529f<\/p>\n<p>PDF \u4e3a\u52a0\u5bc6\u683c\u5f0f\uff0c\u52a0\u5bc6\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u540e\u516d\u4f4d\u3002<\/p>\n<p><del>\u5982\u4f55\u5f00\u7acb CSV \u683c\u5f0f\u7684\u8d26\u5355\uff1f<\/del><\/p>\n<h4 id=\"\u4e2d\u56fd\u94f6\u884c\">\u4e2d\u56fd\u94f6\u884c<\/h4>\n<p>\u624b\u673a\u300c\u4e2d\u56fd\u94f6\u884c APP\u300d-&gt;\u300c\u9996\u9875\u300d-&gt;\u300c\u66f4\u591a\u300d-&gt;\u300c\u52a9\u624b\u300d-&gt;\u300c\u4ea4\u6613\u6d41\u6c34\u6253\u5370\u300d-&gt;\u300c\u7acb\u5373\u7533\u8bf7\u300d-&gt; \u9009\u62e9\u65e5\u671f -&gt; \u9009\u62e9\u53d1\u9001\u90ae\u7bb1 -&gt; \u586b\u5199\u7535\u5b50\u90ae\u7bb1 -&gt; \u70b9\u51fb\u300c\u7533\u8bf7\u300d-&gt; \u7533\u8bf7\u6210\u529f<\/p>\n<p>PDF \u4e3a\u52a0\u5bc6\u683c\u5f0f\uff0c\u52a0\u5bc6\u5bc6\u7801\u5728\u300c\u4ea4\u6613\u6d41\u6c34\u6253\u5370\u300d\u7684\u300c\u7533\u8bf7\u8bb0\u5f55\u300d\u4e2d\u53ef\u4ee5\u627e\u5230\u3002<\/p>\n<p><del>\u7f51\u4e0a\u94f6\u884c\uff1a<\/del>\n<del>\u9700\u8981\u5b89\u88c5\u5b89\u5168\u8f93\u5165\u63d2\u4ef6\uff0c\u7528 Chrome \u767b\u5f55<a href=\"https:\/\/ebsnew.boc.cn\/boc15\/login.html\">\u4e2d\u56fd\u94f6\u884c\u7f51\u4e0a\u94f6\u884c<\/a>\u3002<\/del><\/p>\n<p><del>\u627e\u4e0d\u5230\u767b\u5f55\u8d26\u53f7\u4e86\u3002<\/del><\/p>\n<h3 id=\"\u4fe1\u7528\u5361\">\u4fe1\u7528\u5361<\/h3>\n<h4 id=\"\u62db\u5546\u94f6\u884c\">\u62db\u5546\u94f6\u884c<\/h4>\n<p>\u201c\u7535\u90ae\u8d26\u5355\u201d\u83b7\u53d6\u65b9\u5f0f\uff1a<\/p>\n<blockquote>\n<p>\u638c\u4e0a\u751f\u6d3b-&gt;\u91d1\u878d-&gt;\u67e5\u8d26\u5355-&gt;\u53f3\u4e0a\u89d2&hellip;-&gt;\u8d26\u5355\u670d\u52a1-&gt;\u8d26\u5355\u8865\u5bc4-&gt;(\u5bc4\u9001\u65b9\u5f0f\u6539\u4e3a\u300c\u7535\u90ae\u8d26\u5355\u300d)-&gt;\u7533\u8bf7\u8865\u5bc4<\/p>\n<p>&ndash; <a href=\"zsxsoft\/my-beancount-scripts\">zsxsoft\/my-beancount-scripts<\/a><\/p>\n<\/blockquote>\n<p><del>\u5982\u4f55\u83b7\u53d6 CSV \u8d26\u5355\uff1f<\/del><\/p>\n<p>\u767b\u5f55<a href=\"https:\/\/pbsz.ebank.cmbchina.com\/CmbBank_GenShell\/UI\/GenShellPC\/Login\/Login.aspx\">\u7f51\u94f6\u5927\u4f17\u7248<\/a>\u6216<a href=\"http:\/\/www.cmbchina.com\/pbankwebNew\/downloadPage.aspx\">\u4e13\u4e1a\u7248<\/a>\u540e\uff0c\u70b9\u3010\u4fe1\u7528\u5361\u2192\u8d26\u6237\u7ba1\u7406\u2192\u672a\u51fa\u8d26\u5355\u67e5\u8be2\/\u5df2\u51fa\u8d26\u5355\u67e5\u8be2\u3011\u67e5\u770b\/\u4e0b\u8f7d\/\u6253\u5370\u4e00\u5e74\u5185\u7684\u8d26\u5355\uff0c\u5e26\u6709\u4e1a\u52a1\u53d7\u7406\u4e13\u7528\u7ae0\u3002<\/p>\n<p><strong>\u5df2\u51fa\u8d26\u5355<\/strong>\uff1a\u70b9\u51fb\u3010\u8d26\u5355\u660e\u7ec6\u2192\u70b9\u51fb\u4e0b\u8f7d\u8d22\u52a1\u660e\u7ec6\u3011\u6253\u5370\/\u4e0b\u8f7d\uff0c\u683c\u5f0f\u4e3a\u3010PDF\u3011\u3002\n<strong>\u672a\u51fa\u8d26\u5355<\/strong>\uff1a\u70b9\u51fb\u9875\u9762\u53f3\u4fa7\u7684\u4e0b\u8f7d\u6216\u6253\u5370\uff0c\u683c\u5f0f\u4e3a\u3010Excel\u3011\u3002<\/p>\n<h2 id=\"\u793e\u4fdd\u6df1\u5733\">\u793e\u4fdd\uff08\u6df1\u5733\uff09<\/h2>\n<p>\u6df1\u5733\u4e94\u9669\u7f34\u8d39\u660e\u7ec6\u67e5\u8be2\uff1a<\/p>\n<p>\u767b\u5f55<a href=\"https:\/\/sipub.sz.gov.cn\/hspms\/mainFrame.jsp\">\u6df1\u5733\u793e\u4fdd\u670d\u52a1\u7f51\u7ad9<\/a>\uff0c\u8fdb\u5165\u201c\u67e5\u8be2\u670d\u52a1\u201d\uff0c\u9009\u62e9\u201c\u7f34\u8d39\u4fe1\u606f\u67e5\u8be2\u201d\uff0c\u70b9\u51fb\u201c\u4e94\u9669\u7f34\u8d39\u660e\u7ec6\u67e5\u8be2\u201d\u5373\u53ef\u3002<\/p>\n<p>\u6df1\u5733\u533b\u4fdd\u3001\u517b\u8001\u4e2a\u4eba\u8d26\u6237\u4f59\u989d\u67e5\u8be2\uff1a<\/p>\n<p>\u767b\u5f55<a href=\"https:\/\/sipub.sz.gov.cn\/hspms\/mainFrame.jsp\">\u6df1\u5733\u793e\u4fdd\u670d\u52a1\u7f51\u7ad9<\/a>\uff0c\u8fdb\u5165\u201c\u67e5\u8be2\u670d\u52a1\u201d\uff0c\u9009\u62e9\u201c\u53c2\u4fdd\u4fe1\u606f\u67e5\u8be2\u201d\uff0c\u70b9\u51fb\u201c\u57fa\u672c\u533b\u7597\u4fdd\u9669\u4e2a\u4eba\u8d26\u6237\u67e5\u8be2\u201d\u5373\u53ef\u3002<\/p>\n<h2 id=\"\u516c\u79ef\u91d1\u6df1\u5733\">\u516c\u79ef\u91d1\uff08\u6df1\u5733\uff09<\/h2>\n<p>\u300ci \u6df1\u5733 APP\u300d\uff0c\u5728\u9996\u9875\u70b9\u51fb\u300c\u516c\u79ef\u91d1\u300d\uff0c\u8fdb\u5165\u300c\u6df1\u5733\u5e02\u516c\u79ef\u91d1\u300d\u9875\u9762\uff0c\u5373\u53ef\u770b\u5230\u4f59\u989d\u3002\u70b9\u51fb\u300c\u8d26\u6237\u660e\u7ec6\u300d\u5373\u53ef\u770b\u5230\u7f34\u8d39\u60c5\u51b5\u3002<\/p>\n<h2 id=\"\u52a0\u5bc6\u8d27\u5e01\">\u52a0\u5bc6\u8d27\u5e01<\/h2>\n<h3 id=\"\u706b\u5e01-global\">\u706b\u5e01 Global<\/h3>\n<p>\u767b\u5f55<a href=\"https:\/\/www.huobi.com\/\">\u706b\u5e01 Global \u7f51\u7ad9<\/a>\uff0c\u8fdb\u5165<a href=\"https:\/\/www.huobi.com\/zh-cn\/transac\/?tab=2&amp;type=0\">\u5e01\u5e01\u8ba2\u5355\u7684\u6210\u4ea4\u660e\u7ec6<\/a>\u9875\u9762\uff0c\u9009\u62e9\u5408\u9002\u7684\u65f6\u95f4\u533a\u95f4\u540e\uff0c\u70b9\u51fb\u6210\u4ea4\u660e\u7ec6\u53f3\u4e0a\u89d2\u7684\u5bfc\u51fa\u6309\u94ae\u5373\u53ef\u3002<\/p>\n"},{"title":"\u6b22\u8fce Macat \uff01","link":"https:\/\/blog.triplez.cn\/posts\/welcome-macat\/","pubDate":"Sun, 11 Apr 2021 18:24:01 +0800","guid":"https:\/\/blog.triplez.cn\/posts\/welcome-macat\/","description":"<p>\u4eca\u5929\u6211\u5bb6\u6765\u4e86\u4e00\u4f4d\u65b0\u4e3b\u5b50\uff0c\u5728\u6b64\u6211\u9686\u91cd\u7684\u5411\u5927\u5bb6\u4ecb\u7ecd\u4e0b\uff1a\u4ed6\u540d\u5b57\u53eb Mac\uff0c\u662f\u4e00\u53ea Cat\uff0c\u6240\u4ee5\u4e5f\u53eb Macat ~ \u4e2d\u6587\u540d\u53eb\u9ea6\u9ea6 <del>\u6211\u624d\u4e0d\u4f1a\u8bf4\u662f\u56e0\u4e3a\u6211\u559c\u6b22\u5403 McDonald \u7684 Big Mac<\/del> \u54c8\u54c8\u54c8\u3002<\/p>\n<p>\u6700\u540e\u653e\u4e00\u4e2a\u7167\u7247\u7ed9\u5927\u5bb6\u6b23\u8d4f\u6b23\u8d4f\u3002<\/p>\n<figure class=\"align-center \">\n    <img loading=\"lazy\" src=\"https:\/\/triplez-public-1251926021.cos.ap-shanghai.myqcloud.com\/picgo\/P4112069-8136561.jpg#center\"\/> \n<\/figure>\n\n"}]}}