emacs 学习笔记

如何阅读  以下emacs 命令中 C 代表Contral 键,M 代表Alt 键,ret 是回车。C-x 的含义是按住Contral 再按x 空格用于分隔控制字符和命令,其它字符是emacs 命令,按顺序输入。 尖括号<> 当中的内容不是emacs 命令,按语义输入。...

如何阅读 

以下emacs 命令中

  • C 代表Contral 键,M 代表Alt 键,ret 是回车。C-x 的含义是按住Contral 再按x
  • 空格用于分隔控制字符和命令,其它字符是emacs 命令,按顺序输入。
  • 尖括号<> 当中的内容不是emacs 命令,按语义输入。
  • 斜杠/用于隔开多个类似的命令和描述。

常用命令

打开文件
C-x f <FilePath> ret
多窗口间切换(窗口1... 窗口N)
C-x 1...<N>
多窗口间切换(上一个/下一个)
C-x 左/右箭头键
关闭当前Buffer 
C-x k ret
保存
C-x C-s
退出
C-x C-c
光标上、下、左、右移动
C-p/C-n/C-b/C-f
光标移动到行首、行尾 
C-a/C-e 
光标前/后移动一个单词
 M-f/M-b
光标前/后移动一个句子
 M-a/M-e
光标前/后移动一个段落
 M-{/M-}
光标到buffer 首/尾
 M-</M->
光标到第N行
 M-g-g N ret
删除后一个字符
 Del/C-d
删除前一个单词
 M-Del/M-Backspace
删除后一个单词
 M-d
删除到句首/尾
 M-k/C-x Backspace/Del
删除到行尾
 
C-k
将当前行与上一行进行合并,空格分隔
M-^ 

类似于vi 的Shift+j ,不过合并的方向相反。

向前/后搜索
C-r/C-s 
向上/下翻页
M-v/C-v 
光标行居中
C-l
选择一个范围 
C-空格

或者

C-2个空格 

上面的命令将当前光标所在位置设为选择起始点,然后移动光标,移动到那就选择到那,直接执行命令即可。后面的用法,会高亮选中的区域,更利于识别。

也可以用鼠标滑亮所选区域。

注:如果输入法占用了“C-空格”的快捷键,最好改成其它。

复制所选文本
 M-w
剪切所选文本
C-w
插入^G或其它控制字符
C-q C-G
dos2unix
C-x ret f unix ret
刷新一个文件内容的tricky 方法(reload)
C-x C-v ret
字符替换
M-x replace-string ret <OldStr> ret <NewStr> ret
替换行尾为换行(正则表达式)
M-x replace-regexp ret $ ret C-q C-J ret

以上2个命令作用范围是当前光标至buffer 末尾。

范围替换
 高亮选中范围 M-x replace-string ret <OldStr> ret <NewStr> ret
列替换
选中范围 C-x r t <NewStr> ret
列删除
选中范围 C-x r d
列剪切 
选中范围 C-x r k
列粘贴
C-x r y
替换Tab为空格
选中范围 M-x untabify ret
删除文件所有行尾空格 
M-x delete-trailing-whitespace ret
批量大小写转换 
选中范围 C-x C-u/C-l
光标后一个单词大小写转换
M-u/M-l
光标所在单词首字母变为大写
M-c
版本比较 diff
C-x v =
版本提交 commit
C-x v v <"message here"> C-c C-c
命令帮助搜索 
C-h a <CmdStr>

DB2 相关命令

建立一个db2 进程,并将当前emacs 实例中的buffers 与其关联
M-x sql-db2 ret 
将当前buffer 与emacs实例中已经存在的db2 进程进行关联
M-x sql-set-sqli-buffer ret

在db2 进程已经建立并且关联之后,可以使用以下命令执行db2 CLP命令或SQL语句。

执行整个buffer的语句
M-x sql-send-buffer 
执行选中的语句
选中范围 M-x sql-send-region
执行光标所在段落的语句
M-x sql-send-paragraph

段落的默认分隔符是空行(或者仅含有空格和TAB)。

在命令编辑区编辑新语句并执行
M-x sql-send-string

以上执行语句的部分命令有快捷键可调用,也可以使用global-set-key 命令将其更改为自己习惯的按键。

延展阅读

MySQL Notes

Connect to db mtmysql> use mtList DB or tablesmysql> show databases;mysql> show tables;Backup DB mtdos> mysqldump...

Connect to db mt

mysql> use mt

List DB or tables

mysql> show databases;
mysql> show tables;

Backup DB mt

dos> mysqldump -u root -p mt > dbname.sql;

Query table mt_entry structure 

mysql> show create table mt_entry;

 

 

DB2 学习笔记(四)

在AIX 系统上使用"db2 ? xxx" 命令查看帮助,需要加转移符"\" $ db2 \? list db2 get authorizations 用来获取当前用户的权限  Direct SYSADM authority                   ...
在AIX 系统上使用"db2 ? xxx" 命令查看帮助,需要加转移符"\"
$ db2 \? list
db2 get authorizations 用来获取当前用户的权限

 Direct SYSADM authority                    = NO
Direct SYSCTRL authority                   = NO
Direct SYSMAINT authority                  = NO
Direct DBADM authority                     = YES
Direct CREATETAB authority                 = YES
Direct BINDADD authority                   = YES
Direct CONNECT authority                   = YES
Direct CREATE_NOT_FENC authority           = YES
Direct IMPLICIT_SCHEMA authority           = YES
Direct LOAD authority                      = YES
Direct QUIESCE_CONNECT authority           = YES
Direct CREATE_EXTERNAL_ROUTINE authority   = YES
Direct SYSMON authority                    = NO
 Indirect SYSADM authority                  = NO
Indirect SYSCTRL authority                 = NO
Indirect SYSMAINT authority                = NO
Indirect DBADM authority                   = NO
Indirect CREATETAB authority               = NO
Indirect BINDADD authority                 = NO
Indirect CONNECT authority                 = YES
Indirect CREATE_NOT_FENC authority         = NO
Indirect IMPLICIT_SCHEMA authority         = NO
Indirect LOAD authority                    = NO
Indirect QUIESCE_CONNECT authority         = NO
Indirect CREATE_EXTERNAL_ROUTINE authority = NO
Indirect SYSMON authority                  = NO

DB2在编目节点(catalog node)时,可以在使用admin 关键字,指定admin 代表此节点对应了一个DB2系统的安装,称为系统(system),如果不指定admin,代表此节点对应了一个DB2的实例(instance),并需要至少指定服务名与端口号其中之一来映射此实例。

$ db2 catalog [admin] node 

Use "WITH HOLD" cause for cursor declaration would have more control on sources used by this cursor.

Use "LEAVE myloop" to stop execution in loop and go to the end of the loop.

Use "ITERATE myloop" to stop execution in loop and return to the begin of the loop to continue next loop.

Below db2 commands above need to attach to target node first before issuing them. 

$ db2 list active databases
$ db2 list applications
UNIQUNE cause in savepoint

the cause intend to that the same savepoint name can't be reused in the same savepoint level.

Units of work

A transaction is commonly referred to in DB2(R) Universal Database (DB2 UDB) as a unit of work. A unit of work is a recoverable sequence of operations within an application process. It is used by the database manager to ensure that a database is in a consistent state. Any reading from or writing to the database is done within a unit of work.

