本周作业内容:
1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#
:%s@^[[:space:]]\+@#&@g
384 substitutions on 384 lines
#vim末行模式下
%:表示全文相当于1,$
s: 在末行模式下完成查找替换操作
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容;
修饰符:
i: 忽略大小写
g: 全局替换;默认情况下,每一行只替换第一次出现;
查找替换中的分隔符/可替换为其它字符,例如
s@@@
s###
2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;
:%s@^[[:space:]]\+@@g #此题理解为将开除为空表字符的行替换为空,即为删除。
3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符
:%s@^#[[:space:]]\+@@g
4、为/tmp/grub.conf文件中前三行的行首加#号;
:1,3s@^.*@#& #1,3:表示1-3行 #&:表示前面查找到的整个内容即1-3行内容 # 地址定界 :start_pos,end_pos #: 具体第#行,例如2表示第2行; #,#: 从左侧#表示行起始,到右侧#表示行结尾; #,+#: 从左侧#表示的行起始,加上右侧#表示的行数; .: 当前行 $: 最后一行 .,$-1 %:全文, 相当于1,$
5、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;
:%s@0@1@g
6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201608300202
:%s@\(enabled=\)1@\10@g #\(enabled=\)1 表示分组匹配到enabled=1 \1表示后向引用\(\)中的内容。
7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20160830
[root@liu ~]# crontab -e crontab: installing new crontab [root@liu ~]# crontab -l * * * * 2,4,6 /bin/tar cvf /backup/messages_logs/messages-$(date +%F) /var/log/messages
#周期任务计划:
系统cron任务
# 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
# | | | | |
# * * * * * user-name command to be executed
顺序为:分,时,日,月,周
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任务;
-e: 编辑任务;
-r: 移除所有任务;
-i:同-r一同使用,以交互式模式让用户有选择地移除指定任务;
-u user: 仅root可运行,代为为指定用户管理cron任务;
#$(date +%F) :%F full date; same as %Y-%m-%d;整体表示为引用当前系统时间,-按照%F的形式。
#$(date +%y%m%d) :也可使用这种方式来给文件尾部添加年月日。
#例如: [root@liu messages_logs]# tar cvf /backup/messages_logs/messages-$(date +%y%m%d) /var /log/messagestar: 从成员名中删除开头的“/” /var/log/messages [root@liu messages_logs]# ls messages-160909
8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中
[root@liu ~]# crontab -e crontab: installing new crontab [root@liu ~]# crontab -l 0 */2 * * * /bin/egrep ‘^S‘ /proc/meminfo >> /stats/memory.txt #在创建计划任务时一定自己测试一下命令是否有问题。比如每两个小时,最好给分钟位指定一个时间。
9、工作日的工作时间内,每两小时执行一次echo "howdy"
[root@liu ~]# crontab -e crontab: installing new crontab [root@liu ~]# crontab -l 0 */2 * * 1-5 /bin/echo "Howdy."
脚本编程练习
10、创建目录/tmp/testdir-当前日期时间;
1 #!/bin/bash 2 # 3 mkdir /tmp/testdir-$(date +%F-%H-%M-%S) [root@liu homework]# bash -x 10.sh ++ date +%F-%H-%M-%S + mkdir /tmp/testdir-2016-09-09-21-06-23
11、在此目录创建100个空文件:file1-file100
方式1: [root@liu homework]# vim 11.sh 1 #!/bin/bash 2 # 3 for i in {1..100};do 4 touch file$i 5 done [root@liu homework]# bash -n 11.sh [root@liu homework]# bash -x 11.sh 方式2: [root@liu test]# cat 111.sh #!/bin/bash # for ((i=1;i<101;i++));do if [ -f file$i ];then continue; fi touch file$i done
12、显示/etc/passwd文件中位于第偶数行的用户的用户名;
1 #!/bin/bash 2 # 3 sed -n ‘n;p‘ /etc/passwd | cut -d: -f1
#知识点:
用法:
sed [option]... ‘script‘ inputfile...
script:
‘地址命令‘
常用选项:
-n:不输出模式中的内容至屏幕;
-e: 多点编辑;
-f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本;
-r: 支持使用扩展正则表达式;
-i: 原处编辑;
sed -n ‘n;p‘ FILE:显示偶数行
sed ‘1!G;h;$!d‘ FILE:逆向显示文件内容
sed ‘$!N;$!D‘ FILE: 取出文件后两行;
sed ‘$!d‘ FILE:取出文件最后一行;
sed ‘G‘ FILE: 每一行追加一个空白行;
sed ‘/^$/d;G‘ FILE: 给每一行追加一个空白行,如有多个空白行合并一个空白行。
sed ‘n;d‘ FILE: 显示奇数行;
sed -n ‘1!G;h;$p‘ FILE: 逆向显示文件中的每一行;
常用的高级编辑命令:
sed -n ‘n;p‘ FILE:显示偶数行;
sed ‘1!G;h;$!d‘ FILE:逆向显示文件内容
sed ‘$!N;$!D‘ FILE: 取出文件后两行;
sed ‘$!d‘ FILE:取出文件最后一行;
sed ‘G‘ FILE: 每一行追加一个空白行;
sed ‘/^$/d;G‘ FILE: 给每一行追加一个空白行,如有多个空白行合并一个空白行。
sed ‘n;d‘ FILE: 显示奇数行;
sed -n ‘1!G;h;$p‘ FILE: 逆向显示文件中的每一行;
13、创建10用户user10-user19;密码同用户名;
[root@liu ljohn]# ls /home/ bash linux openstacks user1 user14 user19 user6 users1 users5 basher liu slackware user10 user15 user2 user7 users10 users6 centos mandirva testbash user11 user16 user3 user8 users2 users7 fedora mysql tuser1 user12 user17 user4 user9 users3 users8 hadoop nologin user user13 user18 user5 useradd1 users4 users9 [root@liu ljohn]# cat 13.sh #!/bin/bash # for i in {10..19};do if id user$i &> /dev/null;then echo "user$i is exists." else useradd user$i && echo "user$i" | passwd --stdin user$i fi done
14、在/tmp/创建10个空文件file10-file19;
[root@liu homework]# for i in {10..19};do touch /tmp/file$i;done
15、把file10的属主和属组改为user10,依次类推。
[root@liu homework]# cat 15.sh #!/bin/bash # for i in {10..19};do touch /tmp/file$i && chown user$i:user$i /tmp/file$i done [root@liu tmp]# ll 总用量 192 -rw-r--r--. 1 root root 2 9月 5 10:32 -rwxrwxrwt. 1 root root 2569 8月 30 16:50 a.txt -rw-r--r--. 1 root root 852 8月 21 11:31 etc.test -rw-r--r--. 1 user10 user10 0 9月 9 22:52 file10 -rw-r--r--. 1 user11 user11 0 9月 9 22:52 file11 -rw-r--r--. 1 user12 user12 0 9月 9 22:52 file12 -rw-r--r--. 1 user13 user13 0 9月 9 22:52 file13 -rw-r--r--. 1 user14 user14 0 9月 9 22:52 file14 -rw-r--r--. 1 user15 user15 0 9月 9 22:52 file15 -rw-r--r--. 1 user16 user16 0 9月 9 22:52 file16 -rw-r--r--. 1 user17 user17 0 9月 9 22:52 file17 -rw-r--r--. 1 user18 user18 0 9月 9 22:52 file18 -rw-r--r--. 1 user19 user19 0 9月 9 22:52 file19
本文出自 “Ljohn” 博客,请务必保留此出处http://ljohn.blog.51cto.com/11932290/1851701
马哥2016全新Linux+Python高端运维班-Linux vim 末行模式,sed命令,基本bash脚本
原文地址:http://ljohn.blog.51cto.com/11932290/1851701