标签 "centos" 下的文章

由于 libuv 版本的 SS 不稳定,并且安装步骤繁琐,因此推荐安装 libev 版本。安装参考如下

1、Shadowsocks 是什么

Shadowsocks 是一种安全的 socks5 代理,可以保护你的上网流量。基于多种加密方式,推荐使用 aes-256-cfb 加密。安装和使用需要本地端和服务端。
本地客户端已经包含了多种版本,包括iOS,Android,Windows,MAC,甚至是路由器 (基于OpenWRT),所以使用方便,各取所需。
远程服务端则一般安装在基于 Linux 的各种发行版操作系统,比如 Debian, CentOS, Fedora, Redhat, Ubuntu, openSUSE等。

2、Shadowsocks 的作者是谁

最初只有 Python 版,由 @clowwindy 开发和维护,后来随着知名度提高,开始出现各种语言的版本,其中比较知名的是 libev , go, nodejs 等版本,需要注意的是,nodejs 的作者也是 @clowwindy,但最近已不再维护该版本。libev 的维护者是 @madeye,长期更新。

3、Shadowsocks 一键安装脚本

虽然作者的安装教程已经很完备了,但还是有不少人不会安装和使用,因此我编写了 Shadowsocks 一键安装脚本,主要基于 CentOS 系统下的一键安装(也有 Debian 系统),分别有 Python, libev, nodejs 版,个人推荐使用 Python 和 libev 版。
该脚本会自动下载,编译安装最新版的 Shadowsocks,并且可以完全卸载 Shadowsocks ,自动生成配置文件,安装完成即可使用。

4、Shadowsocks 如何升级

安装完 Shadowsocks,一段时间后,作者已经更新了版本(修正 bug 或升级功能),那么如何一键升级到最新版呢?
Python 版,执行命令: pip install -U shadowsocks ,命令执行成功后,重新启动 Shadowsocks ,命令: service shadowsocks restart
libev 版,先卸载旧版本,执行命令:./shadowsocks-libev.sh uninstall ,再安装新版本,执行命令: ./shadowsocks-libev.sh 安装
Debian 下的 libev 版,升级方式同上。
nodejs 版,也是先卸载再重新安装,因为作者已经不更新,所以不推荐用这版本。

5、Shadowsocks 安装失败怎么办

由于 CentOS 5.x 的默认 gcc 版本过低,在编译 libev 版时会出错;同时默认 Python 的版本也过低,所以也无法安装 Python 版的。因此,请确保安装的环境为 CentOS 6.x 或 CentOS 7.x 。
更多其他错误,请根据实际错误提示,自行在 google 上搜索关键字。

6、Shadowsocks 的客户端程序

大多数人都是在 Windows 下使用电脑,因此最好用的 Windows 客户端是 shadowsocks-gui,下载最新版后解压即可使用。
shadowsocks-gui客户端下载地址:https://sourceforge.net/projects/shadowsocksgui/files/dist/

7、Shadowsocks 本地代理上网

本地电脑启动客户端,连接上远程服务端后,即在本地开启了 socks5 代理,本地端口号默认为 1080,如果提示被占用,也可以改为其他端口号。在浏览器中安装插件,Chrome 下是 SwitchySharp, Firefox 下是 AutoProxy,新建配置文件,SOCKS Host 填 127.0.0.1,Port 填 1080(默认,跟 Shadowsocks 客户端的本地端口号一致即可)

参考链接:
1、http://shadowsocks.org/en/index.html
2、https://github.com/clowwindy/shadowsocks
3、https://github.com/madeye/shadowsocks-libev

以下的一键安装脚本来源于网络:秋水逸冰的博客!【博主在搬瓦工的MICRO64型号VPS运行安装通过了】

CentOS下shadowsocks-libev一键安装脚本

搬瓦工Micro-64型号配置,博主是在某宝上面淘到的。价格是每年的。

Self-managed
HDD: 1.5 GB
RAM: 64 MB
CPU: 1x Intel Xeon
BW: 100 GB/mo

本脚本适用环境:
系统支持:CentOS 6.x 32或64位
内存要求:≥128M
日期:2014年07月12日

关于本脚本:
一键安装 libev 版的 shadowsocks 最新版本。该版本的特点是内存占用小(600k左右),低 CPU 消耗,甚至可以安装在基于 OpenWRT 的路由器上。

默认配置:
服务器端口:8989
客户端端口:1080
密码:自己设定(如不设定,默认为teddysun.com)

客户端下载:
http://sourceforge.net/projects/shadowsocksgui/files/dist/

使用方法:
使用root用户登录,运行以下命令:

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev.sh
chmod +x shadowsocks-libev.sh
./shadowsocks-libev.sh 2>&1 | tee shadowsocks-libev.log

安装完成后,脚本提示如下:

Congratulations, shadowsocks-libev install completed!
Your Server IP:your_server_ip
Your Server Port:8989
Your Password:your_password
Your Local IP:127.0.0.1
Your Local Port:1080
Your Encryption Method:aes-256-cfb

Welcome to visit:http://teddysun.com/357.html
Enjoy it!

卸载方法:
使用 root 用户登录,运行以下命令:

./shadowsocks-libev.sh uninstall

其他事项:
安装完成后即已后台启动 shadowsocks ,运行:

ps -ef | grep ss-server | grep -v ps | grep -v grep

可以查看进程是否存在。
本脚本安装完成后,会将 shadowsocks-libev 加入开机自启动。

使用命令:
启动:/etc/init.d/shadowsocks start
停止:/etc/init.d/shadowsocks stop
重启:/etc/init.d/shadowsocks restart
查看状态:/etc/init.d/shadowsocks status

更多版本 shadowsocks 安装:
CentOS 下 shadowsocks-python 一键安装脚本
CentOS 下 shadowsocks-nodejs 一键安装脚本
Debian 下 shadowsocks-libev 一键安装脚本

特别说明:
1、已安装旧版本的 shadowsocks 需要升级的话,需下载本脚本的最新版,运行卸载命令./shadowsocks-libev.sh uninstall 后,再次执行本脚本即可安装最新版。
2、关于 CentOS 的默认 iptables 防火墙规则 icmp-host-prohibited ,如果安装之后发现已经启动 shadowsocks,本地客户端却不能连接上,请检查 iptables 是不是有如下的一条规则:

REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

运行命令:

/etc/init.d/iptables status

可以查看。如果有这条规则,则添加的 8989 端口需手动更改一下,放到这条规则的上一行。编辑 /etc/sysconfig/iptables 文件,将:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8989 -j ACCEPT

放在:

-A INPUT -j REJECT --reject-with icmp-host-prohibited

的前面。最终效果如下:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8989 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

编辑完后,重启 iptables 防火墙。命令:/etc/init.d/iptables restart

秋水逸冰博主的CentOS下shadowsocks-libev一键安装脚本内容:

#! /bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#===============================================================================================
#   System Required:  CentOS6.x (32bit/64bit)
#   Description:  Install Shadowsocks(libev) for CentOS
#   Author: Teddysun <i@teddysun.com>
#   Intro:  http://teddysun.com/357.html
#===============================================================================================

clear
echo "#############################################################"
echo "# Install Shadowsocks(libev) for CentOS6.x (32bit/64bit)"
echo "# Intro: http://teddysun.com/357.html"
echo "#"
echo "# Author: Teddysun <i@teddysun.com>"
echo "#"
echo "#############################################################"
echo ""

# Install Shadowsocks-libev
function install_shadowsocks_libev(){
    rootness
    disable_selinux
    pre_install
    download_files
    config_shadowsocks
    iptables_set
    install
}

# Make sure only root can run our script
function rootness(){
if [[ $EUID -ne 0 ]]; then
   echo "Error:This script must be run as root!" 1>&2
   exit 1
fi
}

# Disable selinux
function disable_selinux(){
if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    setenforce 0
fi
}

# Pre-installation settings
function pre_install(){
    #Set shadowsocks-libev config password
    echo "Please input password for shadowsocks-libev:"
    read -p "(Default password: teddysun.com):" shadowsockspwd
    if [ "$shadowsockspwd" = "" ]; then
        shadowsockspwd="teddysun.com"
    fi
    echo "password:$shadowsockspwd"
    echo "####################################"
    get_char(){
        SAVEDSTTY=`stty -g`
        stty -echo
        stty cbreak
        dd if=/dev/tty bs=1 count=1 2> /dev/null
        stty -raw
        stty echo
        stty $SAVEDSTTY
    }
    echo ""
    echo "Press any key to start...or Press Ctrl+C to cancel"
    char=`get_char`
    #Install necessary dependencies
    yum install -y wget unzip openssl-devel gcc swig python python-devel python-setuptools autoconf libtool libevent
    yum install -y automake make curl curl-devel zlib-devel openssl-devel perl perl-devel cpio expat-devel gettext-devel
    # Get IP address
    echo "Getting Public IP address, Please wait a moment..."
    IP=`curl -s checkip.dyndns.com | cut -d' ' -f 6  | cut -d'<' -f 1`
    if [ -z $IP ]; then
        IP=`curl -s ifconfig.me/ip`
    fi
    #Current folder
    cur_dir=`pwd`
    cd $cur_dir
}

# Download latest shadowsocks-libev
function download_files(){
    if [ -f shadowsocks-libev.zip ];then
        echo "shadowsocks-libev.zip [found]"
    else
        if ! wget --no-check-certificate https://github.com/madeye/shadowsocks-libev/archive/master.zip -O shadowsocks-libev.zip;then
            echo "Failed to download shadowsocks-libev.zip"
            exit 1
        fi
    fi
    unzip shadowsocks-libev.zip
    if [ $? -eq 0 ];then
        cd $cur_dir/shadowsocks-libev-master/
    else
        echo ""
        echo "Unzip shadowsocks-libev failed! Please visit http://teddysun.com/357.html and contact."
        exit 1
    fi
    # Download start script
    if ! wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev; then
        echo "Failed to download shadowsocks-libev start script!"
        exit 1
    fi
}

# Config shadowsocks
function config_shadowsocks(){
    if [ ! -d /etc/shadowsocks-libev ];then
        mkdir /etc/shadowsocks-libev
    fi
    cat > /etc/shadowsocks-libev/config.json<<-EOF
{
    "server":"${IP}",
    "server_port":8989,
    "local_address":"127.0.0.1",
    "local_port":1080,
    "password":"${shadowsockspwd}",
    "timeout":600,
    "method":"aes-256-cfb"
}
EOF
}

# iptables set
function iptables_set(){
    /sbin/service iptables status 1>/dev/null 2>&1
    if [ $? -eq 0 ]; then
        /etc/init.d/iptables status | grep '8989' | grep 'ACCEPT' >/dev/null 2>&1
        if [ $? -ne 0 ]; then
            /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8989 -j ACCEPT
            /etc/init.d/iptables save
            /etc/init.d/iptables restart
        fi
    fi
}


# Install 
function install(){
    # Build and Install shadowsocks-libev
    if [ -s /usr/local/bin/ss-server ];then
        echo "shadowsocks-libev has been installed!"
        exit 0
    else
        ./configure
        make && make install
        if [ $? -eq 0 ]; then
            mv $cur_dir/shadowsocks-libev-master/shadowsocks-libev /etc/init.d/shadowsocks
            chmod +x /etc/init.d/shadowsocks
            # Add run on system start up
            chkconfig --add shadowsocks
            chkconfig shadowsocks on
            # Start shadowsocks
            /etc/init.d/shadowsocks start
            if [ $? -eq 0 ]; then
                echo "Shadowsocks-libev start success!"
            else
                echo "Shadowsocks-libev start failure!"
            fi
        else
            echo ""
            echo "Shadowsocks-libev install failed! Please visit http://teddysun.com/357.html and contact."
            exit 1
        fi
    fi
    cd $cur_dir
    # Delete shadowsocks-libev floder
    rm -rf $cur_dir/shadowsocks-libev-master/
    # Delete shadowsocks-libev zip file
    rm -f shadowsocks-libev.zip
    clear
    echo ""
    echo "Congratulations, shadowsocks-libev install completed!"
    echo -e "Your Server IP: \033[41;37m ${IP} \033[0m"
    echo -e "Your Server Port: \033[41;37m 8989 \033[0m"
    echo -e "Your Password: \033[41;37m ${shadowsockspwd} \033[0m"
    echo -e "Your Local IP: \033[41;37m 127.0.0.1 \033[0m"
    echo -e "Your Local Port: \033[41;37m 1080 \033[0m"
    echo -e "Your Encryption Method: \033[41;37m aes-256-cfb \033[0m"
    echo ""
    echo "Welcome to visit:http://teddysun.com/357.html"
    echo "Enjoy it!"
    echo ""
}