For example, a bank transaction might involve the transfer of funds from a savings account to a checking account. After the application subtracts an amount from the savings account, the two accounts are inconsistent, and remain so until the amount is added to the checking account. When both steps are completed, a point of consistency is reached. The changes can be committed and made available to other applications.

A unit of work starts when the first SQL statement is issued against the database. The application must end the unit of work by issuing either a COMMIT or a ROLLBACK statement. The COMMIT statement makes permanent all changes made within a unit of work. The ROLLBACK statement removes these changes from the database. If the application ends normally without either of these statements being explicitly issued, the unit of work is automatically committed. If it ends abnormally in the middle of a unit of work, the unit of work is automatically rolled back. Once issued, a COMMIT or a ROLLBACK cannot be stopped. With some multi-threaded applications, or some operating systems (such as Windows(R)), if the application ends normally without either of these statements being explicitly issued, the unit of work is automatically rolled back. It is recommended that your applications always explicitly commit or roll back complete units of work. If part of a unit of work does not complete successfully, the updates are rolled back, leaving the participating tables as they were before the transaction began. This ensures that requests are neither lost nor duplicated.


sql0010N state 42603

编译过程时出现此错误信息,可能是由于多余的单引号引起,行号指定处为错误点。

sql0104N state 42601

过程如果超过65535字节长度限制,编译时会抛出此错误信息,行号指定处为限制点。

对于两个整形变量作除法运算,结果可能并不是你希望得到的小数(如果分子小于分母)

select 2/4 from sysibm.sysdummy1
1
----
0


若希望得到小数,可在运算之前转换分子分母任意一个到DECIMAL 或者DOUBLE

select DECIMAL(2)/4 from sysibm.sysdummy1
1
----
0.5

"GET DIAGNOSTICS" must be the first next line after DML, otherwise the ROW_COUNT will not be the value you want.

DELETE FROM PRMS1.opprtnty_line_item;
GET DIAGNOSTICS v_affected_rows = ROW_COUNT;

It's impossible to change a column from not null to nullable by alter table statement.
But there's a way that meets this requirement by execute sys procedure.

It's not allowed to drop columns from a table without re-creation of the table.

db2 doesn't support following sql

select NULL as c1 from sysibm.sysdummy1

在DB2 中重命名表或者索引

RENAME TABLE EMP TO EMPLOYEE
RENAME TABLE ABC.EMP TO EMPLOYEE 
RENAME INDEX NEW-IND TO IND
RENAME INDEX ABC.NEW-IND TO IND

拥有检查约束和非主键自增列的表不允许重命名,在视图、触发器、函数或者物化查询表中被引用的表也不允许重命名,只能Drop 掉,重新创建。

使用DMS 表空间,DB2绕过操作系统,直接管理用于表空间的存储,可以保证数据页物理连续的存放。不过有个例外,如果是files类型的DMS表空间容器,则不能总是保证数据页是物理连续存放的,而对于裸设备(raw)容器,则可以完全保证。

Linux 系统管理学习笔记(四)

rpm 下面列出rpm的一般用法,这里也有一篇非常全面的介绍:rpm 详解。 安装一个软件包: $ rpm -ivh example.rpm 在已安装基础上升级软件包: $ rpm -Uvh upgrade.rpm 删除软件包: $ rpm...

rpm

下面列出rpm的一般用法,这里也有一篇非常全面的介绍:rpm 详解

安装一个软件包:

$ rpm -ivh example.rpm

在已安装基础上升级软件包:

$ rpm -Uvh upgrade.rpm

删除软件包:

$ rpm -e nouse.rpm

查询一个软件包是否已经安装(忽略大小写):

$ rpm -qa |grep -i example

如果要安装的软件包依赖于其它尚未安装的软件包,要忽略依赖关系,强制安装:

$ rpm -ivh --nodeps example.rpm

查看一个软件包中包含哪些文件:

$ rpm -qlp example.rpm

eject

弹出光驱:

$ eject

关闭光驱(直接使用mount 命令,光驱也会自动关闭):

$ eject -t

有关eject 命令这里还有更有趣的讨论

locale

列出当前系统安装的所有locales:

$ locale -a

find

对查找到的文件集合进行命令操作,{}代表文件集合,反斜杠以及前面的空格与后面的分号都不能少。

find . -name "*.dat" -exec cp {} /tmp \;

google code search

 

Google 有一个未公开的code search引擎 http://www.google.com/codesearch。专门搜索源代码时非常有用。比如搜索以下字符串:

lang:shell find {} exec cp

注意,不能输入 -exec,虽然你的目的是搜索字符串"-exec",  但搜索引擎认为你不想在结果中包括 "exec"。

(未完)

Linux 系统管理学习笔记(三)

iptables 有关iptables,这里有一篇非常全面的介绍。 Linux iptables信息包过滤过程图 http://www-128.ibm.com/developerworks/cn/linux/network/s-netip/diagram1.jpg 查看已有的包过滤规则# iptables -L 这将显示默认的表filters中的规则,如果想查看nat表或者mangle表,需要使用# iptables -t nat -L# iptables -t mangle...

iptables

有关iptables,这里有一篇非常全面的介绍

Linux iptables信息包过滤过程图

http://www-128.ibm.com/developerworks/cn/linux/network/s-netip/diagram1.jpg

查看已有的包过滤规则

# iptables -L

这将显示默认的表filters中的规则,如果想查看nat表或者mangle表,需要使用

# iptables -t nat -L
# iptables -t mangle -L

需要注意的是,rh linux 中有两个iptables 命令,一个是/sbin/iptables ,也是我们设置规则所使用的命令。另一个是/etc/rc.d/init.d/iptables ,用于保存设置的iptables 规则,或者重启动iptables 服务等等:

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

 

iptables 命令所编辑的规则被保存到以下文件:

/etc/sysconfig/iptables

 

GnuPG(gpg)

验证一个使用GnuPG 签名(Signed)的文件,首先需要获得对此文件进行签名者的公钥(Pub Key),公钥一般可通过签名者的网站获得,是一个扩展名为 .asc 的文本文件。下载回来之后,先导入此公钥,并查看本地已经保存的公钥:

$ gpg --import filename.asc
$ gpg --list-key

验证文件 filename.tar.gz 的签名,filename.tar.gz.sig 是随着filename.tar.gz 一同发布的签名文件。

$ gpg --veriry filename.tar.gz.sig filename.tar.gz
gpg: Signature made Fri 15 Jul 2005 04:13:35 AM CST using DSA key ID 89E917F3
gpg: Good signature from "tcpdump.org (SIGNING KEY) <tcpdump-workers@tcpdump.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 0227 54EB 4C30 9185 FD31  33A3 464D 3CEB 89E9 17F3

使用GnuPG 为自己建立用于签名的公钥与私钥

$ gpg --gen-key

然后按提示操作,将为你生成一对公钥与私钥,将公钥发布出去,私钥自己妥善保存。

使用私钥加密一个文件:

$ gpg --sign filename.txt

解密文件:

$ gpg filename.txt

参考 man gpg

curl

命令行下的Web 客户端 curl,读取一个链接,并把内容输出到标准输出,如果想查看 www.aiview.com 的首页,如下操作:

$ curl www.aiview.com |more

用于集线器(Hub) 环境的sniffer 工具 tcpdump,下载地址:www.tcpdump.org

