{"id":255,"date":"2024-09-06T13:35:14","date_gmt":"2024-09-06T05:35:14","guid":{"rendered":"https:\/\/blog.king011.com\/?p=255"},"modified":"2024-09-06T13:35:16","modified_gmt":"2024-09-06T05:35:16","slug":"02-%e5%88%9d%e5%a7%8b%e5%8c%96%e6%9c%8d%e5%8b%99%e5%99%a8","status":"publish","type":"post","link":"https:\/\/blog.king011.com\/?p=255","title":{"rendered":"02-\u521d\u59cb\u5316\u670d\u52d9\u5668"},"content":{"rendered":"\n<p>\u5728\u5275\u5efa\u670d\u52d9\u5668\u6642\u672c\u55b5\u63a8\u85a6\u5275\u5efa\u6700\u7cbe\u7c21\u7684\u7cfb\u7d71\uff0c\u9019\u6a23\u670d\u52d9\u5668\u4e0a\u4e0d\u6703\u5b58\u5728\u4efb\u4f55\u4e0d\u60f3\u8981\u7684\u6771\u897f\uff0c\u6771\u897f\u8d8a\u5c11 bug \u4e5f\u8d8a\u5c11\u4f60\u670d\u52d9\u5668\u81ea\u7136\u4e5f\u8d8a\u5b89\u5168\u3002\u4e26\u4e14\u5c11\u4e86\u9019\u4e9b\u4e0d\u5fc5\u8981\u7684\u7d2f\u8d05\uff0c\u786c\u4ef6\u53ef\u4ee5\u66f4\u591a\u7684\u670d\u52d9\u4f60\u771f\u5be6\u7684\u9700\u6c42\uff0c\u6700\u91cd\u8981\u7684\u662f linux \u4e0a\u5b89\u88dd\u5957\u4ef6\u5c31\u548c\u559d\u6c34\u4e00\u6a23\u7c21\u55ae\uff0c\u4e0b\u9762\u6211\u5011\u5c31\u5f9e0\u958b\u59cb\u4ee5 ubuntu \u7232\u4f8b\u5b89\u88dd\u5fc5\u5099\u7684\u5957\u4ef6\u3002<\/p>\n\n\n\n<p>\u5c0d\u65bc ubuntu \u53ea\u9700\u8981\u77e5\u9053\u5957\u4ef6\u540d\u7a31\uff0c\u4e4b\u5f8c\u57f7<code>\u884c<\/code> apt install \u5373\u53ef\u5b89\u88dd\uff0c\u4e0d\u77e5\u9053\u7684\u81ea\u5df1 google apt <a href=\"https:\/\/www.google.com\/search?q=apt+%E6%95%99%E5%AD%B8&amp;newwindow=1&amp;sca_esv=b3b81d1d30ec7baa&amp;sca_upv=1&amp;sxsrf=ADLYWILfHuoEI_j_XI9gQquRAcO0Rw6mig%3A1725598157447&amp;ei=zYnaZpbTGpLo1e8P342X-QU&amp;ved=0ahUKEwjW7cuJwq2IAxUSdPUHHd_GJV8Q4dUDCBA&amp;uact=5&amp;oq=apt+%E6%95%99%E5%AD%B8&amp;gs_lp=Egxnd3Mtd2l6LXNlcnAiCmFwdCDmlZnlrbgyChAAGIAEGEMYigUyBRAAGIAEMgUQABiABDIFEAAYgAQyBRAAGIAEMgoQABiABBhDGIoFMgoQABiABBhDGIoFMgUQABiABDIFEAAYgAQyBRAAGIAESI0jUI4aWNsfcAF4AZABAJgBmwSgAfoOqgEFNC0yLjK4AQPIAQD4AQGYAgKgAqsEwgIKEAAYsAMY1gQYR5gDAIgGAZAGCpIHBTEuNC0xoAfDBg&amp;sclient=gws-wiz-serp\">\u547d\u4ee4\u6559\u5b78<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">bash-completion<\/h1>\n\n\n\n<p>\u9996\u5148\u5efa\u8b70\u4f60\u5b89\u88dd bash-completion \u5957\u4ef6\uff0c\u5b83\u6703\u7232 linux \u6307\u4ee4\u63d0\u4f9b\u81ea\u52d5\u88dc\u5168\uff0c\u6c92\u6709 bash-completion \u672c\u55b5\u57fa\u672c\u4e0a\u7121\u6cd5\u6709\u6548\u7684\u8f38\u5165\u6307\u4ee4\u3002\u5b89\u88dd bash-completion \u5f8c\u5927\u90e8\u5206\u6307\u4ee4\u6839\u672c\u4e0d\u9700\u8981\u8a18\u4f4f\u540d\u5b57\uff0c\u53ea\u9700\u8981\u8f38\u5165\u524d\u7db4\u4e4b\u5f8c tab \u5373\u53ef\u81ea\u52d5\u88dc\u5168\uff0c\u8def\u5f91\u4e5f\u53ef\u4ee5\u88ab\u88dc\u5168\u3002<\/p>\n\n\n\n<p>\u6240\u4ee5\u5efa\u8b70\u5148\u5b89\u88dd\u9019\u500b\u5957\u4ef6\uff0c\u7562\u7adf\u5f8c\u7e8c\u6240\u6709\u64cd\u4f5c\u90fd\u9700\u8981\u8f38\u5165\u547d\u4ee4\uff0c\u63d0\u5347\u8f38\u5165\u547d\u4ee4\u7684\u6548\u7387\u548c\u8212\u9069\u5ea6\u7406\u61c9\u4f5c\u7232\u9996\u8981\u4efb\u52d9<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u5275\u5efa\u4e00\u500b\u7528\u6236<\/h1>\n\n\n\n<p>\u901a\u5e38\u5275\u5efa\u670d\u52d9\u5668\u5f8c\uff0c\u4f9b\u61c9\u5546\u6703\u63d0\u4f9b\u4e00\u500b root \u7528\u6236\u548c\u96a8\u6a5f\u7684\u5bc6\u78bc\uff0c\u4f60\u4e0d\u61c9\u8a72\u4f7f\u7528 root \u4f86\u64cd\u4f5c\uff0c\u56e0\u7232 root \u6b0a\u9650\u592a\u5927\u5b83\u53ef\u4ee5\u505a\u4efb\u4f55\u4e8b\uff08\u5305\u62ec\u522a\u6389\u6574\u500b\u7cfb\u7d71\uff0c\u6216\u8005\u904b\u884c\u975e\u6cd5\u7684\u60e1\u610f\u6307\u4ee4\u53bb\u5617\u8a66\u71d2\u58de\u786c\u4ef6\uff09\u3002<\/p>\n\n\n\n<p>\u6240\u4ee5\u901a\u5e38\u6703\u5275\u5efa\u4e00\u500b\u666e\u901a\u7528\u6236\uff0c\u5c0d\u65bc ubuntu \u7528\u6236\u901a\u5e38\u9084\u6703\u628a\u9019\u500b\u7528\u6236\u6dfb\u52a0\u5230 sudoers \u4e2d\uff0c\u4ee5\u4fbf\u53ef\u4ee5\u65b9\u4fbf\u7684\u4f7f\u7528 <a href=\"https:\/\/www.google.com\/search?q=sudo%E7%94%A8%E6%B3%95&amp;newwindow=1&amp;sca_esv=b3b81d1d30ec7baa&amp;sca_upv=1&amp;sxsrf=ADLYWILRcxfCe0APcjNuf_WkOEDm-nDS2A%3A1725598711156&amp;ei=94vaZtScCfqavr0P3pHR2AM&amp;oq=linux+suod&amp;gs_lp=Egxnd3Mtd2l6LXNlcnAiCmxpbnV4IHN1b2QqAggAMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHMgoQABiwAxjWBBhHSOsQUABYAHABeAGQAQCYAQCgAQCqAQC4AQHIAQCYAgGgAgqYAwDiAwUSATEgQIgGAZAGCpIHATGgBwA&amp;sclient=gws-wiz-serp\">sudo<\/a> \u6307\u4ee4<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u5176\u5b83\u5fc5\u8981\u5957\u4ef6<\/h1>\n\n\n\n<p>\u4e0b\u9762\u5217\u51fa\u5176\u5b83\u4e00\u4e9b\u5f88\u6709\u7528\u7684\u5957\u4ef6\u548c\u7c21\u4ecb\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>curl<\/strong> \u9019\u662f\u4e00\u500b http \u5ba2\u6236\u7aef\u5de5\u5177\uff0c\u7528\u65bc\u6e2c\u8a66 http \u6216\u8005\u5728 bash \u8173\u672c\u4e2d\u57f7\u884c http \u8acb\u6c42\u5f88\u6709\u5e6b\u52a9<\/li>\n\n\n\n<li><strong>net-tools<\/strong> \u5305\u542b\u4e86\u5f88\u591a\u7db2\u8def\u6e2c\u8a66\u5de5\u5177\uff0c\u4f8b\u5982 netstat\uff0c\u8981\u8abf\u67e5\u670d\u52d9\u5668\u7db2\u8def\u51fa\u73fe\u7684\u554f\u984c\uff0c\u9019\u53ef\u80fd\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\u5de5\u5177<\/li>\n\n\n\n<li><strong>dnsutils<\/strong> \u5305\u542b\u4e86 dns \u76f8\u95dc\u7684\u5de5\u5177\uff0c\u5982\u679c\u4e0d\u9700\u8981\u8abf\u8a66 dns\uff0c\u4f60\u5c31\u4e0d\u9700\u8981\u5b83<\/li>\n\n\n\n<li><strong>vim<\/strong> ubuntu \u9ed8\u8a8d\u5e36\u7684 vim \u662f\u7cbe\u7c21\u7248\uff0c\u5efa\u8b70\u91cd\u65b0\u5b89\u88dd\u5b8c\u6574\u7248\uff0c\u4e26\u4e14\u5c07\u5979\u8a2d\u7f6e\u7232\u9ed8\u8a8d\u6587\u672c\u7de8\u8f2f\u5de5\u5177<\/li>\n\n\n\n<li><strong>docker.io<\/strong> \u5b89\u88dd\u597d docker\uff0c\u4f7f\u7528 docker \u4f86\u90e8\u7f72\u670d\u52d9\uff0c\u4e0d\u4f46\u7c21\u55ae\u4e26\u4e14\u6bd4\u76f4\u63a5\u90e8\u7f72\u670d\u52d9\u5728\u670d\u52d9\u5668\u4e0a\u5b58\u5728\u986f\u8457\u7684\u512a\u52e2<\/li>\n\n\n\n<li><strong>rsync<\/strong> \u4e00\u500b\u9ad8\u6548\u7684\u540c\u6b65\u5de5\u5177\uff0c\u53ef\u4ee5\u65b9\u4fbf\u7684\u5c07\u670d\u52d9\u5668\u4e0a\u7684\u6a94\u6848\u540c\u6b65\u5230\u672c\u5730\uff0c\u6216\u7531\u672c\u5730\u63a8\u9001\u5230\u670d\u52d9\u5668\uff0c\u9019\u5c0d\u65bc\u5099\u4efd\u5f88\u6709\u5e6b\u52a9\u3002\uff08\u96d6\u7136 vps \u4f9b\u61c9\u5546\u63d0\u4f9b\u4e86\u5feb\u7167\uff0c\u4f46\u5feb\u7167\u6578\u91cf\u6709\u9650\uff0c\u4e14\u8de8\u4f9b\u61c9\u5546\u7684\u5feb\u7167\u4e26\u4e0d\u901a\u7528\u3002\u6240\u4ee5\u81ea\u5df1\u4f7f\u7528 rsync \u4f86\u540c\u6b65\u5099\u4efd\u6578\u64da\u662f\u7d66\u4e0d\u932f\u7684\u9078\u64c7\uff09<\/li>\n<\/ul>\n\n\n\n<p>docker compose \u4e0d\u5728 ubuntu \u5957\u4ef6\u4e2d\uff0c\u9700\u8981\u5f9e url \u4e0b\u8f09\u5b89\u88dd\u3002\u5b83\u53ef\u4ee5\u5e6b\u4f60\u628a docker \u6309\u9805\u76ee\u90e8\u7f72\u3002\u57fa\u672c\u4e0a\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684\u3002<a href=\"https:\/\/book.king011.com\/view\/zh-Hant\/view\/container-docker-compose\/0\">\u9019\u88cf<\/a>\u6709\u4e00\u4e9b\u7c21\u55ae\u7684\u4f7f\u7528\u8aaa\u660e\uff0c\u8a73\u7d30\u529f\u80fd\u5efa\u8b70\u53c3\u8003\u5b98\u7db2<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e00\u4e9b\u8a2d\u7f6e<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528 timedatectl \u6307\u4ee4\u8a2d\u7f6e\u597d\u670d\u52d9\u5668\u6642\u5340<\/li>\n\n\n\n<li>\u958b\u5553 bbr \u4ee5\u63d0\u5347\u670d\u52d9\u5668\u7684 tcp \u6027\u80fd<\/li>\n\n\n\n<li>\u8a2d\u7f6e\u597d\u56fa\u5b9a\u7684 \u5b9a\u6642\u4efb\u52d9(\u5b89\u9700\u8a2d\u7f6e)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">\u81ea\u52d5\u5316\u5b8c\u6210\u4e0a\u8ff0\u6b65\u9a5f<\/h1>\n\n\n\n<p>\u4e0d\u8981\u50bb\u50bb\u7684\u53bb\u5b8c\u6210\u4e0a\u8ff0\u64cd\u4f5c\uff0c\u4f60\u61c9\u8a72\u5beb\u500b bash \u8173\u672c\u4f86\u81ea\u52d5\u5b8c\u6210\u9019\u4e9b\uff0c\u56e0\u7232\u6bcf\u6b21\u5275\u5efa\u670d\u52d9\u5668\u4f60\u90fd\u9700\u8981\u91cd\u8907\u9019\u4e9b\u6b65\u9a5f\uff0c\u5beb\u500b\u8173\u672c\u5247\u53ef\u4ee5\u81ea\u52d5\u53bb\u5b8c\u6210\u9019\u4e00\u5207\u3002\u76f8\u4fe1\u6211\uff0c\u53ea\u8981\u4f60\u73a9\u670d\u52d9\u5668\uff0c\u4f60\u5c31\u7d55\u5c0d\u4e0d\u6703\u53ea\u505a\u4e00\u6b21\u4e0a\u8ff0\u6b65\u9a5f\u3002\u4e0b\u9762\u662f\u4e00\u4e9b\u4f60\u9700\u8981\u91cd\u8907\u5275\u5efa\u670d\u52d9\u5668\u7684\u539f\u56e0\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f60\u53ef\u80fd\u66f4\u63db\u4e86\u4f9b\u61c9\u5546\uff0c\u9700\u8981\u9077\u79fb\u7cfb\u7d71\u5230\u4e00\u500b\u65b0\u7684\u670d\u52d9\u5668<\/li>\n\n\n\n<li>\u4f60\u9700\u8981\u518d\u5275\u5efa\u4e00\u500b\u670d\u52d9\u5668\uff0c\u4f86\u505a\u5176\u5b83\u67d0\u4e9b\u4e8b\u60c5<\/li>\n\n\n\n<li>\u4f60\u628a\u670d\u52d9\u5668\u7cfb\u7d71\u640d\u6bc0\u4e14\u7121\u6cd5\u4fee\u5fa9\uff0c\u53ea\u80fd\u91cd\u65b0\u958b\u59cb<\/li>\n\n\n\n<li>\u6b64\u5916\u4f60\u4e5f\u53ef\u80fd\u56e0\u7232\u5de5\u4f5c\uff0c\u9700\u8981\u5e6b\u516c\u53f8\u6703\u5176\u5b83\u4eba\u5275\u5efa\u670d\u52d9\u5668<\/li>\n<\/ol>\n\n\n\n<p>\u6240\u4ee5\u5beb\u500b\u8173\u672c\u4f86\u81ea\u52d5\u5316\u662f\u76f8\u7576\u6709\u5fc5\u8981\u7684\uff0c\u4e0b\u9762\u662f\u4e00\u500b\u672c\u55b5\u4f7f\u7528\u7684\u8173\u672c\uff0c\u4f60\u53ef\u4ee5\u53c3\u8003\uff0c\u4f46\u9700\u8981\u81ea\u5df1\u4fee\u6539\u4e0b\u4f86\u6eff\u8db3\u81ea\u5df1\u7684\u9700\u6c42<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\nset -e\ncd \"$(dirname $BASH_SOURCE)\"\nVAR_APT_UPDATE=0\nfunction apt_update\n{\n    if &#91;&#91; $VAR_APT_UPDATE == 0 ]];then\n        VAR_APT_UPDATE=1\n        apt-get update \n    fi\n}\nfunction install_user\n{\n    local user=$(cat \/etc\/passwd | egrep '^king')\n     if &#91;&#91; \"$user\" == \"\" ]];then\n        useradd -m -U -s \/bin\/bash king;\n    fi\n\n    local visudo=$(cat \/etc\/sudoers | egrep '^king')\n    if &#91;&#91; \"$visudo\" == \"\" ]];then\n        echo 'king\tALL=(ALL:ALL) NOPASSWD:ALL' >> \/etc\/sudoers\n    fi\n\n    local docker=$(cat \/home\/king\/.bashrc | egrep '^alias docker=')\n    if &#91;&#91; \"$docker\" == \"\" ]];then\n        echo 'alias docker=\"sudo docker\"' >> \/home\/king\/.bashrc\n    fi\n    local compose=$(cat \/home\/king\/.bashrc | egrep '^alias docker-compose=')\n    if &#91;&#91; \"$compose\" == \"\" ]];then\n        echo 'alias docker-compose=\"sudo docker-compose\"' >> \/home\/king\/.bashrc\n    fi\n\n    local path=$(cat \/home\/king\/.bashrc | egrep '^export PATH=')\n    if &#91;&#91; \"$path\" == \"\" ]];then\n        echo 'export PATH=$PATH:~\/Sync\/server\/ubuntu:~\/Sync\/bin' >> \/home\/king\/.bashrc\n    fi\n}\n# curl\nfunction install_curl\n{\n    echo \"check curl\"\n    set +e\n    curl -V &amp;> \/dev\/null\n    local check=$?\n    set -e\n\n    if &#91;&#91; $check == 0 ]];then\n        echo \"curl ready\"\n    else\n        echo \"install curl\"\n        apt_update\n        apt-get install curl -y --no-install-recommends\n    fi\n}\n# net-tools\nfunction install_net_tools\n{\n    echo \"check net-tools\"\n    set +e\n    netstat -h &amp;> \/dev\/null\n    local check=$?\n    set -e\n\n    if &#91;&#91; $check == 0 ]];then\n        echo \"net-tools ready\"\n    else\n        echo \"install net-tools\"\n        apt_update\n        apt-get install net-tools -y --no-install-recommends\n    fi\n}\n# dnsutils\nfunction install_dnsutils\n{\n    echo \"check dnsutils\"\n    set +e\n    dig -v &amp;> \/dev\/null\n    local check=$?\n    set -e\n\n    if &#91;&#91; $check == 0 ]];then\n        echo \"dnsutils ready\"\n    else\n        echo \"install dnsutils\"\n        apt_update\n        apt-get install dnsutils -y --no-install-recommends\n    fi\n}\n# vim\nfunction install_vim\n{\n    echo \"check vim.basic\"\n    set +e\n    vim.basic --version &amp;> \/dev\/null\n    local check=$?\n    set -e\n\n    if &#91;&#91; $check == 0 ]];then\n        echo \"vim.basic  ready\"\n    else\n        echo \"install vim.basic\"\n        apt_update\n        apt-get install vim  -y --no-install-recommends\n    fi\n}\n\n\nfunction install_docker_compose\n{\n    echo \"check docker compose\"\n    set +e\n    docker-compose version &amp;> \/dev\/null\n    local check=$?\n    set -e\n\n    # check=0\n    if &#91;&#91; $check == 0 ]];then\n        echo \"docker compose ready\"\n    else\n        echo \"install docker compose\"\n        if &#91;&#91; ! -d \/etc\/bash_completion.d ]];then\n            mkdir \/etc\/bash_completion.d\n        fi\n\n        if &#91;&#91; ! -f \/etc\/bash_completion.d\/docker-compose ]];then\n            curl -#Lko tmp https:\/\/raw.githubusercontent.com\/docker\/compose\/master\/contrib\/completion\/bash\/docker-compose\n            mv tmp \/etc\/bash_completion.d\/docker-compose\n        fi\n\n        curl -#Lko tmp https:\/\/github.com\/docker\/compose\/releases\/download\/v2.23.2\/docker-compose-linux-x86_64\n        chmod a+x tmp\n        mv tmp \/usr\/local\/bin\/docker-compose\n    fi\n}\nfunction install_ejt\n{\n    echo \"check ejt\"\n    set +e\n    ejt -v &amp;> \/dev\/null\n    local check=$?\n    set -e\n\n    # check=0\n    if &#91;&#91; $check == 0 ]];then\n        echo \"ejt ready\"\n    else\n        echo \"install ejt\"\n        curl -#Lko ejt_linux_amd64.tar.gz https:\/\/github.com\/powerpuffpenguin\/ejt\/releases\/download\/v0.0.5\/ejt_linux_amd64.tar.gz\n        tar -zxvf ejt_linux_amd64.tar.gz -C \/usr\/local\/bin\n        rm ejt_linux_amd64.tar.gz\n    fi\n    local ejt=$(cat \/home\/king\/.bashrc | egrep 'ejt completion bash')\n    if &#91;&#91; \"$ejt\" == \"\" ]];then\n        echo 'source &lt;(ejt completion bash)' >> \/home\/king\/.bashrc\n    fi\n}\n\nfunction install_bbr\n{\n    local bbr=$(cat \/etc\/modules-load.d\/modules.conf | egrep '^tcp_bbr$')\n    if &#91;&#91; \"$bbr\" == \"\" ]];then\n        echo \"tcp_bbr\" >> \/etc\/modules-load.d\/modules.conf\n    fi\n    local fq=$(cat \/etc\/sysctl.conf | egrep '^net.core.default_qdisc=fq$')\n    if &#91;&#91; \"$fq\" == \"\" ]];then\n        echo \"net.core.default_qdisc=fq\" >> \/etc\/sysctl.conf\n    fi\n    local sys=$(cat \/etc\/sysctl.conf | egrep 'net.ipv4.tcp_congestion_control=bbr')\n    if &#91;&#91; \"$sys\" == \"\" ]];then\n        echo \"net.ipv4.tcp_congestion_control=bbr\" >> \/etc\/sysctl.conf\n    fi\n\n    local started=$(sysctl net.ipv4.tcp_available_congestion_control | egrep bbr)\n    if &#91;&#91; \"$started\" == \"\" ]];then\n        echo \"enable bbr\"\n        modprobe tcp_bbr &amp;&amp; sysctl net.ipv4.tcp_available_congestion_control\n    fi\n}\n# bash-completion\nfunction install_bash_completion\n{\n    local com=$(dpkg-query -l |egrep bash-completion)\n    if &#91;&#91; \"$com\" == \"\" ]];then\n        apt_update\n        apt-get install bash-completion -y --no-install-recommends\n    fi\n}\n# set timezone\nfunction install_timezone\n{\n    local timezone=$(cat \/etc\/timezone | egrep '^Asia\/Shanghai$')\n    if &#91;&#91; \"$timezone\" == \"\" ]];then\n        timedatectl set-timezone Asia\/Shanghai\n    fi\n}\nfunction install_rsync\n{\n    echo \"check rsync\"\n    set +e\n    rsync --version &amp;> \/dev\/null\n    local check=$?\n    set -e\n\n    # check=0\n    if &#91;&#91; $check == 0 ]];then\n        echo \"rsync ready\"\n    else\n        echo \"install rsync\"\n        apt_update\n        apt-get install rsync -y --no-install-recommends\n    fi\n}\n# docker.io\nfunction install_docker\n{\n    echo \"check docker\"\n    set +e\n    docker version --help &amp;> \/dev\/null\n    local check=$?\n    set -e\n\n    # check=0\n    if &#91;&#91; $check == 0 ]];then\n        echo \"docker ready\"\n    else\n        echo \"install docker\"\n        apt_update\n        apt-get install docker.io -y --no-install-recommends\n    fi\n\n    local dst=\"\/etc\/docker\/daemon.json\"\n    if &#91;&#91; ! -f \"$dst\" ]];then\n        local src=\"tmp.json\"\n        echo '{' > \"$src\"\n        echo '  \"log-driver\":\"json-file\",' >> \"$src\"\n        echo '  \"log-opts\": {' >> \"$src\"\n        echo '      \"max-size\" :\"10m\",' >> \"$src\"\n        echo '      \"max-file\":\"3\"' >> \"$src\"\n        echo '  }' >> \"$src\"\n        echo '}' >> \"$src\"\n        mv \"$src\" \"$dst\"\n    fi\n}\nfunction install_cron\n{\n    local certbot=$(cat \/etc\/crontab | egrep 'apt-get upgrade')\n    if &#91;&#91; \"$certbot\" == \"\" ]];then\n        echo '# \u6bcf\u665a 02:00 \u66f4\u65b0\u7cfb\u7d71' >> \/etc\/crontab\n        echo '0 2\t* * *\troot\tapt-get update &amp;&amp; apt-get upgrade -y' >> \/etc\/crontab\n    fi\n    local certbot=$(cat \/etc\/crontab | egrep 'certbot_renew.sh$')\n    if &#91;&#91; \"$certbot\" == \"\" ]];then\n        echo '# \u6bcf\u6708 1 \u865f 01:00 \u66f4\u65b0\u8b49\u66f8' >> \/etc\/crontab\n        echo '0 1\t1 * *\troot\t\/home\/king\/Sync\/server\/ubuntu\/project\/ingress\/certbot_renew.sh' >> \/etc\/crontab\n    fi\n    local xray=$(cat \/etc\/crontab | egrep 'geo.sh$')\n    if &#91;&#91; \"$xray\" == \"\" ]];then\n        echo '# \u6bcf\u5929 07:00 \u66f4\u65b0 xray ip site' >> \/etc\/crontab\n        echo '0 7\t* * *\troot\t\/home\/king\/Sync\/server\/ubuntu\/project\/xray\/geo.sh' >> \/etc\/crontab\n    fi\n}\ninstall_bash_completion\ninstall_user\ninstall_curl\ninstall_net_tools\ninstall_dnsutils\ninstall_vim\ninstall_docker\ninstall_docker_compose\ninstall_ejt\ninstall_bbr\ninstall_timezone\ninstall_rsync\ninstall_cron\n\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u8cfc\u8cb7\u670d\u52d9\u5668\u5f8c\uff0c\u9032\u884c\u7684\u4e00\u4e9b\u5fc5\u8981\u521d\u59cb\u5316\u64cd\u4f5c<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[50,52,51],"tags":[],"class_list":["post-255","post","type-post","status-publish","format-standard","hentry","category-linux","category-52","category-51"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.king011.com\/index.php?rest_route=\/wp\/v2\/posts\/255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.king011.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.king011.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.king011.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.king011.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=255"}],"version-history":[{"count":6,"href":"https:\/\/blog.king011.com\/index.php?rest_route=\/wp\/v2\/posts\/255\/revisions"}],"predecessor-version":[{"id":261,"href":"https:\/\/blog.king011.com\/index.php?rest_route=\/wp\/v2\/posts\/255\/revisions\/261"}],"wp:attachment":[{"href":"https:\/\/blog.king011.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.king011.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.king011.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}