Linux运维练习

Linux运维练习

一、Linux基础

1. 题目

1、显示当前时间,格式:2020-1-29 10:20:30   
2、显示前天是星期几
3、设置当前日期为2019-08-07 06:05:10
4、在本机字符终端登录时,除显示原有信息外,再显示当前登录终端号,主机名和当前时间
5、今天1830自动关机,并提示用户

2. 答案

1.显示当前时间,格式:2020-1-29 10:20:30   
	[root@centos7 ~]# date "+%F %T"
2.显示前天是星期几
	[root@centos7 ~]# date +%A --date '2 days ago'
	[root@centos7 ~]# date -d -2days +%a
3.设置当前日期为2019-08-07 06:05:10
	[root@centos7 ~]# date -s "2019-08-07 06:05:10"
4.在本机字符终端登录时,除显示原有信息外,再显示当前登录终端号,主机名和当前时间
	[root@centos7 ~]# vim /etc/issue
	最后一行插入:
	Hostname:\n
	Terminal Number:\l
	Current Time:\t
5.今天18:30自动关机,并提示用户
	[root@centos7 ~]# shutdown -h 18:30 "it is will poweroff at 18:30"

二、文件管理

1. 题目

1.查看文件类型
2.显示当前工作目录
3.获取/etc/sysconfig/的基名
4./etc/sysconfig/的路径名
5.切换到用户家目录
6.切换到父目录
7.切换到/etc/sysconfig目录下
8.切换到上一次所在的目录
9.显示当前目录下所有文件
10.显示目录内容的额外信息
11.递归显示目录内容
12.查看test.txt文件的状态,注意三个时间戳
13.创建空文件test.sh
14./etc/httpd/conf/httpd.conf文件和/etc/my.cnf文件拷贝到当前目录
15./etc/nginx目录及其下面所有文件和子目录拷贝到当前目录
16.复制httpd.conf文件并重命名为httpd.conf.bak
17.复制/etc目录下所有文件及其子目录到当前目录,并重命名为etc_bak
18.把当前目录下nginx命令重命名为nginx_bak
19.把httpd.conf目件移动到/tmp目录下
20.删除当前目录下所有文件
21.创建目录a,其下包含b和c两目录,且b和c目录下都有一个目录d
22.显示a目录的子录树
23.查看/usr/local目录树,但仅查看2级的目录深度
24./usr/sbin/apachectl文件在当前目录下创建软连接文件为apachectl
25.显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数的文件或目录
26.显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
27.显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
28.显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
29.显示/etc目录下,所有以.d结尾的文件或目录
30.显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
31.只显示/root下的隐藏文件和目录
32.只显示/etc下的非隐藏目录
33.每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见
34.创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
35.如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
36.如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a,/testdir/dir2/x/b
37.如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

2. 答案

1.查看文件类型
	[root@centos7 ~]# ll
2.显示当前工作目录
	[root@centos7 ~]# pwd
3.获取/etc/sysconfig/的基名
	[root@centos7 ~]# basename /etc/sysconfig/
4.取/etc/sysconfig/的路径名
	[root@centos7 ~]# dirname /etc/sysconfig/
5.切换到用户家目录
	[root@centos7 ~]# cd
	[root@centos7 ~]# cd ~
6.切换到父目录
	[root@centos7 ~]# cd ..
7.切换到/etc/sysconfig目录下
	[root@centos7 /]# cd /etc/sysconfig/
8.切换到上一次所在的目录
	[root@centos7 sysconfig]# cd -
9.显示当前目录下所有文件
	[root@centos7 /]# ls -a
10.显示目录内容的额外信息
	[root@centos7 /]# ls -l
	[root@centos7 /]# ll
11.递归显示目录内容
	[root@centos7 ~]# ls -R
12.查看test.txt文件的状态,注意三个时间戳
	[root@centos7 ~]# stat test.txt
13.创建空文件test.sh
	[root@centos7 ~]# touch test.sh
14.把/etc/httpd/conf/httpd.conf文件和/etc/my.cnf文件拷贝到当前目录
	[root@centos7 ~]# cp /etc/httpd/conf/httpd.conf /etc/my.cnf ./
15.把/etc/nginx目录及其下面所有文件和子目录拷贝到当前目录
	[root@centos7 ~]# cp -R /etc/nginx/ ./
16.复制httpd.conf文件并重命名为httpd.conf.bak
	[root@centos7 ~]# cp httpd.conf httpd.conf.bak
17.复制/etc目录下所有文件及其子目录到当前目录,并重命名为etc_bak
	[root@centos7 ~]# cp -R /etc/ ./etc_bak
18.把当前目录下nginx命令重命名为nginx_bak
	[root@centos7 ~]# mv nginx/ nginx_bak
19.把httpd.conf目件移动到/tmp目录下
	[root@centos7 ~]# mv httpd.conf /tmp/
20.删除当前目录下所有文件
	[root@centos7 ~]# rm -rf *
21.创建目录a,其下包含b和c两目录,且b和c目录下都有一个目录d
	[root@centos7 data]# mkdir -p a/{b,c}/d
22.显示a目录的子录树
	[root@centos7 data]# tree a
23.查看/usr/local目录树,但仅查看2级的目录深度
	[root@centos7 data]# tree -L 2 /usr/local/
24.把/usr/sbin/apachectl文件在当前目录下创建软连接文件为apachectl
	[root@centos7 data]# ln -s /usr/sbin/apachectl apachectl
	
25.显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数的文件或目录
	[root@centos7 data]# ls -d /var/l*[0-9]*[[:lower:]]
26.显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
	[root@centos7 ~]# ls -d /etc/[0-9]*[^[:digit:]]
27.显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
	[root@centos7 ~]# ls -d /etc/[^[:alpha:]][a-zA-Z]*
28.显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
	[root@centos7 ~]# ls -d /etc/rc[0-6]*
29.显示/etc目录下,所有以.d结尾的文件或目录
	[root@centos7 ~]# ls -d /etc/*.d 
30.显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
	[root@centos7 ~]# ls -d /etc/[mnrp]*.conf 
31.只显示/root下的隐藏文件和目录
	[root@centos7 ~]# ls -d /root/.* 
32.只显示/etc下的非隐藏目录
	[root@centos7 ~]# ls -d /etc/[^.]*/
33.每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见
	[root@centos7 data]# cp -av /etc/ /data/backup`date +%F`
34.创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
	[root@centos7 data]# mkdir /data/rootdir
	[root@centos7 data]# cp -a /root /data/rootdir
35.如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
	[root@centos7 data]# mkdir -p testdir/dir1/{x,y}/{a,b}
36.如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a,/testdir/dir2/x/b
	[root@centos7 data]# mkdir -p testdir/dir2/{x/{a,b},y}
37.如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
	[root@centos7 data]# mkdir -p testdir/dir{3,4,5/dir{6,7}}

三、Vim编辑器与正则表达式

1. 题目

