Welcome to vpsdoc’s documentation!¶
Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language for scripting and rapid application development in many areas on most platforms.
The Python interpreter and the extensive standard library are freely available in source or binary form for all major platforms from the Python Web site, https://www.python.org/, and may be freely distributed. The same site also contains distributions of and pointers to many free third party Python modules, programs and tools, and additional documentation.
The Python interpreter is easily extended with new functions and data types implemented in C or C++ (or other languages callable from C). Python is also suitable as an extension language for customizable applications.
This tutorial introduces the reader informally to the basic concepts and features of the Python language and system. It helps to have a Python interpreter handy for hands-on experience, but all examples are self-contained, so the tutorial can be read off-line as well.
LINUX 基础¶
CENTOS 6.x 基础¶
配置网络¶
主要针对虚拟机上安装之后无法联网问题。 VPS的话,网络肯定是配置好了的。
编辑 /etc/sysconfig/network-script/ifcfg-eth0
,配置IP、掩码,是否开机激活网卡,IP获取方式,网关。一般这样就可以了。然后重启网络服务:
service network restart
如果 DNS 没有设置,需要编辑 /etc/resolv.conf
手动更改:
nameserver 8.8.8.8
yum 命令用法¶
常用参数:
-y | 不询问用户,直接操作。 |
安装软件包:
yum install nginx
删除软件包:
yum uninstall nginx
列表已安装的软件包:
yum list installed
搜索软件包:
yum search nginx
chkconfig 命令用法¶
chkconfig
命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记 chkconfig
不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
添加服务:
chkconfig --add supervisord
删除服务:
chkconfig --del supervisord
设置服务运行级别:
chkconfig --level 235 supervisord on
Ubuntu 基础¶
Dash 更换为 Bash¶
Ubuntu 默认的 /bin/sh
指向的是 dash ,而 bash 是比较好的一个选择。
那么怎么把sh改为指向bash呢?
最暴力的方法当然是直接把 /bin/sh
的软链接改到 bash 中,如:
ln -s /bin/bash /bin/sh
但是,有优雅一些的方法:
sudo dpkg-reconfigure dash
出现菜单问你是否要 dash 的时候,选 no
就可以了。
更换 APT 软件源¶
一般来说,建议使用速度最快的源。
编辑 /etc/apt/sources.list
,最好先做备份,以防万一。
把 cn.archive.ubuntu.com
全部改为 mirrors.163.com
即可。
sed -i 's/cn.archive.ubuntu.com/mirrors.163.com/g' /etc/apt/sources.list
添加普通用户¶
添加新用户步骤如下:
- 添加新用户:
adduser yourUsername
- 把新用户加入 sudo 规则内:
visudo
,然后添加yourUsername ALL=(ALL) ALL
- 修改
sshd_config
文件,vi /etc/ssh/sshd_config
- 禁止
root
帐号登录:把PermitRootLogin yes
改成PermitRootLogin no
- 修改 ssh 端口:把
Port 22
中 22 改成你自己想要的端口
- 禁止
- 重启 ssh 服务:
/etc/init.d/ssh restart
退出 vps 就登录到 yourUsername,而且不能用 root 登录了。
开启SSH服务¶
如果安装时没有安装 SSH 服务,则需要手动安装。
SSH 分客户端 openssh-client 和服务端 openssh-server 。
这里两个都安装:
sudo aptitude install openssh-server openssh-client
SSH 服务的状态管理:
sudo service ssh {start|restart|stop|status}
ssh-server 配置文件位于 /etc/ssh/sshd_config
。
LNMP/LNMPA WEB 环境¶
LNMP一键安装包¶
官网地址: http://lnmp.org/
下载¶
下载版(不包含源码,72KB):
wget http://soft.vpser.net/lnmp/lnmp1.1.tar.gz
完整版(包含所有源码,184MB):
wget http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz
安装 LNMP¶
使用putty或类似的SSH工具登陆VPS或服务器,登陆后运行:
screen -S lnmp
CentOS系统下执行:
tar zxf lnmp1.1-full.tar.gz && cd lnmp1.1-full && ./centos.sh
# or
tar zxf lnmp1.1.tar.gz && cd lnmp1.1 && ./centos.sh
Debian系统下执行:
tar zxf lnmp1.1-full.tar.gz && cd lnmp1.1-full && ./debian.sh
# or
tar zxf lnmp1.1.tar.gz && cd lnmp1.1 && ./debian.sh
Ubuntu系统下执行:
tar zxf lnmp1.1-full.tar.gz && cd lnmp1.1-full && ./ubuntu.sh
# or
tar zxf lnmp1.1.tar.gz && cd lnmp1.1 && ./ubuntu.sh
安装 LNMPA¶
LNMPA 是 LNMP 的扩展,需要先按 LNMP 安装教程安装好 LNMP 后,在 LNMP 压缩包解压后的目录里再执行 ./apache.sh
开始安装,会提示输入邮箱,回车确认后将会自动开始安装。
Apache 服务器默认监听端口是88,而且绑定了 127.0.0.1 ,外网无法访问。
机制:静态文件由Nginx驱动,动态页面转交给Apache处理,处理完之后交给Nginx返回给客户端。
添加虚拟主机时,会同时添加Nginx配置文件和Apache配置文件。
特别注意: 安装 LNMPA 之后,不能回退到 LNMP 。
虚拟主机管理¶
问题¶
TuxLite¶
TuxLite 是为 Debian 和 Ubuntu 编写的 LAMP / LNMP 套件部署脚本程序。
官方地址: http://tuxlite.com/
源码: https://github.com/Mins/TuxLite
安装¶
注解
安装前请确保默认 sh
为 bash
。
Create directory to hold TuxLite scripts and enter new directory:
mkdir tuxlite
cd tuxlite
Download the desired script. Copy script link from “Download” section:
wget http://tuxlite.com/scripts/tuxlite.tar.gz
Or download using Git (ignore this section if you are unfamiliar with Git):
aptitude install git
git clone https://github.com/Mins/TuxLite.git
cd TuxLite
Extract contents of tarball:
tar xzf tuxlite.tar.gz
Edit options to enter server IP, MySQL password etc:
nano options.conf
Make all scripts executable:
chmod 700 *.sh
chmod 700 options.conf
Update APT database and install aptitude:
apt-get update && apt-get -y install aptitude
Add a new Linux user because root user will be disabled after installation:
adduser johndoe
Install LAMP or LNMP stack:
./install.sh
Add domains to the user:
./domain.sh add johndoe yourdomain.com
./domain.sh add johndoe subdomain.yourdomain.com
Install Adminer or phpMyAdmin:
./setup.sh dbgui
Enable/disable public viewing of Adminer/phpMyAdmin:
./domain.sh dbgui on
./domain.sh dbgui off
问题¶
502 Bad Gateway¶
症状: HTML 文件可以正常访问,访问 PHP 文件时出现 502 Bad Gateway 。
引起这个问题的主要原因是权限问题。
默认情况下:
/var/run/php-fpm-{{username}}.sock
/var/run/php5-fpm-www-data.sock
拥有者是 root:root ,而一般用户对这个没有读写权限,所以就会出现 502 。
解法方法:
编辑 /etc/php5/fpm/pool.d/{{username}}.conf
文件,找到下面这三行,把前面的 ;
去掉:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
然后重启 PHP5-FPM:
sudo /etc/init.d/php5-fpm restart
常见问题¶
Python 2.7.x 基础¶
升级到 Python 2.7¶
主要是把 Python 2.6 升级到 2.7 ,因为 CentOS 6.x 自带的 Python 为 2.6 版本。而 Ubuntu 12.04 就已经是 2.7 版本了。
安装过程基于已经编译安装好的 LNMP 环境。
安装需要的基础软件包:
yum install readline-devel gdbm-devel sqlite-devel -y
下载并安装 Python 2.7:
wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
tar xf Python-2.7.8.tgz
cd Python-2.7.8
./configure --prefix=/usr/local && make && make altinstall
安装 setuptools 和 pip:
wget https://bootstrap.pypa.io/get-pip.py
python2.7 get-pip.py
pip 的简单用法:
pip2.7 install [packagename]
pip2.7 install --upgrade [packagename]
pip2.7 uninstall [packagename]
安装 virtualenv:
pip2.7 install virtualenv
virtualenv-2.7 my27project
source my27project/bin/activate
deactivate
安装 MySQL-python¶
把 /usr/local/mysql/bin
加入 $PATH 环境变量:
export PATH=$PATH:/usr/local/mysql/bin
安装 MySQL-python:
pip install MySQL-python==1.2.3
目前最新版本是 1.2.5 ,不建议安装 1.2.4 版本。
安装 supervisor¶
配置¶
配置文件默认路径:
/etc/supervisord.conf
创建一个配置文件:
echo_supervisord_conf > /etc/supervisord.conf
配置示例:
[program:wtxlog]
user=www
directory={{approot}}
command=/bin/env env/bin/gunicorn -b unix:app_wtxlog.sock manage:app
process_name=%(program_name)s
numprocs=1
autostart=true
autorestart=true
stopsignal=QUIT
redirect_stderr=true
自启动脚本¶
下载:
wget https://github.com/Supervisor/initscripts/blob/master/redhat-init-mingalevme -o supervisord --no-check-certificate
cp supervisord /etc/init.d/
chmod +x /etc/init.d/supervisord
这是 supervisor 官方推荐的脚本。脚本放置位置: /etc/init.d/supervisord
。
因为 Python 2.7 安装在 /usr/local
, 所以需要把 /etc/init.d/supervisord
脚本中的 PREFIX
改为 /usr/local
,否则脚本无法运行。
添加到系统服务(CENTOS):
chkconfig --add supervisord
chkconfig --level 235 supervisord on
MySQL 基础¶
基本操作¶
连接数据库:
$ mysql -uroot -p
显示数据库:
mysql > show databases;
创建数据库:
mysql > create database fupiter;
切换数据库:
mysql > use fupiter;
删除数据库:
mysql > drop database fupiter;
重置 root 用户密码¶
方法一、使用 mysqladmin:
mysqladmin -u root password 'newpassword'
password后面的引号不是必须的,不过如果密码包含空格或者一些特殊的符号,需要用引号。需要输入原 root 的密码。
方法二、利用mysql SET PASSWORD命令:
mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpassword');
方法三、使用重置脚本:
wget http://soft.vpser.net/lnmp/ext/reset_mysql_root_password.sh
sh reset_mysql_root_password.sh
适合 lnmp 或 MySQL 管理脚本在 /etc/init.d/mysql
且 mysql 安装在 /usr/local/mysql/
的。否则需要修改脚本后再执行 sh reset_mysql_root_password.sh
。
方法四、安全模式重置
编辑
/etc/my.cnf
或者/etc/mysql/my.cnf
,在[mysqld]
的段中加上一句skip-grant-tables
。重启 mysql 服务
连接 mysql 并重置密码:
$ mysql -uroot mysql> USE mysql ; mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;
移除
my.cnf
中的skip-grant-tables
重启 mysql 服务,收工。
导出数据库¶
命令行通过 mysqldump 导出¶
备份单个数据库:
mysqldump --user=user --password=password --lock-all-tables dbname > backup.sql
备份多个数据库:
mysqldump --user=user --password=password --lock-all-tables --databases dbname1 dbname2 > backup.sql
备份所有数据库:
mysqldump --user=user --password=password --lock-all-tables --all-databases > backup.sql
--lock-all-tables
选项可以在备份期间锁定数据库防止出现变化,进而导致多个有关系的表不同步,比如A表需要引用B表,备份完A表后,B 表发生了变化,之后才备份了B表,这样数据库就乱了。
备份上百M的数据库也只用了几秒而已,所以这个选项对网站运行影响不大。
使用 PhpMyAdmin 导出¶
比较简单,略。
导入数据库¶
命令行通过 SQL 文件导入:
mysql > use database; mysql > source d:/mysql.sql;
通过 PhpMyAdmin 导入
这个就比较简单了,傻瓜化的。
IPTables¶
开放80端口¶
添加规则:
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
保存规则并重启 iptables 服务(CentOS):
/etc/init.d/iptables save
/etc/init.d/iptables restart
WordPress¶
VSFTPD文件服务器¶
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
小技巧
操作系统环境:CentOS 6.x 和 Ubuntu 12.04+
登录用户类型¶
用户类型主要有三种:
匿名用户
本地用户
通过添加 Linux 系统用户来访问 FTP 服务,如果用户比较多,需要添加较多的系统用户。
虚拟用户
只需建立一个系统用户,所有虚拟用户都映射到这个系统用户上。不过,若这个用户被禁用,则所有虚拟用户会失效。
防火墙开放FTP端口¶
CentOS 系统默认会启用防火墙,若要FTP被外网访问,需要开放相应的端口:
/sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 20 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 20000:30000 -j ACCEPT
20000-30000的端口主要用于数据传输。
小技巧
添加规则之后不要忘记保存哦。
虚拟用户¶
配置文件概览¶
- Vsftp配置文件:
/etc/vsftpd.conf
或者/etc/vsftpd/vsftpd.conf
- PAM认证配置文件:
/etc/pam.d/vsftpd
- 虚拟用户数据库文件:
/etc/vsftpd/vuserlogin.txt
和/etc/vsftpd/vuserlogin.db
- 虚拟用户配置文件:
/etc/vsftpd/virtual/username
- chroot文件:
/etc/vsftpd/chroot_list
vsftpd配置文件¶
警告
行的值都不能有空格(比如行末多余的空格)!!!
配置文件一般位于 /etc/vsftpd.conf
或者 /etc/vsftpd/vsftpd.conf
,文件内容如下:
listen=YES
connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=20000
pasv_max_port=30000
local_enable=YES
write_enable=NO
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#user_list_enable=YES
# 用户配置文件所在的目录
user_config_dir=/etc/vsftpd/virtual
# 启用虚拟用户
guest_enable=YES
# 将虚拟用户映射为本地用户,Ubuntu下可设为本地用户
guest_username=www
pam_service_name=vsftpd
#dirmessage_enable=YES
tcp_wrappers=YES
#listen_port=5555
#max_client=10
#max_per_ip=1
#ftpd_banner=this is a virtual server and users
其它一些配置:
设置连接FTP时的欢迎信息:
ftpd_banner=Welcome to digwtx's FTP service.
设置进入目录后的欢迎信息,另参考 message_file 选项:
dirmessage_enable=YES
禁止用户登录。如果设为YES,则需要引用/etc/vsftpd.user_list文件,这个文件里的用户会被禁止访问,这个文件也可以自定义:
user_list_enable=YES
创建虚拟用户数据库¶
创建用户文本文件¶
/etc/vsftpd/vuserlogin.txt
是纯文本文件,用于存放用户名和密码。格式是,一行用户名,一行密码。依次类推。
格式如下:
username
password
小技巧
文件最后要留一个空行。
生成数据库¶
如果找不到 db_load
,需要先安装 Berkeley 数据库及组件。
Centos 6.x:
yum install db4 db4-utils -y
Ubuntu 12.04+:
aptitude install db-util
然后执行下面的命令:
db_load -T -t hash -f /etc/vsftpd/vuserlogin.txt /etc/vsftpd/vuserlogin.db
chmod 600 /etc/vsftpd/vuserlogin.db
新增用户或者修改密码之后,需要重新生成数据库。
注解
假如 vuserlogin.txt
删除了某个用户名和密码,需要先删除 vuserlogin.db
,然后再重新生成数据库。否则已删除的用户还会存在于数据库中。
配置PAM文件¶
编辑 /etc/pam.d/vsftpd
文件,文件内容为下面两行:
auth required pam_userdb.so db=/etc/vsftpd/vuserlogin
account required pam_userdb.so db=/etc/vsftpd/vuserlogin
小技巧
pam_userdb.so
可以使用绝对路径。
小技巧
一般只要这两就可以了,在Ubuntu配置的时候,因为有其它的内容存在,导致一直530。
为虚拟用户创建本地系统用户(可忽略)¶
命令如下:
useradd -s /sbin/nologin www
小技巧
因为LNMP编译时已经添加www用户和www组,为了统一,直接使用www用户。故这步可忽略。Ubuntu下可以直接使用普通用户名。
创建虚拟用户配置文件¶
虚拟用户VSFTPD配置文件位于 /etc/vsftpd/virtual
,若目录不存在,需要先创建:
mkdir -p /etc/vsftpd/virtual
虚拟用户的配置文件以用户名命名。
执行下面的命令,则可为 digwtx
用户增加配置文件:
cat > /etc/vsftpd/virtual/digwtx << EOF
write_enable=YES
virtual_use_local_privs=YES
local_root=/home/wwwroot/xxx
EOF
local_root
可以配合 LNMP 的 vhost 使用。
把虚拟用户追加到chroot列表¶
为了安全起见,虚拟用户需要限制在自己的家目录中,不允许访问家目录的上级目录,比如 /home/wwwroot/xxx
。
在VSFTPD配置文件中,我们作了相应的设置。因此,新增加的用户需要追加到这个文件中。
比如,把用户 digwtx
追加到 chroot_list 文件中:
cat >> /etc/vsftpd/chroot_list << EOF
digwtx
EOF
完了之后需要重启计算机。
配置好之后,要增加虚拟用户,只需重复2,3,7,8这四步即可。
参考:
Sed技巧¶
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法。
sed命令行格式¶
sed [-nefri] command 输入文本
常用选项¶
-n | 使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的资料
一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed
特殊处理的那一行(或者动作)才会被列出来。 |
-e | 直接在指令列模式上进行 sed 的动作编辑; |
-f filename | 直接将 sed 的动作写在一个档案内, -f filename 则可以执行
filename 内的 sed 动作; |
-r | sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法) |
-i | 直接修改读取的档案内容,而不是由萤幕输出。 |
常用命令¶
命令 | 说明 |
---|---|
a |
新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的
下一行)~ |
c |
取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! |
d |
删除,因为是删除啊,所以 d 后面通常不接任何咚咚; |
i |
插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); |
p |
列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~ |
s |
取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
正规表示法!例如 1,20s/old/new/g 就是啦! |
举例¶
注解
假设我们有一文件名为 ab
删除某行
$ sed '1d' ab #删除第一行
$ sed '$d' ab #删除最后一行
$ sed '1,2d' ab #删除第一行到第二行
$ sed '2,$d' ab #删除第二行到最后一行
显示某行
$ sed -n '1p' ab #显示第一行
$ sed -n '$p' ab #显示最后一行
$ sed -n '1,2p' ab #显示第一行到第二行
$ sed -n '2,$p' ab #显示第二行到最后一行
使用模式进行查询
$ sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行
$ sed -n '/\$/p' ab #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义
增加一行或多行字符串
$ cat ab
Hello!
ruby is me,welcome to my blog.
end
$ sed '1a drink tea' ab #第一行后增加字符串"drink tea"
Hello!
drink tea
ruby is me,welcome to my blog.
end
$ sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
Hello!
drink tea
ruby is me,welcome to my blog.
drink tea
end
drink tea
$ sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用换行符\n
Hello!
drink tea
or coffee
ruby is me,welcome to my blog.
end
代替一行或多行
$ sed '1c Hi' ab #第一行代替为Hi
Hi
ruby is me,welcome to my blog.
end
$ sed '1,2c Hi' ab #第一行到第二行代替为Hi
Hi
end
替换一行中的某部分
格式: sed 's/要替换的字符串/新的字符串/g'
(要替换的字符串可以用正则表达式)
$ sed -n '/ruby/p' ab | sed 's/ruby/bird/g' #替换ruby为bird
$ sed -n '/ruby/p' ab | sed 's/ruby//g' #删除ruby
插入
$ sed -i '$a bye' ab #在文件ab中最后一行直接输入"bye"
$ cat ab
Hello!
ruby is me,welcome to my blog.
end
bye