马哥教育网络班21期+第六周课程练习

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

[TOC]

vim编辑器使用方法总结

vim编辑器:
简介:
	vi: visual interface,文本编辑器
	vim: vi improved,vi的增强版

	文本:ASCII,Unicode,
	文本编辑器种类:
		行编辑器:sed,
		全屏编辑器:nano,vi
vim:模式化的编辑器
	基本模式:
		编辑模式,也叫命令模式
		输入模式
		末行模式:内置的命令行接口
模式转换:
		编辑模式 --> 输入模式
			i: insert,在光标所在处前面输入
			a: append,追加,在光标所在处后面输入
			o: 在当前光标所在行的下方打开一个新行并转换为输入模式;
			I: 在当前行的行首输入;
			A: 在当前行的行尾输入;
			O: 在当前光标所在行的上方打开一个新行并转换为输入模式;
		输入模式 --> 编辑模式
			ESC
		编辑模式 --> 末行模式
			:
		末行模式 --> 编辑模式
			两次ESC
关闭文件:
	:q 退出
	:q! 强制退出,丢弃做出的修改;
	:wq 保存后退出
	:x 保存退出
	:w /PATH/TO/SOMEFILE 保存到其他文件

	命令模式下:ZZ 保存退出			
光标跳转:
	1. 字符间跳转
		h,j,k,l
		h: 左
		l:右
		j:下
		k: 上
		#COMMAND: 挑战有#指定的个数的字符

	2. 单词间跳转
		w:当前或下一个单词的词首
		b:当前或前一个单词的词首
		e: 跳转至当前或下一个单词的词尾
		#COMMAND: 由#指定一次跳转的单词数

	3. 行首行尾跳转:
		^:跳转至行首的第一个非空白字符
		0:跳转至行首
		$:跳转至行尾:

	4. 行间移动:
		#G:跳转至由#指定的行;
		G:最后一行;
		gg或1G:第一行

	5. 句间移动:
		): 下一个句子
		(: 前一个句子

	6. 段间移动:
		}:下一个段落
		{:上一个段落
vim编辑命令:
	字符编辑:
		x:删除光标处的单个字符;
		#x: 删除光标处起始地#个字符
		xp:交换光标所在处及其后面字符的位置;

	删除命令:
		d:删除命令,可结合光标跳转字符实现范围删除;
			d$:
			d^:
			d0:
			dw:
			de:
			db:
			#COMMAND
				3dw:
			dd:删除光标所在行
				#dd
				#COMMAND  2dd:包括光标所在行向下共删除2行;

	粘贴命令(P,put,paste):
		p(小写): 缓冲区中存储的如果是整行,则粘贴之当前光标所在行的下方;否则,粘贴之光标所在处的后面;
		P(大写): 缓冲区中存储的如果是整行,则粘贴之当前光标所在行的上方;否则,粘贴之光标所在处的前面;

	复制(y,yank)
		y:复制,工作行为与d命令相似
		y0
		y^
		y$
		ye
		yw
		yb
		#COMMAND
			yy: 复制行
		#yy: 复制多行;

	改变命令(c,change)
		c: 修改
		编辑模式  --> 输入模式
			c$
			c0
			c^
			cb
			ce
			cw
			#COMMAND
			cc: 删除行并输入内容
			#cc: 删除多行并输入内容

	替换命令(r,replace)
		r:替换光标所在处的字符
		rx:将其替换为x字符
	其他编辑操作:
		可视化模式:
			v:按字符选定
			V: 按行选定
			Note: 经常结合编辑命令
				d,c,y

		撤消之前的编辑:
			u(undo):撤销此前的操作:
				#u: 撤消指定次数的操作;

		撤消此前的撤消:
			CTRL+r

		重复上一次操作:
			. 点号

		翻屏操作:
			ctrl+f:向文件尾部翻一屏
			ctrl+b:向文件首部翻一屏

			ctrl+d:向文件尾部翻半屏
			ctrl+u:向文件首部翻半屏
vim中的末行模式:
	内建的命令行接口:
		1. 地址定界
			:start_pos,end_pos
				#: 具体的第#行,例如2,第2行
				#1,#2: 从#1行至#2行;
				#1,+#2: 从#1行起,向下再多加#2行,如1,+5:表示从第一行及其后5行,共6行;
				.: 点号,当前行
				$:最后一行
				.,$-1: 当前行至倒数第二行
				%:全文,相当于1,$
				/pat1/,/pat2/:从第一次被pat1模式匹配到的行开始至第一次被pat2匹配到的行结束;
				常用方法:
					1,/pat/
					/pat/,$

				使用方式:后跟一个编辑命令
					d,
					y,
					w /path/to/somefile:将范围内的行另存至其他文件
					r /path/from/somefile :在指定位置插入指定文件的所有内容

		2. 查找
			/pattern: 从当前光标所在处向文件尾部查找
			?pattern: 从当前光标所在处向文件首部查找
				n: 与命令同方向
				N:与命令反方向

		3.查找并替换:
			s: 在末行模式下完成查找替换作用
			s/要查找的内容/替换为的内容/修饰符
				这里的分隔符可以使用其他字符代替,如s@@@  s###
				要查找的内容:可使用模式
				替换为的内容:不可使用模式,但可以使用\1,\2..等后向引用,还可以使用"&"引用前面查找时找到的整个内容;
		4. 修饰符:
				i: 忽略大小写
				g:全局替换,默认情况下,每一行只替换第一次出现;
				示例:
					.,$s/r\(..\)t/R\1T/g: 将r..t替换为R..T
					%s/linux/&er/ :全文的第一个linux替换为linuxer
					1,10s/how/HOW/g : 将第一至第十行的how全部替换为HOW
					%s/\etc\/fstabl/\/var\/log/g  将/etc/fstab替换为/var/log.
多文件模式
		vim FILE1 FILE2 FILE3
		next:下一个
		prev 前一个
		first:第一个
		last 最后一个
		:wall 保存所有
		:qall 退出所有

窗口分隔模式:
	vim -o 或者 -O FILE1 FILE2
		-o: 水平分隔,上下两个文件
		-O:垂直分割,左右两个文件

在窗口间切换:
	ctrl+w+方向键
		:q 退出当前
		:qall 退出所有

单文件窗口分隔:
	ctrl+w+s, split,水平分隔
	ctrl+w+v, vertical 垂直分割
	:qall
	:wqall
定制vim的工作特性:
	配置文件:
		全局:/etc/vimrc
		个人:~/.vimrc
		末行:当前vim进程有效

	1.行号:
		显示:set number,简写为set nu
		取消显示:set nonumber,简写 set nonu
	2. 括号匹配:
		匹配;set showmatch,简写为 set sm
		取消:set nosm
	3. 自动缩进
		启用:set autoindent,简写为set ai
		禁用:set noai
	4. 高亮搜索
		启用:set hlsearch  (hilightsearch)
		禁用:set nohlsearch
	5. 语法高亮
		启用:syntax on
		禁用:syntax off
	6. 忽略字符大小写
		启用:set ic (ignorecase)
		禁用:set noic
	7. 获取帮助:
		末行模式下help, :help
		:help + 关键字
vim自带的练习教程:
	centOS7有中文版
	vimtutor

vim编辑器使用练习

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

[root@rhel-6 ~]# vim /tmp/rc.sysinit 
:%s/^[[:space:]]\+/#&/g
# 或者是
:1,$s@^\([[:space:]]\+\)@#\1@g

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

[root@rhel-6 ~]# vim /tmp/grub.conf
:%s/^[[:space:]]\+//g

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

[root@rhel-6 ~]# vim /tmp/rc.sysinit
:%s/^#[[:space:]]\+//g

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

[root@rhel-6 ~]# vim /tmp/grub.conf
:1,3s/.*/#&/

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

[root@CentOS-7 tmp]# vi /etc/yum.repos.d/CentOS-Media.repo
:%s/=0/=1/g

定时任务配置练习

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

00 */4 * * * /bin/cp -ar /etc/ /backup/etc-$(date +%Y%m%d%H%M) &>/dev/null

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

00 00 * * 2,4,6 /bin/cp -a /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d) &>/dev/null

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

