linux上tarball套件的安装步骤

没有评论

2010 年 12 月 31 日 at 下午 7:24分类:Linux

Tarball套件是什么呢?其实就是将套件的额所有源码文件以tar打包,然后再压缩,最常见的就是以gzip来压缩了,因为利用了 tar 与 gzip 的功能,所以 tarball 档案一般的附档名就会写成 *.tar.gz 或者是简写为 *.tgz 啰!也就是说, Tarball 套件解压缩之后,里面的档案通常就会有:
1、原始程序代码档案;
2、侦测程序档案( 可能是 configure 或 config 等档名 );
3、本套件的简易说明与安装说明( INSTALL 或 README )。
其中最重要的是那个 INSTALL 或者是 README 这两个档案,通常您只要能够参考这两个档案,呵呵! Tarball 套件的安装是很简单的啦!我们在后面的章节会再继续介绍 Tarball 这个玩意儿。
Tarball的安装步骤可以归结为以下四个步骤:
1、建立Makefile文件,(用命令:./configure)
这个步骤就是在建立 Makefile 这的档案啰!通常程序开发者会写一支 scripts 来检查您的 Linux 系统、相关的套件属性等等,这个步骤相当的重要,因为未来您的安装信息都是这一步骤内完成的!另外,这个步骤的相关信息应该要参考一下该目录下的 README 或 INSTALL 相关的档案!!基本上,这个步骤完成之后会建立( 或修改 )一个 Makefile ,这就是参数档啦!
2、使用命令make clean读取关于clean的操作
make 会读取 Makefile 中关于 clean 的工作。这个步骤不一定会有,但是希望执行一下!为什么呢?因为在进行编译的时候,会产生一些 *.o 的档案,例如有个 abc.c 的原始码,经过编译后会变成 abc.o 的档案!我们称这些档案为 object file ,这些档案如果之前已经编译过并留下来的话,那么这次再编译的时候,就不会编译该档案,然而由于我们可能已经修改了部分的参数,因此该档案的编译结果事实 上应该会有所不同!因此,为了避免前一次留下来的数据可能影响到这次编译的结果,所以通常可以进行一下这个步骤啰!
3、make,根据makefile文件进行编译
make 会依据 Makefile 当中的预设工作进行编译的行为!编译的工作主要是进行 gcc 来将原始码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一些函式库之类的 link 后,才能产生一个完整的执行档!使用 make 就是要将原始码编译成为可以被执行的可执行档,而这个可执行档会放置在目前所在的目录之下,尚未被安装到预定安装的目录中;
4、make install 进行安装
通常这就是最后的安装步骤了,make 会依据 Makefile 这个档案里面关于 install 的项目,将上一个步骤所编译完成的数据给他安装到预定的目录中,就完成安装啦!
*****************************************************************************************************
由于 Tarball 在升级与安装上面具有这些特色,亦即 Tarball 在反安装上面具有比较高的难度( 如果您没有好好规划的话~ ),所以,为了方便 Tarball 的管理,通常我们会这样建议使用者:
最好将 tarball 的原始数据解压缩到 /usr/local/src 当中;安装时,最好安装到 /usr/local 这个预设路径下;考虑未来的反安装步骤,最好可以将每个套件单独的安装在 /usr/local 底下,例如安装 rp-pppoe-2.6.tar.gz 时,则可以指定该套件需要安装于 /usr/local/rp-pppoe 当中,如此一来,该套件会将所有的数据都写入 /usr/local/rp-pppoe 当中,因此,未来如果要移除该套件,只要将该目录删除即可视为成功的移除了!不过单独安装某个套件在某一特定路径下的作法,会导致当有 man page 的时候,使用预设的 MANPATH 会找不到相关的说明档案内容。这个时候就必须要将 man page 的路径加到/etc/man.config 档案中了!否则使用 man 也查询不到指令的使用方法的。以上面的例子为例,如果是安装了 /usr/local/rp-pppoe 当中,通常 man page 会放在 /usr/local/rp-pppoe/man 当中,所以,您就必需要在 /etc/man.config 里面差不多 40~50 行左右的地方,加入底下这一行:
MANPATH /usr/local/rp-pppoe/man这样就可以使用 man 来查询资料啰!
****************************************************************************************************
下面是一个简单的例子:
我们利用时间服务器 ntp-4.1.2 这个套件来测试安装看看。先请到 http://www.ntp.org/downloads.html 这个目录去下载档案,
假设我对这个套件的要求是这样的:
假设 ntp-4.1.2.tar.gz 这个档案放置在 /root 这个目录下;
原始码请解开在 /usr/local/src 底下;
我要安装到 /usr/local/ntp 这个目录中;
那么您可以依照底下的步骤来安装测试看看

