Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2474066
  • 博文数量: 867
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 9800
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 14:44
文章分类

全部博文(867)

文章存档

2007年(6)

2006年(861)

我的朋友

分类: LINUX

2006-08-10 16:36:53

在 RedHat Linux 7 上安装 CVS

CVS 版本 1.11.1.3 可能已经缺省安装在您的 RedHat Linux 7 上了。要检查是否已安装了 CVS,请输入命令 rpm -qa|grep 'cvs'。如果返回的是 cvs-1.11.1-3,就意味着已经安装了 CVS。

如果这条命令没返回任何内容,您就需要安装 CVS。CVS rpm 通常位于 RedHat Linux 7 分发版的安装 CD #2 上的 RedHat/RPMS 目录中。将该 CD 安装到 /mnt/cdrom 后,使用 rpm 命令安装 CVS:rpm -i /mnt/cdrom/RedHat/RPMS/cvs-1.11.1p1-3.i386rpm

建立 CVS 用户帐户和组

  1. 以 root 用户的身份登录。
  2. 创建一个名为 cvs 的用户,让这个用户使用 cvs 作为他的主组。
  3. 创建将在 Application Developer 中使用 cvs 的用户。本文使用 cvsdev1cvsdev2
  4. 使用 cvs 的开发者可以使用他们的私有组作为他们的主组。例如,cvsdev1 的主组是 cvsdev1,但要确保他们还属于 cvs 组。

建立文件夹和资源库

  1. 以用户 cvs 的身份登录。
  2. 在 cvs 自己的主目录(即 /home/cvs/)下创建一个名为 repository 的目录。
  3. 设置目录 /home/cvs/repository 的访问级别和访问模式:chmod 770 /home/cvs/repository
  4. 设置目录 /home/cvs/repository 的 setgid 位:chmod g+s /home/cvs/repository

    说明:在一个目录中创建文件时,该文件缺省情况下属于其所有者的主组。设置了目录的 setgid 位后,新文件将与该目录属于相同的组,而不属于其所有者的主组。例如,如果用户 cvsdev1 在目录 /home/cvs/repository 中创建了一些文件,则这些文件将属于 cvs 组而不是它的主组 cvsdev1

    这一步至关重要,因为它使 CVS 用户能够检出其他用户创建的文件。如果这一步没完成,那么当您检出另一个用户创建的文件时,操作将失败,并发出下面这条消息:

    Failed to create lock directory for /home/cvs/repository/...: Permission denied.
    Failed to obtain dir lock in repository /home/cvs/repository/...

  5. 初始化资源库:
    cvs -d /home/cvs/repository init
  6. 注销用户 cvs

修改 xinetd 服务以启用 pserver 协议

  1. 以 root 用户的身份登录。
  2. 在目录 /etc/xinetd.d 中创建一个名为 cvspserver 的文件,文件内容如下:
    # default: off
    # description: An cvs server. 
    service cvspserver
    {
       disable = no
       socket_type = stream
       protocol = tcp
       user = root
       wait = no
       server = /usr/bin/cvs
       server_args = -f --allow-root=/home/cvs/repository pserver
       log_on_success +=USERID
       log_on_failure += USERID
    }
  3. 打开 /etc/services 并核实存在下面这两行代码。如果不存在,则添加它们:
    cvspserver 2401/tcp     # CVS client/server operations
    cvspserver 2401/udp     # CVS client/server operations
  4. 重新启动 xinetd 服务:
    service xinetd restart

建立用户环境

  1. 打开文件 /etc/profile。您应该能在该文件中看到下面这些行:
    USER='id -un'
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
  2. 在环境变量 MAIL 后添加一行内容:
    CVSROOT=":pserver:$USER@localhost:/home/cvs/repository"
  3. 在该文件中,您还应该看到这样一行:
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
  4. 修改这一行并将 CVSROOT 添加到导出(export)列表中,如下所示:
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CVSROOT

用本地用户测试安装

  1. Developer 1 以 cvsdev1 的身份登录。
  2. 通过输入下面的命令来确保环境变量是正确的:
    echo $CVSROOT

    它应该返回与用户名有关的象下面这样的结果:

    :pserver:cvsdev1@localhost:/home/cvs/repository
  3. 用下面的命令登录 CVS:
    cvs login

    您将被提示提供密码。输入您的 Linux 密码。

  4. 创建一个名为 project1 的目录:
     mkdir project1
  5. 在目录 project1 中创建一个名为 Test.java 的文件,文件内容如下:
    public class Test{
       public String sayHello(String name){
          return "Hello"+name;
       }
    }
  6. 使用这些命令将 Test.java 导入到 CVS 资源库中的模块 project1
    cd /home/cvsdev1/project1
    cvs  import -m "import Test.java" project1 wsadgroup release1_0

    CVS 导入操作完成后,您应该会看到一条这样的消息:

    N  project1/Test.java
    No conflicts created by this import
  7. 备份您的源代码:
    cd
    mv project1 project1.sav
  8. 从 CVS 资源库检出 project1
    cd
    cvs checkout project1

    您应该会看到在 /home/cvsdev1 下创建了一个名为 project1 的新目录,该目录下有一个文件 Test.java 和一个目录 CVS

  9. Developer 2 以 cvsdev2 的身份登录。
  10. cvsdev2 登录 CVS:
    cvs login
  11. cvsdev2 从 CVS 检出 project1
    cvs checkout project1

    您应该会看到这样一条来自 CVS 的消息:

    cvs server:Updating project1
    U project1/Test.java
  12. Test.java(位于目录 project1 中)添加一个新方法:
    public String sayBye(String name){
       return "Bye, " + name;
    }
  13. Test.java 检入到资源库中:
    cvs commit -m "checkin Test.java" Test.java

    您应该会看到这样一条来自 CVS 的消息:

    Checking in Test.java;
    /home/cvs/repository/project1/Test.java, v <-- Test.java
    new revision: 1.2; previous revision: 1.1
    done

    用户 cvsdev1 用下面这些命令捕获 cvsdev2 所做的更改:

    cd /home/cvsdev1/project1
    cvs update Test.java

    您应该会看到这样一条来自 CVS 的消息:

    U Test.java

    您可以用编辑器打开 Test.java 来查看 cvsdev2 所做的更新。

用 Application Developer 测试安装

  1. 打开 Team Perspective,选择 Repositories 视图并在工作台(Workbench)中选择 File => New => Other。在 CVS 类别中选择 Repository Location 并单击 Next。完成资源库位置向导。下面简要描述了向导的这个面板上的 CVS 术语:

    Connection type
    您想用来连接到 CVS 服务器的协议。缺省值是 pserver,它代表密码服务器协议。这是我们刚才在 RedHat Linux 7 中设置的连接类型。
    User name
    您用来登录到 CVS 服务器中的用户名。例如我们刚才在 RedHat Linux 7 中定义的 cvs 组中的 cvsdev1 或 cvsdev2。
    Host name
    您想连接到的服务器的机器名。它将是 RedHat Linux 机器的主机名或 IP 地址。
    Repository path
    服务器上的资源库位置的全限定路径。对于我们的安装和配置,它将是:/home/cvs/repository
    CVS location
    Application Developer 用来连接到资源库的完整位置。当您填好前面几个字段时,它将被动态构建。
    Validate on finish
    它在返回到 IDE 前测试资源库连接。请一直启用它作为第一次连接性测试。

    图 1.

  2. 单击 Finish。如果 Application Developer 能够连接到 CVS 服务器,您将被提示提供该用户标识的密码。请参见下图 2。

    图 2.

    一旦用户标识和密码通过验证,您就会返回到 Repositories 视图,并且该视图上多了一个 Application Developer 连接到的新资源库条目。

  3. 展开 Streams => HEAD => project1,您就可以看到版本为分发版 1.2 的 Test.java,这与我们在“用本地用户测试安装”这一节的中看到的一致。

    图 3.

  4. 右键单击 Test.java 并选择 Show in Resource History。在 Resource History 视图中,您可以看到 cvsdev1 何时对 Test.java 进行了第一次修订,在代码发生更改后,cvsdev2 何时把 Test.java 检入到了资源库中。

    图 4.

    图 5.

    5. 最后,右键单击 project1 并选择 Add to Workspace。您们就可以开始对 Application Developer 中的 project1 进行操作了!

    图 6.

结束语

本文已经描述了如何在 RedHat Linux 中配置 CVS。我希望这篇文章会对您有所帮助,并欢迎所有的反馈。

沈家近代史

Linux下面查看硬件信息的工具dmidecode的介绍

 dmidecode是一个非常好的软件,它可以全面的显示你系统的信息,包括bios、cpu、内存等信息。
     我用的是e.pku.edu.cn搜索到的dmidecode-2.4.tar.gz, 安装过程很简单:
 [root@tony dmidecode-2.4]#mv dmidecode-2.4.tar.gz /usr/local/
 [root@tony dmidecode-2.4]#tar -xzvf dmidecode-2.4.tar.gz
 [root@tony dmidecode-2.4]# make install
 install -m 755 dmidecode /usr/local/sbin
 install -m 755 biosdecode /usr/local/sbin
 install -m 755 ownership /usr/local/sbin
 install -m 755 vpddecode /usr/local/sbin
 install -m 644 man/dmidecode.8 /usr/local/man/man8
 install -m 644 man/biosdecode.8/usr/local/man/man8
 install -m 644 man/ownership.8 /usr/local/man/man8
 install -m 644 man/vpddecode.8 /usr/local/man/man8 就完成了。
    可以看到上面有四个可执行文件分别是:dmidecode、biosdecode、ownership、v pddecode。我们最常用的是前两个命令。用dmidecode可以显示非常详细的硬件信息。
     另外,还有些小技巧。比如,显示有几条内存:
    dmidecode |grep -A16 "Memory Device$"
    显示CPU的详细信息: dmidecode |grep -A42 "Processor"|more
    注:-A42表示显示一下的行数,你可以根据自己的情况修改。
 
 
查看,主板的序列号
dmidecode |grep 'Serial Number'

dmidecode | grep 'Serial Number' | awk '{print $3}' | tail -1

-------------------------------------------------------------------------

$ dmesg 

命令不是很简介方便吗? 
robinswan 评论于:2006-03-28 22:47:33 (219.136.73.★)

解決 Linux ip_conntrack: table full 的方法

原本 Linux NAT 用得好好的, 沒想到幾天前卻出現了無法上網的情況, 而系統記錄也出現了這樣的訊息:

ip_conntrack: table full, dropping packet.

後來才知道, Linux NAT 的 ip_conntrack 模組會記錄 tcp 通訊協定的 established connection 記錄, 而且預設 timeout 時間長達五天 (432,000 秒), 因此只要 LAN 中有人使用 P2P 軟體 (如: eDonkey、BT...) 就容易發生這種問題.

解決方法 (1): 加大 ip_conntrack_max 值

查出原本的 ip_conntrack_max 值:
指令: cat /proc/sys/net/ipv4/ip_conntrack_max

寫入理想的數值 (每一個 ip_conntrack buffer 會佔用 292 Bytes)
指令: echo "數值" > /proc/sys/net/ipv4/ip_conntrack_max
例如: echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max
這個效果是暫時的, 如果要每次開機都使用新的數值, 需將上述指令寫入 /etc/rc.d/rc.local
或是在 /etc/sysctl.conf 加入: net.ipv4.ip_conntrack_max = 數值
或使用指令: sysctl -w net.ipv4.ip_conntrack_max=數值

解決方法 (2): 降低 ip_conntrack timeout 時間

重設 ip_conntrack_tcp_timeout_established (原值: 432000, 單位: 秒)
指令: echo "數值" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
例如: echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

開機自動設置的作法同方法(1).

其他相關指令:

查看目前 ip_conntrack buffer 使用狀況
指令: grep conn /proc/slabinfo

結果實例: ip_conntrack 3024 4090 384 409 409 1 (各值說明如下)

ip_conntrack the cache name
3024 the number of currently active objects
4090 the total number of available objects
384 the size of each object in bytes
409 the number of pages with at least one active object
409 the total number of allocated pages
1 the number of pages per slab are given

man slabinfo 可查詢詳細說明.

查出目前 ip_conntrack 記錄最多的前五名 IP
指令: cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5

結果實例:

2816 192.168.1.100
14 163.30.85.129
6 220.132.142.175
6 127.0.0.1
4 218.187.5.223

由此可知, 192.168.1.100 佔用了絕大多數的 buffer, 推斷這個 IP 的 User 可能使用了 P2P 軟體.

 

用SrvRepor远程监控Linux服务器

   系统管理员不在机房时,如何继续对Linux服务器进行监控和管理,如何全面了解Linux服务器的运行状态,是系统管理员需要面对的问题。实现对Linux服务器远程管理和监控的方法很多,这里主要介绍使用SrvReport这款Linux专用远程监控软件,对Linux服务器进行远程监控管理。

    SrvReport配置方法

    SrvReport是一款功能强大的Linux服务器远程监控软件。它能够根据Linux系统管理员的设定,定期把Linux服务器运行状况的各种参数通过电子邮件的方式发送到指定的电子信箱中。SrvReport所发送的记录Linux服务器运行状况信息的邮件,不只是简单地采用了HTML或TXT格式。邮件中的HTML文件里采用了柱型条、高亮度对比文字、表格和详细列表记录的方式,对Linux服务器运行状况的各项参数进行了分类记录。使得Linux系统管理员通过阅读HTML邮件,很容易就能对Linux服务器的情况有一个很全面的了解。

    SrvReport这款开发源码软件的安装和配置相当简单。用户可以从下载到最新版本的SrvRepor压缩包。通过以下命令解压SrvRepor压缩包:
    # tar xzfv srvreport-x.xx.tgz

    进入SrvReport/bin目录,将srvreport.pl文件加入到Linux系统中的crontab,以便让SrvReport定期运行。在编辑bin/srvreport.conf.文件时,在“mailAddr:”中填写用户指定接收SrvRepor所产生报告的电子邮件地址。

    在编辑bin/srvreport.conf文件时,除了要填写指定接受报告的电子邮件信箱之外,还需要根据实际情况,修改bin/srvreport.conf文件中诸如HTML报告存储地址、报告图片存储地址和报告所需要记录的信息项目等几个模块参数。

    参考配置

    为了方便配置SrvReport,用户可以从其软件压缩包的/DOC目录中查看一份名为EXAMPLE.HTML的完整的srvreport.conf文件的配置清单。以下就是笔者按照“EXAMPLE.HTML”所配置的一份srvreport.conf配置清单,以粗体显示的变量可以根据Linux服务器和网络的实际情况进行修改。

## Configuration File for SrvReport
# Receiver of the mail-report(接收srvreport报告的电子邮件地址)
MailReport = webmaster@myschool.org

# 20041116130854.htm for saving the html-report(保存HTML报告的文件名)
# may contain %%YYYY, %MM, %DD, which will be replaced with
# the apropriate values
(%YYYY, %MM, %DD分别表示年、月、日。一般由srvreport自动生成)
FileReport = ../web/html/%%YYYY-%%MM-%%DD.html

# path where the images are located(图片文件所保存的路径)
FileReportImgPath = ../../images/

# If you want an up-to-date file, then you should set this to 1
(如果你需要最新的文件报告,可以将FileReportCreateAlways和ReportWithTime的值设置为1)
FileReportCreateAlways = 1
ReportWithTime = 1

# This defines the order of the report
(定义srvreport所要监控的Linux服务器所提供的服务)
order = Traffic CPUUsage WebServer FTPServer 
FTPLogs Postfix Warnings LastLogins ChkRootKit


    除了修改电子邮件地址和以加粗显示的几项参数之外,配置清单中大多数默认参数都是不需要修改的。当然,假设用户的Linux服务器中没有提供FTP服务,那么删除配置清单的[FTPServer]这个模块即可。

scp和rsync的使用

近段时间工作需要做了些scp和rsync的异地安全备份,整理了一下,希望多大家有用。

scp的备份指南:
需求:用scp自动完成异地文件的定时copy
难点:如何让异地主机建立安全的信任关系

1、在A机器上用root运行ssh-keygen,将生成/root/.ssh/identity和/root/.ssh/identity.pub两个文件;

2、在A机器上运行scp /root/.ssh/identity.pub test@192.168.1.10:/upload/.ssh/authorized_keys(假设B机器的IP地址为192.168.1.10,B机器上开了用户test,要上传到的目录是/upload,需输入密码)。目的是将本地的identity.pub放到远程机器上并改名为authorized_keys,这样就建立了新任主机,以后就不需要每次ssh都需要输入密码了;

3、通过crontab建立脚本,例:30 02 * * 1-5 scp /home/data/* test@192.168.1.10:/upload。
(每天2:30am自动将/home/data下面的所有文件以test用户名传到远程主机192.168.1.10的/upload目录中);

认证原理:
  如果你希望从A作为用户user1 SSH 到B 作为用户user2, 若要用RSA键对法认证且不需要密码,则B上的ssh 后台程序拿出~user2/.ssh/authorized_keys中的与A有关的RSA公钥来对A上的以user1身份运行的ssh客户程序进行挑战,前面我们已经把A上的identity.pub拷贝到B上作为authorized_keys了。则A保持私钥identity,而B上的sshd又拿出A的公钥来挑战,因此成功,你可以加很多行到authorized_keys以允许其它服务器的公钥可以加进来。

scp特点:
使用ssl加密,安全性高。

rsync的备份指南:
需求:用rsync完成异地文件的同步
难点:如何建立异地信任关系

1、在A主机上(rsync服务器)上编译安装rsync,需要版本在2.4.3以上(),在/etc目录下建立rsyncd.conf文件,内容如下:
uid = nobody
gid = nobody
use chroot = no                         # 不使用chroot
max connections = 4                 # 最大连接数为4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock         # 日志记录文件

[test]                                 # 这里是认证的模块名,在客户端需要指定
   path = /home/test                 # 需要同步的目录
   comment = test folder
   uid = root
   ignore errors                 # 可以忽略一些无关的IO错误
   read only = yes                 # 只读
   list = no                         # 不允许列文件
   auth users = rsynctest        # 认证的用户名,如果没有这行,则表明是匿名
   secrets file = /etc/test.scrt         # 认证用户密码文件

2、在/etc下建立test.scrt文件,输入:
用户名:密码
例:rsynctest:testrsync
将文件属性修改为600(千万注意)

3、启动rsync服务:rsync --daemon (rsync运行在tcp 873端口,可以通过netstat -an|grep LISTEN察看)。

4、在B主机上(rsync客户机)上建立/etc/test文件,内容为A主机的密码,例:
testsync

5、用crontab建立脚本,例:0 21 * * 1-5 rsync -vzrtp --progress --delete --password-file=/etc/test rsynctest@192.168.1.10::test /home/rsynctest

rsync中的参数:v是verbose,z是压缩,r是recursive,tp都是保持文件原有属性如属主、时间
的参数。--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。--password-file=/etc/test来指定密码文件,这样就可以在脚本中使
用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读(600)。

rsynctest@192.168.1.10中,rsynctest是指定密码文件中的用户名,192.168.1.10是A主机的IP地址::test是指模块名[test],也就是在/etc/rsyncd.conf中自定义的名称。最后的/home/rsynctest是备份到本地的目录名。
(也可以用-e ssh的参数建立起加密的连接,然后和scp中信任主机的办法一样如法炮制)
(在上面实例中的rsynctest并不是真实的用户,可以根据自己需要文本定义,这也是使用rsync的一大好处)

rsync的特点:
特性如下:

1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6、支持匿名传输。

rsync的功能还很强大,深入的眼就可以到官方网站上了解。


linux笔记

这些是我在学习linux时间里记在笔记本上的东西,希望对大家有用!

[b:935c86ad7b]1[/b:935c86ad7b].更改telnet登录慢的问题:
cd /etc
vi resolv.conf
将里面内容清空

[b:935c86ad7b]2[/b:935c86ad7b].更改root用户不能直接远程登录问题:
cd /etc
cd pam.d
vi login
注释掉这行
#auth       required    pam_securetty.so   //该行注释掉

[b:935c86ad7b]3.[/b:935c86ad7b]挂接USB移动硬盘
将移动硬盘挂上. 
#df  查看Linux下硬盘盘符
mount /dev/sda1 /mnt/usb (举例)

[b:935c86ad7b]4.[/b:935c86ad7b]Linux时区同步问题(安装ntp软件过程)
首先在
下载了一个windows的NTP服务程序:ntp4171.zip
windows 192.168.1.32
1.安装是提示设置服务器地址,我设置的本机widows机器的IP
2.ntpd的控制在:
   控制面板->管理工具->组件服务-NetworkTimeProtocol 
3.可以启动ntpd守护进程保持时间同步
4.在C:WINNT目录下有个ntp的配置文件ntp.conf
  设置为:
  server  127.127.1.0  prefer
  fudge   127.127.1.0  stratum  10
5.确定ntp是否工作: ntpq -p 
linux和Windows同步,我用的是RedHat 9.0
 执行命令:ntpdate 192.168.1.32
 你就会发现你的时间变化了,和192.168.1.32的时间一样
 如果执行命令出现一下错误
1.提示:7 Dec 19:24:55 ntpdate[2120]: the NTP socket is in use, exiting
 这个是你linux机器上已经存在这个进程,输入:ps -ef | grep ntpd
 Kill掉ntp的进程
2.提示:No Server suitable for synchronization found
  这个是最容易出现的问题,比较常见的是配置好服务器并启动服务器进程后,马上
  启动客户进程,那么客户进程就会报错。解决方法是,在大约3-5分钟以后启动进程就行
我想每10分钟就和Windows服务同步时间
1.创建自己的一个crontab文件,随便建立一个文件date.cron,首先可以使用任何文本
  编辑器建立一个新文件,然后向其中写入需要运行的命令和要定期执行的时间。
  vi date.cron加入下面要运行的命令和要定期执行的时间
  */10 * * * * /usr/sbin/ntpdate 192.168.1.32
  然后存盘退出
