<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://www.bigdick.live/feed_style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
    <tabi:metadata xmlns:tabi="https://github.com/welpo/tabi">
        <tabi:base_url>https:&#x2F;&#x2F;www.bigdick.live</tabi:base_url>
        <tabi:separator>
            •
        </tabi:separator>
        <tabi:about_feeds>这是Web Feed，又称为Atom Feed，把现在的网址复制到新闻阅读器即可订阅本站文章。造访「About Feeds」来了解更多资讯。</tabi:about_feeds>
        <tabi:visit_the_site>造访网站</tabi:visit_the_site>
        <tabi:recent_posts>近期文章</tabi:recent_posts>
        <tabi:last_updated_on>更新于 $DATE</tabi:last_updated_on>
        <tabi:default_theme></tabi:default_theme>
        <tabi:post_listing_date>date</tabi:post_listing_date>
        <tabi:current_section>Linux</tabi:current_section>
    </tabi:metadata><link rel="extra-stylesheet" href="https://www.bigdick.live/skins/black-orange.css?h=c64b7f81e34a143cd725" /><title>孙瑜 - Linux</title>
        <subtitle>孙瑜的个人首页：生物信息、数据科学、软件工程，以及公开简历、项目和文章。</subtitle>
    <link href="https://www.bigdick.live/tags/linux/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://www.bigdick.live/tags/linux/" rel="alternate" type="text/html"/>
    <generator uri="https://www.getzola.org/">Zola</generator><updated>2018-12-22T00:00:00+00:00</updated><id>https://www.bigdick.live/tags/linux/atom.xml</id><entry xml:lang="zh-Hans">
        <title>如何克服开启中大代理后访问外网资源失败的问题</title>
        <published>2018-12-22T00:00:00+00:00</published>
        <updated>2018-12-22T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/sysu-proxy-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/sysu-proxy-zh/</id>
        
            <content type="html">&lt;p&gt;中大的睿智代理，一直有这个&lt;strong&gt;用了代理就没办法访问任何校外互联网资源&lt;&#x2F;strong&gt;的奇奇怪怪的毛病。对于一个经常需要在家工作的计算狗而言，这实在太不友好了。这里详细记录一下使用超低系统资源（&amp;lt;50MB RAM， CPU占用≈0%）解决这个问题。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zhi-xie&quot;&gt;致谢&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;感谢德华君提供这个野路子以及过程中的指导&lt;&#x2F;li&gt;