# Uninstall Shadowsocks-libev
function uninstall_shadowsocks_libev(){
    printf "Are you sure uninstall shadowsocks_libev? (y/n) "
    printf "\n"
    read -p "(Default: n):" answer
    if [ -z $answer ]; then
        answer="n"
    fi
    if [ "$answer" = "y" ]; then
        ps -ef | grep -v grep | grep -v ps | grep -i "ss-server" > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            /etc/init.d/shadowsocks stop
        fi
        chkconfig --del shadowsocks
        # delete config file
        rm -rf /etc/shadowsocks-libev
        # delete shadowsocks
        rm -f /usr/local/bin/ss-local
        rm -f /usr/local/bin/ss-tunnel
        rm -f /usr/local/bin/ss-server
        rm -f /usr/local/bin/ss-redir
        rm -f /usr/local/share/man/man8/shadowsocks.8
        rm -f /etc/init.d/shadowsocks
        echo "Shadowsocks-libev uninstall success!"
    else
        echo "uninstall cancelled, Nothing to do"
    fi
}

# Initialization step
action=$1
[  -z $1 ] && action=install
case "$action" in
install)
    install_shadowsocks_libev
    ;;
uninstall)
    uninstall_shadowsocks_libev
    ;;
*)
    echo "Arguments error! [${action} ]"
    echo "Usage: `basename $0` {install|uninstall}"
    ;;
esac

Shadowsocks一键安装包(Debian/Ubuntu适用)脚本内容[脚本内容来源于网络]:

#!/bin/bash

if [ $(id -u) != "0" ]; then
    echo "Error: You must be root to run this script"
    exit 1
fi

ssport=443
echo -e "Shadowsocks server port(Default 443)>>\c"
read ssport
echo "===========shadowsocks port is $ssport============"

sspasswd=5y2n
echo -e "Shadowsocks server password(Default 5y2d)>>\c"
read sspasswd
echo "=========shadowsocks password is $sspasswd========"

ssmethod=rc4-md5
echo -e "Shadowsocks server encrypte method"
echo -e "Allow: rc4-md5(Default),aes-128,aes-256>>\c"
read ssmethod
echo "=====shadowsocks encrypte method is $ssmethod====="

apt-get -y update
apt-get -y install git &&
mkdir /tmp/shadowsocks &&
cd /tmp/shadowsocks &&
git clone https://github.com/madeye/shadowsocks-libev.git
cd shadowsocks-libev
apt-get -y install build-essential autoconf libtool libssl-dev gawk debhelper
dpkg-buildpackage
cd ..
dpkg -i shadowsocks*.deb
cd ../.. && rm -rf shadowsocks

sed -i 's/"server":"\<.*\>"/"server":"0.0.0.0"/g' /etc/shadowsocks/config.json
var1=\"server_port\":\\\<.*\\\>
var2=\"server_port\":$ssport
sed -i "s/$var1/$var2/g" /etc/shadowsocks/config.json
var1=\"password\":\"\\\<.*\\\>\"
var2=\"password\":\"$sspasswd\"
sed -i "s/$var1/$var2/g" /etc/shadowsocks/config.json
var1=\"method\":\"\\\<.*\\\>\"
var2=\"method\":\"$ssmethod\"
sed -i "s/$var1/$var2/g" /etc/shadowsocks/config.json

service shadowsocks restart &&

echo "==========================================================="
echo "="
echo "=   Your shadowsocks server install complete! "
echo "=   Congfig file: /etc/shadowsocks/config.json"
echo "=   Control: service shadowsocks {start|stop|restart}"
echo "="
echo "==========================================================="

一直苦于在ubuntu系统下大文件或者是含有N多文件的小文件夹的ftp上传和下载,使用lftp可以轻轻松松搞定!

测试开始:

基于Windows的Serv-U FTP服务端:

IP:192.168.1.11 用户名:piaoyun
基于Fedora的客户端。

一、上传文件夹,向192.168.1.11服务端上传文件夹piaoyuncc

#lftp 192.168.1.11
lftp 192.168.1.11:~> user piaoyun
口令:
lftp piaoyun@192.168.1.11:~> mirror -R /home/piaoyun/piaoyuncc

Total: 11 directory, 12 files, 0 symlinks
New: 12 files, 0 symlinks
1348684 bytes transferred

lftp piaoyun@192.168.1.11:~>

二、下载远程服务端的文件夹

lftp piaoyun@192.168.1.11:~> mirror download piaoyun
Total: 11 directory, 12 files, 0 symlinks
New: 21 files, 0 symlinks
1348684 bytes transferred

lftp piaoyun@192.168.1.11:~>

命令的基本用法是:
上传整个文件夹:mirror -R 本地文件夹
下载整个文件夹:mirror 远程文件夹 本地文件夹

博客迁移之后,没有注意新服务器的系统时间,今天突然感觉到不对,于是调了一下:
一共两步可以实现:
(1)date -s
(2)clock -w
第一步的意思是设置时间,设置完了可以用date命令查看对不对…注意是月日时分年
第二步的意思是写入主板的rtc芯片..
第一部分设置系统时间:

下面介绍一下我参考的文档和一些命令:
Linux下使用date命令来查看和设置时间是相当方便的,本文就详细介绍date的用法。

该命令的一般格式为:

date [选项] 显示时间格式(设置时以+开头,后面接格式)

date 设置时间格式命令中各选项的含义分别为:

-d datestr, --date datestr 显示由datestr描述的日期
-s datestr, --set datestr 设置datestr 描述的日期
-u, --universal 显示或设置通用时间

时间域列表:

% H 小时(00..23)
% I 小时(01..12)
% k 小时(0..23)
% l 小时(1..12)
% M 分(00..59)
% p 显示出AM或PM
% r 时间(hh:mm:ss AM或PM),12小时
% s 从1970年1月1日00:00:00到目前经历的秒数
% S 秒(00..59)
% T 时间(24小时制)(hh:mm:ss)
% X 显示时间的格式(%H:%M:%S)
% Z 时区 日期域
% a 星期几的简称( Sun..Sat)
% A 星期几的全称( Sunday..Saturday)
% b 月的简称(Jan..Dec)
% B 月的全称(January..December)
% c 日期和时间( Mon Nov 8 14:12:46 CST 1999)
% d 一个月的第几天(01..31)
% D 日期(mm/dd/yy)
% h 和%b选项相同
% j 一年的第几天(001..366)
% m 月(01..12)
% w 一个星期的第几天(0代表星期天)
% W 一年的第几个星期(00..53,星期一为第一天)
% x 显示日期的格式(mm/dd/yy)
% y 年的最后两个数字( 1999则是99)
% Y 年(例如:1970,1996等)

注意:只有超级用户才有权限使用date命令设置时间,一般用户只能使用date命令显示时间。

一些常用使用例子:

一、 显示日期和时间

在字符界面下,除了可以显示年月之外,用户还可以使用“date”命令的功能是显示和设置系统日期和时间。需要特别说明的是,只有超级用户才能用“date”命令设置时间,一般用户只能用“date”命令显示时间。

1. 用指定的格式显示时间,命令如下:

[root@piaoyun ~]$ date '+The date of today is:%x ,it is:%X '
#The date of today is:06/18/2010 ,it is:12:27:33 PM

其中% x 显示日期的格式(mm/dd/yy),% X 显示时间的格式(%H:%M:%S)。
其它参数可查看上面的date时间域的设置。

2. 设置日期和时间, -s是设置日期的参数。

1. 设置时间为2010年06月17日,命令如下:

[root@piaoyun ~]$ date -s 06/17/2010
#Thu Jun 17 00:00:00 CST 2010

2. 设置时间为12点07分33秒,命令如下:

[root@piaoyun ~]$ date -s 12:07:33
#Thu Jun 17 12:07:33 CST 2010

另外,“date”命令还有许多有用的参数,能够帮助用户随心所欲地设定和显示时间,例如%H显示小时(00..23)、%M显示分(00..59)、%p显示出AM或PM、%S显示秒(00..59)和%Z显示时区等。

注意,上面说的是系统时间,是linux由操作系统维护的。

3. 如果要确保修改生效可以执行如下命令:

[root@piaoyun ~]$ clock -w

二、设置主板CMOS时间

在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。
为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。
由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。

1.使用 hwclock或clock命令查看和设置硬件时钟
查看硬件时钟的操作:

[root@piaoyun ~]$ hwclock --show

[root@piaoyun ~]$ clock --show #### 我的系统Centos5.3,使用的此命令。
Thu 17 Jun 2010 01:31:58 PM CST -0.409750 seconds

设置硬件时钟的操作:

[root@piaoyun ~]$ hwclock --set --date="06/17/2010 13:26:00"

或者

[root@piaoyun ~]$ clock --set --date="06/17/2010 13:26:00" #### 我的系统Centos5.3,使用的此命令。

通用的设置格式:hwclock/clock –set –date=“月/日/年 时:分:秒”。

2.同步系统时钟和硬件时钟

Linux系统(笔者使用的是Red Hat 8.0,其它系统没有做过实验)默认重启后,硬件时钟和系统时钟同步。如果不大方便重新启动的话(服务器通常很少重启),使用clock或hwclock 命令来同步系统时钟和硬件时钟。

硬件时钟与系统时钟同步:

[root@piaoyun ~]$ hwclock --hctosys

或者

[root@piaoyun ~]$ clock --hctosys #### 我的系统Centos5.3,使用的此命令。

上面命令中,–hctosys表示Hardware Clock to SYStem clock。

系统时钟和硬件时钟同步:

[root@piaoyun ~]$ hwclock --systohc

或者

[root@piaoyun ~]$ clock --systohc #### 我的系统Centos5.3,使用的此命令。

### 补充 ##############################
设置服务器时区:

## check CST Timezone
[root@piaoyun ~]$date
[root@piaoyun ~]$#Fri Nov 4 07:15:00 CST 2011

## 开始设置 UTC Timezone
[root@piaoyun ~]$cd /etc/
[root@piaoyun ~]$mv localtime localtime.bak
[root@piaoyun ~]$ln -s /usr/share/zoneinfo/UTC /etc/localtime

##check
[root@piaoyun ~]$date
[root@piaoyun ~]$#Fri, 04 Nov 2011 07:27:26 +0000

1.部分使用例子

[root@piaoyun ~]# date -d today +"%Y-%m-%d"
2008-05-07
[root@piaoyun ~]# date -d today +"%Y_%-m_%-d"
2008_5_7
[root@piaoyun ~]# date -d today +"%Y-%m-%d %T"
2008-05-07 14:55:19
[root@piaoyun ~]# date -d today +"%Y-%m-%d %H:%M"
2008-05-07 14:55
[root@piaoyun ~]# date -d today +"%Y-%m-%d %H:%M:%S"
2008-05-07 14:55:57

date命令本身提供了日期的加减运算

非常方便。例如:得到昨天的时间
date +%Y%m%d --date="-1 day"

2.在设定时间方面

date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
date -s “01:01:01 20080523″ //这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
date -s “20080523 01:01:01″ //这样可以设置全部时间

3.加减

date +%Y%m%d //显示前天年月日
date +%Y%m%d --date="+1 day" //显示前一天的日期
date +%Y%m%d --date="-1 day" //显示后一天的日期
date +%Y%m%d --date="-1 month" //显示上一月的日期
date +%Y%m%d --date="+1 month" //显示下一月的日期
date +%Y%m%d --date="-1 year" //显示前一年的日期
date +%Y%m%d --date="+1 year" //显示下一年的日期

简介:

PureFTPd是免费、安全、符合国际标准的FTP 服务器程序。它并没有那些无用而又花哨的功能,而是将重点放到了提高效率和易用性上,独特的实用功能为个人用户和托管服务提供商提供了一个新的选择。

pure-ftpd

下载:

从官方网站下载最新的稳定版本http://www.pureftpd.org/ 其最新版本是1.0.36
下载地址为:http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.36.tar.bz2
系统环境:
CentOS 6.2
PureFTPd 1.0.29

编译安装:

# tar -xvjf pure-ftpd-1.0.29.tar.bz2
# cd pure-ftpd-1.0.29
# ./configure --help # 查看编译选项

PureFTPd有很多的编译配置选项,下面就列出部分主要的配置

--prefix=PREFIX
--with-sysquotas 使用系统磁盘配额 (非虚拟)
--with-altlog 支持选择日志格式(类似Apache)
--with-puredb 支持虚拟用户 (FTP登陆用户而非系统用户)
--with-extauth 支持扩展验证模块
--with-pam 启用PAM验证支持 (默认=禁用)
--with-cookie 启用Cookie支持 (-F 选项)
--with-throttling 支持带宽控制 (默认=禁用)
--with-ratios 支持 上传/下载 速度控制
--with-quotas 支持 .ftpquota 文件(指定磁盘配额使用)
--with-ftpwho 支持pure-ftpwho(查看在线用户的程序)
--with-largefile 支持大于2G的文件
--with-welcomemsg 支持 welcome.msg 向后兼容(已经过时)
--with-uploadscript 上传后允许执行外部脚本 (测试阶段)
--with-virtualhosts 在不同的IP地址提供虚拟服务器功能
--with-virtualchroot 允许在chroot的环境下通过符合连接跳转到外部
--with-diraliases 启用目录别名
--with-nonroot 普通模式或者说是限制模式. 如果你在该服务器上没有root权限
那只有启用该项
--with-peruserlimits 支持每个用户的并发限制
--with-language= 语言支持< english | traditional-chinese | simplified-chinese>
--with-ldap 在LDAP目录中提供用户数据库
--with-mysql 在MySQL数据库中存放用户数据
--with-pgsql 在PostgreSQL数据库中存放用户数据
--with-privsep 启用权限分离
--with-tls 启用 SSL/TLS 支持 (测试阶段, 需要安装 OpenSSL)
--with-certfile= 证书文件 (默认目录: /etc/ssl/private/pure-ftpd.pem)
--with-rfc2640 启用兼容 RFC 2640 支持(UTF-8 编码的文件名,测试阶段,需要安装iconv)
--with-everything 启用大多数选项,编译完功能版本的服务器端。

为了方便起见,我在这里使用了几个基本的编译命令来配置编译一个全功能版本的程序

# ./configure --prefix=/usr/local/pure-ftpd/ --with-language=simplified-chinese --with-everything

注意:如果要指定安装路径,那么路径最好是/usr/local/pure-ftpd或/usr/local/pureftpd/ 或者干脆就不指定。如果不指定目录的话默认是将程序的文件安装到/usr/local下的相应目录下。我这里指定目录是为了便于管理。至于为什么安装目录也有如此的讲究,在下面再做说明。

# make && make check && make install
# mkdir /usr/local/pure-ftpd/etc
# cp configuration-file/pure-ftpd.conf /usr/local/pure-ftpd/etc/ # 配置文件拷贝到/etc目录下
# cp configuration-file/pure-config.pl /usr/local/pure-ftpd/sbin/
//似乎make install忘记了将这个文件复制到相应的目录了,我们只有手动自己做了
# chmod 755 /usr/local/pure-ftpd/sbin/pure-config.pl # 设置相应的权限

系统集成:

这里所说的系统集成就是制定系统变量,使系统可以找到我们刚刚安装的程序,最简单的方法就是将一些可执行的程序,man文件在系统指定的path中建立符号链接就可以了。当然我们也可以修改系统变量,如PATH变量,man page的配置文件等等。但是我还是习惯在相应的目录建立符合连接。

# cd /usr/local/bin/
# ln -s /usr/local/pure-ftpd/bin/* .
# ln -s /usr/local/pure-ftpd/sbin/* /usr/local/sbin/
# ln -s /usr/local/pure-ftpd/man/man8/* /usr/local/share/man/man8/

PureFTPd配置:

PureFTPd 程序的一大特点就是官方推荐使用命令行参数的形式来启动服务,而非我们经常使用的配置文件加命令的形式来启动服务。不过PureFTPd也是支持读取配置文件的。只不过要用到一个Python编写的脚本,利用这个脚本来将配置文件中的值转换为命令行参数!

(1)创建一个匿名访问的FTP服务器

匿名用户访问的FTP服务器比较好配置,只需要做一下与匿名用户相关的配置即可。如果只开启匿名访问的ftp服务器那么其ftp目录就是系统中ftp用户的home目录。可以使用finger命令来查看:

# finger ftp
Login: ftp Name: FTP User
Directory: /var/ftp Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.

当然这个目录我也可以通过修改/etc/passwd文件来修改。但要记住,这个目录只针对匿名用户

修改匿名用户上传/下载目录,以及相关的权限

# usermod -d /home/ftp
# mkdir /home/ftp;chown ftp.ftp /home/ftp

修改相关配置:

# vi /etc/pure-ftpd.conf
ChrootEveryone yes # 启用chroot
BrokenClientsCompatibility yes # 兼容不同客户端
Daemonize yes # 后台运行
MaxClientsPerIP 20 # 每个ip最大连接数
VerboseLog yes # 记录日志
DisplayDotFiles no # 显示隐藏文件
AnonymousOnly yes # 只允许匿名用户访问
NoAnonymous no # 运行匿名用户连接
SyslogFacility none # 不将日志在syslog日志中显示
DontResolve yes # 不进行客户端DNS解析
MaxIdleTime 15 # 最大空闲时间
LimitRecursion 2000 8 # 浏览限制,文件2000,目录8层
AnonymousCanCreateDirs yes # 匿名用户可以创建目录
MaxLoad 4 # 超出负载后禁止下载
PassivePortRange 45000 50000 # 被动模式端口范围
AnonymousRatio 1 10 # 匿名用户上传/下载比率
AntiWarez yes # 禁止下载匿名用户上传但未经验证的文件
AnonymousBandwidth 200 # 匿名用户带宽限制(KB)
Umask 133:022 # 创建文件/目录默认掩码
MinUID 100 # 最大UID限制
AllowUserFXP no # 仅运行用户进行FXP传输
AllowAnonymousFXP no # 对匿名用户和非匿名用户允许进行匿名 FXP 传输
ProhibitDotFilesWrite no # 不能删除/写入隐藏文件
ProhibitDotFilesRead no # 禁止读取隐藏文件
AutoRename yes # 有同名文件时自动重新命名
AnonymousCantUpload no # 不允许匿名用户上传文件
AltLog clf:/var/log/pureftpd.log # clf格式日志文件位置
MaxDiskUsage 99 # 当磁盘使用量打到99%时禁止上传
CustomerProof yes # 防止命令误操作

配置一个匿名访问的服务器,上面的参数就够用了。可以根据自己的要求做一些具有针对性

的设置。详细的参数说明参见附录

启动pureFTPd服务

# pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf

屏幕上会显示下面的信息

Running: /usr/local/pure-ftpd/sbin/pure-ftpd -A -b -B -C20 -d -e -fnone -H -I15 -L2000:8 -M -m4 - p45000:50000 -q1:10 -s -t200 -U133:022 -u100 -r -Oclf:/var/log/pureftpd.log -k99 -Z

(2)创建一个虚拟用户验证的FTP服务器

配置 FTP登录账户
pure-ftp默认采用Linux的root用户。虚拟用户则能够更好的控制访问权限。虚拟用户是和Linux系统用户关联的独立的账户系统。所以在创建虚拟用户之前最好先创建一个系统的账户和组。
创建一个ftpgroup组和ftpuser用户

# groupadd ftpgroup
# useradd -g ftpgroup -d /dev/null -s /etc ftpuser

接下来所有与虚拟用户相关的操作都可以用‘pure-pw’命令来完成。当然你也可以手动的来编辑相应的文件。

下面为虚拟用户存储文件的详细格式,一行一个用户

<account>:<password>:<uid>:<gid>:<gecos>:<home directory>:<upload bandwidth>
:<download bandwidth>:<upload ratio>:<download ratio>:<max numberof connections>
:<files quota>:<size quota>:<authorized local IPs>:<refusedlocal IPs>
:<authorized client IPs>:<refused client IPs>:<timerestrictions>

密码字段是加密后的密码,加密方式与系统的用户密码加密方式相同,用户可以执行setup命令配置。
除了account, password, uid, gid, home directory字段外,其他的字段可以为空

使用命令添加一个虚拟用户
pure-pw命令的格式

pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
-D/-d <home directory> [-c <gecos>]
[-t <download bandwidth>] [-T <upload bandwidth>]
[-n <max number of files>] [-N <max Mbytes>]
[-q <upload ratio>] [-Q <download ratio>]
[-r <allow client host>[/<mask>][,...]
[-R <deny client host>[/<mask>][,...]
[-i <allow local host>[/<mask>][,...]
[-I <deny local host>[/<mask>][,...]
[-y <max number of concurrent sessions>]
[-z <hhmm>-<hhmm>] [-m]

例如:

pure-pw useradd joe -u ftpuser -d /home/ftpusers/joe

回车后提示输入两次密码:
使用 -d 参数指定一个用户的home目录后,该用户就被固定到这个目录了,其不能切换到上级目录如果要想让用户可以访问到别的目录,那么使用-D参数来指定hone目录。
如果pureFTPd的配置文件中指定了CreateHomeDir yes 的话,/home/ftpusers/joe 目录是没有必要手动创建的。当用户首次登录时如果目录不存在程序会自动创建相应的目录。
使用-z参数可以指定用户只能在一天中的某个时间段可以登陆ftp服务器。例如 -z 0900-1800那么joe只能在早上9点和下午6点这个时间段登陆。注意:如果设置登陆时间的用户已经通过验证登陆到ftp服务器上了,那么所做的登陆时间限制只能在他下次登陆验证的时候才能生效。
-r 与 -R 参数是约束用户从哪些IP登陆的。可以使用IP/mask的形式,如-r 192.168.1.0/24多个段用逗号隔开,如:-r 192.168.1.0/24,10.1.0.0/16,127.0.0.1/32 。单独的IP:-r 192.168.1.4,10.1.1.5主机名:-r bla.bla.net,yopcitron.com。以及一些相兼容的格式。
-y 参数是限制同一时刻一个用户最多能发起多少个会话(sessions)。''或0 代表无限制。该选项可以降低系统负载。效果同配置文件中的 MaxClientsPerIP
ok,现在用户 "joe" 已经创建成功了默认的虚拟用户列表文件存储在 安装目录的/etc/目录下,可以使用-f参数指定文件的存储路径
查看一下文件内容

# cat /usr/local/pure-ftpd/etc/pureftpd.passwd
joe:$1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/:501:501::/home/ftpusers/joe/./::::::::::::

密码字段是经过加密的。

更改用户信息:
虚拟用户创建之后,你也可以通过pure-pw命令来修改其相关的信息,如限制下载
带宽、磁盘配额、用户全名、下载上传率等等
例如:我要修改用户joe的最大文件数为1000个,大小为10MB,命令如下:

# pure-pw usermod joe -n 1000 -N 10

查看一下虚拟用户列表文件:

# cat /usr/local/pure-ftpd/etc/pureftpd.passwd
joe:$1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/:501:501::/home/ftpusers/joe/./::::::1000:10485760:::::

重置用户属性:

要禁用文件数配额,执行 pure-pw usermod -n ''
要禁用文件大小配额,执行 pure-pw usermod -N ''
要禁用上传/下载比率,执行 pure-pw usermod -q '' -Q ''
要禁用下载带宽限制,执行 pure-pw usermod -t ''
要禁止上传带宽限制,执行 pure-pw usermod -T ''
要禁止IP地址过滤,使用 pure-pw usermod <-i,-I,-r or -R> ''
要禁止登陆时间限制,执行 pure-pw usermod -z ''
要禁止最大并发数控制,执行 pure-pw usermod -y ''

删除用户:

使用pure-pw userdel 命令可以删除一个已经存在的用户
pure-pw userdel <login> [-f <passwd file>] [-m]
如:pure-pw userdel joe
用户home目录中的文件不会被删除,需要手动删除

更改密码:
更改用户密码的命令
# pure-pw passwd <login> [-f <passwd file>] [-m]

利用pure-pw命令查看用户信息

# pure-pw show joe
Login : joe
Password : $1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/
UID : 501 (ftpuser)
GID : 501 (ftpgroup)
Directory : /home/ftpusers/joe/./
Full name :
Download bandwidth : 0 Kb (unlimited)
Upload bandwidth : 0 Kb (unlimited)
Max files : 0 (enabled)
Max size : 10 Mb (enabled)
Ratio : 0:0 (unlimited:unlimited)
Allowed local IPs :
Denied local IPs :
Allowed client IPs :
Denied client IPs :
Time restrictions : 0000-0000 (unlimited)
Max sim sessions : 0 (unlimited)

应用更改:重要:你可以通过上面提到的命令或者手动的来添加/删除用户,修改用户相关限制属性等等,但是这些改动都是针对虚拟用户列表文件的(pureftpd.passwd)。pureFTPd服务器程序是不认识这个文件的。要想让ftp server能够识别的我们所做的更改,必须要通过pure-pw mkdb 命令生成PureDB格式的文件,实际上PureDB数据文件就是从pureftpd.passwd文件转换过来的,为了ftp server可以更快的检索到指定的用户。

例如:
# pure-pw mkdb -> 当使用pure-pw 生成虚拟用户之后一定要使用pure-pw mkdb命令生成数据库文件,否则pure-ftp启动之后也无法验证虚拟用户
默认情况下会在软件安装目录/etc目录下生成pureftpd.pdb文件。
如:/usr/local/pure-ftpd/etc/pureftpd.pdb

或者直接指定生成的pdb文件和参照的虚拟用户列表文件
如:pure-pw mkdb /etc/accounts/myaccounts.pdb -f /etc/accounts/myaccounts.txt

当更改了虚拟用户列表文件之后都要重新生成pdb数据库文件。但不必要重新启动pureFTPd服务。可以使用-m参数来将更改立即应用到pdb数据库文件中,如:
# pure-pw passwd joe -m
当输入完两次新密码之后,密码的更改就同时应用到列表文件和pdb数据库文件中了。是不是很方便!

启用虚拟用户验证登陆:
1、编译ftp服务器端的时候一定要加入--with-puredb 选项,或者干脆--with-everything
2、配置文件中加入PureDB /etc/pureftpd.pdb 或者启动服务器程序的时候加入参数
-l puredb/usr/local/pure-ftpd/etc/pureftpd.pdb
3、一定要注意自己的pdb文件的位置在哪

配置文件 vi /usr/local/pure-ftpd/etc/pure-ftpd.conf

ChrootEveryone yes # 启用chroot
BrokenClientsCompatibility yes # 兼容不同客户端
Daemonize yes # 后台运行
MaxClientsPerIP 20 # 每个ip最大连接数
VerboseLog yes # 记录日志
DisplayDotFiles no # 显示隐藏文件
AnonymousOnly no # 只允许匿名用户访问
NoAnonymous yes # 不允许匿名用户连接
SyslogFacility none # 不将日志在syslog日志中显示
DontResolve yes # 不进行客户端DNS解析
MaxIdleTime 15 # 最大空闲时间
LimitRecursion 2000 8 # 浏览限制,文件2000,目录8层
AnonymousCanCreateDirs no # 匿名用户可以创建目录
MaxLoad 4 # 超出负载后禁止下载
PassivePortRange 45000 50000 # 被动模式端口范围
#AnonymousRatio 1 10 # 匿名用户上传/下载比率
UserRatio 1 10 # 所有用户上传/下载比率
AntiWarez yes # 禁止下载匿名用户上传但未经验证的文件
#AnonymousBandwidth 200 # 匿名用户带宽限制(KB)
UserBandwidth 8 # 所有用户最大带宽(KB)
Umask 133:022 # 创建文件/目录默认掩码
MinUID 100 # 最大UID限制
AllowUserFXP no # 仅运行用户进行FXP传输
AllowAnonymousFXP no # 对匿名用户和非匿名用户允许进行匿名 FXP 传输
ProhibitDotFilesWrite no # 不能删除/写入隐藏文件
ProhibitDotFilesRead no # 禁止读取隐藏文件
AutoRename yes # 有同名文件时自动重新命名
AnonymousCantUpload yes # 不允许匿名用户上传文件
AltLog clf:/var/log/pureftpd.log # clf格式日志文件位置
PureDB /usr/local/pure-ftpd/etc/pureftpd.pdb # 用户数据库文件
MaxDiskUsage 99 # 当磁盘使用量打到99%时禁止上传
CreateHomeDir yes # 如果虚拟用户的目录不存在则自动创建
CustomerProof yes # 防止命令误操作

启动pureFTPd服务:

# pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf

若要pureFTPd随系统启动,将命令加入到 /etc/rc.local文件中,如下

# echo "pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf " >> /etc/rc.local

附录一:pure-config.pl 文件

#! /usr/bin/perl

# (C) 2001-2006 Aristotle Pagaltzis
# derived from code (C) 2001-2002 Frank Denis and Matthias Andree

use strict;

my ($conffile, @flg) = @ARGV;

my $PUREFTPD;
-x && ($PUREFTPD=$_, last) for qw(
${exec_prefix}/sbin/pure-ftpd
/usr/local/pure-ftpd/sbin/pure-ftpd
/usr/local/pureftpd/sbin/pure-ftpd
/usr/local/sbin/pure-ftpd
/usr/sbin/pure-ftpd
);

my %simple_switch_for = (
IPV4Only => "-4",
IPV6Only => "-6",
ChrootEveryone => "-A",
BrokenClientsCompatibility => "-b",
Daemonize => "-B",
VerboseLog => "-d",
DisplayDotFiles => "-D",
AnonymousOnly => "-e",
NoAnonymous => "-E",
DontResolve => "-H",
AnonymousCanCreateDirs => "-M",
NATmode => "-N",
CallUploadScript => "-o",
AntiWarez => "-s",
AllowUserFXP => "-w",
AllowAnonymousFXP => "-W",
ProhibitDotFilesWrite => "-x",
ProhibitDotFilesRead => "-X",
AllowDotFiles => "-z",
AutoRename => "-r",
AnonymousCantUpload => "-i",
LogPID => "-1",
NoChmod => "-R",
KeepAllFiles => "-K",
CreateHomeDir => "-j",
NoRename => "-G",
CustomerProof => "-Z",
NoTruncate => "-0",
);

my %string_switch_for = (
FileSystemCharset => "-8",
ClientCharset => "-9",
SyslogFacility => "-f",
FortunesFile => "-F",
ForcePassiveIP => "-P",
Bind => "-S",
AnonymousBandwidth => "-t",
UserBandwidth => "-T",
TrustedIP => "-V",
AltLog => "-O",
PIDFile => "-g",
);

my %numeric_switch_for = (
MaxIdleTime => "-I",
MaxDiskUsage => "-k",
TrustedGID => "-a",
MaxClientsNumber => "-c",
MaxClientsPerIP => "-C",
MaxLoad => "-m",
MinUID => "-u",
TLS => "-Y",
);

my %numpairb_switch_for = (
LimitRecursion => "-L",
PassivePortRange => "-p",
AnonymousRatio => "-q",
UserRatio => "-Q",
);

my %numpairc_switch_for = (
Umask => "-U",
Quota => "-n",
PerUserLimits => "-y",
);

my %auth_method_for = (
LDAPConfigFile => "ldap",
MySQLConfigFile => "mysql",
PGSQLConfigFile => "pgsql",
PureDB => "puredb",
ExtAuth => "extauth",
);

my $simple_switch = qr/(@{[join "|", keys %simple_switch_for ]})\s+yes/i;
my $string_switch = qr/(@{[join "|", keys %string_switch_for ]})\s+(\S+)/i;
my $numeric_switch = qr/(@{[join "|", keys %numeric_switch_for ]})\s+(\d+)/i;
my $numpairb_switch = qr/(@{[join "|", keys %numpairb_switch_for ]})\s+(\d+)\s+(\d+)/i;
my $numpairc_switch = qr/(@{[join "|", keys %numpairc_switch_for ]})\s+(\d+):(\d+)/i;
my $auth_method = qr/(@{[join "|", keys %auth_method_for ]})\s+(\S+)/i;

die "Usage: pure-config.pl [extra options]\n"
unless defined $conffile;

open CONF, "< $conffile" or die "Can't open $conffile: $!\n";

!/^\s*(?:$|#)/ and (chomp, push @flg,
/$simple_switch/i ? ($simple_switch_for{$1}) :
/$string_switch/i ? ($string_switch_for{$1} . $2) :
/$numeric_switch/i ? ($numeric_switch_for{$1} . $2) :
/$numpairb_switch/i ? ($numpairb_switch_for{$1} . "$2:$3") :
/$numpairc_switch/i ? ($numpairc_switch_for{$1} . "$2:$3") :
/$auth_method/i ? ("-l" . "$auth_method_for{$1}:$2") :
/UnixAuthentication\s+yes/i ? ("-l" . "unix") :
/PAMAuthentication\s+yes/i ? ("-l" . "pam") :
()
) while ;

close CONF;

print "Running: $PUREFTPD ", join(" ", @flg), "\n";
exec { $PUREFTPD } ($PUREFTPD, @flg) or die "cannot exec $PUREFTPD: $!";

附录二:pure-ftpd.conf 文件

# vi sample pure-ftpd.conf
# 将每个用户限制在自己的home目录下
ChrootEveryone yes

# 兼容ie等比较非正规化的ftp客户端。默认:no
BrokenClientsCompatibility yes

# 最大用户连接数。默认:50
MaxClientsNumber 2000

# 后台模式(守护进程模式)
Daemonize yes

# 同一个IP允许连接数(可以防止迅雷、快车等程序疯狂开线程)。默认:8
MaxClientsPerIP 20

# 如果要记录所有的客户端命令,请设置为‘yes’该选项可以将日志同步复制到日志服务器。默认:no
VerboseLog yes

# 显示隐藏文件。默认:yes
DisplayDotFiles yes

# 不允许验证用户。只作为匿名ftp服务器。默认:no
AnonymousOnly no

# 不允许匿名用户连接。只允许验证用户连接。默认:no
NoAnonymous no

# 该选项是说将何种类型的日志同步写入到syslog中。
# 类型包括(auth, authpriv, daemon, ftp, security, user, local*)
# 默认是"ftp"如果不想将ftp的日志显示在/var/log/message中。则禁用即可: "none"
SyslogFacility none

# 显示 cookies
# FortunesFile /usr/share/fortune/zippy

# 在日志文件中不解析主机名。日志越详细所需要的带宽也就越大。如果服务器的
# DNS解析有问题或者服务器的负载过大,建议将该选项配置yes。默认为:yes
DontResolve yes

# 最大空闲时间。单位:分钟 (默认 = 15 分钟)
MaxIdleTime 15

# LDAP 配置文件
# LDAPConfigFile /etc/pureftpd-ldap.conf

# MySQL 配置文件 (详情见 README.MySQL)
# MySQLConfigFile /etc/pureftpd-mysql.conf

# Postgres 配置文件 (详情见 README.PGSQL)
# PGSQLConfigFile /etc/pureftpd-pgsql.conf

# PureDB 用户数据库 (详情见 README.Virtual-Users)
# PureDB /etc/pureftpd.pdb

# pure-authd 的 socket 路径 (详见 README.Authentication-Modules)
# ExtAuth /var/run/ftpd.sock

# 如果要使用PAM验证,取消下面行的注释
# PAMAuthentication yes

# 如果要使用/etc/passwd 文件验证。取消下面行的注释
# UnixAuthentication yes

# 注意:LDAPConfigFile, MySQLConfigFile, PAMAuthentication 与 UnixAuthentication
# 只能启用一个,但他们可以联合使用。例如:你启用了 MySQLConfigFile 之后又启用了
# UnixAuthentication那么同一时刻只有SQL server 可用。如果SQL authentication 失败,
# 例如用户没有找到,那么系统会重试其他的方式来验证,这时候它就会找/etc/passwd 和
# /etc/shadow文件. 如果通过 SQL 验证的结果是因为密码错误,那么就不会在进行下面的
# 验证了。由此得知,验证方法可以写多个,但同一个时刻只有一个工作,且当验证时找不
# 到信息时才会进行下一个验证方式。但当验证错误时就终止验证了。

# 'ls' 递归限制。第一个参数是最大可显示的文件数。第二个参数是子文件夹深度
LimitRecursion 2000 8

# 匿名用户是否可以创建新文件夹
AnonymousCanCreateDirs no

# 如果系统负载超过下面所给的数字,那么匿名用户将无法下载
MaxLoad 4

# 在被动连接模式下为其分配的端口范围。便于制定防火墙配置。
PassivePortRange 45000 50000

# 强制某个IP地址工作在 PASV/EPSV/SPSV 模式. - for NAT.
# ForcePassiveIP 192.168.0.1

# 匿名用户上传/下载比率
# AnonymousRatio 1 10

# 所有用户 上传/下载 比率。该选项可以取代上面的选项
# UserRatio 1 10

# 禁止下载所有者为‘ftp’的文件。例如:那些匿名用户上传后未被本地管理员验证的文件。
AntiWarez yes

# 用来监听的IP地址和端口 (默认=所有 IP 和 21 端口).
# Bind 127.0.0.1,21

# 匿名用户最大带宽限制,单位 KB/s
AnonymousBandwidth 200

# 所有用户的最大带宽限制(包括匿名)单位 KB/s
# 没有必要同时开启 AnonymousBandwidth 和 UserBandwidth
# UserBandwidth 8

# 新建文件默认掩码. <文件掩码>:<目录掩码>
# 为了安全起见可以设置为 177:077
Umask 133:022

# 验证登录用户的最小UID
MinUID 100

# 仅允许认证用户进行 FXP 传输
AllowUserFXP no

# 对匿名用户和非匿名用户允许进行匿名 FXP 传输
AllowAnonymousFXP no

# 用户不能删除/写入隐藏文件,即便是文件的拥有者也不允许。
# 如果 TrustedGID 选项为 enabled 文件所属组用户可以访问隐藏文件
ProhibitDotFilesWrite no

# 禁止读取隐藏文件 (如 .history, .ssh...)
ProhibitDotFilesRead no

# 永不覆盖文件。如果上传的文件已经存在,系统会自动将其命名为file.1, file.2, file.3, ...
AutoRename yes

# 不允许匿名用户上传文件 (no = 允许上传)
AnonymousCantUpload no

# 仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公
# 网IP来提供匿名FTP,而保留一个私有的防火墙保护的IP来进行远程管理。你
# 还可以只允许一内网地址进行认证,而在另外一个IP上提供纯匿名的FTP服务。
#TrustedIP 10.1.1.1

# 如果你要在登陆日志的每一行添加PID标记,去掉下行的注释
#LogPID yes

# 使用类似于Apache格式创建一个附加的日志文件,如:
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# 这个日志文件可以被www流量分析工具来处理
AltLog clf:/var/log/pureftpd.log

# 使用优化过的格式为统计报告创建一个额外的日志文件
# AltLog stats:/var/log/pureftpd.log

# 使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容)
# AltLog w3c:/var/log/pureftpd.log

# 不允许使用chmod命令.用户不能修改他们上传文件的属性
#NoChmod yes

# 允许用户恢复和上传文件,但不能够上除他们
#KeepAllFiles yes

# 用户主目录不存在的话,自动创建目录
#CreateHomeDir yes

# 启用虚拟磁盘配额。第一个参数是最大文件数,第二个参数是总共的大小,单位是MB
# 如: 1000:10 限制每个用户最大文件1000个且不能超过10MB
#Quota 1000:10

# 如果你在编译 pure-ftpd 时加入了‘standalone’选项,那么你可以更改pid文件位置
# 默认目录 /var/run/pure-ftpd.pid
#PIDFile /var/run/pure-ftpd.pid

# 如果你在编译 pure-ftpd 时加入了 pure-uploadscript 选项,这个指令将会使
# pure-ftpd 发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,
# 这样 pure-uploadscript 就能读然后调用一个脚本去处理新的上传。
#CallUploadScript yes

# 这个选项对于匿名上传的服务器是很有用的。/var/ftp 在 /var 里时,需要保留一定
# 磁盘空间来保护日志文件。当所在磁盘分区使用超过百分之 X 时,将不在接受新的上传。
MaxDiskUsage 99

# 如果不想让用户来重命名文件,请将其设置为yes
#NoRename yes

# 'customer proof' : 选项可以阻止普通用户因误操作而执行的错误命令
# 如:'chmod 0 public_html', 这是有效的命令,但执行完命令之后用户
# 就将他们自己的文件锁定了,这时你的麻烦就来了,你需要给用户解决这
# 些由于用户而造成的愚蠢问题。如果你确信的你用户都具有一些unix基础
# 知识的话,那么该选项就没有必要设置,否则建议启用它。
CustomerProof yes

# 所有用户都做同样的限制。只有编译时加入了--with-peruserlimits 选项
# 才可以启用。格式为: <每一个用户最大许可的进程>:<匿名用户最大进程>
# 例如:3:20 同一个认证用户最大可以有3个同时活动的进程。而且同时最多
# 只能有20个匿名用户进程
# PerUserLimits 3:20

# 当文件上传时,服务器上之前已经有一个同名的文件时,旧的文件既不会被移动
# 也不会被删除。在新文件上传完毕之前会将上传的部分暂时放到一个临时的文件
# 中,当上传完毕之后会自动的切换到新上传的文件。例如:当服务器上有一个PHP
# 脚本正在执行,但我现在要上传一个新的PHP脚本,那么当我在上传完毕之后才将
# 旧的文件切换到新的文件。而不是像某些程序那样在开始上传的时候就将旧的文件
# 覆盖掉了,这样做的目的就是可以最大程度的减少正在运行中的程序错误。该选项
# 与虚拟配额不能同时使用。
# NoTruncate yes

# 该选项可以接受3个可选值:
# 0 : 禁用 SSL/TLS 加密层 (默认).
# 1 : 同时接受传统的和加密的连接
# 2 : 拒绝没有经过 SSL/TLS 安全验证的连接,包括匿名连接
# 在没有确定下面三个问题之前不要盲目的取消注释:
# 1) 编译PureFTPd时是否启用了 SSL/TLS 支持 (--with-tls),
# 2) 系统中是否包含一个有效的证书
# 3) 开启后只有兼容的客户端才能登陆
# TLS 1

# 在 standalone 模式下只监听IPV4的地址 (与禁用 IPv6 相同)
# 默认是IPV4与IPV6同时监听
# IPV4Only yes

# 在 standalone 模式下只监听IPV6的地址 (与禁用 IPv4 相同)
# IPV6Only yes

# 文件名的UTF-8支持
# FileSystemCharset big5
# ClientCharset big5

有时在进入系统的时候经常提示You have new mail in /var/spool/mail/root

你觉得烦人---解决方法:修改系统配置文件/etc/profile,告诉系统不要去检查邮箱.

具体操作:
命令行输入:

echo "unset MAILCHECK" >> /etc/profile

【把unset MAILCHECK加到文件/etc/profile 的尾部】然后重新登陆控制台就没有这个讨厌的提示了。

你觉着不烦人---你想把这封信邮件发到自己的邮箱看一下---解决方法:

修改/usr/share/logwatch/default.conf/logwatch.conf配置文件
具体操作:

命令行输入:vim /usr/share/logwatch/default.conf/logwatch.conf
1333509948_6515

MailTo更改为想要输送的邮件人地地址就可以了

收到那一封信,内容分为:
Named(一些不可链接的对象)
pam_unix(一些验证对象,比如sshd)

sendmail
sendmail - largeboxes(大型邮件spool文件)
SSHD(sshd的次数,一下描述信息)
磁盘空间(挂载,空间使用情况)等信息

今天配置服务器时候,执行自己写的脚本提示“/bin/bash^M: bad interpreter: 没有那个文件或目录”,后来找到了解决方法,在此留下一笔。可能是FTP上传时候改变了文件格式吧。

具体细节不管,如果验证:
1.第一步:
vim piaoyun.sh

2.第二步:
:set ff?

如果出现fileforma=dos那么就基本可以确定是这个问题了。

3.第三步:
:set fileformat=unix

4.第四步:退出保存
:wq

OK了。。。。。。。

再次运行piaoyun.sh,就不会出现/bin/bash^M: bad interpreter: 没有那个文件或目录错误提示了

最近更换了lnmp环境,发现用自带的ecshop.conf的伪静态规则是无效的,不知道是我的设置有问题呢,还是其他问题,通过搜索找到了一个可以用的

正确的可以使用的规则如下:

location / {
    if (!-e $request_filename) {
        rewrite "^/index\.html" /index.php last;
        rewrite "^/category$" /index.php last;
        rewrite "^/feed-c([0-9]+)\.xml$" /feed.php?cat=$1 last;
        rewrite "^/feed-b([0-9]+)\.xml$" /feed.php?brand=$1 last;
        rewrite "^/feed\.xml$" /feed.php last;
        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;
        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;
        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;
        rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2 last;
        rewrite "^/category-([0-9]+)(.*)\.html$" /category.php?id=$1 last;
        rewrite "^/goods-([0-9]+)(.*)\.html" /goods.php?id=$1 last;
        rewrite "^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;
        rewrite "^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$" /article_cat.php?id=$1&page=$2 last;
        rewrite "^/article_cat-([0-9]+)(.*)\.html$" /article_cat.php?id=$1 last;
        rewrite "^/article-([0-9]+)(.*)\.html$" /article.php?id=$1 last;
        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;
        rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2&page=$3 last;
        rewrite "^/brand-([0-9]+)-c([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2 last;
        rewrite "^/brand-([0-9]+)(.*)\.html" /brand.php?id=$1 last;
        rewrite "^/tag-(.*)\.html" /search.php?keywords=$1 last;
        rewrite "^/snatch-([0-9]+)\.html$" /snatch.php?id=$1 last;
        rewrite "^/group_buy-([0-9]+)\.html$" /group_buy.php?act=view&id=$1 last;
        rewrite "^/auction-([0-9]+)\.html$" /auction.php?act=view&id=$1 last;
        rewrite "^/exchange-id([0-9]+)(.*)\.html$" /exchange.php?id=$1&act=view last;
        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;
        rewrite "^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;
        rewrite "^/exchange-([0-9]+)-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2 last;
        rewrite "^/exchange-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1 last;
    }

    if (!-e $request_filename) {
        return 404;
    }
}

lnmp自带的规则如下(我使用无效):

if (!-e $request_filename)
{
rewrite "^/index\.html" /index.php last;
rewrite "^/category$" /index.php last;
rewrite "^/feed-c([0-9]+)\.xml$” /feed.php?cat=$1 last;
rewrite “^/feed-b([0-9]+)\.xml$” /feed.php?brand=$1 last;
rewrite “^/feed\.xml$” /feed.php last;
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;
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;
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;
rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2&page=$3 last;
rewrite “^/category-([0-9]+)-b([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2 last;
rewrite “^/category-([0-9]+)(.*)\.html$” /category.php?id=$1 last;
rewrite “^/goods-([0-9]+)(.*)\.html” /goods.php?id=$1 last;
rewrite “^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;
rewrite “^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$” /article_cat.php?id=$1&page=$2 last;
rewrite “^/article_cat-([0-9]+)(.*)\.html$” /article_cat.php?id=$1 last;
rewrite “^/article-([0-9]+)(.*)\.html$” /article.php?id=$1 last;
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;
rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2&page=$3 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2 last;
rewrite “^/brand-([0-9]+)(.*)\.html” /brand.php?id=$1 last;
rewrite “^/tag-(.*)\.html” /search.php?keywords=$1 last;
rewrite “^/snatch-([0-9]+)\.html$” /snatch.php?id=$1 last;
rewrite “^/group_buy-([0-9]+)\.html$” /group_buy.php?act=view&id=$1 last;
rewrite “^/auction-([0-9]+)\.html$” /auction.php?act=view&id=$1 last;
rewrite “^/exchange-id([0-9]+)(.*)\.html$” /exchange.php?id=$1&act=view last;
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;
rewrite ^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;
rewrite “^/exchange-([0-9]+)-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2 last;
rewrite “^/exchange-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1 last;
}

一、修正时区

rm -rf /etc/localtime #删除当前默认时区
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #复制替换默认时区为上海

SSH执行以上命令,将VPS时区修改为中国上海的时区,当然,也可以设置中国香港或北京的时间。

二、手动修正时间

date -s '09:16:00 2013-01-21'

使用“date”命令,修改时间和日期为2013年1月21日,时间是上午9点16分0秒。

三、时间自动同步和校正

yum install -y ntp #安装时间同步服务(组件)
ntpdate us.pool.ntp.org #设置同步服务器
date #查看当前时间

部分系统已经安装了NTP服务,系统会根据当前记录的时区(第一步操作)自动连接ntp服务器校正时间。

安装了一台CentOS的虚拟机,发现时区设罢的不正确,因为没装图形界面,一时不知道怎么改时区。在邮件列表里搜索了一下,发现解决方法很简单,直接用所需的时区信息,覆盖/etc/localtime即可。

我使用的是下面的命令:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime

另外你也可以安装system-config-date工具:
yum install system-config-date

查看系统时间:
date

查看当前时区:
date -R

设置时区:我们用东八区,上海的时间:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

上面将系统的时区设置为+8:00上海

设置时区:我们用东八区,重庆的时间:
cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime

你可以在/usr/share/zoneinfo文件夹里面看到许多的地区名称
替换上面的命令更改为你喜欢的时区

附网上搜索找到文章一篇:
在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况。如果没有安装,而你使用的是 CentOS系统 那使用命令:
yum install ntp

然后:
ntpdate us.pool.ntp.org 。

因为CentOS系统是用rhas的源码再编译的,很多地方是完全一样的。

rhas5的时区是以文件形式存在的,当前的时区文件是在/etc/localtime

那么其他时区的文件存放在哪里呢?

在/usr/share/zoneinfo下

我们用东八区,北京,上海的时间

#cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#reboot

重启之后,date查看时间、查看当前时区 date -R、查看/修改Linux时区和时间

一、时区

1. 查看当前时区
date -R

2. 修改设置时区
方法(1)
tzselect

方法(2) 仅限于RedHat Linux 和 CentOS系统
timeconfig

方法(3) 适用于Debian
dpkg-reconfigure tzdata

3. 复制相应的时区文件,替换CentOS系统时区文件;或者创建链接文件
cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime

在中国可以使用:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

二、时间
1、查看时间和日期
date

2、设置时间和日期
将CentOS系统日期设定成1996年6月10日的命令
date -s 06/22/96

将CentOS系统时间设定成下午1点52分0秒的命令
date -s 13:52:00

3. 将当前时间和日期写入BIOS,避免重启后失效
hwclock -w

三、定时同步时间
# /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1

1新建文件夹
mkdir 文件名

新建一个名为test的文件夹在home下
view source1 mkdir /home/test

2新建文本
在home下新建一个test.sh脚本
vi /home/test.sh

3删除文件或文件夹
1)、删除home目录下的test目录
rm /home/test

2)、这种不带参数的删除方法经常会提示无法删除,因为权限不够。
rm -r /home/test

3)、-r是递归的删除参数表中的目录及其子目录。 目录将被清空并且删除。 当删除目录包含的具有写保护的文件时用户通常是被提示的。
rm -rf /home/test

4)、f是不提示用户,删除目录下的所有文件。请注意检查路径,输成别的目录就悲剧了。
rm -ir /home/test

5)、-i是交互模式。使用这个选项,rm命令在删除任何文件前提示用户确认。

4移动文件或文件夹
mv [options] 源文件或目录 目标文件或目录

示例:
1)、移动hscripts文件夹/目录下的所有文件,目录和子目录到tmp目录mv hscripts tmp
分析:在上述命令中,如果tmp目录已经存在,mv命令将移动hscripts文件夹/目录下的所有文件,目录和子目录到tmp目录。 如果没有tmp目录,它将重命名 hscripts目录为tmp目录。
mv /旧目录路径/* /新目录路径

2)、移动多个文件/更多问价到另一目录
mv file1.txt tmp/file2.txt newdir
这个命令移动当前目录的file1.txt文件和tmp文件夹/目录的file2.txt文件到newdir目录。

参数:
-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答”y”或”n”,这样可以避免误覆盖文件。
-f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。

5复制文件或文件夹
cp [options] 来源档(source) 目的檔(destination)

参数:
-a :相当于 -pdr 的意思;
-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
-f :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
-i :若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p :连同档案的属性一起复制过去,而非使用预设属性;
-r :递归持续复制,用于目录的复制行为;
-s :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;
-u :若 destination 比 source 旧才更新 destination !
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!

示例:
1)、复制两个文件:
cp file1 file2
上述cp命令复制文件file1.php 的内容到文件file2.php中。

2)、备份拷贝的文件:
cp -b file1.php file2.php
创建文件file1.php的带着符号 ‘~’的备份文件file2.php~。

3)、复制文件夹和子文件夹:
cp -R scripts scripts1
上面的 cp 命令从 scripts 复制文件夹和子文件夹到 scripts1。

6、创建目录
mkdir 文件名
mkdir /var/www/test

vnStat是一个应用于Linux或BSD平台,对网卡流量做监控。 因为并非是基于网络包嗅探的方式而是基于/proc的分析。现在vnStat已经有出vnstat PHP frontend 扩展了,可以以PHP脚本的形式直接调用vnStat监测的数据,如下图:
20131031133303_01

20131031133303_02
官网:http://humdi.net/vnstat/

1、安装vnstat

cd /tmp
wget http://humdi.net/vnstat/vnstat-1.11.tar.gz
tar -zxvf vnstat-1.11.tar.gz
cd vnstat-1.11
make
make install

PS:如果装了web服务器可以用make all来编译。包含图片输出支持,用example目录下的vnstat.cgi在web服务器上输出图片。

常用选项:

-q, --query :query database
-h, --hours :show hours
-d, --days :show days
-m, --months :show months
-w, --weeks :show weeks
-t, --top10 :show top10
-s, --short :use short output
-u, --update :update database
-i, --iface :select interface (default: eth0)
-?, --help :short help
-v, --version :show version
-tr, --traffic :calculate traffic
-ru, --rateunit :swap configured rate unit
-l, --live :show transfer rate in real time

这样vnstat 就安装好了。下面讲vnstat的工作运行配置。
下载最新版vnstat PHP frontend,
地址:http://soft.vpser.net/status/vnstat/vnstat_php_frontend-1.5.1.tar.gz

解压文件,改名为vnstat,然后上传到某个网站根目录下,这样就可以以http://piaoyun.cc/vnstat 来访问到,就出来页面了,但此时没有数据,因为还要使系统生成数据。

2、通过ifconfig查看网卡名称,生成数据库
vnstat -u -i eth0

方法二:使用vnstat守护进程
执行:
vnstatd -d

官网提供vnstatd的自启动脚本:
http://humdi.net/vnstat/init.d/redhat/vnstat

放到/etc/init.d目录下。

cd /etc/init.d
wget http://humdi.net/vnstat/init.d/redhat/vnstat
chmod +x vnstat
chkconfig --add vnstat
chkconfig vnstat on
service vnstat restart

实际上在安装vnstat时,已经在系统里安装好了vnstat的cron,crontab内容在/etc/cron.d/vnstat,如果没有使用命令touch /etc/cron.d/vnstat 创建。
内容为:
0-55/5 * * * * root vnstat -u -i eth0
0-55/5 * * * * root vnstat --dumpdb -i eth0 >/var/lib/vnstat/vnstat_dump_eth0
第一行为安装时自动指定的.
第二行是为了更新eth0的数据后,dump出来一个文件,给 php访问接口访问.
这里dump出来的vnstat_dump_eth0 文件名是有规定的。

# 注意:有时候采用上面的收集办法,无法采集到数据,可以采用下面的办法

cat > /var/lib/vnstat/vnstat.sh<<EOF
vnstat -u -i eth0
vnstat --dumpdb -i eth0 >/var/lib/vnstat/vnstat_dump_eth0
EOF

3、更新数据库
方法一:通过cron定时更新数据库

vim /etc/cron.d/vnstat

输入:

*/5 * * * * sh /var/lib/vnstat/vnstat.sh