1.显示passwd文件中,不包含bash字串的行,并显示行号
2.显示passwd文件中,包含root字串的行的总行数
3.仅显示passwd文件中的root字串及所在的行号
4.显示passwd文件中,包含root字串的行和其下2行的内容
5.显示passwd文件中,包含root字串的行和其上2行的内容
6.显示passwd文件中,包含root字串的行和其上下2行的内容
7.扫描10.0.0.0/24子段,显示在线的ip地址(用nmap -sP命令扫描)
8.显示passwd文件中,包含root字串或包含nologin字串的行
9.匹配root整个单词
10.过滤出现0次或多次的字母a
11.过滤出现0次或1次的字母a
12.过滤出现1次或多次的字母a
13.过滤出现2次字母a
14.过滤出出现少2次,最多4次的字母a
15.过滤出出现少3次的字母a
16.过滤出现最多2次的字母a
17.过滤nginx.conf文件中,不显示空行和以空格开头0次或多次后跟#号的行,其余行都显示
18.过滤ip命令输出的所有ip地址
19.显示/proc/meminfo文件中以大小s开头的行
20.找出/etc/passwd用户名同shell名的行
21.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
22.将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
23.利用扩展正则表达式分别表示0-910-99100-199200-249250-255
24.vim打开/root/test1.txt文件,并在其内部把/etc/issue内容复制到文件尾部
25.vim编辑/root/test1.txt文件并将其另存为/root/test1.bak文件
26.用vim编辑/root/test1.txt文件时,在其内部执行shell命令查看ip地址

2. 答案

1.显示passwd文件中,不包含bash字串的行,并显示行号
	[root@centos7 testdir]# getent passwd|grep -v -n "bash"
2.显示passwd文件中,包含root字串的行的总行数
	[root@centos7 testdir]# getent passwd|grep -c "root" 
3.仅显示passwd文件中的root字串及所在的行号
	[root@centos7 testdir]# getent passwd|grep -o -n "root"
4.显示passwd文件中,包含root字串的行和其下2行的内容
	[root@centos7 testdir]# getent passwd|grep -A 2 "root" 
5.显示passwd文件中,包含root字串的行和其上2行的内容
	[root@centos7 testdir]# getent passwd|grep -B 2 "root" 
6.显示passwd文件中,包含root字串的行和其上下2行的内容
	[root@centos7 testdir]# getent passwd|grep -C 2 "root" 
7.扫描10.0.0.0/24子段,显示在线的ip地址(用nmap -sP命令扫描)
	[root@centos7 testdir]# nmap -sP 10.0.0.0/24 2>/dev/null|grep "for"|cut -d" " -f5
8.显示passwd文件中,包含root字串或包含nologin字串的行
	[root@centos7 testdir]# getent passwd|grep "root\|nologin"
	[root@centos7 testdir]# getent passwd|grep -e root -e nologin
9.匹配root整个单词
	[root@centos7 testdir]# echo -e "root\nrooter"|grep -w root
	[root@centos7 testdir]# echo -e "root\nrooter"|grep  "\broot\b"
	[root@centos7 testdir]# echo -e "root\nrooter"|grep  "\<root\>"
10.过滤出现0次或多次的字母a
	[root@centos7 testdir]# echo abaaac|grep -o "a*"
11.过滤出现0次或1次的字母a
	[root@centos7 testdir]# echo abaaac|grep -o "a\?"
12.过滤出现1次或多次的字母a
	[root@centos7 testdir]# echo abaaac|grep -o "a\+"
13.过滤出现2次字母a
	[root@centos7 testdir]# echo abaaac|grep -o "a\{2\}"
14.过滤出出现少2次,最多4次的字母a
	[root@centos7 testdir]# echo abaaacaa|grep -o "a\{2,4\}"
15.过滤出出现少3次的字母a
	[root@centos7 testdir]# echo abaaacaaaa|grep -o "a\{3,\}"
16.过滤出现最多2次的字母a
	[root@centos7 testdir]# echo abaaacaaaa|grep -o "a\{,2\}"
17.过滤nginx.conf文件中,不显示空行和以空格开头0次或多次后跟#号的行,其余行都显示
	[root@centos6 tmp]# cat httpd.conf |grep -v "^$\|^[[:space:]]*#"
18.过滤ip命令输出的所有ip地址
	[root@centos6 tmp]# ip addr|grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}"
19.显示/proc/meminfo文件中以大小s开头的行
	[root@centos6 tmp]# cat /proc/meminfo |grep -i ^s
20.找出/etc/passwd用户名同shell名的行
	[root@centos6 tmp]# getent passwd|grep "^\(\<[[:alpha:]]\+\>\).*/\1$"
21.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
	[root@centos6 tmp]# grep -o "^\<\([[:alpha:]_]\)\+\>()" /etc/rc.d/init.d/functions
22.将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
	[root@centos6 tmp]# echo "welcome to magedu linux"|grep -o "."|sort |uniq -c|sort -nr
23.利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
	[root@centos6 tmp]#  echo {0..9}|egrep -o "[0-9]"
	[root@centos6 tmp]# echo {10..99}|egrep -o "[1-9]{1}[0-9]{1}" 
	[root@centos6 tmp]# echo {100..199}|egrep -o "1[0-9]{2}"
	[root@centos6 tmp]# echo {200..249}|egrep -o "2[0-4]{1}[0-9]{1}"
	[root@centos6 tmp]# echo {250..255}|egrep -o "25[0-5]{1}"
24.vim打开/root/test1.txt文件,并在其内部把/etc/issue内容复制到文件尾部
	vim test1.txt
	:!cat /etc/issue
25.vim编辑/root/test1.txt文件并将其另存为/root/test1.bak文件
	vim test1.txt
	:w /root/test1.bak
26.用vim编辑/root/test1.txt文件时,在其内部执行shell命令查看ip地址
	vim test1.txt
	:! ip addr

四、标准IO和管道

1. 题目

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
 Hello, I am 用户名,The system version is here,please help me to check
it ,thanks!
操作系统版本信息
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
5、计算1+2+3+...+99+100的总和
6、删除Windows文本文件中的回车字符 ,即“\r”
7、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格
8、将PATH变量每个目录显示在独立的一行
9、将指定文件中0-9分别替代成a-j
10、将文件/etc/centos-release中每个单词(由字母组成)显示在独立一行,并无空行

2. 答案

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
	[root@centos7 data]# cat /etc/issue|tr 'a-z' 'A-Z' >> /tmp/issus.out
	[root@centos7 data]# cat /etc/issue|tr "[[:lower:]]" "[[:upper:]]" >> /tmp/issus.out
2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
	[root@centos7 data]# who|tr 'a-z' 'A-Z' >> /tmp/who.out
	[root@centos7 data]# who|tr '[[:lower:]]' '[[:upper:]]' >> /tmp/who.out
3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
 Hello, I am 用户名,The system version is here,please help me to check