&lt;li&gt;感谢Nick湿胸借用上网账号&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;da-zhi-si-lu&quot;&gt;大致思路&lt;&#x2F;h2&gt;
&lt;p&gt;不清楚是NAT啊，还是DNS服务更改的问题，总之这个代理只要使用了，再想使用互联网的资源就崩了，因此克服这个问题的唯一办法就是，&lt;strong&gt;在访问外网的时候关掉代理&lt;&#x2F;strong&gt;。但是Windows下通过IE浏览器登录代理，使用的是EasyConnect客户端，断了似乎就是断了，网页再认证还需要&lt;strong&gt;输入验证码&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;所以需要曲线救国，即&lt;strong&gt;访问外网资源的时候不走代理直接连接&lt;&#x2F;strong&gt;。咦？这和我们科学上网的需求好相似！你总不想打开国内页面的时候也绕路走你的国外VPS吧！那么为什么不用shadowsocks解决这个问题呢？&lt;&#x2F;p&gt;
&lt;p&gt;因此最后解决问题的路线就是：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;虚拟机内开启学校代理并开启服务&lt;&#x2F;li&gt;
&lt;li&gt;虚拟机上架设shadowsocks server端并开启服务&lt;&#x2F;li&gt;
&lt;li&gt;本机使用shadowsocks client&lt;&#x2F;li&gt;
&lt;li&gt;本地使用校内代理的两种情况：
&lt;ul&gt;
&lt;li&gt;对于网页（比如RStudio server）使用Chrome浏览器的SwitchyOmega插件&lt;&#x2F;li&gt;
&lt;li&gt;SSH和SFTP连接直接使用配置了代理的Xshell和Xftp&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;an-zhuang-xu-ni-ji&quot;&gt;安装虚拟机&lt;&#x2F;h2&gt;
&lt;p&gt;先下载一个虚拟机程序，建议用VM Virtualbox，虽然据说VMware的硬件兼容好点，但是我的目的简单，只是在后台run一个Linux用来使用代理而已，因此这个轻量级的软件比较适合。操作系统使用Ubuntu Server 18.04：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;我们不需要图形界面&lt;&#x2F;li&gt;
&lt;li&gt;Ubuntu的LTS是最稳定的Server操作系统之一&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;虚拟机的配置上，RAM可以随便给个100M+（不会真的用完的，host消耗很小），硬盘就用那个vdi文件动态分配就好，那么大小也就无所谓了（理论上动态分配会稍微影响点IO性能，但是和我们的主题无关）。&lt;&#x2F;p&gt;
&lt;p&gt;命令行安装操作系统可能有点蛋疼，但是基本上也是一路选下一步就可以的。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xu-ni-ji-linuxpei-zhi&quot;&gt;虚拟机Linux配置&lt;&#x2F;h2&gt;
&lt;p&gt;这个时候，还是先装好Xshell吧，不要头铁：没有SSH，你就这样在终端里面，你&lt;strong&gt;连一个普通命令的&lt;code&gt;--help&lt;&#x2F;code&gt;返回内容都浏览不全&lt;&#x2F;strong&gt;；想复制个URL却发现&lt;strong&gt;没得复制粘贴&lt;&#x2F;strong&gt;，浑身难受。Ubuntu Server默认是开了22端口的，也开启了sshd服务，所以&lt;code&gt;ifconfig&lt;&#x2F;code&gt;查到IP直接就可以连了。虚拟机的网络设置可以有以下两种策略：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;桥接模式：和host在一个网段&lt;&#x2F;li&gt;
&lt;li&gt;NAT模式：需要端口映射，在本例中，你至少需要映射22端口用作ssh，再映射一个shadowsocks用的端口。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;搞定了之后，就陆陆续续安装一下必要工具：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apt-get update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apt-get dist-upgrade&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apt install openconnect&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; apt-get install python-pip&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pip install shadowsocks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;使用openconnect需要一个厉害的配置文件vpnc-script，可以用&lt;code&gt;wget&lt;&#x2F;code&gt;从&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;openconnect&#x2F;vpnc-scripts&#x2F;-&#x2F;raw&#x2F;master&#x2F;vpnc-script&quot;&gt;这里&lt;&#x2F;a&gt;下载。你应该到现在为止没有切换过当前tty的工作目录，那漂亮啊，就下载到这吧，用起来也方便…&lt;&#x2F;p&gt;
&lt;p&gt;然后开启openconnect服务：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; openconnect -b --no-dtls --script ~&#x2F;vpnc-script https:&#x2F;&#x2F;ocvpn.sysu.edu.cn --servercert sha256:a0cc6612c7310494b31ad62e76255373f056ac128c8489ac58562f6fe57ae8e9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;--servercert&lt;&#x2F;code&gt;参数值是双鸭山大学提供的证书。你可以不加上这个参数，但是它会逼着你加上。&lt;&#x2F;p&gt;
&lt;p&gt;输入用户名和密码，程序会返回一个PID之后在后台运行。&lt;&#x2F;p&gt;
&lt;p&gt;接下来开启shadowsocks服务：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; ssserver -p&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2333&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -k&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 930829&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -m rc4-md5 -d start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;我比较懒，就直接这样开启SS服务而不是写配置文件了：&lt;code&gt;-p&lt;&#x2F;code&gt;是端口；&lt;code&gt;-k&lt;&#x2F;code&gt;是密码我用了自己生日，你们可以随意；&lt;code&gt;-m&lt;&#x2F;code&gt;是加密方法，我X我和我虚拟机连接我丝毫不虚，选个复杂度低的速度快点负荷小点；&lt;code&gt;-d&lt;&#x2F;code&gt;如果替换成stop就是停止服务。&lt;&#x2F;p&gt;
&lt;p&gt;在Ubuntu Server 18.04上，你可能会遇到这样一个错误：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# 此处省略99999行&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AttributeError: &#x2F;usr&#x2F;lib&#x2F;x86_64-linux-gnu&#x2F;libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这是由于在openssl 1.1.0中废弃了 &lt;code&gt;EVP_CIPHER_CTX_cleanup()&lt;&#x2F;code&gt; 函数而引入了 &lt;code&gt;EVE_CIPHER_CTX_reset()&lt;&#x2F;code&gt; 函数所导致的。&lt;&#x2F;p&gt;
&lt;p&gt;解决方式也是简单，直接找到使用的openssl.py文件（&lt;strong&gt;我省略的那部分异常信息里就有它的位置&lt;&#x2F;strong&gt;），把里面的所有cleanup字样全部替换为reset，就舒服了。直接&lt;code&gt;vim&lt;&#x2F;code&gt;里面批量替换，别问我怎么操作，问就是不告诉你。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wo-yao-zen-me-shi-yong-xu-ni-ji-li-mian-de-dai-li-ni&quot;&gt;我要怎么使用虚拟机里面的代理呢&lt;&#x2F;h2&gt;
&lt;p&gt;首先，你需要&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;shadowsocks&#x2F;shadowsocks-windows&quot;&gt;shadowsocks client&lt;&#x2F;a&gt;来把代理服务器的shadowsocks协议转发为socks5协议。你可能需要在两个不同的目录运行两个独立的shadowsocks进程（端口各自不同），以方便同时使用科学上网和虚拟机中架设的中大代理。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fang-wen-wang-ye&quot;&gt;访问网页&lt;&#x2F;h3&gt;
&lt;p&gt;比如RStudio server，比如hugo的预览，都是要访问内网网页的。使用Chrome浏览器的SwitchyOmega插件，可以妥善解决这个问题。记得在auto switch里面，将使用中大代理的情景模式的触发条件&lt;strong&gt;用带有通配符的IP设置为同一网段&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;shi-yong-sshlian-jie&quot;&gt;使用SSH连接&lt;&#x2F;h3&gt;
&lt;p&gt;在Xshell的连接属性里面设置好使用代理（注意端口）。&lt;&#x2F;p&gt;
&lt;p&gt;至此，科学上网&#x2F;直连&#x2F;中大代理可以和睦相处了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bu-chong&quot;&gt;补充&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;wo-xu-yao-yi-ge-service&quot;&gt;我需要一个service&lt;&#x2F;h3&gt;
&lt;p&gt;理想状态下，应该是虚拟机开机自动运行这个openconnect命令的，然后如果崩溃可以自动恢复，所以要把它做成一个service的形式比较好。Ubuntu的这些service一般在&lt;code&gt;&#x2F;lib&#x2F;systemd&#x2F;system&#x2F;&lt;&#x2F;code&gt;，所以在这里面操作吧：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;lib&#x2F;systemd&#x2F;system&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; touch sysu-proxy.service&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后填内容进去：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Unit]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Description=sysu-proxy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;After=network.target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;StartLimitIntervalSec=0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;StartLimitAction=reboot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Service]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type=simple&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Restart=always&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RestartSec=1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;User=ysun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ExecStart=&#x2F;bin&#x2F;echo &amp;#39;passwd&amp;#39; | &#x2F;usr&#x2F;sbin&#x2F;openconnect --no-dtls --script ~&#x2F;vpnc-script https:&#x2F;&#x2F;ocvpn.sysu.edu.cn --servercert sha256:a0cc6612c7310494b31ad62e76255373f056ac128c8489ac58562f6fe57ae8e9 -u username&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Install]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WantedBy=multi-user.target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里面要解释一下的：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Restart=always&lt;&#x2F;code&gt;可以保证进程挂了就自动重新运行&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;RestartSec=1&lt;&#x2F;code&gt;一旦挂了，它就会不断尝试重新运行，那么为了防止某些特定情况下一直重新运行增加服务器负载，还是间隔设置久一点好点（间隔为1秒）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ExecStart=...&lt;&#x2F;code&gt;对于需要交互式输入密码的，可以用这个技巧，通过管道将特定字符传过去&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;StartLimitIntervalSec=0&lt;&#x2F;code&gt;是防止放弃重新运行的。理论上是这样：还有一个参数值，比如&lt;code&gt;StartLimitBurst=5&lt;&#x2F;code&gt;，同时再有&lt;code&gt;StartLimitIntervalSec=10&lt;&#x2F;code&gt;的话呢，那么就如果在10秒内失败了5次，就放弃运行了（何弃疗！）防止这个情况发生就可以这样设置为0&lt;&#x2F;li&gt;
&lt;li&gt;其实&lt;code&gt;[Unit]&lt;&#x2F;code&gt;还可以加上&lt;code&gt;StartLimitAction=reboot&lt;&#x2F;code&gt;如果上面设置不是0，崩了，还是可以通过这个方式重启操作系统&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;好了，接下来就很舒服了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; systemctl enable sysu-proxy.service&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; systemctl daemon-reload&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; systemctl restart sysu-proxy.service&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        </entry><entry xml:lang="zh-Hans">
        <title>如何高效批量下载一整个BioProject&#x2F;Study的数据？</title>
        <published>2018-12-21T00:00:00+00:00</published>
        <updated>2018-12-21T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/enapi-liang-xia-zai-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/enapi-liang-xia-zai-zh/</id>
        
            <content type="html">&lt;p&gt;以&lt;em&gt;DRA005150&lt;&#x2F;em&gt;这个accession为例：&lt;&#x2F;p&gt;