设置为5分钟更新一次数据库。
vnstat.sh 内容如下:

vnstat -u -i eth0
vnstat --dumpdb -i eth0 >/var/lib/vnstat/vnstat_dump_eth0

在vnstat_php_frontend-1.5.1.tar.gz 包里的config.php 里有说明。

最后,编辑 vnstat/config.php 这个文件,将数据目录改为 /var/lib/vnstat/,如果不存在此目录,需要使用mkdir -p /var/lib/vnstat/ 创建此目录。
即:

$data_dir = '/var/lib/vnstat/';

指定显示标题

$iface_title['eth0'] = 'VPSer-Linode';

下面设置以什么图片格式显示,可以是svg或png,一般选择png就可以,svg在IE下需要安装插件,Firefox不需要;如果用png在IE、Firefox下均能直接显示。

$graph_format='png';

指定vnstat的安装目录,如果是安装上述方法安装,直接按下面填写即可。

$vnstat_bin = '/usr/bin/vnstat';

将要监控的网卡指定为1个:

// list of network interfaces monitored by vnStat
//$iface_list = array(’eth0′, ‘eth1′, ’sixxs’);
$iface_list = array(’eth0′,);

// will be displayed instead
//
$iface_title['eth0'] = ‘Internal’;
//$iface_title['eth1'] = ‘Internet’;
//$iface_title['sixxs'] = ‘SixXS IPv6′;