it ,thanks!
操作系统版本信息
	[zjl@centos6 root]$ mail -s help root << END
	> Hello,I am `whoami`,
	> The system version is here, please help me to check it, thanks!
	> `cat /etc/centos-release`
	> END
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
	[root@centos6 ~]# ls /root/ |tr '\n' ' '
5、计算1+2+3+...+99+100的总和
	[root@centos6 ~]# echo {1..100}|tr " " "+"|bc
6、删除Windows文本文件中的回车字符 ,即“\r”
	[root@centos6 ~]# cat 1.txt|tr -d "\r" >>1.txt.new
7、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格
	[root@centos6 ~]# echo "xt.,l 1 jr#1.txt.newmn 2 c*/fe 3 uz 4" |tr -dc [[:digit:]][[:space:]]
	[root@centos6 ~]# echo "xt.,l 1 jr#1.txt.newmn 2 c*/fe 3 uz 4" |tr -d [[:alpha:]][[:punct:]] 
	
[:alnum:]:字母和数字 
[:alpha:]:字母 
[:cntrl:]:控制(非打印)字符
[:digit:]:数字 
[:graph:]:图形字符 
[:lower:]:小写字母 
[:print:]:可打印字符
[:punct:]:标点符号 
[:space:]:空白字符 
[:upper:]:大写字母
[:xdigit:]:十六进制字符
8、将PATH变量每个目录显示在独立的一行
	[root@centos6 ~]# echo $PATH|tr ':' '\n'
9、将指定文件中0-9分别替代成a-j
	[root@centos6 ~]# echo {0..9}|tr '{0-9}' '{a-j}'
10、将文件/etc/centos-release中每个单词(由字母组成)显示在独立一行,并无空行
	[root@centos6 ~]# cat /etc/centos-release |tr -cs '[[:alpha:]]' "\n"

五、用户组和权限管理

1. 题目

1.创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为 "Gentoo Distribution"
2.创建下面的用户、组和组成员关系 名字为webs 的组 用户nginx 使用webs 作为
附属组 用户varnish,也使用webs 作为附属组 用户mysql,不可交互登录系统,
且不是webs 的成员, nginx, varnish, mysql密码都是magedu
3.当用户docker对/testdir 目录无执行权限时,意味着无法做哪些操作?
4.当用户mongodb对/testdir 目录无读权限时,意味着无法做哪些操作?
5.当用户redis 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?
6.当用户zabbix对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?
7.复制/etc/fstab⽂件到/var/tmp下,设置文件所有者为tomcat读写权限,所属组为apps组有读写权限,其他人无权限
8.误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性
9./testdir/dir里创建的新文件自动属于webs组,
组apps的成员如:##tomcat能对这些新文件有读写权限,
组dbs的成员如: mysql只能对新文件有读权限,
其它用户(不属于webs,apps,dbs)不能访问这个文件夹
10.备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限
11.在系统上添加一个用户名称为apache的用户,默认shell为/sbin/nolgoin且不创建家目录
12.设置/home/app/run/apache目录及其子目录和文件属主属组为apache
13.修改权限为属主添加写和执行权限、属组没有读权限其它人有读和执行权限
14.递归设置testdir目录权限为:属组添加可读、可写、可执行权限,但其子目件不添加执行权限
15.设置文件1.sh权限为只有属主有读写权限
16.完全切换linux用户身份
17.不完全切换linux用户身份
18.设置二进制可执行程序文件chmod拥有suid权限
19.取消二进制可执行程序文件chmod拥有的suid权限
20.对testdir目录设置sgid权限,作为协作目录
21.对testdir目录设置sticky权限,实现只有文件的所有者或root才能删除该目录下的文件
22./testdir/dir下创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员
如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。
23.备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,
清除/testdir/dir中所有ACL权限,最后还原ACL权限getfacl对目录操作时,不能使用绝对路径;

2. 答案

1.创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为 "Gentoo Distribution"

	useradd -G bin,root -c "Gentoo Distribution" -s /bin/csh gentoo
2.创建下面的用户、组和组成员关系 名字为webs 的组 用户nginx 使用webs 作为
附属组 用户varnish,也使用webs 作为附属组 用户mysql,不可交互登录系统,
且不是webs 的成员, nginx, varnish, mysql密码都是magedu

	groupadd webs
	useradd -G webs nginx;echo magedu|passwd --stdin nginx
	useradd -G webs varnish;echo magedu|passwd --stdin varnish
	useradd -s /sbin/nolgoin mysql ;echo magedu|passwd --stdin mysql
3.当用户docker对/testdir 目录无执行权限时,意味着无法做哪些操作?

	1、无法进入目录
 	2、可以用ls查看列表,但是无法查看文件属性类型
	3、就算对目录中的文件有rw权限,也无法查看和写入>>也不行
4.当用户mongodb对/testdir 目录无读权限时,意味着无法做哪些操作?

	 1、可以进入目录,无法查看文件列表,可以查看ll file详细信息
	 2、可以执行目录内程序,cat file可以查看文件内容
	 3、如果对文件有w权限,还可以通过>>写入文件
5.当用户redis 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?

	不能在该目录下删除和创建文件
6.当用户zabbix对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?

	不能改、可删除。
7.复制/etc/fstab文件到/var/tmp下,设置文件所有者为tomcat读写权限,所属组为apps组有读写权限,其他人无权限

	cp /etc/fstab /var/tmp/
	chown -R tomcat:apps /var/tmp/fstab
	chmod 660 /var/tmp/fstab
8.误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性

	cp -a /etc/skel/ /home/git
	chown -R git.git /home/git
	chmod -R 700 /home/git
9.在/testdir/dir里创建的新文件自动属于webs组,
组apps的成员如:tomcat能对这些新文件有读写权限,
组dbs的成员如: mysql只能对新文件有读权限,
其它用户(不属于webs,apps,dbs)不能访问这个文件夹

	groupadd webs
	groupadd apps
	groupadd dbs
	useradd -G apps tomcat
	useradd -G dbs mysql
	chgrp -R webs /data/testdir/dir/
	chmod -R g+s /data/testdir/dir/
	setfacl -R -m g:apps:rw /data/testdir/dir/
	setfacl -R -m g:dbs:r /data/testdir/dir/
	setfacl -R -m o::0 /data/testdir/dir/  
	
	如果用户存着可以通过下面方式改变附属组
	groupmems -g dbs -a mysql
	groupmems -g apps -a tomcat
10.备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限

	getfacl -R /data/testdir/dir/ > /data/acl.txt
	setfacl -R -b /data/testdir/dir/
	getfacl /data/testdir/dir/
	setfacl -R --set-file=/data/acl.txt /data/testdir/dir/
11.在系统上添加一个用户名称为apache的用户,默认shell为/sbin/nolgoin且不创建家目录

	useradd -M -s /sbin/nolgoin apache
12.设置/home/app/run/apache目录及其子目录和文件属主属组为apache

	mkdir -p /home/app/run/apache/{log,htdoc,conf}
	chown -R apache:apache /home/app/run/apache/