00 */2 * * * /bin/egrep '^(S|s)' /proc/meminfo >> /stats/memory.txt &>/dev/null

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

00 8-18/2 * * 1-5 /bin/echo "howdy" &>/dev/null

脚本编程练习

10-11. 创建目录/tmp/testdir-当前日期时间,在此目录创建100个空文件:file1-file100

[root@rhel-6 test]# cat test1.sh 
#!/bin/bash
TestDir=/tmp/testdir-$(date +%Y%m%d%H%M)
TestLog=${TestDir}/failure.log

mkdir ${TestDir} &>/dev/null
[[ $? -eq 0 ]] && echo "Create ${TestDir} success."

for (( i = 1; i < 101; i++ )); do
	touch ${TestDir}/file$i || echo "Failure:file$i" >> ${TestLog}
done

if [[ -s "${TestLog}" ]]; then
	cat ${TestLog}
else
	echo 'Create file1-file100 success.'
fi

[root@rhel-6 test]# sh test1.sh 
Create /tmp/testdir-201608132309 success.
Create file1-file100 success.

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

[root@rhel-6 test]# cat test2.sh 
#!/bin/bash
NO_passwd=$(cat /etc/passwd | wc -l)

echo 'The UserName list is:'
#for (( i = 0; i <= ${NO_passwd}; i+=2 )); do
for i in $(seq 2 2 ${NO_passwd});do
	head -n $i /etc/passwd | tail -n 1 | cut -d':' -f1
done