修改语言为英语:$language = 'nl'; 将nl替换为en 保存。

这一切都搞好后,现在用 www.mydomain.com/vnstat/访问,就会发现有流量统计了,统计的数据更新是5分钟刷新一次.

4、使用
1)直接使用vnstat相关命令查看流量统计
vnstat
vnstat -h
vnstat -d
vnstat -m
vnstat -w
vnstat -t

2)查看实时流量
vnstat -l -i eth0 -ru

注:-ru表示将显示单位在bytes和bits之间切换。如果要直接单位显示bytes,可以编辑/etc/vnstat.conf将RateUnit值设为0。

3)计算一段时间内的流量平均值

vnstat -tr 10 -ru

注:-tr后跟时间,默认值是5秒。

说明:
修改SSH的端口很大程度上能杜绝被黑客扫描,增加系统的安全系数,最近有客户修改完端口没有设置防火墙开启修改后的端口导致修改后链接不上VPS,下面教大家安全修改并在iptables里开启相应的端口:

实现:
1.修改SSH配置文件:/etc/ssh/sshd_config #找到Port 22,这里是标识默认使用22端口,修改为:
Port 22
Port 1234

/etc/init.d/sshd restart

#这样SSH端口将同时工作在22、1234上

2.添加防火墙规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 1234 -j ACCEPT

/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables restart

然后使用SSH工具测试你所设置的端口是否能正常使用
如果能正常使用返回到第一步,删除原来的22端口,以及修改防火墙配置文件
之所以先设置成两个端口,测试成功后再关闭一个端口,是为了方式在修改的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试以免发生连接不上的状况。

开启自动启动:chkconfig iptables on
开启不自动启动:chkconfig iptables off

附录:
设定预设规则,INPUT链默认拒绝,OUTPUT链默认接受,FORWARD链默认拒绝
iptables -F #清除预设表filter中的所有规则链的规则
iptables -X #清除预设表filter中使用者自定链中的规则
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -L -n --line #按行数显示防火墙规则
iptables -D INPUT 1 #删除INPUT表第一条

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #来源、目的为127.0.0.1都接受,这条放最后就可以了

