马哥教育网络班20期+第6周课程练习

请详细总结vim编辑器的使用并完成以下练习题

vim三种模式:

用法:vim [option…] FILE

编辑模式:

    字符跳转:

        h:向左移动一个字符

        j:向下移动

        k:向上移动

        l:向右移动

        w:跳转至下一个单词词首

        b:当前或上一个单词词首

        e:跳转至下一个单词词尾

        ^:跳转至行首的第一个非空白字符

        0:跳转至行首

        $:跳转至行尾

        G:跳转至文档尾部

      注:以上跳转(除^、0、$)均可在前面加上数字表示跳转数量:如5l表示跳转至下5个字符

    删除:

         x:删除单个字符,配合#x可以删除指定个数字符

         d: 删除命令,可结合光标跳转字符,实现范围删除;

         dd: 删除光标所在的行,#dd:多行删除;

    复制粘贴:

         y:用法同d类似

    替换:

         r:直接进行替换

       可视化模式:

            v: 按字符选定

            V:按行行定

       撤消此前的编辑:

            u(undo):撤消此前的操作;

            #u: 撤消指定次数的操作;

       撤消此前的撤消:

            Ctrl+r

       翻屏操作:

            Ctrl+f: 向文件尾部翻一屏;

            Ctrl+b: 向文件首部翻一屏;

            Ctrl+d: 向文件尾部翻半屏;

            Ctrl+u:向文件首部翻半屏;

输入模式:

  从编辑模式切换至输入模式:

     i: 在光标所在处输入;

     I:在当前光标所在行的行首输入;

     a: 在光标所在处后面输入;

     A:在当前光标所在行的行尾输入;

     o: 在当前光标所在行的下方打开一个新行;

     O:在当前光标所在行的上方打开一个新行;

    ESC从输入模式退出至编辑模式

末行模式:

 在编辑模式下输入:即可切换至末行模式,ESC可退出末行模式进入编辑模式

    (1) 地址定界:start,end

      #: 具体第#行;

      #,#: 从左侧#表示行起始,到右侧#表示行结尾;

      #,+#: 从左侧#表示的行起始,加上右侧#表示的行数;

      .: 当前行

      $: 最后一行

      %:全文, 相当于1,$

      /pat1/,/pat2/:从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束;

      w /PATH/TO/SOMEWHERE: 将范围内的行另存至指定文件中;

      r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容;

    (2) 查找

      /PATTERN:从当前光标所在处向文件尾部查找;

      ?PATTERN:从当前光标所在处向文件首部查找;

      n:与命令同方向;

      N:与命令反方向;

    (3) 查找并替换

      s: 在末行模式下完成查找替换操作

      s/要查找的内容/替换为的内容/修饰符

      要查找的内容:可使用模式

      替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;还可以使用“&”引用前                   面查找时查找到的整个内容;

      修饰符:

       i: 忽略大小写

       g: 全局替换;默认情况下,每一行只替换第一次出现;

      查找替换中的分隔符/可替换为其它字符,例如s@@@、s###

    多文件模式:

     vim FILE1 FILE2 FILE3 …

      :next 下一个

      :prev 前一个

      :first 第一个

      :last 最后一个   

      :qall 退出所有

      :wall 保存所有

    窗口分隔模式:

     vim -o|-O FILE1 FILE2 …

      -o: 水平分割

      -O: 垂直分割

     在窗口间切换:Ctrl+w, Arrow

    单文件窗口分割:

 Ctrl+w,s: split, 水平分割

 Ctrl+w,v: vertical, 垂直分割

1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;

[root@localhost ~]# sed 's@\(^[[:space:]]\+\)@#\1@g' /tmp/rc.sysinit

2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;

[root@localhost ~]# sed 's/^[[:space:]]\+//g' /tmp/grub.conf

3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符

[root@localhost ~]# sed 's/^#[[:space:]]\+//' /tmp/rc.sysinit 

4、为/tmp/grub.conf文件中前三行的行首加#号;

sed '1,3s/^/#/g' /tmp/grub.conf

5、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;

vim /etc/yum.repos.d/CentOS-Media.repo  修改

6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202

* */4 * * * cp -a /etc/* /backup/etc-`date +%Y%m%d%H%M`

7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402

* * * * 2,4,6 cp -a /var/log/messages /backup/messages_logs/messages-`date +%Y%m%d`

8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中

* */2 * * * grep "^S" /proc/meminfo >> /stats/memory.txt

9、工作日的工作时间内,每两小时执行一次echo "howdy"

* 8-18/2 * * * echo "howdy"

脚本编程练习