&lt;p&gt;先按&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ena-docs.readthedocs.io&#x2F;en&#x2F;latest&#x2F;retrieval&#x2F;file-download.html&quot;&gt;ENA下载说明&lt;&#x2F;a&gt;打开ENA Browser，search这个字段（右上角），在出现的结果右侧选&lt;em&gt;Study&lt;&#x2F;em&gt;，点进去，下方&lt;em&gt;Download&lt;&#x2F;em&gt;字样这行最右侧有一个&lt;em&gt;TEXT&lt;&#x2F;em&gt;，将此文件下载后上传到服务器某目录下，然后执行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 这里下载到的文件名为PRJDB5190.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# aria2是多线程下载工具，会自动使用适量CPU核心占满带宽或IO&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# cut为了从数据metadata切割出URL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# tr将其分割为按行的记录&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# sed为每行URL添加上FTP协议（否则aria2不识别）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# tail去掉header&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# aria2c接受一个文件作为批量下载列表，这里使用标准输入&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;cut&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -f10 PRJDB5190.txt&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; tr&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;#39;;&amp;#39; &amp;#39;\n&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; sed&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; -e &amp;#39;s#^#ftp:&#x2F;&#x2F;#&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; tail&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -n +2&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; aria2c&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -i -&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        </entry><entry xml:lang="zh-Hans">
        <title>Circos安装很痛苦？教你两句命令解决所有依赖</title>
        <published>2018-09-01T00:00:00+00:00</published>
        <updated>2018-09-01T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/circosan-zhuang-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/circosan-zhuang-zh/</id>
        
            <content type="html">&lt;p&gt;之前听很多人吐槽说安装Circos费劲，各种Perl库装不上，装上了又找不到，今天让我来为大家介绍正确的体位：&lt;&#x2F;p&gt;
&lt;p&gt;下载&#x2F;解压Circos，并将其主程序添加到&lt;code&gt;$PATH&lt;&#x2F;code&gt;之后，是可以使用&lt;code&gt;circos -modules&lt;&#x2F;code&gt;来自动检查其perl依赖是否满足的，其输出大概为这样：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ok       1.50 Carp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ok       0.39 Clone&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;missing            Config::General&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ok       3.74 Cwd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ok      2.170 Data::Dumper&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;... (此处省略65536字hhhhh)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;好的！不要慌！先&lt;code&gt;su&lt;&#x2F;code&gt;一下切到管理员账户下，然后&lt;code&gt;echo &#x27;yes&#x27; | cpan App::cpanminus&lt;&#x2F;code&gt;把cpanm装上。什么？你不是管理员？那你喊狗管理帮你装Circos不就好了…&lt;&#x2F;p&gt;
&lt;p&gt;然后&lt;code&gt;exit&lt;&#x2F;code&gt;回到自己的用户下，&lt;code&gt;circos -modules | perl -anE&#x27;print qq{$F[1] } if &#x2F;^miss&#x2F; }{ say&#x27; | cpanm&lt;&#x2F;code&gt;，然后去泡个茶。&lt;&#x2F;p&gt;
&lt;p&gt;回来你会吃了一精，所有缺少的模块都装好了。再运行&lt;code&gt;circos -modules&lt;&#x2F;code&gt;看看…嗯？还是都是miss？没关系，是@INC缓存没更新的缘故。去一个新的tty试一下，一切正常。&lt;&#x2F;p&gt;
&lt;p&gt;好，这样成功解决了Circos的棘手的安装问题。祝各位生活性福美满。&lt;&#x2F;p&gt;
</content>
        </entry><entry xml:lang="zh-Hans">
        <title>Teamviewer命令行</title>
        <published>2018-08-12T00:00:00+00:00</published>
        <updated>2018-08-12T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/teamviewerming-ling-xing-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/teamviewerming-ling-xing-zh/</id>
        
            <content type="html">&lt;p&gt;新安装了服务器的操作系统，然后不想爬上爬下接个显示器（实验室的服务器放在月亮之上），要怎么样才能完全从命令行配置好teamviewer？&lt;&#x2F;p&gt;
&lt;p&gt;先安装：&lt;code&gt;aurman -S teamviewer&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;然后，参照&lt;a href=&quot;https:&#x2F;&#x2F;www.bigdick.live&#x2F;en&#x2F;blog&#x2F;working-on-linux&#x2F;&quot;&gt;之前的日记&lt;&#x2F;a&gt;中记载的做法，将teamviewer的daemon设置好。&lt;&#x2F;p&gt;
&lt;p&gt;为了显示teamviewer的ID，先得有个密码。否则出于安全考虑，是不会显示ID的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; teamviewer --passwd yourpasswd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这样再&lt;code&gt;sudo teamviewer --info&lt;&#x2F;code&gt;就能看到ID了。&lt;&#x2F;p&gt;
&lt;p&gt;拿到了ID和密码，就能直接连接啦~&lt;&#x2F;p&gt;
&lt;p&gt;好了，接下来，我又吃精地发现一个问题，连接持续了几秒钟而已，挂了；再连接，连不上…我滚去一台局域网内的电脑在终端内尝试&lt;code&gt;teamviewer&lt;&#x2F;code&gt;，发现：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Init...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CheckCPU: SSE2 support: yes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Checking setup...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Launching TeamViewer ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Launching TeamViewer GUI ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Aborted (core dumped)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;折腾了很久，终于找到了一个解决办法：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;sudo nano &#x2F;opt&#x2F;teamviewer&#x2F;config&#x2F;global.conf&lt;&#x2F;code&gt;加上以下两行配置：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[int32] EulaAccepted = 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[int32] EulaAcceptedRevision = 6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;再重启daemon服务，可以了！&lt;&#x2F;p&gt;
</content>
        </entry><entry xml:lang="zh-Hans">
        <title>aurman在操作系统更新之后不能用了？</title>
        <published>2018-08-08T00:00:00+00:00</published>
        <updated>2018-08-08T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/geng-xin-hou-aurmanbu-neng-yong-liao-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/geng-xin-hou-aurmanbu-neng-yong-liao-zh/</id>
        
            <content type="html">&lt;p&gt;2018年8月7日，星期二，天气晴（广州有哪天是不下一阵雨的？）&lt;&#x2F;p&gt;
