0%

前天随意点开博客园,看到了一篇关于tmux的文章 Tmux - Linux从业者必备利器,特意还点进去看了。毕竟Linux对于做游戏服务端开发的我来说,太熟悉不过了。不过我就粗略地看了一眼,就关掉了。直到第二天码农周刊就推荐了这篇文章,才引起我真正的关注。tmux真的那么好用吗?所以我自己也倒腾来一遍,的确在许多场景下还是非常有用的。如:

  • 做服务器的,肯定需要关注性能的,而tmux多个pane可以很方便同时关注多项性能指标;
  • 我们的游戏服刚好有多个服务存在,而联调多个服务的时候,可以同时看到多个控制台确实很方便。

以上并不是其它方式不可以,譬如我用xshell的,同时看多个xshell可以达到相同的效果。但切换的时候还是有些不方便。 因为环境不同,原作者用Mac,而我用CentOS,有些地方存在不一样,故记载方便自己以后查阅。

CentOS下安装

首先我是用yum install tmux尝试安装的。估计没有源,没有找到tmux。所以习惯性直接找源代码安装。
但是其中有依赖,需要先安装libevent

wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar xzvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure && make
make install

然后再下载源码安装tmux

git clone git://git.code.sf.net/p/tmux/tmux-code tmux
cd tmux
sh autogen.sh
./configure && make
make install

过程中遇到了两个报错,解决都比较简单,当然是查阅资料后。

问题1:

期间我遇到了执行autogen.sh 报错,原因是我没有安装automake。这个直接yum install automake就简单解决了。

问题2:

执行的时候遇到

libevent-2.0.so.5: cannot open shared object file: No such file or directory

的报错,解决办法也比较简单,既然找不到,那就换个找得到的地方呗。

ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5     # 32位系统
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5   # 64位系统

使用和快捷键

直接在命令行输入tmux即可进入tmux的模式。

tmux主要有windows窗体操作和Pane操作,个人觉得windows对于我来说,意义不大(并不是说windows模式没适用场景),所以这里主要讲下Pane的相关操作。

快捷键

tmux的快捷键都要先按C-b(Ctrl-b)。然后再按下面表格内容,才能达到相应的效果。

session和其他相关快捷键

快捷键 功能
C-z 关闭tmux.
: 进入tmux命令行模式.
? 列出所有快捷键.
t 显示时间.
d 退出当前tmux客户端,tmux后台运行.
   | 

$ | 重命名当前session.
s | 切换session 显示所有session并切换到某一个session.
( | 切换session 切换到上一个session.
) | 切换session 切换到下一个session.
L | 切换session 到前一个活跃的session.

window相关快捷键

快捷键 功能
c 新增一个window.
& 退出当前window.
, 重命名当前window.
l 跳转到上一个所在window.
    | 

i | 显示当前window的信息.
w | 切换window 显示所有window并切换window.
0 to 9 | 切换window 到相应编号的window.
p | 切换window 上一个window.
n | 切换window 下一个window.
’ | 切换window 到输入编号的window.
f | 切换window 到搜索到的window.
Space | 改变当前window下的pane布局.

pane相关快捷键

快捷键 功能
! 从window移除当前pane.
将当前pane变成上下两个pane.
% 将当前pane变成左右两个pane.
x 关闭当前pane.
q 显示pane的索引.
z 最大化或者恢复当前pane.
{ 跟前一个pane交换位置.
} 跟后一个pane交换位置.
o 切换Pane 到下一个pane.
; 切换Pane 进入到前一个操作过的pane.
Up, Down Left, Right 切换Pane 使用方向键切换到相应方向的pane.

可能有些快捷键有些出入,可以的话提醒下。另外有些快捷键没有搞懂,而且快捷键比较多,个人觉得记得主要的几个切换快捷键就足够用来。比较tmux只是一个协助工具,没有必要在其上面那么用心。加粗的是个人觉得比较实用的。

tmux不中断session的模式确实很666666,每次连回去就可以快速接上上次结束的环境。而且多个pane也非常适合要开启并监控多个服务的情况。

多个pane例子

参考资料

  1. http://cenalulu.github.io/linux/tmux/
  2. http://elroyjetson.org/dev-notes/centos/installing-tmux-on-centos-6-2
  3. http://www.nigeldunn.com/2011/12/11/libevent-2-0-so-5-cannot-open-shared-object-file-no-such-file-or-directory/

背景

在某一天重启了虚拟机的 linux 之后,我的 windows 在连接上 samba 之后,点击某些文件夹的时候,会出现没有权限打开的情况。这问题折腾了我一度重新配置了好几次 samba 的配置,然而无果。

解决

经过搜索,发现有两个办法可以解决samba的某些文件夹无法访问的问题。

  • 方法一 修改文件和文件夹的安全策略;
  • 方法二 关闭 selinux

第一种方法并不合适,只是临时解决的一种方案。因为在 windows 下新建了一个 linux 文件夹之后,下一次重启了 linux ,新的文件夹又无法访问了。麻烦。第二种方法就简单了,一劳永逸。

虽然网上又说关闭 selinux 会有安全问题。然而只是我虚拟机的 linux 开发机而已,并不是生产环境,没有太高的安全问题。

方法一 修改安全策略

 chcon -t samba_share_t share