13.修改权限为属主添加写和执行权限、属组没有读权限其它人有读和执行权限

	chmod u=wx,g=rx,o=rx 1.sh 
	ll
	--wxr-xr-x. 1 root root 154 Feb  5 04:57 1.sh
14.递归设置testdir目录权限为:属组添加可读、可写、可执行权限,但其子目件不添加执行权限

	chmod -R g=rwX testdir/
15.设置文件1.sh权限为只有属主有读写权限

	chmod 600 1.sh 
16.完全切换linux用户身份

	su - linux
17.不完全切换linux用户身份

	su linux 
18.设置二进制可执行程序文件chmod拥有suid权限

	cp /usr/bin/chmod .
	chmod u+s chmod 
19.取消二进制可执行程序文件chmod拥有的suid权限

	chmod u-s chmod 
20.对testdir目录设置sgid权限,作为协作目录

	chmod g+s testdir/
21.对testdir目录设置sticky权限,实现只有文件的所有者或root才能删除该目录下的文件

	chmod o+t testdir/
22.在/testdir/dir下创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员
如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。

	mkdir /data/testdir/dir
	groupadd g1
	groupadd g2
	groupadd g3
	useradd -G g2 alice
	useradd -G g3 tom
	chgrp g1 /data/testdir/dir/
	chmod 2770 /data/testdir/dir/
	setfacl -Rm d:g:g2:rw /data/testdir/dir/
	setfacl -Rm g:g2:rwx /data/testdir/dir/
	setfacl -Rm g:g3:rx /data/testdir/dir/
	
23.备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,
清除/testdir/dir中所有ACL权限,最后还原ACL权限getfacl对目录操作时,不能使用绝对路径;
	
	tar -cvf dir.tar /testdir/dir
	getfacl -R testdir/dir > /root/acl.txt
	setfacl -b /testdir/dir
	tar -xvf dir.tar -C /var/tmp
	cp ac1.txt /var/tmp
	cd /root
	setfacl --restore ac1.txt

六、文本处理工具

1. 题目

1.监视查看1.sh文件尾部是否有内容增加
2.比较1.sh和2.sh两文件的不同
3.截取/etc/passwd文件第一行,以冒号为分隔符,抽取第7个字段
4.1.sh文件一行内容的空格分隔,按第3段从大到小排序
	[root@Magedu ~]# cat 1.sh
	this is 111 line
	this is 222 line
	this is 333 line
	this is 444 line
	this is 555 line
	this is 666 line
	this is 777 line
	this is 888 line
	this is 999 line
5.统计/etc/pass文件有多少行
6.统计2.sh文件中相同内容的行出现的次数
	[root@Magedu ~]# cat 2.sh
	this is 111 line
	this is 111 line
	this is 111 line
	this is 111 line
	this is 111 line
7.使用egrep取出/etc/rc.d/init.d/functions路径的目录名
8.找出ifconfig “网卡名” 命令结果中本机的IPv4地址
9.查出分区空间使用率的最大百分比值
10.查出用户UID最大值的用户名、 UID及shell类型
11.查出/tmp的权限,以数字方式显示
12.统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
13.显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
14.显示/etc/passwd文件中不以/bin/bash结尾的行
15.显示用户rpc默认的shell程序
16.找出/etc/passwd中的两位或三位数
17.显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
18.找出“netstat -tan” 命令结果中以LISTEN后跟任意多个空白字符结尾的行
19.显示CentOS7上所有系统用户的用户名和UID
20.添加用户bash、 testbash、 basher、 sh、 nologin(其shell为/sbin/nologin),
找出/etc/passwd用户名和shell同名的行
21.利用df和grep,取出磁盘各分区利用率,并从大到小排序
22.显示三个用户root、 mage、 wang的UID和默认shell
23.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
24.使用egrep取出/etc/rc.d/init.d/functions文件路径的录名
25.统计last命令中以root登录的每个主机IP地址登录次数
26.显示ifconfig命令结果中所有IPv4地址
27.复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
28.复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命
为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
29.在vim中设置tab缩进为4个字符
30.复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
31.删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的的#号
32.找出“ldd /usr/bin/cat”命令的结果中的文件路径

2. 答案

1.监视查看1.sh文件尾部是否有内容增加

	tail -f 1.sh
2.比较1.sh和2.sh两文件的不同

	diff -u 1.sh  2.sh
3.截取/etc/passwd文件第一行,以冒号为分隔符,抽取第7个字段

	cat /etc/passwd|head -n1|cut -d: -f7
4.以1.sh文件一行内容的空格分隔,按第3段从大到小排序

	cat 1.sh
	this is 111 line
	this is 222 line
	this is 333 line
	this is 444 line
	this is 555 line
	this is 666 line
	this is 777 line
	this is 888 line
	this is 999 line

	cat 1.sh |sort -nr -t" " -k3
	cat 1.sh |sort -k3 -r
5.统计/etc/passwd文件有多少行

	wc -l /etc/passwd
6.统计2.sh文件中相同内容的行出现的次数

	cat 2.sh
	this is 111 line
	this is 111 line
	this is 111 line
	this is 111 line
	this is 111 line

	uniq -c 2.sh
7.使用egrep取出/etc/rc.d/init.d/functions路径的目录名

	echo /etc/rc.d/init.d/functions |egrep -o "^[/].*/"
8.找出ifconfig “网卡名” 命令结果中本机的IPv4地址

	ifconfig eth1|grep "cast"|cut -d: -f2|cut -d" " -f1
	ifconfig eth1|sed -n 2p|tr -s " " ":"|cut -d: -f4
9.查出分区空间使用率的最大百分比值

	df|grep ^/dev|tr -s " " "%"|cut -d% -f5|sort -nr|head -n1
10.查出用户UID最大值的用户名、 UID及shell类型

	getent passwd|cut -d: -f1,3,7|sort -nr -t":" -k2|head -n1
11.查出/tmp的权限,以数字方式显示

	stat /tmp|sed -n 4p|cut -d"(" -f2|cut -d"/" -f1
	stat /tmp/|head -n4|tail -1|cut -d"(" -f2|grep -o "^[[:digit:]]*"
12.统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

	netstat -tun|sed -n 3p|tr -s " " ":"|cut -d: -f6|sort -nr|uniq -c
13.显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

	cat /proc/meminfo|grep ^[S\|s]
	cat /proc/meminfo|grep -i ^S
14.显示/etc/passwd文件中不以/bin/bash结尾的行

	cat /etc/passwd|grep -v "/bin/bash$"
15.显示用户rpc默认的shell程序

	cat /etc/passwd|grep rpc|cut -d: -f1,7
16.找出/etc/passwd中的两位或三位数

	cat /etc/passwd|grep -oE "[0-9]{2,3}"|cat -n
17.显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行

	cat /etc/grub2.cfg|grep  "^[[:blank:]]\+[^[:blank:]].*$"|cat -n