[root@rhel-6 test]# sh test2.sh 
The UserName list is:
bin
adm
...
...

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

[root@rhel-6 test]# cat test3.sh 
#!/bin/bash
for i in {10..19}; do
	id user$i &>/dev/null 
	if [[ $? -eq 0 ]]; then
		echo "user$i exist."
		echo user$i | passwd --stdin user$i &>/dev/null
		[[ $? -eq 0 ]] && echo "user$i password change success." || echo "user$i password change failed."
	else
		useradd user$i 
		echo "user$i" | passwd --stdin user$i &>/dev/null
		[[ $? -eq 0 ]] && echo "Create user$i success." || echo "Creat user$i failure."
	fi
done

[root@rhel-6 test]# useradd user13

[root@rhel-6 test]# sh test3.sh 
Create user10 success.
...
user13 exist.
user13 password change success.
Create user14 success.
...

14-15. 在/tmp/创建10个空文件file10-file19,把file10的属主和属组改为user10,依次类推。

[root@rhel-6 test]# cat test4.sh 
#!/bin/bash
TmpFile=/tmp/file 
for i in {10..19}; do
	if [[ -f "${TmpFile}$i" ]]; then
		echo "${TmpFile}$i exist."
		chown user$i:user$i ${TmpFile}$i && echo "${TmpFile}$i: owner and group change to user$i:user$i"
	else
		touch "${TmpFile}$i"  
		if [[ $? -eq 0 ]]; then
			echo "${TmpFile}$i create success."
			chown "user$i:user$i" ${TmpFile}$i && echo "${TmpFile}$i: owner and group change to user$i:user$i"
		else
			echo "${TmpFile}$i create failure."
		fi
	fi	
done

[root@rhel-6 test]# touch /tmp/file12
[root@rhel-6 test]# sh test4.sh 
/tmp/file10 create success.
/tmp/file10: owner and group change to user10:user10
/tmp/file11 create success.
/tmp/file11: owner and group change to user11:user11
/tmp/file12 exist.
/tmp/file12: owner and group change to user12:user12
...
...

原创文章,作者:N21_未来人,如若转载,请注明出处:http://www.178linux.com/35484

(0)
N21_未来人N21_未来人
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • Linux中/etc目录下常用的配置文件及其含义总结

         在linux中有一个很重要的思想就是一切皆文件,也就是说所有的系统参数的配置都是保存在各种各样的配置文件当中的,这点Linux和Windows有很大的差别。      因为Linux中有众多配置文件,学习起来难免会不容易记忆,所以在此把一些常用的配置文件记录下来,做一个归纳总结。根据FHS…

    Linux干货 2017-03-26
  • 马哥教育21期网络班—第15周课程+练习—-awk 总结

    GNU awk: 文本处理三工具:grep, sed, awkgrep, egrep, fgrep:文本过滤工具;pattern sed: 行编辑器 模式空间、保持空间 awk:报告生成器,格式化文本输出; AWK: Aho, Weinberger, Kernighan&nbsp…

    Linux干货 2016-11-14
  • ansible实践

    本偏文章以上图拓扑部署 首先准备了6台为centos7的主机(确保selinux和iptables不会成阻碍!关闭他们) 我们先来安装ansible吧! 配置EPEL源过后使用 yum -y install ansible  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 出师不利啊,安装ansible就失败了。!!!!!! 看了一下…

    Linux干货 2017-01-27
  • session sticky + session cluster 实战

    前言 在做负载均衡集群的时候,如果后端是应用服务器,我们就有一个不得不考虑的一个问题:会话绑定。为了追踪会话,我们常见的有三种方式:(1)session sticky:会话粘性,常见有2种方式: source_ip:采用源地址绑定方式 nginx:ip_hash,ip地址哈希 haproxy:source lvs:sh,源地址哈希 cookie:基于cook…

    Linux干货 2017-02-13
  • 手动添加用户

        通常使用useradd命令可以轻松添加一个用户,然后使用passwd命令设置一个密码后就可以登录系统了,其实这一过程完成可以自己手动完成,下面就让我们来通过修改配置文件来添加一个用户。 一、修改/etc/passwd文件     在etc/passwd文件中手动添加一行内…

    Linux干货 2015-04-27
  • VMware虚拟机设置网络(包含简单安装)

    1.下载VMware虚拟机 2.创建一个虚拟机,选择下载好的linux系统,我这里选择的是CentOS版本,之后一直按着步骤设置一般都选择默认就好                               &…

    2017-09-02

评论列表(2条)

  • 马哥教育
    马哥教育 2016-08-17 15:11

    写的很好,排版也很棒,加油

    • Jorja
      Jorja 2017-04-24 03:43

      @马哥教育You have posted a great coellction of wonderful blogs. Thanks for sharing all the posts. I was scrolling down, admiring all the wonderful bloggers work, and there was mine. Thank you!