vi(Visual)是以视觉为导向的全屏幕编辑器。
共分为三种方式(mode):
command方式:
任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入都引起立即反映
insert方式:
任何输入的数据都置于编辑寄存器。在command方式下输入(I,a,A等),可进入insert方式, insert方式下按ESC,可跳回command方式。
escape方式:
以“:”或者“/”为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。
-------------------------------------------:mrgreen:
进入vi(在系统提示符下面输入以下指令):
vi 进入vi而不读入任何文件
vi filename 进入vi并读入指定名称的文件(新、旧文件均可)。
vi +n filename 进入vi并且由文件的第几行开始。
vi +filename 进入vi并且由文件的最后一行开始。
vi + /word filename 进入vi并且由文件的word这个字开始。
vi filename(s) 进入vi并且将各指定文件列入名单内,第一个文件先读入。
vedit 进入vi并且在输入方式时会在状态行显示“INSERT MODE”。
编辑数个文件(利用vi filename(s))进入vi后)
:args 显示编辑名单中的各个文件名
:n 读入编辑名单中的下一个文件
:rew 读入编辑名单中的第一个文件
:e# 读入编辑名单内的前一个文件
:e file 读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则 应先以: w 存档。
:e! file 强迫读入另一个文件进入vi,原文件不作存档动作。
<<<存储及退出vi>>>
:w filename 存入指定文件,但未退出vi(若未指定文件名则为当前工作的文件名)。
:wq 或者 :x或者zz 存文件,并且退出vi.
:q 不作任何修改并退出vi。
:q! 放弃任何修改并退出vi。
:!command 暂时退出vi并执行shell指令,执行完毕后再回到vi。
:sh 暂时退出vi到系统下,结束时按Ctrl + d则回到vi。
<<<加数据指令>>>
i 在光标位置开始插入字符,结束时候按ESC键。
I 在光标所在行的最前面开始加字,结束时按ESC键。
a 在光标位置后开始加字,结束时按ESC键。
A 在光标所在行的最后面开始加字,结束时按ESC键。
o 在光标下加一空白行并开始加字,结束时按ESC键。
O 在光标上加一空白行并开始加字,结束时按ESC键。
!command 执行shell指令,并把结果加在光标所在行的下一行。
<<<删除指令>>>
nx 删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符)
nX 删除由光标位置起始的n个字符(不含光标位置)。
ndw 删除光标位置其实的n个字符组(word)。
d0 将行的开始到光标位置的字符全部删除。
d$ 或D 将光标位置起始到行尾的字符全部删除。
ndd 将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。
:start,endd 删除文件的第start到end行。
<<<关标移动>>>
0 移到一行的开始
$ 移到一行的最后
[ 移到文件开始位置
] 移到文件结束位置
nh 往左移n位
nl或者spacebar 往右移n位
nk 向上移n行
n+ 向上移n行,光标在该行的起始
ni 向下移n行
n- 向下移n行,光标在该行的起始
H 移到屏幕的左上角
M 移到屏幕的中间行开头
L 移到屏幕的最后一行
G 移到文件的最后一行
nG或者:n 移到文件的第n行
nw 右移n个字组,标点符号属于字组
nW 右移n个字组,标点符号不属于字组
nb 左移n个字组,标点符号属于字组
nB 左移n个字组,标点符号不属于字组
Ctrl + u 屏幕上卷半个菜单
Ctrl + d 屏幕下卷半个菜单
Ctrl + b 屏幕上卷一个菜单
Ctrl + F 屏幕下卷一个菜单
<<<修改指令>>>
r 修改光标文件的字符
R 从光标位置开始修改,结束时按ESC键
new 更改n组字符,结束时按ESC键
ncc 从光标所在位置开始更改n行,结束时按ESC键
<<<重排各行长度>>>
i 并按Enter将该行由光标所在处断开,并进入insert方式
J 把下一行的数据连接到本行之后
<<<寻找指令>>>
/text 从光标位置往下找字串text
?text 从光标位置往上找字串text
n 继续找下一个字串(在输入上面的寻找指令之后使用)
<<<寻找并且取代指令>>>
:getxt1/s/ /text2/options 将各行的text1替换为text2
option=g表示文件中所有的text1均被取代,若未输入任何option,则只有各行中的第一个出现的text1被取代option=go 在屏幕显示各取代的行
option=gc 在每个字串取代之前要求
<<<确认>>>
Start,endgtext1/s/ / text2/options 同上,只寻找并取代第start~end行。
或:Start,ends/text1/text2/options
<<<复制及移动文件>>>
:first,last co dest 将first 到last行的数据复制到目标行(dest)下面
:Start,end m dest 将start 到 end行的数据移动到目标行(dest)下。
:r filename 将指定文件的内容读入光标所在行下。
nY 将光标所在位置开始的n行数据暂存
p 复制暂存数据在光标的下一行
P 复制暂存数据在光标的上一行
<<<其他命令>>>
. 重复前一指令
u 取消前一指令
Ctrl + l 刷新屏幕显示
:set number 显示文件的行号,但不会存文件
:set nonumber 解除行号显示
:set ai 设置每行起始位置(以光标当前位置为起始)
:set noai 取消行起始位置设定
:f 或
1,查询当前目录下的文件名为gaoyu.sql的文件:
find . -name "gaoyu.sql" -print
2,查询/etc下文件名为passwd开头的文件:
find /etc -name "passwd*“ -print
同事在 Linux 服务器上遇到点小问题,我也上去折腾半天。这还是第一次注意到 Linux 这个多年来就存在的特性:OOM Killer 。说白了 OOM Killer 就是一层保护机制,用于避免 Linux 在内存不足的时候不至于出太严重的问题,把无关紧要的进程杀掉,有些壮士断腕的意思。
先要学习点老知识,在 32 位CPU 架构下寻址是有限制的。Linux 内核定义了三个区域:
# DMA: 0x00000000 - 0x00999999 (0 - 16 MB)
# LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB
# HighMem: 0x038000000 - <硬件特定>
LowMem 区 (也叫 NORMAL ZONE ) 一共 880 MB,而且不能改变(除非用 hugemem 内核)。对于高负载的系统,就可能因为 LowMem 利用不好而引发 OOM Killer 。一个可能原因是 LowFree 太少了,另外一个原因是 LowMem 里都是碎片,请求不到连续的内存区域【根据我遇到的一个案例,一个猜想是 有些应用一次性请求比较大的内存,恰恰又是 880M 之内的,空闲的(LowFree)不够大,就会触发 OOM Killer 出来干活】。
检查当前 LowFree 的值:
# cat /proc/meminfo grep LowFree
检查LowMem内存碎片:
# cat /proc/buddyinfo
上面这条命令要在 2.6 Kernel 环境下有效。据说使用 SysRq 的方式更好,不过 Hang 的时候再用吧。参见 Metalink Note:228203.1 。
根据一些文档描述,OOM Killer 在 2.4 与 2.6 上表现是不一样的。2.4 的版本中是把新进来(新申请内存)的进程杀掉。而 2.6 上是杀掉占用内存最厉害的进程(这是很危险的,很容易导致系统应用瘫痪)。
对于 RHEL 4 ,新增了一个参数: vm.lower_zone_protection 。这个参数默认的单位为 MB,默认 0 的时候,LowMem 为 16MB。建议设置 vm.lower_zone_protection = 200 甚至更大以避免 LowMem 区域的碎片,是绝对能解决这个问题的(这参数就是解决这个问题出来的)。
而对于 RHEL 3 (Kernel 2.4) 似乎没什么好办法,一个是用 Hugemem 内核(天知道会不会引入新的毛病),一个是升级到 2.4.21-47 并且使用新的核心参数 vm.vm-defragment 控制碎片的数量。再就是使用 RHEL 4 (Kernel 2.6),这又绕回去了。说白了,如果遇到 OOM Killer ,基本上是低版本 Kernel 设计上有点缺陷。
其它,如果去查询 RedHat 的 Bug 库,会发现不少 Kernel 版本也有 Bug 的。尤其在使用 NFS 的场景。
Tip: OOM Killer 的关闭与激活方式:
# echo "0" > /proc/sys/vm/oom-kill
# echo "1" > /proc/sys/vm/oom-kill
更多参考信息:
1) OOM killer "Out of Memory: Killed process" SOLUTIONS / SUMMARY【对我遇到的案例没鸟用】
2) Metalink Notes : Linux Kernel Lowmem Pressure Issues and Kernel Structures
Respite from the OOM killer
csh里用$0得到脚本名字
basename是去除目录剩下的名字。
$ basename /home/gsm/adcfilter/11Nov/ctgen/run/CTgen.cmd
CTgen.cmd
视频下载地址:点击
第一步:软件下载
到www.vmware.com中下载vmware server
注册码1: 98XY4-54VA4-4216V-4PDZ6
注册码2: WH0M5-XW50J-WA4FU-4MTZ3
到www.centos.org中下载centos45 DVD版
下载xmanager 2.0
注册码:071101-156031-000078
第二步:安装centos 45
新建一个LINUX虚拟机,将下载的LINUX安装ISO文件放入到虚拟机的光驱中,从光驱中启动虚拟机进行安装。
选择SERVER版,手工分区
装包时选:
1 Desktop Environments
选: GNOME Desktop Environment和X windows
2 Application 中全不选
3 Developmnet
中选两个:Development Tools和Legacy Software Development
4 Server
中选:Ftp和Server Configuration Tools和windows file server
5 system
中选2个:Administration Tools和System Tools
第三步:虚拟机和主机的时间同步
安装 VMware 工具。
在 VMware 控制台上,以 root 用户身份登录。
单击 VM,然后选择 Install VMware Tools,单击 Install。
双击桌面上的 CDrom 中的VMware Tools 图标。
cdrom:双击 VMwareTools-1.0.1-29996.i386.rpm
执行 vmware-config-tools.pl。
输入所需的显示大小。
同步虚拟机与主机上的时间。执行下面的步骤,以 root 用户身份同步时间。
执行“vmware-toolbox”以显示 VMware Tools Properties 窗口。在 Options 选项卡下,
选择 Time synchronization between the virtual machine and the host operating system。
编辑 /boot/grub/grub.conf,并将选项“clock=pit nosmp noapic nolapic”添加到读取内核 boot 的那一行。
第四步:图形界面的准备
安装Xmanager
运行级别从5改成3 修改 /etc/inittab
修改/etc/profile加入:
export DISPLAY=192.168.2.1:0.0
用Xmanager运行xclock测试
最后关机:init 0
好!linux安装完成,最好把虚拟机备份一下。