# 1. 解压缩,并阅读一下 ntp 底下的 README 与 INSTALL:  
[root@test root]# cd /usr/local/src  
[root@test src]# tar -zxvf /root/ntp-4.1.2.tar.gz  
# 这个步骤会让原始码解开成为 /usr/local/src/ntp-4.1.2 这个目录 
  
# 2. 进入原始码所在目录,并且查阅如何安装的技巧: 
[root@test src]# cd ntp-4.1.2  
[root@test ntp-4.1.2]# vi INSTALL ( 或 vi README)  
  
# 3. 开始设定参数、编译与安装: 
[root@test ntp-4.1.2]# ./configure --help | more  
# 上面这个动作可以察看一下可用的参数!  
  
[root@test ntp-4.1.2]# ./configure --prefix=/usr/local/ntp  \  
>  --enable-all-clocks --enable-parse-clocks  
checking for gcc... (cached) gcc 
checking whether we are using the GNU C compiler... (cached) yes 
checking whether gcc accepts -g... (cached) yes 
.....(略).... 
configure: creating ./config.status 
config.status: creating Makefile 
# 一般来说 configure 设定参数较重要的就是那个 --prefix=/path 了, 
# --prefix 后面接的路径就是『这个软件未来要安装到那个目录去?』 
# 如果您没有指定 --prefix=/path 这个参数,通常预设参数就是 /usr/local 
# 至于其它的参数意义就得要参考 ./configure --help 了! 
# 这个动作完成之后会产生 makefile 或 Makefile 这个档案 
# 当然啦,这个侦测检查的过程会显示在屏幕上,特别留意关于 gcc 的检查, 
# 还有最重要的是最后需要成功的建立起 Makefile 才行!(上面最后一行) 
  
[root@test ntp-4.1.2]# make clean ; make  
[root@test ntp-4.1.2]# make check 
[root@test ntp-4.1.2]# make install 
# 将数据给他安装在 /usr/local/ntp 底下

整个动作就这么简单,我们已经完成了ntp套件的安装,完成之后到 /usr/local/ntp 就能找到相关的文件和文件夹了

在TP中使用Paypal

没有评论

2010 年 12 月 29 日 at 下午 1:35分类:PHP | WEB开发

原文地址:http://www.c1991.com/article/316.html

<?php

class PaymentAction extends Action {

    /**
     * 自己的paypal账号
     */
    private $account = 'zyc1991@gmail.com';

    /**
     * paypal支付网关地址
     */
    private $gateway = 'https://www.paypal.com/cgi-bin/webscr?';

    public function index() {
        echo '<a href="'.U('Payment/order').'">Payment this order.</a>';
    }

    /**
     * 生成订单并跳转到Paypal进行支付
     */
    public function order() {
        /**
         * 自己的逻辑代码
         * 判断是否登录、购买的哪个商品、购物车等等逻辑
         * 当然可以调用Model更简单点
         * 这里不在赘述
         */
        /** ...... **/

        $order_info = array();// 初始化订单数据
        $order_id = uniqid();// 按照自己的规则生成订单号入库

        /**
         * 订单包含哪几种商品、谁买的、什么时间、几件
         */
        $order_info['order_id'] = $order_id;
        $order_info['member_id'] = Session::get('member_id');
        /** .... **/

        $order = D('Order');

        if( $order->createOrder($order_info) ) {
            unset($order,$order_info);
            $pp_info = array();// 初始化准备提交到Paypal的数据
            $pp_info['cmd'] = '_xclick';// 告诉Paypal,我的网站是用的我自己的购物车系统
            $pp_info['business'] = $this->account;// 告诉paypal,我的(商城的商户)Paypal账号,就是这钱是付给谁的
            $pp_info['item_name'] = "支付订单:{$order_id}";// 用户将会在Paypal的支付页面看到购买的是什么东西,只做显示,没有什么特殊用途,如果是多件商品,则直接告诉用户,只支付某个订单就可以了
            $pp_info['amount'] = '13'; // 告诉Paypal,我要收多少钱
            $pp_info['currency_code'] = 'USD';// 告诉Paypal,我要用什么货币。这里需要注意的是,由于汇率问题,如果网站提供了更改货币的功能,那么上面的amount也要做适当更改,paypal是不会智能的根据汇率更改总额的
            $pp_info['return'] = 'http://www.domain.com/index.php/payment/finish';// 当用户成功付款后paypal会将用户自动引导到此页面。如果为空或不传递该参数,则不会跳转
            $pp_info['invoice'] = $order_id;
            $pp_info['charset'] = 'utf-8';
            $pp_info['no_shipping'] = '1';
            $pp_info['no_note'] = '1';
            $pp_info['cancel_return'] = 'http://www.domain.com/index.php/product/view/pid/3';// 当跳转到paypal付款页面时,用户又突然不想买了。则会跳转到此页面
            $pp_info['notify_url'] = 'http://www.domain.com/index.php/payment/notify/orderid/'.$order_id;// Paypal会将指定 invoice 的订单的状态定时发送到此URL(Paypal的此操作,是paypal的服务器和我方商城的服务器点对点的通信,用户感觉不到)
            $pp_info['rm'] = '2';

            $paypal_payment_url = $this->gateway.http_build_query($pp_info);
            echo "<a href='{$paypal_payment_url}'>Go Paypal!</a>";
            unset($pp_info);
        } else {
            $this->error(L('order_create_fail'));
        }
    }

