题外话:

1)吐槽一下,作为一个才看到 37 节的人,来做这周的作业,难度可想而知

2)习题中很多所指文件在我的系统上都不存在,所以我会是使用格式近似的文件来作为替代

3)我把第三题和第二题的位置互换了一下,不影响测试

本周作业内容:

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

思路

        1)  vim 编辑器内部指令添加

        2) 使用 sed 命令添加

先复制文件,Fedora 23 上没有 /etc/rc.d/rc.sysinit 这个文件,我使用 /etc/rc.d/init.d/functions 这个文件来替代

cp /etc/rc.d/init.d/functions /tmpvim /tmp/functions# 然后输入以下内容:%s@\(^[[:space:]]\+\)@#\1@g

退出不保存

现在使用 sed 命令来替换

sed -i -r "s/(^[[:space:]]+)/#\1/g" /tmp/functions


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

使用 /tmp/functions 作为演示,在第一题中已经被加入 # 号

依旧是两种思路

vim:

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

退出不保存

sed:

sed -i -r "s/^#[[:space:]]+//g" /tmp/functions


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

使用新的 /tmp/functions 作为演示

复制一个新的 functions 到 /tmp 

cp /etc/rc.d/init.d/functions /tmp

vim:

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

退出不保存

sed 

sed -i -r "s/^[[:space:]]+//g" /tmp/functions


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

使用 /tmp/functions 作为演示,先清除掉所有行开头的 # 与空格

sed -i -r "s/^#[[:space:]]*//g" /tmp/functions

vim 

:1,3s@\(.*\)@#\1@g

退出不保存(迷一样的高亮显示

sed

sed -i -r "1,3s/(.*)/#\1/g" /tmp/functions


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

使用 /etc/yum.repos.d/fedora.repo 复制到 /tmp 作为演示

复制文件

cp /etc/yum.repos.d/fedora.repo /tmp

vim (17行与28行

:%s@\(enabled=\|gpgcheck=\)0@\11@g

sed(原来 sed 里面的定界符也是可以随意换

sed -i -r "s@(enabled=|gpgcheck=)0@\11@g" /tmp/fedora.repo


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

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

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

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

我在很早以前就写过关于 Crontab 的博客了,这是链接:

创建备份需要的文件(夹)

mkdir /backuptouch /stats/memory.txt

使用 crontab -e 打开配置文件并编辑

按照题序

0 */4 * * * /bin/cp -a /etc /backup/etc-$(date +\%Y\%m\%d\%H\%M)0 0 * * 2,4,6 /bin/cp /var/log/messages /backup/messages_logs/messages-$(date +\%Y\%m\%d)0 */2 * * * /bin/grep "^S" /proc/meminfo >> /stats/memory.txt# 假设工作时间周一至周五 8-12 14-180 8-12/2 * * 1-5 /bin/echo "howdy"0 14-18/2 * * 1-5 /bin/echo "howdy"


脚本编程练习

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

11、在此目录创建100个空文件:file1-file100

脚本名:mage-test

#!/bin/bash# Auther: divent# 2016-09-11 19:44:14# mage script test10-11dirname="testdir-$(date +\%Y\%m\%d\%H\%M)"mkdir /tmp/$dirnamefor i in {1..100};do	touch /tmp/$dirname/file$idone


12、显示/etc/passw d文件中位于第偶数行的用户的用户名;

思路

1)使用 sed ,每次输入 2 行,然后删除第一行

sed '1~2d' /etc/passwd | cut -d ":" -f 1

2)使用 awk,取出偶数行

awk 'NR%2==0' /etc/passwd | cut -d ":" -f 1

3)算法,使用脚本,根据算法限位取出偶数行(假设还不会使用 awk 与 sed

脚本名:mage-test2

#!/bin/bash# Auther: divent# 2016-09-11 20:08:31# mage script test12# 获得 /etc/passwd 的最大行maxline=$(wc -l /etc/passwd | cut -d " " -f 1)# 从 1 循环到最大行for i in $(seq 1 $maxline);do        #取余,用于判断	n=$[ $i%2 ]	if [ "$n" -eq "0" ];then	        #如果是偶数,则显示 i 对应的行数,使用 head 与 tail 来显示对应行,使用 cut 来切割出用户名        	echo -e "\n$(head -n $i /etc/passwd | tail -n 1 | cut -d ":" -f 1)"	fidone


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

14、在/tmp/创建10个空文件file10-file19; 

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

脚本名:mage-test3

#!/bin/bash# Auther: divent# 2016-09-11 21:57:43# mage script test 13-15# 创建10到19的循环for i in $(seq 10 19);do	# 创建用户	useradd "user$i"	# 设置密码	echo "user$i" | passwd --stdin "user$i"	# 创建文件	touch /tmp/file$i	# 修改权限	chown "user$i":"user$i" /tmp/file$idone