{"id":27406,"date":"2023-05-02T20:19:08","date_gmt":"2023-10-09T16:20:21","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/"},"modified":"2025-08-12T02:31:49","modified_gmt":"2025-08-11T18:31:49","slug":"3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/","title":{"rendered":"3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599"},"content":{"rendered":"<p>\uff11 \u7528Git\u5907\u4efd\u65b9\u5f0f\u5efa\u7acbMinecraft\u57fa\u5ca9\u7248\u670d\u52a1\u5668<br \/>\n\uff12 \u811a\u672c\u5217\u8868<br \/>\n\uff13 \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u548c\u5f15\u7528\u6765\u6e90\u00b7\u53c2\u8003\u8d44\u6599\uff08\u5373\u6b64\u5904\uff09<\/p>\n<h6>\u521b\u5efa\u7528\u6237\u7ec4<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>adduser <span class=\"nt\">--system<\/span> <span class=\"se\">\\<\/span>\r\n             <span class=\"nt\">--home<\/span> <span class=\"nv\">$HOME_DIR<\/span> <span class=\"se\">\\<\/span>\r\n             <span class=\"nt\">--shell<\/span> <span class=\"nv\">$Login_Shell<\/span> <span class=\"se\">\\<\/span>\r\n             <span class=\"nt\">--group<\/span> <span class=\"se\">\\<\/span>\r\n             <span class=\"nv\">$New_USER<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fb--system\uff1a\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u7528\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u3057\u3066\u69cb\u6210\u3059\u308b\r\n\u30fb--home  \uff1a\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u751f\u6210\u3059\u308b\r\n\u30fb--shell \uff1a\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u3068\u304d\u306b\u4f7f\u3046\u30b7\u30a7\u30eb\u3092\u6307\u5b9a\u3059\u308b\r\n\u30fb--group \uff1a\u30b7\u30b9\u30c6\u30e0 \u30e6\u30fc\u30b6\u30fc\u3068\u540c\u3058\u540d\u524d\u3068 ID \u3092\u6301\u3064\u30b0\u30eb\u30fc\u30d7\u3092\u4f5c\u6210\u3059\u308b\r\n           \uff08--system\u3068\u7d44\u307f\u5408\u308f\u305b\u306a\u3044\u5834\u5408\u3001\u30e6\u30fc\u30b6\u30fc\u3068\u540c\u3058\u540d\u524d\u306e\u30b0\u30eb\u30fc\u30d7\u3092\u4f5c\u6210\u3059\u308b\uff09\r\n<\/code><\/pre>\n<p>\u53c2\u8003\u6765\u6e90\uff1a<br \/>\nUbuntu \u624b\u518c [adduser, addgroup]<br \/>\n\u30fbhttps:\/\/manpages.ubuntu.com\/manpages\/trusty\/man8\/adduser.8.html<br \/>\n\u4f7f\u7528 Tailscale \u8fd0\u884c\u79c1\u4eba Minecraft \u670d\u52a1\u5668<br \/>\n\u30fbhttps:\/\/tailscale.com\/kb\/1137\/minecraft\/<\/p>\n<p>\u53ea\u9700\u8981\u4e00\u79cd\u9009\u9879 :<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u306eID\u3001\u6240\u5c5e\u30b0\u30eb\u30fc\u30d7\u3092\u8868\u793a<\/span>\r\n<span class=\"nb\">id<\/span> <span class=\"nv\">$New_USER<\/span>\r\n<span class=\"c\"># \u7279\u5b9a\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u6240\u5c5e\u30e1\u30f3\u30d0\u30fc\u3092\u78ba\u8a8d<\/span>\r\ngetent group <span class=\"nv\">$New_GROUP<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbuid=[user id]     \uff1a\u30e6\u30fc\u30b6\u30fc\u306eID\uff08\u30e6\u30fc\u30b6\u30fc\u540d\uff09\u3092\u8868\u3059\r\n\u30fbgid=[group id]    \uff1a\u30e1\u30a4\u30f3\u30b0\u30eb\u30fc\u30d7GID\uff08\u30e1\u30a4\u30f3\u30b0\u30eb\u30fc\u30d7\u540d\uff09\u3092\u8868\u3059\r\n\u30fbgroups=[group id] \uff1a\u30b5\u30d6\u30b0\u30eb\u30fc\u30d7\u540d\u4e00\u89a7\uff08\uff0bGID\uff09\u306e\u8868\u793a\r\n\r\n\u30fbuser:x:gid:group  \u30b0\u30eb\u30fc\u30d7\u306e\u6240\u5c5e\u30e1\u30f3\u30d0\u30fc\u3092\u78ba\u8a8d\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u4e3a\u53c2\u8003\u6765\u6e90\uff1a<br \/>\n1. \u3010Linux\u547d\u4ee4\u96c6\u3011id\u547d\u4ee4\u7528\u4e8e\u786e\u8ba4\u7528\u6237\u4fe1\u606f\uff0c\u8be6\u7ec6\u8bf4\u660e\u8bf7\u53c2\u8003\uff1ahttps:\/\/eng-entrance.com\/linux-command-id<br \/>\n2. \u786e\u8ba4Linux\u7ec4\u5217\u8868\u53ca\/etc\/group\u6587\u4ef6\uff0c\u8bf7\u53c2\u8003\uff1ahttps:\/\/kazmax.zpp.jp\/linux_beginner\/etc_group.html<br \/>\n3. \u5728Linux\u4e2d\uff0c\u786e\u8ba4\u7ec4\u5185\u7528\u6237\u7684\u547d\u4ee4\uff0c\u8bf7\u53c2\u8003\uff1ahttps:\/\/www-creators.com\/archives\/417<\/p>\n<h6>\u5c06Minecraft\u89e3\u538b\u7f29\u5230\uff1chome\u76ee\u5f55\uff1e\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u4f5c\u6210\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u306b\u30ed\u30b0\u30a4\u30f3<\/span>\r\n<span class=\"nb\">sudo<\/span> <span class=\"nt\">-i<\/span> <span class=\"nt\">-u<\/span> Minecraft\r\n\r\n<span class=\"c\"># \u30b5\u30fc\u30d0\u30fc\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3001\u5c55\u958b<\/span>\r\n<span class=\"nv\">DOWNLOAD_URL<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>curl <span class=\"nt\">-H<\/span> <span class=\"s2\">\"Accept-Encoding: identity\"<\/span> <span class=\"nt\">-H<\/span> <span class=\"s2\">\"Accept-Language: en\"<\/span> <span class=\"nt\">-s<\/span> <span class=\"nt\">-L<\/span> <span class=\"nt\">-A<\/span> <span class=\"s2\">\"Mozilla\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BEDROCK-UPDATER)\"<\/span> https:\/\/minecraft.net\/en-us\/download\/server\/bedrock\/ |  <span class=\"nb\">grep<\/span> <span class=\"nt\">-o<\/span> <span class=\"s1\">'https:\/\/minecraft.azureedge.net\/bin-linux\/[^\"]*'<\/span><span class=\"si\">)<\/span>\r\n<span class=\"nb\">sudo <\/span>wget <span class=\"nv\">$DOWNLOAD_URL<\/span> <span class=\"nt\">-O<\/span> \/home\/mcserver\/minecraft_bedrock\/bedrock-server.zip\r\n<\/code><\/pre>\n<p>\u5728Ubuntu\u4e0a\u8bbe\u7f6eMinecraft Bedrock\u670d\u52a1\u5668\u7684\u6765\u6e90\u662fpimylifeup\u7684\u6559\u7a0b\uff0c\u53ef\u4ee5\u5728\u4ee5\u4e0b\u7f51\u5740\u627e\u5230\uff1ahttps:\/\/pimylifeup.com\/ubuntu-minecraft-bedrock-server\/#installing-the-minecraft-bedrock-server-on-ubuntu<\/p>\n<h6>\u521b\u5efa\u8bbe\u7f6e\u6587\u4ef6\u548c\u4e16\u754c\u6570\u636e\u7684\u5907\u4efd\u76ee\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo rm<\/span> <span class=\"nt\">-r<\/span> <span class=\"s2\">\"\/opt\/MC_Manage\"<\/span>\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/opt\/MC_Manage\/<span class=\"o\">{<\/span>Properties,World_Backup<span class=\"o\">}<\/span>\r\n<span class=\"nb\">sudo chown<\/span> <span class=\"nt\">-R<\/span> <span class=\"nv\">$New_USER<\/span>:<span class=\"nv\">$New_GROUP<\/span> <span class=\"s2\">\"\/opt\/MC_Manage\/\"<\/span>\r\n<span class=\"nb\">sudo chmod<\/span> <span class=\"nt\">-R<\/span> 750 <span class=\"s2\">\"\/opt\/MC_Manage\/\"<\/span>\r\n<span class=\"c\"># \u78ba\u8a8d<\/span>\r\n<span class=\"nb\">sudo ls<\/span> <span class=\"nt\">-laF<\/span> <span class=\"s2\">\"\/opt\/MC_Manage\/\"<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbrm -r    \uff1a\u30d5\u30a9\u30eb\u30c0\u3054\u3068\u524a\u9664\r\n\u30fbmkdir -p \uff1a\u89aa\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3054\u3068\u4f5c\u6210\r\n\u30fbchown -R \uff1a$New_USER\u3092\u6240\u6709\u8005\u3068\u3057\u3001$New_GROUP\u3092\u6240\u6709\u30b0\u30eb\u30fc\u30d7\u3068\u3059\u308b\r\n\u30fbchmod -R \uff1a\u6240\u6709\u8005\u306b\u5b8c\u5168\u306a\u30a2\u30af\u30bb\u30b9\u6a29(=750)\u3092\u4ed8\u4e0e\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u662f\u4ece\u4ee5\u4e0b\u5f15\u7528\u548c\u53c2\u8003\u4e2d\u5f97\u5230\u7684\u539f\u59cb\u6587\u672c\uff1a<br \/>\nLinux\u547d\u4ee4\u3010chown\u3011\uff1a\u7528\u4e8e\u66f4\u6539\u6587\u4ef6\u7684\u6240\u6709\u8005\u548c\u7ec4<br \/>\n&#8211; https:\/\/webkaru.net\/linux\/chown-command\/<br \/>\n\u3010Linux\u547d\u4ee4\u3011chmod\uff1a\u8bbe\u7f6e\u6743\u9650\u7684\u65b9\u6cd5<br \/>\n&#8211; https:\/\/www.sejuku.net\/blog\/50161<\/p>\n<p>\u8fd9\u91cc\u662f\u4e00\u4e2a\u53ef\u80fd\u7684\u6c49\u8bed\u8868\u8ff0\uff1a<br \/>\n\u5f15\u7528\u5143\u00b7\u53c2\u8003\u6765\u6e90\uff1a<br \/>\nLinux\u547d\u4ee4\u3010chown\u3011\u53ef\u4ee5\u7528\u4e8e\u66f4\u6539\u6587\u4ef6\u7684\u6240\u6709\u8005\u548c\u7ec4\u3002<br \/>\n&#8211; https:\/\/webkaru.net\/linux\/chown-command\/<br \/>\n\u3010Linux\u547d\u4ee4\u3011chmod\u53ef\u4ee5\u7528\u6765\u8bbe\u7f6e\u6743\u9650\u7684\u65b9\u6cd5\u3002<br \/>\n&#8211; https:\/\/www.sejuku.net\/blog\/50161<\/p>\n<h6>\uff1c\u670d\u52a1\u5316\uff0c\u542f\u52a8\u548c\u505c\u6b62\u811a\u672c\uff1e<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">ExecStart<\/span><span class=\"o\">=<\/span>+\/usr\/bin\/setpriv <span class=\"nt\">--reuid<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-u<\/span> minecraft<span class=\"si\">)<\/span> <span class=\"nt\">--regid<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-g<\/span> minecraft<span class=\"si\">)<\/span> <span class=\"nt\">--init-groups<\/span> \/opt\/MC_Manage\/start.sh\r\n<span class=\"nv\">ExecStartPost<\/span><span class=\"o\">=<\/span>+\/usr\/bin\/bash \/opt\/MC_Manage\/backup.sh\r\n<span class=\"nv\">ExecStop<\/span><span class=\"o\">=<\/span>+\/usr\/bin\/setpriv <span class=\"nt\">--reuid<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-u<\/span> minecraft<span class=\"si\">)<\/span> <span class=\"nt\">--regid<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-g<\/span> minecraft<span class=\"si\">)<\/span> <span class=\"nt\">--init-groups<\/span> \/usr\/bin\/bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"\/usr\/bin\/env XDG_RUNTIME_DIR=\/run\/user\/<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-u<\/span> minecraft<span class=\"si\">)<\/span><span class=\"s2\"> \/usr\/bin\/systemctl --user stop nonstop_save.timer; exit 0\"<\/span>\r\n<span class=\"nv\">ExecStop<\/span><span class=\"o\">=<\/span>+\/usr\/bin\/setpriv <span class=\"nt\">--reuid<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-u<\/span> minecraft<span class=\"si\">)<\/span> <span class=\"nt\">--regid<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-g<\/span> minecraft<span class=\"si\">)<\/span> <span class=\"nt\">--init-groups<\/span> \/opt\/MC_Manage\/stop.sh\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbPrefix\uff1a\"+\"\r\n\u3000\u3000\u5b9f\u884c\u30d1\u30b9\u306e\u5148\u982d\u306b \"+\"\u304c\u4ed8\u3044\u3066\u3044\u308b\u5834\u5408\u3001\u305d\u306e\u30d7\u30ed\u30bb\u30b9\u306f\u5b8c\u5168\u306a\u7279\u6a29\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\r\n\u3000\u3000\u3053\u306e\u30e2\u30fc\u30c9\u3067\u306f\u3001User=, Group=, CapabilityBoundingSet= \u3084\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u540d\u524d\u7a7a\u9593\u30aa\u30d7\u30b7\u30e7\u30f3 (PrivateDevices=, PrivateTmp= \u306a\u3069) \u3067\u8a2d\u5b9a\u3057\u305f\u7279\u6a29\u5236\u9650\u306f\u3001\u8d77\u52d5\u3057\u305f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306b\u306f\u9069\u7528\u3055\u308c\u307e\u305b\u3093 (\u305f\u3060\u3057\u3001\u4ed6\u306e ExecStart=, ExecStop=, ... \u884c\u306b\u306f\u5f71\u97ff\u304c\u3042\u308a\u307e\u3059)\u3002\r\n\u3000\u3000\u3057\u304b\u3057\u3001DevicePolicy= \u306e\u3088\u3046\u306a\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30b0\u30eb\u30fc\u30d7\u5168\u4f53\u306b\u9069\u7528\u3055\u308c\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u30d0\u30a4\u30d1\u30b9\u3055\u308c\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\r\n\u30fbsetpriv --reuid \"uid\" --regid \"gid\" \"--clear-groups\/--groups\/--keep-groups\/--init-groups\" --reset-env\r\n    \uff65--reuid\r\n        \"uid\" \u306f\u30e6\u30fc\u30b6\u30fc\u540d\u3067\u3082\u69cb\u3044\u307e\u305b\u3093\u3002\r\n    \uff65--regid\r\n        \"gid\" \u306f\u30b0\u30eb\u30fc\u30d7\u540d\u3067\u3082\u69cb\u3044\u307e\u305b\u3093\u3002\r\n    \uff65--clear-groups\/--groups\/--keep-groups\/--init-groups\r\n        \u30b0\u30eb\u30fc\u30d7\u3092\u6307\u5b9a\u3057\u305f\u5834\u5408\u306b\u306f\u3001\u3044\u305a\u308c\u304b\u304c\u5fc5\u8981\u3067\u3059\u3002\r\n    \uff65--reset-env\r\n        \u5404\u5909\u6570\uff1aHOME, SHELL, USER, LOGNAME, PATH=\/usr\/local\/bin:\/bin:\/usr\/bin \u3092 uid \u3067\u6307\u5b9a\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u306e\u3082\u306e\u306b\u521d\u671f\u5316\u3057\u307e\u3059\u3002\r\n<\/code><\/pre>\n<p>\u4f7f\u7528Tailscale\u8fd0\u884c\u79c1\u4eba\u7684Minecraft\u670d\u52a1\u5668<br \/>\n\u30fbhttps:\/\/tailscale.com\/kb\/1137\/minecraft\/<br \/>\n\u53c2\u8003\u6765\u6e90<br \/>\nSystemd\u5165\u95e8(4) &#8211; service\u7c7b\u578b\u7684Unit\u914d\u7f6e\u6587\u4ef6<br \/>\n\u30fbhttps:\/\/enakai00.hatenablog.com\/entry\/20130917\/1379374797<br \/>\nsystemd.service\u7684man\u9875\u9762<br \/>\n\u30fbhttps:\/\/www.freedesktop.org\/software\/systemd\/man\/systemd.service.html<br \/>\n\u5728systemd\u670d\u52a1\u4e2d\u8c03\u7528shell\u65f6\uff0c\u5e94\u4f7f\u7528setpriv\u800c\u4e0d\u662fsudo<br \/>\n\u30fbhttps:\/\/rheb.hatenablog.com\/entry\/setpriv<br \/>\nsetpriv(1) \u2014 Linux\u624b\u518c\u9875\u9762<br \/>\n\u30fbhttps:\/\/man7.org\/linux\/man-pages\/man1\/setpriv.1.html<\/p>\n<pre class=\"post-pre\"><code>\/usr\/bin\/tmux new-session <span class=\"nt\">-s<\/span> minecraft <span class=\"nt\">-d<\/span>\r\n\/usr\/bin\/tmux pipe-pane <span class=\"nt\">-t<\/span> minecraft <span class=\"s2\">\"cat &gt;<\/span><span class=\"nv\">$Mine_DIR<\/span><span class=\"s2\">\/Command.log\"<\/span>\r\n\/usr\/bin\/tmux send <span class=\"nt\">-t<\/span> minecraft <span class=\"s2\">\"LD_LIBRARY_PATH=<\/span><span class=\"nv\">$Mine_DIR<\/span><span class=\"s2\"> .\/bedrock_server | tee <\/span><span class=\"nv\">$Mine_DIR<\/span><span class=\"s2\">\/Result.log\"<\/span> ENTER\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbtmux new-session -s minecraft -d\r\n    \u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u3001minecraft \u3068\u540d\u524d\u3092\u4ed8\u3051\u305f\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u8d77\u52d5\u3057\u307e\u3059\r\n\u30fbtmux pipe-pane -t minecraft \"cat &gt;$Mine_DIR\/Command.log\"\r\n    \u30bf\u30fc\u30df\u30ca\u30eb\u306b\u8868\u793a\u3055\u308c\u305f\u3082\u306e\u3092\u4e38\u3054\u3068\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306b\u51fa\u529b\r\n\u30fbtmux send -t minecraft \"LD_LIBRARY_PATH=$Mine_DIR .\/bedrock_server | tee $Mine_DIR\/Result.log\" ENTER\r\n    Minecraft Server \u306e\u5b9f\u884c\u7d50\u679c\u3092\u30bf\u30fc\u30df\u30ca\u30eb\u3068\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306b\u51fa\u529b\r\n<\/code><\/pre>\n<p>\u4f7f\u7528Tailscale\u5728\u81ea\u5df1\u7684Minecraft\u670d\u52a1\u5668\u4e0a\u8fd0\u884c<br \/>\n\u30fbhttps:\/\/tailscale.com\/kb\/1137\/minecraft\/<br \/>\n\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599<br \/>\n\u901a\u8fc7tmux\u4fdd\u5b58\u65e5\u5fd7<br \/>\n\u30fbhttps:\/\/seaoak.cocolog-nifty.com\/read\/2014\/08\/tmux-f687.html<\/p>\n<pre class=\"post-pre\"><code>\/usr\/bin\/env <span class=\"nv\">XDG_RUNTIME_DIR<\/span><span class=\"o\">=<\/span>\/run\/user\/<span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-u<\/span> minecraft<span class=\"si\">)<\/span> <span class=\"se\">\\<\/span>\r\n  \/usr\/bin\/systemd-run <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--on-active<\/span><span class=\"o\">=<\/span><span class=\"k\">${<\/span><span class=\"nv\">BK_INTERVAL<\/span><span class=\"k\">}<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--on-unit-active<\/span><span class=\"o\">=<\/span><span class=\"k\">${<\/span><span class=\"nv\">BK_INTERVAL<\/span><span class=\"k\">}<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--user<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--collect<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--unit<\/span><span class=\"o\">=<\/span>nonstop_save.service <span class=\"se\">\\<\/span>\r\n      \/bin\/bash <span class=\"nt\">-c<\/span> <span class=\"s2\">\"~~~~~~\"<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fb--on-active\r\n    \u30bf\u30a4\u30de\u30fc\u304c\u6709\u52b9\u306b\u3055\u308c\u3066\u304b\u3089\u30e6\u30cb\u30c3\u30c8\u3092\u521d\u3081\u3066\u5b9f\u884c\u3059\u308b\u307e\u3067\u306e\u6642\u9593\r\n\u30fb--on-unit-active\r\n    \u30e6\u30cb\u30c3\u30c8\u304c\u6700\u5f8c\u306b\u5b9f\u884c\u3055\u308c\u305f\u6642\u304b\u3089\u6b21\u306b\u5b9f\u884c\u3055\u308c\u308b\u307e\u3067\u306e\u9593\u9694\r\n\u30fb--user\r\n    root \u3067\u306f\u306a\u304f\u5404\u30e6\u30fc\u30b6\u30fc\u6a29\u9650\u3067\u5b9f\u884c\u3059\u308b\r\n\u30fb--collect\r\n    \u6b63\u5e38\u306b\u7d42\u4e86\u3057\u305f\u304b\u5931\u6557\u3057\u305f\u304b\u306b\u304b\u304b\u308f\u3089\u305a\u3001\u30e6\u30cb\u30c3\u30c8\u3092\u30a2\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\r\n\u30fb--unit\r\n    \u65e2\u5b58\u306e\u30e6\u30cb\u30c3\u30c8\u304c\u5b58\u5728\u3057\u3001\u304b\u3064\u3053\u306e\u5f8c\u306b\u30b3\u30de\u30f3\u30c9\u3092\u5165\u529b\u3057\u306a\u3044\u5834\u5408\u306f\u3001\u6307\u5b9a\u3057\u305f\u30e6\u30cb\u30c3\u30c8\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\r\n    \u65e2\u5b58\u306e\u30e6\u30cb\u30c3\u30c8\u304c\u5b58\u5728\u305b\u305a\u3001\u3053\u306e\u5f8c\u306b\u30b3\u30de\u30f3\u30c9\u3092\u5165\u529b\u3057\u305f\u5834\u5408\u306f\u3001\u6307\u5b9a\u3057\u305f\u30e6\u30cb\u30c3\u30c8\u306e\u540d\u524d\u3067\u5165\u529b\u3057\u305f\u30b3\u30de\u30f3\u30c9\u304c\u30b5\u30fc\u30d3\u30b9\u5316\u3055\u308c\u307e\u3059\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u662f\u539f\u6587\u7684\u6c49\u8bed\u7ffb\u8bd1\uff1a<\/p>\n<p>\u53c2\u8003\u6765\u6e90\uff1a<br \/>\n\u5f53\u7528\u6237\u6743\u9650\u7684systemd\u8fde\u63a5\u5931\u8d25\u65f6\u7684\u89e3\u51b3\u65b9\u6cd5<br \/>\n\u30fbhttps:\/\/blog.n-z.jp\/blog\/2020-06-02-systemd-user-bus.html<br \/>\nsystemd-run<br \/>\n\u30fbhttps:\/\/www.freedesktop.org\/software\/systemd\/man\/systemd-run.html<br \/>\n\u4f7f\u7528systemd-run\u5feb\u901f\u6ce8\u518c\u5b9a\u671f\u6267\u884c\u7684\u4efb\u52a1<br \/>\n\u30fbhttps:\/\/qiita.com\/ngyuki\/items\/a0404322e59f77cd512c<\/p>\n<pre class=\"post-pre\"><code>\/usr\/bin\/tmux send <span class=\"nt\">-t<\/span> minecraft stop ENTER\r\n\/usr\/bin\/tmux kill-session <span class=\"nt\">-t<\/span> minecraft\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbtmux send -t minecraft stop ENTER\r\n    Minecraft Server \u306b stop \u3092\u9001\u4fe1\u3057\u307e\u3059\r\n\u30fbtmux kill-session -t minecraft\r\n    tmux \u3067\u8d77\u52d5\u3057\u305f Minecraft \u7528\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u7d42\u4e86\u3057\u307e\u3059\r\n<\/code><\/pre>\n<p>\u4f7f\u7528Tailscale\u5728\u79c1\u4ebaMinecraft\u670d\u52a1\u5668\u4e0a\u8fd0\u884c<br \/>\n&#8211; \u94fe\u63a5\uff1ahttps:\/\/tailscale.com\/kb\/1137\/minecraft<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>loginctl enable-linger minecraft\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fb\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u306e\u9577\u6642\u9593\u5b9f\u884c\u30b5\u30fc\u30d3\u30b9\u3092\u5b9f\u884c\u53ef\u80fd\u306b\u3059\u308b\r\n<\/code><\/pre>\n<p>\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\uff1a<br \/>\n\u5904\u7406systemd\u4e2d\u7528\u6237\u6743\u9650\u65e0\u6cd5\u8fde\u63a5\u603b\u7ebf\u65f6\u7684\u89e3\u51b3\u65b9\u6cd5\u3002<br \/>\n&#8211; https:\/\/blog.n-z.jp\/blog\/2020-06-02-systemd-user-bus.html<br \/>\nloginctl<br \/>\n&#8211; https:\/\/www.freedesktop.org\/software\/systemd\/man\/loginctl.html<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">function <\/span>MC <span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nb\">unset <\/span>Arguments\r\n  <span class=\"nv\">Arguments<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"p\">*\/\/\\<\/span><span class=\"s2\">\"\/<\/span><span class=\"se\">\\\\\\\"<\/span><span class=\"s2\">}\"<\/span><span class=\"p\">\r\n  Arguments=<\/span><span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">Arguments<\/span><span class=\"k\">:-<\/span><span class=\"nv\">exec<\/span><span class=\"p\"> bash<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span><span class=\"p\">\r\n  sudo setpriv --reuid=<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-u<\/span> minecraft<span class=\"si\">)<\/span><span class=\"p\"> --regid=<\/span><span class=\"si\">$(<\/span>\/usr\/bin\/id <span class=\"nt\">-g<\/span> minecraft<span class=\"si\">)<\/span><span class=\"p\"> --init-groups --reset-env bash --login -O expand_aliases -c <\/span><span class=\"s2\">\"cd ~;IFS=' ' <\/span><span class=\"k\">${<\/span><span class=\"nv\">Arguments<\/span><span class=\"p\">\/\/\\\\\\<\/span><span class=\"s2\">\"\/<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">}\"<\/span>\r\n<span class=\"k\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fb\u5f15\u6570\u304c\u306a\u3044\u5834\u5408\u306f \u30e6\u30fc\u30b6\u30fc\uff1aminecraft \u3067\u30bf\u30fc\u30df\u30ca\u30eb\u3092\u8d77\u52d5\u3059\u308b\r\n\u30fb\u5f15\u6570\u306b\u542b\u307e\u308c\u308b\u30a8\u30b9\u30b1\u30fc\u30d7\u3055\u308c\u305f\u4e8c\u91cd\u5f15\u7528\u7b26\u3092\u3055\u3089\u306b\u30a8\u30b9\u30b1\u30fc\u30d7\u3057\u3001\u5b9f\u884c\u6642\u306b\u30a8\u30b9\u30b1\u30fc\u30d7\u3092\u5916\u3059\r\n\u30fbbash --login -O expand_aliases\r\n    \u30ed\u30b0\u30a4\u30f3\u30b7\u30a7\u30eb\u3068\u3057\u3066\u8d77\u52d5\u3057\u3001\/etc\/profile, ~\/.bash_profile, ~\/.bash_login, ~\/.profile \u3092\u8aad\u307f\u8fbc\u3080\u3002\u7d42\u4e86\u6642\u306b ~\/.bash_logout \u3092\u8aad\u307f\u8fbc\u3080\u3002\r\n    \u30a8\u30a4\u30ea\u30a2\u30b9\u306e\u5c55\u958b\u3092\u884c\u3046\r\n<\/code><\/pre>\n<p>\u5f15\u7528\u6765\u6e90\u4e0e\u53c2\u8003\u6587\u732e\u4e3a\uff1a<br \/>\nBASH<br \/>\n\u30fbhttps:\/\/linuxjm.osdn.jp\/html\/GNU_bash\/man1\/bash.1.html<\/p>\n<h6>&lt;\u51c6\u5907\u7248\u672c\u63a7\u5236\u73af\u5883&gt;<\/p>\n<pre class=\"post-pre\"><code>git init <span class=\"s2\">\"~~~~~~\"<\/span>\r\n\r\n<span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">__EOF__<\/span><span class=\"sh\"> &gt; \"~~~~~~\"\r\n[user]\r\n     name = Minecraft Server\r\n    email = MinecraftServer@mydomain.com\r\n<\/span><span class=\"no\">__EOF__\r\n\r\n<\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"~~~~~~\"<\/span> config <span class=\"nt\">--local<\/span> gc.reflogExpire <span class=\"s2\">\"never\"<\/span>\r\ngit <span class=\"nt\">-C<\/span> <span class=\"s2\">\"~~~~~~\"<\/span> config <span class=\"nt\">--local<\/span> gc.reflogExpireUnreachable <span class=\"s2\">\"3.days\"<\/span>\r\ngit <span class=\"nt\">-C<\/span> <span class=\"s2\">\"~~~~~~\"<\/span> config <span class=\"nt\">--local<\/span> gc.pruneExpire <span class=\"s2\">\"3.days.ago\"<\/span>\r\n\r\ngit <span class=\"nt\">-C<\/span> <span class=\"s2\">\"~~~~~~\"<\/span> commit <span class=\"nt\">--allow-empty<\/span> <span class=\"nt\">--allow-empty-message<\/span> <span class=\"nt\">-m<\/span> <span class=\"s1\">''<\/span>\r\ngit <span class=\"nt\">-C<\/span> <span class=\"s2\">\"~~~~~~\"<\/span> commit <span class=\"nt\">--amend<\/span> <span class=\"nt\">--allow-empty<\/span> <span class=\"nt\">--allow-empty-message<\/span> <span class=\"nt\">--no-edit<\/span>\r\n\r\ngit <span class=\"nt\">-C<\/span> <span class=\"s2\">\"~~~~~~\"<\/span> reflog delete HEAD@<span class=\"o\">{<\/span>1<span class=\"o\">}<\/span> <span class=\"si\">$(<\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"~~~~~~\"<\/span> branch <span class=\"nt\">--show-current<\/span><span class=\"si\">)<\/span>@<span class=\"o\">{<\/span>1<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbgit init\r\n   \uff1agit \u3067\u7ba1\u7406\u3067\u304d\u308b\u3088\u3046\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u521d\u671f\u5316\r\n\u30fbcat &lt;&lt; __EOF__ &gt; \"~~~\/.git\/config\"\r\n    \u2307\u3000\u2307\u3000\u2307\r\n\u3000__EOF__ \r\n   \uff1agit commit \u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092\u8a2d\u5b9a\r\n\u30fbgit commit --allow-empty --allow-empty-message -m ''\r\n   \uff1a\u7a7a\u30b3\u30df\u30c3\u30c8\r\n\u30fbgit commit --amend --allow-empty --allow-empty-message --no-edit\r\n   \uff1a\u4e0a\u66f8\u304d\u7a7a\u30b3\u30df\u30c3\u30c8\r\n\u30fbgit reflog delete HEAD@{1} $(git branch --show-current)@{1}\r\n   \uff1a\u521d\u56de\u306e\u7a7a\u30b3\u30df\u30c3\u30c8\u3092\u6d88\u3059\r\n\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\uff3f\r\n\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d5\u30a1\u30a4\u30eb\u306e\u4fdd\u5b58\u671f\u9650\u3092\u8a2d\u5b9a\r\n\u30fbgit config --local gc.reflogExpire \"never\"\r\n   \uff1a\u6700\u65b0\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u7121\u671f\u4fdd\u5b58\r\n\u30fbgit config --local gc.reflogExpireUnreachable \"3.days\"\r\n   \uff1a\u6700\u65b0\u3067\u306a\u304f\u306a\u3063\u305f\u5f8c\u306e\u4fdd\u5b58\u671f\u9650\r\n\u30fbgit config --local gc.pruneExpire \"3.days.ago\"\r\n   \uff1a\u6700\u65b0\u3067\u306a\u304f\u306a\u3063\u305f\u5f8c\u306e\u4fdd\u5b58\u671f\u9650\r\n<\/code><\/pre>\n<p>\u5f15\u7528\u6765\u6e90\u53ca\u53c2\u8003\u6587\u732e:<br \/>\nGit\u5783\u573e\u56de\u6536 (Git gc)<br \/>\n&#8211; https:\/\/www.atlassian.com\/git\/tutorials\/git-gc<\/p>\n<h6>\uff1c \u4e0d\u9700\u8981\u505c\u6b62\u670d\u52a1\u5668\u5373\u53ef\u4fdd\u5b58\u7684\u811a\u672c \uff1e<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">function <\/span>mc_save <span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">$(<\/span>tmux <span class=\"nb\">ls<\/span> <span class=\"nt\">-F<\/span> <span class=\"s1\">'#{session_name}'<\/span> <span class=\"nt\">-f<\/span> <span class=\"s1\">'#{==:#{session_name},minecraft}'<\/span> 2&gt;\/dev\/null<span class=\"si\">)<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">!=<\/span> <span class=\"s2\">\"minecraft\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\r\n    <\/span>git <span class=\"nt\">--git-dir<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\/.git\"<\/span> <span class=\"se\">\\<\/span>\r\n        <span class=\"nt\">--work-tree<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"se\">\\<\/span>\r\n        add <span class=\"nt\">--intent-to-add<\/span> <span class=\"nt\">--<\/span> :\/\r\n    git <span class=\"nt\">--git-dir<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\/.git\"<\/span> <span class=\"se\">\\<\/span>\r\n        <span class=\"nt\">--work-tree<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"se\">\\<\/span>\r\n        diff <span class=\"nt\">--quiet<\/span> <span class=\"nt\">--exit-code<\/span>\r\n    <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$?<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">\"1\"<\/span> <span class=\"o\">]<\/span> <span class=\"o\">&amp;&amp;<\/span> backup_worlds <span class=\"s1\">'Backup of stopped servers'<\/span>\r\n    <span class=\"c\"># \u65b0\u898f\u30d5\u30a1\u30a4\u30eb\u304b\u66f4\u65b0\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u3063\u305f\u5834\u5408\u306f\u3001$?=1 \u3092\u793a\u3059<\/span>\r\n    <span class=\"k\">return <\/span>0\r\n  <span class=\"k\">fi<\/span>\r\n\r\n  \/usr\/bin\/tmux send <span class=\"nt\">-t<\/span> minecraft <span class=\"s2\">\"save resume\"<\/span> ENTER\r\n  \/usr\/bin\/tmux send <span class=\"nt\">-t<\/span> minecraft <span class=\"s2\">\"save hold\"<\/span> ENTER\r\n\r\n  <span class=\"nv\">EXITCODE<\/span><span class=\"o\">=<\/span>1 <span class=\"p\">;<\/span> <span class=\"nv\">TRY_COUNT<\/span><span class=\"o\">=<\/span>0\r\n  <span class=\"k\">while<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$EXITCODE<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">-ne<\/span> <span class=\"s2\">\"0\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">do<\/span>\r\n   <span class=\"o\">((<\/span>TRY_COUNT++<span class=\"o\">))<\/span>\r\n    \/usr\/bin\/tmux send <span class=\"nt\">-t<\/span> minecraft <span class=\"s2\">\"save query\"<\/span> ENTER\r\n    <span class=\"nb\">sleep <\/span>1\r\n    <span class=\"nb\">grep<\/span> <span class=\"s2\">\"Data saved. Files are now ready to be copied.\"<\/span> &lt;<span class=\"o\">(<\/span><span class=\"nb\">tail<\/span> <span class=\"nt\">-30<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Mine_DIR<\/span><span class=\"s2\">\/Result.log\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">&gt;<\/span> \/dev\/null 2&gt;&amp;1\r\n    <span class=\"nv\">EXITCODE<\/span><span class=\"o\">=<\/span><span class=\"nv\">$?<\/span>\r\n    <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$TRY_COUNT<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">-eq<\/span> <span class=\"s2\">\"20\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then <\/span><span class=\"nb\">break<\/span><span class=\"p\">;<\/span> <span class=\"k\">fi\r\n  done<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbtmux ls -F '#{session_name}' -f '#{==:#{session_name},minecraft}'\r\n    tmux \u306b\u62e0\u308b minecraft \u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u5b58\u5728\u3059\u308b\u304b\u78ba\u8a8d\r\n\u30fbgit add --intent-to-add\r\n    blob \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u4f5c\u6210\u305b\u305a\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u8a18\u5165\u306e\u307f\u884c\u3046\r\n\u30fbdiff --quiet --exit-code\r\n    \u65b0\u898f\u30d5\u30a1\u30a4\u30eb\u304b\u66f4\u65b0\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u3063\u305f\u5834\u5408\u306f\u3001$?=1 \u3092\u8fd4\u3059\r\n\u30fb[ \"$?\" = \"1\" ] &amp;&amp; \r\n    $?=1 \u3092\u8fd4\u3057\u305f\u3068\u304d\u306e\u307f\u5f8c\u7d9a\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\r\n\u30fbwhile \uff5e\uff5e\uff5e done\r\n   Minecraft Server \u304c \"Data saved. Files are now ready to be copied.\" \u3092\u8fd4\u3059\u307e\u3067 \"save query\" \u3092\u9001\u4fe1\u3057\u7d9a\u3051\u308b\u3002\u6700\u592720\u56de\u307e\u3067\u3002\r\n<\/code><\/pre>\n<p>\u811a\u672c\u6765\u6e90<br \/>\nmikenye\/docker-minecraft_bedrock_server<br \/>\n\u30fbhttps:\/\/github.com\/mikenye\/docker-minecraft_bedrock_server\/blob\/main\/rootfs\/usr\/local\/bin\/run_backup<br \/>\n\u5f15\u7528\u6765\u6e90\u30fb\u53c2\u8003<br \/>\n\u5904\u7406\u683c\u5f0f<br \/>\n\u30fbhttps:\/\/github.com\/tmux\/tmux\/wiki\/Formats<br \/>\ntmux\u901f\u67e5\u8868<br \/>\n\u30fbhttps:\/\/qiita.com\/nmrmsys\/items\/03f97f5eabec18a3a18b<br \/>\n\u4f7f\u7528Git\u8fdb\u884c\u5224\u65ad\u6587\u4ef6\u66f4\u6539\u662f\u5426\u5305\u542b\u521b\u5efa\u65b0\u6587\u4ef6\u7684\u65b9\u6cd5<br \/>\n\u30fbhttps:\/\/reboooot.net\/post\/how-to-check-changes-with-git\/<br \/>\ndiff\u547d\u4ee4\u7684\u9000\u51fa\u4ee3\u7801\u662f\u8fd9\u6837\u7684\uff0c\u5982\u679c\u6ca1\u6709\u5dee\u5f02\u5219\u4e3a0\uff0c\u5982\u679c\u6709\u5dee\u5f02\u5219\u4e3a1\uff0c\u5931\u8d25\u5219\u4e3a2<br \/>\n\u30fbhttps:\/\/kinoppyd.dev\/blog\/diff-command-returns-1-but-success\/<\/p>\n<h6>\u4f7f\u7528 Git \u8fdb\u884c\u4e16\u754c\u6570\u636e\u548c\u8bbe\u7f6e\u6587\u4ef6\u7684\u5907\u4efd\u3002<\/p>\n<pre class=\"post-pre\"><code>  git <span class=\"nt\">--git-dir<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Props_Bak_DIR<\/span><span class=\"s2\">\/.git\"<\/span> <span class=\"se\">\\<\/span>\r\n      <span class=\"nt\">--work-tree<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Mine_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"se\">\\<\/span>\r\n      add <span class=\"nt\">--<\/span> permissions.json server.properties whitelist.json\r\n  git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Props_Bak_DIR<\/span><span class=\"s2\">\"<\/span> commit <span class=\"nt\">--amend<\/span> <span class=\"nt\">--date<\/span><span class=\"o\">=<\/span>now <span class=\"nt\">--allow-empty-message<\/span> <span class=\"nt\">-m<\/span> <span class=\"s1\">''<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$@<\/span><span class=\"s2\">\"<\/span>\r\n  git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Props_Bak_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--no-pager<\/span> log <span class=\"nt\">--max-count<\/span><span class=\"o\">=<\/span><span class=\"k\">${<\/span><span class=\"nv\">1<\/span><span class=\"k\">:-<\/span><span class=\"nv\">5<\/span><span class=\"k\">}<\/span> <span class=\"nt\">--reflog<\/span> <span class=\"nt\">--format<\/span><span class=\"o\">=<\/span><span class=\"s1\">'%C(auto)%+h [%ad] %Cgreen%s'<\/span> <span class=\"nt\">--name-only<\/span><span class=\"p\">;<\/span> <span class=\"nb\">echo<\/span> <span class=\"s1\">''<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">function <\/span>backup_worlds <span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nv\">SET_PATH<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"GIT_DIR=<\/span><span class=\"se\">\\\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\/.git<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\"> GIT_WORK_TREE=<\/span><span class=\"se\">\\\"<\/span><span class=\"nv\">$Worlds_DIR<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">\"<\/span>\r\n  <span class=\"k\">while <\/span><span class=\"nb\">read <\/span>READ<span class=\"p\">;<\/span> <span class=\"k\">do \r\n    <\/span><span class=\"nv\">Args<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Args<\/span> <span class=\"se\">\\\"<\/span><span class=\"nv\">$READ<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">\"<\/span>\r\n  <span class=\"k\">done<\/span> &lt; &lt;<span class=\"o\">(<\/span><span class=\"nb\">eval<\/span> <span class=\"nv\">$SET_PATH<\/span> git ls-files <span class=\"nt\">--others<\/span> <span class=\"nt\">--exclude-standard<\/span> :\/<span class=\"o\">)<\/span>\r\n  <span class=\"nb\">eval<\/span> <span class=\"nv\">$SET_PATH<\/span> git add <span class=\"nt\">--<\/span> <span class=\"nv\">$Args<\/span> <span class=\"o\">&gt;<\/span>\/dev\/null 2&gt;&amp;1\r\n  <span class=\"nb\">eval<\/span> <span class=\"nv\">$SET_PATH<\/span> git add <span class=\"nt\">--update<\/span>\r\n  <span class=\"nb\">eval<\/span> <span class=\"nv\">$SET_PATH<\/span> git update-index <span class=\"nt\">--remove<\/span> <span class=\"nt\">--stdin<\/span> &lt; &lt;<span class=\"o\">(<\/span><span class=\"nb\">eval<\/span> <span class=\"nv\">$SET_PATH<\/span> git ls-files :\/<span class=\"o\">)<\/span>\r\n  git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\"<\/span> commit <span class=\"nt\">--amend<\/span> <span class=\"nt\">--date<\/span><span class=\"o\">=<\/span>now <span class=\"nt\">--allow-empty-message<\/span> <span class=\"nt\">-m<\/span> <span class=\"s1\">''<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$@<\/span><span class=\"s2\">\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n<span class=\"k\">function <\/span>show_worlds_bak <span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n  <span class=\"nv\">SKIP<\/span><span class=\"o\">=<\/span>0\r\n  <span class=\"k\">while <\/span><span class=\"nb\">read <\/span>LINE<span class=\"p\">;<\/span> <span class=\"k\">do\r\n    <\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\"<\/span> log <span class=\"nt\">--max-count<\/span><span class=\"o\">=<\/span>1 <span class=\"nt\">--skip<\/span><span class=\"o\">=<\/span><span class=\"nv\">$SKIP<\/span> <span class=\"nt\">--reflog<\/span> <span class=\"nt\">--format<\/span><span class=\"o\">=<\/span><span class=\"s1\">'%C(auto)%h [%ad] %Cgreen%s'<\/span>\r\n    git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\"<\/span> ls-tree <span class=\"nt\">-d<\/span> <span class=\"nt\">--name-only<\/span> <span class=\"nv\">$LINE<\/span>\r\n    <span class=\"nb\">echo<\/span> <span class=\"s1\">''<\/span>\r\n   <span class=\"o\">((<\/span>SKIP++<span class=\"o\">))<\/span>\r\n  <span class=\"k\">done<\/span> &lt; &lt;<span class=\"o\">(<\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\"<\/span> log <span class=\"nt\">--max-count<\/span><span class=\"o\">=<\/span><span class=\"k\">${<\/span><span class=\"nv\">1<\/span><span class=\"k\">:-<\/span><span class=\"nv\">5<\/span><span class=\"k\">}<\/span> <span class=\"nt\">--reflog<\/span> <span class=\"nt\">--format<\/span><span class=\"o\">=<\/span><span class=\"s1\">'%C(auto)%h'<\/span><span class=\"o\">)<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbgit add --update\r\n   \uff1a\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u3042\u308b\uff08\u8ffd\u8de1\u3055\u308c\u3066\u3044\u308b\uff09\u66f4\u65b0\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30b9\u30c6\u30fc\u30b8\u306b\u4e0a\u3052\u308b\r\n\u30fbgit commit --date=now\r\n   \uff1a\u4eca\u306e\u65e5\u6642\u3092\u4ed8\u3051\u3066\u60c5\u5831\u3092\u8a18\u9332\r\n\u30fbgit log --max-count=n\/-n --reflog --format='%C(auto)%h [%ad] %Cgreen%s'\r\n   \uff1a\u30b3\u30df\u30c3\u30c8\u306e\u5c65\u6b74\u3092\u8868\u793a\u3059\u308b\r\n   -n       \uff1a\u76f4\u8fd1 n \u4ef6\u3092\u8868\u793a\uff08\uff1d --max-count=n \uff09\r\n   --reflog \uff1agit reflog \u3067\u8868\u793a\u3055\u308c\u308b\u64cd\u4f5c\u306e\u5185\u3001\u3059\u3079\u3066\u306e git commit \u3092\u5217\u6319\u3059\u308b\r\n   --format\r\n      %C(auto)\uff1a\u6b21\u306e\u307f\u81ea\u52d5\u3067\u8272\u4ed8\u3051\r\n        green \uff1a\u4ee5\u964d\u3059\u3079\u3066\u7dd1\u3067\u8868\u793a\r\n      %h      \uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4e00\u610f\u306b\u6307\u5b9a\u3059\u308b\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8868\u793a\r\n      [%ad]   \uff1a[\u65e5\u4ed8] \u3067\u8868\u793a\r\n      %s      \uff1a\u30b3\u30df\u30c3\u30c8\u6642\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\r\n   --name-only\r\n            \uff1a\u5909\u66f4\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u540d\u524d\u306e\u307f\u3092\u8868\u793a\r\n\u30fbgit ls-tree -d --name-only &lt;commit id&gt;\r\n   \uff1a\u30c4\u30ea\u30fc\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5185\u5bb9\u3092\u4e00\u89a7\u8868\u793a\u3059\u308b\r\n   -d       \uff1a\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u8868\u793a\u305b\u305a\u3001\u30c4\u30ea\u30fc\u30a8\u30f3\u30c8\u30ea\u306e\u307f\u8868\u793a\r\n   --name-only\r\n            \uff1a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\/\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u307f\u3092 1 \u884c\u306b 1 \u3064\u305a\u3064\u30ea\u30b9\u30c8\r\n<\/code><\/pre>\n<p>\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u94fe\u63a5\u5982\u4e0b\uff1a<br \/>\nGit &#8211; \u6587\u6863<br \/>\n\u30fbhttps:\/\/git-scm.com\/doc<br \/>\n\u30fbhttps:\/\/git-scm.com\/docs\/git-log<br \/>\n\u30fbhttps:\/\/git-scm.com\/docs\/git-ls-tree<br \/>\n\u83b7\u53d6\u5185\u90e8\u6587\u4ef6\u5217\u8868\u7684GIT ls-tree\u65b9\u6cd5\u4ee5\u53ca\u89e3\u51b3\u5b83\u4eec\u51fa\u73b0\u4e71\u7801\u7684\u65b9\u6cd5\u3002<br \/>\n\u30fbhttps:\/\/blog.myntinc.com\/2020\/04\/gitls-tree.html<\/p>\n<h6>\uff1c\u6062\u590d\u7528\u811a\u672c\uff1e<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"nb\">read <\/span>Commit_ID &lt; <span class=\"se\">\\<\/span>\r\n    &lt;<span class=\"o\">(<\/span>git <span class=\"nt\">--git-dir<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\/.git\"<\/span> <span class=\"se\">\\<\/span>\r\n          <span class=\"nt\">--work-tree<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"se\">\\<\/span>\r\n          <span class=\"k\">for<\/span><span class=\"nt\">-each-ref<\/span> <span class=\"se\">\\<\/span>\r\n            <span class=\"nt\">--sort<\/span><span class=\"o\">=<\/span><span class=\"nt\">-committerdate<\/span> <span class=\"se\">\\<\/span>\r\n            <span class=\"nt\">--count<\/span><span class=\"o\">=<\/span>1 <span class=\"se\">\\<\/span>\r\n            <span class=\"nt\">--format<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"%(objectname:short)\"<\/span> <span class=\"se\">\\<\/span>\r\n            refs\/heads<span class=\"o\">)<\/span>\r\n  backup_worlds\r\n  git <span class=\"nt\">--git-dir<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\/.git\"<\/span> <span class=\"se\">\\<\/span>\r\n      <span class=\"nt\">--work-tree<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"se\">\\<\/span>\r\n      restore <span class=\"nt\">--no-overlay<\/span> <span class=\"nt\">--worktree<\/span> <span class=\"nt\">--source<\/span><span class=\"o\">=<\/span><span class=\"nv\">$Commit_ID<\/span> <span class=\"nt\">--<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$2<\/span><span class=\"s2\">\"<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>  <span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Another_DIR<\/span><span class=\"s2\">\"<\/span>\r\n  git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Worlds_Bak_DIR<\/span><span class=\"s2\">\"<\/span> archive <span class=\"nt\">--format<\/span><span class=\"o\">=<\/span><span class=\"nb\">tar<\/span> <span class=\"nv\">$1<\/span> <span class=\"nt\">--<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$2<\/span><span class=\"s2\">\"<\/span> | <span class=\"nb\">tar <\/span>Cx <span class=\"s2\">\"<\/span><span class=\"nv\">$Another_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--strip-components<\/span> 1\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbread Commit_ID &lt; &lt;(~~~~~~)\r\n    \uff1a\u30b3\u30de\u30f3\u30c9\u7f6e\u63db\u3092\u3057\u3066\u3001\u305d\u306e\u6a19\u6e96\u51fa\u529b\u3092\u5909\u6570\u306b\u4ee3\u5165\u3059\u308b\r\n\u30fbfor-each-ref \\\r\n    --sort=-committerdate --count=1 \\\r\n    --format=\"%(objectname:short)\" refs\/heads\r\n    \uff1arefs\/heads \u4ee5\u4e0b\u306b\u3042\u308b\u5404\u53c2\u7167\u306e\u5185\u3001\u6700\u3082\u6700\u8fd1\u30b3\u30df\u30c3\u30c8\u3055\u308c\u305f\u3082\u306e\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u53d6\u5f97\u3059\u308b\r\n\u30fbbackup_worlds\r\n    \uff1a\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u51e6\u7406\u5185\u3067 worlds \u5185\u306e\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u8a18\u5165\u3059\u308b\uff08\u8ffd\u8de1\u72b6\u614b\u306b\u3059\u308b\uff09\r\n\u30fbgit restore --no-overlay --worktree --source=\"commit id\" -- world\r\n    = git restore -WS -s \"commit id\" -- file\r\n    \uff1a\"backup_worlds\" \u3067\u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u8de1\u3057\u3001\"git restore ~~~~~~ -- world\" \u3067\u6307\u5b9a\u3057\u305f\u30ef\u30fc\u30eb\u30c9\u3092\u904e\u53bb\u306e\u72b6\u614b\u306b\u5fa9\u5143\u3059\u308b\r\n\u30fbmkdir -p \"new world\"\r\n\u30fbgit archive (--format=tar) world -- \"new world\" | tar Cx \"new world\" --strip-components 1\r\n    \uff1a\u65b0\u3057\u3044\u30ef\u30fc\u30eb\u30c9\u30d5\u30a9\u30eb\u30c0\u30fc\u3092\u4f5c\u6210\u3057\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u305f\u30ef\u30fc\u30eb\u30c9\u30c7\u30fc\u30bf\u3092\u305d\u3053\u306b\u5fa9\u5143\u3059\u308b\r\n    --format=tar         \uff1a\u65e2\u5b9a\r\n    --strip-components 1 \uff1a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u306e\u7b2c\u4e00\u968e\u5c64\u3092\u7121\u8996\u3059\u308b\r\n    [C\/--directory] DIR  \uff1a\u6307\u5b9a\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u5c55\u958b\u3059\u308b\r\n    [x\/--extract] ~.tar  \uff1a\u6307\u5b9a\u3057\u305f tar \u30d5\u30a1\u30a4\u30eb\u3092\u5c55\u958b\u3059\u308b\r\n                         \u3000 | \u3092\u4ecb\u3057\u3066 tar \u30d5\u30a1\u30a4\u30eb\u81ea\u4f53\u3082\u53d7\u3051\u53d6\u308c\u308b\r\n<\/code><\/pre>\n<p>\u53c2\u8003\u6765\u6e90\uff1aGit \u5b98\u65b9\u6587\u6863\uff08https:\/\/git-scm.com\/doc\uff09<br \/>\n\u5982\u4f55\u5728 BASH \u4e2d\u9012\u5f52\u5730\u53ea\u590d\u5236\u7531 Git \u7248\u672c\u63a7\u5236\u7684\u5185\u5bb9\uff1f<br \/>\n\u53c2\u8003\u94fe\u63a5\uff1aStack Overflow\uff08https:\/\/stackoverflow.com\/questions\/44143371\/in-bash-how-can-one-recursively-copy-only-content-version-controlled-by-git\/44144020#44144020\uff09<\/p>\n<h6>\uff1c\u5220\u9664\u5907\u4efd\u7684\u811a\u672c\uff1e<\/p>\n<pre class=\"post-pre\"><code>  <span class=\"k\">while <\/span><span class=\"nb\">read <\/span>COUNT_HEAD<span class=\"p\">;<\/span> <span class=\"k\">do \r\n    <\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Working_DIR<\/span><span class=\"s2\">\"<\/span> reflog delete <span class=\"s2\">\"HEAD@{<\/span><span class=\"nv\">$SKIP<\/span><span class=\"s2\">}\"<\/span>\r\n  <span class=\"k\">done<\/span> &lt; &lt;<span class=\"o\">(<\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Working_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--no-pager<\/span> log <span class=\"nt\">--walk-reflogs<\/span> <span class=\"nt\">--skip<\/span><span class=\"o\">=<\/span><span class=\"nv\">$SKIP<\/span> <span class=\"nt\">--format<\/span><span class=\"o\">=<\/span><span class=\"s1\">'%gd'<\/span> HEAD<span class=\"o\">)<\/span>\r\n\r\n  <span class=\"k\">while <\/span><span class=\"nb\">read <\/span>COUNT_MAIN<span class=\"p\">;<\/span> <span class=\"k\">do \r\n    <\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Working_DIR<\/span><span class=\"s2\">\"<\/span> reflog delete <span class=\"s2\">\"<\/span><span class=\"si\">$(<\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Working_DIR<\/span><span class=\"s2\">\"<\/span> branch <span class=\"nt\">--show-current<\/span><span class=\"si\">)<\/span><span class=\"s2\">@{<\/span><span class=\"nv\">$SKIP<\/span><span class=\"s2\">}\"<\/span>\r\n  <span class=\"k\">done<\/span> &lt; &lt;<span class=\"o\">(<\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Working_DIR<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--no-pager<\/span> log <span class=\"nt\">--walk-reflogs<\/span> <span class=\"nt\">--skip<\/span><span class=\"o\">=<\/span><span class=\"nv\">$SKIP<\/span> <span class=\"nt\">--format<\/span><span class=\"o\">=<\/span><span class=\"s1\">'%gd'<\/span> refs\/heads\/<span class=\"si\">$(<\/span>git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Working_DIR<\/span><span class=\"s2\">\"<\/span> branch <span class=\"nt\">--show-current<\/span><span class=\"si\">)<\/span><span class=\"o\">)<\/span>\r\n\r\n  git <span class=\"nt\">-C<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$Working_DIR<\/span><span class=\"s2\">\"<\/span> gc <span class=\"nt\">--quiet<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u30fbwhile ~~~~~~ done\r\n    \uff1a\u53c2\u7167\u30ed\u30b0\u3092\u3001\u6700\u65b0\u304b\u3089 \"$SKIP\u306b\u4ee3\u5165\u3057\u305f\u6570-1\" \u307e\u3067\u6b8b\u3057\u3066\u3001\u3042\u3068\u3092\u6d88\u3059\r\n    \uff1a\u3053\u308c\u3092 HEAD \u3068 refs\/heads\/~~~ 2\u3064\u306e\u53c2\u7167\u30ed\u30b0\u3067\u884c\u3046\r\n\u30fbgit gc --quiet\r\n    \uff1a\u4e0a\u8a18\u3067\u6b8b\u3089\u306a\u304b\u3063\u305f\u53c2\u7167\u30ed\u30b0\u53ca\u3073, gc.reflogExpire, gc.reflogExpireUnreachable, gc.pruneExpire \u3092\u5143\u306b\u3057\u3066 blob \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u524a\u9664\u3092\u884c\u3046\r\n    \uff1a\u305f\u3060\u3057\u3001\u53c2\u7167\u30ed\u30b0\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30b3\u30df\u30c3\u30c8+1\u307e\u3067\u30b3\u30df\u30c3\u30c8\u672c\u4f53\u304c\u6b8b\u308b\r\n    --quiet\r\n    \uff1a\u30bf\u30fc\u30df\u30ca\u30eb\u51fa\u529b\u3092\u6291\u5236\u3059\u308b\r\n<\/code><\/pre>\n<p>\u3010\u5f15\u7528\/\u53c2\u8003\u3011<br \/>\nGit &#8211; \u6587\u6863<br \/>\n\u00b7 https:\/\/git-scm.com\/doc<br \/>\n\u00b7 https:\/\/git-scm.com\/docs\/git-reflog<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uff11 \u7528Git\u5907\u4efd\u65b9\u5f0f\u5efa\u7acbMinecraft\u57fa\u5ca9\u7248\u670d\u52a1\u5668 \uff12 \u811a\u672c\u5217\u8868 \uff13 \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u548c\u5f15\u7528\u6765\u6e90\u00b7\u53c2\u8003\u8d44 [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[227],"class_list":["post-27406","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-227"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u5173\u4e8e3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/3-\u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\" \/>\n<meta property=\"og:description\" content=\"\u5173\u4e8e3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/3-\u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-09T16:20:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-11T18:31:49+00:00\" \/>\n<meta name=\"author\" content=\"\u9038, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u9038, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/\",\"name\":\"3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-10-09T16:20:21+00:00\",\"dateModified\":\"2025-08-11T18:31:49+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\"},\"description\":\"\u5173\u4e8e3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\u7684\u6280\u672f\u6587\u7ae0\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\",\"name\":\"\u9038, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"caption\":\"\u9038, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599 - Blog - Silicon Cloud","description":"\u5173\u4e8e3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\u7684\u6280\u672f\u6587\u7ae0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/3-\u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\/","og_locale":"zh_CN","og_type":"article","og_title":"3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599","og_description":"\u5173\u4e8e3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\u7684\u6280\u672f\u6587\u7ae0","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/3-\u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-10-09T16:20:21+00:00","article_modified_time":"2025-08-11T18:31:49+00:00","author":"\u9038, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u9038, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"1 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/","name":"3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-10-09T16:20:21+00:00","dateModified":"2025-08-11T18:31:49+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487"},"description":"\u5173\u4e8e3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599\u7684\u6280\u672f\u6587\u7ae0","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"3. \u6bcf\u4e2a\u811a\u672c\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5f15\u7528\u6765\u6e90\u548c\u53c2\u8003\u8d44\u6599"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487","name":"\u9038, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","caption":"\u9038, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/3-%e6%af%8f%e4%b8%aa%e8%84%9a%e6%9c%ac%e7%9a%84%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af%e5%8f%8a%e5%bc%95%e7%94%a8%e6%9d%a5%e6%ba%90%e5%92%8c%e5%8f%82%e8%80%83%e8%b5%84%e6%96%99\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=27406"}],"version-history":[{"count":3,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27406\/revisions"}],"predecessor-version":[{"id":111127,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/27406\/revisions\/111127"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=27406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=27406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=27406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}