本周作业内容:

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文件中的行首的空白字符;

1
2
:%s@^[[:space:]]\+@@g
#此题理解为将开除为空表字符的行替换为空,即为删除。

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

1
:%s@^ #[[:space:]]\+@@g

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

1
2
3
4
5
6
7
8
9
10
11
12
: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;

1
2
3
4
     :%s@enabled=0@enabled=1@g
     :%s@gpgcheck=0@gpgcheck=1@g
     :%s@\(enabled\|gpgcheck\)=0@\1=1@g
     #\(enabled=\)1 表示分组匹配到enabled=1 \1表示后向引用\(\)中的内容。

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

1
2
[root@node2 ~] # crontab -e
0 * /4  * * *  /bin/cp  -a  /etc  /backup/etc- $( date  +\%Y\%m\%d\%H\%M)

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

1
2
3
4
[root@liu ~] # crontab -e
crontab : installing new  crontab
[root@liu ~] # crontab -l
0 0 * * 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) :也可使用这种方式来给文件尾部添加年月日。

1
2
3
4
5
#例如:    [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文件中

1
2
3
4
5
[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"

1
2
3
4
[root@liu ~] # crontab -e 
crontab : installing new  crontab
[root@liu ~] # crontab -l
0 * /2  * * 1-5  /bin/echo  "Howdy."

脚本编程练习

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

1
2
3
4
5
6
    #!/bin/bash
   #
   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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
方式1:    [root@liu homework] # vim 11.sh
           #!/bin/bash
           #
           for  in  {1..100}; do
           4          touch  file $i
           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
2
3
   #!/bin/bash
   #
   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;密码同用户名;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     [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  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; 

1
     [root@liu homework] # for i in {10..19};do touch /tmp/file$i;done

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     [root@liu homework] # cat 15.sh 
     #!/bin/bash
     #
     for  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