php 网站搬家

#
# 原服务器
#
tar -cvf /home/wwwroot/lellansin.com    # 网站打包
mysqldump -u 用户名 -p 数据库 > 数据库.sql # mysql 数据备份
mv 文件 /home/wwwroot/lellansin.com/secret/

#
# 新服务器
#
wget http://lellansin.com/secret/文件  # 直接通过 http 在服务端下载
mysql -u root -p                       # 输入密码后进入 mysql 客户端
CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci; # 创建一个名为 mydb 的数据库
exit                                   # 退出 mysql
mysql -u 用户名 -p 数据库 < 数据库.sql # mysql 数据导入
tar -zxvf lellansin.com.tar.gz         # 解压网站之后移动到相应目录

# 如果担心时间比较久可以使用 nohup 命令, 例如
nohup tar -zxvf lellansin.com.tar.gz &

/home/wwwroot/lellansin.com/secret/ 中的 secret 是你自己定义的一个目录名称,可以把打包好的文件放在此处,让新服务器可以通过 wget 命令来直接下载,这样的好处是不用费时费力去搞 ftp。也不用蛋疼的先把备份下载到本地然后再上传到新服务器。(博主的两台服务器都在美国,试了一下,发现美国的下载速度果然非常快,峰值可以到 4M/s 平均快到 2M/s 了)

一般的 ssh 都有超时时间,如果担心命令执行时间过长导致 session 超时然后命令不得不被迫中断的话,可以使用 nohup 命令,该命令可以使得执行的命令脱离终端,即使关掉 ssh 客户端,服务器上依旧能继续执行。

要测试网站是否成功搬好,并且’无痛’搬家的话可以考虑使用本地解析, 通过修改 C:WindowsSystem32driversetchosts 文件来实现,添加:

// 形如
xxx.xx.xx.xxx    你的域名
// 例如
192.157.208.25   lellansin.com

在 hosts 文件中添加记录之后,那么本地就会解析域名到新服务器的地址。这个时候再用浏览器使用该域名访问的就是新服务器上的网站了。你可以看看新服务器上的网站是否有问题,没问题的话,就可以上域名服务商的网站修改域名解析了。

OpenWRT 编译 error GNU libiconv not in use but included iconv.h is from libiconv

编译的时候碰到一个常见的错误,但是却在一个陌生的地方爆出来:

gconvert.c:55:2: error: #error GNU libiconv not in use but included iconv.h is from libiconv

google 了一下资料还挺多,总之就是没搜到 OpenWRT 相关的,于是各种想法都有。后来才发现确实是自己不注意被绕进去了。其实依旧是用很常规的手段解决,

cd /home/lellansin/OpenWRT/svn/trunk/build_dir/host/pkg-config-0.28/glib
./configure --enable-iconv=no --with-libiconv=gnu
make
cd /home/lellansin/OpenWRT/svn/trunk/
make # 继续编译 OpenWRT

开始一下没绕过来,因为在 trunk 目录下没有 configure 文件。纠结了半天,还试过删除自带的 iconv 等等各种黑操作,最后想,这 gconvert.o 编译不出来。咱去下载一个编译成功后拷贝过来就是。想到这里才突然意识到 OpenWRT 里面应该是有源码的,然后找过去果然找到了 glib 的 configure。

总结:以后编译大一点项目报错,第一时间先跑去看报错子项的 configure

DB120-B1 OpenWRT 刷机记录

网上搜些资料, 不少我辈同胞直接把路由器刷成了砖头, 第一次干这事也有些忐忑, 直接就是用网线刷的, 没有使用 usb-ttl, 结果没想到就刷了两次就成功了.

准备工作

