网络班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)
凸b男波万凸b男波万
上一篇 2016-09-26 07:43
下一篇 2016-09-26 07:43

相关推荐

  • 使用fail2ban防止暴力破解ssh及vsftpd密码

    此文介绍一个linux下通过监控日志防止密码被暴力破解的软件-fail2ban。fail2ban支持常用的服务,如sshd, apache, qmail, proftpd, sasl, asterisk等的密码验证保护,当发现暴力破解的迹像时,可以通过iptables, tcp-wrapper, shorewall等方式阻止此IP的访问。 python安装 …

    Linux干货 2015-03-04
  • Linux进程篇16.0

    Linux进程介绍

    Linux干货 2017-12-18
  • httpd 安装配置

    web 服务介绍 web服务时一种应用程序的服务,它所提供的最主要的信息是一种超文本标记语言(HTML)、多媒体资源(如:视频、图片、音乐等)。HTML是一种纯文字的文本信息,通过所谓的标签来规范所要显示的内容格式,在客户端通过浏览器的形式对HTML及多媒体资源进行解析,然后呈现在终端上。主要由http和https协议实现 http协议 HTTP是一个属于应…

    Linux干货 2016-11-01
  • 有关shell脚本

    SHELL脚本 在Linux运维工作中有着大量的重复性质的工作,比如同时给很多台的服务器备份,查看多台的内存情况,等等。这样的情况下总不能一个一个服务器自己去看,那样耗时,费力,还容易出错。所以编写程序来做这些事情就成了必要的工作。而SHELL就是完成这项工作的。   脚本第一行的开头写上#!/bin/bash 这是属于格式性质的,作用在于加上执行…

    2017-08-12
  • mageedu_20160802

     用户的管理权限设置与更改以及ACL的存在及其实用意义      一.用户的管理权限如何设置与更改以及umask值的含义    由于linux系统是一个多用户使用的系统,对于各个用户指定的文件或目录必须存在一套管理系统,以防止多用户对相同文件的混淆使用。于是催生出了linux系统文件的用户权限设置。…

    Linux干货 2016-08-03
  • RAID介绍及软RAID实现

    RAID RAID:Redundant Arrays of Inexpensive(Independent)Disks1988年由加利福尼亚大学伯克利分校(University of California-Berkeley)“A Case for Redundant Arrays of Inexpensive Disks”。多个磁盘合成一个“阵列”来提供更好…

    Linux干货 2016-09-02

评论列表(1条)

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

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