2.使用crontab命令来安装这个文件,使之成为该用户的crontab文件。键入:
  crontab date.cron
  这个文件已经建立好了
3.使用命令:
  crontab -l  (查看安排的作业序列)可以看到刚才的作业
  如:
  [root@NXD-TEST root]# crontab -l
  # DO NOT EDIT THIS FILE - edit the master and reinstall.
  # (date.cron installed on Tue Dec  7 18:22:42 2004)
  # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
  */10 * * * * /usr/sbin/ntpdate 192.168.1.32
现在就OK了,每10分钟Linux就和服务端同步一次。

[b:935c86ad7b]5.[/b:935c86ad7b]更改Linux启动时用图形界面还是字符界面
cd /etc
vi inittab
将id:5:initdefault:  其中5表示默认图形界面
改id:3: initdefault:  3表示字符界面

[b:935c86ad7b]6.[/b:935c86ad7b]重新启动xinetd)
/etc/init.d/xinetd restart

[b:935c86ad7b]7.[/b:935c86ad7b]重启smb服务
/etc/init.d/smb restart

[b:935c86ad7b]8.[/b:935c86ad7b]配置smb可以被哪些IP所用.
cd /etc/samba
Vi  smb.conf
找到hosts allow = 192.168.1. 192.168.2. 127.
修改其为哪些机器所用,注意IP之间用逗号分开
举例:
  hosts allow =192.168.1.110,192.168.1.120

[b:935c86ad7b]9.[/b:935c86ad7b]禁止在后台使用CTRL-ALT-DELETE重起机器
  cd  /etc/inittab
  vi inittab 在文件找到下面一行
  # Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now   (注释掉这一行)
 如:  # Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now  

[b:935c86ad7b]10.[/b:935c86ad7b]修改主机名
  vi  /etc/sysconfig/network 
修改HOSTNAME一行为HOSTNAME=主机名

[b:935c86ad7b]11[/b:935c86ad7b].重新启动FTP服务
   /sbin/service vsftpd restart

[b:935c86ad7b]12.[/b:935c86ad7b]查看开机检测的硬件
   dmesg | more

[b:935c86ad7b]13.[/b:935c86ad7b]查看硬盘使用情况
 df –m

[b:935c86ad7b]14.[/b:935c86ad7b]查看目录的大小
  du –sh  dirname

[b:935c86ad7b]15.[/b:935c86ad7b]解压小全
  tar  xvfj  lichuanhua.tar.bz2
  tar  xvfz  lichuanhua.tar.gz
  tar  xvfz  lichuanhua.tgz
  tar  xvf   lichuanhua.tar
  unzip     lichuanhua.zip
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
---------------------------------------------
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf FileName.tar.tgz FileName
---------------------------------------------
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
---------------------------------------------
.rar
解压:rar a FileName.rar
压缩:rar e FileName.rar


rar请到:下载!
解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp rar_static /usr/bin/rar
---------------------------------------------
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName

lha请到:~ishii/lhaunix/下载!
解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[root@www2 tmp]# cp lha /usr/bin/
---------------------------------------------
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName
[b:935c86ad7b]16.[/b:935c86ad7b]显示内存使用情况
  free –m

[b]17.忘记了root密码
一. lilo
1. 在出现lilo菜单的时候按“ctrl+x”或者“Tab",然后输入:linux single
或者用光盘
在出现 lilo: 提示时键入 linux single
画面显示 lilo: linux single
2. 回车可直接进入linux命令行
3. #vi /etc/shadow
将第一行,即以root开头的一行中root:后和下一个:前的内容删除,
第一行将类似于
root::......
保存
4. #reboot重启,root密码为空

二.grub
1.出现grub画面时,用上下键选启动Linux的哪一项,按e键
2.上下键选择 kernel /boot/……… 然后按e键
3.修改现在见到的命令好,加入single 结果:
kernel /boot/vmlinuz-2.4.20-8 single ro root=LABEL=
4.回车返回,按b键启动,直接进入linux命令行
直接执行: passwd root
修改密码,你的密码就搞定
5.也可以修改/etc/shadow中
将第一行,即以root开头的一行中root:后和下一个:前的内容删除,
第一行将类似于
root::......
保存
reboot重启,root密码为空

18.显示系统运行了多长时间
   uptime

19.重新启动网络
  /etc/init.d/network restart

20.显示开机自检的内容命令
  dmesg

21.查看端口
  netstat –an
  netstat -anp
 
22..端口的详细列表
  /etc/services

23.查看物理信息
 lspci 

24.安装图形界面不能出现,使用解析进行安装
 Linux lowres (使用的是640X480分辨率)

25.屏蔽主机的ping 命令,是被别人无法ping你的机器
  echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