刷机步骤

  • 1. 设置自己的 ip 地址为 192.168.1.10 (同网段也可以)
  • 2. 打开 cmd, 直接命令 ping 192.168.1.1 -t
  • 3. 关闭路由的电源, 用牙签先顶住RST键, 然后打开电源 (切勿松开RST), 持续按住20秒钟 (DB120红色电源灯常亮). 当 cmd 上可以 ping 通的时候便松开RST键
  • 4. 打开浏览器访问 http://192.168.1.1, 界面如下

1

选择开始下载的固件, 上传成功之后会跳转到如下界面.

2

大概等待 2分钟之后当 cmd 上的 log 告诉你可以 ping 通的时候便意味着已经刷机成功.

可以访问 http://192.168.1.1 查看

3

默认账户 root 密码 admin

此时也可以使用 putty 远程登录了.

4

centos 安装 vsftp

# 使用yum安装
yum -y install vsftpd
# 查看版本
rpm  -qa | grep vsftpd
# 启动服务
service vsftpd start

# 添加 ftp 账号
adduser -g ftp -s /sbin/nologin -d /home/wwwroot/lellansin.com lellansin
# 为账号设置密码
passwd lellansin
# 设置网站目录所有者(这样ftp账号才能有权限修改这上面的文件)
chown –R lellansin /home/wwwroot/lellansin.com
# 设置目录权限(根据各自需要设置吧)
chmod -R 765 /home/wwwroot/lellansin.com

CentOS 升级 python2.7

CentOS 很多自带的Python版本是2.4.3,但是目前许多基于Python的应用软件要求的Python版本应要高于2.4(如iotop、nodejs等要求Python版本至少是2.6以上)

wget -c http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
tar jxvf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure 
make && make install

自此,python2.7安装后路径默认是在/usr/local/lib/python2.7

#查看Python版本:
/usr/local/bin/python2.7 -V

建立软连接,使系统默认的python指向python2.7

mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python2.7 /usr/bin/python
#检验python指向是否成功
python -V  #查看默认python版本

由于yum是基于python2.4.3工作,这里要重新yum的调用

#vi /usr/bin/yum

将第一行显示的 “#/usr/bin/python” 修改为 “#/usr/bin/python2.4” 保存即可。

gcc 基础用法

用法

gcc 文件名 选项

文件可以是多个, 选项也可以是多个。
通常linux下,我们建议使用vim来编写代码:vim 基础教程

hello.c

#include <stdio.h>
#define N 10
int main()
{
    printf("hello world, the number is %dn", N);
}

简单示例

预处理+编译+链接 一步到位

gcc hello.c

如果没有报错, 那么会默认生成一个 a.out 的可执行文件

# 执行这个可执行文件
./a.out
hello world

编译选项 -c

可以通过 gcc 去编译这个文件

gcc hello.c -c

如果没有出现报错, 那么默认清情况下会生成一个 hello.o
接下来我们可以去链接这个对象文件

链接选项 -o

gcc hello.o -o hello

-o 之后跟随的 hello 则指明了链接生成的可执行文件的名称

./hello
hello world

运行程序看到输出

预处理选项 -E

gcc hello.c -E

此时屏幕上会输出预处理之后的文件,N 已经被替换成了10
不过这个命令通常是导出文件来查看

gcc hello.c -E > log.txt

常用选项

-v 打印较多信息,显示编译器调用的程序。
-### 与 -v 类似,但选项被引号括住,并且不执行命令。
-o 预处理+编译+汇编+链接 –> 到可执行文件
-c 预处理+编译+汇编 –> 到对象文件
-S 预处理+编译 –> 到汇编代码
-E 预处理 –> 显示预处理后的文件
-C 告诉预处理器不要丢弃注释。配合’-E’使用。
-w 禁止显示所有警告信息。
-Wall 会提示更多的警告选项,建议编译时加此选项。
-O0 禁止编译器进行优化。默认为此项。
-O1 尝试优化编译时间和可执行文件大小。
-O2 会尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法。
-O3 在 -O2 的基础上再打开一些优化选项
-Os 优化生成文件大小。会打开 -O2 除了会增加文件大小的全部选项。

