oracle 正则式 使用

REGEXP_REPLACE
Select REGEXP_REPLACE('aa1bb3cc','[a-zA-Z]', '') FROM dual
删除所有字母

REGEXP_REPLACE 第一个参数是原字符串,第二参数正则式,第三参数为替换值
例:为限行设定车牌最后一位数字
update hi_limitcar set CARNOLASTNUM=(substr(REGEXP_REPLACE(CARNO,'[a-zA-Z]’, ”),length(REGEXP_REPLACE(CARNO,'[a-zA-Z]', ''))));

 

regexp_like 只用于条件式
如:
select name from list where id>100 and regexp_like(name,'A\d+','i'); — 'i' 忽略大小写 可忽略此参数

 

还有 REGEXP_INSTR 和 REGEXP_SUBSTR 两个函数,有空再看

 

ubuntu 10 安装 ftp(vsftpd) 记录

1:安装vsftpd
apt-get install vsftpd

2:在iptable中添加规则允许访问.

3:添加一个用户ftp,并设置密码
sudo useradd -m ftp
sudo passwd ftp

4:修改配置文件

local_root=/var/www 设定登入时目录
local_enable=YES 使用系统帐户
write_enable=YES 允许写入
chroot_local_user=YES 限制用户不能访问其它位置

"chroot"是FTP服务器配置中的重要选项。若"chroot_list_enable"设置为"YES",Vsftpd将在"chroot_list_file"选项值的位置寻找chroot_list文件,"/etc/vsftpd.chroot_list"文件中包含的用户,在登录后将不能切换到自己目录以外的其他目录,由FTP服务器自动地"chrooted"到用户自己的home目录下。这将使得chroot_list文件中的用户不能随意转到其他用户的FTP home目录下,从而有利于FTP服务器的安全管理和隐私保护。

service vsftpd restart

注:ftpuser文本中的用户是禁止登录用户列表

 从/etc/init 中移去 vsftpd.conf 启动文件,需要使用ftp服务时执行/usr/sbin/vsftpd启动ftp服务,ctrl+c退出关闭

配置文件参考

listen=<YES/NO> :设置为YES时vsftpd以独立运行方式启动,设置为NO时以xinetd方式启动(xinetd是管理守护进程的,将服务集中管理,可以减少大量服务的资源消耗)
listen_port=<port> :设置控制连接的监听端口号,默认为21
listen_address=<ip address> :将在绑定到指定IP地址运行,适合多网卡
connect_from_port_20=<YES/NO> :若为YES,则强迫FTP-DATA的数据传送使用port 20,默认YES
pasv_enable=<YES/NO> :是否使用被动模式的数据连接,如果客户机在防火墙后,请开启为YES
pasv_min_port=<n>
pasv_max_port=<m> :设置被动模式后的数据连接端口范围在n和m之间,建议为50000-60000端口
message_file=<filename> :设置使用者进入某个目录时显示的文件内容,默认为 .message
dirmessage_enable=<YES/NO> :设置使用者进入某个目录时是否显示由message_file指定的文件内容
ftpd_banner=<message> :设置用户连接服务器后的显示信息,就是欢迎信息
banner_file=<filename> :设置用户连接服务器后的显示信息存放在指定的filename文件中
connect_timeout=<n> :如果客户机连接服务器超过N秒,则强制断线,默认60
accept_timeout=<n> :当使用者以被动模式进行数据传输时,服务器发出passive port指令等待客户机超过N秒,则强制断线,默认60
accept_connection_timeout=<n> :设置空闲的数据连接在N秒后中断,默认120
data_connection_timeout=<n> : 设置空闲的用户会话在N秒后中断,默认300
max_clients=<n> : 在独立启动时限制服务器的连接数,0表示无限制
max_per_ip=<n> :在独立启动时限制客户机每IP的连接数,0表示无限制(不知道是否跟多线程下载有没干系)
local_enable=<YES/NO> :设置是否支持本地用户帐号访问
guest_enable=<YES/NO> :设置是否支持虚拟用户帐号访问
write_enable=<YES/NO> :是否开放本地用户的写权限
local_umask=<nnn> :设置本地用户上传的文件的生成掩码,默认为077
local_max_rate<n> :设置本地用户最大的传输速率,单位为bytes/sec,值为0表示不限制
local_root=<file> :设置本地用户登陆后的目录,默认为本地用户的主目录
chroot_local_user=<YES/NO> :当为YES时,所有本地用户可以执行chroot
chroot_list_enable=<YES/NO>
chroot_list_file=<filename> :当chroot_local_user=NO 且 chroot_list_enable=YES时,只有filename文件指定的用户可以执行chroot
anonymous_enable=<YES/NO> :设置是否支持匿名用户访问
anon_max_rate=<n> :设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制
anon_world_readable_only=<YES/NO> 是否开放匿名用户的浏览权限
anon_upload_enable=<YES/NO> 设置是否允许匿名用户上传
anon_mkdir_write_enable=<YES/NO> :设置是否允许匿名用户创建目录
anon_other_write_enable=<YES/NO> :设置是否允许匿名用户其他的写权限(注意,这个在安全上比较重要,一般不建议开,不过关闭会不支持续传)
anon_umask=<nnn> :设置匿名用户上传的文件的生成掩码,默认为077

python 操作 sqlite

#encoding=utf-8
import sqlite3
from time import clock as now

start = now( )
##############################################################
conn = sqlite3.connect("e:\\TestDB.sqlite")
####################### 连接sqlite数据库 ##########################
c = conn.cursor()

c.execute('''create table test(name VARCHAR)''')

sql = ("insert into test(name) values (\'line1\')")
c.execute(sql)
sql = ("insert into test(name) values (\'line2\')")
c.execute(sql)
sql = ("insert into test(name) values (\'line3\')")
c.execute(sql)

conn.commit()
c.execute('select * from test group by name')
printRow = c.fetchall();

for row_data in printRow:
print(row_data)
c.close()

###############################################################
conn.close()
######################## 关闭连接 ###############################
###############################################################

finish = now( )
print ('脚本执行耗时:',finish – start,'单位')

python 在windows下使用ado

1:需用到 Python for Windows extensions
请首先安装 http://sourceforge.net/projects/pywin32/files/

2:需要 adodbapi
请下载安装 http://sourceforge.net/projects/adodbapi/
setup.py install

3:可使用如下测试程序

#!/usr/bin/env python
# -*- coding: utf-8 -*

import sys
import win32com.client
import adodbapi

constr = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s' % 'e:/测试.mdb'
conn=adodbapi.connect(constr)
cur=conn.cursor()
############################################################
cur.execute('select * from [test]')
print ('rowcount =',cur.rowcount)
db = cur.fetchmany(100)
for i in db:
    result=""
    #print (i)
    for j in i:
        result=result+j+' '
        #result=result+j.encode('cp936')+' '
        print (result)
############################################################
cur.close()
conn.close()

设定静态arp脚本(bat)

@echo OFF
arp -d
if %~n0==arp exit
if %~n0==Arp exit
if %~n0==ARP exit
echo 正在获取本机信息…..
echo 本脚本适用windows2003,单网卡,单路由,设定静态arp用
echo 其它情况不适用,需修改参数

:IP
FOR /f "skip=13 tokens=15 usebackq " %%i in (`ipconfig /all`) do Set IP=%%i && GOTO MAC
REM 在ipconfig命令的结果中,跳到13行,第15个字符 取本机ip值赋予ip变量
:MAC
echo 取得IP:%IP%
FOR /f "skip=13 tokens=12 usebackq " %%i in (`ipconfig /all`) do Set MAC=%%i && GOTO GateIP
REM 取得本机mac值赋予mac变量

:GateIP
echo 取得MAC:%MAC%
arp -s %IP% %MAC%
REM 设定本机静态arp

echo 正在获取网关信息…..
FOR /f "skip=17 tokens=13 usebackq " %%i in (`ipconfig /all`) do Set GateIP=%%i && GOTO GateMac
REM 取得网关ip值赋予gateip变量

:GateMac
echo GateIP:%GateIP%
ping %GateIP% -t -n 1
FOR /f "skip=3 tokens=2 usebackq " %%i in (`arp -a %GateIP%`) do Set GateMAC=%%i && GOTO Start
REM 取得网关mac值赋予gatemac变量

:Start
echo GateMAC:%GateMAC%
arp -s %GateIP% %GateMAC%
@pause
echo 操作完成!!!

Ubuntu 更新内核记录

Ubuntu 更新内核记录

Hyper v中安装的ubuntu 10.04 分配的cpu时常被完全占用(极高),找了一圈,没找到确切的问题原因,在某网上只提到升级内核.故有了以下动作.

据一周的观察,升级内核后,cpu占用率的问题没有再出现

下载内核
http://kernel.ubuntu.com/~kernel-ppa/mainline/
head 和 image 对应

dkpg –i 直接安装

 

以下是需编译的步骤,太麻烦,删除了

1:下载新内核
http://www.kernel.org/  挑选稳定(stable)的新内核下载一个. 或直接点击 Latest Stable Kernel

2: 解压到/usr/src下,使用命令如下:
bunzip2 linux-3.3.3.tar.bz2
tar xvf linux-3.3.3.tar

3:进入刚才的文件夹 /usr/src/linux-3.3.3,输入命令:
     $ make mrproper

     该命令的功能在于清除当前目录下残留的.config.o文件,这些文件一般是以前编译时未清理而残留的。而对于第一次编译的代码来说,不存在这些残留文件,所以可以略过此步,但是如果该源代码以前被编译过,那么强烈建议执行此命令,否则后面可能会出现未知的问题。

4: 配置编译选项

     作为操作系统的内核,其内容和功能必然非常繁杂,包括处理器调度,内存管理,文件系统管理,进程通讯以及设备管理等等,而对于不同的硬件,其配置选项也不相同,所以在编译源代码之前必须设置编译选项。

    可以使用 make menuconfig 或者make xconfig。这里使用的是make menuconfig,但是前提条件是要装ncurse

    make menuconfig过程中也会有一些选项需要你来设置*, y, n 或者m,选择*表示选项中的内容被直接编入内核中,选择m表示选项中的内容不编入内核,而只是编成独立的module,用到时才调用。

    make menuconfig

    根据菜单提示,选择编译配置选项,并保存配置文件为.config

5:确定依赖性 

    make dep

 

6:清除编译中间文件

   make clean

 

7: 生成新内核

    就是把配置过程中,我们选中编入内核中的程序编译链接生产linux内核,输入命令:

    make bzImage

 

8: 生成modules

    和上步差不多,就是把配置过程中,我们选中编成modules的程序编译链接成modules,输入命令:

    make modules

 

9: 安装modules

    就是把刚才编译生产的modules拷到系统文件夹下,以供新内核调用。输入命令:

    make modules_install

    

8,建立要载入ramdisk的映像文件

    如果linux系统按照在scsi磁盘上,这部是必须的,否则可以跳过。我的linux是装在vmware上的,用的是虚拟的scsi磁盘,所以必须要这一步。输入命令:

   mkinitramfs -o /boot/initrd-linux3.3.3.img  3.3.3

   如果你的linux不是ubuntu,而是其他的发行版本,那么使用的命令可能不是mkinitramfs,而是mkinitrd,但功能和用法类似。

 

9,安装内核

   输入命令:make install

   此时系统会把linux内核的镜像文件还有System.map考入到/boot.

 

10, 配置grub引导程序

   既然新的内核编译并安装好了,那么我们要配置系统的引导程序用新内核正确引导,这一步是手动的,对象是/boot/grub/grub.cfg,首先用chmod更改该文件的只读属性。然后参照里面的已有内容添加一个新启动项,我的新启动项是:

menuentry 'Ubuntu, with Linux 3.3.3-generic' –class ubuntu –class gnu-linux –class gnu –class os {
recordfail
insmod ext2
set root='(hd0,1)'
search –no-floppy –fs-uuid –set 140c9813-9b08-4f92-bc5f-93b2050ecca1
linux   /boot/vmlinuz-3.3.3 root=UUID=140c9813-9b08-4f92-bc5f-93b2050ecca1 ro   quiet splash
initrd  /boot/initrd-custom3.3.3.img
}   

上面粗体字,linux 后面指明了新内核映像文件的路径,initrd后面指明了ramdisk映像文件的路径。 

 

最后一点,别忘了把菜单超时时间设置为10秒钟,因为默认超时为0,而且是从原来的内核镜像启动系统。

 

ubuntu 下 ufw 防火墙

ufw allow ssh
//允许ssh
ufw allow http
//允许 http
ufw logging off
//开启或关闭日志 日志目录: /var/log/messages
ufw enable
//开启防火墙

 

ufw status
//查看状态

 

ufw allow 80
//允许外部访问80端口
ufw delete allow 80
//禁止外部访问80 端口
ufw allow from 192.168.1.1
//允许此IP访问所有的本机端口
ufw deny smtp
//禁止外部访问smtp服务
ufw delete allow smtp
//删除上面建立的某条规则
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port
//要拒绝所有的流量从TCP的10.0.0.0/8 到端口22的地址192.168.0.1
.
.
.
.
.
.
.
.

C#中应用哈希表(Hashtable)

一,哈希表(Hashtable)简述

在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.

二,哈希表的简单操作

在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素: HashtableObject.Clear();
判断哈希表是否包含特定键key: HashtableObject.Contains(key);
下面控制台程序将包含以上所有操作:
using System;
using System.Collections; //使用Hashtable时,必须引入这个命名空间
class hashtable
{
public static void Main()
{
Hashtable ht=new Hashtable(); //创建一个Hashtable实例
ht.Add("E","e");//添加key/value键值对
ht.Add("A","a");
ht.Add("C","c");
ht.Add("B","b");
string s=(string)ht[“A”];
if(ht.Contains("E")) //判断哈希表是否包含特定键,其返回值为true或false
Console.WriteLine("the E key:exist");
ht.Remove("C");//移除一个key/value键值对
Console.WriteLine(ht[“A”]);//此处输出a
ht.Clear();//移除所有元素
Console.WriteLine(ht[“A”]); //此处将不会有任何输出
}
}
三,遍历哈希表

遍历哈希表需要用到DictionaryEntry Object,代码如下:
foreach(DictionaryEntry de in ht) //ht为一个Hashtable实例
{
Console.WriteLine(de.Key);//de.Key对应于key/value键值对key
Console.WriteLine(de.Value);//de.Key对应于key/value键值对value
}

四,对哈希表进行排序

对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:
ArrayList akeys=new ArrayList(ht.Keys); //别忘了导入System.Collections
akeys.Sort(); //按字母顺序进行排序
foreach (string skey in akeys)
{
Console.Write(skey + ":");
Console.WriteLine(ht[skey]);//排序后输出
}

log4net使用记录

1:


http://logging.apache.org/log4net/

下载log4net

2:

在程序中引用 log4net.dll ,并 using log4net;

3:
配置相关的配置文件(WinForm添加app.config),WebForm的是web.config)
实例内容

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<appSettings>
</appSettings>
<log4net>
<!--定义输出到文件中-->
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<!--定义文件存放位置-->
<file value="log4netfile.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HH:mm:ss" />
<layout type="log4net.Layout.PatternLayout">
<!--每条日志末脚的文字说明-->
<footer value="by log4net." />
<!--输出格式-->
<conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<!--定义输出到控制台命令行中-->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<!--定义输出到windows事件中/事件太频繁,没用-->
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
<connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\log4net.mdb" />
<commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
<!--定义各个参数-->
<parameter>
<parameterName value="@logDate" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date" />
</layout>
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@logLevel" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
</appender>
<!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
<root>
<!--文件形式记录日志-->
<appender-ref ref="LogFileAppender" />
<!--控制台控制显示日志-->
<appender-ref ref="ConsoleAppender" />
<!--Windows事件日志-->
<!--
<appender-ref ref="EventLogAppender" />
-->
<!-- 不启用的日志记录输出方式,可以注释掉
<appender-ref ref="AdoNetAppender_Access" />
-->
</root>

</log4net>
</configuration>

4:
程序先添加

//下面的语句一定要加上,指定log4net使用.config文件来读取配置信息
//如果是WinForm 是app.config文件
//如果是WebForm,则 web.config 中读取相关信息
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

 

5:
使用时调用

//创建日志记录组件实例
ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//记录错误日志
log.Error("error",new Exception("异常"));
//记录严重错误
log.Fatal("fatal",new Exception("致命错误"));
//记录一般信息
log.Info("info");
//记录调试信息
log.Debug("debug");
//记录警告信息
log.Warn("warn");

 

 

附录
1:配置文件范例
http://logging.apache.org/log4net/release/config-examples.html

2:格式字符

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%f(file):输出语句所在的文件名。
%l(line):输出语句所在的行号。
%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。

apache 添加用户验证

虚拟主机配置文件中,需要加入
<Directory /data/web/test>
AllowOverride AuthConfig
</Directory>
我没添

然后在虚拟主机的主目录,即DocumentRoot 目录下
nano /data/web/test/.htaccess

加入
AuthName "web password"
AuthType Basic
AuthUserFile /data/web/test/.htpasswd
require valid-user

AuthType basic
AuthName "Protected Intranet Area"
AuthBasicProvider file
AuthUserFile /var/www/xxx/.htpasswd
Require valid-user

保存后,然后
创建apache的验证用户

htpasswd -c /data/web/test/.htpasswd test
#第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数

如果你想修改密码,可以如下

htpasswd -m .htpasswd test2

重启apache,即可。

ubuntu 10.04 安装 oracle 10g 客户端 记录

在 /etc/apt/source.list 中添加一行:
deb http://oss.oracle.com/debian unstable main non-free

将该源服务器的公钥添加在本地 apt 系统的密钥库中。首先下载公钥:
sudo wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle
下载完成之后添加该公钥到密钥库中:
sudo apt-key add RPM-GPG-KEY-oracle
apt-get update

apt-get install oracle-xe-client
///以上失败

wget oracle-xe-client.deb 后


失败,oracle现在下载要登录
http://download.oracle.com/otn/linux/oracle10g/xe/10201/oracle-xe-client_10.2.0.1-1.0_i386.deb

dkpg -i oracle-xe-client.deb 参照错误信息安装必需的包.

编辑 /etc/environment,添加如下几行:
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client
LD_LIBRARY_PATH=ORACLE_HOME/lib:LD_LIBRARY_PATH
TNS_ADMIN=/usr/lib/oracle
PATH=PATH:ORACLE_HOME/bin
保存文件之后,运行
source /etc/environment

 

//切换到 /usr/lib/oracle 目录中,建立 tnsnames.ora 文件,用于配置 Oracle 服务器的连接信息。
sqlplus /nolog
未成功

sqlplus usr/pwd@//host:port/sid
成功