&lt;p&gt;早上睡醒一如既往地挂代理，开终端，&lt;code&gt;aurman -Syu&lt;&#x2F;code&gt;，然后忽然想装一个pbzip2，我就吃精地发现，aurman不能用了？WTF！&lt;&#x2F;p&gt;
&lt;p&gt;异常信息大概长这样：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Traceback (most recent call last):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  File &amp;quot;&#x2F;usr&#x2F;bin&#x2F;aurman&amp;quot;, line 6, in &amp;lt;module&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    from pkg_resources import load_entry_point&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  File &amp;quot;&#x2F;usr&#x2F;lib&#x2F;python3.6&#x2F;site-packages&#x2F;pkg_resources&#x2F;__init__.py&amp;quot;, line 3095, in &amp;lt;module&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @_call_aside&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  File &amp;quot;&#x2F;usr&#x2F;lib&#x2F;python3.6&#x2F;site-packages&#x2F;pkg_resources&#x2F;__init__.py&amp;quot;, line 3079, in _call_aside&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    f(*args, **kwargs)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  File &amp;quot;&#x2F;usr&#x2F;lib&#x2F;python3.6&#x2F;site-packages&#x2F;pkg_resources&#x2F;__init__.py&amp;quot;, line 3108, in _initialize_master_working_set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    working_set = WorkingSet._build_master()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  File &amp;quot;&#x2F;usr&#x2F;lib&#x2F;python3.6&#x2F;site-packages&#x2F;pkg_resources&#x2F;__init__.py&amp;quot;, line 570, in _build_master&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ws.require(__requires__)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  File &amp;quot;&#x2F;usr&#x2F;lib&#x2F;python3.6&#x2F;site-packages&#x2F;pkg_resources&#x2F;__init__.py&amp;quot;, line 888, in require&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    needed = self.resolve(parse_requirements(requirements))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  File &amp;quot;&#x2F;usr&#x2F;lib&#x2F;python3.6&#x2F;site-packages&#x2F;pkg_resources&#x2F;__init__.py&amp;quot;, line 774, in resolve&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    raise DistributionNotFound(req, requirers)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pkg_resources.DistributionNotFound: The &amp;#39;aurman==2.17.1&amp;#39; distribution was not found and is required by the application&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;好了，看到这个我就明白了，一定是Python做了大版本更新，aurman作为一个纯python的包管理器，躺枪！&lt;&#x2F;p&gt;
&lt;p&gt;（喜欢滚动更新？啪！）&lt;&#x2F;p&gt;
&lt;p&gt;赶紧去社区兜了一圈，发现aurman的作者已经火速更新了源码（其实还不是就改个数字嘛摔），然后更新了AUR上的snapshot，我们只要重装一下aurman就什么问题都没有了。&lt;&#x2F;p&gt;
&lt;p&gt;所以去AUR下载了snapshot文件，解压缩拿到PKGBUILD，正当我&lt;code&gt;makepkg -sci&lt;&#x2F;code&gt;的时候，又凉凉了！&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;==&amp;gt; Verifying source file signatures with gpg...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    aurman_sources git repo ... FAILED (unknown public key 465022E743D71E39)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;==&amp;gt; ERROR: One or more PGP signatures could not be verified!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;好嘛好嘛。签名问题。既然我确定我的PKGBUILD是正规途径下载搞到的，那无所谓咯，我&lt;code&gt;gpg --recv-key 465022E743D71E39&lt;&#x2F;code&gt;添进来就是:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gpg: keyserver receive failed: Server indicated a failure&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;作为一个国内玩家，我已经看了不下1000000000000000000000次这种异常信息了（误）&lt;&#x2F;p&gt;
&lt;p&gt;然后再&lt;code&gt;makepkg -sci&lt;&#x2F;code&gt;，完成package build之后，会自动调用pacman -U去替换当前版本。然后aurman就可以正常使用了。&lt;&#x2F;p&gt;
&lt;p&gt;再回去看看，&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;polygamma&#x2F;aurman&#x2F;issues&#x2F;178&quot;&gt;aurman的作者已经不胜其扰了&lt;&#x2F;a&gt;，我真同情你…为什么你不多找点我这样的用户…&lt;&#x2F;p&gt;
</content>
        </entry><entry xml:lang="zh-Hans">
        <title>因为硬盘Block不够，导致操作系统不能更新是要有多蛋疼？</title>
        <published>2018-07-18T00:00:00+00:00</published>
        <updated>2018-07-18T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/blockbu-gou-cao-zuo-xi-tong-bu-neng-geng-xin-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/blockbu-gou-cao-zuo-xi-tong-bu-neng-geng-xin-zh/</id>
        
            <content type="html">&lt;p&gt;喏，众所周知，ArchLinux那是要每天睡醒了就&lt;code&gt;aur -Syu&lt;&#x2F;code&gt;一轮压压惊的，然后齐胖胖的服务器已经两周多（至少）没更新过，我感觉药丸，赶紧更新去，然后我就傻眼了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;error: Partition &#x2F; too full: 225715 blocks needed, 130394 blocks free&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;error: failed to commit transaction (not enough free disk space)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Errors occurred, no packages were upgraded.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;啊？&lt;&#x2F;p&gt;
&lt;p&gt;关于什么是blocks，就不多解释了，鸟哥里面写的很清楚。基本上发生这样的问题，可能有两种原因：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;硬盘格式化的时候，block设置得过大了。一般来说是4KB，使用者在对硬盘格式化的时候应该根据服务器的用途设计好block的大小。比如如果是邮件服务器等文件普遍比较小的，那么用较大的block势必导致硬盘空间的浪费；&lt;&#x2F;li&gt;
&lt;li&gt;出现了一堆特别特别小的文件。也许是日志文件或者其他？这就不得而知了。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;我们的服务器是一般用途，所以格式化用的也是默认参数（当然是做了4K对齐的），因此应该不会出现第一条问题。所以切到root之后，看了一下究竟是哪里比较大：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;du&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -hsx&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable&quot;&gt; *&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; sort&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -rh&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; |&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; head&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; -10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;输出是这样的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;du: cannot access &amp;#39;proc&#x2F;39956&#x2F;task&#x2F;39956&#x2F;fd&#x2F;4&amp;#39;: No such file or directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;du: cannot access &amp;#39;proc&#x2F;39956&#x2F;task&#x2F;39956&#x2F;fdinfo&#x2F;4&amp;#39;: No such file or directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;du: cannot access &amp;#39;proc&#x2F;39956&#x2F;fd&#x2F;4&amp;#39;: No such file or directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;du: cannot access &amp;#39;proc&#x2F;39956&#x2F;fdinfo&#x2F;4&amp;#39;: No such file or directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2.8T    backup&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2.6T    data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2.5T    data2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;15G     home&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;7.5G    var&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;7.1G    usr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3.4G    opt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;52M     boot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;14M     etc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;13M     tmp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;那些什么cannot access的就不管了，是内存中的进程缓存并非完全实时的缘故。
至于下面的内容，就很奇怪了。前三个是挂载在其他硬盘上的，&lt;code&gt;&#x2F;home&lt;&#x2F;code&gt;的大小也还算正常（此前我单独检查过用户目录），那么最可疑的就是&lt;code&gt;&#x2F;var&lt;&#x2F;code&gt;和&lt;code&gt;&#x2F;usr&lt;&#x2F;code&gt;两个了。&lt;&#x2F;p&gt;
&lt;p&gt;就这样一层一层检查下去，发现&lt;code&gt;&#x2F;var&#x2F;cache&lt;&#x2F;code&gt;里的缓存也挺多的（感谢齐胖胖提醒），然后就用&lt;code&gt;pacman -Sc&lt;&#x2F;code&gt;做个清理了。&lt;&#x2F;p&gt;
&lt;p&gt;然后就可以了。&lt;&#x2F;p&gt;
</content>
        </entry><entry xml:lang="zh-Hans">
        <title>如何不方不盲地恢复Linux下误删的文件</title>
        <published>2018-07-02T00:00:00+00:00</published>
        <updated>2018-07-02T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/linuxhui-fu-wu-shan-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/linuxhui-fu-wu-shan-zh/</id>
        
            <content type="html">&lt;h2 id=&quot;bei-ju-de-yuan-you&quot;&gt;杯具的缘由&lt;&#x2F;h2&gt;
