vim文本编辑
vim是vi文本编辑的增强版本,因其编辑功能强大、且支持各种语言开发环境关键字自动增亮功能,也可称为是开发工具。在Centos7/RHEL7开始,默认将vi定义成vim –color=auto,已经取代了vi的地位。下面总结下关于vim工具的使用
vim有三种模式,每个模式下有其特定的功能;我们可自由在三者之间切换使用:
COMMAND MODE:vim的默认模式(初始模式)
可以使用方向键来移动光标、可以删除字符或者整行删除、可以复制粘贴等操作
INSERT MODE:vim的编辑模式
当你按下【a,i,o,A,I,O,R,r】便可从初始的命令模式进入编辑模式,再按下【esc】按键时,便可从输入模式转换到命令模式
COMMAND-LINE MODE:末行模式
可通过【: / ?】三个符合从命令模式进入末行编辑模式,此模式下可查询、替换、读取其他文件、存盘、退出、界面设置等操作;功能十分强大
vim相关命令
zz
类似于:wq 保存退出
光标跳转
w:下一个词首 e:下一个词尾 b:当前或者前一个词首
行首行尾跳转
^:跳转至行首第一个非空白字符 0:跳转至行首 $:跳转至行尾
行间跳转
nG:跳转至第n行 1G、gg:跳转至第一行行首 G:跳转至末行行首
句间跳转
(:上一句 ):下一句
段间跳转
{:上一段 }:下一段
翻屏
ctrl+f:向文件尾部翻一页 ctrl+b:向文件首部翻一页 ctrl+d:向文件尾部翻半页 ctrl+u:向文件首部翻半页
编辑命令
x:删除光标所在位置字符 nyy:复制光标所在往下n行 p:粘贴复制的内容 d:删除命令,可结合光标跳转字符,实现范围删除 dd:删除光标所在行 ndd:光标所在行往下n行删除 u:undo,即撤销操作的意思,可缓存50条记录 ctrl+r:撤销之前的撤销操作
光标位置定界
:start_pos[,end_pos] n: 特定的第n行 .: 表示当前行,可+可- $: 表示最后一行 %: 表示全部内容 m,n: 表示从m行到n行 m,+n: 表示从m行开始的n行内
查找、替换
s/要查找的内容/要替换的内容/修饰符 其中:要查找的内容可使用正则表达式 要替换的内容不能使用正则表达式,但是可以引用 修饰符:i 忽略大小写 g 全局替换 :%s/匹配字符/替换字符/g
平时在写程序时经常会遇到大小写转换的问题,vim中提供了很多非常方便的大小写转换命令,可以快速的进行字母、单词、任意行的大小写转换,可以和vim的光标移动指令组合使用。
~ 将光标下的字母改变大小写
3~ 将光标位置开始的3个字母改变其大小写
g~~ 改变当前行字母的大小写
U 将可视模式下选择的字母全改成大写字母
u 将可视模式下选择的字母全改成小写
gUU 将当前行的字母改成大写
3gUU 将从光标开始到下面3行字母改成大写
guu 将当前行的字母全改成小写
gUw 将光标下的单词改成大写。
guw 将光标下的单词改成小写。
更多技巧可以查看文档
任务计划
bash shell极大的方便了系统管理员的工作,可是有些工作呢不是任何时候都可以人为操作的,根据工作需要,往往有很多工作需要定时定点的去执行;因此Linux为了方便系统管理工作,加入了周期性任务计划管理,Linux下的任务调度分为两类,系统任务调度和用户任务调度。:
crontab用户任务调度
maintains crontab files for individual users这里是一个命令,/usr/bin/crontab;所有的用户crontab文件保存的地方在/var/spool/cron/$USERNAME,/etc/cron.allow或者/etc/cron.deny可限制哪些用户可以使用crontab哪些用户不可以使用crontab,cron.allow优先级比cron.deny高,只需要将用户名编辑入其中一个即可 【SYNOPIS】 crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s] crontab -n [ hostname ] crontab -c 【OPTIONS】 -u --user 指定用户crontab任务 -l 列出任务计划 -r 删除可用的任务计划 -e 编辑任务计划,类似vi,编辑文件后:wq保存即可 -i 与-r同用,交互式删除任务计划 -n --host 指定用户执行任务计划 其格式如下: # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed 在以上各个字段中,还可以使用以下特殊字符: 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
/etc/crontab
这是系统级别的任务计划管理文档,可通过直接编辑/etc/crontab文件实现,其格式跟用户crontab编辑格式一样;该进程默认启动; 服务状态:#service crond status 或者 systemctl status crond.service 启动服务:#service crond start 或者 systemctl start crond.service 停止服务:#service crond stop 或者 systemctl stop crond.service
vim练习总结:
1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;
:%s/^[[:blank:]]\+.*/\0#/g
2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中行首的空白字符
:%s/^[[:space:]]\+//g
3、删除/tmp/rc.sysinit文件中以#开头且后面跟了至少一个空白字符的行的#和空白字符
:%s/^#[[:blank:]]\+//g
4、为/tmp/grub.conf文件中前三行的行首加#号
:1,3s/^/\0#/g
5、将/etc/yum.repos.d/Centos-Media.repo文件中所有的enabled=0或者gpgcheck=0的最后的0修改为1
:%s/\(enabled\|gpgcheck\)=0/\1=1/g
任务计划练习
6、每4小时执行一次对/etc目录的备份,备份至/backup目录,保存目录名为形如etc-201504020202
* */4 * * * /usr/bin/cp /etc /backup/etc-$(date +%Y%m%d%h%M)/
7、每周2、4、6备份/var/log/messages文件至/backup/messages_logs目录中,保存的文件名形如messages-20150402
* * * * 2,4,6 /usr/bin/cp /var/log/messages /backupmessages_logs/messages-$(date +%Y%m%d)
8、每天每2小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中
* */2 * * * /usr/bin/grep -E "S.*" /proc/meminfo>>/stats/memory.txt
9、工作日的工作时间内,每2个小时执行一次echo "howdy"
* 9-18/2 * * 1-5 /usr/bin/echo "howdy"
脚本编程练习
10、创建目录/tmp/testdir-当前日期时间
#!/bin/bash if [ -d /tmp/testdir-$(date +%Y%m%d) ] then echo "the dirctory is exist!" else mkdir -p /tmp/testdir-$(date +%Y%m%d) &&echo "create the dirctory successful!" fi
11、在此目录创建100个空文件:file1-file100
#!/bin/bash for ((i = 1; i<=100; i++)) do touch /tmp/files/file$i; done echo "create 100 files successful!"
12、显示/etc/passwd文件中位于第偶数行的用户的用户名
#!/bin/bash i=0 for username in `cat /etc/passwd|cut -d: -f1` do i=$(($i+1)) [ $((i%2)) -eq 0 ] && echo $username; done
13、创建10用户user10-user19,密码同用户名
#!/bin/bash for (( i=10;i<20;i++ )) do id user$i>/dev/null 2>&1; if [ $? == 0 ];then echo "the user$i is exist!" else useradd user$i && echo "user$i"|passwd --stdin user$i>>/dev/null 2>&1; echo "create user$i successful!" fi done
14、在/tmp创建10个空文件file10-file19;
#!/bin/bash # for (( i=10; i<20; i++ )) do if [ -f /tmp/file$i ];then echo "the file$i is exist." else touch /tmp/file$i && echo "create file$i successful!" fi done
原创文章,作者:396064847,如若转载,请注明出处:http://www.178linux.com/56535
评论列表(1条)
完成的非常好,6、8、9题需要精确到分钟,7题需要精确到分钟、小时哈,加油!