top

top 命令不仅可以用于查询系统资源使用情况,还可以显示系统当前总计运行时间:

$ top
 19:46:28  up 5 days,  6:48,  2 users,  load average: 0.05, 0.04, 0.01
60 processes: 58 sleeping, 2 running, 0 zombie, 0 stopped
CPU states:   0.3% user   0.0% system   0.0% nice   0.0% iowait  99.6% idle
Mem:   255268k av,  238332k used,   16936k free,       0k shrd,   85536k buff
                    155172k actv,       0k in_d,    4148k in_c
Swap:  265000k av,       0k used,  265000k free                  126372k cached

free

free 命令相对于top 提供了更简洁的查看系统内存使用情况:

$ free
             total       used       free     shared    buffers     cached
Mem:        255268     238332      16936          0      85540     126384
-/+ buffers/cache:      26408     228860
Swap:       265000          0     265000
  • Mem:表示物理内存统计
  • -/+ buffers/cached:表示物理内存的缓存统计
  • Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。

系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。

我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。

  • total1:表示物理内存总量。
  • used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
  • free1:未被分配的内存。
  • shared1:共享内存,一般系统不会用到,这里也不讨论。
  • buffers1:系统分配但未被使用的buffers 数量。
  • cached1:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
  • used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。
  • free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

可以整理出如下等式:

total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
free2 = buffers1 + cached1 + free1
buffer 与cache 的区别

A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use.

更详细的解释参考:Difference Between Buffer and Cache

对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣,请参考:What is Shared Memory?

关闭不使用的服务

如果你正在运行一个Linux 服务器,那么关掉那些不常用或者永远不会用到的服务是个好主意。

使用如下命令检查当前系统设置了哪些服务在启动时运行(注意,这与当前系统运行了哪些服务有区别)

# chkconfig --list |grep 3:on

如果你的系统默认运行在命令行模式,使用“3:on”,如果默认运行了图形界面,使用“5:on”,这个数字代表了系统的启动级别,在/etc/inittab 中进行配置。

对于一些你很清楚的非必要服务,使用如下命令停止服务,并关闭其在所有级别的启动,如果仅希望关闭在某个级别的启动,使用参数 --level,具体请参考笔者第一篇笔记。

# service srvname stop
# chkconfig srvname off

对于不清楚的服务,参考:Linux Services, Devices, and Deamons

比如,对于一般不启动图形界面的Linux 服务器,以下服务均可关闭:

  • rawdevices 用于裸设备
  • pcmcia 笔记本的pc 卡设置
  • apmd 笔记本电池监测
  • gpm 鼠标支持
  • autofs 自动mount文件系统
  • isdn 设置isdn连接
  • portmap 为NFS 等服务提供RPC 支持
  • nfs 网络文件系统服务器,让别人通过网络mount 你的文件
  • nfslock 服务于nfs
  • sendmail 邮件传输
  • squid 用于FTP 与HTTP 服务的代理缓存,加快web 访问速度
  • winbind 用于UNIX 中同步NT 主机上的帐号信息,一般用于配合SMB 共享
  • smb 与Windows主机进行文件与打印机资源共享
  • xfs X 系统下的字体服务
  • vsftpd FTP服务器

Linux 系统管理学习笔记(二)

Linux系统管理命令的一点拾零,这是第二部分,主要关注Linux系统安全方面。其余的笔记请到这里浏览。 正文 给一个目录设置粘连位,设置了粘连位的目录在属性中的最后一位有一个字母t,使用ls -l查看。设置了粘连位的目录中,用户只能删除自己创建的文件。$ chmod +t dir_name 比如一般linux发布中,/tmp目录默认被设置粘连位。$ ls -ld /tmpdrwxrwxrwt 27 root root 8192 Nov...

Linux系统管理命令的一点拾零,这是第二部分,主要关注Linux系统安全方面。其余的笔记请到这里浏览

正文

给一个目录设置粘连位,设置了粘连位的目录在属性中的最后一位有一个字母t,使用ls -l查看。设置了粘连位的目录中,用户只能删除自己创建的文件。

$ chmod +t dir_name

比如一般linux发布中,/tmp目录默认被设置粘连位。

$ ls -ld /tmp
drwxrwxrwt 27 root root 8192 Nov 29 23:12 /tmp

另外还有两个文件许可位,suid与sgid。设置了suid或者sgid许可位的文件在执行时,不依赖于当前执行的用户(或当前执行用户的组),而使用此文件所有者(或所有者的组)的身份来执行。
设置了suid或者sgid位的文件,相应许可位rwx中的x变为s。
使用如下命令设置设置suid位:

# chmod u+s filename
# ls -l filename
-rwsr-xr-x

使用如下命令设置sgid位:

# chmod g+s filename
# ls -l filename
-rwxr-sr-x

使用下面的命令可以列出系统中所有的suid或者sgid程序:

# $ find / \( -perm -02000 -o -perm -04000 \) -ls

定期使用命令

# grep -i 'authentication failure' /var/log/messages > failed_logins.txt

查看系统是否有未成功的登录企图是很有用的,不同的linux发布可能有不同的特征串,其中-i参数指定匹配中忽略大小写。
也可以把这个命令作为一个任务定期运行,但要注意文件的输出问题,以及定期做检查与清理工作。

可以设置一个文件为追加模式,只能加入内容,不允许删除,或者减少内容的操作,只有root能够设置这个属性。

# chattr +a filename

注意,设置了+a 的文件即使root本身也不无法修改和删除,除非使用去除属性设置:

# chattr -a filename

这个操作可以应用于系统的日志文件,这些文件正常情况下只是追加,即使root也不会有删除这些文件内容的需要,这会给已取得root权限的黑客造成一点小的障碍,延误他破坏的进程,虽然只是一小步。
设置了+s属性的文件,在删除时,会把磁盘块清零。

查看一个文件使用chattr设置的属性。

# lsattr filename 

LIDS,一个内核级的Linux入侵检测系统,可以检测到Nmap、SATAN等工具所作的半公开扫描、SYN秘密扫描、秘密FIN以及Xmas等。可讲检测到的扫描通过syslog后者email记录下来。
下载地址:http://www.lids.org
安装lids之后需要重新编译内核,再次安装并重启动linux系统。

Linux系统的日志主要分为两种类型:

  1. 进程所属日志
  2. syslog消息

前者是由用户进程或其他系统服务进程自行生成的日志,比如apache服务器的access_log与error_log日志文件。
后者是由系统syslog记录的日志,任何希望记录日志的系统进程或者用户进程都可以给调用syslog来记录日志,这是一个面对多数应用程序记录日志的通用解决方法。
一般这个消息会发送给/dev/log,然后由syslog记入日志文件。
syslogd是linux系统中默认的系统日志守护进程,可以通过/etc/syslog.conf进行配置消息的去向。如下行取自/etc/syslog.conf文件:

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* /var/log/maillog


# Log cron stuff
cron.* /var/log/cron

# Save boot messages also to boot.log
local7.* /var/log/boot.log

syslog中的功能划分如下:

  • auth 安全性/验证消息(负面)
  • authpriv 安全性/验证消息
  • cron cron 和at
  • daemon 其他系统守护进程(sshd,inetd,pppd等)
  • kern 内核消息
  • lpr 行打印子系统
  • mail 邮件子系统(sendmail,postfix,qmail等)
  • news Usenet新闻消息
  • syslog 内部syslog消息
  • user 一般用户级消息
  • uucp UUCP子系统
  • local0-local7 自定义的级别

