https://wiki.ubuntu.org.cn/api.php?action=feedcontributions&user=Lavande&feedformat=atom
Ubuntu中文 - 用户贡献 [zh-hans]
2024-03-28T14:20:31Z
用户贡献
MediaWiki 1.26.3
https://wiki.ubuntu.org.cn/index.php?title=Vps&diff=152286
Vps
2015-05-28T04:42:47Z
<p>Lavande:</p>
<hr />
<div>Linux VPS Ubuntu 系统配置指南<br />
== 拿到的帐号 ==<br />
VPS 开通后,你将收到如下的帐号:<br />
<br />
VPS IP Address: 184.82.9.30<br />
SSH Root Password: pass001<br />
<br />
面板地址在 http://vps.ubuntu.org.cn/vm/ 需要使用你的开通时留下的邮箱注册。<br />
<br />
以下的指南都是针对 ubuntu 的,请 centos 或其它 Linux 用户到面板 reload 到ubuntu 12.04 或 14.04 然后继续。<br />
<br />
{{Qref Alarm}} <font color="red">注意:</font>如果你安装 ubuntu 14.04 可能会无法登录,提示访问拒绝,这并不是密码输入错误了,而是因为 sshd 的默认配置里面禁止了 root 帐号登录,所以你需要使用面板的 临时通道 上去,<font color="red">逐行</font>执行如下命令开启 root 登录权限:<br />
<br />
sed -i "s/PermitRootLogin.*$/PermitRootLogin yes/" /etc/ssh/sshd_config<br />
service ssh restart<br />
<br />
顺便提一句,如果你是老手,不用开启 root 登录,可以直接创建一个普通帐号,加入到 sudo 组,使用sudo 来执行命令,这样更安全。<br />
<br />
== 如何远程访问 ==<br />
Linux VPS支持ssh远程访问,因此需要使用putty工具来访问。<br />
<br />
1 下载putty<br />
<br />
下载地址: http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe<br />
<br />
2 运行putty<br />
<br />
这个程序不需要安装,下载后直接运行,后在Host地址输入VPS的IP如下:<br />
<br />
[[Image:Vps_putty1.png]]<br />
<br />
3 登录vps <br />
<br />
点击上图中的 Open 按钮,第一次登录会出现确认密钥的提示,如下图,请点击 “是” 按钮。<br />
<br />
[[Image:Vps_putty2.png]]<br />
<br />
4 如下图输入登录用户名 root 回车,继续输入密码。<br />
<br />
{{Qref Alarm}} <font color="red">'''注意输入密码是不会显示 “*” 的,'''</font>同时密码是区分大小写的。<br />
<br />
有个技巧,直接去复制密码后,鼠标点击 putty 的输入密码窗口,直接按下鼠标右键,然后回车即可登录。 在putty的窗口按下鼠标右键表示粘贴。<br />
<br />
[[Image:Vps_putty3.png]]<br />
<br />
5 如果显示下图则表示登录成功了。<br />
<br />
[[Image:Vps_putty4.png]]<br />
<br />
6 设置 putty 支持 vps 的中文文件名或中文文件内容显示,此步骤非必需,可以忽略:<br />
<br />
在主窗口,点击左上角的图标,在弹出菜单中选择 Change Settings... 菜单,出现设置窗口。<br />
<br />
设置显示字体,左边窗口点击 Window -> Appearance ,右边点击 Font settings -> Change 如下图:<br />
<br />
[[Image:Vps_putty5.png]]<br />
<br />
字体选择 新宋体 字符集选择 CHINESE_GB2312 ,字体大小随你喜好设置。设置完毕后点确定<br />
<br />
[[Image:Vps_putty6.png]]<br />
<br />
设置终端字符,左边窗口点 Window -> Translation ,右边选择 Remote character set 的下拉框选择 UTF-8 ,如下图:<br />
<br />
[[Image:Vps_putty7.png]]<br />
<br />
设置Socket5代理,左边窗口点 Connection -> SSH -> Tunnels,右边如下图选择 Dynamic ,Source port 输入 7070,然后点 Add 按钮,就启用了本机代理。<br />
<br />
[[Image:PuttySocket5.png]]<br />
<br />
== 如何上传和下载文件 ==<br />
VPS 直接支持ssh协议,因此不需要采用 ftp 方式上传,可以直接使用支持 sftp 协议的客户端上传文件,这里使用 FileZilla。<br />
<br />
1 下载FileZilla<br />
<br />
官网下载地址: http://filezilla-project.org/download.php?type=client<br />
<br />
或直接点击下载: http://sourceforge.net/projects/filezilla/files/FileZilla_Client/3.5.0/FileZilla_3.5.0_win32-setup.exe/download<br />
<br />
2 下载完毕后安装 FileZilla<br />
<br />
3 添加站点<br />
<br />
运行FileZilla,点击菜单 文件 -> 站点管理器<br />
<br />
[[Image:Vps_FileZilla1.png]]<br />
<br />
点击后如下图:<br />
<br />
[[Image:Vps_FileZilla2.png]]<br />
<br />
再点击面板的 "新站点" 按钮,在右边的输入地方,输入:<br />
<br />
主机:VPS的IP,本例输入 184.82.9.30<br />
协议:选择 SFTP<br />
登录类型:选一般<br />
用户:输入root<br />
密码:输入ssh的登录密码,注意密码区分大小写。<br />
<br />
如下图:<br />
<br />
[[Image:Vps_FileZilla3.png]]<br />
<br />
输入完毕后,再切换到字符集,选择 "强制 UTF-8" ,如下图:<br />
<br />
[[Image:Vps_FileZilla4.png]]<br />
<br />
输入完毕后直接点击 “连接” 按钮即可,连接完毕后如下图所示,你就可以直接上传和下载文件了。<br />
<br />
[[Image:Vps_FileZilla5.png]]<br />
<br />
下一次打开 FileZilla 时,直接到站点管理器,点击连接即可。<br />
<br />
== 更新软件源 (不可跳过) ==<br />
以下命令均需要使用 putty 登录到服务器远程执行命令操作,你可以直接复制下面的命令,然后点击 putty 窗口按鼠标右键,粘贴命令。<br />
<br />
本步骤不可跳过,需要先执行,后面才可以继续,建议每次安装新软件时,都执行一遍本步骤。<br />
<br />
输入如下命令更新软件源:<br />
<br />
apt-get update<br />
<br />
下面的提示不同的Linux的版本存在不同的差异,但有如下类似的提示时,表示更新成功:<br />
<pre><br />
root@241541:~# apt-get update<br />
Get:1 http://archive.ubuntu.com maverick Release.gpg [198B]<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick/main Translation-en<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick/restricted Translation-en<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick/universe Translation-en<br />
Get:2 http://archive.ubuntu.com maverick-updates Release.gpg [198B]<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick-updates/main Translation-en<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick-updates/restricted Translation-en<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick-updates/universe Translation-en<br />
Get:3 http://archive.ubuntu.com maverick-security Release.gpg [198B]<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick-security/main Translation-en<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick-security/restricted Translation-en<br />
Ign http://archive.ubuntu.com/ubuntu/ maverick-security/universe Translation-en<br />
Get:4 http://archive.ubuntu.com maverick Release [39.8kB]<br />
Get:5 http://archive.ubuntu.com maverick-updates Release [31.4kB]<br />
Get:6 http://archive.ubuntu.com maverick-security Release [31.4kB]<br />
Get:7 http://archive.ubuntu.com maverick/main i386 Packages [1492kB]<br />
Get:8 http://archive.ubuntu.com maverick/restricted i386 Packages [5992B]<br />
Get:9 http://archive.ubuntu.com maverick/universe i386 Packages [5791kB]<br />
Get:10 http://archive.ubuntu.com maverick-updates/main i386 Packages [380kB]<br />
Get:11 http://archive.ubuntu.com maverick-updates/restricted i386 Packages [1797B]<br />
Get:12 http://archive.ubuntu.com maverick-updates/universe i386 Packages [157kB]<br />
Get:13 http://archive.ubuntu.com maverick-security/main i386 Packages [157kB]<br />
Get:14 http://archive.ubuntu.com maverick-security/restricted i386 Packages [14B]<br />
Get:15 http://archive.ubuntu.com maverick-security/universe i386 Packages [77.9kB]<br />
Fetched 8166kB in 4s (1724kB/s)<br />
Reading package lists... Done<br />
</pre><br />
<br />
如果VPS有启用IPv6,有可能长时间执行这个没有反应,请输入 Ctrl + C 中断上面的命令。先执行如下命令,使IPV4优先:<br />
<br />
全部关闭 IPv6:<br />
echo "precedence ::ffff:0:0/96 100" >> /etc/gai.conf<br />
<br />
仅仅针对 apt-get 关闭IPv6,仅 Ubuntu 14.04 以上版本有效:<br />
echo "Acquire::ForceIPv4 true;" > /etc/apt/apt.conf.d/99force-ipv4<br />
<br />
执行完毕上面的命令后,重新运行 apt-get update 来更新软件源即可。<br />
<br />
== 安装常用软件 (不可跳过) ==<br />
VPS里面缺乏一些常用工具软件,一次安装好:<br />
<br />
输入如下命令安装解压缩、下载和数据同步以及系统日志软件:<br />
apt-get install unzip zip wget rsync<br />
<br />
如果提示如下命令,表示之前已经安装好:<br />
<br />
root@241541:~# apt-get install unzip zip wget rsync <br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
unzip is already the newest version.<br />
wget is already the newest version.<br />
rsync is already the newest version.<br />
0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.<br />
<br />
如果之前没有安装会提示如下命令,表示已经安装好<br />
<pre><br />
root@241541:~# apt-get install unzip zip wget rsync<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
The following NEW packages will be installed:<br />
rsync unzip wget zip<br />
0 upgraded, 4 newly installed, 0 to remove and 26 not upgraded.<br />
Need to get 319kB/1125kB of archives.<br />
After this operation, 2314kB of additional disk space will be used.<br />
Get:1 http://archive.ubuntu.com/ubuntu/ maverick/main zip i386 3.0-3 [319kB]<br />
Fetched 319kB in 0s (417kB/s)<br />
Selecting previously deselected package wget.<br />
(Reading database ... 22549 files and directories currently installed.)<br />
Unpacking wget (from .../wget_1.12-1.1ubuntu3_i386.deb) ...<br />
Selecting previously deselected package rsync.<br />
Unpacking rsync (from .../rsync_3.0.7-2ubuntu1.1_i386.deb) ...<br />
Selecting previously deselected package unzip.<br />
Unpacking unzip (from .../archives/unzip_6.0-4_i386.deb) ...<br />
Selecting previously deselected package zip.<br />
Unpacking zip (from .../archives/zip_3.0-3_i386.deb) ...<br />
Setting up wget (1.12-1.1ubuntu3) ...<br />
Setting up rsync (3.0.7-2ubuntu1.1) ...<br />
Setting up unzip (6.0-4) ...<br />
Setting up zip (3.0-3) ...<br />
</pre><br />
<br />
== 使用 Apache 搭建站点 ==<br />
Apache 是最常见的 Web 服务器,功能强大。如果希望使用轻量级的 Nginx ,可以跳过此部分,直接转到指南的 nginx 部分来安装。<br />
<br />
=== 安装 Apache2 Web 服务 ===<br />
VPS 默认有安装Apache2,但如果你删除了,就需要重新安装;如果没有删除,执行下面的命令会退出来,不会对系统产生任何影响。<br />
<br />
输入如下命令安装<br />
apt-get install apache2<br />
<br />
正常情况下会给出如下提示,说明Apache2默认已经安装好了:<br />
<br />
root@241541:~# apt-get install apache2<br />
Reading package lists... Done<br />
Building dependency tree... Done<br />
apache2 is already the newest version.<br />
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.<br />
<br />
=== 开启 Apache2 的伪静态 ===<br />
如果希望开启Apache2 伪静态 rewrite 支持,输入如下命令安装<br />
<br />
a2enmod rewrite<br />
<br />
正常情况下会给出如下提示,说明已经安装成功:<br />
<br />
root@241541:~# a2enmod rewrite<br />
Module rewrite installed; run /etc/init.d/apache2 force-reload to enable.<br />
<br />
提示需要重新加载Apache2的配置,由于下一步是安装mysql,所以暂时不用重启。<br />
<br />
或出现如下提示,表示已经开启了 rewrite <br />
<br />
root@241541:~# a2enmod rewrite<br />
Mudule rewrite already enabled<br />
<br />
=== 安装 mysql 数据库服务 ===<br />
[[MySQL]] 是 Linux 下最常用的开源数据库。<br />
<br />
输入如下命令安装mysql<br />
apt-get install mysql-server<br />
<br />
如果输入正确,会提示如下信息,<br />
<br />
root@241541:~# apt-get install mysql-server<br />
Reading package lists... Done<br />
Building dependency tree... Done<br />
The following extra packages will be installed:<br />
libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient16<br />
libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1<br />
mysql-common mysql-server-5.1 mysql-server-core-5.1<br />
Suggested packages:<br />
libipc-sharedcache-perl libterm-readkey-perl tinyca<br />
The following NEW packages will be installed:<br />
libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient16<br />
libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1<br />
mysql-common mysql-server mysql-server-5.1 mysql-server-core-5.1<br />
0 upgraded, 12 newly installed, 0 to remove and 26 not upgraded.<br />
Need to get 22.9MB of archives.<br />
After this operation, 54.4MB of additional disk space will be used.<br />
Do you want to continue [Y/n]? <br />
<br />
输入 Y 回车,继续安装<br />
会提示输入 mysql 的 root 用户密码,你可以输入密码后回车,也可以不输入任何密码直接回车。<br />
(不输入密码不会影响到Mysql的安全性,因为Mysql仅仅用于本地监听,但不输入密码会导致后续phpmyadmin无法运行)<br />
<br />
[[Image:Vps_Mysql1.png]]<br />
<br />
需要重新输入一遍密码,如下图所示:<br />
<br />
[[Image:Vps_Mysql2.png]]<br />
<br />
最后提示如下界面,表示mysql安装成功。<br />
<br />
[[Image:Vps_Mysql3.png]]<br />
<br />
=== mysql 数据库管理 ===<br />
对于mysql数据库维护可以使用下面指南中安装的 phpmyadmin 进行维护,或直接在 putty 中输入 mysql -p 进行管理如图所示:<br />
<br />
[[Image:Vps_mysql1.png]]<br />
<br />
在 mysql> 的提示符下输入 quit 回车,将退出 mysql 命令,返回到正常操作提示符。<br />
<br />
=== mysql 数据库优化 ===<br />
如果你的VPS的内存只有512M,请按如下步骤进行优化,如果是1G或以上可以忽略本步骤。执行本步骤可以将Mysql的占用内存由150M降到100M。<br />
<br />
输入如下命令配置 Mysql<br />
<br />
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%s`<br />
find /usr/share/doc/mysql* -name my-small.cnf -exec cp {} /etc/mysql/my.cnf \;<br />
sed -i 's/\[mysqld\]/&\nuser = mysql\n/' /etc/mysql/my.cnf<br />
<br />
执行结果如下所示:<br />
root@241541:~# cp /etc/mysql/my.cnf /etc/mysql/my.cnf.`date +%s`<br />
root@241541:~# find /usr/share/doc/mysql* -name my-small.cnf -exec cp {} /etc/mysql/my.cnf \;<br />
root@241541:~# sed -i 's/\[mysqld\]/&\nuser = mysql\n/' /etc/mysql/my.cnf<br />
<br />
重启下 Mysql服务:<br />
service mysql restart<br />
<br />
执行结果如下所示:<br />
<br />
root@241541:~# service mysql restart<br />
Rather than invoking init scripts through /etc/init.d, use the service(8)<br />
utility, e.g. service mysql restart<br />
<br />
Since the script you are attempting to invoke has been converted to an<br />
Upstart job, you may also use the restart(8) utility, e.g. restart mysql<br />
mysql start/running, process 9886<br />
<br />
=== 安装php环境 ===<br />
执行如下命令安装apache2的php5扩展和php的mysql扩展<br />
<br />
apt-get install libapache2-mod-php5 php5-gd php5-mysql php5-curl php5-mcrypt php5-common php-apc<br />
<br />
如下提示:<br />
<br />
root@241541:~# apt-get install libapache2-mod-php5 php5-gd php5-mysql php5-mcrypt php5-common php-apc<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
The following extra packages will be installed:<br />
libgd2-xpm libjpeg62 libt1-5 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6<br />
libxpm4 php5-cli php5-common php-apc<br />
Suggested packages:<br />
php-pear libgd-tools <br />
The following NEW packages will be installed:<br />
libapache2-mod-php5 libgd2-xpm libjpeg62 libt1-5 libx11-6 libx11-data<br />
libxau6 libxcb1 libxdmcp6 libxpm4 php5-cli php5-common php5-gd php5-mysql php5-mcrypt<br />
0 upgraded, 15 newly installed, 0 to remove and 26 not upgraded.<br />
Need to get 8128kB of archives.<br />
After this operation, 22.7MB of additional disk space will be used.<br />
Do you want to continue [Y/n]?<br />
<br />
输入 Y,回车继续,以下表示安装完成。<br />
<br />
[[Image:Vps_php1.png]]<br />
<br />
重新启动apache2, 输入如下命令:<br />
service apache2 restart<br />
<br />
提示如下,表示启动成功:<br />
<br />
root@241541:~# service apache2 restart<br />
* Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName<br />
[ OK ]<br />
<br />
=== 测试站点 ===<br />
以上命令已经完整安装好一台Web服务器所具有的环境,以下来搭建一个最简单的站点。<br />
<br />
web 的根目录位于 /var/www 你可以将自己的程序直接放到此目录。<br />
<br />
==== 安装 phpsysinfo ====<br />
<br />
使用putty登录到服务器,依次执行如下命令安装phpsysinfo:<br />
<br />
<pre><br />
cd /var/www<br />
wget http://sourceforge.net/projects/phpsysinfo/files/phpsysinfo/3.0.13/phpsysinfo-3.0.13.tar.gz/download -O phpsysinfo-3.0.13.tar.gz<br />
tar xzvf phpsysinfo-3.0.13.tar.gz <br />
cd phpsysinfo<br />
mv config.php.new config.php<br />
</pre><br />
<br />
执行完毕后,在浏览器的地址输入: http://184.82.9.30/phpsysinfo/ 查看,显示如下:<br />
<br />
[[Image:Vps_phpsysinfo.png]]<br />
<br />
==== 安装 php 探针 ====<br />
使用putty登录到服务器,依次执行如下命令安装:<br />
<pre><br />
cd /var/www<br />
wget http://www.yahei.net/tz/tz.zip<br />
unzip tz.zip<br />
</pre><br />
运行结果如下所示:<br />
<pre><br />
root@241541:~# cd /var/www<br />
root@241541:/var/www# wget http://www.yahei.net/tz/tz.zip<br />
--2011-08-13 09:18:40-- http://www.yahei.net/tz/tz.zip<br />
Resolving www.yahei.net... 110.34.192.14<br />
Connecting to www.yahei.net|110.34.192.14|:80... connected.<br />
HTTP request sent, awaiting response... 200 OK<br />
Length: 16087 (16K) [application/zip]<br />
Saving to: `tz.zip'<br />
<br />
100%[======================================>] 16,087 --.-K/s in 0.07s<br />
<br />
2011-08-13 09:18:41 (152 KB/s) - `tz.zip' saved [16,087/16,087]<br />
<br />
root@241541:/var/www# unzip tz.zip<br />
Archive: tz.zip<br />
inflating: tz.php<br />
</pre><br />
<br />
执行完毕后,在浏览器的地址输入: http://184.82.9.30/tz.php 查看,显示如下:<br />
<br />
[[Image:Vps_tz1.png]]<br />
<br />
==== 安装 phpmyadmin ====<br />
安装phpmyadmin,需要mysql事先配置好root的密码。<br />
<br />
使用putty登录到服务器,执行下面安装<br />
<br />
apt-get install phpmyadmin<br />
<br />
提示如下:<br />
root@241541:~# apt-get install phpmyadmin<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
The following extra packages will be installed:<br />
dbconfig-common javascript-common libjs-mootools libmcrypt4 php5-mcrypt<br />
wwwconfig-common<br />
Suggested packages:<br />
libmcrypt-dev mcrypt postgresql-client apache apache-ssl<br />
The following NEW packages will be installed:<br />
dbconfig-common javascript-common libjs-mootools libmcrypt4 php5-mcrypt<br />
phpmyadmin wwwconfig-common<br />
0 upgraded, 7 newly installed, 0 to remove and 26 not upgraded.<br />
Need to get 5184kB of archives.<br />
After this operation, 21.3MB of additional disk space will be used.<br />
Do you want to continue [Y/n]?<br />
<br />
输入 Y, 回车继续。<br />
<br />
{{Qref Alarm}} <font color="red">'''按 空格键 选择 Apche2'''</font> 如下图:<br />
<br />
[[Image:Vps_phpmyadmin1.png]]<br />
<br />
选择完毕后,回车继续,提示如下图,是否需要创建phpmyadmin数据库,<br />
<br />
[[Image:Vps_phpmyadmin2.png]]<br />
<br />
直接回车继续,提示输入mysql的管理员密码,输入后如下所示:<br />
<br />
[[Image:Vps_phpmyadmin3.png]]<br />
<br />
回车继续后,如下图,提示输入phpmyadmin连接数据的密码,直接回车由系统随机产生一个即可。<br />
<br />
[[Image:Vps_phpmyadmin4.png]]<br />
<br />
完成安装提示如下:<br />
<br />
[[Image:Vps_phpmyadmin5.png]]<br />
<br />
现在访问如下地址测试: http://184.82.9.30/phpmyadmin/<br />
<br />
如果打开提示 404 错误,即 Not Found ,在putty里面执行如下命令:<br />
ln -s /usr/share/phpmyadmin /var/www<br />
然后再访问,如下:<br />
<br />
[[Image:Vps_phpmyadmin6.png]]<br />
<br />
输入mysql的root帐号和mysql的密码,点击 执行 进行登录,进行正常访问如下:<br />
<br />
[[Image:Vps_phpmyadmin7.png]]<br />
<br />
=== 配置虚拟站点 ===<br />
<br />
假设前提: 你有一个域名 test.com ,你希望搭建两个站点,第一个站点是 www.test.com 和 test.com 为主页,同时希望提供 bbs.test.com 为论坛。<br />
<br />
注意,下面的文档对多个不同的域名也是适用的。<br />
<br />
==== 配置域名 ====<br />
去域名商提供的面板将 test.com 域名的 A 记录修改为 VPS 的 IP.<br />
<br />
==== 上传程序 ====<br />
约定两个站点的目录如下,为了方便备份,站点的目录最好集中存放在 /var/www 目录。<br />
<br />
www.test.com(test.com) 对应目录: /var/www/test<br />
bbs.test.com 对应目录: /var/www/bbs<br />
<br />
假设主站点安装帝国的CMS程序,论坛采用DZ的论坛,程序需要下载UTF-8的版本。<br />
<br />
[[Image:Vps_ApacheSite1.png]]<br />
<br />
使用前面提到的上传方法,利用 FileZilla 连接服务器,创建这两个目录。<br />
<br />
[[Image:Vps_ApacheSite2.png]]<br />
<br />
如果找不到如上图的目录,请点击 / 即可看到了。<br />
<br />
[[Image:Vps_ApacheSiteFile4.png]]<br />
<br />
创建目录后,分别上传程序,如下:<br />
<br />
[[Image:Vps_ApacheSite3.png]]<br />
<br />
==== 多域名配置 ====<br />
这里推荐编辑器直接使用记事本,不要使用其他的高级编辑器。<br />
<br />
注意下面的 '''DocumentRoot /var/www/test/''' 中的 '''/var/www/test/''' 应该修改为你上传站点的文件目录。<br />
<br />
编辑www.test.com的站点配置文件test.com.txt ,其中站点 http://www.test.com 和 http://test.com 的网站目录为 /var/www/test/<br />
<br />
<VirtualHost *:80><br />
ServerName www.test.com<br />
ServerAlias test.com<br />
DocumentRoot /var/www/test/<br />
</VirtualHost> <br />
<br />
编辑bbs.test.com的站点配置文件 bbs.test.com.txt , 其中站点 bbs.test.com 的网站目录为 /var/www/bbs/<br />
<br />
<VirtualHost *:80><br />
ServerName bbs.test.com<br />
DocumentRoot /var/www/bbs/<br />
</VirtualHost><br />
<br />
如图所示:<br />
<br />
[[Image:Vps_ApacheSite4.png]]<br />
<br />
将这两个文件上传到 /etc/apache2/sites-enabled/ 目录<br />
<br />
如图所示:<br />
<br />
[[Image:Vps_ApacheSite5.png]]<br />
<br />
==== Apache2 伪静态 ====<br />
有两种方法做伪静态,一种是用 .htaccess 文件。 例如将上面的 bbs.test.com 的站点配置文件编辑为如下:<br />
<br />
<VirtualHost *:80><br />
ServerName bbs.test.com<br />
DocumentRoot /var/www/bbs/<br />
<Directory /var/www/bbs/><br />
AllowOverride AuthConfig<br />
</Directory><br />
</VirtualHost> <br />
<br />
重新上传,重启 apache2 后, 然后将准备好的 .htaccess 文件放到对应的 /var/www/bbs/ 网站根目录即可。<br />
<br />
另外一种是直接加入到配置文件,如下:<br />
<br />
<VirtualHost *:80><br />
ServerName bbs.test.com<br />
DocumentRoot /var/www/bbs/<br />
#伪静态代码段开始 <br />
<Directory /var/www/bbs/><br />
...............................<br />
</Directory><br />
#伪静态代码段结束 <br />
</VirtualHost> <br />
<br />
下面是常用的一些伪静态配置,复制出来,保存为 .htaccess 文件,或 插入到站点的配置文件最后一行 <Directory> 和 </Directory> 之间。 <br />
<br />
Discuz!X 在 Apche2 下的伪静态配置如下: <br />
<br />
RewriteEngine On<br />
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2<br />
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2<br />
RewriteRule ^topic-(.+)\.html$ portal.php?mod=topic&topic=$1<br />
RewriteRule ^article-([0-9]+)\.html$ portal.php?mod=article&articleid=$1<br />
RewriteRule ^group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2<br />
RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2<br />
RewriteRule ^([a-z]+)-(.+)\.html$ $1.php?rewrite=$2<br />
<br />
<br />
将这一段代码加入到上面的站点配置文件中,如下: <br />
<br />
<VirtualHost *:80><br />
ServerName bbs.test.com<br />
DocumentRoot /var/www/bbs/<br />
<Directory /var/www/bbs/><br />
RewriteEngine On<br />
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2<br />
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2<br />
RewriteRule ^topic-(.+)\.html$ portal.php?mod=topic&topic=$1<br />
RewriteRule ^article-([0-9]+)\.html$ portal.php?mod=article&articleid=$1<br />
RewriteRule ^group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2<br />
RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2<br />
RewriteRule ^([a-z]+)-(.+)\.html$ $1.php?rewrite=$2<br />
</Directory><br />
</VirtualHost><br />
<br />
WordPress 在 Apache2 下的伪静态配置如下: <br />
<Directory /><br />
RewriteEngine On<br />
RewriteRule ^index\.php$ - [L]<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule . /index.php [L]<br />
</Directory><br />
<br />
<br />
ECShop 在 Apache2 下的伪静态配置如下: <br />
<Directory /><br />
RewriteEngine On<br />
RewriteRule ^(.*)/index.html$ $1/index\.php [I]<br />
RewriteRule ^(.*)/category$ $1/index\.php [I]<br />
RewriteRule ^(.*)/feed-c([0-9]+).xml$ $1/feed\.php\?cat=$2 [I]<br />
RewriteRule ^(.*)/feed-b([0-9]+).xml$ $1/feed\.php\?brand=$2 [I]<br />
RewriteRule ^(.*)/feed-type([^-]+)\.xml$ $1/feed\.php\?type=$2 [I]<br />
RewriteRule ^(.*)/feed.xml$ $1/feed\.php [I]<br />
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/category\.php\?id=$2&brand=$3&price_min=$4&price_max=$5&filter_attr=$6&page=$7&sort=$8&order=$9 [I]<br />
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)\.html$ $1/category\.php\?id=$2&brand=$3&price_min=$4&price_max=$5&filter_attr=$6 [I]<br />
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/category\.php\?id=$2&brand=$3&page=$4&sort=$5&order=$6 [I]<br />
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$ $1/category\.php\?id=$2&brand=$3&page=$4 [I]<br />
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)(.*)\.html$ $1/category\.php\?id=$2&brand=$3 [I]<br />
RewriteRule ^(.*)/category-([0-9]+)(.*)\.html$ $1/category\.php\?id=$2 [I]<br />
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)\.html(.*)$ $1/category\.php\?$4&id=$2&brand=$3<br />
RewriteRule ^(.*)/goods-([0-9]+)(.*)\.html$ $1/goods\.php\?id=$2 [I]<br />
RewriteRule ^(.*)/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/article_cat\.php\?id=$2&page=$3&sort=$4&order=$5 [I]<br />
RewriteRule ^(.*)/article_cat-([0-9]+)-([0-9]+)(.*)\.html$ $1/article_cat\.php\?id=$2&page=$3 [I]<br />
RewriteRule ^(.*)/article_cat-([0-9]+)(.*)\.html$ $1/article_cat\.php\?id=$2 [I]<br />
RewriteRule ^(.*)/article-([0-9]+)(.*)\.html$ $1/article\.php\?id=$2 [I]<br />
RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html $1/brand\.php\?id=$2&cat=$3&page=$4&sort=$5&order=$6 [I]<br />
RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html $1/brand\.php\?id=$2&cat=$3&page=$4 [I]<br />
RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)\.html(.*)$ $1/brand\.php\?$4&id=$2&cat=$3 [I]<br />
RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)(.*)\.html $1/brand\.php\?id=$2&cat=$3 [I]<br />
RewriteRule ^(.*)/brand-([0-9]+)(.*)\.html $1/brand\.php\?id=$2 [I]<br />
RewriteRule ^(.*)/tag-(.*)\.html $1/search\.php\?keywords=$2 [I]<br />
RewriteRule ^(.*)/snatch-([0-9]+)\.html$ $1/snatch\.php\?id=$2 [I]<br />
RewriteRule ^(.*)/group_buy-([0-9]+)\.html$ $1/group_buy\.php\?act=view&id=$2 [I]<br />
RewriteRule ^(.*)/auction-([0-9]+)\.html$ $1/auction\.php\?act=view&id=$2 [I]<br />
RewriteRule ^(.*)/exchange-id([0-9]+)(.*)\.html$ $1/exchange\.php\?id=$2&act=view [I]<br />
RewriteRule ^(.*)/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/exchange\.php\?cat_id=$2&integral_min=$3&integral_max=$4&page=$5&sort=$6&order=$7 [I]<br />
RewriteRule ^(.*)/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$ $1/exchange\.php\?cat_id=$2&page=$3&sort=$4&order=$5 [I]<br />
RewriteRule ^(.*)/exchange-([0-9]+)-([0-9]+)(.*)\.html$ $1/exchange\.php\?cat_id=$2&page=$3 [I]<br />
RewriteRule ^(.*)/exchange-([0-9]+)(.*)\.html$ $1/exchange\.php\?cat_id=$2 [I]<br />
</Directory><br />
<br />
==== 修改上传文件权限 ====<br />
由于上传的文件的所有者为 root ,Apache 无法正常写入,所以需要设置上传文件的宿主为 www-data。<br />
<br />
使用putty登录vps执行如下命令,设置 /var/www下的所有文件的宿主都是 www-data,这样apache2就可以正常读写:<br />
<br />
chown -R www-data:www-data /var/www<br />
service apache2 restart<br />
<br />
执行结果如下所示:<br />
<br />
root@241541:~# chown -R www-data:www-data /var/www<br />
root@241541:~# service apache2 restart<br />
* Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName<br />
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName<br />
[ OK ]<br />
<br />
==== 安装配置 ====<br />
主站点程序访问 http://www.test.com 如下图所示,进一步安装:<br />
<br />
[[Image:Vps_ApacheSite8.png]]<br />
<br />
论坛程序访问 http://bbs.test.com 如下图所示,进一步安装:<br />
<br />
[[Image:Vps_ApacheSite7.png]]<br />
<br />
以上就是完成多域名的配置。<br />
<br />
=== Apache2 301 跳转 ===<br />
如果希望将 test.com 跳转到 www.test.com ,如下配置 test.com.txt 上传到 /etc/apache2/sites-enabled/ 目录即可。<br />
<pre><br />
<VirtualHost *:80><br />
ServerName test.com<br />
RewriteCond %{HTTP_HOST} ^test\.com [NC]<br />
RewriteRule ^(.*)$ http://www.test.com/$1 [L,R=301]<br />
</VirtualHost> <br />
</pre><br />
当然你也可以去 test.com 的域名那里设置 301 跳转。<br />
<br />
=== Apache2 优化 ===<br />
请一定要执行本步骤,不要认为小站,访问的人数少,有时候蜘蛛会按照超过20个以上的并发抓取数据,直接爆掉vps。表现为:可以ping,但网站打不开、数据库连不上或无法ssh。<br />
<br />
为了防止Vps被大的访问量爆掉,需要限制并发数,这里#1 VPS 调整为10, #2可以将下面的10修改为20,#3为30,以此类推。<br />
<br />
也可以根据指南最后的压力测试来确定最大并发数,确定后,将下面的命令中的 10 改为你确定的并发数即可,其它数值如 5 不要修改。<br />
<br />
请复制命令后到putty直接按鼠标右键粘贴执行:<br />
<br />
<pre><nowiki><br />
sed -i -e "s/^[[:blank:]]*StartServers[[:blank:]]*.*/StartServers 5/" /etc/apache2/apache2.conf<br />
sed -i -e "s/^[[:blank:]]*MinSpareServers[[:blank:]]*.*/MinSpareServers 5/" /etc/apache2/apache2.conf<br />
sed -i -e "s/^[[:blank:]]*MaxSpareServers[[:blank:]]*.*/MaxSpareServers 10/" /etc/apache2/apache2.conf<br />
sed -i -e "s/^[[:blank:]]*ServerLimit[[:blank:]]*.*/ServerLimit 10/" /etc/apache2/apache2.conf<br />
sed -i -e "s/^[[:blank:]]*MaxClients[[:blank:]]*.*/MaxClients 10/" /etc/apache2/apache2.conf<br />
sed -i -e "s/^[[:blank:]]*MinSpareThreads[[:blank:]]*.*/MinSpareThreads 5/" /etc/apache2/apache2.conf<br />
sed -i -e "s/^[[:blank:]]*MaxSpareThreads[[:blank:]]*.*/MaxSpareThreads 10/" /etc/apache2/apache2.conf<br />
</nowiki></pre><br />
执行完毕后后,再执行以下命令,重启下apache2。<br />
<br />
service apache2 restart<br />
<br />
执行结果如下所示:<br />
<pre><nowiki><br />
root@241541:~# sed -i -e "s/^[[:blank:]]*StartServers[[:blank:]]*.*/StartServers 5/" /etc/apache2/apache2.conf<br />
root@241541:~# sed -i -e "s/^[[:blank:]]*MinSpareServers[[:blank:]]*.*/MinSpareServers 5/" /etc/apache2/apache2.conf<br />
root@241541:~# sed -i -e "s/^[[:blank:]]*MaxSpareServers[[:blank:]]*.*/MaxSpareServers 10/" /etc/apache2/apache2.conf<br />
root@241541:~# sed -i -e "s/^[[:blank:]]*ServerLimit[[:blank:]]*.*/ServerLimit 10/" /etc/apache2/apache2.conf<br />
root@241541:~# sed -i -e "s/^[[:blank:]]*MaxClients[[:blank:]]*.*/MaxClients 10/" /etc/apache2/apache2.conf<br />
root@241541:~# sed -i -e "s/^[[:blank:]]*MinSpareThreads[[:blank:]]*.*/MinSpareThreads 5/" /etc/apache2/apache2.conf<br />
root@241541:~# sed -i -e "s/^[[:blank:]]*MaxSpareThreads[[:blank:]]*.*/MaxSpareThreads 10/" /etc/apache2/apache2.conf<br />
root@241541:~# service apache2 restart<br />
* Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 0.4.54.225 for ServerName<br />
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 0.4.54.225 for ServerName<br />
[ OK ]<br />
</nowiki></pre><br />
<br />
=== 查看 Apache2 日志 ===<br />
Apache2的日志放在 /var/log/apache2/ 目录下,可以直接使用filezilla去下载下来看。<br />
<br />
== 使用 Nginx 搭建站点 ==<br />
为什要使用 nginx?因为 apache 太耗内存了,使用 nginx 可以节约内存。<br />
<br />
采用 nginx + php-fpm + mysql 搭建。<br />
<br />
=== 删除 apache2 ===<br />
使用putty登录vps,执行如下命令:<br />
<br />
输入如下命令关闭 apache2<br />
<br />
service apache2 stop<br />
<br />
如果输入正确,会提示如下信息,表示apache2已经停止<br />
<br />
root@241541:~# service apache2 stop<br />
* Stopping web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName<br />
... waiting [ OK ]<br />
<br />
输入如下命令删除 apache2<br />
apt-get remove apache2 apache2.2-common<br />
<br />
出现类似如下提示时,输入 Y 并回车。<br />
<br />
0 upgraded, 1 newly installed, 7 to remove and 26 not upgraded.<br />
Need to get 5837kB of archives.<br />
After this operation, 14.5MB disk space will be freed.<br />
Do you want to continue [Y/n]?<br />
<br />
最后会出现如下提示,表示已经删除 apache2<br />
Removing libapache2-mod-php5 ...<br />
Module php5 disabled.<br />
Run '/etc/init.d/apache2 restart' to activate new configuration!<br />
Removing apache2-mpm-prefork ...<br />
* Stopping web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 0.3.175.133 for ServerName<br />
... waiting [ OK ]<br />
Removing apache2.2-common ...<br />
Removing apache2-utils ...<br />
Removing apache2.2-bin ...<br />
<br />
=== 安装 php5-fpm php5-cgi ===<br />
安装 php5-fpm 执行如下命令:<br />
apt-get install php5-cgi php5-fpm php5-gd php5-mysql php5-curl php5-mcrypt php5-common php-apc<br />
<br />
出现下面的提示表示安装成功<br />
<pre><br />
root@241541:~# apt-get install php5-cgi php5-fpm php5-gd php5-mysql php5-mcrypt php5-common php-apc<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
php5-cgi is already the newest version.<br />
php5-cgi set to manually installed.<br />
Suggested packages:<br />
php-pear<br />
The following NEW packages will be installed:<br />
libevent-1.4-2 php5-fpm<br />
0 upgraded, 2 newly installed, 0 to remove and 26 not upgraded.<br />
Need to get 3002kB of archives.<br />
After this operation, 7967kB of additional disk space will be used.<br />
Get:1 http://archive.ubuntu.com/ubuntu/ maverick/main libevent-1.4-2 i386 1.4.13-stable-1 [56.2kB]<br />
Get:2 http://archive.ubuntu.com/ubuntu/ maverick-updates/universe php5-fpm i386 5.3.3-1ubuntu9.5 [2946kB]<br />
Fetched 3002kB in 1s (2181kB/s)<br />
Selecting previously deselected package libevent-1.4-2.<br />
(Reading database ... 21902 files and directories currently installed.)<br />
Unpacking libevent-1.4-2 (from .../libevent-1.4-2_1.4.13-stable-1_i386.deb) ...<br />
Selecting previously deselected package php5-fpm.<br />
Unpacking php5-fpm (from .../php5-fpm_5.3.3-1ubuntu9.5_i386.deb) ...<br />
Setting up libevent-1.4-2 (1.4.13-stable-1) ...<br />
Setting up php5-fpm (5.3.3-1ubuntu9.5) ...<br />
update-rc.d: warning: php5-fpm stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (none)<br />
* Starting PHP5 FPM... Aug 13 06:25:50.352643 [WARNING] [pool www] pm.start_servers is not set. It's been set to 20.<br />
[ OK ]<br />
<br />
Creating config file /etc/php5/fpm/php.ini with new version<br />
Processing triggers for libc-bin ...<br />
ldconfig deferred processing now taking place<br />
</pre><br />
安装完毕后,我们调整下 php5-fpm 使其采用 127.0.0.1:9000 进行监听,执行如下命令:<br />
sed -i -e 's/listen =.*$/listen = 127.0.0.1:9000/' `grep -R -l listen /etc/php5/fpm`<br />
<br />
完毕后,重启下 php5-fpm,执行如下命令重启<br />
service php5-fpm restart <br />
<br />
出现如下提示,表示重启成功<br />
root@241541:~# service php5-fpm restart<br />
php5-fpm stop/waiting<br />
php5-fpm start/running, process 6899<br />
<br />
=== 安装 mysql ===<br />
[[Vps#.E5.AE.89.E8.A3.85_mysql_.E6.95.B0.E6.8D.AE.E5.BA.93.E6.9C.8D.E5.8A.A1|见前面的安装 mysql 的步骤。]]<br />
<br />
=== 安装 nginx ===<br />
使用putty登录vps,执行如下命令: <br />
<br />
apt-get install nginx<br />
<br />
出现如下提示,表示已经安装完毕:<br />
<br />
<pre><br />
root@241541:~# apt-get install nginx<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
Suggested packages:<br />
ufw<br />
The following NEW packages will be installed:<br />
nginx<br />
0 upgraded, 1 newly installed, 0 to remove and 26 not upgraded.<br />
Need to get 341kB of archives.<br />
After this operation, 827kB of additional disk space will be used.<br />
Get:1 http://archive.ubuntu.com/ubuntu/ maverick/universe nginx i386 0.7.67-3ubuntu1 [341kB]<br />
Fetched 341kB in 0s (437kB/s)<br />
Selecting previously deselected package nginx.<br />
(Reading database ... 21918 files and directories currently installed.)<br />
Unpacking nginx (from .../nginx_0.7.67-3ubuntu1_i386.deb) ...<br />
Setting up nginx (0.7.67-3ubuntu1) ...<br />
</pre><br />
<br />
再执行下面的命令启动nginx服务:<br />
<br />
service nginx start<br />
<br />
结果如下所示,表示nginx顺利启动:<br />
<br />
root@241541:~# service nginx start<br />
Starting nginx: nginx.<br />
<br />
=== 测试站点 ===<br />
由于nginx默认的站点不支持php,所以需要修改默认站点。<br />
<br />
编辑文件名为 default.txt ,注意下面的 server_name 修改为你的vps的ip地址,可以写一个IP,也可以都写上,IP和IP之间有空格。<br />
<br />
配置文件中的 root 就是站点的目录了,可以更改为你的站点的路径。<br />
<br />
server {<br />
listen 80;<br />
server_name 184.82.9.30 184.82.9.31;<br />
index index.html index.htm index.php;<br />
root /var/www/;<br />
location ~ \.php$ {<br />
include /etc/nginx/fastcgi_params;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_pass 127.0.0.1:9000;<br />
}<br />
}<br />
<br />
<br />
将 default.txt 文件使用 filezilla 上传到 /etc/nginx/sites-enabled 目录下<br />
<br />
使用 putty 登录vps,输入如下命令重启 nginx 服务<br />
<br />
service nginx restart<br />
<br />
重启结果如下所示:<br />
root@241541:~# service nginx restart<br />
Restarting nginx: nginx.<br />
<br />
==== 安装phpsysinfo ====<br />
按照前面apache2讲述的安装<br />
<br />
==== 安装 php 探针 ====<br />
[[Vps#.E5.AE.89.E8.A3.85_php_.E6.8E.A2.E9.92.88|按照前面apache2讲述的安装]]<br />
<br />
==== 安装 phpmyadmin ====<br />
照前面 Apache2 安装 phpmyadmin, 注意第二步不要再按空格选择 apache2 , 直接回车下一步。<br />
<br />
如果已经之前已经安装过 phpmyadmin ,不需要删除,继续使用。<br />
<br />
安装完毕 phpmyadmin 后, 继续在 putty 里面执行如下命令即可:<br />
<br />
cd /var/www<br />
ln -s /usr/share/phpmyadmin .<br />
<br />
执行情况如下所示:<br />
root@241541:~# cd /var/www<br />
root@241541:/var/www# ln -s /usr/share/phpmyadmin .<br />
root@241541:/var/www#<br />
<br />
然后就可以在浏览器里面访问 phpmyadmin 了。 访问地址: http://184.82.9.30/phpmyadmin/<br />
<br />
=== 配置虚拟站点 ===<br />
以上运行环境均已经安装完毕,下面讲如何配置 nginx 的多域名。<br />
<br />
假设前提: 你有一个域名 test.com ,你希望搭建两个站点,第一个站点是 www.test.com 和 test.com 为主页,同时希望提供 bbs.test.com 为论坛。<br />
<br />
下面的文档对多个不同的域名也是适用的。<br />
<br />
==== 配置域名 ====<br />
参考上面 apache2 的配置域名部分。<br />
<br />
==== 上传程序 ====<br />
参考上面 apache2 的上传程序部分。<br />
<br />
==== 多域名配置 ====<br />
这里推荐编辑器直接使用记事本,不要使用其他的高级编辑器。<br />
<br />
编辑www.test.com的站点配置文件 test.com.txt <br />
<br />
server {<br />
listen 80;<br />
server_name www.test.com test.com;<br />
index index.html index.htm index.php;<br />
root /var/www/test/;<br />
location ~ \.php$ {<br />
include /etc/nginx/fastcgi_params;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_pass 127.0.0.1:9000;<br />
}<br />
}<br />
<br />
<br />
编辑bbs.test.com的站点配置文件 bbs.test.com.txt<br />
<br />
server {<br />
listen 80;<br />
server_name bbs.test.com;<br />
index index.html index.htm index.php;<br />
root /var/www/bbs/;<br />
location ~ \.php$ {<br />
include /etc/nginx/fastcgi_params;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_pass 127.0.0.1:9000;<br />
}<br />
}<br />
<br />
<br />
将这两个文件使用 filezilla 上传到 /etc/nginx/sites-enabled/ 目录<br />
<br />
==== Nginx 伪静态 ====<br />
下面是常用的一些伪静态配置,复制出来,插入到站点的配置文件最后一个 } 号之前,如下:<br />
<br />
server {<br />
listen 80;<br />
server_name bbs.test.com;<br />
index index.html index.htm index.php;<br />
root /var/www/bbs/;<br />
location ~ \.php$ {<br />
include /etc/nginx/fastcgi_params;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_pass 127.0.0.1:9000;<br />
}<br />
#伪静态代码段开始 <br />
location / {<br />
...............................<br />
}<br />
#伪静态代码段结束 <br />
}<br />
<br />
Discuz!X 在 Nginx 下的伪静态配置如下:<br />
<br />
location / {<br />
rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;<br />
rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;<br />
rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;<br />
rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;<br />
rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;<br />
rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;<br />
rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;<br />
rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;<br />
}<br />
<br />
将这一段代码加入到上面的站点配置文件中,例如:<br />
<br />
server {<br />
listen 80;<br />
server_name bbs.test.com;<br />
index index.html index.htm index.php;<br />
root /var/www/bbs/;<br />
location ~ \.php$ {<br />
include /etc/nginx/fastcgi_params;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_pass 127.0.0.1:9000;<br />
}<br />
location / {<br />
rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;<br />
rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;<br />
rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;<br />
rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;<br />
rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;<br />
rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;<br />
rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;<br />
rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;<br />
}<br />
}<br />
<br />
WordPress 在 Nginx 下的伪静态配置如下:<br />
location / {<br />
if (-f $request_filename/index.html){<br />
rewrite (.*) $1/index.html break;<br />
}<br />
if (-f $request_filename/index.php){<br />
rewrite (.*) $1/index.php;<br />
}<br />
if (!-f $request_filename){<br />
rewrite (.*) /index.php;<br />
}<br />
}<br />
<br />
<br />
ECShop 在 Nginx 下的伪静态配置如下:<br />
location / {<br />
if (!-e $request_filename) {<br />
rewrite "^/index\.html" /index.php last;<br />
rewrite "^/category$" /index.php last;<br />
rewrite "^/feed-c([0-9]+)\.xml$" /feed.php?cat=$1 last;<br />
rewrite "^/feed-b([0-9]+)\.xml$" /feed.php?brand=$1 last;<br />
rewrite "^/feed\.xml$" /feed.php last;<br />
rewrite "^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last;<br />
rewrite "^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)\.html$" /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last;<br />
rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last;<br />
rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3 last;<br />
rewrite "^/category-([0-9]+)-b([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2 last;<br />
rewrite "^/category-([0-9]+)(.*)\.html$" /category.php?id=$1 last;<br />
rewrite "^/goods-([0-9]+)(.*)\.html" /goods.php?id=$1 last;<br />
rewrite "^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;<br />
rewrite "^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$" /article_cat.php?id=$1&page=$2 last;<br />
rewrite "^/article_cat-([0-9]+)(.*)\.html$" /article_cat.php?id=$1 last;<br />
rewrite "^/article-([0-9]+)(.*)\.html$" /article.php?id=$1 last;<br />
rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html" /brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last;<br />
rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2&page=$3 last;<br />
rewrite "^/brand-([0-9]+)-c([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2 last;<br />
rewrite "^/brand-([0-9]+)(.*)\.html" /brand.php?id=$1 last;<br />
rewrite "^/tag-(.*)\.html" /search.php?keywords=$1 last;<br />
rewrite "^/snatch-([0-9]+)\.html$" /snatch.php?id=$1 last;<br />
rewrite "^/group_buy-([0-9]+)\.html$" /group_buy.php?act=view&id=$1 last;<br />
rewrite "^/auction-([0-9]+)\.html$" /auction.php?act=view&id=$1 last;<br />
rewrite "^/exchange-id([0-9]+)(.*)\.html$" /exchange.php?id=$1&act=view last;<br />
rewrite "^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last;<br />
rewrite "^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;<br />
rewrite "^/exchange-([0-9]+)-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2 last;<br />
rewrite "^/exchange-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1 last;<br />
}<br />
}<br />
<br />
==== 修改上传文件权限 ====<br />
由于上传的文件的所有者为 root ,Nginx 无法正常写入,所以需要设置上传文件的宿主为 www-data。<br />
<br />
使用putty登录vps执行如下命令,设置 /var/www下的所有文件的宿主都是 www-data,这样nginx就可以正常读写:<br />
<br />
chown -R www-data:www-data /var/www<br />
service nginx restart<br />
<br />
执行结果如下所示:<br />
<br />
root@241541:~# chown -R www-data:www-data /var/www<br />
root@195669:~# service nginx restart<br />
Restarting nginx: nginx.<br />
<br />
==== 安装配置 ====<br />
见 apache2 的安装配置部分<br />
<br />
=== nginx 301 跳转 ===<br />
如果希望将 test.com 跳转到 www.test.com ,如下配置 test.com.txt 上传到 /etc/nginx/sites-enabled/ 目录即可。<br />
<pre><br />
server {<br />
listen 80;<br />
server_name test.com;<br />
rewrite ^/(.*) http://www.test.com/$1 permanent;<br />
}<br />
</pre><br />
当然你也可以去 test.com 的域名那里设置 301 跳转。<br />
<br />
=== nginx 优化 ===<br />
请一定要执行本步骤,不要认为小站,访问的人数少,有时候蜘蛛会按照超过20个以上的并发抓取数据,直接爆掉vps。表现为:可以ping,但网站打不开、数据库连不上或无法ssh。<br />
<br />
为了防止Vps被大的访问量爆掉,需要限制并发数,这里#1 VPS 调整为10, #2可以将下面的10修改为20,#3为30,以此类推。 <br />
<br />
也可以根据指南最后的压力测试来确定最大并发数,确定后,将下面的命令中的 10 改为你确定的并发数即可,其它数值如 5 不要修改。<br />
<br />
因为命令中包括了 ` 号,所以请复制命令后到putty直接按鼠标右键粘贴执行:<br />
<br />
sed -i -e 's/pm.max_children =.*$/pm.max_children = 10/' `grep -R -l pm.max_children /etc/php5/fpm`<br />
sed -i -e 's/pm.start_servers =.*$/pm.start_servers = 5/' `grep -R -l pm.max_children /etc/php5/fpm`<br />
sed -i -e 's/pm.max_spare_servers =.*$/pm.max_spare_servers = 10/' `grep -R -l pm.max_children /etc/php5/fpm`<br />
<br />
执行完毕后,重启下 php-fpm 服务:<br />
<br />
service php5-fpm restart<br />
<br />
=== nginx 限制同一IP的并发数和连接流量 ===<br />
在终端执行下面语句开启nginx并发支持:<br />
echo "limit_conn_zone \$binary_remote_addr zone=one:10m;" > /etc/nginx/conf.d/limitconn.conf<br />
<br />
然后打开虚拟站点配置文件,如编辑上面例子中的 bbs.test.com 站点配置文件 bbs.test.com.txt,<br />
<br />
在 server_name bbs.test.com; 这一行下面插入如下:<br />
<br />
limit_conn one 20;<br />
limit_rate 200k;<br />
<br />
上面的20,标示同一IP的最大并发数为20。200k为连接的最大速度为200k。<br />
<br />
注意,这里控制的流量是针对单一连接的,并不是同一IP的最大速度,其最大速度为200k*20=4000k。<br />
<br />
最终修改后的结果如下所示:<br />
server {<br />
listen 80;<br />
server_name bbs.test.com;<br />
limit_conn one 20;<br />
limit_rate 200k;<br />
index index.html index.htm index.php;<br />
root /var/www/bbs/;<br />
location ~ \.php$ {<br />
include /etc/nginx/fastcgi_params;<br />
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br />
fastcgi_pass 127.0.0.1:9000;<br />
}<br />
}<br />
<br />
将上面的配置文件重新使用 filezilla 上传到 /etc/nginx/sites-enabled/ 目录,覆盖后,执行以下命令重启 nginx 使配置生效:<br />
service nginx restart<br />
<br />
=== 查看 nginx 日志 ===<br />
Nginx的日志放在 /var/log/nginx/ 目录下,可以使用 filezilla 下载下来查看。<br />
<br />
=== 配置CDN或反向代理 ===<br />
我们需要将 www.test.com 或 test.com 的访问反向代理到 192.168.1.1 地址上。<br />
<br />
1 执行如下命令来建立缓存目录和临时目录,这里默认为最大20g的缓存空间,可以根据你的实际情况增加或减小,修改地方为 max_size=20g;<br />
<br />
mkdir /var/www/cache<br />
mkdir /var/www/temp<br />
chown -R www-data:www-data /var/www<br />
echo "proxy_cache_path /var/www/cache levels=1:2 keys_zone=cache_one:500m inactive=7d max_size=20g;" > /etc/nginx/conf.d/cdn.conf<br />
echo "proxy_temp_path /var/www/temp;" >> /etc/nginx/conf.d/cdn.conf<br />
<br />
2 编辑 www.test.com 站点的反向代理配置文件 test.com.txt 如下:<br />
<pre><br />
server {<br />
listen 80;<br />
server_name www.test.com test.com;<br />
location / { <br />
proxy_set_header Host $host;<br />
proxy_set_header X-Real-IP $remote_addr;<br />
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br />
proxy_pass_header Server;<br />
proxy_pass http://192.168.1.1;<br />
}<br />
location ~ .*\.(gif|png|jpg|jpeg|swf|zip|gz|tar|bz2|rar|doc|txt|ico|cur)$ {<br />
proxy_cache cache_one;<br />
proxy_cache_valid 30d;<br />
proxy_cache_key $host$uri$is_args$args;<br />
proxy_set_header Host $host;<br />
proxy_pass http://192.168.1.1;<br />
}<br />
location ~ .*\.(css|js)?$ {<br />
proxy_cache cache_one;<br />
proxy_cache_valid 1h;<br />
proxy_cache_key $host$uri$is_args$args;<br />
proxy_set_header Host $host;<br />
proxy_pass http://192.168.1.1;<br />
}<br />
}<br />
</pre><br />
<br />
上面的配置中 "gif|png|jpg|jpeg|swf|zip|gz|tar|bz2|rar|doc|txt|ico|cur" 的后缀缓存设置的为30天,css|js 后缀的为1小时,你可以根据实际需求调整 proxy_cache_valid 30d; 行最后的 30d 为其它的值,如缓存1天为: proxy_cache_valid 1d; <br />
<br />
如果不需要缓存,直接设置为如下:<br />
<pre><br />
server {<br />
listen 80;<br />
server_name www.test.com test.com;<br />
location / { <br />
proxy_set_header Host $host;<br />
proxy_set_header X-Real-IP $remote_addr;<br />
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br />
proxy_pass_header Server;<br />
proxy_pass http://192.168.1.1;<br />
}<br />
}<br />
</pre><br />
<br />
3 将这个文件使用 filezilla 上传到 /etc/nginx/sites-enabled/ 目录 <br />
<br />
4 执行下面的重启 nginx 命令,使配置生效。<br />
service nginx restart<br />
<br />
5 然后就可以去域名管理那里将 www.test.com test.com 的IP设置为VPS的IP即可。<br />
<br />
=== 反向代理 Google ===<br />
由于谷歌需要 https 才可以访问,所以反向代理谷歌需要占用服务器的 https 443 端口。<br />
<br />
1 产生 https 证书<br />
cd /etc/nginx/<br />
openssl genrsa -out google.key 1024<br />
openssl req -new -key google.key -out google.csr<br />
openssl x509 -req -days 3650 -in google.csr -signkey google.key -out google.crt<br />
2 建立配置文件 google.test.com.txt 这里用 google.test.com 来反向代理 google.com 如下:<br />
<pre>server {<br />
listen 80;<br />
server_name google.test.com;<br />
rewrite ^(.*) https://google.test.com$1 permanent;<br />
}<br />
<br />
server {<br />
listen 443;<br />
server_name google.test.com;<br />
ssl on;<br />
ssl_certificate /etc/nginx/google.crt;<br />
ssl_certificate_key /etc/nginx/google.key;<br />
location / {<br />
proxy_redirect https://www.google.com.hk/ /;<br />
proxy_cookie_domain google.com.hk google.test.com;<br />
proxy_set_header Host www.google.com.hk;<br />
proxy_pass https://www.google.com.hk;<br />
}<br />
}</pre><br />
<br />
3 将这个文件使用 filezilla 上传到 /etc/nginx/sites-enabled/ 目录 <br />
<br />
4 执行下面的重启 nginx 命令,使配置生效。<br />
service nginx restart<br />
<br />
5 然后就可以去域名管理那里将 google.test.com 的IP设置为VPS的IP即可。<br />
<br />
6 完成,可以通过访问 https://google.test.com 来访问google了。<br />
<br />
== 安装邮件服务器 ==<br />
注意:官方对架设邮件服务器非常限制,担心对外发垃圾邮件,一旦被举报,就直接封VPS,所以下面的配置中,我们将邮件通过 Gmail 的账号转发出去。<br />
<br />
在 Putty 使用如下命令,安装 postfix,替换下面命令中的第一行 mydomain.com 为 你VPS上绑定的域名,如果有多个域名,选择其中一个即可。<br />
<br />
hostname mydomain.com<br />
apt-get -y install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules<br />
<br />
在弹出的对话框中,如果你的邮件服务器仅仅为你本地的程序使用,可以直接选择 Local only ,否则请选择其它选项。<br />
<br />
安装完成后,请运行如下命令限制 postfix 为 10 个并发:<br />
postconf -e default_process_limit=10<br />
<br />
将邮件服务器采用gmail账号做邮件中转,首先你需要先有一个gmail的账号: USERNAME@gmail.com PASSWORD ,为了避免出现Gmail的图形验证登陆,你可以开启Gmail的账号的二次验证,然后创建一个应用密码,这样你可以采用应用密码来配置。<br />
postconf -e relayhost=smtp.gmail.com:587<br />
postconf -e smtp_sasl_auth_enable=yes<br />
postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd<br />
postconf -e smtp_sasl_security_options=noanonymous<br />
postconf -e smtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt<br />
postconf -e smtp_use_tls=yes<br />
<br />
下面的脚本中的 USERNAME 和 PASSWORD 单词请改为你正确的用户名和密码,<br />
echo "smtp.gmail.com:587 USERNAME@gmail.com:PASSWORD" > /etc/postfix/sasl_passwd<br />
chmod 400 /etc/postfix/sasl_passwd<br />
postmap /etc/postfix/sasl_passwd<br />
service postfix restart<br />
<br />
完成了本地邮件服务器的搭建。<br />
<br />
测试下:<br />
echo "Test mail" | mail -s "Test" you@example.com<br />
<br />
查看邮件投递日志:<br />
tail /var/log/mail.log<br />
<br />
这样你的程序就可以直接使用本地的SMTP服务对外发邮件了。<br />
<br />
== 搭建临时的FTP服务 ==<br />
前面已经提到了可以直接使用 Sftp 来访问 Vps,如果需要临时的搭建Ftp,则按下面的指南进行。<br />
<br />
=== 下载 pyftpdlib 库 ===<br />
<br />
在 Putty 使用如下命令,下载 pyftpdlib 库并解压缩。<br />
<pre><br />
cd /root<br />
wget http://pyftpdlib.googlecode.com/files/pyftpdlib-0.7.0.tar.gz<br />
tar xzvf pyftpdlib-0.7.0.tar.gz<br />
</pre><br />
解压缩完毕后,我们可以临时开启ftp了:<br />
<br />
=== 开启匿名ftp服务 ===<br />
<br />
开启匿名ftp服务,主目录为 /var/www ;默认是21端口;-d 是设置主目录。<br />
<br />
cd /root/pyftpdlib-0.7.0/<br />
python -m pyftpdlib.ftpserver -d /var/www<br />
<br />
运行该命令后,客户端就可以使用 anonymous 帐号登录,下载了。<br />
<br />
按 Ctrl+C 结束 Ftp 服务器。<br />
<br />
=== 开启允许写入ftp服务 ===<br />
<br />
添加 -w 参数即可允许写入,不可以长时间开,小心被其它人删除数据。<br />
<br />
cd /root/pyftpdlib-0.7.0/<br />
python -m pyftpdlib.ftpserver -w -d /var/www <br />
<br />
运行该命令后,客户端就可以使用匿名帐号登录,下载和上传了。<br />
<br />
=== 登录ftp的账号 ===<br />
<br />
IP: VPS服务器的IP 用户名: anonymous 密码:随便输入一个邮箱即可。<br />
<br />
=== 关闭ftp服务 ===<br />
直接关闭终端就会退出ftp服务,如果不想关闭可以同时按下 ctrl+c 退出ftp服务。<br />
<br />
== VPS 自我监控 ==<br />
<br />
=== 监控内存和负载 ===<br />
为了防止VPS的内存超过,或系统负载过重,建议采用如下监控脚本:<br />
<br />
规则:当剩余内存小于1M或当前负载大于3时,系统重启。<br />
<br />
在 Putty 里面执行下面的语句,创建 /usr/bin/vpscheck.sh 脚本,<br />
cat << "EOF" > /usr/bin/vpscheck.sh<br />
#!/bin/bash<br />
free_mem=$(grep MemFree /proc/meminfo | awk '{print $2}')<br />
echo 'Free Memory:'$free_mem<br />
if [ $free_mem -lt 1000 ];then<br />
shutdown -r now<br />
fi<br />
load=$(awk '$1 > 3 {print $1}' /proc/loadavg)<br />
echo "Load:"$load<br />
if [ -n "$load" ];then<br />
shutdown -r now<br />
fi<br />
EOF<br />
<br />
再配置定时器,让上面的脚本可以每5分钟运行一次检查,继续在putty里面执行如下命令:<br />
chmod +x /usr/bin/vpscheck.sh<br />
echo "*/5 * * * * root /usr/bin/vpscheck.sh" > /etc/cron.d/vpscheck<br />
service cron restart<br />
<br />
完成性能监控。<br />
<br />
=== 监控网站并发数 ===<br />
为了防止网站无法访问,做如下检测:<br />
<br />
规则:当访问的并发数超过100,系统重启。<br />
<br />
在 Putty 里面执行下面的语句,创建 /usr/bin/wwwcheck.sh 脚本,<br />
cat << "EOF" > /usr/bin/wwwcheck.sh<br />
#!/bin/bash<br />
count=`netstat -na|grep :80|wc -l`<br />
echo 'Count:'$count<br />
if [ $count -gt 100 ];then<br />
shutdown -r now<br />
fi<br />
EOF<br />
<br />
再配置定时器,让上面的脚本可以每5分钟运行一次检查,继续在putty里面执行如下命令:<br />
chmod +x /usr/bin/wwwcheck.sh<br />
echo "*/5 * * * * root /usr/bin/wwwcheck.sh" > /etc/cron.d/wwwcheck<br />
service cron restart<br />
<br />
完成网站并发监控。<br />
<br />
== 安全相关事项 ==<br />
<br />
=== 防止扫描 ===<br />
<br />
vps的root密码不要设置的太简单,这样很容易被攻破,你可以安装如下软件来降低vps被攻破的机会。<br />
<br />
输入如下命令:<br />
<br />
apt-get install fail2ban<br />
<br />
提示如下表示安装完成:<br />
<pre><br />
root@241541:/# ~# apt-get install fail2ban<br />
Reading package lists... Done<br />
Building dependency tree<br />
Reading state information... Done<br />
The following extra packages will be installed:<br />
python-pyinotify<br />
Suggested packages:<br />
python-gamin python-pyinotify-doc<br />
The following NEW packages will be installed:<br />
fail2ban python-pyinotify<br />
0 upgraded, 2 newly installed, 0 to remove and 62 not upgraded.<br />
Need to get 154 kB of archives.<br />
After this operation, 763 kB of additional disk space will be used.<br />
Do you want to continue? [Y/n] y<br />
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/universe fail2ban all 0.8.11-1 [129 kB]<br />
Get:2 http://archive.ubuntu.com/ubuntu/ trusty/main python-pyinotify all 0.9.4-1build1 [24.5 kB]<br />
Fetched 154 kB in 0s (213 kB/s)<br />
Selecting previously unselected package fail2ban.<br />
(Reading database ... 28959 files and directories currently installed.)<br />
Preparing to unpack .../fail2ban_0.8.11-1_all.deb ...<br />
Unpacking fail2ban (0.8.11-1) ...<br />
Selecting previously unselected package python-pyinotify.<br />
Preparing to unpack .../python-pyinotify_0.9.4-1build1_all.deb ...<br />
Unpacking python-pyinotify (0.9.4-1build1) ...<br />
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...<br />
fopen: Permission denied<br />
Setting up fail2ban (0.8.11-1) ...<br />
* Starting authentication failure monitor fail2ban [ OK ]<br />
Setting up python-pyinotify (0.9.4-1build1) ...<br />
</pre><br />
这样如果用户5次密码输入错误,将会自动将其IP加到黑名单,禁止登录10分钟,10分钟后才可以再登录。<br />
<br />
=== 防止php木马 ===<br />
<br />
{{Qref Alarm}} 通过设置限制php的 eval 函数来防止木马,可能会导致某些程序无法正常运行,目前在 Ubuntu 14.04 版本上测试通过。<br />
<br />
编辑 /etc/php5/conf.d/suhosin.ini 文件,如果找不到这个文件,执行如下命令安装 php5-suhosin 模块<br />
<br />
sudo apt-get install php5-suhosin<br />
<br />
打开此文件后,找到行: <br />
;suhosin.executor.eval.blacklist =<br />
<br />
修改为:<br />
<br />
suhosin.executor.eval.blacklist = include,include_once,require,require_once,curl_init,fpassthru,file,base64_encode,base64_decode,mail,exec,system,proc_open,leak,syslog,pfsockopen,shell_exec,ini_restore,symlink,stream_socket_server,proc_nice,popen,proc_get_status,dl, pcntl_exec, pcntl_fork, pcntl_signal,pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled,pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, socket_accept,socket_bind, socket_connect, socket_create, socket_create_listen,socket_create_pair,link,register_shutdown_function,register_tick_function <br />
<br />
然后重启下 apache2 或 php5-fpm 即可<br />
<br />
=== 木马基本检查和手工清除 ===<br />
一般采用如下命令去检查有危险文件:<br />
cd /var/www/<br />
grep -R base64_decode *|more<br />
<br />
如果看到类似这样的东西,就可以肯定中木马了:<br />
<br />
eval(base64_decode("一大串无意义字母<br />
或<br />
eval(base64_decode($_POST["<br />
或<br />
eval(gzuncompress(base64_decode<br />
<br />
最佳方案,重装系统,重新配置过。<br />
<br />
也可以尝试使用下面的命令手工清除<br />
<br />
find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}base64_decode.*?\);//g" {} \;<br />
find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}gzuncompress.{0,10}\(.{0,10}base64_decode.*?\);//g" {} \;<br />
find /var/www/ -name '*.php' -exec sed -i -r "s/eval.{0,10}\(.{0,10}stripslashes.*?\);//g" {} \;<br />
<br />
然后继续检查有没有群发邮件的木马:<br />
<br />
grep -R -E 'POST.*pfsockopen.*EHLO' /var/www/<br />
<br />
发现后,如果确定是木马,采用如下命令批量删除木马文件:<br />
<br />
grep -R -l -E 'POST.*pfsockopen.*EHLO' /var/www/ | xargs rm -f<br />
<br />
查查 eval 和 fwrite 函数<br />
<br />
grep -R -E 'REQUEST.*eval.*fwrite' /var/www/<br />
<br />
发现后,如果确认是木马,采用如下命令批量删除木马文件:<br />
<br />
grep -R -l -E 'REQUEST.*eval.*fwrite' /var/www/ | xargs rm -f<br />
<br />
最后重点检查 包含 eval 函数的 php 文件<br />
<br />
find . -name "*.php" -exec grep -l eval {} \;<br />
<br />
如果发现有无意义的单词,多半也是中木马了,不过这种需要手工删除相关被感染代码。<br />
<br />
<br />
=== 根据访问日志批量封IP ===<br />
有时候,我们可以去检查 HTTP 的访问日志发现异常,然后根据这些异常来封 IP。<br />
<br />
首先检查异常, 关键词:xmlrpc.php ,下面的命令可以根据你的需求来调整关键词,其中 access.log 为你的 HTTP 的访问日志文件,可以根据实际情况修改。<br />
<br />
执行下面的命令,可以显示所有的 IP 地址,来进行查看:<br />
cat access.log | grep "xmlrpc.php" | awk '{print $1}' | sort | uniq<br />
<br />
确认无误后,执行下面的命令进行封禁:<br />
cat access.log | grep "xmlrpc.php" | awk '{print $1}' | sort | uniq | xargs -n1 -I {} iptables -A INPUT -p tcp --dport 80 -s {}/32 -j DROP<br />
<br />
执行完毕后,可以使用如下命令查看封禁结果:<br />
iptables -L<br />
<br />
注意,上面只是临时封禁,如果重启VPS,将会清空规则。<br />
<br />
=== 关闭邮件服务 ===<br />
由于国外对发垃圾邮件的处罚很重,会导致 VPS 被终止,所以为了防止误发邮件或被木马、黑客利用,如果你不需要发送邮件,则关闭邮件服务:<br />
<br />
1 删除邮件服务<br />
执行如下命令删除服务器的邮件程序:<br />
apt-get remove postfix* sendmail* procmail*<br />
<br />
2 防火墙屏蔽邮件转发<br />
执行如下命令屏蔽邮件端口转发:<br />
iptables -I FORWARD -p tcp --dport 25 -j DROP<br />
sed -i '$i\iptables -I FORWARD -p tcp --dport 25 -j DROP' /etc/rc.local<br />
<br />
== 备份站点 ==<br />
将 vps 成功安装好软件后,面临的第二大的事情是如何备份现有的东西?<br />
<br />
你需要备份 3 个方面的内容: 1 站点配置文件 2 站点文件 3 数据库, 分别讲解如下:<br />
<br />
=== 备份站点配置文件 ===<br />
看前面的设置,一般情况,我们需要备份Apache或Nginx,如果你修改了Mysql的配置,则需要备份Mysql的配置。<br />
<br />
注意在使用 tar 备份时,推荐使用 “tar czf 备份文件名 需要备份的路径” 来备份,你也可以使用 “tar czvf ..." 来显示备份详细的进度;但当备份文件很多时,显示中间的备份过程会很花时间和带宽,所以并不建议使用。<br />
<br />
备份完毕后,就可以直接使用 filezilla 到 /root 目录去下载你备份的文件了。<br />
<br />
==== 备份Apache配置文件 ====<br />
执行如下命令备份Apache的配置到 /root 下 :<br />
<br />
cd<br />
tar czf apache2.tar.gz /etc/apache2<br />
<br />
备份的文件名叫 apache2.tar.gz ,执行结果如下:<br />
root@241541:~# cd<br />
root@241541:~# tar czf apache2.tar.gz /etc/apache2<br />
tar: Removing leading `/' from member names<br />
<br />
检查下备份的文件大小,输入<br />
ls -l apache2.tar.gz<br />
结果显示如下,表示备份成功<br />
root@241541:~# ls -l apache2.tar.gz<br />
-rw-r--r-- 1 root root 31021 Aug 13 18:32 apache2.tar.gz<br />
<br />
==== 备份Nginx配置文件 ====<br />
执行如下命令备份Nginx的配置到 /root 下 :<br />
<br />
cd<br />
tar czf nginx.tar.gz /etc/nginx<br />
<br />
备份的文件名叫 nginx.tar.gz ,执行结果如下:<br />
<br />
root@241541:~# cd<br />
root@241541:~# tar czf nginx.tar.gz /etc/nginx<br />
tar: Removing leading `/' from member names<br />
检查下<br />
root@241541:~# ls -l nginx.tar.gz<br />
-rw-r--r-- 1 root root 5179 Aug 13 18:21 nginx.tar.gz<br />
<br />
==== 备份Mysql配置文件 ====<br />
执行如下命令备份Mysql的配置到 /root 下 :<br />
<br />
cd<br />
tar czf mysql.tar.gz /etc/mysql<br />
<br />
备份的文件名叫 mysql.tar.gz ,执行结果如下:<br />
root@241541:~# cd<br />
root@241541:~# tar czf mysql.tar.gz /etc/mysql<br />
tar: Removing leading `/' from member names<br />
<br />
检查下<br />
root@241541:~# ls -l mysql.tar.gz<br />
-rw-r--r-- 1 root root 2639 Aug 13 18:25 mysql.tar.gz<br />
<br />
=== 备份站点文件 ===<br />
执行如下命令备份 /var/www 的配置到 /root 下 :<br />
<br />
cd<br />
tar czf www.tar.gz /var/www<br />
<br />
备份的文件名叫 www.tar.gz ,执行结果如下:<br />
root@241541:~# cd<br />
root@241541:~# tar czf www.tar.gz /var/www<br />
tar: Removing leading `/' from member names<br />
<br />
检查如下<br />
root@241541:~# ls -l www.tar.gz<br />
-rw-r--r-- 1 root root 12042534 Aug 13 18:43 www.tar.gz<br />
<br />
=== 备份数据库 ===<br />
由于数据库本身包含了帐号和权限信息,所以我们完整备份整个数据库。<br />
<br />
执行以下命令备份数据库到 /root 目录<br />
<br />
cd<br />
mysqldump -p --all-databases |gzip > mysql.sql.gz<br />
<br />
会提示输入密码,输入mysql的密码后回车完成备份,如下所示。<br />
<br />
root@241541:~# mysqldump -p --all-databases |gzip > mysql.sql.gz<br />
Enter password:<br />
<br />
备份的文件名为 mysql.sql.gz ,检查一下备份的时间和大小<br />
root@241541:~# ls -l mysql.sql.gz<br />
-rw-r--r-- 1 root root 133351 Aug 13 19:01 mysql.sql.gz<br />
<br />
== 恢复站点 ==<br />
当 vps 出现故障后如何恢复?<br />
<br />
首先你需要重新去reload系统到原来的系统,然后再按照前面的指南,安装好和之前一样的运行环境。<br />
<br />
然后将你备份的所有文件使用 filezilla 上传到 vps 的 /root 目录下。<br />
<br />
最后需要恢复 3 个方面的内容: 1 站点配置文件 2 站点文件 3 数据库, 分别讲解如下:<br />
<br />
=== 恢复站点配置文件 ===<br />
==== 恢复Apache配置文件 ====<br />
假设 apache 的备份文件名为 apache2.tar.gz ,使用 putty 登录 vps ,执行如下命令恢复:<br />
cd<br />
tar xzf apache2.tar.gz<br />
cp -a etc/apache2 /etc/apache2<br />
<br />
执行结果如下,不会有任何回应:<br />
root@241541:~# cd<br />
root@241541:~# tar xzf apache2.tar.gz<br />
root@241541:~# cp -a etc/apache2 /etc/<br />
<br />
使用如下命令重启 Apache2 :<br />
service apache2 restart<br />
<br />
==== 恢复Nginx配置文件 ====<br />
假设 nginx 的备份文件名为 nginx.tar.gz ,使用 putty 登录 vps ,执行如下命令恢复:<br />
cd<br />
tar xzf nginx.tar.gz<br />
cp -a etc/nginx /etc/nginx<br />
<br />
执行结果如下,不会有任何回应:<br />
root@241541:~# cd<br />
root@241541:~# tar xzf nginx.tar.gz<br />
root@241541:~# cp -a etc/nginx /etc/<br />
<br />
使用如下命令重启 nginx :<br />
service nginx restart<br />
<br />
==== 恢复Mysql配置文件 ====<br />
假设 mysql 的备份文件名为 mysql.tar.gz ,使用 putty 登录 vps ,执行如下命令恢复:<br />
cd<br />
tar xzf mysql.tar.gz<br />
cp -a etc/mysql /etc/<br />
<br />
执行结果如下,不会有任何回应:<br />
root@241541:~# cd<br />
root@241541:~# tar xzf mysql.tar.gz<br />
root@241541:~# cp -a etc/mysql /etc/mysql<br />
<br />
=== 恢复站点文件 ===<br />
由于站点占用的空间比较大,所有我们不复制过去,解压缩后直接移动过去。<br />
<br />
假设站点的备份文件名为 www.tar.gz ,使用 putty 登录 vps ,执行如下命令恢复:<br />
cd<br />
tar xzf www.tar.gz<br />
rm -fr /var/www/*<br />
mv var/www/* /var/www/<br />
<br />
执行结果如下,不会有任何回应:<br />
root@241541:~# cd<br />
root@241541:~# tar xzf www.tar.gz<br />
root@241541:~# rm -fr /var/www/*<br />
root@241541:~# mv var/www/* /var/www/<br />
<br />
=== 恢复数据库 ===<br />
假设 mysql 的备份文件名为 mysql.sql.gz ,使用 putty 登录 vps ,执行如下命令恢复:<br />
cd<br />
gunzip < mysql.sql.gz | mysql -p<br />
<br />
会提示输入当前新安装的mysql密码,输入密码后回车继续。<br />
<br />
执行结果如下:<br />
root@241541:~# cd<br />
root@241541:~# gunzip < mysql.sql.gz | mysql -p<br />
Enter password:<br />
<br />
== 使用 Dropbox 每天自动备份 ==<br />
=== 注册 Dropbox ===<br />
Dropbox 是一个美国的在线网盘,默认提供了2G的空间,同时可以通过邀请其他朋友使用的手段增加容量。<br />
<br />
为什么使用这个,主要是 VPS 到 Dropbox 备份可以到 1M 的真实传输速度,加上可以加容量,所以是非常理想的备份方式。<br />
<br />
点击 [http://db.tt/EnmvJ8Ho 注册 Dropbox] 并登录到 Dropbox 网页。<br />
<br />
BTW:淘宝上也有人提供扩容到20G的服务,风险自行承担。<br />
<br />
Dropbox 将申请150M内存,实际消耗17M内存,所以请注意控制内存。<br />
<br />
[[Image:Vps dropbox.png]]<br />
<br />
=== 安装 Dropbox 客户端 ===<br />
打开 putty 执行如下命令安装,如果是32位的系统,采用如下命令。执行完毕后,请不要再执行下面给64位系统执行的命令:<br />
<pre>cd ~ && wget -O - https://www.dropbox.com/download?plat=lnx.x86 | tar xzf -</pre><br />
64位系统的采用如下命令,<br />
<pre> cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -</pre><br />
执行结果如下所示:<br />
<br />
<pre><br />
root@241541:~# cd ~ && wget -O - https://www.dropbox.com/download?plat=lnx.x86 | tar xzf -<br />
--2012-02-22 06:44:40-- https://www.dropbox.com/download?plat=lnx.x86<br />
Resolving www.dropbox.com... 199.47.217.171, 199.47.216.170, 199.47.216.171, ...<br />
Connecting to www.dropbox.com|199.47.217.171|:80... connected.<br />
HTTP request sent, awaiting response... 302 FOUND<br />
Location: https://dl-web.dropbox.com/u/17/dropbox-lnx.x86-1.2.52.tar.gz [following]<br />
--2012-02-22 06:44:40-- https://dl-web.dropbox.com/u/17/dropbox-lnx.x86-1.2.52.tar.gz<br />
Resolving dl-web.dropbox.com... 107.20.132.92, 107.20.138.135, 107.20.170.126, ...<br />
Connecting to dl-web.dropbox.com|107.20.132.92|:80... connected.<br />
HTTP request sent, awaiting response... 200 OK<br />
Length: 15794278 (15M) [application/x-tar]<br />
Saving to: `STDOUT'<br />
<br />
100%[======================================>] 15,794,278 893K/s in 15s <br />
<br />
2012-02-22 06:44:57 (1.01 MB/s) - written to stdout [15794278/15794278]<br />
</pre><br />
<br />
看到类似信息,表示安装完成。<br />
<br />
=== 设置帐号 ===<br />
<br />
执行如下命令开始设置帐号<br />
~/.dropbox-dist/dropboxd<br />
<br />
当看到 <br />
<pre>Please visit https://www.dropbox.com/cli_link?host_id=xxx&cl=en_US to link this machine. </pre><br />
的提示时,复制里面https的链接地址使用浏览器打开,会出现Dropbox的密码框,输入你刚刚注册的密码,等到 putty 里面出现 <br />
Client successfully linked, Welcome xxx! <br />
的提示即可完成设置。完成后,使用 Ctrl+C 键中断运行。<br />
<br />
完整如下所示:<br />
<br />
<pre><br />
root@241541:~# ~/.dropbox-dist/dropboxd <br />
This client is not linked to any account...<br />
Please visit https://www.dropbox.com/cli_link?host_id=db0a5acabdf1fba62f360ffb8ebe910e&cl=en_US to link this machine.<br />
This client is not linked to any account...<br />
Please visit https://www.dropbox.com/cli_link?host_id=db0a5acabdf1fba62f360ffb8ebe910e&cl=en_US to link this machine.<br />
This client is not linked to any account...<br />
Please visit https://www.dropbox.com/cli_link?host_id=db0a5acabdf1fba62f360ffb8ebe910e&cl=en_US to link this machine.<br />
This client is not linked to any account...<br />
Please visit https://www.dropbox.com/cli_link?host_id=db0a5acabdf1fba62f360ffb8ebe910e&cl=en_US to link this machine.<br />
Client successfully linked, Welcome guest!<br />
</pre><br />
<br />
=== 开始使用 ===<br />
完成以上设置后,会在当然的目录下出现 Dropbox 目录,这个目录就是同步目录,当在这个目录下放置的任何文件都会同步到 Dropbox 网盘上。<br />
<br />
root@241541:~# ls<br />
Dropbox<br />
root@241541:~# cd Dropbox/<br />
root@241541:~/Dropbox# ls<br />
Getting Started.pdf Photos Public<br />
<br />
第一次测试:<br />
在Dropbox目录下创建一个内容为 Hello 的 a.txt 文件。<br />
root@241541:~/Dropbox# echo "Hello" > a.txt<br />
<br />
运行同步程序<br />
root@241541:~/Dropbox# ~/.dropbox-dist/dropboxd <br />
<br />
打开Dropbox网页的 Files ,就会看到你的文件了。<br />
输入 Ctrl+C 中断同步,下面开始讲如何配置自动运行同步。<br />
<br />
=== 自动运行 Dropbox ===<br />
512M内存的VPS请不要自动启动服务,需要时,手工运行即可,启动后会太占内存。<br />
<br />
直接复制下面的命令到Putty并执行,以下为创建 dropbox 的自动启动文件,命令内容如下:<br />
<br />
<pre><br />
cat << "EOF" > /etc/init.d/dropbox<br />
#!/bin/bash<br />
# dropbox service<br />
DAEMON=.dropbox-dist/dropboxd<br />
<br />
start() {<br />
echo "Starting dropbox..."<br />
if [ -x /root/$DAEMON ]; then<br />
HOME="/root" start-stop-daemon -b -o -c root -S -u root -x /root/$DAEMON<br />
fi<br />
}<br />
<br />
stop() {<br />
echo "Stopping dropbox..."<br />
if [ -x /root/$DAEMON ]; then<br />
start-stop-daemon -o -c root -K -u root -x /root/$DAEMON<br />
fi<br />
}<br />
<br />
status() {<br />
dbpid=`pgrep -u root dropboxd`<br />
if [ -z $dbpid ]; then<br />
echo "dropboxd not running."<br />
else<br />
echo "dropboxd running (pid $dbpid)"<br />
fi<br />
}<br />
<br />
<br />
case "$1" in<br />
start)<br />
start<br />
;;<br />
<br />
stop)<br />
stop<br />
;;<br />
<br />
restart|reload|force-reload)<br />
stop<br />
start<br />
;;<br />
<br />
status)<br />
status<br />
;;<br />
<br />
*)<br />
echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}"<br />
exit 1<br />
<br />
esac<br />
<br />
exit 0<br />
EOF<br />
</pre><br />
<br />
然后继续执行如下命令,设置自动启动 dropbox 同步服务:<br />
<br />
chmod +x /etc/init.d/dropbox<br />
update-rc.d dropbox defaults<br />
/etc/init.d/dropbox start<br />
<br />
执行命令的结果如下所示:<br />
<pre><br />
root@241541:~/Dropbox# sed -i "s/\r//" /etc/init.d/dropbox <br />
root@241541:~/Dropbox# chmod +x /etc/init.d/dropbox<br />
root@241541:~/Dropbox# update-rc.d dropbox defaults<br />
perl: warning: Setting locale failed.<br />
perl: warning: Please check that your locale settings:<br />
LANGUAGE = (unset),<br />
LC_ALL = (unset),<br />
LANG = "zh_CN.UTF-8"<br />
are supported and installed on your system.<br />
perl: warning: Falling back to the standard locale ("C").<br />
update-rc.d: warning: /etc/init.d/dropbox missing LSB information<br />
update-rc.d: see <http://wiki.debian.org/LSBInitScripts><br />
Adding system startup for /etc/init.d/dropbox ...<br />
/etc/rc0.d/K20dropbox -> ../init.d/dropbox<br />
/etc/rc1.d/K20dropbox -> ../init.d/dropbox<br />
/etc/rc6.d/K20dropbox -> ../init.d/dropbox<br />
/etc/rc2.d/S20dropbox -> ../init.d/dropbox<br />
/etc/rc3.d/S20dropbox -> ../init.d/dropbox<br />
/etc/rc4.d/S20dropbox -> ../init.d/dropbox<br />
/etc/rc5.d/S20dropbox -> ../init.d/dropbox<br />
root@241541:~/Dropbox# /etc/init.d/dropbox start<br />
Starting dropbox...<br />
</pre><br />
现在你的VPS已经可以自动同步 /root/Dropbox 目录下的所有文件了。<br />
<br />
=== 自动每天备份数据库和站点 ===<br />
输入如下命令,创建自动备份脚本,注意脚本中的“数据库密码”需要换成你自己的Mysql数据库密码:<br />
echo '#!/bin/bash' > /etc/cron.daily/dropboxbackup<br />
echo 'tar czf /root/Dropbox/www.tar.gz /var/www' >>/etc/cron.daily/dropboxbackup<br />
echo 'mysqldump -p数据库密码 --all-databases |gzip > /root/Dropbox/mysql.sql.gz' >>/etc/cron.daily/dropboxbackup<br />
chmod +x /etc/cron.daily/dropboxbackup<br />
service cron restart<br />
执行结果如下<br />
root@241541:~# echo '#!/bin/bash' > /etc/cron.daily/dropboxbackup<br />
root@241541:~# echo 'tar czf /root/Dropbox/www.tar.gz /var/www' >>/etc/cron.daily/dropboxbackup<br />
root@241541:~# echo 'mysqldump -p123456 --all-databases |gzip > /root/Dropbox/mysql.sql.gz' >>/etc/cron.daily/dropboxbackup<br />
root@241541:~# chmod +x /etc/cron.daily/dropboxbackup<br />
root@241541:~# service cron restart <br />
Rather than invoking init scripts through /etc/init.d, use the service(8)<br />
utility, e.g. service cron restart<br />
<br />
Since the script you are attempting to invoke has been converted to an<br />
Upstart job, you may also use the restart(8) utility, e.g. restart cron<br />
cron start/running, process 3094<br />
<br />
看到上面的提示,表示自动备份设置完成,然后你可以手工执行下 /etc/cron.daily/dropboxbackup 看看效果。<br />
<br />
== 使用 BitTorrent Sync 备份系统 ==<br />
<br />
=== 说明 ===<br />
这个是 BitTorrent 公司写的一个非开源备份系统,具体请自行 Google,这里直接讲如何安装和使用。<br />
<br />
使用这个好处有两点,第一:占用内存非常少,不到20M;第二:不限空间,可以直接备份到你的本地电脑。<br />
<br />
=== 安装 ===<br />
在 Putty 里面,依次执行如下命令安装,安装过程中在提示输入[Y]或[ENTER]的地方,直接回车即可:<br />
apt-get install python-software-properties<br />
add-apt-repository ppa:tuxpoldo/btsync<br />
apt-get update<br />
apt-get install btsync<br />
<br />
当出现 “The password for accessing the web interface:” 提示输入密码时,输入你的管理密码;其余默认,直接回车即可。<br />
<br />
安装完毕后,btsync 的配置文件在 /etc/btsync/debconf-default.conf ,你可以去修改这个文件,配置新的密码。<br />
<br />
修改密码后,需要重启 btsync 服务:<br />
service btsync restart<br />
<br />
=== 使用 ===<br />
打开浏览器访问 http://VPSIP:8888 ,在本例中如下: http://184.82.9.30:8888 <br />
<br />
登录默认账号: admin ,密码是你前面输入的。<br />
<br />
好了,然后 点击 Add Folder 按钮选择需要备份的目录(推荐备份 /var 目录),并产生一个随机安全 Secret 号。<br />
<br />
=== 客户端安装 ===<br />
访问 http://labs.bittorrent.com/experiments/sync.html ,点击红色的 Download 按钮,再点击 Windows 按钮,下载并安装<br />
<br />
打开程序,输入前面得到的随机安全 Secret 号,选择一个下载的目录,你会看到,备份开始了。<br />
<br />
大功告成。<br />
<br />
== 安装 Zend Guard Loader ==<br />
一般情况我们推荐直接安装 Zend Guard Loader 来代替 Zend Optimizer,因为 Zend Optimizer 已经过时,并且不被支持。<br />
<br />
<pre><br />
cd ~<br />
wget http://phpcj.googlecode.com/files/ZendGuardLoader.so<br />
mkdir -p /usr/local/zend/<br />
cp ZendGuardLoader.so /usr/local/zend/ZendGuardLoader.so<br />
echo "zend_extension=/usr/local/zend/ZendGuardLoader.so" > /etc/php5/conf.d/zend.ini<br />
echo "zend_loader.enable=1" >> /etc/php5/conf.d/zend.ini<br />
</pre><br />
<br />
然后重启下php即可。<br />
<br />
== 关于Zend Optimizer ==<br />
如果已经安装了上面的 Zend Guard Loader,请忽略执行本段。<br />
<br />
关于Zend,我们推荐安装上面的 Zend Guard Loader ,Zend Optimizer 已经被官方放弃,如果一定需要,请看本段。<br />
<br />
由于Zend Optimizer 不支持 php 5.3.x ,如果必须要使用,则需要降级:<br />
<br />
注意不要去尝试安装 ZendServer-CE 的 optimizerplus 或 Zend Guard Loader,因为,php 5.3.x 上的解密都不支持 php5.2.x 上的加密,除非你手头上的加密程序可以重新针对 php 5.3.x 重新加密,所以必须降级 php 的版本为 5.2.x 。<br />
<br />
并且仅仅支持 Apache , 不支持 Nginx (问题是降级后不再支持 php5-fpm,当然有能力者,可以采用 spawn-fcgi 来代替)。<br />
<br />
如果是Nginx用户,请还原到 Apache 环境,并且参考上面步骤事先安装好Apache和php,并测试php正常运行。<br />
<br />
=== php 降级 ===<br />
依次逐行输入如下命令:<br />
<br />
apt-get install aptitude lsb-release<br />
php_installed=`dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`<br />
aptitude purge $php_installed<br />
echo -e "Package: php5\nPin: release a=karmic\nPin-Priority: 991\n" > /etc/apt/preferences.d/php <br />
apt-cache search php5-|grep php5-|awk '{print "Package:", $1,"\nPin: release a=karmic\nPin-Priority: 991\n"}' >> /etc/apt/preferences.d/php <br />
apt-cache search -n libapache2-mod-php5 |awk '{print "Package:", $1,"\nPin: release a=karmic\nPin-Priority: 991\n"}' >> /etc/apt/preferences.d/php <br />
echo -e "Package: php-pear\nPin: release a=karmic\nPin-Priority: 991\n" >> /etc/apt/preferences.d/php <br />
egrep '(main restricted|universe|multiverse)' /etc/apt/sources.list|grep -v "#"| sed s/`lsb_release -s -c`/karmic/g | sed s/'http:\/\/.*\/'/'http:\/\/old-releases.ubuntu.com\/'/g > /etc/apt/sources.list.d/karmic.list<br />
apt-get update<br />
apt-get install $php_installed<br />
aptitude hold `dpkg -l | grep php5| awk '{print $2}' |tr "\n" " "`<br />
<br />
<br />
如果碰到如下:<br />
<br />
Do you want to continue? [Y/n/?] <br />
<br />
请出入 y 回车继续<br />
<br />
=== php 高级安装技巧 ===<br />
如果需要支持nginx或采用fastcgi来运行php,在执行完毕上面的步骤后,参考如下命令安装(注意,Apache环境不需要执行):<br />
<br />
采用fastcgi,即用于spawn-fcgi:<br />
aptitude install -t karmic php5-cli php5-cgi <br />
<br />
返回到Apache:<br />
apt-get install -t karmic libapache2-mod-php5<br />
<br />
=== 安装 Zend Optimizer ===<br />
<pre><br />
cd ~<br />
wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz<br />
tar zxvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz<br />
mkdir -p /usr/local/zend/<br />
cp ZendOptimizer-3.3.3-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/local/zend/<br />
echo "zend_extension=/usr/local/zend/ZendOptimizer.so" > /etc/php5/conf.d/zend.ini<br />
</pre><br />
<br />
=== 安装成功验证 ===<br />
运行:<br />
<br />
php -v<br />
<br />
返回如下提示:<br />
<br />
root@241541:~# php -v<br />
PHP 5.2.10-2ubuntu6 with Suhosin-Patch 0.9.7 (cli) (built: Oct 23 2009 16:30:10)<br />
<br />
Copyright (c) 1997-2009 The PHP Group<br />
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies<br />
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies<br />
<br />
显示成功安装 Zend Optimizer。<br />
<br />
=== 重启 Web 服务 ===<br />
如果是 apache :<br />
service apache2 restart<br />
如果是Nginx:<br />
service php5-fpm restart<br />
<br />
== VPN 和代理 ==<br />
=== 安装 OpenVPN ===<br />
[[OpenVPN]] 支持所有类型的VPS,需要系统支持 Tun/Tap 设备。<br />
<br />
==== 开启 Tun/Tap 支持 ====<br />
XEN VPS 无需开启 Tun/Tap,直接支持,跳过这一步。<br />
<br />
在 putty 里面运行如下命令,检查是否开启了tun设备:<br />
<br />
ls /dev/net/<br />
<br />
如果出现如下提示,表示已经开启,否则需要开启 tun 支持。<br />
<br />
root@241541:/etc/openvpn# ls /dev/net/ <br />
tun<br />
<br />
如果没有发现上面的提示,则需要按下面的办法处理。<br />
<br />
请先登录 [http://http://vps.ubuntu.org.cn/vm 管理面板],打开 VPS 后,点击【设置】,然后再点击【激活TUN/TAP】 <br />
<br />
然后重复上述测试,如果仍然无法找到 tun 设备,尝试手工创建,命令如下:<br />
<br />
mkdir /dev/net <br />
mknod /dev/net/tun c 10 200<br />
<br />
==== 安装 openvpn ====<br />
在 putty 里面运行如下命令安装 openvpn,再提示输入 (Y/n) 时,输入 Y 回车继续:<br />
<br />
apt-get install openvpn<br />
<br />
执行结果如下:<br />
<pre><br />
root@241541:~# apt-get install openvpn<br />
Reading package lists... Done<br />
Building dependency tree <br />
Reading state information... Done<br />
The following extra packages will be installed:<br />
liblzo2-2 libpkcs11-helper1 openvpn-blacklist<br />
Suggested packages:<br />
resolvconf<br />
The following NEW packages will be installed:<br />
liblzo2-2 libpkcs11-helper1 openvpn openvpn-blacklist<br />
0 upgraded, 4 newly installed, 0 to remove and 53 not upgraded.<br />
Need to get 1601kB of archives.<br />
After this operation, 3760kB of additional disk space will be used.<br />
Do you want to continue [Y/n]? <br />
Get:1 http://archive.ubuntu.com/ubuntu/ maverick/main liblzo2-2 i386 2.03-2 [63.4kB]<br />
Get:2 http://archive.ubuntu.com/ubuntu/ maverick/main libpkcs11-helper1 i386 1.07-1build1 [43.8kB]<br />
Get:3 http://archive.ubuntu.com/ubuntu/ maverick/main openvpn-blacklist all 0.4 [1068kB]<br />
Get:4 http://archive.ubuntu.com/ubuntu/ maverick/main openvpn i386 2.1.0-3ubuntu1 [425kB]<br />
Fetched 1601kB in 2s (638kB/s) <br />
Preconfiguring packages ...<br />
Selecting previously deselected package liblzo2-2.<br />
(Reading database ... 27146 files and directories currently installed.)<br />
Unpacking liblzo2-2 (from .../liblzo2-2_2.03-2_i386.deb) ...<br />
Selecting previously deselected package libpkcs11-helper1.<br />
Unpacking libpkcs11-helper1 (from .../libpkcs11-helper1_1.07-1build1_i386.deb) ...<br />
Selecting previously deselected package openvpn-blacklist.<br />
Unpacking openvpn-blacklist (from .../openvpn-blacklist_0.4_all.deb) ...<br />
Selecting previously deselected package openvpn.<br />
Unpacking openvpn (from .../openvpn_2.1.0-3ubuntu1_i386.deb) ...<br />
Setting up liblzo2-2 (2.03-2) ...<br />
Setting up libpkcs11-helper1 (1.07-1build1) ...<br />
Setting up openvpn-blacklist (0.4) ...<br />
Setting up openvpn (2.1.0-3ubuntu1) ...<br />
* Restarting virtual private network daemon(s)... * No VPN is running.<br />
Processing triggers for libc-bin ...<br />
ldconfig deferred processing now taking place<br />
</pre><br />
<br />
==== 配置 openvpn ====<br />
在 Putty 执行依次逐行如下命令,遇到(y/n)的提示输入 y 回车,否则直接回车继续:<br />
<br />
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf<br />
cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/<br />
cd /etc/openvpn/easy-rsa/2.0/<br />
cp openssl-1.0.0.cnf openssl.cnf<br />
source vars<br />
./clean-all<br />
./build-ca<br />
./build-key-server server<br />
./build-key client<br />
./build-dh<br />
<br />
执行上面的命令过程如下所示:<br />
<br />
<pre><br />
root@241541:/etc/openvpn# gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf<br />
root@241541:/etc/openvpn# cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/<br />
root@241541:/etc/openvpn# cd /etc/openvpn/easy-rsa/2.0/<br />
root@241541:/etc/openvpn/easy-rsa/2.0# source vars<br />
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/2.0/keys<br />
root@241541:/etc/openvpn/easy-rsa/2.0# ./clean-all<br />
root@241541:/etc/openvpn/easy-rsa/2.0# ./build-ca<br />
Generating a 1024 bit RSA private key<br />
.++++++<br />
........++++++<br />
writing new private key to 'ca.key'<br />
-----<br />
You are about to be asked to enter information that will be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter '.', the field will be left blank.<br />
-----<br />
Country Name (2 letter code) [US]:<br />
State or Province Name (full name) [CA]:<br />
Locality Name (eg, city) [SanFrancisco]:<br />
Organization Name (eg, company) [Fort-Funston]:<br />
Organizational Unit Name (eg, section) []:<br />
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:<br />
Name []:<br />
Email Address [me@myhost.mydomain]:<br />
root@241541:/etc/openvpn/easy-rsa/2.0# ./build-key-server server<br />
Generating a 1024 bit RSA private key<br />
......++++++<br />
............++++++<br />
writing new private key to 'server.key'<br />
-----<br />
You are about to be asked to enter information that will be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter '.', the field will be left blank.<br />
-----<br />
Country Name (2 letter code) [US]:<br />
State or Province Name (full name) [CA]:<br />
Locality Name (eg, city) [SanFrancisco]:<br />
Organization Name (eg, company) [Fort-Funston]:<br />
Organizational Unit Name (eg, section) []:<br />
Common Name (eg, your name or your server's hostname) [server]:<br />
Name []:<br />
Email Address [me@myhost.mydomain]:<br />
<br />
Please enter the following 'extra' attributes<br />
to be sent with your certificate request<br />
A challenge password []:<br />
An optional company name []:<br />
Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf<br />
Check that the request matches the signature<br />
Signature ok<br />
The Subject's Distinguished Name is as follows<br />
countryName :PRINTABLE:'US'<br />
stateOrProvinceName :PRINTABLE:'CA'<br />
localityName :PRINTABLE:'SanFrancisco'<br />
organizationName :PRINTABLE:'Fort-Funston'<br />
commonName :PRINTABLE:'server'<br />
emailAddress :IA5STRING:'me@myhost.mydomain'<br />
Certificate is to be certified until Jul 28 09:21:30 2022 GMT (3650 days)<br />
Sign the certificate? [y/n]:y<br />
<br />
<br />
1 out of 1 certificate requests certified, commit? [y/n]y<br />
Write out database with 1 new entries<br />
Data Base Updated<br />
<br />
root@241541:/etc/openvpn/easy-rsa/2.0# ./build-key client<br />
Generating a 1024 bit RSA private key<br />
..............++++++<br />
.......................++++++<br />
writing new private key to 'client.key'<br />
-----<br />
You are about to be asked to enter information that will be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter '.', the field will be left blank.<br />
-----<br />
Country Name (2 letter code) [US]:<br />
State or Province Name (full name) [CA]:<br />
Locality Name (eg, city) [SanFrancisco]:<br />
Organization Name (eg, company) [Fort-Funston]:<br />
Organizational Unit Name (eg, section) []:<br />
Common Name (eg, your name or your server's hostname) [client]:<br />
Name []:<br />
Email Address [me@myhost.mydomain]:<br />
<br />
Please enter the following 'extra' attributes<br />
to be sent with your certificate request<br />
A challenge password []:<br />
An optional company name []:<br />
Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf<br />
Check that the request matches the signature<br />
Signature ok<br />
The Subject's Distinguished Name is as follows<br />
countryName :PRINTABLE:'US'<br />
stateOrProvinceName :PRINTABLE:'CA'<br />
localityName :PRINTABLE:'SanFrancisco'<br />
organizationName :PRINTABLE:'Fort-Funston'<br />
commonName :PRINTABLE:'client'<br />
emailAddress :IA5STRING:'me@myhost.mydomain'<br />
Certificate is to be certified until Jul 28 09:22:53 2022 GMT (3650 days)<br />
Sign the certificate? [y/n]:y<br />
<br />
<br />
1 out of 1 certificate requests certified, commit? [y/n]y<br />
Write out database with 1 new entries<br />
Data Base Updated<br />
root@241541:/etc/openvpn/easy-rsa/2.0# ./build-dh<br />
Generating DH parameters, 1024 bit long safe prime, generator 2<br />
This is going to take a long time<br />
...............+..........................................................................+.............+.....................+.....................................+....................................<br />
............................................................................+.........................................................+......................................................................<br />
..................................................+...........................................................................................................................................................<br />
...........................+...................................................+.......................................................................................................................+....<br />
..........................................+.......................................+..........................................................................................................................<br />
...........................................................+............................................................................................+....................................................<br />
.+.............+......................+.............................................................+..+.....................+....................................................................+....<br />
...........................+..+..+.....+...+...............++*++*++*<br />
</pre><br />
<br />
将刚才创建的文件复制到配置目录,继续执行如下命令:<br />
<br />
cd /etc/openvpn<br />
cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt .<br />
cp /etc/openvpn/easy-rsa/2.0/keys/server.crt .<br />
cp /etc/openvpn/easy-rsa/2.0/keys/server.key .<br />
cp /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem .<br />
<br />
执行结果如下:<br />
<br />
root@241541:/etc/openvpn/easy-rsa/2.0# cd /etc/openvpn<br />
root@241541:/etc/openvpn# cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt .<br />
root@241541:/etc/openvpn# cp /etc/openvpn/easy-rsa/2.0/keys/server.crt .<br />
root@241541:/etc/openvpn# cp /etc/openvpn/easy-rsa/2.0/keys/server.key .<br />
root@241541:/etc/openvpn# cp /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem .<br />
<br />
为了更方便的使用openvpn,这里我们需要修改openvpn的协议和端口,我们将通讯协议改为 tcp,端口改为 https 的端口号 443。<br />
<br />
继续在 putty 里面执行如下命令:<br />
sed -i 's/port.*/port 443/' /etc/openvpn/server.conf<br />
sed -i 's/;proto tcp.*/proto tcp/' /etc/openvpn/server.conf<br />
sed -i 's/.*proto udp.*/;proto udp/' /etc/openvpn/server.conf<br />
sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/' /etc/openvpn/server.conf<br />
sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.222.220"/' /etc/openvpn/server.conf<br />
sed -i 's/keepalive 10 120/keepalive 1000 12000/' /etc/openvpn/server.conf<br />
sed -i 's/;push "redirect-gateway.*/push "redirect-gateway def1 bypass-dhcp"/' /etc/openvpn/server.conf<br />
<br />
执行结果如下所示:<br />
root@241541:/etc/openvpn# sed -i 's/port.*/port 443/' /etc/openvpn/server.conf<br />
root@241541:/etc/openvpn# sed -i 's/;proto tcp.*/proto tcp/' /etc/openvpn/server.conf<br />
root@241541:/etc/openvpn# sed -i 's/.*proto udp.*/;proto udp/' /etc/openvpn/server.conf<br />
root@241541:/etc/openvpn# sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/' /etc/openvpn/server.conf<br />
root@241541:/etc/openvpn# sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.222.220"/' /etc/openvpn/server.conf<br />
root@241541:/etc/openvpn# sed -i 's/keepalive 10 120/keepalive 1000 12000/' /etc/openvpn/server.conf<br />
root@241541:/etc/openvpn# sed -i 's/;push "redirect-gateway.*/push "redirect-gateway def1 bypass-dhcp"/' /etc/openvpn/server.conf<br />
<br />
配置完成,执行如下命令重启 openvpn :<br />
service openvpn restart<br />
<br />
执行结果如下:<br />
<br />
root@241541:/etc/openvpn# service openvpn restart<br />
* Stopping virtual private network daemon(s)... * Stopping VPN 'server' [ OK ]<br />
* Starting virtual private network daemon(s)... * Autostarting VPN 'server' [ OK ]<br />
<br />
==== 配置 防火墙 ====<br />
在Putty里面执行如下命令:<br />
<br />
打开 IP 转发:<br />
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf<br />
sysctl -p<br />
<br />
执行如下命令配置防火墙:<br />
<br />
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE<br />
iptables-save > /etc/iptables-rules<br />
echo '#!/bin/sh' > /etc/network/if-up.d/iptablesload<br />
echo 'iptables-restore < /etc/iptables-rules' >> /etc/network/if-up.d/iptablesload<br />
echo 'exit 0' >> /etc/network/if-up.d/iptablesload<br />
chmod +x /etc/network/if-up.d/iptablesload<br />
<br />
大功告成,可以使用 OPEN VPN 了。<br />
<br />
==== 配置客户端 ====<br />
1 安装 openvpn 客户端<br />
<br />
请点击 [http://openvpn.ustc.edu.cn/openvpn-2.1.3-install.exe openvpn 2.1.3] 下载并安装。<br />
<br />
2 复制配置文件<br />
<br />
将安装目录的 sample-config 目录下面的 client.ovpn 复制到 安装目录下的 config 目录<br />
<br />
如将 C:\Program Files\OpenVPN\sample-config\client.ovpn 复制到 C:\Program Files\OpenVPN\config 目录<br />
<br />
3 修改 client.ovpn 配置文件<br />
<br />
不要直接使用windows的记事本修改,请使用例如 Notepad++ 或 UltraEdit 等编辑器编辑<br />
<br />
修改传输协议,注意请使用半角编辑,即关闭输入法进行编辑。 <br />
<br />
找到 <br />
;proto tcp <br />
的行,删除前面的 ; 号,修改为 <br />
<br />
proto tcp <br />
<br />
找到 <br />
proto udp <br />
行,在前面加上 ; 号,修改为 <br />
;proto udp <br />
<br />
修改,需要连接的远程地址和端口:<br />
<br />
找到 <br />
remote my-server-1 1194 <br />
行,修改为:<br />
remote 你的VPS的IP 443 <br />
例如,(不可以照抄,需要将 184.82.9.30 改为你自己的VPS的地址):<br />
remote 184.82.9.30 443 <br />
<br />
4 下载客户端证书文件<br />
<br />
使用 filezilla 连接到服务器,到 /etc/openvpn/easy-rsa/2.0/keys 目录,将服务器的 ca.crt client.crt client.csr client.key 下载到 本地 openvpn 安装目录下的 config 目录,如下图所示:<br />
<br />
[[Image:Vps_openvpn_client.jpg]]<br />
<br />
5 运行菜单里面的 OpenVPN GUI,出现在系统右下角,点击红色网络图标,右键 选择 connect 点击,图标变为绿色,即连接上。<br />
<br />
=== 安装 PPTP VPN ===<br />
[[PPTPServer]] [[VPN]] 需要VPS支持 PPP 设备。<br />
==== 开启 PPP 支持 ====<br />
XEN VPS 无需开启,直接支持,跳过这一步。<br />
<br />
在 putty 里面运行如下命令,检查是否开启了tun设备:<br />
<br />
ls /dev/ppp<br />
<br />
如果出现如下提示,表示已经开启,否则需要开启 ppp 支持。<br />
<br />
root@241541:/etc/openvpn# ls /dev/ppp <br />
/dev/ppp<br />
<br />
如果没有发现上面的提示,则需要按下面的办法处理。<br />
<br />
如果是OPENVZ 的VPS,请先登录 [http://http://vps.ubuntu.org.cn/vm 管理面板],打开 VPS 后,点击【设置】,然后再点击【激活PPP】<br />
<br />
然后重复上述测试,如果还是无法找到 ppp 设备,尝试重启下 VPS 。<br />
<br />
==== 安装 pptpd 服务 ====<br />
执行如下命令安装,遇到提示输入 Y/n 时,输入 Y 回车即可:<br />
apt-get install pptpd<br />
<br />
执行结果如下:<br />
<pre>root@289085:~# apt-get install pptpd<br />
Reading package lists... Done<br />
Building dependency tree <br />
Reading state information... Done<br />
The following extra packages will be installed:<br />
bcrelay libpcap0.8 ppp<br />
The following NEW packages will be installed:<br />
bcrelay libpcap0.8 ppp pptpd<br />
0 upgraded, 4 newly installed, 0 to remove and 1 not upgraded.<br />
Need to get 542 kB of archives.<br />
After this operation, 1,872 kB of additional disk space will be used.<br />
Do you want to continue [Y/n]? <br />
Get:1 http://archive.ubuntu.com/ubuntu/ oneiric/main libpcap0.8 i386 1.1.1-8 [117 kB]<br />
Get:2 http://archive.ubuntu.com/ubuntu/ oneiric/main ppp i386 2.4.5-5ubuntu1 [334 kB]<br />
Get:3 http://archive.ubuntu.com/ubuntu/ oneiric/main bcrelay i386 1.3.4-5ubuntu1 [10.7 kB]<br />
Get:4 http://archive.ubuntu.com/ubuntu/ oneiric/main pptpd i386 1.3.4-5ubuntu1 [80.4 kB]<br />
Fetched 542 kB in 2s (242 kB/s)<br />
Selecting previously deselected package libpcap0.8.<br />
(Reading database ... 24582 files and directories currently installed.)<br />
Unpacking libpcap0.8 (from .../libpcap0.8_1.1.1-8_i386.deb) ...<br />
Selecting previously deselected package ppp.<br />
Unpacking ppp (from .../ppp_2.4.5-5ubuntu1_i386.deb) ...<br />
Removing any system startup links for /etc/init.d/ppp ...<br />
Selecting previously deselected package bcrelay.<br />
Unpacking bcrelay (from .../bcrelay_1.3.4-5ubuntu1_i386.deb) ...<br />
Selecting previously deselected package pptpd.<br />
Unpacking pptpd (from .../pptpd_1.3.4-5ubuntu1_i386.deb) ...<br />
Processing triggers for man-db ...<br />
Processing triggers for ureadahead ...<br />
Setting up libpcap0.8 (1.1.1-8) ...<br />
Setting up ppp (2.4.5-5ubuntu1) ...<br />
Setting up bcrelay (1.3.4-5ubuntu1) ...<br />
Setting up pptpd (1.3.4-5ubuntu1) ...<br />
Starting PPTP Daemon: pptpd.<br />
Processing triggers for libc-bin ...<br />
ldconfig deferred processing now taking place<br />
</pre><br />
<br />
==== 配置 pptpd ====<br />
为了避免和本地网络冲突,我们创建VPN的IP范围为 10.0.0.2-10.0.0.200 <br />
<br />
执行如下命令:<br />
sed -i "s/#debug/debug/" /etc/pptpd.conf<br />
echo 'localip 10.0.0.1' >> /etc/pptpd.conf<br />
echo 'remoteip 10.0.0.2-200' >> /etc/pptpd.conf<br />
echo 'ms-dns 8.8.8.8' >> /etc/ppp/pptpd-options<br />
echo 'ms-dns 8.8.4.4' >> /etc/ppp/pptpd-options<br />
echo 'nopcomp' >> /etc/ppp/pptpd-options<br />
echo 'noaccomp' >> /etc/ppp/pptpd-options<br />
<br />
继续增加 pptp 用户帐号:<br />
<br />
格式为 [UserName] pptpd [Password] * ,我们增加一个 guest 密码 为 123456 的用户如下:<br />
<br />
echo 'guest * 123456 *' >> /etc/ppp/chap-secrets<br />
<br />
重启下pptpd:<br />
service pptpd restart<br />
<br />
注意:如果需要在 iphone 上使用,请在 iphone 的 PPTP 设置页将 "加密级别" 设置为 "最高" ,否则将无法连接上。<br />
<br />
==== 配置防火墙 ====<br />
<br />
打开 IP 转发:<br />
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf<br />
sysctl -p<br />
<br />
配置防火墙:<br />
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j MASQUERADE<br />
iptables-save > /etc/iptables-rules<br />
echo '#!/bin/sh' > /etc/network/if-up.d/iptablesload<br />
echo 'iptables-restore < /etc/iptables-rules' >> /etc/network/if-up.d/iptablesload<br />
echo 'exit 0' >> /etc/network/if-up.d/iptablesload<br />
chmod +x /etc/network/if-up.d/iptablesload<br />
<br />
重启下pptpd:<br />
service pptpd restart<br />
<br />
大功告成,可以使用 PPTP VPN 了。<br />
<br />
==== 检查日志 ====<br />
使用如下命令检查拨号日志:<br />
tail -f /var/log/syslog<br />
<br />
=== 安装 L2TP VPN ===<br />
[[L2TPServer]] 需要 VPS 支持 PPP 设备<br />
<br />
XEN 完全支持 L2TP + IPSec ,OpenVZ 支持 L2TP 但不支持 ipsec 加密。如果希望流量加密,需要更换为 XEN 的VPS。<br />
<br />
由于 OpenVZ 无法开启内核级的 IPSec ,所以默认 OSX/IOS 无法使用,可以创建或修改 /etc/ppp/options 文件,并添加 下面的内容:<br />
plugin L2TP.ppp<br />
l2tpnoipsec<br />
<br />
注:IOS需要越狱后才可以修改或创建此文件。推荐安装下一个章节中的独立 IPSec VPN 服务,这样就Apple 用户就不需要越狱,直接支持。<br />
<br />
OpenVZ 的 Vps 安装 L2TP 前,请先参考上一节先确认 VPS 是否已经开启了 PPP 的支持。<br />
<br />
==== 安装 xl2tpd ====<br />
执行如下命令安装 xl2tpd ,遇到提示输入 Y/n 时,输入 Y 回车即可:<br />
<br />
apt-get install xl2tpd ppp<br />
<br />
==== 配置 xl2tpd ====<br />
执行完毕后,继续执行如下命令配置 xl2tpd , 为了避免和本地网络冲突,我们创建VPN的IP范围为 10.0.0.2-10.0.0.200:<br />
<br />
<pre><br />
cat << "EOF" > /etc/xl2tpd/xl2tpd.conf<br />
[global]<br />
ipsec saref = no<br />
<br />
[lns default]<br />
ip range = 10.0.0.2-10.0.0.200<br />
local ip = 10.0.0.1<br />
refuse chap = yes<br />
refuse pap = yes<br />
require authentication = yes<br />
ppp debug = yes<br />
pppoptfile = /etc/ppp/xl2tpd-options<br />
length bit = yes <br />
EOF</pre><br />
<br />
继续执行下面的命令配置拨号属性:<br />
<pre><br />
cat << "EOF" > /etc/ppp/xl2tpd-options<br />
require-mppe<br />
require-mschap-v2<br />
asyncmap 0<br />
auth<br />
crtscts<br />
lock<br />
hide-password<br />
modem<br />
name l2tpd<br />
proxyarp<br />
lcp-echo-interval 30<br />
lcp-echo-failure 4<br />
ms-dns 8.8.8.8<br />
ms-dns 8.8.4.4 <br />
EOF</pre><br />
<br />
继续增加 l2tpd 用户帐号:<br />
<br />
格式为 [UserName] l2tpd [Password] * ,我们增加一个 guest 密码 为 123456 的用户如下:<br />
<br />
echo 'guest * 123456 *' >> /etc/ppp/chap-secrets<br />
<br />
==== 配置防火墙 ====<br />
<br />
打开 IP 转发:<br />
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf<br />
sysctl -p<br />
<br />
配置防火墙:<br />
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j MASQUERADE<br />
iptables-save > /etc/iptables-rules<br />
echo '#!/bin/sh' > /etc/network/if-up.d/iptablesload<br />
echo 'iptables-restore < /etc/iptables-rules' >> /etc/network/if-up.d/iptablesload<br />
echo 'exit 0' >> /etc/network/if-up.d/iptablesload<br />
chmod +x /etc/network/if-up.d/iptablesload<br />
<br />
==== 启动 xl2tpd ====<br />
<br />
service xl2tpd restart<br />
<br />
可以采用不加密的方式来使用 L2TP VPN 了。<br />
注意:拨号的选项中的安全设置为可选加密(没有加密也可以连接)<br />
<br />
==== 安装 IPSec ====<br />
如果你的 VPS 是 XEN 的,我们继续配置开启 ipsec 加密支持。<br />
<br />
apt-get install openswan<br />
安装过程中,会弹出2个配置选择界面,直接回车即可。<br />
<br />
==== 配置 IPSec ====<br />
执行如下命令配置 ipsec,这里拨号的秘钥设置为 psk ,你也可以修改本段最后一步的 "psk" 为其他秘钥:<br />
<br />
cp /etc/ipsec.d/examples/l2tp-psk.conf /etc/ipsec.d/l2tp-psk.conf<br />
sed -i "s/left=.*/left=`ifconfig eth0 |awk '/inet/ {split($2,x,":");print x[2]}'`/" /etc/ipsec.d/l2tp-psk.conf<br />
sed -i "s/leftnexthop=.*/leftnexthop=`ip route show|grep 'default'|awk '{print $3}'`/" /etc/ipsec.d/l2tp-psk.conf<br />
sed -i "s/protostack=.*/protostack=netkey/" /etc/ipsec.conf<br />
sed -i "s/include.*//" /etc/ipsec.conf<br />
echo "include /etc/ipsec.d/l2tp-psk.conf" >> /etc/ipsec.conf<br />
echo "`ifconfig eth0 |awk '/inet/ {split($2,x,":");print x[2]}'` %any: \"psk\"" > /var/lib/openswan/ipsec.secrets.inc<br />
<br />
启动 ipsec 服务:<br />
<br />
service ipsec restart<br />
<br />
==== 测试 ipsec ====<br />
执行以下命令测试: <br />
<br />
ipsec verify<br />
<br />
如果提示中出现任何红色的 [<font color="red">FAILED</font>] 的结果,表示 ipsec 有问题,无法使用。<br />
<br />
==== 开启 xl2tpd 的 ipsec 支持 ====<br />
如果以上 ipsec 测试通过,执行以下命令开启 xl2tpd 的 ipsec 支持:<br />
<br />
sed -i "s/ipsec saref.*/ipsec saref = yes/" /etc/xl2tpd/xl2tpd.conf<br />
<br />
重启下l2tpd :<br />
<br />
service xl2tpd restart<br />
<br />
好了可以采用加密方式来使用 L2TP VPN 了。<br />
<br />
=== 安装 IPSec VPN ===<br />
由于最新的 [[strongswan]] 可以不依赖内核,仅仅需要 Tun/Tap ,对于 OpenVZ 或 XEN 而言,也可以搭建一个独立的 IPSec VPN。 OSX/IOS/安卓 默认支持。<br />
<br />
以下指南在 Ubuntu 14.04 上测试通过,其它版本请自行参考。<br />
<br />
OpenVZ 首先去面板开启 Tun/Tap ,具体验证参考前面 OpenVPN 的安装指南。<br />
<br />
==== 安装编译环境 ====<br />
<br />
执行下面的命令增加 deb-src 源,并安装编译环境。<br />
cat /etc/apt/sources.list | sed 's/deb /deb-src /' > /etc/apt/sources.list.d/sources-src.list<br />
apt-get update<br />
apt-get build-dep strongswan<br />
<br />
==== 安装 strongswan ====<br />
<br />
执行下面的命令,下载并安装 strongswan。<br />
apt-get install strongswan strongswan-plugin-kernel-libipsec strongswan-plugin-xauth-generic <br />
<br />
OpenVZ 用户需要给 strongswan 打补丁,执行以下命令,XEN 用户请忽略本段。<br />
cd /root<br />
apt-get source strongswan-plugin-kernel-libipsec<br />
cd strongswan*<br />
./configure --enable-kernel-libipsec <br />
make<br />
cp src/libcharon/plugins/kernel_libipsec/.libs/libstrongswan-kernel-libipsec.so /usr/lib/ipsec/plugins/<br />
<br />
==== 配置 strongswan ====<br />
<br />
配置 /etc/ipsec.conf<br />
<br />
<pre>cat << "EOF" > /etc/ipsec.conf<br />
config setup<br />
uniqueids=no<br />
<br />
conn %default<br />
#rekey=yes<br />
left=%defaultroute<br />
leftsubnet=0.0.0.0/0<br />
right=%any<br />
dpddelay=300s<br />
dpdtimeout=1h<br />
dpdaction=clear<br />
auto=add<br />
<br />
conn ikecommon<br />
rightsourceip=10.0.0.0/24<br />
#modeconfig=push<br />
#esp=aes128-sha1-modp2048<br />
compress=yes<br />
<br />
conn ikev1pskaggressive<br />
aggressive=yes<br />
#type=tunnel<br />
also=ikev1psk<br />
<br />
conn ikev1psk<br />
#authby=xauthpsk<br />
leftauth=psk<br />
rightauth=psk<br />
rightauth2=xauth<br />
#xauth=server<br />
also=ikev1<br />
<br />
conn ikev1<br />
keyexchange=ikev1<br />
#ikelifetime=60m<br />
#keylife=20m<br />
#rekeymargin=3m<br />
#keyingtries=3<br />
also=ikecommon<br />
<br />
conn L2TP-PSK-NAT<br />
leftfirewall=yes<br />
rightfirewall=yes<br />
also=L2TP-PSK-noNAT<br />
<br />
conn L2TP-PSK-noNAT<br />
keyexchange=ikev1<br />
type=transport<br />
authby=psk<br />
keyingtries=3<br />
rekey=no<br />
leftprotoport=17/1701<br />
rightprotoport=17/%any<br />
ike="aes256-sha1-modp2048!"<br />
esp="aes-sha1!"<br />
EOF</pre><br />
<br />
编辑 /etc/strongswan.conf<br />
sed -i 's/load_modular.*$/&\n dns2 = 8.8.4.4/' /etc/strongswan.conf<br />
sed -i 's/load_modular.*$/&\n dns1 = 8.8.8.8/' /etc/strongswan.conf<br />
<br />
==== 创建用户和密钥 ====<br />
<br />
运行以下命令创建一个密钥为 psk ,用户名、密码分别为 guest 和 123456 的登录帐号,你可以修改命令设置为其它。<br />
<br />
echo ': PSK "psk"' > /etc/ipsec.secrets<br />
echo 'guest : XAUTH "123456"' >> /etc/ipsec.secrets<br />
<br />
==== 配置防火墙 ====<br />
<br />
打开 IP 转发:<br />
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf<br />
sysctl -p<br />
<br />
配置防火墙:<br />
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j MASQUERADE<br />
iptables-save > /etc/iptables-rules<br />
echo '#!/bin/sh' > /etc/network/if-up.d/iptablesload<br />
echo 'iptables-restore < /etc/iptables-rules' >> /etc/network/if-up.d/iptablesload<br />
echo 'exit 0' >> /etc/network/if-up.d/iptablesload<br />
chmod +x /etc/network/if-up.d/iptablesload<br />
<br />
==== 运行 ====<br />
service strongswan restart<br />
<br />
==== 客户端 ====<br />
安卓或iphone上自带,直接配置连接即可。<br />
<br />
Windows 端: https://www.shrew.net/download/vpn/vpn-client-2.2.2-release.exe<br />
<br />
安装时选择 Standard 版本,这个是免费的。<br />
<br />
安装后运行 VPN Access Manager ,选“Add”:<br />
<br />
*“General” 选项下,在 “Host Name or IP address” 填写VPS的IP地址<br />
*“Authorization”选项下:<br />
**“Authorization Method”选“Mutual PSK + XAuth”<br />
**“Local Identity”的“Identification Type”选“IP Address”<br />
**“Credentials”下面“Pre Shared Key”里输入直接配置的密码 psk<br />
*“Phrase 1” 选项下,“Exchange Type”选“Main”<br />
*“Phrase 2” 选项下, “PFS Exchange”选“auto”<br />
<br />
保存。<br />
点击 Connect 进行连接,连接用户名是 guest 密码是 123456 ,连接时会有一个警告,忽略即可。<br />
<br />
=== 安装 Shadowsocks ===<br />
==== 服务端 ====<br />
运行如下命令安装:<br />
apt-get install python-gevent python-pip python-m2crypto<br />
pip install shadowsocks<br />
<br />
运行如下命令建立配置文件,密码是 123456,端口为443,你也可以替换为你自己的配置。<br />
cat << "EOF" > /etc/shadowsocks.json<br />
{<br />
"server":"0.0.0.0",<br />
"server_port":443,<br />
"local_port":1080,<br />
"password":"123456",<br />
"timeout":600,<br />
"method":"aes-256-cfb"<br />
}<br />
EOF<br />
<br />
配置服务:<br />
<pre>cat << "EOF" > /etc/init.d/shadowsocks <br />
#!/bin/sh<br />
NAME=shadowsocks<br />
PIDFILE=/var/run/$NAME.pid<br />
DAEMON=/usr/local/bin/ssserver<br />
DAEMON_OPTS="-c /etc/shadowsocks.json"<br />
start() {<br />
echo -n "Starting daemon: "$NAME<br />
touch $PIDFILE<br />
chown root:root $PIDFILE<br />
start-stop-daemon --make-pidfile --background --start --quiet --pidfile $PIDFILE --chuid root:root --exec $DAEMON -- $DAEMON_OPTS || true<br />
echo "."<br />
}<br />
<br />
stop() {<br />
echo -n "Stopping daemon: "$NAME<br />
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE || true<br />
echo "."<br />
}<br />
<br />
case "$1" in<br />
start)<br />
start<br />
;;<br />
stop)<br />
stop<br />
;;<br />
restart)<br />
echo -n "Restarting daemon: "$NAME<br />
stop<br />
sleep 1<br />
start<br />
;;<br />
*)<br />
echo "Usage: "$1" {start|stop|restart}"<br />
exit 1<br />
esac<br />
exit 0<br />
EOF</pre><br />
<br />
然后继续运行下面命令配置和启动服务端:<br />
<br />
chmod +x /etc/init.d/shadowsocks<br />
update-rc.d shadowsocks defaults<br />
/etc/init.d/shadowsocks start<br />
<br />
==== 客户端 ====<br />
<br />
访问 [http://sourceforge.net/projects/shadowsocksgui/files/dist/ 下载地址] 找到 shadowsocks-gui-xxx-win- 开头的文件下载解压缩运行,设置好服务器的IP、端口为443、访问密码为上面的123456,即可在浏览器采用 socks5 1080 来使用了。<br />
<br />
=== 安装 ShadowVPN ===<br />
==== 服务端 ====<br />
使用如下命令安装,碰到需要输入[y/N]的提示时,输入y回车:<br />
<pre>echo "deb http://shadowvpn.org/debian wheezy main" > /etc/apt/sources.list.d/shadowvpn.list<br />
apt-get update<br />
apt-get install shadowvpn<br />
service shadowvpn restart</pre><br />
==== 客户端 ====<br />
Ubuntu Linux下安装,执行如下命令,执行前修改命令里面的 VPS_IP 为你服务端的IP地址:<br />
<pre>echo "deb http://shadowvpn.org/debian wheezy main" > /etc/apt/sources.list.d/shadowvpn.list<br />
apt-get update<br />
apt-get install shadowvpn<br />
sed -i "s/127.0.0.1/VPS_IP/" /etc/shadowvpn/client.conf<br />
sed -i "s/server.conf/client.conf/" /etc/default/shadowvpn <br />
service shadowvpn restart</pre><br />
Windows 或路由器下安装请自行百度。<br />
<br />
== 额外支持 ==<br />
=== XEN VPS 增加交换分区大小 ===<br />
XEN VPS 专用,OPEN VZ的请忽略。<br />
<br />
增加之前:<br />
<pre><br />
root@289085:~# free<br />
total used free shared buffers cached<br />
Mem: 506088 46008 460080 0 3624 21944<br />
-/+ buffers/cache: 20440 485648<br />
Swap: 262140 0 262140<br />
</pre><br />
<br />
运行如下命令增加256M交换内存<br />
dd if=/dev/zero of=/mnt/256M.swap bs=1M count=256<br />
chmod 600 /mnt/256M.swap<br />
mkswap /mnt/256M.swap<br />
swapon /mnt/256M.swap<br />
echo '/mnt/256M.swap none swap sw 0 0' >> /etc/fstab<br />
<br />
增加之后:<br />
<pre><br />
root@289085:~# free<br />
total used free shared buffers cached<br />
Mem: 506088 312740 193348 0 3952 284180<br />
-/+ buffers/cache: 24608 481480<br />
Swap: 524280 0 524280<br />
</pre><br />
<br />
=== 配置 php 加速器 ===<br />
如果你 VPS 的内存大于或等于 1G,可以考虑开启 php 的 apc 加速,否则请忽略本步骤。<br />
echo "extension=apc.so" > /etc/php5/conf.d/apc.ini<br />
echo "apc.enabled=1" >> /etc/php5/conf.d/apc.ini<br />
echo "apc.shm_size=64M" >> /etc/php5/conf.d/apc.ini<br />
echo "apc.ttl=7200" >> /etc/php5/conf.d/apc.ini<br />
如果你安装的是apache2,执行下面命令重启下:<br />
service apache2 restart<br />
如果你安装的是nginx,执行下面命令重启下:<br />
service php5-fpm restart<br />
<br />
=== 安装 JAVA ===<br />
由于 java 非常消耗内存,1G以下的 VPS 请不要考虑使用 java,java 理想的内存在2G以上。<br />
<br />
采用如下命令安装JAVA JDK 1.7:<br />
apt-get install openjdk-7-jdk<br />
<br />
验证如下:<br />
$ java -version<br />
java version "1.7.0_25" <br />
OpenJDK Runtime Environment (IcedTea 2.3.12) (7u25-2.3.12-4ubuntu3)<br />
OpenJDK Client VM (build 23.7-b01, mixed mode, sharing)<br />
<br />
如果你安装了多个版本的JDK,需要配置默认的JDK,采用如下命令:<br />
update-alternatives --config java<br />
<br />
== 日常维护 ==<br />
=== 查看硬盘剩余空间大小 ===<br />
df<br />
显示<br />
root@241541:/# df<br />
Filesystem 1K-blocks Used Available Use% Mounted on<br />
/dev/simfs 20971520 583508 20388012 3% /<br />
<br />
=== 查看硬盘可用文件数 ===<br />
df -i<br />
显示<br />
root@241541:/# df -i<br />
Filesystem Inodes IUsed IFree IUse% Mounted on<br />
/dev/simfs 400000 26568 373432 7% /<br />
<br />
=== 查看内存剩余大小 ===<br />
free<br />
显示<br />
root@241541:/# free<br />
total used free shared buffers cached<br />
Mem: 524800 245240 279560 0 0 0<br />
-/+ buffers/cache: 245240 279560<br />
Swap: 0 0 0<br />
<br />
=== 如何从其他网站上下载文件 ===<br />
wget "下载文件的链接地址"<br />
<br />
如下所示下载 DZ 论坛的最新版:<br />
<pre><br />
wget http://download.comsenz.com/DiscuzX/2.0/Discuz_X2_SC_UTF8.zip<br />
</pre><br />
你也可以指定需要保存的文件名为 dz.zip 如下:<br />
<pre><br />
wget http://download.comsenz.com/DiscuzX/2.0/Discuz_X2_SC_UTF8.zip -O dz.zip<br />
</pre><br />
<br />
如果对方有防盗链可以这样下:<br />
<pre><br />
wget http://download.comsenz.com/DiscuzX/2.0/Discuz_X2_SC_UTF8.zip --referer=http://download.comsenz.com/<br />
</pre><br />
<br />
=== 常用服务重启 ===<br />
重启 Apache2<br />
service apache2 restart<br />
重启 Mysql<br />
service mysql restart<br />
重启 Nginx<br />
service nginx restart<br />
重启 php<br />
service php5-fpm restart<br />
<br />
=== 查看内存被什么消耗 ===<br />
ps -eo vsz,rss,pid,cmd --sort -vsz|head -n 20<br />
<br />
显示:<br />
<pre><br />
root@241541:~# ps -eo vsz,rss,pid,cmd --sort -vsz|head -n 20<br />
VSZ RSS PID CMD<br />
146384 36860 1629 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock<br />
62908 3676 8026 nginx: worker process<br />
62660 2884 8027 nginx: cache manager process<br />
62660 3404 17440 nginx: master process /usr/sbin/nginx<br />
50380 11160 1517 /usr/sbin/named -u bind<br />
33948 13076 32345 /usr/bin/php-cgi<br />
33796 12912 32344 /usr/bin/php-cgi<br />
33764 12828 32351 /usr/bin/php-cgi<br />
33684 12804 32350 /usr/bin/php-cgi<br />
32892 12012 32346 /usr/bin/php-cgi<br />
32892 11984 32349 /usr/bin/php-cgi<br />
28864 7952 32347 /usr/bin/php-cgi<br />
28864 7956 32348 /usr/bin/php-cgi<br />
27708 5624 32342 /usr/bin/php-cgi<br />
8688 1924 3089 sendmail: MTA: accepting connections <br />
8136 2924 32338 /usr/sbin/sendmail -i -FCronDaemon -oem root<br />
8096 2804 20387 sshd: root@pts/0 <br />
8096 2756 23759 sshd: root@pts/1 <br />
5304 1084 1547 /usr/sbin/sshd<br />
</pre><br />
<br />
=== 动态显示系统程序情况 ===<br />
top<br />
显示<br />
[[Image:Vps_top.png]]<br />
<br />
=== mysql 常用命令 ===<br />
mysql 创建数据库<br />
mysqladmin -u root -p create 数据库名<br />
<br />
mysql 删除数据库<br />
mysqladmin -u root -p drop 数据库名<br />
<br />
mysql 创建用户<br />
mysql> GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;<br />
<br />
mysql 修复表<br />
mysqlcheck -A --auto-repair -p<br />
<br />
mysql 手工恢复 phpmyadmin 备份的 sql 文件<br />
xxxx.sql 是你备份的sql文件名。<br />
mysql -p 数据库名 < xxxx.sql<br />
<br />
手工备份单个 mysql 数据库<br />
xxxx.sql 是你备份的sql文件名。<br />
mysqldump -p 数据库名 > xxxx.sql<br />
<br />
修改mysql的root的密码<br />
mysqladmin -u root password '新密码'<br />
<br />
mysql 无法启动的处理<br />
<br />
运行 mysqld_safe --user=mysql<br />
<br />
然后 tail -n 50 /var/log/syslog 看日志,根据错误来判断<br />
<br />
如果提示日志不存在,运行: apt-get install rsyslog 安装日志服务。<br />
<br />
=== 在线解压缩 ===<br />
解压缩 xxx.zip<br />
unzip xxx.zip<br />
<br />
解压缩 xxx.tar.gz<br />
tar -xzvf xxx.tar.gz<br />
<br />
解压缩 xxx.tar.bz2<br />
tar -xjvf xxx.tar.bz2<br />
<br />
压缩aaa bbb目录为xxx.tar.gz<br />
tar -zcvf xxx.tar.gz aaa bbb<br />
<br />
压缩aaa bbb目录为xxx.tar.bz2<br />
tar -jcvf xxx.tar.bz2 aaa bbb<br />
<br />
=== 封掉某个IP或IP段 ===<br />
只是运行后封掉,由于未保存所以重启后失效,对 192.168.2.0 或 192.168.2.23 进行封掉:<br />
iptables -t filter -I INPUT -s 192.168.2.0/24 -p tcp -j DROP<br />
iptables -t filter -I INPUT -s 192.168.2.23 -p tcp -j DROP<br />
<br />
=== 查看日志 ===<br />
如果需要查看访问日志,请查看 /var/log/ 文件夹,所有的日志都在这个目录下。<br />
<br />
=== 查看网络流量 ===<br />
执行如下命令安装nload <br />
apt-get install nload<br />
安装完毕后,xen的直接运行nload,即可查看,openvz的运行 nload venet0 查看带宽。<br />
<br />
=== 更多命令参考 ===<br />
点击查看 [[UbuntuSkills|Ubuntu 技巧]]<br />
<br />
== 根据压力测试来调整最大并发数 ==<br />
<br />
因为VPS的内存是有限的,如果不限制最大并发数,会照成内存爆掉或负载过高。内存爆掉,对于openvz的管理会kill掉最耗内存的程序,这样很可能杀掉web服务和sshd服务,表现形式为,vps可以ping通,但网站打不开,也无法登录,需要到面板重启vps才正常;如果负载大于3则会导致VPS由于滥用被官方冻结。如果已经发生了上述现象,请尽快按如下步骤进行调整。<br />
<br />
=== 测试内存的使用情况 ===<br />
使用 putty 登录到到 vps 输入命令 free 即可看到当前内存的使用情况,如下所示:<br />
<br />
root@241541:~# free<br />
total used free shared buffers cached<br />
Mem: 524800 296004 228796 0 0 0<br />
-/+ buffers/cache: 296004 228796<br />
Swap: 0 0 0<br />
<br />
全部内存为 524800 K,已经使用 296004 K 剩余 228796 K,也就是还剩余 228 M的内存。<br />
<br />
如果需要长时间监控,使用如下命令:<br />
<br />
watch -n 1 free<br />
<br />
=== 安装压力测试软件 ===<br />
我们这里使用 ab 软件,作为我们的压力测试软件。<br />
<br />
使用 apache2的 vps 已经自带了,如果使用nginx的vps,需要安装 apache2-utils 包,使用如下命令安装。<br />
apt-get install apache2-utils<br />
<br />
=== 开始压力测试 ===<br />
你的站点都已经配置完整,需要找一个动态页面,最好内容多一点的,这里采用 http://www.test.com/index.php 作为测试页面。<br />
<br />
在 putty 里面输入如下,将每秒刷新一次显示内存情况:<br />
<br />
watch -n 1 free<br />
<br />
重点在于观察位于 free 单词下面的数字。<br />
<br />
再开一个putty,输入我们要进行的压力测试命令如下,其中测试网址修改为你自己的测试网址:<br />
<pre><br />
ab -n 100 -c 5 http://www.test.com/index.php<br />
</pre><br />
这个命令是按 5 个并发,做100次请求 ,注意看内存情况,如果出现内存小于50M的情况,表示非常危险了。<br />
<br />
执行完毕的结果如下:<br />
<pre><br />
[root@241541 ~]# ab -n 100 -c 5 http://www.test.com/index.php<br />
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0<br />
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br />
Copyright 2006 The Apache Software Foundation, http://www.apache.org/<br />
<br />
Benchmarking www.test.com (be patient).....done<br />
<br />
<br />
Server Software: Apache/2.2.16<br />
Server Hostname: www.test.com<br />
Server Port: 80<br />
<br />
Document Path: /index.php<br />
Document Length: 56446 bytes<br />
<br />
Concurrency Level: 5<br />
Time taken for tests: 53.147069 seconds<br />
Complete requests: 100<br />
Failed requests: 0<br />
Write errors: 0<br />
Total transferred: 5721547 bytes<br />
HTML transferred: 5695792 bytes<br />
Requests per second: 1.88 [#/sec] (mean)<br />
Time per request: 2657.354 [ms] (mean)<br />
Time per request: 531.471 [ms] (mean, across all concurrent requests)<br />
Transfer rate: 105.12 [Kbytes/sec] received<br />
<br />
Connection Times (ms)<br />
min mean[+/-sd] median max<br />
Connect: 218 219 2.9 218 230<br />
Processing: 1463 2407 258.5 2429 3126<br />
Waiting: 450 1280 217.7 1291 1832<br />
Total: 1681 2627 258.6 2648 3344<br />
<br />
Percentage of the requests served within a certain time (ms)<br />
50% 2648<br />
66% 2691<br />
75% 2759<br />
80% 2818<br />
90% 2885<br />
95% 3093<br />
98% 3339<br />
99% 3344<br />
100% 3344 (longest request)<br />
</pre><br />
<br />
这个结果中需要掌握的有:<br />
<br />
成功完成的请求数: Complete requests: 100<br />
<br />
失败的请求数: Failed requests: 0<br />
<br />
每秒完成的请求数: Requests per second: 1.88 [#/sec] (mean)<br />
<br />
执行每个请求需要的时间(也就是用户打开这个页面的最快时间): Time per request: 2657.354 [ms] (mean)<br />
<br />
=== 进一步压力测试 ===<br />
在内存还有剩余的情况下,我们继续增加压力测试的并发数,可以慢慢增加,<br />
<br />
当这边的内存监控窗口出现低于50M的时候,就表示这个数值为这个vps可以承受的最大并发数。<br />
<br />
出现低于50M可以内存的情况如下,表示这个站只能支撑8个并发访问不会挂掉:<br />
<pre><br />
[root@241541 ~]# ab -n 100 -c 8 http://www.test.com/index.php<br />
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0<br />
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br />
Copyright 2006 The Apache Software Foundation, http://www.apache.org/<br />
<br />
Benchmarking www.test.com (be patient).....done<br />
<br />
<br />
Server Software: Apache/2.2.16<br />
Server Hostname: www.test.com<br />
Server Port: 80<br />
<br />
Document Path: /index.php<br />
Document Length: 56446 bytes<br />
<br />
Concurrency Level: 8<br />
Time taken for tests: 41.779898 seconds<br />
Complete requests: 100<br />
Failed requests: 0<br />
Write errors: 0<br />
Total transferred: 5670100 bytes<br />
HTML transferred: 5644600 bytes<br />
Requests per second: 2.39 [#/sec] (mean)<br />
Time per request: 3342.392 [ms] (mean)<br />
Time per request: 417.799 [ms] (mean, across all concurrent requests)<br />
Transfer rate: 132.53 [Kbytes/sec] received<br />
<br />
Connection Times (ms)<br />
min mean[+/-sd] median max<br />
Connect: 218 218 0.9 218 223<br />
Processing: 1684 3021 461.5 3087 4525<br />
Waiting: 495 1820 418.3 1927 3165<br />
Total: 1903 3239 461.6 3307 4744<br />
<br />
Percentage of the requests served within a certain time (ms)<br />
50% 3307<br />
66% 3384<br />
75% 3452<br />
80% 3521<br />
90% 3654<br />
95% 3763<br />
98% 4695<br />
99% 4744<br />
100% 4744 (longest request)<br />
</pre><br />
在8个并发的情况下,用户打开这个网页最快也需要3.3秒。<br />
<br />
=== 配置并发参数 ===<br />
<br />
根据上面的压力测试情况去配置相应最大的并发为当前测试的值,上例中,我们测试出的最大并发为 8.<br />
<br />
Apache2 参考:<br />
<br />
[[Vps#Apache2_.E4.BC.98.E5.8C.96|Apache2 的优化]]<br />
<br />
Nginx 参考:<br />
<br />
[[Vps#nginx_.E4.BC.98.E5.8C.96|Nginx 的优化]]<br />
<br />
== 常见故障 ==<br />
=== "Temporary failure resolving" 或 正在解析主机...失败,未知的名称或服务 ===<br />
使用 wget 或 apt-get 时出现上面的提示,是官方的dns服务器出现故障了,采用如下命令修复:<br />
echo nameserver 8.8.8.8 > /etc/resolv.conf<br />
或者<br />
echo dns-nameservers 8.8.8.8 >> /etc/network/interfaces<br />
<br />
=== "locale: Cannot set LC_ALL to default locale: No such file or directory" ===<br />
如果出现如下故障提示:<br />
<pre><br />
perl: warning: Setting locale failed.<br />
perl: warning: Please check that your locale settings:<br />
LANGUAGE = (unset),<br />
LC_ALL = (unset),<br />
LANG = "zh_CN.UTF-8"<br />
are supported and installed on your system.<br />
perl: warning: Falling back to the standard locale ("C").<br />
locale: Cannot set LC_CTYPE to default locale: No such file or directory<br />
locale: Cannot set LC_MESSAGES to default locale: No such file or directory<br />
locale: Cannot set LC_ALL to default locale: No such file or directory<br />
</pre><br />
虽然不影响使用,可以使用下面的命令解决:<br />
locale-gen --lang zh_CN.UTF-8<br />
dpkg-reconfigure locales<br />
<br />
=== 修正时区 ===<br />
使用如下命令调整本地的系统的时区为上海。<br />
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime<br />
<br />
=== 开启 GBK/GB2312 支持 ===<br />
使用如下命令在 local 文件中增加 GBK/GB2312:<br />
echo "zh_CN.GBK GBK" >> /var/lib/locales/supported.d/local <br />
echo "zh_CN.GB2312 GB2312" >> /var/lib/locales/supported.d/local <br />
<br />
然后运行:<br />
dpkg-reconfigure --force locales <br />
即可支持了。<br />
<br />
=== 修复cron问题 ===<br />
#检查cron的任务文件名是否包括 . ,如果有扩展名会导致无法运行,<br />
#可以使用如下命令检查 run-parts --test /etc/cron.daily<br />
apt-get remove anacron<br />
service cron restart<br />
<br />
=== 禁止执行的命令 ===<br />
以下命令是严格禁止的,运行后直接导致数据丢失或vps无法正常启动,如果遇到有人建议你运行如下命令,请停止。<br />
<br />
系统所有文件被删除<br />
rm -fr /<br />
<br />
系统权限混乱,启动错误,无法ssh连接<br />
chmod -R 777 /<br />
<br />
系统损坏,数据丢失<br />
dd if=/dev/zero of=/dev/xxx<br />
<br />
如果遇到有人建议你,运行包括 rm 、 chmod 、 dd 等命令,请慎重。<br />
<br />
=== 使用 mtr 检测网络丢包 ===<br />
<br />
有时我们发现 ping 丢包,因此需要通过 mtr 来定位故障的位置,使用 mtr 需要双向运行,才可以比较准确的发现故障点。<br />
<br />
VPS上安装 mtr :<br />
<br />
*Ubuntu Linux<br />
apt-get install mtr<br />
*Centos Linux<br />
yum install mtr<br />
<br />
访问 http://ip.cn 获得本地的公网地址,从VPS执行如下命令:<br />
mtr -n --report 本地公网地址<br />
<br />
获得路由的丢包位置。<br />
<br />
然后本地 Windows 上安装 mtr:<br />
<br />
下载地址: http://winmtr.net/download-winmtr/<br />
<br />
下载运行后,直接输入VPS的IP进行测试。<br />
<br />
最后两边对比结果,就可以准确的找到出问题的路由地址。<br />
<br />
找到丢包路由器的IP后,通过 http://ip.cn 去查询该路由器IP的所在地。如果该IP在国内,只能等待了;如果在国外,可以尝试去报障,要求官方协调解决。<br />
<br />
=== VPS之间备份、下载、上传需要限速 ===<br />
由于美国VPS之间的速度是200M共享,所以很容易达到满速,这样会导致带宽滥用封掉,所以必须限速,以下按1M限速:<br />
<br />
==== 常用软件限速 ====<br />
wget/scp/rsync/lftp 等常用客户端下载限速如下。<br />
wget --limit-rate=1024k ......<br />
scp -l 8196 ......<br />
rsync -auvzP --bwlimit=1024 --size-only ......<br />
lftp :~> set net:limit-rate 1024000,1024000<br />
<br />
==== 采用 trickle 限速 ====<br />
也可以使用 trickle 来限速,安装 trickle 使用如下命令<br />
apt-get install trickle<br />
<br />
运行如下命令,限制 wget 的上传速度和下载速度为1M,其中 -d 后面是下载速度,-u 后面是上传速度,以K为单位:<br />
trickle -d 1024 -u 1024 wget ....<br />
<br />
Dropbox 限速:<br />
<br />
trickle -d 1024 -u 1024 ~/.dropbox-dist/dropboxd<br />
<br />
=== 快速安装配置lnmp的命令 ===<br />
删除Apache2:<br />
<br />
service apache2 stop<br />
apt-get update<br />
apt-get -y remove apache2 apache2.2-common<br />
<br />
安装 php nginx<br />
<br />
apt-get -y install php5-cgi php5-fpm php5-gd php5-mysql php5-curl php5-mcrypt php5-common php-apc mysql-server nginx<br />
<br />
配置 nginx:<br />
<br />
mkdir /var/www<br />
chown www-data:www-data /var/www<br />
sed -i 's/\/usr\/share\/nginx\/www/\/var\/www/' /etc/nginx/sites-available/default<br />
sed -i 's/#\(location.*php\)/\1/' /etc/nginx/sites-available/default <br />
sed -i 's/#\(.*fastcgi_split_path_info\)/\1/' /etc/nginx/sites-available/default<br />
sed -i 's/#\(.*fastcgi_pass.*9000\)/\1/' /etc/nginx/sites-available/default<br />
sed -i 's/#\(.*fastcgi_index\)/\1/' /etc/nginx/sites-available/default<br />
sed -i 's/#\(.*fastcgi_params\)/\1/' /etc/nginx/sites-available/default<br />
sed -i '/fastcgi_params/{ n; s/#}/}/; }' /etc/nginx/sites-available/default<br />
sed -i -e 's/listen =.*$/listen = 127.0.0.1:9000/' `grep -R -l listen /etc/php5/fpm`<br />
service php5-fpm restart<br />
service nginx restart<br />
<br />
== 常用链接 ==<br />
* [http://ubuntuchina.taobao.com/ 淘宝店铺]</div>
Lavande
https://wiki.ubuntu.org.cn/index.php?title=UbuntuSkills&diff=150677
UbuntuSkills
2014-01-13T06:39:34Z
<p>Lavande:</p>
<hr />
<div>Ubuntu 命令技巧<br />
== 前言 ==<br />
下面的命令大都需要在 控制台 / 终端 / shell 下输入。<br />
<br />
控制台, 终端, 和 shell 意味着同样一件事 - 一个命令行界面, 他可以用来控制系统。 <br />
<br />
打开一个控制台:<br />
<br />
应用程序 --> 附件 --> 终端<br />
<br />
任何一个使用 'sudo' 作为前缀的命令都需要拥有管理员 (或 root) 访问权限。 所以你会被提示输入你自己的密码。<br />
<br />
== 安装升级 ==<br />
<br />
=== 查看软件xxx安装内容 ===<br />
<br />
dpkg -L xxx <br />
<br />
=== 查找软件库中的软件 ===<br />
apt-cache search 正则表达式<br />
或<br />
aptitude search 软件包<br />
<br />
=== 显示系统安装包的统计信息 ===<br />
apt-cache stats<br />
<br />
=== 显示系统全部可用包的名称 ===<br />
apt-cache pkgnames<br />
<br />
=== 显示包的信息 ===<br />
apt-cache show k3b<br />
<br />
=== 查找文件属于哪个包 ===<br />
dpkg -S filename<br />
apt-file search filename<br />
<br />
=== 查看已经安装了哪些包 ===<br />
dpkg -l<br />
也可用<br />
dpkg -l | less<br />
翻页查看<br />
<br />
=== 查询软件xxx依赖哪些包 ===<br />
<br />
apt-cache depends xxx<br />
<br />
=== 查询软件xxx被哪些包依赖 ===<br />
<br />
apt-cache rdepends xxx<br />
<br />
=== 增加一个光盘源 ===<br />
<br />
sudo apt-cdrom add<br />
<br />
=== 系统更新 ===<br />
<br />
sudo apt-get update (这一步更新包列表)<br />
<br />
sudo apt-get dist-upgrade (这一步安装所有可用更新)<br />
或者<br />
sudo apt-get upgrade (这一步安装应用程序更新,不安装新内核等)<br />
<br />
=== 清除所有已删除包的残馀配置文件 ===<br />
<br />
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P <br />
<br />
如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。<br />
<br />
----<br />
<br />
dpkg: --purge needs at least one package name argument<br />
<br />
Type dpkg --help for help about installing and deinstalling packages [*];<br> Use `dselect' or `aptitude' for user-friendly package management;<br> Type dpkg -Dhelp for a list of dpkg debug flag values;<br> Type dpkg --force-help for a list of forcing options;<br> Type dpkg-deb --help for help about manipulating *.deb files;<br> Type dpkg --license for copyright license and lack of warranty (GNU GPL) [*].<br><br />
<br />
Options marked [*] produce a lot of output - pipe it through `less' or `more'&nbsp;!<br />
<br />
<br><br />
<br />
----<br />
<br />
=== 编译时缺少h文件的自动处理 ===<br />
<br />
sudo auto-apt run ./configure<br />
<br />
=== 查看安装软件时下载包的临时存放目录 ===<br />
<br />
ls /var/cache/apt/archives<br />
<br />
=== 备份当前系统安装的所有包的列表 ===<br />
<br />
dpkg --get-selections | grep -v deinstall &gt; ~/somefile<br />
<br />
=== 从上面备份的安装包的列表文件恢复所有包 ===<br />
<br />
dpkg --set-selections &lt; ~/somefile<br />
sudo dselect<br />
<br />
=== 清理旧版本的软件缓存 ===<br />
<br />
sudo apt-get autoclean<br />
<br />
=== 清理所有软件缓存 ===<br />
<br />
sudo apt-get clean<br />
<br />
=== 删除系统不再使用的孤立软件 ===<br />
sudo apt-get autoremove<br />
如果使用<br />
sudo apt-get autoremove --purge<br />
的话会把这些孤立软件的残留配置文件也一并移除<br />
<br />
=== 查看包在服务器上面的地址 ===<br />
<br />
apt-get -qq --print-uris install ssh | cut -d\' -f2<br />
<br />
<br />
=== 彻底删除Gnome ===<br />
sudo apt-get --purge remove liborbit2<br />
<br />
=== 彻底删除KDE ===<br />
sudo apt-get --purge remove libqt3-mt libqtcore4<br />
<br />
=== 一键安装 LAMP 服务 ===<br />
sudo tasksel install lamp-server<br />
<br />
=== 删除旧内核 ===<br />
sudo aptitude purge ~ilinux-image-.*\(\!\(`uname -r`\|generic-.*\)\)<br />
<br />
=== 导入ppa源的key值 ===<br />
#W: GPG签名验证错误: http://ppa.launchpad.net jaunty Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY 5126890CDCC7AFE0<br />
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 5126890CDCC7AFE0 #5126890CDCC7AFE0替换为你需要导入的Key值<br />
<br />
=== 增加 add-apt-repository 命令 ===<br />
sudo apt-get install software-properties-common<br />
=== 增加一个ppa源 ===<br />
sudo add-apt-repository ppa:user/ppa-name <br />
#使用 ppa 的地址替换 ppa:user/ppa-name<br />
<br />
=== 添加163镜像源 ===<br />
<pre><br />
sudo add-apt-repository "deb http://mirrors.163.com/ubuntu/ `lsb_release -cs` main restricted universe multiverse"<br />
sudo add-apt-repository "deb http://mirrors.163.com/ubuntu/ `lsb_release -cs`-updates main restricted universe multiverse"<br />
sudo add-apt-repository "deb http://mirrors.163.com/ubuntu/ `lsb_release -cs`-security main restricted universe multiverse"<br />
</pre><br />
<br />
=== 系统升级 ===<br />
# 这里指的是版本间的升级,例如 9.04=>10.04。<br />
# 使用该升级方式通常需要使用 backports 源。<br />
sudo apt-get update<br />
sudo apt-get install update-manager-core<br />
sudo do-release-upgrade<br />
<br />
== 系统 ==<br />
<br />
=== 查看内核 ===<br />
<br />
uname -a<br />
<br />
=== 查看系统是32位还是64位 ===<br />
#查看long的位数,返回32或64<br />
getconf LONG_BIT<br />
#查看文件信息,包含32-bit就是32位,包含64-bit就是64位<br />
file /sbin/init<br />
或者使用<br />
uname -m<br />
<br />
=== 查看Ubuntu版本 ===<br />
lsb_release -a<br />
或 cat /etc/lsb-release<br />
<br />
=== 查看内核加载的模块 ===<br />
<br />
lsmod<br />
<br />
=== 查看PCI设备 ===<br />
<br />
lspci<br />
<br />
=== 查看USB设备 ===<br />
<br />
lsusb <br />
<br />
#加参数 -v 可以显示USB设备的描述表(descriptors)<br />
lsusb -v<br />
<br />
=== 查看网卡状态 ===<br />
<br />
sudo apt-get install ethtool <br />
sudo ethtool eth0<br />
<br />
=== 激活网卡的 Wake-on-LAN ===<br />
sudo apt-get install wakeonlan<br />
或 sudo ethtool -s eth0 wol g<br />
<br />
=== 查看CPU信息 ===<br />
<br />
cat /proc/cpuinfo<br />
<br />
=== 显示当前硬件信息 ===<br />
<br />
sudo lshw<br />
<br />
=== 查看内存型号 ===<br />
sudo dmidecode -t memory<br />
<br />
=== 获取CPU序列号或者主板序列号 ===<br />
#CPU ID<br />
sudo dmidecode -t 4 | grep ID<br />
#Serial Number<br />
sudo dmidecode | grep Serial<br />
#CPU<br />
sudo dmidecode -t 4<br />
#BIOS<br />
sudo dmidecode -t 0<br />
#主板:<br />
sudo dmidecode -t 2<br />
#OEM:<br />
sudo dmidecode -t 11<br />
<br />
=== 显示当前内存大小 ===<br />
free -m |grep "Mem" | awk '{print $2}'<br />
<br />
=== 查看硬盘温度 ===<br />
sudo apt-get install hddtemp<br />
sudo hddtemp /dev/sda<br />
<br />
=== 显示系统运行时间 ===<br />
uptime<br />
<br />
=== 查看系统限制 ===<br />
ulimit -a<br />
<br />
=== 查看内核限制 ===<br />
ipcs -l<br />
<br />
=== 查看当前屏幕分辨率 ===<br />
xrandr<br />
<br />
== 硬盘 ==<br />
<br />
=== 查看块设备 ===<br />
lsblk<br />
<br />
=== 查看硬盘的分区 ===<br />
<br />
sudo fdisk -l<br />
<br />
=== 硬盘分区 ===<br />
<br />
#危险!小心操作。<br />
sudo fdisk /dev/sda<br />
<br />
=== 硬盘格式化 ===<br />
<br />
#危险!将第一个分区格式化为 ext3 分区, mkfs.reiserfs mkfs.xfs mkfs.vfat<br />
sudo mkfs.ext3 /dev/sda1<br />
<br />
=== 硬盘检查 ===<br />
<br />
#危险!检查第一个分区,请不要检查已经挂载的分区,否则容易丢失和损坏数据<br />
sudo fsck /dev/sda1<br />
<br />
=== 硬盘坏道检测 ===<br />
sudo badblocks -s -v -c 32 /dev/sdb<br />
#得到坏的块后,使用分区工具隔离坏道。<br />
<br />
=== 分区挂载 ===<br />
<br />
sudo mount -t 文件系统类型 设备路经 访问路经 <br />
#常用文件类型如下: iso9660 光驱文件系统, vfat fat/fat32分区, ntfs ntfs分区, smbfs windows网络共享目录, reiserfs、ext3、xfs Linux分区<br />
#如果中文名无法显示尝试在最後增加 -o nls=utf8 或 -o iocharset=utf8 <br />
#如果需要挂载後,普通用户也可以使用,在 -o 的参数後面增加 ,umask=022 如:-o nls=utf8,umask=022<br />
<br />
=== 分区卸载 ===<br />
sudo umount 目录名或设备名<br />
=== 只读挂载ntfs分区 ===<br />
sudo mount -t ntfs -o nls=utf8,umask=0 /dev/sdb1 /mnt/c<br />
=== 可写挂载ntfs分区 ===<br />
sudo mount -t ntfs-3g -o locale=zh_CN.utf8,umask=0 /dev/sdb1 /mnt/c<br />
=== 挂载fat32分区 ===<br />
sudo mount -t vfat -o iocharset=utf8,umask=0 /dev/sda1 /mnt/c<br />
=== 挂载共享文件 ===<br />
sudo mount -t smbfs -o username=xxx,password=xxx,iocharset=utf8 //192.168.1.1/share /mnt/share<br />
=== 挂载ISO文件 ===<br />
sudo mount -t iso9660 -o loop,utf8 xxx.iso /mnt/iso<br />
<br />
=== 查看IDE硬盘信息 ===<br />
<br />
sudo hdparm -i /dev/sda<br />
<br />
=== 查看软raid阵列信息 ===<br />
cat /proc/mdstat<br />
<br />
=== 参看硬raid阵列信息 ===<br />
dmesg |grep -i raid<br />
cat /proc/scsi/scsi<br />
<br />
=== 查看SATA硬盘信息 ===<br />
<br />
sudo hdparm -I /dev/sda<br />
或<br />
sudo apt-get install blktool<br />
sudo blktool /dev/sda id<br />
<br />
=== 查看硬盘剩余空间 ===<br />
<br />
df<br />
<br />
df --help 显示帮助<br />
=== 查看目录占用空间 ===<br />
<br />
du -hs 目录名<br />
<br />
=== 闪盘没法卸载 ===<br />
sync<br />
fuser -km /media/闪盘卷标<br />
<br />
=== 使用文件来增加交换空间 ===<br />
<br />
#创建一个512M的交换文件 /swapfile<br />
sudo dd if=/dev/zero of=/swapfile bs=1M count=512 <br />
sudo mkswap /swapfile<br />
sudo swapon /swapfile<br />
#sudo vim /etc/fstab #加到fstab文件中让系统引导时自动启动<br />
/swapfile swap swap defaults 0 0<br />
<br />
=== 查看硬盘当前读写情况 ===<br />
# 首先安装 sysstat 包<br />
sudo apt-get install sysstat<br />
#每2秒刷新一次<br />
sudo iostat -x 2<br />
<br />
=== 测试硬盘的实际写入速度 ===<br />
dd if=/dev/zero of=test bs=64k count=512 oflag=dsync<br />
<br />
== 进程 ==<br />
<br />
=== 查看当前的内存使用情况 ===<br />
<br />
free<br />
<br />
=== 连续监视内存使用情况 ===<br />
watch -d free<br />
# 使用 Ctrl + c 退出<br />
<br />
=== 动态显示进程执行情况 ===<br />
<br />
top<br />
top指令运行时输入H或?打开帮助窗口,输入Q退出指令。<br />
<br />
=== 查看当前有哪些进程 ===<br />
<br />
ps -AFL<br />
<br />
=== 查看进程的启动时间 ===<br />
ps -A -opid,stime,etime,args<br />
<br />
=== 查看目前登入用户运行的程序 ===<br />
w<br />
=== 查看当前用户程序实际内存占用,并排序 ===<br />
ps -u $USER -o pid,rss,cmd --sort -rss<br />
<br />
=== 统计程序的内存耗用 ===<br />
ps -eo fname,rss|awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}'|sort -k2 -nr<br />
<br />
=== 按内存从大到小排列进程 ===<br />
ps -eo "%C : %p : %z : %a"|sort -k5 -nr<br />
<br />
=== 列出前十个最耗内存的进程 ===<br />
ps aux | sort -nk +4 | tail<br />
<br />
=== 按cpu利用率从大到小排列进程 ===<br />
ps -eo "%C : %p : %z : %a"|sort -nr<br />
ps aux --sort -pcpu |head -n 20<br />
<br />
=== 查看当前进程树 ===<br />
pstree<br />
<br />
=== 中止一个进程 ===<br />
<br />
kill 进程号(就是ps -A中的第一列的数字)<br />
或者 killall 进程名<br />
<br />
=== 强制中止一个进程(在上面进程中止不成功的时候使用) ===<br />
<br />
kill -9 进程号<br />
或者 killall -9 进程名<br />
<br />
=== 图形方式中止一个程序 ===<br />
<br />
xkill 出现骷髅标志的鼠标,点击需要中止的程序即可<br />
<br />
<br />
<br />
=== 查看进程打开的文件 ===<br />
<br />
lsof -p 进程的pid<br />
<br />
=== 显示开启文件abc.txt的进程 ===<br />
<br />
lsof abc.txt <br />
<br />
=== 显示22端口现在运行什么程序 ===<br />
<br />
lsof -i&nbsp;:22 <br />
<br />
=== 显示nsd进程现在打开的文件 ===<br />
<br />
lsof -c nsd<br />
<br />
=== 在後台运行程序,退出登录後,并不结束程序 ===<br />
<br />
nohup 程序 &amp;<br />
#查看中间运行情况 tail nohup<br />
<br />
=== 在后台运行交互式程序,退出登录后,并不结束程序 ===<br />
sudo apt-get install screen<br />
screen vim a.txt<br />
#直接退出后使用 <br />
screen -ls # 1656.pts-0.ubuntu (Detached)<br />
screen -r 1656 #恢复<br />
#热键,同时按下Ctrl和a键结束后,再按下功能键<br />
C-a ? #显示所有键绑定信息<br />
C-a w #显示所有窗口列表<br />
C-a C-a #切换到之前显示的窗口<br />
C-a c #创建一个新的运行shell的窗口并切换到该窗口<br />
C-a n #切换到下一个窗口<br />
C-a p #切换到前一个窗口(与C-a n相对)<br />
C-a 0..9 #切换到窗口0..9<br />
C-a a #发送 C-a到当前窗口<br />
C-a d #暂时断开screen会话<br />
C-a k #杀掉当前窗口<br />
<br />
=== 在后台运行交互式程序,退出登录后,并不结束程序 ===<br />
tmux 进入后再运行其它命令<br />
tmux attach #恢复<br />
#热键,同时按下Ctrl和b键结束后,再按下功能键<br />
C-b c #创建一个新的运行shell的窗口并切换到该窗口<br />
C-b n #切换到下一个窗口<br />
C-b p #切换到前一个窗口(与C-a n相对)<br />
C-b 0..9 #切换到窗口0..9<br />
C-b d #暂时断开会话<br />
C-b & #杀掉当前窗口<br />
<br />
=== 详细显示程序的运行信息 ===<br />
<br />
strace -f -F -o outfile &lt;cmd&gt;<br />
<br />
=== 增加系统最大打开文件个数 ===<br />
#ulimit -SHn<br />
sudo vim /etc/security/limits.conf<br />
文件尾追加 <br />
* hard nofile 4096<br />
* soft nofile 4096<br />
<br />
sudo vim /etc/pam.d/su<br />
将 pam_limits.so 这一行注释去掉 <br />
重起系统<br />
<br />
=== 清除僵尸进程 ===<br />
ps -eal | awk '{ if ($2 == "Z") {print $4}}' | xargs sudo kill -9<br />
<br />
=== 将大于120M内存的php-cgi都杀掉 ===<br />
ps -eo pid,fname,rss|grep php-cgi|grep -v grep|awk '{if($3>=120000) print $1}' | xargs sudo kill -9<br />
<br />
=== Linux系统中如何限制用户进程CPU占用率 ===<br />
renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'` <br />
#或直接编辑/etc/security/limits.conf文件。<br />
<br />
== ADSL ==<br />
<br />
=== 配置 ADSL ===<br />
<br />
sudo pppoeconf<br />
<br />
=== ADSL手工拨号 ===<br />
<br />
sudo pon dsl-provider<br />
<br />
=== 激活 ADSL ===<br />
<br />
sudo /etc/ppp/pppoe_on_boot<br />
<br />
=== 断开 ADSL ===<br />
<br />
sudo poff<br />
<br />
=== 查看拨号日志 ===<br />
<br />
sudo plog<br />
<br />
=== 如何设置动态域名 ===<br />
<br />
#首先去 http://www.3322.org 申请一个动态域名<br />
#然後修改 /etc/ppp/ip-up 增加拨号时更新域名指令<br />
sudo vim /etc/ppp/ip-up<br />
#在最後增加如下行<br />
w3m -no-cookie -dump 'http://username:password@members.3322.org/dyndns/update?system=dyndns&amp;hostname=yourdns.3322.org'<br />
<br />
== 网络 ==<br />
<br />
=== 根据IP查网卡地址 ===<br />
<br />
arping IP地址<br />
<br />
=== 根据IP查电脑名 ===<br />
<br />
nmblookup -A IP地址<br />
<br />
=== 查看当前IP地址 ===<br />
<br />
ifconfig eth0 |awk '/inet/ {split($2,x,":");print x[2]}'<br />
<br />
=== 查看当前外网的IP地址 ===<br />
<br />
w3m -no-cookie -dump www.ip138.com/ip2city.asp|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'<br />
w3m -no-cookie -dump ip.loveroot.com|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'<br />
curl ifconfig.me<br />
<br />
=== 查看当前监听80端口的程序 ===<br />
<br />
lsof -i&nbsp;:80<br />
<br />
=== 查看当前网卡的物理地址 ===<br />
ifconfig eth0 | head -1 | awk '{print $5}'<br />
或者<br />
cat /sys/class/net/eth0/address<br />
<br />
=== 同一个网卡增加第二个IP地址 ===<br />
<br />
#在网卡eth0上增加一个1.2.3.4的IP:<br />
sudo ifconfig eth0:0 1.2.3.4 netmask 255.255.255.0<br />
#删除增加的IP:<br />
sudo ifconfig eth0:0 down<br />
<br />
=== 立即让网络支持nat ===<br />
<br />
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward<br />
sudo iptables -t nat -I POSTROUTING -j MASQUERADE<br />
<br />
=== 查看路由信息 ===<br />
<br />
netstat -rn<br />
sudo route -n<br />
<br />
=== 手工增加一条路由 ===<br />
<br />
sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1<br />
<br />
=== 手工删除一条路由 ===<br />
<br />
sudo route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1<br />
<br />
=== 修改网卡MAC地址的方法 ===<br />
<br />
sudo ifconfig eth0 down #关闭网卡<br />
sudo ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #然后改地址<br />
sudo ifconfig eth0 up #然后启动网卡<br />
<br />
永久改地址方法<br />
sudo gedit /etc/network/interfaces<br />
<br />
在 iface eth0 inet static 后面添加一行:<br />
<br />
pre-up ifconfig eth0 hw ether 01:01:01:01:01:01<br />
<br />
配置文件应该像如下<br />
<br />
iface eth0 inet static<br />
pre-up ifconfig eth0 hw ether 01:01:01:01:01:01<br />
address 192.168.1.10<br />
netmask 255.255.255.0<br />
gateway 192.168.1.1<br />
<br />
最后是 logout 或者reboot<br />
<br />
=== 统计当前IP连接的个数 ===<br />
<br />
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n<br />
netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n<br />
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n<br />
<br />
=== 统计当前所有IP包的状态 ===<br />
netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n<br />
<br />
=== 统计当前20000个IP包中大于100个IP包的IP地址 ===<br />
<br />
tcpdump -tnn -c 20000 -i eth0 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | awk ' $1 &gt; 100 '<br />
<br />
=== 屏蔽IPV6 ===<br />
<br />
echo "blacklist ipv6" | sudo tee /etc/modprobe.d/blacklist-ipv6<br />
<br />
=== 察看当前网络连接状况以及程序 ===<br />
<br />
sudo netstat -atnp<br />
<br />
=== 查看网络连接状态 ===<br />
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'<br />
<br />
=== 查看当前系统所有的监听端口 ===<br />
<br />
nc -zv localhost 1-65535<br />
<br />
=== 查看网络的当前流量 ===<br />
#安装 ethstatus 软件<br />
sudo apt-get install ethstatus<br />
#查看 ADSL 的速度<br />
sudo ethstatus -i ppp0<br />
#查看 网卡 的速度<br />
sudo ethstatus -i eth0<br />
#或安装 bwm-ng <br />
sudo apt-get install bwm-ng<br />
#查看当前网络流量<br />
bwm-ng<br />
<br />
=== 查看域名的注册备案情况 ===<br />
whois baidu.cn<br />
<br />
=== 查看到某一个域名的路由情况 ===<br />
<br />
tracepath baidu.cn<br />
<br />
=== 重新从服务器获得IP地址 ===<br />
sudo dhclient<br />
<br />
=== 从当前页面开始镜像整个网站到本地 ===<br />
<br />
wget -r -p -np -k http://www.21cn.com<br />
· -r:在本机建立服务器端目录结构;<br />
· -p: 下载显示HTML文件的所有图片;<br />
· -np:只下载目标站点指定目录及其子目录的内容;<br />
· -k: 转换非相对链接为相对链接。<br />
<br />
=== 如何多线程下载 ===<br />
<br />
sudo apt-get install axel<br />
axel -n 5 http://xxx.xxx.xxx.xxx/xxx.zip<br />
或者<br />
lftp -c "pget -n 5 http://xxx.xxx.xxx.xxx/xxx.zip“<br />
<br />
=== 如何查看HTTP头 ===<br />
w3m -dump_head http://www.example.com<br />
或 curl --head http://www.example.com<br />
<br />
=== 快速使用http方式共享目录 ===<br />
#进入需要共享的目录后运行: <br />
python -m SimpleHTTPServer<br />
#其它电脑使用http://ip:8000 来访问<br />
#自定义端口为8080: <br />
python -m SimpleHTTPServer 8080<br />
<br />
=== SSH 远程端口转发 ===<br />
ssh -v -CNgD 7070 username@sshhostipaddress<br />
<br />
=== 监控网络所有的tcp数据 ===<br />
sudo apt-get install snort #安装snort入侵检测程序<br />
sudo snort -vde<br />
<br />
=== 监控TCP/UDP连接的流量 ===<br />
sudo apt-get install iftop <br />
sudo iftop<br />
#或<br />
sudo apt-get install iptraf<br />
sudo iptraf<br />
=== 扫描某个IP的端口 ===<br />
nc -v -w 1 192.168.1.1 -z 1-1000<br />
<br />
== iptables ==<br />
=== 防止外网用内网IP欺骗 ===<br />
#eth0 为外网网卡<br />
sudo iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP<br />
sudo iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP<br />
sudo iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP <br />
<br />
=== 查看nat规则 ===<br />
sudo iptables -t nat -L<br />
<br />
=== 查看filter规则 ===<br />
sudo iptables -L -n<br />
<br />
=== 取消nat规则 ===<br />
sudo iptables -t nat -F<br />
<br />
=== 取消filter规则 ===<br />
sudo iptables -F<br />
<br />
=== 阻止一个IP连接本机 ===<br />
#规则位于最后<br />
sudo iptables -t filter -A INPUT -s 192.168.1.125 -i eth0 -j DROP <br />
<br />
=== 关闭 1234 端口 ===<br />
sudo iptables -A OUTPUT -p tcp --dport 1234 -j DROP<br />
<br />
=== 开启 80 端口 ===<br />
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT<br />
<br />
=== 限制访问80端口的外部IP最大只有50个并发 ===<br />
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j DROP<br />
<br />
=== 禁止一个IP或者一个IP段访问服务器端口服务 ===<br />
#80端口 ,规则插入到前面<br />
sudo iptables -t filter -I INPUT -s 192.168.2.0/24 -p tcp --dport http -j DROP<br />
#21端口,规则插入到前面<br />
sudo iptables -t filter -I INPUT -s 192.168.1.23 -p tcp --dport ftp -j DROP<br />
<br />
== 安全 ==<br />
=== 检查本地是否存在安全隐患 ===<br />
sudo apt-get install rkhunter<br />
sudo rkhunter --checkall<br />
<br />
=== 如何安装杀毒软件 ===<br />
sudo apt-get install clamav<br />
clamscan -r ~/<br />
<br />
=== Linux下可以使用的商业杀毒软件 ===<br />
卡巴斯基(deb): http://www.kaspersky.com/productupdates?chapter=146274389<br />
avast!(免费/deb): http://www.avast.com/eng/download-avast-for-linux-edition.html<br />
小红伞(gz): http://www.avira.com/en/downloads/avira_antivir_professional.html<br />
BitDefender(比特梵德/run):http://download.bitdefender.com/SMB/Workstation_Security_and_Management/BitDefender_Antivirus_Scanner_for_Unices/Unix/Current/EN_FR_BR_RO/Linux/<br />
申请比特梵德的KEY:http://www.bitdefender.com/site/Products/ScannerLicense/<br />
<br />
=== 防止服务器被暴力破解ssh密码 ===<br />
sudo apt-get install denyhosts<br />
<br />
=== 查看系统的登录情况 ===<br />
last<br />
<br />
=== 查看所有帐号的登录情况 ===<br />
lastlog<br />
<br />
== 服务 ==<br />
<br />
=== 添加一个服务 ===<br />
<br />
sudo update-rc.d 服务名 defaults 99<br />
<br />
=== 删除一个服务 ===<br />
<br />
sudo update-rc.d 服务名 remove<br />
<br />
=== 临时重启一个服务 ===<br />
<br />
/etc/init.d/服务名 restart<br />
<br />
=== 临时关闭一个服务 ===<br />
<br />
/etc/init.d/服务名 stop<br />
<br />
=== 临时启动一个服务 ===<br />
<br />
/etc/init.d/服务名 start<br />
<br />
== 用户管理 ==<br />
<br />
=== 增加用户 ===<br />
<br />
sudo adduser 用户名<br />
<br />
=== 删除用户 ===<br />
<br />
sudo deluser 用户名<br />
<br />
=== 修改当前用户的密码 ===<br />
<br />
passwd<br />
<br />
=== 修改用户密码 ===<br />
<br />
sudo passwd 用户名<br />
<br />
=== 修改用户资料 ===<br />
<br />
sudo chfn userid<br />
<br />
=== 如何禁用/启用某个帐户 ===<br />
<br />
sudo usermod -L 用户名 #锁定用户<br />
sudo usermod -U 用户名 #解锁<br />
或<br />
sudo passwd -l 用户名 #锁定用户<br />
sudo passwd -u 用户名 #解锁<br />
<br />
=== 增加用户到admin组,让其有sudo权限 ===<br />
<br />
sudo usermod -G admin -a 用户名<br />
=== 如何切换到其他帐号(需要该用户的密码)===<br />
su 用户名<br />
<br />
=== 如何切换到root帐号 ===<br />
sudo -s<br />
sudo -i<br />
sudo su<br />
<br />
== 设置 ==<br />
<br />
=== 配置默认Java环境 ===<br />
<br />
sudo update-alternatives --config java<br />
<br />
=== 设置系统http代理 ===<br />
<br />
export http_proxy=http://xx.xx.xx.xx:xxx<br />
<br />
=== 设置系统https代理 ===<br />
<br />
export https_proxy=http://xx.xx.xx.xx:xxx<br />
<br />
=== 修改系统登录信息 ===<br />
<br />
sudo vim /etc/motd<br />
<br />
=== 使用eclipse等其他自带java编译器的软件,换回sun的编译器方法 ===<br />
<br />
对于Java JDK6 (就是1.6,sun缩短Java的版本名字了):<br />
<br />
sudo update-java-alternatives -s java-6-sun<br />
<br />
对于Java JDK1.5<br />
<br />
sudo update-java-alternatives -s java-1.5.0-sun<br />
<br />
== 中文 ==<br />
<br />
=== 切换输入法引擎 ===<br />
<br />
im-switch -c<br />
<br />
=== 察看文件编码 ===<br />
<br />
enca 文件名<br />
<br />
file 文件名<br />
<br />
=== 转换文件名由GBK为UTF8 ===<br />
<br />
sudo apt-get install convmv<br />
convmv -r -f cp936 -t utf8 --notest --nosmart *<br />
<br />
=== 批量转换src目录下的所有文件内容由GBK到UTF8 ===<br />
<br />
find src -type d -exec mkdir -p utf8/{} \;<br />
find src -type f -exec iconv -f GBK -t UTF-8 {} -o utf8/{} \;<br />
mv utf8/* src<br />
rm -fr utf8<br />
<br />
=== 转换文件内容由GBK到UTF8 ===<br />
iconv -f gbk -t utf8 $i &gt; newfile<br />
<br />
=== 批量转换文件内容由GBK到UTF8 ===<br />
for i in `find . *`; do if [ -f "$i" ]; then iconv -f gb2312 -t utf8 $i > "./converted/$i" fi ; done<br />
<br />
=== 转换 mp3 标签编码 ===<br />
<br />
sudo apt-get install python-mutagen<br />
find . -iname '*.mp3' -execdir mid3iconv -e GBK {} \;<br />
<br />
或者使用图形界面工具“[[小K]]”,具体请参考[[解决文件名mp3标签和文本文件内容的乱码问题]]<br />
<br />
=== 控制台下显示中文 ===<br />
<br />
sudo apt-get install zhcon<br />
使用时,输入zhcon即可<br />
<br />
<br />
更具体的输入:zhcon --utf8 --drv=vga<br />
如果在/etc/zhcon.conf中指定了分辨率,可以去掉--drv=vga以指定的分辨率启动。<br />
<br />
zhcon是个外挂的控制平台,也就是像US-DOS那样是额外安装的软件,装完后是需要驱动才能进去的,不然有可能死机;<br />
当然驱动什么的在你sudo apt-get install zhcon的时候就已经安装了;<br />
你所需要的是在进zhcon时要申明你所用的驱动,而zhcon在安装时,就装了3种驱动:vga,framebuffer,libggi,而我们一般都是用的第一种驱动,因为比较方便简单,而那2钟驱动.很麻烦,我也就没改过.好了说了这么多该告诉各位怎么进入zhcon了;<br />
运行时需输入:zhcon --utf8 --drv=vga<br />
<br />
=== lftp 登录远程Windows中文FTP ===<br />
lftp :~>set ftp:charset GBK<br />
lftp :~>set file:charset UTF-8<br />
<br />
=== java6 的安装和中文设置 ===<br />
#下面是ubuntu安装标准的sun-java,安装过程中需要使用tab键切换同意其授权协议<br />
sudo add-apt-repository "deb http://archive.canonical.com/ `lsb_release -c | awk '{print $2}'` partner"<br />
sudo apt-get update<br />
sudo apt-get install sun-java6-jdk sun-java6-plugin ttf-wqy-microhei<br />
sudo apt-get remove ttf-kochi-gothic ttf-kochi-mincho ttf-unfonts ttf-unfonts-core<br />
sudo mkdir -p /usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback<br />
sudo ln -s /usr/share/fonts/truetype/arphic/wqy-microhei.ttc /usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback<br />
<br />
=== openjdk6 的安装和中文设置 ===<br />
sudo apt-get install openjdk-6-jdk ttf-wqy-microhei<br />
#有两种解决办法,第一种关闭Java的AA<br />
echo "export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on'" >> ~/.profile<br />
#第二种直接修改Java字体配置<br />
echo "allfonts.umingcn=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties<br />
echo "allfonts.uminghk=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties<br />
echo "allfonts.umingtw=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties<br />
echo "allfonts.wqy-zenhei=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties<br />
echo "allfonts.shanheisun=WenQuanYi Microhei Hei" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties<br />
echo "filename.WenQuanYi_Microhei_Hei=/usr/share/fonts/truetype/wqy/wqy-microhei.ttc" | sudo tee -a /usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties<br />
<br />
=== 程序显示有些字大,有些小 ===<br />
sudo apt-get remove ttf-kochi-gothic ttf-kochi-mincho ttf-unfonts ttf-unfonts-core<br />
<br />
=== PDF 文件乱码 ===<br />
sudo apt-get install poppler-data<br />
<br />
=== Flash中文乱码 ===<br />
sudo gedit /etc/fonts/conf.d/49-sansserif.conf <br />
将倒数第四行 <string>sans-serif</string><br />
改为 <string>sans</string><br />
保存即可,重启firefox<br />
<br />
=== 增加农历 ===<br />
sudo apt-get install lunar-applet<br />
鼠标点击面板右键 -> 添加到面板 -> 农历日期<br />
<br />
=== unzip 中文文件名乱码 ===<br />
sudo apt-get install p7zip-full<br />
export LANG=zh_CN.GBK #临时在控制台修改环境为zh_CN.GBK,然后解压缩即可<br />
7za e docs.zip<br />
<br />
===ibus跟随===<br />
<br />
安装ibus-gtk即可,最好另外安装:ibus-qt4<br />
<br />
===查看具体字体名称===<br />
fc-match monospace<br />
wqy-zenhei.ttc: "WenQuanYi Zen Hei Mono" "Regular"<br />
<br />
== 文件管理 ==<br />
<br />
=== 创建一个空文件 ===<br />
> file.txt<br />
touch file.txt<br />
<br />
=== 一屏查看文件内容 ===<br />
cat 文件名<br />
<br />
=== 不显示以#开头的行 ===<br />
cat /etc/vsftpd.conf |grep -v ^#<br />
<br />
=== 分页查看文件内容 ===<br />
more 文件名<br />
<br />
=== 可控分页查看文件内容 ===<br />
less 文件名<br />
<br />
=== 带行号显示文件的内容 ===<br />
nl 文件名<br />
cat -n 文件名<br />
<br />
=== 去除文件中的行号 ===<br />
cut -c 5- a.py<br />
<br />
=== 删除文件中的重复行 ===<br />
cat file.txt |sort -u<br />
<br />
=== 根据字符串匹配来查看文件部分内容 ===<br />
grep 字符串 文件名<br />
<br />
=== 显示包含或者不包含字符串的文件名 ===<br />
grep -l -r 字符串 路径 #显示内容包含字符串的文件名<br />
grep -L -r 字符串 路径 #显示内容不包含字符串的文件名<br />
find . -path './cache' -prune -o -name "*.php" -exec grep -l "date_cache[$format]['lang']" {} \; #显示当前目录下不包含cache目录的所有含有“date_cache[$format]['lang']”字符串的php文件。<br />
find . -type f -name \*.php -exec grep -l "info" {} \;<br />
<br />
=== 快速查找某个文件 ===<br />
<br />
whereis filename<br />
find 目录 -name 文件名<br />
locate 文件名 # 注意,为了得到更好的效果,运行前可以更新下数据库,运行 sudo updatedb 即可,但这个命令每隔一段时间会自动运行,所以不用太在意<br />
<br />
=== 创建两个空文件 ===<br />
<br />
touch file1 file2<br />
<br />
=== 递归式创建一些嵌套目录 ===<br />
mkdir -pv /tmp/xxs/dsd/efd<br />
<br />
=== 递归式删除嵌套目录 ===<br />
rm -fr /tmp/xxs<br />
<br />
=== 回当前用户的宿主目录 ===<br />
cd ~ # 这个是波浪线,在 Tab 键的上面<br />
# 或者更简单的<br />
cd<br />
<br />
=== 回到上一次的目录 ===<br />
cd - # 这个是连字符,在退格键的左边两个<br />
<br />
=== 查看当前所在目录的绝对路经 ===<br />
pwd<br />
<br />
=== 获得文件的后缀名 ===<br />
echo xxx.xxx.rmvb |sed 's/.*\(\..*$\)/\1/'<br />
<br />
=== 去除文件的后缀名 ===<br />
echo xxx.xxx.rmvb |sed 's/\(.*\)\..*$/\1/'<br />
<br />
=== 列出当前目录下的所有文件,包括以.开头的隐含文件的具体参数 ===<br />
ls -al<br />
或(在 Ubuntu 中)<br />
ll<br />
<br />
=== 移动路径下的文件并改名 ===<br />
mv 路径/文件 /新路径/新文件名<br />
<br />
=== 复制文件或者目录 ===<br />
<br />
cp -av 原文件或原目录 新文件或新目录<br />
<br />
=== 查看文件类型 ===<br />
<br />
file filename<br />
<br />
=== 查看文件的时间 ===<br />
<br />
stat filename<br />
<br />
=== 对比两个文件之间的差异 ===<br />
diff file1 file2<br />
一边比较一边编辑还是彩色的:(需要安装 Vim)<br />
vimdiff file1 file2<br />
<br />
=== 显示xxx文件倒数6行的内容 ===<br />
<br />
tail -6 xxx<br />
<br />
=== 让tail不停地读取最新的内容 ===<br />
<br />
tail -10f /var/log/apache2/access.log<br />
<br />
或者<br />
<br />
tailf /var/log/apache2/access.log<br />
<br />
=== 查看文件中间的第五行(含)到第10行(含)的内容 ===<br />
<br />
sed -n '5,10p' /var/log/apache2/access.log<br />
<br />
<br />
<br />
=== 查找关于xxx的命令 ===<br />
<br />
apropos xxx<br />
man -k xxx<br />
<br />
=== 通过ssh传输文件 ===<br />
<br />
scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上<br />
scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地<br />
<br />
tar cvzf - /path/ | ssh username@remoteip "cd /some/path/; cat -&gt; path.tar.gz" #压缩传输<br />
tar cvzf - /path/ | ssh username@remoteip "cd /some/path/; tar xvzf -" #压缩传输一个目录并解压<br />
<br />
rsync -avh /path/to/file/or/dir user@host:/path/to/dir/or/file<br />
rsync -avh user@host:/path/to/file/or/dir /path/to/file/or/dir<br />
<br />
=== 把所有文件的後辍由rm改为rmvb ===<br />
<br />
rename 's/.rm$/.rmvb/' *<br />
<br />
=== 把所有文件名中的大写改为小写 ===<br />
<br />
rename 'tr/A-Z/a-z/' *<br />
<br />
=== 删除特殊文件名的文件,如文件名:--help.txt ===<br />
<br />
rm -- --help.txt 或者 rm ./--help.txt<br />
<br />
=== 查看当前目录的子目录 ===<br />
<br />
ls -d */ 或 echo */<br />
<br />
=== 将当前目录下最近30天访问过的文件移动到上级back目录 ===<br />
<br />
find . -type f -atime -30 -exec mv {} ../back \;<br />
<br />
=== 查找当前目录下最近30天访问过的文件打包备份 ===<br />
find . -type f -atime -30 | xargs tar zcvpf backup.tar.gz<br />
find . -type f -atime -30 -print -exec tar rvpf backup.tar {} \;<br />
<br />
=== 显示系统服务器一小时以内的包含 xxxx 的所有邮件 ===<br />
<br />
find /home/ -path "*Maildir*" -type f -mmin -60|xargs -i grep -l xxxx '{}'<br />
<br />
=== 将当前目录下最近2小时到8小时之内的文件显示出来 ===<br />
<br />
find . -mmin +120 -mmin -480 -exec more {} \;<br />
<br />
=== 删除修改时间在30天之前的所有文件 ===<br />
<br />
find . -type f -mtime +30 -exec rm -v {} \;<br />
<br />
=== 删除访问时间在30天之前的所有文件 ===<br />
<br />
find . -type f -atime +30 -exec rm -v {} \;<br />
<br />
=== 查找guest用户的以avi或者rm结尾的文件并删除掉 ===<br />
<br />
find . -name '*.avi' -o -name '*.rm' -user 'guest' -exec rm {} \;<br />
<br />
=== 查找不以java和xml结尾,并7天没有使用的文件删除掉 ===<br />
<br />
find .&nbsp;! -name *.java&nbsp;! -name ‘*.xml’ -atime +7 -exec rm {} \;<br />
<br />
=== 查找目录下所有有包含abcd文字的文本文件,并替换为xyz ===<br />
grep -rIl "abcd" ./* --color=never | xargs sed -i "s/abcd/xyz/g" #注意grep的一个参数是大写的i,一个参数是小写的L<br />
<br />
=== 删除当前目录里面所有的 .svn 目录 ===<br />
<br />
find . -name .svn -type d -exec rm -fr {} \;<br />
<br />
=== 删除当前目录所有以“~”结尾的临时文件 ===<br />
<br />
find . -name "*~" -exec rm {} \;<br />
<br />
=== 删除包含 aaa 字符串的所有文件 ===<br />
grep -rl "aaa" * |xargs rm -fv<br />
<br />
=== 统计当前文件个数 ===<br />
<br />
echo $(($(ll|wc -l)-3));<br />
<br />
=== 统计当前目录下所有jpg文件的尺寸 ===<br />
find . -name *.jpg -exec wc -c {} \;|awk '{print $1}'|awk '{a+=$1}END{print a}'<br />
<br />
=== 统计当前目录个数 ===<br />
<br />
ls -l /usr/bin|grep ^d|wc -l<br />
<br />
=== 统计当前目录下占空间最大的前10名文件或目录 ===<br />
du -sm * | sort -nr | head -10<br />
<br />
=== 显示当前目录下2006-01-01的文件名 ===<br />
<br />
ls -l |grep 2006-01-01 |awk '{print $8}'<br />
<br />
=== 备份当前系统到另外一个硬盘 ===<br />
<br />
sudo rsync -Pa / /media/disk1 --exclude=/media/* --exclude=/home/* --exclude=/sys/* --exclude=/tmp/* --exclude=/proc/* --exclude=/mnt/*<br />
<br />
=== 使用ssh方式同步远程数据到本地目录 ===<br />
<br />
rsync -Pa -I --size-only --delete --timeout=300 Remote_IP:/home/ubuntu/back /backup<br />
<br />
=== 使用ftp方式同步远程数据到本地目录 ===<br />
<br />
lftp -c "open Remote_IP;user UserName Password;set cache:enable false;set ftp:passive-mode false;set net:timeout 15;mirror -e -c /back /backup;"<br />
<br />
=== 去掉文件中的^M ===<br />
#注意不要使用同样的文件名,会清空掉原文件<br />
cat -A filename| tr -d "^M$" > newfile<br />
或者<br />
cat -A word|sed -e 's/\^M\$//g' > newfile<br />
<br />
直接修改文件<br />
ex "+:%s/[Ctrl+V][Enter]//g" "+:wq" filename <br />
或者<br />
dos2unix filename<br />
<br />
=== 转换Dos文本文件到Unix文本文件 ===<br />
tr -d '\15\32' < dosfile.txt > unixfile.txt #dos = > unix<br />
awk '{ sub("\r$", ""); print }' dosfile.txt > unixfile.txt #dos = > unix<br />
awk 'sub("$", "\r")' unixfile.txt > dosfile.txt #unix = > dos<br />
<br />
=== 转换bin/cue到iso文件 ===<br />
#sudo apt-get install bchunk<br />
bchunk image.bin image.cue image<br />
<br />
=== 转换目录到iso文件 ===<br />
mkisofs -o isofile.iso dirname<br />
<br />
=== 转换CD到iso文件 ===<br />
dd if=/dev/cdrom of=isofile.iso<br />
<br />
=== 将一个文件作为附件发到邮箱 ===<br />
#sudo apt-get install mailutils sharutils<br />
uuencode xxx.tar.gz xxx.tar.gz |mail xxx@xxx.com<br />
(echo "hello, please see attached file"; uuencode xxx.tar.gz xxx.tar.gz)| mail xxx@xxx.com<br />
<br />
=== 合并多个pdf文件到一个pdf文件 ===<br />
#apt-get install gs pdftk<br />
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=output.pdf -dBATCH input1.pdf input2.pdf<br />
<br />
=== 比较两个目录里面的文件是否有相同 ===<br />
diff -r dir1 dir2<br />
<br />
=== 比较一个远程文件和一个本地文件 ===<br />
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -<br />
<br />
=== 当file.log里出现Finished: SUCCESS时候就退出tail ===<br />
tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q'<br />
<br />
=== 统计py代码行数,不包括空行 ===<br />
find . -name "*.py" | xargs grep '^.' | wc -l<br />
find . \( -path '*migrations*' -prune -o -name '*.py' \) -type f | xargs grep '^.' | wc -l<br />
<br />
=== 统计java代码行数,不包括空行和公共目录 ===<br />
find . -path './src/java/com/xxx/common' -prune -o -name '*.java' -print | xargs grep '^.' | wc -l<br />
<br />
=== 给文件增加行号 ===<br />
nl HelloWorld.java > HelloWorldCode.java<br />
<br />
== 影像 ==<br />
===播放swf文件===<br />
安装swf解码器<br />
sudo apt-get install swfmill<br />
=== 如何保存串流视频(mms/rtsp) ===<br />
mplayer -dumpfile dump.rm -dumpstream rstp://....<br />
<br />
=== 批量将rmvb转为avi ===<br />
<br />
#ipod touch可用<br />
for i in *.rmvb; do mencoder -vf harddup -oac mp3lame -lameopts vbr=3 -ovc xvid -xvidencopts fixed_quant=4 -of avi $i -o `echo $i | sed -e 's/rmvb$/avi/'`; done<br />
<br />
=== 批量将DVD转为avi ===<br />
for i in *.VOB; do mencoder -oac mp3lame -lameopts aq=7:vbr=2:q=6 -srate 44100 -ovc xvid -xvidencopts fixed_quant=4 -of avi $i -o `echo $i | sed -e 's/VOB$/avi/'`; done<br />
<br />
=== 批量将任何格式的电影转为ogv ===<br />
#sudo apt-get install ffmpeg2theora <br />
#firefox3.5或chrome直接支持播放,无需安装任何解码器,注意不支持rmvb,rmvb会出现a/v不同步问题<br />
for i in *; do ffmpeg2theora --optimize --deinterlace $i; done<br />
<br />
=== 批量将rmvb格式的电影转为ogv ===<br />
#!/bin/bash<br />
for i in *; do<br />
mkfifo "/tmp/$i"<br />
mencoder -quiet -vf harddup -ovc raw -oac pcm -o "/tmp/$i" "$i" &<br />
ffmpeg2theora --optimize --deinterlace "/tmp/$i" -o "`echo $i | sed 's/\(.*\)\..*$/\1/'`.ogv"<br />
rm "/tmp/$i"<br />
done<br />
<br />
=== 利用gst来转换任意电影为ogv ===<br />
#!/bin/bash<br />
for i in *; do<br />
gst-launch-0.10 filesrc location="$i" ! decodebin name=demux \<br />
{ oggmux name=mux ! filesink location="`echo $i | sed 's/\(.*\)\..*$/\1/'`.ogv" } \<br />
{ demux. ! queue ! audioconvert ! vorbisenc ! queue ! mux. } \<br />
{ demux. ! queue ! ffmpegcolorspace ! videorate ! theoraenc ! mux. } <br />
done<br />
<br />
<br />
<br />
=== 批量转换任意文件为ipod touch使用的mp4 ===<br />
#!/bin/bash<br />
#ubuntu10.04自带的mencoder由于版权问题,不支持h264编码,需要重新编译;也可以直接参考下面的压缩方法。<br />
#sudo apt-get install mencoder mplayer<br />
find . -name '*.avi' -o -name '*.rm' -o -name '*.rmvb' -o -name '*.wmv' -o \<br />
-name '*.vob' -o -name '*.asf' -o -name '*.mpg' -o -name '*.ts' -o \<br />
-name '*.flv' -o -name '*.mpeg' -o -name '*.ogv' -o -name '*.mov' -o \<br />
-name '*.mkv' -o -name '*.dat' | while read i; do<br />
basename=`echo $i | sed 's/\(.*\)\..*$/\1/'`<br />
font="WenQuanYi Zen Hei"<br />
<br />
if [ -f "${basename}.srt" ] ; then<br />
cp "${basename}.srt" $$.srt<br />
m0="-vf scale=480:-10,harddup -sub $$.srt -unicode -subcp GB18030 -subfont-text-scale 3"; <br />
else<br />
m0="-vf scale=480:-10,harddup"; <br />
fi<br />
<br />
x0="-lavfopts format=mp4 -faacopts mpeg=4:object=2:raw:br=160 -oac faac -ovc x264 -sws 9 -x264encopts nocabac:level_idc=30:bframes=0:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh:bitrate=500 -of lavf -ofps 24000/1001";<br />
mencoder $m0 -fontconfig -font "${font}" $x0 -o "$$.mp4" "$i"<br />
mv "$$.mp4" "${basename}.mp4"<br />
if [ -f "${basename}.mp4" ] ; then<br />
rm "$i"<br />
fi<br />
done<br />
<br />
=== 转换任意格式的视频到H264 ===<br />
#!/bin/bash<br />
#sudo apt-get install faac x264 gpac mplayer mencoder<br />
basename=`echo $1 | sed 's/\(.*\)\..*$/\1/'`<br />
#获得视频的长宽和帧数<br />
mplayer -vo null -ao null -identify -frames 0 "$1" 2>/dev/null > video.info<br />
FPS=`cat video.info | grep ID_VIDEO_FPS | cut -d = -f 2`<br />
#FPS=23.976<br />
W=`cat video.info | grep ID_VIDEO_WIDTH | cut -d = -f 2`<br />
H=`cat video.info | grep ID_VIDEO_HEIGHT | cut -d = -f 2`<br />
WIDTH=480<br />
HEIGHT=`expr $WIDTH \* $H \/ $W`<br />
echo $1 FPS=$FPS WIDTH=$WIDTH HEIGHT=$HEIGHT<br />
mkfifo audio.wav video.yuv<br />
faac -o audio.aac audio.wav &<br />
mplayer -ao pcm:file=audio.wav:fast -vc null -vo null "$1" <br />
x264 --profile baseline --fps $FPS -o video.264 video.yuv ${WIDTH}x${HEIGHT} &<br />
mencoder -vf scale=$WIDTH:$HEIGHT,harddup,pp=fd,format=i420 -nosound -ovc raw -of rawvideo -ofps $FPS -o video.yuv "$1"<br />
MP4Box -new -add video.264 -add audio.aac -fps $FPS "$basename.mp4"<br />
rm video.info audio.aac video.264 audio.wav video.yuv<br />
#使用方法将上面的脚本保存为 x264.sh , x264.sh xxx.avi 来进行转化。<br />
<br />
=== 压制DVD到H264,支持ipod ===<br />
#sudo apt-get install faac x264 gpac mplayer<br />
FPS=29.970<br />
mkfifo audio.wav<br />
cat VTS_01_1.VOB VTS_02_1.VOB VTS_02_2.VOB VTS_03_1.VOB VTS_04_1.VOB | mplayer -nocorrect-pts -vo null -vc null -ao pcm:file=audio.wav:fast - &<br />
faac audio.wav -o audio.aac<br />
mkfifo video.y4m<br />
cat VTS_01_1.VOB VTS_02_1.VOB VTS_02_2.VOB VTS_03_1.VOB VTS_04_1.VOB | mplayer -vo yuv4mpeg:file=video.y4m -vf scale=480:-3,harddup,pp=fd -nosound - &<br />
x264 --profile baseline --muxer mp4 --demuxer y4m video.y4m -o video.mp4<br />
MP4Box -add video.mp4 -add audio.aac -fps $FPS video.mp4<br />
<br />
=== 图形界面为ipod touch转mp4的方法 ===<br />
<br />
先确保有zenity和memcoder<br />
wget http://linuxfire.com.cn/~lily/toIpod -O ~/.gnome2/nautilus-scripts/toIpod && chmod +x ~/.gnome2/nautilus-scripts/toIpod<br />
在nautilus里对视频文件点右键,选择"脚本"-"toIpod".<br />
<br />
详情请查看[http://li2z.cn/2008/08/12/toipod/ 出处]。<br />
<br />
=== 转换flv到MP4 ===<br />
#sudo apt-get install ffmpeg<br />
ffmpeg -i 矜持.flv -ar 22050 矜持.mp4<br />
<br />
=== mencoder/mplayer 反拉丝参数 ===<br />
-vf lavcdeint<br />
<br />
=== 合并多个 rm 文件为一个 avi 文件 ===<br />
mencoder -ovc lavc 1.rm -oac mp3lame -o 1.avi<br />
mencoder -ovc lavc 2.rm -oac mp3lame -o 2.avi<br />
mencoder -idx 1.avi -ovc copy -oac copy -o o1.avi<br />
mencoder -idx 2.avi -ovc copy -oac copy -o o2.avi<br />
cat o1.avi o2.avi | mencoder -noidx -ovc copy -oac copy -o output.avi -<br />
<br />
=== 合并视频到一个文件 ===<br />
mencoder -ovc copy -oac copy -idx -o 目标文件名 文件名1 文件名2<br />
<br />
=== CD 抓轨为 mp3 (有损) ===<br />
#sudo apt-get install abcde<br />
abcde -o mp3 -b<br />
<br />
=== CD 抓轨为 Flac (无损) ===<br />
#sudo apt-get install abcde<br />
abcde -o flac -b<br />
<br />
=== ape 转换为 flac ===<br />
#sudo apt-get install flac shntool iconv mac<br />
#iconv -f GB2312 -t UTF-8 example.cue -o example_UTF-8.cue<br />
#shntool split -t "%n.%p-%t" -f example_UTF-8.cue -o flac example.ape -d flacOutputDir<br />
<br />
#sudo apt-get install libav-tools<br />
ffmpeg -i example.ape example.flac<br />
<br />
=== ape/flac 转换为 mp3 ===<br />
#sudo apt-get install shntool iconv libav-tools<br />
ffmpeg -i CDImage.ape CDImage.flac<br />
iconv -f gbk -t utf-8 CDImage.cue | shntool split -t "%n.%p-%t" -o 'cust ext=mp3 lame --quiet - %f' CDImage.flac<br />
<br />
=== 批量将 ape 转为 flac ===<br />
find . -name "*.ape" -exec bash -c 'avconv -i "$0" "${0/%ape/flac}"' {} \;<br />
#此命令将当前目录(包括子目录)的所有ape文件转换为flac<br />
<br />
=== 批量将 ape 转为 mp3 ===<br />
for f in *.ape; do gst-launch-0.10 filesrc location="$f" ! decodebin ! audioconvert ! lame vbr=0 bitrate=320 ! id3mux ! filesink location="${f%.ape}.mp3"; done<br />
#需要安装 shntool<br />
for i in *.ape; do shnconv -i ape -o "cust ext=mp3 lame -b 320 - %f" "$i" -d mp3OutputDir; done<br />
<br />
=== 批量将 ape 转为 m4a ===<br />
for f in *.ape; do ffmpeg -i "$f" -acodec alac "${f%.ape}.m4a"; done<br />
<br />
=== 批量将 ape 转为 aac ===<br />
for f in *.ape; do ffmpeg -i "$f" -acodec aac -strict experimental -ab 256k "${f%.ape}.aac"; done<br />
<br />
=== 批量将 flac 转为 mp3 ===<br />
for i in *.flac; do shnconv -i flac -o "cust ext=mp3 lame -b 320 - %f" "$i" -d mp3OutputDir; done<br />
<br />
=== 批量将svg转为png ===<br />
for i in *.svg; do inkscape $i --export-png=`echo $i | sed -e 's/svg$/png/'`; done<br />
<br />
=== 批量转换格式到mp3 ===<br />
#sudo apt-get install lame mplayer<br />
for i in *; do base=${i%.*}; mplayer -quiet -vo null -vc dummy -af volume=0,resample=44100:0:1 -ao pcm:waveheader:file="$i.wav" "$i" ; lame -V0 -h -b 192 -vbr-new "$i.wav" "$base.mp3"; rm -f "$i.wav" ; done<br />
<br />
=== 批量缩小图片到30% ===<br />
for i in *.jpg; do convert -resize 30%x30% "$i" "sm-$i"; done<br />
<br />
=== 批量转换jpg到png ===<br />
for i in *.jpg; do convert $i `echo $i | sed -e 's/jpg$/png/'`; done<br />
<br />
=== 将文字转为图片 ===<br />
convert -size 200x30 xc:transparent -font /usr/share/fonts/truetype/wqy/wqy-microhei.ttc -fill red -pointsize 16 -draw "text 5,15 '测试中文转为图片'" test.png<br />
<br />
=== 如何压缩png图片 ===<br />
#sudo apt-get install optipng<br />
optipng -o7 old.png new.png<br />
#或 sudo apt-get install pngcrush<br />
#pngcrush -brute old.png new.png<br />
<br />
=== 将多张图片合并到一个PDF文件 ===<br />
convert *.jpg out.pdf<br />
<br />
=== 批量把pdf转换为txt并格式化 ===<br />
sudo apt-get install poppler-utils poppler-data<br />
find ./ -name '*.txt' | while read i; do cat $i | awk '{if ($0 ~ "^[[:space:]]”) {printf “\n”$0} else {printf $0}}’ | sed ‘/^[[:space:]]*[[:digit:]]*$/d’ | sed ’s/^[[:space:]]\+/ /’ | sed ’s/"/”/g’ > “../txt/$i”; done<br />
<br />
=== 转换 pdf 到 png ===<br />
#sudo apt-get install imagemagick<br />
convert -density 196 FILENAME.pdf FILENAME.png<br />
<br />
=== 获取jpg的扩展信息(Exif) ===<br />
identify -verbose xxx.jpg<br />
<br />
=== 获取视频文件 xxx.avi 的信息 ===<br />
mplayer -vo null -ao null -frames 0 -identify "xxx.avi" 2>/dev/null | sed -ne '/^ID_/ { s/[]()|&;<>`'"'"'\\!$" []/\\&/g;p }'<br />
<br />
=== 查看MKV视频文件 xxx.mkv 的信息 ===<br />
#sudo apt-get install mkvtoolnix<br />
mkvinfo -v xxx.mkv<br />
<br />
<br />
=== 抓取桌面操作的视频 ===<br />
ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg<br />
<br />
=== 命令行读出文本 ===<br />
espeak -vzh "从前有座山"<br />
<br />
=== 命令行抓屏 ===<br />
scrot -s screenshot.png<br />
<br />
== 压缩 ==<br />
<br />
=== 增加 7Z 压缩软件 ===<br />
#支持 7Z,ZIP,Zip64,CAB,RAR,ARJ,GZIP,BZIP2,TAR,CPIO,RPM,ISO,DEB 压缩文件格式<br />
sudo apt-get install p7zip p7zip-full p7zip-rar<br />
#将所有已txt结尾的文件都加入到files.7z<br />
7z a -t7z files.7z *.txt<br />
#解压缩files.zip<br />
7z x files.zip<br />
#删除 files.zip中所有已bak结尾的文件<br />
7z d -r files.zip *.bak <br />
#列出file.7z中所有的文件信息<br />
7z l files.7z<br />
#测试files.zip中所有doc结尾文件的正确性<br />
7z t -r files.zip *.doc <br />
#更新files.zip中的所有doc结尾的文件(不是所有的压缩格式都支持更新这一选项)<br />
7z u files.zip *.doc<br />
<br />
=== 增加 rar 格式解压和压缩支持 ===<br />
#解压<br />
sudo apt-get install unrar<br />
#压缩<br />
#源里的rar包有文件名乱码问题,不建议使用。<br />
#如果确实需要rar压缩功能,请到以下网址直接下载RAR for Linux<br />
#http://www.rarlab.com/download.htm<br />
<br />
=== 增加 zip 格式解压和压缩支持 ===<br />
#解压<br />
sudo apt-get install unzip<br />
#压缩<br />
sudo apt-get install zip<br />
<br />
=== 解压缩 xxx.tar.gz ===<br />
<br />
tar -xf xxx.tar.gz<br />
<br />
=== 解压缩 xxx.tar.bz2 ===<br />
<br />
tar -xf xxx.tar.bz2<br />
<br />
=== 压缩aaa bbb目录为xxx.tar.gz ===<br />
<br />
tar -zcvf xxx.tar.gz aaa bbb<br />
<br />
=== 压缩aaa bbb目录为xxx.tar.bz2 ===<br />
<br />
tar -jcvf xxx.tar.bz2 aaa bbb<br />
<br />
=== 增加 lha 支持 ===<br />
sudo apt-get install lha<br />
<br />
=== 增加解 cab 文件支持 ===<br />
sudo apt-get install cabextract<br />
<br />
== Nautilus ==<br />
<br />
=== 显示隐藏文件 ===<br />
<br />
Ctrl+h<br />
<br />
=== 显示地址栏 ===<br />
<br />
Ctrl+l<br />
<br />
=== 特殊 URI 地址 ===<br />
<br />
* computer:/// - 全部挂载的设备和网络<br />
* network:/// - 浏览可用的网络<br />
* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录<br />
* smb:/// - 可用的 windows/samba 网络资源<br />
* x-nautilus-desktop:/// - 桌面项目和图标<br />
* file:/// - 本地文件<br />
* trash:/// - 本地回收站目录<br />
* ftp:// - FTP 文件夹<br />
* ssh:// - SSH 文件夹<br />
* fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装<br />
* themes:/// - 系统主题文件夹<br />
<br />
=== 查看已安装字体 ===<br />
fc-list |grep 文<br />
获取安装的中文字体信息<br />
<br />
文件管理器(比如nautilus)的地址栏里输入 ~/.fonts ,就可以查看当前用户拥有的fonts——而系统通用字体位于 /usr/share/fonts<br />
<br />
== 日期和时间 ==<br />
<br />
=== 显示日历 ===<br />
<br />
cal # 显示当月日历<br />
cal 2 2007 # 显示2007年2月的日历<br />
<br />
=== 显示农历 ===<br />
#sudo apt-get install lunar<br />
date '+%Y %m %d %H' |xargs lunar --utf8<br />
<br />
=== 设置日期 ===<br />
<br />
date -s mm/dd/yy<br />
<br />
=== 设置时间 ===<br />
<br />
date -s HH:MM<br />
<br />
=== 将时间写入CMOS ===<br />
<br />
hwclock --systohc<br />
<br />
=== 查看CMOS时间 ===<br />
hwclock --show<br />
<br />
=== 读取CMOS时间 ===<br />
<br />
hwclock --hctosys<br />
<br />
=== 从服务器上同步时间 ===<br />
sudo ntpdate ntp.ubuntu.com<br />
sudo ntpdate time.nist.gov<br />
<br />
=== 设置电脑的时区为上海 ===<br />
sudo dpkg-reconfigure tzdata<br />
然后根据提示选择 Asia/Shanghai。这样在升级了 tzdata 包之后时区也是对的。<br />
<br />
=== XP 和 Ubuntu 相差了 8 小时的时差 ===<br />
#关闭UTC,将当前时间写入CMOS。<br />
sudo sed -ie 's/UTC=yes/UTC=no/g' /etc/default/rcS<br />
sudo hwclock --systohc<br />
<br />
=== 将时间截转为时间 ===<br />
date -d@1234567890<br />
<br />
== 工作区 ==<br />
<br />
=== 不同工作区间切换 ===<br />
<br />
Ctrl + ALT + ←<br />
Ctrl + ALT + →<br />
或者,将滚轮鼠标放在工作区图标上滚动<br />
<br />
== 控制台 ==<br />
<br />
=== 指定控制台切换 ===<br />
<br />
Ctrl + ALT + Fn(n:1~7)<br />
<br />
=== 控制台下滚屏 ===<br />
<br />
SHIFT + pageUp/pageDown<br />
<br />
=== 控制台抓图 ===<br />
<br />
setterm -dump n(n:1~7)<br />
<br />
只是支持tty1-7。没中文。没颜色代码序列。<br />
<br />
=== 回到上一次的目录 ===<br />
cd –<br />
<br />
=== 以root的身份执行上一条命令 ===<br />
sudo !!<br />
<br />
== 数据库 ==<br />
<br />
=== mysql的数据库存放路径 ===<br />
<br />
/var/lib/mysql<br />
<br />
=== 从mysql中导出和导入数据 ===<br />
<br />
mysqldump 数据库名 &gt; 文件名 #导出数据库<br />
mysqladmin create 数据库名 #建立数据库<br />
mysql 数据库名 &lt; 文件名 #导入数据库<br />
<br />
=== 忘了mysql的root口令怎么办 ===<br />
<br />
sudo /etc/init.d/mysql stop<br />
sudo mysqld_safe --skip-grant-tables &amp;<br />
sudo mysqladmin -u user password 'newpassword<br />
sudo mysqladmin flush-privileges<br />
<br />
=== 修改mysql的root口令 ===<br />
<br />
sudo mysqladmin -u root -p password '你的新密码'<br />
<br />
<br />
=== 如何优化mysql ===<br />
wget http://www.day32.com/MySQL/tuning-primer.sh<br />
chmod +x tuning-primer.sh<br />
./tuning-primer.sh<br />
<br />
=== mysql命令行中文显示?号 ===<br />
mysql> set names utf8;<br />
<br />
=== 常用mysql管理语句 ===<br />
show table status; #查询表状态<br />
show full processlist; #查询mysql进程<br />
alter table site_stats engine=MyISAM; #转换表为MyISAM类型,转表锁为行锁。<br />
show variables; #查看mysql 变量<br />
<br />
=== mysql的自动备份 ===<br />
#备份 forum myweb 数据库到 /backup/mysql 目录,并删除7天之前的备份记录<br />
mysqldump --opt --skip-lock-tables -u root forum | gzip -9 > /backup/mysql/forum.`date +%Y%m%d`.sql.gz<br />
mysqldump --opt --skip-lock-tables -u root myweb | gzip -9 > /backup/mysql/myweb.`date +%Y%m%d`.sql.gz<br />
find /backup/mysql/ -type f -ctime +7 -exec rm {} \;<br />
<br />
== 控制 ==<br />
<br />
=== 如何使用命令关闭显示器 ===<br />
<br />
xset dpms force off<br />
<br />
=== 设置CPU的频率 ===<br />
sudo apt-get install cpufrequtils <br />
#查看cpu当前频率信息<br />
sudo cpufreq-info <br />
设置模式,对应于{最省电(最低频率),用户控制,最高或最低,正常,最大性能} <br />
cpufreq-set -g {powersave, userspace, ondemand, conservative, performance}<br />
<br />
=== 命令关机 ===<br />
sudo halt<br />
sudo shutdown -h now #现在关机<br />
<br />
=== 定时关机 ===<br />
sudo shutdown -h 23:00 #晚上11点自动关机<br />
sudo shutdown -h +60 #60分钟后关机<br />
<br />
=== 命令重启电脑 ===<br />
sudo reboot<br />
sudo shutdown -r now<br />
<br />
=== 如何修改ssh登录提示 ===<br />
sudo gedit /etc/motd<br />
<br />
=== 如何关闭ssh登录提示 ===<br />
sudo gedit /etc/ssh/sshd_config 修改这一行为: PrintLastLog no<br />
<br />
=== 如何使用命令关闭笔记本的触摸板 ===<br />
<br />
synclient touchpadoff=1<br />
那么开启触摸板就是:<br />
synclient touchpadoff=0<br />
<br />
=== 从命令行通知桌面消息 ===<br />
#sudo apt-get install libnotify-bin<br />
notify-send "hello world"<br />
<br />
== 统计 ==<br />
<br />
=== 统计最常用的10条命令 ===<br />
<br />
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10 <br />
<br />
=== 统计每个单词的出现频率,并排序 ===<br />
<br />
awk '{arr[$1]+=1 }END{for(i in arr){print arr[i]"\t"i}}' FILE_NAME | sort -rn<br />
<br />
=== 统计80端口的连接个数并按照从大到小排列 ===<br />
<br />
netstat -na|grep&nbsp;:80|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n<br />
<br />
== 编辑器 ==<br />
=== vim中删除技巧 ===<br />
:%s/[Ctrl-v][Enter]//g 删除DOS方式的回车^M<br />
:%s= *$== 删除行尾空白<br />
:%!sort -u 删除重复行<br />
:%s/^.{-}pdf/new.pdf/ 只是删除第一个pdf<br />
:%s/// 删除多行注释<br />
:g/^$/d 删除所有空行 <br />
:g!/^dd/d 删除不含字符串'dd'的行<br />
:v/^dd/d 删除不含字符串'dd'的行<br />
:g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行<br />
:v/./.,/./-1join 压缩空行<br />
:g/^$/,/./-j 压缩空行<br />
ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。<br />
d0 删至行首。<br />
d$ 删至行尾。<br />
ndd 删除当前行及其后 n-1 行。<br />
x 或 X 删除一个字符。<br />
Ctrl+u 删除输入方式下所输入的文本。<br />
D 删除到行尾<br />
x,y 删除与复制包含高亮区<br />
dl 删除当前字符(与x命令功能相同)<br />
d0 删除到某一行的开始位置<br />
d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符)<br />
dw 删除到某个单词的结尾位置<br />
d3w 删除到第三个单词的结尾位置<br />
db 删除到某个单词的开始位置<br />
dW 删除到某个以空格作为分隔符的单词的结尾位置<br />
dB 删除到某个以空格作为分隔符的单词的开始位置<br />
d7B 删除到前面7个以空格作为分隔符的单词的开始位置<br />
d) 删除到某个语句的结尾位置<br />
d4) 删除到第四个语句的结尾位置<br />
d( 删除到某个语句的开始位置<br />
d) 删除到某个段落的结尾位置<br />
d{ 删除到某个段落的开始位置<br />
d7{ 删除到当前段落起始位置之前的第7个段落位置<br />
dd 删除当前行<br />
d/text 删除从文本中出现“text”中所指定字样的位置,一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容<br />
dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容<br />
dtc 删除当前行直到下一个字符“c”所出现位置之间的内容<br />
D 删除到某一行的结尾<br />
d$ 删除到某一行的结尾<br />
5dd 删除从当前行所开始的5行内容<br />
dL 删除直到屏幕上最后一行的内容<br />
dH 删除直到屏幕上第一行的内容<br />
dG 删除直到工作缓存区结尾的内容<br />
d1G 删除直到工作缓存区开始的内容<br />
ci{ 删除修改光标所在的{}中的所有内容,change in { 的简写<br />
ca{ 删除修改光标所在的{}中的所有内容,包括{}<br />
ci" 删除修改光标所在的""中的所有内容,change in " 的简写<br />
ca" 删除修改光标所在的""中的所有内容,包括{}<br />
ci( 删除修改光标所在的()中的所有内容,change in ( 的简写<br />
ca( 删除修改光标所在的()中的所有内容,包括{}<br />
<br />
=== vim一个远程文件 ===<br />
vim scp://username@host//path/to/somefile<br />
<br />
=== 如何配置Emacs ===<br />
<br />
打开新立得或者命令行,查找emacs, 选择你想要的版本,比如emacs22或者emacs21. <br />
<br />
之后的配置参考[http://forum.ubuntu.com.cn/viewtopic.php?t=13560 <span class="postdetails">Emacs 常见问题及其解决方法</span>]<br />
<br />
=== vim 如何显示彩色字符 ===<br />
<br />
sudo cp /usr/share/vim/vimcurrent/vimrc_example.vim /usr/share/vim/vimrc<br />
<br />
=== 让 vim 直接支持编辑 .gz 文件 ===<br />
<br />
sudo apt-get install vim-full<br />
<br />
=== vim 如何显示行号,在~/.vimrc中加入 ===<br />
<br />
set number<br />
<br />
如果没有~/.vimrc文件,则可以在/etc/vim/vimrc中加入<br />
<br />
set number<br />
<br />
=== vim配色方案 (~/.vimrc) ===<br />
colorscheme scheme<br />
可用的 scheme 在 /usr/share/vim/vim71/colors/ <br />
<br />
=== 解决vim中文编码问题,在~/.vimrc中加入 ===<br />
<br />
let &amp;termencoding=&amp;encoding<br />
set fileencodings=utf-8,gbk,ucs-bom,cp936<br />
<br />
#再提供一个实践中觉得不错的配置:<br />
" Encoding related<br />
set encoding=UTF-8<br />
set langmenu=zh_CN.UTF-8<br />
language message zh_CN.UTF-8<br />
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1<br />
set fileencoding=utf-8<br />
<br />
===gedit中文乱码的解决===<br />
gsettings set org.gnome.gedit.preferences.encodings auto-detected "['GB18030', 'UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16']"<br />
<br />
== 编译和打包 ==<br />
=== 安装通用编译环境 ===<br />
sudo apt-get install build-essential<br />
<br />
=== 通用的编译安装步骤 ===<br />
./configure && make && sudo make install<br />
<br />
=== 如何编译安装软件 kate ===<br />
sudo apt-get install apt-build<br />
sudo apt-build install kate<br />
<br />
=== 获得源代码包 ===<br />
sudo apt-get source mysql-server<br />
<br />
=== 解压缩还原源代码包 ===<br />
dpkg-source -x mysql-dfsg-5.1_5.1.30-1.dsc<br />
<br />
=== 安装编译打包环境 ===<br />
sudo apt-get build-dep mysql-server<br />
<br />
=== 重新编译并打包Debian化的源码 ===<br />
dpkg-buildpackage -rfakeroot<br />
<br />
=== 获得源码并重新打包 ===<br />
apt-get source php5-cgi <br />
#或手工下载源码后使用 dpkg-source -x php5_5.2.6.dfsg.1-3ubuntu4.1.dsc 解开源码<br />
sudo apt-get build-dep php5-cgi<br />
cd php5-5.2.6.dfsg.1<br />
dpkg-buildpackage -rfakeroot -uc -b<br />
<br />
=== 给源代码打补丁 ===<br />
patch -p0 < mysql.patch<br />
<br />
=== 安装 gtk+ 编译环境 ===<br />
sudo apt-get install build-essential libgtk2.0-dev<br />
<br />
== 其它 ==<br />
<br />
=== 把终端加到右键菜单 ===<br />
sudo apt-get install nautilus-open-terminal <br />
<br />
=== 如何删除Totem电影播放机的播放历史记录 ===<br />
<br />
rm ~/.recently-used<br />
<br />
=== 清除桌面挂载硬盘图标 ===<br />
gconftool-2 --set /apps/nautilus/desktop/volumes_visible 0 --type bool<br />
<br />
恢复:<br />
<br />
gconftool-2 --set /apps/nautilus/desktop/volumes_visible 1 --type bool<br />
<br />
=== 如何更换gnome程序的快捷键 ===<br />
<br />
点击菜单,鼠标停留在某条菜单上,键盘输入任意你所需要的键,可以是组合键,会立即生效;<br />
如果要清除该快捷键,请使用backspace<br />
<br />
=== man 如何显示彩色字符 ===<br />
vim ~/.bashrc<br />
#增加下面的内容:<br />
export LESS_TERMCAP_mb=$'\E[01;31m'<br />
export LESS_TERMCAP_md=$'\E[01;31m'<br />
export LESS_TERMCAP_me=$'\E[0m'<br />
export LESS_TERMCAP_se=$'\E[0m'<br />
export LESS_TERMCAP_so=$'\E[01;44;33m'<br />
export LESS_TERMCAP_ue=$'\E[0m'<br />
export LESS_TERMCAP_us=$'\E[01;32m'<br />
#生效文件<br />
#source .bashrc<br />
<br />
=== 如何在命令行删除在会话设置的启动程序 ===<br />
<br />
cd ~/.config/autostart<br />
rm 需要删除启动程序<br />
<br />
=== 如何提高wine的反应速度 ===<br />
<br />
sudo sed -ie '/GBK/,/^}/d' /usr/share/X11/locale/zh_CN.UTF-8/XLC_LOCALE<br />
<br />
<br><br />
可能造成某些游戏帧数降低<br />
<br><br />
<br />
=== 如何命令行刻录 ===<br />
<br />
mkisofs -o test.iso -Jrv -V test_disk /home/carla/<br />
cdrecord -scanbus<br />
scsibus1:<br />
1,1,0 101) 'HL-DT-ST' 'CD-RW GCE-8481B ' '1.04' Removable CD-ROM<br />
cdrecord -v -eject speed=8 dev=1,1,0 test.iso<br />
<br />
http://www.ibm.com/developerworks/cn/linux/l-cdburn/index.html<br><br />
<br />
=== 延迟抓图 ===<br />
<br />
gnome-screenshot -d 10 #延迟10秒抓图<br />
gnome-screenshot -w -d 5 #延迟5秒抓当前激活窗口<br />
<br />
=== 回收站在哪里 ===<br />
~/.local/share/Trash/<br />
<br />
=== 强制清空回收站 ===<br />
sudo rm -fr $HOME/.local/share/Trash/files/<br />
<br />
=== 默认打开方式的配置文件在哪里 ===<br />
#全局<br />
/etc/gnome/defaults.list <br />
#个人<br />
~/.local/share/applications/mimeapps.list<br />
=== Firefox 的缓存目录在哪里 ===<br />
ls ~/.mozilla/firefox/*.default/Cache/<br />
<br />
=== 查看samba的用户 ===<br />
sudo pdbedit -L<br />
<br />
=== 增加一个用户到samba ===<br />
sudo pdbedit -a username<br />
<br />
=== 从samba账户中删除一个用户 ===<br />
sudo pdbedit -x username<br />
<br />
=== 显示samba账户信息 ===<br />
sudo pdbedit -r username<br />
<br />
=== 测试samba账户是否正常 ===<br />
smbclient -L 192.168.1.1 -U username -d 3<br />
<br />
=== samba的数据库存在哪里 ===<br />
/var/lib/samba/passdb.tdb<br />
<br />
=== samba用户Windows下无法登录 ===<br />
在Windows的运行输入 cmd ,进入终端,输入 net use 命令,将显示已经连接的帐号如 \\192.168.1.1\username<br />
再输入 net use \\192.168.1.1\username /delete 删除现有的共享连接,再尝试进入另外一个目录就可以正常登录了。<br />
<br />
=== Pidgin 的聊天记录在哪里 ===<br />
~/.purple/logs/<br />
<br />
=== 安装PDF打印机 ===<br />
sudo apt-get install cups-pdf<br />
#打印生成的pdf文件在 ~/PDF 文件夹里面<br />
<br />
=== nvidia快速重设显示设置及配置多显示器 ===<br />
sudo dpkg-reconfigure xserver-xorg<br />
sudo nvidia-xconfig<br />
#nvidia-settings 用于设置分辨率和多显示器<br />
sudo nvidia-settings<br />
===kacpid进程大量占用CPU===<br />
硬件驱动中不要激活无线网卡驱动即可<br />
[[Category:入门]]<br />
<br />
=== 替换上一条命令中的一个短语 ===<br />
^foo^bar^<br />
!!:s/foo/bar/<br />
<br />
=== AMD64位系统安装免费的杀毒软件 avast! ===<br />
wget http://files.avast.com/files/linux/avast4workstation_1.3.0-2_i386.deb<br />
sudo dpkg --force-architecture -i avast4workstation_1.3.0-2_i386.deb<br />
sudo apt-get install ia32-libs<br />
#然后打开 http://www.avast.com/registration-free-antivirus.php 去申请免费一年的许可证号<br />
<br />
=== 应用合适的字体显示尺寸 ===<br />
获取信息<br />
xdpyinfo | grep -B1 dot<br />
例如<br />
dimensions: 1440x900 pixels (333x212 millimeters)<br />
resolution: 110x108 dots per inch<br />
获取X server信息<br />
grep DPI /var/log/Xorg.0.log<br />
例如<br />
[ 19.244] (--) NVIDIA(0): DPI set to (110, 108); computed from "UseEdidDpi" X config<br />
这里设置的X DPI会被桌面的顶替,找到你自己的替换,如上的DPI从默认的96改为109。<br />
<br />
=== 重新配置键盘类型 ===<br />
sudo dpkg-reconfigure keyboard-configuration</div>
Lavande