Linux (八) 进程和 Vim

Linux进程和vim

  • 进程
    • 进程概述
    • 如何查看进程
    • 进程管理
    • 系统资源监控
    • 任务管理
  • vim
    • vim命令介绍
    • 用途
    • 三种模式
    • vim的操作

一 、 进程

a、进程概述

  1. 什么是进程?
    1. 是程序的具体实现,执行程序的具体过程。
  2. 操作系统与进程对比window系统进程
    1. 操作系统的一个重要功能就是为进程提供方便,比如启动进程、为进程分配内存空间、管理进程的相关信息等等。
  3. 如何产生进程?

    1. 执行或启动一个程序就可以启动一个进程 。
    2. 进程启动时 , 操作系统会为其自耦东分配一个系统内唯一的进程ID(PID)
    3. 示例

      Linux启动的第一个进程 
      [root@localhost ~]# pidof init
      1  
      进程演示
      [root@localhost ~]# ps  a
      vim install.log 
      图像界面新开一个Terminal#vim install.log
      
    4. 程序被加载为进程示意图

b、 如何查看进程

  1. 进程查看命令

    ps(process status) :将某个时间点的程序运作情况截取下来 
    
    选项和参数
    a :(all)(和输入终端(terminal) 关联的所有 process,通常与x一起使用,列出完整信息。
    x :后台进程,通常与 a 这个参数一起使用,可列出较完整信息
    u :有效使用者 (effective user) 相关的 process  
    
  2. 常用的进程查看命令

    1. ps -aux 观察系统在当前时间所有的程序数据
    2. ps -axjf 使用类似树状的形式展示当前时间下系统的所有程序数据
    3. 参数不用背 , 推荐使用时查阅linux命令大全
    4. 示例

      [root@root ~]# ps -aux | head -4  #查看当前时间下系统的前4条程序数据
      Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
      USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      root          1  0.3  0.1  19364  1532 ?        Ss   18:21   0:03 /sbin/init
      root          2  0.0  0.0      0     0 ?        S    18:21   0:00 [kthreadd]
      root          3  0.0  0.0      0     0 ?        S    18:21   0:00 [migration/0]
      
  3. 以下为各选项的含义:

    USER:该 process 属于那个使用者
    PID :该 process 的程序标识符。 
    %CPU:该 process 使用掉的 CPU 资源百分比; 
    %MEM:该 process 所占用的物理内存百分比; 
    VSZ :该 process 使用掉的虚拟内存量 (Kbytes) 
    RSS :该 process 占用的物理的内存量 (Kbytes) 
    TTY :该 process 是在哪个终端机上面运作,若与终端机无关则显示 ?, 另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 (pts表示虚拟终端,例如pts/1  pts/2 等)
    STAT:该进程目前的状态,状态显示与ps -l 的 S 旗标相同 (R/S/D/T/Z) 
    START:该 process 被触发启动的时间; 
    TIME :该 process 实际使用 CPU 运作的时间。 
    COMMAND:该程序的实际命令  
    
  4. Linux进程状态

    D 不可中断 Uninterruptible(usually IO)
    R 正在运行,或在队列中的进程
    S 处于休眠状态
    T 停止或被追踪
    Z 僵尸进程
    W 进入内存交换(从内核2.6开始无效)
    X   死掉的进程
    < 高优先级
    N   低优先级
    s   包含子进程
    +  位于后台的进程组
    
  5. 僵尸进程

    1. 通常造成僵尸进程的原因是该进程应该已经执行完毕,或者是因故障应该要终止, 但该进程的父进程却无法完整、有效的将进程结束掉,而造成进程一直存在内存当中 。
  6. top动态观察进程的变化

    1. ps是截取某一时间点的状态 , 而top是持续观察进程在一段时间内的状态
    2. 选项与参数

      -d :后面可以接秒数,就是整个程序画面更新的秒数。默认5秒;  
      -b :以批次的方式执行 top ,还有更多的参数可以使用,通常会搭配数据流 重导向来将批次的结果输出成为档案; 
      -n:(Number)与 -b 搭配,意义是需要进行几次 top 的输出结果; 
      -p :指定某些个 PID 来进行观察监测而已; 
      
    3. 使用数据流的方式记录一段时间内程序数据的变化

      top -b -n 5 > a.log    //将一段时间内的进程变换状态写出到a.log文件中 , 后续可以使用vim或者cat a.log查看
      
    4. 在top执行过程中可以使用的按键命令:

      ? :显示在 top 当中可以输入的按键指令 
      P :以CPU的使用资源排序显示 
      M :以Memory的使用资源排序显示 
      N :以PID来排序 
      T :由该Process使用的CPU时间累积 (TIME+) 排序
      k :给予某个PID后kill该进程(内核2.6后失效)
      q :离开top软件的按键 。
      
    5. 示例 top -d 1

      [root@root ~]# top -d 1
      top - 19:56:00 up  1:34,  4 users,  load average: 0.01, 0.01, 0.00
      Tasks:  83 total,   1 running,  82 sleeping,   0 stopped,   0 zombie
      Cpu(s):  0.0%us,  1.0%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
      Mem:   1004412k total,   165588k used,   838824k free,     9828k buffers
      Swap:  2097144k total,        0k used,  2097144k free,    47180k cached
      
         PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                       
        1474 root      20   0 98.0m 4052 3068 S  1.0  0.4   0:01.91 sshd                           
        1497 root      20   0 15028 1212  960 R  1.0  0.1   0:01.11 top                            
           1 root      20   0 19364 1532 1228 S  0.0  0.2   0:03.44 init                           
           2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd                       
           3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                    
           4 root      20   0     0    0    0 S  0.0  0.0   0:00.17 ksoftirqd/0                    
           5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                    
           6 root      RT   0     0    0    0 S  0.0  0.0   0:11.03 watchdog/0                     
           7 root      20   0     0    0    0 S  0.0  0.0   0:12.11 events/0                       
           8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup                         
           9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper                        
          10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns                          
          11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr                      
          12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm                             
          13 root      20   0     0    0    0 S  0.0  0.0   0:00.08 sync_supers                    
          14 root      20   0     0    0    0 S  0.0  0.0   0:00.11 bdi-default                    
          15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0                  
          16 root      20   0     0    0    0 S  0.0  0.0   0:00.33 kblockd/0                      
          17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpid                         
          18 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify                   
          19 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_hotplug                  
          20 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_aux                        
          21 root      20   0     0    0    0 S  0.0  0.0   0:00.01 ata_sff/0                      
          22 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksuspend_usbd                  
          23 root      20   0     0    0    0 S  0.0  0.0   0:00.02 khubd                          
          24 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kseriod                        
          25 root      20   0     0    0    0 S  0.0  0.0   0:00.00 md/0                           
          26 root      20   0     0    0    0 S  0.0  0.0   0:00.00 md_misc/0
      
      第一行显示的信息:目前的时间,开机到目前为止所经过的时间 up 13min,已经登入系统的用户人数 1 user,系统在 1, 5, 15 分钟的平均工作负载 
       显示的是目前进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie) 
      第三行显示CPU的整体负载 
      第四行和第五行表示目前的物理内存与虚拟内存使用情况
      
      每个 process使用的资源情况; PID :每个process的ID; USER:该process所属的使用者; PR :Priority 的简写,程序的优先执行顺序,越小越早被执行;
      NI :Nice 的简写,与 Priority(优先级) 有关,也是越小越早被执行; 
      %CPU:CPU 的使用率%MEM:内存的使用率; 
      TIME+:CPU 使用时间的累加;   COMMAND 进程名称
      
      top默认使用CPU使用率(%CPU)作为排序的重点,如果想 要使用内存使用率排序,则可以按下M, 若要恢复则按下P 即可。
      将top信息进行3次并输出到文件中 
       [root@root ~]# top -b -n  3  > /tmp/top.txt 。
      查看top.txt文件[root@root tmp]# cat top.txt
      
    6. pstree查看进程树

      1. 选项与参数

        -A :各程序树之间的连接以 ASCII 字符来连接; 
        -U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下 可能会有乱码; 
        -p :并同时列出每个 process 的 PID; 
        -u :并同时列出每个 process 的所属账号名称。 
        