syslog的日志级别:

  • emerg 系统以不可用
  • alert 必须马上采取行动
  • crit 危急
  • err 错误
  • warning 警告
  • notice 普通但重要的情形
  • info 通知消息
  • debug 调试消息

syslog.conf 的第一列用来指定日志功能和日志级别,中间用.隔开,可以使用*来匹配所有的日志功能和日志级别
第二列是消息的分发目标,可以有如下格式:

/path/to/filename 将消息追加到指定的文件尾,最常用
@loghost 将消息写到loghost主机上的syslog服务器
|/path/to/named_pipe 将消息写到指定的命名管道(便于外部程序过滤消息)
user1, user2 将消息写到指定的用户
* 将消息写到所有的用户
/de/console, /dev/tty1 等 将消息写到指定的终端

一个好的syslog.conf应该如下:

# Log ALL messages to /var/log/messages
# for easy scanning by log checkers
*.debug /var/log/messages

# write to terminals for really bad situations
kern,daemon.crit /dev/console
kern,daemon.crit root
*.emerg *

# Separate out other logs to be easier to read
# Debug level for more important facilities
kern.debug /var/log/kern.log
mail.debug /var/log/mail.log
daemon.debug /var/log/daemon.log
auth.debug /var/log/auth.log
syslog.debug /var/log/syslog.log
authpriv.debug /var/log/authpriv.log
fpt.debug /var/log/ftp.log

# Notice fine for others
user.notice /var/log/user.log
lpr.notice /var/log/lpr.log
news.notice /var/log/news.log
uucp.notice /var/log/uucp.log
cron.notice /var/log/cron.log
local0,local1,local2.notice /var/log/local.log
local3,local4,local5.notice /var/log/local.log
local6.notice,local7.notice /var/log/local.log

在修改了syslog.conf文件的同时,别忘了,应该把旧的日志文件归档到一个统一的目录,比如: old_log,这样可以使日志文件更清晰一些。但要注意,新的日志文件中,也使用了messages这个文件。

syslogd也可以在shell中被调用,任何验证的用户都可以通过如下调用,在日志中产生一行:

$ logger -p kern.alert -t 'su(pam_unix)' "authentication failure..."

这与一条失败验证产生的日志一模一样。而且黑客可能会大量的产生无用日志信息,用来塞满日志系统,使日志发生轮回,以清除旧的日志,或者使日志塞满,无法再记录新的日志。
因为,我们在保护日志的同时,也必须认识到,日志中的内容并不是完全可信的。

日志文件的许可设置原则:
只有root可以写入日志文件,并且只有logs组的用户才有读权限,如下

# addgroup logs
# cd /var/log
# chgrp -R logs .
# find . -type -d | xargs chmod 750
# find . -type -f | xargs chmod 640
# chmod 750 .

还需要保证/var/log 目录只有root才能写入,否则日志可以被别人删除:

# ls -ld /var/log
drwxr-xr-x 17 root root 4096 Nov 29 01:52 /var/log

一种保护日志的方式,在网络中设定一台秘密的syslog主机,把这台主机的网卡设为混杂模式,用来监听子网内所有的syslog包,这样把所有需要传送日志的主机配置为向一台不存在的主机发送日志即可。
这样即使黑客攻陷了目标主机,也无法通过syslog.conf文件找到备份日志的主机,那只是一个不存在的主机。实际操作中还可以辅以交换机的配置,以确保syslog包可以被备份日志主机上的syslog进程接受到。
比如把syslog.conf中的传送日志主机设为 @192.168.0.13,但实际网络中不存在这个日志主机,实际可能是192.168.0.250或者其他主机正在接受syslog包。

子网掩码30意味着这个子网中只有2台主机。

对于域名拥有者来讲,保存在域名中心的个人信息即是某种正当的需要,同时也暴露了很多个人的隐私,因为这些个人信息一般都填写的是真实有效的。
在unix中,通过如下命令,就可以取到这些的信息,而这对于那些打算展开社交攻击的黑客们已经足够了。

$ whois domain.com 

对于有些whois的版本,在第一次仅会查出有关这个域名的基本信息,但其中包含了用于进一步查找这个域名的服务器:

Whois Server: whois.xxxxxx.xxx

可以通过如下命令进一步查找更详细的信息:
whois domain.com@whois.xxxxxx.xxx

当前在redhat 9发布版本中所带的whois版本已经可以自动进行这种进一步查找,你只需要简单的发布一次:

$ whois domain.com

对于一个IP地址,也可以使用whois服务器查询这个IP地址被分配给了那个组织。这需要使用whois.arin.net数据库:

$ whois ip@whois.arin.net

一般会返回详细信息,包括组织的地址与电话,如果这个whois数据库不包含具体信息,一般会返回一个ReferralServer,比如:

ReferralServer: whois://whois.apnic.net

这是亚太地区的一个服务器,可以继续查询:

$ whois ip@whois.apnic.net

一般这会返回这个ip所属的组织详细信息。

touch命令可用来修改文件属性

# touch -t 200411280000.00 filename

如下命令可以用于找出2004年11月28日以后所有修改过的文件:

# touch -t 200411280000.00 /tmp/comparison
# find / \( -newer /tmp/comparison -o -cnewer /tmp/comparison \) -ls

有关系统漏洞方面的最受推荐的一个邮件列表:

其他还有Vulnwatch和Linux Security等。

参考资源

DB2 UDB V8.1 管理 学习笔记(一)

