使用 sftp 同步远程文件

以前从服务端同步文件到本地,我很喜欢用 scp。不过,scp 有个不好的点就是你必须输入远程的路径,这就要求你得想办法记住你要同步的文件路径名。当然,你可以使用两个终端协同合作:一个终端负责执行 scp 命令,另一个则负责登录服务器,通过 cdpwd 等来检索路径。今天发现了一个更好用的远程文件同步工具,叫做 sftp。如果对 sftp 不了解,那么你至少应该听过 ftp 吧。ftp 的全称是 File Transfer Protocol,是 OSI 模型中的一个应用层协议,用于两个远端主机间的文件传输。而 sftp 的全称则是 Secure File Transfer Protocol,是基于 ftp 却使用 ssh 来进行加密传输的协议。对 sftp 工具有这一层的认识也就够了,接下来我们就来动手看看如何使用它。

阅读余文使用 sftp 同步远程文件

外网主机通过 ssh 连接局域网主机

我觉得,远程办公该是程序员最心仪的工作方式之一了吧。想想看,坐在家里喝着茶,看着书,需要的时候分分钟就把原本需要到公司里才能干的活给了结了,是不是有一种运筹帷幄之感?当然了,要实现远程办公,首先得连上远程主机。不过,远程主机(不管是家里的,还是公司的电脑)一般都处在局域网内部,并不拥有固定的外网 ip。这该如何是好?不慌!一般而言,要想突破内网限制,只要能成功进行 NAT 打洞,所有问题都将迎刃而解。所谓 NAT,英文名称是 Network Address Translation,顾名思义是一种转换网络地址的方式,也就是一种能够把局域网内部 ip 和端口映射成外网 ip 和端口的技术。利用这种技术使得外部主机与局域网的主机建立连接,通常也叫做 NAT 打洞。关于 NAT 打洞,未来我会用一篇文章做专门的介绍。为了缩小篇幅,暂时只能假设大家对 NAT 原理已经足够了解。本文要探讨的是利用 ssh 实现 NAT 打洞,并让外网主机可以连接到局域网内部的主机。

阅读余文外网主机通过 ssh 连接局域网主机

Ubuntu 18.04 修复中文字体渲染问题

最近一段时间一直工作在 Centos 7 下,前两天为了尝鲜,装了最新版的 Ubuntu 18.04 LTS。相比以前的版本,有个明显的感觉就是系统对字体的渲染效果提升了不少。不过,具体落到中文字体的显示上,似乎就出了点问题。中文字体整体说来渲染得还可以,但总有那么几个字看起来特别别扭,比如“门”、“复”等。这些字要么看起来奇怪,要么太瘦,要么感觉只渲染了一半。照理说,早在 Ubuntu 16.04 后,系统的中文字体已经交给了 Noto Sans CJK 来渲染了,有这么一款优秀字体的支持,理应不会出现这样的渲染问题才对。那到底是什么原因导致的呢?

阅读余文Ubuntu 18.04 修复中文字体渲染问题

Centos 7 使用 ss5 搭建 socks5 代理服务器

在《Centos 7 搭建 socks5 代理服务器》这篇博文中,我们介绍了如何利用 shadowsocks 搭建一个 socks5 代理服务器。本篇博文可以说是它的姊妹篇,也是讲述 socks5 代理,只不过所采用的手段变成了 ss5 罢了。

阅读余文Centos 7 使用 ss5 搭建 socks5 代理服务器

GDB 命令详解

连接 Linux 服务器的时候,一般无法直接使用 IDE 工具来帮助我们调试代码,只好求助于 GDB 了。GDB 调试并不难,也不比 IDE 调试复杂多少,唯一要做的只不过是多记住一些调试命令而已。

以 C 代码为例。假设我们编写了一个源文件 test.c,那么,要使用 GDB 调试,首先要把源代码编译成可执行文件。当然,调试信息肯定是要打开的,打开方式一般就是在 gcc 命令中使用 -g 参数。例如:

$ gcc test.c -o test.out -g

有了编译后的可执行文件 test.out 后,就可以让 GDB 程序运行可执行文件进行调试了:

$ gdb test.out

GDB 的命令虽多,但结合我们使用 IDE 的经验,一般需要用到的命令也就那么几个。本文就罗列出常用的一些调试命令,供大家查询使用。

阅读余文GDB 命令详解

MySQL 内存优化

早上醒来,发现博客打不开了,提示无法连接数据库。通过终端登录,尝试连接 MySQL(Centos 7 一般用的是 MariaDB),果然无法连接,只得重启服务器来暂时解决。当时具体的报错信息已经忘了,只记得大概讲的是 MySQL 停止运行,又被锁定之类的。考虑到我的这台博客服务器内存较低,问题应该就出在 MySQL 的内存占用方面。果然,网上也有关于这方面的讨论。说是当服务器的内存过低,容易造成 MySQL 的运行经常性停止,其本质原因就在于不合理的缓存策略。那么,不妨就先从这方面入手去解决吧。

阅读余文MySQL 内存优化

php-fpm 内存调优

为了高效利用服务器,今天特地把博客迁移到一台只有 1G 内存的新服务器上。原想一个静态博客而已,耗不了多大机器性能。不曾想,1G 的内存很快就不够用了,看了一下,连 swap 都被用上了。于是赶紧用命令查下各进程的内存开销:

$ ps aux

发现占据一大半内存的是一堆 php-fpm 相关的子进程。看来是 php-fpm 的配置不合理,导致它们被不合理地创建出来。这就要分析 php-fpm 创建子进程的方式了。

php-fpm 有三种孵化子进程的方式,一般可在 /etc/php-fpm.d/www.conf 里面,通过指定 pm 的值(例如,pm = dynamic),结合对应的参数(例如,pm.max_children = 50)来配置。这三种孵化方式分别是:

  • 静态 static
  • 动态 dynamic
  • 按需 ondemand

下面就分别来讨论这三种方式。

阅读余文php-fpm 内存调优