18.找出“netstat -tan” 命令结果中以LISTEN后跟任意多个空白字符结尾的行

	netstat -tan|grep "LISTEN.*\+[[:blank:]]$"
	netstat -tan|grep ".*LISTEN[[:blank:]]\+$"
19.显示CentOS7上所有系统用户的用户名和UID

	cat /etc/passwd|cut -d: -f1,3|grep -E "[0-9]{1,3}"
	cut -d: -f1,3 /etc/passwd|egrep "\b[0-9]{1,3}\b"
20.添加用户bash、 testbash、 basher、 sh、 nologin(其shell为/sbin/nologin),
找出/etc/passwd用户名和shell同名的行

	useradd bash
	useradd testbash
	useradd basher
	useradd sh
	useradd -s /sbin/nologin nologin
	cat /etc/passwd|grep -E "^(.*)(:.*)\b\1$"
21.利用df和grep,取出磁盘各分区利用率,并从大到小排序

	df|grep ^/dev/sd|grep -Eo "[0-9]{1,3}%"|sort -nr -t% -k1
22.显示三个用户root、 mage、 wang的UID和默认shell

	cat /etc/passwd|grep "^root\b\|^mage\b\|^wang\b"|cut -d: -f1,3,7
	cat /etc/passwd|grep -E "^(root|mage|wang)\b"|cut -d: -f1,3,7
23.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

	cat /etc/rc.d/init.d/functions|grep -E "^[[:alpha:]_]+\(\)"
24.使用egrep取出/etc/rc.d/init.d/functions文件路径的录名

	echo "/etc/rc.d/init.d/functions"|egrep  -o "[^/]+/?$"
25.统计last命令中以root登录的每个主机IP地址登录次数

	last|grep root|tr -s " " " "|cut -d" " -f 3|grep  "[^[:alpha:]]"|sort|uniq -c
	last|grep ^root|egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort |uniq -c
26.显示ifconfig命令结果中所有IPv4地址

	ifconfig |egrep -o "inet addr:([0-9]{1,3}\.){3}[0-9]{1,3}"|egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
	ifconfig |grep "inet addr"|tr -s " " ":"|cut -d: -f4
27.复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

	cp /etc/profile /tmp/
	vim profile
	:%s/^[[:space:]]\+//g
28.复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命
为/tmp/functions的每行开头为空白字符的行的行首添加一个#号

	cp /etc/profile /tmp/
	vim profile
	:%s/^[[:space:]]/#/g
29.在vim中设置tab缩进为4个字符

	vim /etc/vimrc
	set tabstop=4
30.复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log

	cp /etc/rc.d/init.d/functions /tmp/
	vim functions 
	:%s@\/etc\/sysconfig\/init@\/var\/log@g
31.删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的的#号

	vim functions 
	:%s@^#\+[[:space:]]\+@@g 
32.找出“ldd /usr/bin/cat”命令的结果中的文件路径

	ldd /usr/bin/cat|grep -o "/[^[:space:]]*"

七、shell脚本编程基础

1. 题目

1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,
CPU型号,内存大小,硬盘大小
2.编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中
3.编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
4.编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址 和连接数,并按连接数从大到小排序
5.编写脚本sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和
6.编写脚本sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和##
7.编写脚本sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件
8.编写脚本argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立
即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数
9.编写脚本hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址
可访问” ;如果不可ping通,则提示用户“该IP地址不可访问”
10.编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
11.编写脚本per.sh,判断当前用户对指定参数文件,是否不可读并且不可写
12.、编写脚本excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本
文件
13.编写脚本nologin.sh和login.sh,实现禁止和允许普通用户登录系统
14.编写脚本createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则
添加之;显示添加的用户的id号等信息
15.编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息
16.编写脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)
17.编写脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数
18.让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin
19.用户root登录时,将命令指示符变成红色,并自动启用如下别名:
rm=‘rm –i’
cdnet=‘cd /etc/sysconfig/network-scripts/’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33  (如果系统是CentOS7)
20.任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous!”
21.编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
22.编写用户的环境初始化脚本reset.sh,包括别名,登录提示符, vim的设置,环境变量等

2. 答案

1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,
IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小