正文工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。DB2 基本概念在DB2中由上至下的几个概念:实例(Instance), 数据库(Database),表空间(TableSpace),容器(Container)在一个操作系统中,DB2数据服务可以同时运行多个实例(有别于Oracle在一个系统内只能起一个实例).数据库定义在实例中,一个实例可以包含多个数据库。在同一个实例中的不同数据库是完全独立的,分别拥有自己独立的系统编目表。表空间有2种管理方式:DMS(Database management Space)方式SMS(System manegement Space)方式DMS与SMS方式在表空间建立时指定,建好后不能转换。对于DMS方式,一个表空间对应了一个或多个容器(Container),容器指定了数据的物理存储位置。对于SMS方式,只能够指定一个目录,不能够增加。表空间具有以下类型:系统编目表空间(SysCatSpace)系统临时表空间(SysTempSpace)用户表空间(UserSpace)用户临时表空间(UserTempSpace)一个数据库中必须存在两个系统基本的表空间,分别是系统编目表空间与系统临时表空间。在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现,对于临时表空间,其占用磁盘大小是根据使用情况动态伸缩的,即仅在需要时才分配磁盘空间,并在使用后进行回收。此外,若用户需要创建表,则需要创建用户表空间,若需要使用临时表,则需要创建用户临时表空间。容器分为三种类型:Files 文件Devices 设备Directory 目录文件与设备,用于DMS方式的表空间;目录,用于SMS方式的表空间,此种方式不需要人工管理数据存储文件,DB2可根据情况在目录中自动增加存储文件,只要磁盘空间允许。实质上,表空间是数据存储的逻辑位置定义,容器则是数据存储的物理位置定义。数据库的性能影响一个数据库的性能主要有以下因素:磁盘(Disk)内存(Memory)处理器(CPU)网络(Network)其中以磁盘最为显著,90%的性能瓶颈可能来自于磁盘的IO竞争;其次是内存,一方面是指物理内存的总量要满足需求,另一方面是指与内存相关的配置参数应正确配置;当然处理器的性能也很重要,多路CPU会对哪些依赖计算能力的复杂SQL查询起到显著的效果;网络不属于主要因素,属于客观的环境因素,是指过慢的网速会对数据的传输造成影响。以下列出一些对于提高数据库性能有效的方法:对于运行数据库服务的服务器可以尽可能的配置多块物理磁盘,每块的容量不必太大,这样可以有效的分担数据存储与读取操作过程的磁盘IO竞争。即采用多块小容量的磁盘在性能上要优于仅采用一块大容量的磁盘。如果条件允许,尽量使数据存储服务与操作系统分别运行在物理分开的磁盘上。采用DMS(Database Management Space)管理方式的表空间。在物理不同的磁盘上创建多个表空间。然后可以将数据和索引分别存放在不同的表空间,这样可以显著的提高性能。还可以把一个使用频繁的大表纵向拆成多个小表,分别存放在不同的表空间中,然后用一个视图进行联合。DB2服务器可以管理裸设备,即除系统以及DB2服务运行磁盘以外,为DB2数据存放单独准备磁盘,可以是多块,分区后不需要格式化,创建裸设备后直接交给DB2进行管理,用于存储数据。系统的临时表空间对数据库性能影响很大,当由管理的物理内存不能满足数据库操作的需要时,DB2便会把临时数据写到磁盘上,这时便用到了系统临时表空间,并且这种情况会经常发生。尽量在磁盘靠近最内层磁道的位置安放数据,因为此处磁盘的访问速度较快。与性能相关的主要参数DB2的参数配置分为两个级别,一个是实例级别,另一个是数据库级别。对数据服务性能影响较大的参数主要在数据库级别配置。以下是三个比较重要的内存配置参数:bufferpagelocklistsortheapbufferpage: 由同一个数据库中的所有对象共享。sortheap: 用于排序的内存交换区,非共享,不宜设置太大,否则,很容易引起内存耗尽,因为每一个事务都会申请独立的内存用于排序。locklist: 共享内存,用于记录数据服务运行中建立的锁。建议设置20Mb左右,需要时根据实际情况进行调整。DB2默认使用行级锁,如果设置太小,当锁的记录太多时,则会导致内存不足,此时DB2会把多个行锁升级为一个表锁,这样就会大大降低应用程序的并发性能。如果设置太大,则多分配的内存很少会被用到,导致浪费。其他的一些配置参数:numdb: 同时可以启动的实例数目DB2的常用命令db2ilist...

正文

工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。

DB2 基本概念

在DB2中由上至下的几个概念:

  • 实例(Instance),
  • 数据库(Database),
  • 表空间(TableSpace),
  • 容器(Container)

在一个操作系统中,DB2数据服务可以同时运行多个实例(有别于Oracle在一个系统内只能起一个实例).

数据库定义在实例中,一个实例可以包含多个数据库。在同一个实例中的不同数据库是完全独立的,分别拥有自己独立的系统编目表。

表空间有2种管理方式:

  • DMS(Database management Space)方式
  • SMS(System manegement Space)方式

DMS与SMS方式在表空间建立时指定,建好后不能转换。对于DMS方式,一个表空间对应了一个或多个容器(Container),容器指定了数据的物理存储位置。对于SMS方式,只能够指定一个目录,不能够增加。

表空间具有以下类型:

  • 系统编目表空间(SysCatSpace)
  • 系统临时表空间(SysTempSpace)
  • 用户表空间(UserSpace)
  • 用户临时表空间(UserTempSpace)

一个数据库中必须存在两个系统基本的表空间,分别是系统编目表空间与系统临时表空间。在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现,对于临时表空间,其占用磁盘大小是根据使用情况动态伸缩的,即仅在需要时才分配磁盘空间,并在使用后进行回收。此外,若用户需要创建表,则需要创建用户表空间,若需要使用临时表,则需要创建用户临时表空间。


容器分为三种类型:

  • Files 文件
  • Devices 设备
  • Directory 目录

文件与设备,用于DMS方式的表空间;

目录,用于SMS方式的表空间,此种方式不需要人工管理数据存储文件,DB2可根据情况在目录中自动增加存储文件,只要磁盘空间允许。

实质上,表空间是数据存储的逻辑位置定义,容器则是数据存储的物理位置定义。

数据库的性能

影响一个数据库的性能主要有以下因素:

  • 磁盘(Disk)
  • 内存(Memory)
  • 处理器(CPU)
  • 网络(Network)

其中以磁盘最为显著,90%的性能瓶颈可能来自于磁盘的IO竞争;

其次是内存,一方面是指物理内存的总量要满足需求,另一方面是指与内存相关的配置参数应正确配置;

当然处理器的性能也很重要,多路CPU会对哪些依赖计算能力的复杂SQL查询起到显著的效果;

网络不属于主要因素,属于客观的环境因素,是指过慢的网速会对数据的传输造成影响。以下列出一些对于提高数据库性能有效的方法:

  • 对于运行数据库服务的服务器可以尽可能的配置多块物理磁盘,每块的容量不必太大,这样可以有效的分担数据存储与读取操作过程的磁盘IO竞争。即采用多块小容量的磁盘在性能上要优于仅采用一块大容量的磁盘。
  • 如果条件允许,尽量使数据存储服务与操作系统分别运行在物理分开的磁盘上。
  • 采用DMS(Database Management Space)管理方式的表空间。
  • 在物理不同的磁盘上创建多个表空间。然后可以将数据和索引分别存放在不同的表空间,这样可以显著的提高性能。还可以把一个使用频繁的大表纵向拆成多个小表,分别存放在不同的表空间中,然后用一个视图进行联合。
  • DB2服务器可以管理裸设备,即除系统以及DB2服务运行磁盘以外,为DB2数据存放单独准备磁盘,可以是多块,分区后不需要格式化,创建裸设备后直接交给DB2进行管理,用于存储数据。
  • 系统的临时表空间对数据库性能影响很大,当由管理的物理内存不能满足数据库操作的需要时,DB2便会把临时数据写到磁盘上,这时便用到了系统临时表空间,并且这种情况会经常发生。
  • 尽量在磁盘靠近最内层磁道的位置安放数据,因为此处磁盘的访问速度较快。

与性能相关的主要参数

DB2的参数配置分为两个级别,一个是实例级别,另一个是数据库级别。对数据服务性能影响较大的参数主要在数据库级别配置。以下是三个比较重要的内存配置参数:

bufferpage
locklist
sortheap
  • bufferpage: 由同一个数据库中的所有对象共享。
  • sortheap: 用于排序的内存交换区,非共享,不宜设置太大,否则,很容易引起内存耗尽,因为每一个事务都会申请独立的内存用于排序。
  • locklist: 共享内存,用于记录数据服务运行中建立的锁。建议设置20Mb左右,需要时根据实际情况进行调整。DB2默认使用行级锁,如果设置太小,当锁的记录太多时,则会导致内存不足,此时DB2会把多个行锁升级为一个表锁,这样就会大大降低应用程序的并发性能。如果设置太大,则多分配的内存很少会被用到,导致浪费。