10、创建目录/tmp/testdir-当前日期时间;

#!/bin/bash
#
mkdir /tmp/testdir-$(date +%F)

11、在此目录创建100个空文件:file1-file100

#/bin/bash
#
for i in {1..100};do
  touch /tmp/testdir-2016-07-16/file$i
  let i+=1
done

12、显示/etc/passwd文件中位于第偶数行的用户的用户名;

#!/bin/bash
#
i=0
l=$(wc -l /etc/passwd | cut -d" " -f1)
while (( $i <= l )); do
        cat -n /etc/passwd | grep "^[[:space:]]\+$i\>" | awk '{print $2}' | awk -F: '{print $1}'
        let i+=2
done

13、创建10用户user10-user19;密码同用户名;

#/bin/bash
#
for i in {10..19};do
  id user$i &>/dev/null && echo "the user is exists" || useradd user$i && echo "user$i" |passwd --stdin user$i &>/dev/null
  let i+=1
done

14、在/tmp/创建10个空文件file10-file19;

 

#/bin/bash
#
for i in {10..19};do
    if [ -e /tmp/file$i ];then
      echo "file$i exist."
    else touch /tmp/file$i
    fi
    let i+=1
done

15、把file10的属主和属组改为user10,依次类推。

#/bin/bash
#
for i in {10..19};do
    if [ -e /tmp/file$i ];then
      chown user$i:user$i /tmp/file$i
    else echo "no such file."
    fi
    let i+=1
done

原创文章,作者:dcstrike,如若转载,请注明出处:http://www.178linux.com/23921

(0)
dcstrikedcstrike
上一篇 2016-07-22 10:11
下一篇 2016-07-22 10:11

相关推荐

  • 轻松实现源码打包安装[原创]

    通常我们在Linux/Unix下安装一平台时往往需要十几甚至更多安装包,这些源码包来源于网络、本地硬盘、移动设备。有时碰到网络不畅通或下载地址失效会带来很多麻烦,一个好方法便是将常用的软件包下载到本地硬盘存放。问题是久而久之连自己都不晓得哪些包才是适用的。现用makeself来实现自解压倒安装倒是一个很好的解决方案,下面以制作Func客户端安装包为例。 一、…

    Linux干货 2015-03-27
  • httpd服务归纳:浅谈I/O模型

    1. 四种理论的I/O模型      1) 调用者(服务进程):         阻塞:  进程发起I/O调用,如果调用为完成,进程被挂起休眠,不能再执行其他功能    …

    Linux干货 2015-05-27
  • 程序员的相关笑话(二)

    从前,有一个牧羊人,他有很多的羊。一天他赶着他的那群羊到了一条公路边上。突然,有一辆保时洁急驶过来,上面坐着一个年轻人人,穿着Armani的衣服,和Cerutti的皮鞋,Ray-Ban的太阳眼镜,TAG-Heuer的手表,以前Versace的领带。 他走到牧羊人面前问牧羊人:“如果我能说出你有多少只羊,你能给我一只吗?” 牧羊人看了看他那一大群数都数不过来的…

    Linux干货 2016-07-10
  • httpd服务归纳:httpd基本配置(https原理以及配置 )

    一 https介绍以及实现机制   1. https协议:      在传统的http协议中,文档是明文传送的,网页涉及敏感信息是,将变得很不安全。为了保证敏感信息的安全,httpd结合加密库openssl或openssh 产生了https 协议。这就好比两个黑社会团伙交易,都怕出事被抓,…

    Linux干货 2015-05-23
  • C语言的整型溢出问题

    整型溢出有点老生常谈了,bla, bla, bla… 但似乎没有引起多少人的重视。整型溢出会有可能导致缓冲区溢出,缓冲区溢出会导致各种黑客攻击,比如最近OpenSSL的heartbleed事件,就是一个buffer overread的事件。在这里写下这篇文章,希望大家都了解一下整型溢出,编译器的行为,以及如何防范,以写出更安全的代码。 什么是整型溢出 C语言…

    Linux干货 2016-06-03
  • 使用ssh比较慢的小结

    1)情况说明 a、ping ip,响应正常 b、telnet ip,响应正常 c、ssh ip,响应慢,但是等很大会后还是能打开 2)处理方法 方法1: 修改本地中的/etc/ssh/ssh_config,把参数改为GSSAPIAuthentication no 方法2: a、修改远程服务器端的/etc/ssh/sshd_config ,把参数改为GSSAP…

    系统运维 2016-12-05

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-22 10:35

    写的很好,排版也很棒,可以尝试自己画一个思维导图来总结vim,第5题自己有没有感觉有点low?加油