c、进程管理

  1. kill发送信号(并不只是杀死进程)

    1. 选项与参数

      -l :这个是 L 的小写,列出目前 kill 能够使用的信号 (signal) 有哪些? signal :向进程发送的信号,指示其进行不同操作。用 man 7 signal 可知: 
      -15:以正常的程序方式终止一个进程!!!;
      -9 :立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程)
      -2 :代表由键盘输入 [ctrl]-c 同样的动作; 
      -1 :对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程; !!
      
    2. 示例

      1. 杀死sshd进程

        1. 查看进程ID

          [root@root ~]# ps -aux | grep sshd
          Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
          root       1137  0.0  0.1  66604  1188 ?        Ss   18:22   0:00 /usr/sbin/sshd
          root       1394  0.0  0.4 100352  4036 ?        Ss   18:35   0:00 sshd: root@pts/0 
          root       1449  0.0  0.4 100352  4040 ?        Ss   19:32   0:01 sshd: root@pts/1 
          root       1474  0.2  0.4 100352  4052 ?        Ss   19:53   0:01 sshd: root@pts/2 
          root       1515  0.0  0.0 103256   836 pts/2    S+   20:09   0:00 grep sshd
          
        2. 通过kill杀死某一进程

          [root@root ~]# kill 1474
          Connection closed by foreign host.
          
        3. 通过killall杀死某一程序的全部进程

          [root@root ~]# killall -9 sshd
          