其他的一些配置参数:

numdb: 同时可以启动的实例数目

DB2的常用命令

db2ilist 列出当前系统中定义的DB2实例
daslist 列出系统中的DAS
db2 list database directory 列出当前实例中定义的数据库
db2 list tablespaces 列出当前数据库中定义的表空间
db2 list tabses [for all] 列出当前数据库中的表
db2 list active db 列出活动的数据库
db2 get dbm config
get db cfg for databasename
db2 update db cfg for databasename using bufferpage 600M
db2 alter bufferpool IABMDEFAULTBP size =1
db2 list applications show detail

以上命令可以在后面加 " show detail" 参数,显示详细信息。

DB2数据存储的页大小只能在表空间级别统一指定(区别于Oracle,可以定义在表级别), 并且建好后不能修改。

可以手工建立一个页大小为4K的DMS用户临时表空间,然后把系统默认的SMS系统临时表空间删除。为满足应用需求,一般还应再建立一个页大小在8K以上的用户临时表空间。

DB2 UDB V8.1 对RedHat Linux 9 的支持不好,默认情况下无法启动GUI安装程序(可以通过设置环境LD_ASSUME_KERNEL=2.2.5解决),并且不会安装Sample数据库,控制中心也无法正常启动。

DB2 SQL 相关

当使用COUNT()函数时,如果表中的记录数 > 2 147 483 647行,则函数可能返回错误的结果,这时可以使用返回类型为DECIMAL(31, 0)的COUNT_BIG()函数。

DISTINCT 关键字可以用在COUNT()函数中,如:

SELECT COUNT(DISTINCT id) FROM TABLE

这代表将不对id列的重复值进行计数。

ORDER BY子句后面如果写了多个列名,需要分别指定升序或是降序。

可以在load大量数据时,暂时关闭表的日志选项。使用:

ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY

DB2的几个特殊寄存器:

CURRENT DATE
CURRENT TIME
CURRENT TIMESTAMP
USER(用户ID)

有关日期的操作:

CURRENT TIMESTAMP + 2 DAYS(or HOURS, SECONDS, MONTHS, YEARS, etc.)

case 语句的使用:

case when 条件一 then 动作一 else 动作二 end; 

以上可以欠套使用。

在视图的创建语句中无法使用order by 子句与 fetch n rows 子句。但对于order by可以用如下方法替代实现,不过会影响效率。

create view v_name1(c1, c2, c3) as
select * from (
select column1, column2, column3
from t1
order by column1 ) as t1;

参考资源

 

DB2 UDB V8.1 管理 学习笔记(二)

正文工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。表空间类型分为SMS和DMS,分别是system management space, database management space. SMS使用方便,简单,无需手工创建和维护数据存储文件。DMS需要手动指定container和存储数据的文件名,并保证有足够磁盘空间可用。对于一个数据库,至少存在一个page size为4K的系统临时表空间,可以额外建立具有更大page size的用户临时表空间,系统会自动进行使用。无法用alter语句更改一个字段的数据类型,对某些字段可以更改数据长度,这一点上相对于Oracle,DB2的限制要多一些。可以使用: select 表达式 from sysibm.sysdummy; 替代的,以下语句是等价的:values 表达式;表和视图的创建、更新、删除操作,都写日志,因此可以commit或rollback。在update语句中,如果没有对定义了默认值的某个字段显式赋值,则更新时,此字段不会重新执行默认值中定义的表达式。为了让其重新执行默认值定义的表达式,可以采用以下方式:create table...

正文

工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。

表空间类型分为SMS和DMS,分别是system management space, database management space. SMS使用方便,简单,无需手工创建和维护数据存储文件。DMS需要手动指定container和存储数据的文件名,并保证有足够磁盘空间可用。
对于一个数据库,至少存在一个page size为4K的系统临时表空间,可以额外建立具有更大page size的用户临时表空间,系统会自动进行使用。

无法用alter语句更改一个字段的数据类型,对某些字段可以更改数据长度,这一点上相对于Oracle,DB2的限制要多一些。
可以使用: select 表达式 from sysibm.sysdummy; 替代的,以下语句是等价的:values 表达式;


表和视图的创建、更新、删除操作,都写日志,因此可以commit或rollback。

在update语句中,如果没有对定义了默认值的某个字段显式赋值,则更新时,此字段不会重新执行默认值中定义的表达式。为了让其重新执行默认值定义的表达式,可以采用以下方式:

create table t1 (c1 varchar(32), lastupdatetime with default current timpstamp);
update t1 set c1 = 'new string', lastupdatetime = default;

对于DB2数据库可以在创建时指定codepage参数,创建后不可修改。当应用程序访问数据库时,DB2会比较两者的codepage是否一致,不一致则进行代码页的自动转换。为了减少转换所带来的开销,应尽量保证应用程序所采用的代码页与数据库一致。

可以对DB2 CLP工具的codepage进行设置,使用:

$ db2set DB2CODEPAGE= 1386

本例中设置的是中文GBK字符集在Windows平台对应的值。注意,这个数字值是由DB2自己定义的。有关各种字符集在相应平台所对应的代码页值可在IBM网站查找。

在DB2 CLP中,对远程数据库编目的操作,首先把远程主机映射为本地节点,节点名自己指定,本例采用TCPIP连接。service_name一般定义在远程主机的/etc/services文件中。

$ db2 CATALOG TCPIP NODE local_node_name REMOTE hostname|ip SERVER service_name 

然后把已知的远程主机的数据库映射到本地别名,注意本地别名在主机级别不能重复。节点名指定上面刚编目的节点。

$ db2 CATALOG DATABASE db_name AS local_alias AT local_node_name USER username USING password 

现在就可以用刚才编目中定义的别名连接远程主机数据库

$ db2 CONNECT TO local_alias USER username USING password

获取数据库详细配置信息

$ db2 GET CONFIGURATION SHOW DETAIL 

对于DB2返回的错误号,可以用以下方法查阅说明(以sql 10008为例):

$ db2 ? sql10008

数据库的备份与恢复:

使用备份与恢复工具可以完成在不同的服务器见完整的转移数据库的工作,命令行方式如下:

备份

$ db2 BACKUP DATABASE db_name USER user_name USING password to backup_dir_name
$ db2 BACKUP DATABASE dlhdb USER dlh USING admindlh TO d:\backups

恢复

$ db2 RESTORE DATABASE source_db_name USER user_name USING password FROM backup_dir_name TAKEN AT backup_file_create_time TO driver_letter INTO new_db_name
$ db2 RESTORE DATABASE dlhdb USER dlh USING admindlh FROM d:\backups TAKEN AT 20031209141056 TO d: INTO newdb

有关实例的操作:

设置默认实例环境变量

$ db2 SET DB2INSTANCE=inst_name

启动当前实例

$ db2start

停止当前实例

$ db2stop [force]

连接到某个实例

$ db2 ATTACH TO ANSTANCE inst_name

获取实例的配置参数

$ db2 GET DBM CFG SHOW DETAIL

导出数据库完整的定义到脚本文件,包括表,视图,函数,数据库参数等

$ db2look -d sample(数据库) -a -e -l -x -m -f -o(参数)samplesql.out(输出文件)

