淡定在黑暗和黎明时分!!!
2008年一月
手工编译Apache2.0.55、mysql4.0.26、php5.2.5安装配置
一 30th
apache编译参数:./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-ssl
mysql编译参数:./configure --prefix=/usr/local/mysql --localstatedir=/var/db/mysql
php编译参数:./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --enable-force-cgi-redirect --disable-debug --with-pic --disable-rpath --enable-inline-optimization --with-bz2 --with-curl --with-exec-dir=/usr/bin --with-gd --enable-gd-native-ttf --with-ttf --with-gettext --with-ncurses --with-gmp --with-iconv --with-jpeg-dir --with-openssl --with-regex=system --enable-xml --with-zlib --with-layout=GNU --enable-bcmath --enable-exif --enable-ftp --enable-magic-quotes --enable-safe-mode --enable-sockets --enable-sysvsem --enable-sysvshm --enable-discard-path --enable-wddx --without-oci8 --enable-ucd-snmp-hack --enable-bcmath --enable-shmop --enable-calendar --enable-mbstring
详细安装配置如下:
Mysql安装配置如下:
1.tar -zxvf mysql.4.0.26.tar.gz
2.mkdir /var/db/mysql
chmod 0775 /var/db/mysql
chown mysql mysql
chgrp mysql mysql
2. ./configure –prefix=/usr/local/mysql –localstatedir=/var/db/mysql
make
make install
4. cd /usr/local/mysql/bin
./mysql_install_db –user=mysql & (安装初始化数据库和数据表)
./mysqld_safe –user=mysql &(来启动mysql数据库)
./mysql -uroot -p(初始化mysql登录密码为空,所以安全起尽要设置密码)
其设置密码有三种方法:
a. ./mysqladmin -u root -p oldpassword newpasswd(记住这个命令是在/usr/local/mysql/bin中外部命令)
b. SET PASSWORD FOR root=PASSWORD(‘new password’);(对登录数据库后这种方式)
c. UPDATE user SET password=PASSWORD(“new password”) WHERE user=’root’; (对登录数据库后这种方式)
最后一步也是就将mysql设置到服务器自动,以便于有什么问题服务器启动不需要去启动mysql,有两种方法:
1.vi /etc/rc.local 加入/usr/local/mysql/bin/mysqld_safe –user=mysql & 或是mysqld_safe –user=mysql &
2.将原来编译原文件目录中support-files/mysql.server文件复制到更名为/etc/init.d/mysql ]
chkconfig –add mysql 将服务加到服务后台中进行自启动
Apache安装配置:
1. tar -zxvf apache2.0.55.tar.gz
2. cd apache2.0.55
./configure –prefix=/usr/local/apache –enable-mods-shared=all –enable-ssl
make
make install
启动apache如下:
apachectl start
httpd -k start
上面两种都有可以的.现在我们做的就是把这个apache服务加入自启动服务中如下:
vi /etc/rc.local /usr/local/apache/bin/apachectl start
加入服务自身后台服务中进行自动启动其代码如下:
#!/bin/bash
# Startup script for the Apache Web Server
# chkconfig: - 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
/etc/rc.d/init.d/functions
/etc/sysconfig/network
[ "${NETWORKING}" = "no" ] && exit 0
APACHE=/usr/local/apache
start() {
echo $”Starting httpd service: ”
$APACHE/bin/apachectl start
RETVAL=$?
echo
}
stop() {
echo $”Stopping httpd service: ”
$APACHE/bin/apachectl stop
RETVAL=$?
echo
}
case “$1″ in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $”Usage: $0 start|stop|restart”
exit 1
esac
exit 0
复制上面一个代码到/etc/init.d/httpd 这个文件是新建,然后把chmod 0775 httpd和chmod 0775 /etc/sysconfig/network(这个文件可能不需要修改权限,和你自身服务器有关)
chkconfig –add httpd 加入台后服务已经成功
PHP安装和配置:
tar -zxvf php-5.2.5.tar.gz
./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache/bin/apxs –enable-force-cgi-redirect –disable-debug –with-pic –disable-rpath –enable-inline-optimization –with-bz2 –with-curl –with-exec-dir=/usr/bin –with-gd –enable-gd-native-ttf –with-ttf –with-gettext –with-ncurses –with-gmp –with-iconv –with-jpeg-dir –with-openssl –with-regex=system –enable-xml –with-zlib –with-layout=GNU –enable-bcmath –enable-exif –enable-ftp –enable-magic-quotes –enable-safe-mode –enable-sockets –enable-sysvsem –enable-sysvshm –enable-discard-path –enable-wddx –without-oci8 –enable-ucd-snmp-hack –enable-bcmath –enable-shmop –enable-calendar –enable-mbstring
make
make install
最后大家为了能方便使用一些命令就把设置环境变量:
export PATH=$PATH:/usr/local/mysql/bin
export PATH=$PATH:/usr/local/apache/bin
export PATH=$PATH:/usr/local/php/bin
linux中删除或是执行一个目录文件数量过大时怎么完成进行批量操作
一 30th
今天在删除一个cache文件在15000文件多时用rm -rf *会出现参数时长不能执行这个命令,后来找到以下的小技巧,问题解决了 find . -name “*” | xargs rm -rf ‘*’,希望能帮助到同样发生这个问题朋友们。还有另外一个实例好比: find . -name “test*” | xargs rm -rf “test*”这个意思也就是删除所有test开头字符。等等所有一些批量操作时,要是出现参数过长时,可采用这种方式,问题就可以解决了。
Nginx 0.5.35 + PHP 5.2.5(FastCGI)搭建胜过Apache 10倍的Web服务器
一 29th
在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx 0.5.33 + PHP 5.2.5 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。
做了一个测试:4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。也是一件比较苦恼事情,现在根据本人安装过程描述如下:
安装步骤:
(系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为Red Linux AS 4)一、获取相关开源程序:
1、下载程序源码包到当前目录:
本文中提到的所有开源软件为截止到2007年11月25日的最新稳定版。我将它们打了两个压缩包。第一个压缩包:nginx-php-1.zip
下载地址:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2746375第二个压缩包:nginx-php-2.zip
下载地址:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2746370附:各开源软件单独下载地址(如果下载了以上两个压缩包,则无需下载以下软件):
http://down.s135.com/linux/nginx-php/ (登录用户名、密码均为blog.s135.com)2、解压缩:
mkdir -p /data0/software
cd /data0/software
unzip nginx-php-1.zip
unzip nginx-php-2.zip
cd /data0/software/nginx-php
二、安装PHP 5.2.5(FastCGI模式)
1、编译安装PHP 5.2.5所需的支持库:
tar zxvf libiconv-1.11.tar.gz
cd libiconv-1.11/
./configure –prefix=/usr/local
make
make install
cd ../
tar zxvf freetype-2.3.5.tar.gz
cd freetype-2.3.5/
./configure
make
make install
cd ../
tar zxvf libpng-1.2.20.tar.gz
cd libpng-1.2.20/
./configure
make
make install
cd ../
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure –enable-static –enable-shared
make
make install
make install-lib
cd ../
tar zxvf libxml2-2.6.30.tar.gz
cd libxml2-2.6.30/
./configure
make
install
cd ../
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure –enable-ltdl-install
make
make install
cd ../../
tar zxvf mhash-0.9.9.tar.gz
cd mhash-0.9.9/
./configure
make
make install
cd ../
cp /usr/local/lib/libmcrypt.* /usr/lib
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
tar zxvf mcrypt-2.6.6.tar.gz
cd mcrypt-2.6.6/
./configure
make
make install
cd ../
2、编译安装MySQL 5.0.45/Mysql4.0.26(现在以mysql5为例)
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure –prefix=/usr/local/webserver/mysql/ –without-debug –with-unix-socket-path=/tmp/mysql.sock –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static –enable-assembler –with-extra-charsets=gbk,gb2312,utf8 –with-pthread –enable-thread-safe-client
make && make install
chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql
cp support-files/my-medium.cnf /usr/local/webserver/mysql/my.cnf
cd ../
附:以下为附加步骤,如果你想在这台服务器上运行MySQL数据库,则执行以下两步。如果你只是希望让PHP支持MySQL扩展库,能够连接其他服务器上的MySQL数据库,那么,以下两步无需执行。
①、以mysql用户帐号的身份建立数据表:
/usr/local/webserver/mysql/bin/mysql_install_db –defaults-file=/usr/local/webserver/mysql/my.cnf –basedir=/usr/local/webserver/mysql –datadir=/usr/local/webserver/mysql/data –user=mysql –pid-file=/usr/local/webserver/mysql/mysql.pid –skip-locking –port=3306 –socket=/tmp/mysql.sock
②、启动MySQL(最后的&表示在后台运行)
/bin/sh /usr/local/webserver/mysql/bin/mysqld_safe –defaults-file=/usr/local/webserver/mysql/my.cnf &
3、编译安装PHP(FastCGI模式)
tar zxvf php-5.2.5.tar.gz
cd php-5.2.5/
./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –with-mysql=/usr/local/mysql –enable-force-cgi-redirect –disable-debug –enable-pic –disable-rpath –enable-inline-optimization –with-bz2 –with-curl –with-exec-dir=/usr/bin –with-gd –enable-gd-native-ttf –with-ttf –with-gettext –with-ncurses –with-gmp –with-iconv –with-jpeg-dir –with-openssl –with-png –with-regex=system –with-xml –with-zlib –with-layout=GNU –enable-bcmath –enable-exif –enable-ftp –enable-magic-quotes –enable-safe-mode –enable-sockets –enable-sysvsem –enable-sysvshm –enable-discard-path –enable-track-vars –enable-trans-sid –enable-yp –enable-wddx –without-oci8 –enable-ucd-snmp-hack –enable-memory-limit –enable-bcmath –enable-shmop –enable-versioning –enable-calendar –enable-dbx –enable-dio –enable-mcal –enable-mbstring –enable-fastcgi
make
make install
cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../
4、编译安装PHP5扩展模块
tar zxvf memcache-2.2.1.tgz
cd memcache-2.2.1/
/usr/local/webserver/php/bin/phpize
./configure –with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
cd php-5.2.5/ext/gd/
/usr/local/webserver/php/bin/phpize
./configure –with-jpeg-dir –with-png-dir –with-zlib-dir –with-ttf –with-freetype-dir –with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../../../
5、修改php.ini文件
手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = “./”
修改为extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/”
并在此行后增加以下几行,然后保存:
extension = “memcache.so”
extension = “gd.so”
自动修改:若嫌手工修改麻烦,可执行以下shell命令,自动完成对php.ini文件的修改:
sed -i ’s#extension_dir = “./”#extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/”\nextension = “memcache.so”\nextension = “gd.so”\n#’ /usr/local/webserver/php/etc/php.ini
6、创建www用户和组,以及其使用的目录:
/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /data0/vshare/htdocs
chmod +w /data0/vshare/htdocs
chown -R www:www /data0/vshare/htdocs
7、安装lighttpd中附带的spawn-fcgi,用来启动php-cgi
注:压缩包中的spawn-fcgi程序为已经编译成二进制的版本。
cp spawn-fcgi /usr/local/webserver/php/bin
chmod +x /usr/local/webserver/php/bin/spawn-fcgi
8、启动php-cgi进程,监听127.0.0.1的10080端口,进程数为64(如果服务器内存小于3GB,可以只开启25个进程),用户为www:
/usr/local/webserver/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u www -f /usr/local/webserver/php/bin/php-cgi
三、安装Nginx 0.5.33
1、安装Nginx所需的pcre库:
tar zxvf pcre-7.2.tar.gz
cd pcre-7.2/
./configure
make && make install
cd ../
2、安装Nginx
tar zxvf nginx-0.5.33.tar.gz
cd nginx-0.5.33/
./configure –user=www –group=www –prefix=/usr/local/webserver/nginx –with-http_stub_status_module
make && make install
cd ../
3、创建Nginx日志目录
mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs
4、创建Nginx配置文件
①、在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件:
rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf
输入以下内容:
引用
user www www;
worker_processes 10;
error_log /data1/logs/nginx_error.log crit;
#pid logs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
http
{
include conf/mime.types;
default_type application/octet-stream;
charset gb2312;
server_names_hash_bucket_size 128;
#sendfile on;
#tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
server
{
listen 80;
server_name blog.s135.com;
index index.html index.htm index.php;
root /data0/vshare/htdocs;
if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
location ~ .*\.php?$
{
include conf/fcgi.conf;
fastcgi_pass 127.0.0.1:10080;
fastcgi_index index.php;
}
log_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’;
access_log /data1/logs/access.log access;
}
server
{
listen 80;
server_name status.blog.s135.com;
location / {
stub_status on;
access_log off;
}
}
}
②、在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件:
vi /usr/local/webserver/nginx/conf/fcgi.conf
输入以下内容:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with –enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;
5、启动Nginx
ulimit -SHn 51200
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf
四、配置开机自动启动Nginx + PHP
vi /etc/rc.local
在末尾增加以下内容:
ulimit -SHn 51200
/usr/local/webserver/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u www -f /usr/local/webserver/php/bin/php-cgi
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf
五、优化Linux内核参数
vi /etc/sysctl.conf
在末尾增加以下内容:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
使配置立即生效:
/sbin/sysctl -p
六、在不停止Nginx服务的情况下平滑变更Nginx配置
(1)、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
/usr/local/webserver/nginx/sbin/nginx -t
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully
(2)、这时,输入以下命令查看Nginx主进程号:
ps -ef | grep “nginx: master process” | grep -v “grep” | awk -F ‘ ‘ ‘{print $2}’
屏幕显示的即为Nginx主进程号,例如:
6302
这时,执行以下命令即可使修改过的Nginx配置文件生效:
kill -HUP 6302
Nginx安装和配置
一 26th
Nginx 使用 Unix 下常用的 ‘./configure && make && make install’ 过程来编译安装。
configure 脚本确定系统所具有一些特性,特别是 nginx 用来处理连接的方法。然后,它创建 Makefile 文件。
configure 支持下面的选项:
–prefix=<path> – Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。
–sbin-path=<path> – Nginx可执行文件安装路径。只能安装时指定,如果没有指定,默认为<prefix>/sbin/nginx。
–conf-path=<path> – 在没有给定-c选项下默认的nginx.conf的路径。如果没有指定,默认为<prefix>/conf/nginx.conf。
–pid-path=<path> – 在nginx.conf中没有指定pid指令的情况下,默认的nginx.pid的路径。如果没有指定,默认为 <prefix>/logs/nginx.pid。
–lock-path=<path> – nginx.lock文件的路径。
–error-log-path=<path> – 在nginx.conf中没有指定error_log指令的情况下,默认的错误日志的路径。如果没有指定,默认为 <prefix>/logs/error.log。
–http-log-path=<path> – 在nginx.conf中没有指定access_log指令的情况下,默认的访问日志的路径。如果没有指定,默认为 <prefix>/logs/access.log。
–user=<user> – 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。
–group=<group> – 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。
–builddir=DIR – 指定编译的目录
–with-rtsig_module – 启用 rtsig 模块
–with-select_module –without-select_module – Whether or not to enable the select module. This module is enabled by default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure.
//允许或不允许开启SELECT模式,如果 configure 没有找到更合适的模式,比如:kqueue(sun os),epoll (linux kenel 2.6+), rtsig(实时信号)或者/dev/poll(一种类似select的模式,底层实现与SELECT基本相 同,都是采用轮训方法) SELECT模式将是默认安装模式
–with-poll_module –without-poll_module – Whether or not to enable the poll module. This module is enabled by default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure.
–with-http_ssl_module – Enable ngx_http_ssl_module. Enables SSL support and the ability to handle HTTPS requests. Requires OpenSSL. On Debian, this is libssl-dev.
//开启HTTP SSL模块,使NGINX可以支持HTTPS请求。这个模块需要已经安装了OPENSSL,在DEBIAN上是libssl
–with-http_realip_module – 启用 ngx_http_realip_module
–with-http_addition_module – 启用 ngx_http_addition_module
–with-http_sub_module – 启用 ngx_http_sub_module
–with-http_dav_module – 启用 ngx_http_dav_module
–with-http_flv_module – 启用 ngx_http_flv_module
–with-http_stub_status_module – 启用 “server status” 页
–without-http_charset_module – 禁用 ngx_http_charset_module
–without-http_gzip_module – 禁用 ngx_http_gzip_module. 如果启用,需要 zlib 。
–without-http_ssi_module – 禁用 ngx_http_ssi_module
–without-http_userid_module – 禁用 ngx_http_userid_module
–without-http_access_module – 禁用 ngx_http_access_module
–without-http_auth_basic_module – 禁用 ngx_http_auth_basic_module
–without-http_autoindex_module – 禁用 ngx_http_autoindex_module
–without-http_geo_module – 禁用 ngx_http_geo_module
–without-http_map_module – 禁用 ngx_http_map_module
–without-http_referer_module – 禁用 ngx_http_referer_module
–without-http_rewrite_module – 禁用 ngx_http_rewrite_module. 如果启用需要 PCRE 。
–without-http_proxy_module – 禁用 ngx_http_proxy_module
–without-http_fastcgi_module – 禁用 ngx_http_fastcgi_module
–without-http_memcached_module – 禁用 ngx_http_memcached_module
–without-http_limit_zone_module – 禁用 ngx_http_limit_zone_module
–without-http_empty_gif_module – 禁用 ngx_http_empty_gif_module
–without-http_browser_module – 禁用 ngx_http_browser_module
–without-http_upstream_ip_hash_module – 禁用 ngx_http_upstream_ip_hash_module
–with-http_perl_module – 启用 ngx_http_perl_module
–with-perl_modules_path=PATH – 指定 perl 模块的路径
–with-perl=PATH – 指定 perl 执行文件的路径
–http-log-path=PATH – Set path to the http access log
–http-client-body-temp-path=PATH – Set path to the http client request body temporary files
–http-proxy-temp-path=PATH – Set path to the http proxy temporary files
–http-fastcgi-temp-path=PATH – Set path to the http fastcgi temporary files
–without-http – 禁用 HTTP server
–with-mail – 启用 IMAP4/POP3/SMTP 代理模块
–with-mail_ssl_module – 启用 ngx_mail_ssl_module
–with-cc=PATH – 指定 C 编译器的路径
–with-cpp=PATH – 指定 C 预处理器的路径
–with-cc-opt=OPTIONS – Additional parameters which will be added to the variable CFLAGS. With the use of the system library PCRE in FreeBSD, it is necessary to indicate –with-cc-opt=”-I /usr/local/include”. If we are using select() and it is necessary to increase the number of file descriptors, then this also can be assigned here: –with-cc-opt=”-D FD_SETSIZE=2048″.
–with-ld-opt=OPTIONS – Additional parameters passed to the linker. With the use of the system library PCRE in FreeBSD, it is necessary to indicate –with-ld-opt=”-L /usr/local/lib”.
–with-cpu-opt=CPU – 为特定的 CPU 编译,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
–without-pcre – 禁止 PCRE 库的使用。同时也会禁止 HTTP rewrite 模块。在 “location” 配置指令中的正则表达式也需要 PCRE 。
–with-pcre=DIR – 指定 PCRE 库的源代码的路径。
–with-pcre-opt=OPTIONS – Set additional options for PCRE building.
–with-md5=DIR – Set path to md5 library sources.
–with-md5-opt=OPTIONS – Set additional options for md5 building.
–with-md5-asm – Use md5 assembler sources.
–with-sha1=DIR – Set path to sha1 library sources.
–with-sha1-opt=OPTIONS – Set additional options for sha1 building.
–with-sha1-asm – Use sha1 assembler sources.
–with-zlib=DIR – Set path to zlib library sources.
–with-zlib-opt=OPTIONS – Set additional options for zlib building.
–with-zlib-asm=CPU – Use zlib assembler sources optimized for specified CPU, valid values are: pentium, pentiumpro
–with-openssl=DIR – Set path to OpenSSL library sources
–with-openssl-opt=OPTIONS – Set additional options for OpenSSL building
–with-debug – 启用调试日志
–add-module=PATH – Add in a third-party module found in directory PATH
在不同版本间,选项可能会有些许变化,请总是使用 ./configure –help 命令来检查一下当前的选项列表。
示例 (最好能在同一行):
./configure \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=../pcre-4.4 \
--with-zlib=../zlib-1.1.3
Example on Ubuntu/debian with libgcrypt11-dev, libpcre3-dev and libssl-dev installed (choose EITHER –with-md5 OR –with-sha1, but not both; on debian and ubuntu, they should both point to /usr/lib)
./configure --with-openssl=/usr/lib/ssl/ --with-md5=/usr/lib
选项
-c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。
-t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
-v 显示 nginx 的版本。
-V 显示 nginx 的版本,编译器版本和配置参数。
示例
/usr/bin/nginx -t -c ~/mynginx.conf
通过系统的信号控制 Nginx
可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /usr/local/nginx/logs/nginx.pid 文件中。通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。
主进程可以处理以下的信号:
|
TERM, INT |
快速关闭 |
|
QUIT |
从容关闭 |
|
HUP |
重载配置 |
|
USR1 |
重新打开日志文件 |
|
USR2 |
平滑升级可执行程序。 |
|
WINCH |
从容关闭工作进程 |
尽管你不必自己操作工作进程,但是,它们也支持一些信号:
|
TERM, INT |
快速关闭 |
|
QUIT |
从容关闭 |
|
USR1 |
重新打开日志文件 |
使用信号加载新的配置
Nginx 支持几个信号,能在它运行时控制其操作。其中最普通的是 15 ,用来中止运行的进程:
# ps aux | egrep '(PID|nginx)' USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 2213 0.0 0.0 6784 2036 ? Ss 03:01 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf # kill -15 2213
而最有趣的是能平滑改变 nginx 配置的选项(请注意,在重载前,要先测试一下配置文件):
# nginx -t -c /etc/nginx/nginx.conf 2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok 2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully # ps aux | egrep '(PID|nginx)' USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 2213 0.0 0.0 6784 2036 ? Ss 03:01 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf # kill -HUP 2213
当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),成功的话,就应用新的配置文件(例如:重新打开日志文件或监听的套接 字)。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。 如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。
RequestForReviewCategory — (Request For Review: Just What Happens With The Worker Processes at a HUP? -Olle)
平滑升级到新的二进制代码
你可以在不中断服务的情况下 – 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。
首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。主进程将重命名它的 .pid 文件为 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的可执行程序,依次启动新的主进程和新的工作进程:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx) 33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx) 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
在这时,两个 nginx 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 33135 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx) 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了:
PID PPID USER %CPU VSZ WCHAN COMMAND 33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx 36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx 36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx) 36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以恢复旧的服务器:
- 发送 HUP 信号给旧的主进程 – 它将在不重载配置文件的情况下启动它的工作进程
- 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
- 发送 TERM 信号给新的主进程,迫使其退出
- 如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号
新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切就都恢复到升级之前了。
如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:
PID PPID USER %CPU VSZ WCHAN COMMAND
36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
hash表
Ngnix使用hash表来协助完成请求的快速处理。
考虑到保存键及其值的hash表存储单元的大小不至于超出设定参数(hash bucket size), 在启动和每次重新配置时,Nginx为hash表选择尽可能小的尺寸。
直到hash表超过参数(hash max size)的大小才重新进行选择. 对于大多数hash表都有指令来修改这些参数。例如,保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所 控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果 hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.
事件模型
Nginx支持如下处理连接的方法(I/O复用方法),这些方法可以通过use指令指定。
-
select – 标准方法。 如果当前平台没有更有效的方法,它是编译时默认的方法。你可以使用配置参数 --with-select_module 和 --without-select_module 来启用或禁用这个模块。
-
poll – 标准方法。 如果当前平台没有更有效的方法,它是编译时默认的方法。你可以使用配置参数 --with-poll_module 和 --without-poll_module 来启用或禁用这个模块。
-
kqueue – 高效的方法,使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
-
epoll – 高效的方法,使用于Linux内核2.6版本及以后的系统。在某些发行版本中,如SuSE 8.2, 有让2.4版本的内核支持epoll的补丁。
-
rtsig – 可执行的实时信号,使用于Linux内核版本2.2.19以后的系统。默认情况下整个系统中不能出现大于1024个POSIX实时(排队)信号。这种情况对于高负载的服务器来说是低效的;所以有必要通过调节内核参数 /proc/sys/kernel/rtsig-max 来增加队列的大小。可是从Linux内核版本2.6.6-mm2开始, 这个参数就不再使用了,并且对于每个进程有一个独立的信号队列,这个队列的大小可以用 RLIMIT_SIGPENDING 参数调节。当这个队列过于拥塞,nginx就放弃它并且开始使用 poll 方法来处理连接直到恢复正常。
-
/dev/poll – 高效的方法,使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+.
-
eventport – 高效的方法,使用于 Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装 这个 安全补丁。
Nginx服务器
一 26th
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。
因为 Nginx 的文档大部分是俄文的,本维基的目的是帮助使用中文世界的用户安装、配置和交换有关 Nginx 的使用经验。大部分文档源自Aleksandar Lazic <al-nginx AT none DOT at>的工作。有关本维基本身的问题请直接询问Cliff Wells <cliff AT develix DOT com>。
其他翻译请点击。
Nginx 新闻
-
Nginx 0.5.35(稳定版)发布(更新记录)(2008年1月9日) -
Nginx 0.6.25(开发版)发布(更新记录)(2008年1月9日) -
Evan Miller 的 Nginx 模块开发指南 的首个草稿发布了。
他创建的 cross-reference 。 -
TorrentReactor 使用 Nginx。
- 万一你没有立刻注意到,提醒下,维基使用了新主题。
- 因为最经的一些垃圾信息,现在必须注册一个帐户才能编辑该维基。不便之处,多多包涵。不过,这对于将这些垃圾信息抑制在萌芽状态的最好方法。
主要文档
核心模块
基本模块
其他模块
第三方模块
配置示例和方法
社团
-
IRC: #nginx on irc.freenode.net (log archives)
外部资源
-
Evan Miller’s Guide to Nginx Module Development
-
Nginx (draft English docs by Aleksandar Lazic) is now integrated into this wiki
-
Nginx 0.5.33 + PHP 5.2.5(FastCGI) 搭建可承受3万并发连接数,胜过Apache 10倍的Web服务器
-
Nginx, PHP and a PHP FastCGI daemon init script (with init script for PHP FastCGI)
UNIX常用命令介绍
一 22nd
UNIX常用命令介绍
下面主要讲解UNIX下基本命令的使用,由于时间和篇幅的原因,无法写出所有UNIX命令。你在使用这里没有列出的命令时,可以使用“–help”参数查询该命令所附的帮助.比如: ls -help将显示ls命令的详细信息.同时,你也可以利用man来查询更详细的使用说明。直接敲入man将显示所有命令的信息.如果你只想看一个命令的信息就用如下格式 man < 命令名>
比如在UNIX系统中敲入man ls将显示ls的详细信息. 按q键退出man界面.
如下命令介绍按字母顺序排列:
命令:at
介绍:at, batch, atq, atrm:安排,检查,删除队列中的工作。
at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间
at -c 作业 [作业...]
atq [-V] [-q 队列] [-v]
atrm [-V] 作业 [作业...]
batch [-V] [-q 队列] [-f 文件名] [-mv] [时间]
at 在设定的时间执行作业。
atq 列出用户排在队列中的作业,如果是超级用户,则列出队列中的所有工作。
atrm 删除队列中的作业。
batch 用低优先级运行作业,只要系统的loadavg(系统平均负载)<1.5(或者在atrun中设定的值)它就开始执行作业。
超级用户可以在任何情况下使用at系列的命令。
一般用户使用at系列命令的权利由文件 /etc/at.allow,/etc/at.deny控制。
如果/etc/at.allow存在,则只有列在这个文件中的用户才能使用at系列的命令。
如果/etc/at.allow文件不存在,则检查文件/etc/at.deny这个文件。 只要不列在这个文件中的用户都可以使用at系列的命令。
缺省的配置是/etc/at.deny为一个空文件,这表明所有的用户都可以使用at系列的命令。
范例:
at -f work 4pm + 3 days 在三天后下午4点执行文件work中的作业。
at -f work 10am Jul 31 在七月31日上午10点执行文件work中的作业。
命令:bash
介绍:bash – GNU Bourne-Again SHell 自由软件基金会(Free Software Foundation Inc)拥有bash版权。 bash是Linux下的许多命令解释器中的一个,同sh兼容,并且包含了ksh和csh中一些有用的特性。遵从IEEE Posix Shell and Tools specification (IEEE Working Group 1003.2)。
命令:cat
介绍:cat – 连接文件并打印到标准输出。 cat是CATenate的缩写,常常用来显示文件,类似于DOS下的TYPE命令。
范例:
[root@abc.com /]# cat -b -E .lessrc 显示文件.lessrc的内容
1 back-line $$
3 forw-scroll$
4 back-scroll $
5 goto-line$
6 goto-end$
[root@abc.com /]# cat myfile1 myfile2 >tmp 将文件myfile1,myfile2 连结起来输出到文件tmp
命令:cd
介绍:cd – 改变当前目录。
cd 目录名 如果不加目录名,则回到用户的根目录,此外用户必须拥有读该目录的权限。
进入另外一个用户的目录只要 cd ~用户名即可。
范例:
abc:/tmp> cd id1 进入id1目录
abc:/tmp/id1>cd ~lion 进入用户lion的目录
abc:~lion>
命令:chgrp
介绍:chgrp – 改变文件的组。 要改变到的组可以是组号对应的数字;也可以是/etc/group文件中的组名。 文件名:空格分开的要改变组所有权的文件列表,支持通配符。 如果用户不是该文件的属主或超级用户,则不能改变该文件的组。
范例
[root@abc.com /]# chgrp -R book /opt/local/book/*.*
改变/opt/local/book/及其子目录下的所有文件的组为book。
命令:chmod
介绍:chmod -改变文件保护,文件保护控制用户对文件的访问权,
有三个安全级别:所有者级别,组访问级别,其他用户访问级别,
在这三个级别中,又有三种权限:读(r),写(w),执行(x)。
(用户可以 ls -lg来观看某一文件的所属的group)
对于文件来说读权限意味着可以看文件的内容,写文件权可以修改或删除文件,执行权限则可以执行它 (类似于DOS 下的EXE,COM,BAT文件)。对于目录来说,读权限意味着可以查看目录下的内容,写权限意味着能在目录下建立新文件,并可以从目录中删除文件,执行权限意味着可以从一个目录转变到另一个目录。
保护权限 : 格式为[ugoa...][[+-=][rwxXstugo...]…][,...] “ugoa”控制哪些用户对该文件的权限将被改变:
(u)文件的所有者,
(g)与文件所有者同组的用户
(o)其他组的用户
(a)所有用户,操作符 “+”使得用户选择的权限被追加到每个目标文件。操作符 “-”使得这些权限被撤销。 “=”使得目标文件只具有这些权限。 “rwxXstugo”选择新的属性。
(r)读权限
(w)写权限
(x)执行权(或对目录的访问权)
(X)只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性
(s)同时设定用户或组ID
(t)保存程序的文本到交换设备上
(u)目标文件属主
(g)目标文件属主所在的组
(o)其他用户。
如果用数字来表示属性,则
(0)没有权限,
(1)执行权,
(2)读权,
(4)写权,
然后将其相加,所以数字属性的格式应为3个从0到7的八进制数其顺序是(u)(g)(o)。
文件名:空格分开的要改变权限的文件列表,支持通配符。
范例:
abc~>chmod a+x destfile 使所有用户对文件destfile有读写执行权。
abc~>chmod 644 destfile 使所有用户可以读文件destfile只有属主才能 改变。
命令:chown
介绍:chown – 改变文件的属主和组。
用户: 可以是用户名或用户id。
组: 可以是组名或组的id。
文件名 : 以空格分开的要改变权限的文件列表,支持通配符。
范例:
abc~>chown tlc:book destfile 将文件destfile的属主改成tlc组改成book。
命令:chsh
介绍:chsh 改变用户登录的shell。
chsh [-s 登录的shell] [用户名]
普通用户可以改变自己的登录shell,超级用户可以改变其他用户的登录shell,所有的shell 必须是在/etc/shells文件中列出的sahell ,但是超级用户不受这个限制。如果用户的shell是一个受限制的shell则用户不能改变其登录shell。如果不加-s参数则chsh输出用户的当前登录shell并提示用户输入新shell的路径。 改变shell时都需要输入用户的密码。
范例:
[root@abc.com /]# chsh
Password: *****
Changing the login shell for tlc Enter the new value, or press return for the default Login Shell
[/bin/csh]: /bin/tcsh
[root@abc.com /]#
命令:clear
介绍:clear – 清除屏幕(类似于DOS的cls)
范例:
abc~>clear 清除屏幕,提示符被移动到左上角。
命令:cp
介绍:cp – 拷贝文件。
cp [options] 源文件 目标文件
cp [options] 源文件… 目标目录
-f, –force : 删除已存在的目标文件。
-i, –interactive : 在删除已存在的目标文件时给出提示。
-R, –recursive 整目录拷贝。
–help 在标准输出上输出帮助信息并退出。
–version 在标准输出上输出版本信息并退出。
范例:
[root@abc.com /]# cp sourcefile destfile
拷贝文件sourcefile到文件destfile。
[root@abc.com /]# cp * /tmp
拷贝当前目录下所有文件到/tmp目录。
命令:crontab
介绍:crontab – 操作每个用户的守护程序和该执行的时间表。
crontab file [-u user] – 用指定的文件替代目前的crontab。
crontab – [-u user] – 用标准输入替代目前的crontab。
crontab -l [user] – 列出用户目前的crontab。
crontab -e [user] – 编辑用户目前的crontab。
crontab -d [user] – 删除用户目前的crontab。
crontab -c dir – 指定crontab的目录。
crontab文件的格式:M H D m d cmd
M : 分钟(0-59)
H : 小时(0-23)
D : 天(1-31)
m : 月(1-12)
d : 一星期内的天(0-6,0为星期天)
cmd: 要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量。
下面是一个例子文件:
# MIN HOUR DAY MONTH DAYOFWEEK COMMAND
# 每天早上6点
10 6 * * * date
# 每两个小时
0 */2 * * * date
# 晚上11点到早上8点之间每两个小时,早上部点
0 23-7/2,8 * * * date
# 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date
# 1月份日早上4点
0 4 1 jan * date
范例:
[root@abc.com /]# crontab -l
列出用户目前的crontab。
# MIN HOUR DAY MONTH DAYOFWEEK COMMAND
10 6 * * * date
0 */2 * * * date
0 23-7/2,8 * * * date
(通常,在放后门时,我们可以利用这个文件使机器在特定的时间运行我们的后门程序.:)
命令:date
介绍:date – 打印或设置系统日期和时间。
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
+FORMAT :控制如何显示日期
指令:
% : %号
n : 新行
t : TAB
时间域:
%H 小时 (00..23)
%I 小时 (01..12)
%k 小时 ( 0..23)
%l 小时 ( 1..12)
%M 分钟 (00..59)
%p AM 或 PM
%r 12小时 (hh:mm:ss [AP]M)
%s 从1970-01-01 00:00:00 UTC 开始的时间
%S 秒 (00..61)
%T 24小时 (hh:mm:ss)
%X 时间表示 (%H:%M:%S)
%Z 时区(如EDT)如没有指定时区则不显示
日期域:
%a 缩写形式的星期名 (Sun..Sat)
%A 星期名(Sunday..Saturday)
%b 缩写形式的月名 (Jan..Dec)
%B 月名 (January..December)
%c 日期和时间 (Sat Nov 0:02:33 EST 1989)
%d 每个月的第几天 (01..31)
%D 日期 (mm/dd/yy)
%h 等同于 %b
%j 一年的第几天 (001..366)
%m 月份 (01..12)
%U 一年中的第几个星期,星期天为星期的第一天 (00..53)
%w 每个星期的第几天(0..6) 0为星期天
%W 一年中的第几个星期,星期一为星期的第一天 (00..53 (00..53)
%x 日期 (mm/dd/yy)
%y 年份的后两个数字 (00..99)
%Y 年份 (1970…)
[MMDDhhmm[[CC]YY][.ss]
MM 月份
DD 日期
hh 小时
mm 分钟
CC 年份的前两位 (可选项)
YY 年份的后两位 (可选项)
ss 秒 (可选项)
只有超级用户才有权限设置系统时间(启动时在CMOS中读出)。
-d datestr, –date dates : 显示datestr中指定的日期和时间。
-s datestr, –set datestr : 设定datestr中指定的日期和时间。
-u, –universal : 显示或设定格林威治时间(缺省为本地时间)。
–help : 在标准输出上输出帮助信息并退出。
–version : 在标准输出上输出版本信息并退出。
范例:
印两天前的时间:
[root@abc.com /]# date –date ‘2 days ago’ Fri Aug 22 20:20:08 CDT 1997
打印月份和日期:
[root@abc.com /]# date ‘+%B %d’ August 24
命令:echo
介绍:echo 是用来显示一字串在终端机上。
echo -n 则是当显示完之後不会有跳行的动作。
命令:exit
介绍:exit 用来退出上次的登陆.
命令:file
介绍:file – 探测文件类型。
范例:
abc:/tmp> file *
destfile: ASCII text
elm.rc.OLD: English text
portnum: empty
rc.inet1.OLD: Bourne shell script text
命令:find
介绍:find – 用来在大量目录中搜寻特定文件的强有力的工具。
find [路径...] [匹配表达式]
范例:
abc:/> find ./ -name “passwd” -print
./usr/bin/passwd
./home/ftp/etc/passwd
./etc/passwd
可以找出当前目录下所有文件名为passwd的文件.包括子目录下的. 这个命令的功能是非常强大的.更详细的内容请看帮助.
命令:finger
介绍:finger – 查询本机或其他机器上的用户信息,
用法: finger 用户名(本机) 或finger 用户名@ip。
在大多机器上我们可以用
finger @ip
得到目标主机当前登陆的用户.
finger 0@ip
得到目标主机的详细用户信息. 这个命令用来给你获得第一个帐号是很容易的.
命令:ftp
介绍:ftp hostname
具体参数情况请看联盟主页里的ftp使用.或者我以前的教程.
命令:telnet
介绍:ftp hostname [port]
具体参数情况请看联盟主页里的telnet使用.或者我以前的教程.
命令:traceroute
介绍:traceroute targethost
此命令必须由root以 /usr/sbin/traceroute 节点名方式运行此命令将显示到达远端机器所经过的路由
命令:grep
介绍:grep, egrep, fgrep – 在文件中搜寻匹配的行并输出。
范例:
在文件services中查找含有ftp的行。
abc:/etc> grep ftp services
ftp 21/tcp
tftp 69/udp
sftp 115/tcp
命令:gzip
介绍:gzip, gunzip, zcat – 压缩或展开文件。
范例:
[root@abc.com /]# gzip -v sourcefile
sourcefile: 15.2% — replaced with sourcefile.gz
命令:head
介绍:head – 显示文件的前几行。
范例: 输出文件.lessrc的第一行。
[root@abc.com /]# head -n 1 .lessrc
forw-line
命令:kill
介绍:kill – 中止一个进程
kill [ -s 信号 -p ] [ -a ] 进程号 …
kill -l [ 信号 ]
kill向指定的进程发出特定的信号,如果没有指定信号则送出TERM信号,TERM信号将杀死没有捕捉到这个信号的进程。
对于某些进程可能要使用KILL (9)信号强制杀死。
例如: kill -9 11721。将强制杀死进程11721。
大多数SHELL内建kill命令
范例: 杀掉进程11721
[root@abc.com /]# ps
PID TTY STAT TIME COMMAND
11668 p1 S 0:00 -tcsh
11721 p1 T 0:00 cat
11737 p1 R 0:00 ps
[root@abc.com /]# kill 11721
[1] Terminated cat
命令:last
介绍:last – 显示过去多少个用户或终端登录到本机器。
last [-数目] [-f 文件名] [-t tty] [-h 节点名] [-i IP地址] [-l] [-y] [用户名...]
范例: 显示过去3次用户fangh登录的情况:
[root@abc.com /]# last -3 fangh
fangh ttyp1 csun01.ihep.ac.c Tue Aug 26 18:46 still logged in
fangh ttyp2 csun01.ihep.ac.c Mon Aug 25 22:32 – 23:14 (00:41)
fangh ttyp2 csun01.ihep.ac.c Mon Aug 25 19:58 – 21:59 (02:01)
命令:less
介绍:less – 相对于more,用来按页显示文件。
范例:显示test文件
[root@abc.com /]# less test
命令:ln
介绍:ln – 在文件间建立连接
ln [参数] 源文件 [目标文件] ln [参数] 源文件… directory
另外对链接文件做改变属性的动作是没有意义的,因为只有它们链接到的文件的属性才是文件的真正属性。
范例:
将文件sourcefile连接到文件test
[root@abc.com /]# ln -s sourcefile test
[root@abc.com /]# ls -la
test lrwxrwxrwx 1 fangh users 10 Aug 26 20:36 test -> sourcefile
命令:ls
介绍:ls, dir, vdir – 列出目录下的文件 (类似于DOS下的DIR命令)。
范例:列出当前目录下的所有文件
[root@abc.com /]# ls -la
total 6
drwxr-x— 2 fangh users 1026 20:52 ./
drwxr-xr-x 19 root root 1026 21:09 ../
-rw-r–r– 1 fangh users 15 Aug 21 21:57 .bash_history
-rw-r–r– 1 fangh users 30 20:41 .less
-rw-r–r– 1 fangh users 115 19:58 .lessrc
-rw-r–r– 1 fangh users 72 Aug 24 18:43 sourcefile
lrwxrwxrwx 1 fangh users 10 Aug 26 20:36 test -> sourcefile
命令:mail,elm
介绍:可经由此程序将信件 mail 给他人。
使用方式: mail [username]
mail -f mailboxfile 如有信件,则直接键入 mail 可以读取你的 mail
例子:
mail -s “shadow” root@abc.com < /etc/shadow
elm 提供较 mail 更为方便的介面,而且可做线上的 alias .
你可以进入 elm 使用上下左右键来选读取的信件,并可按 h 取得线上的 help 文件。
使用方式: elm [usernmae] elm -f mailboxfile
命令:man
介绍:man - 显示具有一定格式的在线手册。
man 对于新手和老手来说都是非常有用的一个工具,用来快速查询命令和程序的使用方法和参数。
编程人员也可以用来查询C函数的用法。对于'rn(1)' 或 'ctime(3)'这样的输出,其中括弧中的数字是指 Unix 手册中该文件所在的章节。当你打 man 3 ctime 时, 表示是要查 阅在第 3 节中的 ctime 的内容。下面是常见的Unix手册的分类:
1 用户命令
2 系统调用
3 库函数
4 设备和设备驱动程序
5 文件格式
6 游戏
7 有用的杂类,如宏命令包
8 系统维护和管理命令
范例: 查询ls的用法 abc~>man ls
命令:mtools
介绍:mtools – 用来在UNIX下访问DOS下磁盘的工具包。
工具介绍
mcd – 进入DOS子目录。
mcopy – 拷贝DOS文件。
mdel – 删除DOS文件。
mdeltree – 删除DOS目录。
mdir – 查看DOS目录。
mformat – 格式化DOS磁盘
mkmanifest – 创建一个恢复UNIX格式的文件名的SHELL
mlabel – 给DOS磁盘加卷标
mmd – 创建DOS目录。
mmove – 移动DOS下的文件。
mmount – mount DOS磁盘。
mtype – 显示DOS下的文件。
mrd – 删除DOS下的目录。
mren – 将DOS下的文件改名。
命令:mkdir
介绍:mkdir – 建立目录(同DOS下的md)。
命令:more
介绍:more – 在终端上按页观看文件的过滤器。
more的功能没有less那么强大。
而且less还提供了对more的模拟,不过一般用户可能更习惯于使用同DOS环境下相似的more。
范例:
显示文件/etc/group 并搜寻字符串bbs
[root@abc.com /]# more +/bbs /etc/group
…skipping
users::100:games
nogroup::-2:
bbs:x:99:bbs,bbsroot,bbsuser
命令:mv
介绍:mv – 将文件改名。
mv [参数] 源文件 目标文件
mv [参数] 源文件列表(支持通配符) 目标目录
范例:sourcefile -> destfile
[root@abc.com /]# mv -v sourcefile destfile
命令:nslookup
介绍:nslookup- 查询节点名和IP地址的对应关系,用法: nslookup [节点名IP地址]
命令:passwd
介绍:passwd – 设置用户的密码。
passwd [-f-s] [用户名]
passwd [-g] [-rR] 组名
passwd [-x max] [-n min] [-w warn] [-i inact] 用户名
passwd {-l-u-d-S} 用户名
用户可以用passwd这个命令更改自己的登录密码,一般用户只能更改他自己的密码,超级用户可以更改其他所有用户的密码,超级用户和组的管理者可以更改组的密码,还可以用这个命令来更改用户的其他信息,如用户的全名,用户的登录shell,用户的密码失效的时间间隔等等。
范例:
更改密码
[root@abc.com /]# passwd
Changing password for fangh
Old password:oldpass --密码并不显示出来 Enter
the new password (minimum of 5, maximum of 8 characters)
Please use a combination of upper and lower case letters and numbers.
New password:
newpass Re-enter new password:
newpass Password changed.
命令:ping
介绍:ping – 此命令用来查询远端的一台机器是否能够到达, 并将显示所需时间,如果您要退出请按 control-C 中断。
命令格式:ping 主机名或者 ping IP地址。
命令:ps
介绍:ps – 查看进程状态。
下面解释一下各栏的意义:
FLAGS : 长格式的F域。
UID : 用户的ID。
PID : 进程的ID。
PPID : 父进程的ID。
PRI : 进程优先级。
NI : 标准UNIX的优先级。
SIZE : 虚拟内存的大小。
RSS : 驻留空间的大小。
WCHAN : 进程等待的内核事件。
STAT : 进程状态:
代码如下。
R : 正在运行。
S : 睡眠。
D : 不可打断的睡眠。
T : 停止或跟踪。
Z : 僵尸进程。
W : 进程没有驻留页。
N : 进程有一负nice值。
TTY : 进程的控制台。
PAGEIN : 主内存页失败的数目(页失败造成页从磁盘或CACHE中读取)。
TRS : 文本驻留大小。
SHARE : 共享内存。
SWAP : 交换设备上的K字节数。
范例:
显示当前进程:
[root@abc.com /]# ps -c
PID TTY STAT TIME COMMAND
8724 p4 S 0:00 tcsh
8876 p6 R 0:00 ps
命令:pwd
介绍:pwd – 显示正在工作或当前目录名。
范例:
列出当前工作目录
[root@abc.com /]# pwd
/home/lion
命令:reset
介绍:reset – 将终端复位。
在使用终端的过程中,有时会发现屏幕的字符 “花”掉了,这时使用reset就可以恢复,
例如在运行完电路分析软件PSPICE后,就会发现屏幕字符错乱,使用reset就恢复正常。
reset 调用tput函数,向终端发出复位信号。
如果屏幕被Ctrl+S锁住了,可以用Ctrl+Q 来解除锁定。
范例:
将终端复位:
[root@abc.com /]# reset
命令:rlogin ,rsh
介绍:rlogin 的意义是 remote login , 也就是经由网路到另外一部机器 login 。
rlogin 的格式是: rlogin host [ -l username ] 选项 -l username
是当你在远方的机器上的 username 和 local host 不同的时后,必须输入的选项,否则 rlogin 将会假设你在那边的 username 与 local host 相同,然後在第一次 login 时必然会发生错误。 rsh 是在远方的机器上执行某些指令,而把结果传回 local host 。
rsh 的格式 如下: rsh host [ -l username ] [ command ]
如同 rlogin 的参数 -l username , rsh 的 -l username 也是指定 remote host 的 username 。 而 command 则是要在 remote host 上执行的指令。 如果没有 指定 command ,则 rsh 会去执行 rlogin ,如同直接执行 rlogin 。 不过 rsh 在执行的时候并不会像一般的 login 程序一样还会问你 password , 而是如果你没有设定 trust table , 则 remote host 将不会接受你的 request 。 rsh 须要在每个可能会做为 remote host 的机器上设定一个档案,称为 .rhosts。
这个档案每一行分为两个部份,
第一个是允许 login 的 hostname ,
第二个部份 则是允许 login 的 username 。
例如,在 www.abc.com上 你的 username 为 lion , 而你的 home 下面的 .rhosts 有以下的一行: www1.abc.com lion1 则在 www1.abc.com 机器上的用户 lion1 就可以用以下的方法来执行rsh : % rsh www.abc.com -l lion1 cat mbox
将 lion1 在 www.abc.com 上的 mbox 档案内容显示在本地的 www1.abc.com 上。 而如果 .rhosts 有这样的一行则 www1.abc.com 上的用户 lion1 将可以不用输入密码而直接经由 rsh 或 rlogin 登陆到 www.abc.com 来。 注意:.rhosts 是一个设定可以信任的人登陆的表格,因此如果设定不当将会让不法之徒有可以乘机侵入系统的机会。如果你阅读 man 5 rhosts ,将会 发现你可以在第一栏用 + 来取代任何 hostname ,第二栏用 + 来取代任何 username 。 如一般 user 喜欢偷懒利用 ” + username ” 来代替列一长串 hostname ,但是这样将会使得即使有一台 PC 上跑 UNIX 的 user 有与你相同的用户名, 也可以得到你的允许而侵入你的系统。这样容易造成系统安全上的危险。 同样,很多人都愿意在黑过的机器上添加”+ + “到用户的.rhosts文件里.以便留下后门. 但是,这样是很容易被发现的.
命令:rm
介绍:rm – 删除文件或目录。
注意,在LINUX下如果产生类似于 “-f”这种文件名的文件,删除是先跟 “–”选项。这表明后面所跟的 “-f”不是选项而是文件名
例如“rm — -file”是删除文件“-file”, 在删除文件名中包含特殊字符的文件时,可以用“\+特殊字符”,或用”" 将文件名括起来,例如要删除文件 “this is a test”可以用下列命令: rm this\ is\ a\ test 或者 rm “this is a test” 另外要特别注意,使用rm -rf * 这个命令,如果用户是超级用户,并且在root下使用此命令,那么系统的所有文件将被删除。 而在UNIX下恢复文件几乎是一件不可能的事情。因而要谨慎对待这个命令。 另外建议用户将rm定义为“rm -i”,并加入到用户的登录文件中。
范例:删除文件destfile
[root@abc.com /]# rm -v destfile
命令:rmdir
介绍:rmdir – 删除空的目录。
命令:su
介绍:su – 改变用户的ID或成为超级用户。
命令:tail
介绍:tail – 显示文件的最后一部分 tail缺省显示文件名列表中的每个文件的最后十行,如果没有文件名或文件名为 “-” 则其从标准输入中读取文件, 如果有多个文件则其会在文件前面加上 “==> 文件名 <==” 以便区分。
范例:
显示文件/etc/DIR_COLORS的最后三行: [root@abc.com /]# tail -v -n 3 /etc/DIR_COLORS
命令:tar
介绍:tar – GNU 版的文件打包备份的工具。
范例:
将当前目录下所有.txt文件打包并压缩到归档文件bak.tar.gz
[root@abc.com /]# tar czvf bak.tar.gz ./*.txt
将目录./sec打包到归档文件sec.tar.gz
[root@abc.com /]# tar czvf sec.tar.gz ./sec
命令:tcsh
介绍:tcsh – 一个带有文件名自动补充和行编辑功能的C shell。
tcsh是著名的伯克利UNIX的C SHELL的增强版本,它既可以作为一个交互式的登录 SHELL又可以作为脚本文件的处理器。
tcsh在作为登录shell启动时,首先读取系统配置文件/etc/csh.cshrc和 /etc/csh.login.
接着到用户的根目录下去读取~/.tcshrc,如果没有 ~/.tcshrc则去读取~/.cshrc,
接着读取 ~/.history,~/.login最后是 ~/.cshdirs.
非登录shell启动时只读取/etc/csh.cshrc和~/.tcshrc。
命令行编辑器: 使用方向键来编辑,上下为在历史记录中选择命令,左右键为在命令行上前后移动进行编辑。
命令补充和列表: 在用户键入命令时,经常不能记住命令或目录的全名,这时候tcsh可以帮助用户将剩余部分补全,
例如用户键入 “/usr/lost”但是忘记后面的部分,这时候用户只需要键入TAB 键,tcsh就会自动将剩余的部分补全– “/usr/lost+found/”,当用户给出的部分有多个匹配的情况下例如 “/usr/l”则TAB将无法补全,这时候用户只须键入 “CTRL+D”则tcsh 将替用户列出所有匹配的情况:“lib/ local@ lost+found/”,用户就可以自己选择了。
命令:top
介绍:top – 显示系统的最高进程
top 这个命令可以即时显示当前系统最占CPU时间的进程,它同时提供一个交互的界面让用户可以观察系统进程情况, 它可以按照CPU使用情况,占内存大小,运行的时间来对进程排序,这是系统管理的一项必不可少的工具。
命令:touch
介绍:touch – 改变文件的时间参数。touch将文件的访问时间,修改时间设置为系统的当前时间,如果该文件不存在则建立一个空的新文件。
范例:将当前目录下的文件的时间参数修改为当前时间:
[root@abc.com /]# touch *
命令:umount,mount
介绍:mount – 装载一个文件系统。
umount – 卸下一个文件系统。
列出系统目前mount的文件系统 :
[root@abc.com /]# mount
/dev/hda1 on / type ext2 (rw)
none on /proc type proc (rw)
/dev/hda3 on /home type ext2 (rw)
/dev/hda2 on /usr/local type ext2 (rw)
加载光驱: [root@abc.com /]# mount /dev/hdb /mnt
命令:useradd ,adduser ,userdel
介绍: useradd ,adduser 添加用户
userdel 删除用户
这些命令只能被root使用.
比如
useradd -D lion 按默认值添加一个用户lion
passwd lion --你要使你刚添加的用户生效,必须要用passwd 给这个用户制定密码.
你可以查看帮助信息获得更多资料.
命令:uudecode,uuencode
介绍:uuencode – 将一个二进制文件编码为一个文本文件。 uudecode – 将uuencode产生的文件复原。在Internet尚未十分发达的时候,很多用户只能使用E-mail,要交换软件的话是一件十分麻烦的事情,因为不能用E-mail直接传送二进制文件,于是uuencode和uudecode就成为十分有用的两个工具。 uuencode 产生的文本文件以begin 644 为开始标志,以end为结束标志在这中间的就是编码过的文件。 编码后的文件将比源文件大35%左右。 uuencode产生的文件将输出到标准输出,如要存成文件,请使用管道功能将其重定向到一个磁盘文件中。
uuencode 源文件名
编码时使用的文件名
uudecode 要解码的文件名
命令:vi
介绍:vi – 功能强大的UNIX编辑器。
Vi 简介
Vi 是 UNIX 世界里最通用的全屏编辑器,所有的UNIX机器都提供本编辑器Linux里提供的是vi的加强版-vim,但是是同vi完全兼容的。 Vi的原意是 “visual”即可视编辑器,用户键入的会立即被显示出来。而且其强大的编辑功能可以同任何一个最新的编辑器相媲美,而且学会vi可以让用户在任何一台UNIX机器无论是SUN,HP,AIX,SGI,还是 Linux或FreeBSD上都可以得心应手地编辑文件。 只要在命令行上键入 vi 就可以进入vi的编辑环境。 Vi有两种状态,输入状态以及指令状态。 用户在输入状态下可以输入文字资料 指令状态是用来执行打开文件,存档,离开vi等操作命令,执行vi后首先进入指令状态,此时输入的任何字符都作为指令来处理。 输入 “vi 文件名”则vi自动装入文件或开始一个新文件,vi屏幕的左方会出现波浪号 “~”,代表本行为空行。 要如何进入输入状态呢?
以下为相应的指令:
追加 (append)
a 从光标所在位置后面开始追加文字,光标后的文字随追加的文字向后移动。
A 从光标所在列最后面的地方开始追加文字。
插入 (insert)
i 从光标所在位置前面开始插入文字,光标后的文字随追加的文字向后移动。
I 从光标所在列的第一个非空白字符前面开始插入文字。
开始 (open)
o 在光标所在列下新增一列并进入输入状态。
O 在光标所在列上方新增一列并进入输入状态。
x 删除光标标所在字符。
dd 删除光标所在的列。
r 修改光标所在字符接下来要修正的字符。
R 进入改写状态,新增文字会覆盖原先文字
s 删除光标所在字符,并进入输入状态。
S 删除光标所在的列,并进入输入状态。
结束编辑(quit)
:q 结束编辑(quit) 如果不想存档而要放弃编辑过的文件则用
:q! 强制离开。
:w 存档(write) 其后可加所要存档的名。
:wq 即存档后离开。
zz 功能与
:wq 相同。
命令:wc
介绍: wc – 统计一个文件中的字节数,单词数,行数。
命令:w ,who ,who am i
介绍: w – 查看其他登录的用户。
who – 查看其他登录的用户。
who am i -查看自己的详细情况
命令:which
介绍:which – 显示命令的全路径。 which 程序名
Web服务器使用的一些小技巧备忘录
一 22nd
Web服务器使用的一些小技巧备忘录
这个日记会不断更新,主要记录一些简短而且容易忘记的东西…..
1、刚装的PHP5注意register_globals的状态
刚安装好PHP的时候,也许会碰到表单递交变量无法接收的事情。相关问题:为什么我的程序无法得到传递过来的变量?为什么我的表单无法传递数据?
其实问题很简单,刚安装的PHP默认是应该用$_GET['user_name']和$_GET['user_pass']来接受传递过来的值,也就是说register_globals处于Off状态,这个问题我们可以通过写个测试文件如:test.php 来观察register_globals的状态。test.php的全部代码就一句话,很简单的,如:
< ? echo phpinfo(); ?> //注意这里的?不能用中文格式
你可以观察到register_globals处于什么状态,如果要修改这个状态可以修改php.ini来实现。我们这里以FreeBSD系统为例来说明修改方法,其他操作系统雷同:
www# ee /usr/local/etc/php.ini (用^y search prompt 去搜索register_globals在那一行)
www# /usr/local/etc/rc.d/apache22 restart (修改以后重新启动apache就生效了)
2、启用FreeBSD的捏名FTP服务
sysintall—configure—Networking— Anon FTP(This machine wishes to allow anonymous FTP)
3、phpinfo()的妙用
phpinfo()是一个可以用来检查PHP的运行状况的函数,但Apache Environment里面有很多变量我们可以在撰写PHP程序的时候用的到,打开phpinfo()你会发现有很多表格,表格前面其实很多是变量名称,你可以用echo来显示这些内容,比如echo $_SERVER["SCRIPT_FILENAME"] ;将返回你请求的文件名的绝对路径。
4、SQL语句备忘
替换某个字符 update 表名 set 字段名=REPLACE(字段名,’被替换内容’,'替换成内容’)
5、安装和更新prots的方法
www# cd /usr/ports/net/cvsup-without-gui
www# make install clean
www# mkdir /usr/cvsup
www# cp /usr/share/examples/cvsup/stable-supfile /usr/cvsup
www# cp /usr/share/examples/cvsup/standard-supfile /usr/cvsup
www# cp /usr/share/examples/cvsup/ports-supfile /usr/cvsup
www# ee /usr/cvsup/ports-supfile
修改服务器为 *default host=cvsup1.cn.freebsd.org
www# source ~/.cshrc
www# cvsup -g -L 2 /usr/cvsup/ports-supfile //以后只要这一条命令就可以更新了
6、Freebsd安装perl模块的方法(这里针对MT支持环境构建)
一般的方法如下(此方法可以在NT机里使用):
www#perl -MCPAN -e shell
如果用ports方法安装会更简单
www#cd /usr/ports/databases/p5-DBD-mysql //这里根据你的mysql版本安装相应版本
www# make install clean
www# cd ../p5-DBD-Pg
www# make install clean
其他模块的安装类似上面的,你可以浏览/usr/ports/databases 目录去找相应的模块来安装。
7、寻找一个你要的ports
www# cd /usr/ports
www# make search key=samba3
8、开启mod_rewrite模块很容易犯的错误
在.htaccess文件中加入RewriteEngine On如果访问页面显示500错误,这时候你要去检查配置段中AllowOverride选项,一般apache刚安装的时候出于安全考虑的 AllowOverride会处于None状态,而也会处于AuthConfig状态,而这些状态是不适合mod_rewrite运转的,正确的状态应该添加FileInfo指令,具体配置方法可以参考http://apache.w8a.com/mod/core.html#allowoverride 如果是虚拟主机,当然还需要检查虚拟主机的对应目录的AllowOverride是否正确,通过这些检查,500错误应该就没有了,对应的模块也就能使用了.
9、FreeBSD下也用BT下载软件
cd /usr/ports/net-p2p/py-bittorrent-devel
make install clean
如果使用终端模式,编译安装请使用make WITHOUT_GUI=yes install clean,完成之后执行rehash,
下载使用bittorrent-curses *.torrent,也可以是种子文件url。
如何交由后台处理?
请安装/usr/ports/sysutils/screen/,完成之后执行rehash。
简单的用法:
创建一个screen:
$ screen
创建一个后台运行的screen:
$ screen -d -m -S one YOUR COMMAND
查看你有几个screen
$ screen -list
恢复到一个screen中:
$ screen -x (如果只有一个screen 的话)
$ screen -r one(恢复一个session名为one的screen )
$ screen -r 2035(恢复一个pid为2035)
例:screen -d -m -S one bittorrent-curses new.torrent
10、FreeBSD下远程桌面VNC
cd /usr/ports/net/vnc
make install clean
11、FreeBSD日志记录方式设置
ee /etc/newsyslog.conf
12、如何让FreeBSD像RedHat那样在ls时显示多种颜色的目录?
# ee /etc/csh.cshrc
setenv LSCOLORS ExGxFxdxCxegedabagExEx
setenv CLICOLOR yes
set prompt = ‘[%B%n@%m%b] %B%~%b%# ‘
# sed -i.bak -E s/set\ prompt/#set\ prompt/g /root/.cshrc
FreeBSD 服务器架设和设置备忘
一 22nd
FreeBSD 服务器架设和设置备忘
本文仅提供自己备查之用,所以很多地方可能由于机器环境的不同和用途不同,设置会有所不同。
#–【Freebsd用光盘最小化安装】
这个不是重点,有很多文章,这里就不重复了。
——————————————————————————
#–【安装sys和ports】
系统安装最小化模式+man+ports+src+sys+perl5.8
www# /stand/sysinstall
位置:
Configure — Distributions — src — sys
Configure — Distributions — Ports
Configure — Distributions — man
#–【安装网络系统,使计算机可以上网并准备防火墙、IPNAT和DNS设置】
www# ee /etc/ipf.rules
写入:
pass in all
pass out all
www# ee /etc/ipnat.rules
写入:
map tun0 192.168.1.0/24 -> 0/32 proxy port ftp ftp/tcp
map tun0 192.168.1.0/24 -> 0/32 portmap tcp/udp 10000:65535
map tun0 192.168.1.0/24 -> 0/32
rdr tun0 0/0 port 80 -> 127.0.0.1 port 3128 tcp //这里转发是为了用squid
www# ee /etc/resolv.conf
nameserver 127.0.0.1
nameserver 221.228.255.1
nameserver 202.102.3.141
www# ee /etc/rc.conf
defaultrouter=”192.168.1.1″ //网关
ifconfig_fxp0=”inet 192.168.1.2 netmask 255.255.255.0″ //IP地址和子网掩码
——————————————————————————
#–【安装防火墙编译内核】
www# cd /usr/src/sys/i386/conf
www# cp GENERIC mysysknl
www# ee mysysknl
修改为 ident mysysknl
加入语句:
options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCK
www# /usr/sbin/config mysysknl
www# cd ../compile/mysysknl
www# make depend
www# make
www# make install
www# ee /etc/rc.conf
加一条 ipfilter_enable=”YES” (这个很重要,如果在本机操作不要紧,如果在SSH操作那重新启动后你就登陆不了了,因为防火墙已经启动了,能把你自己隔在外面,前面事先编辑/etc/ipf.rules就是为了这个)
www# reboot
——————————————————————————
#–【安装cvsup并升级所有ports】
www# cd /usr/ports/net/cvsup-without-gui
www# make install clean
www# mkdir /usr/cvsup
www# cp /usr/share/examples/cvsup/stable-supfile /usr/cvsup
www# cp /usr/share/examples/cvsup/standard-supfile /usr/cvsup
www# cp /usr/share/examples/cvsup/ports-supfile /usr/cvsup
www# ee /usr/cvsup/ports-supfile
修改服务器为 *default host=cvsup3.cn.freebsd.org
www# source ~/.cshrc
www# cvsup -g -L 2 /usr/cvsup/ports-supfile
——————————————————————————
#–【下载内核并更新系统为最新版本(升级系统)】
www# ee /usr/cvsup/standard-supfile
修改下载服务器为 *default host=cvsup3.cn.freebsd.org
修改现在用的版本号 *default release=cvs tag=RELENG_5_2_1_RELEASE
www# source ~/.cshrc
www# cvsup -g -L 2 /usr/cvsup/standard-supfile
www# /usr/sbin/config 你的内核文件名
www# cd ../complie/你的内核文件名
www# make depend
www# make
www# make install
www# reboot
另外,如果系统升级过源代码树,按下面方法编译内核:
cd /usr/src
make buildkernel KERNCONF= 你的内核文件名
make installkernel KERNCONF=你的内核文件名
——————————————————————————
#–【设置缓冲型DNS】
www# ee /etc/resolv.conf
domain xxxxx.com
nameserver 127.0.0.1
nameserver xxx.xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx.xxx
www# chmod 744 /etc/namedb/make-localhost
www# cd /etc/namedb
www# ./make-localhost
www# ee /etc/namedb/named.conf
options {
directory “/etc/namedb”;
forward only;
forwarders {
xxx.xxx.xxx.xxx; xxx.xxx.xxx.xxx;
};
};
zone “.” {
type hint;
file “named.root”;
};
zone “0.0.127.IN-ADDR.ARPA” {
type master;
file “localhost.rev”;
};
注: 上面两个xxx.xxx.xxx.xxx就是/etc/resolv.conf 里面的两个nameserver地址
www# ee /etc/rc.conf
www# named -g # 测试
使用 rndc reload 命令来重新读入配置文件
named_enable=”YES”
——————————————————————————
#–【设置泛解析DNS】
www# cat /var/named/etc/namedb/rndc.key 拷贝下面类似内容
key “rndc-key” {
algorithm hmac-md5;
secret “T+DanPgSUW8GkMQWtng6qZZQvSlaoMVkrS+rOzCRpts=”;
};
www# ee /etc/namedb/named.conf
# Use with the following in named.conf, adjusting the allow list as needed:
key “rndc-key” {
algorithm hmac-md5;
secret “T+DanPgSUW8GkMQWtng6qZZQvSlaoMVkrS+rOzCRpts=”;
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { “rndc-key”; };
};
# End of named.conf
zone “12345.com” {
type master;
allow-update {
key “rndc-key”;
};
file “dynamic/12345.com”;
};
www# ee /etc/namedb/dynamic/12345.com
$ttl 1D
@ IN SOA 12345.com. root.12345.com. (
2006048888
3H
15M
1W
1D )
IN NS 12345.com.
IN MX 5 12345.com.
* IN A 127.0.0.1
www# ee /etc/host.conf
bind
hosts
www# named -g # 测试
使用 rndc reload 命令来重新读入配置文件
www# sh /etc/rc.d/named restart
——————————————————————————
#–【 Mysql 】
4.1版本以上就有编码支持了,如果不想麻烦就选4.1以下的MYSQL吧
www# cd /usr/ports/databases/mysql323-server
www# make install
www# ee /etc/rc.conf
mysql_enable=”YES”
mysql_limits=”NO”
mysql_dbdir=”/var/db/mysql”
www# cd /etc
www# && sh rc
www# mysqladmin -u root password 123456
——————————————————————————
#–【 apache+perl+gzip+fastcgi 】
www# cd /usr/ports/www/apache13-modssl
www# make install
www# cd /usr/ports/www/mod_perl
www# make install
www# cd /usr/ports/www/mod_gzip
www# make install
www# cd /usr/ports/www/mod_fastcgi
www# make install
www# mkdir /usr/local/logs
www# mkdir /usr/local/logs/fastcgi
www# mkdir /usr/local/logs/fastcgi/dynamic
www# chown -R www:www /usr/local/logs
www# ee /usr/local/etc/apache/httpd.conf
LoadModule gzip_module libexec/apache/mod_gzip.so
LoadModule fastcgi_module libexec/apache/mod_fastcgi.so
AddModule mod_gzip.c
AddModule mod_fastcgi.c
www# ee /etc/rc.conf
apache_enable=”YES”
www# reboot
——————————————————————————
#–【 php5 】
www# cd /usr/ports/lang/php5
www# make install
[X] CLI Build CLI version
[X] CGI Build CGI version
[X] APACHE Build Apache module (这个一定要选,否则装好了整合不了apache和php)
[ ] DEBUG Enable debug
[X] SUHOSIN Enable Suhosin protection system
[X] MULTIBYTE Enable zend multibyte support
[X] IPV6 Enable ipv6 support
[ ] REDIRECT Enable force-cgi-redirect support (CGI only)
[ ] DISCARD Enable discard-path support (CGI only)
[X] FASTCGI Enable fastcgi support (CGI only)
[X] PATHINFO Enable path-info-check support (CGI only)
www# ee /usr/local/etc/apache/httpd.conf
检查下面2句话而且前面没被#掉,如果上面不选apache模块那么下面2句话是没有的:
LoadModule php5_module libexec/apache/libphp5.so
AddModule mod_php5.c
添加下面2句话:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
www# ee /usr/local/etc/php.ini
register_globals = On
www# php -v 测试
——————————————————————————
#–【 php5-extensions 】
www# cd /usr/ports/lang/php5-extensions
www# make install
全部选上,如果哪个so安装不了,很垃圾的办法是做个“装不了的文件名.so”骗骗系统,然后继续装,装好了禁用这个so,不过一般不会出现这样的情况的。
www# /usr/local/etc/rc.d/apache.sh restart
如果启动不了就禁用扩展模块,开启需要用的
www# ee /usr/local/etc/php/extensions.ini
—————————————————————
接下来装点常用的东西,目的是让系统支持常见的网页程序,PORTS安装的好处就在这里啦,你不用去考虑装什么模块什么的,在这里用PORTS装一次,它已经帮你定制好环境了,这里装的WWW软件一般会默认安装到/usr/local/www下面,当然你不能现在就用,装好了你必须用ln命令连接到能够访问的目录下,这样你就可以使用了。
# cd /usr/ports/www/phpSysInfo
# make install clean
# ln -s /usr/local/www/phpSysInfo /usr/local/www/data
# cd /usr/local/www/phpSysInfo
# cp config.php.new config.php
好了,到这里127.0.0.1已经可以看到这个目录了(/usr/local/www/data下默认页面可以删除)
# cd /usr/ports/databases/phpmyadmin
# make install clean
# ln -s /usr/local/www/phpMyAdmin /usr/local/www/data
# ee /usr/local/www/data/phpMyAdmin/libraries/config.default.php
加入一个mysql密码就可以用了
# cd /usr/ports/www/MT
# make install clean
##安装DBI和DBD for mysql 用于提供perl访问mysql数据库的接口规范
# cd /usr/ports/databases/p5-DBD-mysql
# make install
——————————————————————————
#–【 ZendOptimizer 】
方法1:
# cd /usr/ports/devel/ZendOptimizer
cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini
ee /usr/local/etc/php.ini
加入下面一段文字:
[Zend]
zend_optimizer.optimization_level=15
zend_extension_manager.optimizer=”/usr/local/lib/php/20060613/Optimizer”
zend_extension_manager.optimizer_ts=”/usr/local/lib/php/20060613/Optimizer_TS”
zend_extension=”/usr/local/lib/php/20060613/ZendExtensionManager.so”
zend_extension_ts=”/usr/local/lib/php/20060613/ZendExtensionManager_TS.so”
修改:register_globals=On
# /usr/local/etc/rc.d/apache.sh restart
方法2:
上传ZendOptimizer-2.6.2-freebsd5.4-i386.tar.gz到/home/sysop/soft
www# cd /home/sysop/soft
www# tar zxvf ZendOptimizer-2.6.2-freebsd5.4-i386.tar.gz
www# cd ZendOptimizer-2.6.2-freebsd5.4-i386
www# ./install
——————————————————————————
#–【 Squid 】
www# cd /usr/ports/www/squid
www# make install
│ │[ ] SQUID_LDAP_AUTH Install LDAP authentication helpers │ │
│ │[ ] SQUID_SASL_AUTH Install SASL authentication helpers │ │
│ │[X] SQUID_DELAY_POOLS Enable delay pools │ │
│ │[X] SQUID_SNMP Enable SNMP support │ │
│ │[ ] SQUID_CARP Enable CARP support │ │
│ │[ ] SQUID_SSL Enable SSL support for reverse proxies│ │
│ │[ ] SQUID_PINGER Install the icmp helper │ │
│ │[ ] SQUID_DNS_HELPER Use the old ‘dnsserver’ helper │ │
│ │[ ] SQUID_HTCP Enable HTCP support │ │
│ │[ ] SQUID_VIA_DB Enable forward/via database │ │
│ │[X] SQUID_CACHE_DIGESTS Enable cache digests │ │
│ │[X] SQUID_WCCP Enable Web Cache Coordination Protocol│ │
│ │[X] SQUID_UNDERSCORES Allow underscores in hostnames │ │
│ │[X] SQUID_CHECK_HOSTNAME Do hostname checking │ │
│ │[ ] SQUID_STRICT_HTTP Be strictly HTTP compliant │ │
│ │[X] SQUID_IDENT Enable ident (RFC 931) lookups │ │
│ │[X] SQUID_USERAGENT_LOG Enable User-Agent-header logging │ │
│ │[X] SQUID_CUSTOM_LOG Enable custom log format │ │
│ │[ ] SQUID_ARP_ACL Enable ACLs based on ethernet address │ │
│ │[ ] SQUID_PF Enable transparent proxying with PF │ │
│ │[ ] SQUID_IPFILTER Enable transp. proxying with IPFilter │ │
│ │[ ] SQUID_FOLLOW_XFF Follow X-Forwarded-For headers │ │
│ │[ ] SQUID_ICAP Enable ICAP client functionality │ │
│ │[ ] SQUID_AUFS Enable the aufs storage scheme │ │
│ │[ ] SQUID_COSS Enable the COSS storage scheme │ │
│ │[x] SQUID_LARGEFILE Support log and cache files >2GB │ │
│ │[ ] SQUID_STACKTRACES Create backtraces on fatal errors │ │
│ │[X] SQUID_RCNG Install an rc.d style startup script │ │
www# chown sysop /usr/local/etc/squid
www# ee /usr/local/etc/squid/squid.conf
useragent_log /var/log/useragent.log
www# reboot
www# squid -k parse
www# squid -zX
www# cat >> /var/log/useragent.log
www# chown squid /var/log/useragent.log
www# /usr/local/etc/rc.d/squid.sh start
www# ee /etc/rc.conf
squid_enable=”YES”
www# reboot
——————————————————————————
#–【 设置ipnat 】
www# ee /etc/ipnat.rules
map tun0 192.168.1.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
map tun0 192.168.1.0/24 -> 0.0.0.0/32 portmap tcp/udp 10000:65535
map tun0 192.168.1.0/24 -> 0.0.0.0/32
rdr tun0 0.0.0.0/0 port 80 -> 127.0.0.1 port 3128 tcp
rdr tun0 0.0.0.0/0 port 25 -> 192.168.1.100 port 25 tcp
rdr tun0 0.0.0.0/0 port 110 -> 192.168.1.100 port 110 tcp
rdr fxp0 192.168.1.0/24 port 80 -> 127.0.0.1 port 3128 tcp
www# ipnat -CF -f /etc/ipnat.rules
——————————————————————————
#–【 设置ADSL 】
www# cat > /etc/ppp/ppp.conf
www# ee /etc/ppp/ppp.conf
default:
ident user-ppp VERSION (built COMPILATIONDATE)
set device /dev/cuaa1
set speed 115200
set dial “ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
\”\” AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT”
set timeout 0
set log Phase tun command
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255
nat same_ports yes
nat use_sockets yes
adsl:
set device PPPoE:fxp0
set mru 1492
set mtu 1492
set speed sync
enable lqr
set dial
set login
set authname 123456这里的用户名根据自己情况决定修改
set authkey 123456这里的密码根据自己情况决定修改
add default HISADDR
www# ee /etc/rc.conf
ppp_enable=”YES”
ppp_mode=”ddial”
ppp_nat=”YES”
ppp_profile=”adsl”
—————-
www# cd /usr/ports/ftp/wget
www# make install
www# cd /usr/ports/www/lynx
www# make install
www# cd /usr/ports/net/fping
www# make install
www# cd /usr/ports/www/mod_limitipconn
www# make install
www# cd /usr/ports/www/mod_encoding
www# make install
挂接一块硬盘————————
www# cat /var/run/dmesg.boot 检查一下有没有找到新的磁盘记下标号ad3
www# mount /dev/ad3s1e /mysql
www# mount /dev/ad3s1f /cache
www# mount /dev/ad3s1g /sites
www# ee /etc/fstab
/dev/ad3s1e /mysql ufs rw 2 2
/dev/ad3s1f /cache ufs rw 2 2
/dev/ad3s1g /sites ufs rw 2 2
———安装新硬盘———————
www# cat /var/run/dmesg.boot 找到硬盘编号 例:ad2
www# dd if=/dev/zero of=/dev/ad2 bs=1k count=1 #准备工作
www# fdisk -BI ad2 #初始化新磁盘
www# disklabel -B -w -r ad2s1 auto #加上标签
www# disklabel -e ad2s1 #现在编辑您刚才创建的磁盘分区
www# mkdir -p /cache # 要挂到根下的分区名,可以自己定义
www# newfs /dev/ad2s1 # 创建这数据结构,为您创建的每个分区重复这个操作
www# mount /dev/ad2s1 /cache2 # 挂上分区
www# ee /etc/fstab # 完成之后,添加合适的记录到您的 /etc/fstab文件。
—————————————————————————————
No.16 MRTG 流量分析
//安装MRTG 可谓艰难.查了好多资料.也走了很多弯路.一步一步走出来的..
//在安裝 MRTG 之前,我们先使用 ports 來安装 SNMP:
#cd /usr/ports/net-mgmt/net-snmp
#make install clean
#cd /usr/local/share/snmp
#cp snmpd.conf.example snmpd.conf
#ee /usr/local/share/snmp/snmpd.conf
//添加以下内容
view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
rocommunity mrtg
syslocation Office
syscontact stuceo@stuhack.com
#/usr/local/etc/rc.d/snmpd start
#netstat -an
udp4 0 0 *.161 *.*
//接着ports 來安裝 MRTG:
#cd /usr/ports/net-mgmt/mrtg
#make install clean
#################################################
# Please create a MRTG config file in /usr/local/etc/mrtg #
# A configuration file can be automatically generated with cfgmaker #
# A sample configuration file is installed as mrtg.cfg.sample #
# #
# To enable MRTG in daemon mode, put the following to your /etc/rc.conf or #
# /etc/rc.conf.local file: #
# mrtg_daemon_enable=”YES” #
#################################################
#ee /etc/rc.conf
snmpd_enable=”YES”
mrtg_daemon_enable=”YES”
#mkdir /usr/local/www/apache22/data/mrtg
//新建mrtg 为了是用ip可以直接访问mrtg
#cd /usr/ports/distfiles/
#tar -zxvf mrtg-2.14.5.tar
#cd mrtg-2.14.5
#cp images/* /usr/local/www/apache22/data/mrtg
//把mrtg解压一下.再把这些图像文件cp到mrtg下面.
#cd /usr/local/etc/mrtg
# rehash
# cfgmaker mrtg@www.stuhack.com >mrtg.cfg
//上面请特别注意:在 mrtg@www.stuhack.com 也可以换成mrtg@yourip
//mrtg 是有其意义的(在 snmp 这个通讯服务里面的预设搜寻的一个代码,默认的可能是public,这就是刚才要查看snmpd.conf里的原因了)
//所以,如果你的主机的动态 DNS 名称为 your.domain.name 则你就『一定』要写成 mrtg@your.domain.name 才行!千万不要弄错了!
#ee mrtg.conf
//还需要编辑一下这个文件加入WorkDir这一项,就是你的生成的网页的存放的位置。
WorkDir: /usr/local/www/apache22/data/mrtg
# Options[_]: growright, bits
Language:GB2312
//这个要注意的一点是他们前边不要有空格,否则会有什么” ERROR: Line 8 ( WorkDir: /var/www/html/mrtg) in CFG file (mrtg) does not make sense”的错误。
#whereis mrtg
mrtg: /usr/local/bin/mrtg /usr/local/man/man1/mrtg.1.gz /usr/ports/net-mgmt/mrtg
//为查找mrtg到底在哪..
# /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
# /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
# /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
//这个需要运行3次,前两次都会报错,不用去理会他,第3次就应该没有错误了
//不过,若是有问题的话,就需要修改mrtg.cfg,再执行直到没有错误发生为止。
//如以下错误:
Rateup WARNING: /usr/local/mrtg2/bin/rateup could not read the primary log file for localhost
Rateup WARNING: /usr/local/mrtg2/bin/rateup The backup log file for localhost was invalid as well
Rateup WARNING: /usr/local/mrtg2/bin/rateup Can’t remove localhost.old updating log file
Rateup WARNING: /usr/local/mrtg2/bin/rateup Can’t rename localhost.log to localhost.old updating log file
#whereis indexmaker
indexmaker: /usr/local/bin/indexmaker /usr/local/man/man1/indexmaker.1.gz
/usr/local/bin/indexmaker
//为了查找indexmaker在哪.不要弄错了..
#/usr/local/bin/indexmaker -output=/usr/local/www/apache22/data/mrtg/index.html -title=LL /usr/local/etc/mrtg/mrtg.cfg
//上面这个程序indexmaker是在制作首页。会自动地输出一个index.html的文件中。
//如果说你以后修改了这个文件(比如增加对CPU,硬盘等的侦测,要再重新生成一次,否则图面会出不来的.
#crontab -e
//按下I键 插入的意思!
*/5 * * * * /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
//ESC 输入
:wq!
//设定每5分钟执行一次
//使用手工运行mrtg并不能定时产生适当的统计信息,因此最好还是定时自动运行mrtg来生 成统计信息,默认为五分钟运行一次。
//ok!到此为止,配置完毕,记得一定要重新启动snmp和httpd服务!
#/usr/local/etc/rc.d/snmpd restart
Stopping snmpd.
Starting snmpd.
#apachectl restart
//現在你可以使用 http://yourserver/mrtg 來連去看看。
//打开http://unix.stuhack.com/mrtg/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
常用命令:
/usr/local/etc/rc.d/apache.sh start
/usr/local/etc/rc.d/apache.sh stop
/usr/local/etc/rc.d/apache.sh restart
————–修改php.ini文件————–
www# cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini
www# ee /usr/local/etc/php.ini
进行php.ini文件的配置工作
(0)查找safe_mode=Off,更改为safe_mode=On
(1)查找max_execution_time = 30,更改为max_execution_time = 600
(2)查找max_input_time = 60,更改为max_input_time = 600
(3)查找memory_limit = 8M ,更改为memory_limit = 20M
(4)查找display_errors = On,更改为display_errors = Off
(5)查找register_globals = Off,更改为register_globals = On
(6)查找post_max_size = 8M,更改为post_max_size = 20M
(7)查找upload_max_filesize = 2M,更改为upload_max_filesize = 20M
(8)查找session.auto_start = 0,更改为session.auto_start = 1
保存后退出,从而完成了php.ini文件的配置工作。
www# /usr/local/etc/rc.d/apache.sh restart
——————使用Squid—————-
www# mkdir /home/sysop/squid
www# mkdir /home/sysop/squid/cache
www# mkdir /home/sysop/squid/var
www# mkdir /home/sysop/squid/var/logs
www# cd /usr/local/etc/squid/
www# mv squid.conf squid.conf.bak
www# ee squid.conf
改变cache目录和logs目录的所有者为squid用户和组:
www# chown –R squid /home/sysop/squid/cache
www# chgrp –R squid /home/sysop/squid/cache
www# chown –R squid /home/sysop/squid/var/logs
www# chgrp –R squid /home/sysop/squid/var/logs
www# /usr/local/sbin/squid –z
www# /usr/local/sbin/squid –NCd1 测试
www# ee /etc/rc.conf 添加squid_enable=”YES”
www# cd /etc
www# ee /etc/ipnat.rules
添加rdr tun0 0/0 port 80 -> 127.0.0.1 port 3128 tcp
————设置透明代理————————-
这里假设你已经设置好squid并已投入使用,如果大家对squid不熟悉的话,我稍后会贴出squid的设置.
一般网上都是用ipfw做防火墙的,但我觉得ipfilter较ipfw方便而且好用,所以这里采用ipfilter.
1.编辑/boot/defaults/loader.conf
在Networking modules段加入:
ipl_load=”YES”
2.创建/etc/ipfilter.rules (ipfilter规则),这里仅仅给出一个例子,要根据自己的实际需求设定规则.
block in log on 外网卡名 from any to any
block out log on 外网卡名 from any to any
pass out log on 外网卡名 proto icmp all keep state
pass out log on 外网卡名 proto tcp/udp from any to any keep state
pass in on 外网卡名 proto tcp from any to any port = ftp-data keep state
pass in on 外网卡名 proto tcp from any port = ftp-data to any port > 1023 keep state
pass in on 内网卡名 all
pass out on 内网卡名 all
block return-rst in log on 外网卡名 proto tcp from any to any flags S/SA
block return-icmp(net-unr) in log on 外网卡名 proto udp from any to any
3.创建/etc/ipnat.rules (NAT规则)
rdr 内网卡名 0.0.0.0/0 port 80 -> 192.168.0.1 port 3128 tcp/udp
注: 192.168.0.1 为内网卡ip地址, 并假设你的squid的端口为3128,不是的话改成实际的就可以了.
4.编辑 /etc/rc.conf , 加入:
ipfilter_enable=”YES”
ipfilter_rules=”/etc/ipfilter.rules”
ipnat_enable=”YES”
ipnat_rules=”/etc/ipnat.rules”
到这里为止,整个设置透明代理设置基本完成, 确保你的squid服务正常并开机自动启动. 然后重新启动服务器.将客户端电脑的网关和DNS服务器地址都改为内网卡ip地址(我那里是192.168.0.1) 就可以了.
—————在FreeBSD设置ADSL上网—————————-
我曾经发表过一篇这样的文章,在这里我不在罗嗦了. 可以参考下面:
如何在FreeBSD设置ADSL上网(在FreeBSD 4.4下测试通过)
网上有部分关于FreeBSD设置ADSL上网的文章有些错误,这里公布葱头的设置文件。
1。编辑/etc/ppp/ppp.conf 文件
default:
set log Phase tun command
enable dns
adsl:
set device PPPoE: 设备名 ;即网卡的设备名
set speed sync
set mru 1492
set mtu 1492
set dial
set login
add default HISADDR
set authname 帐户名
set authkey 密码
Papchap:
set authname 帐户名
set authkey 密码
2。编辑/boot/defaults/loader.conf
ng_pppoe_load=”YES”
虚拟拨号: ppp -background adsl
测试: ifconfig -a 看到tun0伪设备捆绑了ISP分配的IP地址即成功
如果想开机就自动拨号,那就要修改/etc/rc.conf,增加一下字段:
ppp_enable=”YES”
ppp_mode=”ddial”
ppp_profile=”adsl”
——–ln命令举例—————
ln -s /myconfig/dynamic /var/named/etc/named
将/myconfig/dynamic目录挂接到/var/named/etc/named目录下
#——-安装proftpd
#cd /usr/ports/ftp/proftpd-mysql
#make install
安装的时候会要求选择proftpd要安装的模块,选择好mysql和quota,其他的根据情况选择
然后系统自动下载proftpd-1.3.0rc2.tar.bz2并完成编译和安装。
#cp /usr/local/etc/proftpd.conf /usr/local/etc/proftpd.conf.sample
#ee /usr/local/etc/proftpd.conf
—————————————-
#基本配置
ServerName “Michael’s Ftp Site”
ServerType standalone
DefaultServer on
#设置用户登陆时不显示ftp服务器版本信息
ServerIdent off
#设置ftp服务使用的端口,可以修改
Port 21
#设置ftp目录的权限
Umask 022
#设置系统各种超时时间和重试次数
MaxLoginAttempts 3
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600
#允许最大的同时连接用户数
MaxClients 10
#允许每个用户主机最大并发连接数
MaxClientsPerHost 3
AllowOverwrite no
AllowStoreRestart on
UseReverseDNS off
#如果shell为空时允许用户登录
RequireValidShell off
#将用户限制在自己的主目录下 ,这个设置很重要
DefaultRoot ~
#设置系统最大的进程数,防止dos攻击,默认是30
MaxInstances 10
#设置系统用于运行proftpd服务的用户和用户组(需要后面自己创建)
User FTPUSR
Group FTPGRP
#设置对全局的文件可以进行改写
AllowOverwrite on
#设置系统运行日志和文件传输日志
SystemLog /var/log/proftpd.syslog
TransferLog /var/log/proftpd.transferlog
######################## 下面是匿名登陆部分的设置 #################
#匿名用户登陆后访问的目录为 ftp用户的主目录
User ftp
Group ftpusers
#设置anonymous用户为系统实际用户ftp的别名
UserAlias anonymous ftp
#设置匿名用户同时在线最大用户数
#此用户数受限于前面的全局同时在线用户数
MaxClients 5
#设置welcome.msg文件作为用户登陆的提示信息文件
#.message文件作为用户每次进入的目录提示信息
DisplayLogin welcome.msg
DisplayFirstChdir .message
#设置一些特殊的权限,比如写文件和登陆限制等 (可以不用)
DenyAll
Order deny,allow
Deny from 61.101.201.0/32
Allow from all
######################## 完成匿名登陆的设置 #################
######################## 下面是磁盘限额Quota设置 ############
#启用磁盘限额
QuotaDirectoryTally on
SQLHomedirOnDemand on
#磁盘限额单位 b”|”Kb”|”Mb”|”Gb”
QuotaDisplayUnits “Mb”
QuotaEngine on
#磁盘限额日志记录
QuotaLog “/var/log/proftpd.quotalog”
#打开磁盘限额信息 “quote SITE QUOTA”命令
QuotaShowQuotas on
####################### 完成磁盘配额设置 ####################
####################### 下面是MySQL数据库部分设置 ###########
#数据库联接的信息
#FTP是数据库名,localhost是MySQL主机名,3306是mysql服务的端口号
#Michael是连接数据库的用户名,testpwd是密码(如果没有密码留空)
SQLConnectInfo FTP@localhost:3306 Michael testpwd
#数据库认证的类型
SQLAuthTypes Backend Plaintext
#指定用来做用户认证的表的有关信息。(将在后面创建)
SQLUserInfo FTPUSERS userid passwd uid gid homedir shell
SQLGroupInfo FTPGRPS groupname gid members
#数据库认证
SQLAuthenticate users groups usersetfast groupsetfast
#proftpd进行的mysql调用语句,别修改任何地方
SQLNamedQuery get-quota-limit SELECT “name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail,files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits WHERE name = ‘%{0}’ AND quota_type = ‘%{1}’”
SQLNamedQuery get-quota-tally SELECT “name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies WHERE name = ‘%{0}’ AND quota_type = ‘%{1}’”
SQLNamedQuery update-quota-tally UPDATE “bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = ‘%{6}’ AND quota_type = ‘%{7}’” quotatallies
SQLNamedQuery insert-quota-tally INSERT “%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}” quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
—————————————-
完成proftpd.conf配置文件后,需要进行数据库表的配置,包括创建表和插入数据
1、登陆mysql或者使用phpmyadmin工具创建数据库 FTP
#mysqladmin create FTP
2、运行下面的sql语句创建表和插入必要数据
– phpMyAdmin SQL Dump
– version 2.6.4-pl2
– http://www.phpmyadmin.net
–
– 主机: localhost
– 生成日期: 2005 年 11 月 03 日 14:23
– 服务器版本: 4.1.14
– PHP 版本: 4.4.0
–
– 数据库: `FTP`
–
– ——————————————————–
–
– 表的结构 `FTPGRPS`
–
CREATE TABLE `FTPGRPS` (
`groupname` text NOT NULL,
`gid` smallint(6) NOT NULL default ‘0′,
`members` text NOT NULL
) ENGINE=MyISAM;;
–
– 导出表中的数据 `FTPGRPS`
–
INSERT INTO `FTPGRPS` VALUES (‘FTPGRP’, 2001, ‘FTPUSR’);
INSERT INTO `FTPGRPS` VALUES (‘ftpusers’, 2002, ‘ftp’);
– ——————————————————–
–
– 表的结构 `FTPUSERS`
–
CREATE TABLE `FTPUSERS` (
`userid` text NOT NULL,
`passwd` text NOT NULL,
`uid` int(11) NOT NULL default ‘0′,
`gid` int(11) NOT NULL default ‘0′,
`homedir` text,
`shell` text
) ENGINE=MyISAM;;
–
– 导出表中的数据 `FTPUSERS`
–
INSERT INTO `FTPUSERS` VALUES (‘Michael’, ‘testftp’, 2001, 2001, ‘/var/ftp/incoming’, ”);
– ——————————————————–
–
– 表的结构 `quotalimits`
–
CREATE TABLE `quotalimits` (
`name` varchar(30) default NULL,
`quota_type` enum(‘user’,'group’,'class’,'all’) NOT NULL default ‘user’,
`per_session` enum(‘false’,'true’) NOT NULL default ‘false’,
`limit_type` enum(’soft’,'hard’) NOT NULL default ’soft’,
`bytes_in_avail` float NOT NULL default ‘0′,
`bytes_out_avail` float NOT NULL default ‘0′,
`bytes_xfer_avail` float NOT NULL default ‘0′,
`files_in_avail` int(10) unsigned NOT NULL default ‘0′,
`files_out_avail` int(10) unsigned NOT NULL default ‘0′,
`files_xfer_avail` int(10) unsigned NOT NULL default ‘0′
) ENGINE=MyISAM;;
–
– 导出表中的数据 `quotalimits`
–
– 设置Michael用户,磁盘配额1G,可以上传下载流量2G,最多文件数10个
INSERT INTO `quotalimits` VALUES (‘Michael’, ‘user’, ‘false’, ’soft’, 1.024e+09, 0, 2.048e+09, 10, 0, 0);
– ——————————————————–
–
– 表的结构 `quotatallies`
–
CREATE TABLE `quotatallies` (
`name` varchar(30) NOT NULL default ”,
`quota_type` enum(‘user’,'group’,'class’,'all’) NOT NULL default ‘user’,
`bytes_in_used` float NOT NULL default ‘0′,
`bytes_out_used` float NOT NULL default ‘0′,
`bytes_xfer_used` float NOT NULL default ‘0′,
`files_in_used` int(10) unsigned NOT NULL default ‘0′,
`files_out_used` int(10) unsigned NOT NULL default ‘0′,
`files_xfer_used` int(10) unsigned NOT NULL default ‘0′
) ENGINE=MyISAM;;
如果你想设置quota,只要在ftpquotalimits表里设置一下就行了,这个表里的各个参数分别代表:
代码:
quotalimits表
name: – 用户帐号
quota type: – user, group, class, all (we use user)
per_session: – true or false (we use true)
limit_type: – 硬限制 or 软限制 (我们一般用硬限制)
bytes_in_avail: – 允许上传的字节数
bytes_out_avail: – 允许下载的字节数
bytes_xfer_avail: – 允许传输的字节数(包括上传/下载)
files_in_avail: – 允许上传的文件数
files_out_avail: – 允许下载的文件数
files_xfer_avail: – 允许传输的文件数(包括上传/下载)
五、完成最后的用户、用户组和目录设置
1、创建proftpd服务运行的用户和用户组
#pw groupadd FTPGRP -g 2001
#pw adduser FTPUSR -u 2001 -g 2001 -d /var/ftp/incoming -s /sbin/nologin
2、创建匿名登陆用户映射的系统用户和用户组
#pw groupadd ftpusers -g 2002
#pw adduser ftp -u 2002 -g 2002 -d /var/ftp/incoming -s /sbin/nologin
六、运行测试配置系统服务
1、运行proftpd服务
#/usr/local/sbin/proftpd
2、测试
在任何一台可以访问服务器的机器上测试ftp连接,使用Michael用户和testftp口令登陆,然后运行quote SITE QUOTA命令查看设置的磁盘限额信息
然后测试使用anonymous匿名用户登陆测试
3、监控和调试proftpd服务
#/usr/local/sbin/proftpd proftpd -n -d 5 -c /usr/local/etc/proftpd.conf
这样在测试和连接ftp的时候,可以在主机上看到所有的proftpd运行信息
4、日志监控
可以使用下面的命令查看系统日志、传送日志等
#tail -f /var/log/proftpd.syslog
#tail -f /var/log/proftpd.transferlog
5、配置系统自启动proftpd服务
#vi /etc/rc.conf
加入下面一行
proftpd_enable=”YES”
这样系统启动的时候会调用/usr/local/etc/rc.d/proftpd.sh脚本启动proftpd服务
ok
大功告成,大家可以根据自己的需要修改上面任何一个部分的细节,最好在自己理解的基础上进行修改,整个过程包括proftpd的配置都很简单。有问题欢迎大家来和我讨论,经过Michael测试使用,发现proftpd的确是个不错的东东!
———————————————————-
安全配置:
# ee /etc/ssh/sshd_config
修改22端口为您记得住的端口,防止SSH扫描。
计算机启动时候发现文件系统失效,将以-y参数运行fsck
# ee /etc/rc.conf
fsck_y_enable=”YES”
使用mod_dosevasive对抗DDos攻击可参考Michael`s blog
为什么登录SSH和FTP时有长时间的停顿?
DNS引起的。
在proftpd.conf里写入
UseReverseDNS off
IdentLookups off
在sshd_config里写入
UseDNS no
FreeBSD下用rsync对网站进行同步镜像备份
前言
rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。rsync的最新版本可以从 http://rsync.samba.org/rsync/获得。它的特性如下:
1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
本文介绍了如何使用rsync服务从Linux到Windows和linux进行远程备份
软件及平台
FreeBSD 5.2 (Server and Client)
Server IP:192.168.83.80 Hostname: freebsd-1
Client IP:192.168.83.81 Hostname: freebsd-2
apache_1.3.29
rsync-2.5.7
目的
备份Rsync Server(192.168.83.80)上的 /usr/local/apache2/htdocs 目录下所有内容,到Rsync Client(192.168.83.81)的/backup/www 下
安装及配置
一,Rsync Server
Step 1: 安装
freebsd-1#cd /usr/ports/net/rsync
freebsd-1#make install clean
Step 3: 配置rsyncd.conf
freebsd-1#vi /usr/local/etc/rsyncd.conf //加入以下内容
[www]
comment = web server backup
path = /usr/local/apache2/htdocs
auth users = tonny
uid = nobody
gid = nogroup
secrets file = /usr/local/etc/rsyncd.secrets
read only = no
Step 4: 配置rsyncd.secrets
freebsd-1#vi /usr/local/etc/rsyncd.secrets //加入以下内容
tonny:123456 // 认证所需的用户名/密码
freebsd-1#chmod 600 rsyncd.secrets
Step 5: 配置rc.conf
freebsd-1#vi /etc/rc.conf //加入以下内容
rsyncd_enable=”YES”
Step 6: 启动 Rsync daemon模式
freebsd-1#vi /usr/local/etc/rc.d/rsyncd.sh //加入以下内容
command_args=”-4 –daemon” < <<--- 启用ipv4 协议
freebsd-1#/usr/local/etc/rc.d/rsyncd.sh start
Step 7: 检查Rsync daemon启动状态
freebsd-1# sockstat | grep rsync
root rsync 440 3 dgram -> /var/run/log
root rsync 440 4 tcp4 *:873 *:*
二,Rsync Client
Step 1: 安装
freebsd-2#cd /usr/ports/net/rsync
freebsd-2#make install clean
Step 2: 建立备份目录
freebsd-2#cd /
freebsd-2#mkdir -p backup/www
Step 3: 配置rsyncd.secrets
freebsd-2#vi /usr/local/etc/rsyncd.secrets //加入以下内容
123456 //Rsync Server上的认证密码,不用输入用户名
freebsd-2#chmod 600 rsyncd.secrets
Step 4: 检查备份同步状态
freebsd-2#/usr/local/bin/rsync -avzP –delete
–password-file=/usr/local/etc/rsyncd.secrets tonny@192.168.83.80::www
/backup/www/
—>>> 将Rsync Server的Web页面,备份或同步到了Rsync Client的/backup/www下
Step 5: Auto Rsync Shell:
freebsd-2#cd /usr/local/etc/rc.d/
freebsd-2#chmod a-x rsyncd.sh
freebsd-2#vi rsync.sh //加入以下内容
#!/bin/sh
/usr/local/bin/rsync -avzP –delete
–password-file=/usr/local/etc/rsyncd.secrets tonny@192.168.83.80::www
/backup/www/
freebsd-2#chmod a+x rsync.sh
freebsd-2#crontab -e //加入以下内容(每天下午5点半自动备份同步)
30 17 * * * /usr/local/etc/rc.d/rsync.sh
三,高级应用(Rsync With SSH)
Rsync Server
freebsd-1#/usr/bin/ssh-keygen -d
Rsync Client
freebsd-2#/usr/bin/ssh-keygen -d
freebsd-2#scp ~/.ssh/id_dsa.pub 192.168.83.80:/root/.ssh/authorized_keys
freebsd-2#ssh-agent csh 或 (ssh-agent bash) —>>> #echo $SHELL
查看当前SHELL
freebsd-2#ssh-add id_dsa —>>> 输入 passphase
freebsd-2#/usr/local/bin/rsync -avzP –delete -e ssh 192.168.83.80:/usr/local/apache2/htdocs/ /backup/www
htdocs/不加斜线,会在备备份机上建立一个文件夹
PS: 参数说明
-a, –archive archive mode, equivalent to -rlptgoD
//档案模式
-v, –verbose
//详细模式
-z, –compress compress file data
//压缩文件
-P equivalent to –partial –progress
//显示进度
–delete
This tells rsync to delete any files on the receiving side
that
aren’t on the sending side.
//保持远程机器的文件同步性
-e ssh use SSH connection
//使用SSH连接,保证数据安全
-u增量同步,即服务器端有新文件时客户端只同步新文件
使用PHP的Curl库模拟访问
一 22nd
转:
bool curl_setopt (int ch, string option, mixed value)
curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。
下列选项的值将被作为长整形使用(在option参数中指定):
*CURLOPT_INFILESIZE: 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。
*CURLOPT_VERBOSE: 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。
*CURLOPT_HEADER: 如果你想把一个头包含在输出中,设置这个选项为一个非零值。
*CURLOPT_NOPROGRESS: 如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一个非零值。
注意:PHP自动设置这个选项为非零值,你应该仅仅为了调试的目的来改变这个选项。
*CURLOPT_NOBODY: 如果你不想在输出中包含body部分,设置这个选项为一个非零值。
*CURLOPT_FAILONERROR: 如果你想让PHP在发生错误(HTTP代码返回大于等于300)时,不显示,设置这个选项为一人非零值。默认行为是返回一个正常页,忽略代码。
*CURLOPT_UPLOAD: 如果你想让PHP为上传做准备,设置这个选项为一个非零值。
*CURLOPT_POST: 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
*CURLOPT_FTPLISTONLY: 设置这个选项为非零值,PHP将列出FTP的目录名列表。
*CURLOPT_FTPAPPEND: 设置这个选项为一个非零值,PHP将应用远程文件代替覆盖它。
*CURLOPT_NETRC: 设置这个选项为一个非零值,PHP将在你的 ~./netrc 文件中查找你要建立连接的远程站点的用户名及密码。
*CURLOPT_FOLLOWLOCATION: 设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)。
*CURLOPT_PUT: 设置这个选项为一个非零值去用HTTP上传一个文件。要上传这个文件必须设置CURLOPT_INFILE和CURLOPT_INFILESIZE选项.
*CURLOPT_MUTE: 设置这个选项为一个非零值,PHP对于CURL函数将完全沉默。
*CURLOPT_TIMEOUT: 设置一个长整形数,作为最大延续多少秒。
*CURLOPT_LOW_SPEED_LIMIT: 设置一个长整形数,控制传送多少字节。
*CURLOPT_LOW_SPEED_TIME: 设置一个长整形数,控制多少秒传送CURLOPT_LOW_SPEED_LIMIT规定的字节数。
*CURLOPT_RESUME_FROM: 传递一个包含字节偏移地址的长整形参数,(你想转移到的开始表单)。
*CURLOPT_SSLVERSION: 传递一个包含SSL版本的长参数。默认PHP将被它自己努力的确定,在更多的安全中你必须手工设置。
*CURLOPT_TIMECONDITION: 传递一个长参数,指定怎么处理CURLOPT_TIMEVALUE参数。你可以设置这个参数为TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。这仅用于HTTP。
*CURLOPT_TIMEVALUE: 传递一个从1970-1-1开始到现在的秒数。这个时间将被CURLOPT_TIMEVALUE选项作为指定值使用,或被默认TIMECOND_IFMODSINCE使用。
下列选项的值将被作为字符串:
*CURLOPT_URL: 这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项。
*CURLOPT_USERPWD: 传递一个形如[username]:[password]风格的字符串,作用PHP去连接。
*CURLOPT_PROXYUSERPWD: 传递一个形如[username]:[password] 格式的字符串去连接HTTP代理。
*CURLOPT_RANGE: 传递一个你想指定的范围。它应该是”X-Y”格式,X或Y是被除外的。HTTP传送同样支持几个间隔,用逗句来分隔(X-Y,N-M)。
*CURLOPT_POSTFIELDS: 传递一个作为HTTP “POST”操作的所有数据的字符串。
*CURLOPT_REFERER: 在HTTP请求中包含一个”referer”头的字符串。
*CURLOPT_USERAGENT: 在HTTP请求中包含一个”user-agent”头的字符串。
*CURLOPT_FTPPORT: 传递一个包含被ftp “POST”指令使用的IP地址。这个POST指令告诉远程服务器去连接我们指定的IP地址。 这个字符串可以是一个IP地址,一个主机名,一个网络界面名(在UNIX下),或是‘-’(使用系统默认IP地址)。
*CURLOPT_COOKIE: 传递一个包含HTTP cookie的头连接。
*CURLOPT_SSLCERT: 传递一个包含PEM格式证书的字符串。
*CURLOPT_SSLCERTPASSWD: 传递一个包含使用CURLOPT_SSLCERT证书必需的密码。
*CURLOPT_COOKIEFILE: 传递一个包含cookie数据的文件的名字的字符串。这个cookie文件可以是Netscape格式,或是堆存在文件中的HTTP风格的头。
*CURLOPT_CUSTOMREQUEST: 当进行HTTP请求时,传递一个字符被GET或HEAD使用。为进行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request.
注意: 在确认你的服务器支持命令先不要去这样做。
下列的选项要求一个文件描述(通过使用fopen()函数获得):
*CURLOPT_FILE: 这个文件将是你放置传送的输出文件,默认是STDOUT.
*CURLOPT_INFILE: 这个文件是你传送过来的输入文件。
*CURLOPT_WRITEHEADER: 这个文件写有你输出的头部分。
*CURLOPT_STDERR: 这个文件写有错误而不是stderr。
用来获取需要登录的页面的例子,当前做法是每次或许都登录一次,有需要的人再做改进了:)
例子:
$cookie_jar = tempnam(‘./tmp’,'cookie’);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, ‘http://******’);
curl_setopt($ch, CURLOPT_POST, 1);
$request = ‘email_address=&password=&action=’;
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
//把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
//设定返回的数据是否自动显示
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//设定是否显示头信息
curl_setopt($ch, CURLOPT_HEADER, false);
//设定是否输出页面内容
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_exec($ch);
curl_close($ch);
//get data after login
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, ‘http://*****’);
curl_setopt($ch2, CURLOPT_HEADER, false);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_jar);
$orders = curl_exec($ch2);
echo ‘
'; echo strip_tags($orders); echo '
‘;
curl_close($ch2);
实践证明很稳定:)
关于 CURL 的几点心得
一 22nd
CURL 是 Client URL Library Functions 的缩写,由 Daniel Stenberg 创建,更多内容可以参考他的网站。最近几天突然对 HTTP 采集有了兴趣。之前我在做这方面程序,一般通过两种方法,一个是利用 PHP 自身的文件操作函数。PHP 的 fopen,readfile 都是可以支持 http 协议的,这样可以很方便的获取互联网上的内容。另一种方法是通过 PHP 的 Socket 函数,这个方法的好处是对各种协议都可以支持,缺点是使用起来比较麻烦,要对协议有一定的了解。在 HTTP 获取方面,运用 Socket 的 Snoopy 类是一个非常好用的 PHP HTTP 客户端,也是我原来最常用的方法。
随便翻翻 PHP 手册就会发现,PHP 本身可以支持 libcurl。用 C/C++ 写成的 libcurl 相比 Snoopy 更快速更可靠,而且除了 HTTP 协议外,还广泛支持其他协议( https, ftp, ladp 等等)。libcurl 并不是 PHP 默认加载的模块,具体如何启用可以参考 PHP 手册,这里就不多说了。PHP libcurl 使用非常简单,例如:
< ?php
$ch = curl_init("http://www.php.net");
curl_exec($ch);
curl_close($ch);
?>
三行简单的程序就可以完成对 http://www.php.net 页面的读取并输出。当然更多的用法可以参考 PHP 手册。这里只说说我在写程序时遇到的一个问题,例如下面的程序:
< ?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net
curl_setopt($ch, CURLOPT_HEADER, 1); //返回内容中包含 HTTP 头
curl_setopt($ch, CURLOPT_NOBODY, 1); //不读取页面内容
curl_exec($ch); //执行 (1)
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net
curl_setopt($ch, CURLOPT_HEADER, 0); //返回内容中不包含 HTTP 头
curl_setopt($ch, CURLOPT_NOBODY, 0); //读取页面内容
curl_exec($ch); //执行 (2)
curl_close($ch);
?>
按照我的想法,程序应该可以分别返回 HTTP 响应报头和页面的内容。可是上面这段程序执行结果为:(1)处正常返回 HTTP 响应报头,(2)不会返回任何内容。查了很多资料都没有提到这个问题。最终无奈,只好在读取(2)之前重新执行 curl_init(),即将上程序改成这样:
< ?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net
curl_setopt($ch, CURLOPT_HEADER, 1); //返回内容中包含 HTTP 头
curl_setopt($ch, CURLOPT_NOBODY, 1); //不读取页面内容
curl_exec($ch); //执行 (1)
curl_close($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net
curl_setopt($ch, CURLOPT_HEADER, 0); //返回内容中不包含 HTTP 头
curl_setopt($ch, CURLOPT_NOBODY, 0); //读取页面内容
curl_exec($ch); //执行 (2)
curl_close($ch);
?>
返回结果正常。虽然可以通过这种方法解决问题,但对这个现象我感觉非常的奇怪。是 libcurl 本身的问题,还是我使用的方法不当呢?还希望熟悉 curl 的朋友帮忙指正一下。