此系列相关文章
----------------------------------------------------------
首先通过官方源安装fcitx,默认已经是fcitx4.0.1版本了,命令如下:
sudo apt-get install fcitx
重启x后,通过ctrl space可以调出来输入界面,可意外的是只鹅拼音输入和双拼,急煞我也,后来通过官方网站得知,这个版本的fcitx已经不默认安装所有库表了,而需要单独安装,执行命令安装五笔拼音混合输入的库表:
sudo apt-get install fcitx-table-wbpy
另:安装单独的五笔库表需要执行命令:sudo apt-get install fcitx-table-wubi
这样重启x 后,即可享用五笔拼音混合输入了。
ubuntu 11.04出来了,网上还挺火的,最近闲得无聊就装了一下ubuntu 11.04,本人一向用习惯了极点五笔,本以为极点的作者不出linux版的,结果在网上一搜,居然有高手想到引用极点五笔的字典实现可以同时打拼音和五 笔,废话少说,下面看如何操作:
ibus下用法如下:
1.下载文件:
2. 右键点下载好的“vissible-ibus.tar.gz”压缩包,在下拉菜单中选“用 存档安装器 打开“,使这个压缩包挂载到系统中(桌面会显示“vissible-ibus.tar.gz”的图标)。
3. 按快捷键“ctrl alt t"打开终端执并行如下命令:
sudo cp vissible.db /usr/share/ibus-table/tables
sudo cp vissible.gif /usr/share/ibus-table/icons
4.完了之后在桌面右键点“vissible-ibus.tar.gz“,在下拉菜单中选”卸载“
5. 在任务栏右键点那个键盘小图标,在下拉菜单选“重新重启”(这个重新启动并不是重并报启动系统,而是重新启动ibus输入法),然后再右键点那个键盘小图 标并在下拉菜单中选“首选项”,然后在弹出的窗口中点击“输入法”选项卡,接着点“选择输入法”,然后添加极点五笔就可以了。
来自 http://hi.baidu.com/bianxuehui/blog/item/4aa8cda0f095f2974610642e.html
在此记录下nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络.
#运行用户
user www-data;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;#全局错误日志及pid文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;#工作模式及连接数上限
events {
use epoll; #epoll是多路复用io(i/o multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024;#单个后台worker process进程的最大并发链接数
# multi_accept on;
}#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘io重负载应用,可设置为 off,以平衡磁盘与网络i/o处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
#开启gzip压缩
gzip on;
gzip_disable "msie [1-6]\.(?!.*sv1)";#设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的squid开启3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
server {
#侦听80端口
listen 80;
#定义使用访问
server_name www.xx.com;#设定本虚拟主机的访问日志
access_log logs/www.xx.com.access.log main;#默认请求
location / {
root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义凯发k8网页登录首页索引文件的名称fastcgi_pass www.xx.com;
fastcgi_param script_filename $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /root;
}#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
expires 30d;
}
#php 脚本请求全部转发到 fastcgi处理. 使用fastcgi默认配置.
location ~ \.php$ {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param script_filename /home/www/www$fastcgi_script_name;
include fastcgi_params;
}
#设定查看nginx状态的地址
location /nginxstatus {
stub_status on;
access_log on;
auth_basic "nginxstatus";
auth_basic_user_file conf/htpasswd;
}
#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}
}
}
以上是一些基本的配置,使用nginx最大的好处就是负载均衡
如果要使用负载均衡的话,可以修改配置http节点如下:
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;#省略上文有的一些配置节点
#。。。。。。。。。。
#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.8.1x:3128 weight=5;#本机上的squid开启3128端口
server 192.168.8.2x:80 weight=1;
server 192.168.8.3x:80 weight=6;
}upstream mysvr2 {
#weigth参数表示权值,权值越高被分配到的几率越大server 192.168.8.x:80 weight=1;
server 192.168.8.x:80 weight=6;
}#第一个虚拟服务器
server {
#侦听192.168.8.x的80端口
listen 80;
server_name 192.168.8.x;#对aspx后缀的进行负载均衡请求
location ~ .*\.aspx$ {root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义凯发k8网页登录首页索引文件的名称proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器列表
#以下是一些反向代理的配置可删除.
proxy_redirect off;
#后端的web服务器可以通过x-forwarded-for获取用户真实ip
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传}
}
}
configure 脚本确定系统所具有一些特性,特别是 nginx 用来处理连接的方法。然后,它创建 makefile 文件。
configure 支持下面的选项:
--prefix=
--sbin-path=
--conf-path=
--pid-path=
--lock-path=
--error-log-path=
--http-log-path=
--user=
--group=
--builddir=dir - 指定编译的目录
--with-rtsig_module - 启用 rtsig 模块
--with-select_module --without-select_module - whether or not to enable the select module. this module is enabled by default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure.
//允许或不允许开启select模式,如果 configure 没有找到更合适的模式,比如:kqueue(sun os),epoll (linux kenel 2.6 ), rtsig(实时信号)或者/dev/poll(一种类似select的模式,底层实现与select基本相 同,都是采用轮训方法) select模式将是默认安装模式
--with-poll_module --without-poll_module - whether or not to enable the poll module. this module is enabled by default if a more suitable method such as kqueue, epoll, rtsig or /dev/poll is not discovered by configure.
--with-http_ssl_module - enable ngx_http_ssl_module. enables ssl support and the ability to handle https requests. requires openssl. on debian, this is libssl-dev.
//开启http ssl模块,使nginx可以支持https请求。这个模块需要已经安装了openssl,在debian上是libssl-dev
--with-http_realip_module - 启用 ngx_http_realip_module
--with-http_addition_module - 启用 ngx_http_addition_module
--with-http_sub_module - 启用 ngx_http_sub_module
--with-http_dav_module - 启用 ngx_http_dav_module
--with-http_flv_module - 启用 ngx_http_flv_module
--with-http_stub_status_module - 启用 "server status" 页
--without-http_charset_module - 禁用 ngx_http_charset_module
--without-http_gzip_module - 禁用 ngx_http_gzip_module. 如果启用,需要 zlib 。
--without-http_ssi_module - 禁用 ngx_http_ssi_module
--without-http_userid_module - 禁用 ngx_http_userid_module
--without-http_access_module - 禁用 ngx_http_access_module
--without-http_auth_basic_module - 禁用 ngx_http_auth_basic_module
--without-http_autoindex_module - 禁用 ngx_http_autoindex_module
--without-http_geo_module - 禁用 ngx_http_geo_module
--without-http_map_module - 禁用 ngx_http_map_module
--without-http_referer_module - 禁用 ngx_http_referer_module
--without-http_rewrite_module - 禁用 ngx_http_rewrite_module. 如果启用需要 pcre 。
--without-http_proxy_module - 禁用 ngx_http_proxy_module
--without-http_fastcgi_module - 禁用 ngx_http_fastcgi_module
--without-http_memcached_module - 禁用 ngx_http_memcached_module
--without-http_limit_zone_module - 禁用 ngx_http_limit_zone_module
--without-http_empty_gif_module - 禁用 ngx_http_empty_gif_module
--without-http_browser_module - 禁用 ngx_http_browser_module
--without-http_upstream_ip_hash_module - 禁用 ngx_http_upstream_ip_hash_module
--with-http_perl_module - 启用 ngx_http_perl_module
--with-perl_modules_path=path - 指定 perl 模块的路径
--with-perl=path - 指定 perl 执行文件的路径
--http-log-path=path - set path to the http access log
--http-client-body-temp-path=path - set path to the http client request body temporary files
--http-proxy-temp-path=path - set path to the http proxy temporary files
--http-fastcgi-temp-path=path - set path to the http fastcgi temporary files
--without-http - 禁用 http server
--with-mail - 启用 imap4/pop3/smtp 代理模块
--with-mail_ssl_module - 启用 ngx_mail_ssl_module
--with-cc=path - 指定 c 编译器的路径
--with-cpp=path - 指定 c 预处理器的路径
--with-cc-opt=options - additional parameters which will be added to the variable cflags. with the use of the system library pcre in freebsd, it is necessary to indicate --with-cc-opt="-i /usr/local/include". if we are using select() and it is necessary to increase the number of file descriptors, then this also can be assigned here: --with-cc-opt="-d fd_setsize=2048".
--with-ld-opt=options - additional parameters passed to the linker. with the use of the system library pcre in freebsd, it is necessary to indicate --with-ld-opt="-l /usr/local/lib".
--with-cpu-opt=cpu - 为特定的 cpu 编译,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
--without-pcre - 禁止 pcre 库的使用。同时也会禁止 http rewrite 模块。在 "location" 配置指令中的正则表达式也需要 pcre 。
--with-pcre=dir - 指定 pcre 库的源代码的路径。
--with-pcre-opt=options - set additional options for pcre building.
--with-md5=dir - set path to md5 library sources.
--with-md5-opt=options - set additional options for md5 building.
--with-md5-asm - use md5 assembler sources.
--with-sha1=dir - set path to sha1 library sources.
--with-sha1-opt=options - set additional options for sha1 building.
--with-sha1-asm - use sha1 assembler sources.
--with-zlib=dir - set path to zlib library sources.
--with-zlib-opt=options - set additional options for zlib building.
--with-zlib-asm=cpu - use zlib assembler sources optimized for specified cpu, valid values are: pentium, pentiumpro
--with-openssl=dir - set path to openssl library sources
--with-openssl-opt=options - set additional options for openssl building
--with-debug - 启用调试日志
--add-module=path - add in a third-party module found in directory path
在不同版本间,选项可能会有些许变化,请总是使用 ./configure --help 命令来检查一下当前的选项列表。
ubuntu或者debian系统中update-rc.d命令,是用来更新系统启动项的脚 本。这些脚本的链接位于/etc/rcn.d/目录,对应脚本位于/etc/init.d/目录。在了解update-rc.d命令之前,你需要知道的是 有关linux 系统主要启动步骤,以及ubuntu中运行级别的知识。
1 2 | init [0123456ss] 例如:init 0 命令关机; init 6 命令重新启动 |
1 2 | sudo install sysv-rc-conf //或者使用带gui的工具bum sudo sysv-rc-conf |
1 | update-rc.d -f <basename> remove |
1 | update-rc.d <basename> start|stop <order> <runlevels> |
1 | 实例:update-rc.d apachectl start 20 2 3 4 5 . stop 20 0 1 6 . |
解析:表示在2、3、4、5这四个运行级别中,由小到大,第20个开始运行apachectl;在 0 1 6这3个运行级别中,第20个关闭apachectl。这是合并起来的写法,注意它有2个点号,效果等于下面方法:
1 | update-rc.d apachectl defaults |
update-rc.d a defaults 80 20 |
1 | update-rc.d <basename> defaults 90 |
rcconf:
功能更全的:sysv-rc-conf
sudo apt-get install sysv-rc-conf
运行:sysv-rc-conf
这个改起来很简单,自己试一下就知道了.
2,
直接改/etc/rc0.d ~ /etc/rc6.d和/etc/rcs.d下的东西,s开头的表示启动,k开头的表示不启动,
例如:想关闭vsftpd的开机自动启动,只需sudo mv /etc/rc2.d/s20vsftpd /etc/rc2.d/k20vsftpd就可以了。
这条命令的用意就是利用mv的重命名功能。
3,chkconfig,这种方法在redhat,debian里面比较常用,在fedora和ubuntu里面用方法1比较简单,但是学习一下这种方法也是不错的。
但在ubuntu下这个命令没有redhat好用,老是出错.
算了,还是直接看一下redhat里面chkconfig的用法吧.
1,chkconfig --level [0123456] [service name] [on|off]
chkconfig --level 23 dhcp3-server off ----设定dhcp server服务在level2,3下关闭.
2,chkconfig --list 查看服务的自动开启状态
3,chkconfig --add 增加一个服务给chkconfig来管理,但是该服务必须在/etc/init.d内 .
例子,
1,gedit /etc/init.d/test
chkconfig:[runlevels] [start number] [stop number]
chkconfig: 23 80 70
其中start number 代表s80test
stop number 代表k70test
2,chkconfig --add test
3,chkconfig --list test
test 0:off 1:off 2:on 3:on 4:off 5:off 6:off
4,check /etc/rc.d/下的档案
find /etc/rc.d -type l | grep 'test' |sort
/etc/rc.d/rc0.d/k70test
/etc/rc.d/rc1.d/k70test
/etc/rc.d/rc2.d/s80test
/etc/rc.d/re3.d/s80test
/etc/rc.d/rc4.d/k70test
/etc/rc.d/rc5.d/k70test
/etc/rc.d/rc6.d/k70test
/etc/rc.d/rc7.d/k70test
-type l代表“连接文件”
4,chkconfig --del 删除一个给chkconfig管理的服务
5,显示目前run level 2为启动的服务
chkconfig --list | grep '3:on'
mysql安装为什么大部分使用二进制安装。而不是源码手动去编译?
mysql使用的glibc进行开发的。glibc库是一个底层api,所以只要是linux,都会有glibc库。所以,mysql安装不需要考虑环境是否符合要求。移植性很方便。直接将编译好的二进制代码复制到另外一个机器上,也是可以用的。
原 理性东西:一般在linux下安装一个软件,不同软件所需要的函数库不同。于是会遇到一个现象:一个软件复制到另外一个平台可能无法运行。安装软件需要先 侦测环境就是出于此考虑。因为mysql使用的是通用的glibc函数库。没有对其他东西的依赖性。所以,从一个平台复制到另外一个平台能够通用。并不需 要去侦测环境。直接使用编译好的二进制即可
手动编译安装,显得步骤麻烦。基于mysql的特点,二进制安装完全可以。
注:mysql5.5安装的时候,需要用到cmake命令,所以需要保证你的机器上安装了该命令。没有的话,还要去安装该cmake。也显得麻烦。我暂时不想去安装最新版本的了。
如果使用二进制安装升级怎么进行?
升级获取的还是二进制压缩包。那么,直接将指向目录切换到新的目录即可。
不需要涉及到像php一样,手动编译可以达到自己定制模块的好处。而mysql安装的时候不需要涉及到模块
mysql官方建议安装方式:二进制安装。
实践过程
大致思路就是:解压二进制文件放到指定的目录。然后安装基本的数据库,权限方面会用到。
然后,启动mysql就行了。
第一步:创建一个用户组和用户。
组名和用户名的名字都为mysql。
命令:1.groupadd mysql
2.useradd -r -g mysql mysql
第二步:解压二进制压缩包。
一般放到"/usr/local/src"目录下去。
结果会变成:/usr/local/src/mysql安装目录
有很多种方式。一般可以直接进去要解压要存放的目录。
运行命令:tar zxvf 压缩包源 注释:第二个参数可以填要解压到的位置。第二个参数不填,就会将压缩包源解压到运行tar命令的当前目录。一般都是使用这种特性进行解压:你要解压到哪里就先进入哪里运行tar命令。
第三步:建立一个软链接。
在"usr/local"下建立一个软链接(自己定义名为mysql)。软链接的目录是为了指向"/usr/local/src/mysql安装目录"
命令:ln -s /usr/local/src/mysql安装目录 /usr/local/mysql 参数说明:-s参数表示建立软链接
去local目录下查看,看是否成功生成了一个软链接。使用"ls -al"查看,特点是软连接上会有个箭头符号。
其实这一步就是为了提供一种快捷操作的方式。其实不建立软连接也是可以用的,为什么要这样做?
升级管理有用:新版本单独建立一个目录存放的。假如你升级mysql了。只要将这个软连接指向的目录修改即可。
第四步:权限检查与修改
主要是保证"mysql安装目录"的所有者为mysql用户,所属组也为mysql组。
1.chown -r mysql . //将当前目录的所有者改为mysql用户 要加上-r参数。这个参数表示循环遍历子节点。子节点都起作用
2.chgrp -r mysql . //将当前目录的所有组改为mysql组
常见的问题:忘记加上-r参数。结果下面节点没有权限。启动错误,访问错误等等一系列的问题。
第五步:安装初始化数据库
运行mysql安装目录下的文件:/scripts/mysql_install_db
命令备忘:scripts/mysql_install_db --user=mysql //这是进入mysql安装目录下进行运行的,所以需要输入路径"scripts/"
注意:必须在安装目录下执行。不能切换到scripts目录下,然后执行"./mysql_install_db --user=mysql",否则会报如下错误:
fatal error: could not find ./bin/my_print_defaults
因为脚本mysql_install_db里面所使用的是这种形式的相对路径"./bin/my_print_defaults",所以必须是在"mysql安装目录"下,才能找得到所需文件。
第二次试验的时候,还报出一个错误:./bin/my_print_defaults: cannot execute binary file
第六步:my.cnf配置文件拷贝
将my.cnf文件移到etc/目录下去。
命令:cp support-files/my-medium.cnf /etc/my.cnf
第七步:启动mysql
马上启动mysql的命令是:bin/mysqld_safe --user=mysql & //"&"表示在后台运行
这里使用&的经验备忘:执行上面命令后,一直定在一个地方。没有任何反应了。并没有报错信息。还是成功的。此时使用ctrl c。然后去看看
之后,想让服务器启动的时候就跟着启动mysql服务器,在一个目录下放一个文件:
cp support-files/mysql.server /etc/init.d/mysql.server
support-files/mysql.server在二进制安装目录下可以找到的。
完成后进行的步骤:
第一步:如何查看mysql是否安装成功。
一个方法是:去查看3306端口是否开启
命令:netstat -ntl 可以列出所有侦听的端口
第二个方法:使用mysql命令连接一次服务器
命令: mysql -u root
小技巧:为了省去每次执行客户端都要进入目录的麻烦。将客户端的路径加入环境变量中去。
shell命令:export path=$path:/usr/local/src/mysql-5.1/bin/
export命令备忘: export 变量名=变量值,这里变量名是path 变量值设置成在原来的$path基础上加,有多个值,那么值之间以分号":"隔开。
这样,在任意路径中。都可以通过:"mysql -u 用户名 -p" 的形式使用客户端了。
所遇问题总结
第一个问题:
问题描述:sqlstate[hy000] [2002] can't connect to local mysql server through socket '/usr/local/mysql/tmp/mysql.sock'
问题经验:
不能通过 '/tmp/mysql.sock'连到服务器,而php标准配置正是用过'/tmp/mysql.sock'
1.php.ini中可以配置通过哪个sock去连接mysql
2.而mysql的配置文件中也可以自由配置使用哪个位置的sock文件
错误提示中显示了错误2002号。结合手册如下说明:
错误:2002 (cr_connection_error)
消息:不能通过套接字'%s' (%d)连接到本地mysql服务器。
第二个问题:权限问题。
解决问题的经验是:如果遇到启动mysql错误。首先应该去看看权限是否有。设置对了没。
比如启动使用"service mysqld start"常常看到如下错误提示:
mysqld_safe logging to '/usr/local/mysql/data/localhost.localdomain.err'.
110306 23:17:20 mysqld_safe starting mysqld daemon with databases from /usr/local/mysql/data
110306 23:17:20 mysqld_safe mysqld from pid file /usr/local/mysql/data/localhost.localdomain.pid ended
看不懂意思。这些信息会在data/*.err文件中记录的。不知道上述报错信息的原因。
查看目录下的子节点,发现所有者和所属组并不都是mysql。我直接设置好目录的所有者和所属组都是mysql后。就行了。
shell>groupadd mysql
shell>useradd -r -g mysql mysql
shell>cd /usr/local
shell>tar zxvf
/path/to/mysql-version-os
.tar.gz
shell>ln -s
full-path-to-mysql-version-os
mysql
shell>cd mysql
shell>chown -r mysql .
shell>chgrp -r mysql .
shell>scripts/mysql_install_db
--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data--user=mysql
shell>chown -r root .
shell>chown -r mysql data
# next command is optional
shell>cp support-files/my-medium.cnf /etc/my.cnf
shell>bin/mysqld_safe
--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data--user=mysql &
# next command is optional
shell>cp support-files/mysql.server /etc/init.d/mysql.server
启动后的日志写在/var/log/mysql/error.log文件下,可直接到这个文件下去查看。
安装成功。
然后要配置环境变量
在文件中添加
然后修改第二个文件
在文件中最后一行的前面添加
由于ubuntu中可能会有默认的jdk,如openjdk,所以,为了使默认使用的是我们安装的jdk,还要进行如下工作。
执行
通过这一步将我们安装的jdk加入java选单。
然后执行
通过这一步选择系统默认的jdk
这样,再在shell中输入
保存退出,输入以下命令使之立即生效。
vi 在初始启动后首先进入编辑模式,当用户在编辑模式下键入 i, a, o 等命令之后,可进入插入模式;键入 : 可进入命名模式。在插入模式下,用户随后输入的,除 esc 之外的任何字符均将被看成是插入到编辑缓冲区中的字符。按 esc 之后,从插入模式切换到编辑模式。
要对正文内容进行修改,首先必须把光标移动到指定位置。移动光标的最简单的方式是按键盘的上、下、左、
右箭头键。除了这种最原始的方法之外,用户还可以利用 vi 提供的众多字符组合键,在正文中移动光标,迅
速到达指定的行或列,实现定位。例如:
k、j、h、l 功能分别等同于上、下、左、右箭头键
ctrl b 在文件中向上移动一页(相当于 pageup 键)
ctrl f 在文件中向下移动一页(相当于 pagedown 键)
h 将光标移到屏幕的最上行(highest)
nh 将光标移到屏幕的第 n 行
2h 将光标移到屏幕的第 2 行
m 将光标移到屏幕的中间(middle)
l 将光标移到屏幕的最下行(lowest)
nl 将光标移到屏幕的倒数第 n 行
3l 将光标移到屏幕的倒数第 3 行
w 在指定行内右移光标,到下一个字的开头
e 在指定行内右移光标,到一个字的末尾
b 在指定行内左移光标,到前一个字的开头
0 数字0,左移光标,到本行的开头
$ 右移光标,到本行的末尾
^ 移动光标,到本行的第一个非空字符
将光标定位于文件内指定位置后,可以用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多
个字符。例如:
rc 用 c 替换光标所指向的当前字符
nrc 用 c 替换光标所指向的前 n 个字符
5rc 用 c 替换光标所指向的前 5 个字符
x 删除光标所指向的当前字符
nx 删除光标所指向的前 n 个字符
3x 删除光标所指向的前 3 个字符
dw 删除光标右侧的字
ndw 删除光标右侧的 n 个字
3dw 删除光标右侧的 3 个字
db 删除光标左侧的字
ndb 删除光标左侧的 n 个字
5db 删除光标左侧的 5 个字
dd 删除光标所在行,并去除空隙
ndd 删除 n 行内容,并去除空隙
3dd 删除 3 行内容,并去除空隙
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。用户可
将其粘贴到正文中的指定位置。完成这一操作的命令是:
p 小写字母 p,将缓冲区的内容粘贴到光标的后面
p 大写字母 p,将缓冲区的内容粘贴到光标的前面
如果缓冲区的内容是字符或字,直接粘贴在光标的前面或后面;如果缓冲区的内容为整行正文,则粘贴在当前
光标所在行的上一行或下一行。
注意上述两个命令中字母的大小写。vi 编辑器经常以一对大、小写字母(如 p 和 p)来提供一对相似的功能
。通常,小写命令在光标的后面进行操作,大写命令在光标的前面进行操作。
有时需要复制一段正文到新位置,同时保留原有位置的内容。这种情况下,首先应当把指定内容复制(而不是
剪切)到内存缓冲区。完成这一操作的命令是:
yy 复制当前行到内存缓冲区
nyy 复制 n 行内容到内存缓冲区
5yy 复制 5 行内容到内存缓冲区
和许多先进的编辑器一样,vi 提供了强大的字符串搜索功能。要查找文件中指定字或短语出现的位置,可以
用 vi 直接进行搜索,而不必以手工方式进行。搜索方法是:键入字符 / ,后面跟以要搜索的字符串,然后
按回车键。编辑程序执行正向搜索(即朝文件末尾方向),并在找到指定字符串后,将光标停到该字符串的
开头;键入 n 命令可以继续执行搜索,找出这一字符串下次出现的位置。用字符 ? 取代 / ,可以实现反向
搜索(朝文件开头方向)。例如:
/str1 正向搜索字符串 str1
n 继续搜索,找出 str1 字符串下次出现的位置
?str2 反向搜索字符串 str2
无论搜索方向如何,当到达文件末尾或开头时,搜索工作会循环到文件的另一端并继续执行。
在编辑文档的过程中,为消除某个错误的编辑命令造成的后果,可以用撤消命令。另外,如果用户希望在新
的光标位置重复前面执行过的编辑命令,可用重复命令。
u 撤消前一条命令的结果
. 重复最后一条修改正文的命令
#demo#
在编辑模式下正确定位光标之后,可用以下命令切换到插入模式:
i 在光标左侧输入正文
a 在光标右侧输入正文
o 在光标所在行的下一行增添新行
o 在光标所在行的上一行增添新行
i 在光标所在行的开头输入正文
a 在光标所在行的末尾输入正文
上面介绍了几种切换到插入模式的简单方法。另外还有一些命令,它们允许在进入插入模式之前首先删去一段
正文,从而实现正文的替换。这些命令包括:
s 用输入的正文替换光标所指向的字符
ns 用输入的正文替换光标右侧 n 个字符
cw 用输入的正文替换光标右侧的字
ncw 用输入的正文替换光标右侧的 n 个字
cb 用输入的正文替换光标左侧的字
ncb 用输入的正文替换光标左侧的 n 个字
cd 用输入的正文替换光标的所在行
ncd 用输入的正文替换光标下面的 n 行
c$ 用输入的正文替换从光标开始到本行末尾的所有字符
c0 用输入的正文替换从本行开头到光标的所有字符
退出插入模式的方法是,按 esc 键或组合键ctrl [ 。
#demo#
在 vi 的命令模式下,可以使用复杂的命令。在编辑模式下键入“:”,光标就跳到屏幕最后一行,并在那里显示冒号,此时已进入命令模式。命令模式又称“末行模式”,用户输入的内容均显示在屏幕的最后一行,按回车键,vi 执行命令。
在编辑模式下可以用 zz 命令退出 vi 编辑程序,该命令保存对正文所作的修改,覆盖原始文件。如果只需要
退出编辑程序,而不打算保存编辑的内容,可用下面的命令:
: q 在未作修改的情况下退出
: q! 放弃所有修改,退出编辑程序
编辑中的每一行正文都有自己的行号,用下列命令可以移动光标到指定行:
: n 将光标移到第 n 行
命令模式下,可以规定命令操作的行号范围。数值用来指定绝对行号;字符“.”表示光标所在行的行号;字符
符“$”表示正文最后一行的行号;简单的表达式,例如“. 5”表示当前行往下的第 5 行。例如:
:345 将光标移到第 345 行
:345w file 将第 345 行写入 file 文件
:3,5w file 将第 3 行至第 5 行写入 file 文件
:1,.w file 将第 1 行至当前行写入 file 文件
:.,$w file 将当前行至最后一行写入 file 文件
:.,. 5w file 从当前行开始将 6 行内容写入 file 文件
:1,$w file 将所有内容写入 file 文件,相当于 :w file 命令
在命令模式下,允许从文件中读取正文,或将正文写入文件。例如:
:w 将编辑的内容写入原始文件,用来保存编辑的中间结果
:wq 将编辑的内容写入原始文件并退出编辑程序(相当于 zz 命令)
:w file 将编辑的内容写入 file 文件,保持原有文件的内容不变
:a,bw file 将第 a 行至第 b 行的内容写入 file 文件
:r file 读取 file 文件的内容,插入当前光标所在行的后面
:e file 编辑新文件 file 代替原有内容
:f file 将当前文件重命名为 file
:f 打印当前文件名称和状态,如文件的行数、光标所在的行号等
给出一个字符串,可以通过搜索该字符串到达指定行。如果希望进行正向搜索,将待搜索的字符串置于两个“
/”之间;如果希望反向搜索,则将字符串放在两个“?”之间。例如:
:/str/ 正向搜索,将光标移到下一个包含字符串 str 的行
:?str? 反向搜索,将光标移到上一个包含字符串 str 的行
:/str/w file 正向搜索,并将第一个包含字符串 str 的行写入 file 文件
:/str1/,/str2/w file 正向搜索,并将包含字符串 str1 的行至包含字符串 str2 的行写
入 file 文件
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
在命令模式下,同样可以删除正文中的内容。例如:
:d 删除光标所在行
:3d 删除 3 行
:.,$d 删除当前行至正文的末尾
:/str1/,/str2/d 删除从字符串 str1 到 str2 的所有行
vi 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以 . 开头,并以 .swp 结尾。vi 在
正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使用恢复命令:
:recover 恢复文件
也可以在启动 vi 时利用 -r 选项。