load 一个表的数据时,有可能导致表空间处于backup pending(0x0020)状态。比如把整形数据load到double型的字段中。
处于backup pending状态的表空间不能被访问。
可以通过对此表空间运行一次backup操作,恢复到正常状态(0x0)。

对于自增字段,可以通过两种方式指定:

generated by default as identity
generated always as identity

区别是,第一种方式在插入数据时允许手工指定自增字段的值,只要不重复即可,并且数据库会自动设置下一个值;
第二种方式则不允许指定,只能由数据库自动分配并插入。


DB2 sql语句中转义符的使用:

select * from t1 where a like '%abc\%def' escape '\';

创建数据库时,出现SQL1043C错误,可能的问题:
指定容器所在的磁盘空间不足,
当容器为file类型时,后面的long-num参数不对,比如25600代表256Mb,但如果指定256则会导致以上错误。


平台 RH Linux 8
DB2 UDB v8.1
在WAS 5中建立到db2的数据源,但连接失败,返回以下错误:

[Servlet Error]-[SQLConnect]: java.lang.UnsatisfiedLinkError: SQLConnect

原因是没有为运行was服务的用户设置以下环境变量:

D_LIBRARY_PATH
LIBPATH
DB2INSTANCE
...

以上环境变量定义在 $INSTHOME/sqllib/db2profile文件中,可以采用的解决方案:

$ sh stopServer.sh servername

$ . $INSTHOME/sqllib/db2profile
$ sh startServer.sh servername

也可以把db2profile放到was启动脚本中首先执行。

如果只设置了LD_LIBRARY_PATH,LIBPATH两个环境变量,DB2会返回以下错误:

CLI0600E Invalid connection handle or connection is closed.
SQLSTATE S1000

对应于Oracle的Job包功能,DB2通过一个GUI工具-任务中心(task center)实现。使用任务中心前需要进行必要的工具设置,需要创建一些数据库对象,可以创建在已有的一个数据库中,也可以单独创建一个数据库。通过以下命令实现:

create catalog tools schema_name create new database db_name

此命令为编目工具创建一个名为db_name 的数据库,并指定了一个模式名。
注意:无法用using 子句指定一个codeset,系统会默认使用ISO8859-1字符集。


Quest Center for DB2带有数据库性能诊断功能,动态监视db内存,磁盘io, 表空间,负载等等。

DB2客户端的类型:

  • DB2运行时客户端 DB2 Runtime Client
  • DB2管理客户端 DB2 Administrator Client(包含运行时客户端的所有内容)
  • DB2应用程序开发客户端 DB2 Application Development Client(包含管理客户端的所有内容)
  • DB2瘦客户端 DB2 Thin Client
  • DB2 Relational Connect 联邦数据库,用于连接异种数据库。

参考资源

DB2 UDB V8.1 管理 学习笔记(三)

正文工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。强制断开已有连接,停止实例并删除。$ db2idrop -f instance_name 用于在UNIX下迁移实例。$ db2imigr instance_name 更新实例,用于实例获得一些新的产品选项或修订包的访问权。$ db2iupdt instance_name 获取当前所处的实例。$ db2 get instance 当更新实例级别或数据库级别的参数后,有些可以立即生效,有些需要重新启动实例才可生效。immediate 显式指明更改立即生效,deferred...

正文

工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。

强制断开已有连接,停止实例并删除。

$ db2idrop -f instance_name 

用于在UNIX下迁移实例。

$ db2imigr instance_name 

更新实例,用于实例获得一些新的产品选项或修订包的访问权。

$ db2iupdt instance_name 

获取当前所处的实例。

$ db2 get instance 

当更新实例级别或数据库级别的参数后,有些可以立即生效,有些需要重新启动实例才可生效。immediate 显式指明更改立即生效,deferred 显式指明更改在重起实例后生效。

当需要配置许多台客户机与DB2服务器的连接时,可以用配置助手将服务器的概要文件导出,然后在每个客户机使用配置助手导入概要文件。若客户端只安装了运行时客户端,则可以使用以下命令导入概要文件。

$ db2cfimp access_profile_name

疑问:是否应该由已配置好的一台客户机导出概要文件?

列出所有的数据库连接

$ db2 list applications 

终止指定的连接句柄,事务被中断并回滚。同时操作多个句柄可以用逗号分开,或者指定关键字 all。此命令只终止指定的连接,不会阻止新的应用连接到数据库。

$ db2 force application (2) 

创建数据库时可以指定排序方式:

collate using identity

系统模式集是和每个数据库一起创建的,并且它们被放置到 SYSCATSPACE 表空间中。

  • SYSIBM:基本系统目录,建议不要进行直接访问
  • SYSCAT:PUBLIC 被授予该模式的 SELECT 权限,对只读视图编目,这是获取目录信息的推荐方式
  • SYSSTAT:可更新的目录视图 - 影响优化器
  • SYSFUN:用户定义的函数

如果表中的现有行不满足约束,则不能定义该约束。可以关闭约束检查以加快大量数据的添加,但是该表处于检查暂挂(CHECK PENDING)状态。

在创建表时,可以使用选项来指定一个或多个表空间,表和索引将被放置到其中:

CREATE TABLE TEST (
column 1 definition, column 2 definition, ...
) IN <tablespace name> INDEX IN <index space name>

这条命令为您提供了一个选项:指定创建表和索引的位置。如果没有指定单独的索引表空间,那么将在表所在的同一表空间中创建索引。创建表之后,就没有机会在不同的表空间中创建索引了。创建索引要提前作规划!

CREATE <UNIQUE> INDEX <index name> ON <table name>
(
column 1 <ASC | DESC> ,
column 2 <ASC | DESC> ...
)

UNIQUE 属性告诉 DB2,索引必须强制所有插入值的唯一性。
如果结果集是以升序和降序两种方式排序的,ALLOW REVERSE SCANS 会告诉 DB2 在索引中包括附加的指针,以允许在记录中有效地进行正向和反向链接。

DB2 能够向正在创建的索引中添加另外的列。CREATE INDEX 命令允许用户指定那些不属于实际索引但因为性能原因而保存在索引记录中的列。

CREATE UNIQUE INDEX ON EMPLOYEE (EMPNO) INCLUDE (LASTNAME,FIRSTNAME)

对于索引中包含的列而言,索引必须是 UNIQUE 的。当创建索引时,另外的列被添加到索引值中。索引不使用这些值进行排序或确定唯一性,但可以在满足 SQL 查询时使用它们。例如,下列 SELECT 语句将不需要读取实际数据行:

SELECT LASTNAME, FIRSTNAME FROM EMPLOYEE WHERE EMPNO < '000300'

要在表上创建群集索引,将 CLUSTER 关键字附加到 CREATE INDEX 命令的末尾,例如:

CREATE INDEX DEPTS-IX ON EMPLOYEE(WORKDEPT) CLUSTER

使用下列通用规则来决定为表定义的索引的经典数量。索引数量取决于数据库的主要用途:
对于在线事务处理(OLTP)环境,创建一到两个索引。
对于混合查询和 OLTP 环境,创建两到五个索引。
对于只读查询环境,创建五个以上索引。

在Windows平台上的DB2的命令行模式下,或者在类Unix平台下,使用命令db2cc启动控制中心。

db2move提供了在数据库之间批量移动数据的能力,可以指定某个表,也可以指定整个数据库的表。