1、安装iptables防火墙
如果没有安装iptables需要先安装,CentOS执行:
yum install iptables

Debian/Ubuntu执行:
apt-get install iptables

2、清除已有iptables规则
iptables -F
iptables -X
iptables -Z

3、开放指定的端口
#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT

# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT (注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT

4、屏蔽IP
#如果只是想屏蔽IP的话“3、开放指定的端口”可以直接跳过。

#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP

#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP

#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP

#封IP段即从123.45.6.1到123.45.6.254的命令是

iptables -I INPUT -s 123.45.6.0/24 -j DROP

5、查看已添加的iptables规则
iptables -L -n

v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M) vps侦探
n:只显示IP地址和端口号,不将ip解析为域名

6、删除已添加的iptables规则

将所有iptables以序号标记显示,执行:
iptables -L -n --line-numbers

比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8

7、iptables的开机启动及规则保存

CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:

chkconfig --level 345 iptables on

开启自动启动:chkconfig iptables on
开启不自动启动:chkconfig iptables off

将其加入开机启动。

CentOS上可以执行:
service iptables save
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables restart

保存规则。

另外更需要注意的是Debian/Ubuntu上iptables是不会保存规则的。

需要按如下步骤进行,让网卡关闭是保存iptables规则,启动时加载iptables规则:

创建/etc/network/if-post-down.d/iptables 文件,添加如下内容:
#!/bin/bash
iptables-save > /etc/iptables.rules

执行:chmod +x /etc/network/if-post-down.d/iptables 添加执行权限。

创建/etc/network/if-pre-up.d/iptables 文件,添加如下内容:

#!/bin/bash
iptables-restore < /etc/iptables.rules

执行:chmod +x /etc/network/if-pre-up.d/iptables 添加执行权限。

关于更多的iptables的使用方法可以执行:iptables --help或网上搜索一下iptables参数的说明。

注:每次服务在停止之前会自动将现有的规则保存
在 /etc/sysconfig/iptables 这个文件中去.

查看3306端口被什么程序占用

[root@piaoyun ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 6153 mysql 10u IPv4 13751 TCP *:mysql (LISTEN)
mysqld 6153 mysql 111u IPv4 13816917 TCP 10.1.1.13:mysql->apache2:4832 (ESTABLISHED)
mysqld 6153 mysql 161u IPv4 13816822 TCP 10.1.1.13:mysql->apache2:4620 (ESTABLISHED)
mysqld 6153 mysql 228u IPv4 13817771 TCP 10.1.1.13:mysq

查看3306端口是被哪个服务使用着

[root@piaoyun ~]# netstat -tunlp | grep :3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 6153/mysqld

查看3306端口的是否已在使用中,可验证使用该端口的服务是否已正常运行

[root@piaoyun ~]# netstat -an | grep :3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 10.1.1.13:3306 10.1.1.7:9486 TIME_WAIT
tcp 0 0 10.1.1.13:3306 10.1.1.7:8459 TIME_WAIT
tcp 0 0 10.1.1.13:3306 10.1.1.7:9510 TIME_WAIT
tcp 0 0 10.1.1.13:3306 10.1.1.7:7968 TIME_WAIT
tcp 0 0 10.1.1.13:3306 10.1.1.7:8773 TIME_WAIT
tcp 0 0 10.1.1.13:3306 10.1.1.7:10817 TIME_WAIT
tcp 0 293 10.1.1.13:3306 10.1.1.7:11103 ESTABLISHED
tcp 0 0 10.1.1.13:3306 10.1.1.7:9561 TIME_WAIT
tcp 0 52 10.1.1.13:3306 10.1.1.7:11104 ESTABLISHED
tcp 0 0 10.1.1.13:3306 10.1.1.7:9568 TIME_WAIT

为什么要装 VMware Tools?
因为它可以改善 Virtual Machine 的运行性能,而且可以让 Host OS 和 Guest OS 互通有无,这样我们就不用伤脑筋,要架设什么服务器,来沟通两个 OS,现在就让我们开始吧!

最小化安装的centos少一些安装vmware tools的必要工具,先安装这些工具再安装vmware tools能省不少力气。

CentOS更新源设置及系统更新 不更新内核和版本号的设置方法

一:安装VMware Tools的之前必装的工具套件方法如下:

Centos安装VMware Tools:
[root@piaoyun-vm vmware-tools-distrib]# su root

切换为 root

安装必要的工具套件:
[root@piaoyun-vm vmware-tools-distrib]# yum -y install perl gcc gcc-c++ automake make kernel kernel-headers kernel-devel
[root@centos-vm vmware-tools-distrib]# yum install kernel-devel $(uname -r)
[root@centos-vm vmware-tools-distrib]# uname -r

然后更新kernel
[root@piaoyun-vm vmware-tools-distrib]# yum -y update kernel

检查一下
[root@piaoyun-vm vmware-tools-distrib]# rpm -qa | grep kernel

Perl是必选的,否则无法安装VMWare Tools,system managerment tools,network tools必选的,否则无法上网,其他的看着选吧。
一定要重新启动,因为新安装的 kernel 要 reboot 后才生效;稍后执行 vmware-install.pl 会根据目前使用 kernel 版本去找某些档案,若不 reboot,新安装的 kernel-headers kernel-devel 若版本较新,会出现档案找不到的情况

[root@centos-vm vmware-tools-distrib]# ./vmware-install.pl

如果安装过程中提示找不到kernel header,可以手动输入一个路径,centos在 /usr/src/kernels/2.6.32-220.el6.i686/include,比如:

Searching for a valid kernel header path...
The path "" is not valid.
Would you like to change it? [yes] yes

What is the location of the directory of C header files that match your running
kernel? /usr/src/kernels/2.6.32-220.el6.i686/include

The path "/usr/src/kernels/2.6.32-220.el6.i686/include" appears to be a valid
path to the kernel headers of the running kernel.
Would you like to change it? [no]

kernel-devel要安装对应版本的才行,如果添加了remi或epel源不指定版本默认安装最新版本,如果和当前版本不一致导致vmware tools安装失败,可以使用uname -r 查看当前版本,最后不得不说yum这东西真他X的方便。

二:VMware Tools的安装方法如下:
VMware Tools所在位置:VMware 安装路径 \VMware\VMware Workstation\linux.iso

[root@piaoyun-vm ~]# mount /cdrom
# 有时可能加载不了,这时就要先将系统关闭,再手动指定 ISO 映像!
# 有的时候,可能是media 就应该 cd /media 进行操作!
[root@piaoyun-vm ~]# cd /cdrom
[root@piaoyun-vm ~]# ls -a
[root@piaoyun-vm ~]# cp VMwareTools-5.5.1-19175.tar.gz /tmp
[root@piaoyun-vm ~]# cd /tmp
[root@piaoyun-vm ~]# tar zxpf VMwareTools-5.5.1-19175.tar.gz
[root@piaoyun-vm ~]# cd vmware-tools-distrib
[root@piaoyun-vm vmware-tools-distrib]# ./vmware-install.pl
Creating a new installer database using the tar3 format.

Installing the content of the package.

# 安装过程的画面,全部使用默认值,一直按 Enter 就对了

In which directory do you want to install the binary files?
[/usr/bin]

What is the directory that contains the init directories (rc0.d/ to rc6.d/)?

[/etc/rc.d]

What is the directory that contains the init scripts?
[/etc/rc.d/init.d]

In which directory do you want to install the daemon files?
[/usr/sbin]

In which directory do you want to install the library files?
[/usr/lib/vmware-tools]

The path "/usr/lib/vmware-tools" does not exist currently. This program is goingto create it, including needed parent directories. Is this what you want?
[yes]

In which directory do you want to install the documentation files?
[/usr/share/doc/vmware-tools]

The path "/usr/share/doc/vmware-tools" does not exist currently. This program isgoing to create it, including needed parent directories. Is this what you want?
[yes]

The installation of VMware Tools 5.5.1 build-19175 for Linux completed
successfully. You can decide to remove this software from your system at any
time by invoking the following command: "/usr/bin/vmware-uninstall-tools.pl".

Before running VMware Tools for the first time, you need to configure it by
invoking the following command: "/usr/bin/vmware-config-tools.pl". Do you want
this program to invoke the command for you now? [yes]
Stopping VMware Tools services in the virtual machine:
Guest operating system daemon: [ 确定 ]
Trying to find a suitable vmhgfs module for your running kernel.

The module bld-2.6.9-5.EL-i686-RHEL4 loads perfectly in the running kernel.

pcnet32 30153 0
Unloading pcnet32 module

Trying to find a suitable vmxnet module for your running kernel.

The module bld-2.6.9-5.EL-i686-RHEL4 loads perfectly in the running kernel.

Detected X.org version 6.8.

关闭控制台鼠标服务: [ 确定 ]
启动控制台鼠标服务: [ 确定 ]

Please choose one of the following display sizes (1 - 13):

# 显示分辨率,这里是以 1024x768 为例

# VMware Tools 安装的时候,会自动修改 X server 的配置文件

[1] "640x480"
[2]< "800x600"
[3] "1024x768"
[4] "1152x864"
[5] "1280x800"
[6] "1152x900"
[7] "1280x1024"
[8] "1376x1032"
[9] "1400x1050"
[10] "1680x1050"
[11] "1600x1200"
[12] "1920x1200"
[13] "2364x1773"
Please enter a number between 1 and 13:
[2] 3
X Window System Version 6.8.2
Release Date: 9 February 2005
X Protocol Version 11, Revision 0, Release 6.8.2
Build Operating System: Linux 2.6.9-34.EL i686 [ELF]
Current Operating System: Linux rd01.domain 2.6.9-34.EL #1 Wed Mar 8 00:07:35 CST 2006 i686
Build Date: 04 May 2006
Build Host: x8664-build.centos.org

Before reporting problems, check [url]http://wiki.X.Org[/url]
to make sure that you have the latest version.
Module Loader present
OS Kernel: Linux version 2.6.9-34.EL (buildcentos@build-i386) (gcc version 3.4.5 20051201 (Red Hat 3.4.5-2)) #1 Wed Mar 8 00:07:35 CST 2006 P
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(++) Log file: "/tmp/vmware-config0/XF86ConfigLog.3131", Time: Mon Jun 12 20:57:34 2006
(++) Using config file: "/tmp/vmware-config0/XF86Config.3131"
(WW) VMWARE(0): Failed to set up write-combining range (0xf0000000,0x1000000)

X is running fine with the new config file.

Starting VMware Tools services in the virtual machine:
Switching to guest configuration: [ 确定 ]
Guest filesystem driver: [ 确定 ]
DMA setup: [ 确定 ]
Guest operating system daemon: [ 确定 ]

The configuration of VMware Tools 5.5.1 build-19175 for Linux for this running
kernel completed successfully.

You must restart your X session before any mouse or graphics changes take
effect.

You can now run VMware Tools by invoking the following command:
"/usr/bin/vmware-toolbox" during an XFree86 session.

To use the vmxnet driver, restart networking using the following commands:
/etc/init.d/network stop
rmmod pcnet32
rmmod vmxnet
depmod -a
modprobe vmxnet
/etc/init.d/network start

Enjoy,

--the VMware team

[root@piaoyun-vm vmware-tools-distrib]# shutdown -r now

# 修改完成之后,重新启动计算机,让 VMware Tools 生效

CentOS安装好apache、mysql等服务器程序后,并没有设置成开机自动启动的,为避免重启后还要手动开启web等服务器,还是做下设置好,其实设置很简单,用chkconfig命令就行了。

例如,要开机后自动启动mysql、apache、vsftpd服务,用以下命令即可:
chkconfig mysqld on
chkconfig httpd on
chkconfig vsftpd on

要关闭自动启动的话,把on改为off就行了。
chkconfig mysqld off
chkconfig httpd off
chkconfig vsftpd off

不过要注意的是,如果某个服务尚未被添加到chkconfig列表中,则现需要使用--add参数将其添加进去:
chkconfig --add postfix

如果要查询当前所有自动启动的服务,可以输入:
chkconfig --list

但是这样显示东西太多了,看起来很晕。如果只想看指定的服务怎么办呢?这个时候只需要在“--list”之后加上服务名就好了,比如查看httpd服务是否为自动启动,就输入:
chkconfig --list httpd

这个时候输出的结果:
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

此时0~6均为off,则说明httpd服务不会在系统启动的时候自动启动。我们输入chkconfig httpd on后,再次检查输出结果变为:
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

这个时候2~5都是on,就表明会自动启动了。

安装好了CentOS 6.4,我想让它作为一个服务器,可以让我的Windows 7电脑远程登录。
安装OpenSSH Server
首先,我们搜索一下CentOS的软件库里面有没有已经定义好的SSH服务器包:

$ yum search ssh
... ...
openssh.x86_64 : An open source implementation of SSH protocol versions 1 and 2
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X
openssh-clients.x86_64 : An open source SSH client applications
openssh-ldap.x86_64 : A LDAP support for open source SSH server daemon
openssh-server.x86_64 : An open source SSH server daemon
... ...

OpenSSH是Secure Shell的一个开源实现。从上面的搜索结果可以看到,CentOS的软件库里面已经有了OpenSSH的服务器包(openssh-server)和客户端包(openssh-clients),用yum install可以直接安装。

$ yum install openssh-server

OpenSSH Server安装完成后在/etc/init.d目录下应该会增加一个名为sshd的服务。

$ chkconfig --list sshd
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

手动启动sshd服务,方便后面客户端的连接:
关闭: /etc/init.d/sshd stop
启动: /etc/init.d/sshd start
重启: /etc/init.d/sshd restart

1、重启后生效
开启:chkconfig sshd on
关闭:chkconfig sshd off

2、即时生效,重启后失效
开启:service sshd start
关闭:service sshd stop

在这里,我们更新了关于操作中对文件的CentOS常用命令。我们本着使用的意义来给大家整理出CentOS常用命令,不在这里做过多的解释。下面,就让我们一起来学习关于文件操作的CentOS常用命令吧!

创建/改变文件系统的CentOS常用命令:
NO1. 创建文件系统类型
[root@rehat root]# umount /dev/sdb1
[root@rehat root]# mkfs -t ext3 /dev/db1
[root@rehat root]# mount /dev/sdb1 /practice

改变文件或文件夹权限的CentOS常用命令chmod:
NO1. 将自己的笔记设为只有自己才能看
[root@rehat root]# chmod go-rwx test.txt
或者
[root@rehat root]# chmod 700 test.txt

NO2. 同时修改多个文件的权限
[root@rehat root]# chmod 700 test1.txt test2.txt

NO3. 修改一个目录的权限,包括其子目录及文件
[root@rehat root]# chmod 700 -R test

改变文件或文件夹拥有者的CentOS常用命令:
chown 该命令只有 root 才能使用

NO1. 更改某个文件的拥有者
[root@rehat root]# chown jim:usergroup test.txt

NO2. 更改某个目录的拥有者,并包含子目录
[root@rehat root]# chown jim:usergroup -R test

查看文本文件内容的CentOS常用命令cat:
NO1. 查看文件内容,并在每行前面加上行号
[root@rehat root]# cat -n test.txt

NO2. 查看文件内容,在不是空行的前面加上行号
[root@rehat root]# cat -b test.txt

NO3. 合并两个文件的内容
[root@rehat root]# cat test1.txt test2.txt > test_new.txt

NO4. 全并两具文件的内容,并追回到一个文件
[root@rehat root]# cat test1.txt test2.txt >> test_total.txt

NO5. 清空某个文件的内容
[root@rehat root]# cat /dev/null > test.txt

NO6. 创建一个新的文件
[root@rehat root]# cat > new.txt 按 CTRL + C 结束录入

编辑文件文件的CentOS常用命令vi:
NO1. 新建档案文件
[root@rehat root]# vi newfile.txt

NO2. 修改档案文件
[root@rehat root]# vi test.txt test.txt 已存在

NO3. vi 的两种工作模式:命令模式,编辑模式

NO4. 进入 vi 后为命令模式,按 Insrt 键进入编辑模式
按 ESC 进入命令模式,在命令模式不能编辑,只能输入命令

NO5. 命令模式常用命令
:w 保存当前文档
:q 直接退出 vi
:wq 先保存后退出 。

这就是关于文件的CentOS常用命令。希望能够给大家带来操作上的帮助。

今天需要吧一个盘格式化Ext4.对我来说,有点挑战性,以前没怎么干过这个活。
CentOS默认是不支持Ext4.所以你需要处理一下才行。
使用环境使用的是CentOS5.5 内核是 2.6.18-238.5.1.el5xen

其实CentOS 5.5 里面是有 ext4 模块的,只是没加载,所以我们先把模块加入系统

# cd /lib/modules/2.6.18-238.5.1.el5xen/kernel/fs/ext4/ //ext4模块就在此目录下
[root@linux ext4]# ls
ext4.ko

找到模块后使用modprobe 命令添加

# modprobe ext4 //注意:这里只能写模块名,不能写成 ext4.ko

添加完后使用lsmod 查看

# lsmod |grep ext4
ext4 285409 0
jbd2 47744 1 ext4
crc16 1027 1 ext4

最后使用yum 安装一下 e4fsprogs

[root@linux ext4]# yum install e4fsprogs
最后创建一个分区来使用ext4 创建文件系统,格式化:

# mkfs.ext4 /dev/sda6

到此你的linux 系统已经能够支持 ext4 文件系统了!
Centos 5.3 下 fdisk分区、格式化、挂载新硬盘
http://piaoyun.cc/centos-fdisk-mount.html

不过我的情况比较特殊,需要把另外一块硬盘格式化。

我就一个分区
# parted /dev/sdb
(parted) mklabel gpt # 将MBR磁盘格式化为GPT
(parted) print #打印当前分区

1. parted /dev/sdb(未分区前设备名sdb)
2. mklabel gpt (当小于2T时可以用msdos) 完成后用P显示 rm Minor 1 删除已经存在的sdb Minor
3. mkpart
4. 分区类型
primary/主分区 p (主分区)
5. 文件系统类型 [ext2]? 不用管 回车就好
6. 起始点 0
7. 结束点 -1 (表示全部,当然和可以自己定义)
8. p Minor 起始点 终止点 文件系统 名称 标志 (显示分区后的信息)
9. quit 退出

[root@gluster01b ~]# parted /dev/sdb
GNU Parted 1.8.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk
will be lost. Do you want to continue?
parted: invalid token: gpt
Yes/No?
Yes/No? yes
New disk label type? [gpt]?
(parted) mkpart
Partition name? []? p
File system type? [ext2]?
Start? 0
End? -1
(parted) p

Model: SMC SMC2108 (scsi)
Disk /dev/sdb: 14.0TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
1 17.4kB 14.0TB 14.0TB p

(parted) quit
Information: Don't forget to update /etc/fstab, if necessary.

什么是Ext4?
Ext4是一种针对ext3 系统的扩展日志式文件系统 , 是专门为 Linux 开发的原始的扩展文件系统(ext 或 extfs)的第四版。 Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能。

相对于Ext3,特点如下:
1. 与 Ext3 兼容。 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。
2. 更大的文件系统和更大的文件。 较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。
3. 无限数量的子目录。 Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。
4. Extents。 Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。
5. 多块分配。 当 写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
6. 延迟分配。 Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显着提升性能。
7. 快速 fsck。 以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。
8. 日志校验。 日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
9. “无日志”(No Journaling)模式。 日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
10. 在线碎片整理。 尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。
11. inode 相关特性。 Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes reservation)。
12. 持久预分配(Persistent preallocation)。 P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。
13. 默认启用 barrier。 磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 “mount -o barrier=0″ 命令禁用该特性。)