    public function finish() {
        $this->success('购买成功');
    }

    public function notify() {
        // 由于这个文件只有被Paypal的服务器访问,所以无需考虑做什么页面什么的,这个页面不是给人看的,是给机器看的
        $order_id = (int) $_GET['orderid'];
        $order_info = D('Order')->getOrderDetail($order_id);

        // 由于该URL不仅仅只有Paypal的服务器能访问,其他任何服务器都可以向该方法发起请求。所以要判断请求发起的合法性,也就是要判断请求是否是paypal官方服务器发起的

        // 拼凑 post 请求数据
        $req = 'cmd=_notify-validate';// 验证请求
        foreach ($_POST as $k=>$v)
        {
            $v = urlencode(stripslashes($v));
            $req .= "&{$k}={$v}";
        }

        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,'http://www.paypal.com/cgi-bin/webscr');
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$req);
        $res = curl_exec($ch);
        curl_close($ch);

        if( $res && !empty($order_info) ) {
            // 本次请求是否由Paypal官方的服务器发出的请求
            if(strcmp($res, 'VERIFIED') == 0) {
                /**
                 * 判断订单的状态
                 * 判断订单的收款人
                 * 判断订单金额
                 * 判断货币类型
                 */
                if(($_POST['payment_status'] != 'Completed' && $_POST['payment_status'] != 'Pending') OR ($_POST['receiver_email'] != $this->account) OR ($_POST['mc_gross'] != 13) OR ('USD' != $_POST['mc_currency'])) {
                    // 如果有任意一项成立,则终止执行。由于是给机器看的,所以不用考虑什么页面。直接输出即可
                    exit('fail');
                } else {// 如果验证通过,则证明本次请求是合法的
                    D('Order')->finishOrder($order_id);// 更改订单状态
                    exit('success');
                }
            } else {
                exit('fail');
            }
        }
    }
}

vi编辑器常用方法整理:

没有评论

2010 年 12 月 28 日 at 下午 1:08分类:Linux

vi编辑器常用方法整理:
******************************************************************
一般模式下:
0:按下数字0,移动光标到当前行的最前面
$:按下符号$,移动光标到当前行的最后一个字符
G:按下大写的G,移动光标到这个文件的最后一行
nG:n是个数字,表示移动到这个文件的第n行,如20G,移动到这个文件的20行
gg:快速按下两个小写的g,移动光标到第一行,类似于1G的执行效果
n:n为数字,表示光标向下移动n行
/word:从光标位置开始,向下寻找一个名为word的字符串
?word:从光标位置开始,向上寻找一个名为word的字符串
:n1,n2s/word1/word2/g n1和n2为数字,在n1和n2行之间,寻找word1字符串,并替换为word2
:1,$s/word1/word2/g 从第一行到最后一行寻找word1,并替换为word2
:1,$s/word1/word2/gc 从第一行到最后一行寻找word1,并替换为word2,且在替换前询问用户是否需要替换
x,X :在一行中,x是向后删除一个字符,X是向前删除一个字符
dd : 删除光标所在的那一个整行,
yy : 复制光标所在的那一行
nyy : n为数字,复制光标所在的向下的n行,如:20yy,则是复制20行
p,P :p为粘贴已复制的内容到光标的下一行,P为把内容贴在光标的上一行
u:复原前一个操作
[Ctrl]+r :重做上一个操作
******************************************************************
编辑模式下:
i:从当前光标所在处开始插入,已存在的文字会向后退
a:从当前光标所在的下一个字符处开始插入
o:从当前光标所在的下一行处插入新的一行
r:替换光标所在的那一个字符
******************************************************************
命令模式下:
:w,将编辑的数据写入硬盘文件中
:w!对于一些只有读属性的的文件 ,要强制写入
:q,离开vi编辑器
:wq,存储数据后离开
:wq!,强制存储数据后离开