$ db2move dbname action

action 可以指定为:export, import或者load
使用 -l 参数指定lob对象存储的文件夹

执行增量备份要求设置数据库配置参数“trackmod”的值为“YES”
执行在线备份要求设置数据库配置参数“logretain”的值为“YES”,在线备份语法:

$ db2 backup db dbname online to path

当删除了das用户的home目录,未先drop掉das服务,则再执行dasdrop则不成功,提示:
db2admin 命令无法找到,原因是db2admin命令保存在das的home目录中。
可以删除干净das用户的home目录后,重起服务器解决此问题。

$ dasupdt dasName 升级das
$ db2iupdt instName 升级实例
$ db2licd end 停止许可证守护进程

在Linux系统安装DB2 V8.1后,db2fmcd进程会自动启动,即使不启动实例和DAS,

在中文Linux环境下安装了DB2数据库服务,并使用GBK代码页(codepage)创建了一个数据库,完成后可以正常连接操作,若更改操作系统代码页为英语,则使用“db2 connect”时会报错,连接时无法转换代码页。

参考资源

 

Linux 系统管理学习笔记(一)

Linux系统管理命令的一点拾零,这是第一部分,其余的笔记请到这里浏览。 正文 编辑/etc/hosts.allow 和/etc/hosts.deny,设置TCP内核级的访问控制。若需要允许/禁止所有地址对所有服务的访问,添加如下条目:all:all 若需要允许/禁止192.168.1.100对ssh服务的访问,添加如下条目:ssh:192.168.1.100 当两个文件中的策略发生冲突时,以hosts.allow中的条目优先。配置iptables防火墙,如果不具备娴熟的技巧,建议一定要在所配置主机的本地控制台上进行,不要远程配置,因为,一旦配置了一条与当前连接匹配的过滤规则,则会马上生效,并终止当前的连接,甚至某些规则会导致即使在本地主机上也无法登录,比如将"iptables -P INPUT -j DROP" 作为的一条过滤规则命令发布就会导致这种情况,此时,任何远程或者本地都无法登录主机,可以冷启动主机解决此问题,因为尚未发布iptables-save 命令来保存规则设置。inconfig interface [[-net|-host] address [parameters]]ipconfig...

Linux系统管理命令的一点拾零,这是第一部分,其余的笔记请到这里浏览

正文

编辑/etc/hosts.allow 和/etc/hosts.deny,设置TCP内核级的访问控制。
若需要允许/禁止所有地址对所有服务的访问,添加如下条目:

all:all

若需要允许/禁止192.168.1.100对ssh服务的访问,添加如下条目:

ssh:192.168.1.100

当两个文件中的策略发生冲突时,以hosts.allow中的条目优先。

配置iptables防火墙,如果不具备娴熟的技巧,建议一定要在所配置主机的本地控制台上进行,不要远程配置,因为,一旦配置了一条与当前连接匹配的过滤规则,则会马上生效,并终止当前的连接,甚至某些规则会导致即使在本地主机上也无法登录,比如将"iptables -P INPUT -j DROP" 作为的一条过滤规则命令发布就会导致这种情况,此时,任何远程或者本地都无法登录主机,可以冷启动主机解决此问题,因为尚未发布iptables-save 命令来保存规则设置。

inconfig interface [[-net|-host] address [parameters]]

ipconfig eth0 192.168.0.1
ipconfig eth1 203.99.9.9

promisc 参数用于把此以太接口置于“混乱”状态, -promisc 取消此状态。

netstat -r 显示路由信息
netstat -i 以IP地址格式显示
netstat -i 列出配置特性
netstat -a 列出内核中所有接口
netstat -t 仅列出TCP连接
netstat -u 仅列出UDP连接

/etc/host.conf bind 服务器的核心配置文件
/etc/resolv.conf bind 服务器的解析配置文件


DNS的数据库中包含三种类型的记录:

  1. A记录 将主机名映射为IP地址
  2. CNAME记录 将主机的别名和其正式主机名关联在一起,指向一条A记录
  3. SOA记录 表示Start of Authority,其中容纳服务器所属的区之普通信息。比如,它包含所有记录的默认TTL值。

主机名如果以“.“结尾,代表是绝对主机名,即一个完整的包含域名的规范主机名(如:www.domain.com.),否则是一个相对主机名,代表主机名与某一个域名相关联。

SOA记录中的特殊名“@”代表其自身的域名。如果希望解析domain.com 本身到某个IP地址,则使用“@”作为主机名即可。如果希望解析所有xxx.domain.com 到某个IP 地址(xxx可以是任何字母),则使用“*”作为主机名。


/etc/services文件定义了服务名到端口号的转换。

查看磁盘使用情况

$ df -kl 

把 *.tar.Z的文件包解压缩成.tar文件,

$ gunzip -dv filename.tar.Z 

再用tar 命令进行解包,其中,-v用于显示解包过程

$ tar -xvf filename.tar 

把目录打成一个tar包

$ tar -cvf newfile.tar directory

一次完成解压缩和解包.tar.gz 文件的命令

$ tar -zxvf filename.tar.gz

重新启动xinetd服务,用于修改xinetd配置文件后,不需重起主机而重新装载文件。 

# /etc/init.d/xinetd reload 

其他的参数:start, stop, restart, status...
此命令需要root权限执行。

以root的身份执行xinetd命令, 并不更改当前shell

$ su - root -c xinetd reload # 

也可以:

$ su - root -c '(cmd1;cmd2)'

解开 '.bz2' 文件

$ bzip2 -d *.tar.bz2

对于iso文件,linux可以采用mount命令读取,如:

$ mkdir /mnt/iso
$ mount -t iso9660 -o loop disc1.iso /mnt/iso
$ ls /mnt/iso

把一张光盘制作成iso文件(首先mount好光驱):

$ cp /mnt/cdrom disc1.iso

解压.zip文件到新的目录:

$ unzip -d newdir file.zip

查看文件或目录所占用的磁盘块多少,目前linux版本下每个磁盘块默认是1k:

$ du /tmp
$ du /tmp/log.txt

查看文件目录所占用的详细字节数:

$ du -ab /tmp
$ du -ab /tmp/log.txt

命令行下通过http协议下载文件:

$ wget http://www.download.com/file.exe

支持续传:

$ wget -c url

还有很多其他参数,设置cache、http用户认证和代理认证等。

rcp命令可以用于在linux主机间copy文件

列出系统中的所有服务,查看在各个系统启动级别的启动设置:

# chkconfig --list

更改服务启动设置(会修改所有系统启动级别的设置):

# chkconfig srvname on|off

仅修改特定级别的启动设置,n可以指定从1至5:

# chkconfig --level n srvname on|off

启动或者停止某个服务:

# service srvname start|stop

查看所有服务状态:

# service --status-all
查看某个服务状态:
# service srvname status

系统的syslogd服务会写日志文件/var/log/messages,一般其他应用程序的消息也会通过syslogd记录在此文件。
可是用如下命令监视:

$ tail -f /var/log/messages

参考资源

mail.png


标签订阅|Tag Subscription

If you use an RSS reader, you can subscribe to a feed of all future entries tagged 'study notes'. [What is this?]

Subscribe to feed Subscribe to feed

最近更新|Recent Entries

不定期更新|Handy Entries

其它标签|Other Tags