&lt;p&gt;太久没回来广州，没用实验室的服务器写东西、算东西。刚刚清用户目录的时候，误删了一个目录，全是过年期间跑数据的中间结果，WTF，有点high。
众所周知，如果没做alias的话，Linux是没有“回收站”这个说法的。也就是说，比如我这样&lt;code&gt;rm -rf workflow&lt;&#x2F;code&gt;把这个叫做workflow的目录删了，那么删了就是删了，那就是彻底删除了。
虽然说按照专业素养，我是肯定有命令啊、参数啊和环境等等的记录的。然鹅算力和时间才是最贵的，平白无故让我再来一轮，我肯定不开心啊！
然后我就想到，老衲其实是可以把它恢复的！&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wo-wei-shen-me-neng-hui-fu-che-di-shan-chu-de-wen-jian&quot;&gt;我为什么能恢复“彻底删除”的文件&lt;&#x2F;h2&gt;
&lt;p&gt;这样，就要提到Linux的文件删除原理了。在Windows下面，删个大文件那是要很久的。但是在Linux下面，由于所谓的删除只是将存储文件的inode和blocks标记为未使用，所以删除是一件甚至根本察觉不到时间流逝的行为！
也就是说，数据其实并未被彻底从硬盘抹去（什么？你说你删除是用&lt;code&gt;dd&lt;&#x2F;code&gt;命令去删的？呵呵呵呵…），只是这块硬盘空间已经被标记为空闲了，其他进程分分钟可以覆盖上面的数据，也就是删除了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qiang-jiu-guo-cheng&quot;&gt;抢救过程&lt;&#x2F;h2&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;其实这里有必要提一句，Linux是不会删除进程尚在使用的文件的。所以如果有进程还在使用误删的文件，用&lt;code&gt;lsof&lt;&#x2F;code&gt;配合&lt;code&gt;grep&lt;&#x2F;code&gt;可以很容易将其恢复，具体细节不属于本文记录范围，不详细说了。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote class=&quot;markdown-alert-warning&quot;&gt;
&lt;p&gt;为了防止这块盘再有什么厉害的读&#x2F;写，覆盖了这些“已删除”的文件占用的磁盘空间，是要马上解挂载的。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;挂载之前，我做了一件好事，用&lt;code&gt;ls -di &#x2F;home&#x2F;ysun&lt;&#x2F;code&gt;查看了我目录的inode（说出来你们可能不信，我是编剧，这是一个伟大的伏笔）。服务器上&lt;code&gt;&#x2F;home&lt;&#x2F;code&gt;是挂载到另外一块硬盘（整一个分区）&lt;code&gt;&#x2F;dev&#x2F;sdb1&lt;&#x2F;code&gt;上的。想要&lt;code&gt;umount &#x2F;home&lt;&#x2F;code&gt;，发现不行，设备忙。这个时候可以用&lt;code&gt;fuser -km &#x2F;home&lt;&#x2F;code&gt;强制kill掉占用了&lt;code&gt;&#x2F;home&lt;&#x2F;code&gt;的进程。这个时候就可以解挂载了，然后我用putty开的终端就消失了（因为ssh连接也被kill了）。&lt;&#x2F;p&gt;
&lt;p&gt;为了方便接下来的操作，是想用root登录的。然鹅，发现root居然不可以用ssh登录，顿觉有点不适。又重新用普通用户修改了&lt;code&gt;&#x2F;etc&#x2F;ssh&#x2F;sshd_config&lt;&#x2F;code&gt;的内容，将&lt;code&gt;PermitRootLogin without-password&lt;&#x2F;code&gt;中的&lt;code&gt;without-password&lt;&#x2F;code&gt;改为&lt;code&gt;yes&lt;&#x2F;code&gt;，再用&lt;code&gt;sudo systemctl restart sshd.service&lt;&#x2F;code&gt;重启一下ssh服务，可以了。&lt;&#x2F;p&gt;
&lt;p&gt;上网搜了一圈，一些比较多人用的工具，比如ext3grep，已经不适用与ext4文件系统了。先尝试了extundelete，但是两年多没维护的工具了，各种和现有的软件包冲突，各种Segment Fault，各种Core Dumped（卧槽居然押韵）。冲突就算了，我想把冲突的包降级都不成，那么旧的版本人家都不保留了。去GitHub找了其他人fork过去修改的版本，发现还是跟不上底层库更新的脚步，不好使。&lt;&#x2F;p&gt;
&lt;p&gt;然后就转向了ext4magic。先安装：&lt;code&gt;aurman -S ext4magic&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;安装好了之后，先&lt;code&gt;ext4magic &#x2F;dev&#x2F;sdb1 -I 50331649&lt;&#x2F;code&gt;（这串数字就是上文的伏笔了嗯），看看我中午睿智地做了什么:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;legacy-assets&#x2F;my-website&#x2F;img&#x2F;post_img&#x2F;ext4magic.png&quot; alt=&quot;ext4magic的输出&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;卧槽，辣眼睛啊！就这么给删了…删了…了…&lt;&#x2F;p&gt;
&lt;p&gt;这个时候，我以迅雷不及掩耳到铃儿响叮当之势掏出了一个小本本，记下了这个被误删的目录的inode值，57606262。
然后&lt;code&gt;ext4magic &#x2F;dev&#x2F;sdb1 -r -I 57606262  -d &#x2F;root&lt;&#x2F;code&gt;尝试恢复：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;legacy-assets&#x2F;my-website&#x2F;img&#x2F;post_img&#x2F;%E6%96%87%E4%BB%B6%E6%81%A2%E5%A4%8D%E7%BB%93%E6%9E%9C.png&quot; alt=&quot;文件恢复&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;舒服了啊！
赶紧挂载上硬盘&lt;code&gt;mv&lt;&#x2F;code&gt;走…&lt;&#x2F;p&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;理论上讲，是可以用参数指定时间戳（关于什么是时间戳，那要追溯到1970年了，请百度）来指定时间范围查看文件增删记录的。但是不知道为什么在extundelete里好用，在ext4magic里就瓦特了。比如想获取今天（如果你是好久之后才看到你可能不知道哪天是今天hhhhh）下午2点50的时间戳，那么就&lt;code&gt;date -d &quot;2018-07-02 14:50:00&quot; +&quot;%s&quot;&lt;&#x2F;code&gt;，然后终端内得到的一串数字就是了。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Linux没有回收站，可以的话，还是做个alias。我以前也认为“TMD这么蠢的事情我会做吗，不存在的”，然后今天不记得了目录的内容，脑子一热就GG了；&lt;&#x2F;li&gt;
&lt;li&gt;发生意外时，不要慌，虽然自己手贱踩了雷，对操作系统的理解又深刻了一层，长远看来，还是值得的；&lt;&#x2F;li&gt;
&lt;li&gt;还是Linux好啊，辣鸡Windows，动辄要收费**；&lt;&#x2F;li&gt;
&lt;li&gt;Linux果然是好；&lt;&#x2F;li&gt;
&lt;li&gt;Linux真是好啊！&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        </entry><entry xml:lang="zh-Hans">
        <title>如何优雅地在Linux操作系统下用CPU挖矿</title>
        <published>2018-05-31T00:00:00+00:00</published>
        <updated>2018-05-31T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/wa-kuang-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/wa-kuang-zh/</id>
        
            <content type="html">&lt;p&gt;这是一篇“散文”，记录一下最近用CPU挖矿的曲折的折腾过程。&lt;&#x2F;p&gt;