SSH乱码解决办法

没有评论

2010 年 12 月 28 日 at 上午 10:14分类:Linux

因为好多方法都要涉及到更改服务器的编码设置,这样子很是麻烦,况且很容易出错,所以这里就是用另外一种方法:那就是替代方案!
一直使用SSH Secure Shell Client,该软件是免费的SSH远程登录软件。缺点是使用本地编码,比如windows是GBK,那么登录就是通过GBK连接,这样如果服务器编码是UTF-8,会产生中文乱码,比如:
当需要阅读中文信息的时候就很麻烦。因为现在越来越多的软件或者类库使用通用的UTF-8编码。
目前使用的替代方案是,使用putty:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
该工具是开源免费的,虽然比SSH Secure Shell Client简陋,但是支持设置编码,而且很小,可以放在U盘中随时使用。
如果不设置编码,默认是系统本地编码,在vista下就是GB18030,界面设置如下:窗口->转换,然后在下拉框中选择UTF-8编码
然后选择服务器的地址。在打开 ,那么问题就解决了!
另外,就是SSH Secure Shell Client支持图形化的SFTP,用于文件的上传和下载,这个功能比较有用,putty只提供了一个命令行的sftp客户端。
可以使用另外的工具实现图形化sftp,比如filezilla,下载地址:

http://filezilla-project.org/download.php?type=client

下载客户端即可,filezilla还提供了ftp的服务器端。可以下载绿色版本的,或者下载按照官方推荐的windows安装版。

PHP程序员应该掌握的10项技能!

没有评论

2010 年 12 月 27 日 at 下午 11:05分类:乱七八糟

一个PHP程序员应该掌握的10项技能!

  很多学PHP的人一直也搞不清楚,一个PHP程序员和Java程序员或者是.net程序员有什么不同,告诉你,其实都一样!没有什么不同,下面的内容,就是针对一个Java程序员掌握的技能对比PHP来说的!告诉你,它们其实是一样的,不过是工具而已,没有高低贵贱之分。只不过你不熟练,不知道而已!

  1、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。

  2、命令:必须熟悉PHP带的一些常用命令及其常用选项,熟悉那些命令,自己运行php.exe -h 如果这些命令你没有全部使用过,那么你对PHP实际上还很不了解。

  3、工具:必须至少熟练使用一种IDE的开发工具,例如:Eclipse、Netbeans、zend或者editplus,ultraedit,包括进行工程管理、常用选项的设置、PHP插件的安装配置以及进行调试。

  4、API:PHP的核心API是非常庞大的,但是有一些内容笔者认为是必须熟悉的,否则不可能熟练的运用PHP,包括:

  ◆ 文件目录处理函数包80%以上的函数的功能的灵活运用。

  ◆ 日期时间函数中的80%以上的函数的功能的灵活运用

  ◆ 数学函数库中的100%的内容。

  ◆ 网络库中的60%以上的内容,对各个函数的功能比较熟悉。

  ◆ 字符串处理函数下的60%以上的内容,特别是各种处理函数。

  ◆ 正则表达式函数下的90%以上的内容,特别是各种正则处理

  ◆ 一些安全库下的40%以上的内容,如果对于安全没有接触的话根本就不可能掌握PHP

  ◆ XML处理,熟悉SAX、DOM以及JDOM的优缺点并且能够使用其中的一种完成XML的解析及内容处理。

  ◆ 图形图像函数库下的80%以上的内容,特别是一些图像生成和处理

  ◆ MySQL 数据库函数下的90%以上的内容,特别是处理各种数据的函数

  ◆ 数组处理函数下的90%以上的内容,特别是各种操作处理函数

  ◆ 其它PEAR,PECL,和一些扩展类库中的80%以上的内容,特别是一些常用的类的处理

  ◆ 针对不同的需求,查找不同的函数库。

  5、测试:必须熟悉使用phpunit编写测试用例完成代码的自动测试。

  6、管理:必须熟悉使用xinc, phing等完成工程管理的常用任务,例如工程编译、生成phpdoc、生成、版本控制、自动测试。

  7、排错:应该可以根据异常信息比较快速的定位问题的原因和大致位置。

  8、思想:必须掌握OOP的主要要求,这样使用PHP开发的系统才能是真正的PHP系统。

  9、规范:编写的代码必须符合流行的编码规范,这样程序的可读性才比较好。

  10、博学:掌握OOA、OOD、MS SQL Server、Oracle 、Zendframework、cakephp、symfony、模板技术等流行技术,掌握软件架构设计思想、搜索引擎优化、缓存系统设计、网站负载均衡、系统性能调优等实用技术。

  综合上述,没发现PHP和java有什么不同!PHP和Java,还是.net一样要学的东西有很多!

  推荐格言:

  浮躁的人容易说:PHP语言不行,应该学Java,C#,VB.NET:–是你自己不行了吧!?

  浮躁的人容易问:PHP和Java,C#,VB.NET哪个好;–告诉你吧,都好–只要你学好就行;

  浮躁的人容易问:我到底该学什么:–别问,学就对了;

  浮躁的人容易问:PHP有钱途吗:–建议你去强银行

  专家建议:

  如果可选的语言有好几种,那么,选择其中学习难度最小的一种。

  不要轻信广告,不要轻信媒体。唯一可以相信的是你的市场。

  个人可以喜欢一种、两种甚至好几种语言,但一定不要排斥其他任何一种语言

