-
Notifications
You must be signed in to change notification settings - Fork 0
/
content.json
1 lines (1 loc) · 682 KB
/
content.json
1
[{"title":"评论系统更换为livere","date":"2021-03-28T14:18:26.439Z","path":"2021/03/28/建站日志/2019-08-10.评论系统更换为livere/","text":"现在要给博客加个第三方评论系统,还要国内能正常访问,是真的难。各大评论系统倒了一个又一个,之前用的Valine用的leancloud的服务,今天来邮件提醒说要绑定域名,本来这个系统就是正在开发的状态,一些功能不完善,leancloud最近也出了几次问题,终于下决心要换了,找了一圈livere算是一个不错的解决方案。 准备1.访问livere官网,注册账号。2.登录后点击导航栏“安装”,选择city版。3.根据提示,申请获取代码。 修改配置1.在/yelee/_config.yml中加入 1234# livere配置livere: on: true uid: #你的uid,代码中有 2.在/yelee/layout/_partial/article.ejs中插入 123456<% } else if (theme.livere.on){ %><%- partial('comments/livere', { key: post.slug, title: post.title, url: config.url+url_for(post.path) }) %> 3.创建/yelee/layout/_partial/comments/livere.ejs文件,写入 123456789101112131415161718192021<section id="comments" style="margin: 2em; padding: 2em; background: rgba(255, 255, 255, 0.5)"> <div id="vcomment" class="comment"></div> <!-- 来必力City版安装代码 --> <div id="lv-container" data-id="city" data-uid="<%=theme.livere.uid%>"> <script type="text/javascript"> (function (d, s) { var j, e = d.getElementsByTagName(s)[0]; if (typeof LivereTower === 'function') { return; } j = d.createElement(s); j.src = 'https://cdn-city.livere.com/js/embed.dist.js'; j.async = true; e.parentNode.insertBefore(j, e); })(document, 'script'); </script> <noscript> 为正常使用来必力评论功能请激活JavaScript</noscript> </div> <!-- City版安装代码已完成 --></section> 大功告成,测试发布。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>现在要给博客加个第三方评论系统,还要国内能正常访问,是真的难。各大评论系统倒了一个又一个,之前用的Valine用的leancloud的服务,今天来邮件提醒说要绑定域名,本来这个系统就是正在开发的状态,一些功能不完善,leancloud最近也出了几次问题,终于下决心要换了,找了一圈livere算是一个不错的解决方案。</p>\n<span id=\"more\"></span>\n<h2 id=\"准备\"><a href=\"#准备\" class=\"headerlink\" title=\"准备\"></a>准备</h2><p>1.访问<a href=\"https://livere.com/\">livere官网</a>,注册账号。<br>2.登录后点击导航栏“安装”,选择city版。<br><img src=\"https://images.liangs.me/hexo/%E5%BB%BA%E7%AB%99%E6%97%A5%E5%BF%97/_image/72726a87b4ad14acaf3a4e4c4433c094_750.png\"><br>3.根据提示,申请获取代码。</p>\n<h2 id=\"修改配置\"><a href=\"#修改配置\" class=\"headerlink\" title=\"修改配置\"></a>修改配置</h2><p>1.在<code>/yelee/_config.yml</code>中加入</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"># livere配置</span><br><span class=\"line\">livere: </span><br><span class=\"line\"> on: true</span><br><span class=\"line\"> uid: #你的uid,代码中有</span><br></pre></td></tr></table></figure>\n<p>2.在<code>/yelee/layout/_partial/article.ejs</code>中插入</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><% } else if (theme.livere.on){ %></span><br><span class=\"line\"><%- partial('comments/livere', {</span><br><span class=\"line\"> key: post.slug,</span><br><span class=\"line\"> title: post.title,</span><br><span class=\"line\"> url: config.url+url_for(post.path)</span><br><span class=\"line\"> }) %></span><br></pre></td></tr></table></figure>\n<p>3.创建<code>/yelee/layout/_partial/comments/livere.ejs</code>文件,写入</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><section id="comments" style="margin: 2em; padding: 2em; background: rgba(255, 255, 255, 0.5)"></span><br><span class=\"line\"> <div id="vcomment" class="comment"></div></span><br><span class=\"line\"> <!-- 来必力City版安装代码 --></span><br><span class=\"line\"> <div id="lv-container" data-id="city" data-uid="<%=theme.livere.uid%>"></span><br><span class=\"line\"> <script type="text/javascript"></span><br><span class=\"line\"> (function (d, s) {</span><br><span class=\"line\"> var j, e = d.getElementsByTagName(s)[0];</span><br><span class=\"line\"></span><br><span class=\"line\"> if (typeof LivereTower === 'function') { return; }</span><br><span class=\"line\"></span><br><span class=\"line\"> j = d.createElement(s);</span><br><span class=\"line\"> j.src = 'https://cdn-city.livere.com/js/embed.dist.js';</span><br><span class=\"line\"> j.async = true;</span><br><span class=\"line\"></span><br><span class=\"line\"> e.parentNode.insertBefore(j, e);</span><br><span class=\"line\"> })(document, 'script');</span><br><span class=\"line\"> </script></span><br><span class=\"line\"> <noscript> 为正常使用来必力评论功能请激活JavaScript</noscript></span><br><span class=\"line\"> </div></span><br><span class=\"line\"> <!-- City版安装代码已完成 --></span><br><span class=\"line\"></section></span><br></pre></td></tr></table></figure>\n<p>大功告成,测试发布。</p>\n","slug":"建站日志/2019-08-10.评论系统更换为livere","comments":true,"categories":[],"tags":[{"name":"评论","slug":"评论","permalink":"https://www.zhiiker.com/tags/%E8%AF%84%E8%AE%BA/"},{"name":"建站","slug":"建站","permalink":"https://www.zhiiker.com/tags/%E5%BB%BA%E7%AB%99/"}]},{"title":"服务器测试脚本集合","date":"2019-08-30T07:56:37.000Z","path":"2019/08/30/笔记/2019-08-30.服务器测试脚本集合/","text":"部分脚本来自Mr.KevinH 综合测试原始版本Bench1wget freevps.us/downloads/bench.sh -O - -o /dev/null|bash 秋水逸冰的Bench.sh脚本特点: 显示当前测试的各种系统信息 取自世界多处的知名数据中心的测试点,下载测试比较全面 支持 IPv6 下载测速; IO 测试三次,并显示平均值。使用: 1wget -qO- bench.sh | bash 或者 1curl -Lso- bench.sh | bash 或者 1wget -qO- 86.re/bench.sh | bash 或者 1curl -so- 86.re/bench.sh | bash Github地址https://github.com/teddysun/across/blob/master/bench.sh 老鬼的SuperBench测试脚本这个脚本是在基于秋水大佬脚本的基础上,加入了独服通电时间,服务器虚拟化架构等内容 特点:改进了显示的模式,基本参数添加了颜色,方面区分与查找。I/O测试,更改了原来默认的测试的内容,采用小文件,中等文件,大文件,分别测试IO性能,然后取平均值。速度测试替换成了 Superspeed 里面的测试,第一个默认节点是,Speedtest 默认,其他分别测试到中国电信,联通,移动,各三个不同地区的速度。 使用方法1wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash 或者 1curl -Lso- -no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash Github https://github.com/oooldking/script/blob/master/superbench.sh 91yuntest在线脚本生成地址 https://www.91yuntest.com/ 普通模式1wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh 普通模式就是之前的测试常规内容。测试输出结果请参考:普通模式结果样式参考 简单模式1wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh s 简单模式的测试包含:常规系统参数检测,带宽测试,IO测试和全国ping测试。测试输出结果请参考:简单模式结果样式参考主要因为普通模式的下载测试和路由测试有些耗时,有时大家可能只需要快速获得这台服务器的参数,带宽,io和延迟是多少。那么简单模式可以节省大量的时间。如果需要进一步的信息则可以使用普通模式。相比普通模式,就是在命令最后加个s参数: bash test_91yun.sh s 完全模式1wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh a 完全模式相比普通模式多了unixbench的测试,测试输出结果请参考:完全模式结果样式参考相比普通模式,就是在命令最后加个a参数: bash test_91yun.sh a由于unixbench的测试极其耗资源(cpu和io会长时间处于占满状态),有些IDC禁用,会杀进程或者判断滥用。请谨慎测试。另外unixbench的测试也极其耗时间,建议大家在screen下运行。 Zbench脚本由漏水和kirito,基于Oldking的SuperBench,然后加入Ping以及路由测试的功能,还能生成测评报告,分享给其他人查看测评数据。 使用方法中文版 1wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/ZBench/master/ZBench-CN.sh && bash ZBench-CN.sh 英文版 1wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/ZBench/master/ZBench.sh && bash ZBench.sh 演示地址https://www.zhujiboke.com/zbench-example.html Linux-Server-Bench-Test1wget https://raw.githubusercontent.com/chiakge/Linux-Server-Bench-Test/master/linuxtest.sh -N --no-check-certificate 运行说明 不含UnixBench的测试,无网页分享1bash linuxtest.sh 不含UnixBench的测试,带网页分享1bash linuxtest.sh s 含UnixBench的测试,不带网页分享1bash linuxtest.sh a 含UnixBench的测试,带网页分享1bash linuxtest.sh as 服务器性能测试LemonBenchLemonBench工具(别名LBench、柠檬Bench),是一款针对Linux服务器设计的服务器性能测试工具。通过综合测试,可以快速评估服务器的综合性能,为使用者提供服务器硬件配置信息。 使用方法1curl -fsSL https://ilemonrain.com/download/shell/LemonBench.sh | bash 或者 1wget -qO- https://ilemonrain.com/download/shell/LemonBench.sh | bash UnixBench测试脚本UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能。Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。 使用方法123wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.shchmod +x unixbench.sh./unixbench.sh 带宽测试 123wget https://raw.github.com/sivel/speedtest-cli/master/speedtest.pychmod a+rx speedtest.pypython speedtest.py 内存检测脚本检测VPS真实可分配内存的小工具,适用于检测VPS超售情况。本程序检测的可分配内存指的是用户使用时最大能占用的内存量。 使用方法CentOS / RHEL12345yum install wget -yyum groupinstall "Development Tools" -ywget https://raw.githubusercontent.com/FunctionClub/Memtester/master/memtester.cppgcc -l stdc++ memtester.cpp./a.out Ubuntu / Debian 12345apt-get updateapt-get install wget build-essential -ywget https://raw.githubusercontent.com/FunctionClub/Memtester/master/memtester.cppgcc -l stdc++ memtester.cpp./a.out 网络测试Ping值测试uPing——一个24小时监测VPS延迟的工具 依赖安装Debian / Ubuntu 12apt-get updateapt-get install python wget screen -y CentOS / RHEL 1yum install screen wget python -y 使用方法123screen -S upingwget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/uPing/master/uping.pypython uping.py speedtest-cli12345wget https://raw.github.com/sivel/speedtest-cli/master/speedtest.py chmod a+rx speedtest.py sudo mv speedtest.py /usr/local/bin/speedtest-cli sudo chown root:root /usr/local/bin/speedtest-clispeedtest-cli 路由测试脚本12wget https://raw.githubusercontent.com/nanqinlang-script/testrace/master/testrace.sh bash testrace.sh 回程路由测试从你的 Linux(X86/ARM)/Mac/BSD 系统环境下发起 traceroute 请求,附带链路可视化,兼容性更好,支持JSON 格式。下载 1wget https://cdn.ipip.net/17mon/besttrace4linux.zip 解压 1unzip besttrace4linux.zip 使用 1./besttrace -q 1 这里是目标IP 回程ping12wget https://raw.githubusercontent.com/helloxz/mping/master/mping.shbash mping.sh","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><blockquote>\n<p>部分脚本来自<a href=\"https://www.mrkevin.net/share/1383.html\">Mr.KevinH</a></p>\n</blockquote>\n<h2 id=\"综合测试\"><a href=\"#综合测试\" class=\"headerlink\" title=\"综合测试\"></a>综合测试</h2><h3 id=\"原始版本Bench\"><a href=\"#原始版本Bench\" class=\"headerlink\" title=\"原始版本Bench\"></a>原始版本Bench</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget freevps.us/downloads/bench.sh -O - -o /dev/null|bash</span><br></pre></td></tr></table></figure>\n<span id=\"more\"></span>\n<h3 id=\"秋水逸冰的Bench-sh脚本\"><a href=\"#秋水逸冰的Bench-sh脚本\" class=\"headerlink\" title=\"秋水逸冰的Bench.sh脚本\"></a>秋水逸冰的Bench.sh脚本</h3><h4 id=\"特点:\"><a href=\"#特点:\" class=\"headerlink\" title=\"特点:\"></a>特点:</h4><ul>\n<li>显示当前测试的各种系统信息</li>\n<li>取自世界多处的知名数据中心的测试点,下载测试比较全面</li>\n<li>支持 IPv6 下载测速;</li>\n<li>IO 测试三次,并显示平均值。<h4 id=\"使用:\"><a href=\"#使用:\" class=\"headerlink\" title=\"使用:\"></a>使用:</h4></li>\n</ul>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -qO- bench.sh | bash</span><br></pre></td></tr></table></figure>\n\n<p>或者</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">curl -Lso- bench.sh | bash</span><br></pre></td></tr></table></figure>\n\n<p>或者</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -qO- 86.re/bench.sh | bash</span><br></pre></td></tr></table></figure>\n\n<p>或者</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">curl -so- 86.re/bench.sh | bash</span><br></pre></td></tr></table></figure>\n\n<h4 id=\"Github地址\"><a href=\"#Github地址\" class=\"headerlink\" title=\"Github地址\"></a>Github地址</h4><p><a href=\"https://github.com/teddysun/across/blob/master/bench.sh\">https://github.com/teddysun/across/blob/master/bench.sh</a></p>\n<h3 id=\"老鬼的SuperBench测试脚本\"><a href=\"#老鬼的SuperBench测试脚本\" class=\"headerlink\" title=\"老鬼的SuperBench测试脚本\"></a>老鬼的SuperBench测试脚本</h3><p>这个脚本是在基于秋水大佬脚本的基础上,加入了独服通电时间,服务器虚拟化架构等内容</p>\n<h4 id=\"特点:-1\"><a href=\"#特点:-1\" class=\"headerlink\" title=\"特点:\"></a>特点:</h4><p>改进了显示的模式,基本参数添加了颜色,方面区分与查找。<br>I/O测试,更改了原来默认的测试的内容,采用小文件,中等文件,大文件,分别测试IO性能,然后取平均值。<br>速度测试替换成了 Superspeed 里面的测试,第一个默认节点是,Speedtest 默认,其他分别测试到中国电信,联通,移动,各三个不同地区的速度。</p>\n<h4 id=\"使用方法\"><a href=\"#使用方法\" class=\"headerlink\" title=\"使用方法\"></a>使用方法</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash</span><br></pre></td></tr></table></figure>\n\n<p>或者</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">curl -Lso- -no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash</span><br></pre></td></tr></table></figure>\n<p>Github</p>\n<p><a href=\"https://github.com/oooldking/script/blob/master/superbench.sh\">https://github.com/oooldking/script/blob/master/superbench.sh</a></p>\n<h3 id=\"91yuntest\"><a href=\"#91yuntest\" class=\"headerlink\" title=\"91yuntest\"></a>91yuntest</h3><p>在线脚本生成地址</p>\n<p><a href=\"https://www.91yuntest.com/\">https://www.91yuntest.com/</a></p>\n<h4 id=\"普通模式\"><a href=\"#普通模式\" class=\"headerlink\" title=\"普通模式\"></a>普通模式</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh</span><br></pre></td></tr></table></figure>\n<p>普通模式就是之前的测试常规内容。测试输出结果请参考:普通模式结果样式参考</p>\n<h4 id=\"简单模式\"><a href=\"#简单模式\" class=\"headerlink\" title=\"简单模式\"></a><a href=\"https://github.com/zhiiker/91yuntest#%E7%AE%80%E5%8D%95%E6%A8%A1%E5%BC%8F\"></a>简单模式</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh s</span><br></pre></td></tr></table></figure>\n<p>简单模式的测试包含:常规系统参数检测,带宽测试,IO测试和全国ping测试。测试输出结果请参考:简单模式结果样式参考<br>主要因为普通模式的下载测试和路由测试有些耗时,有时大家可能只需要快速获得这台服务器的参数,带宽,io和延迟是多少。那么简单模式可以节省大量的时间。如果需要进一步的信息则可以使用普通模式。<br>相比普通模式,就是在命令最后加个s参数: bash test_91yun.sh s</p>\n<h4 id=\"完全模式\"><a href=\"#完全模式\" class=\"headerlink\" title=\"完全模式\"></a><a href=\"https://github.com/zhiiker/91yuntest#%E5%AE%8C%E5%85%A8%E6%A8%A1%E5%BC%8F\"></a>完全模式</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/91yuntest/master/test_91yun.sh && bash test_91yun.sh a</span><br></pre></td></tr></table></figure>\n<p>完全模式相比普通模式多了unixbench的测试,测试输出结果请参考:完全模式结果样式参考<br>相比普通模式,就是在命令最后加个a参数: bash test_91yun.sh a<br>由于unixbench的测试极其耗资源(cpu和io会长时间处于占满状态),有些IDC禁用,会杀进程或者判断滥用。请谨慎测试。<br>另外unixbench的测试也极其耗时间,建议大家在screen下运行。</p>\n<h3 id=\"Zbench\"><a href=\"#Zbench\" class=\"headerlink\" title=\"Zbench\"></a>Zbench</h3><p>脚本由漏水和kirito,基于Oldking的SuperBench,然后加入Ping以及路由测试的功能,还能生成测评报告,分享给其他人查看测评数据。</p>\n<h4 id=\"使用方法-1\"><a href=\"#使用方法-1\" class=\"headerlink\" title=\"使用方法\"></a>使用方法</h4><p>中文版</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/ZBench/master/ZBench-CN.sh && bash ZBench-CN.sh</span><br></pre></td></tr></table></figure>\n\n<p>英文版</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/ZBench/master/ZBench.sh && bash ZBench.sh</span><br></pre></td></tr></table></figure>\n\n<h4 id=\"演示地址\"><a href=\"#演示地址\" class=\"headerlink\" title=\"演示地址\"></a>演示地址</h4><p><a href=\"https://www.zhujiboke.com/zbench-example.html\">https://www.zhujiboke.com/zbench-example.html</a></p>\n<h3 id=\"Linux-Server-Bench-Test\"><a href=\"#Linux-Server-Bench-Test\" class=\"headerlink\" title=\"Linux-Server-Bench-Test\"></a>Linux-Server-Bench-Test</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget https://raw.githubusercontent.com/chiakge/Linux-Server-Bench-Test/master/linuxtest.sh -N --no-check-certificate</span><br></pre></td></tr></table></figure>\n\n<p>运行说明</p>\n<h4 id=\"不含UnixBench的测试,无网页分享\"><a href=\"#不含UnixBench的测试,无网页分享\" class=\"headerlink\" title=\"不含UnixBench的测试,无网页分享\"></a>不含UnixBench的测试,无网页分享</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">bash linuxtest.sh</span><br></pre></td></tr></table></figure>\n<h4 id=\"不含UnixBench的测试,带网页分享\"><a href=\"#不含UnixBench的测试,带网页分享\" class=\"headerlink\" title=\"不含UnixBench的测试,带网页分享\"></a>不含UnixBench的测试,带网页分享</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">bash linuxtest.sh s</span><br></pre></td></tr></table></figure>\n<h4 id=\"含UnixBench的测试,不带网页分享\"><a href=\"#含UnixBench的测试,不带网页分享\" class=\"headerlink\" title=\"含UnixBench的测试,不带网页分享\"></a>含UnixBench的测试,不带网页分享</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">bash linuxtest.sh a</span><br></pre></td></tr></table></figure>\n<h4 id=\"含UnixBench的测试,带网页分享\"><a href=\"#含UnixBench的测试,带网页分享\" class=\"headerlink\" title=\"含UnixBench的测试,带网页分享\"></a>含UnixBench的测试,带网页分享</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">bash linuxtest.sh as</span><br></pre></td></tr></table></figure>\n\n<h2 id=\"服务器性能测试\"><a href=\"#服务器性能测试\" class=\"headerlink\" title=\"服务器性能测试\"></a>服务器性能测试</h2><h3 id=\"LemonBench\"><a href=\"#LemonBench\" class=\"headerlink\" title=\"LemonBench\"></a>LemonBench</h3><p>LemonBench工具(别名LBench、柠檬Bench),是一款针对Linux服务器设计的服务器性能测试工具。通过综合测试,可以快速评估服务器的综合性能,为使用者提供服务器硬件配置信息。</p>\n<h4 id=\"使用方法-2\"><a href=\"#使用方法-2\" class=\"headerlink\" title=\"使用方法\"></a>使用方法</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">curl -fsSL https://ilemonrain.com/download/shell/LemonBench.sh | bash</span><br></pre></td></tr></table></figure>\n\n<p>或者</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -qO- https://ilemonrain.com/download/shell/LemonBench.sh | bash</span><br></pre></td></tr></table></figure>\n<h3 id=\"UnixBench测试脚本\"><a href=\"#UnixBench测试脚本\" class=\"headerlink\" title=\"UnixBench测试脚本\"></a>UnixBench测试脚本</h3><p>UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能。Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。</p>\n<h4 id=\"使用方法-3\"><a href=\"#使用方法-3\" class=\"headerlink\" title=\"使用方法\"></a>使用方法</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.sh</span><br><span class=\"line\">chmod +x unixbench.sh</span><br><span class=\"line\">./unixbench.sh</span><br></pre></td></tr></table></figure>\n<p>带宽测试</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget https://raw.github.com/sivel/speedtest-cli/master/speedtest.py</span><br><span class=\"line\">chmod a+rx speedtest.py</span><br><span class=\"line\">python speedtest.py</span><br></pre></td></tr></table></figure>\n<h3 id=\"内存检测脚本\"><a href=\"#内存检测脚本\" class=\"headerlink\" title=\"内存检测脚本\"></a>内存检测脚本</h3><p>检测VPS真实可分配内存的小工具,适用于检测VPS超售情况。本程序检测的可分配内存指的是用户使用时最大能占用的内存量。</p>\n<h4 id=\"使用方法-4\"><a href=\"#使用方法-4\" class=\"headerlink\" title=\"使用方法\"></a>使用方法</h4><h4 id=\"CentOS-RHEL\"><a href=\"#CentOS-RHEL\" class=\"headerlink\" title=\"CentOS / RHEL\"></a>CentOS / RHEL</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum install wget -y</span><br><span class=\"line\">yum groupinstall "Development Tools" -y</span><br><span class=\"line\">wget https://raw.githubusercontent.com/FunctionClub/Memtester/master/memtester.cpp</span><br><span class=\"line\">gcc -l stdc++ memtester.cpp</span><br><span class=\"line\">./a.out</span><br></pre></td></tr></table></figure>\n<p>Ubuntu / Debian</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">apt-get update</span><br><span class=\"line\">apt-get install wget build-essential -y</span><br><span class=\"line\">wget https://raw.githubusercontent.com/FunctionClub/Memtester/master/memtester.cpp</span><br><span class=\"line\">gcc -l stdc++ memtester.cpp</span><br><span class=\"line\">./a.out</span><br></pre></td></tr></table></figure>\n\n<h2 id=\"网络测试\"><a href=\"#网络测试\" class=\"headerlink\" title=\"网络测试\"></a>网络测试</h2><h3 id=\"Ping值测试\"><a href=\"#Ping值测试\" class=\"headerlink\" title=\"Ping值测试\"></a>Ping值测试</h3><p>uPing——一个24小时监测VPS延迟的工具</p>\n<h4 id=\"依赖安装\"><a href=\"#依赖安装\" class=\"headerlink\" title=\"依赖安装\"></a>依赖安装</h4><p>Debian / Ubuntu</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">apt-get update</span><br><span class=\"line\">apt-get install python wget screen -y</span><br></pre></td></tr></table></figure>\n\n<p>CentOS / RHEL</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum install screen wget python -y</span><br></pre></td></tr></table></figure>\n\n<h4 id=\"使用方法-5\"><a href=\"#使用方法-5\" class=\"headerlink\" title=\"使用方法\"></a>使用方法</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">screen -S uping</span><br><span class=\"line\">wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/uPing/master/uping.py</span><br><span class=\"line\">python uping.py</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"speedtest-cli\"><a href=\"#speedtest-cli\" class=\"headerlink\" title=\"speedtest-cli\"></a>speedtest-cli</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget https://raw.github.com/sivel/speedtest-cli/master/speedtest.py </span><br><span class=\"line\">chmod a+rx speedtest.py </span><br><span class=\"line\">sudo mv speedtest.py /usr/<span class=\"built_in\">local</span>/bin/speedtest-cli </span><br><span class=\"line\">sudo chown root:root /usr/<span class=\"built_in\">local</span>/bin/speedtest-cli</span><br><span class=\"line\">speedtest-cli</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"路由测试脚本\"><a href=\"#路由测试脚本\" class=\"headerlink\" title=\"路由测试脚本\"></a>路由测试脚本</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget https://raw.githubusercontent.com/nanqinlang-script/testrace/master/testrace.sh </span><br><span class=\"line\">bash testrace.sh</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"回程路由测试\"><a href=\"#回程路由测试\" class=\"headerlink\" title=\"回程路由测试\"></a>回程路由测试</h3><p>从你的 Linux(X86/ARM)/Mac/BSD 系统环境下发起 traceroute 请求,附带链路可视化,兼容性更好,支持JSON 格式。<br>下载</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget https://cdn.ipip.net/17mon/besttrace4linux.zip</span><br></pre></td></tr></table></figure>\n\n<p>解压</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">unzip besttrace4linux.zip</span><br></pre></td></tr></table></figure>\n\n<p>使用</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./besttrace -q 1 这里是目标IP</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"回程ping\"><a href=\"#回程ping\" class=\"headerlink\" title=\"回程ping\"></a>回程ping</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget https://raw.githubusercontent.com/helloxz/mping/master/mping.sh</span><br><span class=\"line\">bash mping.sh</span><br></pre></td></tr></table></figure>\n\n","slug":"笔记/2019-08-30.服务器测试脚本集合","comments":true,"categories":[],"tags":[{"name":"服务器","slug":"服务器","permalink":"https://www.zhiiker.com/tags/%E6%9C%8D%E5%8A%A1%E5%99%A8/"},{"name":"测试","slug":"测试","permalink":"https://www.zhiiker.com/tags/%E6%B5%8B%E8%AF%95/"}]},{"title":"卮言日出,和以天倪丨《寓言》章一","date":"2019-06-18T08:49:12.000Z","path":"2019/06/18/拾摘/2019-06-18.卮言日出,和以天倪丨《寓言》章一/","text":"《庄子》解,每章一读。 文: 寓言十九,重言十七,卮言日出,和以天倪。 寓言十九,藉外论之。亲父不为其子媒。亲父誉之,不若非其父者也;非吾罪也,人之罪也。与己同则应,不与己同则反;同于己为是之,异于己为非之。 重言十七,所以已言也,是为耆艾。年先矣,而无经纬本末以期年耆者,是非先也。人而无以先人,无人道也;人而无人道,是之谓陈人。 卮言日出,和以天倪,因以曼衍,所以穷年。不言则齐,齐与言不齐,言与齐不齐也,故曰言无言。言无言,终身言,未尝言;终身不言,未尝不言。有自也而可,有自也而不可;有自也而然,有自也而不然。恶乎然?然于然。恶乎不然?不然于不然。恶乎可?可于可。恶乎不可?不可于不可。物固有所然,物固有所可,无物不然,无物不可。非卮言日出,和以天倪,孰得其久!万物皆种也,以不同形相禅,始卒若环,莫得其伦,是谓天均。天均者天倪也。 解: 本章讲“三言”。 做庄子言论研究的人,几乎没人能绕开对“三言”——寓言、重言、卮言——的讨论。在读《庄子》文本时,我们经常会犯一个错误:凡举文本的内容,都无疑是庄子认可的。其浅其薄已不待多言。人们大多认为,三言是庄子自己及其认可的独特言说方式和言说内容。这没有问题。但庄子怎么个认可法,却论之寥寥。 “寓言十九”“重言十七”,有人认为“十九”“十七”分别指寓言、重言篇幅占全书的十分之九,十分之七。(如张默生、陈鼓应等)也有人认为,“十九”“十七”指寓言、重言有十分之九、十分之七的可信度。(如郭象等)宜从后者。(以事实来说,前者也没问题,但就文意言,过于枯乏。)回过头看这两言,它们当真为庄子认可,还是另有品评? 寓言的言说方式是“藉外论之”。这里的“外”指客观的他者,为什么要有这么个“外”呢?我们知道,《庄子》对“成心”大有批判,认为人的很多不当行为都源出成心。成心可指既定的偏见,也可指某些知识。“亲父不为亲子谋”,父子之间有个“亲”,“亲”就是成心的表现。就这个问题看,要想避免某种成心,就需要外人的言论。但这样就没问题了吗?“与己同则应,不与己同则反;同于己为是之,异于己为非之。”人还是会根据自己的认知、倾向的价值去应,去反,去是,去非。所以“寓言十九”,还有一分不信。那这么看来,庄子对寓言的认可保有限度。 重言是耆艾长者的“已言”。这里出现了一个称为“先”的词。“年先矣,而无经纬本末以期年耆者,是非先也。”“先”首先不是指年龄的长老,而是说有伴随年纪增长的“精微本末”的见识。进一步说,重言也可叫威言,其中包含见识和威信,与年纪没有必然联系。浏览古代经典,我们发现,中国自古就有引经据典的习惯;往后还形成了先圣先贤的叙事方式。重言正于此有所揭示。人们把先圣先贤的“经纬本末”之论称为“人道”,视不得“人道”的人为陈腐之人。按照《庄子》文本的看法,时移势迁,先圣先贤的言论反而是陈腐的。此处用“陈人”正反讽重言的不可信,其不可信的成分比寓言还多两分。 寓言和重言皆是《庄子》文本书写的重要方式。但既然二者都不完全可信,为什么还要用它们呢?这里有必要考虑到权宜的方法。二者虽都不完善,但仍可藉以论之。此外,我们也要意识到深意:不管是寓言还是重言,其背后的言论并不是目的,而只是路途。 再来看看卮言。卮言又称为道言,是契合道的言。“卮言日出,和以天倪,因以曼衍,所以穷年。”卮言生生,合乎天的分际,散漫流行,悠游终生。不管卮言有个致命的漏洞。既是卮言,那也是“言”,是言就有分别,有分别就不齐,不齐就不与天地合德;但“卮言”之“卮”又合于天地之德。对于这样的背反,文本也说“不言则齐,齐与言不齐,言与齐不齐也,故曰言无言。”卮言又叫“言无言”。“言无言,终身言,未尝言;终身不言,未尝不言。”卮言就是这样的“两面派”,又言又不言,由不言由言。什么意思呢? “物固有所然,物固有所可,无物不然,无物不可。”物有所然,有所可;有所不然,有所不可。这是基于人的视角对物然不然、可不可的定分。“言无言,终身言,未尝言;终身不言,未尝不言。”这是说,物自在自然自可,没有想说什么,但它确实在着、然着、可着,这些又好像是它告诉了我们。追究起来,物的自在自然自可又与天地合德,无有始终,不可测度,那卮言也是这样的。所以才说“始卒若环,莫得其伦”。 作者:千里飘蓬链接:https://www.jianshu.com/p/25269f60945b来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p><strong>《庄子》解,每章一读。</strong></p>\n<p><strong>文:</strong></p>\n<blockquote>\n<p>寓言十九,重言十七,卮言日出,和以天倪。</p>\n<p>寓言十九,藉外论之。亲父不为其子媒。亲父誉之,不若非其父者也;非吾罪也,人之罪也。与己同则应,不与己同则反;同于己为是之,异于己为非之。</p>\n<p>重言十七,所以已言也,是为耆艾。年先矣,而无经纬本末以期年耆者,是非先也。人而无以先人,无人道也;人而无人道,是之谓陈人。</p>\n<p>卮言日出,和以天倪,因以曼衍,所以穷年。不言则齐,齐与言不齐,言与齐不齐也,故曰言无言。言无言,终身言,未尝言;终身不言,未尝不言。有自也而可,有自也而不可;有自也而然,有自也而不然。恶乎然?然于然。恶乎不然?不然于不然。恶乎可?可于可。恶乎不可?不可于不可。物固有所然,物固有所可,无物不然,无物不可。非卮言日出,和以天倪,孰得其久!万物皆种也,以不同形相禅,始卒若环,莫得其伦,是谓天均。天均者天倪也。</p>\n</blockquote>\n<span id=\"more\"></span>\n\n<p><strong>解:</strong></p>\n<p>本章讲“三言”。</p>\n<p>做庄子言论研究的人,几乎没人能绕开对“三言”——寓言、重言、卮言——的讨论。在读《庄子》文本时,我们经常会犯一个错误:凡举文本的内容,都无疑是庄子认可的。其浅其薄已不待多言。人们大多认为,三言是庄子自己及其认可的独特言说方式和言说内容。这没有问题。但庄子怎么个认可法,却论之寥寥。</p>\n<p>“寓言十九”“重言十七”,有人认为“十九”“十七”分别指寓言、重言篇幅占全书的十分之九,十分之七。(如张默生、陈鼓应等)也有人认为,“十九”“十七”指寓言、重言有十分之九、十分之七的可信度。(如郭象等)宜从后者。(以事实来说,前者也没问题,但就文意言,过于枯乏。)回过头看这两言,它们当真为庄子认可,还是另有品评?</p>\n<p>寓言的言说方式是“藉外论之”。这里的“外”指客观的他者,为什么要有这么个“外”呢?我们知道,《庄子》对“成心”大有批判,认为人的很多不当行为都源出成心。成心可指既定的偏见,也可指某些知识。“亲父不为亲子谋”,父子之间有个“亲”,“亲”就是成心的表现。就这个问题看,要想避免某种成心,就需要外人的言论。但这样就没问题了吗?“与己同则应,不与己同则反;同于己为是之,异于己为非之。”人还是会根据自己的认知、倾向的价值去应,去反,去是,去非。所以“寓言十九”,还有一分不信。那这么看来,庄子对寓言的认可保有限度。</p>\n<p>重言是耆艾长者的“已言”。这里出现了一个称为“先”的词。“年先矣,而无经纬本末以期年耆者,是非先也。”“先”首先不是指年龄的长老,而是说有伴随年纪增长的“精微本末”的见识。进一步说,重言也可叫威言,其中包含见识和威信,与年纪没有必然联系。浏览古代经典,我们发现,中国自古就有引经据典的习惯;往后还形成了先圣先贤的叙事方式。重言正于此有所揭示。人们把先圣先贤的“经纬本末”之论称为“人道”,视不得“人道”的人为陈腐之人。按照《庄子》文本的看法,时移势迁,先圣先贤的言论反而是陈腐的。此处用“陈人”正反讽重言的不可信,其不可信的成分比寓言还多两分。</p>\n<p>寓言和重言皆是《庄子》文本书写的重要方式。但既然二者都不完全可信,为什么还要用它们呢?这里有必要考虑到权宜的方法。二者虽都不完善,但仍可藉以论之。此外,我们也要意识到深意:不管是寓言还是重言,其背后的言论并不是目的,而只是路途。</p>\n<p>再来看看卮言。卮言又称为道言,是契合道的言。“卮言日出,和以天倪,因以曼衍,所以穷年。”卮言生生,合乎天的分际,散漫流行,悠游终生。不管卮言有个致命的漏洞。既是卮言,那也是“言”,是言就有分别,有分别就不齐,不齐就不与天地合德;但“卮言”之“卮”又合于天地之德。对于这样的背反,文本也说“不言则齐,齐与言不齐,言与齐不齐也,故曰言无言。”卮言又叫“言无言”。“言无言,终身言,未尝言;终身不言,未尝不言。”卮言就是这样的“两面派”,又言又不言,由不言由言。什么意思呢?</p>\n<p>“物固有所然,物固有所可,无物不然,无物不可。”物有所然,有所可;有所不然,有所不可。这是基于人的视角对物然不然、可不可的定分。“言无言,终身言,未尝言;终身不言,未尝不言。”这是说,物自在自然自可,没有想说什么,但它确实在着、然着、可着,这些又好像是它告诉了我们。追究起来,物的自在自然自可又与天地合德,无有始终,不可测度,那卮言也是这样的。所以才说“始卒若环,莫得其伦”。</p>\n<blockquote>\n</blockquote>\n<p>作者:千里飘蓬<br>链接:<a href=\"https://www.jianshu.com/p/25269f60945b\">https://www.jianshu.com/p/25269f60945b</a><br>来源:简书<br>简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。</p>\n","slug":"拾摘/2019-06-18.卮言日出,和以天倪丨《寓言》章一","comments":true,"categories":[{"name":"拾摘","slug":"拾摘","permalink":"https://www.zhiiker.com/categories/%E6%8B%BE%E6%91%98/"}],"tags":[{"name":"卮客","slug":"卮客","permalink":"https://www.zhiiker.com/tags/%E5%8D%AE%E5%AE%A2/"},{"name":"名字","slug":"名字","permalink":"https://www.zhiiker.com/tags/%E5%90%8D%E5%AD%97/"},{"name":"卮言","slug":"卮言","permalink":"https://www.zhiiker.com/tags/%E5%8D%AE%E8%A8%80/"}]},{"title":"卮客杂俎的含义","date":"2019-04-22T06:50:53.000Z","path":"2019/04/22/建站日志/2019-04-22.卮客杂俎的含义/","text":"杂俎是杂录、笔记的意思,比如著名的《酉阳杂俎》","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>杂俎是杂录、笔记的意思,比如著名的《酉阳杂俎》</p>\n","slug":"建站日志/2019-04-22.卮客杂俎的含义","comments":true,"categories":[],"tags":[{"name":"卮客","slug":"卮客","permalink":"https://www.zhiiker.com/tags/%E5%8D%AE%E5%AE%A2/"},{"name":"名字","slug":"名字","permalink":"https://www.zhiiker.com/tags/%E5%90%8D%E5%AD%97/"}]},{"title":"Press.one 授权","date":"2019-02-16T16:00:00.000Z","path":"2019/02/17/建站日志/Press.one 授权/","text":"签名:https://press.one/p/v?s=15dbacda8a8b94f5be1f611ba0a50660d3ab6df144262848cedc27eb3172b49020f4d0295bf9d5366c4f0cf8180b01843eae89643db2ed2f3859850187f4f9521&h=85bde49df11fecbe8b122d71d5fcf1ae00cce9cc3e2f1aa8172bcd5ba680885c&a=77e5df6b17f82eb846d93aa1854063f3dbfb1b79&f=P1&v=3","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>签名:<br><a href=\"https://press.one/p/v?s=15dbacda8a8b94f5be1f611ba0a50660d3ab6df144262848cedc27eb3172b49020f4d0295bf9d5366c4f0cf8180b01843eae89643db2ed2f3859850187f4f9521&h=85bde49df11fecbe8b122d71d5fcf1ae00cce9cc3e2f1aa8172bcd5ba680885c&a=77e5df6b17f82eb846d93aa1854063f3dbfb1b79&f=P1&v=3\">https://press.one/p/v?s=15dbacda8a8b94f5be1f611ba0a50660d3ab6df144262848cedc27eb3172b49020f4d0295bf9d5366c4f0cf8180b01843eae89643db2ed2f3859850187f4f9521&h=85bde49df11fecbe8b122d71d5fcf1ae00cce9cc3e2f1aa8172bcd5ba680885c&a=77e5df6b17f82eb846d93aa1854063f3dbfb1b79&f=P1&v=3</a></p>\n","slug":"建站日志/Press.one 授权","comments":true,"categories":[{"name":"萱苏小筑","slug":"萱苏小筑","permalink":"https://www.zhiiker.com/categories/%E8%90%B1%E8%8B%8F%E5%B0%8F%E7%AD%91/"}],"tags":[{"name":"建站日志","slug":"建站日志","permalink":"https://www.zhiiker.com/tags/%E5%BB%BA%E7%AB%99%E6%97%A5%E5%BF%97/"}]},{"title":"博客修复","date":"2018-12-30T13:38:31.000Z","path":"2018/12/30/建站日志/2018-12-30.博客修复/","text":"实在不能忍受博客出现的一些问题了,于是开始修复。 侧边栏社交栏中的github图标不显示参考github的图标不显示不显示的的原因是原文件中GitHub图标的地址已经失效了,如图解决方案:在这里下载一个github图标放到/yelee/source/img/下并命名为GitHub.png,然后在/yelee/source/css/_partial/customise/social-icon.styl的img-logo中加入GitHub black 75,接着删掉46-50行的即可。 1234.GitHub background url(//cdn.bootcss.com/logos/0.2.0/github-octocat.svg) no-repeat white background-size 90% background-position 50% 100% 社交栏部分被挡住这是宽度被限制了main.styl中修改 1234567891011.switch-area{ position: relative; width: 100%; overflow: hidden; min-height: 300px; font-size: (14/16)rem; .switch-wrap{ transition: transform .3s ease-in; position: relative; }} 评论系统从Disqus到ValineYelee主题默认支持三款评论系统:Disqus,多说和友言评论。而目前多说和友言已经不能用了,Disqus也需要科学上网才可以加载使用。参考suixin的方案将评论系统从Disqus换成了基于Leancloud的valine。样式不错,非常干净,可以后台管理评论、反垃圾。 Github关联之前换过主题之后失效了参考关联 GitHub, 让 Hexo 支持查看文章更新历史开个repo把hexo/sources/_posts放到Github上。修改./themes/yelee/layout/_partial/post/nav.ejs文件,相应位置修改并添加如下代码: 1234567891011<!-- 不设置 backup: false 则默认显示 --><% if (post.backup != false){ %> <p> <span>更新历史:</span><i class="fa fa-github"></i> <!-- 不同功能替换前面超链接即可,文件名不变 --> <!-- 文件名生成: <%= post.date.format("YYYY-MM-DD") %>.<%= post.slug %> --> <a href="https://github.com/wmwwmv/BlogBackup/blame/master/_posts/<%= post.slug %>.md" title="顺序查看文章各部分修改记录" target = "_blank">Blame</a>, <a href="https://github.com/wmwwmv/BlogBackup/commits/master/_posts/<%= post.slug %>.md" title="查看文章有关更新记录" target = "_blank">History</a><span class="raw">文本模式:</span><i class="fa fa-file-text-o"></i> <a href="https://raw.githubusercontent.com/wmwwmv/BlogBackup/master/_posts/<%= post.slug %>.md" title="查看 & 下载文章 Markdown 原始文本" target = "_blank"> .md Raw</a></p><% } %>","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>实在不能忍受博客出现的一些问题了,于是开始修复。</p>\n<span id=\"more\"></span>\n<h2 id=\"侧边栏社交栏中的github图标不显示\"><a href=\"#侧边栏社交栏中的github图标不显示\" class=\"headerlink\" title=\"侧边栏社交栏中的github图标不显示\"></a>侧边栏社交栏中的github图标不显示</h2><p>参考<a href=\"https://github.com/MOxFIVE/yelee/issues/27\">github的图标不显示</a><br>不显示的的原因是原文件中GitHub图标的地址已经失效了,如图<br><img src=\"https://images.liangs.me/bitcron/Diary/2018/_image/ab545381d6ee0c017c29acc485d84b70_006tNc79ly1fvn0lg3z4oj30ya04qdgr.jpg\"><br>解决方案:在<a href=\"http://www.iconfont.cn/\">这里</a>下载一个github图标放到/yelee/source/img/下并命名为GitHub.png,然后在/yelee/source/css/_partial/customise/social-icon.styl的img-logo中加入GitHub black 75,接着删掉46-50行的即可。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">.GitHub</span><br><span class=\"line\"> background url(//cdn.bootcss.com/logos/0.2.0/github-octocat.svg) no-repeat white</span><br><span class=\"line\"> background-size 90%</span><br><span class=\"line\"> background-position 50% 100%</span><br></pre></td></tr></table></figure>\n<h2 id=\"社交栏部分被挡住\"><a href=\"#社交栏部分被挡住\" class=\"headerlink\" title=\"社交栏部分被挡住\"></a>社交栏部分被挡住</h2><p>这是宽度被限制了<br><code>main.styl</code>中修改</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">.switch-area{</span><br><span class=\"line\"> position: relative;</span><br><span class=\"line\"> width: 100%;</span><br><span class=\"line\"> overflow: hidden;</span><br><span class=\"line\"> min-height: 300px;</span><br><span class=\"line\"> font-size: (14/16)rem;</span><br><span class=\"line\"> .switch-wrap{</span><br><span class=\"line\"> transition: transform .3s ease-in;</span><br><span class=\"line\"> position: relative;</span><br><span class=\"line\"> }</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n<h2 id=\"评论系统从Disqus到Valine\"><a href=\"#评论系统从Disqus到Valine\" class=\"headerlink\" title=\"评论系统从Disqus到Valine\"></a>评论系统从Disqus到Valine</h2><p>Yelee主题默认支持三款评论系统:Disqus,多说和友言评论。而目前多说和友言已经不能用了,Disqus也需要科学上网才可以加载使用。参考<a href=\"https://suixinblog.cn/2018/09/valine.html\">suixin的方案</a>将评论系统从Disqus换成了基于Leancloud的valine。样式不错,非常干净,可以后台管理评论、反垃圾。</p>\n<h2 id=\"Github关联\"><a href=\"#Github关联\" class=\"headerlink\" title=\"Github关联\"></a>Github关联</h2><p>之前换过主题之后失效了<br>参考<a href=\"http://moxfive.xyz/2016/01/10/hexo-post-version-control/\">关联 GitHub, 让 Hexo 支持查看文章更新历史</a><br>开个repo把<code>hexo/sources/_posts</code>放到Github上。修改<code>./themes/yelee/layout/_partial/post/nav.ejs</code>文件,相应位置修改并添加如下代码:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><!-- 不设置 backup: false 则默认显示 --></span><br><span class=\"line\"><% if (post.backup != false){ %></span><br><span class=\"line\"> <p></span><br><span class=\"line\"> <span>更新历史:</span><i class="fa fa-github"></i></span><br><span class=\"line\"> <!-- 不同功能替换前面超链接即可,文件名不变 --></span><br><span class=\"line\"> <!-- 文件名生成: <%= post.date.format("YYYY-MM-DD") %>.<%= post.slug %> --></span><br><span class=\"line\"> <a href="https://github.com/wmwwmv/BlogBackup/blame/master/_posts/<%= post.slug %>.md" title="顺序查看文章各部分修改记录" target = "_blank">Blame</a>,</span><br><span class=\"line\"> <a href="https://github.com/wmwwmv/BlogBackup/commits/master/_posts/<%= post.slug %>.md" title="查看文章有关更新记录" target = "_blank">History</a><span class="raw">文本模式:</span><i class="fa fa-file-text-o"></i></span><br><span class=\"line\"> <a href="https://raw.githubusercontent.com/wmwwmv/BlogBackup/master/_posts/<%= post.slug %>.md" title="查看 & 下载文章 Markdown 原始文本" target = "_blank"> .md Raw</a></span><br><span class=\"line\"></p></span><br><span class=\"line\"><% } %></span><br></pre></td></tr></table></figure>","slug":"建站日志/2018-12-30.博客修复","comments":true,"categories":[],"tags":[{"name":"hexo","slug":"hexo","permalink":"https://www.zhiiker.com/tags/hexo/"},{"name":"blog","slug":"blog","permalink":"https://www.zhiiker.com/tags/blog/"}]},{"title":"Seafile安装与配置v3","date":"2018-12-13T13:10:26.000Z","path":"2018/12/13/笔记/2018-12-12.Seafile安装与配置v3/","text":"迁移了下seafile服务器,发现以前的那个教程过时了,现在重新开一个。用的是Ubuntu 16.04LTS,并且开通全部端口。为了管理方便安装宝塔面板,在这里可以配置防火墙。 安装命令 1wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh 创建程序目录seafile,建议放在root目录之外,防止因为权限产生的错误,给775权限,文件夹所有者root。 123sudo -imkdir cloud seafilechmod 775 seafile 从官网下载seafile安装包,专业版需要到seafile英文版网站登陆客户中心后获取。社区版下载地址https://www.seafile.com/en/download/专业版下载地址https://download.seafile.com/d/6e5297246c/?p=/proseafile-server-6.3.4 64bit版本下载 1wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz 下载后解压到seafile文件夹 1tar -xzf seafile-server_* 移动安装包 12mkdir installedmv seafile-server_* installed 解压后检查下目录结构 12345678910111213# tree . -L 2.├── installed│ └── seafile-server_*_x86-64.tar.gz└── seafile-server-* ├── reset-admin.sh ├── runtime ├── seafile ├── seafile.sh ├── seahub ├── seahub.sh ├── setup-seafile.sh └── upgrade 安装依赖包 MariaDB 或者 MySQL 服务器 (MariaDB 是 MySQL 的分支) python 2.7 (从 Seafile 5.1 开始,python 版本最低要求为2.7) python-setuptools python-imaging python-mysqldb python-ldap python-urllib3 python-memcache (或者 python-memcached) jre123456sudo apt-get updatesudo apt-get install pythonsudo apt-get install python2.7 libpython2.7 python-setuptools python-ldap python-urllib3 ffmpeg python-pip python-mysqldb python-memcache python-requestspip install Pillowpip install moviepy # used in movie file thumbnailssudo apt-get install openjdk-8-jre 安装数据库并设置数据库roor密码这里我使用面板创建命令行安装1sudo apt install mysql-client-core-5.7 再顺便安好pureftpd、phpMyAdmin、Memcached自己安装Memcached的话直接安装django-pylibmc模块,并且最好将缓存设置大于128M1pip install django-pylibmc 配置也要相应的修改,按照官方的文档的配置在启动seahub调试时会报错123456CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1.11211', }} 配置MySQL数据库seafile由3个核心部件组成。 我们需要为这个给定的组件创建一个数据库。这一步可以使用官方提供的脚本自动进行。 ccnet服务器 seafile服务器 seahub现在正在为列出的给定数据库创建mysql数据库,帐户和设置权限。 (这只是一个例子,您可以在数据库名称上创建自己的设计)。 1234seafile部件 | 数据库名称 | 帐户 ccnet服务器 | ccnet-db | seafile seafile服务器 | seafile-db | seafile seahub | seahub-db | seafile 以root用户身份登录到mysql 1mysql -u root -p 输入之前安装设置的Mysql密码,然后在mysql shell中发出这些命令: 1234567create database`ccnet-db`character set =utf8; create database`seafile-db`character set =utf8; create database`seahub-db`character set =utf8; create user 'seafile'@'localhost' identified by 'seafile';grant all privileges on `ccnet-db`.* to `seafile`@localhost;grant all privileges on `seafile-db`.* to `seafile`@localhost;grant all privileges on `seahub-db`.* to `seafile`@localhost; 安装12cd seafile-server-pro-*./setup-seafile-mysql.sh 下面配置按你需求填写第一项是主机名称第二项是主机的IP或者域名第三项是seafile存储数据存放位置这里填的是/cloud第四项是端口默认即可第五项是数据库,如果没有按照上面创建数据库,这里可以选1自动配置,然后输入数据库的配置信息 这样一般就会成功了,没有成功的话可能是没有创建目录的权限用root权限运行下就可以。如果用宝塔面板,成功之后需要手动放行8000和8082端口。到了这一步就可以启动了在 seafile-server-pro-*目录下,运行如下命令: 启动Seafile:1./seafile.sh start 启动Seahub(默认运行在8000端口上)1./seahub.sh start 一些配置更改端口参考官方文档: 6.2.x 及其之前版本 关闭 Seafile 服务器12./seahub.sh stop # 停止 Seafile 进程./seafile.sh stop # 停止 Seahub 更改*/conf/ccnet.conf文件中SERVICE\\_URL 的值(假设你的 ip 或者域名时192.168.1.100), 如下 (从 5.0 版本开始,可以直接在管理员界面中设置。注意,如果同时在 Web 界面和配置文件中设置了这个值,以 Web 界面的配置为准。):1`SERVICE_URL = http://192.168.1.100:8001 ` 重启 Seafile 服务器12./seafile.sh start # 启动 Seafile 服务./seahub.sh start 8001 # 启动 Seahub 网站 (运行在8001端口上) 6.3.x 及其以上版本 6.3.0 及其之后的版本,我们弃用了 ./seahub.sh start <port> 的方式使seahub进程监听在其他端口。但是,您可以通过修改 conf/gunicorn.conf 中的端口设置来指定seahub启动端口。 关闭 Seafile 服务器12./seahub.sh stop # 停止 Seafile 进程./seafile.sh stop # 停止 Seahub 更改*/conf/ccnet.conf文件中SERVICE\\_URL 的值(假设你的 ip 或者域名时192.168.1.100), 如下 (从 5.0 版本开始,可以直接在管理员界面中设置。注意,如果同时在 Web 界面和配置文件中设置了这个值,以 Web 界面的配置为准。):1`SERVICE_URL = http://192.168.1.100:8001 ` 修改conf/gunicorn.conf12# default localhost:8000bind = "0.0.0.0:8001" 重启 Seafile 服务器12./seafile.sh start # 启动 Seafile 服务./seahub.sh start # 启动 Seahub 网站 (运行在8001端口上) 邮件提醒按照官方文档配置memcached官方文档如果使用django-pylibmc组件修改相应段落为1'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache' 多存储后端官方文档webdav修改conf文件夹下的seafdav.conf123456[WEBDAV]enabled = trueport = 8080fastcgi = truehost = 0.0.0.0share_name = / 开启 Office/PDF 文件在线预览官方文档Nginx如果需要使用Nginx的话参见官方文档这里是我的配置1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586server{ listen 80; listen 443 ssl http2; server_name cloud.liangs.me; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/cloud.liangs.me; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #HTTP_TO_HTTPS_START if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } #HTTP_TO_HTTPS_END ssl_certificate /etc/letsencrypt/live/cloud.liangs.me/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/cloud.liangs.me/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; #SSL-END #ERROR-PAGE-START 错误页配置,可以注释、删除或修改 error_page 404 /404.html; error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 include enable-php-00.conf; #PHP-INFO-END #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效 include /www/server/panel/vhost/rewrite/cloud.liangs.me.conf; #REWRITE-END proxy_set_header X-Forwarded-For $remote_addr; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; server_tokens off; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Forwarded-Proto https; proxy_read_timeout 1200s; # used for view/edit office file via Office Online Server client_max_body_size 0; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; client_max_body_size 0; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 36000s; proxy_read_timeout 36000s; proxy_send_timeout 36000s; send_timeout 36000s; } location /media { root /root/seafile-pro-server-6.2.9/seahub; } #禁止访问的文件或目录 location ~ ^/(\\.user.ini|\\.htaccess|\\.git|\\.svn|\\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ \\.well-known{ allow all; } access_log /www/wwwlogs/cloud.liangs.me.log; error_log /www/wwwlogs/cloud.liangs.me.error.log;} 开机启动参考官方文档这里是我的三个配置文件 seafile.service123456789101112131415[Unit]Description=Seafile hubAfter=network.target seafile.service[Service]# change start to start-fastcgi if you want to run fastcgiExecStart=/seafile/seafile-server-latest/seahub.sh startExecStop=/seafile/seafile-server-latest/seahub.sh stopUser=rootGroup=rootType=oneshotRemainAfterExit=yes[Install]WantedBy=multi-user.target seahub.service123456789101112131415[Unit]Description=Seafile hubAfter=network.target seafile.service[Service]# change start to start-fastcgi if you want to run fastcgiExecStart=/seafile/seafile-server-latest/seahub.sh startExecStop=/seafile/seafile-server-latest/seahub.sh stopUser=rootGroup=rootType=oneshotRemainAfterExit=yes[Install]WantedBy=multi-user.target seafile-client.service123456789101112131415161718[Unit]Description=Seafile client# Uncomment the next line you are running seafile client on the same computer as server# After=seafile.service# Or the next one in other case# After=network.target[Service]Type=oneshotExecStart=/usr/bin/seaf-cli startExecStop=/usr/bin/seaf-cli stopRemainAfterExit=yesUser=rootGroup=root[Install]WantedBy=multi-user.target Ubuntu 14.10 以及更旧的版本 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#!/bin/bash### BEGIN INIT INFO# Provides: seafile-server# Required-Start: $remote_fs $syslog mysql# Required-Stop: $remote_fs $syslog# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Seafile server# Description: Start Seafile server### END INIT INFO# Change the value of "user" to your linux user nameuser=root# Change the value of "seafile_dir" to your path of seafile installation# usually the home directory of $userseafile_dir=/seafilescript_path=${seafile_dir}/seafile-server-latestseafile_init_log=${seafile_dir}/logs/seafile.init.logseahub_init_log=${seafile_dir}/logs/seahub.init.log# Change the value of fastcgi to true if fastcgi is to be usedfastcgi=false# Set the port of fastcgi, default is 8000. Change it if you need different.fastcgi_port=80## Write a polite log message with date and time#echo -e "\\n \\n About to perform $1 for seafile at `date -Iseconds` \\n " >> ${seafile_init_log}echo -e "\\n \\n About to perform $1 for seahub at `date -Iseconds` \\n " >> ${seahub_init_log}case "$1" in start) sudo -u ${user} ${script_path}/seafile.sh ${1} >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh ${1}-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh ${1} >> ${seahub_init_log} fi ;; restart) sudo -u ${user} ${script_path}/seafile.sh ${1} >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh ${1}-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh ${1} >> ${seahub_init_log} fi ;; stop) sudo -u ${user} ${script_path}/seahub.sh ${1} >> ${seahub_init_log} sudo -u ${user} ${script_path}/seafile.sh ${1} >> ${seafile_init_log} ;; *) echo "Usage: /etc/init.d/seafile-server {start|stop|restart}" exit 1 ;;esac 注意: 如果你正在使用本地 mysql 服务,请将 # Required-Start: $remote\\_fs $syslog 替换为 # Required-Start: $remote\\_fs $syslog mysql.确保 seafile-server 脚本可执行 1sudo chmod +x /etc/init.d/seafile-server 添加 seafile-server 到 rc.d 中 1sudo update-rc.d seafile-server defaults 错误调试出现No module named memcache错误安装缺少的组件 1pip install django-pylibmc 或者换成django-pylibmc,并且如上文配置","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>迁移了下seafile服务器,发现以前的那个教程过时了,现在重新开一个。<br>用的是Ubuntu 16.04LTS,并且开通全部端口。<br>为了管理方便安装宝塔面板,在这里可以配置防火墙。</p>\n<span id=\"more\"></span>\n<p>安装命令</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh</span><br></pre></td></tr></table></figure>\n<p>创建程序目录seafile,建议放在root目录之外,防止因为权限产生的错误,给775权限,文件夹所有者root。</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo -i</span><br><span class=\"line\">mkdir cloud seafile</span><br><span class=\"line\">chmod 775 seafile</span><br></pre></td></tr></table></figure>\n<p>从官网下载seafile安装包,专业版需要到seafile英文版网站登陆客户中心后获取。<br>社区版下载地址<code>https://www.seafile.com/en/download/</code><br>专业版下载地址<code>https://download.seafile.com/d/6e5297246c/?p=/pro</code><br>seafile-server-6.3.4 64bit版本下载</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget https://download.seadrive.org/seafile-server_6.3.4_x86-64.tar.gz</span><br></pre></td></tr></table></figure>\n<p>下载后解压到seafile文件夹</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">tar -xzf seafile-server_*</span><br></pre></td></tr></table></figure>\n<p>移动安装包</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mkdir installed</span><br><span class=\"line\">mv seafile-server_* installed</span><br></pre></td></tr></table></figure>\n<p>解压后检查下目录结构</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"># tree . -L 2</span><br><span class=\"line\">.</span><br><span class=\"line\">├── installed</span><br><span class=\"line\">│ └── seafile-server_*_x86-64.tar.gz</span><br><span class=\"line\">└── seafile-server-*</span><br><span class=\"line\"> ├── reset-admin.sh</span><br><span class=\"line\"> ├── runtime</span><br><span class=\"line\"> ├── seafile</span><br><span class=\"line\"> ├── seafile.sh</span><br><span class=\"line\"> ├── seahub</span><br><span class=\"line\"> ├── seahub.sh</span><br><span class=\"line\"> ├── setup-seafile.sh</span><br><span class=\"line\"> └── upgrade</span><br></pre></td></tr></table></figure>\n<h2 id=\"安装依赖包\"><a href=\"#安装依赖包\" class=\"headerlink\" title=\"安装依赖包\"></a>安装依赖包</h2><ul>\n<li>MariaDB 或者 MySQL 服务器 (MariaDB 是 MySQL 的分支)</li>\n<li>python 2.7 (从 Seafile 5.1 开始,python 版本最低要求为2.7)</li>\n<li>python-setuptools</li>\n<li>python-imaging</li>\n<li>python-mysqldb</li>\n<li>python-ldap</li>\n<li>python-urllib3</li>\n<li>python-memcache (或者 python-memcached)</li>\n<li>jre<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get update</span><br><span class=\"line\">sudo apt-get install python</span><br><span class=\"line\">sudo apt-get install python2.7 libpython2.7 python-setuptools python-ldap python-urllib3 ffmpeg python-pip python-mysqldb python-memcache python-requests</span><br><span class=\"line\">pip install Pillow</span><br><span class=\"line\">pip install moviepy <span class=\"comment\"># used in movie file thumbnails</span></span><br><span class=\"line\">sudo apt-get install openjdk-8-jre</span><br></pre></td></tr></table></figure>\n安装数据库并设置数据库roor密码这里我使用面板创建<br>命令行安装<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt install mysql-client-core-5.7</span><br></pre></td></tr></table></figure>\n再顺便安好pureftpd、phpMyAdmin、Memcached<br>自己安装Memcached的话直接安装django-pylibmc模块,并且最好将缓存设置大于128M<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pip install django-pylibmc</span><br></pre></td></tr></table></figure>\n配置也要相应的修改,按照官方的文档的配置在启动seahub调试时会报错<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">CACHES = {</span><br><span class=\"line\"> 'default': {</span><br><span class=\"line\"> 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',</span><br><span class=\"line\"> 'LOCATION': '127.0.0.1.11211',</span><br><span class=\"line\"> }</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n<h3 id=\"配置MySQL数据库\"><a href=\"#配置MySQL数据库\" class=\"headerlink\" title=\"配置MySQL数据库\"></a>配置MySQL数据库</h3>seafile由3个核心部件组成。 我们需要为这个给定的组件创建一个数据库。这一步可以使用官方提供的脚本自动进行。</li>\n<li>ccnet服务器</li>\n<li>seafile服务器</li>\n<li>seahub<br>现在正在为列出的给定数据库创建mysql数据库,帐户和设置权限。 (这只是一个例子,您可以在数据库名称上创建自己的设计)。</li>\n</ul>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">seafile部件 | 数据库名称 | 帐户 </span><br><span class=\"line\">ccnet服务器 | ccnet-db | seafile </span><br><span class=\"line\">seafile服务器 | seafile-db | seafile </span><br><span class=\"line\">seahub | seahub-db | seafile </span><br></pre></td></tr></table></figure>\n<p>以root用户身份登录到mysql</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mysql -u root -p</span><br></pre></td></tr></table></figure>\n<p>输入之前安装设置的Mysql密码,然后在mysql shell中发出这些命令:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">create database`ccnet-db`character set =utf8; </span><br><span class=\"line\">create database`seafile-db`character set =utf8; </span><br><span class=\"line\">create database`seahub-db`character set =utf8; </span><br><span class=\"line\">create user 'seafile'@'localhost' identified by 'seafile';</span><br><span class=\"line\">grant all privileges on `ccnet-db`.* to `seafile`@localhost;</span><br><span class=\"line\">grant all privileges on `seafile-db`.* to `seafile`@localhost;</span><br><span class=\"line\">grant all privileges on `seahub-db`.* to `seafile`@localhost;</span><br></pre></td></tr></table></figure>\n<h2 id=\"安装\"><a href=\"#安装\" class=\"headerlink\" title=\"安装\"></a>安装</h2><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd seafile-server-pro-*</span><br><span class=\"line\">./setup-seafile-mysql.sh</span><br></pre></td></tr></table></figure>\n<p>下面配置按你需求填写<br>第一项是主机名称<br>第二项是主机的IP或者域名<br>第三项是seafile存储数据存放位置这里填的是<code>/cloud</code><br>第四项是端口默认即可<br>第五项是数据库,如果没有按照上面创建数据库,这里可以选1自动配置,然后输入数据库的配置信息</p>\n<p>这样一般就会成功了,没有成功的话可能是没有创建目录的权限用root权限运行下就可以。<br>如果用宝塔面板,成功之后需要手动放行8000和8082端口。<br>到了这一步就可以启动了<br>在 seafile-server-pro-*目录下,运行如下命令:</p>\n<ul>\n<li>启动Seafile:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./seafile.sh start</span><br></pre></td></tr></table></figure></li>\n<li>启动Seahub(默认运行在8000端口上)<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./seahub.sh start</span><br></pre></td></tr></table></figure>\n<h2 id=\"一些配置\"><a href=\"#一些配置\" class=\"headerlink\" title=\"一些配置\"></a>一些配置</h2><h3 id=\"更改端口\"><a href=\"#更改端口\" class=\"headerlink\" title=\"更改端口\"></a>更改端口</h3>参考官方文档:</li>\n</ul>\n<p><strong>6.2.x 及其之前版本</strong></p>\n<ul>\n<li>关闭 Seafile 服务器<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./seahub.sh stop # 停止 Seafile 进程</span><br><span class=\"line\">./seafile.sh stop # 停止 Seahub</span><br></pre></td></tr></table></figure></li>\n<li>更改<code>*/conf/ccnet.conf</code>文件中<code>SERVICE\\_URL</code> 的值(假设你的 ip 或者域名时<code>192.168.1.100</code>), 如下 (从 5.0 版本开始,可以直接在管理员界面中设置。注意,如果同时在 Web 界面和配置文件中设置了这个值,以 Web 界面的配置为准。):<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">`SERVICE_URL = http://192.168.1.100:8001 `</span><br></pre></td></tr></table></figure></li>\n<li>重启 Seafile 服务器<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./seafile.sh start # 启动 Seafile 服务</span><br><span class=\"line\">./seahub.sh start 8001 # 启动 Seahub 网站 (运行在8001端口上)</span><br></pre></td></tr></table></figure></li>\n</ul>\n<p><strong>6.3.x 及其以上版本</strong></p>\n<p>6.3.0 及其之后的版本,我们弃用了 <code>./seahub.sh start <port></code> 的方式使seahub进程监听在其他端口。但是,您可以通过修改 <code>conf/gunicorn.conf</code> 中的端口设置来指定seahub启动端口。</p>\n<ul>\n<li>关闭 Seafile 服务器<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./seahub.sh stop # 停止 Seafile 进程</span><br><span class=\"line\">./seafile.sh stop # 停止 Seahub</span><br></pre></td></tr></table></figure></li>\n<li>更改<code>*/conf/ccnet.conf</code>文件中<code>SERVICE\\_URL</code> 的值(假设你的 ip 或者域名时<code>192.168.1.100</code>), 如下 (从 5.0 版本开始,可以直接在管理员界面中设置。注意,如果同时在 Web 界面和配置文件中设置了这个值,以 Web 界面的配置为准。):<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">`SERVICE_URL = http://192.168.1.100:8001 `</span><br></pre></td></tr></table></figure></li>\n<li><strong>修改conf/gunicorn.conf</strong><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"># default localhost:8000</span><br><span class=\"line\">bind = "0.0.0.0:8001"</span><br></pre></td></tr></table></figure></li>\n<li>重启 Seafile 服务器<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./seafile.sh start # 启动 Seafile 服务</span><br><span class=\"line\">./seahub.sh start # 启动 Seahub 网站 (运行在8001端口上)</span><br></pre></td></tr></table></figure>\n<h3 id=\"邮件提醒\"><a href=\"#邮件提醒\" class=\"headerlink\" title=\"邮件提醒\"></a>邮件提醒</h3>按照<a href=\"https://manual-cn.seafile.com/config/sending_email.html\">官方文档</a>配置<h3 id=\"memcached\"><a href=\"#memcached\" class=\"headerlink\" title=\"memcached\"></a>memcached</h3><a href=\"https://manual-cn.seafile.com/deploy/add_memcached.html\">官方文档</a><br>如果使用<a href=\"https://pypi.org/project/django-pylibmc/\">django-pylibmc</a>组件修改相应段落为<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache'</span><br></pre></td></tr></table></figure>\n<h3 id=\"多存储后端\"><a href=\"#多存储后端\" class=\"headerlink\" title=\"多存储后端\"></a>多存储后端</h3><a href=\"https://manual-cn.seafile.com/deploy_pro/multiple_storage_backends.html\">官方文档</a><h3 id=\"webdav\"><a href=\"#webdav\" class=\"headerlink\" title=\"webdav\"></a>webdav</h3>修改conf文件夹下的seafdav.conf<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[WEBDAV]</span><br><span class=\"line\">enabled = true</span><br><span class=\"line\">port = 8080</span><br><span class=\"line\">fastcgi = true</span><br><span class=\"line\">host = 0.0.0.0</span><br><span class=\"line\">share_name = /</span><br></pre></td></tr></table></figure>\n<h3 id=\"开启-Office-PDF-文件在线预览\"><a href=\"#开启-Office-PDF-文件在线预览\" class=\"headerlink\" title=\"开启 Office/PDF 文件在线预览\"></a>开启 Office/PDF 文件在线预览</h3><a href=\"https://manual-cn.seafile.com/deploy_pro/office_documents_preview.html\">官方文档</a><h3 id=\"Nginx\"><a href=\"#Nginx\" class=\"headerlink\" title=\"Nginx\"></a>Nginx</h3>如果需要使用Nginx的话<br>参见<a href=\"https://manual-cn.seafile.com/deploy/deploy_with_nginx.html\">官方文档</a><br>这里是我的配置<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br><span class=\"line\">76</span><br><span class=\"line\">77</span><br><span class=\"line\">78</span><br><span class=\"line\">79</span><br><span class=\"line\">80</span><br><span class=\"line\">81</span><br><span class=\"line\">82</span><br><span class=\"line\">83</span><br><span class=\"line\">84</span><br><span class=\"line\">85</span><br><span class=\"line\">86</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">server</span><br><span class=\"line\">{</span><br><span class=\"line\"> listen 80;</span><br><span class=\"line\">\tlisten 443 ssl http2;</span><br><span class=\"line\"> server_name cloud.liangs.me;</span><br><span class=\"line\"> index index.php index.html index.htm default.php default.htm default.html;</span><br><span class=\"line\"> root /www/wwwroot/cloud.liangs.me;</span><br><span class=\"line\"> </span><br><span class=\"line\"> #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则</span><br><span class=\"line\"> #error_page 404/404.html;</span><br><span class=\"line\"> #HTTP_TO_HTTPS_START</span><br><span class=\"line\"> if ($server_port !~ 443){</span><br><span class=\"line\"> rewrite ^(/.*)$ https://$host$1 permanent;</span><br><span class=\"line\"> }</span><br><span class=\"line\"> #HTTP_TO_HTTPS_END</span><br><span class=\"line\"> ssl_certificate /etc/letsencrypt/live/cloud.liangs.me/fullchain.pem;</span><br><span class=\"line\"> ssl_certificate_key /etc/letsencrypt/live/cloud.liangs.me/privkey.pem;</span><br><span class=\"line\"> ssl_protocols TLSv1 TLSv1.1 TLSv1.2;</span><br><span class=\"line\"> ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;</span><br><span class=\"line\"> ssl_prefer_server_ciphers on;</span><br><span class=\"line\"> ssl_session_cache shared:SSL:10m;</span><br><span class=\"line\"> ssl_session_timeout 10m;</span><br><span class=\"line\"> error_page 497 https://$host$request_uri;</span><br><span class=\"line\"></span><br><span class=\"line\"> #SSL-END</span><br><span class=\"line\"> </span><br><span class=\"line\"> #ERROR-PAGE-START 错误页配置,可以注释、删除或修改</span><br><span class=\"line\"> error_page 404 /404.html;</span><br><span class=\"line\"> error_page 502 /502.html;</span><br><span class=\"line\"> #ERROR-PAGE-END</span><br><span class=\"line\"> </span><br><span class=\"line\"> #PHP-INFO-START PHP引用配置,可以注释或修改</span><br><span class=\"line\"> include enable-php-00.conf;</span><br><span class=\"line\"> #PHP-INFO-END</span><br><span class=\"line\"> </span><br><span class=\"line\"> #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效</span><br><span class=\"line\"> include /www/server/panel/vhost/rewrite/cloud.liangs.me.conf;</span><br><span class=\"line\"> #REWRITE-END</span><br><span class=\"line\"> </span><br><span class=\"line\"> proxy_set_header X-Forwarded-For $remote_addr;</span><br><span class=\"line\"> add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";</span><br><span class=\"line\"> server_tokens off;</span><br><span class=\"line\"> </span><br><span class=\"line\"> location / {</span><br><span class=\"line\"> proxy_pass http://127.0.0.1:8000;</span><br><span class=\"line\"> proxy_set_header Host $host;</span><br><span class=\"line\"> proxy_set_header X-Real-IP $remote_addr;</span><br><span class=\"line\"> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class=\"line\"> proxy_set_header X-Forwarded-Host $server_name;</span><br><span class=\"line\"> proxy_set_header X-Forwarded-Proto https;</span><br><span class=\"line\"> proxy_read_timeout 1200s;</span><br><span class=\"line\"></span><br><span class=\"line\">\t# used for view/edit office file via Office Online Server</span><br><span class=\"line\"> client_max_body_size 0;</span><br><span class=\"line\"> }</span><br><span class=\"line\"></span><br><span class=\"line\"> location /seafhttp {</span><br><span class=\"line\"> rewrite ^/seafhttp(.*)$ $1 break;</span><br><span class=\"line\"> proxy_pass http://127.0.0.1:8082;</span><br><span class=\"line\"> client_max_body_size 0;</span><br><span class=\"line\"> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class=\"line\"> proxy_connect_timeout 36000s;</span><br><span class=\"line\"> proxy_read_timeout 36000s;</span><br><span class=\"line\"> proxy_send_timeout 36000s;</span><br><span class=\"line\"> send_timeout 36000s;</span><br><span class=\"line\"> }</span><br><span class=\"line\"> </span><br><span class=\"line\"> location /media {</span><br><span class=\"line\"> root /root/seafile-pro-server-6.2.9/seahub;</span><br><span class=\"line\"> }</span><br><span class=\"line\"> </span><br><span class=\"line\"> </span><br><span class=\"line\"> #禁止访问的文件或目录</span><br><span class=\"line\"> location ~ ^/(\\.user.ini|\\.htaccess|\\.git|\\.svn|\\.project|LICENSE|README.md)</span><br><span class=\"line\"> {</span><br><span class=\"line\"> return 404;</span><br><span class=\"line\"> }</span><br><span class=\"line\"> </span><br><span class=\"line\"> #一键申请SSL证书验证目录相关设置</span><br><span class=\"line\"> location ~ \\.well-known{</span><br><span class=\"line\"> allow all;</span><br><span class=\"line\"> }</span><br><span class=\"line\"> </span><br><span class=\"line\"> access_log /www/wwwlogs/cloud.liangs.me.log;</span><br><span class=\"line\"> error_log /www/wwwlogs/cloud.liangs.me.error.log;</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n<h3 id=\"开机启动\"><a href=\"#开机启动\" class=\"headerlink\" title=\"开机启动\"></a>开机启动</h3>参考<a href=\"https://manual-cn.seafile.com/deploy/start_seafile_at_system_bootup.html\">官方文档</a><br>这里是我的三个配置文件</li>\n<li>seafile.service<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[Unit]</span><br><span class=\"line\">Description=Seafile hub</span><br><span class=\"line\">After=network.target seafile.service</span><br><span class=\"line\"></span><br><span class=\"line\">[Service]</span><br><span class=\"line\"><span class=\"comment\"># change start to start-fastcgi if you want to run fastcgi</span></span><br><span class=\"line\">ExecStart=/seafile/seafile-server-latest/seahub.sh start</span><br><span class=\"line\">ExecStop=/seafile/seafile-server-latest/seahub.sh stop</span><br><span class=\"line\">User=root</span><br><span class=\"line\">Group=root</span><br><span class=\"line\">Type=oneshot</span><br><span class=\"line\">RemainAfterExit=yes</span><br><span class=\"line\"></span><br><span class=\"line\">[Install]</span><br><span class=\"line\">WantedBy=multi-user.target</span><br></pre></td></tr></table></figure></li>\n<li>seahub.service<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[Unit]</span><br><span class=\"line\">Description=Seafile hub</span><br><span class=\"line\">After=network.target seafile.service</span><br><span class=\"line\"></span><br><span class=\"line\">[Service]</span><br><span class=\"line\"><span class=\"comment\"># change start to start-fastcgi if you want to run fastcgi</span></span><br><span class=\"line\">ExecStart=/seafile/seafile-server-latest/seahub.sh start</span><br><span class=\"line\">ExecStop=/seafile/seafile-server-latest/seahub.sh stop</span><br><span class=\"line\">User=root</span><br><span class=\"line\">Group=root</span><br><span class=\"line\">Type=oneshot</span><br><span class=\"line\">RemainAfterExit=yes</span><br><span class=\"line\"></span><br><span class=\"line\">[Install]</span><br><span class=\"line\">WantedBy=multi-user.target</span><br></pre></td></tr></table></figure></li>\n<li>seafile-client.service<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[Unit]</span><br><span class=\"line\">Description=Seafile client</span><br><span class=\"line\"><span class=\"comment\"># Uncomment the next line you are running seafile client on the same computer as server</span></span><br><span class=\"line\"><span class=\"comment\"># After=seafile.service</span></span><br><span class=\"line\"><span class=\"comment\"># Or the next one in other case</span></span><br><span class=\"line\"><span class=\"comment\"># After=network.target</span></span><br><span class=\"line\"></span><br><span class=\"line\">[Service]</span><br><span class=\"line\">Type=oneshot</span><br><span class=\"line\">ExecStart=/usr/bin/seaf-cli start</span><br><span class=\"line\">ExecStop=/usr/bin/seaf-cli stop</span><br><span class=\"line\">RemainAfterExit=yes</span><br><span class=\"line\">User=root</span><br><span class=\"line\">Group=root</span><br><span class=\"line\"></span><br><span class=\"line\">[Install]</span><br><span class=\"line\">WantedBy=multi-user.target</span><br><span class=\"line\"></span><br></pre></td></tr></table></figure></li>\n</ul>\n<p><strong>Ubuntu 14.10 以及更旧的版本</strong></p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/bin/bash</span></span><br><span class=\"line\"><span class=\"comment\">### BEGIN INIT INFO</span></span><br><span class=\"line\"><span class=\"comment\"># Provides: seafile-server</span></span><br><span class=\"line\"><span class=\"comment\"># Required-Start: $remote_fs $syslog mysql</span></span><br><span class=\"line\"><span class=\"comment\"># Required-Stop: $remote_fs $syslog</span></span><br><span class=\"line\"><span class=\"comment\"># Default-Start: 2 3 4 5</span></span><br><span class=\"line\"><span class=\"comment\"># Default-Stop: 0 1 6</span></span><br><span class=\"line\"><span class=\"comment\"># Short-Description: Seafile server</span></span><br><span class=\"line\"><span class=\"comment\"># Description: Start Seafile server</span></span><br><span class=\"line\"><span class=\"comment\">### END INIT INFO</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Change the value of "user" to your linux user name</span></span><br><span class=\"line\">user=root</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Change the value of "seafile_dir" to your path of seafile installation</span></span><br><span class=\"line\"><span class=\"comment\"># usually the home directory of $user</span></span><br><span class=\"line\">seafile_dir=/seafile</span><br><span class=\"line\">script_path=<span class=\"variable\">${seafile_dir}</span>/seafile-server-latest</span><br><span class=\"line\">seafile_init_log=<span class=\"variable\">${seafile_dir}</span>/logs/seafile.init.log</span><br><span class=\"line\">seahub_init_log=<span class=\"variable\">${seafile_dir}</span>/logs/seahub.init.log</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Change the value of fastcgi to true if fastcgi is to be used</span></span><br><span class=\"line\">fastcgi=<span class=\"literal\">false</span></span><br><span class=\"line\"><span class=\"comment\"># Set the port of fastcgi, default is 8000. Change it if you need different.</span></span><br><span class=\"line\">fastcgi_port=80</span><br><span class=\"line\"><span class=\"comment\">#</span></span><br><span class=\"line\"><span class=\"comment\"># Write a polite log message with date and time</span></span><br><span class=\"line\"><span class=\"comment\">#</span></span><br><span class=\"line\"><span class=\"built_in\">echo</span> -e <span class=\"string\">"\\n \\n About to perform <span class=\"variable\">$1</span> for seafile at `date -Iseconds` \\n "</span> >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"><span class=\"built_in\">echo</span> -e <span class=\"string\">"\\n \\n About to perform <span class=\"variable\">$1</span> for seahub at `date -Iseconds` \\n "</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"string\">"<span class=\"variable\">$1</span>"</span> <span class=\"keyword\">in</span></span><br><span class=\"line\"> start)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh <span class=\"variable\">${1}</span> >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> [ <span class=\"variable\">$fastcgi</span> = <span class=\"literal\">true</span> ];</span><br><span class=\"line\"> <span class=\"keyword\">then</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh <span class=\"variable\">${1}</span>-fastcgi <span class=\"variable\">${fastcgi_port}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh <span class=\"variable\">${1}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> restart)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh <span class=\"variable\">${1}</span> >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> [ <span class=\"variable\">$fastcgi</span> = <span class=\"literal\">true</span> ];</span><br><span class=\"line\"> <span class=\"keyword\">then</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh <span class=\"variable\">${1}</span>-fastcgi <span class=\"variable\">${fastcgi_port}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh <span class=\"variable\">${1}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> stop)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh <span class=\"variable\">${1}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh <span class=\"variable\">${1}</span> >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> *)</span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"Usage: /etc/init.d/seafile-server {start|stop|restart}"</span></span><br><span class=\"line\"> <span class=\"built_in\">exit</span> 1</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"><span class=\"keyword\">esac</span></span><br></pre></td></tr></table></figure>\n<p><strong>注意:</strong> 如果你正在使用本地 mysql 服务,请将 <code># Required-Start: $remote\\_fs $syslog</code> 替换为 <code># Required-Start: $remote\\_fs $syslog mysql</code>.<br>确保 seafile-server 脚本可执行</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo chmod +x /etc/init.d/seafile-server</span><br></pre></td></tr></table></figure>\n<p>添加 seafile-server 到 rc.d 中</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo update-rc.d seafile-server defaults</span><br></pre></td></tr></table></figure>\n<h2 id=\"错误调试\"><a href=\"#错误调试\" class=\"headerlink\" title=\"错误调试\"></a>错误调试</h2><p>出现No module named memcache错误<br>安装缺少的组件</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pip install django-pylibmc</span><br></pre></td></tr></table></figure>\n<p>或者换成django-pylibmc,并且如上文配置</p>\n","slug":"笔记/2018-12-12.Seafile安装与配置v3","comments":true,"categories":[],"tags":[{"name":"seafile","slug":"seafile","permalink":"https://www.zhiiker.com/tags/seafile/"}]},{"title":"Hexo博客升级小记","date":"2018-12-08T16:00:00.000Z","path":"2018/12/09/笔记/2018-12-09.Hexo博客升级小记/","text":"序手里多了些服务器,想整理一下手里各个网站的部署,发现以前写的文章有些问题,需要重新写,于是就有了这篇文章。这里采用Dropbox进行同步,最好是使用境外的服务器,如果使用境内的服务器需要配置代理。这个方案主要有以下几个优点: 自己拥有数据 可以实现多终端编辑,Dropbox无缝同步 在服务器端使用了Hexo-admin插件,可以在网页端编辑文章并实时预览 服务器是一个自动部署中心,一旦监测到修改,会自动提交到Github 使用GitPages进行托管,拥有动态+静态博客的优点 安装前准备 1.首先登陆vps需要执行如下命令更新各种依赖2.为防止机器没有安装epel,先安装epel(必须安装) 升级 CentOS 内核 yum -y update 安装 Git yum install git-core导入key1rpm --import http://download-i2.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 安装epel,分别是32位和64位12rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmrpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 然后安装yum-priorities1yum install yum-priorities -y 安装好后用命令看下,如果成功的话输出内容里有epel字样1yum repolist 3.安装Node.js 12sudo yum install nodejs sudo yum install npm --enablerepo=epel 安装Dropbox网上给出的教程试了好几次都有问题,自己搜到了正确的姿势参考说明:nstall Dropbox In An Entirely Text-Based Linux Environment注意:这里最好使用非Root的用户运行安装代码如下: 123456cd32位wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86"64位wget https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86_64-30.4.22.tar.gztar -xvzf dropbox-lnx.x86_64-30.4.22.tar.gz 然后执行,登录Dropbox的账号。 1~/.dropbox-dist/dropboxd 首次打开需要你验证账户。选择有右键复制上面一段,浏览器打开,登录你的Dropbox账号,授权这台机器参与你的网盘同步,关联成功会出现如下画面,Ctrl+C一下 注意:进入连接后,一定要等刷新完毕后再点,并且不能结束终端,等到关联成功的消息。 Dropbox使用切换到dropbox.py脚本所在位置查看dropbox 工作状态./dropbox.py status开始同步 ./dropbox.py start停止同步 ./dropbox.py stop帮助 ./dropbox.py exclude help 选择性同步文件夹例如你不需要同步Dropbox/books/目录,进入Dropbox目录cd ~/Dropbox,运行exclude来排除books目录: 1./dropboxy.py exclude add books #当前目录最好在Dropbox 更多不需要同步的目录: 1./dropboxy.py exclude add book photos Public Documents #排除Dropbox目录下books, photos, Public, Documents等目录 这里讲/public等生成的静态文件文件夹去掉就行了 安装hexo1.在刚才上面的结束之后 ls一下看看 12[root@vultr ~]# lsDropbox dropbox.tar.gz 2.切进去Dropbox目录 1cd Dropbox 3.接下来创建博客的目录 12mkdir hexocd hexo 4.开始正式安装hexo 123456#网上教程里的很多命令在256或者128内存下全部是坑,因为内存关系安装不了npm install hexo-cli -g #初始化hexohexo init hexo generate #可缩写为:hexo ghexo server #可缩写为:hexo s 这时端口4000被打开了,我们能过浏览器打开地址http://<服务器ip>:4000/访问测试一下看能不能看到首页,如果看不到或者结果不是OK,请排查错误。 添加防火墙例外 1-A INPUT -p tcp -m state --state NEW -m tcp --dport 4000 -j ACCEPT 或直接关闭防火墙 1234567#临时生效,重启后复原开启: service iptables start关闭: service iptables stop #永久性生效,重启后不会复原开启: chkconfig iptables on关闭: chkconfig iptables off 这个时候可以去你的Dropbox网盘里看看有没有hexo目录,并且目录结构如下 下载Dropbox官方提供的一个用于管理的 Python 脚本 1wget https://linux.dropbox.com/packages/dropbox.py 所有命令可以点击这里查看然后增加这个脚本的权限1chmod +x ./dropbox.py 加入到自启动1./dropbox.py autostart y 然而实际测试发现这个在重启后 root 用户登录后没有自动启动,需要手动登录到为Dropbox创建的用户下进行启动,启动代码为 ./dropbox.py start 可以用 ps -e命令来查看当前进程看看有没有成功启动内容同步发布 1.安装和配置incron检测文件变化。incrond 可以监控指定目录的文件指定变化(删除修改打开移动等等),并且运行指定命令。使用corn可以设置定时任务,另外incron不支持子文件夹的监测,需要将子文件夹也写入配置文件中。 1yum install incron 启动并加入自启 12service incrond startchkconfig incrond on 修改默认编辑器为 Vi (貌似默认编辑器本来是一个 GUI,我们远程状态下没有 GUI) 1echo 'editor = vi' >> /etc/incron.conf 这个时候使用以下命令来进行编辑 1incrontab -e 打开后添加: 123456/home/ubuntu/Dropbox/hexo/source/_posts/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/source/_posts/笔记/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/source/_posts/结绳纪/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/source/_posts/拾摘/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/source/_posts/萱苏小筑/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/themes/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh 会使用到的一些命令 123service incrond stopservice incrond startservice incrond status 最后写 runhexo 这个脚本 首先我们可以用以下指令新建空文本 touch runhexo.sh 注意要在 root 目录下创建。目录要对应你在 incrontab 的里写的目录。 然后打开文件进行编辑 vim /root/runhexo.sh 代码如下:123456#!/usr/bin/env bashexec 200<$0flock -n 200 || exit 1sleep 10cd /root/Dropbox/hexo && hexo clean && hexo g && hexo dcd /root/Dropbox/hexo/source/ && git add -A && git commit -m "auto commit" && git push 上面push到github还需要配置SSH等步骤,见后面的描述。以上代码会在特定时间内只允许一个脚本实例运行。运行后会清理 Hexo 原有的静态文件, 生成新的静态文件以供读取,并且会自动传到相应的Github上的repo备份。好了到这里就应该可以了。然后可以 debug 测试一下,并且可以关机给服务器搞个 snapshot 快照进行备份,以防以后出错 (重启后记得手动运行一下 Dropbox)。 使用hexo-hey插件为博客添加后台编辑hexo-hey项目地址:https://github.com/nihgwu/hexo-hey安装: 1npm install hexo-hey --save 配置_config.yml文件添加如下几行 1234567# Adminadmin: name: hexo password: hey secret: hey hexo expire: 60*1 # cors: http://localhost:3000 运行 1hexo serve 这个时候你的博客网站的管理后台就可以远程的在你 VPS 的 IP地址的4000端口访问到。比如 <vps的ip>:4000/admin。 配置Github/Coding多账号管理SSH Key 单个网站通过Https链接,避免22端口关闭错误。测试https端口连通性1ssh -T -p 443 git@ssh.github.com 添加ssh配置文件1vim ~/.ssh/config 写入内容123Host gh.neting.ccHostname ssh.gh.neting.ccPort 443 多网站多账号SSH Key配置 生成Github和Coidng的SSH Key12ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C “wmwwmv@gmail.com”ssh-keygen -t rsa -f ~/.ssh/id_rsa_coding -C "wmwwmv@163.com” 检查key是否生成1ls ~/.ssh 添加private key12ssh-add ~/.ssh/id_rsa_githubssh-add ~/.ssh/id_rsa_coding 如果执行ssh-add时提示”Could not open a connection to your authentication agent”,可以先执行命令:1ssh-agent bash 然后再运行ssh-add命令。可以通过 ssh-add -l 来确私钥列表1ssh-add -l 可以通过 ssh-add -D 来清空私钥列表1ssh-add -D 修改配置文件1234567891011121314#GithubHost gh.neting.ccHostName ssh.gh.neting.ccPort 443User wmwwmv@gmail.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_github#codingHost git.coding.netHostname git-ssh.coding.netUser wmwwmv@163.comPort 443PreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_coding 上传public key 到 GitHub/CoidngGitHub设置过程如下:登录github,点击右上方的图标,点击“Settings” 选择SSH and GPG keys,点击New SSH key,在出现的界面中填写SSH key的名称,填一个你自己喜欢的名称即可,然后将上面拷贝的~/.ssh/id_isa_github.pub文件内容粘帖到 key 一栏,再点击Add SSH key按钮就可以了。添加过程github会提示你输入一次你的github密码 ,确认后即添加完毕。 测试123456#测试githubssh -T git@github.com#测试Codingssh -T git@git.coding.net# 测试gitlabssh -T git@gitlab.example.com Hexo中_config.yml配置 123456deploy: type: git repo: github: git@github.com:wmwwmv/wmwwmv.github.io.git coding: git@git.coding.net:shichao/xiaozhu.git branch: master 利用supervisor让hexo-server服务常驻后台在supervisord.conf这个文件末尾加上 12[include]files = /etc/supervisor/*.conf 新建hexo-server.conf文件写脚本 12345678[program:hexo-server]command = hexo sdirectory = /root/Dropbox/hexouser=rootautostart = trueautorestart = truestdout_logfile = /var/log/supervisor/hexo.logstderr_logfile = /var/log/supervisor/hexo_err.log supervisor的一些命令 12345678910111213141516#启动、管理配置中设置的进程。supervisord #停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。supervisorctl stop programxxx #启动某个进程supervisorctl start programxxx#重启某个进程supervisorctl restart programxxx #重启所有属于名为groupworker这个分组的进程(start,restart同理)supervisorctl stop groupworker#停止全部进程,注:start、restart、stop都不会载入最新的配置文件。supervisorctl stop all#载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。supervisorctl reload#根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。supervisorctl update Git同步之前需要先做些准备工作:1cd /root/Dropbox/hexo/source/ && git add 404 readme.md about _drafts _posts about tags resources && git commit -m "auto commit" && git remote add origin git@github.com:wmwwmv/BlogBackup.git && git push -u origin master 使用MarkdownEditor的fileshook命令1cd /d E:\\Dropbox\\hexo && hexo clean && hexo g && hexo d && cd source/ && git add -A && git commit -m "auto commit" && git push 然后将第三方云设置成七牛的图床就更加完美了,不仅能拖入普遍自动生成链接,还可以自动发布。遇到的问题hexo deploy时重复输入用户名密码的问题每次部署执行hexo deploy都需要输入用户名问题原因及解决方案:最主要的原因可能是你没有采用git@github.com而是用https//github.com修改后重新提交部署: 注意 为了避免上传一次就重新将pulic .git文件夹就同步一次,所以在本地Dropbox上要选择性同步。 想利用分布式解析国内解析到coding 国外解析到github,结果国内访问github比coding还快。 迁移的时候只要保存好_config.yml package.json配置文件,source,themes文件夹,迁移的时候再重新安装环境将备份的文件覆盖后装上npm包就行。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"序\"><a href=\"#序\" class=\"headerlink\" title=\"序\"></a>序</h2><p>手里多了些服务器,想整理一下手里各个网站的部署,发现以前写的文章有些问题,需要重新写,于是就有了这篇文章。<br>这里采用Dropbox进行同步,最好是使用境外的服务器,如果使用境内的服务器需要配置代理。<br>这个方案主要有以下几个优点:</p>\n<ul>\n<li>自己拥有数据</li>\n<li>可以实现多终端编辑,Dropbox无缝同步</li>\n<li>在服务器端使用了Hexo-admin插件,可以在网页端编辑文章并实时预览</li>\n<li>服务器是一个自动部署中心,一旦监测到修改,会自动提交到Github</li>\n<li>使用GitPages进行托管,拥有动态+静态博客的优点<span id=\"more\"></span>\n<h2 id=\"安装前准备\"><a href=\"#安装前准备\" class=\"headerlink\" title=\"安装前准备\"></a>安装前准备</h2></li>\n</ul>\n<p>1.首先登陆vps需要执行如下命令更新各种依赖<br>2.为防止机器没有安装epel,先安装epel(必须安装)</p>\n<ul>\n<li>升级 CentOS 内核 <code>yum -y update</code></li>\n<li>安装 Git <code>yum install git-core</code><br>导入key<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">rpm --import http://download-i2.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6</span><br></pre></td></tr></table></figure>\n安装epel,分别是32位和64位<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm</span><br><span class=\"line\">rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm</span><br></pre></td></tr></table></figure>\n然后安装yum-priorities<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum install yum-priorities -y</span><br></pre></td></tr></table></figure>\n安装好后用命令看下,如果成功的话输出内容里有epel字样<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum repolist</span><br></pre></td></tr></table></figure></li>\n</ul>\n<p>3.安装Node.js</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo yum install nodejs\t</span><br><span class=\"line\">sudo yum install npm --enablerepo=epel</span><br></pre></td></tr></table></figure>\n<h2 id=\"安装Dropbox\"><a href=\"#安装Dropbox\" class=\"headerlink\" title=\"安装Dropbox\"></a>安装Dropbox</h2><p>网上给出的教程试了好几次都有问题,自己搜到了正确的姿势<br>参考说明:<a href=\"http://www.dropboxwiki.com/tips-and-tricks/install-dropbox-in-an-entirely-text-based-linux-environment\">nstall Dropbox In An Entirely Text-Based Linux Environment</a><br>注意:这里最好使用非Root的用户运行<br>安装代码如下:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd</span><br><span class=\"line\">32位</span><br><span class=\"line\">wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86"</span><br><span class=\"line\">64位</span><br><span class=\"line\">wget https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86_64-30.4.22.tar.gz</span><br><span class=\"line\">tar -xvzf dropbox-lnx.x86_64-30.4.22.tar.gz</span><br></pre></td></tr></table></figure>\n<p>然后执行,登录Dropbox的账号。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">~/.dropbox-dist/dropboxd</span><br></pre></td></tr></table></figure>\n<p>首次打开需要你验证账户。选择有右键复制上面一段,浏览器打开,登录你的Dropbox账号,授权这台机器参与你的网盘同步,关联成功会出现如下画面,Ctrl+C一下<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-16-21-05.jpg\"></p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-16-24-40.jpg\"></p>\n<p>注意:进入连接后,一定要等刷新完毕后再点,并且不能结束终端,等到关联成功的消息。</p>\n<h3 id=\"Dropbox使用\"><a href=\"#Dropbox使用\" class=\"headerlink\" title=\"Dropbox使用\"></a>Dropbox使用</h3><p>切换到dropbox.py脚本所在位置<br>查看dropbox 工作状态<code>./dropbox.py status</code><br>开始同步 <code>./dropbox.py start</code><br>停止同步 <code>./dropbox.py stop</code><br>帮助 <code>./dropbox.py exclude help</code></p>\n<h4 id=\"选择性同步文件夹\"><a href=\"#选择性同步文件夹\" class=\"headerlink\" title=\"选择性同步文件夹\"></a>选择性同步文件夹</h4><p>例如你不需要同步<code>Dropbox/books/</code>目录,进入Dropbox目录<code>cd ~/Dropbox</code>,运行exclude来排除books目录:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./dropboxy.py exclude add books #当前目录最好在Dropbox</span><br></pre></td></tr></table></figure>\n<p>更多不需要同步的目录:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./dropboxy.py exclude add book photos Public Documents #排除Dropbox目录下books, photos, Public, Documents等目录</span><br></pre></td></tr></table></figure>\n<p>这里讲/public等生成的静态文件文件夹去掉就行了</p>\n<h2 id=\"安装hexo\"><a href=\"#安装hexo\" class=\"headerlink\" title=\"安装hexo\"></a>安装hexo</h2><p>1.在刚才上面的结束之后 ls一下看看</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@vultr ~]# ls</span><br><span class=\"line\">Dropbox dropbox.tar.gz</span><br></pre></td></tr></table></figure>\n<p>2.切进去Dropbox目录</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd Dropbox</span><br></pre></td></tr></table></figure>\n<p>3.接下来创建博客的目录</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mkdir hexo</span><br><span class=\"line\">cd hexo</span><br></pre></td></tr></table></figure>\n<p>4.开始正式安装hexo</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">#网上教程里的很多命令在256或者128内存下全部是坑,因为内存关系安装不了</span><br><span class=\"line\">npm install hexo-cli -g </span><br><span class=\"line\">#初始化hexo</span><br><span class=\"line\">hexo init </span><br><span class=\"line\">hexo generate #可缩写为:hexo g</span><br><span class=\"line\">hexo server #可缩写为:hexo s</span><br></pre></td></tr></table></figure>\n<p>这时端口4000被打开了,我们能过浏览器打开地址<code>http://<服务器ip>:4000/</code>访问测试一下看能不能看到首页,如果看不到或者结果不是OK,请排查错误。</p>\n<p>添加防火墙例外</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">-A INPUT -p tcp -m state --state NEW -m tcp --dport 4000 -j ACCEPT</span><br></pre></td></tr></table></figure>\n\n<p>或直接关闭防火墙</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">#临时生效,重启后复原</span><br><span class=\"line\">开启: service iptables start</span><br><span class=\"line\">关闭: service iptables stop</span><br><span class=\"line\"> </span><br><span class=\"line\">#永久性生效,重启后不会复原</span><br><span class=\"line\">开启: chkconfig iptables on</span><br><span class=\"line\">关闭: chkconfig iptables off</span><br></pre></td></tr></table></figure>\n<p>这个时候可以去你的Dropbox网盘里看看有没有hexo目录,并且目录结构如下<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-16-29-41.jpg\"></p>\n<ul>\n<li>下载Dropbox官方提供的一个用于管理的 Python 脚本 <figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget https://linux.dropbox.com/packages/dropbox.py</span><br></pre></td></tr></table></figure>\n所有命令可以点击<a href=\"https://www.dropbox.com/help/desktop-web/linux-commands\">这里</a>查看<br>然后增加这个脚本的权限<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">chmod +x ./dropbox.py</span><br></pre></td></tr></table></figure>\n加入到自启动<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./dropbox.py autostart y</span><br></pre></td></tr></table></figure>\n然而实际测试发现这个在重启后 root 用户登录后没有自动启动,需要手动登录到为Dropbox创建的用户下进行启动,启动代码为<code> ./dropbox.py start</code> 可以用 <code>ps -e</code>命令来查看当前进程看看有没有成功启动<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-16-34-25.jpg\"><h2 id=\"内容同步发布\"><a href=\"#内容同步发布\" class=\"headerlink\" title=\"内容同步发布\"></a>内容同步发布</h2></li>\n</ul>\n<p>1.安装和配置incron检测文件变化。incrond 可以监控指定目录的文件指定变化(删除修改打开移动等等),并且运行指定命令。使用corn可以设置定时任务,另外incron不支持子文件夹的监测,需要将子文件夹也写入配置文件中。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum install incron</span><br></pre></td></tr></table></figure>\n<p>启动并加入自启</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">service incrond start</span><br><span class=\"line\">chkconfig incrond on</span><br></pre></td></tr></table></figure>\n<p>修改默认编辑器为 Vi (貌似默认编辑器本来是一个 GUI,我们远程状态下没有 GUI)</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">echo 'editor = vi' >> /etc/incron.conf</span><br></pre></td></tr></table></figure>\n<p>这个时候使用以下命令来进行编辑</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">incrontab -e</span><br></pre></td></tr></table></figure>\n<p>打开后添加:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/笔记/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/结绳纪/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/拾摘/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/萱苏小筑/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/themes/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br></pre></td></tr></table></figure>\n<p>会使用到的一些命令</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">service incrond stop</span><br><span class=\"line\">service incrond start</span><br><span class=\"line\">service incrond status</span><br></pre></td></tr></table></figure>\n<p>最后写 runhexo 这个脚本</p>\n<ul>\n<li>首先我们可以用以下指令新建空文本 <code>touch runhexo.sh</code> 注意要在 root 目录下创建。目录要对应你在 incrontab 的里写的目录。</li>\n<li>然后打开文件进行编辑 <code>vim /root/runhexo.sh</code> </li>\n<li>代码如下:<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/usr/bin/env bash</span></span><br><span class=\"line\"><span class=\"built_in\">exec</span> 200<<span class=\"variable\">$0</span></span><br><span class=\"line\">flock -n 200 || <span class=\"built_in\">exit</span> 1</span><br><span class=\"line\">sleep 10</span><br><span class=\"line\"><span class=\"built_in\">cd</span> /root/Dropbox/hexo && hexo clean && hexo g && hexo d</span><br><span class=\"line\"><span class=\"built_in\">cd</span> /root/Dropbox/hexo/<span class=\"built_in\">source</span>/ && git add -A && git commit -m <span class=\"string\">"auto commit"</span> && git push</span><br></pre></td></tr></table></figure>\n上面push到github还需要配置SSH等步骤,见后面的描述。<br>以上代码会在特定时间内只允许一个脚本实例运行。运行后会清理 Hexo 原有的静态文件, 生成新的静态文件以供读取,并且会自动传到相应的Github上的repo备份。<br>好了到这里就应该可以了。然后可以 debug 测试一下,并且可以关机给服务器搞个 snapshot 快照进行备份,以防以后出错 (重启后记得手动运行一下 Dropbox)。</li>\n</ul>\n<h2 id=\"使用hexo-hey插件为博客添加后台编辑\"><a href=\"#使用hexo-hey插件为博客添加后台编辑\" class=\"headerlink\" title=\"使用hexo-hey插件为博客添加后台编辑\"></a>使用hexo-hey插件为博客添加后台编辑</h2><p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-17-20-09.jpg\"><br>hexo-hey项目地址:<a href=\"https://github.com/nihgwu/hexo-hey\">https://github.com/nihgwu/hexo-hey</a><br>安装:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">npm install hexo-hey --save</span><br></pre></td></tr></table></figure>\n<p>配置<code>_config.yml</code>文件<br>添加如下几行</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"># Admin</span><br><span class=\"line\">admin:</span><br><span class=\"line\"> name: hexo</span><br><span class=\"line\"> password: hey</span><br><span class=\"line\"> secret: hey hexo</span><br><span class=\"line\"> expire: 60*1</span><br><span class=\"line\"> # cors: http://localhost:3000</span><br></pre></td></tr></table></figure>\n<p>运行</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">hexo serve</span><br></pre></td></tr></table></figure>\n<p>这个时候你的博客网站的管理后台就可以远程的在你 VPS 的 IP地址的4000端口访问到。比如 <code><vps的ip>:4000/admin</code>。</p>\n<h2 id=\"配置Github-Coding多账号管理SSH-Key\"><a href=\"#配置Github-Coding多账号管理SSH-Key\" class=\"headerlink\" title=\"配置Github/Coding多账号管理SSH Key\"></a>配置Github/Coding多账号管理SSH Key</h2><ol>\n<li>单个网站通过Https链接,避免22端口关闭错误。<br>测试https端口连通性<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh -T -p 443 git@ssh.github.com</span><br></pre></td></tr></table></figure>\n添加ssh配置文件<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim ~/.ssh/config</span><br></pre></td></tr></table></figure>\n写入内容<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">Host github.com</span><br><span class=\"line\">Hostname ssh.github.com</span><br><span class=\"line\">Port 443</span><br></pre></td></tr></table></figure></li>\n<li>多网站多账号SSH Key配置</li>\n</ol>\n<ul>\n<li>生成Github和Coidng的SSH Key<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C “wmwwmv@gmail.com”</span><br><span class=\"line\">ssh-keygen -t rsa -f ~/.ssh/id_rsa_coding -C "wmwwmv@163.com”</span><br></pre></td></tr></table></figure>\n检查key是否生成<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ls ~/.ssh</span><br></pre></td></tr></table></figure></li>\n<li>添加private key<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-add ~/.ssh/id_rsa_github</span><br><span class=\"line\">ssh-add ~/.ssh/id_rsa_coding</span><br></pre></td></tr></table></figure>\n如果执行ssh-add时提示”Could not open a connection to your authentication agent”,可以先执行命令:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-agent bash</span><br></pre></td></tr></table></figure>\n然后再运行ssh-add命令。<br>可以通过 ssh-add -l 来确私钥列表<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-add -l</span><br></pre></td></tr></table></figure>\n可以通过 ssh-add -D 来清空私钥列表<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-add -D</span><br></pre></td></tr></table></figure></li>\n<li>修改配置文件<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#Github</span></span><br><span class=\"line\">Host github.com</span><br><span class=\"line\">HostName ssh.github.com</span><br><span class=\"line\">Port 443</span><br><span class=\"line\">User wmwwmv@gmail.com</span><br><span class=\"line\">PreferredAuthentications publickey</span><br><span class=\"line\">IdentityFile ~/.ssh/id_rsa_github</span><br><span class=\"line\"><span class=\"comment\">#coding</span></span><br><span class=\"line\">Host git.coding.net</span><br><span class=\"line\">Hostname git-ssh.coding.net</span><br><span class=\"line\">User wmwwmv@163.com</span><br><span class=\"line\">Port 443</span><br><span class=\"line\">PreferredAuthentications publickey</span><br><span class=\"line\">IdentityFile ~/.ssh/id_rsa_coding</span><br></pre></td></tr></table></figure></li>\n<li>上传public key 到 GitHub/Coidng<br>GitHub设置过程如下:<br>登录github,点击右上方的图标,点击“Settings”</li>\n</ul>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-17-56-16.jpg\"><br>选择<code>SSH and GPG keys</code>,点击<code>New SSH key</code>,在出现的界面中填写SSH key的名称,填一个你自己喜欢的名称即可,然后将上面拷贝的<code>~/.ssh/id_isa_github.pub</code>文件内容粘帖到 key 一栏,再点击<code>Add SSH key</code>按钮就可以了。<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-17-56-29.jpg\"><br>添加过程github会提示你输入一次你的github密码 ,确认后即添加完毕。</p>\n<ul>\n<li>测试<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#测试github</span></span><br><span class=\"line\">ssh -T git@github.com</span><br><span class=\"line\"><span class=\"comment\">#测试Coding</span></span><br><span class=\"line\">ssh -T git@git.coding.net</span><br><span class=\"line\"><span class=\"comment\"># 测试gitlab</span></span><br><span class=\"line\">ssh -T git@gitlab.example.com</span><br></pre></td></tr></table></figure>\nHexo中<code>_config.yml</code>配置</li>\n</ul>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">deploy:</span><br><span class=\"line\"> type: git</span><br><span class=\"line\"> repo: </span><br><span class=\"line\"> github: git@github.com:wmwwmv/wmwwmv.github.io.git</span><br><span class=\"line\"> coding: git@git.coding.net:shichao/xiaozhu.git</span><br><span class=\"line\"> branch: master</span><br></pre></td></tr></table></figure>\n<h2 id=\"利用supervisor让hexo-server服务常驻后台\"><a href=\"#利用supervisor让hexo-server服务常驻后台\" class=\"headerlink\" title=\"利用supervisor让hexo-server服务常驻后台\"></a>利用supervisor让hexo-server服务常驻后台</h2><p>在<code>supervisord.conf</code>这个文件末尾加上</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[include]</span><br><span class=\"line\">files = /etc/supervisor/*.conf</span><br></pre></td></tr></table></figure>\n<p>新建<code>hexo-server.conf</code>文件<br>写脚本</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[program:hexo-server]</span><br><span class=\"line\"><span class=\"built_in\">command</span> = hexo s</span><br><span class=\"line\">directory = /root/Dropbox/hexo</span><br><span class=\"line\">user=root</span><br><span class=\"line\">autostart = <span class=\"literal\">true</span></span><br><span class=\"line\">autorestart = <span class=\"literal\">true</span></span><br><span class=\"line\">stdout_logfile = /var/<span class=\"built_in\">log</span>/supervisor/hexo.log</span><br><span class=\"line\">stderr_logfile = /var/<span class=\"built_in\">log</span>/supervisor/hexo_err.log</span><br></pre></td></tr></table></figure>\n<p>supervisor的一些命令</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#启动、管理配置中设置的进程。</span></span><br><span class=\"line\">supervisord </span><br><span class=\"line\"><span class=\"comment\">#停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。</span></span><br><span class=\"line\">supervisorctl stop programxxx </span><br><span class=\"line\"><span class=\"comment\">#启动某个进程</span></span><br><span class=\"line\">supervisorctl start programxxx</span><br><span class=\"line\"><span class=\"comment\">#重启某个进程</span></span><br><span class=\"line\">supervisorctl restart programxxx </span><br><span class=\"line\"> <span class=\"comment\">#重启所有属于名为groupworker这个分组的进程(start,restart同理)</span></span><br><span class=\"line\">supervisorctl stop groupworker</span><br><span class=\"line\"><span class=\"comment\">#停止全部进程,注:start、restart、stop都不会载入最新的配置文件。</span></span><br><span class=\"line\">supervisorctl stop all</span><br><span class=\"line\"><span class=\"comment\">#载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。</span></span><br><span class=\"line\">supervisorctl reload</span><br><span class=\"line\"><span class=\"comment\">#根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。</span></span><br><span class=\"line\">supervisorctl update</span><br></pre></td></tr></table></figure>\n<ul>\n<li>Git同步之前需要先做些准备工作:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd /root/Dropbox/hexo/source/ && git add 404 readme.md about _drafts _posts about tags resources && git commit -m "auto commit" && git remote add origin git@github.com:wmwwmv/BlogBackup.git && git push -u origin master</span><br></pre></td></tr></table></figure></li>\n<li>使用MarkdownEditor的fileshook命令<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd /d E:\\Dropbox\\hexo && hexo clean && hexo g && hexo d && cd source/ && git add -A && git commit -m "auto commit" && git push</span><br></pre></td></tr></table></figure>\n然后将第三方云设置成七牛的图床就更加完美了,不仅能拖入普遍自动生成链接,还可以自动发布。<h2 id=\"遇到的问题\"><a href=\"#遇到的问题\" class=\"headerlink\" title=\"遇到的问题\"></a>遇到的问题</h2><h3 id=\"hexo-deploy时重复输入用户名密码的问题\"><a href=\"#hexo-deploy时重复输入用户名密码的问题\" class=\"headerlink\" title=\"hexo deploy时重复输入用户名密码的问题\"></a>hexo deploy时重复输入用户名密码的问题</h3>每次部署执行hexo deploy都需要输入用户名<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/b84f46c31486c0689dcb46fe856a3408_hexo-01.png\"><br>问题原因及解决方案:<br>最主要的原因可能是你没有采用<a href=\"mailto:git@github.com\">git@github.com</a><br><img src=\"https://images.liangs.me/bitcron/Notes/_image/ff716f897db6f52aae3fe00d8a7e6ca5_hexo-04.png\"><br>而是用https//github.com<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/5a6545da6f259e0f0ee8a92550861cda_hexo-03.png\"><br>修改后重新提交部署:<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/9ac59c621f8f09f44cf517c55e0bec7d_hexo-02.png\"></li>\n</ul>\n<h2 id=\"注意\"><a href=\"#注意\" class=\"headerlink\" title=\"注意\"></a>注意</h2><ul>\n<li>为了避免上传一次就重新将pulic .git文件夹就同步一次,所以在本地Dropbox上要选择性同步。</li>\n<li>想利用分布式解析国内解析到coding 国外解析到github,结果国内访问github比coding还快。</li>\n<li>迁移的时候只要保存好<code>_config.yml</code> <code>package.json</code>配置文件,<code>source</code>,<code>themes</code>文件夹,迁移的时候再重新安装环境将备份的文件覆盖后装上npm包就行。</li>\n</ul>\n","slug":"笔记/2018-12-09.Hexo博客升级小记","comments":true,"categories":[],"tags":[{"name":"hexo","slug":"hexo","permalink":"https://www.zhiiker.com/tags/hexo/"},{"name":"dropbox","slug":"dropbox","permalink":"https://www.zhiiker.com/tags/dropbox/"},{"name":"vps","slug":"vps","permalink":"https://www.zhiiker.com/tags/vps/"},{"name":"incron","slug":"incron","permalink":"https://www.zhiiker.com/tags/incron/"},{"name":"supervisor","slug":"supervisor","permalink":"https://www.zhiiker.com/tags/supervisor/"}]},{"title":"Atom的一些问题","date":"2018-11-17T16:00:00.000Z","path":"2018/11/18/笔记/2018-11-18.Atom一些问题/","text":"编译xlatex非常慢看到一篇文章https://bbs.pku.edu.cn/v2/post-read.php?bid=346&threadid=16048205解决了管理员运行xelatex.exe 来源问题http://tex.stackexchange.com/questions/325278/xelatex-runs-slow-on-windows-machine 中文在设置里要把TEX PATH设置成texlive的bin目录把编译引擎设置成为xelatex","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"编译xlatex非常慢\"><a href=\"#编译xlatex非常慢\" class=\"headerlink\" title=\"编译xlatex非常慢\"></a>编译xlatex非常慢</h2><p>看到一篇文章<br><a href=\"https://bbs.pku.edu.cn/v2/post-read.php?bid=346&threadid=16048205\">https://bbs.pku.edu.cn/v2/post-read.php?bid=346&threadid=16048205</a><br>解决了<br>管理员运行xelatex.exe</p>\n<span id=\"more\"></span>\n\n<p>来源问题<br><a href=\"http://tex.stackexchange.com/questions/325278/xelatex-runs-slow-on-windows-machine\">http://tex.stackexchange.com/questions/325278/xelatex-runs-slow-on-windows-machine</a></p>\n<h2 id=\"中文\"><a href=\"#中文\" class=\"headerlink\" title=\"中文\"></a>中文</h2><p>在设置里要把<code>TEX PATH</code>设置成texlive的bin目录<br>把编译引擎设置成为<code>xelatex</code></p>\n","slug":"笔记/2018-11-18.Atom一些问题","comments":true,"categories":[],"tags":[]},{"title":"用Atom写LaTeX文档","date":"2018-11-03T16:00:00.000Z","path":"2018/11/04/笔记/2018-11-04.用Atom写LaTeX文档/","text":"这套方案比用WinEdt和TexStudio好,编译的速度快,并且支持PDF实时预览。 软件下载及安装TeX Live官方源个人推荐使用清华的镜像,会快很多清华的TUNA镜像剩下的就是图形化安装了,不赘述,遇到问题百度下。 AtomAtom下载地址 插件安装File -> Settings -> Install搜索并安装: simplified-chinese-menu(提供汉化界面) latex(用来在Atom中编译LaTeX文件) language-latex(提供语法高亮) latexer(代码自动完成)不要同时安装latex和latextools插件,否则会出现Atom-Latex error ‘could not read log file’错误无法编译。Atom 安装插件时因网络原因失败怎么办?方法一:给 apm 绑代理windows下打开用户文件夹下面~/.atom/.apmrc文件加入123strict-ssl=falsehttp_proxy=socks5:127.0.0.1:1080https_proxy=socks5:127.0.0.1:1080 方法二:使用国内 npm 源编辑 ~/.atom/.apmrc,添加registry = https://registry.npm.taobao.org 即可方法三:使用proxychains-ng绑socks代理,然后用apm命令安装 atom插件适用于MacOS和Linux,另外也可以使用polipo,Windows可以使用Proxifier、3proxyproxychains-ng项目地址proxychains-ngGithub下载安装1234git clone https://github.com/rofl0r/proxychains-ngcd proxychains-ng./configuresudo make && make install ProxyChains 的配置文件位于 /etc/proxychains.conf ,打开后你需要在末尾添加你使用的代理。例如:12345678[ProxyList]# add proxy here ...# meanwile# defaults set to "tor"#socks4 127.0.0.1 9050 # examplesocks5 127.0.0.1 1080 ProxyChains 的使用方式非常简单,直接在应用程序前加上 proxychains4 即可。例如:1proxychains4 git clone https://github.com/rofl0r/proxychains-ng 3proxy官方主页:http://3proxy.ru/使用教程:https://blog.csdn.net/gsls200808/article/details/45275913让Windows的CMD等程序能走代理CMD等程序会通过http_proxy https_proxy ftp_proxy变量来请求代理,修改变量即可。假设你已经使用了SS客户端,本地socks5代理为127.0.0.1:1080在CMD窗口输入如下指令设置代理:123set http_proxy=socks5://127.0.0.1:1080set https_proxy=socks5://127.0.0.1:1080set ftp_proxy=socks5://127.0.0.1:1080 可以通过echo %http_proxy%命令查看是否设置成功。取消代理设置:12set http_proxy=set https_proxy= 这是临时的,重启命令行之后就没有了,可以写入环境变量中永远生效,另外也可以设置WinHTTP代理。 设置WinHTTP代理这个设置后永远生效指定端口 1netsh winhttp set proxy 127.0.0.1:1080 或者令cmd使用ie中设置的代理(可以使用pac文件),这一步之前需要改下IE的代理设置为全局,因为PAC列表中没有Github等网站。 1netsh winhttp import proxy source=ie 查看代理 1netsh winhttp show proxy 取消代理 1netsh winhttp reset proxy polipo的安装MAC OS和Linux下可以使用此方式 12sudo apt updatesudo apt install polipo 编辑配置文件: 1sudo vi /etc/polipo/config 配置内容如下 12345678910111213141516# This file only needs to list configuration variables that deviate# from the default values. See /usr/share/doc/polipo/examples/config.sample# and "polipo -v" for variables you can tweak and further information.logSyslog = truelogFile = /var/log/polipo/polipo.logproxyAddress = "0.0.0.0"socksParentProxy = "127.0.0.1:1080"socksProxyType = socks5chunkHighMark = 50331648objectHighMark = 16384dnsQueryIPv6 = no 保存退出,重启polipo服务: 1sudo service polipo restart 启用polipo代理通过 service polipo status 命令,我们可以看到新的监听端口为8123。因此,Linux终端启用代理的命令为: 1234export http_proxy=http://127.0.0.1:8123export https_proxy=http://127.0.0.1:8123export ftp_proxy=http://127.0.0.1:8123export no_proxy='127.0.0.1' 同样,直接输入上述命令设置的代理也是临时的。一个比较实用的方法是在~/.bashrc文件中设置环境,之后就不需要再手动设置了。 1vi ~/.bashrc 在文件最后插入上述三条指令,保存。这里要加上export no_proxy='127.0.0.1'是因为腾讯云阿里云等软件的源在内网,防止设置代理后访问不了软件源,从而无法安装软件。测试 wget 指令: 方法四:使用VPN全局翻墙这里不赘述了 测试新建文件,后缀名为.tex,编码为UTF-8测试代码 12345678910111213141516171819202122232425\\documentclass[UTF8]{article}\\author {Author}\\title {Title}\\usepackage{ctex}\\usepackage{amsmath}\\usepackage{amssymb}\\begin{document}\\maketitle\\section{First section} test1. \\subsection{First subsection} test2. \\subsubsection{First double subsection} \\paragraph{Fist paragraph} test3. \\subparagraph{First subparagraph} test4. \\subsection{Second subsection} \\paragraph{段落} 中文测试。\\\\Hello World! \\\\ % This is commentHello \\LaTeX ! \\\\ $\\lim\\limits_{n \\rightarrow +\\infty} P\\lbrace\\frac{\\sum\\limits_{i=1}{n}Xi - n\\cdot EX}{ \\sqrt{n \\cdot DX} } \\leqslant x\\rbrace = \\Phi(x)$ \\\\ $P\\lbrace a<X<b \\rbrace \\approx \\Phi(\\frac{b - n\\cdot EX}{\\sqrt {n\\cdot DX}}) - \\Phi(\\frac{a - n\\cdot EX}{\\sqrt{n\\cdot DX} })$ \\\\ $F(x,y) = F_{X}(x)F_{Y}(y)$\\end{document} 按Ctrl + Alt + B 生成PDF文档,右侧会自动弹出PDF预览页面,重新编译后会更新预览。 一些快捷键 Ctrl + \\ :隐藏/展示左边的目录树 Alt+Shift+S: 搜索latex片段 Alt+Ctrl+B: 编译 Alt+Ctrl+S: 编辑的位置会同步到右侧预览以黄点显示 Alt+Ctrl+C: 清除生成的文件","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>这套方案比用WinEdt和TexStudio好,编译的速度快,并且支持PDF实时预览。</p>\n<h2 id=\"软件下载及安装\"><a href=\"#软件下载及安装\" class=\"headerlink\" title=\"软件下载及安装\"></a>软件下载及安装</h2><h3 id=\"TeX-Live\"><a href=\"#TeX-Live\" class=\"headerlink\" title=\"TeX Live\"></a>TeX Live</h3><p><a href=\"http://tug.org/texlive/acquire-netinstall.html\">官方源</a><br>个人推荐使用清华的镜像,会快很多<br><a href=\"https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/\">清华的TUNA镜像</a><br>剩下的就是图形化安装了,不赘述,遇到问题百度下。</p>\n<span id=\"more\"></span>\n\n<h3 id=\"Atom\"><a href=\"#Atom\" class=\"headerlink\" title=\"Atom\"></a>Atom</h3><p><a href=\"https://atom.io/\">Atom下载地址</a></p>\n<h2 id=\"插件安装\"><a href=\"#插件安装\" class=\"headerlink\" title=\"插件安装\"></a>插件安装</h2><p>File -> Settings -> Install<br>搜索并安装:</p>\n<ul>\n<li>simplified-chinese-menu(提供汉化界面)</li>\n<li>latex(用来在Atom中编译LaTeX文件)</li>\n<li>language-latex(提供语法高亮)</li>\n<li>latexer(代码自动完成)<br>不要同时安装<code>latex</code>和<code>latextools</code>插件,否则会出现<code>Atom-Latex error ‘could not read log file’</code>错误无法编译。<h3 id=\"Atom-安装插件时因网络原因失败怎么办?\"><a href=\"#Atom-安装插件时因网络原因失败怎么办?\" class=\"headerlink\" title=\"Atom 安装插件时因网络原因失败怎么办?\"></a>Atom 安装插件时因网络原因失败怎么办?</h3><h4 id=\"方法一-给-apm-绑代理\"><a href=\"#方法一-给-apm-绑代理\" class=\"headerlink\" title=\"方法一:给 apm 绑代理\"></a>方法一:给 apm 绑代理</h4>windows下打开用户文件夹<br>下面<code>~/.atom/.apmrc</code>文件<br>加入<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">strict-ssl=false</span><br><span class=\"line\">http_proxy=socks5:127.0.0.1:1080</span><br><span class=\"line\">https_proxy=socks5:127.0.0.1:1080</span><br></pre></td></tr></table></figure>\n<h4 id=\"方法二-使用国内-npm-源\"><a href=\"#方法二-使用国内-npm-源\" class=\"headerlink\" title=\"方法二:使用国内 npm 源\"></a>方法二:使用国内 npm 源</h4>编辑 <code>~/.atom/.apmrc</code>,添加<code>registry = https://registry.npm.taobao.org </code>即可<h4 id=\"方法三-使用proxychains-ng绑socks代理,然后用apm命令安装-atom插件\"><a href=\"#方法三-使用proxychains-ng绑socks代理,然后用apm命令安装-atom插件\" class=\"headerlink\" title=\"方法三:使用proxychains-ng绑socks代理,然后用apm命令安装 atom插件\"></a>方法三:使用<code>proxychains-ng</code>绑<code>socks</code>代理,然后用<code>apm</code>命令安装 <code>atom</code>插件</h4>适用于MacOS和Linux,另外也可以使用polipo,Windows可以使用Proxifier、3proxy<br><code>proxychains-ng</code>项目地址<a href=\"https://github.com/rofl0r/proxychains-ng\">proxychains-ng</a><br>Github下载安装<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git clone https://github.com/rofl0r/proxychains-ng</span><br><span class=\"line\">cd proxychains-ng</span><br><span class=\"line\">./configure</span><br><span class=\"line\">sudo make && make install</span><br></pre></td></tr></table></figure>\nProxyChains 的配置文件位于 /etc/proxychains.conf ,打开后你需要在末尾添加你使用的代理。例如:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[ProxyList]</span><br><span class=\"line\"># add proxy here ...</span><br><span class=\"line\"># meanwile</span><br><span class=\"line\"># defaults set to "tor"</span><br><span class=\"line\">#socks4 127.0.0.1 9050</span><br><span class=\"line\"> </span><br><span class=\"line\"># example</span><br><span class=\"line\">socks5 127.0.0.1 1080</span><br></pre></td></tr></table></figure>\nProxyChains 的使用方式非常简单,直接在应用程序前加上 proxychains4 即可。例如:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">proxychains4 git clone https://github.com/rofl0r/proxychains-ng</span><br></pre></td></tr></table></figure>\n<h5 id=\"3proxy\"><a href=\"#3proxy\" class=\"headerlink\" title=\"3proxy\"></a>3proxy</h5>官方主页:<a href=\"http://3proxy.ru/\">http://3proxy.ru/</a><br>使用教程:<a href=\"https://blog.csdn.net/gsls200808/article/details/45275913\">https://blog.csdn.net/gsls200808/article/details/45275913</a><h5 id=\"让Windows的CMD等程序能走代理\"><a href=\"#让Windows的CMD等程序能走代理\" class=\"headerlink\" title=\"让Windows的CMD等程序能走代理\"></a>让Windows的CMD等程序能走代理</h5>CMD等程序会通过<code>http_proxy</code> <code>https_proxy</code> <code>ftp_proxy</code>变量来请求代理,修改变量即可。<br>假设你已经使用了SS客户端,本地socks5代理为127.0.0.1:1080<br>在CMD窗口输入如下指令设置代理:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">set http_proxy=socks5://127.0.0.1:1080</span><br><span class=\"line\">set https_proxy=socks5://127.0.0.1:1080</span><br><span class=\"line\">set ftp_proxy=socks5://127.0.0.1:1080</span><br></pre></td></tr></table></figure>\n可以通过<code>echo %http_proxy%</code>命令查看是否设置成功。<br>取消代理设置:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">set http_proxy=</span><br><span class=\"line\">set https_proxy=</span><br></pre></td></tr></table></figure>\n这是临时的,重启命令行之后就没有了,可以写入环境变量中永远生效,另外也可以设置WinHTTP代理。</li>\n</ul>\n<h5 id=\"设置WinHTTP代理\"><a href=\"#设置WinHTTP代理\" class=\"headerlink\" title=\"设置WinHTTP代理\"></a>设置WinHTTP代理</h5><p>这个设置后永远生效<br>指定端口</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">netsh winhttp set proxy 127.0.0.1:1080</span><br></pre></td></tr></table></figure>\n<p>或者令cmd使用ie中设置的代理(可以使用pac文件),这一步之前需要改下IE的代理设置为全局,因为PAC列表中没有Github等网站。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">netsh winhttp import proxy source=ie</span><br></pre></td></tr></table></figure>\n<p>查看代理</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">netsh winhttp show proxy</span><br></pre></td></tr></table></figure>\n<p>取消代理</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">netsh winhttp reset proxy</span><br></pre></td></tr></table></figure>\n<h5 id=\"polipo的安装\"><a href=\"#polipo的安装\" class=\"headerlink\" title=\"polipo的安装\"></a>polipo的安装</h5><p>MAC OS和Linux下可以使用此方式</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt update</span><br><span class=\"line\">sudo apt install polipo</span><br></pre></td></tr></table></figure>\n<p>编辑配置文件:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo vi /etc/polipo/config</span><br></pre></td></tr></table></figure>\n<p>配置内容如下</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"># This file only needs to list configuration variables that deviate</span><br><span class=\"line\"># from the default values. See /usr/share/doc/polipo/examples/config.sample</span><br><span class=\"line\"># and "polipo -v" for variables you can tweak and further information.</span><br><span class=\"line\"></span><br><span class=\"line\">logSyslog = true</span><br><span class=\"line\">logFile = /var/log/polipo/polipo.log</span><br><span class=\"line\"></span><br><span class=\"line\">proxyAddress = "0.0.0.0"</span><br><span class=\"line\"></span><br><span class=\"line\">socksParentProxy = "127.0.0.1:1080"</span><br><span class=\"line\">socksProxyType = socks5</span><br><span class=\"line\"></span><br><span class=\"line\">chunkHighMark = 50331648</span><br><span class=\"line\">objectHighMark = 16384</span><br><span class=\"line\"></span><br><span class=\"line\">dnsQueryIPv6 = no</span><br></pre></td></tr></table></figure>\n<p>保存退出,重启polipo服务:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo service polipo restart</span><br></pre></td></tr></table></figure>\n<h5 id=\"启用polipo代理\"><a href=\"#启用polipo代理\" class=\"headerlink\" title=\"启用polipo代理\"></a>启用polipo代理</h5><p>通过 service polipo status 命令,我们可以看到新的监听端口为<strong>8123</strong>。<br><img src=\"https://images.liangs.me/notes/Notes/_image/7a761377ce91b9ff5b08c62780ab3e4c_1460000013587471_w%3D549%26h%3D193.jpg\"><br>因此,Linux终端启用代理的命令为:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">export http_proxy=http://127.0.0.1:8123</span><br><span class=\"line\">export https_proxy=http://127.0.0.1:8123</span><br><span class=\"line\">export ftp_proxy=http://127.0.0.1:8123</span><br><span class=\"line\">export no_proxy='127.0.0.1'</span><br></pre></td></tr></table></figure>\n<p>同样,直接输入上述命令设置的代理也是临时的。一个比较实用的方法是在~/.bashrc文件中设置环境,之后就不需要再手动设置了。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vi ~/.bashrc</span><br></pre></td></tr></table></figure>\n<p>在文件最后插入上述三条指令,保存。<br>这里要加上<code>export no_proxy='127.0.0.1'</code>是因为腾讯云阿里云等软件的源在内网,防止设置代理后访问不了软件源,从而无法安装软件。<br>测试 wget 指令:<br><img src=\"https://images.liangs.me/notes/Notes/_image/a65ec23e88eb5aefcfc9bb16f484a6e5_1028233383-5a9fca83cc525_articlex.jpg\"></p>\n<h3 id=\"方法四-使用VPN全局翻墙\"><a href=\"#方法四-使用VPN全局翻墙\" class=\"headerlink\" title=\"方法四:使用VPN全局翻墙\"></a>方法四:使用VPN全局翻墙</h3><p>这里不赘述了</p>\n<h2 id=\"测试\"><a href=\"#测试\" class=\"headerlink\" title=\"测试\"></a>测试</h2><p>新建文件,后缀名为<code>.tex</code>,编码为<code>UTF-8</code><br>测试代码</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">\\documentclass[UTF8]{article}</span><br><span class=\"line\">\\author {Author}</span><br><span class=\"line\">\\title {Title}</span><br><span class=\"line\">\\usepackage{ctex}</span><br><span class=\"line\">\\usepackage{amsmath}</span><br><span class=\"line\">\\usepackage{amssymb}</span><br><span class=\"line\">\\begin{document}</span><br><span class=\"line\">\\maketitle</span><br><span class=\"line\">\\section{First section} test1.</span><br><span class=\"line\"> \\subsection{First subsection} test2.</span><br><span class=\"line\"> \\subsubsection{First double subsection}</span><br><span class=\"line\"> \\paragraph{Fist paragraph} test3.</span><br><span class=\"line\"> \\subparagraph{First subparagraph} test4.</span><br><span class=\"line\"> \\subsection{Second subsection}</span><br><span class=\"line\"> \\paragraph{段落} 中文测试。</span><br><span class=\"line\">\\\\</span><br><span class=\"line\">Hello World! \\\\ % This is comment</span><br><span class=\"line\">Hello \\LaTeX ! \\\\</span><br><span class=\"line\"> </span><br><span class=\"line\">$\\lim\\limits_{n \\rightarrow +\\infty} P\\lbrace\\frac{\\sum\\limits_{i=1}{n}Xi - n\\cdot EX}{ \\sqrt{n \\cdot DX} } \\leqslant x\\rbrace = \\Phi(x)$ \\\\</span><br><span class=\"line\"> </span><br><span class=\"line\">$P\\lbrace a<X<b \\rbrace \\approx \\Phi(\\frac{b - n\\cdot EX}{\\sqrt {n\\cdot DX}}) - \\Phi(\\frac{a - n\\cdot EX}{\\sqrt{n\\cdot DX} })$ \\\\</span><br><span class=\"line\"> </span><br><span class=\"line\">$F(x,y) = F_{X}(x)F_{Y}(y)$</span><br><span class=\"line\">\\end{document}</span><br></pre></td></tr></table></figure>\n<p>按<code>Ctrl + Alt + B</code> 生成PDF文档,右侧会自动弹出PDF预览页面,重新编译后会更新预览。</p>\n<h3 id=\"一些快捷键\"><a href=\"#一些快捷键\" class=\"headerlink\" title=\"一些快捷键\"></a>一些快捷键</h3><ul>\n<li><code>Ctrl + \\</code> :隐藏/展示左边的目录树</li>\n<li><code>Alt+Shift+S</code>: 搜索latex片段</li>\n<li><code>Alt+Ctrl+B</code>: 编译</li>\n<li><code>Alt+Ctrl+S</code>: 编辑的位置会同步到右侧预览以黄点显示</li>\n<li><code>Alt+Ctrl+C</code>: 清除生成的文件</li>\n</ul>\n","slug":"笔记/2018-11-04.用Atom写LaTeX文档","comments":true,"categories":[],"tags":[]},{"title":"内网穿透","date":"2018-11-02T16:00:00.000Z","path":"2018/11/03/笔记/2018-11-03.内网穿透/","text":"想试下内网穿透,尝试后发现,采用阿里云和腾讯云DDNS都会失败,因为没有公网IP,移动是个大内网。需要有个带公网IP的服务器,用ngrok或者frps进行流量转发试了试ngrok,在路由器上仍不好用,并且局限较大。最后采用了frps服务器搭建借鉴了这篇文章,这篇文章使用的脚本功能齐全相对好用Frp部署 – 穿透内网,从外网访问内网设备 服务端的安装123wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh #下载脚本chmod 755 ./install-frps.sh #赋予权限./install-frps.sh install #安装脚本 然后脚本开始运行,会让你输入一些配置,直接回车是默认配置。 12345678910111213141516171819202122Please input frps bind_port [1-65535](Default Server Port: 5443):[7000]#输入frp提供服务的端口,用于服务器端和客户端通信Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80):[7080]#输入frp进行http穿透的http服务端口,建议修改防止冲突呀Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443):[70443]#输入frp进行https穿透的https服务端口,建议修改防止冲突呀Please input frps dashboard_port [1-65535](Default dashboard_port: 6443):[7081]#输入frp的控制台服务端口,用于查看frp工作状态Please input dashboard_user (Default: admin):[admin]#登录控制台的用户名Please input dashboard_pwd (Default: kpkpM7VZ):[admin]#登录控制台的密码Please input privilege_token (Default: 9m2UAOWa6hx5Eise):[admin]#Frp服务端和客户端的通信密码下面的内容都是默认即可 到此服务端安装完成。综上可知,服务端配置如下: 12345678910111213141516[common]bind_addr = 0.0.0.0bind_port = 7000subdomain_host = ddns.example.com #后面加的,配置域名kcp_bind_port = 7000dashboard_port = 7081dashboard_user = admindashboard_pwd = adminvhost_http_port = 7080vhost_https_port = 70443log_file = ./frps.loglog_level = infolog_max_days = 3privilege_token = adminmax_pool_count = 50tcp_mux = true 之后需要修改解析,后来就是这个地方出问题,一直没成功。如果你用来做ddns的域名为ddns.example.com那么需要添加两个A解析,分别将ddns.example.com和*.ddns.example.com解析到服务器的IP。之后就是Padavan路由器的设置了,脚本一直运行不成功。参考这篇文章使用的脚本解决了问题Padavan路由器设置frp内网穿透实现外网访问路由器管理页面+外网远程访问内网下的Windows桌面这篇文章有更详细的配置[frp] 内网穿透神器搭建 萌新也看得懂的教程系列 我的脚本如下 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#!/bin/shexport PATH='/etc/storage/bin:/tmp/script:/etc/storage/script:/opt/usr/sbin:/opt/usr/bin:/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin'export LD_LIBRARY_PATH=/lib:/opt/libkillall frpc frpsmkdir -p /tmp/frp#启动frp功能后会运行以下脚本#使用方法请查看论坛教程地址: http://www.right.com.cn/forum/thread-191839-1-1.html#frp项目地址教程: https://github.com/fatedier/frp/blob/master/README_zh.md#请自行修改 auth_token 用于对客户端连接进行身份验证# IP查询: http://119.29.29.29/d?dn=github.com#客户端配置:cat > "/tmp/frp/myfrpc.ini" <<-\\EOF[common]server_addr =******server_port = 7000token = admin#ssh配置[ssh]type = tcplocal_ip = ******local_port = 22remote_port = 5200[web-dev]type = httplocal_ip = ******local_port = 4000subdomain = t[web]type = httplocal_ip = ******local_port = 80subdomain = r#假设此项设置为 :router,前面的服务端配置frps.ini时#将subdomain_host设置为example.com,然后你将#r.example.com解析到服务端后,可以使用r.example.com:7080#来访问路由器管理页面。EOF#启动:frpc_enable=`nvram get frpc_enable`frpc_enable=${frpc_enable:-"0"}frps_enable=`nvram get frps_enable`frps_enable=${frps_enable:-"0"}if [ "$frpc_enable" = "1" ] ; then frpc -c /tmp/frp/myfrpc.ini &fiif [ "$frps_enable" = "1" ] ; then frps -c /tmp/frp/myfrps.ini &fi FTP内网穿透Frp 内网穿透 FTP教程 Padavan By Geekman 关于 Frp 配置文件的一些说明 后记发现很好的论坛koolshare","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>想试下内网穿透,尝试后发现,采用阿里云和腾讯云DDNS都会失败,因为没有公网IP,移动是个大内网。<br>需要有个带公网IP的服务器,用ngrok或者frps进行流量转发<br>试了试ngrok,在路由器上仍不好用,并且局限较大。<br>最后采用了frps<br>服务器搭建借鉴了这篇文章,这篇文章使用的脚本功能齐全相对好用<br><a href=\"https://note.izhaoo.com/frp-deploy.html\">Frp部署 – 穿透内网,从外网访问内网设备</a></p>\n<span id=\"more\"></span>\n\n<h2 id=\"服务端的安装\"><a href=\"#服务端的安装\" class=\"headerlink\" title=\"服务端的安装\"></a>服务端的安装</h2><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh #下载脚本</span><br><span class=\"line\">chmod 755 ./install-frps.sh #赋予权限</span><br><span class=\"line\">./install-frps.sh install #安装脚本</span><br></pre></td></tr></table></figure>\n<p>然后脚本开始运行,会让你输入一些配置,直接回车是默认配置。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">Please input frps bind_port [1-65535](Default Server Port: 5443):[7000]</span><br><span class=\"line\">#输入frp提供服务的端口,用于服务器端和客户端通信</span><br><span class=\"line\"></span><br><span class=\"line\">Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80):[7080]</span><br><span class=\"line\">#输入frp进行http穿透的http服务端口,建议修改防止冲突呀</span><br><span class=\"line\"></span><br><span class=\"line\">Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443):[70443]</span><br><span class=\"line\">#输入frp进行https穿透的https服务端口,建议修改防止冲突呀</span><br><span class=\"line\"></span><br><span class=\"line\">Please input frps dashboard_port [1-65535](Default dashboard_port: 6443):[7081]</span><br><span class=\"line\">#输入frp的控制台服务端口,用于查看frp工作状态</span><br><span class=\"line\"></span><br><span class=\"line\">Please input dashboard_user (Default: admin):[admin]</span><br><span class=\"line\">#登录控制台的用户名</span><br><span class=\"line\"></span><br><span class=\"line\">Please input dashboard_pwd (Default: kpkpM7VZ):[admin]</span><br><span class=\"line\">#登录控制台的密码</span><br><span class=\"line\"></span><br><span class=\"line\">Please input privilege_token (Default: 9m2UAOWa6hx5Eise):[admin]</span><br><span class=\"line\">#Frp服务端和客户端的通信密码</span><br><span class=\"line\"></span><br><span class=\"line\">下面的内容都是默认即可</span><br></pre></td></tr></table></figure>\n<p>到此服务端安装完成。<br><img src=\"https://images.liangs.me/notes/Notes/_image/aea9760659742daa86bf1b6b0c2c3873_20180512114749.jpg\"><br>综上可知,服务端配置如下:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[common]</span><br><span class=\"line\">bind_addr = 0.0.0.0</span><br><span class=\"line\">bind_port = 7000</span><br><span class=\"line\">subdomain_host = ddns.example.com #后面加的,配置域名</span><br><span class=\"line\">kcp_bind_port = 7000</span><br><span class=\"line\">dashboard_port = 7081</span><br><span class=\"line\">dashboard_user = admin</span><br><span class=\"line\">dashboard_pwd = admin</span><br><span class=\"line\">vhost_http_port = 7080</span><br><span class=\"line\">vhost_https_port = 70443</span><br><span class=\"line\">log_file = ./frps.log</span><br><span class=\"line\">log_level = info</span><br><span class=\"line\">log_max_days = 3</span><br><span class=\"line\">privilege_token = admin</span><br><span class=\"line\">max_pool_count = 50</span><br><span class=\"line\">tcp_mux = true</span><br></pre></td></tr></table></figure>\n<p>之后需要修改解析,后来就是这个地方出问题,一直没成功。<br>如果你用来做ddns的域名为<code>ddns.example.com</code>那么需要添加两个A解析,分别将<code>ddns.example.com</code>和<code>*.ddns.example.com</code>解析到服务器的IP。<br>之后就是Padavan路由器的设置了,脚本一直运行不成功。<br>参考这篇文章使用的脚本解决了问题<br><a href=\"https://www.imokey.cn/2018/10/frp&padavan_tutorial/\">Padavan路由器设置frp内网穿透实现外网访问路由器管理页面+外网远程访问内网下的Windows桌面</a><br>这篇文章有更详细的配置<br><a href=\"https://lolico.moe/tutorial/frp.html\">[frp] 内网穿透神器搭建 萌新也看得懂的教程系列\n</a><br>我的脚本如下</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">#!/bin/sh</span><br><span class=\"line\">export PATH='/etc/storage/bin:/tmp/script:/etc/storage/script:/opt/usr/sbin:/opt/usr/bin:/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin'</span><br><span class=\"line\">export LD_LIBRARY_PATH=/lib:/opt/lib</span><br><span class=\"line\">killall frpc frps</span><br><span class=\"line\">mkdir -p /tmp/frp</span><br><span class=\"line\"></span><br><span class=\"line\">#启动frp功能后会运行以下脚本</span><br><span class=\"line\">#使用方法请查看论坛教程地址: http://www.right.com.cn/forum/thread-191839-1-1.html</span><br><span class=\"line\">#frp项目地址教程: https://github.com/fatedier/frp/blob/master/README_zh.md</span><br><span class=\"line\">#请自行修改 auth_token 用于对客户端连接进行身份验证</span><br><span class=\"line\"># IP查询: http://119.29.29.29/d?dn=github.com</span><br><span class=\"line\"></span><br><span class=\"line\">#客户端配置:</span><br><span class=\"line\">cat > "/tmp/frp/myfrpc.ini" <<-\\EOF</span><br><span class=\"line\">[common]</span><br><span class=\"line\">server_addr =******</span><br><span class=\"line\">server_port = 7000</span><br><span class=\"line\">token = admin</span><br><span class=\"line\"></span><br><span class=\"line\">#ssh配置</span><br><span class=\"line\">[ssh]</span><br><span class=\"line\">type = tcp</span><br><span class=\"line\">local_ip = ******</span><br><span class=\"line\">local_port = 22</span><br><span class=\"line\">remote_port = 5200</span><br><span class=\"line\"></span><br><span class=\"line\">[web-dev]</span><br><span class=\"line\">type = http</span><br><span class=\"line\">local_ip = ******</span><br><span class=\"line\">local_port = 4000</span><br><span class=\"line\">subdomain = t</span><br><span class=\"line\"></span><br><span class=\"line\">[web]</span><br><span class=\"line\">type = http</span><br><span class=\"line\">local_ip = ******</span><br><span class=\"line\">local_port = 80</span><br><span class=\"line\">subdomain = r</span><br><span class=\"line\">#假设此项设置为 :router,前面的服务端配置frps.ini时</span><br><span class=\"line\">#将subdomain_host设置为example.com,然后你将</span><br><span class=\"line\">#r.example.com解析到服务端后,可以使用r.example.com:7080</span><br><span class=\"line\">#来访问路由器管理页面。</span><br><span class=\"line\">EOF</span><br><span class=\"line\"></span><br><span class=\"line\">#启动:</span><br><span class=\"line\">frpc_enable=`nvram get frpc_enable`</span><br><span class=\"line\">frpc_enable=${frpc_enable:-"0"}</span><br><span class=\"line\">frps_enable=`nvram get frps_enable`</span><br><span class=\"line\">frps_enable=${frps_enable:-"0"}</span><br><span class=\"line\">if [ "$frpc_enable" = "1" ] ; then</span><br><span class=\"line\"> frpc -c /tmp/frp/myfrpc.ini &</span><br><span class=\"line\">fi</span><br><span class=\"line\">if [ "$frps_enable" = "1" ] ; then</span><br><span class=\"line\"> frps -c /tmp/frp/myfrps.ini &</span><br><span class=\"line\">fi</span><br></pre></td></tr></table></figure>\n<h2 id=\"FTP内网穿透\"><a href=\"#FTP内网穿透\" class=\"headerlink\" title=\"FTP内网穿透\"></a>FTP内网穿透</h2><p><a href=\"http://www.right.com.cn/forum//forum.php?mod=viewthread&tid=332648\">Frp 内网穿透 FTP教程 Padavan By Geekman</a></p>\n<p><a href=\"http://www.right.com.cn/forum/thread-332617-1-1.html\">关于 Frp 配置文件的一些说明</a></p>\n<h2 id=\"后记\"><a href=\"#后记\" class=\"headerlink\" title=\"后记\"></a>后记</h2><p>发现很好的论坛<br><a href=\"http://koolshare.cn/\">koolshare</a></p>\n","slug":"笔记/2018-11-03.内网穿透","comments":true,"categories":[],"tags":[]},{"title":"新的名号—象罔卮人(卮客)","date":"2018-08-10T22:13:00.000Z","path":"2018/08/11/结绳纪/2018-08-11.新的名字—象罔卮人/","text":"象罔“象罔”亦作”象网”。《庄子》寓言中的人物。含无心﹑无形迹之意。 《庄子.天地》:”黄帝游乎赤水之北,登乎昆仑之丘而南望,还归,遗其玄珠。使知索之而不得,使离朱索之而不得,使吃诟索之而不得也。乃使象罔,象罔得之。 文中的“知”、“离朱”、“吃诟”及“象罔”,即代表四种人物:一种是最有智慧的人,一种是眼光最锐利的人,一种是最擅于辩论的人,另外一种则是浑浑噩噩、蒙蒙懂懂,毫无机心的人;至于皇帝遗失的”玄珠“,则是暗寓自然界中的“道”。《庄子》的〈天地〉篇,主旨在说明“道本于自然”:它无法靠“智慧”去求得,也无法靠“一对锐利的双眼”去求得,更无法凭借“滔滔雄辩”去求得;它是无所不在的,却无法用肉眼去看、无法用手去触摸。最后能发现“道”的人,竟然就是那个“绝圣弃智”的“象罔”。 吕惠卿注: “象则非无,罔则非有,不皎不昧,玄珠之所以得也”(吕惠卿《庄子义》) 非有非无也是佛家学的第三谛、终极境界——空性。 卮人卮,是一种酒器,卮器满了,自然向外流溢。庄子以卮言来比喻那种没有人为预谋的,自然流露的合乎天性的心声。卮人就是合乎自然的人。 象罔卮人总的来说这个名号就是探索真理的明珠,做一个合乎自然的人。 卮客觉得还是有些过于冗长,就想了个精简版的名号——卮客。客代表漂泊的旅客,并且连起来还和geek谐音。 卮和客都有谦虚的意味, 卮言:支离而无统绪或随人妄言,既无主见,也无立场的、随和人意的言论。 卮辞:随和人意,无主见之词。 卮客内涵又是切合道合乎自然平凡的人,平凡中见不凡。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"象罔\"><a href=\"#象罔\" class=\"headerlink\" title=\"象罔\"></a>象罔</h2><p>“象罔”亦作”象网”。《庄子》寓言中的人物。含无心﹑无形迹之意。</p>\n<blockquote>\n<p>《庄子.天地》:”黄帝游乎赤水之北,登乎昆仑之丘而南望,还归,遗其玄珠。使知索之而不得,使离朱索之而不得,使吃诟索之而不得也。乃使象罔,象罔得之。</p>\n</blockquote>\n<span id=\"more\"></span>\n\n<p>文中的“知”、“离朱”、“吃诟”及“象罔”,即代表四种人物:一种是最有智慧的人,一种是眼光最锐利的人,一种是最擅于辩论的人,另外一种则是浑浑噩噩、蒙蒙懂懂,毫无机心的人;至于皇帝遗失的”玄珠“,则是暗寓自然界中的“道”。《庄子》的〈天地〉篇,主旨在说明“道本于自然”:它无法靠“智慧”去求得,也无法靠“一对锐利的双眼”去求得,更无法凭借“滔滔雄辩”去求得;它是无所不在的,却无法用肉眼去看、无法用手去触摸。最后能发现“道”的人,竟然就是那个“绝圣弃智”的“象罔”。</p>\n<p>吕惠卿注:</p>\n<blockquote>\n<p>“象则非无,罔则非有,不皎不昧,玄珠之所以得也”(吕惠卿《庄子义》)</p>\n</blockquote>\n<p>非有非无也是佛家学的第三谛、终极境界——空性。</p>\n<h2 id=\"卮人\"><a href=\"#卮人\" class=\"headerlink\" title=\"卮人\"></a>卮人</h2><p>卮,是一种酒器,卮器满了,自然向外流溢。庄子以卮言来比喻那种没有人为预谋的,自然流露的合乎天性的心声。卮人就是合乎自然的人。</p>\n<h2 id=\"象罔卮人\"><a href=\"#象罔卮人\" class=\"headerlink\" title=\"象罔卮人\"></a>象罔卮人</h2><p>总的来说这个名号就是探索真理的明珠,做一个合乎自然的人。</p>\n<h2 id=\"卮客\"><a href=\"#卮客\" class=\"headerlink\" title=\"卮客\"></a>卮客</h2><p>觉得还是有些过于冗长,就想了个精简版的名号——<code>卮客</code>。<br><code>客</code>代表漂泊的旅客,并且连起来还和<code>geek</code>谐音。</p>\n<p>卮和客都有谦虚的意味,</p>\n<blockquote>\n<p>卮言:支离而无统绪或随人妄言,既无主见,也无立场的、随和人意的言论。</p>\n</blockquote>\n<blockquote>\n<p>卮辞:随和人意,无主见之词。</p>\n</blockquote>\n<p>卮客内涵又是切合道合乎自然平凡的人,平凡中见不凡。</p>\n","slug":"结绳纪/2018-08-11.新的名字—象罔卮人","comments":true,"categories":[],"tags":[{"name":"卮客","slug":"卮客","permalink":"https://www.zhiiker.com/tags/%E5%8D%AE%E5%AE%A2/"},{"name":"名号","slug":"名号","permalink":"https://www.zhiiker.com/tags/%E5%90%8D%E5%8F%B7/"}]},{"title":"配置IPython Notebook提供非本地访问","date":"2018-08-06T17:24:21.000Z","path":"2018/08/07/笔记/2018-08-07.配置IPython Notebook提供非本地访问/","text":"SSL+password验证进入3.5.1环境 1pyenv activate env351 1.生成配置文件 1jupyter notebook --generate-config 2.生成密码输入ipython 12345In [1]: from notebook.auth import passwdIn [2]: passwd()Enter password:Verify password:Out[2]: 'sha1:.........' 记下这里的sha1值,后面有用3.生成ssl证书输入exit退出命令模式 12cd ~/.jupyteropenssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem 生成证书时按要求输入信息即可4.修改配置文件jupyter_notebook_config.py注意官方文档说需要ssl才能打开外部访问 123456c.NotebookApp.base_url = '/ipython/' --制定url的path,默认是根目录c.NotebookApp.password = u'sha1:.....' --注意和生成的配套c.NotebookApp.ip = '*' --目前没找到制定网段的方法c.NotebookApp.open_browser = Falsec.NotebookApp.certfile = '/root/.jupyter/mycert.pem'c.NotebookApp.keyfile = '/root/.jupyter/mykey.key' 5.启动并访问 1jupyter notebook 浏览器输入地址: 1https://host:8888/ipython/tree#notebooks Nginx+password验证方式1.生成配置文件 1jupyter notebook --generate-config 2.修改配置文件jupyter_notebook_config.py, 123c.NotebookApp.base_url = '/ipython/' --制定url的path,默认是根目录c.NotebookApp.password = u'sha1:.....' --注意和生成的配套c.NotebookApp.open_browser = False 3.安装并配置Nginx 注意 proxy_set的一些参数,这些是一定需要的。 123456789location /ipython { allow 192.168.1.0/24; #制定自己的网段即可 deny all; proxy_pass http://127.0.0.1:8888/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Origin ""; } 4.启动并访问 12jupyter notebook nginx 1http://host:nginxport/ipython/tree#notebooks","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"SSL-password验证\"><a href=\"#SSL-password验证\" class=\"headerlink\" title=\"SSL+password验证\"></a>SSL+password验证</h2><p>进入3.5.1环境</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pyenv activate env351</span><br></pre></td></tr></table></figure>\n<p>1.生成配置文件</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">jupyter notebook --generate-config</span><br></pre></td></tr></table></figure>\n<span id=\"more\"></span>\n<p>2.生成密码<br>输入<code>ipython</code></p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">In [1]: from notebook.auth import passwd</span><br><span class=\"line\">In [2]: passwd()</span><br><span class=\"line\">Enter password:</span><br><span class=\"line\">Verify password:</span><br><span class=\"line\">Out[2]: 'sha1:.........'</span><br></pre></td></tr></table></figure>\n<p>记下这里的sha1值,后面有用<br>3.生成ssl证书<br>输入<code>exit</code>退出命令模式</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd ~/.jupyter</span><br><span class=\"line\">openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem</span><br></pre></td></tr></table></figure>\n<p>生成证书时按要求输入信息即可<br>4.修改配置文件<code>jupyter_notebook_config.py</code><br>注意官方文档说需要ssl才能打开外部访问</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">c.NotebookApp.base_url = '/ipython/' --制定url的path,默认是根目录</span><br><span class=\"line\">c.NotebookApp.password = u'sha1:.....' --注意和生成的配套</span><br><span class=\"line\">c.NotebookApp.ip = '*' --目前没找到制定网段的方法</span><br><span class=\"line\">c.NotebookApp.open_browser = False</span><br><span class=\"line\">c.NotebookApp.certfile = '/root/.jupyter/mycert.pem'</span><br><span class=\"line\">c.NotebookApp.keyfile = '/root/.jupyter/mykey.key'</span><br></pre></td></tr></table></figure>\n<p>5.启动并访问</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">jupyter notebook </span><br></pre></td></tr></table></figure>\n<p>浏览器输入地址:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">https://host:8888/ipython/tree#notebooks</span><br></pre></td></tr></table></figure>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/QQ%E6%88%AA%E5%9B%BE20180807011038.png\"></p>\n<h2 id=\"Nginx-password验证方式\"><a href=\"#Nginx-password验证方式\" class=\"headerlink\" title=\"Nginx+password验证方式\"></a>Nginx+password验证方式</h2><p>1.生成配置文件</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">jupyter notebook --generate-config</span><br></pre></td></tr></table></figure>\n<p>2.修改配置文件jupyter_notebook_config.py,</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">c.NotebookApp.base_url = '/ipython/' --制定url的path,默认是根目录</span><br><span class=\"line\">c.NotebookApp.password = u'sha1:.....' --注意和生成的配套</span><br><span class=\"line\">c.NotebookApp.open_browser = False</span><br></pre></td></tr></table></figure>\n<p>3.安装并配置Nginx<br> 注意 proxy_set的一些参数,这些是一定需要的。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">location /ipython {</span><br><span class=\"line\"> allow 192.168.1.0/24; #制定自己的网段即可</span><br><span class=\"line\"> deny all;</span><br><span class=\"line\"> proxy_pass http://127.0.0.1:8888/;</span><br><span class=\"line\"> proxy_http_version 1.1;</span><br><span class=\"line\"> proxy_set_header Upgrade $http_upgrade;</span><br><span class=\"line\"> proxy_set_header Connection "upgrade";</span><br><span class=\"line\"> proxy_set_header Origin "";</span><br><span class=\"line\"> }</span><br></pre></td></tr></table></figure>\n<p> 4.启动并访问</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">jupyter notebook </span><br><span class=\"line\">nginx</span><br></pre></td></tr></table></figure>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">http://host:nginxport/ipython/tree#notebooks</span><br></pre></td></tr></table></figure>\n","slug":"笔记/2018-08-07.配置IPython Notebook提供非本地访问","comments":true,"categories":[],"tags":[]},{"title":"Ubuntu下安装pyenv、IPython Notebook和科学计算包的过程总结","date":"2018-08-06T17:24:14.000Z","path":"2018/08/07/笔记/2018-08-06.Ubuntu下安装pyenv、IPython Notebook和科学计算包的过程总结/","text":"1.安装pip 12wget --no-check-certificate https://bootstrap.pypa.io/get-pip.pysudo python get-pip.py 2.如果没有装git,需要安装 1sudo yum install git 3.安装python需要依赖的包 1sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev 4.安装配置pyenv到具体目录本次安装都是用 /pythontest 1234git clone https://github.com/yyuu/pyenv.git /pythontest/.pyenvecho 'export PYENV_ROOT="/pythontest/.pyenv"' >> ~/.bashrcecho 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrcecho 'eval "$(pyenv init -)"' >> ~/.bashrc 重启shell,使改动生效 1exec $SHELL 5.pyenv安装具体python版本 1234pyenv install 2.7.11 -vpyenv install 3.5.1 -vpyenv rehashpyenv versions 6.安装pyenv-virtualenv 1git clone https://github.com/yyuu/pyenv-virtualenv.git /pythontest/.pyenv/plugins/pyenv-virtualenv 其中/pythontest/.pyenv 是你安装pyenv的目录如果https不能使用,使用以下命令 1git clone git://github.com/yyuu/pyenv-virtualenv.git /pythontest/.pyenv/plugins/pyenv-virtualenv 其中/pythontest/.pyenv是你安装pyenv的目录 1exec "$SHELL" 重新加载shell,更新环境变量7.创建3.5.1虚拟环境,所有都在这个环境下应用 1pyenv virtualenv 3.5.1 env351 激活env351 1pyenv activate env351 8.安装IPython所需依赖的包 1sudo apt-get install g++ 9.安装IPython及 IPython Notebookpip install IPython遇到错误,查阅pip install error #10454,运行apt-get install python-dev安装IPython Notebook的依赖pip install urllib310.安装科学计算所需的依赖 1234sudo apt-get install libfreetype6-devsudo apt-get install gfortransudo apt-get install libopenblas-dev liblapack-devsudo apt-get install libpng12-0 libpng12-dev 11.验证测试:进入3.5.1环境,安装IPython Notebook 12pyenv activate env351pip install jupyter` 进入IPython notebook 1jupyter notebook 退出3.5.1环境 1pyenv deactivate","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>1.安装pip</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py</span><br><span class=\"line\">sudo python get-pip.py</span><br></pre></td></tr></table></figure>\n<p>2.如果没有装git,需要安装</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo yum install git</span><br></pre></td></tr></table></figure>\n<span id=\"more\"></span>\n<p>3.安装python需要依赖的包</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev</span><br></pre></td></tr></table></figure>\n<p>4.安装配置pyenv到具体目录<br>本次安装都是用 /pythontest</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git clone https://github.com/yyuu/pyenv.git /pythontest/.pyenv</span><br><span class=\"line\">echo 'export PYENV_ROOT="/pythontest/.pyenv"' >> ~/.bashrc</span><br><span class=\"line\">echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc</span><br><span class=\"line\">echo 'eval "$(pyenv init -)"' >> ~/.bashrc</span><br></pre></td></tr></table></figure>\n<p>重启shell,使改动生效</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">exec $SHELL</span><br></pre></td></tr></table></figure>\n<p>5.pyenv安装具体python版本</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pyenv install 2.7.11 -v</span><br><span class=\"line\">pyenv install 3.5.1 -v</span><br><span class=\"line\">pyenv rehash</span><br><span class=\"line\">pyenv versions</span><br></pre></td></tr></table></figure>\n<p>6.安装pyenv-virtualenv</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git clone https://github.com/yyuu/pyenv-virtualenv.git /pythontest/.pyenv/plugins/pyenv-virtualenv</span><br></pre></td></tr></table></figure>\n<p>其中<code>/pythontest/.pyenv </code>是你安装pyenv的目录<br>如果https不能使用,使用以下命令</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git clone git://github.com/yyuu/pyenv-virtualenv.git /pythontest/.pyenv/plugins/pyenv-virtualenv</span><br></pre></td></tr></table></figure>\n<p>其中<code>/pythontest/.pyenv</code>是你安装pyenv的目录</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">exec "$SHELL"</span><br></pre></td></tr></table></figure>\n<p>重新加载shell,更新环境变量<br>7.创建3.5.1虚拟环境,所有都在这个环境下应用</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pyenv virtualenv 3.5.1 env351</span><br></pre></td></tr></table></figure>\n<p>激活env351</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pyenv activate env351</span><br></pre></td></tr></table></figure>\n<p>8.安装IPython所需依赖的包</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get install g++</span><br></pre></td></tr></table></figure>\n<p>9.安装IPython及 IPython Notebook<br><code>pip install IPython</code><br>遇到错误,查阅<a href=\"https://github.com/ipython/ipython/issues/10454\">pip install error #10454</a>,运行<code>apt-get install python-dev</code><br>安装IPython Notebook的依赖<br><code>pip install urllib3</code><br>10.安装科学计算所需的依赖</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get install libfreetype6-dev</span><br><span class=\"line\">sudo apt-get install gfortran</span><br><span class=\"line\">sudo apt-get install libopenblas-dev liblapack-dev</span><br><span class=\"line\">sudo apt-get install libpng12-0 libpng12-dev</span><br></pre></td></tr></table></figure>\n<p>11.验证测试:<br>进入3.5.1环境,安装IPython Notebook</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pyenv activate env351</span><br><span class=\"line\">pip install jupyter`</span><br></pre></td></tr></table></figure>\n<p>进入IPython notebook</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">jupyter notebook</span><br></pre></td></tr></table></figure>\n<p>退出3.5.1环境</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pyenv deactivate</span><br></pre></td></tr></table></figure>","slug":"笔记/2018-08-06.Ubuntu下安装pyenv、IPython Notebook和科学计算包的过程总结","comments":true,"categories":[],"tags":[]},{"title":"个人读书经历","date":"2018-04-11T15:38:04.000Z","path":"2018/04/11/笔记/2018-04-11.个人读书经历/","text":"自己读书频率不高,也经常掺杂一些没有营养的,但经年累月后却有了可观的质量和数量。下面谈谈自己的读书经历,还有印象比较深的书。刚开始读书的时候很艰难,没有相应的环境,探索很久才能够发现一本有深度让自己有体悟的书,所以真正让自己喜欢上读书是因为玄幻小说,只不过后来通宵看发现都是一个模式之后转向经典寻找自己的精神诉求。另外以前没有相应的交流媒介,如果有前辈指导你怎么读,读什么,或者有同好分享书单和见解,那就能很快入门。不过后来随着网络信息渠道越来越便利,自己社交圈越来越广,知识越来越普及化,还有很多知识中介的出现——罗辑思维等付费知识平台、翻转电台等通识性节目,降低了知识获取的门槛(当然,也阻碍了人们思维的深度),读书也容易了许多。 计算机方面,在学校读的最多的就是教材,为了考试而读书,是一种灌输,毫无享受,能够达到掌握技能的程度已经不错了,别提真正能有什么心得,产生自己的见解。真正让自己对计算机有了认识的是计算机入门三宝书:《SICP》《CSAPP》《CLRS》。另外《黑客与画家》很多思想到现在也不过时。最早对自己有影响的书可能是《老子怎样说》,也是第一次对道家思想有了了解,当时身上有种种压力也有心结,但是读那本书的时候,觉得念头通达,精神都升华了,道家的一些理念也越来越对自己的路子。不过再往后读道家、道教的东西却没有什么收获,后来通过荣格、梭罗的书从侧面体悟到了道教思想的真意,用没有偏见的眼光去审视炼丹术等内涵,明白了其中真正的价值。高中学政治的时候接触的康德 ,生生的啃完了《纯粹理性批判》,虽然没看懂多少也有些许共鸣,后来逛豆瓣的时候发现了邓晓芒《纯粹理性批判指要》这本书,开始真正读懂了《纯粹理性批判》,有一种极大的解放感:一方面世界是被决定的,一方面人是有自由的,人是自由的,我们可以自由地创造新世界,人可以超出任何束缚。之后相信某种基于复杂性理论的决定论的,信仰“万物可计算”、“万物源于比特”,大概是读了《未来简史》、《终极算法》之类的书让自己有这种世界观。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>自己读书频率不高,也经常掺杂一些没有营养的,但经年累月后却有了可观的质量和数量。<br>下面谈谈自己的读书经历,还有印象比较深的书。<br>刚开始读书的时候很艰难,没有相应的环境,探索很久才能够发现一本有深度让自己有体悟的书,所以真正让自己喜欢上读书是因为玄幻小说,只不过后来通宵看发现都是一个模式之后转向经典寻找自己的精神诉求。另外以前没有相应的交流媒介,如果有前辈指导你怎么读,读什么,或者有同好分享书单和见解,那就能很快入门。不过后来随着网络信息渠道越来越便利,自己社交圈越来越广,知识越来越普及化,还有很多知识中介的出现——罗辑思维等付费知识平台、翻转电台等通识性节目,降低了知识获取的门槛(当然,也阻碍了人们思维的深度),读书也容易了许多。</p>\n<span id=\"more\"></span>\n<p>计算机方面,在学校读的最多的就是教材,为了考试而读书,是一种灌输,毫无享受,能够达到掌握技能的程度已经不错了,别提真正能有什么心得,产生自己的见解。真正让自己对计算机有了认识的是计算机入门三宝书:《SICP》《CSAPP》《CLRS》。另外《黑客与画家》很多思想到现在也不过时。<br>最早对自己有影响的书可能是《老子怎样说》,也是第一次对道家思想有了了解,当时身上有种种压力也有心结,但是读那本书的时候,觉得念头通达,精神都升华了,道家的一些理念也越来越对自己的路子。不过再往后读道家、道教的东西却没有什么收获,后来通过荣格、梭罗的书从侧面体悟到了道教思想的真意,用没有偏见的眼光去审视炼丹术等内涵,明白了其中真正的价值。<br>高中学政治的时候接触的康德 ,生生的啃完了《纯粹理性批判》,虽然没看懂多少也有些许共鸣,后来逛豆瓣的时候发现了邓晓芒《纯粹理性批判指要》这本书,开始真正读懂了《纯粹理性批判》,有一种极大的解放感:一方面世界是被决定的,一方面人是有自由的,人是自由的,我们可以自由地创造新世界,人可以超出任何束缚。<br>之后相信某种基于复杂性理论的决定论的,信仰“万物可计算”、“万物源于比特”,大概是读了《未来简史》、《终极算法》之类的书让自己有这种世界观。</p>\n","slug":"笔记/2018-04-11.个人读书经历","comments":true,"categories":[{"name":"结绳纪","slug":"结绳纪","permalink":"https://www.zhiiker.com/categories/%E7%BB%93%E7%BB%B3%E7%BA%AA/"}],"tags":[{"name":"读书","slug":"读书","permalink":"https://www.zhiiker.com/tags/%E8%AF%BB%E4%B9%A6/"}]},{"title":"同时把代码提交到两个git代码托管的服务器上","date":"2017-08-02T11:35:30.000Z","path":"2017/08/02/笔记/2017-08-02.同时把代码提交到两个git代码托管的服务器上/","text":"1234git remote add origin xxx git remote add another yyy git push origin master git push another master 或者 1vim .git/config 123[remote "origin"] url = ssh://server.example.org/home/ams/website.git url = ssh://other.exaple.org/home/foo/website.git","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git remote add origin xxx </span><br><span class=\"line\">git remote add another yyy </span><br><span class=\"line\">git push origin master </span><br><span class=\"line\">git push another master </span><br></pre></td></tr></table></figure>\n<span id=\"more\"></span>\n<p>或者</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim .git/config </span><br></pre></td></tr></table></figure>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[remote "origin"] </span><br><span class=\"line\">url = ssh://server.example.org/home/ams/website.git </span><br><span class=\"line\">url = ssh://other.exaple.org/home/foo/website.git</span><br></pre></td></tr></table></figure>","slug":"笔记/2017-08-02.同时把代码提交到两个git代码托管的服务器上","comments":true,"categories":[],"tags":[{"name":"git","slug":"git","permalink":"https://www.zhiiker.com/tags/git/"}]},{"title":"使用cpuminer在Linux环境下用CPU挖矿","date":"2017-08-01T11:35:30.000Z","path":"2017/08/01/笔记/2017-08-01.使用cpuminer在Linux环境下用CPU挖矿/","text":"注册账号先到MinerGate注册账号,然后到https://minergate.com/altminers/cpuminer-multi-wolf,就可以看到分配到的采矿地址,但是有了挖矿路径,怎么挖呢? 挖矿工具这里推荐 tpruvot/cpuminer-multi 作为 CPU 挖矿的工具,MinerGate 推荐的是 OhGodAPet/cpuminer-multi ,不过我觉得前者更新的更勤快,说不定有优化挖矿细节提高效率呢。为什么用命令行而不是 GUI 挖矿的呢?挖矿就是高效利用资源嘛,有显示器这不是铺张浪费嘛!! 安装这里以 Ubuntu 64bit 16.04LTS 编译为例1.安装依赖 1sudo apt-get install build-essential automake autoconf pkg-config libcurl4-openssl-dev libjansson-dev libssl-dev libgmp-dev make g++ git screen 2.下载源代码 1git clone https://github.com/tpruvot/cpuminer-multi.git 3.编译 12cd cpuminer-multi./build.sh 挖矿到https://minergate.com/altminers/cpuminer-multi-wolf链接里提供的命令minerd改成./cpuminer即可。 为了保证关闭 SSH 终端后,脚本还会继续运行,需要在之前运行 screen 命令: 1screen -S miner 例如,我选择挖 BCN(比特币),原来的代码是: 1minerd -a cryptonight -o stratum+tcp://bcn.pool.minergate.com:45550 -u YOUR_Email@www.mf8.biz -p x 那么完整的流程就是: 123cd cpuminer-multiscreen -S miner./cpuminer -a cryptonight -o stratum+tcp://bcn.pool.minergate.com:45550 -u YOUR_Email@www.mf8.biz -p x 这就是挖矿过程的截图:点击MinerGate网站这个位置可以看到挖矿的情况挖了老半天的收益,所以还是得靠 A卡 用GPU挖矿啊,CPU挖矿还是不行的,不过确实是把闲置的CPU算力运用起来的好方法。 后记screen参数说明 123456789101112-A 将所有的视窗都调整为目前终端机的大小。-d <作业名称> 将指定的screen作业离线。-h <行数> 指定视窗的缓冲区行数。-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。-r <作业名称> 恢复离线的screen作业。-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。-s 指定建立新视窗时,所要执行的shell。-S <作业名称> 指定screen作业的名称。-v 显示版本信息。-x 恢复之前离线的screen作业。-ls或--list 显示目前所有的screen作业。-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。 挖矿软件下载地址Windows 64bit:https://minergate.com/download/win Windows 32bit:https://minergate.com/download/win32 Ubuntu 16.04 64bit or later(推荐挖矿速度较快):https://minergate.com/download/ubuntu Ubuntu 14.xx 15.xx 64bit:https://minergate.com/download/deb Mac os(不推):https://minergate.com/download/mac Android(极慢但如果有空闲手机放着也是躺着赚,我自己两台android跑大概15~25H/s):https://play.google.com/store/apps/details?id=com.minergate.miner","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"注册账号\"><a href=\"#注册账号\" class=\"headerlink\" title=\"注册账号\"></a>注册账号</h2><p>先到<a href=\"https://minergate.com/\">MinerGate</a>注册账号,然后到<code>https://minergate.com/altminers/cpuminer-multi-wolf</code>,就可以看到分配到的采矿地址,但是有了挖矿路径,怎么挖呢?</p>\n<span id=\"more\"></span>\n\n<h2 id=\"挖矿工具\"><a href=\"#挖矿工具\" class=\"headerlink\" title=\"挖矿工具\"></a>挖矿工具</h2><p>这里推荐 tpruvot/cpuminer-multi 作为 CPU 挖矿的工具,MinerGate 推荐的是 OhGodAPet/cpuminer-multi ,不过我觉得前者更新的更勤快,说不定有优化挖矿细节提高效率呢。<br>为什么用命令行而不是 GUI 挖矿的呢?挖矿就是高效利用资源嘛,有显示器这不是铺张浪费嘛!!</p>\n<h2 id=\"安装\"><a href=\"#安装\" class=\"headerlink\" title=\"安装\"></a>安装</h2><p>这里以 Ubuntu 64bit 16.04LTS 编译为例<br>1.安装依赖</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get install build-essential automake autoconf pkg-config libcurl4-openssl-dev libjansson-dev libssl-dev libgmp-dev make g++ git screen</span><br></pre></td></tr></table></figure>\n<p>2.下载源代码</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git clone https://github.com/tpruvot/cpuminer-multi.git</span><br></pre></td></tr></table></figure>\n<p>3.编译</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd cpuminer-multi</span><br><span class=\"line\">./build.sh</span><br></pre></td></tr></table></figure>\n<h2 id=\"挖矿\"><a href=\"#挖矿\" class=\"headerlink\" title=\"挖矿\"></a>挖矿</h2><p>到<code>https://minergate.com/altminers/cpuminer-multi-wolf</code>链接里提供的命令<code>minerd</code>改成<code>./cpuminer</code>即可。</p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/258be978cad2703fee9432c98c65c824_mv1xs.png\"></p>\n<p>为了保证关闭 SSH 终端后,脚本还会继续运行,需要在之前运行 screen 命令:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">screen -S miner</span><br></pre></td></tr></table></figure>\n<p>例如,我选择挖 BCN(比特币),原来的代码是:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">minerd -a cryptonight -o stratum+tcp://bcn.pool.minergate.com:45550 -u YOUR_Email@www.mf8.biz -p x</span><br></pre></td></tr></table></figure>\n<p>那么完整的流程就是:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd cpuminer-multi</span><br><span class=\"line\">screen -S miner</span><br><span class=\"line\">./cpuminer -a cryptonight -o stratum+tcp://bcn.pool.minergate.com:45550 -u YOUR_Email@www.mf8.biz -p x</span><br></pre></td></tr></table></figure>\n<p>这就是挖矿过程的截图:<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/82c48ffc78994c115adb995301743ba5_e5390.jpg\"><br>点击<a href=\"https://minergate.com/\">MinerGate</a>网站这个位置可以看到挖矿的情况<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-08-01-19-46-38.jpg\"><br>挖了老半天的收益,所以还是得靠 A卡 用GPU挖矿啊,CPU挖矿还是不行的,不过确实是把闲置的CPU算力运用起来的好方法。</p>\n<h2 id=\"后记\"><a href=\"#后记\" class=\"headerlink\" title=\"后记\"></a>后记</h2><p>screen参数说明</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">-A 将所有的视窗都调整为目前终端机的大小。</span><br><span class=\"line\">-d <作业名称> 将指定的screen作业离线。</span><br><span class=\"line\">-h <行数> 指定视窗的缓冲区行数。</span><br><span class=\"line\">-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。</span><br><span class=\"line\">-r <作业名称> 恢复离线的screen作业。</span><br><span class=\"line\">-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。</span><br><span class=\"line\">-s 指定建立新视窗时,所要执行的shell。</span><br><span class=\"line\">-S <作业名称> 指定screen作业的名称。</span><br><span class=\"line\">-v 显示版本信息。</span><br><span class=\"line\">-x 恢复之前离线的screen作业。</span><br><span class=\"line\">-ls或--list 显示目前所有的screen作业。</span><br><span class=\"line\">-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。</span><br></pre></td></tr></table></figure>\n<h2 id=\"挖矿软件下载地址\"><a href=\"#挖矿软件下载地址\" class=\"headerlink\" title=\"挖矿软件下载地址\"></a>挖矿软件下载地址</h2><p>Windows 64bit:<br><a href=\"https://minergate.com/download/win\">https://minergate.com/download/win</a></p>\n<p>Windows 32bit:<br><a href=\"https://minergate.com/download/win32\">https://minergate.com/download/win32</a></p>\n<p>Ubuntu 16.04 64bit or later(推荐挖矿速度较快):<br><a href=\"https://minergate.com/download/ubuntu\">https://minergate.com/download/ubuntu</a></p>\n<p>Ubuntu 14.xx 15.xx 64bit:<br><a href=\"https://minergate.com/download/deb\">https://minergate.com/download/deb</a></p>\n<p>Mac os(不推):<br><a href=\"https://minergate.com/download/mac\">https://minergate.com/download/mac</a></p>\n<p>Android(极慢但如果有空闲手机放着也是躺着赚,我自己两台android跑大概15~25H/s):<br><a href=\"https://play.google.com/store/apps/details?id=com.minergate.miner\">https://play.google.com/store/apps/details?id=com.minergate.miner</a></p>\n","slug":"笔记/2017-08-01.使用cpuminer在Linux环境下用CPU挖矿","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"区块链","slug":"区块链","permalink":"https://www.zhiiker.com/tags/%E5%8C%BA%E5%9D%97%E9%93%BE/"},{"name":"CPU","slug":"CPU","permalink":"https://www.zhiiker.com/tags/CPU/"}]},{"title":"解决Hexo deploy失败","date":"2017-07-26T16:00:00.000Z","path":"2017/07/27/笔记/2017-07-27.解决Hexo deploy失败/","text":"Hexo使用hexo d出现以下错误 1234567891011121314151617(node:2616) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated.INFO Deploying: gitINFO Clearing .deploy_git folder...INFO Copying files from public folder...INFO Copying files from extend dirs...fatal: Not a git repository (or any of the parent directories): .gitFATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.htmlError: fatal: Not a git repository (or any of the parent directories): .git at ChildProcess.<anonymous> (A:\\hexo\\node_modules\\hexo-util\\lib\\spawn.js:37:17) at emitTwo (events.js:125:13) at ChildProcess.emit (events.js:213:7) at ChildProcess.cp.emit (A:\\hexo\\node_modules\\cross-spawn\\lib\\enoent.js:40:29) at maybeClose (internal/child_process.js:897:16) at Socket.stream.socket.on (internal/child_process.js:340:11) at emitOne (events.js:115:13) at Socket.emit (events.js:210:7) 删掉根目录下的文件夹:.deploy_git,重新deploy就可以了。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>Hexo使用<code>hexo d</code><br>出现以下错误</p>\n<span id=\"more\"></span>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">(node:2616) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated.</span><br><span class=\"line\">INFO Deploying: git</span><br><span class=\"line\">INFO Clearing .deploy_git folder...</span><br><span class=\"line\">INFO Copying files from public folder...</span><br><span class=\"line\">INFO Copying files from extend dirs...</span><br><span class=\"line\">fatal: Not a git repository (or any of the parent directories): .git</span><br><span class=\"line\">FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html</span><br><span class=\"line\">Error: fatal: Not a git repository (or any of the parent directories): .git</span><br><span class=\"line\"></span><br><span class=\"line\"> at ChildProcess.<anonymous> (A:\\hexo\\node_modules\\hexo-util\\lib\\spawn.js:37:17)</span><br><span class=\"line\"> at emitTwo (events.js:125:13)</span><br><span class=\"line\"> at ChildProcess.emit (events.js:213:7)</span><br><span class=\"line\"> at ChildProcess.cp.emit (A:\\hexo\\node_modules\\cross-spawn\\lib\\enoent.js:40:29)</span><br><span class=\"line\"> at maybeClose (internal/child_process.js:897:16)</span><br><span class=\"line\"> at Socket.stream.socket.on (internal/child_process.js:340:11)</span><br><span class=\"line\"> at emitOne (events.js:115:13)</span><br><span class=\"line\"> at Socket.emit (events.js:210:7)</span><br></pre></td></tr></table></figure>\n<p>删掉根目录下的文件夹:.deploy_git,重新deploy就可以了。</p>\n","slug":"笔记/2017-07-27.解决Hexo deploy失败","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"hexo","slug":"hexo","permalink":"https://www.zhiiker.com/tags/hexo/"}]},{"title":"Dropbox + VPS + Incrond+Hexo搭建博客小记","date":"2017-07-19T10:03:23.000Z","path":"2017/07/19/笔记/2017-07-19.Dropbox + VPS + Incrond+Hexo搭建博客小记/","text":"安装前准备 首先登陆vps需要执行如下命令更新各种依赖 为防止机器没有安装epel,先安装epel(必须安装) 升级 CentOs 内核 yum -y update 安装 Git yum install git-core 导入key1rpm --import http://download-i2.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 安装epel,分别是32位和64位12rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmrpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 然后安装yum-priorities1yum install yum-priorities -y 安装好后用命令看下,如果成功的话输出内容里有epel字样1yum repolist 安装Node.js12sudo yum install nodejs sudo yum install npm --enablerepo=epel 安装Dropbox 网上给出的教程试了好几次都有问题,自己搜到了正确的姿势参考说明:nstall Dropbox In An Entirely Text-Based Linux Environment安装代码如下:123456cd32位wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86"64位wget https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86_64-30.4.22.tar.gztar -xvzf dropbox-lnx.x86_64-30.4.22.tar.gz 然后执行,登录Dropbox的账号。1~/.dropbox-dist/dropboxd 首次打开需要你验证账户。选择有右键复制上面一段,浏览器打开,登录你的Dropbox账号,授权这台机器参与你的网盘同步,关联成功会出现如下画面,Ctrl+C一下 注意:进入连接后,一定要等刷新完毕后再点,并且不能结束终端,等到关联成功的消息。 Dropbox使用切换到dropbox.py脚本所在位置查看dropbox 工作状态./dropbox.py status开始同步 ./dropbox.py start停止同步 ./dropbox.py stop帮助 ./dropbox.py exclude help 选择性同步文件夹例如你不需要同步Dropbox/books/目录,进入Dropbox目录cd ~/Dropbox,运行exclude来排除books目录: 1./dropboxy.py exclude add books #当前目录最好在Dropbox 更多不需要同步的目录: 1./dropboxy.py exclude add book photos Public Documents #排除Dropbox目录下books, photos, Public, Documents等目录 安装hexo 在刚才上面的结束之后 ls一下看看12[root@vultr ~]# lsDropbox dropbox.tar.gz----这行是结果 别执行 切进去Dropbox目录1cd Dropbox 接下来创建博客的目录12mkdir hexocd hexo 开始正式安装hexo1234npm install hexo-cli -g 网上教程里的很多命令在256或者128内存下全部是坑,因为内存关系安装不了hexo init 初始化hexo的意思hexo generate 可缩写为:hexo ghexo server 可缩写为:hexo s 这时端口4000被打开了,我们能过浏览器打开地址,http://<服务器ip>:4000/. 访问测试一下看能不能看到首页,如果看不到或者结果不是OK,请排查错误。 添加防火墙例外 1-A INPUT -p tcp -m state --state NEW -m tcp --dport 4000 -j ACCEPT 或直接关闭防火墙 1234567 临时生效,重启后复原开启: service iptables start关闭: service iptables stop 永久性生效,重启后不会复原开启: chkconfig iptables on关闭: chkconfig iptables off 这个时候可以去你的Dropbox网盘里看看有没有hexo目录,并且目录结构如下 下载Dropbox官方提供的一个用于管理的 Python 脚本 wget https://linux.dropbox.com/packages/dropbox.py 所有命令可以点击这里查看 增加这个脚本的权限 chmod +x ./dropbox.py 加入到自启动 ./dropbox.py autostart y然而实际测试发现这个在重启后 root 用户登录后没有自动启动,需要手动登录到 dbox 用户下进行启动,启动代码为 ./dropbox.py start 可以用 ps -e命令来查看当前进程看看有没有成功启动 关闭局域网同步 ./dropbox.py lansync n 话说不关应该也没事 安装并配置Nginx注意:如果有单独数据盘,建议您先挂载数据盘,建议将网站内容、数据库放在数据盘中。如何挂载数据盘,请参考(支持阿里云、腾讯云):《如何利用脚本自动化挂载数据盘?》 安装步骤参考:安装说明1234567891011121314yum -y install wget screen curl python #for CentOS/Redhat # apt-get -y install wget screen curl python #for Debian/Ubuntu wget http://aliyun-oss.linuxeye.com/oneinstack-full.tar.gz #阿里云用户下载 wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz #包含源码,国内外均可下载 wget http://mirrors.linuxeye.com/oneinstack.tar.gz #不包含源码,建议仅国外主机下载 tar xzf oneinstack-full.tar.gz cd oneinstack #如果需要修改目录(安装、数据存储、Nginx日志),请修改options.conf文件 screen -S oneinstack #如果网路出现中断,可以执行命令`screen -r oneinstack`重新连接安装窗口 ./install.sh #注:请勿sh install.sh或者bash install.sh这样执行 安装好之后添加虚拟主机12cd oneinstack./vhost.sh 修改Nginx配置文件这里路径缓存你自己的虚拟主机路径,也就是你自己的域名1vim /usr/local/nginx/conf/vhost/blog.liangs.me.conf (你的配置文件名) 如果只想要静态的页面123456789server { listen 80; #listen [::]:80; server_name blog.liangs.me; (你的站点域名) index index.html index.htm index.php default.html default.htm default.php; root /root/Dropbox/hexo/public; (hexo的目录) ... } 如果要想实现hexo s后实时动态的页面12345678server { listen 80; server_name blog.liangs.me; location / { proxy_pass http://127.0.0.1:4000/; }} 增加文件夹权限,否则会出现[permission denied]错误无法同步文件。根据你的目录来,还有我是直接都赋予777属性(所有人可以读写运行)了以防出错,123chmod -R 755 /root/Dropbox/hexo/publicchown www:www /root/Dropbox/hexo/publicchmod +x /root/ /root/Dropbox/ /root/Dropbox/hexo/ 然后重启nginx1service nginx restart 内容同步发布 安装和配置 incrond 检测文件变化。incrond 可以监控指定目录的文件指定变化(删除修改打开移动等等),并且运行指定命令。1yum install incron 启动并加入自启12service incrond startchkconfig incrond on 修改默认编辑器为 Vi (貌似默认编辑器本来是一个 GUI,我们远程状态下没有 GUI)1echo 'editor = vi' >> /etc/incron.conf 这个时候使用以下命令来进行编辑1incrontab -e 打开后添加:123456/home/ubuntu/Dropbox/hexo/source/_posts/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/source/_posts/笔记/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/source/_posts/结绳纪/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/source/_posts/拾摘/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/source/_posts/萱苏小筑/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh/home/ubuntu/Dropbox/hexo/themes/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh 设置定时任务,方法参照这里 1* */1 * * * sh /root/runhexo.sh 会使用到的一些命令 123service incrond stopservice incrond startservice incrond status 最后写 runhexo 这个脚本 首先我们可以用以下指令新建空文本 touch runhexo.sh 注意要在 root 目录下创建。目录要对应你在 incrontab 的里写的目录。 然后打开文件进行编辑 vim /root/runhexo.sh 代码如下:123456#!/usr/bin/env bashexec 200<$0flock -n 200 || exit 1sleep 10cd /root/Dropbox/hexo && hexo clean && hexo g && hexo dcd /root/Dropbox/hexo/source/ && git add -A && git commit -m "auto commit" && git push 上面push到github还需要配置SSH等步骤,见后面的描述。以上代码会在特定时间内只允许一个脚本实例运行。运行后会清理 Hexo 原有的静态文件, 生成新的静态文件以供读取,并且会自动传到相应的Github上的repo备份。好了到这里就应该可以了。然后可以 debug 测试一下,并且可以关机给服务器搞个 snapshot 快照进行备份,以防以后出错 (重启后记得手动运行一下 Dropbox)。 使用hexo-hey插件为博客添加后台编辑hexo-hey项目地址:https://github.com/nihgwu/hexo-hey安装: 1npm install hexo-hey --save 配置_config.yml文件添加如下几行 1234567# Adminadmin: name: hexo password: hey secret: hey hexo expire: 60*1 # cors: http://localhost:3000 运行 1hexo serve 这个时候你的博客网站的管理后台就可以远程的在你 VPS 的 IP地址的4000端口访问到。比如 <vps的ip>:4000/admin。 配置Github/Coding多账号管理SSH Key 单个网站通过Https链接,避免22端口关闭错误。测试https端口连通性1ssh -T -p 443 git@ssh.github.com 添加ssh配置文件1vim ~/.ssh/config 写入内容123Host gh.neting.ccHostname ssh.gh.neting.ccPort 443 多网站多账号SSH Key配置 生成Github和Coidng的SSH Key12ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C “wmwwmv@gmail.com”ssh-keygen -t rsa -f ~/.ssh/id_rsa_coding -C "wmwwmv@163.com” 检查key是否生成1ls ~/.ssh 添加private key12ssh-add ~/.ssh/id_rsa_githubssh-add ~/.ssh/id_rsa_coding 如果执行ssh-add时提示”Could not open a connection to your authentication agent”,可以先执行命令:1ssh-agent bash 然后再运行ssh-add命令。可以通过 ssh-add -l 来确私钥列表1ssh-add -l 可以通过 ssh-add -D 来清空私钥列表1ssh-add -D 修改配置文件1234567891011121314#GithubHost gh.neting.ccHostName ssh.gh.neting.ccPort 443User wmwwmv@gmail.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_github#codingHost git.coding.netHostname git-ssh.coding.netUser wmwwmv@163.comPort 443PreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_coding 上传public key 到 GitHub/CoidngGitHub设置过程如下:登录github,点击右上方的图标,点击“Settings” 选择“SSH and GPG keys”,点击“New SSH key”,在出现的界面中填写SSH key的名称,填一个你自己喜欢的名称即可,然后将上面拷贝的 ~/.ssh/id_isa_github.pub 文件内容粘帖到 key 一栏,在点击“Add SSH key”按钮就可以了。 添加过程github会提示你输入一次你的github密码 ,确认后即添加完毕。 测试123456# 测试github$ ssh -T git@github.com# 测试Coding$ ssh -T git@git.coding.net# 测试gitlab$ ssh -T git@gitlab.example.com _config.yml配置 123456deploy: type: git repo: github: git@github.com:wmwwmv/wmwwmv.github.io.git coding: git@git.coding.net:shichao/xiaozhu.git branch: master 遇到的问题hexo deploy时重复输入用户名密码的问题每次部署执行hexo deploy都需要输入用户名问题原因及解决方案:最主要的原因可能是你没有采用git@github.com而是用https//github.com修改后重新提交部署: 注意 为了避免上传一次就重新将pulic .git文件夹就同步一次,所以在本地Dropbox上要选择性同步。 想利用分布式解析国内解析到coding 国外解析到github,结果国内访问github比coding还快这里可以解析国内到Coding的repo解析国外到github的repo 后记利用supervisor让hexo服务常驻后台在supervisord.conf这个文件末尾加上 12[include]files = /etc/supervisor/*.conf 新建hexo-server.conf文件写脚本 12345678[program:hexo-server]command = hexo sdirectory = /root/Dropbox/hexouser=rootautostart = trueautorestart = truestdout_logfile = /var/log/supervisor/hexo.logstderr_logfile = /var/log/supervisor/hexo_err.log supervisor的一些命令 12345678supervisord,初始启动Supervisord,启动、管理配置中设置的进程。supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。supervisorctl start programxxx, 启动某个进程supervisorctl restart programxxx,重启某个进程supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)supervisorctl stop all, 停止全部进程,注:start、restart、stop都不会载入最新的配置文件。supervisorctl reload, 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。supervisorctl update, 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。 Git同步之前需要先做些准备工作:1cd /root/Dropbox/hexo/source/ && git add 404 readme.md about _drafts _posts about tags resources && git commit -m "auto commit" && git remote add origin git@github.com:wmwwmv/BlogBackup.git && git push -u origin master 使用MarkdownEditor的fileshook命令1hexo clean && hexo g && hexo d && cd source/ && git add -A && git commit -m "auto commit" && git push 然后将第三方云设置成七牛的图床就更加完美了,不仅能拖入普遍自动生成链接,还可以自动发布。 参考 centos 使用 Dropbox 同步 CentOS入门 >centos7关闭防火墙 hexo deploy时重复输入用户名密码的问题 CentOS7上GitHub/GitLab多帐号管理SSH Key Hexo+Dropbox+VPS搭建博客小记","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-17-16-56-13.jpg\"></p>\n<h2 id=\"安装前准备\"><a href=\"#安装前准备\" class=\"headerlink\" title=\"安装前准备\"></a>安装前准备</h2><ol>\n<li>首先登陆vps需要执行如下命令更新各种依赖</li>\n<li>为防止机器没有安装epel,先安装epel(必须安装)</li>\n</ol>\n<ul>\n<li>升级 CentOs 内核 <code>yum -y update</code></li>\n<li>安装 Git <code>yum install git-core</code><span id=\"more\"></span>\n导入key<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">rpm --import http://download-i2.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6</span><br></pre></td></tr></table></figure>\n安装epel,分别是32位和64位<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm</span><br><span class=\"line\">rpm -Uvh http://download-i2.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm</span><br></pre></td></tr></table></figure>\n然后安装yum-priorities<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum install yum-priorities -y</span><br></pre></td></tr></table></figure>\n安装好后用命令看下,如果成功的话输出内容里有epel字样<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum repolist</span><br></pre></td></tr></table></figure></li>\n</ul>\n<ol start=\"3\">\n<li>安装Node.js<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo yum install nodejs\t</span><br><span class=\"line\">sudo yum install npm --enablerepo=epel</span><br></pre></td></tr></table></figure>\n<h2 id=\"安装Dropbox\"><a href=\"#安装Dropbox\" class=\"headerlink\" title=\"安装Dropbox\"></a>安装Dropbox</h2></li>\n<li>网上给出的教程试了好几次都有问题,自己搜到了正确的姿势<br>参考说明:<a href=\"http://www.dropboxwiki.com/tips-and-tricks/install-dropbox-in-an-entirely-text-based-linux-environment\">nstall Dropbox In An Entirely Text-Based Linux Environment</a><br>安装代码如下:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd</span><br><span class=\"line\">32位</span><br><span class=\"line\">wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86"</span><br><span class=\"line\">64位</span><br><span class=\"line\">wget https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.x86_64-30.4.22.tar.gz</span><br><span class=\"line\">tar -xvzf dropbox-lnx.x86_64-30.4.22.tar.gz</span><br></pre></td></tr></table></figure>\n然后执行,登录Dropbox的账号。<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">~/.dropbox-dist/dropboxd</span><br></pre></td></tr></table></figure>\n首次打开需要你验证账户。选择有右键复制上面一段,浏览器打开,登录你的Dropbox账号,授权这台机器参与你的网盘同步,关联成功会出现如下画面,Ctrl+C一下<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-16-21-05.jpg\"></li>\n</ol>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-16-24-40.jpg\"></p>\n<p>注意:进入连接后,一定要等刷新完毕后再点,并且不能结束终端,等到关联成功的消息。</p>\n<h3 id=\"Dropbox使用\"><a href=\"#Dropbox使用\" class=\"headerlink\" title=\"Dropbox使用\"></a>Dropbox使用</h3><p>切换到dropbox.py脚本所在位置<br>查看dropbox 工作状态<code>./dropbox.py status</code><br>开始同步 <code>./dropbox.py start</code><br>停止同步 <code>./dropbox.py stop</code><br>帮助 <code>./dropbox.py exclude help</code></p>\n<h4 id=\"选择性同步文件夹\"><a href=\"#选择性同步文件夹\" class=\"headerlink\" title=\"选择性同步文件夹\"></a>选择性同步文件夹</h4><p>例如你不需要同步<code>Dropbox/books/</code>目录,进入Dropbox目录<code>cd ~/Dropbox</code>,运行exclude来排除books目录:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./dropboxy.py exclude add books #当前目录最好在Dropbox</span><br></pre></td></tr></table></figure>\n<p>更多不需要同步的目录:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./dropboxy.py exclude add book photos Public Documents #排除Dropbox目录下books, photos, Public, Documents等目录</span><br></pre></td></tr></table></figure>\n\n<h2 id=\"安装hexo\"><a href=\"#安装hexo\" class=\"headerlink\" title=\"安装hexo\"></a>安装hexo</h2><ol>\n<li>在刚才上面的结束之后 ls一下看看<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@vultr ~]# ls</span><br><span class=\"line\">Dropbox dropbox.tar.gz----这行是结果 别执行</span><br></pre></td></tr></table></figure></li>\n<li>切进去Dropbox目录<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd Dropbox</span><br></pre></td></tr></table></figure></li>\n<li>接下来创建博客的目录<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mkdir hexo</span><br><span class=\"line\">cd hexo</span><br></pre></td></tr></table></figure></li>\n<li>开始正式安装hexo<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">npm install hexo-cli -g 网上教程里的很多命令在256或者128内存下全部是坑,因为内存关系安装不了</span><br><span class=\"line\">hexo init 初始化hexo的意思</span><br><span class=\"line\">hexo generate 可缩写为:hexo g</span><br><span class=\"line\">hexo server 可缩写为:hexo s</span><br></pre></td></tr></table></figure>\n这时端口4000被打开了,我们能过浏览器打开地址,http://<服务器ip>:4000/. 访问测试一下看能不能看到首页,如果看不到或者结果不是OK,请排查错误。</li>\n</ol>\n<p>添加防火墙例外</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">-A INPUT -p tcp -m state --state NEW -m tcp --dport 4000 -j ACCEPT</span><br></pre></td></tr></table></figure>\n\n<p>或直接关闭防火墙</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> 临时生效,重启后复原</span><br><span class=\"line\">开启: service iptables start</span><br><span class=\"line\">关闭: service iptables stop</span><br><span class=\"line\"> </span><br><span class=\"line\">永久性生效,重启后不会复原</span><br><span class=\"line\">开启: chkconfig iptables on</span><br><span class=\"line\">关闭: chkconfig iptables off</span><br></pre></td></tr></table></figure>\n<p>这个时候可以去你的Dropbox网盘里看看有没有hexo目录,并且目录结构如下</p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-16-29-41.jpg\"></p>\n<ul>\n<li>下载Dropbox官方提供的一个用于管理的 Python 脚本 <code>wget https://linux.dropbox.com/packages/dropbox.py</code> 所有命令可以点击<a href=\"https://www.dropbox.com/help/desktop-web/linux-commands\">这里</a>查看</li>\n<li>增加这个脚本的权限 <code>chmod +x ./dropbox.py</code></li>\n<li>加入到自启动 <code>./dropbox.py autostart y</code>然而实际测试发现这个在重启后 root 用户登录后没有自动启动,需要手动登录到 dbox 用户下进行启动,启动代码为<code> ./dropbox.py start</code> 可以用 <code>ps -e</code>命令来查看当前进程看看有没有成功启动</li>\n<li>关闭局域网同步 <code>./dropbox.py lansync n </code>话说不关应该也没事<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-16-34-25.jpg\"></li>\n</ul>\n<h2 id=\"安装并配置Nginx\"><a href=\"#安装并配置Nginx\" class=\"headerlink\" title=\"安装并配置Nginx\"></a>安装并配置Nginx</h2><p>注意:如果有单独数据盘,建议您先挂载数据盘,建议将网站内容、数据库放在数据盘中。如何挂载数据盘,请参考(支持阿里云、腾讯云):<a href=\"http://oneinstack.com/question/how-to-mount-a-data-disc/\">《如何利用脚本自动化挂载数据盘?》</a></p>\n<ol>\n<li>安装步骤参考:<a href=\"https://oneinstack.com/install/\">安装说明</a><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum -y install wget screen curl python <span class=\"comment\">#for CentOS/Redhat # </span></span><br><span class=\"line\">apt-get -y install wget screen curl python <span class=\"comment\">#for Debian/Ubuntu wget http://aliyun-oss.linuxeye.com/oneinstack-full.tar.gz </span></span><br><span class=\"line\"><span class=\"comment\">#阿里云用户下载 </span></span><br><span class=\"line\">wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz </span><br><span class=\"line\"><span class=\"comment\">#包含源码,国内外均可下载 </span></span><br><span class=\"line\">wget http://mirrors.linuxeye.com/oneinstack.tar.gz </span><br><span class=\"line\"><span class=\"comment\">#不包含源码,建议仅国外主机下载 </span></span><br><span class=\"line\">tar xzf oneinstack-full.tar.gz </span><br><span class=\"line\"><span class=\"built_in\">cd</span> oneinstack </span><br><span class=\"line\"><span class=\"comment\">#如果需要修改目录(安装、数据存储、Nginx日志),请修改options.conf文件 </span></span><br><span class=\"line\">screen -S oneinstack </span><br><span class=\"line\"><span class=\"comment\">#如果网路出现中断,可以执行命令`screen -r oneinstack`重新连接安装窗口 </span></span><br><span class=\"line\">./install.sh </span><br><span class=\"line\"><span class=\"comment\">#注:请勿sh install.sh或者bash install.sh这样执行</span></span><br></pre></td></tr></table></figure></li>\n<li>安装好之后添加虚拟主机<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd oneinstack</span><br><span class=\"line\">./vhost.sh</span><br></pre></td></tr></table></figure></li>\n<li>修改Nginx配置文件<br>这里路径缓存你自己的虚拟主机路径,也就是你自己的域名<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/nginx/conf/vhost/blog.liangs.me.conf (你的配置文件名)</span><br></pre></td></tr></table></figure>\n如果只想要静态的页面<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">server</span><br><span class=\"line\"> {</span><br><span class=\"line\"> listen 80;</span><br><span class=\"line\"> #listen [::]:80;</span><br><span class=\"line\"> server_name blog.liangs.me; (你的站点域名)</span><br><span class=\"line\"> index index.html index.htm index.php default.html default.htm default.php;</span><br><span class=\"line\"> root /root/Dropbox/hexo/public; (hexo的目录)</span><br><span class=\"line\"> ...</span><br><span class=\"line\"> }</span><br></pre></td></tr></table></figure>\n如果要想实现<code>hexo s</code>后实时动态的页面<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">server {</span><br><span class=\"line\"> listen 80;</span><br><span class=\"line\"> server_name blog.liangs.me;</span><br><span class=\"line\"></span><br><span class=\"line\"> location / {</span><br><span class=\"line\"> proxy_pass http://127.0.0.1:4000/;</span><br><span class=\"line\"> }</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n增加文件夹权限,否则会出现[permission denied]错误无法同步文件。根据你的目录来,还有我是直接都赋予777属性(所有人可以读写运行)了以防出错,<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">chmod -R 755 /root/Dropbox/hexo/public</span><br><span class=\"line\">chown www:www /root/Dropbox/hexo/public</span><br><span class=\"line\">chmod +x /root/ /root/Dropbox/ /root/Dropbox/hexo/</span><br></pre></td></tr></table></figure>\n然后重启nginx<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">service nginx restart</span><br></pre></td></tr></table></figure>\n<h2 id=\"内容同步发布\"><a href=\"#内容同步发布\" class=\"headerlink\" title=\"内容同步发布\"></a>内容同步发布</h2></li>\n<li>安装和配置 incrond 检测文件变化。incrond 可以监控指定目录的文件指定变化(删除修改打开移动等等),并且运行指定命令。<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum install incron</span><br></pre></td></tr></table></figure>\n启动并加入自启<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">service incrond start</span><br><span class=\"line\">chkconfig incrond on</span><br></pre></td></tr></table></figure>\n修改默认编辑器为 Vi (貌似默认编辑器本来是一个 GUI,我们远程状态下没有 GUI)<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">echo 'editor = vi' >> /etc/incron.conf</span><br></pre></td></tr></table></figure>\n这个时候使用以下命令来进行编辑<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">incrontab -e</span><br></pre></td></tr></table></figure>\n打开后添加:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/笔记/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/结绳纪/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/拾摘/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/source/_posts/萱苏小筑/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br><span class=\"line\">/home/ubuntu/Dropbox/hexo/themes/ IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVE /home/ubuntu/Dropbox/hexo/hexo.sh</span><br></pre></td></tr></table></figure>\n设置定时任务,方法参照<a href=\"http://www.liangshichao.com/2017/03/19/%E7%AC%94%E8%AE%B0/2017-03-19.Linux%20%E4%B8%8B%E6%89%A7%E8%A1%8C%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%20crontab%20%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3/\">这里</a></li>\n</ol>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">* */1 * * * sh /root/runhexo.sh</span><br></pre></td></tr></table></figure>\n<p>会使用到的一些命令</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">service incrond stop</span><br><span class=\"line\">service incrond start</span><br><span class=\"line\">service incrond status</span><br></pre></td></tr></table></figure>\n<p>最后写 runhexo 这个脚本</p>\n<ul>\n<li>首先我们可以用以下指令新建空文本 <code>touch runhexo.sh</code> 注意要在 root 目录下创建。目录要对应你在 incrontab 的里写的目录。</li>\n<li>然后打开文件进行编辑 <code>vim /root/runhexo.sh</code> </li>\n<li>代码如下:<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/usr/bin/env bash</span></span><br><span class=\"line\"><span class=\"built_in\">exec</span> 200<<span class=\"variable\">$0</span></span><br><span class=\"line\">flock -n 200 || <span class=\"built_in\">exit</span> 1</span><br><span class=\"line\">sleep 10</span><br><span class=\"line\"><span class=\"built_in\">cd</span> /root/Dropbox/hexo && hexo clean && hexo g && hexo d</span><br><span class=\"line\"><span class=\"built_in\">cd</span> /root/Dropbox/hexo/<span class=\"built_in\">source</span>/ && git add -A && git commit -m <span class=\"string\">"auto commit"</span> && git push</span><br></pre></td></tr></table></figure>\n上面push到github还需要配置SSH等步骤,见后面的描述。<br>以上代码会在特定时间内只允许一个脚本实例运行。运行后会清理 Hexo 原有的静态文件, 生成新的静态文件以供读取,并且会自动传到相应的Github上的repo备份。<br>好了到这里就应该可以了。然后可以 debug 测试一下,并且可以关机给服务器搞个 snapshot 快照进行备份,以防以后出错 (重启后记得手动运行一下 Dropbox)。</li>\n</ul>\n<h2 id=\"使用hexo-hey插件为博客添加后台编辑\"><a href=\"#使用hexo-hey插件为博客添加后台编辑\" class=\"headerlink\" title=\"使用hexo-hey插件为博客添加后台编辑\"></a>使用hexo-hey插件为博客添加后台编辑</h2><p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-17-20-09.jpg\"><br>hexo-hey项目地址:<a href=\"https://github.com/nihgwu/hexo-hey\">https://github.com/nihgwu/hexo-hey</a><br>安装:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">npm install hexo-hey --save</span><br></pre></td></tr></table></figure>\n<p>配置<code>_config.yml</code>文件<br>添加如下几行</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"># Admin</span><br><span class=\"line\">admin:</span><br><span class=\"line\"> name: hexo</span><br><span class=\"line\"> password: hey</span><br><span class=\"line\"> secret: hey hexo</span><br><span class=\"line\"> expire: 60*1</span><br><span class=\"line\"> # cors: http://localhost:3000</span><br></pre></td></tr></table></figure>\n<p>运行</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">hexo serve</span><br></pre></td></tr></table></figure>\n<p>这个时候你的博客网站的管理后台就可以远程的在你 VPS 的 IP地址的4000端口访问到。比如 <code><vps的ip>:4000/admin</code>。</p>\n<h2 id=\"配置Github-Coding多账号管理SSH-Key\"><a href=\"#配置Github-Coding多账号管理SSH-Key\" class=\"headerlink\" title=\"配置Github/Coding多账号管理SSH Key\"></a>配置Github/Coding多账号管理SSH Key</h2><ol>\n<li>单个网站通过Https链接,避免22端口关闭错误。<br>测试https端口连通性<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh -T -p 443 git@ssh.github.com</span><br></pre></td></tr></table></figure>\n添加ssh配置文件<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim ~/.ssh/config</span><br></pre></td></tr></table></figure>\n写入内容<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">Host github.com</span><br><span class=\"line\">Hostname ssh.github.com</span><br><span class=\"line\">Port 443</span><br></pre></td></tr></table></figure></li>\n<li>多网站多账号SSH Key配置</li>\n</ol>\n<ul>\n<li>生成Github和Coidng的SSH Key<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C “wmwwmv@gmail.com”</span><br><span class=\"line\">ssh-keygen -t rsa -f ~/.ssh/id_rsa_coding -C "wmwwmv@163.com”</span><br></pre></td></tr></table></figure>\n检查key是否生成<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ls ~/.ssh</span><br></pre></td></tr></table></figure></li>\n<li>添加private key<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-add ~/.ssh/id_rsa_github</span><br><span class=\"line\">ssh-add ~/.ssh/id_rsa_coding</span><br></pre></td></tr></table></figure>\n如果执行ssh-add时提示”Could not open a connection to your authentication agent”,可以先执行命令:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-agent bash</span><br></pre></td></tr></table></figure>\n然后再运行ssh-add命令。<br>可以通过 ssh-add -l 来确私钥列表<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-add -l</span><br></pre></td></tr></table></figure>\n可以通过 ssh-add -D 来清空私钥列表<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-add -D</span><br></pre></td></tr></table></figure></li>\n<li>修改配置文件<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#Github</span></span><br><span class=\"line\">Host github.com</span><br><span class=\"line\">HostName ssh.github.com</span><br><span class=\"line\">Port 443</span><br><span class=\"line\">User wmwwmv@gmail.com</span><br><span class=\"line\">PreferredAuthentications publickey</span><br><span class=\"line\">IdentityFile ~/.ssh/id_rsa_github</span><br><span class=\"line\"><span class=\"comment\">#coding</span></span><br><span class=\"line\">Host git.coding.net</span><br><span class=\"line\">Hostname git-ssh.coding.net</span><br><span class=\"line\">User wmwwmv@163.com</span><br><span class=\"line\">Port 443</span><br><span class=\"line\">PreferredAuthentications publickey</span><br><span class=\"line\">IdentityFile ~/.ssh/id_rsa_coding</span><br></pre></td></tr></table></figure></li>\n<li>上传public key 到 GitHub/Coidng<br>GitHub设置过程如下:<br>登录github,点击右上方的图标,点击“Settings”</li>\n</ul>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-17-56-16.jpg\"><br>选择“SSH and GPG keys”,点击“New SSH key”,在出现的界面中填写SSH key的名称,填一个你自己喜欢的名称即可,然后将上面拷贝的 ~/.ssh/id_isa_github.pub 文件内容粘帖到 key 一栏,在点击“Add SSH key”按钮就可以了。</p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2017-07-19-17-56-29.jpg\"><br>添加过程github会提示你输入一次你的github密码 ,确认后即添加完毕。</p>\n<ul>\n<li>测试<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"># 测试github</span><br><span class=\"line\">$ ssh -T git@github.com</span><br><span class=\"line\"># 测试Coding</span><br><span class=\"line\">$ ssh -T git@git.coding.net</span><br><span class=\"line\"># 测试gitlab</span><br><span class=\"line\">$ ssh -T git@gitlab.example.com</span><br></pre></td></tr></table></figure>\n<code>_config.yml</code>配置</li>\n</ul>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">deploy:</span><br><span class=\"line\"> type: git</span><br><span class=\"line\"> repo: </span><br><span class=\"line\"> github: git@github.com:wmwwmv/wmwwmv.github.io.git</span><br><span class=\"line\"> coding: git@git.coding.net:shichao/xiaozhu.git</span><br><span class=\"line\"> branch: master</span><br></pre></td></tr></table></figure>\n\n<h2 id=\"遇到的问题\"><a href=\"#遇到的问题\" class=\"headerlink\" title=\"遇到的问题\"></a>遇到的问题</h2><h3 id=\"hexo-deploy时重复输入用户名密码的问题\"><a href=\"#hexo-deploy时重复输入用户名密码的问题\" class=\"headerlink\" title=\"hexo deploy时重复输入用户名密码的问题\"></a>hexo deploy时重复输入用户名密码的问题</h3><p>每次部署执行hexo deploy都需要输入用户名<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/b84f46c31486c0689dcb46fe856a3408_hexo-01.png\"><br>问题原因及解决方案:<br>最主要的原因可能是你没有采用<a href=\"mailto:git@github.com\">git@github.com</a><br><img src=\"https://images.liangs.me/bitcron/Notes/_image/ff716f897db6f52aae3fe00d8a7e6ca5_hexo-04.png\"><br>而是用https//github.com<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/5a6545da6f259e0f0ee8a92550861cda_hexo-03.png\"><br>修改后重新提交部署:<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/9ac59c621f8f09f44cf517c55e0bec7d_hexo-02.png\"></p>\n<h2 id=\"注意\"><a href=\"#注意\" class=\"headerlink\" title=\"注意\"></a>注意</h2><ul>\n<li>为了避免上传一次就重新将pulic .git文件夹就同步一次,所以在本地Dropbox上要选择性同步。</li>\n<li>想利用分布式解析国内解析到coding 国外解析到github,结果国内访问github比coding还快<br>这里可以解析国内到Coding的repo解析国外到github的repo</li>\n</ul>\n<h2 id=\"后记\"><a href=\"#后记\" class=\"headerlink\" title=\"后记\"></a>后记</h2><p>利用supervisor让hexo服务常驻后台<br>在<code>supervisord.conf</code>这个文件末尾加上</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[include]</span><br><span class=\"line\">files = /etc/supervisor/*.conf</span><br></pre></td></tr></table></figure>\n<p>新建<code>hexo-server.conf</code>文件<br>写脚本</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[program:hexo-server]</span><br><span class=\"line\"><span class=\"built_in\">command</span> = hexo s</span><br><span class=\"line\">directory = /root/Dropbox/hexo</span><br><span class=\"line\">user=root</span><br><span class=\"line\">autostart = <span class=\"literal\">true</span></span><br><span class=\"line\">autorestart = <span class=\"literal\">true</span></span><br><span class=\"line\">stdout_logfile = /var/<span class=\"built_in\">log</span>/supervisor/hexo.log</span><br><span class=\"line\">stderr_logfile = /var/<span class=\"built_in\">log</span>/supervisor/hexo_err.log</span><br></pre></td></tr></table></figure>\n<p>supervisor的一些命令</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">supervisord,初始启动Supervisord,启动、管理配置中设置的进程。</span><br><span class=\"line\">supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。</span><br><span class=\"line\">supervisorctl start programxxx, 启动某个进程</span><br><span class=\"line\">supervisorctl restart programxxx,重启某个进程</span><br><span class=\"line\">supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)</span><br><span class=\"line\">supervisorctl stop all, 停止全部进程,注:start、restart、stop都不会载入最新的配置文件。</span><br><span class=\"line\">supervisorctl reload, 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。</span><br><span class=\"line\">supervisorctl update, 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。</span><br></pre></td></tr></table></figure>\n<ul>\n<li>Git同步之前需要先做些准备工作:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd /root/Dropbox/hexo/source/ && git add 404 readme.md about _drafts _posts about tags resources && git commit -m "auto commit" && git remote add origin git@github.com:wmwwmv/BlogBackup.git && git push -u origin master</span><br></pre></td></tr></table></figure></li>\n<li>使用MarkdownEditor的fileshook<br>命令<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">hexo clean && hexo g && hexo d && cd source/ && git add -A && git commit -m "auto commit" && git push</span><br></pre></td></tr></table></figure>\n然后将第三方云设置成七牛的图床就更加完美了,不仅能拖入普遍自动生成链接,还可以自动发布。</li>\n</ul>\n<h2 id=\"参考\"><a href=\"#参考\" class=\"headerlink\" title=\"参考\"></a>参考</h2><ul>\n<li><a href=\"https://blog.imfer.me/#!/post/2014-04-25-centos-install-dropbox\">centos 使用 Dropbox 同步</a></li>\n<li><a href=\"http://www.centoscn.com/CentOS/2015/0313/4877.html\">CentOS入门 >centos7关闭防火墙</a></li>\n<li><a href=\"http://www.imooc.com/article/4433\">hexo deploy时重复输入用户名密码的问题</a></li>\n<li><a href=\"http://www.cnblogs.com/edward2013/p/5396254.html\">CentOS7上GitHub/GitLab多帐号管理SSH Key</a></li>\n<li><a href=\"https://ipe6.com/?p=28\">Hexo+Dropbox+VPS搭建博客小记</a></li>\n</ul>\n","slug":"笔记/2017-07-19.Dropbox + VPS + Incrond+Hexo搭建博客小记","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Hexo","slug":"Hexo","permalink":"https://www.zhiiker.com/tags/Hexo/"},{"name":"Dropbox","slug":"Dropbox","permalink":"https://www.zhiiker.com/tags/Dropbox/"},{"name":"Incrond","slug":"Incrond","permalink":"https://www.zhiiker.com/tags/Incrond/"}]},{"title":"将不同地方文件夹同步到Dropbox","date":"2017-07-17T13:32:17.000Z","path":"2017/07/17/笔记/2017-07-17.将不同地方文件夹同步到Dropbox/","text":"使用软链接命令就可以解决。在windows下使用 1mklink /d <Dropbox文件夹地址> <需要同步文件夹地址>","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>使用软链接命令就可以解决。<br>在windows下使用</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mklink /d <Dropbox文件夹地址> <需要同步文件夹地址></span><br></pre></td></tr></table></figure>","slug":"笔记/2017-07-17.将不同地方文件夹同步到Dropbox","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Dropbox","slug":"Dropbox","permalink":"https://www.zhiiker.com/tags/Dropbox/"}]},{"title":"fs.SyncWriteStream is deprecated","date":"2017-07-16T16:00:00.000Z","path":"2017/07/17/笔记/2017-07-17.fs.SyncWriteStream is deprecated/","text":"出现这个错误需要更新hexo-fs插件使用 1npm install hexo-fs --save 解决后又出现了问题查阅http://rangerzhou.top/2017/07/27/Hexo%E5%8D%9A%E5%AE%A2%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9/解决 在执行hexo命令的时候,总会显示如下报错: 1(node:7048) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated. 从报错信息来看是因为fs.SyncWriteStream is deprecated,node.js从8.0开始已经弃用了fs.SyncWriteStream方法,所以是因为我们node_modules中某个插件调用了这个方法,通过查看Hexo作者GitHub对应的项目,在issue中看到有人提到这个问题,在hexo项目中其中有一个hexo-fs的插件调用了这个方法,所以需要更新hexo-fs插件,更新方法如下: 1npm install hexo-fs --save 更新插件后问题解决。 但是不知道怎么回事,后面又出现了这个报错,而且更新插件也不管用了,强迫症忍不了啊,网上查了很久都找不到解决方法,终于自食其力,hexo命令有个–debug参数,我们在运行hexo命令的时候添加上这个参数,就能知道在哪里报的错误,如此就能定位问题所在,例如: 123456789101112131415161718192021222324252627282930313233$ hexo clean --debug 02:35:27.359 DEBUG Hexo version: 3.3.8 02:35:27.362 DEBUG Working directory: E:\\github\\blog\\ 02:35:27.502 DEBUG Config loaded: E:\\github\\blog\\_config.yml 02:35:27.531 DEBUG Plugin loaded: hexo-generator-archive 02:35:27.534 DEBUG Plugin loaded: hexo-generator-category 02:35:27.542 DEBUG Plugin loaded: hexo-generator-feed 02:35:27.550 DEBUG Plugin loaded: hexo-generator-baidu-sitemap 02:35:27.554 DEBUG Plugin loaded: hexo-generator-index 02:35:27.582 DEBUG Plugin loaded: hexo-deployer-git (node:5760) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated. 02:35:27.593 DEBUG Plugin loaded: hexo-generator-searchdb 02:35:27.597 DEBUG Plugin loaded: hexo-generator-sitemap 02:35:27.603 DEBUG Plugin loaded: hexo-fs 02:35:27.608 DEBUG Plugin loaded: hexo-renderer-ejs 02:35:27.616 DEBUG Plugin loaded: hexo-renderer-marked 02:35:27.697 DEBUG Plugin loaded: hexo-renderer-less 02:35:27.700 DEBUG Plugin loaded: hexo-renderer-stylus 02:35:27.775 DEBUG Plugin loaded: hexo-wordcount 02:35:27.878 DEBUG Plugin loaded: hexo-server 02:35:27.883 DEBUG Script loaded: themes\\next\\scripts\\merge-configs.js 02:35:27.887 DEBUG Script loaded: themes\\next\\scripts\\merge.js 02:35:27.890 DEBUG Plugin loaded: hexo-generator-tag 02:35:27.891 DEBUG Script loaded: themes\\next\\scripts\\tags\\center-quote.js 02:35:27.892 DEBUG Script loaded: themes\\next\\scripts\\tags\\button.js 02:35:27.893 DEBUG Script loaded: themes\\next\\scripts\\tags\\full-image.js 02:35:27.895 DEBUG Script loaded: themes\\next\\scripts\\tags\\group-pictures.js 02:35:28.260 DEBUG Plugin loaded: hexo-renderer-jade 02:35:28.264 DEBUG Script loaded: themes\\next\\scripts\\tags\\exturl.js 02:35:28.265 DEBUG Script loaded: themes\\next\\scripts\\tags\\lazy-image.js 02:35:28.266 DEBUG Script loaded: themes\\next\\scripts\\tags\\note.js 02:35:28.268 INFO Deleted database. 02:35:28.271 DEBUG Database saved 可以看到我所在报错的位置是hexo-deployer-git,于是在hexo-deployer-git中搜索: 12$ grep -irn "SyncWriteStream" .\\node_modules\\hexo-deployer-git\\.\\hexo-deployer-git\\/node_modules/hexo-fs/lib/fs.js:718:exports.SyncWriteStream = fs.SyncWriteStream; 可以看到是在.\\hexo-deployer-git/node_modules/hexo-fs/lib/fs.js的第718行用到的,进去后把这一行注释掉问题就解决了,但是为什么会在hexo-deployer-git中有个node_modules,而且在其中还有个hexo-fs呢,因为在根目录node_modules中也有个hexo-fs目录,进去hexo-deployer-git官方Github网址查看是没有node_modules目录的,但是通过npm命令npm install hexo-deployer-git –save安装的hexo-deployer-git是有的,所以应该是npm源没有更新? 总之是解决了这个强迫症难以忍受的问题,通过–debug参数定位问题。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>出现这个错误需要更新hexo-fs插件<br>使用</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">npm install hexo-fs --save</span><br></pre></td></tr></table></figure>\n<p>解决后又出现了问题<br>查阅<a href=\"http://rangerzhou.top/2017/07/27/Hexo%E5%8D%9A%E5%AE%A2%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9/\">http://rangerzhou.top/2017/07/27/Hexo%E5%8D%9A%E5%AE%A2%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9/</a><br>解决</p>\n<span id=\"more\"></span>\n\n<p>在执行hexo命令的时候,总会显示如下报错:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">(node:7048) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated.</span><br></pre></td></tr></table></figure>\n<p>从报错信息来看是因为fs.SyncWriteStream is deprecated,node.js从8.0开始已经弃用了fs.SyncWriteStream方法,所以是因为我们node_modules中某个插件调用了这个方法,通过查看Hexo作者GitHub对应的项目,在issue中看到有人提到这个问题,在hexo项目中其中有一个hexo-fs的插件调用了这个方法,所以需要更新hexo-fs插件,更新方法如下:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">npm install hexo-fs --save</span><br></pre></td></tr></table></figure>\n<p>更新插件后问题解决。</p>\n<p>但是不知道怎么回事,后面又出现了这个报错,而且更新插件也不管用了,强迫症忍不了啊,网上查了很久都找不到解决方法,终于自食其力,hexo命令有个–debug参数,我们在运行hexo命令的时候添加上这个参数,就能知道在哪里报的错误,如此就能定位问题所在,例如:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo clean --debug </span><br><span class=\"line\">02:35:27.359 DEBUG Hexo version: 3.3.8 </span><br><span class=\"line\">02:35:27.362 DEBUG Working directory: E:\\github\\blog\\ </span><br><span class=\"line\">02:35:27.502 DEBUG Config loaded: E:\\github\\blog\\_config.yml </span><br><span class=\"line\">02:35:27.531 DEBUG Plugin loaded: hexo-generator-archive </span><br><span class=\"line\">02:35:27.534 DEBUG Plugin loaded: hexo-generator-category </span><br><span class=\"line\">02:35:27.542 DEBUG Plugin loaded: hexo-generator-feed </span><br><span class=\"line\">02:35:27.550 DEBUG Plugin loaded: hexo-generator-baidu-sitemap </span><br><span class=\"line\">02:35:27.554 DEBUG Plugin loaded: hexo-generator-index </span><br><span class=\"line\">02:35:27.582 DEBUG Plugin loaded: hexo-deployer-git </span><br><span class=\"line\">(node:5760) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated. </span><br><span class=\"line\">02:35:27.593 DEBUG Plugin loaded: hexo-generator-searchdb </span><br><span class=\"line\">02:35:27.597 DEBUG Plugin loaded: hexo-generator-sitemap </span><br><span class=\"line\">02:35:27.603 DEBUG Plugin loaded: hexo-fs </span><br><span class=\"line\">02:35:27.608 DEBUG Plugin loaded: hexo-renderer-ejs </span><br><span class=\"line\">02:35:27.616 DEBUG Plugin loaded: hexo-renderer-marked </span><br><span class=\"line\">02:35:27.697 DEBUG Plugin loaded: hexo-renderer-less </span><br><span class=\"line\">02:35:27.700 DEBUG Plugin loaded: hexo-renderer-stylus </span><br><span class=\"line\">02:35:27.775 DEBUG Plugin loaded: hexo-wordcount </span><br><span class=\"line\">02:35:27.878 DEBUG Plugin loaded: hexo-server </span><br><span class=\"line\">02:35:27.883 DEBUG Script loaded: themes\\next\\scripts\\merge-configs.js </span><br><span class=\"line\">02:35:27.887 DEBUG Script loaded: themes\\next\\scripts\\merge.js </span><br><span class=\"line\">02:35:27.890 DEBUG Plugin loaded: hexo-generator-tag </span><br><span class=\"line\">02:35:27.891 DEBUG Script loaded: themes\\next\\scripts\\tags\\center-quote.js </span><br><span class=\"line\">02:35:27.892 DEBUG Script loaded: themes\\next\\scripts\\tags\\button.js </span><br><span class=\"line\">02:35:27.893 DEBUG Script loaded: themes\\next\\scripts\\tags\\full-image.js </span><br><span class=\"line\">02:35:27.895 DEBUG Script loaded: themes\\next\\scripts\\tags\\group-pictures.js </span><br><span class=\"line\">02:35:28.260 DEBUG Plugin loaded: hexo-renderer-jade </span><br><span class=\"line\">02:35:28.264 DEBUG Script loaded: themes\\next\\scripts\\tags\\exturl.js </span><br><span class=\"line\">02:35:28.265 DEBUG Script loaded: themes\\next\\scripts\\tags\\lazy-image.js </span><br><span class=\"line\">02:35:28.266 DEBUG Script loaded: themes\\next\\scripts\\tags\\note.js </span><br><span class=\"line\">02:35:28.268 INFO Deleted database. </span><br><span class=\"line\">02:35:28.271 DEBUG Database saved</span><br></pre></td></tr></table></figure>\n<p>可以看到我所在报错的位置是hexo-deployer-git,于是在hexo-deployer-git中搜索:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ grep -irn "SyncWriteStream" .\\node_modules\\hexo-deployer-git\\</span><br><span class=\"line\">.\\hexo-deployer-git\\/node_modules/hexo-fs/lib/fs.js:718:exports.SyncWriteStream = fs.SyncWriteStream;</span><br></pre></td></tr></table></figure>\n<p>可以看到是在.\\hexo-deployer-git/node_modules/hexo-fs/lib/fs.js的第718行用到的,进去后把这一行注释掉问题就解决了,但是为什么会在hexo-deployer-git中有个node_modules,而且在其中还有个hexo-fs呢,因为在根目录node_modules中也有个hexo-fs目录,进去hexo-deployer-git官方Github网址查看是没有node_modules目录的,但是通过npm命令npm install hexo-deployer-git –save安装的hexo-deployer-git是有的,所以应该是npm源没有更新?</p>\n<p>总之是解决了这个强迫症难以忍受的问题,通过–debug参数定位问题。</p>\n","slug":"笔记/2017-07-17.fs.SyncWriteStream is deprecated","comments":true,"categories":[],"tags":[]},{"title":"使用Seafile+ossfs+oss搭建属于自己的私有云盘","date":"2017-07-12T13:37:28.000Z","path":"2017/07/12/笔记/2017-07-11.使用Seafile+ossfs+oss搭建属于自己的私有云盘/","text":"在今年2月份左右写了一篇博客,但是略潦草,现在重新实现,重新写一篇博客。 准备工作VPS这里使用的是便宜的腾讯云学生机,Ubuntu14.04LTS 64bit系统。 OSS阿里有赠送OSS流量的活动,单独买40G/年的服务也不贵。 安装ossfs 注意:在这之前你需要先开通oss,最好是和你的ECS是一个地区的,当然不是用的ECS也可以用,只是速度会慢一些,还有就是下载会使用公网流量,上传没有 点击打开ossfs的下载页面下载对应系统的安装包,地址 我以Ubuntu为例,安装ossfs,其他系统看官方的文档就行12sudo apt-get updatesudo apt-get install gdebi-core 下载包安装12wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32196/cn_zh/1496671441720/ossfs_1.80.2_ubuntu14.04_amd64.debsudo gdebi ossfs_1.80.2_ubuntu14.04_amd64.deb 切到root权限,将my-bucket这个bucket挂载到/cloud目录下,AccessKeyId是faint, AccessKeySecret是123,oss endpoint是http://oss-cn-hangzhou.aliyuncs.com123echo my-bucket:faint:123 > /etc/passwd-ossfschmod 640 /etc/passwd-ossfsmkdir /cloud 将OSS bucket mount到指定目录。最后一步很重要,不能直接照官方文档上面的来,不然安装的时候可能会出现没有访问权限的问题。 首先先看一下用户id,以我的是root为例。会返回给你用户的uid和gid等等,我假设返回的uid和gid都为01ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -ouid=0 -ogid=0 -o allow_other -o umask=007 这里面allow_other是允许其他用户访问,但是默认设置的是777权限这样owncloud会提示不安全,用umask=007挂载为770权限,不知道为啥这里0代表7,7表示0。 卸载bucket:1fusermount -u /tmp/ossfs 出现的错误使用-f进行调试。“ossfs: could not determine how to establish security credentials”搜索后发现文章(已解决)OSSfs折腾一个星期了 麻烦大大们进来看下是因为没有找到passwd-ossfs文件,如果在~/.passwd-ossfs文件已经存在,把它的所有者改成www:sudo chown www ~/.passwd-ossfs后来提示用户组不对,使用chgrp更改用户组,权限要改成600,取消组内所有权限。安装Seafile安装Seafile依赖关系 所列依赖关系列表 Java运行时环境(JRE) Poppler-utils Libreoffice 4.1+和Python-uno libpython 2.7 Python库(确保在此安装中包含python 2.7,您可以使用图像1.2上的命令来验证,如果已经安装了该命令,如果没有,则使用此命令apt-get install python 2.7 ,并且如果您收到“您安装需要setuptools> = …“,那么您可以使用pip安装setuptools –no-use-wheel –upgrade )。 您还需要安装使用 easy_install pip和pip安装boto 如图1.3和1.4所示)以root用户身份运行以下命令来安装所需的软件:1apt-get install openjdk-7-jre poppler-utils libreoffice libreoffice-script-provider-python libpython2.7 python-pip mysql-server python-setuptools python-imaging python-mysqldb python-memcache 在这个过程中会提示输入MySql密码,输入两次,并记住。现在我将检查安装的python版本是否符合Seafile的要求:1python -V 正如你在屏幕截图中看到的那样,python版本是2.7.6,所以它在所支持的python版本的范围内。[图像1.2]接下来我将使用easy_install安装pip软件包1easy_install pip [图像1.3]和boto包 1pip install boto [图像1.4]接下来为您的语言安装一些额外的字体(例如WenQuanYi,如果我们要使用中文) 1apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy 用MySQL安装Seafile首先,您需要验证您的系统是32位还是64位系统。 1uname -m 我的服务器是一个64位系统。 32个或64位可以使用两种选择,这两种选项都可以在Seafile的下载页面http://seafile.com/en/download/上获得 。 选择自己的系统以及系统版本使用wget下载,放到/opt/目录下Ubuntu 系统下载包 1wget http://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_6.0.9_x86-64.tar.gz 接下来,将要创建所需的目录。首先,我需要创建一个目录名“ guide ”,你可以使用任何描述你的组织的名字。 1mkdir /root/guide 然后将文件移动到我们创建的目录 1mv seafile-server_6.0.9_x86-64.tar.gz /root/guide 切换到/root/guide目录使用tar命令解压 1tar -xzf seafile-server_6.0.9_x86-64.tar.gz 接下来创建一个安装的目录 。 1mkdir installed 我们可能会将文件seafile-server_6.0.9_x86-64.tar.gz移动到安装的新创建的目录 。 1mv seafile-server_6.0.9_x86-64.tar.gz /installed 如我们的版本的目录结构所述,一切都应该在正确的位置。 配置MySQL数据库seafile由3个核心部件组成。 我们需要为这个给定的组件创建一个数据库。 ccnet服务器 seafile服务器 seahub现在正在为列出的给定数据库创建mysql数据库,帐户和设置权限。 (这只是一个例子,您可以在数据库名称上创建自己的设计)。 海底部件 数据库名称 帐户 ccnet服务器 ccnet-db seafile seafile服务器 seafile-db seafile seahub seahub-db seafile 以root用户身份登录到mysql 1mysql -u root -p 输入之前安装设置的MySql密码,然后在mysql shell中发出这些命令: 1234567create database`ccnet-db`character set =utf8; create database`seafile-db`character set =utf8; create database`seahub-db`character set =utf8; create user 'seafile'@'localhost' identified by 'seafile';grant all privileges on `ccnet-db`.* to `seafile`@localhost;grant all privileges on `seafile-db`.* to `seafile`@localhost;grant all privileges on `seahub-db`.* to `seafile`@localhost; 输入exit退出 设置seafile服务器所需包: python 2.7 python-setuptools python-imaging python-mysqldb通过使用此命令:(以验证其是否已安装)1apt-get install python2.7 python-setuptools python-imaging python-mysqldb 接下来你需要安装seafile服务器。 转到目录seafile-server-6.0.9然后运行脚本setup-seafile-mysql.sh 。 123cd seafile-server-6.0.9ls -lrt./setup-seafile-mysql.sh 下面是需要填写的问题,根据自己情况填写,data地址填oss映射地址这里是/cloud/data后面端口可以默认。 启动Seafile服务器需要切到/seafile-server-6.0.9目录 123cd /root/guide/seafile-server-6.0.9ls -al./seafile.sh start 然后开始seahub。 默认端口为8000。 1./seahub.sh start 现在可以用浏览器访问了,地址栏输入相应的ip地址 1http://123.207.155.108:8000/ 登录后,您将看到seafile web管理页面。 参考使用lnmp+owncloud+ossfs+oss搭建属于自己的私有云盘手动搭建属于自己的私有云-seafile安装教程如何安装Seafile在Ubuntu 14.04(Trusty Tahr)","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>在今年2月份左右写了一篇<a href=\"https://bavel.top/post/notes/2017-02-24.da-jian-zi-ji-de-si-you-yun-pan\">博客</a>,但是略潦草,现在重新实现,重新写一篇博客。</p>\n<h2 id=\"准备工作\"><a href=\"#准备工作\" class=\"headerlink\" title=\"准备工作\"></a>准备工作</h2><h3 id=\"VPS\"><a href=\"#VPS\" class=\"headerlink\" title=\"VPS\"></a>VPS</h3><p>这里使用的是便宜的腾讯云学生机,Ubuntu14.04LTS 64bit系统。</p>\n<h3 id=\"OSS\"><a href=\"#OSS\" class=\"headerlink\" title=\"OSS\"></a>OSS</h3><p>阿里有赠送OSS流量的活动,单独买40G/年的服务也不贵。</p>\n<span id=\"more\"></span>\n<h2 id=\"安装ossfs\"><a href=\"#安装ossfs\" class=\"headerlink\" title=\"安装ossfs\"></a>安装ossfs</h2><blockquote>\n<p>注意:在这之前你需要先开通oss,最好是和你的ECS是一个地区的,当然不是用的ECS也可以用,只是速度会慢一些,还有就是下载会使用公网流量,上传没有</p>\n</blockquote>\n<ol>\n<li>点击打开ossfs的下载页面下载对应系统的安装包,<a href=\"https://help.aliyun.com/document_detail/32196.html\">地址</a></li>\n<li>我以Ubuntu为例,安装ossfs,其他系统看官方的文档就行<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get update</span><br><span class=\"line\">sudo apt-get install gdebi-core</span><br></pre></td></tr></table></figure>\n下载包安装<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32196/cn_zh/1496671441720/ossfs_1.80.2_ubuntu14.04_amd64.deb</span><br><span class=\"line\">sudo gdebi ossfs_1.80.2_ubuntu14.04_amd64.deb</span><br></pre></td></tr></table></figure></li>\n<li>切到root权限,将<code>my-bucke</code>t这个bucket挂载到<code>/cloud</code>目录下,AccessKeyId是<code>faint</code>, AccessKeySecret是<code>123</code>,oss endpoint是<code>http://oss-cn-hangzhou.aliyuncs.com</code><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">echo my-bucket:faint:123 > /etc/passwd-ossfs</span><br><span class=\"line\">chmod 640 /etc/passwd-ossfs</span><br><span class=\"line\">mkdir /cloud</span><br></pre></td></tr></table></figure></li>\n<li>将OSS bucket mount到指定目录。<br>最后一步很重要,不能直接照官方文档上面的来,不然安装的时候可能会出现没有访问权限的问题。</li>\n</ol>\n<ul>\n<li>首先先看一下用户id,以我的是root为例。<br>会返回给你用户的uid和gid等等,我假设返回的uid和gid都为0<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -ouid=0 -ogid=0 -o allow_other -o umask=007</span><br></pre></td></tr></table></figure>\n这里面<code>allow_other</code>是允许其他用户访问,但是默认设置的是777权限这样owncloud会提示不安全,用<code>umask=007</code>挂载为770权限,不知道为啥这里0代表7,7表示0。</li>\n</ul>\n<ol start=\"5\">\n<li>卸载bucket:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">fusermount -u /tmp/ossfs</span><br></pre></td></tr></table></figure></li>\n<li>出现的错误<br>使用<code>-f</code>进行调试。<br>“ossfs: could not determine how to establish security credentials”<br>搜索后发现文章<br><a href=\"https://bbs.aliyun.com/simple/?t270049.html\">(已解决)OSSfs折腾一个星期了 麻烦大大们进来看下</a><br>是因为没有找到passwd-ossfs文件,如果在~/.passwd-ossfs文件已经存在,把它的所有者改成www:<br><code>sudo chown www ~/.passwd-ossfs</code><br>后来提示用户组不对,使用<code>chgrp</code>更改用户组,权限要改成600,取消组内所有权限。<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/bced3e29b34639325f98d7b4d0f3263c_8754f030c45ed7d84efdf69cc788ba1a_2017-02-24-12-27-49.png\"><h2 id=\"安装Seafile\"><a href=\"#安装Seafile\" class=\"headerlink\" title=\"安装Seafile\"></a>安装Seafile</h2><h3 id=\"安装Seafile依赖关系\"><a href=\"#安装Seafile依赖关系\" class=\"headerlink\" title=\"安装Seafile依赖关系\"></a>安装Seafile依赖关系</h3></li>\n</ol>\n<p><strong>所列依赖关系列表</strong></p>\n<ul>\n<li>Java运行时环境(JRE)</li>\n<li>Poppler-utils</li>\n<li>Libreoffice 4.1+和Python-uno</li>\n<li>libpython 2.7</li>\n<li>Python库(确保在此安装中包含python 2.7,您可以使用图像1.2上的命令来验证,如果已经安装了该命令,如果没有,则使用此命令<code>apt-get install python 2.7 </code>,并且如果您收到“您安装需要setuptools> = …“,那么您可以使用pip安装setuptools –no-use-wheel –upgrade )。 您还需要安装使用 <code>easy_install pip</code>和<code>pip</code>安装<code>boto</code> 如图1.3和1.4所示)<br>以root用户身份运行以下命令来安装所需的软件:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">apt-get install openjdk-7-jre poppler-utils libreoffice libreoffice-script-provider-python libpython2.7 python-pip mysql-server python-setuptools python-imaging python-mysqldb python-memcache</span><br></pre></td></tr></table></figure>\n在这个过程中会提示输入MySql密码,输入两次,并记住。<br>现在我将检查安装的python版本是否符合Seafile的要求:<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">python -V</span><br></pre></td></tr></table></figure>\n正如你在屏幕截图中看到的那样,python版本是2.7.6,所以它在所支持的python版本的范围内。<br><img src=\"https://images.liangs.me/bitcron/Notes/_image/3d7c9429b351652110d8aa46363eda65_6f6ee45142b5088e54cbd1c80531c06d_2017-07-12-20-55-44.jpg\"><br>[图像1.2]<br>接下来我将使用easy_install安装pip软件包<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">easy_install pip</span><br></pre></td></tr></table></figure></li>\n</ul>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/3f963cdb2b82174bef0d87ad427272bb_ed3529c9e5b16bc1db07804ba65d1395_2017-07-12-20-56-53.jpg\"><br>[图像1.3]<br>和boto包</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">pip install boto</span><br></pre></td></tr></table></figure>\n\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/1304064715ad572e9825bf5af19425d8_ffd4b17501cd80f02ab95fa80d4f1e57_2017-07-12-20-58-23.jpg\"><br>[图像1.4]<br>接下来为您的语言安装一些额外的字体(例如WenQuanYi,如果我们要使用中文)</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy</span><br></pre></td></tr></table></figure>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/6252a6962d2d60b8009fb188ff3e1a12_5da9a9cdee0dfcb884620cda53079d8f_2017-07-12-21-00-11.jpg\"></p>\n<h3 id=\"用MySQL安装Seafile\"><a href=\"#用MySQL安装Seafile\" class=\"headerlink\" title=\"用MySQL安装Seafile\"></a>用MySQL安装Seafile</h3><p>首先,您需要验证您的系统是32位还是64位系统。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">uname -m</span><br></pre></td></tr></table></figure>\n\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/1a56a0d574ec1244b254eca057e23677_a920eed2e55fc887e42331b4633b9dbf_2017-07-12-21-01-28.jpg\"></p>\n<p>我的服务器是一个64位系统。</p>\n<p>32个或64位可以使用两种选择,这两种选项都可以在Seafile的下载页面<a href=\"http://seafile.com/en/download/%E4%B8%8A%E8%8E%B7%E5%BE%97\">http://seafile.com/en/download/上获得</a> 。<br> 选择自己的系统以及系统版本使用wget下载,放到/opt/目录下<br>Ubuntu 系统下载包</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget http://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_6.0.9_x86-64.tar.gz</span><br></pre></td></tr></table></figure>\n<p>接下来,将要创建所需的目录。<br>首先,我需要创建一个目录名“ guide ”,你可以使用任何描述你的组织的名字。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mkdir /root/guide</span><br></pre></td></tr></table></figure>\n<p>然后将文件移动到我们创建的目录</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mv seafile-server_6.0.9_x86-64.tar.gz /root/guide</span><br></pre></td></tr></table></figure>\n<p>切换到<code>/root/guide</code>目录使用<code>tar</code>命令解压</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">tar -xzf seafile-server_6.0.9_x86-64.tar.gz</span><br></pre></td></tr></table></figure>\n<p>接下来创建一个安装的目录 。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mkdir installed</span><br></pre></td></tr></table></figure>\n<p>我们可能会将文件seafile-server_6.0.9_x86-64.tar.gz移动到安装的新创建的目录 。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mv seafile-server_6.0.9_x86-64.tar.gz /installed</span><br></pre></td></tr></table></figure>\n<p>如我们的版本的目录结构所述,一切都应该在正确的位置。</p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/3571e25afa38ff222a15c29370b592ca_b2cb523f463e26761489bc91852adabe_ceee0c90486619696c3c19dfdf02026a_attach15.jpg\"></p>\n<h3 id=\"配置MySQL数据库\"><a href=\"#配置MySQL数据库\" class=\"headerlink\" title=\"配置MySQL数据库\"></a>配置MySQL数据库</h3><p>seafile由3个核心部件组成。 我们需要为这个给定的组件创建一个数据库。</p>\n<ul>\n<li>ccnet服务器</li>\n<li>seafile服务器</li>\n<li>seahub<br>现在正在为列出的给定数据库创建mysql数据库,帐户和设置权限。 (这只是一个例子,您可以在数据库名称上创建自己的设计)。</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>海底部件</th>\n<th>数据库名称</th>\n<th>帐户</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>ccnet服务器</td>\n<td>ccnet-db</td>\n<td>seafile</td>\n</tr>\n<tr>\n<td>seafile服务器</td>\n<td>seafile-db</td>\n<td>seafile</td>\n</tr>\n<tr>\n<td>seahub</td>\n<td>seahub-db</td>\n<td>seafile</td>\n</tr>\n<tr>\n<td>以root用户身份登录到mysql</td>\n<td></td>\n<td></td>\n</tr>\n</tbody></table>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mysql -u root -p</span><br></pre></td></tr></table></figure>\n<p>输入之前安装设置的MySql密码,然后在mysql shell中发出这些命令:</p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">create</span> database`ccnet<span class=\"operator\">-</span>db`<span class=\"type\">character</span> <span class=\"keyword\">set</span> <span class=\"operator\">=</span>utf8; </span><br><span class=\"line\"><span class=\"keyword\">create</span> database`seafile<span class=\"operator\">-</span>db`<span class=\"type\">character</span> <span class=\"keyword\">set</span> <span class=\"operator\">=</span>utf8; </span><br><span class=\"line\"><span class=\"keyword\">create</span> database`seahub<span class=\"operator\">-</span>db`<span class=\"type\">character</span> <span class=\"keyword\">set</span> <span class=\"operator\">=</span>utf8; </span><br><span class=\"line\"><span class=\"keyword\">create</span> <span class=\"keyword\">user</span> <span class=\"string\">'seafile'</span>@<span class=\"string\">'localhost'</span> identified <span class=\"keyword\">by</span> <span class=\"string\">'seafile'</span>;</span><br><span class=\"line\"><span class=\"keyword\">grant</span> <span class=\"keyword\">all</span> privileges <span class=\"keyword\">on</span> `ccnet<span class=\"operator\">-</span>db`.<span class=\"operator\">*</span> <span class=\"keyword\">to</span> `seafile`<span class=\"variable\">@localhost</span>;</span><br><span class=\"line\"><span class=\"keyword\">grant</span> <span class=\"keyword\">all</span> privileges <span class=\"keyword\">on</span> `seafile<span class=\"operator\">-</span>db`.<span class=\"operator\">*</span> <span class=\"keyword\">to</span> `seafile`<span class=\"variable\">@localhost</span>;</span><br><span class=\"line\"><span class=\"keyword\">grant</span> <span class=\"keyword\">all</span> privileges <span class=\"keyword\">on</span> `seahub<span class=\"operator\">-</span>db`.<span class=\"operator\">*</span> <span class=\"keyword\">to</span> `seafile`<span class=\"variable\">@localhost</span>;</span><br></pre></td></tr></table></figure>\n\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/238404fa0029faf8c74f262195278217_9fe0b55fff88e0913f44c64f78d37f41_2017-07-12-21-16-22.jpg\"></p>\n<p>输入<code>exit</code>退出</p>\n<h3 id=\"设置seafile服务器\"><a href=\"#设置seafile服务器\" class=\"headerlink\" title=\"设置seafile服务器\"></a>设置seafile服务器</h3><p>所需包:</p>\n<ul>\n<li>python 2.7</li>\n<li>python-setuptools</li>\n<li>python-imaging</li>\n<li>python-mysqldb<br>通过使用此命令:(以验证其是否已安装)<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">apt-get install python2.7 python-setuptools python-imaging python-mysqldb</span><br></pre></td></tr></table></figure></li>\n</ul>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/775ba80384b311a6664deef0120e2da8_3538cb7877d98a2949fd1f266c74aab4_2017-07-12-21-18-33.jpg\"></p>\n<p>接下来你需要安装seafile服务器。 转到目录<code>seafile-server-6.0.9</code>然后运行脚本<code>setup-seafile-mysql.sh</code> 。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd seafile-server-6.0.9</span><br><span class=\"line\">ls -lrt</span><br><span class=\"line\">./setup-seafile-mysql.sh</span><br></pre></td></tr></table></figure>\n\n\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/7a0f6c73ed8e3817243efcbb7d9f15aa_b7b4e5dd90ed7a716b679d68312eaac1_2017-07-12-21-20-40.jpg\"></p>\n<p>下面是需要填写的问题,根据自己情况填写,data地址填oss映射地址这里是<code>/cloud/data</code>后面端口可以默认。</p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/d96a9c03a403f2c01f2605b7c73c4fa3_d8db42d0983b0be6fa60c8aa9731ade2_2017-07-12-21-24-38.jpg\"></p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/b987ebf1e88a34170a79880f66cfe125_4308bd8b67334ae30f792db6b6702aea_2017-07-12-21-27-09.jpg\"></p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/3fdc719e38b3baccd5ca1916c5c1cbd7_4f16071998821285abf5b22466e59748_2017-07-12-21-27-22.jpg\"></p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/82e57d1d7faa1f6db4d24fc50c54229e_4cea837ff4f043daa19f9dcecc227fbc_2017-07-12-21-27-52.jpg\"></p>\n<h3 id=\"启动Seafile服务器\"><a href=\"#启动Seafile服务器\" class=\"headerlink\" title=\"启动Seafile服务器\"></a>启动Seafile服务器</h3><p>需要切到<code>/seafile-server-6.0.9</code>目录</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd /root/guide/seafile-server-6.0.9</span><br><span class=\"line\">ls -al</span><br><span class=\"line\">./seafile.sh start</span><br></pre></td></tr></table></figure>\n\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/ac88be8579543caee52335f94c3bc7d3_4e7819c890f670c271025bfa46f9a584_2017-07-12-21-29-29.jpg\"></p>\n<p>然后开始seahub。 默认端口为8000。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./seahub.sh start</span><br></pre></td></tr></table></figure>\n\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/e1ae6095d0dcf321e7576fd7e9f71cd3_be9f5c51adaad1fcc4fb03e11d00b441_2017-07-12-21-31-09.jpg\"></p>\n<p>现在可以用浏览器访问了,地址栏输入相应的ip地址</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">http://123.207.155.108:8000/</span><br></pre></td></tr></table></figure>\n\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/8ab9aaf779596396dc6d3ad4896ac710_9ed22485a72166d4a3fcf6f5dfb19157_2017-07-12-21-32-42.jpg\"></p>\n<p>登录后,您将看到seafile web管理页面。</p>\n<p><img src=\"https://images.liangs.me/bitcron/Notes/_image/2a66d00b40816c1f34818e60b0a6a5fc_45095ee4af3d434a14a69bd2c667abc8_2017-07-12-21-34-24.jpg\"></p>\n<h2 id=\"参考\"><a href=\"#参考\" class=\"headerlink\" title=\"参考\"></a>参考</h2><p><a href=\"http://lxl520.com/index.php/archives/82/\">使用lnmp+owncloud+ossfs+oss搭建属于自己的私有云盘</a><br><a href=\"https://cherryml.com/archives/209.html\">手动搭建属于自己的私有云-seafile安装教程</a><br><a href=\"https://www.howtoing.com/seafile-ubuntu-14-04/\">如何安装Seafile在Ubuntu 14.04(Trusty Tahr)</a></p>\n","slug":"笔记/2017-07-11.使用Seafile+ossfs+oss搭建属于自己的私有云盘","comments":true,"categories":[],"tags":[{"name":"seafile","slug":"seafile","permalink":"https://www.zhiiker.com/tags/seafile/"},{"name":"云盘","slug":"云盘","permalink":"https://www.zhiiker.com/tags/%E4%BA%91%E7%9B%98/"},{"name":"oss","slug":"oss","permalink":"https://www.zhiiker.com/tags/oss/"},{"name":"ossfs","slug":"ossfs","permalink":"https://www.zhiiker.com/tags/ossfs/"}]},{"title":"升级Seafile到专业版,更换端口,开机启动","date":"2017-07-11T10:29:36.000Z","path":"2017/07/11/笔记/2017-07-11.升级Seafile到专业版/","text":"准备工作安装 Java 运行时环境 (JRE)如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: 1sudo apt-get install openjdk-7-jre 如果您的系统环境是 CentOS 或者 Red Hat,执行以下命令: 1sudo yum install java-1.7.0-openjdk 注意:您也可以使用 Oracle JRE.注意:Seafile 专业版需要 java 1.7 以上版本, 请用 java -version 命令查看您系统中的默认 java 版本. 如果不是 java 7, 那么, 请 更新默认 java 版本。 安装 poppler-utilspoppler-utils 提供对 pdf 文件的全文检索功能。如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令:+ 1sudo apt-get install poppler-utils 如果您的系统环境是 CentOS 或者 Red Hat,执行以下命令: 1sudo yum install poppler-utils 安装 Libreoffice 和 UNO 库Libreoffice 和 Python-uno 库提供对办公文件的在线预览功能。如果它们没有安装,办公文件就不能在线预览。+如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: 1sudo apt-get install libreoffice python3-uno 如果您的系统环境是 CentOS 或者 RHEL,执行以下命令: 1sudo yum install libreoffice libreoffice-headless libreoffice-pyuno 对于其他的 Linux 发行版您可以参考:Linux 下 LibreOffice 的安装一般地,您还需要为您的使用语言安装字体,特别是在亚洲地区,否则 office 文件和 pdf 文件不能正确地显示。比如, 中国的用户可能希望安装文泉驿系列的 TrueType 字体: 12 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令:sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy 迁移我们假定您已经在 /data/haiwen/seafile-server-2.1.0 目录下部署了 Seafile 社区版服务器的 2.1.0 版本。 获得许可证书将您获得的许可证书放在 Seafile 安装位置的顶层目录下。在我们的例子中,顶层目录是 /data/haiwen/ 。三人以下可以免费使用不用证书。 下载与解压 Seafile 专业版服务器下载链接需要到官网转到英文版,然后注册账户才能看到。下载地址使用wget命令后tar命令解压如果出现 123bzip2: (stdin) is not a bzip2 file.tar: Child returned status 2tar: Error is not recoverable: exiting now 可能是只获取到了一个HTML文件使用 1filename.tar.gz 查看下文件类型如果出现 1filename.tar.gz: HTML document text 则需更换下载链接下载真正的tar.gz文件 您应该将压缩包解压到您的 Seafile 安装位置的顶层目录,在我们的例子中,顶层目录是 /data/haiwen 。 1tar xf seafile-pro-server_2.1.0_x86-64.tar.gz 现在您的目录结构像如下这样: 123456789haiwen├── seafile-license.txt├── seafile-pro-server-2.1.0/├── seafile-server-2.1.0/├── ccnet/├── seafile-data/├── seahub-data/├── seahub.db└── seahub_settings.py 您应该已经注意到社区版服务器和专业版服务器名字的不同。以 64 位的 2.1.0 版本为例:+ Seafile 社区版服务器压缩包叫作 seafile-server_2.1.0_x86-86.tar.gz;解压后,文件夹名叫作 seafile-server-2.1.0 Seafile 专业版服务器压缩包叫作 seafile-pro-server_2.1.0_x86-86.tar.gz;解压后,文件夹名叫作 seafile-pro-server-2.1.0 迁移 如果 Seafile 社区版服务器正在运行,请先停止它: 123cd haiwen/seafile-server-2.1.0./seafile.sh stop./seahub.sh stop 运行迁移脚本 12cd haiwen/seafile-pro-server-2.1.0/./pro/pro.py setup --migrate 迁移脚本将会为您做以下的工作: 确保您满足所有的先决条件 创建必要的额外配置选项 更新 avatar 目录 创建额外的数据库表现在您的目录结构像如下这样: 12345678910haiwen├── seafile-license.txt├── seafile-pro-server-2.1.0/├── seafile-server-2.1.0/├── ccnet/├── seafile-data/├── seahub-data/├── seahub.db├── seahub_settings.py└── pro-data/ 启用 Seafile 专业版服务器123cd haiwen/seafile-pro-server-2.1.0./seafile.sh start./seahub.sh start 切换回社区版服务器如果 Seafile 专业版服务器正在运行,请先停止它: 123cd haiwen/seafile-pro-server-2.1.0/./seafile.sh stop./seahub.sh stop 更新 avatar 目录的链接,参考小版本升级 12cd haiwen/seafile-server-2.1.0/./upgrade/minor-upgrade.sh 启用 Seafile 社区版服务器 123cd haiwen/seafile-server-2.1.0/./seafile.sh start./seahub.sh start 更换端口Seafile 服务器由两个组件组成,默认情况下用到 8000, 8082 两个端口号 (TCP)。 配置文件所有端口的相关配置都记录在ccnet.conf文件和seafile.conf文件中这两个文件都在seafile-server目录下的conf文件夹。 seahubseahub 是 Seafile 服务器的 Web 端。注意:如果您改变了 Seahub 的端口号,”管理员界面->设置” 中的 SERVICE_URL 也需要做相应的改动。 默认端口: 8000 如何设置端口号: 编辑seafile.conf文件。 设置在seahub段下port的值. 12[seahub]port=8000 “管理员界面->设置” 中的 SERVICE_URL。比如, 如果您将端口号重新设置为 8001 ,那么更改SERVICE_URL的值如下: 1SERVICE_URL = <您的 IP 或者域名>:8001 最后重启下seahub切到seafile-serve文件夹 1./seahub.sh restart 80 后面是更改的端口 seafile fileserverseafile fileserver 负责为 Seahub 处理文件的上传和下载+ 默认端口: 8082 如何设置端口号: 桌面客户端会连接这个端口来同步文件,所以不要修改这个端口。 开机启动 SeafileUbuntu 系统使用 /etc/init.d/ 来配置 Seafile/Seahub 开机启动. 创建/etc/init.d/seafile-server脚本1sudo vim /etc/init.d/seafile-server 脚本内容为: (同时需要修改相应的user和script_dir字段的值) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#!/bin/bash### BEGIN INIT INFO# Provides: seafile-server# Required-Start: $remote_fs $syslog# Required-Stop: $remote_fs $syslog# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Seafile server# Description: Start Seafile server### END INIT INFO# 请将 user 改为你的Linux用户名user=haiwen# 请将 script_dir 改为你的 Seafile 文件安装路径seafile_dir=/data/haiwenscript_path=${seafile_dir}/seafile-server-latestseafile_init_log=${seafile_dir}/logs/seafile.init.logseahub_init_log=${seafile_dir}/logs/seahub.init.log# 若使用 Nginx/Apache, 请将其设置为true, 否者为 falsefastcgi=true# fastcgi 端口, 默认为 8000. fastcgi_port=8000case "$1" in start) sudo -u ${user} ${script_path}/seafile.sh start >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh start >> ${seahub_init_log} fi ;; restart) sudo -u ${user} ${script_path}/seafile.sh restart >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh restart >> ${seahub_init_log} fi ;; stop) sudo -u ${user} ${script_path}/seafile.sh $1 >> ${seafile_init_log} sudo -u ${user} ${script_path}/seahub.sh $1 >> ${seahub_init_log} ;; *) echo "Usage: /etc/init.d/seafile-server {start|stop|restart}" exit 1 ;;esac 注意: 如果使用本地 mysql 服务器,请把 # Required-Start: $remote_fs $syslog 替换为 # Required-Start: $remote_fs $syslog mysql。 设置 seafile-sever 脚本为可执行文件1sudo chmod +x /etc/init.d/seafile-server 在 rc.d 中新增 seafile-server1sudo update-rc.d seafile-server defaults 完成 其他 Debian 系的 Linux 下创建脚本/etc/init.d/seafile-server1sudo vim /etc/init.d/seafile-server 脚本内容为: (同时需要修改相应的user和script_path字段的值) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#!/bin/sh### BEGIN INIT INFO# Provides: seafile-server# Required-Start: $local_fs $remote_fs $network# Required-Stop: $local_fs# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Starts Seafile Server# Description: starts Seafile Server### END INIT INFO# 请将 user 改为你的Linux用户名user=haiwen# 请将 script_path 改为你的 Seafile 文件安装路径seafile_dir=/data/haiwenscript_path=${seafile_dir}/seafile-server-latestseafile_init_log=${seafile_dir}/logs/seafile.init.logseahub_init_log=${seafile_dir}/logs/seahub.init.log# 若使用 fastcgi, 请将其设置为truefastcgi=false# fastcgi 端口, 默认为 8000. fastcgi_port=8000case "$1" in start) sudo -u ${user} ${script_path}/seafile.sh start >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh start >> ${seahub_init_log} fi ;; restart) sudo -u ${user} ${script_path}/seafile.sh restart >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh restart >> ${seahub_init_log} fi ;; stop) sudo -u ${user} ${script_path}/seafile.sh $1 >> ${seafile_init_log} sudo -u ${user} ${script_path}/seahub.sh $1 >> ${seahub_init_log} ;; *) echo "Usage: /etc/init.d/seafile {start|stop|restart}" exit 1 ;;esac 注意: 如果你想在 fastcgi 下运行 Seahub,请设置fastcgi变量为true 如果使用本地 mysql 服务器,请把# Required-Start: $remote_fs $syslog替换为 # Required-Start: $remote_fs $syslog mysql。为日志文件创建目录1mkdir /path/to/seafile/dir/logs 设置 seafile-sever 脚本为可执行文件1sudo chmod +x /etc/init.d/seafile-server 在 rc.d 中新增 seafile-server1sudo update-rc.d seafile-server defaults 完成RHEL/CentOS 系统统方法 1RHEL/CentOS 下,/etc/rc.local 脚本会随系统开机自动执行,所以我们在这个脚本中设置启动 Seafile/Seahub. 定位 python(python 2.6 or 2.7)1which python2.6 # or "which python2.7" 在 /etc/rc.local 脚本中, 将 python2.6(2.7)路径加入到PATH字段中, 并增加 Seafile/Seahub 启动命令123456789101112# 假设 python 2.6(2.7) 可执行文件在 /usr/local/bin 目录下PATH=$PATH:/usr/local/bin/# 请将 user 改为你的Linux用户名user=haiwen# 请将 script_path 改为你的 Seafile 文件安装路径seafile_dir=/data/haiwenscript_path=${seafile_dir}/seafile-server-latestsudo -u ${user} ${script_path}/seafile.sh start > /tmp/seafile.init.log 2>&1sudo -u ${user} ${script_path}/seahub.sh start > /tmp/seahub.init.log 2>&1 注意: 如果你想在fastcgi下启动Seahub,只需将上文中最后一行"seahub.sh start"改为"seahub.sh start-fastcgi" RHEL/CentOS 系统方法 2RHEL/CentOS 下 , 我们通过 /etc/init.d/ 脚本将 Seafile/Seahub作为服务程序随开机启动. 创建/etc/sysconfig/seafile文件1234567891011121314# 请将 user 改为你的Linux用户名user=haiwen# 请将 script_path 改为你的 Seafile 文件安装路径seafile_dir=/home/haiwenscript_path=${seafile_dir}/seafile-server-latestseafile_init_log=${seafile_dir}/logs/seafile.init.logseahub_init_log=${seafile_dir}/logs/seahub.init.log# 若使用 fastcgi, 请将其设置truefastcgi=false# fastcgi 端口, 默认为 8000. fastcgi_port=8000 创建/etc/init.d/seafile文件1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#!/bin/bash## seafile## chkconfig: - 68 32# description: seafile# Source function library.. /etc/init.d/functions# Source networking configuration.. /etc/sysconfig/networkif [ -f /etc/sysconfig/seafile ];then . /etc/sysconfig/seafile else echo "Config file /etc/sysconfig/seafile not found! Bye." exit 200 fiRETVAL=0start() { # Start daemons. echo -n $"Starting seafile: " ulimit -n 30000 su - ${user} -c"${script_path}/seafile.sh start >> ${seafile_init_log} 2>&1" RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/seafile return $RETVAL}stop() { echo -n $"Shutting down seafile: " su - ${user} -c"${script_path}/seafile.sh stop >> ${seafile_init_log} 2>&1" RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/seafile return $RETVAL}# See how we were called.case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart}" RETVAL=3esacexit $RETVAL 创建/etc/init.d/seahub脚本12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#!/bin/bash## seahub## chkconfig: - 69 31# description: seahub# Source function library.. /etc/init.d/functions# Source networking configuration.. /etc/sysconfig/networkif [ -f /etc/sysconfig/seafile ];then . /etc/sysconfig/seafile else echo "Config file /etc/sysconfig/seafile not found! Bye." exit 200 fiRETVAL=0start() { # Start daemons. echo -n $"Starting seahub: " ulimit -n 30000 if [ $fastcgi = true ]; then su - ${user} -c"${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} 2>&1" else su - ${user} -c"${script_path}/seahub.sh start >> ${seahub_init_log} 2>&1" fi RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/seahub return $RETVAL}stop() { echo -n $"Shutting down seafile: " su - ${user} -c"${script_path}/seahub.sh stop >> ${seahub_init_log} 2>&1" RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/seahub return $RETVAL}# See how we were called.case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart}" RETVAL=3esacexit $RETVAL 接下来启动服务程序: 123456chmod 550 /etc/init.d/seafilechmod 550 /etc/init.d/seahubchkconfig --add seafilechkconfig --add seahubchkconfig seahub onchkconfig seafile on 执行: 12service seafile startservice seahub start 完成","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"准备工作\"><a href=\"#准备工作\" class=\"headerlink\" title=\"准备工作\"></a>准备工作</h2><h3 id=\"安装-Java-运行时环境-JRE\"><a href=\"#安装-Java-运行时环境-JRE\" class=\"headerlink\" title=\"安装 Java 运行时环境 (JRE)\"></a>安装 Java 运行时环境 (JRE)</h3><p>如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get install openjdk-7-jre</span><br></pre></td></tr></table></figure>\n<p>如果您的系统环境是 CentOS 或者 Red Hat,执行以下命令:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo yum install java-1.7.0-openjdk</span><br></pre></td></tr></table></figure>\n<p>注意:您也可以使用 Oracle JRE.<br>注意:Seafile 专业版需要 java 1.7 以上版本, 请用 java -version 命令查看您系统中的默认 java 版本. 如果不是 java 7, 那么, 请 更新默认 java 版本。</p>\n<span id=\"more\"></span>\n<h3 id=\"安装-poppler-utils\"><a href=\"#安装-poppler-utils\" class=\"headerlink\" title=\"安装 poppler-utils\"></a>安装 poppler-utils</h3><p>poppler-utils 提供对 pdf 文件的全文检索功能。<br>如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令:+</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get install poppler-utils</span><br></pre></td></tr></table></figure>\n<p>如果您的系统环境是 CentOS 或者 Red Hat,执行以下命令:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo yum install poppler-utils</span><br></pre></td></tr></table></figure>\n<h3 id=\"安装-Libreoffice-和-UNO-库\"><a href=\"#安装-Libreoffice-和-UNO-库\" class=\"headerlink\" title=\"安装 Libreoffice 和 UNO 库\"></a>安装 Libreoffice 和 UNO 库</h3><p>Libreoffice 和 Python-uno 库提供对办公文件的在线预览功能。如果它们没有安装,办公文件就不能在线预览。+<br>如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo apt-get install libreoffice python3-uno</span><br></pre></td></tr></table></figure>\n<p>如果您的系统环境是 CentOS 或者 RHEL,执行以下命令:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo yum install libreoffice libreoffice-headless libreoffice-pyuno</span><br></pre></td></tr></table></figure>\n<p>对于其他的 Linux 发行版您可以参考:<a href=\"http://www.libreoffice.org/get-help/install-howto/\">Linux 下 LibreOffice 的安装</a><br>一般地,您还需要为您的使用语言安装字体,特别是在亚洲地区,否则 office 文件和 pdf 文件不能正确地显示。<br>比如, 中国的用户可能希望安装文泉驿系列的 TrueType 字体:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令:</span><br><span class=\"line\">sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy</span><br></pre></td></tr></table></figure>\n<h2 id=\"迁移\"><a href=\"#迁移\" class=\"headerlink\" title=\"迁移\"></a>迁移</h2><p>我们假定您已经在 <code>/data/haiwen/seafile-server-2.1.0</code> 目录下部署了 Seafile 社区版服务器的 2.1.0 版本。</p>\n<h3 id=\"获得许可证书\"><a href=\"#获得许可证书\" class=\"headerlink\" title=\"获得许可证书\"></a>获得许可证书</h3><p>将您获得的许可证书放在 Seafile 安装位置的顶层目录下。在我们的例子中,顶层目录是 <code>/data/haiwen/</code> 。<br>三人以下可以免费使用不用证书。</p>\n<h3 id=\"下载与解压-Seafile-专业版服务器\"><a href=\"#下载与解压-Seafile-专业版服务器\" class=\"headerlink\" title=\"下载与解压 Seafile 专业版服务器\"></a>下载与解压 Seafile 专业版服务器</h3><p>下载链接需要到官网转到英文版,然后注册账户才能看到。<br><a href=\"https://download.seafile.com/d/6e5297246c/?p=/pro\">下载地址</a><br>使用wget命令后tar命令解压<br>如果出现</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">bzip2: (stdin) is not a bzip2 file.</span><br><span class=\"line\">tar: Child returned status 2</span><br><span class=\"line\">tar: Error is not recoverable: exiting now</span><br></pre></td></tr></table></figure>\n<p>可能是只获取到了一个HTML文件<br>使用</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">filename.tar.gz</span><br></pre></td></tr></table></figure>\n<p>查看下文件类型<br>如果出现</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">filename.tar.gz: HTML document text</span><br></pre></td></tr></table></figure>\n<p>则需更换下载链接下载真正的tar.gz文件</p>\n<p>您应该将压缩包解压到您的 Seafile 安装位置的顶层目录,在我们的例子中,顶层目录是 <code>/data/haiwen</code> 。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">tar xf seafile-pro-server_2.1.0_x86-64.tar.gz</span><br></pre></td></tr></table></figure>\n<p>现在您的目录结构像如下这样:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">haiwen</span><br><span class=\"line\">├── seafile-license.txt</span><br><span class=\"line\">├── seafile-pro-server-2.1.0/</span><br><span class=\"line\">├── seafile-server-2.1.0/</span><br><span class=\"line\">├── ccnet/</span><br><span class=\"line\">├── seafile-data/</span><br><span class=\"line\">├── seahub-data/</span><br><span class=\"line\">├── seahub.db</span><br><span class=\"line\">└── seahub_settings.py</span><br></pre></td></tr></table></figure>\n<p>您应该已经注意到社区版服务器和专业版服务器名字的不同。以 64 位的 2.1.0 版本为例:+</p>\n<ul>\n<li><p>Seafile 社区版服务器压缩包叫作 <code>seafile-server_2.1.0_x86-86.tar.gz</code>;解压后,文件夹名叫作<code> seafile-server-2.1.0</code></p>\n</li>\n<li><p>Seafile 专业版服务器压缩包叫作 <code>seafile-pro-server_2.1.0_x86-86.tar.gz</code>;解压后,文件夹名叫作<code> seafile-pro-server-2.1.0</code></p>\n<h3 id=\"迁移-1\"><a href=\"#迁移-1\" class=\"headerlink\" title=\"迁移\"></a>迁移</h3></li>\n<li><p>如果 Seafile 社区版服务器正在运行,请先停止它:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd haiwen/seafile-server-2.1.0</span><br><span class=\"line\">./seafile.sh stop</span><br><span class=\"line\">./seahub.sh stop</span><br></pre></td></tr></table></figure></li>\n<li><p>运行迁移脚本</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd haiwen/seafile-pro-server-2.1.0/</span><br><span class=\"line\">./pro/pro.py setup --migrate</span><br></pre></td></tr></table></figure>\n<p>迁移脚本将会为您做以下的工作:</p>\n</li>\n<li><p>确保您满足所有的先决条件</p>\n</li>\n<li><p>创建必要的额外配置选项</p>\n</li>\n<li><p>更新 avatar 目录</p>\n</li>\n<li><p>创建额外的数据库表<br>现在您的目录结构像如下这样:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">haiwen</span><br><span class=\"line\">├── seafile-license.txt</span><br><span class=\"line\">├── seafile-pro-server-2.1.0/</span><br><span class=\"line\">├── seafile-server-2.1.0/</span><br><span class=\"line\">├── ccnet/</span><br><span class=\"line\">├── seafile-data/</span><br><span class=\"line\">├── seahub-data/</span><br><span class=\"line\">├── seahub.db</span><br><span class=\"line\">├── seahub_settings.py</span><br><span class=\"line\">└── pro-data/</span><br></pre></td></tr></table></figure>\n<h3 id=\"启用-Seafile-专业版服务器\"><a href=\"#启用-Seafile-专业版服务器\" class=\"headerlink\" title=\"启用 Seafile 专业版服务器\"></a>启用 Seafile 专业版服务器</h3><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd haiwen/seafile-pro-server-2.1.0</span><br><span class=\"line\">./seafile.sh start</span><br><span class=\"line\">./seahub.sh start</span><br></pre></td></tr></table></figure>\n<h3 id=\"切换回社区版服务器\"><a href=\"#切换回社区版服务器\" class=\"headerlink\" title=\"切换回社区版服务器\"></a>切换回社区版服务器</h3><p>如果 Seafile 专业版服务器正在运行,请先停止它:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd haiwen/seafile-pro-server-2.1.0/</span><br><span class=\"line\">./seafile.sh stop</span><br><span class=\"line\">./seahub.sh stop</span><br></pre></td></tr></table></figure>\n<p>更新 avatar 目录的链接,参考<a href=\"https://github.com/haiwen/seafile/wiki/Upgrading-Seafile-Server#minor-upgrade-like-from-150-to-151\">小版本升级</a></p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd haiwen/seafile-server-2.1.0/</span><br><span class=\"line\">./upgrade/minor-upgrade.sh</span><br></pre></td></tr></table></figure>\n<p>启用 Seafile 社区版服务器</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd haiwen/seafile-server-2.1.0/</span><br><span class=\"line\">./seafile.sh start</span><br><span class=\"line\">./seahub.sh start</span><br></pre></td></tr></table></figure>\n<h2 id=\"更换端口\"><a href=\"#更换端口\" class=\"headerlink\" title=\"更换端口\"></a>更换端口</h2><p>Seafile 服务器由两个组件组成,默认情况下用到 8000, 8082 两个端口号 (TCP)。</p>\n<h3 id=\"配置文件\"><a href=\"#配置文件\" class=\"headerlink\" title=\"配置文件\"></a>配置文件</h3><p>所有端口的相关配置都记录在<code>ccnet.conf</code>文件和<code>seafile.conf</code>文件中<br>这两个文件都在<code>seafile-server</code>目录下的<code>conf</code>文件夹。</p>\n<h3 id=\"seahub\"><a href=\"#seahub\" class=\"headerlink\" title=\"seahub\"></a>seahub</h3><p>seahub 是 Seafile 服务器的 Web 端。<br>注意:如果您改变了 Seahub 的端口号,”管理员界面->设置” 中的 SERVICE_URL 也需要做相应的改动。</p>\n</li>\n<li><p>默认端口: 8000</p>\n</li>\n<li><p>如何设置端口号: 编辑<code>seafile.conf</code>文件。 设置在<code>seahub</code>段下<code>port</code>的值.</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[seahub]</span><br><span class=\"line\">port=8000</span><br></pre></td></tr></table></figure></li>\n<li><p>“管理员界面->设置” 中的 SERVICE_URL。比如, 如果您将端口号重新设置为 8001 ,那么更改SERVICE_URL的值如下:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">SERVICE_URL = <您的 IP 或者域名>:8001</span><br></pre></td></tr></table></figure>\n<p>最后重启下seahub<br>切到seafile-serve文件夹</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./seahub.sh restart 80</span><br></pre></td></tr></table></figure>\n<p>后面是更改的端口</p>\n</li>\n</ul>\n<h3 id=\"seafile-fileserver\"><a href=\"#seafile-fileserver\" class=\"headerlink\" title=\"seafile fileserver\"></a>seafile fileserver</h3><p><code>seafile fileserver</code> 负责为 Seahub 处理文件的上传和下载+</p>\n<ul>\n<li>默认端口: 8082</li>\n<li>如何设置端口号: 桌面客户端会连接这个端口来同步文件,所以不要修改这个端口。</li>\n</ul>\n<h2 id=\"开机启动-Seafile\"><a href=\"#开机启动-Seafile\" class=\"headerlink\" title=\"开机启动 Seafile\"></a>开机启动 Seafile</h2><h3 id=\"Ubuntu-系统\"><a href=\"#Ubuntu-系统\" class=\"headerlink\" title=\"Ubuntu 系统\"></a>Ubuntu 系统</h3><p>使用 /etc/init.d/ 来配置 Seafile/Seahub 开机启动.</p>\n<h4 id=\"创建-etc-init-d-seafile-server脚本\"><a href=\"#创建-etc-init-d-seafile-server脚本\" class=\"headerlink\" title=\"创建/etc/init.d/seafile-server脚本\"></a>创建/etc/init.d/seafile-server脚本</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo vim /etc/init.d/seafile-server</span><br></pre></td></tr></table></figure>\n<p>脚本内容为: (同时需要修改相应的user和script_dir字段的值)</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/bin/bash</span></span><br><span class=\"line\"><span class=\"comment\">### BEGIN INIT INFO</span></span><br><span class=\"line\"><span class=\"comment\"># Provides: seafile-server</span></span><br><span class=\"line\"><span class=\"comment\"># Required-Start: $remote_fs $syslog</span></span><br><span class=\"line\"><span class=\"comment\"># Required-Stop: $remote_fs $syslog</span></span><br><span class=\"line\"><span class=\"comment\"># Default-Start: 2 3 4 5</span></span><br><span class=\"line\"><span class=\"comment\"># Default-Stop: 0 1 6</span></span><br><span class=\"line\"><span class=\"comment\"># Short-Description: Seafile server</span></span><br><span class=\"line\"><span class=\"comment\"># Description: Start Seafile server</span></span><br><span class=\"line\"><span class=\"comment\">### END INIT INFO</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 请将 user 改为你的Linux用户名</span></span><br><span class=\"line\">user=haiwen</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 请将 script_dir 改为你的 Seafile 文件安装路径</span></span><br><span class=\"line\">seafile_dir=/data/haiwen</span><br><span class=\"line\">script_path=<span class=\"variable\">${seafile_dir}</span>/seafile-server-latest</span><br><span class=\"line\">seafile_init_log=<span class=\"variable\">${seafile_dir}</span>/logs/seafile.init.log</span><br><span class=\"line\">seahub_init_log=<span class=\"variable\">${seafile_dir}</span>/logs/seahub.init.log</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 若使用 Nginx/Apache, 请将其设置为true, 否者为 false</span></span><br><span class=\"line\">fastcgi=<span class=\"literal\">true</span></span><br><span class=\"line\"><span class=\"comment\"># fastcgi 端口, 默认为 8000. </span></span><br><span class=\"line\">fastcgi_port=8000</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"string\">"<span class=\"variable\">$1</span>"</span> <span class=\"keyword\">in</span></span><br><span class=\"line\"> start)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh start >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> [ <span class=\"variable\">$fastcgi</span> = <span class=\"literal\">true</span> ];</span><br><span class=\"line\"> <span class=\"keyword\">then</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh start-fastcgi <span class=\"variable\">${fastcgi_port}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh start >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> restart)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh restart >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> [ <span class=\"variable\">$fastcgi</span> = <span class=\"literal\">true</span> ];</span><br><span class=\"line\"> <span class=\"keyword\">then</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh restart-fastcgi <span class=\"variable\">${fastcgi_port}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh restart >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> stop)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh <span class=\"variable\">$1</span> >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh <span class=\"variable\">$1</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> *)</span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"Usage: /etc/init.d/seafile-server {start|stop|restart}"</span></span><br><span class=\"line\"> <span class=\"built_in\">exit</span> 1</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"><span class=\"keyword\">esac</span></span><br></pre></td></tr></table></figure>\n<p>注意: 如果使用本地 mysql 服务器,请把 <code># Required-Start: $remote_fs $syslog </code>替换为<code> # Required-Start: $remote_fs $syslog mysql</code>。</p>\n<h4 id=\"设置-seafile-sever-脚本为可执行文件\"><a href=\"#设置-seafile-sever-脚本为可执行文件\" class=\"headerlink\" title=\"设置 seafile-sever 脚本为可执行文件\"></a>设置 seafile-sever 脚本为可执行文件</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo chmod +x /etc/init.d/seafile-server</span><br></pre></td></tr></table></figure>\n<h4 id=\"在-rc-d-中新增-seafile-server\"><a href=\"#在-rc-d-中新增-seafile-server\" class=\"headerlink\" title=\"在 rc.d 中新增 seafile-server\"></a>在 rc.d 中新增 seafile-server</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo update-rc.d seafile-server defaults </span><br></pre></td></tr></table></figure>\n<p>完成</p>\n<h3 id=\"其他-Debian-系的-Linux-下\"><a href=\"#其他-Debian-系的-Linux-下\" class=\"headerlink\" title=\"其他 Debian 系的 Linux 下\"></a>其他 Debian 系的 Linux 下</h3><h4 id=\"创建脚本-etc-init-d-seafile-server\"><a href=\"#创建脚本-etc-init-d-seafile-server\" class=\"headerlink\" title=\"创建脚本/etc/init.d/seafile-server\"></a>创建脚本/etc/init.d/seafile-server</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo vim /etc/init.d/seafile-server</span><br></pre></td></tr></table></figure>\n\n<p>脚本内容为: (同时需要修改相应的user和script_path字段的值)</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/bin/sh</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">### BEGIN INIT INFO</span></span><br><span class=\"line\"><span class=\"comment\"># Provides: seafile-server</span></span><br><span class=\"line\"><span class=\"comment\"># Required-Start: $local_fs $remote_fs $network</span></span><br><span class=\"line\"><span class=\"comment\"># Required-Stop: $local_fs</span></span><br><span class=\"line\"><span class=\"comment\"># Default-Start: 2 3 4 5</span></span><br><span class=\"line\"><span class=\"comment\"># Default-Stop: 0 1 6</span></span><br><span class=\"line\"><span class=\"comment\"># Short-Description: Starts Seafile Server</span></span><br><span class=\"line\"><span class=\"comment\"># Description: starts Seafile Server</span></span><br><span class=\"line\"><span class=\"comment\">### END INIT INFO</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 请将 user 改为你的Linux用户名</span></span><br><span class=\"line\">user=haiwen</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 请将 script_path 改为你的 Seafile 文件安装路径</span></span><br><span class=\"line\">seafile_dir=/data/haiwen</span><br><span class=\"line\">script_path=<span class=\"variable\">${seafile_dir}</span>/seafile-server-latest</span><br><span class=\"line\">seafile_init_log=<span class=\"variable\">${seafile_dir}</span>/logs/seafile.init.log</span><br><span class=\"line\">seahub_init_log=<span class=\"variable\">${seafile_dir}</span>/logs/seahub.init.log</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 若使用 fastcgi, 请将其设置为true</span></span><br><span class=\"line\">fastcgi=<span class=\"literal\">false</span></span><br><span class=\"line\"><span class=\"comment\"># fastcgi 端口, 默认为 8000. </span></span><br><span class=\"line\">fastcgi_port=8000</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"string\">"<span class=\"variable\">$1</span>"</span> <span class=\"keyword\">in</span></span><br><span class=\"line\"> start)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh start >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> [ <span class=\"variable\">$fastcgi</span> = <span class=\"literal\">true</span> ];</span><br><span class=\"line\"> <span class=\"keyword\">then</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh start-fastcgi <span class=\"variable\">${fastcgi_port}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh start >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> restart)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh restart >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> [ <span class=\"variable\">$fastcgi</span> = <span class=\"literal\">true</span> ];</span><br><span class=\"line\"> <span class=\"keyword\">then</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh restart-fastcgi <span class=\"variable\">${fastcgi_port}</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh restart >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> stop)</span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seafile.sh <span class=\"variable\">$1</span> >> <span class=\"variable\">${seafile_init_log}</span></span><br><span class=\"line\"> sudo -u <span class=\"variable\">${user}</span> <span class=\"variable\">${script_path}</span>/seahub.sh <span class=\"variable\">$1</span> >> <span class=\"variable\">${seahub_init_log}</span></span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> *)</span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"Usage: /etc/init.d/seafile {start|stop|restart}"</span></span><br><span class=\"line\"> <span class=\"built_in\">exit</span> 1</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"><span class=\"keyword\">esac</span></span><br></pre></td></tr></table></figure>\n<p>注意:</p>\n<ul>\n<li>如果你想在 fastcgi 下运行 Seahub,请设置<code>fastcgi</code>变量为<code>true</code></li>\n<li>如果使用本地 mysql 服务器,请把<code># Required-Start: $remote_fs $syslog</code>替换为 <code># Required-Start: $remote_fs $syslog mysql</code>。<h4 id=\"为日志文件创建目录\"><a href=\"#为日志文件创建目录\" class=\"headerlink\" title=\"为日志文件创建目录\"></a>为日志文件创建目录</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mkdir /path/to/seafile/dir/logs</span><br></pre></td></tr></table></figure>\n<h4 id=\"设置-seafile-sever-脚本为可执行文件-1\"><a href=\"#设置-seafile-sever-脚本为可执行文件-1\" class=\"headerlink\" title=\"设置 seafile-sever 脚本为可执行文件\"></a>设置 seafile-sever 脚本为可执行文件</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo chmod +x /etc/init.d/seafile-server</span><br></pre></td></tr></table></figure>\n<h4 id=\"在-rc-d-中新增-seafile-server-1\"><a href=\"#在-rc-d-中新增-seafile-server-1\" class=\"headerlink\" title=\"在 rc.d 中新增 seafile-server\"></a>在 rc.d 中新增 seafile-server</h4><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo update-rc.d seafile-server defaults</span><br></pre></td></tr></table></figure>\n完成<h3 id=\"RHEL-CentOS-系统统方法-1\"><a href=\"#RHEL-CentOS-系统统方法-1\" class=\"headerlink\" title=\"RHEL/CentOS 系统统方法 1\"></a>RHEL/CentOS 系统统方法 1</h3>RHEL/CentOS 下,/etc/rc.local 脚本会随系统开机自动执行,所以我们在这个脚本中设置启动 Seafile/Seahub.</li>\n<li>定位 python(python 2.6 or 2.7)<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">which python2.6 # or "which python2.7"</span><br></pre></td></tr></table></figure></li>\n<li>在 /etc/rc.local 脚本中, 将 python2.6(2.7)路径加入到PATH字段中, 并增加 Seafile/Seahub 启动命令<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"># 假设 python 2.6(2.7) 可执行文件在 /usr/local/bin 目录下</span><br><span class=\"line\">PATH=$PATH:/usr/local/bin/</span><br><span class=\"line\"></span><br><span class=\"line\"># 请将 user 改为你的Linux用户名</span><br><span class=\"line\">user=haiwen</span><br><span class=\"line\"></span><br><span class=\"line\"># 请将 script_path 改为你的 Seafile 文件安装路径</span><br><span class=\"line\">seafile_dir=/data/haiwen</span><br><span class=\"line\">script_path=${seafile_dir}/seafile-server-latest</span><br><span class=\"line\"></span><br><span class=\"line\">sudo -u ${user} ${script_path}/seafile.sh start > /tmp/seafile.init.log 2>&1</span><br><span class=\"line\">sudo -u ${user} ${script_path}/seahub.sh start > /tmp/seahub.init.log 2>&1</span><br></pre></td></tr></table></figure>\n注意: 如果你想在fastcgi下启动Seahub,只需将上文中最后一行<code>"seahub.sh start"</code>改为<code>"seahub.sh start-fastcgi"</code></li>\n</ul>\n<h3 id=\"RHEL-CentOS-系统方法-2\"><a href=\"#RHEL-CentOS-系统方法-2\" class=\"headerlink\" title=\"RHEL/CentOS 系统方法 2\"></a>RHEL/CentOS 系统方法 2</h3><p>RHEL/CentOS 下 , 我们通过 /etc/init.d/ 脚本将 Seafile/Seahub作为服务程序随开机启动.</p>\n<h4 id=\"创建-etc-sysconfig-seafile文件\"><a href=\"#创建-etc-sysconfig-seafile文件\" class=\"headerlink\" title=\"创建/etc/sysconfig/seafile文件\"></a>创建/etc/sysconfig/seafile文件</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 请将 user 改为你的Linux用户名</span></span><br><span class=\"line\">user=haiwen</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 请将 script_path 改为你的 Seafile 文件安装路径</span></span><br><span class=\"line\">seafile_dir=/home/haiwen</span><br><span class=\"line\">script_path=<span class=\"variable\">${seafile_dir}</span>/seafile-server-latest</span><br><span class=\"line\">seafile_init_log=<span class=\"variable\">${seafile_dir}</span>/logs/seafile.init.log</span><br><span class=\"line\">seahub_init_log=<span class=\"variable\">${seafile_dir}</span>/logs/seahub.init.log</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 若使用 fastcgi, 请将其设置true</span></span><br><span class=\"line\">fastcgi=<span class=\"literal\">false</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># fastcgi 端口, 默认为 8000. </span></span><br><span class=\"line\">fastcgi_port=8000</span><br></pre></td></tr></table></figure>\n<h4 id=\"创建-etc-init-d-seafile文件\"><a href=\"#创建-etc-init-d-seafile文件\" class=\"headerlink\" title=\"创建/etc/init.d/seafile文件\"></a>创建/etc/init.d/seafile文件</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/bin/bash</span></span><br><span class=\"line\"><span class=\"comment\">#</span></span><br><span class=\"line\"><span class=\"comment\"># seafile</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">#</span></span><br><span class=\"line\"><span class=\"comment\"># chkconfig: - 68 32</span></span><br><span class=\"line\"><span class=\"comment\"># description: seafile</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Source function library.</span></span><br><span class=\"line\">. /etc/init.d/<span class=\"built_in\">functions</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Source networking configuration.</span></span><br><span class=\"line\">. /etc/sysconfig/network</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">if</span> [ -f /etc/sysconfig/seafile ];<span class=\"keyword\">then</span></span><br><span class=\"line\"> . /etc/sysconfig/seafile</span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"Config file /etc/sysconfig/seafile not found! Bye."</span></span><br><span class=\"line\"> <span class=\"built_in\">exit</span> 200</span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"></span><br><span class=\"line\">RETVAL=0</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"function\"><span class=\"title\">start</span></span>() {</span><br><span class=\"line\"> <span class=\"comment\"># Start daemons.</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -n $<span class=\"string\">"Starting seafile: "</span></span><br><span class=\"line\"> <span class=\"built_in\">ulimit</span> -n 30000</span><br><span class=\"line\"> su - <span class=\"variable\">${user}</span> -c<span class=\"string\">"<span class=\"variable\">${script_path}</span>/seafile.sh start >> <span class=\"variable\">${seafile_init_log}</span> 2>&1"</span></span><br><span class=\"line\"> RETVAL=$?</span><br><span class=\"line\"> <span class=\"built_in\">echo</span></span><br><span class=\"line\"> [ <span class=\"variable\">$RETVAL</span> -eq 0 ] && touch /var/lock/subsys/seafile</span><br><span class=\"line\"> <span class=\"built_in\">return</span> <span class=\"variable\">$RETVAL</span></span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"function\"><span class=\"title\">stop</span></span>() {</span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -n $<span class=\"string\">"Shutting down seafile: "</span></span><br><span class=\"line\"> su - <span class=\"variable\">${user}</span> -c<span class=\"string\">"<span class=\"variable\">${script_path}</span>/seafile.sh stop >> <span class=\"variable\">${seafile_init_log}</span> 2>&1"</span></span><br><span class=\"line\"> RETVAL=$?</span><br><span class=\"line\"> <span class=\"built_in\">echo</span></span><br><span class=\"line\"> [ <span class=\"variable\">$RETVAL</span> -eq 0 ] && rm -f /var/lock/subsys/seafile</span><br><span class=\"line\"> <span class=\"built_in\">return</span> <span class=\"variable\">$RETVAL</span></span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># See how we were called.</span></span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"string\">"<span class=\"variable\">$1</span>"</span> <span class=\"keyword\">in</span></span><br><span class=\"line\"> start)</span><br><span class=\"line\"> start</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> stop)</span><br><span class=\"line\"> stop</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> restart|reload)</span><br><span class=\"line\"> stop</span><br><span class=\"line\"> start</span><br><span class=\"line\"> RETVAL=$?</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> *)</span><br><span class=\"line\"> <span class=\"built_in\">echo</span> $<span class=\"string\">"Usage: <span class=\"variable\">$0</span> {start|stop|restart}"</span></span><br><span class=\"line\"> RETVAL=3</span><br><span class=\"line\"><span class=\"keyword\">esac</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"built_in\">exit</span> <span class=\"variable\">$RETVAL</span></span><br></pre></td></tr></table></figure>\n<h4 id=\"创建-etc-init-d-seahub脚本\"><a href=\"#创建-etc-init-d-seahub脚本\" class=\"headerlink\" title=\"创建/etc/init.d/seahub脚本\"></a>创建/etc/init.d/seahub脚本</h4><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/bin/bash</span></span><br><span class=\"line\"><span class=\"comment\">#</span></span><br><span class=\"line\"><span class=\"comment\"># seahub</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">#</span></span><br><span class=\"line\"><span class=\"comment\"># chkconfig: - 69 31</span></span><br><span class=\"line\"><span class=\"comment\"># description: seahub</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Source function library.</span></span><br><span class=\"line\">. /etc/init.d/<span class=\"built_in\">functions</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Source networking configuration.</span></span><br><span class=\"line\">. /etc/sysconfig/network</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">if</span> [ -f /etc/sysconfig/seafile ];<span class=\"keyword\">then</span></span><br><span class=\"line\"> . /etc/sysconfig/seafile</span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"Config file /etc/sysconfig/seafile not found! Bye."</span></span><br><span class=\"line\"> <span class=\"built_in\">exit</span> 200</span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"></span><br><span class=\"line\">RETVAL=0</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"function\"><span class=\"title\">start</span></span>() {</span><br><span class=\"line\"> <span class=\"comment\"># Start daemons.</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -n $<span class=\"string\">"Starting seahub: "</span></span><br><span class=\"line\"> <span class=\"built_in\">ulimit</span> -n 30000</span><br><span class=\"line\"> <span class=\"keyword\">if</span> [ <span class=\"variable\">$fastcgi</span> = <span class=\"literal\">true</span> ];</span><br><span class=\"line\"> <span class=\"keyword\">then</span></span><br><span class=\"line\"> su - <span class=\"variable\">${user}</span> -c<span class=\"string\">"<span class=\"variable\">${script_path}</span>/seahub.sh start-fastcgi <span class=\"variable\">${fastcgi_port}</span> >> <span class=\"variable\">${seahub_init_log}</span> 2>&1"</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> su - <span class=\"variable\">${user}</span> -c<span class=\"string\">"<span class=\"variable\">${script_path}</span>/seahub.sh start >> <span class=\"variable\">${seahub_init_log}</span> 2>&1"</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"> RETVAL=$?</span><br><span class=\"line\"> <span class=\"built_in\">echo</span></span><br><span class=\"line\"> [ <span class=\"variable\">$RETVAL</span> -eq 0 ] && touch /var/lock/subsys/seahub</span><br><span class=\"line\"> <span class=\"built_in\">return</span> <span class=\"variable\">$RETVAL</span></span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"function\"><span class=\"title\">stop</span></span>() {</span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -n $<span class=\"string\">"Shutting down seafile: "</span></span><br><span class=\"line\"> su - <span class=\"variable\">${user}</span> -c<span class=\"string\">"<span class=\"variable\">${script_path}</span>/seahub.sh stop >> <span class=\"variable\">${seahub_init_log}</span> 2>&1"</span></span><br><span class=\"line\"> RETVAL=$?</span><br><span class=\"line\"> <span class=\"built_in\">echo</span></span><br><span class=\"line\"> [ <span class=\"variable\">$RETVAL</span> -eq 0 ] && rm -f /var/lock/subsys/seahub</span><br><span class=\"line\"> <span class=\"built_in\">return</span> <span class=\"variable\">$RETVAL</span></span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># See how we were called.</span></span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"string\">"<span class=\"variable\">$1</span>"</span> <span class=\"keyword\">in</span></span><br><span class=\"line\"> start)</span><br><span class=\"line\"> start</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> stop)</span><br><span class=\"line\"> stop</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> restart|reload)</span><br><span class=\"line\"> stop</span><br><span class=\"line\"> start</span><br><span class=\"line\"> RETVAL=$?</span><br><span class=\"line\"> ;;</span><br><span class=\"line\"> *)</span><br><span class=\"line\"> <span class=\"built_in\">echo</span> $<span class=\"string\">"Usage: <span class=\"variable\">$0</span> {start|stop|restart}"</span></span><br><span class=\"line\"> RETVAL=3</span><br><span class=\"line\"><span class=\"keyword\">esac</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"built_in\">exit</span> <span class=\"variable\">$RETVAL</span></span><br></pre></td></tr></table></figure>\n<p>接下来启动服务程序:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">chmod 550 /etc/init.d/seafile</span><br><span class=\"line\">chmod 550 /etc/init.d/seahub</span><br><span class=\"line\">chkconfig --add seafile</span><br><span class=\"line\">chkconfig --add seahub</span><br><span class=\"line\">chkconfig seahub on</span><br><span class=\"line\">chkconfig seafile on</span><br></pre></td></tr></table></figure>\n<p>执行:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">service seafile start</span><br><span class=\"line\">service seahub start</span><br></pre></td></tr></table></figure>\n<p>完成</p>\n","slug":"笔记/2017-07-11.升级Seafile到专业版","comments":true,"categories":[],"tags":[{"name":"seafile","slug":"seafile","permalink":"https://www.zhiiker.com/tags/seafile/"},{"name":"端口","slug":"端口","permalink":"https://www.zhiiker.com/tags/%E7%AB%AF%E5%8F%A3/"},{"name":"开机启动","slug":"开机启动","permalink":"https://www.zhiiker.com/tags/%E5%BC%80%E6%9C%BA%E5%90%AF%E5%8A%A8/"}]},{"title":"JSP与Servlet之间传值","date":"2017-03-19T17:13:57.000Z","path":"2017/03/20/笔记/2017-03-20.JSP与Servlet之间传值/","text":"Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp;使用request、response对象完成传值,具体实现如下: 1.JSP传值给ServletJSP传值给Servlet有几种形式:Form表单传值,url传值,其他方式传值 a、form表单传值:JSP页面有: 1<input type="radio" name="staffdepartment" value="1" id="department1" /> 将department的id传到Sevlet 中,在程序中如下: 1ServletRequest request;String staffdepartment=request.getParameter("staffdepartment"); 可获取jsp传的department,但要获取id还要进行转化: 1int int_staffdepartment=Integer.parseInt(staffdepartment); b、url传值比如这里的 <a>标签的 href属性与 <form>标签的 action属性的值 "JspServlet?action=toServlet",在 servlet同样用 request.getParameter("action")获取; c、java代码传值java片段代码,servlet只能接到 session.setAttribute("testSession","Hello session")的内容,而接不到 request的内容。在 servlet里用 request.getSession().getAttribute("testSession")获取 session内容。 2.Servlet传值给Jsp具体实现如下: java代码: 123String a= "abccdefg "; request.setAttribute( "ValueA ",a); request.getRequestDispatcher( "网址/jsp页面 ").forward(request,response); jsp页面: 123<%String s =(String)request.getAttribute( "ValueA ");%> jsp页面就可以取出Servlet的值。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp;使用request、response对象完成传值,具体实现如下:</p>\n<span id=\"more\"></span>\n<h2 id=\"1-JSP传值给Servlet\"><a href=\"#1-JSP传值给Servlet\" class=\"headerlink\" title=\"1.JSP传值给Servlet\"></a>1.JSP传值给Servlet</h2><p>JSP传值给Servlet有几种形式:Form表单传值,url传值,其他方式传值</p>\n<h3 id=\"a、form表单传值:\"><a href=\"#a、form表单传值:\" class=\"headerlink\" title=\"a、form表单传值:\"></a>a、form表单传值:</h3><p>JSP页面有:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><input type="radio" name="staffdepartment" value="1" id="department1" /></span><br></pre></td></tr></table></figure>\n<p>将department的id传到Sevlet</p>\n<p>中,在程序中如下:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ServletRequest request;String staffdepartment=request.getParameter("staffdepartment");</span><br></pre></td></tr></table></figure>\n<p>可获取jsp传的department,但要获取id还要进行转化:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">int int_staffdepartment=Integer.parseInt(staffdepartment);</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"b、url传值\"><a href=\"#b、url传值\" class=\"headerlink\" title=\"b、url传值\"></a>b、url传值</h3><p>比如这里的 <code><a></code>标签的 href属性与 <code><form></code>标签的 action属性的值 <code>"JspServlet?action=toServlet"</code>,在 servlet同样用 <code>request.getParameter("action")</code>获取;</p>\n<h3 id=\"c、java代码传值\"><a href=\"#c、java代码传值\" class=\"headerlink\" title=\"c、java代码传值\"></a>c、java代码传值</h3><p>java片段代码,servlet只能接到 <code>session.setAttribute("testSession","Hello session")</code>的内容,而接不到 request的内容。在 servlet里用 <code>request.getSession().getAttribute("testSession")</code>获取 session内容。</p>\n<h2 id=\"2-Servlet传值给Jsp\"><a href=\"#2-Servlet传值给Jsp\" class=\"headerlink\" title=\"2.Servlet传值给Jsp\"></a>2.Servlet传值给Jsp</h2><p>具体实现如下:</p>\n<p>java代码:</p>\n<figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">String a= <span class=\"string\">"abccdefg "</span>; </span><br><span class=\"line\">request.setAttribute( <span class=\"string\">"ValueA "</span>,a); </span><br><span class=\"line\">request.getRequestDispatcher( <span class=\"string\">"网址/jsp页面 "</span>).forward(request,response); </span><br></pre></td></tr></table></figure>\n<p>jsp页面:</p>\n<figure class=\"highlight jsp\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><%</span><br><span class=\"line\">String s =(String)request.getAttribute( <span class=\"string\">"ValueA "</span>);</span><br><span class=\"line\">%></span><br></pre></td></tr></table></figure>\n<p>jsp页面就可以取出Servlet的值。</p>\n","slug":"笔记/2017-03-20.JSP与Servlet之间传值","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"J2EE","slug":"J2EE","permalink":"https://www.zhiiker.com/tags/J2EE/"},{"name":"Servlet","slug":"Servlet","permalink":"https://www.zhiiker.com/tags/Servlet/"},{"name":"JSP","slug":"JSP","permalink":"https://www.zhiiker.com/tags/JSP/"}]},{"title":"Linux 下执行定时任务 crontab 命令详解","date":"2017-03-19T13:12:30.000Z","path":"2017/03/19/笔记/2017-03-19.Linux 下执行定时任务 crontab 命令详解/","text":"1、先来一个小小的例子查看当前路径: 123[root@root test]# pwd/home/admin/test [root@root test]# crontab -l 查看当前用户的定时任务 也可以 crontab -uroot -l查看指定用户的定时任务。千万不要忘了中间的 sh 表示用户拿什么来执行命令 1200 02 * * * sh /home/admin/optbash/dailyBackup.sh00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh 建立一个用定时任务跑的bash脚本: 12[root@root test]# touch test.sh[root@root test]# vim test.sh 编辑如下内容,将系统当前时间输出到 console.txt 文件然后保存,增加可执行权限 123456/bin/echo `date` > /home/admin/test/console.txt[root@root test]# lltotal 8-rw-r--r-- 1 root root 29 Mar 27 21:31 console.txt-rwxr-xr-x 1 root root 48 Mar 27 21:28 test.sh[root@root test]# chmod +x ./test.sh 追加 crontab 定时任务,每分钟触发: 1234[root@root test]# crontab -e00 02 * * * sh /home/admin/optbash/dailyBackup.sh00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh* * * * * sh /home/admin/test/test.sh 前面是已经存在的定时任务,后面执行test.sh脚本的是追加的 保存后提示已经装载了新的定时任务 12"/tmp/crontab.HauiiV" 3L, 143C writtencrontab: installing new crontab 再次查看定时任务列表,可以看到定时任务已经添加 12345[root@root test]# crontab -l00 02 * * * sh /home/admin/optbash/dailyBackup.sh00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh* * * * * sh /home/admin/test/test.sh[root@root test]# 查看console.txt有没有每分钟写入console.txt文件 12[root@root test]# vim console.txtFri Mar 27 21:40:01 EDT 2015 可以看到最近一次的写入时间。 2、看看crontab 的时间表达式基本格式 : 12* * * * * command分 时 日 月 周 命令 然后来几个实际的例子: 1、每分钟执行一次1* * * * * 2、每隔一小时执行一次12300 * * * * or* */1 * * * (/表示频率) 3、每小时的15和30分各执行一次115,45 * * * * (,表示并列) 4、在每天上午 8- 11时中间每小时 15 ,45分各执行一次115,45 8-11 * * * command (-表示范围) 5、每个星期一的上午8点到11点的第3和第15分钟执行13,15 8-11 * * 1 command 6、每隔两天的上午8点到11点的第3和第15分钟执行13,15 8-11 */2 * * command 3、其他命令介绍名称 : crontab使用权限 : 所有使用者使用方式 : 123456crontab file [-u user]-用指定的文件替代目前的crontab。crontab-[-u user]-用标准输入替代目前的crontab.crontab-1[user]-列出用户目前的crontab.crontab-e[user]-编辑用户目前的crontab.crontab-d[user]-删除用户目前的crontab.crontab-c dir- 指定crontab的目录。 4、crond 安装与配置服务安装crontab:yum install crontabs 服务操作说明: 1234/sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sbin/service crond restart //重启服务/sbin/service crond reload //重新载入配置 查看crontab服务状态:service crond status 手动启动crontab服务:service crond start 查看crontab服务是否已设置为开机启动,执行命令:ntsysv 加入开机自动启动:chkconfig –level 35 crond on","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"1、先来一个小小的例子\"><a href=\"#1、先来一个小小的例子\" class=\"headerlink\" title=\"1、先来一个小小的例子\"></a>1、先来一个小小的例子</h2><p>查看当前路径:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@root test]# pwd</span><br><span class=\"line\">/home/admin/test </span><br><span class=\"line\">[root@root test]# crontab -l</span><br></pre></td></tr></table></figure>\n\n<span id=\"more\"></span>\n\n<p>查看当前用户的定时任务 也可以 crontab -uroot -l查看指定用户的定时任务。<br>千万不要忘了中间的 sh 表示用户拿什么来执行命令</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">00 02 * * * sh /home/admin/optbash/dailyBackup.sh</span><br><span class=\"line\">00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh</span><br></pre></td></tr></table></figure>\n<p>建立一个用定时任务跑的bash脚本:</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@root <span class=\"built_in\">test</span>]<span class=\"comment\"># touch test.sh</span></span><br><span class=\"line\">[root@root <span class=\"built_in\">test</span>]<span class=\"comment\"># vim test.sh</span></span><br></pre></td></tr></table></figure>\n<p>编辑如下内容,将系统当前时间输出到 console.txt 文件然后保存,增加可执行权限</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">/bin/<span class=\"built_in\">echo</span> `date` > /home/admin/<span class=\"built_in\">test</span>/console.txt</span><br><span class=\"line\">[root@root <span class=\"built_in\">test</span>]<span class=\"comment\"># ll</span></span><br><span class=\"line\">total 8</span><br><span class=\"line\">-rw-r--r-- 1 root root 29 Mar 27 21:31 console.txt</span><br><span class=\"line\">-rwxr-xr-x 1 root root 48 Mar 27 21:28 test.sh</span><br><span class=\"line\">[root@root <span class=\"built_in\">test</span>]<span class=\"comment\"># chmod +x ./test.sh</span></span><br></pre></td></tr></table></figure>\n\n<p>追加 crontab 定时任务,每分钟触发:</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@root <span class=\"built_in\">test</span>]<span class=\"comment\"># crontab -e</span></span><br><span class=\"line\">00 02 * * * sh /home/admin/optbash/dailyBackup.sh</span><br><span class=\"line\">00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh</span><br><span class=\"line\">* * * * * sh /home/admin/<span class=\"built_in\">test</span>/test.sh</span><br></pre></td></tr></table></figure>\n\n<p>前面是已经存在的定时任务,后面执行test.sh脚本的是追加的 保存后提示已经装载了新的定时任务</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"string\">"/tmp/crontab.HauiiV"</span> 3L, 143C written</span><br><span class=\"line\">crontab: installing new crontab</span><br></pre></td></tr></table></figure>\n<p>再次查看定时任务列表,可以看到定时任务已经添加</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@root <span class=\"built_in\">test</span>]<span class=\"comment\"># crontab -l</span></span><br><span class=\"line\">00 02 * * * sh /home/admin/optbash/dailyBackup.sh</span><br><span class=\"line\">00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh</span><br><span class=\"line\">* * * * * sh /home/admin/<span class=\"built_in\">test</span>/test.sh</span><br><span class=\"line\">[root@root <span class=\"built_in\">test</span>]<span class=\"comment\"># </span></span><br></pre></td></tr></table></figure>\n\n<p>查看console.txt有没有每分钟写入console.txt文件</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">[root@root <span class=\"built_in\">test</span>]<span class=\"comment\"># vim console.txt</span></span><br><span class=\"line\">Fri Mar 27 21:40:01 EDT 2015 </span><br></pre></td></tr></table></figure>\n\n<p>可以看到最近一次的写入时间。</p>\n<h2 id=\"2、看看crontab-的时间表达式\"><a href=\"#2、看看crontab-的时间表达式\" class=\"headerlink\" title=\"2、看看crontab 的时间表达式\"></a>2、看看crontab 的时间表达式</h2><p>基本格式 :</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">* * * * * <span class=\"built_in\">command</span></span><br><span class=\"line\">分 时 日 月 周 命令</span><br></pre></td></tr></table></figure>\n<p><img src=\"http://images.cnitblog.com/blog/34483/201301/08090352-4e0aa3fe4f404b3491df384758229be1.png\"><br>然后来几个实际的例子:</p>\n<h3 id=\"1、每分钟执行一次\"><a href=\"#1、每分钟执行一次\" class=\"headerlink\" title=\"1、每分钟执行一次\"></a>1、每分钟执行一次</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">* * * * * </span><br></pre></td></tr></table></figure>\n\n<h3 id=\"2、每隔一小时执行一次\"><a href=\"#2、每隔一小时执行一次\" class=\"headerlink\" title=\"2、每隔一小时执行一次\"></a>2、每隔一小时执行一次</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">00 * * * * </span><br><span class=\"line\">or</span><br><span class=\"line\">* */1 * * * (/表示频率)</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"3、每小时的15和30分各执行一次\"><a href=\"#3、每小时的15和30分各执行一次\" class=\"headerlink\" title=\"3、每小时的15和30分各执行一次\"></a>3、每小时的15和30分各执行一次</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">15,45 * * * * (,表示并列)</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"4、在每天上午-8-11时中间每小时-15-,45分各执行一次\"><a href=\"#4、在每天上午-8-11时中间每小时-15-,45分各执行一次\" class=\"headerlink\" title=\"4、在每天上午 8- 11时中间每小时 15 ,45分各执行一次\"></a>4、在每天上午 8- 11时中间每小时 15 ,45分各执行一次</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">15,45 8-11 * * * <span class=\"built_in\">command</span> (-表示范围)</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"5、每个星期一的上午8点到11点的第3和第15分钟执行\"><a href=\"#5、每个星期一的上午8点到11点的第3和第15分钟执行\" class=\"headerlink\" title=\"5、每个星期一的上午8点到11点的第3和第15分钟执行\"></a>5、每个星期一的上午8点到11点的第3和第15分钟执行</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">3,15 8-11 * * 1 <span class=\"built_in\">command</span></span><br></pre></td></tr></table></figure>\n\n<h3 id=\"6、每隔两天的上午8点到11点的第3和第15分钟执行\"><a href=\"#6、每隔两天的上午8点到11点的第3和第15分钟执行\" class=\"headerlink\" title=\"6、每隔两天的上午8点到11点的第3和第15分钟执行\"></a>6、每隔两天的上午8点到11点的第3和第15分钟执行</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">3,15 8-11 */2 * * <span class=\"built_in\">command</span></span><br></pre></td></tr></table></figure>\n\n<h2 id=\"3、其他命令介绍\"><a href=\"#3、其他命令介绍\" class=\"headerlink\" title=\"3、其他命令介绍\"></a>3、其他命令介绍</h2><p>名称 : <code>crontab</code><br>使用权限 : 所有使用者<br>使用方式 :</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">crontab file [-u user]-用指定的文件替代目前的crontab。</span><br><span class=\"line\">crontab-[-u user]-用标准输入替代目前的crontab.</span><br><span class=\"line\">crontab-1[user]-列出用户目前的crontab.</span><br><span class=\"line\">crontab-e[user]-编辑用户目前的crontab.</span><br><span class=\"line\">crontab-d[user]-删除用户目前的crontab.</span><br><span class=\"line\">crontab-c dir- 指定crontab的目录。 </span><br></pre></td></tr></table></figure>\n\n<h2 id=\"4、crond-安装与配置服务\"><a href=\"#4、crond-安装与配置服务\" class=\"headerlink\" title=\"4、crond 安装与配置服务\"></a>4、crond 安装与配置服务</h2><p>安装crontab:<br><code>yum install crontabs</code></p>\n<p>服务操作说明:</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">/sbin/service crond start //启动服务</span><br><span class=\"line\">/sbin/service crond stop //关闭服务</span><br><span class=\"line\">/sbin/service crond restart //重启服务</span><br><span class=\"line\">/sbin/service crond reload //重新载入配置</span><br></pre></td></tr></table></figure>\n\n<p>查看crontab服务状态:<br><code>service crond status</code></p>\n<p>手动启动crontab服务:<br><code>service crond start</code></p>\n<p>查看crontab服务是否已设置为开机启动,执行命令:<br><code>ntsysv</code></p>\n<p>加入开机自动启动:<br><code>chkconfig –level 35 crond on</code></p>\n","slug":"笔记/2017-03-19.Linux 下执行定时任务 crontab 命令详解","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"linux","slug":"linux","permalink":"https://www.zhiiker.com/tags/linux/"},{"name":"crontab","slug":"crontab","permalink":"https://www.zhiiker.com/tags/crontab/"}]},{"title":"个人名称、引用的一些出处","date":"2017-02-22T00:18:59.000Z","path":"2017/02/22/笔记/2017-02-22.个人名称-引用的一些出处/","text":"萱苏始无慰,寂寞终可期。参见下面的链接:《郡东山望溟海》 本来站点取作“萱苏小筑”是因为《大秦帝国》中的萱苏客栈印象很深,之后查了下“萱苏”发现很符合自己的状态:重新思考自己的人生之路,重新寻求人生的归宿与心灵的安顿。 苟非吾之所有,虽一毫而莫取。出处:前赤壁赋节选如下: 苏子曰:“客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,则天地曾不能以一瞬;自其不变者而观之,则物与我皆无尽也,而又何羡乎!且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭。是造物者之无尽藏也,而吾与子之所共适。” 象之若作为昵称取的意义是如你所想的样子。象 《易经·系辞》里面几句:“见乃谓之象;形乃谓之器;制而用之谓之法;利用出入,民咸用之,谓之神。”看见一个意思,叫做象;把这个意象变成一种东西 ——形,叫做器;大规模地制造出来,叫做法;老百姓用工程师制造出来的这些器具,都说好呀!好呀!但是不晓得这器具是从一种意象来的,所以看见工程师便叫做神。 《韓非子‧解老》:“人希見生象也,而得死象之骨,按其圖以想其生也。故諸人之所以意想者,皆謂之象也。” 《老子》:“惚兮恍兮,其中有象。” 《易‧繫辭下》:“是故易者,象也。象也者,像也。” 《老子》:“執大象,天下往。”河上公注:“象,道也。” “龟,象也;筮,数也。物生而后有象,象而后有滋,滋而后有数。” 见于《左传·僖公十五年》韩简 最早见于《左传·僖公十五年》韩简之言:“龟,象也;筮,数也。物生而后有象,象而后有滋,滋而后有数。”象 本来指龟背上的花纹句子原意是:乌龟生出来背上有花纹,之后生长 生长之后花纹裂开了,形成的好几块引申的含义就是 有物体才有形象,有形象并生长后才会分出数目这是中国古代的象数学根据,后又引到中医 易经 等领域著作它以象为主论述客观事物的有序性,以文辞数字形式为用,循着抽象性与应用辩证统一的道路不断发展,形成了以有机论数学观念为理念的非构造性数学体系。 之主谓之间助词。 若动词;如,像。 tobechaos 热寂 超以象外,得其环中。出自司空图《二十四诗品》中,雄浑原文为: 雄浑 大用外腓,真体内充。反虚入浑,积健为雄。具备万物,横绝太空。 荒荒油云,寥寥长风。超以象外,得其环中。持之匪强,来之无穷。 《二十四诗品》专谈诗的风格问题,而其最大特点,便是着眼于各种风格的意境,而不注重它们形成的要素与方法。作者用诗的语言,为各种风格描绘出一幅幅意境,对这种风格的创造方法则在行文中略加点拨。有的通篇是感性的形象画面,而毫不作理性的逻辑分析。如“清奇”:“娟娟群松,下有漪流。晴雪满汀,隔溪渔舟。可人如玉,步屟寻幽。载瞻载止;空碧悠悠。神出古异,澹不可收。如月之曙,如气之秋。”只是给出了一种“清奇”的意境而全不说破,让读者自己去咀嚼、体悟、把握。所以,根据我自己的体悟应该是说明雄浑的诗歌所有的那种通过宏大的场面或叙事,来说明或者蕴含的某种道理的特点。 君子之交,其淡如水,执象而求,咫尺千里执象以求 咫尺千里 弘一大师病危前手书之偈语,曰:“君子之交,其淡如水。执象而求,咫尺千里。问余何适,廓尔忘言。花枝春满,天心月圆。”君子之交,其淡如水。应该解释为,君子之间的交往如水一般纯净,不带杂质。执象而求,咫尺千里。是说如果只看朋友交往的表面现象,好像看到了真实情况,实际上差得远了。问余何适,廓尔亡言。是说问我将到哪里去安身呢,前路广阔,我无言以对。花枝春满,天心月圆。但只见春满花开,皓月当空,一片宁静安详,那就是我的归处啊。“象”的说法来自魏晋玄学,是对应於“意”而言的。一般言之,“立象以尽意”,此是象所尽之意。有象所尽者,即有其所不尽者。象所不能尽者,即“象外之意”。弘一大师借著这道理来说明佛教的真理,表示佛教对真理的最高体悟,是离语言文字思维的,所谓的“语言道断,心行路绝”者是。故说执象(语言文字思维,这些都是“象”)而求真理,真理其实就在咫尺之间,但对胶著与“象”的人来说,何止千里? 开源思想、业余在挖矿学校码农专业摸鱼,专注炼丹算命全栈,热爱Phil的NeuroScience票友。 从荷笠姐那里改来的。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p><strong>萱苏始无慰,寂寞终可期。</strong><br>参见下面的链接:<br><a href=\"http://www.xuansu.org/2016/08/%E9%83%A1%E4%B8%9C%E5%B1%B1%E6%9C%9B%E6%BA%9F%E6%B5%B7%E8%AF%97/\">《郡东山望溟海》</a></p>\n<p> 本来站点取作“萱苏小筑”是因为《大秦帝国》中的萱苏客栈印象很深,之后查了下“萱苏”发现很符合自己的状态:重新思考自己的人生之路,重新寻求人生的归宿与心灵的安顿。</p>\n<span id=\"more\"></span>\n\n<p><strong>苟非吾之所有,虽一毫而莫取。</strong><br>出处:前赤壁赋<br>节选如下:</p>\n<blockquote>\n<p>苏子曰:“客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,则天地曾不能以一瞬;自其不变者而观之,则物与我皆无尽也,而又何羡乎!且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭。是造物者之无尽藏也,而吾与子之所共适。”</p>\n</blockquote>\n<p><strong>象之若</strong><br>作为昵称取的意义是如你所想的样子。<br><em>象</em></p>\n<blockquote>\n<p>《易经·系辞》里面几句:“见乃谓之象;形乃谓之器;制而用之谓之法;利用出入,民咸用之,谓之神。”<br>看见一个意思,叫做象;把这个意象变成一种东西 ——形,叫做器;大规模地制造出来,叫做法;老百姓用工程师制造出来的这些器具,都说好呀!好呀!但是不晓得这器具是从一种意象来的,所以看见工程师便叫做神。</p>\n</blockquote>\n<blockquote>\n<p>《韓非子‧解老》:“人希見生象也,而得死象之骨,按其圖以想其生也。故諸人之所以意想者,皆謂之象也。”</p>\n</blockquote>\n<hr>\n<blockquote>\n<p>《老子》:“惚兮恍兮,其中有象。”</p>\n</blockquote>\n<hr>\n<blockquote>\n<p>《易‧繫辭下》:“是故易者,象也。象也者,像也。”</p>\n</blockquote>\n<hr>\n<blockquote>\n<p>《老子》:“執大象,天下往。”<br>河上公注:“象,道也。”</p>\n</blockquote>\n<hr>\n<blockquote>\n<p>“龟,象也;筮,数也。物生而后有象,象而后有滋,滋而后有数。”<br> 见于《左传·僖公十五年》韩简</p>\n<blockquote>\n</blockquote>\n<p>最早见于《左传·僖公十五年》韩简之言:“龟,象也;筮,数也。<br>物生而后有象,象而后有滋,滋而后有数。”<br>象 本来指龟背上的花纹<br>句子原意是:乌龟生出来背上有花纹,之后生长 生长之后花纹裂开了,形成的好几块<br>引申的含义就是 有物体才有形象,有形象并生长后才会分出数目<br>这是中国古代的象数学根据,后又引到中医 易经 等领域著作<br>它以象为主论述客观事物的有序性,以文辞数字形式为用,循着抽象性与应用辩证统一的道路不断发展,形成了以有机论数学观念为理念的非构造性数学体系。</p>\n</blockquote>\n<p><em>之</em><br>主谓之间助词。</p>\n<p><em>若</em><br>动词;如,像。</p>\n<p><strong>tobechaos</strong></p>\n<p>热寂</p>\n<p><strong>超以象外,得其环中。</strong><br>出自司空图《二十四诗品》中,雄浑<br>原文为:</p>\n<blockquote>\n<center>雄浑</center >\n<center>大用外腓,真体内充。反虚入浑,积健为雄。具备万物,横绝太空。</center >\n<center>荒荒油云,寥寥长风。超以象外,得其环中。持之匪强,来之无穷。</center >\n</blockquote>\n<hr>\n<blockquote>\n<p>《二十四诗品》专谈诗的风格问题,而其最大特点,便是着眼于各种风格的意境,而不注重它们形成的要素与方法。作者用诗的语言,为各种风格描绘出一幅幅意境,对这种风格的创造方法则在行文中略加点拨。有的通篇是感性的形象画面,而毫不作理性的逻辑分析。如“清奇”:“娟娟群松,下有漪流。晴雪满汀,隔溪渔舟。可人如玉,步屟寻幽。载瞻载止;空碧悠悠。神出古异,澹不可收。如月之曙,如气之秋。”只是给出了一种“清奇”的意境而全不说破,让读者自己去咀嚼、体悟、把握。<br>所以,根据我自己的体悟应该是说明雄浑的诗歌所有的那种通过宏大的场面或叙事,来说明或者蕴含的某种道理的特点。</p>\n</blockquote>\n<p><strong>君子之交,其淡如水,执象而求,咫尺千里</strong><br><a href=\"http://www.xuansu.org/2016/08/%E6%89%A7%E8%B1%A1%E4%BB%A5%E6%B1%82-%E5%92%AB%E5%B0%BA%E5%8D%83%E9%87%8C/\">执象以求 咫尺千里</a></p>\n<blockquote>\n<p>弘一大师病危前手书之偈语,曰:“君子之交,其淡如水。执象而求,咫尺千里。问余何适,廓尔忘言。花枝春满,天心月圆。”<br>君子之交,其淡如水。应该解释为,君子之间的交往如水一般纯净,不带杂质。<br>执象而求,咫尺千里。是说如果只看朋友交往的表面现象,好像看到了真实情况,实际上差得远了。<br>问余何适,廓尔亡言。是说问我将到哪里去安身呢,前路广阔,我无言以对。<br>花枝春满,天心月圆。但只见春满花开,皓月当空,一片宁静安详,那就是我的归处啊。<br>“象”的说法来自魏晋玄学,是对应於“意”而言的。一般言之,“立象以尽意”,此是象所尽之意。有象所尽者,即有其所不尽者。象所不能尽者,即“象外之意”。弘一大师借著这道理来说明佛教的真理,表示佛教对真理的最高体悟,是离语言文字思维的,所谓的“语言道断,心行路绝”者是。故说执象(语言文字思维,这些都是“象”)而求真理,真理其实就在咫尺之间,但对胶著与“象”的人来说,何止千里?</p>\n</blockquote>\n<p><strong>开源思想、业余在挖矿学校码农专业摸鱼,专注炼丹算命全栈,热爱Phil的NeuroScience票友。</strong></p>\n<p>从荷笠姐那里改来的。</p>\n","slug":"笔记/2017-02-22.个人名称-引用的一些出处","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"备忘","slug":"备忘","permalink":"https://www.zhiiker.com/tags/%E5%A4%87%E5%BF%98/"}]},{"title":"oracle中关于单引号和双引号的问题","date":"2016-11-23T07:50:12.000Z","path":"2016/11/23/笔记/2016-11-23.oracle中关于单引号和双引号的问题/","text":"在Oracle中: 双引号的作用是:假如建立对象的时候,对象名、字段名加双引号,则示意 Oracle将严格区分大小写,否则Oracl都默认大写。 而单引号则示意:这个加了单引号的字段是一个字类似字符串,并不区分大小写。单引号用于标识字符与数字的区别 当指定字符串文本时,必须用单引号将字符串文本引住。 Oracle10g之前,假如字符串文本里含有单引号,那么必须运用两个单引号示意。例如:I’m a String! 字符串文本则为:string_var:=’I’’m a String!’ 在oracle10g中可以运用其它分隔符(<>,[],{}等),留心,运用这些分隔符时,不仅要在分隔符前后加单引号,还要带有前缀q.例:string_var:=q’[I’’m a String!]’; 例如 12select* from table_name where id=1;---这种代表查询的是数字select* from table_name where id='1'; ---这种代表查询的是字符 假如是双引号是这样,假如你有个表的字段叫sysdate,因为sysdate属于oracle中的特有字符,但你要查询这个字段的时候 1 select "sysdate" from table_name; 但是你要是用 1 select 'sysdate' from table_name; 那么你查出来的就是字符串,结果是sysdate 运用如下的更新语句不可以:update device set dept='select * from message where name='tom' ' ; 处理要领: 12 update device set dept='select * from message where name=' 'tom' ' where id=3' ; 执行成功。 原来,两个’’ 示意了一个’ 单引号在ORACLE中,单引号有两个作用:1:字符串是由单引号引用2:转义。 单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解1.从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。 1234SQL> select '''' result from dual; RESULT ------ ' 第二个单引号被作为转义符,第三个单引号被转义,可将sql写成这样更好理解: 12select ' '' ' from dual; output:' 2.连接符‘||’导致了新一轮的转义:连接符号‘||’左右的单引号没有任何的关系,除非‘||’是作为字符串的一部分(这在动态SQL中很常见)。 1234SQL> select 'name'||'''' result from dual; RESULT ------ name' 理解:||后面的作为一个字符串,即前后是’,中间又是一个密集型单引号串’’,因此第一个为转义功能. 1234SQL> select 'name''''' result from dual; RESULT ------ name'' 第一个和最后一个单引号作为字符串引用符,中间四个单引号两两转义. oracle中使用双引号:1)一般来说,字符串中的双引号仅仅被当作一个普通字符进行处理。此时,双引号不需要成对出现: 1234SQL> select 'hh24"小时""mi""分"""ss"秒"' results from dual; RESULTS ------------------------- hh24"小时""mi""分"""ss"秒" 2)当出现在to_char的格式字符串中时,双引号有特殊的作用,就是将非法的格式符包装起来,避免出现ORA-01821: date format not recognized错误。也就是说,去掉双引号和其包含的字符后,剩下的应该是一个合法的格式串。to_char在处理格式字符串时,会忽略双引号: 1234SQL> select to_char(sysdate,'hh24"小时"mi"分"ss"秒"') results from dual; RESULTS -------------- 06小时39分51秒 格式串为’hh24”小时”mi”分”ss”秒”‘;去掉双引号部分后,剩下的是’hh24miss’,是一个合法的格式串。不过即使真不知道双引号的这个用法,也可以这样来处理,虽然麻烦一点: 12345678select to_char(sysdate, 'hh24') || '小时' || to_char(sysdate, 'mi') || '分' || to_char(sysdate, 'ss') || '秒' AS RESULT from dual; RESULT -------------- 06小时40分18秒","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>在Oracle中:<br> 双引号的作用是:假如建立对象的时候,对象名、字段名加双引号,则示意 Oracle将严格区分大小写,否则Oracl都默认大写。<br> 而单引号则示意:这个加了单引号的字段是一个字类似字符串,并不区分大小写。<br>单引号用于标识字符与数字的区别<br> 当指定字符串文本时,必须用单引号将字符串文本引住。</p>\n<span id=\"more\"></span>\n\n<p> Oracle10g之前,假如字符串文本里含有单引号,那么必须运用两个单引号示意。例如:I’m a String!<br> 字符串文本则为:string_var:=’I’’m a String!’<br> 在oracle10g中可以运用其它分隔符(<>,[],{}等),留心,运用这些分隔符时,不仅要在分隔符前后加单引号,还要带有前缀q.例:string_var:=q’[I’’m a String!]’;<br> 例如</p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">select</span><span class=\"operator\">*</span> <span class=\"keyword\">from</span> table_name <span class=\"keyword\">where</span> id<span class=\"operator\">=</span><span class=\"number\">1</span>;<span class=\"comment\">---这种代表查询的是数字</span></span><br><span class=\"line\"><span class=\"keyword\">select</span><span class=\"operator\">*</span> <span class=\"keyword\">from</span> table_name <span class=\"keyword\">where</span> id<span class=\"operator\">=</span><span class=\"string\">'1'</span>; <span class=\"comment\">---这种代表查询的是字符</span></span><br></pre></td></tr></table></figure>\n<p> 假如是双引号是这样,假如你有个表的字段叫sysdate,因为sysdate属于oracle中的特有字符,但你要查询这个字段的时候</p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> <span class=\"keyword\">select</span> "sysdate" <span class=\"keyword\">from</span> table_name;</span><br></pre></td></tr></table></figure>\n<p> 但是你要是用</p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> <span class=\"keyword\">select</span> <span class=\"string\">'sysdate'</span> <span class=\"keyword\">from</span> table_name;</span><br></pre></td></tr></table></figure>\n<p> 那么你查出来的就是字符串,结果是sysdate<br> 运用如下的更新语句不可以:<code>update device set dept='select * from message where name='tom' ' ;</code><br> 处理要领:</p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> update device <span class=\"keyword\">set</span> dept<span class=\"operator\">=</span><span class=\"string\">'select * from message where name='</span> <span class=\"string\">'tom'</span> <span class=\"string\">' where id=3'</span> ;</span><br><span class=\"line\"> 执行成功。</span><br></pre></td></tr></table></figure>\n<p> 原来,两个’’ 示意了一个’</p>\n<h2 id=\"单引号\"><a href=\"#单引号\" class=\"headerlink\" title=\"单引号\"></a>单引号</h2><p>在ORACLE中,单引号有两个作用:<br>1:字符串是由单引号引用<br>2:转义。 </p>\n<p>单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解<br>1.从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个)。</p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">SQL</span><span class=\"operator\">></span> <span class=\"keyword\">select</span> <span class=\"string\">''''</span> <span class=\"keyword\">result</span> <span class=\"keyword\">from</span> dual; </span><br><span class=\"line\"><span class=\"keyword\">RESULT</span> </span><br><span class=\"line\"><span class=\"comment\">------ </span></span><br><span class=\"line\"><span class=\"string\">' </span></span><br></pre></td></tr></table></figure>\n\n<p>第二个单引号被作为转义符,第三个单引号被转义,可将sql写成这样更好理解: </p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">select</span> <span class=\"string\">' '' '</span> <span class=\"keyword\">from</span> dual; </span><br><span class=\"line\">output:<span class=\"string\">' </span></span><br></pre></td></tr></table></figure>\n\n<p>2.连接符‘||’导致了新一轮的转义:<br>连接符号‘||’左右的单引号没有任何的关系,<br>除非‘||’是作为字符串的一部分(这在动态SQL中很常见)。 </p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">SQL</span><span class=\"operator\">></span> <span class=\"keyword\">select</span> <span class=\"string\">'name'</span><span class=\"operator\">||</span><span class=\"string\">''''</span> <span class=\"keyword\">result</span> <span class=\"keyword\">from</span> dual; </span><br><span class=\"line\"><span class=\"keyword\">RESULT</span> </span><br><span class=\"line\"><span class=\"comment\">------ </span></span><br><span class=\"line\">name<span class=\"string\">' </span></span><br></pre></td></tr></table></figure>\n<p>理解:||后面的作为一个字符串,即前后是’,中间又是一个密集型单引号串’’,因此第一个为转义功能. </p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">SQL</span><span class=\"operator\">></span> <span class=\"keyword\">select</span> <span class=\"string\">'name'''''</span> <span class=\"keyword\">result</span> <span class=\"keyword\">from</span> dual; </span><br><span class=\"line\"><span class=\"keyword\">RESULT</span> </span><br><span class=\"line\"><span class=\"comment\">------ </span></span><br><span class=\"line\">name<span class=\"string\">''</span> </span><br></pre></td></tr></table></figure>\n<p>第一个和最后一个单引号作为字符串引用符,中间四个单引号两两转义. </p>\n<h2 id=\"oracle中使用双引号:\"><a href=\"#oracle中使用双引号:\" class=\"headerlink\" title=\"oracle中使用双引号:\"></a>oracle中使用双引号:</h2><p>1)一般来说,字符串中的双引号仅仅被当作一个普通字符进行处理。<br>此时,双引号不需要成对出现: </p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">SQL</span><span class=\"operator\">></span> <span class=\"keyword\">select</span> <span class=\"string\">'hh24"小时""mi""分"""ss"秒"'</span> results <span class=\"keyword\">from</span> dual; </span><br><span class=\"line\">RESULTS </span><br><span class=\"line\"><span class=\"comment\">------------------------- </span></span><br><span class=\"line\">hh24"小时""mi""分"""ss"秒" </span><br></pre></td></tr></table></figure>\n<p>2)当出现在to_char的格式字符串中时,双引号有特殊的作用,<br>就是将非法的格式符包装起来,避免出现ORA-01821: date format not recognized错误。<br>也就是说,去掉双引号和其包含的字符后,剩下的应该是一个合法的格式串。<br>to_char在处理格式字符串时,会忽略双引号: </p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">SQL</span><span class=\"operator\">></span> <span class=\"keyword\">select</span> to_char(sysdate,<span class=\"string\">'hh24"小时"mi"分"ss"秒"'</span>) results <span class=\"keyword\">from</span> dual; </span><br><span class=\"line\">RESULTS </span><br><span class=\"line\"><span class=\"comment\">-------------- </span></span><br><span class=\"line\"><span class=\"number\">06</span>小时<span class=\"number\">39</span>分<span class=\"number\">51</span>秒 </span><br></pre></td></tr></table></figure>\n<p>格式串为’hh24”小时”mi”分”ss”秒”‘;<br>去掉双引号部分后,剩下的是’hh24miss’,是一个合法的格式串。<br>不过即使真不知道双引号的这个用法,也可以这样来处理,虽然麻烦一点: </p>\n<figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">select</span> to_char(sysdate, <span class=\"string\">'hh24'</span>) <span class=\"operator\">||</span> <span class=\"string\">'小时'</span> <span class=\"operator\">||</span> </span><br><span class=\"line\"> to_char(sysdate, <span class=\"string\">'mi'</span>) <span class=\"operator\">||</span> <span class=\"string\">'分'</span> <span class=\"operator\">||</span> </span><br><span class=\"line\"> to_char(sysdate, <span class=\"string\">'ss'</span>) <span class=\"operator\">||</span> <span class=\"string\">'秒'</span> </span><br><span class=\"line\"> <span class=\"keyword\">AS</span> <span class=\"keyword\">RESULT</span> </span><br><span class=\"line\"><span class=\"keyword\">from</span> dual; </span><br><span class=\"line\"><span class=\"keyword\">RESULT</span> </span><br><span class=\"line\"><span class=\"comment\">-------------- </span></span><br><span class=\"line\"><span class=\"number\">06</span>小时<span class=\"number\">40</span>分<span class=\"number\">18</span>秒 </span><br></pre></td></tr></table></figure>","slug":"笔记/2016-11-23.oracle中关于单引号和双引号的问题","comments":true,"categories":[{"name":"Oracle","slug":"Oracle","permalink":"https://www.zhiiker.com/categories/Oracle/"}],"tags":[{"name":"Oracle","slug":"Oracle","permalink":"https://www.zhiiker.com/tags/Oracle/"}]},{"title":"最终的写作解决方案","date":"2016-11-16T03:05:36.000Z","path":"2016/11/16/笔记/2016-11-16.笔记编辑工具的最后选择/","text":"最终解决方案前两天整理Farbox上的内容时候,想到了MarkEditor编辑器,想看看现在变成什么样子了,下载开始试用,发现可以直接绑定第三方云,日志和图片直接可以上传到绑定的云端,功能上较Farbox的编辑器明显优化了很多。FileHotst功能可以直接发布到静态博客。 最优化的方案放弃使用Farbox自带的编辑器,使用Dropbox作为同步方案。同时提交到Github和Coding上,使用MarkEditor编辑Markdown文件,对应同步到Farbox和Hexo的文件夹。并且开启Admin后端 在VPS安装Hexo,使用 Incrond 配合Dropbox实现同步发布,Farbox支持将日志同步到Dropbox, http://jaredforsyth.com/hexo-admin/使用这个可以直接后台可视化编辑的。 几个参考链接 不止是一款简单的码字工具:MarkEditor 进阶功能介绍 利用github webhook自动更新hexo VPS+Dropbox+markeditor打造Hexo完美体验 用Hexo+Vps搭建博客并用Dropbox同步自动发布 使用 Dropbox 和 VPS 实现实时部署 Hexo 博客","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"最终解决方案\"><a href=\"#最终解决方案\" class=\"headerlink\" title=\"最终解决方案\"></a>最终解决方案</h2><p>前两天整理Farbox上的内容时候,想到了MarkEditor编辑器,想看看现在变成什么样子了,下载开始试用,发现可以直接绑定第三方云,日志和图片直接可以上传到绑定的云端,功能上较Farbox的编辑器明显优化了很多。FileHotst功能可以直接发布到静态博客。</p>\n<h2 id=\"最优化的方案\"><a href=\"#最优化的方案\" class=\"headerlink\" title=\"最优化的方案\"></a>最优化的方案</h2><p>放弃使用Farbox自带的编辑器,使用Dropbox作为同步方案。<br>同时提交到Github和Coding上,使用MarkEditor编辑Markdown文件,对应同步到Farbox和Hexo的文件夹。<br>并且开启Admin后端</p>\n<span id=\"more\"></span>\n\n<p>在VPS安装Hexo,使用 Incrond 配合Dropbox实现同步发布,Farbox支持将日志同步到Dropbox,</p>\n<p><a href=\"http://jaredforsyth.com/hexo-admin/\">http://jaredforsyth.com/hexo-admin/</a><br>使用这个可以直接后台可视化编辑的。</p>\n<h2 id=\"几个参考链接\"><a href=\"#几个参考链接\" class=\"headerlink\" title=\"几个参考链接\"></a>几个参考链接</h2><ul>\n<li><a href=\"http://sspai.com/34656\">不止是一款简单的码字工具:MarkEditor 进阶功能介绍</a></li>\n<li><a href=\"http://blog.liaol.net/2015/06/use-github-webhooks-to-deploy-hexo/\">利用github webhook自动更新hexo</a></li>\n<li><a href=\"http://www.geekcat.xyz/hexo/vps_dropbox_hexo.html\">VPS+Dropbox+markeditor打造Hexo完美体验</a></li>\n<li><a href=\"http://www.fanicy.com/2014/06/01/0001.hexowithvpsdropbox/\">用Hexo+Vps搭建博客并用Dropbox同步自动发布</a></li>\n<li><a href=\"http://www.xmt.design/2016/04/04/blog-depoly-via-dropbox.html\">使用 Dropbox 和 VPS 实现实时部署 Hexo 博客</a></li>\n</ul>\n","slug":"笔记/2016-11-16.笔记编辑工具的最后选择","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Markdown","slug":"Markdown","permalink":"https://www.zhiiker.com/tags/Markdown/"}]},{"title":"使用case-when实现if-then-else逻辑","date":"2016-11-15T16:00:00.000Z","path":"2016/11/16/笔记/2016-11-16.use_case-when_implement_if-then-else_logic/","text":"1234567891011121314151617181920212223--类似创建表create table empcp as select * from emp where 1=1;--1=2无数据<!-- more -->declarev_emp empcp%rowtype;begin select * into v_emp from empcp where ename='&雇员名';case v_emp.jobwhen 'CLERK' then update empcp set sal=sal+500 where empno=v_emp.empno;when 'SALESMAN' then update empcp set sal=sal+1000 where empno=v_emp.empno;when 'ANALYST' then update empcp set sal=sal+1500 where empno=v_emp.empno;else update empcp set sal=sal+2000 where empno=v_emp.empno;end case;commit;end;/","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><figure class=\"highlight sql\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">--类似创建表</span></span><br><span class=\"line\"><span class=\"keyword\">create</span> <span class=\"keyword\">table</span> empcp <span class=\"keyword\">as</span> <span class=\"keyword\">select</span> <span class=\"operator\">*</span> <span class=\"keyword\">from</span> emp <span class=\"keyword\">where</span> <span class=\"number\">1</span><span class=\"operator\">=</span><span class=\"number\">1</span>;</span><br><span class=\"line\"><span class=\"comment\">--1=2无数据</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"operator\"><</span><span class=\"operator\">!</span><span class=\"comment\">-- more --></span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">declare</span></span><br><span class=\"line\">v_emp empcp<span class=\"operator\">%</span>rowtype;</span><br><span class=\"line\"><span class=\"keyword\">begin</span></span><br><span class=\"line\">\t<span class=\"keyword\">select</span> <span class=\"operator\">*</span> <span class=\"keyword\">into</span> v_emp <span class=\"keyword\">from</span> empcp <span class=\"keyword\">where</span> ename<span class=\"operator\">=</span><span class=\"string\">'&雇员名'</span>;</span><br><span class=\"line\"><span class=\"keyword\">case</span> v_emp.job</span><br><span class=\"line\"><span class=\"keyword\">when</span> <span class=\"string\">'CLERK'</span> <span class=\"keyword\">then</span></span><br><span class=\"line\"> update empcp <span class=\"keyword\">set</span> sal<span class=\"operator\">=</span>sal<span class=\"operator\">+</span><span class=\"number\">500</span> <span class=\"keyword\">where</span> empno<span class=\"operator\">=</span>v_emp.empno;</span><br><span class=\"line\"><span class=\"keyword\">when</span> <span class=\"string\">'SALESMAN'</span> <span class=\"keyword\">then</span></span><br><span class=\"line\"> update empcp <span class=\"keyword\">set</span> sal<span class=\"operator\">=</span>sal<span class=\"operator\">+</span><span class=\"number\">1000</span> <span class=\"keyword\">where</span> empno<span class=\"operator\">=</span>v_emp.empno;</span><br><span class=\"line\"><span class=\"keyword\">when</span> <span class=\"string\">'ANALYST'</span> <span class=\"keyword\">then</span></span><br><span class=\"line\"> update empcp <span class=\"keyword\">set</span> sal<span class=\"operator\">=</span>sal<span class=\"operator\">+</span><span class=\"number\">1500</span> <span class=\"keyword\">where</span> empno<span class=\"operator\">=</span>v_emp.empno;</span><br><span class=\"line\"><span class=\"keyword\">else</span></span><br><span class=\"line\"> update empcp <span class=\"keyword\">set</span> sal<span class=\"operator\">=</span>sal<span class=\"operator\">+</span><span class=\"number\">2000</span> <span class=\"keyword\">where</span> empno<span class=\"operator\">=</span>v_emp.empno;</span><br><span class=\"line\"><span class=\"keyword\">end</span> <span class=\"keyword\">case</span>;</span><br><span class=\"line\"><span class=\"keyword\">commit</span>;</span><br><span class=\"line\"><span class=\"keyword\">end</span>;</span><br><span class=\"line\"><span class=\"operator\">/</span></span><br></pre></td></tr></table></figure>\n","slug":"笔记/2016-11-16.use_case-when_implement_if-then-else_logic","comments":true,"categories":[{"name":"Oracle","slug":"Oracle","permalink":"https://www.zhiiker.com/categories/Oracle/"}],"tags":[{"name":"Oracle","slug":"Oracle","permalink":"https://www.zhiiker.com/tags/Oracle/"}]},{"title":"如何在Linux中创建一个交换文件","date":"2016-09-28T17:13:35.000Z","path":"2016/09/29/笔记/2016-09-29.如何在Linux中创建一个交换文件/","text":"当程序需要的内存比电脑上拥有的物理内存还要大的时候,不管是 Windows 也好,Linux 也好,解决办法就是把存不下的东西转移到硬盘上的“虚拟内存”中去,尽管硬盘的速度比内存慢上很多,但是至少容量要大上很多。 另外,操作系统也可以把一些很久不活动的程序转移到虚拟内存中去,留出更多的主内存给需要的程序和磁盘缓冲。 Linux 在安装的时候,一般需要划出一个分区作为 Linux 的“交换分区”,作为虚拟内存内容的保存分区。 swapon -s 这个命令,可以查看当前系统的虚拟内存的情况,这条命令需要 root 来运行。 123Filename Type Size Used Priority/dev/sda3 partition 1004052 0 -1 可以看到常常看到当前的交换分区为 /dev/sda3,第 2 栏的Type中显示为 partition,说明这是个交换分区,那么,还有其他的 Type 吗? 当然,其实 Linux 也可以像 Windows 一样,用交换文件来保存虚拟内存的内容,这样即使你忘记划出交换分区也不要紧,而且灵活性上会更大一些。下面我们看看如何创建交换文件。 交换文件和交换分区一样,大小是固定的,比如你想要一个 1G 的交换文件,那么首先要创建一个 1G 的空白文件,我们用 dd 这个工具来完成这个任务: $ cd / $ sudo dd if=/dev/zero of=swapfile bs=1M count=3000 将其设置为1GB,(在上面的例子3000)改变计数值为1000,1500等1.5GB 现在更改创建与下面的命令交换文件的文件。 $ sudo mkswap swapfile 打开交换文件的命令, $ sudo swapon swapfile 为确保交换文件在系统启动时,打开fstab中自动打开。 $ sudo nano etc/fstab 并添加如下行。保存并关闭。 /swapfile none swap sw 0 0 这就对了。你可以,如果系统使用您的命令创建的交换文件检查 $ cat /proc/meminfo","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>当程序需要的内存比电脑上拥有的物理内存还要大的时候,不管是 Windows 也好,Linux 也好,解决办法就是把存不下的东西转移到硬盘上的“虚拟内存”中去,尽管硬盘的速度比内存慢上很多,但是至少容量要大上很多。</p>\n<p>另外,操作系统也可以把一些很久不活动的程序转移到虚拟内存中去,留出更多的主内存给需要的程序和磁盘缓冲。</p>\n<span id=\"more\"></span>\n\n<p>Linux 在安装的时候,一般需要划出一个分区作为 Linux 的“交换分区”,作为虚拟内存内容的保存分区。</p>\n<p><code>swapon -s</code> 这个命令,可以查看当前系统的虚拟内存的情况,这条命令需要 root 来运行。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">Filename Type Size Used Priority</span><br><span class=\"line\"></span><br><span class=\"line\">/dev/sda3 partition 1004052 0 -1</span><br></pre></td></tr></table></figure>\n<p>可以看到常常看到当前的交换分区为<code> /dev/sda3</code>,第 2 栏的<code>Type</code>中显示为<code> partition</code>,说明这是个交换分区,那么,还有其他的 Type 吗?</p>\n<p>当然,其实 Linux 也可以像 Windows 一样,用交换文件来保存虚拟内存的内容,这样即使你忘记划出交换分区也不要紧,而且灵活性上会更大一些。下面我们看看如何创建交换文件。</p>\n<p>交换文件和交换分区一样,大小是固定的,比如你想要一个 1G 的交换文件,那么首先要创建一个 1G 的空白文件,我们用 dd 这个工具来完成这个任务:</p>\n<!-- more -->\n\n<p><code>$ cd /</code></p>\n<p><code>$ sudo dd if=/dev/zero of=swapfile bs=1M count=3000</code></p>\n<p>将其设置为1GB,(在上面的例子3000)改变计数值为1000,1500等1.5GB</p>\n<p>现在更改创建与下面的命令交换文件的文件。</p>\n<p><code>$ sudo mkswap swapfile</code></p>\n<p>打开交换文件的命令,</p>\n<p><code>$ sudo swapon swapfile</code></p>\n<p>为确保交换文件在系统启动时,打开fstab中自动打开。</p>\n<p><code>$ sudo nano etc/fstab</code></p>\n<p>并添加如下行。保存并关闭。</p>\n<p><code>/swapfile none swap sw 0 0</code></p>\n<p>这就对了。你可以,如果系统使用您的命令创建的交换文件检查</p>\n<p><code>$ cat /proc/meminfo</code></p>\n","slug":"笔记/2016-09-29.如何在Linux中创建一个交换文件","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Linux","slug":"Linux","permalink":"https://www.zhiiker.com/tags/Linux/"}]},{"title":"Python中的注释","date":"2016-09-28T08:20:42.000Z","path":"2016/09/28/笔记/2016-09-28.Python中的注释/","text":"慢慢整理下Python的学习笔记。现在从最基础的开始。 Pycharm、Sublime有三种注释方式: 用 一对””” 括起来要注释的代码块。 用一对’’’括起来要注释的代码块。 选中要注释的代码,按下ctrl+/注释。 12345678910111213141516171819202122232425262728#!/usr/bin/python#coding=gbk# Filename: if.py#----->1.用一对"""(三个双引号)括起来要注释的代码:""" number = 23 guess = int(raw_input('Enter an integer : ')) if guess == number: print 'Congratulations, you guessed it.' # New blockstarts here print "(but you do not win any prizes!)" # New blockends here elif guess < number:"""#----->2.用一对'''(三个单引号)括起来要注释的代码块:''' print 'No, it is a little higher than that' #Another block# You can do whatever you want in a block ...else:'''#----->3.选中要注释的代码,按下ctrl+/注释:# print 'No, it is a little lower than that'# # you must have guess > number to reach here# print 'Done'# # This last statement is always executed, after the ifstatement is executed Vimgc[ n line]j 注释 n 行代码。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>慢慢整理下Python的学习笔记。现在从最基础的开始。</p>\n<h2 id=\"Pycharm、Sublime\"><a href=\"#Pycharm、Sublime\" class=\"headerlink\" title=\"Pycharm、Sublime\"></a>Pycharm、Sublime</h2><p>有三种注释方式:</p>\n<ol>\n<li>用 一对””” 括起来要注释的代码块。</li>\n<li>用一对’’’括起来要注释的代码块。</li>\n<li>选中要注释的代码,按下ctrl+/注释。</li>\n</ol>\n<span id=\"more\"></span>\n\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">#!/usr/bin/python</span><br><span class=\"line\">#coding=gbk</span><br><span class=\"line\"># Filename: if.py</span><br><span class=\"line\"></span><br><span class=\"line\">#----->1.用一对"""(三个双引号)括起来要注释的代码:</span><br><span class=\"line\">"""</span><br><span class=\"line\"> number = 23</span><br><span class=\"line\"> guess = int(raw_input('Enter an integer : '))</span><br><span class=\"line\"> if guess == number:</span><br><span class=\"line\"> print 'Congratulations, you guessed it.' # New blockstarts here</span><br><span class=\"line\"> print "(but you do not win any prizes!)" # New blockends here</span><br><span class=\"line\"> elif guess < number:</span><br><span class=\"line\">"""</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\">#----->2.用一对'''(三个单引号)括起来要注释的代码块:</span><br><span class=\"line\">'''</span><br><span class=\"line\"> print 'No, it is a little higher than that' #Another block</span><br><span class=\"line\"># You can do whatever you want in a block ...</span><br><span class=\"line\">else:</span><br><span class=\"line\">'''</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\">#----->3.选中要注释的代码,按下ctrl+/注释:</span><br><span class=\"line\"># print 'No, it is a little lower than that'</span><br><span class=\"line\"># # you must have guess > number to reach here</span><br><span class=\"line\"># print 'Done'</span><br><span class=\"line\"># # This last statement is always executed, after the ifstatement is executed</span><br></pre></td></tr></table></figure>\n\n<h2 id=\"Vim\"><a href=\"#Vim\" class=\"headerlink\" title=\"Vim\"></a>Vim</h2><p><code>gc[ n line]j </code>注释 n 行代码。</p>\n","slug":"笔记/2016-09-28.Python中的注释","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Python","slug":"Python","permalink":"https://www.zhiiker.com/tags/Python/"}]},{"title":"有关笔记管理","date":"2016-09-28T00:53:00.000Z","path":"2016/09/28/笔记/2016-09-28.有关笔记的管理/","text":"想了想笔记还是放在书阁比较好,考虑过各种博客还有云笔记Gitbook,博客发布不方便,而且私人笔记并不是所有的都值得发布的,Gitbook就不太合适了。现有的云笔记试遍了,感觉不方便也不完善。书阁的好处是可以实时同步,也可以设置成草稿。因此自己的策略是学习的时候实时在书阁记录,过后整理并把代码同步到Github上。如果觉得质量不错的发布到博客。值得整理成书的放到Gitbook上。值得商榷的放到Wiki上。我想把这个Wiki命名做巴别塔之巅亦即bavel.top","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>想了想笔记还是放在<code>书阁</code>比较好,考虑过各种博客还有云笔记Gitbook,博客发布不方便,<br>而且私人笔记并不是所有的都值得发布的,Gitbook就不太合适了。<br>现有的云笔记试遍了,感觉不方便也不完善。<br><code>书阁</code>的好处是可以实时同步,也可以设置成草稿。<br>因此自己的策略是学习的时候实时在<code>书阁</code>记录,过后整理并把代码同步到Github上。<br>如果觉得质量不错的发布到博客。<br>值得整理成书的放到Gitbook上。<br>值得商榷的放到Wiki上。<br>我想把这个Wiki命名做<code>巴别塔之巅</code>亦即<code>bavel.top</code></p>\n","slug":"笔记/2016-09-28.有关笔记的管理","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/tags/%E7%AC%94%E8%AE%B0/"}]},{"title":"Hexo小技巧","date":"2016-09-23T14:04:51.000Z","path":"2016/09/23/笔记/2016-09-23.Hexo小技巧/","text":"部署时保证README.md不被渲染在Hexo目录下的source根目录下添加一个,README.md。修改Hexo目录下的_config.yml。将skip_render参数的值设置上。skip_render: README.md保存退出即可。使用hexo d 命令就不会在渲染 README.md 这个文件了。 添加一个 SSH key参考Generating a new SSH key and adding it to the ssh-agentssh-keygen -t rsa -b 4096 -C "your_email@example.com"代码参数含义:-t 指定密钥类型,默认是 rsa ,可以省略。-C 设置注释文字,比如邮箱。-f 指定密钥文件存储文件名。以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如: Generating public/private rsa key pair.Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter] 当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。 接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码) 当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到github上了,如: Enter passphrase (empty for no passphrase): # Enter same passphrase again: 接下来,就会显示如下代码提示,如: Your identification has been saved in /c/Users/you/.ssh/id_rsa.Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.The key fingerprint is:01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com 当你看到上面这段代码的时候,那就说明你的 SSH key 已经创建成功,你只需要添加到github的SSH key上就可以了。 登陆github系统。点击右上角的 Account Settings—->SSH Public keys —-> add another public keys把你本地生成的密钥复制到里面(key文本框中), 点击 add key 就ok了 测试可以输入下面的命令,看看设置是否成功,git@github.com的部分不要修改:ssh -T git@github.com Gist嵌入Gist片段 1{% gist gist_id [filename] %} 或者直接粘贴Gitst生成的标签 1<script src="https://gist.github.com/wmwwmv/e935d55588d5f1f0225ebbbf372c6648.js"></script> 后缀加上pibb就可以生成一个渲染好的页面https://gist.github.com/tiimgreen/10545817.pibb","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"部署时保证README-md不被渲染\"><a href=\"#部署时保证README-md不被渲染\" class=\"headerlink\" title=\"部署时保证README.md不被渲染\"></a>部署时保证README.md不被渲染</h2><p>在Hexo目录下的source根目录下添加一个,README.md。<br>修改Hexo目录下的_config.yml。<br>将skip_render参数的值设置上。skip_render: README.md<br>保存退出即可。<br>使用hexo d 命令就不会在渲染 README.md 这个文件了。</p>\n<span id=\"more\"></span>\n\n<h2 id=\"添加一个-SSH-key\"><a href=\"#添加一个-SSH-key\" class=\"headerlink\" title=\"添加一个 SSH key\"></a>添加一个 SSH key</h2><p>参考<a href=\"https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/\">Generating a new SSH key and adding it to the ssh-agent</a><br><code>ssh-keygen -t rsa -b 4096 -C "your_email@example.com"</code><br>代码参数含义:<br>-t 指定密钥类型,默认是 rsa ,可以省略。-C 设置注释文字,比如邮箱。-f 指定密钥文件存储文件名。<br>以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如:</p>\n<blockquote>\n<p>Generating public/private rsa key pair.<br>Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]</p>\n</blockquote>\n<p>当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。</p>\n<p>接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码)</p>\n<p>当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到github上了,如:</p>\n<blockquote>\n<p>Enter passphrase (empty for no passphrase): # Enter same passphrase again:</p>\n</blockquote>\n<p>接下来,就会显示如下代码提示,如:</p>\n<blockquote>\n<p>Your identification has been saved in /c/Users/you/.ssh/id_rsa.<br>Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.<br>The key fingerprint is:<br>01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db <a href=\"mailto:your_email@example.com\">your_email@example.com</a></p>\n</blockquote>\n<p>当你看到上面这段代码的时候,那就说明你的 SSH key 已经创建成功,你只需要添加到github的SSH key上就可以了。</p>\n<p>登陆github系统。点击右上角的 Account Settings—->SSH Public keys —-> add another public keys<br>把你本地生成的密钥复制到里面(key文本框中), 点击 add key 就ok了</p>\n<p>测试<br>可以输入下面的命令,看看设置是否成功,<a href=\"mailto:git@github.com\">git@github.com</a>的部分不要修改:<br><code>ssh -T git@github.com</code></p>\n<h2 id=\"Gist\"><a href=\"#Gist\" class=\"headerlink\" title=\"Gist\"></a>Gist</h2><p>嵌入Gist片段</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">{% gist gist_id [filename] %}</span><br></pre></td></tr></table></figure>\n\n<script src=\"//gist.github.com/dbfae0851767b54fe055acaad234a576.js?file=gistfile1.txt\"></script>\n\n<p>或者直接粘贴Gitst生成的标签</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><script src="https://gist.github.com/wmwwmv/e935d55588d5f1f0225ebbbf372c6648.js"></script></span><br></pre></td></tr></table></figure>\n<script src=\"https://gist.github.com/wmwwmv/e935d55588d5f1f0225ebbbf372c6648.js\"></script>\n<p>后缀加上pibb就可以生成一个渲染好的页面<br><a href=\"https://gist.github.com/tiimgreen/10545817.pibb\">https://gist.github.com/tiimgreen/10545817.pibb</a></p>\n","slug":"笔记/2016-09-23.Hexo小技巧","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Hexo","slug":"Hexo","permalink":"https://www.zhiiker.com/tags/Hexo/"}]},{"title":"CMD命令行","date":"2016-09-23T13:04:16.000Z","path":"2016/09/23/笔记/2016-09-23.CMD命令行/","text":"建立空文件的几种方法 cd.>a.txtcd.表示改变当前目录为当前目录,即等于没改变;而且此命令不会有输出。>表示把命令输出写入到文件。后面跟着a.txt,就表示写入到a.txt。而此例中命令不会有输出,所以就创建了没有内容的空文件。 copy nul a.txtnul表示空设备,从概念上讲,它不可见,存在于每个目录中,可以把它看成一个特殊的“文件”,它没有内容;一般可把输出写入到nul,来达到屏蔽输出的目的,如pause>nul,此命令执行效果是暂停,并且不会显示“请按任意键继续. . .”。此例子表示将空设备复制到a.txt,同样创建了没有内容的空文件。 type nul>a.txt此例子表示显示空设备的内容,并写入到a.txt。 echo a 2>a.txt“2”表示错误输出的句柄,此例中没有错误输出,所以创建了没有内容的空文件。其实>默认都是重定向了句柄1,即标准输出句柄。比如cd.>a.txt,其实就是cd. 1>a.txt。同样,句柄3到9也可以使用在本例中,它们是未经定义的句柄,也不会有输出,如echo a 3>a.txt。 fsutil file createnew d:\\a.txt 0使用fsutil创建了一个空文件。 其他命令只要没有输出,并重定向到文件就可以了 建立非空文件的几种方法 echo a>a.txt最常用的是echo命令,此例子表示把字母a和回车换行覆盖输出到a.txt(如果a.txt原来已有内容则覆盖掉原来的内容),如果追加内容,可以使用>>,如echo b>>a.txt,表示把b和回车换行追加到文件末尾。 其他命令的重定向输出,如type a.txt > b.txtcopy a.txt b.txtfsutil file createnew d:\\a.txt 1","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"建立空文件的几种方法\"><a href=\"#建立空文件的几种方法\" class=\"headerlink\" title=\"建立空文件的几种方法\"></a>建立空文件的几种方法</h2><ol>\n<li><p>cd.>a.txt<br>cd.表示改变当前目录为当前目录,即等于没改变;而且此命令不会有输出。<br><code>></code>表示把命令输出写入到文件。后面跟着a.txt,就表示写入到a.txt。<br>而此例中命令不会有输出,所以就创建了没有内容的空文件。</p>\n</li>\n<li><p>copy nul a.txt<br>nul表示空设备,从概念上讲,它不可见,存在于每个目录中,可以把它看成一个特殊的“文件”,它没有内容;一般可把输出写入到nul,来达到屏蔽输出的目的,如pause>nul,此命令执行效果是暂停,并且不会显示“请按任意键继续. . .”。<br>此例子表示将空设备复制到a.txt,同样创建了没有内容的空文件。</p>\n</li>\n<li><p>type nul>a.txt<br>此例子表示显示空设备的内容,并写入到a.txt。</p>\n</li>\n<li><p>echo a 2>a.txt<br>“2”表示错误输出的句柄,此例中没有错误输出,所以创建了没有内容的空文件。<br>其实>默认都是重定向了句柄1,即标准输出句柄。比如cd.>a.txt,其实就是cd. 1>a.txt。<br>同样,句柄3到9也可以使用在本例中,它们是未经定义的句柄,也不会有输出,如<br>echo a 3>a.txt。</p>\n</li>\n<li><p>fsutil file createnew d:\\a.txt 0<br>使用fsutil创建了一个空文件。</p>\n</li>\n<li><p>其他命令<br>只要没有输出,并重定向到文件就可以了</p>\n</li>\n</ol>\n<h2 id=\"建立非空文件的几种方法\"><a href=\"#建立非空文件的几种方法\" class=\"headerlink\" title=\"建立非空文件的几种方法\"></a>建立非空文件的几种方法</h2><ol>\n<li><p>echo a>a.txt<br>最常用的是echo命令,此例子表示把字母a和回车换行覆盖输出到a.txt(如果a.txt原来已有内容则覆盖掉原来的内容),如果追加内容,可以使用>>,如echo b>>a.txt,表示把b和回车换行追加到文件末尾。</p>\n</li>\n<li><p>其他命令的重定向输出,如<br>type a.txt > b.txt<br>copy a.txt b.txt<br>fsutil file createnew d:\\a.txt 1</p>\n</li>\n</ol>\n","slug":"笔记/2016-09-23.CMD命令行","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"cmd","slug":"cmd","permalink":"https://www.zhiiker.com/tags/cmd/"}]},{"title":"基础Git技能","date":"2016-09-23T12:59:00.000Z","path":"2016/09/23/笔记/2016-09-23.基础Git技能/","text":"首先廖雪峰的Git教程 帮助git {xxx} --help 配置用户信息配置12git config --global user.name "John Doe"git config --global user.email johndoe@example.com 这里--global是全局 如果想使用不同的用户不加这个参数配置就好。 文本编辑器配置git config --global core.editor emacs 查看配置信息全部git config --list某一个git config <key> 获取 Git 仓库在当前目录新建一个Git代码库git init 新建一个目录,将其初始化为Git代码库git init [project-name] 下载一个项目和它的整个代码历史git clone [url] 获取到远程库首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库如果本地需上传的仓库为learngit,运行以下命令:git remote add origin git@github.com:michaelliao/learngit.git需要将michaelliao更换为自己的用户名。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。下一步,就可以把本地库的所有内容推送到远程库上:git push -u origin master不过在push之前需要git add .跟踪文件git commit提交后push之后远程库才能同步。此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改 更新1git pull 跟踪文件使用命令git add开始跟踪一个文件,或者把已跟踪的已修改的文件放到临时存储区域。这个命令有很多参数可以选择,可通过git add --help来了解,不过最常用的是两种: 1234### 跟踪一个具体的文件git add <filepath>### 跟踪所有文件git add . 工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件。工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件(废话)。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。 忽略某些文件一般我们总会有些文件无需纳入 Git 的管理。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 更典型的场景是,我们获得了一份JAVA工程源码,在本地我们需要用eclipse来进行开发,eclipse会为项目生成.classpath .project .settings等eclipse特有的文件(夹),还会自动编译源码,产出的.class文件放在bin目录下。这几个文件和bin文件夹,都没必要进行控制,因为他们会自动生成,不同的开发环境和编译环境的产出并不相同,我们只需把src目录下所有东西用git管理起来就行。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。 来看一个实际的例子: 1234567891011*.class # 忽略clsss文件# Mobile Tools for Java (J2ME).mtj.tmp/# Package Files #*.jar #忽略jar包*.war*.ear# eclipse files #.project.classpath.settings/ GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在https://github.com/github/gitignore 找到它. 检查当前文件状态要查看哪些文件处于什么状态,可以用git status命令。我们现在有1.txt,可以新增一个2.txt,然后运行git status,可以看到status命令不仅列出了文件状态,还对下一步应该使用的命令给出了提示,很棒! 提交git commit这种方式会启动文本编辑器以便输入本次提交的说明。如果你不熟悉当前系统的文本编辑器的使用(如vi),你也可以在commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示: 1git commit -m "第一次提交1.txt" 注释随便写的,建议正式项目中写更为具体的注释,以便大家知道你具体干了什么。 三种状态Git 有三种状态,你的文件可能处于其中之一:已修改(modified)、已暂存(staged)和已提交(committed)。 已修改表示修改了文件,但还没跟踪,如新增的文件和刚修改过的文件。 已暂存表示对一个已修改文件的当前版本做了标记(git add)。 已提交表示数据已经安全地保存在本地数据库中(git commit)。 由此引入 Git 项目的三个工作区域的概念:工作目录、暂存区域以及Git仓库。 工作目录是放在磁盘上供你使用或修改的文件及目录总和。 暂存区域是一个文件,缓存文件快照,有时候也被称作“索引”,不过一般说法还是叫暂存区域。 Git仓库是 Git 用来保存项目的元数据和文件快照的地方,记录了所有历史提交。 基本的 Git 工作流程如下: 在工作目录中修改文件。 暂存文件(git add),将文件的快照放入暂存区域。 提交更新(git commit),找到暂存区域的文件,将快照永久性存储到 Git 仓库。 需要注意的是,文件快照必须先经过暂存区,才能到仓库区。盘点之前的操作,1.txt经过暂存并提交,现在进入了本地仓库,但是2.txt未进行add操作,因此本地仓库里面其实没有2.txt的记录。现在我们暂存并提交下2.txt: 12git add .git commit -m "第一次提交2.txt" 提交的才是安全的现在我们在操作系统里面删掉1.txt并尝试恢复: 1234rm 1.txtll #查看文件列表,1.txt没了git checkout .ll #查看文件列表,1.txt回来了 checkout命令我们暂时不解释,这里只证明提交了就安全了,可恢复了。相比之下,如果没有提交,直接删掉文件除了从回收站找以外没别的办法,如果回收站被清空了,那就真的丢失了。 关于提交的其他命令跳过暂存区域直接提交尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤. 查看提交历史在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史. 完成这个任务最简单而又有效的工具是 git log 命令。在目录下运行 git log默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。 git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。 一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交 如果你想看到每次提交的简略的统计信息,你可以使用 --stat 选项. 另外一个常用的选项是 --pretty。 这个选项可以指定使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如用 oneline 将每个提交放在一行显示,查看的提交数很大时非常有用。 另外还有short,full 和 fuller 可以用,展示的信息或多或少有些不同1git log --pretty=oneline 文件对比对比工作区与暂存区123cat 2.txt #查看2.txt的内容222vi 2.txt #新增一行为333git diff -- 2.txt #比对工作区和暂存区(上次暂存)的区别 得到的提示前面是一些基本信息,文件对比细节在@@之后,+表示新增,-表示删除,行前无符号表示未改变。 对比暂存区和仓库区也就是比对缓存快照和已经提交的快照 1git diff --cached -- 2.txt 结果显示无差异,因为上一次缓存的都提交了,接下来这样尝试: 12git add . #所有文件缓存快照git diff --cached -- 2.txt #比对2.txt的暂存快照和提交快照 得到的效果和上上次实验一样,因为2.txt增加一行后的快照已经暂存,但是还没提交,所以对比下,暂存快照比已提交快照多了一行。 对比工作区和仓库区也就是得到自上次提交以来文件的变化,命令必须带上commit_id或者基于HEAD的运算(HEAD~是最后一个commit_id): 1git diff HEAD~ -- 2.txt 对比效果和上次一样,因为新增的一行就是上次提交以来的所有变化。 对比两次提交之间的差异12345git log --pretty=onelineb037a33258f9582c2d70e130b62b699df7900280 删除3.txt54da1fe001be58c7fc41f6d3aac0e35166b8cb4a 首次提交3.txt2abf7fb7ca06bd3a3eadc85471c41a340134d249 第一次提交2.txt976ea66c800dee7ce3c69601e31518f2ef721237 第一次提交1.txt 然后对比第一和第二次提交的差异: 1git diff 976ea66c 2abf7fb7 注意,这里我们使用了简写的commit_id,因为只要简写能完全标识一次提交,没有必要使用完整的commit_id.第二次提交相对于第一次提交来说,增加了一个文件,文件里面增加了内容。 这个命令可以带上文件路径,如:git diff 976ea66c 2abf7fb7 -- 2.txt,当然结果是一样的,因为只有2.txt有变化。 移除文件之前我们移除并恢复过1.txt文件,但这与“从版本库中移除文件”并不相同。要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm <filepath>命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项-f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。 另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加.gitignore文件,不小心把一个很大的日志文件或一堆.a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用--cached选项: 12345678910cd lesson1echo 333>3.txtgit add .git commit -m "首次提交3.txt"git rm --cached 3.txtll #查看文件列表,3.txt还在git status #3.txt显示为未跟踪#编辑.gitignore,添加3.txtgit add .git commit -m "删除3.txt" 这样处理之后,3.txt仍然在本地,但是会被git忽略掉。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>首先<a href=\"http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000\">廖雪峰的Git教程</a></p>\n<h2 id=\"帮助\"><a href=\"#帮助\" class=\"headerlink\" title=\"帮助\"></a>帮助</h2><p><code>git {xxx} --help</code></p>\n<h2 id=\"配置\"><a href=\"#配置\" class=\"headerlink\" title=\"配置\"></a>配置</h2><h3 id=\"用户信息配置\"><a href=\"#用户信息配置\" class=\"headerlink\" title=\"用户信息配置\"></a>用户信息配置</h3><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git config --global user.name "John Doe"</span><br><span class=\"line\">git config --global user.email johndoe@example.com</span><br></pre></td></tr></table></figure>\n<p>这里<code>--global</code>是全局 如果想使用不同的用户不加这个参数配置就好。</p>\n<span id=\"more\"></span>\n\n<h3 id=\"文本编辑器配置\"><a href=\"#文本编辑器配置\" class=\"headerlink\" title=\"文本编辑器配置\"></a>文本编辑器配置</h3><p><code>git config --global core.editor emacs</code></p>\n<h3 id=\"查看配置信息\"><a href=\"#查看配置信息\" class=\"headerlink\" title=\"查看配置信息\"></a>查看配置信息</h3><p>全部<br><code>git config --list</code><br>某一个<br><code>git config <key></code></p>\n<h2 id=\"获取-Git-仓库\"><a href=\"#获取-Git-仓库\" class=\"headerlink\" title=\"获取 Git 仓库\"></a>获取 Git 仓库</h2><h3 id=\"在当前目录新建一个Git代码库\"><a href=\"#在当前目录新建一个Git代码库\" class=\"headerlink\" title=\"在当前目录新建一个Git代码库\"></a>在当前目录新建一个Git代码库</h3><p><code>git init</code></p>\n<h3 id=\"新建一个目录,将其初始化为Git代码库\"><a href=\"#新建一个目录,将其初始化为Git代码库\" class=\"headerlink\" title=\"新建一个目录,将其初始化为Git代码库\"></a>新建一个目录,将其初始化为Git代码库</h3><p><code>git init [project-name]</code></p>\n<h3 id=\"下载一个项目和它的整个代码历史\"><a href=\"#下载一个项目和它的整个代码历史\" class=\"headerlink\" title=\"下载一个项目和它的整个代码历史\"></a>下载一个项目和它的整个代码历史</h3><p><code>git clone [url]</code></p>\n<h3 id=\"获取到远程库\"><a href=\"#获取到远程库\" class=\"headerlink\" title=\"获取到远程库\"></a>获取到远程库</h3><p>首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库<br>如果本地需上传的仓库为learngit,运行以下命令:<br><code>git remote add origin git@github.com:michaelliao/learngit.git</code><br>需要将<code>michaelliao</code>更换为自己的用户名。<br>添加后,远程库的名字就是<code>origin</code>,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。<br>下一步,就可以把本地库的所有内容推送到远程库上:<br><code>git push -u origin master</code><br>不过在push之前需要<code>git add .</code>跟踪文件<code>git commit</code>提交后push之后远程库才能同步。<br>此后,每次本地提交后,只要有必要,就可以使用命令<code>git push origin master</code>推送最新修改</p>\n<h3 id=\"更新\"><a href=\"#更新\" class=\"headerlink\" title=\"更新\"></a>更新</h3><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git pull</span><br></pre></td></tr></table></figure>\n\n<h2 id=\"跟踪文件\"><a href=\"#跟踪文件\" class=\"headerlink\" title=\"跟踪文件\"></a>跟踪文件</h2><p>使用命令<code>git add</code>开始跟踪一个文件,或者把已跟踪的已修改的文件放到临时存储区域。这个命令有很多参数可以选择,可通过<code>git add --help</code>来了解,不过最常用的是两种:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">### 跟踪一个具体的文件</span><br><span class=\"line\">git add <filepath></span><br><span class=\"line\">### 跟踪所有文件</span><br><span class=\"line\">git add .</span><br></pre></td></tr></table></figure>\n<p>工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件。工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件(废话)。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。</p>\n<h3 id=\"忽略某些文件\"><a href=\"#忽略某些文件\" class=\"headerlink\" title=\"忽略某些文件\"></a>忽略某些文件</h3><p>一般我们总会有些文件无需纳入 Git 的管理。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。</p>\n<p>更典型的场景是,我们获得了一份JAVA工程源码,在本地我们需要用eclipse来进行开发,eclipse会为项目生成<code>.classpath</code> <code>.project</code> <code>.settings</code>等eclipse特有的文件(夹),还会自动编译源码,产出的<code>.class</code>文件放在bin目录下。这几个文件和bin文件夹,都没必要进行控制,因为他们会自动生成,不同的开发环境和编译环境的产出并不相同,我们只需把src目录下所有东西用git管理起来就行。</p>\n<p>在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。 来看一个实际的例子:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">*.class # 忽略clsss文件</span><br><span class=\"line\"># Mobile Tools for Java (J2ME)</span><br><span class=\"line\">.mtj.tmp/</span><br><span class=\"line\"># Package Files #</span><br><span class=\"line\">*.jar #忽略jar包</span><br><span class=\"line\">*.war</span><br><span class=\"line\">*.ear</span><br><span class=\"line\"># eclipse files #</span><br><span class=\"line\">.project</span><br><span class=\"line\">.classpath</span><br><span class=\"line\">.settings/</span><br></pre></td></tr></table></figure>\n<p>GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在<a href=\"https://github.com/github/gitignore\">https://github.com/github/gitignore</a> 找到它.</p>\n<h2 id=\"检查当前文件状态\"><a href=\"#检查当前文件状态\" class=\"headerlink\" title=\"检查当前文件状态\"></a>检查当前文件状态</h2><p>要查看哪些文件处于什么状态,可以用<code>git status</code>命令。我们现在有1.txt,可以新增一个2.txt,然后运行<code>git status</code>,可以看到status命令不仅列出了文件状态,还对下一步应该使用的命令给出了提示,很棒!</p>\n<h2 id=\"提交\"><a href=\"#提交\" class=\"headerlink\" title=\"提交\"></a>提交</h2><p><code>git commit</code><br>这种方式会启动文本编辑器以便输入本次提交的说明。如果你不熟悉当前系统的文本编辑器的使用(如vi),你也可以在commit 命令后添加 <code>-m</code> 选项,将提交信息与命令放在同一行,如下所示:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git commit -m "第一次提交1.txt"</span><br></pre></td></tr></table></figure>\n<p>注释随便写的,建议正式项目中写更为具体的注释,以便大家知道你具体干了什么。</p>\n<h2 id=\"三种状态\"><a href=\"#三种状态\" class=\"headerlink\" title=\"三种状态\"></a>三种状态</h2><p>Git 有三种状态,你的文件可能处于其中之一:<strong>已修改(modified)</strong>、<strong>已暂存(staged)</strong>和<strong>已提交(committed)</strong>。</p>\n<ul>\n<li>已修改表示修改了文件,但还没跟踪,如新增的文件和刚修改过的文件。</li>\n<li>已暂存表示对一个已修改文件的当前版本做了标记(<code>git add</code>)。</li>\n<li>已提交表示数据已经安全地保存在本地数据库中(<code>git commit</code>)。</li>\n</ul>\n<p>由此引入 Git 项目的三个工作区域的概念:<strong>工作目录</strong>、<strong>暂存区域</strong>以及<strong>Git仓库</strong>。</p>\n<ul>\n<li>工作目录是放在磁盘上供你使用或修改的文件及目录总和。</li>\n<li>暂存区域是一个文件,缓存文件快照,有时候也被称作“索引”,不过一般说法还是叫暂存区域。</li>\n<li>Git仓库是 Git 用来保存项目的元数据和文件快照的地方,记录了所有历史提交。</li>\n</ul>\n<p>基本的 Git 工作流程如下:</p>\n<ol>\n<li>在工作目录中修改文件。</li>\n<li>暂存文件(<code>git add</code>),将文件的快照放入暂存区域。</li>\n<li>提交更新(<code>git commit</code>),找到暂存区域的文件,将快照永久性存储到 Git 仓库。</li>\n</ol>\n<p>需要注意的是,文件快照必须先经过暂存区,才能到仓库区。盘点之前的操作,1.txt经过暂存并提交,现在进入了本地仓库,但是2.txt未进行add操作,因此本地仓库里面其实没有2.txt的记录。<br>现在我们暂存并提交下2.txt:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git add .</span><br><span class=\"line\">git commit -m "第一次提交2.txt"</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"提交的才是安全的\"><a href=\"#提交的才是安全的\" class=\"headerlink\" title=\"提交的才是安全的\"></a>提交的才是安全的</h3><p>现在我们在操作系统里面删掉1.txt并尝试恢复:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">rm 1.txt</span><br><span class=\"line\">ll #查看文件列表,1.txt没了</span><br><span class=\"line\">git checkout .</span><br><span class=\"line\">ll #查看文件列表,1.txt回来了</span><br></pre></td></tr></table></figure>\n<p>checkout命令我们暂时不解释,这里只证明提交了就安全了,可恢复了。相比之下,如果没有提交,直接删掉文件除了从回收站找以外没别的办法,如果回收站被清空了,那就真的丢失了。</p>\n<h2 id=\"关于提交的其他命令\"><a href=\"#关于提交的其他命令\" class=\"headerlink\" title=\"关于提交的其他命令\"></a>关于提交的其他命令</h2><h3 id=\"跳过暂存区域直接提交\"><a href=\"#跳过暂存区域直接提交\" class=\"headerlink\" title=\"跳过暂存区域直接提交\"></a>跳过暂存区域直接提交</h3><p>尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 <code>git commit</code> 加上 <code>-a</code> 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 <code>git add</code> 步骤.</p>\n<h3 id=\"查看提交历史\"><a href=\"#查看提交历史\" class=\"headerlink\" title=\"查看提交历史\"></a>查看提交历史</h3><p>在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史. 完成这个任务最简单而又有效的工具是 <code>git log</code> 命令。<br>在目录下运行 <code>git log</code><br>默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。</p>\n<p><code>git log</code> 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。</p>\n<ul>\n<li>一个常用的选项是 <code>-p</code>,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交</li>\n<li>如果你想看到每次提交的简略的统计信息,你可以使用 <code>--stat</code> 选项.</li>\n<li>另外一个常用的选项是 <code>--pretty</code>。 这个选项可以指定使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如用 oneline 将每个提交放在一行显示,查看的提交数很大时非常有用。 另外还有<code>short</code>,<code>full</code> 和 <code>fuller</code> 可以用,展示的信息或多或少有些不同<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git log --pretty=oneline</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h2 id=\"文件对比\"><a href=\"#文件对比\" class=\"headerlink\" title=\"文件对比\"></a>文件对比</h2><h3 id=\"对比工作区与暂存区\"><a href=\"#对比工作区与暂存区\" class=\"headerlink\" title=\"对比工作区与暂存区\"></a>对比工作区与暂存区</h3><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cat 2.txt #查看2.txt的内容222</span><br><span class=\"line\">vi 2.txt #新增一行为333</span><br><span class=\"line\">git diff -- 2.txt #比对工作区和暂存区(上次暂存)的区别</span><br></pre></td></tr></table></figure>\n<p>得到的提示前面是一些基本信息,文件对比细节在@@之后,+表示新增,-表示删除,行前无符号表示未改变。</p>\n<h3 id=\"对比暂存区和仓库区\"><a href=\"#对比暂存区和仓库区\" class=\"headerlink\" title=\"对比暂存区和仓库区\"></a>对比暂存区和仓库区</h3><p>也就是比对缓存快照和已经提交的快照</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git diff --cached -- 2.txt</span><br></pre></td></tr></table></figure>\n<p>结果显示无差异,因为上一次缓存的都提交了,接下来这样尝试:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git add . #所有文件缓存快照</span><br><span class=\"line\">git diff --cached -- 2.txt #比对2.txt的暂存快照和提交快照</span><br></pre></td></tr></table></figure>\n<p>得到的效果和上上次实验一样,因为2.txt增加一行后的快照已经暂存,但是还没提交,所以对比下,暂存快照比已提交快照多了一行。</p>\n<h3 id=\"对比工作区和仓库区\"><a href=\"#对比工作区和仓库区\" class=\"headerlink\" title=\"对比工作区和仓库区\"></a>对比工作区和仓库区</h3><p>也就是得到自上次提交以来文件的变化,命令必须带上<code>commit_id</code>或者基于HEAD的运算(HEAD~是最后一个<code>commit_id</code>):</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git diff HEAD~ -- 2.txt</span><br></pre></td></tr></table></figure>\n<p>对比效果和上次一样,因为新增的一行就是上次提交以来的所有变化。</p>\n<h3 id=\"对比两次提交之间的差异\"><a href=\"#对比两次提交之间的差异\" class=\"headerlink\" title=\"对比两次提交之间的差异\"></a>对比两次提交之间的差异</h3><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git log --pretty=oneline</span><br><span class=\"line\">b037a33258f9582c2d70e130b62b699df7900280 删除3.txt</span><br><span class=\"line\">54da1fe001be58c7fc41f6d3aac0e35166b8cb4a 首次提交3.txt</span><br><span class=\"line\">2abf7fb7ca06bd3a3eadc85471c41a340134d249 第一次提交2.txt</span><br><span class=\"line\">976ea66c800dee7ce3c69601e31518f2ef721237 第一次提交1.txt</span><br></pre></td></tr></table></figure>\n<p>然后对比第一和第二次提交的差异:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git diff 976ea66c 2abf7fb7</span><br></pre></td></tr></table></figure>\n<p>注意,这里我们使用了简写的<code>commit_id</code>,因为只要简写能完全标识一次提交,没有必要使用完整的<code>commit_id</code>.<br>第二次提交相对于第一次提交来说,增加了一个文件,文件里面增加了内容。</p>\n<p>这个命令可以带上文件路径,如:<code>git diff 976ea66c 2abf7fb7 -- 2.txt</code>,当然结果是一样的,因为只有2.txt有变化。</p>\n<h2 id=\"移除文件\"><a href=\"#移除文件\" class=\"headerlink\" title=\"移除文件\"></a>移除文件</h2><p>之前我们移除并恢复过1.txt文件,但这与“从版本库中移除文件”并不相同。要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 <code>git rm <filepath></code>命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。</p>\n<p>如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项<code>-f</code>(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。</p>\n<p>另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加<code>.gitignore</code>文件,不小心把一个很大的日志文件或一堆<code>.a </code>这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用<code>--cached</code>选项:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">cd lesson1</span><br><span class=\"line\">echo 333>3.txt</span><br><span class=\"line\">git add .</span><br><span class=\"line\">git commit -m "首次提交3.txt"</span><br><span class=\"line\">git rm --cached 3.txt</span><br><span class=\"line\">ll #查看文件列表,3.txt还在</span><br><span class=\"line\">git status #3.txt显示为未跟踪</span><br><span class=\"line\">#编辑.gitignore,添加3.txt</span><br><span class=\"line\">git add .</span><br><span class=\"line\">git commit -m "删除3.txt"</span><br></pre></td></tr></table></figure>\n<p>这样处理之后,3.txt仍然在本地,但是会被git忽略掉。</p>\n","slug":"笔记/2016-09-23.基础Git技能","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Git","slug":"Git","permalink":"https://www.zhiiker.com/tags/Git/"}]},{"title":"哲学家就餐问题","date":"2016-09-22T08:46:06.000Z","path":"/DiningPhilosophersProblem","text":"问题描述哲学家就餐问题(Dining philosophers problem)是在计算机科学中的一个经典问题,用来演示在并发计算中多线程同步(Synchronization)时产生的问题。 在1971年,著名的计算机科学家Edsger Wybe Dijkstra(艾兹格·迪科斯彻)提出了一个同步问题,即假设有五台计算机都试图访问五份共享的磁带驱动器。稍后,这个问题被托尼·霍尔重新表述为哲学家就餐问题。这个问题可以用来解释死锁和资源耗尽。 专门在Github搞了个Repo写课程代码 哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显,吃米饭必须用两根筷子。 哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边的餐叉(或者相反)。 即使没有死锁,也有可能发生资源耗尽。例如,假设规定当哲学家等待另一只餐叉超过五分钟后就放下自己手里的那一只餐叉,并且再等五分钟后进行下一次尝试。这个策略消除了死锁(系统总会进入到下一个状态),但仍然有可能发生“活锁”。如果五位哲学家在完全相同的时刻进入餐厅,并同时拿起左边的餐叉,那么这些哲学家就会等待五分钟,同时放下手中的餐叉,再等五分钟,又同时拿起这些餐叉。 解决办法一、只有当哲学接的左右两只筷子均处于可用状态时,才允许他拿起筷子。这样就可以避免他们同时拿起筷子就餐,导致死锁。 实现代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687class Philosopher extends Thread{ private int thinkingtimes = 0; private int eatingtimes = 0; int id; static int currentid = 0; private Forks fork; public Philosopher(Forks fork) { super(); id = currentid; currentid++; this.fork = fork; } public void run() { while(true) { thinking(); fork.takeFork(); eating(); fork.putFork(); } } private void thinking() { thinkingtimes++; System.out.println("Philosopher " + id + " : thinking start! Times : " + thinkingtimes); try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } private void eating() { eatingtimes++; System.out.println("Philosopher " + id + " : eating start! Times : " + eatingtimes); try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }}class Forks{ private boolean[] used = {false, false, false, false, false}; public synchronized void takeFork() { Philosopher p = (Philosopher) Thread.currentThread(); int id = p.id; while(used[id] || used[(id + 1) % 5]) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Philosopher " + id + " : takeFork!"); used[id] = true; used[(id + 1) % 5] = true; } public synchronized void putFork() { Philosopher p = (Philosopher) Thread.currentThread(); int id = p.id; System.out.println("Philosopher " + id + " : putFork!"); used[id] = false; used[(id + 1) % 5] = false; notifyAll(); }}public class DiningPhilosophers { public static void main(String[] args) { Forks f = new Forks(); new Philosopher(f).start(); new Philosopher(f).start(); new Philosopher(f).start(); new Philosopher(f).start(); new Philosopher(f).start(); }} 二、最多允许4个哲学家同时坐在桌子周围 123456789101112131415161718semaphore fork[5] = {1};semaphore room = {4};int i; void philosopher (int i) { while (true) { think(); P (room); P (fork[i]); P (fork [(i + 1) mod 5]); eat(); V (fork [(i + 1) mod 5]); V (fork[i]); V (room); }} void main() { parbegin ( philosopher (0), philosopher (1), philosopher (2), philosopher(3), philosopher (4) );} 三、给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之使用管程解决哲学家就餐问题 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748void philosopher[k=0 to 4]/* the five philosopher clients */{while (true) {<think>;get_forks(k);/* client requests two forks via monitor */<eat spaghetti>;release_forks(k); /* client releases forks via the monitor */}}monitor dining_controller;cond ForkReady[5];boolean fork[5] = {true};void get_forks(int pid) { int left = pid; int right = (++pid) % 5; /*grant the left fork*/ if (!fork(left) cwait(ForkReady[left]); /* queue on condition variable */ fork(left) = false; /*grant the right fork*/ if (!fork(right) cwait(ForkReady(right); /* queue on condition variable */ fork(right) = false: }void release_forks(int pid) { int left = pid; int right = (++pid) % 5; /*release the left fork*/ if (empty(ForkReady[left]) /*no one is waiting for this fork */ fork(left) = true; else /* awaken a process waiting on this fork */ csignal(ForkReady[left]); /*release the right fork*/ if (empty(ForkReady[right]) /*no one is waiting for this fork */ fork(right) = true; else /* awaken a process waiting on this fork */ csignal(ForkReady[right]); } 四、其他解法:服务生解法 资源分级解法 Chandy/Misra解法","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"问题描述\"><a href=\"#问题描述\" class=\"headerlink\" title=\"问题描述\"></a>问题描述</h2><p>哲学家就餐问题(Dining philosophers problem)是在计算机科学中的一个经典问题,用来演示在并发计算中多线程同步(Synchronization)时产生的问题。</p>\n<p>在1971年,著名的计算机科学家Edsger Wybe Dijkstra(艾兹格·迪科斯彻)提出了一个同步问题,即假设有五台计算机都试图访问五份共享的磁带驱动器。稍后,这个问题被托尼·霍尔重新表述为哲学家就餐问题。这个问题可以用来解释死锁和资源耗尽。</p>\n<span id=\"more\"></span>\n\n<p>专门在Github搞了个Repo写课程代码</p>\n<div class=\"github-widget\" data-repo=\"wmwwmv/OSCourse\"></div>\n\n<p>哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显,吃米饭必须用两根筷子。</p>\n<p>哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边的餐叉(或者相反)。</p>\n<p>即使没有死锁,也有可能发生资源耗尽。例如,假设规定当哲学家等待另一只餐叉超过五分钟后就放下自己手里的那一只餐叉,并且再等五分钟后进行下一次尝试。这个策略消除了死锁(系统总会进入到下一个状态),但仍然有可能发生“活锁”。如果五位哲学家在完全相同的时刻进入餐厅,并同时拿起左边的餐叉,那么这些哲学家就会等待五分钟,同时放下手中的餐叉,再等五分钟,又同时拿起这些餐叉。</p>\n<h2 id=\"解决办法\"><a href=\"#解决办法\" class=\"headerlink\" title=\"解决办法\"></a>解决办法</h2><p>一、只有当哲学接的左右两只筷子均处于可用状态时,才允许他拿起筷子。这样就可以避免他们同时拿起筷子就餐,导致死锁。</p>\n<h3 id=\"实现代码\"><a href=\"#实现代码\" class=\"headerlink\" title=\"实现代码\"></a>实现代码</h3><figure class=\"highlight java\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br><span class=\"line\">76</span><br><span class=\"line\">77</span><br><span class=\"line\">78</span><br><span class=\"line\">79</span><br><span class=\"line\">80</span><br><span class=\"line\">81</span><br><span class=\"line\">82</span><br><span class=\"line\">83</span><br><span class=\"line\">84</span><br><span class=\"line\">85</span><br><span class=\"line\">86</span><br><span class=\"line\">87</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">Philosopher</span> <span class=\"keyword\">extends</span> <span class=\"title\">Thread</span></span></span><br><span class=\"line\"><span class=\"class\"></span>{</span><br><span class=\"line\"> <span class=\"keyword\">private</span> <span class=\"keyword\">int</span> thinkingtimes = <span class=\"number\">0</span>;</span><br><span class=\"line\"> <span class=\"keyword\">private</span> <span class=\"keyword\">int</span> eatingtimes = <span class=\"number\">0</span>;</span><br><span class=\"line\"> <span class=\"keyword\">int</span> id;</span><br><span class=\"line\"> <span class=\"keyword\">static</span> <span class=\"keyword\">int</span> currentid = <span class=\"number\">0</span>;</span><br><span class=\"line\"> <span class=\"keyword\">private</span> Forks fork;</span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">public</span> <span class=\"title\">Philosopher</span><span class=\"params\">(Forks fork)</span></span></span><br><span class=\"line\"><span class=\"function\"> </span>{</span><br><span class=\"line\"> <span class=\"keyword\">super</span>();</span><br><span class=\"line\"> id = currentid;</span><br><span class=\"line\"> currentid++;</span><br><span class=\"line\"> <span class=\"keyword\">this</span>.fork = fork;</span><br><span class=\"line\"> }</span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">void</span> <span class=\"title\">run</span><span class=\"params\">()</span></span></span><br><span class=\"line\"><span class=\"function\"> </span>{</span><br><span class=\"line\"> <span class=\"keyword\">while</span>(<span class=\"keyword\">true</span>)</span><br><span class=\"line\"> {</span><br><span class=\"line\"> thinking();</span><br><span class=\"line\"> fork.takeFork();</span><br><span class=\"line\"> eating();</span><br><span class=\"line\"> fork.putFork();</span><br><span class=\"line\"> }</span><br><span class=\"line\"> }</span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">private</span> <span class=\"keyword\">void</span> <span class=\"title\">thinking</span><span class=\"params\">()</span></span></span><br><span class=\"line\"><span class=\"function\"> </span>{</span><br><span class=\"line\"> thinkingtimes++;</span><br><span class=\"line\"> System.out.println(<span class=\"string\">"Philosopher "</span> + id + <span class=\"string\">" : thinking start! Times : "</span> + thinkingtimes);</span><br><span class=\"line\"> <span class=\"keyword\">try</span> {</span><br><span class=\"line\"> sleep(<span class=\"number\">1000</span>);</span><br><span class=\"line\"> } <span class=\"keyword\">catch</span> (InterruptedException e) {</span><br><span class=\"line\"> e.printStackTrace();</span><br><span class=\"line\"> }</span><br><span class=\"line\"> }</span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">private</span> <span class=\"keyword\">void</span> <span class=\"title\">eating</span><span class=\"params\">()</span></span></span><br><span class=\"line\"><span class=\"function\"> </span>{</span><br><span class=\"line\"> eatingtimes++;</span><br><span class=\"line\"> System.out.println(<span class=\"string\">"Philosopher "</span> + id + <span class=\"string\">" : eating start! Times : "</span> + eatingtimes);</span><br><span class=\"line\"> <span class=\"keyword\">try</span> {</span><br><span class=\"line\"> sleep(<span class=\"number\">1000</span>);</span><br><span class=\"line\"> } <span class=\"keyword\">catch</span> (InterruptedException e) {</span><br><span class=\"line\"> e.printStackTrace();</span><br><span class=\"line\"> }</span><br><span class=\"line\"> }</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">Forks</span></span></span><br><span class=\"line\"><span class=\"class\"></span>{</span><br><span class=\"line\"> <span class=\"keyword\">private</span> <span class=\"keyword\">boolean</span>[] used = {<span class=\"keyword\">false</span>, <span class=\"keyword\">false</span>, <span class=\"keyword\">false</span>, <span class=\"keyword\">false</span>, <span class=\"keyword\">false</span>};</span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">synchronized</span> <span class=\"keyword\">void</span> <span class=\"title\">takeFork</span><span class=\"params\">()</span></span></span><br><span class=\"line\"><span class=\"function\"> </span>{</span><br><span class=\"line\"> Philosopher p = (Philosopher) Thread.currentThread();</span><br><span class=\"line\"> <span class=\"keyword\">int</span> id = p.id;</span><br><span class=\"line\"> <span class=\"keyword\">while</span>(used[id] || used[(id + <span class=\"number\">1</span>) % <span class=\"number\">5</span>])</span><br><span class=\"line\"> {</span><br><span class=\"line\"> <span class=\"keyword\">try</span> {</span><br><span class=\"line\"> wait();</span><br><span class=\"line\"> } <span class=\"keyword\">catch</span> (InterruptedException e) {</span><br><span class=\"line\"> e.printStackTrace();</span><br><span class=\"line\"> }</span><br><span class=\"line\"> }</span><br><span class=\"line\"> System.out.println(<span class=\"string\">"Philosopher "</span> + id + <span class=\"string\">" : takeFork!"</span>);</span><br><span class=\"line\"> used[id] = <span class=\"keyword\">true</span>;</span><br><span class=\"line\"> used[(id + <span class=\"number\">1</span>) % <span class=\"number\">5</span>] = <span class=\"keyword\">true</span>;</span><br><span class=\"line\"> }</span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">synchronized</span> <span class=\"keyword\">void</span> <span class=\"title\">putFork</span><span class=\"params\">()</span></span></span><br><span class=\"line\"><span class=\"function\"> </span>{</span><br><span class=\"line\"> Philosopher p = (Philosopher) Thread.currentThread();</span><br><span class=\"line\"> <span class=\"keyword\">int</span> id = p.id;</span><br><span class=\"line\"> System.out.println(<span class=\"string\">"Philosopher "</span> + id + <span class=\"string\">" : putFork!"</span>);</span><br><span class=\"line\"> used[id] = <span class=\"keyword\">false</span>;</span><br><span class=\"line\"> used[(id + <span class=\"number\">1</span>) % <span class=\"number\">5</span>] = <span class=\"keyword\">false</span>;</span><br><span class=\"line\"> notifyAll();</span><br><span class=\"line\"> }</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">public</span> <span class=\"class\"><span class=\"keyword\">class</span> <span class=\"title\">DiningPhilosophers</span> </span>{</span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">public</span> <span class=\"keyword\">static</span> <span class=\"keyword\">void</span> <span class=\"title\">main</span><span class=\"params\">(String[] args)</span></span></span><br><span class=\"line\"><span class=\"function\"> </span>{</span><br><span class=\"line\"> Forks f = <span class=\"keyword\">new</span> Forks();</span><br><span class=\"line\"> <span class=\"keyword\">new</span> Philosopher(f).start();</span><br><span class=\"line\"> <span class=\"keyword\">new</span> Philosopher(f).start();</span><br><span class=\"line\"> <span class=\"keyword\">new</span> Philosopher(f).start();</span><br><span class=\"line\"> <span class=\"keyword\">new</span> Philosopher(f).start();</span><br><span class=\"line\"> <span class=\"keyword\">new</span> Philosopher(f).start();</span><br><span class=\"line\"> }</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n<p>二、最多允许4个哲学家同时坐在桌子周围</p>\n<figure class=\"highlight cpp\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">semaphore fork[<span class=\"number\">5</span>] = {<span class=\"number\">1</span>};</span><br><span class=\"line\">semaphore room = {<span class=\"number\">4</span>};</span><br><span class=\"line\"><span class=\"keyword\">int</span> i; <span class=\"function\"><span class=\"keyword\">void</span> <span class=\"title\">philosopher</span> <span class=\"params\">(<span class=\"keyword\">int</span> i)</span> </span>{</span><br><span class=\"line\"> <span class=\"keyword\">while</span> (<span class=\"literal\">true</span>) {</span><br><span class=\"line\"> <span class=\"built_in\">think</span>();</span><br><span class=\"line\"> <span class=\"built_in\">P</span> (room);</span><br><span class=\"line\"> <span class=\"built_in\">P</span> (fork[i]);</span><br><span class=\"line\"> <span class=\"built_in\">P</span> (fork [(i + <span class=\"number\">1</span>) mod <span class=\"number\">5</span>]);</span><br><span class=\"line\"> <span class=\"built_in\">eat</span>();</span><br><span class=\"line\"> <span class=\"built_in\">V</span> (fork [(i + <span class=\"number\">1</span>) mod <span class=\"number\">5</span>]);</span><br><span class=\"line\"> <span class=\"built_in\">V</span> (fork[i]);</span><br><span class=\"line\"> <span class=\"built_in\">V</span> (room);</span><br><span class=\"line\"> }</span><br><span class=\"line\">} <span class=\"function\"><span class=\"keyword\">void</span> <span class=\"title\">main</span><span class=\"params\">()</span> </span>{</span><br><span class=\"line\"> <span class=\"built_in\">parbegin</span> ( <span class=\"built_in\">philosopher</span> (<span class=\"number\">0</span>), <span class=\"built_in\">philosopher</span> (<span class=\"number\">1</span>),</span><br><span class=\"line\"> <span class=\"built_in\">philosopher</span> (<span class=\"number\">2</span>), <span class=\"built_in\">philosopher</span>(<span class=\"number\">3</span>), <span class=\"built_in\">philosopher</span> (<span class=\"number\">4</span>) );</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br></pre></td></tr></table></figure>\n\n\n<p>三、给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之<br>使用管程解决哲学家就餐问题</p>\n<figure class=\"highlight cpp\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">void</span> philosopher[k=<span class=\"number\">0</span> to <span class=\"number\">4</span>]</span><br><span class=\"line\"><span class=\"comment\">/* the five philosopher clients */</span></span><br><span class=\"line\">{</span><br><span class=\"line\"><span class=\"keyword\">while</span> (<span class=\"literal\">true</span>) {</span><br><span class=\"line\"><think>;</span><br><span class=\"line\"><span class=\"built_in\">get_forks</span>(k);</span><br><span class=\"line\"><span class=\"comment\">/* client requests two forks via monitor */</span></span><br><span class=\"line\"><eat spaghetti>;</span><br><span class=\"line\"><span class=\"built_in\">release_forks</span>(k);</span><br><span class=\"line\"> <span class=\"comment\">/* client releases forks via the monitor */</span></span><br><span class=\"line\">}</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\">monitor dining_controller;</span><br><span class=\"line\">cond ForkReady[<span class=\"number\">5</span>];</span><br><span class=\"line\">boolean fork[<span class=\"number\">5</span>] = {<span class=\"literal\">true</span>};</span><br><span class=\"line\"><span class=\"function\"><span class=\"keyword\">void</span> <span class=\"title\">get_forks</span><span class=\"params\">(<span class=\"keyword\">int</span> pid)</span> </span>{</span><br><span class=\"line\"> <span class=\"keyword\">int</span> left = pid;</span><br><span class=\"line\"> <span class=\"keyword\">int</span> right = (++pid) % <span class=\"number\">5</span>;</span><br><span class=\"line\"> <span class=\"comment\">/*grant the left fork*/</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> (!fork(left)</span><br><span class=\"line\"> <span class=\"built_in\">cwait</span>(ForkReady[left]);</span><br><span class=\"line\"> <span class=\"comment\">/* queue on condition variable */</span></span><br><span class=\"line\"> fork(left) = <span class=\"literal\">false</span>;</span><br><span class=\"line\"> <span class=\"comment\">/*grant the right fork*/</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> (!fork(right)</span><br><span class=\"line\"> <span class=\"built_in\">cwait</span>(<span class=\"built_in\">ForkReady</span>(right);</span><br><span class=\"line\"> <span class=\"comment\">/* queue on condition variable */</span></span><br><span class=\"line\"> fork(right) = <span class=\"literal\">false</span>:</span><br><span class=\"line\"> }</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">void</span> <span class=\"built_in\">release_forks</span>(<span class=\"keyword\">int</span> pid) {</span><br><span class=\"line\"> <span class=\"keyword\">int</span> left = pid;</span><br><span class=\"line\"> <span class=\"keyword\">int</span> right = (++pid) % <span class=\"number\">5</span>;</span><br><span class=\"line\"> <span class=\"comment\">/*release the left fork*/</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> (<span class=\"built_in\">empty</span>(ForkReady[left])</span><br><span class=\"line\"> <span class=\"comment\">/*no one is waiting for this fork */</span></span><br><span class=\"line\"> fork(left) = <span class=\"literal\">true</span>;</span><br><span class=\"line\"> <span class=\"keyword\">else</span> <span class=\"comment\">/* awaken a process waiting on this fork */</span></span><br><span class=\"line\"> <span class=\"built_in\">csignal</span>(ForkReady[left]);</span><br><span class=\"line\"> <span class=\"comment\">/*release the right fork*/</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> (<span class=\"built_in\">empty</span>(ForkReady[right])</span><br><span class=\"line\"> <span class=\"comment\">/*no one is waiting for this fork */</span></span><br><span class=\"line\"> fork(right) = <span class=\"literal\">true</span>;</span><br><span class=\"line\"> <span class=\"keyword\">else</span> <span class=\"comment\">/* awaken a process waiting on this fork */</span></span><br><span class=\"line\"> <span class=\"built_in\">csignal</span>(ForkReady[right]);</span><br><span class=\"line\"> }</span><br><span class=\"line\"></span><br></pre></td></tr></table></figure>\n\n<p>四、其他解法:服务生解法 资源分级解法 Chandy/Misra解法</p>\n","slug":"笔记/2016-09-22.哲学家就餐问题","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"操作系统","slug":"操作系统","permalink":"https://www.zhiiker.com/tags/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/"},{"name":"并发","slug":"并发","permalink":"https://www.zhiiker.com/tags/%E5%B9%B6%E5%8F%91/"}]},{"title":"大整数、同余关系","date":"2016-09-20T16:00:00.000Z","path":"2016/09/21/AC++/2016-09-21.大整数.同余关系/","text":"题面 大整数845678992357836701转化成16进制表示,最后两位字符是? AB EF 8B 9D 数论中的结论 一个数对2取模的结果就是这个数的二进制表示中的最低位;一个数对4取模的结果就是这个数的二进制表示中的最低2位;一个数对8取模的结果就是这个数的二进制表示中的最低3位;一个数对16取模的结果就是这个数的二进制表示中的最低4位; 解选D最快的方法是D选项末尾D=13,13/4余1是题干中给的数的后两位。 笨一点就后面几位化成二级制慢慢算。 链接牛客网","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"题面\"><a href=\"#题面\" class=\"headerlink\" title=\"题面\"></a>题面</h2><blockquote>\n<p>大整数845678992357836701转化成16进制表示,最后两位字符是?</p>\n</blockquote>\n<ol>\n<li>AB</li>\n<li>EF</li>\n<li>8B</li>\n<li>9D</li>\n</ol>\n<span id=\"more\"></span>\n\n<h2 id=\"数论中的结论\"><a href=\"#数论中的结论\" class=\"headerlink\" title=\"数论中的结论\"></a>数论中的结论</h2><blockquote>\n<p>一个数对2取模的结果就是这个数的二进制表示中的最低位;<br>一个数对4取模的结果就是这个数的二进制表示中的最低2位;<br>一个数对8取模的结果就是这个数的二进制表示中的最低3位;<br>一个数对16取模的结果就是这个数的二进制表示中的最低4位;</p>\n</blockquote>\n<h2 id=\"解\"><a href=\"#解\" class=\"headerlink\" title=\"解\"></a>解</h2><p>选D<br>最快的方法是<br>D选项末尾D=13,13/4余1是题干中给的数的后两位。</p>\n<p>笨一点就后面几位化成二级制慢慢算。</p>\n<h2 id=\"链接\"><a href=\"#链接\" class=\"headerlink\" title=\"链接\"></a>链接</h2><p><a href=\"http://www.nowcoder.com/questionTerminal/34918ca2eccd432091c2b3fd28455ac4\">牛客网</a></p>\n","slug":"AC++/2016-09-21.大整数.同余关系","comments":true,"categories":[{"name":"AC++","slug":"AC","permalink":"https://www.zhiiker.com/categories/AC/"}],"tags":[{"name":"同余","slug":"同余","permalink":"https://www.zhiiker.com/tags/%E5%90%8C%E4%BD%99/"}]},{"title":"ICPC2016沈阳区域网络赛","date":"2016-09-17T16:00:00.000Z","path":"2016/09/18/AC++/2016-09-18.ICPC2016沈阳区域网络赛/","text":"ICPCCAMP题解1、2、5、10听说都是原题。但我就知道1010在51node和CF有非常相似的题。 CF的题解我在CSDN博客上进行了备份。链接如下Lehmer快速求1e11以内质数个数要深入了解可以看链接中wiki上的几十页的英文论文。 这题还可以用区间筛打表,代码长度30+k","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p><a href=\"https://async.icpc-camp.org/d/560-2016-icpc/11\">ICPCCAMP题解</a><br>1、2、5、10听说都是原题。<br>但我就知道1010在51node和CF有非常相似的题。</p>\n<span id=\"more\"></span>\n\n<p>CF的题解我在CSDN博客上进行了备份。链接如下<br><a href=\"http://blog.csdn.net/wuye/article/details/52632217\">Lehmer快速求1e11以内质数个数</a><br>要深入了解可以看链接中wiki上的几十页的英文论文。</p>\n<p>这题还可以用区间筛打表,代码长度30+k</p>\n","slug":"AC++/2016-09-18.ICPC2016沈阳区域网络赛","comments":true,"categories":[{"name":"AC++","slug":"AC","permalink":"https://www.zhiiker.com/categories/AC/"}],"tags":[{"name":"ICPC","slug":"ICPC","permalink":"https://www.zhiiker.com/tags/ICPC/"},{"name":"质数","slug":"质数","permalink":"https://www.zhiiker.com/tags/%E8%B4%A8%E6%95%B0/"}]},{"title":"ICPC2016青岛区域网络赛","date":"2016-09-16T16:00:00.000Z","path":"2016/09/17/AC++/2016-09-17.ICPC2016青岛区域网络赛/","text":"ICPCCAMP题解","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p><a href=\"https://async.icpc-camp.org/d/560-2016-icpc/11\">ICPCCAMP题解</a></p>\n","slug":"AC++/2016-09-17.ICPC2016青岛区域网络赛","comments":true,"categories":[{"name":"AC++","slug":"AC","permalink":"https://www.zhiiker.com/categories/AC/"}],"tags":[{"name":"ICPC","slug":"ICPC","permalink":"https://www.zhiiker.com/tags/ICPC/"}]},{"title":"Linux下使用SSH连接Windows","date":"2016-09-05T07:08:38.000Z","path":"2016/09/05/笔记/2016-09-05.Linux下使用SSH连接Windows/","text":"安装SSHsudo apt-get install openssh-server 连接本地Ubuntussh localhost 连接Windowsssh ip地址 -l用户 之后输入密码 有关防火墙的命令启用ufw 12sudo ufw enablesudo ufw default deny 运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。 开启和禁用sudo ufw allow|deny [service]打开或关闭某个端口,例如: 1234567sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口sudo ufw allow 53 允许外部访问53端口(tcp/udp)sudo ufw allow from 192.168.1.100 允许此IP访问所有的本机端口sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53sudo ufw deny smtp 禁止外部访问smtp服务sudo ufw delete allow smtp 删除上面建立的某条规则 查看防火墙状态sudo ufw status 允许某特定 IPsudo ufw allow from xxx.xxx.xx.xxx 删除 smtp 端口的许可sudo ufw delete allow smtp","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>安装SSH<br><code>sudo apt-get install openssh-server </code><br>连接本地Ubuntu<br><code>ssh localhost </code><br>连接Windows<br><code>ssh ip地址 -l用户 </code><br>之后输入密码</p>\n<span id=\"more\"></span>\n\n<h2 id=\"有关防火墙的命令\"><a href=\"#有关防火墙的命令\" class=\"headerlink\" title=\"有关防火墙的命令\"></a>有关防火墙的命令</h2><p>启用ufw</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo ufw enable</span><br><span class=\"line\">sudo ufw default deny</span><br></pre></td></tr></table></figure>\n<p>运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。</p>\n<p>开启和禁用<br><code>sudo ufw allow|deny [service]</code><br>打开或关闭某个端口,例如:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口</span><br><span class=\"line\">sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口</span><br><span class=\"line\">sudo ufw allow 53 允许外部访问53端口(tcp/udp)</span><br><span class=\"line\">sudo ufw allow from 192.168.1.100 允许此IP访问所有的本机端口</span><br><span class=\"line\">sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53</span><br><span class=\"line\">sudo ufw deny smtp 禁止外部访问smtp服务</span><br><span class=\"line\">sudo ufw delete allow smtp 删除上面建立的某条规则</span><br></pre></td></tr></table></figure>\n<p>查看防火墙状态<br><code>sudo ufw status</code></p>\n<p>允许某特定 IP<br><code>sudo ufw allow from xxx.xxx.xx.xxx</code></p>\n<p>删除 smtp 端口的许可<br><code>sudo ufw delete allow smtp</code></p>\n","slug":"笔记/2016-09-05.Linux下使用SSH连接Windows","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Windows","slug":"Windows","permalink":"https://www.zhiiker.com/tags/Windows/"},{"name":"Linux","slug":"Linux","permalink":"https://www.zhiiker.com/tags/Linux/"}]},{"title":"书阁","date":"2016-09-04T09:15:26.000Z","path":"2016/09/04/建站日志/书阁/","text":"存放草稿以及多地备份,像arxiv.org提供预发布版文章,地址 http://shuge.liangs.me另外,实现建筑化结构化的一个部分。还有萱苏小筑、萱苏茶肆、萱苏客栈…","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>存放草稿以及多地备份,像arxiv.org提供预发布版文章,地址 <a href=\"http://shuge.liangs.me/\">http://shuge.liangs.me</a><br>另外,实现建筑化结构化的一个部分。<br>还有萱苏小筑、萱苏茶肆、萱苏客栈…</p>\n","slug":"建站日志/书阁","comments":true,"categories":[{"name":"萱苏小筑","slug":"萱苏小筑","permalink":"https://www.zhiiker.com/categories/%E8%90%B1%E8%8B%8F%E5%B0%8F%E7%AD%91/"}],"tags":[{"name":"建站日志","slug":"建站日志","permalink":"https://www.zhiiker.com/tags/%E5%BB%BA%E7%AB%99%E6%97%A5%E5%BF%97/"},{"name":"书阁","slug":"书阁","permalink":"https://www.zhiiker.com/tags/%E4%B9%A6%E9%98%81/"}]},{"title":"Hexo提交到Github错误","date":"2016-09-03T11:01:51.000Z","path":"/Hexo提交到Github错误","text":"刚刚尝试SS新客户端时候忘记关掉了,导致端口冲突,不能翻墙。后来提交博客时候出现fatal错误,我想了想应该是这个问题,重新配置好之后果然可以提交了。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>刚刚尝试SS新客户端时候忘记关掉了,导致端口冲突,不能翻墙。<br>后来提交博客时候出现fatal错误,我想了想应该是这个问题,重新配置好之后果然可以提交了。</p>\n","slug":"笔记/2016-09-03.Hexo提交到Github错误","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Hexo","slug":"Hexo","permalink":"https://www.zhiiker.com/tags/Hexo/"},{"name":"Gitbub","slug":"Gitbub","permalink":"https://www.zhiiker.com/tags/Gitbub/"}]},{"title":"素拓网站的一些技巧","date":"2016-09-03T09:10:59.000Z","path":"/素拓网站的一些技巧","text":"破解复制粘贴方法一打开输入页面,F12打开控制台,输入以下代码: 1234(function () { var textarea = document.getElementById('iframe').contentWindow.document.getElementById('Thdnr'); textarea.onpaste = 'return true';})(); 方法二把文字输入到word文档里之后再直接拖入。 方法三使用手机端 方法四通过审查元素添加 方法五禁用JS(会妨碍其他功能) 图像大小限制用自带画图打开调整比例800*600像素,或者使用ACDSee等其他工具。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"破解复制粘贴\"><a href=\"#破解复制粘贴\" class=\"headerlink\" title=\"破解复制粘贴\"></a>破解复制粘贴</h2><h3 id=\"方法一\"><a href=\"#方法一\" class=\"headerlink\" title=\"方法一\"></a>方法一</h3><p>打开输入页面,F12打开控制台,输入以下代码:</p>\n<span id=\"more\"></span>\n\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">(function () {</span><br><span class=\"line\"> var textarea = document.getElementById('iframe').contentWindow.document.getElementById('Thdnr');</span><br><span class=\"line\"> textarea.onpaste = 'return true';</span><br><span class=\"line\">})();</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"方法二\"><a href=\"#方法二\" class=\"headerlink\" title=\"方法二\"></a>方法二</h3><p>把文字输入到word文档里之后再直接拖入。</p>\n<h3 id=\"方法三\"><a href=\"#方法三\" class=\"headerlink\" title=\"方法三\"></a>方法三</h3><p>使用手机端</p>\n<h3 id=\"方法四\"><a href=\"#方法四\" class=\"headerlink\" title=\"方法四\"></a>方法四</h3><p>通过审查元素添加</p>\n<h3 id=\"方法五\"><a href=\"#方法五\" class=\"headerlink\" title=\"方法五\"></a>方法五</h3><p>禁用JS(会妨碍其他功能)</p>\n<h2 id=\"图像大小限制\"><a href=\"#图像大小限制\" class=\"headerlink\" title=\"图像大小限制\"></a>图像大小限制</h2><p>用自带画图打开调整比例800*600像素,或者使用ACDSee等其他工具。</p>\n","slug":"笔记/2016-09-03.素拓网站的一些技巧","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"素拓网","slug":"素拓网","permalink":"https://www.zhiiker.com/tags/%E7%B4%A0%E6%8B%93%E7%BD%91/"},{"name":"复制粘贴","slug":"复制粘贴","permalink":"https://www.zhiiker.com/tags/%E5%A4%8D%E5%88%B6%E7%B2%98%E8%B4%B4/"}]},{"title":"Oracle安装与卸载","date":"2016-09-02T06:30:51.000Z","path":"/Oracle安装与卸载","text":"通用安装步骤 从官网下载,不要相信来历不明的软件源。 一般会有两个文件夹两者解压到相同的路径中。 文件夹中找到setup.exe双击安装。 安装第一步:配置安全更新,这步可将自己的电子邮件地址填写进去(也可以不填写,只是收到一些没什么用的邮件而已)。取消下面的我希望通过My Oracle Support接受安全更新(W)。 安全选项,直接选择默认创建和配置一个数据库(安装完数据库管理软件后,系统会自动创建一个数据库实例)。 系统类,直接选择默认的桌面类就可以了。(若安装到的电脑是,个人笔记本或个人使用的电脑使用此选项) 。 典型安装。 重要步骤。建议只需要将Oracle基目录更新下,目录路径不要含有中文或其它的特殊字符。全局数据库名可以默认,且口令密码,必须要牢记。密码输入时,有提示警告,不符合Oracel建议时不用管。 (因Oracel建议的密码规则比较麻烦, 必须是大写字母加小写字母加数字,而且必须是8位以上。麻烦,可以输入平常自己习惯的短小密码即可)。 若输入的口令短小简单,安装时会提示如下。直接确认Y继续安装就是了。 先决条件检查。 安装程序会检查软硬件系统是否满足,安装此Oracle版本的最低要求。 直接下一步就OK 了。 概要 安装前的一些相关选择配置信息。 可以保存成文件 或 不保存文件直接点完成即可。 安装产品 自动进行,不用管。 数据库管理软件文件及dbms文件安装完后,会自动创建安装一个实例数据库默认前面的orcl名称的数据库。 实例数据库创建完成了,系统 默认是把所有账户都锁定不可用了(除sys和system账户可用外),建议点右边的口令管理,将常用的scott账户解锁并输入密码。 解锁scott账户, 去掉前面的绿色小勾,输入密码。同样可以输入平常用的短小的密码,不必非得按oracle建议的8位以上大小写加数字,密码不符合规则会提示。不用管它,继续Y即可。 此外也可以安装好之后使用sqlplus进行修改。 直接打开sqlplus.exe或者cmd中输入sqlplus。 登陆12syssys as sysdba(这里默认不会显示) 解锁示例用户scott1alter user scott account unlock; 软件使用 可以通过开始,应用程序中的Oracle 11g->应用程序开发->Sql Developer(Oracle自带可视化管理工具)或Sql Plus连接。注意第一次使用SQL Developer时,会提示指定java.exe的路径,这里可以通过修改环境变量Path(添加%JAVA_HOME%\\bin;),然后将JAVA_HOME值修改为Oracel安装路径下面的JDK目录(Oracle完全安装好之后会自带一个JDK)中的bin目录(例如D:\\oracle\\product\\11.2.0\\dbhome_1\\SQLDEVELOPER\\jdk\\jre)或者改为所兼容JDK版本所在的安装位置的bin目录。 除了修改环境变量外,第一次打开的时候会提示选择Java.exe位置,同样可以选择Oracle基目录中的也可以选择已安装兼容版本的JDK。 Oracle11g自带的SQL Developer是32位的,需要从官网重新下载64位SQL Developer解压后替换Oracle中的SQL Developer目录中所有文件。 卸载Oracle企业版卸载 停止oracle服务 运行%Oracle软件实地址(如果默认安装就是app文件夹)%\\product\\11.2.0\\dbhome_1\\deinstall\\deinstall.bat(也可以在CMD中运行)示例E:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\deinstall\\deinstall 指定要取消配置的所有单实例监听程序 【LISTENER】:你可以直接选择回车,或者可以输入LISTENER,然后回车。 指定在此Oracle主目录中配置的数据库名列表【BOOK,ORCL】:若没有新增数据库,则仅有ORCL数据库名;若有新增将显示所有数据库名。你可以直接选择回车,或者可以输入BOOK,ORCL,然后回车。 指定此数据库的类型,默认即可,然后回车。指定数据库诊断目标位置,默认即可,然后回车。指定数据库ASM:FS使用的储存类型【】:填写FS,然后回车。指定数据库spfile位置【】:直接回车即可。 是否继续,填写y,然后回车继续运行。 删除基文件夹 删除C:/program files/oracle 删除注册表(注意:删除注册表中Oracle相关的信息时,请小心,防止误删其他信息,导致不必要的麻烦产生)开始->运行(或者Win+R)->输入regedit->回车找到以下目录:HKEY_CLASSES_ROOTHKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLEHKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\ServicesHKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Eventlog\\Application删除所有ora开头的记录。 查看环境变量中是否存在Oracle相关的设置,若有删除。 删除所有的Oracle快捷方式。 为了保险可以拿软件再清理一下注册表。 重新启动 Oracle XE 卸载这个是精简版的,没有卸载脚本,直接打开安装包可以看到卸载的选项。 一些错误的解决oracle dbconsole 无法启动 报服务特定错误 2关键要找到日志文件,在`%ORACLE_HOME%\\11.1.0\\db_1\\计算名_SID\\sysman\\log\\emdb.nohup`,日志中有记录具体导致出错原因。需要进行以下修改: /%ORACLE_HOME%/oc4j/je22/OC4J_DBConsole_计算机名_SID/config/rmi.xmlport="5520" ``ssl-port="5520"端口号使用相同,于是修改 port="5521"``ssl-port="5522" 把/%ORACLE_HOME%/localhost_orcl/sysman/config /emd.properties文件的最后一项参数由agentTZRegion=GMT改成:agentTZRegion=Asia/Shanghai 正确的时区设置 修改AgentListenOnAllNICs=FALSE可能是多网卡的原因。需要这样改。然后,重启emctl start dbconsole就好了。 Oracle Issue with Environment Variable ORACLE_UNQNAME1:\\> emctl status dbconsole Environment variable ORACLE_UNQNAME not defined.Please set ORACLE_UNQNAME to database unique name 下面是如何在windows中修改oracle_unqname 在UNIX/Linux中可以使用相似的export command 12345C:\\>set ORACLE_UNQNAME=orclC:\\>set ORACLE_SID=orclC:\\>emctl status dbconsoleOracle Enterprise Manager 11g Database Control Release 11.2.0.1.0Copyright (c) 1996, 2010 Oracle Corporation. All rights reserved. 使用浏览器访问自带网页可视化管理工具出错显示Windows不能在本地计算机启动OracleDBConsoleorcl .错误代码2 现象Windows 不能在 本地计算机 启动 OracleDBConsoleorcl。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 2。系统事件日志报错误”Agent process exited abnormally during initialization.” 出现情况原来正常,计算机名更改或IP地址变了后就不能启动, 解决步骤 1. 开始->运行cmd 1. 执行emctl start dbconsole C:\\Documents and Settings\\xcl>emctl start dbconsole 12 Environment variable ORACLE_SID not defined. Please define it. 提示:环境变量 ORACLE_SID 未定义,请定义。 1. 设置 ORACLE_SID =ORCL (orcl是当前实例名,也是服务名,SID) C:\\Documents and Settings\\xcl>set oracle_sid=orcl 1. 再次执行emctl start dbconsole C:\\Documents and Settings\\xcl>emctl start dbconsole 123 OC4J Configuration issue. E:\\oracle\\product\\10.2.0\\db_1/oc4j/j2ee/OC4J_DBConsole_china-d9e3f7d07_orcl not found. 提示:无法找到“E:\\oracle\\product\\10.2.0\\db_1/oc4j/j2ee/OC4J_DBConsole_china-d9e3f7d07_orcl “ 注:china-d9e3f7d07 是当前计算机名 复制该目录下的“OC4J_DBConsole_localhost_orcl”文件夹放在同一目录下,且把名称改成“OC4J_DBConsole_china-d9e3f7d07_orcl”。 1. 再次执行emctl start dbconsole C:\\Documents and Settings\\xcl>emctl start dbconsole 12 EM Configuration issue. E:\\oracle\\product\\10.2.0\\db_1/china-d9e3f7d07_orcl not found. 提示:无法找到 “E:\\oracle\\product\\10.2.0\\db_1/china-d9e3f7d07_orcl ” 复制该目录下的“localhost_orcl”文件夹放在同一目录下,且把名称改成“china-d9e3f7d07_orcl”。 1. 再次执行emctl start dbconsole C:\\Documents and Settings\\xcl>emctl start dbconsole 1234567 Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0 Copyright (c) 1996, 2006 Oracle Corporation. All rights reserved. http://localhost:1158/em/ Starting Oracle Enterprise Manager 10g Database Control ...OracleDBConsoleorcl 服务正在启动 .............................. OracleDBConsoleorcl 服务已经启动成功 解决方法二先禁用网卡,启动dbconsole服务,再进入http://localhost:1158/em,如果想上网,再启动网卡,OK!缺点:每一次都要禁用网卡才可以启动,麻烦。 解决方法三设置回还网卡,在控制面板中,点击新增硬件选择microsoft lookback adapter,进入网上邻居->网络连接,设置任意IP,开始->oracle->配置和移植工具->netconfiguration assistant 把回还网卡的IP添加->保存。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"通用安装步骤\"><a href=\"#通用安装步骤\" class=\"headerlink\" title=\"通用安装步骤\"></a>通用安装步骤</h2><ol>\n<li>从<code>官网</code>下载,不要相信来历不明的软件源。</li>\n<li>一般会有两个文件夹两者解压到相同的路径中。</li>\n<li>文件夹中找到<code>setup.exe</code>双击安装。</li>\n<li>安装第一步:配置安全更新,这步可将自己的电子邮件地址填写进去(也可以不填写,只是收到一些没什么用的邮件而已)。取消下面的<code>我希望通过My Oracle Support接受安全更新(W)</code>。</li>\n<li>安全选项,直接选择默认创建和配置一个数据库(安装完数据库管理软件后,系统会自动创建一个数据库实例)。</li>\n<li>系统类,直接选择默认的桌面类就可以了。(若安装到的电脑是,个人笔记本或个人使用的电脑使用此选项) 。</li>\n</ol>\n<span id=\"more\"></span>\n\n<ol>\n<li>典型安装。 重要步骤。建议只需要将Oracle基目录更新下,目录路径不要含有中文或其它的特殊字符。全局数据库名可以默认,且口令密码,必须要牢记。密码输入时,有提示警告,不符合Oracel建议时不用管。 (因Oracel建议的密码规则比较麻烦, 必须是大写字母加小写字母加数字,而且必须是8位以上。麻烦,可以输入平常自己习惯的短小密码即可)。</li>\n<li>若输入的口令短小简单,安装时会提示如下。直接确认Y继续安装就是了。</li>\n<li>先决条件检查。 安装程序会检查软硬件系统是否满足,安装此Oracle版本的最低要求。 直接下一步就OK 了。</li>\n<li>概要 安装前的一些相关选择配置信息。 可以保存成文件 或 不保存文件直接点完成即可。</li>\n<li>安装产品 自动进行,不用管。</li>\n<li>数据库管理软件文件及dbms文件安装完后,会自动创建安装一个实例数据库默认前面的orcl名称的数据库。</li>\n<li>实例数据库创建完成了,系统 默认是把所有账户都锁定不可用了(除sys和system账户可用外),建议点右边的口令管理,将常用的scott账户解锁并输入密码。</li>\n<li>解锁scott账户, 去掉前面的绿色小勾,输入密码。同样可以输入平常用的短小的密码,不必非得按oracle建议的8位以上大小写加数字,密码不符合规则会提示。不用管它,继续Y即可。</li>\n<li>此外也可以安装好之后使用sqlplus进行修改。<ol>\n<li>直接打开sqlplus.exe或者cmd中输入sqlplus。</li>\n<li>登陆<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sys</span><br><span class=\"line\">sys as sysdba(这里默认不会显示)</span><br></pre></td></tr></table></figure></li>\n<li>解锁示例用户scott<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">alter user scott account unlock;</span><br></pre></td></tr></table></figure></li>\n</ol>\n</li>\n</ol>\n<h2 id=\"软件使用\"><a href=\"#软件使用\" class=\"headerlink\" title=\"软件使用\"></a>软件使用</h2><ul>\n<li>可以通过开始,应用程序中的Oracle 11g->应用程序开发->Sql Developer(Oracle自带可视化管理工具)或Sql Plus连接。<br>注意第一次使用SQL Developer时,会提示指定java.exe的路径,这里可以通过修改环境变量Path(添加<code>%JAVA_HOME%\\bin;</code>),然后将<code>JAVA_HOME</code>值修改为Oracel安装路径下面的JDK目录(Oracle完全安装好之后会自带一个JDK)中的bin目录(例如<code>D:\\oracle\\product\\11.2.0\\dbhome_1\\SQLDEVELOPER\\jdk\\jre</code>)或者改为所兼容JDK版本所在的安装位置的bin目录。</li>\n<li>除了修改环境变量外,第一次打开的时候会提示选择Java.exe位置,同样可以选择Oracle基目录中的也可以选择已安装兼容版本的JDK。</li>\n<li>Oracle11g自带的SQL Developer是32位的,需要从官网重新下载64位SQL Developer解压后替换Oracle中的SQL Developer目录中所有文件。</li>\n</ul>\n<h2 id=\"卸载\"><a href=\"#卸载\" class=\"headerlink\" title=\"卸载\"></a>卸载</h2><h3 id=\"Oracle企业版卸载\"><a href=\"#Oracle企业版卸载\" class=\"headerlink\" title=\"Oracle企业版卸载\"></a>Oracle企业版卸载</h3><ol>\n<li>停止oracle服务</li>\n<li>运行%Oracle软件实地址(如果默认安装就是app文件夹)%\\product\\11.2.0\\dbhome_1\\deinstall\\deinstall.bat(也可以在CMD中运行)<br>示例<code>E:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\deinstall\\deinstall</code><ol>\n<li>指定要取消配置的所有单实例监听程序 【LISTENER】:<br>你可以直接选择回车,或者可以输入LISTENER,然后回车。</li>\n<li>指定在此Oracle主目录中配置的数据库名列表【BOOK,ORCL】:<br>若没有新增数据库,则仅有ORCL数据库名;若有新增将显示所有数据库名。<br>你可以直接选择回车,或者可以输入BOOK,ORCL,然后回车。</li>\n<li>指定此数据库的类型,默认即可,然后回车。<br>指定数据库诊断目标位置,默认即可,然后回车。<br>指定数据库ASM:FS使用的储存类型【】:填写FS,然后回车。<br>指定数据库spfile位置【】:直接回车即可。</li>\n<li>是否继续,填写y,然后回车继续运行。</li>\n</ol>\n</li>\n<li>删除基文件夹</li>\n<li>删除C:/program files/oracle</li>\n<li>删除注册表(注意:删除注册表中Oracle相关的信息时,请小心,防止误删其他信息,导致不必要的麻烦产生)<br>开始->运行(或者Win+R)->输入regedit->回车<br>找到以下目录:<br><code>HKEY_CLASSES_ROOT</code><br><code>HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE</code><br><code>HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services</code><br><code>HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Eventlog\\Application</code><br>删除所有<code>ora</code>开头的记录。</li>\n<li>查看环境变量中是否存在Oracle相关的设置,若有删除。</li>\n<li>删除所有的Oracle快捷方式。</li>\n<li>为了保险可以拿软件再清理一下注册表。</li>\n<li>重新启动</li>\n</ol>\n<h3 id=\"Oracle-XE-卸载\"><a href=\"#Oracle-XE-卸载\" class=\"headerlink\" title=\"Oracle XE 卸载\"></a>Oracle XE 卸载</h3><p>这个是精简版的,没有卸载脚本,直接打开安装包可以看到卸载的选项。</p>\n<h2 id=\"一些错误的解决\"><a href=\"#一些错误的解决\" class=\"headerlink\" title=\"一些错误的解决\"></a>一些错误的解决</h2><h3 id=\"oracle-dbconsole-无法启动-报服务特定错误-2\"><a href=\"#oracle-dbconsole-无法启动-报服务特定错误-2\" class=\"headerlink\" title=\"oracle dbconsole 无法启动 报服务特定错误 2\"></a>oracle dbconsole 无法启动 报服务特定错误 2</h3><p>关键要找到日志文件,在`%ORACLE_HOME%\\11.1.0\\db_1\\计算名_SID\\sysman\\log\\emdb.nohup`,日志中有记录具体导致出错原因。<br>需要进行以下修改:</p>\n<ol>\n<li><code>/%ORACLE_HOME%/oc4j/je22/OC4J_DBConsole_计算机名_SID/config/rmi.xml</code><br><code>port="5520" ``ssl-port="5520"</code><br>端口号使用相同,于是修改 <code>port="5521"``ssl-port="5522"</code></li>\n<li>把<code>/%ORACLE_HOME%/localhost_orcl/sysman/config /emd.properties</code>文件的最后一项参数由<code>agentTZRegion=GMT</code>改成:<code>agentTZRegion=Asia/Shanghai </code>正确的时区设置</li>\n<li>修改<code>AgentListenOnAllNICs=FALSE</code>可能是多网卡的原因。需要这样改。<br>然后,重启emctl start dbconsole就好了。</li>\n</ol>\n<h3 id=\"Oracle-Issue-with-Environment-Variable-ORACLE-UNQNAME\"><a href=\"#Oracle-Issue-with-Environment-Variable-ORACLE-UNQNAME\" class=\"headerlink\" title=\"Oracle Issue with Environment Variable ORACLE_UNQNAME\"></a>Oracle Issue with Environment Variable ORACLE_UNQNAME</h3><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">:\\> emctl status dbconsole</span><br></pre></td></tr></table></figure>\n<p>Environment variable ORACLE_UNQNAME not defined.<br>Please set ORACLE_UNQNAME to database unique name</p>\n<p>下面是如何在windows中修改<code>oracle_unqname</code> 在UNIX/Linux中可以使用相似的<code>export command</code></p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">C:\\>set ORACLE_UNQNAME=orcl</span><br><span class=\"line\">C:\\>set ORACLE_SID=orcl</span><br><span class=\"line\">C:\\>emctl status dbconsole</span><br><span class=\"line\">Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0</span><br><span class=\"line\">Copyright (c) 1996, 2010 Oracle Corporation. All rights reserved.</span><br></pre></td></tr></table></figure>\n<h3 id=\"使用浏览器访问自带网页可视化管理工具出错\"><a href=\"#使用浏览器访问自带网页可视化管理工具出错\" class=\"headerlink\" title=\"使用浏览器访问自带网页可视化管理工具出错\"></a>使用浏览器访问自带网页可视化管理工具出错</h3><p>显示Windows不能在本地计算机启动OracleDBConsoleorcl .错误代码2</p>\n<h4 id=\"现象\"><a href=\"#现象\" class=\"headerlink\" title=\"现象\"></a>现象</h4><p>Windows 不能在 本地计算机 启动 OracleDBConsoleorcl。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 2。系统事件日志报错误”Agent process exited abnormally during initialization.”</p>\n<h4 id=\"出现情况\"><a href=\"#出现情况\" class=\"headerlink\" title=\"出现情况\"></a>出现情况</h4><p>原来正常,计算机名更改或IP地址变了后就不能启动,</p>\n<h4 id=\"解决步骤\"><a href=\"#解决步骤\" class=\"headerlink\" title=\"解决步骤\"></a>解决步骤</h4><p> 1. 开始->运行cmd</p>\n<p> 1. 执行<code>emctl start dbconsole</code><br> <code>C:\\Documents and Settings\\xcl>emctl start dbconsole</code><br> <figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> Environment variable ORACLE_SID not defined. Please define it.</span><br><span class=\"line\"> 提示:环境变量 ORACLE_SID 未定义,请定义。</span><br></pre></td></tr></table></figure><br> 1. 设置 ORACLE_SID =ORCL (orcl是当前实例名,也是服务名,SID)<br> <code>C:\\Documents and Settings\\xcl>set oracle_sid=orcl</code></p>\n<p> 1. 再次执行<code>emctl start dbconsole</code><br> <code>C:\\Documents and Settings\\xcl>emctl start dbconsole</code><br> <figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> OC4J Configuration issue. E:\\oracle\\product\\10.2.0\\db_1/oc4j/j2ee/OC4J_DBConsole_china-d9e3f7d07_orcl not found.</span><br><span class=\"line\"> 提示:无法找到“E:\\oracle\\product\\10.2.0\\db_1/oc4j/j2ee/OC4J_DBConsole_china-d9e3f7d07_orcl “</span><br><span class=\"line\"> 注:china-d9e3f7d07 是当前计算机名</span><br></pre></td></tr></table></figure><br> 复制该目录下的“OC4J_DBConsole_localhost_orcl”文件夹放在同一目录下,且把名称改成“OC4J_DBConsole_china-d9e3f7d07_orcl”。</p>\n<p> 1. 再次执行emctl start dbconsole<br> <code>C:\\Documents and Settings\\xcl>emctl start dbconsole</code><br> <figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> EM Configuration issue. E:\\oracle\\product\\10.2.0\\db_1/china-d9e3f7d07_orcl not found.</span><br><span class=\"line\"> 提示:无法找到 “E:\\oracle\\product\\10.2.0\\db_1/china-d9e3f7d07_orcl ”</span><br></pre></td></tr></table></figure><br> 复制该目录下的“localhost_orcl”文件夹放在同一目录下,且把名称改成“china-d9e3f7d07_orcl”。</p>\n<p> 1. 再次执行emctl start dbconsole<br> <code>C:\\Documents and Settings\\xcl>emctl start dbconsole</code><br> <figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0</span><br><span class=\"line\"> Copyright (c) 1996, 2006 Oracle Corporation. All rights reserved.</span><br><span class=\"line\"> http://localhost:1158/em/</span><br><span class=\"line\"> Starting Oracle Enterprise Manager 10g Database Control ...OracleDBConsoleorcl</span><br><span class=\"line\"> 服务正在启动</span><br><span class=\"line\"> ..............................</span><br><span class=\"line\"> OracleDBConsoleorcl 服务已经启动成功</span><br></pre></td></tr></table></figure></p>\n<h4 id=\"解决方法二\"><a href=\"#解决方法二\" class=\"headerlink\" title=\"解决方法二\"></a>解决方法二</h4><p>先禁用网卡,启动dbconsole服务,再进入<a href=\"http://localhost:1158/em%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%83%B3%E4%B8%8A%E7%BD%91%EF%BC%8C%E5%86%8D%E5%90%AF%E5%8A%A8%E7%BD%91%E5%8D%A1%EF%BC%8COK\">http://localhost:1158/em,如果想上网,再启动网卡,OK</a>!<br>缺点:每一次都要禁用网卡才可以启动,麻烦。</p>\n<h4 id=\"解决方法三\"><a href=\"#解决方法三\" class=\"headerlink\" title=\"解决方法三\"></a>解决方法三</h4><p>设置回还网卡,在控制面板中,点击<code>新增硬件</code>选择<code>microsoft lookback adapter</code>,进入<code>网上邻居</code>-><code>网络连接</code>,设置任意IP,开始->oracle->配置和移植工具->netconfiguration assistant 把回还网卡的IP添加->保存。</p>\n","slug":"笔记/2016-09-02.Oracle安装与卸载","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Oracle","slug":"Oracle","permalink":"https://www.zhiiker.com/tags/Oracle/"}]},{"title":"去生活,去犯错,去跌倒,去胜利,去用生命再创生命","date":"2016-07-30T07:10:05.000Z","path":"2016/07/30/结绳纪/2016-07-30.去生活,去犯错,去跌倒,去胜利,去用生命再创生命/","text":"“To live, to err, to fall, to triumph, to recreate life out of life. A wild angel appeared to him, the angel of mortal youth and beauty, an envoy from the fair courts of life, to throw open before him in an instant of ecstasy the gates of all the ways of error and glory. On and on and on and on!” 克雷格·文特尔花了10年以及4000万美元,在人类历史中第一次利用最基本的建筑材料,从一个个字母开始书写生命的密码:一段由电脑设计、人工合成的染色体,被移植到一个去除了遗传物质的细菌中,然后通过分裂和增生,逐渐控制了这个细菌,最终成为一种全新的生命。 文特尔博士当时在所有媒体面前说: “在这颗星球上所有能够自我复制的生命体中,我们首次拥有了这样的一员——它的父母,是一台电脑。” 并且在人造DNA里加入了四段“加密水印”:他们用氨基酸对应英文字母给DNA设计了一套密码系统,写上了自己的名字和邮箱,还替这条人造染色体建立了自己的网页,甚至把网址也写在遗传序列之中。。这些技术宅甚至还假装成文艺青年,在其中一段水印中写下了,三条颇具诗意的名言其中的一条是: 去生活,去犯错,去跌倒,去胜利,去用生命再创生命。 ——詹姆斯·乔伊斯《一个青年艺术家的画像》文章开始是引用原文 媒体当时给的配图:上帝拿着电脑,创造出了右上角的细菌 ![上帝拿着电脑,创造出了右上角的细菌](https://images.liangs.me/bitcron/Diary/2016/_image/20130831005348_2802.jpg)","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><blockquote>\n<p>“To live, to err, to fall, to triumph, to recreate life out of life. A wild angel appeared to him, the angel of mortal youth and beauty, an envoy from the fair courts of life, to throw open before him in an instant of ecstasy the gates of all the ways of error and glory. On and on and on and on!”</p>\n</blockquote>\n<span id=\"more\"></span>\n\n<p>克雷格·文特尔花了10年以及4000万美元,在人类历史中第一次利用最基本的建筑材料,从一个个字母开始书写生命的密码:一段由电脑设计、人工合成的染色体,被移植到一个去除了遗传物质的细菌中,然后通过分裂和增生,逐渐控制了这个细菌,最终成为一种全新的生命。</p>\n<p>文特尔博士当时在所有媒体面前说:</p>\n<blockquote>\n<p>“在这颗星球上所有能够自我复制的生命体中,我们首次拥有了这样的一员——它的父母,是一台电脑。”</p>\n</blockquote>\n<p>并且在人造DNA里加入了四段“加密水印”:他们用氨基酸对应英文字母给DNA设计了一套密码系统,写上了自己的名字和邮箱,还替这条人造染色体建立了自己的网页,甚至把网址也写在遗传序列之中。。这些技术宅甚至还假装成文艺青年,在其中一段水印中写下了,三条颇具诗意的名言<br>其中的一条是:</p>\n<blockquote>\n<p>去生活,去犯错,去跌倒,去胜利,去用生命再创生命。<br> ——詹姆斯·乔伊斯《一个青年艺术家的画像》<br>文章开始是引用原文</p>\n</blockquote>\n<p>媒体当时给的配图:上帝拿着电脑,创造出了右上角的细菌</p>\n<center>\n![上帝拿着电脑,创造出了右上角的细菌](https://images.liangs.me/bitcron/Diary/2016/_image/20130831005348_2802.jpg)\n</center>\n\n","slug":"结绳纪/2016-07-30.去生活,去犯错,去跌倒,去胜利,去用生命再创生命","comments":true,"categories":[{"name":"结绳纪","slug":"结绳纪","permalink":"https://www.zhiiker.com/categories/%E7%BB%93%E7%BB%B3%E7%BA%AA/"}],"tags":[]},{"title":"Hexo一些语法","date":"2016-07-30T06:35:42.000Z","path":"2016/07/30/笔记/2016-07-30.Hexo一些语法/","text":"测试&备忘Hexo的一些语法。 插入图片添加外部链接图片插入图片的代码是: 1![“图片描述”(可以不写)](“图片地址”) 图片存储的话一般会使用图床,推荐七牛存储、贴图库(这个网站有个好处,不用注册也可以上传图片获取外链)下面是个例子,代码如下: 1![颈椎病治疗秘籍](http://i3.tietuku.com/87f77fa8e36571ba.png) 添加本地图片在\\hexo\\source目录下新建文件夹,命名为images或者其他你喜欢的名字。代码是: 1![“图片描述”(可以不写)](/images/你的图片名字.JPG) 例如: 1![](/images/smile01.gif) 再者也可以用 1{% img [2.png] /images/2.png 这是标题 %} 插入音乐比如网易云音乐,找到喜欢的歌曲,点击分享按钮,把里面的代码复制下来,直接粘贴到博文中即可。比如插入以下代码 123<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="http://music.163.com/outchain/player?type=2&id=25706282&auto=0&height=66"></iframe> 如果想要居中显示可以在外侧加入<center> </center>标签,代码如下: 12345<center><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="http://music.163.com/outchain/player?type=2&id=25706282&auto=0&height=66"></iframe></center> 插入视频视频也和音乐类似,先输入视频标题,回车换一行插入代码即可。并且兼容居中标签。 123456Idina Menze和Caleb Hyles激情对唱Let It Go:<iframe height=498 width=510 src="http://player.youku.com/embed/XNjcyMDU4Njg0" frameborder=0 allowfullscreen></iframe> 12345678(居中)Idina Menze和Caleb Hyles激情对唱Let It Go:<center> <iframe height=498 width=510 src="http://player.youku.com/embed/XNjcyMDU4Njg0" frameborder=0 allowfullscreen></iframe></center> 效果如下:Idina Menze和Caleb Hyles激情对唱Let It Go: (居中)Idina Menze和Caleb Hyles激情对唱Let It Go:","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>测试&备忘<br>Hexo的一些语法。</p>\n<span id=\"more\"></span>\n<h2 id=\"插入图片\"><a href=\"#插入图片\" class=\"headerlink\" title=\"插入图片\"></a>插入图片</h2><h3 id=\"添加外部链接图片\"><a href=\"#添加外部链接图片\" class=\"headerlink\" title=\"添加外部链接图片\"></a>添加外部链接图片</h3><p>插入图片的代码是:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">![“图片描述”(可以不写)](“图片地址”)</span><br></pre></td></tr></table></figure>\n\n<p>图片存储的话一般会使用图床,推荐七牛存储、贴图库(这个网站有个好处,不用注册也可以上传图片获取外链)<br>下面是个例子,代码如下:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">![颈椎病治疗秘籍](http://i3.tietuku.com/87f77fa8e36571ba.png)</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"添加本地图片\"><a href=\"#添加本地图片\" class=\"headerlink\" title=\"添加本地图片\"></a>添加本地图片</h3><p>在\\hexo\\source目录下新建文件夹,命名为images或者其他你喜欢的名字。<br>代码是:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">![“图片描述”(可以不写)](/images/你的图片名字.JPG)</span><br></pre></td></tr></table></figure>\n<p>例如:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">![](/images/smile01.gif)</span><br></pre></td></tr></table></figure>\n<p>再者也可以用</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">{% img [2.png] /images/2.png 这是标题 %}</span><br></pre></td></tr></table></figure>\n\n<img src=\"/images/2.png\" class=\"[2.png]\" title=\"这是标题\">\n\n<h2 id=\"插入音乐\"><a href=\"#插入音乐\" class=\"headerlink\" title=\"插入音乐\"></a>插入音乐</h2><p>比如网易云音乐,找到喜欢的歌曲,点击分享按钮,把里面的代码复制下来,直接粘贴到博文中即可。<br>比如插入以下代码</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86</span><br><span class=\"line\"> src="http://music.163.com/outchain/player?type=2&id=25706282&auto=0&height=66"></span><br><span class=\"line\"></iframe></span><br></pre></td></tr></table></figure>\n<p>如果想要居中显示可以在外侧加入<code><center></code> <code></center></code>标签,代码如下:</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><center></span><br><span class=\"line\"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86</span><br><span class=\"line\"> src="http://music.163.com/outchain/player?type=2&id=25706282&auto=0&height=66"></span><br><span class=\"line\"></iframe></span><br><span class=\"line\"></center></span><br></pre></td></tr></table></figure>\n<center>\n<iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=330 height=86\n src=\"http://music.163.com/outchain/player?type=2&id=25706282&auto=0&height=66\">\n</iframe>\n</center>\n\n<h2 id=\"插入视频\"><a href=\"#插入视频\" class=\"headerlink\" title=\"插入视频\"></a>插入视频</h2><p>视频也和音乐类似,先输入视频标题,回车换一行插入代码即可。并且兼容居中标签。</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">Idina Menze和Caleb Hyles激情对唱Let It Go:</span><br><span class=\"line\"><iframe</span><br><span class=\"line\"> height=498 width=510</span><br><span class=\"line\"> src="http://player.youku.com/embed/XNjcyMDU4Njg0"</span><br><span class=\"line\"> frameborder=0 allowfullscreen></span><br><span class=\"line\"></iframe></span><br></pre></td></tr></table></figure>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">(居中)Idina Menze和Caleb Hyles激情对唱Let It Go:</span><br><span class=\"line\"><center></span><br><span class=\"line\"> <iframe</span><br><span class=\"line\"> height=498 width=510</span><br><span class=\"line\"> src="http://player.youku.com/embed/XNjcyMDU4Njg0"</span><br><span class=\"line\"> frameborder=0 allowfullscreen></span><br><span class=\"line\"></iframe></span><br><span class=\"line\"></center></span><br></pre></td></tr></table></figure>\n<p>效果如下:<br>Idina Menze和Caleb Hyles激情对唱Let It Go:</p>\n<iframe\n height=498 width=510\n src=\"http://player.youku.com/embed/XNjcyMDU4Njg0\"\n frameborder=0 allowfullscreen>\n</iframe>\n\n<p>(居中)Idina Menze和Caleb Hyles激情对唱Let It Go:</p>\n<center>\n <iframe\n height=498 width=510\n src=\"http://player.youku.com/embed/XNjcyMDU4Njg0\"\n frameborder=0 allowfullscreen>\n</iframe>\n</center>\n","slug":"笔记/2016-07-30.Hexo一些语法","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[]},{"title":"高分屏下字体显示的最终解决方案","date":"2016-07-30T05:25:05.000Z","path":"2016/07/30/笔记/2016-07-30.高分屏下字体显示的最终解决方案/","text":"之前发现像是有道云笔记等软件显示很模糊,SublimeText3字体显示错误都是DPI设置造成的。将设置恢复成100%后感觉字体非常小,看起来非常累。然后又深入了查了下,发现高分屏都有这个问题。 Windows下DPI设置在Windows Vista/Win7/Win8/Win8.1中调整DPI缩放级别不会有什么问题,但是在Windows10中微软采用了新的DPI解决方案,微软这么做可能主要是为了兼顾移动设备。为了解决这一问题,我们可以手动修改注册表让系统仍然采用Windows8时的DPI缩放方案,不过该方法有一个缺点,那就是系统每重启两次都会将注册表还原,需要重新修改。当然,可以写一个批处理放到开机启动文件夹,不过这样开机时会出现CMD窗口。国外网友利用系统中的API制作了一个小工具,较“完美”地解决了这个问题,在微软修复这个问题之前可临时采用这个方法。使用方法如下: 下载Win10 DPI修复工具下载地址 打开软件后,选择Use Windows8.1 DPI scaling,然后选择缩放级别。点击Apply应用,在弹出的提示窗口中点击OK。 设置好后重启系统或注销重登录后就可以看到效果了。如下图所示: 注:软件会在C:\\Program Files (x86)\\XPE Windows 10 DPI Fix(此为64位系统目录,32位系统为Program Files文件夹)目录下面生成程序文件,并自动设置为开机启动(因为需要自动调整)。如果你想恢复默认,只需要打开工具后勾选“Use Windows 10 Default DPI Scaling”,点击确定,重启后删掉C:\\Program Files (x86)\\XPE Windows 10 DPI Fix目录即可。 SublimeText3下修复在sublime text 3中,Preference, Settings-User,最后加上一行"dpi_scale": 1.0覆盖操作系统设置的DPI。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>之前发现像是有道云笔记等软件显示很模糊,SublimeText3字体显示错误都是DPI设置造成的。<br>将设置恢复成100%后感觉字体非常小,看起来非常累。<br>然后又深入了查了下,发现高分屏都有这个问题。</p>\n<span id=\"more\"></span>\n\n<h2 id=\"Windows下DPI设置\"><a href=\"#Windows下DPI设置\" class=\"headerlink\" title=\"Windows下DPI设置\"></a>Windows下DPI设置</h2><p>在Windows Vista/Win7/Win8/Win8.1中调整DPI缩放级别不会有什么问题,但是在Windows10中微软采用了新的DPI解决方案,微软这么做可能主要是为了兼顾移动设备。为了解决这一问题,我们可以手动修改注册表让系统仍然采用Windows8时的DPI缩放方案,不过该方法有一个缺点,那就是系统每重启两次都会将注册表还原,需要重新修改。当然,可以写一个批处理放到开机启动文件夹,不过这样开机时会出现CMD窗口。<br>国外网友利用系统中的API制作了一个小工具,较“完美”地解决了这个问题,在微软修复这个问题之前可临时采用这个方法。<br>使用方法如下:</p>\n<ul>\n<li><p>下载Win10 DPI修复工具<a href=\"http://pan.baidu.com/s/1pJBWwI3\">下载地址</a></p>\n</li>\n<li><p>打开软件后,选择<code>Use Windows8.1 DPI scaling</code>,然后选择缩放级别。点击<code>Apply</code>应用,在弹出的提示窗口中点击<code>OK</code>。</p>\n</li>\n</ul>\n<p>设置好后重启系统或注销重登录后就可以看到效果了。如下图所示:</p>\n<p>注:软件会在<code>C:\\Program Files (x86)\\XPE Windows 10 DPI Fix</code>(此为64位系统目录,32位系统为Program Files文件夹)目录下面生成程序文件,并自动设置为开机启动(因为需要自动调整)。如果你想恢复默认,只需要打开工具后勾选<code>“Use Windows 10 Default DPI Scaling”</code>,点击<code>确定</code>,重启后删掉<code>C:\\Program Files (x86)\\XPE Windows 10 DPI Fix</code>目录即可。</p>\n<h2 id=\"SublimeText3下修复\"><a href=\"#SublimeText3下修复\" class=\"headerlink\" title=\"SublimeText3下修复\"></a>SublimeText3下修复</h2><p>在sublime text 3中,<code>Preference, Settings-User</code>,最后加上一行<br><code>"dpi_scale": 1.0</code><br>覆盖操作系统设置的DPI。</p>\n","slug":"笔记/2016-07-30.高分屏下字体显示的最终解决方案","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[]},{"title":"Ubuntu下Anaconda安装","date":"2016-07-28T05:34:17.000Z","path":"2016/07/28/笔记/2016-07-28.Ubuntu下Anaconda安装/","text":"使用conda install anaconda-navigator安装anaconda navigator","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>使用<code>conda install anaconda-navigator</code><br>安装anaconda navigator</p>\n","slug":"笔记/2016-07-28.Ubuntu下Anaconda安装","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Ubuntu","slug":"Ubuntu","permalink":"https://www.zhiiker.com/tags/Ubuntu/"}]},{"title":"Sublime侧边栏乱码和有道云笔记显示不清晰","date":"2016-07-27T08:06:29.000Z","path":"2016/07/27/笔记/2016-07-07.Sublime侧边栏乱码和有道云笔记显示不清晰/","text":"下午的时候看着自己Sublime的侧边栏显示中文的文件名总是有问题,网上搜了下说安装ConvertToUTF8或者GBK Encoding Support插件可以解决问题,可是这个并不是问题所在。后来看到贴吧有个人遇到了一样的问题,原来是自己DPI调到超过100导致的,修改DPI之后只调整文字大小为10惊喜的发现不仅侧边栏好了,困扰了很久的有道云笔记等软件变模糊的问题也解决了。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>下午的时候看着自己Sublime的侧边栏显示中文的文件名总是有问题,网上搜了下说安装<code>ConvertToUTF8</code>或者<code>GBK Encoding Support</code>插件可以解决问题,可是这个并不是问题所在。<br>后来看到贴吧有个人遇到了一样的问题,原来是自己DPI调到超过100导致的,修改DPI之后只调整文字大小为10惊喜的发现不仅侧边栏好了,困扰了很久的有道云笔记等软件变模糊的问题也解决了。</p>\n","slug":"笔记/2016-07-07.Sublime侧边栏乱码和有道云笔记显示不清晰","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[]},{"title":"Ubuntu下SublimeC&C++配置","date":"2016-07-27T07:59:00.000Z","path":"2016/07/27/AC++/2016-07-27.Ubuntu下SublimeC和Cpp配置/","text":"选择tool –> Build System –> New Build System输入以下代码 12345678910111213{ "shell_cmd": "gcc \\"${file}\\" -o \\"${file_path}/${file_base_name}\\" -Wformat=2", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.c", "variants": [ { "name": "Run", "shell_cmd": "gcc \\"${file}\\" -o \\"${file_path}/${file_base_name}\\" -Wformat=2 && \\"${file_path}/${file_base_name}\\"" } ]} 按Ctrl+s保存,会自动打开user目录(Sublime Text 3\\Packages\\User),我们修改 文件名为 c.sublime-build,保存在此目录。/home/username/.config/sublime-text-3/Packages/User这时候,可以在Tools -> Build System下看到刚才新建的c了点击右下角处的c++ 选择Open all with current extension as .. 然后选择C,这样以后打开.c文件就默认是c类型","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>选择<code>tool –> Build System –> New Build System</code><br>输入以下代码</p>\n<span id=\"more\"></span>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">{</span><br><span class=\"line\"> "shell_cmd": "gcc \\"${file}\\" -o \\"${file_path}/${file_base_name}\\" -Wformat=2",</span><br><span class=\"line\"> "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",</span><br><span class=\"line\"> "working_dir": "${file_path}",</span><br><span class=\"line\"> "selector": "source.c",</span><br><span class=\"line\"> "variants":</span><br><span class=\"line\"> [</span><br><span class=\"line\"> {</span><br><span class=\"line\"> "name": "Run",</span><br><span class=\"line\"> "shell_cmd": "gcc \\"${file}\\" -o \\"${file_path}/${file_base_name}\\" -Wformat=2 && \\"${file_path}/${file_base_name}\\""</span><br><span class=\"line\"> }</span><br><span class=\"line\"> ]</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n<p>按Ctrl+s保存,会自动打开user目录(Sublime Text 3\\Packages\\User),我们修改 文件名为 c.sublime-build,保存在此目录。<br><code>/home/username/.config/sublime-text-3/Packages/User</code><br>这时候,可以在Tools -> Build System下看到刚才新建的c了<br>点击右下角处的c++ 选择Open all with current extension as .. 然后选择C,这样以后打开.c文件就默认是c类型</p>\n","slug":"AC++/2016-07-27.Ubuntu下SublimeC和Cpp配置","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Ubuntu","slug":"Ubuntu","permalink":"https://www.zhiiker.com/tags/Ubuntu/"}]},{"title":"含义","date":"2016-07-27T07:59:00.000Z","path":"2016/07/27/AC++/2016-07-27.含义/","text":"类别还有标签起名为AC++完全为了好运。从零开始,一步一步训练。从这里开始,从A+B开始记录自己的成长。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>类别还有标签起名为AC++完全为了好运。<br>从零开始,一步一步训练。<br>从这里开始,从A+B开始记录自己的成长。</p>\n","slug":"AC++/2016-07-27.含义","comments":true,"categories":[{"name":"AC++","slug":"AC","permalink":"https://www.zhiiker.com/categories/AC/"}],"tags":[]},{"title":"站点迁移","date":"2016-07-25T16:00:00.000Z","path":"2016/07/26/建站日志/站点迁移/","text":"从farbox迁移到gitpages由于在搞博客的时候顺带着学习一下Node.js就希望使用Hexo搭建博客,之前的博客也说过这个情况。Hexo搭起来还是十分简单的,下面简单说一下流程。原先的日志也迁移过来了,原来博客还能访问地址http://shichao.farbox.me 在Github上搭建Hexo博客1.首先你需要安装Git、Node.js2.进入GitBash输入npm install -g hexo全局安装Hexo3.创建站点文件夹,在站点文件夹运行GitBash用Hexo初始化网站hexo init4.安装依赖包npm install5.生成网页hexo generate可简写为hexo g6.输入hexo server或者简写hexo s可以本地查看生成的网站了只要浏览器输入localhost:4000即可7.登陆Github账号创建Repository,名字必须是用户名.github.io8.修改配置文件(我就是在这个位置出现问题,后来得到@takwolf耐心帮助,最后解决了问题)配置文件就是站点目录文件下的_config.yml修改文件里面的deploy。其中的repository就是 Github中创建登陆Github账号创建Repository的地址。特别要注意的是Hexo有一次大的升级,看到的旧的教程无法使用,最好看官方的文档,我就被教程给误导了。我的deploy的配置是这样的 123type: gitrepo: https://github.com/wmwwmv/wmwwmv.github.io.gitbranch: master 修改后保存。9.如果之前没有绑定SSH Key的话需要生成并绑定,这样生成的网页才能够同步到Gitpages上9.1.在Git Bash输入以下指令(任意位置点击鼠标右键),检查是否已经存在了SSH keys。ls -al ~/.ssh9.2.如果没有输入以下指令(邮箱就是你注册Github时候的邮箱)后,回车:ssh-keygen -t rsa -C "youremail@github.com"9.3.让你输入Key保存地址9.4.输入密钥口令9.5.输入ssh-agent -s9.6.继续ssh-add ~/.ssh/id_rsa如果出错输入 12eval `ssh-agent -s`ssh-add 9.7.复制id_pub文件内容,打开Github个人设置,找到SSH Keys设置,点击Add SSH key,输入标题,再将刚刚复制的秘钥输入。点击Add Key,输入你的Github密码即可完成SSH Key的添加。测试命令:ssh -T git@gh.neting.cc10.最后再输入hexo g hexo clean hexo d即可同步到Github。11.最后说一下域名绑定:官方的文档在这里:https://help.github.com/articles/using-a-custom-domain-with-github-pages/ 总结一下,需要在Repo设置处添加域名,然后在Source文件夹下面新建一个CNAME文件,里面是自定义域名。最后在DNS处修改成A或CNAME。另外修改成A的话必须是官方提供的iphttps://help.github.com/articles/using-a-custom-domain-with-github-pages/在上面这个文档中有给出。改成CNAME的话直接改成用户名.github.io即可,官方推荐CNAME方式,因为IP随时可能被屏蔽或者更换而无法访问。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"从farbox迁移到gitpages\"><a href=\"#从farbox迁移到gitpages\" class=\"headerlink\" title=\"从farbox迁移到gitpages\"></a>从farbox迁移到gitpages</h2><p>由于在搞博客的时候顺带着学习一下Node.js就希望使用Hexo搭建博客,之前的博客也说过这个情况。<br>Hexo搭起来还是十分简单的,下面简单说一下流程。<br>原先的日志也迁移过来了,原来博客还能访问地址<a href=\"http://shichao.farbox.me/\">http://shichao.farbox.me</a></p>\n<span id=\"more\"></span>\n\n<h2 id=\"在Github上搭建Hexo博客\"><a href=\"#在Github上搭建Hexo博客\" class=\"headerlink\" title=\"在Github上搭建Hexo博客\"></a>在Github上搭建Hexo博客</h2><p>1.首先你需要安装Git、Node.js<br>2.进入GitBash<br>输入<code>npm install -g hexo</code><br>全局安装Hexo<br>3.创建站点文件夹,在站点文件夹运行GitBash<br>用Hexo初始化网站<br><code>hexo init</code><br>4.安装依赖包<br><code>npm install</code><br>5.生成网页<br><code>hexo generate</code>可简写为<code>hexo g</code><br>6.输入<code>hexo server</code>或者简写<code>hexo s</code>可以本地查看生成的网站了只要浏览器输入<code>localhost:4000</code>即可<br>7.登陆Github账号创建Repository,名字必须是<code>用户名.github.io</code><br>8.修改配置文件(我就是在这个位置出现问题,后来得到<code>@takwolf</code>耐心帮助,最后解决了问题)<br>配置文件就是站点目录文件下的<code>_config.yml</code><br>修改文件里面的deploy。其中的repository就是 Github中创建登陆Github账号创建Repository的地址。<br>特别要注意的是Hexo有一次大的升级,看到的旧的教程无法使用,最好看官方的文档,我就被教程给误导了。<br>我的deploy的配置是这样的</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">type: git</span><br><span class=\"line\">repo: https://github.com/wmwwmv/wmwwmv.github.io.git</span><br><span class=\"line\">branch: master</span><br></pre></td></tr></table></figure>\n<p>修改后保存。<br>9.如果之前没有绑定SSH Key的话需要生成并绑定,这样生成的网页才能够同步到Gitpages上<br>9.1.在Git Bash输入以下指令(任意位置点击鼠标右键),检查是否已经存在了SSH keys。<br><code>ls -al ~/.ssh</code><br>9.2.如果没有<br>输入以下指令(邮箱就是你注册Github时候的邮箱)后,回车:<br><code>ssh-keygen -t rsa -C "youremail@github.com"</code><br>9.3.让你输入Key保存地址<br>9.4.输入密钥口令<br>9.5.输入<br><code>ssh-agent -s</code><br>9.6.继续<br><code>ssh-add ~/.ssh/id_rsa</code><br>如果出错输入</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">eval `ssh-agent -s`</span><br><span class=\"line\">ssh-add</span><br></pre></td></tr></table></figure>\n<p>9.7.复制id_pub文件内容,打开Github个人设置,找到SSH Keys设置,点击Add SSH key,输入标题,再将刚刚复制的秘钥输入。<br>点击Add Key,输入你的Github密码即可完成SSH Key的添加。<br>测试命令:<br><code>ssh -T git@github.com</code><br>10.最后再输入<code>hexo g</code> <code>hexo clean</code> <code>hexo d</code>即可同步到Github。<br>11.最后说一下域名绑定:<br>官方的文档在这里:<br><a href=\"https://help.github.com/articles/using-a-custom-domain-with-github-pages/\">https://help.github.com/articles/using-a-custom-domain-with-github-pages/</a></p>\n<p>总结一下,需要在Repo设置处添加域名,然后在Source文件夹下面新建一个CNAME文件,里面是自定义域名。最后在DNS处修改成A或CNAME。<br>另外修改成A的话必须是官方提供的ip<br><a href=\"https://help.github.com/articles/using-a-custom-domain-with-github-pages/\">https://help.github.com/articles/using-a-custom-domain-with-github-pages/</a><br>在上面这个文档中有给出。<br>改成CNAME的话直接改成<code>用户名.github.io</code>即可,官方推荐CNAME方式,因为IP随时可能被屏蔽或者更换而无法访问。</p>\n","slug":"建站日志/站点迁移","comments":true,"categories":[{"name":"萱苏小筑","slug":"萱苏小筑","permalink":"https://www.zhiiker.com/categories/%E8%90%B1%E8%8B%8F%E5%B0%8F%E7%AD%91/"}],"tags":[{"name":"建站日志","slug":"建站日志","permalink":"https://www.zhiiker.com/tags/%E5%BB%BA%E7%AB%99%E6%97%A5%E5%BF%97/"}]},{"title":"建站日志","date":"2016-07-25T16:00:00.000Z","path":"/site-building-log","text":"将博客转移到GithubPages开启sitemap&RSS1npm install hexo-generator-sitemap --save 重点在--save 缺少这一句无法安装。之后还需要在config.yml配置一下。 域名设置我在设置子域名时候出现了问题。 设置时区有一步时区设置错误,应该设置为Asia/Shanghai否则文章无法正常显示。 百度站长验证如果要让百度快速收录网站,在百度站长工具中,先完成对网站的验证。百度网站的验证方法有三种,使用“HTML 标签验证”。进入站长工具,输入需要验证的网站的域名,并选择 HTML 标签验证。复制该标签代码到主题相应的字段。 2016-08-20 修复搜索,标签样式这两个困扰了好久,当自己重新下载主题覆盖后,标签样式还原了,意识到url_root设置错了搜索出现问题是标题中有&,search.xml不能解析不过现在还是有问题,之前文章迁移过来编码的问题。 Hexo关联Github参考了关联 GitHub, 让 Hexo 支持查看文章更新历史自己又调了终于成功了。中间卡在Github同步上,总提示没有权限。正确是顺序是现在Github上建立Repo,然后Clone下来再git remote add origin https://github.com/wmwwmv/BlogBackup.git之后add commit push。 9.24 增加coding备份为了能够让搜索引擎更加友好的抓取站点,获得更好的权重,把liangshichao.com这个域名给了自己的博客。另外保持以前链接的兼容性,还有保证国内的速度,多地备份。使用了Coding.net的Pages进行同步托管。因为Github的Pages不支持多域名,花了一个小时看了看文档,基本搞定。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h3 id=\"将博客转移到GithubPages\"><a href=\"#将博客转移到GithubPages\" class=\"headerlink\" title=\"将博客转移到GithubPages\"></a>将博客转移到GithubPages</h3><h3 id=\"开启sitemap-amp-RSS\"><a href=\"#开启sitemap-amp-RSS\" class=\"headerlink\" title=\"开启sitemap&RSS\"></a>开启sitemap&RSS</h3><figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">npm install hexo-generator-sitemap --save</span><br></pre></td></tr></table></figure>\n<p>重点在<code>--save</code> 缺少这一句无法安装。<br>之后还需要在<code>config.yml</code>配置一下。</p>\n<h3 id=\"域名设置\"><a href=\"#域名设置\" class=\"headerlink\" title=\"域名设置\"></a>域名设置</h3><p>我在设置子域名时候出现了问题。</p>\n<h3 id=\"设置时区\"><a href=\"#设置时区\" class=\"headerlink\" title=\"设置时区\"></a>设置时区</h3><p>有一步时区设置错误,应该设置为<code>Asia/Shanghai</code>否则文章无法正常显示。</p>\n<h3 id=\"百度站长验证\"><a href=\"#百度站长验证\" class=\"headerlink\" title=\"百度站长验证\"></a>百度站长验证</h3><p>如果要让百度快速收录网站,在<a href=\"http://zhanzhang.baidu.com/site/index\">百度站长工具</a>中,先完成对网站的验证。<br>百度网站的验证方法有三种,使用“HTML 标签验证”。进入站长工具,输入需要验证的网站的域名,并选择 HTML 标签验证。<br>复制该标签代码到主题相应的字段。</p>\n<h3 id=\"2016-08-20-修复搜索,标签样式\"><a href=\"#2016-08-20-修复搜索,标签样式\" class=\"headerlink\" title=\"2016-08-20 修复搜索,标签样式\"></a>2016-08-20 修复搜索,标签样式</h3><p>这两个困扰了好久,当自己重新下载主题覆盖后,标签样式还原了,意识到url_root设置错了<br>搜索出现问题是标题中有&,search.xml不能解析<br>不过现在还是有问题,之前文章迁移过来编码的问题。</p>\n<h2 id=\"Hexo关联Github\"><a href=\"#Hexo关联Github\" class=\"headerlink\" title=\"Hexo关联Github\"></a>Hexo关联Github</h2><p>参考了<a href=\"http://moxfive.xyz/2016/01/10/hexo-post-version-control/\">关联 GitHub, 让 Hexo 支持查看文章更新历史</a>自己又调了终于成功了。<br>中间卡在Github同步上,总提示没有权限。<br>正确是顺序是现在Github上建立Repo,然后Clone下来再<code>git remote add origin https://github.com/wmwwmv/BlogBackup.git</code><br>之后add commit push。</p>\n<h2 id=\"9-24-增加coding备份\"><a href=\"#9-24-增加coding备份\" class=\"headerlink\" title=\"9.24 增加coding备份\"></a>9.24 增加coding备份</h2><p>为了能够让搜索引擎更加友好的抓取站点,获得更好的权重,把<code>liangshichao.com</code>这个域名给了自己的博客。<br>另外保持以前链接的兼容性,还有保证国内的速度,多地备份。使用了Coding.net的Pages进行同步托管。<br>因为Github的Pages不支持多域名,花了一个小时看了看文档,基本搞定。</p>\n","slug":"建站日志/建站日志","comments":false,"categories":[{"name":"萱苏小筑","slug":"萱苏小筑","permalink":"https://www.zhiiker.com/categories/%E8%90%B1%E8%8B%8F%E5%B0%8F%E7%AD%91/"}],"tags":[{"name":"建站日志","slug":"建站日志","permalink":"https://www.zhiiker.com/tags/%E5%BB%BA%E7%AB%99%E6%97%A5%E5%BF%97/"},{"name":"Hexo","slug":"Hexo","permalink":"https://www.zhiiker.com/tags/Hexo/"}]},{"title":"广电总局 中文域名","date":"2016-07-07T15:17:00.000Z","path":"2016/07/07/拾摘/2016-07-07.广电总局,中文域名/","text":"最近广电总局又上了新闻了,说不建议在游戏中使用英文,某款送审的游戏就因为UI界面当中出现了英文,结果以“文字使用不规范”为由被驳回。事件可以参见这篇文章中国手游中不准出现英文字母然后打开广电的官网一看,咦,域名都是中文的。浏览器显示http://国家新闻出版广电总局.中国/Chrome下复制后就是这样http://xn--79qy5jwte2pa03geqdl6n7lzw6fb55g.xn--fiqs8s/Safari和其他浏览器复制后是中文的。从这里可以看到中文域名解析的机制:先把Unicode码位映射到Punycode,然后在前面加上xn--这是IDN域名,只是在浏览器上转文字,实际上并不是中文的。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>最近广电总局又上了新闻了,说不建议在游戏中使用英文,某款送审的游戏就因为UI界面当中出现了英文,结果以“文字使用不规范”为由被驳回。<br>事件可以参见这篇文章<a href=\"http://mp.weixin.qq.com/s?__biz=MjM5OTgzNzkyNA==&mid=2653182483&idx=1&sn=bbe263646767ff5f63effb3537add8cd&scene=1&srcid=0706cdITQTm82rt6cV9a2Wh1#rd\">中国手游中不准出现英文字母</a><br>然后打开广电的官网一看,咦,域名都是中文的。<br>浏览器显示<code>http://国家新闻出版广电总局.中国/</code><br>Chrome下复制后就是这样<code>http://xn--79qy5jwte2pa03geqdl6n7lzw6fb55g.xn--fiqs8s/</code><br>Safari和其他浏览器复制后是中文的。<br>从这里可以看到中文域名解析的机制:<br>先把Unicode码位映射到Punycode,然后在前面加上<code>xn--</code><br>这是IDN域名,只是在浏览器上转文字,实际上并不是中文的。</p>\n","slug":"拾摘/2016-07-07.广电总局,中文域名","comments":true,"categories":[{"name":"拾摘","slug":"拾摘","permalink":"https://www.zhiiker.com/categories/%E6%8B%BE%E6%91%98/"}],"tags":[]},{"title":"大国国民的情怀","date":"2016-07-07T05:25:00.000Z","path":"2016/07/07/拾摘/2016-07-07.大国国民的情怀/","text":"转自朋友圈 七七之日,勿忘国耻,但不是抵制日货,唾骂日本,我们缺少一种大国国民的情怀,缺少一种真正的厚重的谦卑心态,缺少一种真实的脚踏实地。我们应该体验日本的设计,寻找艺术之灵的真的创新。应该体验日本的服务行业,习得何为上帝何为诚信。使用是为了获得,为了使整体的快乐高过少数人的悲伤,我们应该学的太多,这需要放下骄傲,放下愤怒,放下放不下的一切。PS:因为固步自封,所以被欺凌。只有变革才能在时代浪潮中维护正义。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><blockquote>\n<p>转自朋友圈</p>\n</blockquote>\n<p>七七之日,勿忘国耻,但不是抵制日货,唾骂日本,我们缺少一种大国国民的情怀,缺少一种真正的厚重的谦卑心态,缺少一种真实的脚踏实地。我们应该体验日本的设计,寻找艺术之灵的真的创新。应该体验日本的服务行业,习得何为上帝何为诚信。使用是为了获得,为了使整体的快乐高过少数人的悲伤,我们应该学的太多,这需要放下骄傲,放下愤怒,放下放不下的一切。<br>PS:<code>因为固步自封,所以被欺凌。只有变革才能在时代浪潮中维护正义。</code></p>\n","slug":"拾摘/2016-07-07.大国国民的情怀","comments":true,"categories":[{"name":"拾摘","slug":"拾摘","permalink":"https://www.zhiiker.com/categories/%E6%8B%BE%E6%91%98/"}],"tags":[]},{"title":"永远保持好奇心","date":"2016-07-06T09:47:00.000Z","path":"2016/07/06/拾摘/2016-07-06.永远保持好奇心/","text":"永远保持好奇心,并对这个世界怀有善意。生命就是一场不可思议的旅程,我们造梦,可能因为一个荒诞不羁的念头,也可能是为了一个最最心爱的人。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>永远保持好奇心,并对这个世界怀有善意。<br>生命就是一场不可思议的旅程,<br>我们造梦,可能因为一个荒诞不羁的念头,<br>也可能是为了一个最最心爱的人。</p>\n","slug":"拾摘/2016-07-06.永远保持好奇心","comments":true,"categories":[{"name":"拾摘","slug":"拾摘","permalink":"https://www.zhiiker.com/categories/%E6%8B%BE%E6%91%98/"}],"tags":[]},{"title":"各种奇葩中文编程语言","date":"2016-06-27T01:59:00.000Z","path":"2016/06/27/笔记/2016-06-27.各种奇葩中文编程语言/","text":"习语言(中文版的C语言),易语言、PerlYuYan(文言文编程)、草泥马语言、CHTML语言,“丙正正”语言(C++语言中文版),中蟒语言。现在看起来,汉字编程的语言,也就易语言和中蟒语言还算可以,其他几个纯属恶搞。尤其是草泥马语言,实在是恶搞过度了。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>习语言(中文版的C语言),易语言、PerlYuYan(文言文编程)、草泥马语言、CHTML语言,“丙正正”语言(C++语言中文版),<a href=\"http://www.chinesepython.org/\">中蟒语言</a>。<br>现在看起来,汉字编程的语言,也就易语言和中蟒语言还算可以,其他几个纯属恶搞。尤其是草泥马语言,实在是恶搞过度了。</p>\n","slug":"笔记/2016-06-27.各种奇葩中文编程语言","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[]},{"title":"Shadowsocks IPV4&IPV6服务器端配置","date":"2016-06-22T08:25:00.000Z","path":"/ShadowsocksIPV4n6","text":"这次来到UCAS才有机会用到IPV6的网络,成功配置了IPV6的Shadowsocks(以下简称SS),之前几年都没成功过…真的可以说是终于了了几年的遗憾。这次想到使用SS的IPV6代理是因为网络流量不够用,并且还不能够充值。但是有一点就是IPV6的流量不收取费用,于是希望通过SS的IPV6代理转换流量,让流量全走IPV6。6box和6kuaibo等一些软件,都可以实现6to4,并且6box还可以4to6但是速度都只有10M,并且这些软件中有些是收费的,因此只有SS是最经济实用的一个方案。在多次尝试中只有CentOS 6 x64和Ubuntu 14.04 i386 32bit版本系统可以完美支持SS的ipv6,但是都不支持锐速,这样速度得不到保障,需要更改内核,安装锐速,提升速度。 安装系统1.安装CentOS 6 64bit不用配置IPV6就可以使用,vultr已经配置好了,如果无法使用再按照官方教程配置。不过在之前的一些试验中,系统不支持的话改了配置也没有用。锐速和SS会有冲突,发现安装完锐速之后无法安装Python版的SS,只能安装libeve版本的,推荐安装Python版的SS,感觉Python版的对IPV6相性好。2.更新系统yum update 安装Python版的SS1.使用一键安装脚本安装Python版的SS 123wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.shchmod +x shadowsocks.sh./shadowsocks.sh 2>&1 | tee shadowsocks.log 中间需要输入SS服务的密码和端口号 2.停止Shadowsocks服务/etc/init.d/shadowsocks stop 3.安装vimyum install vim -y4.修改配置文件vim /etc/shadowsocks.json 配置:单账号配置 12345678910{ "server":"0.0.0.0", "server_port":8989, "local_address":"127.0.0.1", "local_port":1080, "password":"yourpassword", "timeout":300, "method":"aes-256-cfb", "fast_open": false} 多用户多端口配置文件 Sample 123456789101112131415{ "server":"0.0.0.0", "local_address":"127.0.0.1", "local_port":1080, "port_password":{ "8989":"password0", "9001":"password1", "9002":"password2", "9003":"password3", "9004":"password4" }, "timeout":300, "method":"aes-256-cfb", "fast_open": false} 如果这里多账户配置失败有可能是防火墙端口没开打开配置文件vi /etc/sysconfig/iptables添加开放的端口-A INPUT -p udp -m state --state NEW -m udp --dport 8989 -j ACCEPT其中修改udp tcp还有端口号最后还需要重启防火墙/etc/init.d/iptables restart 说明配置文件路径:/etc/shadowsocks.json启动:/etc/init.d/shadowsocks start停止:/etc/init.d/shadowsocks stop重启:/etc/init.d/shadowsocks restart状态:/etc/init.d/shadowsocks status查看开放端口/etc/init.d/iptables status关闭防火墙/etc/init.d/iptables stop 注意:将 0.0.0.0改为:: 就可以让代理同时可以访问IPV4和IPV6 最后底行模式:wq保存 5.开启Shadowsocks服务/etc/init.d/shadowsocks start 修改内核1.将CentOS6内核更换为2.6.32-573.1.1.el6.x86_64即可运行锐速命令:rpm -ivh http://dl.iforday.com/kernel/kernel-2.6.32-573.1.1.el6.x86_64.rpm --force 2.查看内核是否安装成功rpm -qa | grep kernel如果显示里面有对应的内核就对了。 参考了这篇文章Centos内核降级(升级)的方法我发现可能跟操作系统无关,自己当时就奔着换3.10内核去了,centos6当然换不上。Centos6下可用锐速内核rpm -ivh http://dl.iforday.com/kernel/kernel-2.6.32-573.1.1.el6.x86_64.rpm --forceCentos7下可用锐速内核rpm -ivh http://dl.iforday.com/kernel/kernel-3.10.0-229.1.2.el7.x86_64.rpm --force 3.重启,查看内核是否更换成功。rebootuname -r 安装锐速破解版1.现在可以安装锐速破解版了不过带宽上限20M…wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/serverspeeder/master/serverspeeder-all.sh && bash serverspeeder-all.sh 锐速破解版卸载方法:chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f 后续优化配置如果你安装没有效果,编辑一下命令vim /serverspeeder/etc/config 然后rsc和maxmode设置参数修改为1.然后在进行重启/serverspeeder/bin/serverSpeeder.sh restart 常用命令启动锐速:/serverspeeder/bin/serverSpeeder.sh start停止锐速:/serverspeeder/bin/serverSpeeder.sh stop查看锐速是否正常运行,检查是否有appex0模块:service serverSpeeder status 如果你对速度还不爽,还可以做下优化,比如改进下TCP算法:hybla。 或者安装锐速.TCP算法代码:加载tcp_hybla模块(OpenVZ在这一步就会报错):/sbin/modprobe tcp_hybla 然后查看是否已经正常加载:lsmod |grep hybla 如果你的内核版本较新,比如CentOS 6.x的2.6.32,则可以用下列命令查看当前可用的拥堵算法,里面应该有hybla了:sysctl net.ipv4.tcp_available_congestion_controlsysctl net.ipv4.tcp_congestion_control=hybla 编辑vim /etc/sysctl.conf 在文档末行增加net.ipv4.tcp_congestion_control= hybla 保存加载:sysctl -p 全局SS要想实现全局流量走SS服务器,需要使用Proxifier,配置文件中设置代理服务器和代理规则,如果懒的话改好代理地址和端口就好了其他默认 UT中屏蔽IPV4流量设置设置 高级设置ipfilter.enable 改成true SSR最后想起一个增加了混淆协议等功能的非常好用的客户端ShadowsocksR,但是没有配置成功。 流量前后对比","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>这次来到UCAS才有机会用到IPV6的网络,成功配置了IPV6的Shadowsocks(以下简称<code>SS</code>),之前几年都没成功过…真的可以说是终于了了几年的遗憾。<br>这次想到使用SS的IPV6代理是因为网络流量不够用,并且还不能够充值。但是有一点就是IPV6的流量不收取费用,于是希望通过SS的IPV6代理转换流量,让流量全走IPV6。6box和6kuaibo等一些软件,都可以实现6to4,并且6box还可以4to6但是速度都只有10M,并且这些软件中有些是收费的,因此只有SS是最经济实用的一个方案。<br>在多次尝试中只有<code>CentOS 6 x64</code>和<code>Ubuntu 14.04 i386 32bit</code>版本系统可以完美支持SS的ipv6,但是都不支持锐速,这样速度得不到保障,需要更改内核,安装锐速,提升速度。</p>\n<span id=\"more\"></span>\n<h3 id=\"安装系统\"><a href=\"#安装系统\" class=\"headerlink\" title=\"安装系统\"></a>安装系统</h3><p>1.安装CentOS 6 64bit<br>不用配置IPV6就可以使用,vultr已经配置好了,如果无法使用再按照官方教程配置。不过在之前的一些试验中,系统不支持的话改了配置也没有用。锐速和SS会有冲突,发现安装完锐速之后无法安装Python版的SS,只能安装libeve版本的,推荐安装Python版的SS,感觉Python版的对IPV6相性好。<br>2.更新系统<br><code>yum update</code></p>\n<h3 id=\"安装Python版的SS\"><a href=\"#安装Python版的SS\" class=\"headerlink\" title=\"安装Python版的SS\"></a>安装Python版的SS</h3><p>1.使用一键安装脚本安装Python版的SS</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh</span><br><span class=\"line\">chmod +x shadowsocks.sh</span><br><span class=\"line\">./shadowsocks.sh 2>&1 | tee shadowsocks.log</span><br></pre></td></tr></table></figure>\n<p>中间需要输入SS服务的密码和端口号</p>\n<p>2.停止Shadowsocks服务<br><code>/etc/init.d/shadowsocks stop</code></p>\n<p>3.安装vim<br><code>yum install vim -y</code><br>4.修改配置文件<br><code>vim /etc/shadowsocks.json</code></p>\n<p>配置:<br>单账号配置</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">{</span><br><span class=\"line\"> "server":"0.0.0.0",</span><br><span class=\"line\"> "server_port":8989,</span><br><span class=\"line\"> "local_address":"127.0.0.1",</span><br><span class=\"line\"> "local_port":1080,</span><br><span class=\"line\"> "password":"yourpassword",</span><br><span class=\"line\"> "timeout":300,</span><br><span class=\"line\"> "method":"aes-256-cfb",</span><br><span class=\"line\"> "fast_open": false</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n<p>多用户多端口配置文件 Sample</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">{</span><br><span class=\"line\"> "server":"0.0.0.0",</span><br><span class=\"line\"> "local_address":"127.0.0.1",</span><br><span class=\"line\"> "local_port":1080,</span><br><span class=\"line\"> "port_password":{</span><br><span class=\"line\"> "8989":"password0",</span><br><span class=\"line\"> "9001":"password1",</span><br><span class=\"line\"> "9002":"password2",</span><br><span class=\"line\"> "9003":"password3",</span><br><span class=\"line\"> "9004":"password4"</span><br><span class=\"line\"> },</span><br><span class=\"line\"> "timeout":300,</span><br><span class=\"line\"> "method":"aes-256-cfb",</span><br><span class=\"line\"> "fast_open": false</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n<p>如果这里多账户配置失败有可能是防火墙端口没开<br>打开配置文件<br><code>vi /etc/sysconfig/iptables</code><br>添加开放的端口<br><code>-A INPUT -p udp -m state --state NEW -m udp --dport 8989 -j ACCEPT</code><br>其中修改<code>udp</code> <code>tcp</code>还有端口号<br>最后还需要重启防火墙<br><code>/etc/init.d/iptables restart</code></p>\n<blockquote>\n<p>说明<br>配置文件路径:<code>/etc/shadowsocks.json</code><br>启动:<code>/etc/init.d/shadowsocks start</code><br>停止:<code>/etc/init.d/shadowsocks stop</code><br>重启:<code>/etc/init.d/shadowsocks restart</code><br>状态:<code>/etc/init.d/shadowsocks status</code><br>查看开放端口<br><code>/etc/init.d/iptables status</code><br>关闭防火墙<br><code>/etc/init.d/iptables stop</code></p>\n</blockquote>\n<blockquote>\n<p>注意:<br>将 <code>0.0.0.0</code>改为<code>::</code> 就可以让代理同时可以访问IPV4和IPV6</p>\n</blockquote>\n<p>最后底行模式<code>:wq</code>保存</p>\n<p>5.开启Shadowsocks服务<br><code>/etc/init.d/shadowsocks start</code></p>\n<h2 id=\"修改内核\"><a href=\"#修改内核\" class=\"headerlink\" title=\"修改内核\"></a>修改内核</h2><p>1.将CentOS6内核更换为<code>2.6.32-573.1.1.el6.x86_64</code>即可运行锐速<br>命令:<br><code>rpm -ivh http://dl.iforday.com/kernel/kernel-2.6.32-573.1.1.el6.x86_64.rpm --force</code></p>\n<p>2.查看内核是否安装成功<br><code>rpm -qa | grep kernel</code><br>如果显示里面有对应的内核就对了。<br><img src=\"/images/kernel3.10.png\" alt=\"kernel3.10\"></p>\n<p>参考了这篇文章<a href=\"https://iforday.com/86.html\">Centos内核降级(升级)的方法</a><br>我发现可能跟操作系统无关,自己当时就奔着换3.10内核去了,centos6当然换不上。<br>Centos6下可用锐速内核<br><code>rpm -ivh http://dl.iforday.com/kernel/kernel-2.6.32-573.1.1.el6.x86_64.rpm --force</code><br>Centos7下可用锐速内核<br><code>rpm -ivh http://dl.iforday.com/kernel/kernel-3.10.0-229.1.2.el7.x86_64.rpm --force</code></p>\n<p>3.重启,查看内核是否更换成功。<br><code>reboot</code><br><code>uname -r</code></p>\n<h3 id=\"安装锐速破解版\"><a href=\"#安装锐速破解版\" class=\"headerlink\" title=\"安装锐速破解版\"></a>安装锐速破解版</h3><p>1.现在可以安装锐速破解版了不过带宽上限20M…<br><code>wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/serverspeeder/master/serverspeeder-all.sh && bash serverspeeder-all.sh</code></p>\n<p>锐速破解版卸载方法:<br><code>chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f</code></p>\n<h3 id=\"后续优化配置\"><a href=\"#后续优化配置\" class=\"headerlink\" title=\"后续优化配置\"></a>后续优化配置</h3><p>如果你安装没有效果,编辑一下命令<br><code>vim /serverspeeder/etc/config</code></p>\n<p>然后rsc和maxmode设置参数修改为1.然后在进行重启<br><code>/serverspeeder/bin/serverSpeeder.sh restart</code></p>\n<blockquote>\n<p>常用命令<br>启动锐速:<br><code>/serverspeeder/bin/serverSpeeder.sh start</code><br>停止锐速:<br><code>/serverspeeder/bin/serverSpeeder.sh stop</code><br>查看锐速是否正常运行,检查是否有appex0模块:<br><code>service serverSpeeder status</code></p>\n</blockquote>\n<p>如果你对速度还不爽,还可以做下优化,比如改进下TCP算法:hybla。 或者安装锐速.<br>TCP算法代码:<br>加载tcp_hybla模块(OpenVZ在这一步就会报错):<br><code>/sbin/modprobe tcp_hybla</code></p>\n<p>然后查看是否已经正常加载:<br><code>lsmod |grep hybla</code></p>\n<p>如果你的内核版本较新,比如CentOS 6.x的2.6.32,则可以用下列命令查看当前可用的拥堵算法,里面应该有hybla了:<br><code>sysctl net.ipv4.tcp_available_congestion_control</code><br><code>sysctl net.ipv4.tcp_congestion_control=hybla</code></p>\n<p>编辑<br><code>vim /etc/sysctl.conf</code></p>\n<p>在文档末行增加<br><code>net.ipv4.tcp_congestion_control= hybla</code></p>\n<p>保存加载:<br><code>sysctl -p</code></p>\n<h3 id=\"全局SS\"><a href=\"#全局SS\" class=\"headerlink\" title=\"全局SS\"></a>全局SS</h3><p>要想实现全局流量走SS服务器,需要使用Proxifier,配置文件中设置代理服务器和代理规则,如果懒的话改好代理地址和端口就好了其他默认</p>\n<h3 id=\"UT中屏蔽IPV4流量设置\"><a href=\"#UT中屏蔽IPV4流量设置\" class=\"headerlink\" title=\"UT中屏蔽IPV4流量设置\"></a>UT中屏蔽IPV4流量设置</h3><p>设置 高级设置<code>ipfilter.enable</code> 改成<code>true</code><br><img src=\"/images/ipfilter.png\" alt=\"ipfilter\"></p>\n<h3 id=\"SSR\"><a href=\"#SSR\" class=\"headerlink\" title=\"SSR\"></a>SSR</h3><p>最后想起一个增加了混淆协议等功能的非常好用的客户端ShadowsocksR,但是没有配置成功。</p>\n<h3 id=\"流量前后对比\"><a href=\"#流量前后对比\" class=\"headerlink\" title=\"流量前后对比\"></a>流量前后对比</h3><p><img src=\"/images/ssliuliangpast.png\" alt=\"past\"><br><img src=\"/images/ssliuliangafter.png\" alt=\"after\"></p>\n","slug":"笔记/2016-06-22.Shadowsocks Ipv6代理","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"Shadowsocks","slug":"Shadowsocks","permalink":"https://www.zhiiker.com/tags/Shadowsocks/"}]},{"title":"第一部人工智能写的电影","date":"2016-06-13T13:02:26.000Z","path":"2016/06/13/拾摘/2016-06-13.第一部人工智能写的电影/","text":"第一部人工智能写的电影,来自伦敦科幻电影节(Sci-Fi London) 48 小时挑战单元的参赛电影,名为 Sunspring 。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>第一部人工智能写的电影,来自伦敦科幻电影节(Sci-Fi London) 48 小时挑战单元的参赛电影,名为 Sunspring 。</p>\n","slug":"拾摘/2016-06-13.第一部人工智能写的电影","comments":true,"categories":[{"name":"拾摘","slug":"拾摘","permalink":"https://www.zhiiker.com/categories/%E6%8B%BE%E6%91%98/"}],"tags":[]},{"title":"EclipseChe","date":"2016-05-11T01:59:00.000Z","path":"2016/05/11/笔记/2016-05-11.EclipseChe/","text":"之前在自己的笔记本上没有安装成功,就想着是不是只有服务器版的操作系统可以,但是最终发现腾讯云的CPU都跑不动Docker…","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>之前在自己的笔记本上没有安装成功,就想着是不是只有服务器版的操作系统可以,但是最终发现腾讯云的CPU都跑不动Docker…</p>\n","slug":"笔记/2016-05-11.EclipseChe","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[]},{"title":"云数据库","date":"2016-05-11T01:53:00.000Z","path":"2016/05/11/笔记/2016-05-11.云数据库/","text":"看到QCloud给我送了一波代金券,不利用一下真的就浪费了。除了个Windows服务器之外,还可以用的是云数据库、Redis,还有云服务市场里的。其他都太贵,就开了个云数据库,正好学习数据库,也好。介绍的很高大上啊,但是开完一看就是一个PhpMyadmin…","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>看到QCloud给我送了一波代金券,不利用一下真的就浪费了。<br>除了个Windows服务器之外,还可以用的是云数据库、Redis,还有云服务市场里的。<br>其他都太贵,就开了个云数据库,正好学习数据库,也好。<br>介绍的很高大上啊,但是开完一看就是一个PhpMyadmin…</p>\n","slug":"笔记/2016-05-11.云数据库","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[]},{"title":"写作需求的解决方案","date":"2016-05-01T09:50:00.000Z","path":"/the-solution-for-writing","text":"遇到的问题MarkdownPad2据说是Windows平台下最好的Markdown编辑器,但是我在使用的时候,体验不是很好,有些时候写写就会崩溃退出,一些需要的功能只有在Pro版有,并且收费,于是就产生了寻找一套完整解决方案的想法。 自己对Markdown的需求 写笔记,私人的部分不宜公开的能够在私人云存储中或者印象笔记中有备份。 一些质量比较高的文章会发布,感觉平时使用Markdown整理出来的笔记比较清晰美观,因此希望有个文件可以异地同步,网站分类目录和本地的文件夹结构一致 几天的探索过程使用wordpress插件扩充我几乎尝试了一般wordpress上的插件,上面的插件大多是不可用的,总有这样那样的问题。1.用markdown语法写wp文章据这篇文章说wp-parsedown对GitHub Flavored Markdown(GFM)很友好,这个插件能把markdown的内容完整保存到markdown中,效果还是不错的,就是会把其他不是Markdown的文章一起转化,并且公式的也有问题。2.Mytory Markdown这个插件能同步远程Markdown文件(像是dropbox、github其他的云端)。但是实测并不能使用。3.zhiqiang的wordpress插件在博客上写数学公式的插件LaTex for WordPress渲染数学公式。这个插件和我的博客有冲突,我需要重构主题代码。最后只能使用MathJax-LaTeX勉强解决问题,但是效果真的差了很多。4.wordpress-markdown-plugin这个插件有毒,直接让博客直接无法访问 马克飞象这是一款收费软件,之前用了一段时间体验还是非常好的,渲染后非常美观,保存后也不会更改样式。想着购买。后来发现它作为一款ChromeApp有着自身的局限性,兼容性不好,笔记加载缓慢,不能关联笔记,而且只能同步到印象笔记。 小书匠编辑器在搜索的过程中看到了月光博客中相关的文章好用的Markdown编辑器一览没有在文章中发现满意的,反而在评论区域中发现一个感觉不错的软件小书匠。发现这是个全平台覆盖的软件,也能在线编辑。感觉Markdown能有的功能它都有了。支持Github、印象笔记、有道云笔记、为知笔记备份但是它界面不协调,缩放的时候会出现错乱,渲染出来的也太难看,博客发布不支持wordpress,邮件发布也有问题。 为知笔记发布到wordpress为知笔记确实是做的不错,自身就带有各种插件,有支持markdown的插件,还有org-mode和mind map。但是发布到wordpress高亮会消失,使用wordpress的markdown和高亮插件后还会出现一些小的问题WordPress+Markdown+为知笔记,实现高质量笔记和博客这篇文章说解决了这个问题,但是我公式出现了重复,花了很长时间也没能解决,给作者发了邮件,也没回。 打通印象笔记和Wordpress有以下几种方案:1.Everblog使用 Evernote 来作为数据库,并且写一个前端,不能不说,这是一个很有创意的方案。2.EvernoteSync这个支持国际版还有印象笔记,但是只是传送了文字内容,排版还有样式都会丢失。印象笔记/Evernote同步文章到WordPress博客插件EvernoteSync3.自己写的工具:把Evernote(印象笔记)的笔记导入到博客(Blog)中这个貌似也不能支持wordpress4.通过 Email 发送来发布使用印象笔记发送邮件这个功能来发布 WordPress 博客,不知道是因为服务器在国内还是接口有问题,一直没能成功。5.使用IFTTT 来中转详细参看这篇文章WordPress 和 Evernote 的互通还有wordpress与微博及印象笔记内容如何同步IFTTT功能很强大譬如 https://ifttt.com/recipes/261195-save-tweets-to-farbox 就能把tweets自动存储到farbox中6.使用Zapier这个别人推荐的比较多只需要在 Zapier 里设置一个从 Evernote 发布文章到 WordPress 的任务即可。7.相关的问题讨论http://www.quora.com/Could-you-use-an-Evernote-notebook-as-a-blog8.eatags.com注册账号之后,激活 wordpress 功能,就可以直接将 Evernote 中的笔记发布到基于 WP 的博客了,只需要将笔记加上 eat.wordpress.post 的标签。通过这种办法发布的博客中的图片,直接保存在相应的 WP 博客服务器上,避免了仅图片被屏蔽的情况,图片的大小排版更加正常,而且可以在 WP 后台进行后期编辑。但是,博客的发布日期、分类、标签没办法手动设置。9.听说MarsEdit也不错,没试。 MicrosoftWord也有博客发布的功能我试了下,格式也没有混乱。 Vim+Markdown发布博客使用Vim的VimRepress插件稍微配置一下实现的 使用Vim+Markdown发布wordpress博客 用gvim+vim-markdown写wordpress博客 暂时的解决方案我把博客又重新恢复到了原来的样子了,这六天时间实践了一种设计模式,叫做“敏捷还原” 把萱苏小筑那个Wordpress站点做成杂志站点,分享自己搜集到的一些有趣的东西。自己的个人感悟还有笔记,使用Farbox或者小书匠进行撰写。Farbox是现在体验最好的Markdown编辑器,它的模式我非常喜欢,直接在本地相应的文件夹新建Markdown文件,之后会自动渲染成网页实时发布。本地的预览页非常的及时,能让我专注写作。使用小书匠进行文件的同步。 使用IFTTT将微博等社交网站的内容归档到博客的一个栏目。 设想中的解决方案 自己改一个自动发布的工具,利用xmlrpc参考用XML-RPC协议读写WordPress上的文章还有浅析利用MetaWeblog接口同步多个博客 重构使用MarkDown语法发布博客内容中Markpress插件,这款插件已经很久不更新了,而且不支持SublimeText3,发布的话自己选择这个工具代价应该是最小的。 自己写一个系统 需要一个像是hexo的生成器,可以把markdown或者其他格式文本,编译成html,这个程序可以运行在客户端电脑上,也可以在服务器运行。 还需要一个能够同步html文件的程序,为了保证异步统一,需要两个服务器,源文件服务器和网站服务器(这两个可以使一个服务器),可以考虑加个数据库记录文件的具体位置。 网站部署使用Git或者Dropbox这样的服务,在服务器程序写个脚本定时通过dropbox的api接口同步源码到服务器就行了。然后编译markdown,部署到网站目录。 使用Express框架进行网站的部署,可以更加灵活,jade模板引擎就是个很优雅的方案。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><h2 id=\"遇到的问题\"><a href=\"#遇到的问题\" class=\"headerlink\" title=\"遇到的问题\"></a>遇到的问题</h2><p>MarkdownPad2据说是Windows平台下最好的Markdown编辑器,但是我在使用的时候,体验不是很好,有些时候写写就会崩溃退出,一些需要的功能只有在Pro版有,并且收费,于是就产生了寻找一套完整解决方案的想法。</p>\n<span id=\"more\"></span>\n\n<h2 id=\"自己对Markdown的需求\"><a href=\"#自己对Markdown的需求\" class=\"headerlink\" title=\"自己对Markdown的需求\"></a>自己对Markdown的需求</h2><ol>\n<li>写笔记,私人的部分不宜公开的能够在私人云存储中或者印象笔记中有备份。</li>\n<li>一些质量比较高的文章会发布,感觉平时使用Markdown整理出来的笔记比较清晰美观,因此希望有个<br>文件可以异地同步,网站分类目录和本地的文件夹结构一致</li>\n</ol>\n<h2 id=\"几天的探索过程\"><a href=\"#几天的探索过程\" class=\"headerlink\" title=\"几天的探索过程\"></a>几天的探索过程</h2><h3 id=\"使用wordpress插件扩充\"><a href=\"#使用wordpress插件扩充\" class=\"headerlink\" title=\"使用wordpress插件扩充\"></a>使用wordpress插件扩充</h3><p>我几乎尝试了一般wordpress上的插件,上面的插件大多是不可用的,总有这样那样的问题。<br>1.<a href=\"http://www.litefeel.com/writing-wordpress-posts-in-markdown/\">用markdown语法写wp文章</a><br>据这篇文章说wp-parsedown对GitHub Flavored Markdown(GFM)很友好,这个插件能把markdown的内容完整保存到markdown中,效果还是不错的,就是会把其他不是Markdown的文章一起转化,并且公式的也有问题。<br>2.<a href=\"https://wordpress.org/plugins/mytory-markdown/\">Mytory Markdown</a>这个插件能同步远程Markdown文件(像是dropbox、github其他的云端)。但是实测并不能使用。<br>3.zhiqiang的wordpress插件<a href=\"http://zhiqiang.org/blog/it/latex-for-wordpress.html\">在博客上写数学公式的插件LaTex for WordPress</a><br>渲染数学公式。这个插件和我的博客有冲突,我需要重构主题代码。最后只能使用MathJax-LaTeX勉强解决问题,但是效果真的差了很多。<br>4.<a href=\"http://www.powerxing.com/wordpress-markdown-plugin/\">wordpress-markdown-plugin</a>这个插件有毒,直接让博客直接无法访问</p>\n<h3 id=\"马克飞象\"><a href=\"#马克飞象\" class=\"headerlink\" title=\"马克飞象\"></a>马克飞象</h3><p>这是一款收费软件,之前用了一段时间体验还是非常好的,渲染后非常美观,保存后也不会更改样式。想着购买。<br>后来发现它作为一款ChromeApp有着自身的局限性,兼容性不好,笔记加载缓慢,不能关联笔记,而且只能同步到印象笔记。</p>\n<h3 id=\"小书匠编辑器\"><a href=\"#小书匠编辑器\" class=\"headerlink\" title=\"小书匠编辑器\"></a>小书匠编辑器</h3><p>在搜索的过程中看到了月光博客中相关的文章<br><a href=\"http://www.williamlong.info/archives/4319.html\">好用的Markdown编辑器一览</a><br>没有在文章中发现满意的,反而在评论区域中发现一个感觉不错的软件<a href=\"http://markdown.xiaoshujiang.com/\">小书匠</a>。<br>发现这是个全平台覆盖的软件,也能在线编辑。感觉Markdown能有的功能它都有了。支持Github、印象笔记、有道云笔记、为知笔记备份<br>但是它界面不协调,缩放的时候会出现错乱,渲染出来的也太难看,博客发布不支持wordpress,邮件发布也有问题。</p>\n<h3 id=\"为知笔记发布到wordpress\"><a href=\"#为知笔记发布到wordpress\" class=\"headerlink\" title=\"为知笔记发布到wordpress\"></a>为知笔记发布到wordpress</h3><p>为知笔记确实是做的不错,自身就带有各种插件,有支持markdown的插件,还有org-mode和mind map。<br>但是发布到wordpress高亮会消失,使用wordpress的markdown和高亮插件后还会出现一些小的问题<br><a href=\"http://www.paincker.com/wp-markdown-wiz-blog\">WordPress+Markdown+为知笔记,实现高质量笔记和博客</a>这篇文章说解决了这个问题,但是我公式出现了重复,花了很长时间也没能解决,给作者发了邮件,也没回。</p>\n<h3 id=\"打通印象笔记和Wordpress\"><a href=\"#打通印象笔记和Wordpress\" class=\"headerlink\" title=\"打通印象笔记和Wordpress\"></a>打通印象笔记和Wordpress</h3><p>有以下几种方案:<br>1.Everblog<br>使用 Evernote 来作为数据库,并且写一个前端,不能不说,这是一个很有创意的方案。<br>2.EvernoteSync<br>这个支持国际版还有印象笔记,但是只是传送了文字内容,排版还有样式都会丢失。<br><a href=\"http://seofangfa.com/wordpress-study/evernote-wordpress.html\">印象笔记/Evernote同步文章到WordPress博客插件EvernoteSync</a><br>3.<a href=\"http://blog.csdn.net/muzizongheng/article/details/14164445\">自己写的工具:把Evernote(印象笔记)的笔记导入到博客(Blog)中</a><br>这个貌似也不能支持wordpress<br>4.通过 Email 发送来发布<br>使用印象笔记发送邮件这个功能来发布 WordPress 博客,不知道是因为服务器在国内还是接口有问题,一直没能成功。<br>5.使用<a href=\"https://ifttt.com/\">IFTTT</a> 来中转<br>详细参看这篇文章<a href=\"http://www.clarkchen.com/wordpress-%E5%92%8C-evernote-%E7%9A%84%E4%BA%92%E9%80%9A/\">WordPress 和 Evernote 的互通</a><br>还有<a href=\"http://jingyan.baidu.com/article/0f5fb099e3ce206d8334ea01.html\">wordpress与微博及印象笔记内容如何同步</a><br>IFTTT功能很强大<br>譬如 <a href=\"https://ifttt.com/recipes/261195-save-tweets-to-farbox\">https://ifttt.com/recipes/261195-save-tweets-to-farbox</a> 就能把tweets自动存储到farbox中<br>6.使用<a href=\"https://zapier.com/\">Zapier</a><br>这个别人推荐的比较多<br>只需要在 Zapier 里设置一个从 Evernote 发布文章到 WordPress 的任务即可。<br>7.相关的问题讨论<br><a href=\"http://www.quora.com/Could-you-use-an-Evernote-notebook-as-a-blog\">http://www.quora.com/Could-you-use-an-Evernote-notebook-as-a-blog</a><br>8.eatags.com<br>注册账号之后,激活 wordpress 功能,就可以直接将 Evernote 中的笔记发布到基于 WP 的博客了,只需要将笔记加上 eat.wordpress.post 的标签。通过这种办法发布的博客中的图片,直接保存在相应的 WP 博客服务器上,避免了仅图片被屏蔽的情况,图片的大小排版更加正常,而且可以在 WP 后台进行后期编辑。但是,博客的发布日期、分类、标签没办法手动设置。<br>9.听说MarsEdit也不错,没试。</p>\n<h3 id=\"MicrosoftWord也有博客发布的功能\"><a href=\"#MicrosoftWord也有博客发布的功能\" class=\"headerlink\" title=\"MicrosoftWord也有博客发布的功能\"></a>MicrosoftWord也有博客发布的功能</h3><p>我试了下,格式也没有混乱。</p>\n<h3 id=\"Vim-Markdown发布博客\"><a href=\"#Vim-Markdown发布博客\" class=\"headerlink\" title=\"Vim+Markdown发布博客\"></a>Vim+Markdown发布博客</h3><p>使用Vim的<code>VimRepress</code>插件稍微配置一下实现的</p>\n<ol>\n<li><a href=\"http://www.domon.cn/vimmarkdown%E5%86%99wordpress%E5%8D%9A%E5%AE%A2.html\">使用Vim+Markdown发布wordpress博客</a></li>\n<li><a href=\"http://www.furion.info/580.html\">用gvim+vim-markdown写wordpress博客</a></li>\n</ol>\n<h2 id=\"暂时的解决方案\"><a href=\"#暂时的解决方案\" class=\"headerlink\" title=\"暂时的解决方案\"></a>暂时的解决方案</h2><p>我把博客又重新恢复到了原来的样子了,这六天时间实践了一种设计模式,叫做“敏捷还原”</p>\n<ol>\n<li>把萱苏小筑那个Wordpress站点做成杂志站点,分享自己搜集到的一些有趣的东西。自己的个人感悟还有笔记,使用Farbox或者小书匠进行撰写。Farbox是现在体验最好的Markdown编辑器,它的模式我非常喜欢,直接在本地相应的文件夹新建Markdown文件,之后会自动渲染成网页实时发布。本地的预览页非常的及时,能让我专注写作。使用小书匠进行文件的同步。</li>\n<li>使用IFTTT将微博等社交网站的内容归档到博客的一个栏目。</li>\n</ol>\n<h2 id=\"设想中的解决方案\"><a href=\"#设想中的解决方案\" class=\"headerlink\" title=\"设想中的解决方案\"></a>设想中的解决方案</h2><ol>\n<li>自己改一个自动发布的工具,利用xmlrpc参考<a href=\"http://www.neatstudio.com/show-1796-1.shtml\">用XML-RPC协议读写WordPress上的文章</a>还有<br><a href=\"http://developer.51cto.com/art/200907/135453.htm\">浅析利用MetaWeblog接口同步多个博客</a></li>\n<li>重构<a href=\"http://www.yangzh.cn/archives/385\">使用MarkDown语法发布博客内容</a>中Markpress插件,这款插件已经很久不更新了,而且不支持SublimeText3,发布的话自己选择这个工具代价应该是最小的。</li>\n</ol>\n<h2 id=\"自己写一个系统\"><a href=\"#自己写一个系统\" class=\"headerlink\" title=\"自己写一个系统\"></a>自己写一个系统</h2><ol>\n<li>需要一个像是hexo的生成器,可以把markdown或者其他格式文本,编译成html,这个程序可以运行在客户端电脑上,也可以在服务器运行。</li>\n<li>还需要一个能够同步html文件的程序,为了保证异步统一,需要两个服务器,源文件服务器和网站服务器(这两个可以使一个服务器),可以考虑加个数据库记录文件的具体位置。</li>\n<li>网站部署使用Git或者Dropbox这样的服务,在服务器程序写个脚本定时通过dropbox的api接口同步源码到服务器就行了。然后编译markdown,部署到网站目录。</li>\n<li>使用Express框架进行网站的部署,可以更加灵活,<a href=\"http://jade-lang.com/\">jade模板引擎</a>就是个很优雅的方案。</li>\n</ol>\n","slug":"笔记/2016-05-01.写作需求的解决方案","comments":true,"categories":[{"name":"笔记","slug":"笔记","permalink":"https://www.zhiiker.com/categories/%E7%AC%94%E8%AE%B0/"}],"tags":[{"name":"写作","slug":"写作","permalink":"https://www.zhiiker.com/tags/%E5%86%99%E4%BD%9C/"},{"name":"markdown","slug":"markdown","permalink":"https://www.zhiiker.com/tags/markdown/"}]},{"title":"唐凤(唐宗汉)文言文Perl编程","date":"2015-10-11T02:22:00.000Z","path":"2015/10/11/拾摘/2015-10-11.文言文Perl编程写诗by唐凤(唐宗汉)/","text":"PerlYuYan是一个可以令人使用文言文开发Perl语言程序的Perl组件,由唐凤于2002年1月发表,只花了两个小时就编写完成。它是中文编程语言的尝试。作者利用中文的性质,将许多指令改成以汉字来表示,形成了文言文的效果。 PerlYuYan组件地址:Lingua::Sinica::PerlYuYan多年后的今天重新编辑此文,发现Github上也有了,地址:lingua-sinica-perlyuyan 以下是作者发表时提出的范例: 12345678910111213141516171819#!/usr/local/bin/perluse Lingua::Sinica::PerlYuYan;用警兮用严。印道一至一哉兮印编曰杂申杂申矣 又纤曰龙鼠矣 又曰一矣乱曰国无人莫我知兮 又何怀乎故都既莫足与为美政兮 吾将从彭咸之所居资曰印重一至一兮重起一至十合始印终 下面是解释 12345678910111213141516用警兮用严。 use warnings; use strict;印道 print "一至一 1..1哉兮 ";印编曰杂申杂申矣 print sprintf '%s %s'又纤曰龙鼠矣 , lc 'ok'又曰一矣 , '1'乱曰 __END__国无人莫我知兮 屈原《离骚》引用又何怀乎故都 既莫足与为美政兮吾将从彭咸之所居资曰 __DATA__印重一至一兮 print for 1..1重起一至十合始印终 for (1..10)[print] 另外一个五言诗范例如下: 123456789101112#!/usr/local/bin/perl# The Sieve of Eratosthenes - 埃拉托斯芬筛法use Lingua::Sinica::PerlYuYan;用筹兮用严 井涸兮无碍。印曰最高矣 又道数然哉。截起吾纯风 赋小入大合。习予吾阵地 并二至纯风。当起段赋取 加阵地合始。阵地赋筛始 系系此杂段。终阵地兮印 正道次标哉。输空接段点 列终注泰来。 注如果要编译运行还请转化为繁体,转为简体是为了方便大家欣赏 唐凤唐凤(英文名:Audrey Tang,1981年4月18日-),原名唐宗汉(autrijus),台湾的自由软件程序员,Pugs项目的发起人,领导Haskell和Perl社群协力开发Perl 6语言。 唐凤也致力于自由软件的国际化工作,包括设计Kwiki,RT及Slash等系统的国际化架构,并发起多项开放源码书籍的翻译计划。 在CPAN上,唐凤负责维护100余项的Perl相关专案,包括Perl Archive Toolkit (PAR) 这项跨平台封装及建置工具,以及CPAN的自动测试及数字签署系统等。 生平唐凤的父亲唐光华是《中国时报》前副总编辑,母亲李雅卿曾任《中国时报》采访部的副主任,是台湾的自主学习,在家自学推动者之一。 在14岁时就因适应不了学校生活而拒绝上学,即多所倡言自学及安那其思想(αναρχία——理想化的无政府主义)。 于2005年进行变性手术,故由原来的男性化名字”唐宗汉”,改名为女性化名字”唐凤”。","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>PerlYuYan是一个可以令人使用文言文开发Perl语言程序的Perl组件,由唐凤于2002年1月发表,只花了两个小时就编写完成。它是中文编程语言的尝试。作者利用中文的性质,将许多指令改成以汉字来表示,形成了文言文的效果。</p>\n<span id=\"more\"></span>\n\n<p>PerlYuYan组件地址:<br><a href=\"https://metacpan.org/release/AUTRIJUS/Lingua-Sinica-PerlYuYan-0.03\">Lingua::Sinica::PerlYuYan</a><br>多年后的今天重新编辑此文,发现Github上也有了,地址:<br><a href=\"https://github.com/audreyt/lingua-sinica-perlyuyan\">lingua-sinica-perlyuyan</a></p>\n<p>以下是作者发表时提出的范例:</p>\n<figure class=\"highlight perl\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#!/usr/local/bin/perl</span></span><br><span class=\"line\"><span class=\"keyword\">use</span> Lingua::Sinica::PerlYuYan;</span><br><span class=\"line\">用警兮用严。</span><br><span class=\"line\"></span><br><span class=\"line\">印道</span><br><span class=\"line\">一至一</span><br><span class=\"line\">哉兮</span><br><span class=\"line\"></span><br><span class=\"line\">印编曰杂申杂申矣</span><br><span class=\"line\"> 又纤曰龙鼠矣</span><br><span class=\"line\"> 又曰一矣</span><br><span class=\"line\"></span><br><span class=\"line\">乱曰</span><br><span class=\"line\">国无人莫我知兮 又何怀乎故都</span><br><span class=\"line\">既莫足与为美政兮 吾将从彭咸之所居</span><br><span class=\"line\"></span><br><span class=\"line\">资曰</span><br><span class=\"line\">印重一至一兮</span><br><span class=\"line\">重起一至十合始印终</span><br></pre></td></tr></table></figure>\n\n<p>下面是解释</p>\n<figure class=\"highlight plaintext\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">用警兮用严。 \t\tuse warnings; use strict;</span><br><span class=\"line\">印道 \t\t\tprint "</span><br><span class=\"line\">一至一\t\t\t1..1</span><br><span class=\"line\">哉兮 \t\t\t";</span><br><span class=\"line\">印编曰杂申杂申矣\t\tprint sprintf '%s %s'</span><br><span class=\"line\">又纤曰龙鼠矣 \t\t, lc 'ok'</span><br><span class=\"line\">又曰一矣 \t\t, '1'</span><br><span class=\"line\">乱曰 \t\t\t__END__</span><br><span class=\"line\">国无人莫我知兮\t\t屈原《离骚》引用</span><br><span class=\"line\">又何怀乎故都\t\t</span><br><span class=\"line\">既莫足与为美政兮</span><br><span class=\"line\">吾将从彭咸之所居</span><br><span class=\"line\"></span><br><span class=\"line\">资曰\t\t\t__DATA__</span><br><span class=\"line\">印重一至一兮\t\tprint for 1..1</span><br><span class=\"line\">重起一至十合始印终\tfor (1..10)[print]</span><br></pre></td></tr></table></figure>\n\n<p>另外一个五言诗范例如下:</p>\n<figure class=\"highlight perl\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#!/usr/local/bin/perl</span></span><br><span class=\"line\"><span class=\"comment\"># The Sieve of Eratosthenes - 埃拉托斯芬筛法</span></span><br><span class=\"line\"><span class=\"keyword\">use</span> Lingua::Sinica::PerlYuYan;</span><br><span class=\"line\"></span><br><span class=\"line\">用筹兮用严 井涸兮无碍。</span><br><span class=\"line\">印曰最高矣 又道数然哉。</span><br><span class=\"line\">截起吾纯风 赋小入大合。</span><br><span class=\"line\">习予吾阵地 并二至纯风。</span><br><span class=\"line\">当起段赋取 加阵地合始。</span><br><span class=\"line\">阵地赋筛始 系系此杂段。</span><br><span class=\"line\">终阵地兮印 正道次标哉。</span><br><span class=\"line\">输空接段点 列终注泰来。</span><br></pre></td></tr></table></figure>\n<blockquote>\n<p>注<br>如果要编译运行还请转化为繁体,转为简体是为了方便大家欣赏</p>\n</blockquote>\n<h2 id=\"唐凤\"><a href=\"#唐凤\" class=\"headerlink\" title=\"唐凤\"></a>唐凤</h2><p>唐凤(英文名:Audrey Tang,1981年4月18日-),原名唐宗汉(autrijus),台湾的自由软件程序员,Pugs项目的发起人,领导Haskell和Perl社群协力开发Perl 6语言。</p>\n<p>唐凤也致力于自由软件的国际化工作,包括设计Kwiki,RT及Slash等系统的国际化架构,并发起多项开放源码书籍的翻译计划。</p>\n<p>在CPAN上,唐凤负责维护100余项的Perl相关专案,包括Perl Archive Toolkit (PAR) 这项跨平台封装及建置工具,以及CPAN的自动测试及数字签署系统等。</p>\n<h3 id=\"生平\"><a href=\"#生平\" class=\"headerlink\" title=\"生平\"></a>生平</h3><p>唐凤的父亲唐光华是《中国时报》前副总编辑,母亲李雅卿曾任《中国时报》采访部的副主任,是台湾的自主学习,在家自学推动者之一。</p>\n<p>在14岁时就因适应不了学校生活而拒绝上学,即多所倡言自学及安那其思想(αναρχία——理想化的无政府主义)。</p>\n<p>于2005年进行变性手术,故由原来的男性化名字”唐宗汉”,改名为女性化名字”唐凤”。</p>\n","slug":"拾摘/2015-10-11.文言文Perl编程写诗by唐凤(唐宗汉)","comments":true,"categories":[{"name":"拾摘","slug":"拾摘","permalink":"https://www.zhiiker.com/categories/%E6%8B%BE%E6%91%98/"}],"tags":[]},{"title":"The Secret World of WDMA Sites","date":"2015-10-10T08:39:00.000Z","path":"2015/10/10/拾摘/2015-10-10.The Secret World of WDMA Sites/","text":"Disclaimer: This article was based on information which came from Internet blogs, message boards, and personal communications, so much of what is written is probably “Folklore,” and I cannot verify the accuracy. But it sure makes for a good story! ;) As per the Public Blog guidelines I am leaving out names and URLs which would identify these places. About two years ago, I was browsing a popular torrent forum, when I saw a request for a tracker, where the requester asked for “S**** , a.k.a. P****, a.k.a. I**** . No one had ever heard of this tracker before, and therefore there were lots of question asked about what this place is, and what it was about. The requester mysteriously wrote that the place was a “secret” place, and that he could not write the actual names, but a member of the place would be able to recognize it immediately. Because this was the first time this place was ever mentioned on a torrent forum, threads quickly came up at other places, including TPS asking what it was, but no one knew what it was. Now a member sent me a PM saying he did not know what it was, but another forum posted the URL and he gave me the URL. So I went to the URL, and it looked like a website with comic strips of a kid wearing a skull mask. (weird) There was a place to log in, so I suppose this was the “fake” page. But what was inside? At TPS we have a section called “Ask Us Anything,” where members can ask questions to staff and tracker reps in private, and I asked about the place, and no one knew. Another mysterious request popped up later. I had not heard of this place, and it was said to have “rare vinyl music rips.” I tried to do a quick Google search (as I did with the first place) and nothing popped up. Then recently at TPS, a member made a request for a General Tracker that I had also never heard of. What were these mysterious places that don’t show up on any lists of trackers or even on Google searches? Well recently I finally found out, and am sharing it with you (without revealing specific names). The story begins in 1999, when a forum was created called “Something Awful.” This forum became popular for making Internet Memes and sayings, like “All your ___ belong to us.” Shortly after Bram Cohen created the BitTorrent Protocol, but before big trackers like The Pirate Bay were created, the forum made a filesharing section called the “BitTorrent Barnyard.” This section became enormously popular and the owners became concerned about the legality of what they were doing, and shut the section down. Now is where the folklore part comes in. Allegedly, members of the forum, also known as “The Goons,” created a separate torrent site, and called it “WDMA,” for “Where Da Movies At?” They got the idea for the name because new members to Something Awful would log in and ask that question, thinking the BitTorrent Barnyard was still there. Then as quickly as it came up, WDMA also shut down. I have read stories about drama that caused its closing, and some stories saying WDMA was just a myth. After WDMA supposedly shut down, some of the members then created various filesharing sites that today are known as WDMA sites, or WDMA trackers. These were those mysterious places that sometimes come up in invite requests than no one knows anything about. It is not clear if these places are forums with DDL links, or if they have torrents, but they are more forum based and are designed differently than the private trackers I am used to using. (Which use versions of TBDev or Gazelle as platforms.) These places are so secret that nothing about what is inside is anywhere on the open internet. Anything I know about them have been told to me by PM, and much told to me is based on what was told by others. It is said that anyone who talks about them is immediately banned, and anyone requesting them anywhere will be found out and banned after acceptance, as will be the inviters. But the thing that I find fascinating is the level of secrecy that the places keep. Even the most “secret” of private trackers have some information somewhere out there, and these trackers do try to seek out new members or else they will stagnate and die. Honestly, some of these trackers are stagnating a bit already. So how do WDMA sites stay so secret, but still stay alive all these years? (They pre-date the beginning of the oldest private trackers.) Perhaps the places may just be myths after all. ;)","content":"<link rel=\"stylesheet\" class=\"aplayer-secondary-style-marker\" href=\"\\assets\\css\\APlayer.min.css\"><script src=\"\\assets\\js\\APlayer.min.js\" class=\"aplayer-secondary-script-marker\"></script><p>Disclaimer: This article was based on information which came from Internet blogs, message boards, and personal communications, so much of what is written is probably “Folklore,” and I cannot verify the accuracy. But it sure makes for a good story! ;) As per the Public Blog guidelines I am leaving out names and URLs which would identify these places.</p>\n<span id=\"more\"></span>\n\n<p>About two years ago, I was browsing a popular torrent forum, when I saw a request for a tracker, where the requester asked for <code>“S**** , a.k.a. P****, a.k.a. I**** </code>. No one had ever heard of this tracker before, and therefore there were lots of question asked about what this place is, and what it was about. The requester mysteriously wrote that the place was a “secret” place, and that he could not write the actual names, but a member of the place would be able to recognize it immediately.</p>\n<p>Because this was the first time this place was ever mentioned on a torrent forum, threads quickly came up at other places, including TPS asking what it was, but no one knew what it was. Now a member sent me a PM saying he did not know what it was, but another forum posted the URL and he gave me the URL. So I went to the URL, and it looked like a website with comic strips of a kid wearing a skull mask. (weird) There was a place to log in, so I suppose this was the “fake” page. But what was inside? At TPS we have a section called “Ask Us Anything,” where members can ask questions to staff and tracker reps in private, and I asked about the place, and no one knew.</p>\n<p>Another mysterious request popped up later. I had not heard of this place, and it was said to have “rare vinyl music rips.” I tried to do a quick Google search (as I did with the first place) and nothing popped up. Then recently at TPS, a member made a request for a General Tracker that I had also never heard of. What were these mysterious places that don’t show up on any lists of trackers or even on Google searches?</p>\n<p>Well recently I finally found out, and am sharing it with you (without revealing specific names). The story begins in 1999, when a forum was created called “Something Awful.” This forum became popular for making Internet Memes and sayings, like “All your ___ belong to us.” Shortly after Bram Cohen created the BitTorrent Protocol, but before big trackers like The Pirate Bay were created, the forum made a filesharing section called the “BitTorrent Barnyard.” This section became enormously popular and the owners became concerned about the legality of what they were doing, and shut the section down. Now is where the folklore part comes in. Allegedly, members of the forum, also known as “The Goons,” created a separate torrent site, and called it “WDMA,” for “Where Da Movies At?” They got the idea for the name because new members to Something Awful would log in and ask that question, thinking the BitTorrent Barnyard was still there. Then as quickly as it came up, WDMA also shut down. I have read stories about drama that caused its closing, and some stories saying WDMA was just a myth.</p>\n<p>After WDMA supposedly shut down, some of the members then created various filesharing sites that today are known as WDMA sites, or WDMA trackers. These were those mysterious places that sometimes come up in invite requests than no one knows anything about. It is not clear if these places are forums with DDL links, or if they have torrents, but they are more forum based and are designed differently than the private trackers I am used to using. (Which use versions of TBDev or Gazelle as platforms.) These places are so secret that nothing about what is inside is anywhere on the open internet. Anything I know about them have been told to me by PM, and much told to me is based on what was told by others. It is said that anyone who talks about them is immediately banned, and anyone requesting them anywhere will be found out and banned after acceptance, as will be the inviters. But the thing that I find fascinating is the level of secrecy that the places keep. Even the most “secret” of private trackers have some information somewhere out there, and these trackers do try to seek out new members or else they will stagnate and die. Honestly, some of these trackers are stagnating a bit already. So how do WDMA sites stay so secret, but still stay alive all these years? (They pre-date the beginning of the oldest private trackers.)</p>\n<p>Perhaps the places may just be myths after all. ;)</p>\n","slug":"拾摘/2015-10-10.The Secret World of WDMA Sites","comments":true,"categories":[{"name":"拾摘","slug":"拾摘","permalink":"https://www.zhiiker.com/categories/%E6%8B%BE%E6%91%98/"}],"tags":[]}]