一般来说测试磁盘的IO功能时都是用的:dd if=/dev/zero of=/root/zerofile bs=1M count=256
这样生成出来的文件大约是268M
为什么是/dev/zero,那是因为:/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。
当然dd还有另外一个参数:oflag=dsync
但是有人和我说:
Submitted by gouki on 2012, October 10, 9:50 PM
一般来说测试磁盘的IO功能时都是用的:dd if=/dev/zero of=/root/zerofile bs=1M count=256
这样生成出来的文件大约是268M
为什么是/dev/zero,那是因为:/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。
当然dd还有另外一个参数:oflag=dsync
但是有人和我说:
Submitted by gouki on 2012, October 10, 10:39 AM
之前有在自己博客上介绍怎么样安装PPTP的VPN,但很多人说l2tp其实更安全,所以在想办法升级到l2tp...
随便google了一下,结果文章倒是很多,但几乎都打不开,难道这已经是一个关键字了??
还好google 有cache,所以,打开cache看了一下,并且复制回来,等会我就试试:
第一部分:如何用 Debian / Ubuntu 服务器上架设 PPTP VPN服务器
如果你有一台linux主机,通过putty.exe 或苹果电脑的teminal用SSH登录到主机后要用文本编辑器,若是上传下载编辑好的配置文件就太麻烦了。 我先简单介绍一下VI编辑器的用法,学会VI了就不且上传下载编辑好的配置文件了:
vi /etc/ilovezola.conf 这是进入编辑ilovezola.conf的模式,然后hjkl四个键是方向键,分别是左下上右,按字母x可删除一个字符。按a进入插入模式,hjkl就 不能当方向键用了。退出插入模式按ESC键,保存文件输入命令冒号加字母:w 退出输入命令:q 退出并保存就是 :wq
有了这些基础就可以安装PPTP VPN服务器了。下面绿色的字就是可以复制到命令行里执行的,蓝色的字是需要你对比或复制到文件中的,懒人办事效率高,复制吧,不会错的。
先登录你的主机:
ssh root@114.114.114.114
vi /etc/apt/sources.list
然后删除所有deb前面的#号 ,你按照这里操作就行,我直接引用,这不算抄袭:
接着用下面的命令更新你的软件包数据库
apt-get update
现在我们可以正式安装VPN server了。这里我们选择pptp(vpn 协议的一种),因为简单,一条命令搞定。剩下的无非是一些配置。
apt-get install pptpd
pptpd安装完成后,编辑这个文件,
vi /etc/pptpd.conf
去掉下面两行的注释或者直接添加这两行(在文件的最后).这一步是配置ip地址的范围。
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
然后在编辑这个文件,
vi /etc/ppp/chap-secrets
在这个文件中添加vpn用户,按照下面的格式,每个用户一行。
username pptpd password *
为了让你的用户连上VPN后能够正常地解析域名,我们需要手动设置DNS. vi /etc/ppp/options,找到ms-dns这一项,设置你的DNS.这里我推荐的是Google 最近发布的Public DNS,原因是因为好记。
ms-dns 8.8.8.8
ms-dns 8.8.4.4
vi /etc/sysctl.conf文件,找到"net.ipv4.ip_forward=1"这一行,去掉前面的注释。
net.ipv4.ip_forward=1
运行下面的命令让配置生效。
sysctl -p
重启pptpd服务
/etc/init.d/pptpd restart
最后开启iptables转发
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
ok,安装完毕。
附:使用PPTP VPN的方法:
第二部分:如何用 Debian / Ubuntu 服务器安装成L2TP / IPSec VPN 服务器
Ubuntu 10.04 LTS(Lucid)自带的OpenSwan有NAT的BUG。10.10 openswan无此问题(但是10.10的xl2tpd有问题,不分配IP,需要手动指定,解决方案见下文,本文都是指使用Ubuntu 10.04 LTS)可以从OpenSWAN下载最新版本(2.6.24+)才可以。也可以使用非官方PPA源
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:openswan/ppa
sudo apt-get update
然后查查看是否是已经跟更新到最新
apt-cache policy openswan
openswan:
Installed: 1:2.6.23+dfsg-1ubuntu1
Candidate: 1:2.6.31-1xelerance1
Version table:
1:2.6.31-1xelerance1 0
500 http://ppa.launchpad.net/openswan/ppa/ubuntu/ lucid/main Packages
*** 1:2.6.23+dfsg-1ubuntu1 0
500 http://us.archive.ubuntu.com/ubuntu/ lucid/universe Packages
100 /var/lib/dpkg/status
可见源里面已经获得2.6.31+的版本
apt-get install openswan就可以可以开始配置了
安装的时候一律回车即可
vi /etc/ipsec.conf,改成这样:
version 2.0
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=off
protostack=netkey
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=YOUR.SERVER.IP.ADDRESS
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
vi /etc/ipsec.secrets,改成这样:
YOUR.SERVER.IP.ADDRESS %any: PSK "zhimakaimen"
(别忘了把红色的「YOUR.SERVER.IP.ADDRESS」这部分换成你的服务器的 IP 地址,把「zhimakaimen」部分换成随便一个字串,例如你喜欢的一句话如 ilovemoney,等等。)
运行以下命令,这下有点复杂了,前面的知识不够用了,继续补课,先
vi run.sh
然后复制下面的内容到run.sh并保存
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
然后
./run.sh 这样就执行上面的循环命令了。
检查一下 IPSec 能否正常工作:
sudo ipsec verify
如果在结果中看到「Opportunistic Encryption Support」被禁用(disable)了,没关系,其他项 OK 即可。
重启 openswan:
sudo /etc/init.d/ipsec restart
安装 L2TP。常用的 L2TP 后台软件包是 xl2tpd,它和 openswan 是同一帮人写的。
运行以下命令:
sudo aptitude install xl2tpd
vi /etc/xl2tpd/xl2tpd.conf,改成下面这样,或复制进去就好了
[global]
ipsec saref = yes
[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
;require chap = yes
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
这里要注意的是 ip range 一项里的 IP 地址不能和你正在用的 IP 地址重合,也不可与网络上的其他 IP 地址冲突。你照抄就不会错了。
安装 ppp。这是用来管理 VPN 用户的。
sudo aptitude install ppp
检查一下 /etc/ppp 目录里有没有 options.xl2tpd 这个文件,没有的话就建一个
vi /etc/ppp/options.xl2tpd
文件内容如下,把下面的内容复制进来 :
require-mschap-v2
ms-dns 208.67.222.222
ms-dns 208.67.220.220
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
注意 ms-dns 两行我填的是 OpenDNS。如果你想用其他的 DNS 服务器(例如谷歌的公共 DNS 8.8.8.8 8.8.4.4 ),请自行更换。
现在可以添加一个 VPN 用户了。用文字编辑器打开chap-secrets 文件
vi /etc/ppp/chap-secrets
# user server password ip
test l2tpd testpassword *
如果你之前设置过 PPTP VPN,chap-secrets 文件里可能已经有了其他用户的列表,如上面那个密码为gfw的fuck用户,就既可登录PPTP VPN,也可以登录l2tp的VPN,因为他的server没有指定为l2tp,而是用星号代替了。你只要把 test l2tpd testpassword * 这样加到后面即可。记得要有空格。
重启 xl2tpd
sudo /etc/init.d/xl2tpd restart
设置 iptables 的数据包转发,下面是两行命令哦:
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
因为某种原因,openswan 在服务器重启后无法正常自动,所以我们可以在 /etc/rc.local 文件里写入如下语句:
vi /etc/rc.local
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart
到这里,设置工作已经基本完成。你可以用 iPhone 或 iPad 试着连一下。记得在「Secret」中填入你在上述第三步里填的 zhimakaimen。
如果连接成功,上网也没问题的话,恭喜你,大功告成。我就是这么在linode的Ubuntu 10.04 LTS上搞定VPN的,我之前走了些弯路是因为openswan没安装到最新版,Apple4.us的文章提供的安装方法失败,还好有另一篇文章提供了安装openswan到最新版的方法。所以合并经验,让其他人少走弯路,可以节约学习的时间哦。
L2TP的VPN的使用方法:
我参考了以下文献,综合了一下,写出以上修正版,由于 Apple4.us 保留一切权利,所以我等他们通知我删除这篇派生的文章吧,因为他们仍然保留让我派生的权利,也保留不让我基于他们的文章派生作品的权利。
Submitted by gouki on 2012, October 8, 1:16 PM
由于VPS的空间比较小,所以。。。偷懒装了一个debian,其实还有更小的,但我想debian相对会较小一点。。
在执行一些命令的时候会报这种错误 :
这个问题其实很简单,摆明了就是没设置本地环境变量嘛,不过,我也没有设置lang为zh_CN呀。这年头,还是en_US比较安全吧。
在ubuntu下面,可以通过:apt-get install language-pack-en-base 来解决,但debian下没有这个命令,所以只能:
然后会出来一个界面,你在里面选择en_US.UTF-8,然后一切就都解决了。很方便
Submitted by gouki on 2012, October 3, 9:27 PM
以下的文字来自于网址:http://www.wutianqi.com/?p=3115,我和他一样,都遇到了类似的问题
上个月我的数据全没有了,所幸我真的只丢了一小部分数据。还能忍。但现在。。。我想自动化一点,这样或许会安全一点吧?
全文如下:
最近一直在考虑备份的问题,因为随着站越来越大,付出了两年的心血,如果真因为没有备份而导致数据丢失,那就真是欲哭无泪了,而对于那么多的站点及 数据,如果要时常备份,肯定会烦躁的,在网上找到了一个脚本,专门可以把VPS上的数据和数据库中的数据自动备份到dropbox中。
dropbox是什么?不解释,美丽的度娘,万能的谷哥,等着你去找他们。
脚本来至这个网站:http://davehope.co.uk/Blog/backup-your-linux-vps-to-dropbox/
XML/HTML代码
- #!/bin/bash
- DROPBOX_USER="Your Dropbox username" #dropbox账号
- DROPBOX_PASS="Your Dropbox password" #dropbox密码
- DROPBOX_DIR="Directory in your dropbox account to store the backups, e.g. /backups" #dropbox中存放备份的文件夹
- BACKUP_SRC="/home /var/www /var/git /etc /root" #VPS中需要备份的目录
- BACKUP_DST="/tmp" #备份存放的地方
- MYSQL_SERVER="127.0.0.1" #本地数据库服务器
- MYSQL_USER="root" #数据库用户名
- MYSQL_PASS="Your MySQL password" #数据库密码
- #下面的就不需要修改了
- #
- # Stop editing here.
- NOW=$(date +"%Y.%m.%d")
- DESTFILE="$BACKUP_DST/$NOW.tgz"
- #
- # Upload a file to Dropbox.
- # $1 = Source file
- # $2 = Destination file.
- function dropboxUpload
- {
- #
- # Code based on DropBox Uploader 0.6 from http://www.andreafabrizi.it/?dropbox_uploader
- LOGIN_URL="https://www.dropbox.com/login"
- HOME_URL="https://www.dropbox.com/home"
- UPLOAD_URL="https://dl-web.dropbox.com/upload"
- COOKIE_FILE="/tmp/du_cookie_$RANDOM"
- RESPONSE_FILE="/tmp/du_resp_$RANDOM"
- UPLOAD_FILE=$1
- DEST_FOLDER=$2
- # Login
- echo -ne " > Logging in..."
- curl -s -i -c $COOKIE_FILE -o $RESPONSE_FILE --data "login_email=$DROPBOX_USER&login_password=$DROPBOX_PASS&t=$TOKEN" "$LOGIN_URL"
- grep "location: /home" $RESPONSE_FILE > /dev/null
- if [ $? -ne 0 ]; then
- echo -e " Failed!"
- rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
- exit 1
- else
- echo -e " OK"
- fi
- # Load home page
- echo -ne " > Loading Home..."
- curl -s -i -b "$COOKIE_FILE" -o "$RESPONSE_FILE" "$HOME_URL"
- if [ $? -ne 0 ]; then
- echo -e " Failed!"
- rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
- exit 1
- else
- echo -e " OK"
- fi
- # Get token
- TOKEN=$(cat "$RESPONSE_FILE" | tr -d '\n' | sed 's/.*<form action="https:\/\/dl-web.dropbox.com\/upload"[^>]*>\s*<input type="hidden" name="t" value="\([a-z 0-9]*\)".*/\1/')
- # Upload file
- echo -ne " > Uploading '$UPLOAD_FILE' to 'DROPBOX$DEST_FOLDER/'..."
- curl -s -i -b $COOKIE_FILE -o $RESPONSE_FILE -F "plain=yes" -F "dest=$DEST_FOLDER" -F "t=$TOKEN" -F "file=@$UPLOAD_FILE" "$UPLOAD_URL"
- grep "HTTP/1.1 302 FOUND" "$RESPONSE_FILE" > /dev/null
- if [ $? -ne 0 ]; then
- echo -e " Failed!"
- rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
- exit 1
- else
- echo -e " OK"
- rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
- fi
- }
- # Backup files.
- mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --all-databases > "$NOW-Databases.sql"
- tar cfz "$DESTFILE" $BACKUP_SRC "$NOW-Databases.sql"
- dropboxUpload "$DESTFILE" "$DROPBOX_DIR"
- rm -f "$NOW-Databases.sql" "$DESTFILE"
代码只需要在几个地方修改,已在上面的代码中注释出来。
直接:
XML/HTML代码
- #随便找个地方,存放backup.sh,比如我:
- #cd /home/wwwroot/到这里来放置这个shell script
- vi backup.sh
- #粘贴上代码后
- chmod +x backup.sh
- #因为授予了权限,所以直接运行即可:
- ./backup.sh
- #接着设置定时任务,可以man crontab自己看看具体用法
- $ crontab -e
- # m h dom mon dow command
- #这里分别对应minute hour 'day of month' month 'day of week'
- #下面这行,意思就是每月第一天备份
- 0 0 1 * * /bin/bash /home/wwwroot/backup.sh
OK,玩网站,就一句话,勤备份,靠别人不如靠自己,要想玩得好,首先要勤劳!
---EOF---
其实类似的软件很多,比如 还有google drive,而且相应的工具也已经有了,当然你甚至可以搞一台VPS来做双机互备,rsync,多方便啊。
Submitted by gouki on 2012, August 22, 10:21 PM
一般 来说,我们如果需要在Unix/Linux下,让某个程序后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:/usr/local/mysql/bin/mysqld_safe –user=mysql & ,不过并非每个程序都能够象mysqld一样可以做成守护进程。也许它只是普通程序而已,这时候即使用 & 结尾,如果终端关闭,那么程序也会被关闭。但为了能后台运行,就不得不使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:nohup /root/start.sh &
在shell中回车后提示:[~]$ appending output to nohup.out
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。这是因为,程序在提示了nohup成功后还需要按终端上键盘任意键退回到shell输 入命令窗口,然后通过在shell中输入exit来退出终端;如果你在nohup执行成功后直接点关闭程序按钮关闭终端。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。
nohup语法
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
nohup命令及其输出文件
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
该命令的一般形式为:nohup command &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。