ubuntu进入但用户模式修改密码的方法

没有评论

2010 年 12 月 27 日 at 下午 10:21分类:Linux

linux忘记root密码,进入单用户模式修改密码
一、关于lilo
1. 在出现 lil 提示时键入 linux single
画面显示 lil linux single
2. 回车可直接进入linux命令行
3. 用password命令修改密码

二、关于 grub
1. 在出现grub画面时,用上下键选中你平时启动linux的那一项,然后按e键
2. 再次用上下键选中你平时启动linux的那一项(类似于kernel/boot/vmlinuz-2.4.18-14 ro root=LABEL=/),然后按e键
3. 修改你现在见到的命令行,加入single,结果如下:
kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ single
4. 回车返回,然后按b键启动,即可直接进入linux命令行
5.用password命令修改密码

php判断浏览器类型

没有评论

2010 年 12 月 27 日 at 下午 4:32分类:CSS | HTML | PHP | WEB开发

很多时候都需要判断浏览器类型来写代码,比如CSS的兼容性,若是PHP页面,可以用PHP来判断浏览器类型来显示不同的CSS代码。还有很多,都是需要 判断浏览器类型的。简单判断浏览器的方法主要是用$_SERVER["HTTP_USER_AGENT"],PHP比其它语言总是简单。下面就收藏这段代 码吧,总有用,可以判断IE6、IE7、IE8、firefox等浏览器。
代码1:

<?php
if(strpos($_SERVER["HTTP_USER_AGENT"],”MSIE 8.0″))
echo “Internet Explorer 8.0″; // 这里可以写其他的执行命令
else if(strpos($_SERVER["HTTP_USER_AGENT"],”MSIE 7.0″))
echo “Internet Explorer 7.0″;
else if(strpos($_SERVER["HTTP_USER_AGENT"],”MSIE 6.0″))
echo “Internet Explorer 6.0″;
else if(strpos($_SERVER["HTTP_USER_AGENT"],”Firefox/3″))
echo “Firefox 3″;
else if(strpos($_SERVER["HTTP_USER_AGENT"],”Firefox/2″))
echo “Firefox 2″;
else if(strpos($_SERVER["HTTP_USER_AGENT"],”Chrome”))
echo “Google Chrome”;
else if(strpos($_SERVER["HTTP_USER_AGENT"],”Safari”))
echo “Safari”;
else if(strpos($_SERVER["HTTP_USER_AGENT"],”Opera”))
echo “Opera”;
else echo $_SERVER["HTTP_USER_AGENT"];
?>

代码2:

<?php  
    //baseAgent类,抽象的基类  
    abstract class baseAgent  
    {  
        abstract function PrintPage();  
    }  
    //ieAgent类,用于客户端是IE时调用的类  
    class ieAgent extends baseAgent  
    {  
        function PrintPage()  
        {  
            return "当前浏览器是IE!";  
        }  
    }  
    //otherAgent类,用于客户端不是IE时调用的类  
    class otherAgent extends baseAgent  
    {  
        function PrintPage()  
        {  
            return "当前浏览器不是IE!";  
        }  
    }  
    //判断并创建不同的对象类型,对象名为$currPage  
    if(strstr($_SERVER["HTTP_USER_AGENT"], "IEAGENT"))  
    {  
        $currPage = new ieAgent();  
    }   
    else  
    {  
        $currPage = new otherAgent();  
    }  
    //输出  
    echo $currPage->PrintPage();  
?>  

约瑟夫环 的php递归实现

没有评论

2010 年 12 月 25 日 at 下午 4:10分类:PHP | WEB开发

<?php
/*
*约瑟夫环的问题
*已知n个人(以编号1,2,3,4....n分表表示),围坐在一张圆桌子周围。从编号为K的人开始报数,数到M的那个人
*出列;他的下一个人又从1开始报数,数到M的那个人又出列,依此规律下去,直到圆桌周围的人全部出列。
*求出最后一个出列的人的编号是多少?
*/
function killMonkey($monkeys , $m , $current = 0)
{
	$number = count($monkeys);
	$num = 1;		//这是个计数器
	if(count($monkeys) == 1){		//如果该数组只有一个了,那么数据处理完毕了
		echo "最后被剔除的编号是:".$monkeys[0]."<br />";
		return;
	}
	else
	{
		/*
			这里是关键的部分
		*/
		while($num < $m){
			$current++ ;		//当前的位置向前移一位
			$current = $current%$number;	//这样子处理,是为了使得当前要处理的数据的编号永远在这个数组的编号范围内
			$num ++;
		}
		echo "现在是编号为   <font color='red'>".$monkeys[$current]."</font>   的被踢掉了<br/>";
		array_splice($monkeys , $current , 1);		//把数组的一部分去掉
		killMonkey($monkeys , $m , $current);		//递归调用
	}
}
$monkeys = range(0,25);
unset($monkeys['0']);
$m = 5;
killMonkey($monkeys , $m);
?>

vi使用手册

没有评论

2010 年 12 月 24 日 at 下午 9:26分类:Linux

进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename :打开多个文件,依次编辑

其它模式==>普通模式
Esc
普通模式==>插入模式
i 在光标前插入,I : 在行首插入
a 在光标后插入, A : 在行末插入
o 在当前行之下新建行, O : 在当前行之上新建行
r 替换当前字符, R : 从当前字符开始替换
普通模式==>命令模式
:
普通模式==>可视模式
v 可视模式
V 可视行模式
可视块模式

移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字j至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行

删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令 :
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指
定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行

linux下用户间通讯命令

没有评论

2010 年 12 月 23 日 at 下午 4:46分类:Linux

一、使用wall进行广播式消息传送 (用于开会或者,通知系统要维护时候通知广播之用)
  使用wall命令可以向所有用户广播通知信息,而所有登录系统的用户都可收到该消息。
wall命令有以下几种格式:
  wall
  wall filename
  wall “System will be down for maintenance a few points to notify all!”
二、使用talk进行双方对话
  talk命令允许双方实现类似于MSN、QQ这样的实时对话,其命令格式如下:
  talk user-name
  当用户向另一用户发送对话请求,只有在对方同意接受对话请求,即对方也使用talk命令后,双方的对话才会建立。这时双方终端上都会显示“[connect established]”,这样双方就可以从键盘输入文字,talk会把这些输入显示在对方的屏幕上,若任意一方按键就会退出对话状态。

三、使用write发送消息
  使用write命令可以向任何已登录同一系统的另一位用户发送消息,这时在对方用户终端上就会自动显示出信息,而对方也同样可以使用write 命令来回复消息,这样双方之间就能互相通信了。
  write命令的格式如下:
  write username
  此处user-name是将要与之通信的用户名,可以使用who 命令来查看系统中已登陆的用户名。输入write命令后,即可进入发送消息状态,这时就可以通过键盘输入消息,回车即可向对方发送此条消息了。要想退出发送消息状态,可以使用“Ctrl + d”退出write 命令回到shell。
  
四、使用mesg允许或拒绝接收消息
  当一位用户正在全身心的投入某项工作的时候,可能会不想被另外一位用户用上述方式突然发送来的消息打断思路,那么就可使用mesg命令来设置是否允许接收由其它用户发来的信息。
  mesg命令的格式如下:
  mesg –n
  或
  mesg -y