一、使用更新源的国内镜像

CentOS 安装完毕,首先应该修改更新源,并升级到最新的系统。
国内速度较快的常用更新源:

http://centos.ustc.edu.cn/centos/
http://mirrors.163.com/centos/
http://mirrors.sohu.com/centos/

首先备份CentOS-Base.repo,然后再编辑 yum 的配置文件:
[piaoyun@piaoyun-pc ~]$ sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
[piaoyun@piaoyun-pc ~]$ sudo vi /etc/yum.repos.d/CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
http://centos.ustc.edu.cn/centos/$releasever/os/$basearch/
http://mirrors.163.com/centos/$releasever/os/$basearch/
http://mirrors.sohu.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
http://centos.ustc.edu.cn/centos/$releasever/updates/$basearch/
http://mirrors.163.com/centos/$releasever/updates/$basearch/
http://mirrors.sohu.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever - Addons
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
http://centos.ustc.edu.cn/centos/$releasever/addons/$basearch/
http://mirrors.163.com/centos/$releasever/addons/$basearch/
http://mirrors.sohu.com/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
http://centos.ustc.edu.cn/centos/$releasever/extras/$basearch/
http://mirrors.163.com/centos/$releasever/extras/$basearch/
http://mirrors.sohu.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
http://centos.ustc.edu.cn/centos/$releasever/centosplus/$basearch/
http://mirrors.163.com/centos/$releasever/extras/$basearch/
http://mirrors.sohu.com/centos/$releasever/extras/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
http://ftp.sjtu.edu.cn/centos/$releasever/contrib/$basearch/
http://mirrors.163.com/centos/$releasever/extras/$basearch/
http://mirrors.sohu.com/centos/$releasever/extras/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

其中:
repositoryid:用于指定一个仓库
name:用于指定易读的仓库名称
baseurl:用于指定本仓库的URL,可以是以下的3种类型,如http,ftp,file
mirrorlist:用于指定仓库的镜像站点
enable:用于指定是否使用本仓库,默认值为1,即可用。
gpgcheck:用于指定是否检查软件包的GPG签名。
gpgkey:用于指定GPG签名文件的URL。

执行命令:
[piaoyun@piaoyun-pc ~]$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

二、使用非官方更新源

下面以安装rpmforge和DAG软件包为例添加非官方更新源

I、添加rmpforge软件库
1)到http://dag.wieers.com/rpm/packages/rpmforge-release/查找适用于RHEL5/CentOS5的软件包。

2)下载适用于RHEL5/CentOS5的软件包。
[piaoyun@piaoyun-pc ~]$ sudo wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
[piaoyun@piaoyun-pc ~]$ sudo rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
[piaoyun@piaoyun-pc ~]$ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-*

安装rpmforge-release软件包之后,就可以看到/etc/yum.repos.d/rpmforge.repo文件,以后yum就可以使用这个更新源了。

三、使用如下命令更新到最新系统:

yum check-update
yum -y update
yum upgrade

使用yum update更新时,默认会升级内核。但有些服务器硬件(特别是组装的机器)在升级内核后,新的内核可能会认不出某些硬件,要重新安装驱动,很麻烦。所以在生产环境中不要轻易的升级内核,除非你确定升级内核后不会出现麻烦的问题。

CentOS使用yum update升级时,默认包含升级内核!比如从CentOS 6.2升级到CentOS 6.4
如果不想升级内核而只更新其他软件包,有两种方法:
1、修改yum的配置文件 vim /etc/yum.conf,在[main]的最后添加

exclude=kernel* centos-release*

2、直接在yum的命令后面加上如下的参数:

yum --exclude=kernel* centos-release* update

四、安装必要的软件工具

yum -y install --skip-broken yum-fastestmirror build-essential gcc gcc-c++ bzip2 make vixie-cron flex ncurses-devel wget patch ntp libxml2 libxml2-devel libevent m4 autoconf zip unzip libjpeg libjpeg-devel gd gd-devel freetype freetype-devel libpng libpng-devel openssl openssl-devel file libtool libtool-libs libtool-ltdl-devel gmp-devel pspell-devel parted zlib mod_perl-devel ftp readline-devel apr apr-util curl-devel pam pam-devel lynx libmcrypt-devel libmhash-devel sudo glibc glibc-devel perl perl*

用户列表文件:/etc/passwd
用户组列表文件:/etc/group

查看系统中有哪些用户:cut -d : -f 1 /etc/passwd
查看可以登录系统的用户:cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1
查看用户操作:w命令(需要root权限)
查看某一用户:w 用户名
查看登录用户:who
查看用户登录历史记录:last