vim 基础教程

两种模式

1.命令模式
2.编辑模式

按Esc可以切换到命令模式

上手示例

#调用vim编辑hello.c(文件可以是不存在的)
vim hello.c
#进入后默认是命令模式, 输入i进入编辑模式
i
#编辑结束后, 按Esc切换回命令模式
Esc
#保存
:w
#退出
:q

切换编辑模式

命令模式下,只有切换到编辑模式才能开始编辑文本

i 当前位置 (常用)
shift + i(左右方向键+i) 当行第一格
a 当前下一格 (常用)
shift + a(左右方向键+a) 当行最后一格
o 新起下一行 (常用)
shift + o 新起上一行
r 只能编辑当前一格字符
shift + r 当前位置insert模式

文件操作

:r [filename] 从当前光标处当前,读入另一个filename的数据
:w [filename] 另存为filename
:w 保存当前文件 (常用)
:w! 若文件属性为只读时,强制写入该档案(具体还看权限)
:q 离开 (常用)
:q! 不保存离开 (常用)
:wq 保存后离开 (常用)
:wq! 强制储存后离开
ZZ 若未更改,不储存离开,若有更改,则储存后离开

常见配置与操作

:set nu 显示行号(临时)
:set nonu 取消行号(临时)
:! command 执行shell命令command

例如:

:! ls -l
#跳出vim显示
[已修改但尚未保存]
总计 1
-rwxrwxrwx 1 root root  72 04-20 12:32 test2.c
-rwxrwxrwx 1 root root 433 04-20 12:52 test.c

请按 ENTER 或其它命令继续

基本编辑

yy 复制当前行 (常用)
dd 删除(剪切)当前行 (常用)
cc 删除当前行,并切换编辑模式
x 删除下一个(delelte)
shift + x 回删上一个(Backspace)(常用)
p 粘贴到下一行 (常用)
shift + p 粘贴到上一行
u 撤销 (常用)
ctrl+r 重做 (常用)
y+$ 复制当前到行结尾
d+$ 删除当前到行结尾
c+$ 删除当前到行结尾,并切换编辑模式
y+0 复制当前到行开头
d+0 删除当前到行开头
c+0 删除当前到行开头,并切换编辑模式
shift + j 合并下一行

光标移动

hjkl 左下右上
8 l 右移8格,其他类似
5 j 下移5行,其他类似
0 相当于[Home] 移动到行首 (常用)
$ 相当于[End] 移动到行尾 (正则中$是结尾)(常用)
gg 移动到第一行第一格 (常用)
20 gg 移动到第20行 (常用)
:20 移动到第20行 (常用)
shift + g 文件最后一行最后一格 (常用)
shift + h 屏幕【首行】第一格,Header缩写
shift + m 屏幕【中夬】第一格,Middle缩写
shift + l 屏幕【末行】第一格,Last缩写
Ctrl + f 屏幕『向下』翻页,相当于 [Page Down] (常用)
Ctrl + b 屏幕『向上』翻页,相当于 [Page Up] (常用)
Ctrl + d 屏幕『向下』翻半页
Ctrl + u 屏幕『向上』翻半页
Ctrl + e 屏幕『向下』移一行(常用)
Ctrl + y 屏幕『向上』移一行(常用)

光标选中

v 选择
V 行选择
Ctrl + v 区块选择,可竖向选择
y 选中部分复制
d 选中部分删除
p 选中部分粘贴

查找

/string 向光标之下寻找一个名称为string字符串
n 下一个元素,next缩写
shift+next 上一个元素

替换

:5,10 s/hello/test/g 第5行到第10行查找(search)”hello”并替换成”test”,最后go!
:1,$ s/hello/test/g 全文件(第1到最后)查找(search)”hello”并替换成”test” (常用)
:1,$ s/hello/test/gc 替换前显示让用户确认 (confirm) 是否需要替换(常用)