convmv
$ convmv -f 原文件名编码 -t 转换文件名编码 --notest 转换路径
$ convmv -f cp936 -t utf8 --notest .
2007年10月23日星期二
学习笔记:VIM-1 基本操作4
从崩溃中恢复
基本恢复
vim -r filename
恢复未命名文件
vim -r "" 需要进入原来的目录执行这个命令
vim -r 列出可用交换文件
使用指定交换文件
vim -r filename.swp
tips
单词替换
:%s/four/4/g
"%" 范围前缀表示在所有行中执行替换。最后的 "g" 标记表示替换行中的所有匹配点。
:%s/\/4/g 用 "\<" 来指定匹配单词开头,用 "\>" 来匹配单词结尾
:%s/\/4/gc 替换确认
有如下样式的一个名字列表:
Doe, John
Smith, Peter
你想把它改成:
John Doe
Peter Smith
这可以用一个命令完成:
:%s/\([^,]*\), \(.*\)/\2 \1/
"from" 部分是:\([^,]*\), \(.*\)
第一对 \( 和 \) 之间 [^,] 匹配除逗号外的任何东西 * 任意多次
第二对 \( 和 \) 之间 . 匹配任意字符 * 任意多次
在 "to" 部分,我们有 "\2" 和 "\1"。这些称为 "反向引用"。它们指向前面模式中的
\( 和 \) 间的部分。
以在替换部分使用多达 9 个反向引用。"\0" 表示整个匹配部分。
单词统计
g CTRL-G 统计的是整个文件的字数
要在 "g" 后面输入一个空格,这里只是方便阅读
选中你要计算字数的文本,然后输入 "g CTRL-G"
删除多余的空格
:%s/\s\+$//
% 指明范围
\s\+$ 这表示行末 ($) 前的一个或者多个 (\+) 空格 (\s)
匹配列表
:set is CTRL-D
q: 打开命令行窗口
执行shell命令
:!{command}
:[range]!{program} 经由 {program} 过滤文本
编辑一个目录
:edit .
查看当前目录
:pwd
gf 在当前目录下查找光标所在单词为文件名的文件
显示缓冲区列表
:ls
在多个缓冲区间切换
CTRL-^
编辑指定缓冲区
:buffer n n为缓冲区号
新窗口中打开一个缓冲区:
:sbuffer n
基本恢复
vim -r filename
恢复未命名文件
vim -r "" 需要进入原来的目录执行这个命令
vim -r 列出可用交换文件
使用指定交换文件
vim -r filename.swp
tips
单词替换
:%s/four/4/g
"%" 范围前缀表示在所有行中执行替换。最后的 "g" 标记表示替换行中的所有匹配点。
:%s/\
:%s/\
有如下样式的一个名字列表:
Doe, John
Smith, Peter
你想把它改成:
John Doe
Peter Smith
这可以用一个命令完成:
:%s/\([^,]*\), \(.*\)/\2 \1/
"from" 部分是:\([^,]*\), \(.*\)
第一对 \( 和 \) 之间 [^,] 匹配除逗号外的任何东西 * 任意多次
第二对 \( 和 \) 之间 . 匹配任意字符 * 任意多次
在 "to" 部分,我们有 "\2" 和 "\1"。这些称为 "反向引用"。它们指向前面模式中的
\( 和 \) 间的部分。
以在替换部分使用多达 9 个反向引用。"\0" 表示整个匹配部分。
单词统计
g CTRL-G 统计的是整个文件的字数
要在 "g" 后面输入一个空格,这里只是方便阅读
选中你要计算字数的文本,然后输入 "g CTRL-G"
删除多余的空格
:%s/\s\+$//
% 指明范围
\s\+$ 这表示行末 ($) 前的一个或者多个 (\+) 空格 (\s)
匹配列表
:set is CTRL-D
q: 打开命令行窗口
执行shell命令
:!{command}
:[range]!{program} 经由 {program} 过滤文本
编辑一个目录
:edit .
查看当前目录
:pwd
gf 在当前目录下查找光标所在单词为文件名的文件
显示缓冲区列表
:ls
在多个缓冲区间切换
CTRL-^
编辑指定缓冲区
:buffer n n为缓冲区号
新窗口中打开一个缓冲区:
:sbuffer n
学习笔记:VIM-1 基本操作3
分割窗口
分割当前窗口
:split
窗口间跳转
CTRL_W
关闭窗口
:close 避免最后一个窗口时退出vim
:only 关闭除当前窗口外的其他窗口
用另外一个文件分割窗口
:split filename
打开窗口编辑一个新文件
:new
退出所有窗口
:qall
保存所有窗口
:wall
显示文件差异
vimdiff filename1 filename2
作大修改
重复前一次修改
"."
替换
:[range]substitute/from/to/[flags]
[range] % 作用于全部行
substitute s 简写
[flags] g 全局 即对行中的所有匹配点起作用
[flags] c 替换前确认
命令范围
范围总是放在一个命令前面
:1,5s/this/that/g 即在1到5 行上执行替换
. 表示当前行
:.write filename 将当前行写入一个文件
文件的第一行行号为1, 最后一行为$ 即 % 为 1,$ 的缩写
向前查找
?xxxx?
向后查找
/xxxx/
读取文件的一部分
:read filename
保存部分行
:.,$write filename
改变大小写
gUw 当前单词大写
guw 当前单词小写
g~ 大小写切换
外部程序
:shell
!command
刷新屏幕
CTRL-L
分割当前窗口
:split
窗口间跳转
CTRL_W
关闭窗口
:close 避免最后一个窗口时退出vim
:only 关闭除当前窗口外的其他窗口
用另外一个文件分割窗口
:split filename
打开窗口编辑一个新文件
:new
退出所有窗口
:qall
保存所有窗口
:wall
显示文件差异
vimdiff filename1 filename2
作大修改
重复前一次修改
"."
替换
:[range]substitute/from/to/[flags]
[range] % 作用于全部行
substitute s 简写
[flags] g 全局 即对行中的所有匹配点起作用
[flags] c 替换前确认
命令范围
范围总是放在一个命令前面
:1,5s/this/that/g 即在1到5 行上执行替换
. 表示当前行
:.write filename 将当前行写入一个文件
文件的第一行行号为1, 最后一行为$ 即 % 为 1,$ 的缩写
向前查找
?xxxx?
向后查找
/xxxx/
读取文件的一部分
:read filename
保存部分行
:.,$write filename
改变大小写
gUw 当前单词大写
guw 当前单词小写
g~ 大小写切换
外部程序
:shell
!command
刷新屏幕
CTRL-L
学习笔记:VIM-1 基本操作2
编辑时不能输入中文
:set encoding=cp936
菜单显示乱码
:so $VIMRUNTIME/delmenu.vim
:so $VIMRUNTIME/menu.vim
建议字体: Bitstream Vera Sans Mono
:set guifont ?
:set encoding=cp936
菜单显示乱码
:so $VIMRUNTIME/delmenu.vim
:so $VIMRUNTIME/menu.vim
建议字体: Bitstream Vera Sans Mono
:set guifont ?
usr_04 拷贝文本(y)
ynw 拷贝n个单词
p 在光标后粘贴
yy拷贝一行
ynw 拷贝n个单词
p 在光标后粘贴
yy拷贝一行
拷贝一行到剪贴板中:
"*yy (一个双引号加一个星号)。
"*yy (一个双引号加一个星号)。
要粘贴剪贴板内容
"*p
临时设置语法高亮
:syntax enable
临时清除语法高亮
:syntax clear
临时设置语法高亮
:syntax enable
临时清除语法高亮
:syntax clear
编辑多个文件
编辑另一个文件
:edit foo.txt //Vim 会关闭当前文件并打开foo.txt
查看错误信息
:help 错误标号
在已经打开的多个文件见切换
CTRL-^
编辑另一个文件
:edit foo.txt //Vim 会关闭当前文件并打开foo.txt
查看错误信息
:help 错误标号
在已经打开的多个文件见切换
CTRL-^
生成备份文件
:set backup 即~
定义备份文件后缀
:set backupext=.bak
保留原始文件
:set patchmode=.orig
以只读模式打开文件
vim -M filename
取消只读模式
:set write
文件另存
:saveas filename
:set backup 即~
定义备份文件后缀
:set backupext=.bak
保留原始文件
:set patchmode=.orig
以只读模式打开文件
vim -M filename
取消只读模式
:set write
文件另存
:saveas filename
wget 使用技巧
wget 是一个命令行的下载工具。对于我们这些 Linux 用户来说,几乎每天都在使用它。下面为大家介绍几个有用的 wget 小技巧,可以让你更加高效而灵活的使用 wget。
$ wget -r -np -nd http://example.com/packages/这条命令可以下载 http://example.com 网站上 packages 目录中的所有文件。其中,
-np的作用是不遍历父目录,-nd表示不在本机重新创建目录结构。$ wget -r -np -nd --accept=iso http://example.com/centos-5/i386/与上一条命令相似,但多加了一个
--accept=iso选项,这指示 wget 仅下载 i386 目录中所有扩展名为 iso 的文件。你也可以指定多个扩展名,只需用逗号分隔即可。$ wget -i filename.txt此命令常用于批量下载的情形,把所有需要下载文件的地址放到 filename.txt 中,然后 wget 就会自动为你下载所有文件了。
$ wget -c http://example.com/really-big-file.iso这里所指定的
-c选项的作用为断点续传。$ wget -m -k (-H) http://www.example.com/该命令可用来镜像一个网站,wget 将对链接进行转换。如果网站中的图像是放在另外的站点,那么可以使用
-H选项。
原文地址 http://linuxtoy.org/archives/wget-tips.html
Debian 下时区的设定
# dpkg-reconfig tzdata
或直接修改配置文件/etc/timezone,内容为所要设定的时区
tonybox:~# cat /etc/timezone
Asia/Shanghai
tonybox:~#
然后修改 /etc/default/rcS文件, 设定是否使用UTC, 如果要令BIOS的时间为本地时间, 则:
UTC=no
或直接修改配置文件/etc/timezone,内容为所要设定的时区
tonybox:~# cat /etc/timezone
Asia/Shanghai
tonybox:~#
然后修改 /etc/default/rcS文件, 设定是否使用UTC, 如果要令BIOS的时间为本地时间, 则:
UTC=no
2007年9月22日星期六
学习笔记:VIM-1 基本操作
查看配置文件列表
:scriptnames
删除两行间的换行符
J
重做
CTRL-R
撤销
u
行撤销
U
括号匹配
%
移动到指定行
nG(G会把光标移到文件末)
设置行号
:set number
关闭行号
:set nonumber
查看配置文件列表
:scriptnames
删除两行间的换行符
J
重做
CTRL-R
撤销
u
行撤销
U
括号匹配
%
移动到指定行
nG(G会把光标移到文件末)
设置行号
:set number
关闭行号
:set nonumber
滚屏
CTRL-U CTRL-D
CTRL-F CTRL-B
查找
/正向 ?反向
n/N 下一个/上一个
忽略大小写
:set ignorecase
\> 表示单词末尾/\<单词开头 比如/\<the\> 将会查找单词 the
高亮显示匹配
:set hlsearch
可视模式
字符选择
v 例如vll
行选择
V 例如Vjj
拷贝
y 复制
p 粘贴
:scriptnames
删除两行间的换行符
J
重做
CTRL-R
撤销
u
行撤销
U
括号匹配
%
移动到指定行
nG(G会把光标移到文件末)
设置行号
:set number
关闭行号
:set nonumber
查看配置文件列表
:scriptnames
删除两行间的换行符
J
重做
CTRL-R
撤销
u
行撤销
U
括号匹配
%
移动到指定行
nG(G会把光标移到文件末)
设置行号
:set number
关闭行号
:set nonumber
滚屏
CTRL-U CTRL-D
CTRL-F CTRL-B
查找
/正向 ?反向
n/N 下一个/上一个
忽略大小写
:set ignorecase
\> 表示单词末尾/\<单词开头 比如/\<the\> 将会查找单词 the
高亮显示匹配
:set hlsearch
可视模式
字符选择
v 例如vll
行选择
V 例如Vjj
拷贝
y 复制
p 粘贴
2007年9月21日星期五
安装subversion
apt-get update
安装apache2
apt-get install apache2
安装subversion
apt-get install libapache2-svn subversion
创建目录
mkdir /home/svn
创建项目
svnadmin create /home/svn/foo
由于要用apache2来提供服务, 更改目录权限
chown www-data.www-data /home/svn/foo -R
配置apache2
/etc/apache2/mods-available/dav_svn.conf
//表示svn仓库位于/svn虚拟目录下面,意思是版本库的URL是http://MyServer/svn/
DAV svn //表示dav启用svn支持
SVNParentPath /home/svn //表示使用SVNParent方式,并且仓库的物理路径为/home/svn
AuthType Basic //激活基本认证,就是用户名/密码
AuthName "Subversion Repository" //用来说明何时弹出要求用户输入认证信息的认证对话框
AuthUserFile /etc/apache2/dav_svn.passwd //表示用户认证文件是/etc/apache2/dav_svn.passwd
AuthzSVNAccessFile /etc/apache2/dav_svn.authz ////表示用户权限文件是 /etc/apache2/dav_svn.authz
#
Require valid-user //指定只有输入了正确的用户/密码的用户可以访问URL
#
如果你希望所有人可以读你的版本库,但是只有特定用户可以写,你可以修改下面几行
Require valid-user
to
Require valid-user
配置访问权限
/etc/apache2/dav_svn.authz(/etc/apache2/mods-available/dav_svn.conf指定的)
[foo:/]
* =
tony = rw
然后在添加用户到 /etc/apache2/dav_svn.passwd
htpasswd -c /etc/apache2/dav_svn.passwd tony
访问测试
http://localhost:81/svn/foo
现在因为我们还没有往svn是添加任何东西,所以我们看到的是"Revision 0: /"
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
http://man.chinaunix.net/linux/debian/debian_learning/ch09s14.html
http://mattl.co.uk/apache2subversiondebianhowto.html
http://www.howtoforge.com/apache_subversion_repository_p2
http://www.howtoforge.com/debian_subversion_websvn
生成私钥
openssl genrsa 1024 > gzjs.gov.cn.key
生成证书签署申请CSR
openssl req -new -key gzjs.gov.cn.key > gzjs.gov.cn.csr
用自己的私钥签署申请,生成证书
openssl req -x509 -key gzjs.gov.cn.key -in gzjs.gov.cn.csr > gzjs.gov.cn.crt
添加以下内容到站点配置文件
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/gzjs.gov.cn.crt
SSLCertificateKeyFile /etc/apache2/ssl/gzjs.gov.cn.key
添加一下内容
SSLRequireSSL
到/etc/apache2/mods-available/dav_svn.conf文件
重启
http://wiki.debian.org.hk/w/Generate_SSL_cert
安装apache2
apt-get install apache2
安装subversion
apt-get install libapache2-svn subversion
创建目录
mkdir /home/svn
创建项目
svnadmin create /home/svn/foo
由于要用apache2来提供服务, 更改目录权限
chown www-data.www-data /home/svn/foo -R
配置apache2
/etc/apache2/mods-available/dav_svn.conf
DAV svn //表示dav启用svn支持
SVNParentPath /home/svn //表示使用SVNParent方式,并且仓库的物理路径为/home/svn
AuthType Basic //激活基本认证,就是用户名/密码
AuthName "Subversion Repository" //用来说明何时弹出要求用户输入认证信息的认证对话框
AuthUserFile /etc/apache2/dav_svn.passwd //表示用户认证文件是/etc/apache2/dav_svn.passwd
AuthzSVNAccessFile /etc/apache2/dav_svn.authz ////表示用户权限文件是 /etc/apache2/dav_svn.authz
#
Require valid-user //指定只有输入了正确的用户/密码的用户可以访问URL
#
如果你希望所有人可以读你的版本库,但是只有特定用户可以写,你可以修改下面几行
Require valid-user
to
Require valid-user
配置访问权限
/etc/apache2/dav_svn.authz(/etc/apache2/mods-available/dav_svn.conf指定的)
[foo:/]
* =
tony = rw
然后在添加用户到 /etc/apache2/dav_svn.passwd
htpasswd -c /etc/apache2/dav_svn.passwd tony
访问测试
http://localhost:81/svn/foo
现在因为我们还没有往svn是添加任何东西,所以我们看到的是"Revision 0: /"
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
http://man.chinaunix.net/linux/debian/debian_learning/ch09s14.html
http://mattl.co.uk/apache2subversiondebianhowto.html
http://www.howtoforge.com/apache_subversion_repository_p2
http://www.howtoforge.com/debian_subversion_websvn
生成私钥
openssl genrsa 1024 > gzjs.gov.cn.key
生成证书签署申请CSR
openssl req -new -key gzjs.gov.cn.key > gzjs.gov.cn.csr
用自己的私钥签署申请,生成证书
openssl req -x509 -key gzjs.gov.cn.key -in gzjs.gov.cn.csr > gzjs.gov.cn.crt
添加以下内容到站点配置文件
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/gzjs.gov.cn.crt
SSLCertificateKeyFile /etc/apache2/ssl/gzjs.gov.cn.key
添加一下内容
SSLRequireSSL
到/etc/apache2/mods-available/dav_svn.conf文件
重启
http://wiki.debian.org.hk/w/Generate_SSL_cert
2007年9月19日星期三
ab 压力测试
20490 tomcat55 18 0 303m 90m 5900 S 109 4.5 1:27.28 jsvc
# ab -c 1000 -n 100000 http://127.0.0.1:8080/gzjsgov/index.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Finished 100000 requests
Server Software: Apache-Coyote/1.1
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /gzjsgov/index.html
Document Length: 7760 bytes
Concurrency Level: 1000
Time taken for tests: 49.334775 seconds
Complete requests: 100000
Failed requests: 12
(Connect: 0, Length: 11, Exceptions: 1)
Write errors: 0
Total transferred: 799601930 bytes
HTML transferred: 777070880 bytes
Requests per second: 2026.97 [#/sec] (mean)
Time per request: 493.348 [ms] (mean)
Time per request: 0.493 [ms] (mean, across all concurrent requests)
Transfer rate: 15827.80 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 376 1235.8 42 21067
Processing: 12 97 331.6 55 7291
Waiting: 0 84 326.1 47 7257
Total: 30 473 1352.8 109 21153
Percentage of the requests served within a certain time (ms)
50% 109
66% 133
75% 148
80% 160
90% 223
95% 3129
98% 3768
99% 9044
100% 21153 (longest request)
# ab -c 1000 -n 100000 http://127.0.0.1:8080/gzjsgov/index.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Finished 100000 requests
Server Software: Apache-Coyote/1.1
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /gzjsgov/index.html
Document Length: 7760 bytes
Concurrency Level: 1000
Time taken for tests: 49.334775 seconds
Complete requests: 100000
Failed requests: 12
(Connect: 0, Length: 11, Exceptions: 1)
Write errors: 0
Total transferred: 799601930 bytes
HTML transferred: 777070880 bytes
Requests per second: 2026.97 [#/sec] (mean)
Time per request: 493.348 [ms] (mean)
Time per request: 0.493 [ms] (mean, across all concurrent requests)
Transfer rate: 15827.80 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 376 1235.8 42 21067
Processing: 12 97 331.6 55 7291
Waiting: 0 84 326.1 47 7257
Total: 30 473 1352.8 109 21153
Percentage of the requests served within a certain time (ms)
50% 109
66% 133
75% 148
80% 160
90% 223
95% 3129
98% 3768
99% 9044
100% 21153 (longest request)
2007年9月16日星期日
2007年7月12日星期四
sudo 介绍
sudoers这个文件是由一个选择性的主机别名(host alias)节区,一个选择性的指令别名(command alias)节区以及使用者说明(user specification)节区所组成的。所有的指令别名或主机别名必须需以自己的关键字作为开始(Host_Alias/Cmnd_Alias)。
使用者说明节区格式:
使用者 接取群组 [: 接取群组 ]...
接取群组 ::= 主机象征 = [op]指令象征 [,[op]指令象征]...
主机象征 ::= 一个小写的主机名称或主机别名。
指令象征 ::= 一个指令或指令别名。
op ::= 逻辑的 '!' 否定运算元。
主机别名节区格式:
Host_Alias 主机别名 = 主机列表
Host_Alias ::= 这是一个关键字。
主机别名 ::= 一个大写的别名。
主机列表 ::= 以逗号间隔的一些主机名称。
指令别名节区格式:
Cmnd_Alias 指令别名 = 指令列表
Cmnd_Alias ::= 这是一个关键字。
指令别名 ::= 一个大写的别名。
指令列表 ::= 以逗号间隔的一些指令。
保留的别名“ALL”在“{Host,Cmnd}_Alias”里都可以使用。不要用“ALL”来定义一个别名,这个别名无效。注意到“ALL”暗示全部的主机和指令。
可以使用这个语法从整个范围中减掉一些项目:
user host=ALL,!ALIAS1,!/etc/halt...
使用者说明节区格式:
使用者 接取群组 [: 接取群组 ]...
接取群组 ::= 主机象征 = [op]指令象征 [,[op]指令象征]...
主机象征 ::= 一个小写的主机名称或主机别名。
指令象征 ::= 一个指令或指令别名。
op ::= 逻辑的 '!' 否定运算元。
主机别名节区格式:
Host_Alias 主机别名 = 主机列表
Host_Alias ::= 这是一个关键字。
主机别名 ::= 一个大写的别名。
主机列表 ::= 以逗号间隔的一些主机名称。
指令别名节区格式:
Cmnd_Alias 指令别名 = 指令列表
Cmnd_Alias ::= 这是一个关键字。
指令别名 ::= 一个大写的别名。
指令列表 ::= 以逗号间隔的一些指令。
保留的别名“ALL”在“{Host,Cmnd}_Alias”里都可以使用。不要用“ALL”来定义一个别名,这个别名无效。注意到“ALL”暗示全部的主机和指令。
可以使用这个语法从整个范围中减掉一些项目:
user host=ALL,!ALIAS1,!/etc/halt...
2007年7月3日星期二
VI常用命令
- 命令模式
- 移动光标
- h 或 向左方向键(←) → 光标向左移动一个字元
- j 或 向下方向鍵(↓) → 光标向下移动一个字元
- k 或 向上方向鍵(↑) → 光标向上移动一个字元
- l 或 向右方向鍵(→) → 光标向右移动一个字元
- [Ctrl] + [f] → 屏幕『向下』移动一页,相当于 [Page Down]按键
- [Ctrl] + [ b ] → 屏幕『向上』移动一页,相当于 [Page Up] 按键
- n
→ n 表示『数字』。按下数字后再按空白鍵,光标会向右移动这一行的 n 个字元 - 0 → 数字『 0 』:移动到这一行的最前面字元处
- $ → 移动到这一行的最后面字元处
- G → 移动到这个文件的最后一行
- nG → n 为数字。移动到这个文件的第 n 行(可配合 :set nu)
- gg → 移动到这个文件的第一行,相当于 1G
- n
→ n 为数字。光标向下移动 n 行
- h 或 向左方向键(←) → 光标向左移动一个字元
- 查找与替换
- /word → 向光标之下查找一个名称为 word 的字符串。如想查找 eric4ever 字符串,输入 /eric4ever 即可
- ?word → 向光标之上查找一个名称为 word 的字符串
- n → 『重复前一个查找的动作』
- N → 与 n 刚好相反,为『反向』进行前一个查找动作
- :n1,n2s/word1/word2/g → n1 与 n2 均为数字。在第 n1 与 n2 行之间查找 word1 字符串,并将该字符串替换为 word2。如:在 1 到 9 行之间查找 eric4ever 并替换为 ERIC4EVER 则:『:1,9s/eric4ever/ERIC4EVER/g』
- :1,$s/word1/word2/g → 从第一行到最后一行查找 word1 字符串,并将该字符串替换为 word2
- :1,$s/word1/word2/gc → 从第一行到最后一行查找 word1 字符串,并将该字符窗替换为 word2,替换前显示提示对话框是否确认替换
- /word → 向光标之下查找一个名称为 word 的字符串。如想查找 eric4ever 字符串,输入 /eric4ever 即可
- 删除、复制与粘贴
- x, X → 在一行字当中,x 为向后刪除一个字元 (相当于 [del] 按键), X 为向前刪除一个字元(相当于 [backspace] 按键)
- dd → 刪除光标所在的那一整列
- ndd → n 为数字。刪除光标所在的向下 n 列
- yy → 复制光标所在的那一行
- nyy → n 为数字。复制光标所在的向下 n 列
- p, P → p 为将已复制的内容粘贴在光标下一行上,P 则为粘贴在光标的上一行
- u → 还原前一个动作
- [Ctrl]+r → 重做上一个动作
- . → 小数点,意思是重复前一个动作
- x, X → 在一行字当中,x 为向后刪除一个字元 (相当于 [del] 按键), X 为向前刪除一个字元(相当于 [backspace] 按键)
- 移动光标
- 编辑模式
- i, I → 插入:在目前的光标所在处插入输入的文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一個非空白字元处开始插入』
- a, A → a 为『从目前光标所在的下一个字元处开始插入』, A 为『从光标所在行的最后一个字元处开始插入』
- o, O → o 为『在目前光标所在的下一行处插入新的一行』, O 为『在目前光标所在处的上一行插入新的一行』
- r, R → r 为『取代光标所在的那一个字元』, R 为『一直取代光标所在的文字,直到按下 ESC 为止』
- Esc → 退出编辑模式,回到一般模式中
- i, I → 插入:在目前的光标所在处插入输入的文字,已存在的文字会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一個非空白字元处开始插入』
- 末行指令模式
- :w → 将编辑的文件写入到硬盘上
- :q → 退出 vi
- :wq → 保存后退出,若为 :wq! 则为强制保存为退出
- :set nu → 显示行号
- :set nonu → 取消显示行号
- :w → 将编辑的文件写入到硬盘上
2007年6月27日星期三
linux 下oracle10g 的安装
Installing Oracle 10g R2 on Ubuntu Edgy
- Login to ubuntu from your usual administrative account which has sudo access
- Make sure you have enough ram, swap space and disk space as per oracle requirements.
- Install the required packages (first make sure ‘universe’ is enabled in your sources.list):
- sudo apt-get install build-essential libaio rpm lesstif2-dev alien
- Create the users and groups oracle needs:
- sudo groupadd oinstall
- sudo groupadd dba
- sudo groupadd nobody
- sudo useradd -g oinstall -G dba,nobody -d /opt/oracle -s /bin/bash oracle
- Set oracle user’s password
- sudo passwd oracle
- Create the directory for the software installation and assign ownership to oracle:oinstall
- sudo mkdir /opt/oracle
- sudo chown -R oracle:oinstall /opt/oracle
- sudo chmod -R 775 /opt/oracle
- In another console, login as oracle to make sure it works fine, then logout.
- Append user oracle’s .bashrc with PATH and ORACLE:BASE,HOME and SID information
- sudo vi /opt/oracle/.bashrc
- export ORACLE_BASE=/opt/oracle
- export ORACLE_HOME=$ORACLE_BASE/product/10gR2
- export ORACLE_SID=orcl
- export PATH=$PATH:$ORACLE_HOME/bin
- Make sure the correct kernel parmeters are appended to /etc/sysctl.conf
- kernel.shmall = 2097152
- kernel.shmmax = 2147483648
- kernel.shmmni = 4096
- kernel.sem = 250 32000 100 128
- net.core.rmem_default = 262144
- net.core.rmem_max = 262144
- net.core.wmem_default = 262144
- net.core.wmem_max = 262144
- fs.file-max = 65536
- net.ipv4.ip_local_port_range = 1024 65000
- Set the kernel parameters or reboot
- /sbin/sysctl -p
- Set /etc/security/limits.conf
- * soft nproc 2047
- * hard nproc 16384
- * soft nofile 1024
- * hard nofile 65536
- Create symbolic links and camoflage Kubuntu to look more like an enterprise rpm based distro because the oracle installer is expecting rhel, sles or asianux based distros.
- sudo ln -s /usr/bin/awk /bin/awk
- sudo ln -s /usr/bin/rpm /bin/rpm
- sudo ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
- sudo ln -s /usr/bin/basename /bin/basename
- Mount the Oracle10g CD and run the installer
- /runInstaller -ignoreSysPrereqs
- Installation will be uneventful provided above steps are followed
- Enable the oracle user to dbshut, dbstart and lsnrctl start
- sudo vi /etc/oratab and change :N to :Y
All Done!
Oracle 10g Enterprise / Standard Edition on Ubuntu 5.10 Breezy
2007年6月26日星期二
/etc/init.d/oracle
oracle/product/10.2.0/db_1/bin/dbstart
ORACLE_HOME_LISTNER=/home/oracle/oracle/product/10.2.0/db_1
/etc/oratab
orcl:/home/oracle/oracle/product/10.2.0/db_1:Y
.bashrc
ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_1
ORACLE_SID=orcl
#ORACLE_BASE=~/oracle/product
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export PATH
export ORACLE_SID
/etc/init.d/oracle
#!/bin/bash
#
# /etc/init.d/dbora
#
# Startup script for Oracle databases
export ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_1/
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
case "$1" in
start)
echo -n "Starting Oracle: "
su oracle -c $ORACLE_HOME/bin/dbstart
touch /var/lock/oracle
su oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"
echo "OK"
;;
stop)
echo -n "Shutdown Oracle: "
su oracle -c $ORACLE_HOME/bin/dbshut
rm -f /var/lock/oracle
echo "OK"
;;
*)
echo "Usage: 'basename $0' start|stop"
exit 1
esac
exit 0
ORACLE_HOME_LISTNER=/home/oracle/oracle/product/10.2.0/db_1
/etc/oratab
orcl:/home/oracle/oracle/product/10.2.0/db_1:Y
.bashrc
ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_1
ORACLE_SID=orcl
#ORACLE_BASE=~/oracle/product
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export PATH
export ORACLE_SID
/etc/init.d/oracle
#!/bin/bash
#
# /etc/init.d/dbora
#
# Startup script for Oracle databases
export ORACLE_HOME=/home/oracle/oracle/product/10.2.0/db_1/
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
case "$1" in
start)
echo -n "Starting Oracle: "
su oracle -c $ORACLE_HOME/bin/dbstart
touch /var/lock/oracle
su oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"
echo "OK"
;;
stop)
echo -n "Shutdown Oracle: "
su oracle -c $ORACLE_HOME/bin/dbshut
rm -f /var/lock/oracle
echo "OK"
;;
*)
echo "Usage: 'basename $0' start|stop"
exit 1
esac
exit 0
订阅:
博文 (Atom)