chcon 可以修改文件的安全上下文。重置windows建立的文件、文件夹的安全信息。也可以解决,但是比较麻烦,不方便。

方法二 关闭 selinux

永久关闭

修改 /etc/selinux/config 文件,设置

SELINUX=disabled

然后重启linux。

临时关闭

使用 setenforce 命令可以修改 selinux 模式。

  • setenforce 1 设置 selinuxenforcing 模式;
  • setenforce 0 设置 selinuxpermissive 模式。

其它方案

https://wiki.centos.org/zh/HowTos/SetUpSamba 有相当详细的解释和解决办法。有时间折腾的可以看看。

以上。

管理属性变量的命令

svn客户端有个属性ignore 用于保存忽略的文件或者目录。除此之外,svn其实有好多属性变量用来自定义,如在windows下svn客户端里面属性截图:
windows svn

但是在linux 下,不可像windows那样有可视化界面进行管理。
执行svn help 命令可以知道有五个命令用于管理svn 属性变量。

propdel (pdel, pd)                # 删除属性
propedit (pedit, pe)              # 编辑属性
propget (pget, pg)                # 获取属性的值
proplist (plist, pl)              # 列出所有的属性
propset (pset, ps)                # 设置属性的值

那么有这几个命令,想要编辑svn:ignore 变量还不轻而易举。

方法1:

首先要给SVN指定默认的编辑器,如下。当然改成其它编辑器也可以。

  • export SVN_EDITOR=/usr/bin/vim 已经设置的话,可以忽略这一步
  • svn propedit svn:ignore [目录]

然后可以在vim编辑器中写上需要过滤的目录或者文件。换行隔开,据说空格也可以,但是我没有试过。

方法2:

除了propedit可以设置,当然propset 也可以设置。
svn propset
图片表示将pet目录下的xg_pet.erl文件加入到忽略列表。

属性变量文件

在当前目录,有一个.svn 目录。当有属性变量的时候,.svn目录会生成一个dir-props文件用来保存属性变量,如下:
svn properties file

查看状态

另外说一个linux下很常用的命令。相当于windows下commit的时候出现的文件列表。而linux下需要用svn status来查看。
svn status/svn st/svn stat

延伸一下,下面两个命令:

  • svn st | grep ^? | sed 's/? //' | xargs svn add 增加尚未增加到svn的文件
  • svn st | grep ^! | sed 's/! //' | xargs svn rm 删除svn里面已经不存在的文件(本地尚存)

当然避免误操作,我经常先执行svn st | grep ^? | sed 's/? //' 先确认下文件列表。
svn skill

一、添加RSS

博客来说,RSS的重要性可想而知。

1. 安装hexo rss插件

hexo提供了生成RSS xml的插件hexo-generator-feed,执行npm install hexo-generator-feed即可。

2. 配置

编辑blog/_config.yml文件。在里面添加查看配置,如下

plugins: 
  hexo-generator-feed

还要修改主题的配置文件blog/theme/_config.yml。在rss里面配置rss: /atom.xml。在菜单里面添加RSS菜单。

menu: 
  Home: / 
  Archives: /archives 
  Rss: /atom.xml

二、添加sitemap

当关注seo的时候,sitemap也同样重要。

1. 安装hexo sitemap插件

同样,执行命令npm install hexo-generator-sitemap即可完成插件的安装。

2. 配置

一样修改blog/_config.yml文件,添加上插件名称

plugins: 
  hexo-generator-feed
  hexo-generator-sitemap 
  

三、其它

其实两个插件是在hexo g的时候生成atom.xml 文件和sitemap.xml 文件。由于sitemap.xml 是对搜索引擎服务的,所以不需要显示在博客里面。而Rss是要给读者收藏的,需要在菜单里面添加显示。当然你不喜欢在菜单里面显示可以直接修改模板显示在你喜欢的地方。如编辑blog/theme/[light]/layout/_partial/header.ejs文件:

<ul>
<% for (var i in theme.menu){ %>
  <li><a href="<%- theme.menu[i] %>"><%= i %></a></li>
<% } %>
<li><a href="/atom.xml">RSS</a></li>
</ul>

可以不配置menu达到相同的效果。

一、安装 Node.js

在官网 http://nodejs.org/ 下载winwos版本,点击安装完成即可。

二、git环境安装

对于git的安装,网上已经大量资料,就不赘述了。

三、安装 hexo

启动cmd,输入命令npm install hexo-cli -g 即可完成hexo的安装。

四、初始化博客

随便找一个目录。在cmd里面执行命令hexo init blog (blog为文件夹名称,与github的项目名称一致)。
cd blog进入目录。执行hexo ghexo s就可以生成静态html文件和启动一个http服务器。
按照提示,访问 http://127.0.0.1:4000/ 就可以看到一个博客网站了。

hexo init blog
hexo generate     # hexo g
hexo server       # hexo s

五、配置和发布到github

编辑 _config.yml 文件。在deploy字段配置以下内容

deploy:
  type: git
  repo: git@github.com:rondsny/rondsny.github.com.git

git@github.com:rondsny/blog.git 是在github上面托管博客的项目地址。譬如我的github 是http://github.com/rondsny/ 然后我建立用于托管的项目是rondsny.github.com

执行命令 hexo deployhexo d 就可以将博客发布到github上面。

访问 http://rondsny.github.io/ 就可以看到效果了。