作者归档:Ferrets

有用的Screen(在ssh、telnet断开之后继续执行程序)

摘录自http://blog.csdn.net/wind19/article/details/4986458

原文中还提到了使用nohup的方法,不过我觉得还是screen比较方便,就剪掉了nohup的部分,想看的话点连接过去看。

开始使用Screen

简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话 中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样 几种方式:

1.直接在命令行键入screen命令[root@tivf06 ~]# screen

Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。

2.Screen命令后跟你要执行的程序。[root@tivf06 ~]# screen vi test.c

Screen创建一个执行vi test.c的单窗口会话,退出vi将退出该窗口/会话。

3.以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c ,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。

screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/abc文件:[root@tivf06 ~]# screen vi /tmp/abc

之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d (直接断开连接也可以的),Screen会给出detached提示:
暂时中断会话

半个小时之后回来了,找到该screen会话:[root@tivf06 ~]# screen -ls There is a screen on: 16582.pts-1.tivf06 (Detached) 1 Socket in /tmp/screens/S-root.

重新连接会话:[root@tivf06 ~]# screen -r 16582

看看出现什么了,太棒了,一切都在。继续干吧。

你可能注意到给screen发送命令使用了特殊的键组合C-a。这是因为我们在键盘上键入的信息是直接发送给当前screen窗口,必须用其他方式 向screen窗口管理器发出命令,默认情况下,screen接收以C-a开始的命令。这种命令形式在screen中叫做键绑定(key binding),C-a叫做命令字符(command character)。

可以通过C-a ? 来查看所有的键绑定,常用的键绑定有:C-a ? 显示所有键绑定信息
C-a w 显示所有窗口列表
C-a C-a 切换到之前显示的窗口
C-a c 创建一个新的运行shell的窗口并切换到该窗口
C-a n 切换到下一个窗口
C-a p 切换到前一个窗口(与C-a n相对)
C-a 0..9 切换到窗口0..9
C-a a 发送 C-a到当前窗口
C-a d 暂时断开screen会话
C-a k 杀掉当前窗口
C-a [ 进入拷贝/回滚模式

继续阅读

家里猫烧了,换了个华为的MT800,又有的玩了

嗯,这猫功能比以前的那只多太多了(问题也多了好多!)。

最开始的时候,因为防火墙而导致只能直接连电脑,经一层modem之后就马上出问题,而且是稳定的30%丢包,折腾了我好几天。总怀疑是华为做的手脚,比如说华为的路由加其它交换机就会有问题什么的……

接着,折腾了一下子之后发现有大量的安全设置,包括在ppp口上阻挡80,21,23口等,我就心想,我擦嘞,居然这么淫荡,在这里动手脚,于是马上全部关掉,又慢慢看其他页面。

接着就顺手关掉了防火墙,然后突然一下子,丢包什么的好了,网络也通畅了,马上收到一大堆push通知。一阵神清气爽。原来一直是这个问题。因为下面带了几台电脑,于是连接数,ICMP连接,半开连接什么的都超了,所以被ban,关掉之后好了。

又继续研究,发现这个MT800居然还有telnet控制台,太神奇了。不过进去以后和之前在学校里面摸到的那些路由的系统不一样,开始还以为是限制了,后来才发现是系统不一样,差别有点大,厂家还是老老实实的给了root权限。不过看到了很多相似之处。于是又猛的一阵研究,折腾到两点多,才睡去了。

擦,TTL小板烧了

今天在折腾旧的那个RG100A的时候,总是能看到输出而没法往里面打字,稍微一心急,将Rx跟Tx反接了一下,没看到任何输出。正摆弄着,突然就告诉我说没法从COM口读取数据,我就觉得奇怪了,当时没多想,以为是USB接松了,可是我再插拔小板的时候突然发现很烫,再插拔也没有反应,心想,凉了,这回麻烦。

再插拔很多次之后还是没反应,于是果断重新买了一块。

lighttpd下的域名跳转

嗯,因为之前用的是花生壳的那个免费域名 ferrets.imblog.in,结果被K了,导致google不显示搜索结果,于是不得不老老实实在godaddy买了个域名,换了过来。

可是我又想让旧的网址能继续访问,于是上网搜了一下相关的资料。

参考:http://www.5558.biz/a/jianzhanjishu/tuwenjiaocheng/lighttpd-rules.html 

详细的配置方法如下:

$HTTP["host"] == "ferrets.imblog.in" {
server.name = "ferrets.imblog.in"
url.redirect = (
 "^/(.*)" => "http://ferrets.in/$1"
 )
ssl.engine = "disable"
}

这样之后,访问ferrets.imblog.in的时候就会自动跳到ferrets.in了。

使用mysqldump自动备份数据库

很久以前就开始喜欢使用自动任务来做写备份的工作。管理着的一台服务器上的论坛也是使用着mysqldump来备份,每天一次,另外再每周一次。

昨天刚把自家的博客也给加上自动备份,嗯。

用法是

mysqldump -uUserName -pPassword DataBaseName > FileName.sql

嗯,值得注意的是-p和password之间并没有空格……不然就会不认密码,这点比较奇怪。

cron的用法参考之前的文章

给博客加上了回复的邮件提醒

这个东西感觉非常的重要啊(知道就别在开博之后半年才弄啊混蛋!),没有提醒什么的话,我是很难发现自己评论被回复了,稍微还位思考一下,还是弄上去一个吧。

稍微上网找了一下,有相当数量的插件可以实现这功能。虽然wordpress也有自带的,可是自带的需要在wordpress.com注册过服务(不是用户名和密码的那种,而是让你确定你这个邮箱地址将会关注那个博客,并且确认接收来自wordpress.com的邮件提醒。)这是个大问题,在中国,wordpress.com可是被墙掉的,要确认一次,还需要翻一次墙,太不方便了,而且很容易因为这样的障碍而令到读者失去耐心,放弃邮件提醒。

可是很微妙的是,各种博客上提到的那写插件我都不能找到,wp thread comment什么的,ReplyMe什么的,都找不到(很可能是wordpress的搜索功能太渣了,我试过其中一个插件,直接搜名字搜不到,搜作者的话搜出来了。),让我一阵纠结。

也试过mail to commmenter,这个插件倒是搜得到,不过有点旧了,而且问题也不少。虽然说,似乎改一下header的话是可以发送,但是在实际测试中还是没有反应。

最后现在使用的是Comment Reply Notification,嗯,设置不怎么麻烦,最重要的是,确实有效。

不过现在wordpress自带的那个邮件提醒有点碍眼呐,琢磨琢磨怎么去掉就好了。

lighttpd上vhosts的SSL

之前因为没怎么弄懂这个,于是总是没法再vhosts启用独立的证书,导致一直都只能有一个使用https链接,今天因为刚买了一个域名,于是将全部的vhosts都改了一下,终于弄懂是怎么回事。

官方文档一堆一堆的英文真是看得我头痛呢, 后来折腾的时候终于弄懂它说的是什么意思……

首先,你需要一个这样的设定

$SERVER["socket"] == ":443" {
server.document-root = "/www/site"
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd.keys/cert.pem"
}

当你需要在vhosts上使用的时候,你需要这样写

$SERVER["socket"] == ":443" {
    ssl.engine = "enable"
    ssl.pemfile = "/path/to/cert.pem"

    $HTTP["host"] == "host1.com" {
    #some server setting
    )
    }
    $HTTP["host"] == "server2.com" {
    #some server setting
    }
}

