网络班N22期第六周博客作业

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

打开文件: ~]# vim [options] [file ..]
      +#:打开文件后,直接让光标处于第#行
      +/PARTTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行
vim有三种模式,分别为:编辑模式(默认打开就是此模式)、输入模式、末行模式
模式转换:
    编辑模式(默认打开模式)-->输入模式,按ESC键退回编辑模式
     按i键,在光标所在处输入
       按o键,在光标所在处的下方新打开一行
       按a键:在光标所在处的后方输入
       按I:在光标所在处的行首输入
       按A:在光标所在行的行尾输入
       按O:在光标所在处的上方打开一个新行
     编辑模式-->末行模式(命令模式,vim内置的命令行),按:键,按ESC退回编辑模式
关闭文件:
      ZZ:保存退出
      :q:退出,q!,强制退出
      :wq:保存退出
      :x:保存并退出
      :w /PATH/TO/FILE :另存为
      :r /PATH/FROM/FILE:将指定的文件中的文本读取并插入至指定位置
光标跳转:
         字符间跳转:
              h,l:左,右
              j,k:下,上。(h,l,j,k)#:一次跳转指定#个字符
         单词间跳转
              w:下一个单词的词首
              e:下一个单词的词尾
              b:当前或前一个单词的词首,(w,e,b)#:跳转#指定个单词
         行首行尾跳转
              ^:跳转至行首的第一个非空白字符
              0:跳转至行首
              $:跳转至行尾
         行间跳转
              #G:跳转至#指定的行,跳转至最后一行,G
              gg:跳转至第1行,或 1G
         句间跳转
              )
              (
         段间跳转
              }
              {
 翻屏:
         Ctrl+f:向文件尾部翻一屏
         Ctrl+b:向文件首部翻一屏
         Ctrl+d:向文件尾部翻半屏
         Ctrl+u:向文件首部翻半屏
         Enter:按行向后翻
编辑命令:
         字符编辑
               x:删除光标所在处的单个字符,#x:删除光标所在处起始的#个字符
               xp:交换光标所在处的字符与其后面的字符的位置
         替换命令
               r:替换光标所在处的字符,rCHAR,替换成指定的字符
         删除命令
               d:删除命令,可结合光标跳转符实现范围删除
               d$:删除光标所在处至行尾之间的字符
               d^:删除光标所在处至行首之间的字符
               dw:向后删除一个单词
               db:向前删一个单词
               de:通dw
               dd:删除光标所在处的整行,或者#dd,删除#指定的多少行
         粘贴命令
               p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
               P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;
         复制命令
               y:复制,相似于d命令
               y$
               y^
               ye
               yw
               yb
               yy:复制整行,#yy:复制#行
               cc:删除光标所在的行,并转换为输出模式
         可视化模式
               V:选择整行
               v:可选单个字符
         撤销操作
               u:撤销此前的操作
               #u:撤销此前的#个操作
               Ctrl+r:撤销此前的撤销
               . :重复执行前一个编辑操作(点号)
末行模式:
         地址定界
               #:特定的第#行,例如5即第5行
               #,#:指定行范围,左侧为起始行,右侧为结束行
               #,+#:指定行范围,左侧为起始行绝对行号,左侧为相对左侧行号的偏移量,例如,3,+7,从3行开始往后数7行
               .,$-1:
               1,$:
               %:全文
               /pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行
               /pat1/,/pat2/:从光标所在处起始,第一次由pat1所匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行,可以结合 d,y,c命令使用
         查找
               /PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串
               ?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串
                       n:下一个
                       N:上一个
         查找并替换:
               s:末行模式的命令,格式:s/要查找的内容/替换为的内容/修饰符
                      要查找的内容:可使用正则表达式
                      替换为的内容:不能使用正则表达式,但可以引用
                      如果“要查找的内容”部分在模式中使用分组符号:在“替换为的内容”中使用后向引用
                      直接引用查找模式匹配到的全部文本,要使用 &符号,例如:%s@\<t[[:alpha:]]\+\>@&er@g
               修饰符:
                      i:忽略大小写
                      g:全局替换 
多文件编辑功能:
         ~]# vim file1 file2
         在文件间切换
               :netxt 下一个
               :prev 上一个
               :first 第一个
               :last 最后一个
         退出所有文件
               :wqall,保存所有文件并退出
               :wall,保存所有文件
               :qall,退出所有文件
         多窗口
               -o:水平分割窗口
               -O:垂直分割窗口
                   单个文件分割窗口:Ctrl+w,s,水平分割,Ctrl+w,v,垂直分割窗口