d、 系统资源监控

  1. 系统资源监控命令

    free :观察内存(memory)使用情况
    uname:查阅系统与核心相关信息
    uptime:观察系统启动时间与工作负载
    netstat :网络监控
    vmstat :侦测系统资源变化, CPU/内存/磁盘输入输出状态
    
  2. free : 观察内存使用情况

    1. 选项与参数

      -b :直接输入 free 时,显示的单位是 bytes,我们可以使用 b(bytes), m(Mbytes),k(Kbytes), 及 g(Gbytes) 来定义显示单位 
      -t :在输出的最终结果时,显示物理内存与 swap 的总量。
      
    2. 示例

      [root@root ~]# free
                   total       used       free     shared    buffers     cached
      Mem:       1004412     159540     844872          0       8704      46360
      -/+ buffers/cache:     104476     899936
      Swap:      2097144          0    2097144
      
      Mem一行显示的是物理内存的量 
      Swap,虚拟内存的量 
      total是总量,used是已被使用的量,free则是剩余可用的量 
      shared,共享内存 
      buffers,将写磁盘的内容 
      cached,已写磁盘或者已从磁盘读出的内容  。
      
  3. uname : 查阅系统与核心相关

    1. 选项与参数

      -a :所有系统相关的信息,包括以下的数据都会被列出来; 
      -s :系统内核名称 
      -r :内核版本 
      -m :本系统的硬件名称,例如 i686或x86_64 等; 
      -p :CPU 的类型,与 -m 类似,是显示的是CPU的类型; 
      -i :硬件的平台(ix86); 。
      
  4. uptime :显示目前系统当前时间、已经开机多长的时间,用户数、以及 1, 5, 15 分钟的平均负载。
  5. netstat: 网络监控

    1. 选项与参数:

      -a :将目前系统上所有的已经连接、监听、Socket数据都列出来 
       -t :列出tcp网络包的信息 
      -u :列出udp网络包的信息 
      -n :以端口(port number)方式来显示(不以程序的服务名称) 
      -l :列出目前正在监听(listen)的服务; 
      -p :列出该网络服务的进程id(PID)
      
    2. 命令选项显示解析

      netstat命令选项显示解析
      Proto :网络的封包协议,主要分为TCP与UDP封包; 
      Recv-Q:接收消息缓存区,远端进程发送而来,尚未被当前进程处理 的信息数,单位:字节; 
      Send-Q:发送消息缓存区,向远端进程发送,尚未被其接收的消息数 ,单位:字节;     
      Local Address ; 
      Foreign Address:与当前进:本端网络地址(IP:port)程进行行通信的远程进程的网络地址(
           IP:port)(远程通信主机); 
      State :网络连接状态,主要有建立(ESTABLISED)及监听(LISTEN); 
      PID/Program name:显示 此服务的PID号码以及程序的命令名称 
           目前系统上已在监听的网络链接以及PID
      
  6. 补充: 防火墙的启动 、 关闭 、 状态查看

    service iptables start   开启防火墙
    service iptables restart 重启防火墙
    service iptables stop 关闭防火墙
    service iptables status 查看防火墙状态
    
    但是以上都是暂时性的改变防火墙状态 , 重启服务器之后会恢复原有状态
    chkconfig iptables off 永久关闭防火墙
    chkconfig iptables on 永久开启防火墙
    
  7. vmstat : 侦测系统资源的变化 , 动态的了解系统资源的运作 , CPU、内存 、 磁盘的输入输出状态

    1. 选项与参数:

      -a :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息; 
      -f :开机到目前为止,系统复制 (fork) 的进程数; 
      -s :将一些事件 (开机至目前为止) 导致的内存变化情况列表说明; 
      -S :后面可以接单位,让显示的数据有单位。例如 K/M 取代 bytes 的容量 ; 
      -d :列出磁盘的读写总量统计表 
      -p :后面列出磁盘分区,可显示该磁盘分区的读写总量统计 
      
    2. 示例

      1. 统计目前主机cpu状态 , 每秒1次 , 共计4次

        [root@root ~]# vmstat 1 4
        procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
         r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
         1  0      0 844516   8892  46436    0    0    47     2   51   28  1  3 95  1  0    
         0  0      0 844468   8892  46436    0    0     0     0   17   14  0  2 98  0  0    
         0  0      0 844468   8892  46436    0    0     0     0   19   12  0  0 100  0  0   
         0  0      0 844468   8892  46436    0    0     0     0   19   14  0  1 99  0  0    
        
    3. 显示解析

      procs(进程字段 )
           r :等待运行的进程数量; 
           b:不可被唤醒的进程数量 
           这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒) 
      memory (内存字段) 
           swpd:虚拟内存被使用的容量; 
           free:未被使用的内存容量;
           buff/cache:用于缓冲的内存; 
      swap(交换分区字段)  (重点记忆下si和so)
           si:每秒从交换分区写到内存的数据量大小,由磁盘->内存; 
           so:每秒写入交换分区的内存数据量大小,由内存->磁盘。 
           如果si/so的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差  
      io(磁盘读写字段) 
           bi:从块设备读入数据的总量(读磁盘)(每秒kb); 
           bo:块设备写入数据的总量(写磁盘)(每秒kb) 。
           如果这部份的值越高,代表系统的I/O非常忙碌 
      system(系统字段 )
           in:每秒被中断的进程次数; 
           cs:每秒钟进行的事件切换次数。 
          这两个数值越大,代表系统与接口设备的通信非常频繁
      CPU (cpu字段) 
           us:(user)非内核态的(用户进程) CPU 使用情况; 
           sy:(system)内核态所使用(系统进程)的 CPU 情况; 
           id: (idle )闲置的CPU情况; 
           wa: (wait)等待I/O所耗费的CPU; 
           st:被虚拟机(virtual machine)所盗用的CPU(2.6.11 以后才支持)
      