然后,在另外的vhosts的设定里面加上

ssl.pemfile = "/etc/lighttpd/keys/certs.pem"

这样就可以覆盖掉证书的默认值从而使用不同的证书。

启用了Nginx作Luci的SSL前台

最近自己重新做固件嗯,因为某些癖好(算是吧,因为太钟爱于https了),一直在启用luci的https,可是不知道为什么,uhttpd的TLS插件无法启用,于是蛋疼了,我擦嘞,不了个是吧,不带这样玩啊…

于是只能启用不安全的uhttpd,让我一阵纠结,心里总是没有安全感…

一晃打开了transmission-web,突然想起了以前看到过的一个老外写的blog,说想远程管理transmission,但是transmission又没有密码保护(现在的版本好像有了),于是就用个nginx做前端,加上密码认证,就可以避免别人过来搞东搞西了。

这给了我启发,为什么不用nginx做SSL的前端呢?效果是一样的啊,顺带transmission的远端管理也可以做了,一举双得。

于是我动手了

首先是重新编译了一次nginx,因为官方编译的nginx没有包含ssl支持

然后启动了普通版的uhttpd,开始监听之后,修改nginx的配置,打开ssl支持,加上证书个密钥(因为用的是以前的证书,所以不用重新签),再写个proxy_pass(这个似乎有点问题,如果写到了location /path/ 中之后出现了问题,似乎是东西显示不完全,格式有点乱,后来写到 location / 中就没有问题了)

顺便把transmission的web管理加上,reload一次之后就完全没问题了。除了载入速度略有下降(transmission的web管理速度慢了稍微有点多)

附上一下配置文件

server {
listen 443;
server_name Router;

charset utf8;

ssl on;
ssl_certificate /etc/ssl/CA/keys/luci_school.crt;
ssl_certificate_key /etc/ssl/CA/keys/luci.key;

ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_pass ;
proxy_redirect default;
}
location /transmission {
proxy_pass ;
proxy_redirect default;
}
}

在搭建vpn的时候都是需要写iptables的

嗯,刚把openvpn给弄了出来,本来打算直接连上vps,然后写上路由表,结果没想到意外的麻烦,因为iptables的转发没有写好,结果只能ping到服务器,转发都转不出去,最后前思后想,觉得是这个iptables的问题,稍微翻一下以前的资料,找到了相关的内容。

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.9.0/24 -j MASQUERADE

像上面一样的命令,只要是搭建了vpn的话,就必须写这个(似乎openwrt不用,只要直接把新建的tun/tap接口加到lan里面,openwrt的firewall就会自动处理转发,真不愧是专门的路由系统啊),不然的话会不处理转发。

如果iptables里面的FORWARD默认处理时DROP或者REJECT的话,还要加上额外的允许

iptables -A FORWARD -s 192.168.9.0/24 -j ACCEPT

之前的真是折腾啊

自己重新做了个固件,刷上之后发现终于能看到中文了

这个缺陷的话其实是busybox弄出来的,之前的版本还是支持的,后来就突然看不到了,全部变成了“?”,看得我略纠结。

之后自己做过两个固件,在busybox的选项里面有补丁的支持,可以支持更多的字符,结果后来自己再做的时候,还是看不见中文,变成了一个“˿”

我就纠结了,我擦嘞,怎么变成这个样子……

最后觉得可能是支持的问题,支持的字符数本来就不足,于是稍微一狠心,将767改了,改成了126735(真的变大了很多啊),结果就成功了。

Busybox编译截图

Busybox编译截图

 

或许支持的字符少一点可以减少busybox的体积,但是支持性实在不好啊