定制vim特性
         在末行模式下的设定,仅对当前vim进程有效
         永久有效:
             全局:编辑/etc/vimrc
             个人:~/.vimrc
                1、行号,显示:set number,简写set nu;取消:set nonmber,简写set nonu
                2、括号匹配显示高亮,匹配:set showmatch,set sm;取消:set nosm
                3、自动缩进,启用:set ai ;禁用:set noai
                4、高亮搜索,启用:set hlsearch;禁用:set  nohlsearch
                5、语法高亮,启用:syntax on;禁用:syntax  off
                6、忽略字符大小写,启用:set  ic;禁用:set  noic
                获取帮助:
                  :help,或者:help subject,例如:help  set

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

[root@bogon job]# sed 's@^[[:space:]]\+@#@;w /tmp/rc.sysinit2' /etc/rc.d/rc.sysinit
[root@bogon job]# head -20 /tmp/rc.sysinit2
#!/bin/bash
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's bcheckrc.
#
HOSTNAME=$(/bin/hostname)
set -m
if [ -f /etc/sysconfig/network ]; then
#. /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
#HOSTNAME=localhost
fi
if [ ! -e /proc/mounts ]; then
#mount -n -t proc /proc /proc


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

[root@bogon job]# sed 's@^[[:space:]]\+@@;w /tmp/grub.conf' /boot/grub/grub.conf 
# grub.conf generated by anaconda
# #
# # Note that you do not have to rerun grub after making changes to this file
# # NOTICE:  You have a /boot partition.  This means that
# #          all kernel and initrd paths are relative to /boot/, eg.
# #          root (hd0,0)
# #          kernel /vmlinuz-version ro root=/dev/mapper/vg_cactiezv10-LogVol00
# #          initrd /initrd-[generic-]version.img
# #boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CactiEZ (2.6.32-71.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/mapper/vg_cactiezv10-LogVol00 rd_LVM_LV=vg_cactiezv10/LogVol00 rd_LVM_LV=vg_cactiezv10/LogVol01 rd_NO_LUKS rd_NO_MD rd_NO_DM.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
initrd /initramfs-2.6.32-71.el6.x86_64.img
[root@bogon job]# ls /tmp/grub.conf 
/tmp/grub.conf


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

[root@bogon job]# sed -i 's@^#[[:space:]]\+@@' /tmp/rc.sysinit
[root@bogon job]# head /tmp/rc.sysinit 
#!/bin/bash
#
/etc/rc.d/rc.sysinit - run once at boot time
#
Taken in part from Miquel van Smoorenburg's bcheckrc.
#
HOSTNAME=$(/bin/hostname)
set -m


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

1、[root@bogon job]# vim /tmp/grub.conf
2、在vim末行模式下输入1,3s@^[^[:space:]]\+@#&@g
3、
[root@bogon job]# head -3 /tmp/grub.conf 
## grub.conf generated by anaconda
## #
## # Note that you do not have to rerun grub after making changes to this file


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

1、[root@bogon job]# vim /etc/yum.repos.d/CentOS-Media.repo
2、在vim末行模式下输入 %s@\(enabled\|gpgcheck\)=0@\1=1@g
3、
[root@bogon job]# tail -5 /etc/yum.repos.d/CentOS-Media.repo
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6


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

1、[root@bogon job]# mkdir /backup
2、[root@bogon job]# vim backup.sh
#!/bin/bash
#
DATE=`date +%Y%m%d`
cp -r /etc /backup/etc-$DATE
3、crontab -e
* */4 * * * /bin/bash /root/job/backup.sh > /dev/null
4、手动执行一次脚本
[root@bogon job]# ls /backup/
etc-20151204


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

1、vim backup.sh
#!/bin/bash
#
DATE=`date +%Y%m%d`
cp -a /var/log/messages /backup/messages_log/messages-$DATE
2、crontab -e
* * * * 2,4,6 /bin/bash /root/job/backup.sh > /dev/null
3、手动执行一次脚本
[root@bogon job]# ls /backup/messages_log/
messages-20151204


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

1、crontab -e
2、* */2 * * * /bin/grep '^S' /proc/meminfo >>/stats/memory.txt

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

1、crontab -e
* 9-17/2 * * 1-5 /bin/echo "howdy"

脚本编程练习

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

[root@bogon ~]# date
Wed Dec  2 16:37:55 CST 2015

#!/bin/bash
#
DATE=`date +%Y-%m-%d-%H:%M`
mkdir /tmp/testdir-$DATE

[root@bogon ~]# ls /tmp
etc.test      rc.sysinit  testdir-2015-12-02-16:36  testdir-2015-12-02-16:38
maxusers.txt  test        testdir-2015-12-02-16:37

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