e、 任务管理

  1. 登录bash之后,就会取得一个名为bash的进程(它有自己的PID)了。在这个环境中所执行的其他指令,几乎都是所谓的子进程。
  2. 思考: 在Windows中我们经常会执行多个任务,例如打开qq和音乐。那么在经过几天的学习后,我们发现Linux的命令行窗口只能做一个任务,比如我们用vim编辑1.txt的时候无法去编辑2.txt (假设说存在)。但我们又需要执行这么一个操作的时候怎么办?Linux能不能让某一个程序在执行的时候在后台运行呢?
  3. 任务管理概念 :
    1. 前台
      1. 可以控制与执行的bash环境称为前台进程
    2. 后台
      1. 在操作系统中自动运行 , 无法使用ctrl+c终止 , 可使用bg 、fg命令操作的任务 , 可以通过jobs命令查看后台执行的任务
      2. 在一般情况下 , 可以通过ctrl+z将当前进程放置后台执行
  4. 在当前bash执行多个任务

    1. 如: 我们需要复制一个很大的文件 , 和对另一个文件执行编译操作 时 , 可以让某一任务在后台执行

      比如:cp file1 file2 & 
          重点在以上的这个“&”符号,他表示将file1这个文件复制为file2,同时将这个拷贝进程放到后台执行。 
          也就是说执行这一个命令之后,在这一个终端仍然可以做其他的工作。拷贝任务执行完成后,系统将会在终端显示完成的消息。 
      
    2. ctrl+z 与&的区别
      1. ctrl+z 将当前的程序放置后台 , 状态为暂停
      2. 在执行的命令后加& 使该任务在后台运行 , 状态为运行状态
    3. 示例

      [root@root ~]# vim anaconda-ks.cfg  #ctrl+z
      [1]+  Stopped                 vim anaconda-ks.cfg  
      说明: 
      在vim的一般模式下,按下[ctrl]+z,屏幕上会出现[1],表示这是第一个任务 
      +代表最近一个被放到后台的任务,且目前在后台预期会被取用的任务( 调用切换到前台命令时会第一个被调用到)
      Stopped使用[ctrl]+z放到后台的任务都是暂停状态 
      
  5. jobs命令观察后台任务

    1. 选项与参数

      -l :除了列出 job number 与指令串之外,同时列出 PID 的号码;  
      -r :仅列出正在后台 run 的任务; 
      -s :仅列出正在后台暂停 (stop) 的任务。 
      演示:
      [root@root ~]# jobs  #显示全部后台进程(不含PID)
      [root@root ~]# jobs –l#显示全部后台进程(含PID)
      [root@root ~]# jobs –r
      [root@root ~]# jobs -s 
      
  6. fg命令将后台暂停的任务提取到前台执行

    fg %jobnumber
    job number为任务号码(数字);%可有可无
    fg  1 将任务号为1的进程调到前台执行。
    +作用“表示当前的”,如果命令fg后面没有跟任务号,默认将带+的进程调到前台执行。-表示+号对应的进程被调前台后,“-”对应的进程立即变为“+”
    
  7. bg命令让任务在后台中变为执行状态

    bg 2 使后台中编号为2的程序变为执行状态
    
  8. 使用kill命令可以终止后台程序

    [root@root ~]#jobs -l
    [2]-  3716 Stopped (tty output)    vim install.log
    [3]+  3775 Stopped                 vim anaconda-ks.cfg
    [4]   3790 Running                 tail -f test &
     [root@root ~]#kill  -9  3775  #kill vim进程需要 -9
     [root@root ~]# jobs  -l
    [2]-  3716 Stopped (tty output)    vim install.log
    [3]+  3775 Killed                  vim anaconda-ks.cfg
    [4]   3790 Running                 tail -f test & 
    [root@root ~]#kill  3716   #缺省为 -15,发现vim进程kill不掉,需要强制执行。
    [root@root ~]#kill  3790 #普通进程是可以kill 掉的
    
  9. 脱机及注销后任务执行

    nohup 可以让你在脱机或注销后(比如exit退出当前shell),还能 够让工作继续进行 
    nohup [命令与参数] 在当前终端前台执行 
    nohup [命令与参数] & 在后台执行 
    [root@root ~]# nohup tail -F test &
    [1] 3877
    [root@root ~]# exit
    [root@root ~]# ps ax |grep tail
    3877 ?        S      0:00 tail -f test
    