&lt;p&gt;首先先来BB一下动机：手里是有一台PC的，没错，你没看错，一台普通台式机，其实无法通过这件事为我带来任何收益，但是出于对区块链的浓厚兴趣，我出手了。&lt;&#x2F;p&gt;
&lt;p&gt;我瞄准的币种是&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;karbo.io&#x2F;&quot;&gt;Karbo&lt;&#x2F;a&gt;（卡博币），那么为什么选这个呢，因为很多币（比如比特币）用CPU已然挖不动了。随着全网算力的提升，一些热门币种陆陆续续被大量计算出来，现如今计算的难度越来越大，对应的挖矿设备已经经历了CPU -&amp;gt; GPU -&amp;gt; 专用矿机这个历程。我不是专门的挖矿大户，顶多算是兴趣爱好者，当然能从中获利我也很开心。这个币现在很贱，之前更贱。坦白讲，最近几个月的一些涨幅才让我对其升值有了一定的信心。虚拟货币现在很多，这里面存在一个矛盾：如果玩的人少，市场不活跃，币就没有价值；如果玩的人太多，矿工会大量涌入，之后就重复了比特币的历程，又是一般玩家玩不起的了（不信可以去试试，个体户买一台矿机，挖几年能挖出一枚比特币哦）。我认为Karbo刚刚处在这样一个合适的阶段，所以选择了它。&lt;&#x2F;p&gt;
&lt;p&gt;挖矿，首先要有一个钱包。钱包很容易弄，懒得写了。&lt;&#x2F;p&gt;
&lt;p&gt;然后就是一个很有趣的问题，挖矿，其实本质上就是算hash值。那么这个计算的程序，也就是挖矿程序用什么好呢？我搜索了一圈，似乎&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fireice-uk&#x2F;xmr-stak&quot;&gt;xmr-stak&lt;&#x2F;a&gt;还是比较科学的，支持CPU&#x2F;A卡&#x2F;N卡，支持Windows&#x2F;Linux&#x2F;macOS，支持的币种多，口碑也不错，算是挖矿程序里的佼佼者了。&lt;&#x2F;p&gt;
&lt;p&gt;很遗憾，截至我书写这篇日记的时候，软件的docker镜像并不可用，否则应该是很方便的。编译安装比较中规中矩，作者在文档里给出了常见的Linux distribution的对应命令，也不想多说了。重点谈一个坑：&lt;&#x2F;p&gt;
&lt;p&gt;国际惯例，挖矿工具的作者，是会从计算过程中“抽水”的。一般来讲，默认会抽2%，xmr-stak也是采用了这个值。这个2%，其实就是每计算100分钟，其中有两分钟是为作者的钱包计算&#x2F;提交hash值，可以理解为是一种持续捐献、鼓励和支持作者继续开发的团结友爱的行为。作者在此处体现出了充分的人道主义精神，指出了源码中控制捐献比例的变量的位置，允许用户在编译程序之前自行修改：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fireice-uk&#x2F;xmr-stak&#x2F;blob&#x2F;c0ab1734332d6472225d8ac7394f6fcba71aabc9&#x2F;xmrstak&#x2F;donate-level.hpp&quot;&gt;xmrstak&#x2F;donate-level.hpp&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-storage z-type&quot;&gt;constexpr double&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; fDevDonationLevel &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2.0&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 100.0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;一个中规中矩的double类型常量，看起来没什么不妥。可是这个时候我的好奇心膨胀了，我很关心作者是如何实现这个捐献的逻辑的。另外也有一个疑问：对于完全不捐献的人，会怎样处理，真的颗粒无收吗？假如人人都在编译之前手动修改了源码中这个常量的值为0.0，那么程序岂不是白写了…&lt;&#x2F;p&gt;
&lt;p&gt;于是我搜索了整个代码仓库内含有&lt;code&gt;fDevDonationLevel&lt;&#x2F;code&gt;常量的代码，发现了一些端倪。先看这一部分：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fireice-uk&#x2F;xmr-stak&#x2F;blob&#x2F;26a5d65f12b2f19a0a3ece39a2bc64718796367b&#x2F;xmrstak&#x2F;misc&#x2F;executor.hpp&quot;&gt;xmrstak&#x2F;misc&#x2F;executor.hpp&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;&#x2F;&#x2F; Dev donation time period in seconds. 100 minutes by default.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;&#x2F;&#x2F; We will divide up this period according to the config setting&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-storage z-type&quot;&gt;constexpr static size_t&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; iDevDonatePeriod &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; *&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 60&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-storage z-type&quot;&gt;inline bool&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; is_dev_time&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;    &#x2F;&#x2F;Add 2 seconds to compensate for connect&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-storage z-type&quot;&gt;    constexpr size_t&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; dev_portion &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;= static_cast&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;size_t&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type&quot;&gt;double&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;iDevDonatePeriod&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; *&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; fDevDonationLevel &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;+&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2.&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;dev_portion &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt; &#x2F;&#x2F;No point in bothering with less than 10s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-language z-false&quot;&gt; false&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;get_timestamp&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; dev_timestamp&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; %&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; iDevDonatePeriod &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;iDevDonatePeriod &lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; dev_portion&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;is_dev_time()&lt;&#x2F;code&gt;是一个返回值为bool类型的函数。作者将每100分钟看作一份，然后从中抽出以百分比计数的若干分钟来作为捐献。这里计算了一个&lt;code&gt;dev_portion&lt;&#x2F;code&gt;变量：&lt;code&gt;iDevDonatePeriod&lt;&#x2F;code&gt;常量将这一百分钟换算为秒，之后将其与&lt;code&gt;fDevDonationLevel&lt;&#x2F;code&gt;（用户决定的捐献比例）相乘，再加2（姑且可以认为这是为了方便计算，小数点是为了方便double类型相加）。然后我留意到下面有一个&lt;code&gt;if&lt;&#x2F;code&gt;分支，对于这个值小于12（每100分钟，也就是6000秒内，捐献给作者的计算时间低于10，因为之前加了2），函数将直接返回一个&lt;code&gt;false&lt;&#x2F;code&gt;。那么这个&lt;code&gt;false&lt;&#x2F;code&gt;的返回值又有什么用呢？我继续搜索了调用函数&lt;code&gt;is_dev_time()&lt;&#x2F;code&gt;的代码，发现了这样&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fireice-uk&#x2F;xmr-stak&#x2F;blob&#x2F;c0ab1734332d6472225d8ac7394f6fcba71aabc9&#x2F;xmrstak&#x2F;misc&#x2F;executor.cpp&quot;&gt;一处&lt;&#x2F;a&gt;，看完作者复杂的矿池切换逻辑，瞬间觉得后背一凉，想了下还是保留一点“良知”，适当调低了捐献比例（我是觉得2%有点高），编译，通过。&lt;&#x2F;p&gt;
&lt;p&gt;运行的时候，开始遇到了错误：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MEMORY ALLOC FAILED: mmap failed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这个好说，只要&lt;code&gt;sudo sysctl -w vm.nr_hugepages=128&lt;&#x2F;code&gt;就解决了。&lt;&#x2F;p&gt;
&lt;p&gt;万事俱备，只欠开挖。开挖之前，是想把进程做点手脚的。理由很简单，被人发现在挖矿就不好了，就变成了挖社会主义墙脚，薅社会主义羊毛。想隐藏进程，首先就要深刻理解常见进程查看工具，比如&lt;code&gt;top&lt;&#x2F;code&gt;、&lt;code&gt;ps&lt;&#x2F;code&gt;和&lt;code&gt;lsof&lt;&#x2F;code&gt;这些的原理。这里要用到一个超强的系统挖掘工具，叫做&lt;code&gt;sysdig&lt;&#x2F;code&gt;，它不仅仅在监控细节上更“深入”，甚至还能对容器（比如docker）等进行监控。使用&lt;code&gt;sysdig&lt;&#x2F;code&gt;监控&lt;code&gt;ps&lt;&#x2F;code&gt;时可以看到&lt;code&gt;ps&lt;&#x2F;code&gt;的大概工作原理：&lt;&#x2F;p&gt;
&lt;p&gt;用一些底层的函数，比如&lt;code&gt;openat()&lt;&#x2F;code&gt;和&lt;code&gt;getdents()&lt;&#x2F;code&gt;去解析&lt;code&gt;&#x2F;proc&lt;&#x2F;code&gt;目录的内容。比如在终端内运行&lt;code&gt;ls &#x2F;proc&lt;&#x2F;code&gt;，可以看到如下输出：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;legacy-assets&#x2F;my-website&#x2F;img&#x2F;post_img&#x2F;proc%E7%9B%AE%E5%BD%95%E7%9A%84%E5%86%85%E5%AE%B9.png&quot; alt=&quot;&#x2F;proc目录内容&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这些数字就是对应每个进程的PID。每个进程在创建伊始，都会在&lt;code&gt;&#x2F;proc&lt;&#x2F;code&gt;下生成这样的一个目录，里面保存了很多信息。如果你是一只生信狗，看这篇日记的时候就应该想到，当你提交了一条任务，跑了很久都没跑完，以至于你都不记得当初把它提交时用的命令行参数了，怎么办？别担心，只要&lt;code&gt;cat &#x2F;proc&#x2F;PID&#x2F;cmdline&lt;&#x2F;code&gt;就可以看到万恶♂之源（误）：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;legacy-assets&#x2F;my-website&#x2F;img&#x2F;post_img&#x2F;cmdline%E7%9A%84%E5%86%85%E5%AE%B9.png&quot; alt=&quot;cmdline的内容&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;看来这里52329这个进程，就是一个sftp服务。除此之外，还可以查看进程状态、一些统计信息等等。&lt;&#x2F;p&gt;
&lt;p&gt;然鹅，虽然知道了&lt;code&gt;ps&lt;&#x2F;code&gt;这些程序是这样的工作原理，但是其实&lt;code&gt;openat()&lt;&#x2F;code&gt;和&lt;code&gt;getdents()&lt;&#x2F;code&gt;也不是根源，它们也要调用更为底层的C标准库（&lt;code&gt;libc&lt;&#x2F;code&gt;），里面提供了两个函数：&lt;code&gt;opendir()&lt;&#x2F;code&gt;和&lt;code&gt;readdir()&lt;&#x2F;code&gt;。到目前为止，把进程藏起来大概可以有这样几个思路：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;对类似SELinux这样的子系统做手脚。但是并不推荐，首先不好改，其次，服务器管理员可能一早就睿智地把它关了。&lt;&#x2F;li&gt;
&lt;li&gt;把&lt;code&gt;top&lt;&#x2F;code&gt;、&lt;code&gt;ps&lt;&#x2F;code&gt;和&lt;code&gt;lsof&lt;&#x2F;code&gt;这些程序的二进制可执行文件改了。这个切实可行，但是你就要去改源码。有几个类似的工具，就改几次，它更新，你再去改…再编译。有点蠢。&lt;&#x2F;li&gt;
&lt;li&gt;改掉&lt;code&gt;libc&lt;&#x2F;code&gt;。既然大家都在用&lt;code&gt;libc&lt;&#x2F;code&gt;的&lt;code&gt;readdir()&lt;&#x2F;code&gt;，不如就一次性把这里改掉，让它查看不到某些进程在&lt;code&gt;&#x2F;proc&lt;&#x2F;code&gt;里面的内容就好了。&lt;&#x2F;li&gt;
&lt;li&gt;直接修改内核对诸如&lt;code&gt;getdents()&lt;&#x2F;code&gt;函数的调用方式。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;这里利用一下Linux的预加载动态链接库的特性。捣鼓一个假的&lt;code&gt;readdir()&lt;&#x2F;code&gt;函数出来，加入操作系统的预加载列表内。之后再调用系统的&lt;code&gt;readdir()&lt;&#x2F;code&gt;函数的时候，由于函数签名相同，早就已经被覆盖掉，是一个假的&lt;code&gt;readdir()&lt;&#x2F;code&gt;了。逻辑也很简单，发现进程名称和设定的一致，就&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gianlucaborello&#x2F;libprocesshider&#x2F;blob&#x2F;890e3cf3f8cf3d2edf214c7ac1275b7c3ced15a9&#x2F;processhider.c&quot;&gt;跳过&lt;&#x2F;a&gt;。这里借用一下人家的轮子：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 先克隆下来&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;git&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; clone git@github.com:gianlucaborello&#x2F;libprocesshider.git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; libprocesshider&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 编译&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;make&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 把编译好的动态链接库放好&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; mv libprocesshider.so &#x2F;usr&#x2F;local&#x2F;lib&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 加入预加载列表&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 这一行要用root账户添加&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;usr&#x2F;local&#x2F;lib&#x2F;libprocesshider.so&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; &#x2F;etc&#x2F;ld.so.preload&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;自此，随便挖，别人根本不知道电费流向了哪里。&lt;&#x2F;p&gt;
&lt;p&gt;本来昨天写到这是结束了的，然鹅我意识到一个蛋疼的问题。老子自己都查不到这个进程的PID，kill不掉啊！
只能用睿智的sysdig去解决了！于是&lt;code&gt;aurman -S sysdig&lt;&#x2F;code&gt;尝试安装，发现：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(1&#x2F;2) Install DKMS modules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;==&amp;gt; Unable to install module sysdig&#x2F;0.21.0 for kernel 4.14.48-2-MANJARO: Missing kernel headers.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这个其实不影响…但是也确实可以&lt;code&gt;aurman -S linux414-headers&lt;&#x2F;code&gt;修复一下。
然后使用sysdig查看CPU占用最多的进程：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sysdig -c topprocs_cpu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CPU%                Process             PID&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;--------------------------------------------------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10212&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10197&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10203&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10204&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10185&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10189&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10214&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10196&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10216&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;100.03%             &amp;lt;NA&amp;gt;                10206&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里是比较迂回了…因为PID确实被隐藏了…但是也不用担心，kill掉一个就全死了…大刀一挥死一片鬼子啊…
舒服了舒服了…&lt;&#x2F;p&gt;
</content>
        </entry><entry xml:lang="zh-Hans">
        <title>如何优雅地在Linux操作系统下翻墙（客户端篇）</title>
        <published>2018-05-29T00:00:00+00:00</published>
        <updated>2018-05-29T00:00:00+00:00</updated>
        <author>
            <name>孙瑜</name>
        </author>
        <link rel="alternate" href="https://www.bigdick.live/blog/linuxfan-qiang-zh/" type="text/html"/>
        <id>https://www.bigdick.live/blog/linuxfan-qiang-zh/</id>
        
            <content type="html">&lt;p&gt;本文主要介绍如何在Arch Linux下部署client端的SS，考虑到主要也是国人才有这种需求，就直接丢中文版blog了。&lt;&#x2F;p&gt;