#!/bin/bash
#
for i in {1..100};do
    mkdir ./file$i
done
[root@bogon job]# ls
100.sh   file17  file26  file35  file44  file53  file62  file71  file80  file9   file99
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98

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

1、vim sed.sh
#!/bin/bash
#
sed -n 'n;p' /etc/passwd >>/root/job/pass.txt
cat pass.txt | cut -d: -f1
2、bash sed.sh
[root@bogon job]# bash sed.sh 
bin
adm
sync
halt
uucp
games
ftp
dbus
vcsa
saslauth
rpcuser
haldaemon
sshd
student
rtkit
avahi-autoipd
user12
user13
hello3
user7
user9
user3
user1
hadoop2
hadoop4
hadoop6
hadoop8
hadoop10
user2
slackware
mysql
bash
basher
user14
user17
user19
bin
adm
sync
halt
uucp
games
ftp
dbus
vcsa
saslauth
rpcuser
haldaemon
sshd
student
rtkit
avahi-autoipd
user12
user13
hello3
user7
user9
user3
user1
hadoop2
hadoop4
hadoop6
hadoop8
hadoop10
user2
slackware
mysql
bash
basher
user14
user17
user19

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

#!/bin/bash
#
for i in {10..19};do
   useradd user$i
   echo user$i | passwd --stdin user$i &>/dev/null
done

[root@bogon job]# id user10
uid=5018(user10) gid=5018(user10) groups=5018(user10)
[root@bogon job]# id user11
uid=5004(user11) gid=5004(user11) groups=5004(user11)
[root@bogon job]# id user12
uid=5003(user12) gid=5003(user12) groups=5003(user12)

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

#!/bin/bash
#
for i in {10..19};do
   touch /tmp/file$i
done
[root@bogon job]# ls /tmp
file10  file11  file12  file13  file14  file15  file16  file17  file18  file19

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

#!/bin/bash
#
for i in {10..19};do
   chown user$i:user$i /tmp/file$i
done
~   
[root@bogon job]# ll /tmp/
-rw-r--r-- 1 user10 user10 0 Dec  2 17:01 file10
-rw-r--r-- 1 user11 user11 0 Dec  2 17:01 file11
-rw-r--r-- 1 user12 user12 0 Dec  2 17:01 file12
-rw-r--r-- 1 user13 user13 0 Dec  2 17:01 file13
-rw-r--r-- 1 user14 user14 0 Dec  2 17:01 file14
-rw-r--r-- 1 user15 user15 0 Dec  2 17:01 file15
-rw-r--r-- 1 user16 user16 0 Dec  2 17:01 file16
-rw-r--r-- 1 user17 user17 0 Dec  2 17:01 file17
-rw-r--r-- 1 user18 user18 0 Dec  2 17:01 file18
-rw-r--r-- 1 user19 user19 0 Dec  2 17:01 file19

原创文章,作者:凸b男波万,如若转载,请注明出处:http://www.178linux.com/47655

(0)
上一篇 2016-09-26 07:43
下一篇 2016-09-26 07:43

相关推荐

  • rsync+inotify实现实时同步案例

    随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,…

    Linux干货 2016-10-30
  • 二、(1)Linux常用文件管理类命令详解

    Linux 文件管理 命令 cp mv rm

    2018-01-08
  • 始于此

         “路漫漫其修远兮,吾将上下而求索”,一段路程的结束,意味着一段路程的开始,同岁月般,永远也不能回到出发的那一刻,你所能做的,就是一路走下去。回顾珍惜,却不能逗留。         我的学习宣言是“功崇惟志,业广惟勤”,时刻告诉自己,“功”出…

    Linux干货 2016-11-28
  • Shell脚本之流程控制语句

    Shell脚本之流程控制语句 1、 if语句 (1)if 条件;then        action1 else        action2 fi  注意:shell里没有缩进要求。 (2)if 条件1;then   …

    Linux干货 2017-04-16
  • 文本处理工具及正则表达式

    一、*各种文本处理工具 1.1抽取文本的工具 1.1.1 cat、less查看文本内容    more、less和cat 【选项】 【文件】 cat  –n ,-d列行 ,-A:显示所有看不见的符号(控制符),     -E:显示结尾$ ;…

    Linux干货 2016-11-23
  • GNU awk工具的使用解析

    GNU awk: 简介:awk是一个数据处理工具。它比较倾向于将一行分成多个“字段”来处理。所以,awk比较适合处理小型数据。 gawk – pattern scanning and processing language 实现原理: 基本用法:gawk [options] 'program' FILE program:PAT…

    Linux干货 2016-09-21

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-27 09:44

    crontab的题目都不对,在仔细想想