26.彻底删除Oracle安装的程序,删除一下几个目录
   /etc/oraInst.loc   /tmp/   /etc/oratab      $ORACLE_BASE/*

27.Linux启动到文字界面(不启动Xwindows界面)
   vi /etc/inittab在下面一行
   id:5:initdefault:  一行中的5改为3
   启动Xwindows 是5
   文字截面是   3


28.RPM包
1.卸载  RPM –e 
2.查询  rpm –q
-a  查询所有已安装的软件包
-f  查询包含文件的软件的包
-i  显示软件包信息
-l  显示软件包的文件列表
   3.验证    rpm –v
rpm –Va 验证整个文件丢失了哪些文件
碰到不认识的文件使用
rpm –qf
4.一个rpm包安装到哪里去了(已经安装的包)
rpm –qi 包名(这里不包括.rpm后缀的软件名称,也就是说只能用mysql或者mysql-3.23.54a而不是mysql-3.23.54a.rpm)
   5.一个rpm包中包含哪些文件
一个没有安装过的软件包:使用rpm –qip ***.rpm
一个已经安装过的软件包:  使用rpm –qi ***.rpm

29.看已经安装的字符集
   locale –a

30.抓包命令tcpdump
   例:抓获192.168.1.32 的主机收到和发出的所有的数据包
tcpdump host 192.168.1.32
截获特定的端口
tcpdump tcp port 21 host 192.168.1.32

31.文本截面的中文支持
   RH 9.0自带安装包 zhcon_0.2.3_1.rh9.i386.rpm 
         安装完成后,执行: zhcon 就可以支持中文了

32.查看端口现在运行什么程序
   lsof –i:8001

33.察看实时的日志
   tail –f /var/log/messages

34.当mount出现死的现象
   1.fuser –m /mnt/share   查出该程序的进程,然后Kill掉
   2.再umount /mnt/share

35.linux 控制 windows 
1.用RH9.0自己带rdesktop,版本是1.2.0
  命令:rdesktop –u user –f 192.168.1.70  色默认的是8位
2要达到16色,就要下载新版本1.3.0
      rdesktop –a 16 –u lichuanhua –g 800*600 192.168.1.70
       
36. Linux挂载Windows分区
mount ntfs分区 
一.单机挂windows的NTFS分区 
1. 上搜索并下载 kernel-ntfs-2.4.18-14.i686.rpm 
2. rpm -ivh kernel-ntfs-2.4.18-14.i686.rpm 
3. mkdir /mnt/share 
4. mount -t ntfs /dev/hda1 /mnt/share 
要挂载Windows分区,首先新建一个目录/mnt/share,修改/etc/fstab,在最末尾添上(假设Windows安装在硬盘的第1个分区) 
/dev/hda1 /mnt/share ntfs defaults 0 0 
二.网络上一台windows和linux机器,linux机器挂载windows上的共享文件 
windows IP:192.168.1.1 
1.linux挂载192.168.1.1(windows)上共享文件dbf,挂在linux的/mnt/share目录下,在/mnt下建立share目录 
mount -t smbfs -o username=massky,password=massky //192.168. 
1.1/dbf /mnt/share 
2.机器重启自动挂载,vi /etc/fstab最后加入: 
//192.168.1.1/dbf /mnt/share smbfs defaults,auto,username=m 
assky,password=massky 0 0

37.Oracle9i在Linux9.0上的安装
1.确保RPM开发包,使用下面命令查看是否已安装这些包
       rpm -q gcc cpp compat-libstdc++ glibc-devel glibc-kernheaders binutils
2.进行解压
      zcat Linux9i_Disk1.cpio.gz | cpio -idmv
      zcat Linux9i_Disk2.cpio.gz | cpio -idmv
      zcat Linux9i_Disk3.cpio.gz | cpio -idmv
3.设置内核参数
  vi /etc/sysctl.conf,加入下面参数
     kernel.shmmax=4294967295  内存512M
  计算方法为:kernel:shmmax=1024*1024*RAM(M)/2
  执行sysctl -p生效
4.建立数据目录和用户
   groupadd dba 
  groupadd oinstall 
  useradd –g oinstall –G dba oracle 
  passwd oracle 

  mkdir /opt/oracle 
  mkdir /opt/oracle/product 
  mkdir /opt/oracle/product/9.2.0 
  chown –R oracle.oinstall /opt/oracle 
  mkdir /var/opt/oracle 
  chown oracle.dba /var/opt/oracle 
  chmod 755 /var/opt/oracle 
5.vi .bash_profile 设置变量
  export LD_ASSUME_KERNEL=2.4.1
  export ORACLE_BASE=/opt/oracle
  export ORACLE_HOME=/opt/oracle/product/9.2.0
  export ORACLE_SID=ora9i
  export ORACLE_TERM=xterm
  export TNS_ADMIN=$ORACLE_HOME/network/admin
  export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
  export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
  LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
  export LD_LIBRARY_PATH

export PATH=$PATH:$ORACLE_HOME/bin
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH


38.网卡的激活与停止
超级用户;
ifconfig eth0 down  停止
ifconfig eth0 up     启动

40.Linux下cvs的安装配置
1.安装CVS软件包.
2.groupadd cvs
3.useradd -g cvs cvsroot
4.chmod 777 -R /home/cvsroot
5.cd /etc
6.vi profile
 新增以下二行:
    CVSROOT=/home/cvsroot  export CVSROOT
    CVSEDIT=vi  export CVSEDIT
7.查看/etc/services文件中cvspserver 所在行的注释状态(有则把注释去掉)
8.进入 /etc /xinetd.d, vi cvspserver该文件不存在,内容如下:
   service cvspserver
   {
        disable = no
        socket_type     =stream
        wait           =no
        user           =root
        env           =HOME=
        server         =/usr/bin/cvs
        server_args     =--allow-root=/home/cvsroot pserver
        log_on_failure  +=USERID
  }
9.vi /etc/xinetd.conf 内容如下,每次开机自动启动服务:
 service cvspserver
{
   port          = 2401
   socket_type   = stream
   wait          = no
   user          = root
   server        = /usr/bin/cvs
   server_args    = -f --allow-root=/home/cvsroot pserver
   bind          = 168.168.1.110
}
重新登录 换cvsroot用户
10./etc/init.d/xinetd restart
11.cvs init(初始化:CVS版本库的初始化)
12.cvs -d :pserver:cvsroot@192.168.1.110:/home/cvsroot login(用户登录)没有任何提示信息就成功。
13.首先要导入库,假设项目名称为LinuxISQuote.
   步骤:
     1、进入LinuxISQuote.
       2、一个项目的首次导入
         cvs import LinuxISQuote lch V_0_0_1  
 此时到$CVSROOT目录下,可以看到多了一个LinuxISQuote的目录。

41.命令绝对路径
.如果不是绝对路径的话,你可以这样输入
   (1)[root@RedHat linux]# whereis adduser
        adduser: /usr/sbin/adduser /usr/share/man/man8/adduser.8.gz
       你这样输入就可以了 /usr/sbin/adduser xxx 
   (2) 或者改vi /etc/profile,加入一句:PATH=$PATH:/usr/sbin:.  export PATH,
就可以直接输入adduser

42.修改用户的权限
.改用户权限的话,你可以改vi /etc/passwd
    如:我想lll变成和root用户一样,就改: lll:x:508:508::/home/lll:/bin/bash
         改后面的 508 为和root后面的数据一样的就可以了!
         改为:lll:x:508:0::/home/lll:/bin/bash
lll就拥有root的权限了。

43.修改grub启动时的背景图片
1 将一图片转化成640*480,14色的XPM文件: 
   #convert abc.jpg -colors 14 -geometry 640x480! abc.xpm 
2 压缩生成的xpm文件,使用gzip 
#gzip -9 abc.xpm 
3 将abc.xpm.gz拷到/boot/grub下 
4 修改/boot/grub/menu.lst 
splashimage=(hd0,0)/boot/grub/abc.xpm.gz

44.VNC for Linux的安装
1.第一步在linux上安装VNCserver
      tar zxvf vnc-X.tgz
      cd X
      cp *vnc* /usr/local/bin/
   没有vnc 目录,就建vnc目录
      mkdir /usr/local/vnc
      cp -r classes/ /usr/local/vnc/
2.设置vnc server的访问密码
       vncpasswd
3.linux版vnc server的改进.首先执行vncserver
       修改/root/.vnc/xstartup里的 twm $ 为gnome-session &
4.启动vnc server
       vncserver
   注意New 'X' desktop is KILl:3  记住3是客户端要用到的端口
5.客户端启动vncviewer,输入:如192.168.1.110:3  
OK,你就看到了。。哈。。     
  如果在Windows客户机中安装了IE或NETSCAPE,还可以启动IE或netscape
然后在地址栏输入(如果是1的话)
    


45. 改变或关闭Oracle XDB的ftp和http端口
 Oracle 9i开始,创建数据库时默认包含了XDB特性。一旦启动了数据库和Listener,Oracle XDB的http服务就占用8080端口,刚好和JBoss、Tomcat等默认端口冲突。因此,必须有一个做出更改。改Tomcat等容易,只是一时不知道怎么改XDB的配置。
在Google上搜索一下,找到了答案。原来Oracle XDB的端口设置不在配置文件中,而是在数据库里。修改XDB的http和ftp服务端口的方法有3种:
1。使用sys登录Oracle,利用dbms_xdb修改端口设置
 SQL> -- Change the HTTP/WEBDAV port from 8080 to 8081
  SQL> call dbms_xdb.cfg_update(updateXML(
    2        dbms_xdb.cfg_get()
    3      , '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()'
    4      , 8081))
    5  /
  Call completed. 
  SQL> -- Change the FTP port from 2100 to 2111
  SQL> call dbms_xdb.cfg_update(updateXML(
    2         dbms_xdb.cfg_get()
    3       , '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()'
    4       , 2111))
    5  /
  Call completed. 
  SQL> COMMIT;
  Commit complete. 
  SQL> EXEC dbms_xdb.cfg_refresh;
  PL/SQL procedure successfully completed.
2。使用OEM console,选择数据库,XML Database,Configuration。更改XDB的有关设置。
3。去掉数据库的初始化参数:  dispatchers='(PROTOCOL=TCP) (SERVICE=XDB)',将会禁止XDB的http和ftp服务。

46.XML for linux的安装
我下载了两个文件:libxml2-2.6.13.tar.gz和xml4c5_4_0-redhat_80-gcc_32.tar.gz
加入环境:
export XERCESCROOT=/home/lch/xml
export PATH=$PATH:/home/lch/xml/bin
export XERCESC_NLS_HOME=$XERCESCROOT/msg
export LD_LIBRARY_PATH=$XERCESCROOT/lib:$LD_LIBRARY_PATH (on Solaris, Linux)
进入xml4c5_4_0-redhat_80-gcc_32.tar.gz解压后的目录
runConfigure -plinux -cgcc -xg++ -rpthread
./configure 
gmake

47.ace for linux的安装
由于安装说明文件“ACE-INSTALL.html”中提及的linux安装过程极少,其主要针对Unix、Windows,手动配置较多,加上本人安装后感觉“ACE-INSTALL.html”文件有些影响视听,因为主要的动作都可以由ACE包中的安装脚本ACE-install.sh自动完成,我们主要的工作就可以直接对这个安装脚本来处理即可。 
1、安装环境: 
lRedHat 9.0 
ACE安装包ACE+TAO+CIAO.tar.gz, 
, "Latest Beta Kit",beta版既是ACE的最新版。 
2、安装过程: 
第一步 
先设置ACE_ROOT环境,命令: 
“vi /etc/profile” 
在其中加入4行 
ACE_ROOT=/opt/ACE 
export ACE_ROOT 
LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH 
export LD_LIBRARY_PATH 
我是加在“export PATH USER….”后的。完成后将/etc/profile执行一次,命令: 
“chmod 555 /etc/profile” 
“/etc/profile” 
这样我们的ACE_ROOT就设置好了,可以用如下命令查看ACE_ROOT是否设置好了: 
“echo $ACE_ROOT” 
这个时候最好reboot启动一次linux。 
第二步 
不要自己手工将ACE+TAO+CIAO.tar.gz包完全解开,特别强调不要完全解开,后面可以看到安装脚本会给我们解开它的;如果你手工解开全部,安装脚本将会将你的解压缩目录删除的!我们要做的事就只是将ACE+TAO+CIAO.tar.gz包中的ACE-install.sh安装脚本单独解出来,并对其修改。我们只要这一个文件就可以。 
用mkdir建目录,如/home/my/ACE,然后将你的ACE+TAO+CIAO.tar.gz放在此目录下(用cp命令拷贝或mv命令移动到此目录)。注意这个目录将是你的一个存放ACE+TAO+CIAO.tar.gz的目录,安装脚本会来这个目录找这个文件的,这个目录和ACE_ROOT是不一样的,且ACE-install.sh也提示不要将这两个目录设置成同一个目录。ACE_ROOT将是我们的安装目标目录。 
从ACE+TAO+CIAO.tar.gz解压出单个文件ACE-install.sh: 
“tar –zxvf ACE+TAO+CIAO.tar.gz ACE_wrappers/ACE-install.sh” 
解好后,会出来一个新的子目录“ACE_wrappers”。此时可以先将ACE-install.sh移到外面的目录来: 
“mv /ACE_wrappers/ACE-install.sh .” 
“.”代表当前目录。当然ACE-install.sh在什么路径下是没什么影响的,因为我们要对ACE-install.sh的内容进行修改的,里面有很多路径要修改。 好,现在在/home/my/ACE就有了ACE-install.sh,我们现在用vi对其进行修改,修改前自己可以先备份一个。命令: 
“cp ACE-install.sh ACE-install.sh.bak” 
“vi ACE-install.sh” 
我们可以看到缺省的,这个文件是用来在UNIX下做安装的。所以我们要将其中的有关UNIX的部分换成linux即可。 
先找到“MY_ACEDIR=${HOME}/aceconfig”,将其改成“MY_ACEDIR=/home/my/ACE”,就是改成我们自己建的、放有ACE+TAO+CIAO.tar.gz文件的目录,之后去掉前面的注释“#”号。 
接着在下面一点,找到“MY_ACE_CONFIG=config-sunos5.4-sunc++-4.x.h”,将其修改成“MY_ACE_CONFIG=config-linux.h”,即改成linux下的配置文件。 继续改,找到“MY_ACE_GNU_MACROS=platform_sunos5_sunc++.GNU”,将其改成“MY_ACE_GNU_MACROS=platform_linux.GNU”。这个是各种操作系统平台下的GNU宏文件设置。 
好了,文件修改完毕,保存退出“:wq”。 
第三步 
我们的重点到了,现在就可以安装ACE了。 
此时应该是在/home/my/ACE目录下,我们执行: 
./ACE-install.sh

                                              
48.删除了 /etc/inittab  
修复办法如下!
1.首先进去linux的rescue的模式!
2.然后使用如下的命令:
rpm -qf --root /mnt/sysimage /etc/inittab
查出该文件属于哪个RPM包!
3.然后重新安装这个rpm包!
rpm -ivh --force --root /mnt/sysimage /mnt/source/Redhat/RPMS/packagename
4.sync  (将cache中的内容写入磁盘)
5.exit

49开启后台talk会话功能                                            
 开启talk功能: chkconfig talk on
 交谈         :  talk massky(用户)      
                                                     
50.不让显示器休眠
 setterm –blank 0

51.定制用户登录时显示的信息
 编辑 /etc/motd 加入登录时要显示的信息

52.查看路由信息
  netstat –rn 
  route –n 

54.显示硬件信息
   lsdev
55. 显示当前加载的核心模块
  lsmod

56.列出系统内核所有可用的模块
   modprobe –l 

57.根据进程名显示进程号
   pidof vsftpd

58. 将内容倒序读出
   rev   file.name

59.定制用户登录时显示的信息
  编辑/etc/motd  加入登录时要显示的信息

60.查看密码过期信息
   change  –l  longinname

61.显示最后一个登录到系统的用户
   last

62.显示最后一个登录不成功的登录尝试(lastb命令)
     如果在系统上不能工作,就需要你建立一个文件:touch /var/log/btmp,然后在执行 lastb命令就可以查看到最后一个不成功的登录尝试,

63.以3秒钟执行一个ls命令
   watch –n 3 ls

64.命令显示当前系统中每个用户和他运行的进程信息
    w

65.Oracle安装界面出现乱码情况
   使用oracle用户登录,执行命令:
       export LANG=en

66.非正常关机的自动磁盘修复
     /etc/sysconfig里增加一个文件autofsck.加入内容:
      AUTOFSCK_DEF_CHECK=yes
      PROMPT=yes

67.Oracle9i在RedHat7.1/7.2上的安装配置
     1创建Oracle用户帐号和安装目录 
在shell下,作为root 
groupadd dba 
groupadd oinstall 
useradd –g oinstall –G dba oracle 
passwd oracle 
mkdir /opt/oracle 
mkdir /opt/oracle/product 
mkdir /opt/oracle/product/9.2.0 
chown –R oracle.oinstall /opt/oracle 
mkdir /var/opt/oracle 
chown oracle.dba /var/opt/oracle 
chmod 755 /var/opt/oracle 
2设置环境变量 
编辑/home/oracle/.bash_profile文件,添加下列行 
export ORACLE_BASE=/opt/oracle 
export ORACLE_HOME=/opt/oracle/product/9.2.0 
export ORACLE_SID=lichuanhua
export ORACLE_TERM=xterm  
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 
export NLS_DATE_FORMAT=YYYY-MM-DD
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data 
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib 
export LD_LIBRARY_PATH 

export PATH=$PATH:$ORACLE_HOME/bin 

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib 
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib 
export CLASSPATH 
export DISPLAY=192.168.1.88:0.0

68.编译内核的步骤
   1.源码 /usr/src/linux-2.4
   2. make mrproper      (清除从前编译内核时残留的.o 文件和不必要的关联)
   3. make menuconfig  (字符界面内核配置菜单中正确设置个内核选项)
       make xconfig         (图形界面内核配置菜单中正确设置个内核选项)
   4. make dep              (设置关联文件 )
   5.make bzImage       (对于大内核,如需要SCSI支持的编译)
      make zImage         (对于小内核的编译)
   6.make modules       (编译模块)
   7. make modules_install    (安装模块 )
   8.make install            ((针对grub启动,自动装载到grub.conf上,直接重新启动就OK)

69.VMWare上linux图形界面的安装
如果你是使用VMware,那么你可以这样
首先在vmWare的VM->Install VMware tools选择install
在执行
1.mount /dev/cdrom /mnt/cdrom
2.cd /mnt/cdrom 有一个文件vmware-linux*.tar.gz
3.cp vmware-linux*.tar.gz /tmp
4.cd /tmp
5.tar zxvf vmware-linux*.tar.gz
6.进入解压目录 cd vmware-tools-distrib
7.进入解压后的目录运行安装命令./vmware-install.pl 就ok了
8.等待Vmware-insall运行完成后,重启Linux,我们就可以看到漂亮的Linux图形界面了

70.Oracle 字符集的问题(ora9i)
   sqlplus直接进去,输入命令:
    select value$ from props$ where name=' NLS_CHARACTERSET';
  显示不是ZHS16GBK,就更改,默认的是:WE8ISO8859p1
  更改命令:
   update props$ set value$='ZHS16GBK' where    name='NLS_CHARACTERSET';
重启生效

71. 查询一个系统最近何时被引导过                                                  
who   -b                                                            

72. 查系统硬件类型                                                               
uname   -m                                                            

73. 查系统的CPU类型                                                            
uname   -p                                                            

74. 查系统OS版本号                                                              
uname   -r

75.   Qt/e的安装
我是在rh9.0下面安装的
一.安装qt-x11-free-3.3.2.tar.gz
1.      我把qt-x11-free-3.3.2.tar.gz拷贝到/usr/local/qt目录下
       cd /usr/local/qt
       tar zxvf qt-x11-free-3.3.2.tar.gz
       mv qt-x11-free-3.3.2 qt

2. vi /etc/profile ,添加环境
  export QTDIR=/usr/local/qt
  export PATH=$QTDIR/bin:$PATH
  export MANPATH=$QTDIR/doc/man:$MANPATH
  export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
3.检查一下环境是否存在
 #echo $QTDIR
 应该返回 /usr/local/qt
4.#./configure
5.# make
6.qt的启动,/usr/local/qt/bin目录下面执行
 #./designer
 你就可以看到qt的界面了!

如果在make时候报错:
In file included from kernel/qtaddons_x11.cpp:25:
kernel/qt_x11_p.h:66:22: X11/Xlib.h: 没有那个文件或目录
kernel/qt_x11_p.h:71:23: X11 til.h: 没有那个文件或目录
kernel/qt_x11_p.h:72:21: X11/Xos.h: 没有那个文件或目录
kernel/qt_x11_p.h:73:23: X11/Xatom.h: 没有那个文件或目录
make[2]: *** [.obj/release-shared/qtaddons_x11.o] Error 1
make[2]: Leaving directory `/usr/local/qt/src'
make[1]: *** [sub-src] Error 2
make[1]: Leaving directory `/usr/local/qt'
make: *** [init] Error 2
这个问题我搞了半天,最后才知道
这个错是因为没有安装X11的开发包,在添加和删除里面添加上X11开发包

二.安装qt-embedded-free-3.3.2.tar.gz
1.解压qt-embedded-free-3.3.2.tar.gz
 我放在/root/qt下面
 #tar zxvf qt-embedded-free-3.3.2.tar.gz
 #cd qt-embedded-free-3.3.2
 #export QTDIR=/root/qt/qt-embedded-free-3.3.2
 #export LD_LIBRARY_PATH=/root/qt/qt-embedded-free-3.3.2/lib:$LD_LIBRARY_PATH
 #./configure
 # make
 然后就是一个漫长的过程

76. 修改ping 的TTL值(rh9)
   修改文件 /proc/sys/net/ipv4/ip_default_ttl的值(默认为64)
   如:我把ttl修改为128
   # echo 128 > /proc/sys/net/ipv4/ip_default_ttl

77..使用多达23个的虚拟控制台
假设现在有6个,仿照/etc/inittab种的文件,加入
8:2345:respawn:/sbin/mingetty tty8
10:2345:respawn:/sbin/mingetty tty10
24:2345:respawn:/sbin/mingetty tty24
要跳过VT7,因为X使用这个终端。然后telinit q以重新加载配置文件。使用左Alt+Fn在1-6和8-12件切换,使用右Alt+Fn键在13-24之间切换

78.Xmanager2的配置
不使用图形界面也可以使用Xmanager2登陆进行图形控制
#vi /etc/X11/xdm/xdm-config
在最后一行: DisplayManager.requestPort: 0 前面加!号注释掉此行。
#vi /etc/X11/xdm/Xservers
在最后一行::0 local /usr/X11R6/bin/X 前面加#号注释掉这一行。
#vi /etc/X11/xdm/Xaccess
找到#* #any host can get a login window
把这一行前面的#号去掉,变成:
* #any host can get a login window
最后运行#xdm。这样使用xmanager等工具就可以连接Linux了!

如果使用ssh从windows远程登录到linux
的 ssh 必须开了 X forwarding 的选项。
1.vi /etc/ssh/sshd_config 里 X11Forwarding 要为 yes
2.vi /etc/ssh/ssh_config 也是的 ForwardX11 yes  

79 更改控制台的分辨率(grub)
vi /boot/grub/grub.conf
在kernel /vmlinuz-2.4.20-8smp ro root=LABEL=/ 一行后面添加参数vga=792成为
kernel /vmlinuz-2.4.20-8smp ro root=LABEL=/ vga=792
最后的vga=792表示1024x768,16色
具体参数为:
depth    640x480    800x600    1024x768    1280x1024
8bit       769           771           773               775
15bit     784          787            790               793
16bit     785          788            791                794
24bit     786          789            792                 795

mysql的几种超实用技巧

select now();
return 当前时间  格式为YYYY-MM-DD hh:ii:ss
NOW() 函数本身并无多大用处,但可将其用于表达式中。如比较当前日期和其他日期的差异。
注:如果在查询中调用一个函数,在函数名和后跟的圆括号中间不允许有空格
insert into table_name values(value1,value2,value3,...),(value11,value21,value31,...);
自3.22.5 以来的MySQL版本允许通过指定多个值的列表,利用单个的INSERT语句将几行插入一个表中
这比多个INSERT 语句的键入工作要少,而且服务器执行的效率也更高。
insert into tabl_name (col1,col2) vlalues (value1,value2);
insert into tabl_name (col1,col2) vlalues (value1,value2),(value3,value4);
insert into tabl_name set col1=value1,col2=value2....
以上这几种情况都是允许的
 数据库和表名有可能区分大小写的;这有取决服务器主机上使用的文件系统。在UNIX上运行的服务器对数据库名和表名是区分大小写的,因为UNIX 的文件名是区分大小写的。Windows 的文件名不区分大小写,因此运行在Windows 上的服务器对数据库名和表名不区分
查找日期的时候可以用<>来比较 2005-01-02这种得数据。
select * from tabl_name where info_date<2005-1-1 and (sqle='ma' or sqle='ba');
WHERE 子句中的表达式可使用表1-1中的算术运算符、表1-2 的比较运算符和表1-3 的逻辑运算符。还可以使用圆括号将一个表达式分成几个部分。可使用常量、表列和函数来完成运算。
NULL 值
NULL 值是特殊的;因为它代表“无值”。不可能以评估两个已知值的相同方式来将它与已知值进行评估。为了进行NULL 值的搜索,必须采用特殊的语法。不能用= 或!= 来测试等于NULL 或不等于NULL,取而代之的是使用IS NULL 或IS NOT NULL 来测试。
MySQL3.23 及以后的版本具有一个特殊的MySQL专有的比较运算符“ < = >”,即使是NULL 与NULL 的比较,它相当于IS。如:
select * from tabl_name where not (sqle<=>NULL);和
select * from tabl_name where sqle is not NULL;是一样的
limit
LIMIT 也可以从查询结果中取出中间部分。为了做到这一点,必须指定两个值。第一个值为结果中希望看到的第一个记录(第一个结果记录的编号为0 而不是1)。第二个值为希望看到的记录个数。
如select * from tabl_name limit 10,5;
可按照一个公式来排序查询结果。例如,利用ORDER BYRAND( ) 与LIMIT 结合,从表中随机抽取一个记录
如:select * from tabl_name order by rand() limit 1
concat()
select concat(province," ",city) as address,concat(info_date,",",check_id) as info;
此查询把省份和城市连接起来,中间间隔一个空格,将地址名形成一个单一字符串,而且将出生时间和check_id连接在一起,中间隔一个逗号,形成出信息字段。
在利用表达式来计算列值时,此表达式被用作列标题。如果表达式很长(如前面的一些查询样例中那样),那么可能会出现一个很宽的列。为了处理这种情况,此列可利用AS name结构来重新命名标题。这样的名称为列别名。用这种方法可使上面的输出更有意义
日期运算
在MySQL中使用日期时要记住的是,在表示日期时首先给出年份。1999 年7 月27 日表示为“1999 - 07 - 27”,而不是像通常那样表示为“ 07 - 27 - 1999”或“27 - 07 - 1999”。
mysql中可以对格式为1999 - 07 - 27的日期进行大小比较
如:select * from hy_users where 1 and '1998-01-02'
01-02'
为了测试或检索日期的成分,可使用诸如YEAR( )、MONTH( ) 或DAYOFMONTH( ) 这样的函数。例如,可通过查找月份值为3 的日期,找出与笔者出生在相同月份(三月)的总统。
如:select * from hy_com where 1 and MONTH(regist_time)=3
   此例查找注册时间为3月份的纪录
此查询也可按月的名称写出:
如:select * from hy_com where 1 and MONTH(regist_time)='march'
为了更详细,详细到天,可组合测试MONTH( ) 和DAYOFMONTH( )
如:select * from hy_com where 1 and MONTH(regist_time)=3 and DAYOFMONTH(regist_time)=5;
   这是一种可用来生成类似报纸上娱乐部分所刊登的那种“这些人今天过生日”清单的查询。但是,不必按前面的查询那样插入一个特殊的日期。为了查找每年的今天注册的人,只要将他们的注册日期与CURRENT _ DATE 进行比较即可:
如:select * from hy_com where 1 and MONTH(regist_time)=MONTH(CURRENT_DATE) and DAYOFMONTH(regist_time)=DAYOFMONTH(CURRENT_DATE);
   可从一个日期减去另一个日期。这样可以知道日期间的间隔,这对于确定时间段是非常有用的。例如,为了确定哪位顾客注册时间最长,可将其最后登陆时间减去注册时间。为此,可利用函数TO_DAYS( ) 将最后登陆时间和注册时间转换为天数,求出差,然后除以365 得出注册年限:
select FLOOR((TO_DAYS(last_time)-TO_DAYS(regist_time))/365) from hy_com as use_time limit 1;
此查询中所用的FLOOR( ) 函数截掉了年龄的小数部分,得到一个整数。得出日期之差,还可以确定相对于某个特定日期有多长时间。
如:select FLOOR((TO_DAYS(CURRENT_DATE)-TO_DAYS(regist_time))/365) from hy_com as use_time limit 1;
 
模式匹配:
MySQL允许查找与某个模式相配的值。这样,可以选择记录而不用提供精确的值。为了进行模式匹配运算,可使用特殊的运算符( LIKE 和NOT LIKE),并且指定一个包含通配符的串。字符“_”匹配任意单个字符,而“%”匹配任意字符序列(包括空序列)。使用L I K E或NOT LIKE 的模式匹配都是不区分大小写的。下列模式匹配以“W”或“w”开始的姓:
select * form hy_usres where first_name like "w%";
select * form hy_usres where first_name = "w%"; 这种做法是严重错误的。此查询给出了一个常见的错误,它对一个算术比较运算符使用了模式。这种比较成功的惟一可能是相应的列确实包含串“ W %”或“w %”。
下列模式匹配只有4个字符的姓: 
select * form hy_usres where first_name like "____";
生成汇总:
MySQL所能做的最有用的事情是浓缩大量的原始数据行并对其进行汇总。汇总的一种简单的形式是确定在一组值中哪些值是唯一值。利用DISTINCT 关键字来删除结果中的重复行。例如,不重复的列出会员的注册地:
select DISTINCT state from companys;
 
其他的汇总形式涉及计数,可利用COUNT( ) 函数。如果使用COUNT (*),它将给出查询所选择的行数。COUNT(*) 对选中的行进行计数。而COUNT(col_name) 只对非NULL 值进行计数
select count(DISTINCT state) from companys;
针对用于group by中的having句子,要纠正的是它没有提高查询效率的作用。但它是在查询结果已经选出后才应用的,用来缩减服务器实际送到客户机的结果。除了COUNT( ) 外还有许多汇总函数。MIN( )、MAX( )、SUM( ) 和AVG( ) 函数在确定列的最大、最小、总数和平均值时都非常有用,甚至可以同时使用它们。如:
select event_id MIN(score) as minmum,MAX(score) as maximum,MAX(score)-MIN(score)+1 as range,SUM(score) as total,AVG(score) as average from score Group by event_id
 
从多个表中检索信息
在从多个表中选择信息时,需要执行一种称为连接(join)的操作。这是因为需要将一个表中的信息与其他表中的信息相连接来得出查询结果。即通过协调各表中的值来完成这项工作
 
原文地址:
 
某驼续貂:本篇文章是从上面那个连接地址里面总结归纳出来的.某驼对原文的实在作者佩服的五体投地,里面介绍的技巧都是非常实用和省力的,某驼看了大有相见恨晚之感觉.可惜原文太长了,边看边理解边关联,一天下来驼驼有点吐血了.归纳到这里,还差联合查询和group by这部分不完全了,某驼歇会儿先.换换感觉在回来接着总结.

用OpenVPN构建安全VPN

                一直想写一片关于VPN配置方面的文章,由于时间等等很多问题,一直没有落实,现在终于和大家见面了,由于本人知识有限也并非专业从事这方面工作的,难免有错误,望指正,共同提高。
                自从认识VPN以来,一直在找寻一个容易配置、功能强大、支持多系统的VPN程序,由于一直没有找到合适的软件,Linux下的FreeSWAN、OpenBSD FreeBSD下的IPSec、Windows下的PPTP都试了试,始终不能满足自己的要求,直到OpenVPN的出现。
                关于各种VPN软件或者硬件的优缺点,在这里我就不再叙述了,因为这个掺杂着很多人为的因素在里边(萝卜好吃还是青菜好吃?),一个软件:稳定、符合自己的要求、自己用的习惯就是一个好软件。
                对于OpenVPN,在CU的VPN版面也有过很多的讨论,其中也不乏精华的文章,但是都是使用Static key验证的,从字面上就可以看出来Static key使用的就是预先生成的key对数据进行加密和解密,也就是常说的对称试加密,加密和解密双方必须预先知道加密的Key。本文讨论的是基于TLS加密方式,使用CA验证VPN Client的身份,OpenVPN使用TLS加密是通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Public key,另一个是Private key)对数据进行加密的,对于TLS传输的工作原理,大家可以去Google一下,资料一大堆。对于OpenVPN使用TLS mode,首先Server和Client要有相同CA签发的证书,双方通过交换证书验证双方的合法性以决定是否建立VPN连接,然后使用对方CA把自己目前使用的数据加密方法(类似于密钥)加密后发送给对方,由于使用对方CA加密的,所以只有对方CA对应的Private key才能解密该字串,保证了此密钥的安全性,并且此密钥定期改变,对于窃听者来说,可能还没有破解出密钥,通信双方已经更换密钥了。
                我个人对OpenVPN的感觉(或者说是我使用OpenVPN的理由),NAT穿透力特强,支持HTTP代理,对动态地址支持很好,可配置性强,配置安全,开源便于二次开发...其他没有想好:)。
                关于OpenVPN的相关内容可以在上找到。
               
                下面开始正式讨论OpenVPN的安装和配置方法,本文是在Fedora Core 2环境下配置的,由于机器在网络中不是在网关的位置,所以使用NAT方式来访问内网,否则还涉及到配置网络设备的路由。假设我的VPN Server有2块网卡,eth0对外,IP:61.1.1.2 eth1对内,IP:192.168.1.2,内网地址:192.168.0.0/16
本文除配置文件中行首的"#"是注释外,其他行首的"#"都是提示符,如果在非配置文件一行中第二次出现"#"说明后面的是注释,书写命令时可以省略。
               
获取并安装Openvpn:
首先检查系统是否安装lzo实时压缩工具
$rpm -qa | grep lzo
如果没有安装可以在找到并安装,安装方法详见压缩包中的INSTALL文件,当然也可以用rpm包安装,记住一定要安装lzo-devel开头的那个包,因为OpenVPN需要使用lzo的头文件。
$wget
$tar -zxvf openvpn-2.0_rc16.tar.gz
$cd openvpn-2.0_rc16
$./configure
$make
$su
#make install
按照INSTALL文件中的说明,做如下操作:
#mknod /dev/net/tun c 10 200                        #创建一个tun设备
#echo "alias char-major-10-200 tun" >;>; /etc/modprobe.conf
#echo 1 >; /proc/sys/net/ipv4/ip_forward        #打开系统的转发功能
接下来就生成服务器客户端需要使用的keys了,为了方便,我们使用OpenVPN包自带的脚本生成。
#mkdir /etc/openvpn
#cp -r easy-rsa /etc/openvpn #切换到OpenVPN源代码目录执行
修改vars 文件
-------------CUT Here-------------
# easy-rsa parameter settings

# NOTE: If you installed from an RPM,
# don't edit this file in place in
# /usr/share/openvpn/easy-rsa --
# instead, you should copy the whole
# easy-rsa directory to another location
# (such as /etc/openvpn) so that your
# edits will not be wiped out by a future
# OpenVPN package upgrade.

# This variable should point to
# the top level of the easy-rsa
# tree.
export D=`pwd`

# This variable should point to
# the openssl.cnf file included
# with easy-rsa.
export KEY_CONFIG=$D/openssl.cnf

# Edit this variable to point to
# your soon-to-be-created key
# directory.
#
# WARNING: clean-all will do
# a rm -rf on this directory
# so make sure you define
# it correctly!
export KEY_DIR=$D/keys

# Issue rm -rf warning
echo NOTE: when you run ./clean-all, I will be doing a rm -rf on $KEY_DIR

# Increase this to 2048 if you
# are paranoid.  This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
export KEY_SIZE=1024

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
# 定义你所在的国家,2个字符
export KEY_COUNTRY=CN
# 你所在的省份
export KEY_PROVINCE=Liaoning
# 你所在的城市
export KEY_CITY=Shenyang
# 你所在的组织
export KEY_ORG="ELM OpenVPN ORG"
# 你的单位
export KEY_OU="OpenVPN Service"
# 你的邮件地址
export KEY_EMAIL="elm@elm.freetcp.com"
-------------CUT Here-----------------
修改后保存,下面我们开始什成keys,以下为shell命令 "#" 为提示符
#. vars                #使修改的变量生效
NOTE: when you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
#./clean-all        #初始化keys目录,创建所需要的文件和目录
#./build-ca                #什成Root CA证书,用于签发Server和Client证书,请保护好keys/ca.key文件。
Generating a 1024 bit RSA private key
........................++++++
.............++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:                                                        #如果无需修改,直接回车
State or Province Name (full name) [Liaoning]:
Locality Name (eg, city) [Shenyang]:
Organization Name (eg, company) [ELM OpenVPN ORG]:
Organizational Unit Name (eg, section) [OpenVPN Service]:
Common Name (eg, your name or your server's hostname) []:OpenVPN Root CA
Email Address [elm@elm.freetcp.com]:

# ls keys
ca.crt  ca.key  index.txt  serial
我们可以看到ca.crt ca.key文件已经什成了。
下面我们为服务器生成 Diffie-Hellman 文件
# ./build-dh                #TLS server 需要使用的一个文件
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..+..............................................................+....................................................................+....+........+.........+....................................................+.+..................................................................................................................................................................+.......................................+.................................+.............+.................................................................................+.......................................................+.............................++*++*++*

创建并签发VPN Server使用的CA
# ./build-key-server server    # server 为创建后的文件名,分别为server.crt server.key
Generating a 1024 bit RSA private key
......................++++++
...............++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [Liaoning]:
Locality Name (eg, city) [Shenyang]:
Organization Name (eg, company) [ELM OpenVPN ORG]:
Organizational Unit Name (eg, section) [OpenVPN Service]:
Common Name (eg, your name or your server's hostname) []:Server No.1
Email Address [elm@elm.freetcp.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           RINTABLE:'CN'
stateOrProvinceName   RINTABLE:'Liaoning'
localityName          RINTABLE:'Shenyang'
organizationName      RINTABLE:'ELM OpenVPN ORG'
organizationalUnitNameRINTABLE:'OpenVPN Service'
commonName            RINTABLE:'Server No.1'
emailAddress          :IA5STRING:'elm@elm.freetcp.com'
Certificate is to be certified until Feb 26 14:43:44 2015 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

接下来为VPN Client颁发CA证书,如果以后要为其他Client颁发证书,直接使用build-key命令签发新证书。
# ./build-key elm
Generating a 1024 bit RSA private key
........++++++
....................++++++
writing new private key to 'elm.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [Liaoning]:
Locality Name (eg, city) [Shenyang]:
Organization Name (eg, company) [ELM OpenVPN ORG]:
Organizational Unit Name (eg, section) [OpenVPN Service]:
Common Name (eg, your name or your server's hostname) []:ELM      #注意Common Name最好不要相同,如果相同[server要加duplicate-cn选项],那么Email地址也不能相同
Email Address [elm@elm.freetcp.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           RINTABLE:'CN'
stateOrProvinceName   RINTABLE:'Liaoning'
localityName          RINTABLE:'Shenyang'
organizationName      RINTABLE:'ELM OpenVPN ORG'
organizationalUnitName:PRINTABLE:'OpenVPN Service'
commonName            :PRINTABLE:'ELM'
emailAddress          :IA5STRING:'elm@elm.freetcp.com'
Certificate is to be certified until Feb 26 14:45:36 2015 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
为防止恶意攻击(如DOS、UDP port flooding),我们生成一个"HMAC firewall"
#openvpn --genkey --secret keys/ta.key
生成证书吊销链文件,防止日后有人丢失证书,被非法用户接入VPN
#./make-crl vpncrl.pem
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf

到现在为止,一切准备就绪,下面开始写配置文件,为了缩小篇幅,把原有注释都去掉了。
Server使用的配置文件server.conf
----------------CUT Here-------------
#申明本机使用的IP地址,也可以不说明
;local a.b.c.d
#申明使用的端口,默认1194
port 1194
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
;proto tcp
proto udp
#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
dev tap
;dev tun
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
ca ca.crt
#Server使用的证书文件
cert server.crt
#Server使用的证书对应的key,注意文件的权限,防止被盗
key server.key  # This file should be kept secret
#CRL文件的申明,被吊销的证书链,这些证书将无法登录
crl-verify vpncrl.pem
#上面提到的生成的Diffie-Hellman文件
dh dh1024.pem
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由
#这条命令等效于:
# mode server                        #OpenVPN工作在Server模式,可以支持多client同时动态接入
# tls-server                        #使用TLS加密传输,本端为Server,Client端为tls-client
#
# if dev tun:                        #如果使用tun设备,等效于以下配置
#   ifconfig 10.8.0.1 10.8.0.2                         #设置本地tun设备的地址
#   ifconfig-pool 10.8.0.4 10.8.0.251                #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
#   route 10.8.0.0 255.255.255.0                        #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2
#   if client-to-client:                        #如果使用client-to-client这个选项
#     push "route 10.8.0.0 255.255.255.0"                #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
#   else
#     push "route 10.8.0.1"                        #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
#
# if dev tap:                                #如果使用tap设备,则等效于以下命令
#   ifconfig 10.8.0.1 255.255.255.0                #配置tap设备的地址
#   ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0                #客户端使用的地址池,分别是起始地址、结束地址、子网掩码
#   push "route-gateway 10.8.0.1"                #把环境变量route-gateway传递给客户机
#
server 10.8.0.0 255.255.255.0                        #等效于以上命令
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
ifconfig-pool-persist ipp.txt
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
;route 10.9.0.0 255.255.255.252
#Run script or shell command cmd to validate client
#virtual addresses or routes. 具体查看manual
;learn-address ./script
#其他的一些需要PUSH给Client的选项
#
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
;push "redirect-gateway"
#DHCP的一些选项,具体查看Manual
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
client-to-client
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
;duplicate-cn
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
#认为连接丢失,并重新启动VPN,重新连接
#(对于mode server模式下的openvpn不会重新连接)。
keepalive 10 120
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1
tls-auth ta.key 0 # This file is secret
#对数据进行压缩,注意Server和Client一致
comp-lzo
#定义最大连接数
;max-clients 100
#定义运行openvpn的用户
user nobody
group nobody
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
#否则网络连接会先linkdown然后linkup
persist-tun
#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
status openvpn-status.log
#记录日志,每次重新启动openvpn后删除原有的log信息
log         /var/log/openvpn.log
#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
;log-append  openvpn.log
#相当于debug level,具体查看manual
verb 3
--------------Cut Here-----------------
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
#cd /etc/openvpn
#cp easy-rsa/keys/ca.crt .
#cp easy-rsa/keys/server.crt .
#cp easy-rsa/keys/server.key .
#cp easy-rsa/keys/dh1024.pem .
#cp easy-rsa/keys/ta.key .
#cp easy-rsa/keys/vpncrl.pem .
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
然后运行:
#chkconfig --add openvpn
#chkconfig openvpn on
立即启动openenvpn
#/etc/init.d/openvpn start

接下来配置客户端的配置文件client.conf:
Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
-------------Cut Here---------------------
# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”
client

#指定接口的类型,严格和Server端一致
dev tap
;dev tun

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel
# if you have more than one.  On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap

# 使用的协议,与Server严格一致
;proto tcp
proto udp

#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字

remote 61.1.1.2 1194
;remote my-server-2 1194

# 随机选择一个Server连接,否则按照顺序从上到下依次连接
;remote-random

# 始终重新解析Server的IP地址(如果remote后面跟的是域名),
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
# 这样无需人为重新启动,即可重新接入VPN
resolv-retry infinite

# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
nobind

# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作
user nobody
group nobody

#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是
# push "route 192.168.0.0 255.255.255.0"
route 192.168.0.0 255.255.0.0

# 和Server配置上的功能一样 如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
persist-key
persist-tun

# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# 对于无线设备使用VPN的配置,看看就明白了
# Wireless networks often produce a lot
# of duplicate packets.  Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
ca ca.crt
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
cert elm.crt
key elm.key

# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
# 因为他们的CA里没有这个扩展
ns-cert-type server

# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1
tls-auth ta.key 1

# 压缩选项,和Server严格一致
comp-lzo

# Set log file verbosity.
verb 4
--------------Cut Here---------------------
Linux下Client的OpenVPN的安装方法一样,只是配置文件和keys上的不同,只要把client.conf ca.crt elm.crt elm.key ta.key复制到/etc/openvpn目录即可启动VPN。
Win下OpenVPN的安装,WIN下有图形界面的OpenVPN-GUI程序,下载地址
下载安装,默认下一步就OK了,安装完事后在托盘上出现一个新的图标,把client.ovpn ca.crt elm.crt elm.key ta.key文件拷贝到C:Program Filesopenvpnconfig目录下,然后点右键connect就OK了。
对于LinuxServer使用NAT的一些说明:
首先要把系统的Forward打开,可以通过如下命令实现
echo 1 >; /proc/sys/net/ipv4/ip_forward
或者使用
sysctl -w net.ipv4.ip_forward=1
或者修改/etc/sysctl.conf文件,增加
net.ipv4.ip_forward = 1
设定SNAT的规则,使用iptables命令
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to-source 192.168.1.2
OK,OpenVPN Client可以访问内网了。

由于是第一次写这么详细的文档,有很多地方写的不详细,有很多东西可能我认为是很容易理解的,但是可能没有从一个初学者的角度去考虑问题,还希望大家多提意见,以便改进,由于本人不是专业从事VPN的研究,本文难免有错误之处,还往指正。
国外很多软件都有Howto,但是OpenVPN没有Howto,希望大家能在本文+其他static key的文章上,形成一个不是很全面的HOWTO。

AWStats 6.4 final安装笔记

1.安装
# wget
# tar zxvf awstats-6.4.gz
# cp -r awstats-6.4 /usr/local/awstats
# chown -R root:root /usr/local/awstats
# chmod -R 755 /usr/local/awstats
# cd /usr/local/awstats/tools
# perl awstats_configure.pl

安装过程中会让你回答下列等问题
Do you want me to setup Apache to write 'combined' log files [y/N] ? y

Do you want me to build a new AWStats config/profile file (required if first install) [y/N] ? y

Your web site, virtual server or profile name:
>

Directory path to store config file(s) (Enter for default):
> /usr/local/etc/awstats

安装过程会自动在httpd.conf文件中添加下面的配置信息
Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"

Options None
AllowOverride None
Order allow,deny
Allow from all


修改主机配置文件(/usr/local/etc/awstats/awstats..conf),重点检查LogFile、LogType、LogFormat、 SiteDomainin、HostAlias这几个选项

对于在GNU/Linux上统计Apache日志只需修改:LogFile SiteDomain这2个选项

1. GNU/Linux LogFile="/var/log/httpd/access_log.%YYYY-24%MM-24%DD-24"
这个配置的意思是用24小时前的年份,月份,日期拼出的日志文件名;
2. SiteDomain=""
站点的名称,缺省是空的,如果为空,AWStats将拒绝运行;
3. 对于统计IIS日志需要多修改一个:
LogFormat=2
缺省值是1:Apache日志,2是IIS日志

创建/usr/local/share/awstats目录用于统计数据输出
# mkdir -p /usr/local/share/awstats/http

修改/usr/local/apache/conf/httpd.conf配置文件

CustomLog logs/access_log combined
改成
CustomLog /var/log/httpd/mylog.log combined

我的配置文件部分内容如下
LogFile=" /var/log/httpd/mylog.log"
SiteDomain=""
HostAliases="test.com 192.168.0.3"
DirData="/usr/local/share/awstats/http"

其他需要注意的事项
AWStats缺省不过滤swf文件,会把.swf算成PageView,所以如果站点上swf文件主要是广告的话最好还是要过滤掉。


2.日志统计
统计主机日志
# cd /usr/local/awstats/wwwroot/cgi-bin/
# perl awstats.pl -config= -update -lang=cn

你可以生成一个静态页面来浏览信息
# perl awstats.pl -config= -output -staticlinks -lang=cn> awstats..html

定时统计主机日志
#update awstats
30 7 * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config= -update -lang=cn

测试
http://192.168.0.3/awstats/awstats.pl?config=


3.虚拟主机日志统计
AWStats自带了一个批处理工具:tools/awstats_updateall.pl,可以批量地遍历一个目录下所有地配置文件并运行统计。因此剩下的工作就主要是日志的同步问题了。

针对多个站点,很多配置选项是重复的,如果每个配置文件都修改维护起来会很麻烦,AWStats从5.4版本开始提供了配置文件包含的功能,所以我们可以配置一个通用配置,比如:common.conf

然后其他站点的配置设置为:可以通过后面的选项覆盖和缺省不一致的配置。
awstats.bbs.chedong.conf
Include "chedong.common.conf"
LogFile "/path/to/bbs_log"
SiteName "bbs.chedong.com"

awstats.
Include "chedong.common.conf"
LogFile "/path/to/www_log"
SiteName ""
HostAliases="chedong.com"

统计指标说明
* 参观者:按来访者不重复的IP统计,一个IP代表一个参观者;
* 参观次数:一个参观者可能1天之内参观多次(比如:上午一次,下午一次),所以按一定时间内(比如:1个小时),不重复的IP数统计,参观者的访问次数;
* 网页数:不包括图片,CSS, JavaScript文件等的纯页面访问总数,但如果一个页面使用了多个帧,每个帧都算一个页面请求;
* 文件数:来自浏览器客户端的文件请求总数,包括图片,CSS,JavaScript等,用户请求一个页面是,如果页面中包含图片等,所以对服务器会发出多次文件请求,文件数一般远远大于文件数;
* 字节:传给客户端的数据总流量;
* 来自REFERER中的数据:日志中的参考(REFERER)字段,记录了访问相应网页之前地址,因此如果用户是通过搜索引擎的搜索结果点击进入网站的,日志中就会有用户在相应搜索引擎的查询地址,这个地址中就可以通过解析将用户查询使用的关键词提取出来:
比如:
2003-03-26 15:43:58 123.123.123.123 - GET /index.html 200 192 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http:///search?q=chedong
AWStats在搜索引擎的关键短语和关键词统计方面的功能还是比较完整的:可以对全世界3百多种机器爬虫进行识别,并且可以识别大部分主流国际化搜索引擎和很多地区的本地语言搜索引擎。

4.plugin

安装GeoIP

需要
GeoIP C Library
Geo::IP Perl Module (faster, but requires C library)
Geo::IP::PurePerl Module (slower, but does not require C library)


C Library和Perl Module是一组,必须先编译安装C的,再编译安装perl,或者直接装PurePerl Module,我就是这种方式

安装GeoIP C Library
# wget
# tar zxvf GeoIP-1.3.8.tar.gz
# cd GeoIP-1.3.8
# ./configure; make; make instal
l

安装 Geo::IP Perl Module
# wget
# tar zxvf Geo-IP-1.25.tar.gz
# cd Geo-IP-1.25
# perl Makefile.PL
# make
# make test (在AS4下通不过,放弃,改装PurePerl Module)
# make instal
l

以上两步也可以这样安装
# perl -MCPAN -e shell
cpan> install Geo::IP

安装Geo::IP::PurePerl Module
# wget
# tar zxvf Geo-IP-PurePerl-1.14.tar.gz
# cd Geo-IP-PurePerl-1.14
# perl Makefile.PL
# make
# make test
# make install


也可以这样安装
# perl -MCPAN -e shell
cpan> install Geo::IP::PurePerl

修改/usr/local/etc/awstats/awstats..conf,取消下面这行的注释,启用此插件
LoadPlugin="geoip GEOIP_STANDARD"

更新GeoIP库
# cd /usr/local/share/GeoIP/
# wget
# gunzip GeoIP.dat.gz


定时更新GeoIP库
0 0 * * * root /usr/local/bin/geoipupdate -v

安装XWhois
# perl -MCPAN -e shell
cpan> install Net::XWhois

修改/usr/local/etc/awstats/awstats..conf,取消下面这行的注释,启用此插件
LoadPlugin="hostinfo"

安装decodeutfkeys
# perl -MCPAN -e shell
cpan> install URI::Escape

修改/usr/local/etc/awstats/awstats..conf,取消下面这行的注释,启用此插件
LoadPlugin="decodeutfkeys"

更新日志
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config= -update -lang=cn

5.分析其它日志

5.1.ftp日志

5.1.1.proftp

设置proftp
更改proftpd.conf文件,添加如下两行

LogFormat awstats "%t %h %u %m %f %s %b"
# 注意:在%号之间必须用tab键作为分隔符,不能用空格键
ExtendedLog /var/log/xferlog read,write awstats
# WARNING: ExtendedLog directive might need to be placed inside a virtual host context if you use them

然后关闭老的日志格式
TransferLog none
# WARNING: TransferLog directive might need to be placed inside a virtual host context if you use them.

想让你的设置生效,先停止proftp服务,删除旧的日志文件/var/log/xferlog,然后启动proftp服务。登陆ftp,下载一个文件,你的新日志文件会有新的一行,类似如下这个样子:
[01/Jan/2001:21:49:57 +0200] ftp.server.com user RETR /home/fileiget.txt 226 1499

设置AWStats
复制配置文件awstats.model.conf到/usr/local/etc/awstats目录下,并把文件名改成awstats.ftp.conf,修改这个新的配置文件

# mkdir -p /usr/local/share/awstats/ftp
# cp /usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf /usr/local/etc/awstats/awstats.ftp.conf
# vi /usr/local/etc/awstats/awstats.ftp.interpack.cn.conf
LogFile="/var/log/xferlog"
LogType=F
LogFormat="%time1 %host %logname %method %url %code %bytesd"
LogSeparator="t"
SiteDomain="ftp.test.com"
HostAliases="ftp.test.com 192.168.0.3"
DirData="/usr/local/share/awstats/ftp"
NotPageList=""
LevelForBrowsersDetection=0
LevelForOSDetection=0
LevelForRefererAnalyze=0
LevelForRobotsDetection=0
LevelForWormsDetection=0
LevelForSearchEnginesDetection=0
ShowLinksOnUrl=0
ShowMenu=1
ShowSummary=UVHB
ShowMonthStats=UVHB
ShowDaysOfMonthStats=HB
ShowDaysOfWeekStats=HB
ShowHoursStats=HB
ShowDomainsStats=HB
ShowHostsStats=HBL
ShowAuthenticatedUsers=HBL
ShowRobotsStats=0
ShowEMailSenders=0
ShowEMailReceivers=0
ShowSessionsStats=1
ShowPagesStats=PBEX
ShowFileTypesStats=HB
ShowFileSizesStats=0
ShowBrowsersStats=0
ShowOSStats=0
ShowOriginStats=0
ShowKeyphrasesStats=0
ShowKeywordsStats=0
ShowMiscStats=0
ShowHTTPErrorsStats=0
ShowSMTPErrorsStats=0

统计主机日志
# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=ftp.test.com -update -lang=cn
你可以生成一个静态页面来浏览信息
# perl awstats.pl -config=ftp.test.com -output -staticlinks -lang=cn> awstats.ftp.test.com.html

定时统计主机日志
#update awstats
30 7 * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=ftp.test.com -update -lang=cn

测试

阅读(3606) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~