&lt;p&gt;废话少说，&lt;code&gt;shadowsocks-libev&lt;&#x2F;code&gt;是C语言编写的轻量版的SS。先安装：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pacman -S shadowsocks-libev&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;写好配置文件（具体写法就见&lt;a href=&quot;https:&#x2F;&#x2F;www.bigdick.live&#x2F;en&#x2F;blog&#x2F;break-through-gfw&#x2F;&quot;&gt;英文版教程&lt;&#x2F;a&gt;吧，几乎一致的）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; mkdir &#x2F;etc&#x2F;shadowsocks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 我理你用nano还是vim还是个什么鬼，就编辑一下文本文件嘛&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 做人呢，最紧要是开心&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; vim &#x2F;etc&#x2F;shadowsocks&#x2F;config.json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;使用&lt;code&gt;systemctl&lt;&#x2F;code&gt;管理ss的daemon进程（这个在介绍&lt;a href=&quot;https:&#x2F;&#x2F;www.bigdick.live&#x2F;en&#x2F;blog&#x2F;working-on-linux&#x2F;&quot;&gt;Manjaro Linux的使用&lt;&#x2F;a&gt;的时候提过）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;# 配置文件的前缀名为config，因此此处为@config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; systemctl enable shadowsocks-libev@config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; systemctl daemon-reload&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; systemctl start shadowsocks-libev@config&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最后，使用&lt;code&gt;proxychains-ng&lt;&#x2F;code&gt;做socks5转发。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;插嘴一句，本身就是齐胖胖他们医院的网络爆炸，所以只好搞这样一出来安装RStudio Server。没想到回到博士课题组修电脑还是用到了hhhhh&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;先用命令&lt;code&gt;sudo pacman -S proxychains-ng&lt;&#x2F;code&gt;安装，然后同样也要写配置，就很简单了，直接&lt;code&gt;sudo vim &#x2F;etc&#x2F;proxychains.conf&lt;&#x2F;code&gt;编辑，把原来&lt;code&gt;[ProxyList]&lt;&#x2F;code&gt;下面的内容去掉，加上&lt;code&gt;socks5 127.0.0.1 1080&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;proxychains-ng的输出非常烦躁…如果觉得眼睛花，在刚刚的配置文件里面有一行&lt;code&gt;quietmode&lt;&#x2F;code&gt;，把前面的注释取消掉就好了。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;接下来就是使用了。只要在需要使用代理的命令前面加上&lt;code&gt;proxychains4&lt;&#x2F;code&gt;就可以，比如&lt;code&gt;proxychains4 aurman -S rstudio-server-bin&lt;&#x2F;code&gt;这样。&lt;&#x2F;p&gt;
</content>
        </entry>
</feed>