vim systeminfo.sh
	
	BEGINCOLOR="\033[1;35m"
	ENDCOLOR="\033[0m"
	
	echo -e "My hostname is :$BEGINCOLOR $HOSTNAME $ENDCOLOR"
	echo -e "IPv4 is :$BEGINCOLOR `ip addr|grep brd|sed -rn "s@^[^[:digit:]].* ([[:digit:].]+/[[:d
	igit:]]+).*@\1@p"|head -n1` $ENDCOLOR"
	echo -e "Os version is :$BEGINCOLOR `cat /etc/system-release` $ENDCOLOR"
	echo -e "kernal version is :$BEGINCOLOR `uname -r` $ENDCOLOR"
	echo -e "CPU type is :$BEGINCOLOR `cat /proc/cpuinfo |grep "model name"|sed -rn "s@.*:(.*)@\1@
	p"|head -n1` $ENDCOLOR"
	echo -e "Memtotol is :$BEGINCOLOR `free|grep Mem|tr -s " " :|cut -d: -f2`k $ENDCOLOR"
	echo -e "Disk space is :$BEGINCOLOR `lsblk |grep -w sda |sed -rn "s@.* ([[:digit:]]+G).*@\1@p"
	` $ENDCOLOR"  

2.编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中
vim backup.sh

	SOURCE="/etc/"
	DEST=/root/etc_`date +%F`                                                                     
	BEGINCOLOR="\e[1;32m"
	ENDCOLOR="\e[0m"
	
	echo -e ""$BEGINCOLOR"Starting backup...$ENDCOLOR"
	sleep 3
	cp -av $SOURCE $DEST
	echo -e ""$BEGINCOLOR"Backup is finished.$ENDCOLOR"
3.编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

vim disk.sh

	echo -e "This system disk max is \e[34m`df |grep "^/dev/sd"|tr -s " " :|cut -d: -f5|sort -rn|head -n1`\e[0m"
4.编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址
和连接数,并按连接数从大到小排序

vim links.sh

	echo "links ipv4 is:"
	echo -e  "\e[35;1m`netstat -tan|tr -s " " ":"|cut -d: -f6|grep -o "^[[:digit:].]\+"|uniq -c|sort -rn`\e[0m"

5.编写脚本sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和

vim sumid.sh

	id10=`cat -n /etc/passwd|grep -w 20|cut -d: -f3`
	id20=`cat -n /etc/passwd|grep -w 10|cut -d: -f3`
	sum=$((id10+id20))                                                                             
	echo $sum
6.编写脚本sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和##

vim sumspace.sh
第一种:
	read -p "please input first file: " FILE1
	read -p "please input second file: " FILE2
	NUM1=`cat $FILE1|grep "^$"|uniq -c`
	NUM2=`cat $FILE2|grep "^$"|uniq -c`
	SUM=$[NUM1+NUM2]
	echo "The blank line sum is: $SUM"
验证:
	bash sumspace.sh 

第二种:
	NUM1=`cat $1|grep "^$"|uniq -c`
	NUM2=`cat $2|grep "^$"|uniq -c`                                                                
	SUM=$[NUM1+NUM2]
	echo "The blank line sum is: $SUM"
验证:
	bash sumspace.sh test1.txt test2.txt
7.编写脚本sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

vim sumfile.sh

	numetc=`ls -A /etc|wc -l`
	numvar=`ls -A /var|wc -l`
	numusr=`ls -A /usr|wc -l`
	let sum=numetc+numvar+numusr
	echo $sum
8.编写脚本argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,
则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,
则显示第一个参数所指向的文件中的空白行数

vim argsnum.sh

	if [ ! -f $1 ];then                                                                            
        echo "please input a file as args!"
        exit;
	else
        NUM=`cat $1|grep "^$"|wc -l`
        echo "this file sum space is: $NUM"
	fi
9.编写脚本hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。
如果能ping通,则提示用户“该IP地址可访问” ;如果不可ping通,
则提示用户“该IP地址不可访问”

vim hostping.sh
	read -p "please input a ip: " IP
	ping -c1 -w1 $IP &>/dev/null && echo "This ip is up" || echo "This ip is down" 
10.编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,
如果超过80%,就发广播警告空间将满

vim checkdisk.sh 
	WARING=5
	DISK=`df |grep "/dev/sd"|tr -s " " "%"|cut -d% -f5|sort -rn |head -n1`
	INODE=`df -i |grep "/dev/sd"|tr -s " " "%"|cut -d% -f5|sort -rn |head -n1`
	if [[ $DISK -gt $WARING  ]];then                                                               
	        wall this disk over $WARING
	else [[ $INODE -gt $WARING ]]
	        wall this inode over $WARING
	fi
11.编写脚本per.sh,判断当前用户对指定参数文件,是否不可读并且不可写

vim per.sh
	read -p "please input a file: " FILE
	[[ -r $FILE ||  -w $FILE ]] && echo "this file read and write" ||echo echo "this file no read and no write"
12.、编写脚本excute.sh ,判断参数文件是否为sh后缀的普通文件,
如果是,添加所有人可执行权限,否则提示用户非脚本文件

vim excute.sh
	[[ $1 =~ .sh$ ]] && [ -f $1 ] && chmod a+x $1;echo "$1 is .sh" || echo "$1 is not .sh"
13.编写脚本nologin.sh和login.sh,实现禁止和允许普通用户登录系统
	

14.编写脚本createuser.sh,实现如下功能:使用一个用户名做为参数,
如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息

vim createuser.sh
	if ( `id $1 &>/dev/null` );then
	        echo `id $1`
	        exit
	else
	        useradd $1
	        echo "$1 is creat ok `id $1`"                                                                                   
	fi
15.编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,
并判断用户输入的是yes还是no,或是其它信息

vim yesorno.sh
	read -p "Do you agree ?(yes or no): " ANS
	[[ "$ANS" =~ ^[Yy]([Ee][Ss])?$ ]] && { echo ok;exit; }
	[[ "$ANS" =~ ^[Nn][Oo]?$ ]] && { echo Not ok;exit; }
	echo "Your input is false."
16.编写脚本/root/bin/filetype.sh,判断用户输入文件路径,
显示其文件类型(普通,目录,链接,其它文件类型)

vim filetype.sh
第一种:
	read -p "please input a args: " FILE
	a=`ls -l $FILE |grep -o "^."`
	case $a in
	-)
	        echo common file 
	        ;;
	d)
	        echo dir file
	        ;;
	l)
	        echo link file
	        ;;
	*)
	        echo other file
	        ;;
	esac
第二种:
	read -p "please input a args: " FILE                                                                                    
	if [ -z $FILE ];then
	        echo "there must be a filename argument"
	        exit 1
	elif [ ! -e $FILE ];then
	        echo no such file
	        exit 1
	elif [ -d $FILE ];then
	        echo "$FILE is dir file"
	        exit 0
	elif [ -L $FILE ];then
	        echo "$FILE is link file"
	        exit 0
	elif [ -f $FILE ];then
	        echo " $FILE is normal file"
	        exit 0
	else
	        echo "$FILE is other file"
	        exit 0
	fi
17.编写脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数

vim checkint.sh 
	read -p "please input a num: " NUM
	[[ $NUM =~ ^[0-9]+$ ]] && echo "$NUM is int" ||echo "please input a number";exit;
18.让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin

vim /etc/profile
	export PATH=/usr/local/apache/bin:$PATH
source /etc/profile
19.用户root登录时,将命令指示符变成红色,并自动启用如下别名:
rm=‘rm –i’
cdnet=‘cd /etc/sysconfig/network-scripts/’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33 ’ (如果系统是CentOS7)

vim ~/.bashrc
	alias rm='rm –i'
	alias cdnet='cd /etc/sysconfig/network-scripts/'
	alias editnet1='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
	alias editnet2='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
	export PS1='\[\e[1;31m\][\u@\h \W]\$\[\e[0m\]' 
source ~.bashrc 
20.任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous!”

vim /etc/issue
	^[[031m " Hi,dangerous!" ^[[0m"
21.编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等

vim .vimrc
	set ignorecase
	set cursorline
	set autoindent
	autocmd BufNewFile *.sh exec ":call SetTitle()"
	func SetTitle()
	if expand("%:e") == 'sh'
	call setline(1,"#!/bin/bash")
	call setline(2,"#")
	call
	setline(3,"#********************************************************************")
	call setline(4,"#Author: w")
	call setline(5,"#QQ: 1****") 
	call setline(6,"#Date: ".strftime("%Y-%m-%d"))
	call setline(7,"#FileName: ".expand("%"))
	call setline(8,"#URL: http://www.magedu.com")
	call setline(9,"#Description: The test script")
	call setline(10,"#Copyright (C): ".strftime("%Y")." All rights reserved")
	call
	setline(11,"#********************************************************************")
	call setline(12,"")
	endif
	endfunc
	autocmd BufNewFile * normal G
22.编写用户的环境初始化脚本reset.sh,包括别名,登录提示符, vim的设置,环境变量等

vim reset.sh
	cat > /etc/profile.d/env.sh << EOF
	alias cdnet="cd /etc/sysconfig/network-scripts"
	alias editnet="vim /etc/sysconfig/network-scripts/ifcfg-ens33"
	export PS1="[\[\e[32m\]\u\[\e[36m\]@\h_v7\[\e[31m\]\[\e[0m\] \W]\\$ "
	export PATH=/app/bin:$PATH
	EOF
	
	cat > ~/.vimrc << EOF
	set  nu
	EOF

八、文件查找和压缩

1. 题目

1.查找/var目录下属主为root,且属组为mail的所有文件。
2.查找/var目录下不属于root、 lp、 gdm的所有文件。
3.查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是 postfix的文件
4.查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
5.查找/etc目录下小于1M且类型为普通文件的所有文件
6.查找/etc目录下所有用户都没有写权限的文件。
7.查找/etc目录下至少有一类用户没有执行权限的文件
8.查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

2. 答案

1.查找/var目录下属主为root,且属组为mail的所有文件。
2.查找/var目录下不属于root、 lp、 gdm的所有文件。
3.查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是 postfix的文件
4.查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
5.查找/etc目录下小于1M且类型为普通文件的所有文件
6.查找/etc目录下所有用户都没有写权限的文件。
7.查找/etc目录下至少有一类用户没有执行权限的文件
8.查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

九、Sed文本处理

1. 题目

1.删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符。
2.删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的# 和空白字符。
3.在centos6系统/root/install.log每一行行首增加#号
4./etc/fstab文件中不以#开头的行的行首增加#号。
5.处理/etc/fstab路径,使用sed命令取出其目录名和基名。
6.利用sed 取出ifconfig命令中本机的IPv4地址。
7.统计centos安装光盘中Package⽬录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
8.统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和 sed两种方法分别实现)。
9.将文本w嗯件的n和n+1行合并为一行, n为奇数行

2. 答案

1.删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符。
2.删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的# 和空白字符。
3.在centos6系统/root/install.log每一行行首增加#号
4.在/etc/fstab文件中不以#开头的行的行首增加#号。
5.处理/etc/fstab路径,使用sed命令取出其目录名和基名。
6.利用sed 取出ifconfig命令中本机的IPv4地址。
7.统计centos安装光盘中Package⽬录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
8.统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和 sed两种方法分别实现)。
9.将文本w嗯件的n和n+1行合并为一行, n为奇数行

十、软件包管理

1. 题目

1.查询命令java来自于哪个rpm包
2.yum的配置和使用,包括yum仓库的创建
3.编写系统初始化脚本 reset.sh,包括别名,提示符颜色,yum仓库配置问件,安装tree,ftp,lftp,telnet等包
4.在CentOS 7上编译安装 apache 2.4.25 源码包,并启动此服务.

2. 答案

1.查询命令java来自于哪个rpm包
2.yum的配置和使用,包括yum仓库的创建
3.编写系统初始化脚本 reset.sh,包括别名,提示符颜色,yum仓库配置问件,安装tree,ftp,lftp,telnet等包
4.在CentOS 7上编译安装 apache 2.4.25 源码包,并启动此服务.

十一、磁盘存储和文件系统

1. 题目

1.创建一个2G文件系统,块大小为2048byte,预留1%可用空间,文件系统
ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载
选项
2.写一个脚本,完成如下功能:(1) 列出当前系统识别到的所有磁盘设备(2) 如
磁盘数量为1,则显示其空间使用信息。否则,则显示最后一个磁盘上的空间使用
信息
3.将CentOS6的CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-
x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.10-x86_64-
Everything.iso文件,并将其配置为yum源
4.创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开
机可自动挂载至/backup目录
5.创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为
256k,文件系统为ext4,开机可自动挂载至/mydata
6.创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为
16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
7.新建用户archlinux,要求其家目录为/users/archlinux,后su切换至
archlinux用户,复制/etc/pam.d目录至自己的家目录
8.扩展testlv至7G,要求archlinux用户的文件不能丢失
9.收缩testlv至3G,要求archlinux用户的文件不能丢失
10.对testlv创建快照,并尝试基于快照备份数据,验证快照的功能

2. 答案

1.创建一个2G文件系统,块大小为2048byte,预留1%可用空间,文件系统
ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载
选项
2.写一个脚本,完成如下功能:(1) 列出当前系统识别到的所有磁盘设备(2) 如
磁盘数量为1,则显示其空间使用信息。否则,则显示最后一个磁盘上的空间使用
信息
3.将CentOS6的CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-
x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.10-x86_64-
Everything.iso文件,并将其配置为yum源
4.创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开
机可自动挂载至/backup目录
5.创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为
256k,文件系统为ext4,开机可自动挂载至/mydata
6.创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为
16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
7.新建用户archlinux,要求其家目录为/users/archlinux,后su切换至
archlinux用户,复制/etc/pam.d目录至自己的家目录
8.扩展testlv至7G,要求archlinux用户的文件不能丢失在这里插入代码片
9.收缩testlv至3G,要求archlinux用户的文件不能丢失
10.对testlv创建快照,并尝试基于快照备份数据,验证快照的功能

十二、linux网络管理

1. 题目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';

十三、进程与计划任务

1. 题目

1.每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式为
etcbak-yyyy-mm-dd-HH.tar.gz,其中日期是前一天的时间。
2.每两小时取出当前系统/proc/meminfo文件中以SM开头的信息追加至
/tmp/meminfo.txt文件中。
3.工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率大
于80%,就执行wall警报。

2. 答案

1.每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式为
etcbak-yyyy-mm-dd-HH.tar.gz,其中日期是前一天的时间。
2.每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至
/tmp/meminfo.txt文件中。
3.工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率大
于80%,就执行wall警报。

十四、shell脚本编程进阶

1. 题目

for实现 :
1.判断/var/目录下所有文件的类型
2.添加10个用户user1-user10,密码为8位随机字符
3./etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别
读取每个文件, 以K开头的输出为文件加stop,以S开头的输出为文件名
加start,如K34filename stop S66filename start
4.编写脚本,提示输入正整数n的值,计算1+2++n的总和
5.计算100以内所有能被3整除的整数之和
6.编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段
中主机在线状态
7.打印九九乘法表
8./testdir目录下创建10个html文件,文件名格式为数字N(从110)加随机8个字母,如: 1AbCdeFgH.html
9.打印等腰三角形
10.猴子第一天摘下若干个桃自,当即吃了一半,还不瘾,又多吃了一
个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都
吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃
子了。求第一天共摘了多少?

while实现 :
1.编写脚本,求100以内所有正奇数之和
2.编写脚本, 提示请输入网络地址,如192.168.0.0,判断输入的网
段中主机 在线状态,并统计在线和离线主机各多少
3.编写脚本,打印九九乘法表
4. 编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数
字,并显示其中的最小值和最值.
5.编写脚本,实现打印国际象棋棋盘
6.后续六个字符串: efbaf275cd、 4be9c40b8b、 44b2395c46、 f8c8873ce0、
b902c16c8b、ad865d2f63是通过对随机数变量RANDOM随机 执行命令: echo 
$RANDOM|md5sum|cut –c1-10 后的结果,请破解这些 字符串对应的RANDOM7.随机生成10以内的数字,实现猜字游戏,提示较大或小,相等则退出
8.用文件名做为参数,统计所有参数文件的总行数
9.用二个以上的数字为参数,显示其中的最大值和最小值
10.每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户
hacker登录, 则将登录时间和主机记录于日志/var/log/login.log中,并退出脚本

函数 :
1.编写函数,实现OS的版本判断
2.编写函数,实现取出当前系统eth0的IP地址
3.编写函数,实现打印绿色OK和红色FAILED
4.编写函数,实现判断是否无位置参数,如无参数,提示错误
5.编写服务脚本/root/bin/testsrv.sh,完成如下要求
	(1) 脚本可接受参数: start, stop, restart, status
	(2) 如果参数非此四者之一,提示使用格式后报错退出
	(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功” 考虑:
	如果事先已经启动过一次,该如何处理?
	(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成” 考虑:
	如果事先已然停止过了,该如何处理?
	(5) 如是restart,则先stop, 再start 考虑:如果本来没有start,如何处理?
	(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,
	则显示“SCRIPT_NAME is running...” ,如果/var/lock/subsys/SCRIPT_NAME文件不存在,
	则显示“SCRIPT_NAME is stopped...
	(7)在所有模式下禁止启动该服务,可用chkconfig 和 service命令管理 
	说明: SCRIPT_NAME为当前脚本名 
6.编写脚本/root/bin/copycmd.sh
	(1) 提示用户输入一个可执行命令名称
	(2) 获取此命令所依赖到的所有库文件列表
	(3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下
	 如: /bin/bash ==> /mnt/sysroot/bin/bash /usr/bin/passwd ==>
	/mnt/sysroot/usr/bin/passwd
	(4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下:
	如:/lib64/ldlinux-x86-
	64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
	(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,
	并重复完成上述功能;直到用户输入quit退出 
7.编写函数实现两个数字做为参数,返回最大值
8.斐波那契数列又称黄金分割数列
	因数学家列昂纳多·斐波那契以兔子繁殖为例 子而引入,故又称为“兔子数列”,
	指的是这样一个数列: 0112358132134、 ……,
	斐波纳契数列以如下被以递归的方法定义: F0=0F1=1F(n) =F(n-1)+F(n-2)(n≥2) 利用函数,求n阶斐波那契数列
9.汉诺塔(又称河内塔)问题
	是源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,
	在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 
	大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
	并且 规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,
	利用 函数,实现N片盘的汉诺塔的移动步骤 
10.输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
11.将下图所示,实现转置矩阵matrix.sh
 1 2 3		 2 5 8
 1 4 7	===> 7 8 9 
 4 5 6 		 3 6 9
12.打印杨辉三角形

2. 答案

for实现 :

1.判断/var/目录下所有文件的类型
2.添加10个用户user1-user10,密码为8位随机字符
3./etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别
读取每个文件, 以K开头的输出为文件加stop,以S开头的输出为文件名
加start,如K34filename stop S66filename start
4.编写脚本,提示输入正整数n的值,计算1+2+…+n的总和
5.计算100以内所有能被3整除的整数之和
6.编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段
中主机在线状态
7.打印九九乘法表
8.在/testdir目录下创建10个html文件,文件名格式为数字N(从1到
10)加随机8个字母,如: 1AbCdeFgH.html
9.打印等腰三角形
10.猴子第一天摘下若干个桃自,当即吃了一半,还不瘾,又多吃了一
个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都
吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃
子了。求第一天共摘了多少?

while实现 :

1.编写脚本,求100以内所有正奇数之和
2.编写脚本, 提示请输入网络地址,如192.168.0.0,判断输入的网
段中主机 在线状态,并统计在线和离线主机各多少
3.编写脚本,打印九九乘法表
4. 编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数
字,并显示其中的最小值和最值.
5.编写脚本,实现打印国际象棋棋盘
6.后续六个字符串: efbaf275cd、 4be9c40b8b、 44b2395c46、 f8c8873ce0、
b902c16c8b、ad865d2f63是通过对随机数变量RANDOM随机 执行命令: echo 
$RANDOM|md5sum|cut –c1-10 后的结果,请破解这些 字符串对应的RANDOM值
7.随机生成10以内的数字,实现猜字游戏,提示较大或小,相等则退出
8.用文件名做为参数,统计所有参数文件的总行数
9.用二个以上的数字为参数,显示其中的最大值和最小值
10.每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户
hacker登录, 则将登录时间和主机记录于日志/var/log/login.log中,并退出脚本

函数 :

1.编写函数,实现OS的版本判断
2.编写函数,实现取出当前系统eth0的IP地址
3.编写函数,实现打印绿色OK和红色FAILED
4.编写函数,实现判断是否无位置参数,如无参数,提示错误
5.编写服务脚本/root/bin/testsrv.sh,完成如下要求
	(1) 脚本可接受参数: start, stop, restart, status
	(2) 如果参数非此四者之一,提示使用格式后报错退出
	(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功” 考虑:
	如果事先已经启动过一次,该如何处理?
	(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成” 考虑:
	如果事先已然停止过了,该如何处理?
	(5) 如是restart,则先stop, 再start 考虑:如果本来没有start,如何处理?
	(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,
	则显示“SCRIPT_NAME is running...” ,如果/var/lock/subsys/SCRIPT_NAME文件不存在,
	则显示“SCRIPT_NAME is stopped...”
	(7)在所有模式下禁止启动该服务,可用chkconfig 和 service命令管理 
	说明: SCRIPT_NAME为当前脚本名 
6.编写脚本/root/bin/copycmd.sh
	(1) 提示用户输入一个可执行命令名称
	(2) 获取此命令所依赖到的所有库文件列表
	(3) 复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下
	 如: /bin/bash ==> /mnt/sysroot/bin/bash /usr/bin/passwd ==>
	/mnt/sysroot/usr/bin/passwd
	(4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下:
	如:/lib64/ldlinux-x86-
	64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
	(5)每次复制完成一个命令后,不要退出,而是提示用户键入新的要复制的命令,
	并重复完成上述功能;直到用户输入quit退出 
7.编写函数实现两个数字做为参数,返回最大值
8.斐波那契数列又称黄金分割数列
	因数学家列昂纳多·斐波那契以兔子繁殖为例 子而引入,故又称为“兔子数列”,
	指的是这样一个数列: 0、 1、 1、 2、 3、 5、 8、 13、 21、 34、 ……,
	斐波纳契数列以如下被以递归的方法定义: F(0) =0, F(1) =1,
	 F(n) =F(n-1)+F(n-2)(n≥2) 利用函数,求n阶斐波那契数列
9.汉诺塔(又称河内塔)问题
	是源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,
	在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 
	大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
	并且 规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,
	利用 函数,实现N片盘的汉诺塔的移动步骤 
10.输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
11.将下图所示,实现转置矩阵matrix.sh
 1 2 3		 2 5 8
 1 4 7	===> 7 8 9 
 4 5 6 		 3 6 9
12.打印杨辉三角形

十五、启动和内核管理

1. 题目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';

十六、安全加固SELinux

1. 题目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';

十七、文本处理三剑客之AWK

1. 题目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';

十八、加密与安全

1. 题目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';
发布了18 篇原创文章 · 获赞 8 · 访问量 5413

猜你喜欢

转载自blog.csdn.net/qq_41596208/article/details/103981344