二、 vim

a、 vim命令

  1. vim 介绍

    vim是一个类似vi的文本编辑器,不过在vi的基础上增加了很多新特性,vim被公认为类vi编辑器中最好用的一个。
    vim是vi发展出来的一个文本编辑器。编译及错误跳转等方便编程的功能丰富,在实际工作中被广泛使用。
    和Emacs并列称为类Unix系统用户最喜爱的编辑器。
    
  2. vim作用

    所有的Linux系统都会内建vi文本编辑器,其他的文本编辑器则不一定存在。
    很多软件的编辑接口都会主动调用vi,例如visudo、crontab等
    vim可视为vi的高级版本。
    vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序开发。
    
  3. vim的三种模式

    一般模式
    以vim打开一个文件就直接进入一般模式(默认模式)
    可以使用上下左右移动光标来移动,也可以使用删除字符或删除整行来处理文件内容,也可以使用复制、粘贴来处理文件数据。但无法任意编辑文件内容。比如说:我想写一个123。
    编辑模式
    在一般模式中可以删除、复制、粘贴等,按下i、I、o、O、a、A、r(快速替换)、R等任何一个字母后进入编辑模式。并在左下方出现INSERT或REPLACE。
    该模式下可以输入文件内容。
    按下返回一般模式。
    命令模式
    在一般模式当中,输入:/?三个字符中的任何一个按钮,就可以将光标移动到最下面那一行。
    在这个模式当中,可以提供查询、替换等功能。同时存盘(保存)、离开vi、显示行号等等命令都是在此模式进行。 
    
  4. 一般模式快捷键

    h或     光标左移一个字符。如果是20h,表示左移20个字符。
    j或      光标下移一个字符   同上
    k或      光标上移一个字符   同上
    l或      光标右移一个字符   同上
    [Ctrl]+[f]屏幕向下移动一页   Page Down!!
    [Ctrl]+[b]屏幕向上移动一页  Page Up !!
    0或[Home]移动到此行最前面字符处!!
    $或[End]移到光标所在行的行尾!!
    H 光标移到当前屏幕最上方行的第一个字符!!
    M光标移到当前屏幕中间行的第一个字符!!
    L光标移动到当前屏幕最下方行第一个字符!!
    G移到此文件最后一行!!!
    nG移到第n行
    gg相当于1G,即移到第一行!!!
    n[Enter]光标下移n行
    /word向下查找单词“word”(!!!)
    ?word向上查找单词“word”(!!!)
    n表示重复前一个查找操作
    N与n相反(反向查找)
    替换
    :s/word1/word2/g 在当前行将word1替换成word2(!!)
    :%s/word1/word2/g 在当前文件将word1替换成word2(!!)
    :n1,n2s/word1/word2/g在n1到n2行查找word1替换成word2 (n1、n2为数字) 
    :1,$ s/word1/word2/g从第一行到最后一行查找word1替换成word2
    :%s/word1/word2/gc同上,在替换前确认是否替换。(!!!)只能单行确认,需要逐步确认。
    删除
    x向后删除一个字符
    nx向后删除n个字符(n为数字)
    X向前删除一个字符
    dd删除光标所在行(!!!)
    ndd删除光标所在行以下n行(n为数字,包含当前行在内)
    d1G删除光标所在行到第一行所有数据(包括所在的行)
    dG删除光标所在行到最后一行(!!)
    d$或d end删除光标所在处到同行最后一个字符(!!)
    d0或d home删除光标所在处到同行第一个字符。(!!)
    复制
    yy复制光标所在行(!!)
    nyy复制光标所在向下n行(n为数字)
    y1G复制光标所在行到第一行所有数据
    yG复制光标所在行到最后一行所有数据
    y$复制光标所在处到同行最后一个字符
    y0复制光标所在处到同行第一个字符
    p将已复制的数据粘贴到光标所在下一行
    P将已复制的数据粘贴到光标所在上一行
    复原
    u复原前一个操作(类似于windows中的ctrl+z)!!!
    
  5. 编辑模式快捷键

    一般模式 -> 编辑模式切换
    i从光标所在处插入(!!!)
    I从所在行第一个非空白字符处插入(!!)
    a从光标所在下一个字符处插入
    A从光标所在行最后一个字符处插入(!!)
    o在光标所在处下一行插入新的一行(!!)
    O在光标所在处上一行插入新的一行(!!)
    r替换光标所在处字符一次
    R一直替换光标所在处文字直到按下Esc(!!!)
    
  6. 命令模式快捷键

    :w [filename] 另存为filename
    :r [filename] 读取filename指定文件中的内容到光标所在的行。
    :n1,n2 w [filename] 将n1到n2行另存为filename
    :! command 临时切换到命令行模式下执行command命令。 
         例如 “:!find / -name Helllo.java”即可在vim当中查看/home下面以ls输出的文件信息。
    :wq  保存后离开
    :q  不保存离开(未改可以离开,如果修改了需要q!强制离开)
    :q!  不保存离开
    :set nu 显示行号
    :set nonu 取消显示行号
    

你可能感兴趣的:(Linux)