magedu basic 第三次作业

1、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 使用egrep扩展正则表达式
# [:alpha:] # 表示任意大小写字母
# + # 表示匹配前面字符至少一次
# 由于centos7中/etc/rc.d/init.d/functions不存在,故创建本地文件进行测试

[hzz@8eff5a75ccba ~]$ cat > functions << EOF
> hello()
> hi
> 123
> 456()
> EOF
[hzz@8eff5a75ccba ~]$ egrep -o '[[:alpha:]]+\(\)' functions
hello()
[hzz@8eff5a75ccba ~]$

2、使用echo命令输出一个绝对路径,使用grep取出其基名;扩展:取出其路径名。

1
2
3
4
5
6
7
8
9
# 使用grep基本正则表达式
# [^] # 匹配指定范围外的任意单个字符
# \+ # 匹配其前面的字符至少1次
# \? # 匹配其前面的字符0或1次
# 最后使用cut处理以/结尾的情况

[hzz@8eff5a75ccba ~]$ echo /123/abc/456/|grep -o '[^/]\+/\?$'|cut -d'/' -f1
456
[hzz@8eff5a75ccba ~]$

3、找出ifconfig命令结果中的1-255之间数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 使用egrep扩展正则表达式
# [] # 匹配指定范围内的任意单个字符
# \<PATTERN\> # 匹配整个单词或数字
# | # 左边或者右边,不是按字符,是按整个字段
# 最后用sort进行排序,便于分析

[hzz@8eff5a75ccba ~]$ ifconfig|egrep -o '(\<[1-9]\>|\<[1-9][1-9]\>|\<[1-2][0-5][0-5]\>)'|sort -n
1
1
2
2
4
5
11
16
17
42
42
64
73
255
255
255
[hzz@8eff5a75ccba ~]$

4、查找当前系统上没有属主或属组的文件;进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 使用find相关参数
# -nouser 查找没有属主的文件;
# -nogroup 查找没有属组的文件;
# -atime [+|-]n 访问时间,单位:天;
# -n 时间区间为:0 <= time < n;

# 查找当前系统上没有属主或属组的文件

[hzz@huangzz6 ~]$ touch 123 456 789
[hzz@huangzz6 ~]$ sudo chown 123:456 789
[hzz@huangzz6 ~]$ sudo find / -nouser -nogroup -ls 2>/dev/null
4241474 0 -rw-rw-r-- 1 123 456 0 Feb 9 11:04 /home/hzz/789
[hzz@huangzz6 ~]$

# 查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录

[hzz@huangzz6 ~]$ mkdir 110
[hzz@huangzz6 ~]$ sudo chown 123:456 110
[hzz@huangzz6 ~]$ sudo find / -nouser -nogroup -atime -3 -ls 2>/dev/null
4241474 0 -rw-rw-r-- 1 123 456 0 Feb 9 11:04 /home/hzz/789
4241475 0 drwxrwxr-x 2 123 456 6 Feb 9 11:11 /home/hzz/110
[hzz@huangzz6 ~]$

5、查找/etc目录下大于1M,且类型为普通文件的所有文件。

1
2
3
4
5
6
7
8
9
10
# 使用find相关参数
# -size [+|-]nUNIT 常用单位(UNIT):k, M, G;
# +n 时间区间为:n+1 <= time < +∞;

# 由于/etc下没有大于1M的文件,从其他地方拷过去以便显示效果

[hzz@huangzz6 ~]$ sudo cp -a /lib64/libdb-4.7.so /etc/
[hzz@huangzz6 ~]$ sudo find /etc -type f -size +1M -ls
16795907 1492 -rwxr-xr-x 1 root root 1525560 Jan 11 18:40 /etc/libdb-4.7.so
[hzz@huangzz6 ~]$

6、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件。

1
2
3
4
5
6
7
8
9
10
11
# 使用find相关参数
# -perm [/|-]MODE
# -MODE 每一类对象都必须同时拥有为其指定的权限标准;

[hzz@huangzz6 etc]$ sudo touch /etc/init.d/test
[hzz@huangzz6 etc]$ sudo touch /etc/init.d/test2
[hzz@huangzz6 etc]$ sudo chmod 753 /etc/init.d/test
[hzz@huangzz6 etc]$ sudo chmod 755 /etc/init.d/test2
[hzz@huangzz6 etc]$ sudo find /etc/init.d/ -perm -113 -ls
50334776 0 -rwxr-x-wx 1 root root 0 Feb 9 11:55 /etc/init.d/test
[hzz@huangzz6 etc]$

7、查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件。

1
2
3
4
5
6
7
8
9
10
# 使用find相关参数
# -a 与;
# -o 或;
# -not 非,也可以使用!;

[hzz@huangzz6 ~]$ sudo chown hzz:hzz /etc/libdb-4.7.so
[hzz@huangzz6 ~]$ echo 123 > /etc/libdb-4.7.so
[hzz@huangzz6 ~]$ sudo find /etc -mtime -6 ! -user root ! -user hadoop -ls
16795907 4 -rwxr-xr-x 1 hzz hzz 4 Feb 9 11:40 /etc/libdb-4.7.so
[hzz@huangzz6 ~]$

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

1
2
3
4
5
6
7
8
9
# 使用vim中的:s替换命令

cp -a /etc/rc.d/rc.sysinit /tmp/;
vim /tmp/rc.sysinit;

# 打开文件后执行以下命令

:%s/^\([[:space:]]\+.*\)/\*\1/g
:wq

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

1
2
3
4
5
6
7
8
# 使用vim中的:s替换命令

vim /tmp/rc.sysinit;

# 打开文件后执行以下命令

:%s/^\*[[:space:]]\+\(.*\)/\1/g
:wq

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

1
2
3
4
5
6
7
8
# 使用vim中的:s替换命令

vim /etc/yum.repos.d/CentOS-Media.repo;

# 打开文件后执行以下命令

:%s/\(\<enabled\>\|\<gpgcheck\>\)=0/\1=1/g
:wq

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

1
0 0 * * 2,4,6 cp -a /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d)

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

1
* */2 * * * grep '^S' /proc/meminfo >> stats/memory.txt

13、写一个脚本创建10用户user10-user19;密码同用户名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

[[ "$(whoami)" != "root" ]] && echo -e "\nPlease exec by root! \n" && exit 1

for (( i=10 ; i<=19 ; i++ ))
do
add_user=user${i}
add_passwd=${add_user}

if [[ $(id ${add_user} &> /dev/null) ]]
then
echo -e "\n${add_user} exist! \n"
else
useradd ${add_user}
echo "${add_passwd}"|passwd --stdin ${add_user}
fi
done

exit

相关笔记:(不与作业周期同步)


Vim编辑器

《Vim编辑器简介》

Bash变量、配置及测试运算

Bash变量、配置及测试运算简介

Linux下的文件查找

Linux下的文件查找

17-黄中章