答案在每个题下的空白处,字体颜色为白色,选中反色查看
一、填空题(1-17 题,每题 1 分,其余按照题目所列分,共 50 分)
- 计算机的硬件组成部分主要包括___________________________外设等。
运算器、控制器、主存储器
解析: 计算机的硬件分成5大组成部件:运算器、控制器、存储器、输入设备和输出设备。按照计算机硬件各部分结构所处的位置不同划分成主机(运算器、控制器、主存储器)和外设两部分。
- 如何一次性创建目录/test/1/2/3/4___________________________。
mkdir -p /test/1/2/3/4 - 添加一条到 192.168.3.0/24 的路由,网关是 192.168.1.254:_________。
方法一:route add -net 192.168.3.0/24 gw 192.168.1.254
方法二:ip route add 192.168.3.0/24 via 192.168.1.254
补充: 命令行临时增加路由,重启失效,永久增加路由方法如下:
【centos7.6】
cd /etc/sysconfig/network-scripts/
cat route-ens33
192.168.3.0/24 via 192.168.1.254 dev ens33
systemctl restart network
route -n
【centos6.8】
cd /etc/sysconfig/
cat static-routes
any net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.254
service network restart
- 请写出精确匹配 IPV4 规范的正则表达式___________________________。
grep -Eo “^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3}$”
IP地址组成 | 解析 | 正则表达 |
---|---|---|
0-9 | 一位数,个位是0~9 |
[0-9] |
10-99 | 二位数,十位是1~9 ,个位是0~9 |
[1-9][0-9] |
0~99 | [1-9]?[0-9] | |
100-199 | 三位数,百位是1 ,十位是0~9 ,个位是0~9 |
1[0-9]{2} |
0~199 | (1[0-9]{2})|([1-9]?[0-9]) | |
250-255 | 三位数,百位是2 ,十位是5 ,个位是0~5 |
25[0-5] |
200-249 | 三位数,百位是2 ,十位是0~4 ,个位是0~9 |
2[0-4][0-9] |
0~255 | 25[0-5]|2[0-4][0-9]|((1[0-9]{2})|([1-9]?[0-9]))) |
后面3段的前面使用{3}加上句点.grep -Eo "^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3}$"
匹配邮箱
[root@zycentos7 ~]# egrep '[[:alnum:]]+@[[:alnum:]]+\.[a-z]+' file
[root@zycentos7 ~]# egrep '[a-z0-9]+@[a-z0-9]+\.[a-z]+' file
- 解释2>&1是什么意思__________________________。
把错误输出重定向到标准输出
解析: &> 和 2>&1 结果相同,但过程不同
6. 查询系统中已经安装的软件包:_________,查询指定软件的安装路径与文件列表:_________。
rpm -qa,rpm -ql
rpm -ql 包名 查询软件包安装位置
rpm -qf 系统文件名 查询系统文件属于哪个RPM包
- 将/var/log/messages打包压缩成 mess.tar.gz 后,并删除源文件:________。
tar -zcvf mess.tar.gz /var/log/messages --remove-files - 进程有哪些运行状态______,______,______,______。进程优先级的取值范围是____________,nice值的取值范围是____________。
就绪,执行,阻塞,终止 0~139 -20~+19
解析: nice值:相对优先级(优先级度量)-20~+19,nice值越低优先级越高;
PR值:0~139:0-99系统进程优先级,100-139用户进程优先级
(将nice值级别显示为映射到更大优先级队列,-20映射到100,+19映射到139)
- Linux 查看路由的命令是_________________________。
route -n 或 netstat -rn - 管道就是将前一个命令的_______作为后一个命令的________。
标准输入 标准输出 - 用于授权普通用户执行指定程序的命令是:__________。
sudo - 查看进程号为 12 的进程打开了哪些文件______________。
lsof -p 12 - 在 shell 脚本中$@,$*,”$*”有何区别:_______________________。
$*或$@获取当前Shell脚本所有传参的参数,“$*”将所有的参数视为单个字符串,相当于"$1 $2 $3" - 在 shell 中判断字符串 a 是否为空: ____________________________。
方法一:test -z $a && echo 1 || echo 0【0不为空】
方法二:[ -n “abc” ] && echo 1 || echo 0【1不为空】
解析: 注意引号和$符号
- shell 中如何获取字符串 a 的长度: ____________________________。
echo ${#a} ;速度最快
expr length "$a"
echo $a|wc -L
echo $a|awk '{print length($0)}'
- 使用 scp 工具将/etc 目录的下内容同步到 192.168.1.2 的/data 下,并限制传送带宽为 100M: __________________________________________。
scp -r /etc -l 100M 192.168.1.2:/root - Linux 系统中的/var/log/lastlog 日志记录了所有用户最后登录的记录,可以使用 命令________查看。
lastlog
解析: /var/log/lastlog 记录最近几次成功登录事件和最后一次不成功登录事件
- Lsof 命令应用(4 分)
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
init 1 root rtd DIR 8,2 4096 2 /
init 1 root txt REG 8,2 150352 782041 /sbin/init
(1) COMMAND _______________
USER_________________
FD___________________
TYPE__________________
DEVICE________________
SIZE __________________
NODE________________
(2) 查看 22 端口现在运行的情况________________
(3) 查看所属 root 用户进程所打开的文件类型为 txt 的文件_________________
(4) 查找谁在使用文件系统/home___________________
(1)lsof命令查看到的结果含义如下:
列信息 | 意义 |
---|---|
COMMAND | 进程的名称 |
USER | 进程所有者 |
FD | 文件描述符(如cwd,txt) |
TYPE | 文件类型(如DIR,REG) |
DEVICE | 指定磁盘的名称 |
SIZE | 文件的大小 |
NODE | 索引节点(文件在磁盘上的标识) |
(2)lsof -i:22【lsof -i tcp:22】
(3)lsof -u root -d txt
(4)lsof /home
- Find 的用法(4 分)
1)查找/home目录下,文件名为xingyun.txt的文件,请写出具体命令___________________________________
find /home -name “xingyun.txt”
2)查找/var目录下,第三级目录下,l 类型的文件,请写出具体命令___________________________________
find /var -mindepth 3 -type l
3)查找/home目录下,最近三天修改的文件,并显示每个文件的大小___________________________________
find /home -type f -mtime -3 -exec du -h {} ;
4)查找/usr/local/apache/logs目录最后修改时间大于30天的文件,并删除___________________________________
find /usr/local/apache/logs -mtime +30 -type f -exec rm -rf {} ; - Grep 应用(4 分)
对文件 file 进行如下操作:
1)匹配文本中的key,并打印出该行及以下5行 ___________________________________
grep -A 5 “key” file
2)查询 file 文件中空行所在的行号 ___________________________________
grep -n “^$” file
3)查询file文件中有root或ROOT的行的上下3行(严格匹配)________________________________
grep -iwC 3 “root” file
4)打印出文件中没有被#注释掉的行___________________________________
grep -v “^#” file - AWK 应用(6 分)
对文件 file 进行如下操作:
1)打印一个文件的第四列____________________________________
awk -F: ‘{print $4}’ file
2)打印一个文件的第四列累计相加的结果___________________________
awk -F: ‘{sum+=$4}END{print sum}’ file
3)按照分隔符“|” 进行操作____________________________________
awk -F “|” ‘{print $1}’ file
4)显示文件 file 中的第一个域匹配 101 的行(记录)____________________
方法一:awk -F: ‘$1 ~ /101/ {print $1}’ file
方法二:awk ‘$1==101 {print $0}’ file
5)awk中单引号双引号的区别____________________________________________________
在awk中调用系统变量必须用单引号,如果是双引号,则表示字符串
6)统计 ip 访问情况,要求分析 nginx 访问日志,找出访问页面数量在前十位的 IP: ___________________________________________________
Nginx 日志格式如下:方法一:awk ‘{access_ip[$1]++}END{for(i in access_ip){{print i,access_ip[i]}}}’ /var/log/nginx/access.log|sort -nr -k2|head -10
方法二:awk ‘{print $1}’ /var/log/nginx/access.log|sort -n|uniq -c|sort -nr -k1|head -10 - Sed(4 分)
(1) 将 test.txt 中所有的回车替换成空格 ________________________________
方法一:sed -i ‘:label;N;s/\n/ /;b label’ test.txt
方法二:tr “\n” " " test.txt
(2) 使用 SOD 替换一个文件中所有包含 xingyun 关键字______________________________________________
方法一:sed -i ‘s/xingyun/SOD/g’ file【替换所有】
方法二:sed -i ‘/xingyun/ c SOD’ file【替换含xingyun的整行】
(3) 替换文件的第 5 和第 6 行中用“2”来替换“1”,命令为___________________________________________________________
sed -i ‘5,6 s/1/2/g’ file
sed -i -e ‘5 s/1/2/g’ -e ‘6 s/1/2/g’ test.txt
(4) 写出仅显示一个文件第 5 行到第 8 行的被修改的文件内容___________________________________________________________
sed -n ‘5,8 s/^west/north/p’ file
将5-8行行首的west替换成north并打印被替换过的行
northwest NW Charles Main 4.0 .99 3 35
western WE Sharon Gray 8.3 .97 5 23
southwest SW Lewis Dalsass 4.7 .8 2 19
southern SO Suan Chin 5.1 .96 4 15
southeast SE Patricia Hemenway 4.0 .7 4 16
northwest NW Charles Main 4.0 .99 3 35
western WE Sharon Gray 8.3 .97 5 23
southwest SW Lewis Dalsass 4.7 .8 2 19
[root@zycentos7 ~]# sed -n '5,8 s/^west/north/p' file
northern WE Sharon Gray 8.3 .97 5 23
- 共享目录设置(4 分)
建立一个工作目录/common/staff, 并拥有下列属性:
mkdir –p /common/staff
1)/common/staff 的所属群组为 staff________________________________
方法一:chgrp [-v] staff /common/staff
方法二:chown .staff /common/staff(或将.改为:)
2)该目录应对 staff 群组成员有可读,可写,可执行的权限_______________________________________
chmod 775 /common/staff/
3)对taliesin没有任何权限 ___________________________________________
setfacl -m u:taliesin:0 /common/staff
4)对其他使用者有可读的权限选择_____________________________________
方法一:chmod o+r /share/staff
方法二:setfacl -m o::r /shared/staff - 定制计划任务,用户 SOD 于每天下午 14:30 运行以下任务:将脚本/home/shell/collect.sh 执行,并将标准输出和错误输出重定向到/dev/null,请写出 crontab 中的语句?(2分)______________________________________
[root@zycentos7 ~]# crontab -e -u SOD
no crontab for test01 - using an empty one
crontab: installing new crontab
[root@zycentos7 ~]# crontab -l -u SOD
SHELL=/bin/bash #指定shell类型
PATH=/sbin:/bin:/usr/sbin:/usr/bin #指定环境变量
MAILTO=SOD #指定运行用户
#test crontab #注释
30 14 * * * SOD source /etc/profile;sh /home/shell/collect.sh >/dev/null 2>&1
[root@zycentos7 ~]# ls -li /var/spool/cron/SOD
16815066 -rw-------. 1 root root 223 Jan 6 21:21 /var/spool/cron/SOD
shell脚本加载环境变量按非登录式shell,执行语句中若引用了/etc/profile的内容,将执行失败
25. 在 shell 脚本中你知道的$?的用法有哪些?(3 分)_____________________
①命令执行状态 ②exit退出码 ③函数返回值
26.解释一下 shell 中特殊扩展变量表达式的具体含义?(2 分)
${parameter:-work}: ______________________________________________
${parameter:?work}:______________________________________________
${parameter:-work} parameter有值输出值,无则输出work;
${parameter:?work} parameter值为空,work作为标准错误输出
二、选择题(每小题至少有一个答案正确,共 30 题,每小题 1 分,共 30 分)
- Linux 系统启动时,第一个启动的进程是(CD)
A.Grub
B.Login
C.Init
D. systemd - 用 ls –al 命令列出下面的文件列表,下面哪一个文件符号链接文件:(D)
A. -rw-rw-rw- 2 hel-s users 56 sep 09 11:05 china
B. -rwxrwxrwx 2 hel-s userd 56 sep 09 11:05 helloworld
C. -drwxr—r— 1 hel users 1024 sep 10 08:10 zhang
D. lrwxr—r— 1 hel users 2024 sep 12 08:12 wang - 如何删除一个非空子目录/tmp(B )
A.del /tmp/*
B.rm –rf /tmp
C.rm –ra /tmp/*
D.rm –rf /tmp/* - 如果您想列出当前目录以及子目录下所有扩展名为“.txt”文件,那么您可以使用的命令是(B )
A. ls *.txt
B. find -name “*.txt”
C. ls –d .txt
D. find . “.txt” - 如果你是系统管理员,SOD 用户忘记了自己的口令,他希望你帮他将口令清空,为了达到这个目的你可以通过(B)来实现
A. 删除/etc/shadow 文件中该用户账户所对应的记录行
B. 编辑/etc/shadow 文件,将该用户账户所对应记录中的口令节内容删除
C. 删除/etc/passwd 文件中该用户账户多对应的记录行
D. 编辑/etc/passwd 文件,将该用户账户所对应记录中的口令节内容删除
- 下列哪几个符号是 linux 通配符:(CD)
A. #
B. @
C. *
D. ? - 在 linux 中的的网络配置中,进行网络配置的主要参数包括:(ABCD)
A. 网络 ip 地址
B. 子网掩码
C. 网关
D. Dns 服务器地址 - Linux 的正常关机命令可以是:(A)
A. shutdown –h now
B. shutdown –r now
C. halt
D. reboot
E. Ctrl+Alt+Del
解析: shutdown –h:关机进程–>禁login(发送一个信号给init程序,要求改变runlevel级别)。
halt:杀死运用进程,执行sync系统调运文件系统写操作完成后,停止内核。
poweroff、init 0关机;Ctrl+Alt+Del、 reboot、shutdown –r now重启
- uniq test 等价的命令:(无)
A. uniq –du test
B. uniq –c test
C. uniq –u test
D. uniq –d test
解析: -c 计数,-u 只输单独的,-d 只输出重复的
- 在 gzip 命令中,-t 的作用是:(C)
A. 解压
B. 显示压缩文件
C. 检验压缩文件
D. 删除压缩文件
解析: gzip -t 测试压缩文件是否正确无误
- 假如您需要找出/etc/my.conf 文件属于哪个包(package),您可执行(C)
A. rpm -q /etc/my.conf
B. rpm –requires /etc/my.conf
C. rpm –qf /etc/my.conf
D. rpm –q /etc/my.conf - 有如下的命令:$dd if=f1 of=f2. 其中 if=f1 表示:(A)
A. 以 f1 作为源文件,代替标准输入
B. 以 f1 作为目标文件代替标准输出
C. 当条件满足 f1 的时候,执行真正的拷贝
D. 拷贝过程中,不转化文件 - 在 cut 命令中,-b,-list 参数的意思是:(B)
A. 只输出在 character-list 区间的 bytes
B. 只输出在 byte-list 区间的 bytes
C. 只输出在 file-list 区间的 bytes
D. 只输出在 home-list 区间的 bytes - Cron 后台常驻程序(deamon)用于:(D)
A. 负责文件在网络中的共享
B. 管理打印子系统
C. 跟踪管理系统信息和错误
D. 管理系统日常任务的调度 - 在 diff 命令中,-B 参数表示的意思是:(B)
A. 忽略空格造成的不同
B. 忽略空行造成的不同
C. 忽略大小写的变化
D. 使用纲要输出的格式
解析 diff -b或–ignore-space-change 不检查空格字符的不同;diff -B或–ignore-blank-lines 不检查空白行;diff -i 忽略大小写;diff -c 使用纲要输出的格式。
- linux 系统中某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为(D)
A.753 B.763 C.754 D.764 - 关于硬盘分区的说法正确的是(BC)
A. 所有硬盘的分区均由主分区,扩展分区和逻辑分区组成
B. 扩展分区是一个主分区
C. 主分区的个数有硬盘的主引导记录 MBR 决定
D. 一般情况,逻辑分区的最大数量是 4
解析: 硬盘的分区由主分区、扩展分区和逻辑分区组成:主分区(注意扩展分区也是一个主分区)的最大个数是四个,其个数是由硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(如GRUB)和分区表记录。扩展分区下又可以包含多个逻辑分区 — 所以主分区范围是从1-4,逻辑分区是从5开始的。
- /etc/hosts.allow 中有如下一行:“all:166.111.138.” 其含义是:(B)
A. 不允许 166.111.138 上所有的机器访问本服务器
B. 允许 166.111.138 上所有的机器访问本服务器
C. 允许 166.111.138 上一台机器访问本服务器
D. 允许 166.111.138.128 访问本服务器
解析: 对sshd服务有效
- IP 地址 132.119.110.200 的子网掩码是 255.255.255.240,那么它所在的 IP 子网地址是:(C)
A. 132.11.100.0
B. 132.119.100.193
C. 132.119.100.192
D. 132.119.100.128 - 在 linux 上,对于多进程,子进程继承了父进程的那些? (BCD)
A. 进程地址空间
B. 共享内存
C. 信号掩码
D. 已打开的文件描述符
解析: 子进程继承父进程
①用户UID和用户组GID
②环境Environment
③堆栈
④共享内存
⑤打开文件的描述符
⑥执行时关闭(Close-on-exec)标志
⑦信号(Signal)控制设定
⑧进程组号
⑨当前工作目录
⑩根目录
⑪文件方式创建屏蔽字
⑫资源限制
⑬控制终端
子进程独有
①进程号PID
②不同的父进程号
③自己的文件描述符和目录流的拷贝
④子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
⑤不继承异步输入和输出
⑥父进程和子进程拥有独立的地址空间和PID参数
- 下面那些说法是正确的(BD)
A. /var/run/wtmp文件记录了当前登录系统的用户,我们可以使用who命令来查看这个文件
B. /var/log/lastlog文件可以记录系统中每一个用户的最后一次登陆的时间,当用户每次访问登录时,屏幕上显示的时间就是从lastlog 文件中获得的
C. /var/run/utmp文件记录了每个用户的登录时间和注销时间,utmp可以用last命令查看
D. /var/log/pacct文件记录了用户执行命令的信息(比如谁执行命令,命令执行时间,命令执行了多久等等)
解析: utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键–保持用户登录进入和退出的记录。有关当前登录用户的信息(数据交换、关机和重启)记录在文件utmp中,用who命令查看;登录记录和退出记录在文件wtmp中,用last命令查看;最后一次登录文件可以用lastlog命令查看。
- 对关系 S 和关系 R 进行集合运算,结果中既包含 S 中元组也包含 R 中元组,这种集合运算称为(A)
A. 并运算
B. 交运算
C. 差运算
D. 积运算 - 若一台计算机的内存为 128MB,则交换分区的大小通常是(C)
A. 64MB
B. 128MB
C. 256MB
D. 512MB - 假设文件 fileA 的符号链接为 fileB,那么删除 fileA 后,下面的描述正确的是( B)
A. fileB 也随之删除
B. fileB 仍存在,但是属于无效文件
C. 因为 fileB 未被删除,所以 fileA 会被系统自动重新建立
D. fileB 会随 flieA 的删除而被系统自动删除 - 下面能够判断当前系统是 64 位还是 32 位的命令有( ABCD)
A. file /sbin/init
B.uname -a
C.file /bin/ls
D. getconf LONG_BIT
解析: 在centos7.6测试uname -a、file /bin/ls和getconf LONG_BIT可以,除此之外,还有echo $HOSTTYPE
26. 有一个文件 ip.txt,每行一条 IP,共若干行,下面那个命令可以实现“统计出现次数最多的前 3 个 ip 以及次
数”?(E)
A.uniq –c ip.txt
B.uniq –c ip.txt |sort –nr |head –n 3
C.cat ip.txt |count –n |sort –rn |head –n 3
D.cat ip.txt |count –n
E.sort -nr ip.txt | uniq -c | sort -nr | head -n 3
解析: 首先sort进行排序,将重复的行都排在了一起,然后使用uniq -c将重复的行的次数放在了行首,在用sort -rn进行反向和纯文本排序,这样就按照重复次数从高到低进行了排列,最后利用head -n 3 输出行首的三行。
- 创建动态路由需要的文件有(D)
A./etc/hosts
B./etc/HOSTNEM
C./etc/resolv.conf
D./etc/gateways
解析: /etc/hosts
ip地址与域名快速解析文件;/etc/hostname
(Centos7.6)存放主机名;/etc/resolv.conf
DNS客户机配置文件;/etc/gateways
建立动态路由需要用到的文件;/etc/services
定义了网络服务的端口。
- 下列关于 fstab 文件描述符正确的是(D)
A.fstab文件只能描述属于 linux 的文件系统
B.CD_ROM 和软盘必须是自动加载的
C.fstab 文件中描述的文件系统不能被卸载
D.启动时按 fstab 文件描述内容加载文件系统
解析: /etc/fstab是用来存放文件系统的静态信息的文件。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。
- linux 中那个命令可以将普通用户转换成超级用户?(D)
A.super
B.passwd
C.tar
D.su - 执行命令“a=10|echo $a”,输出结果为(C)
A.10
B.a
C.空行
D.a=10
解析: a=10无结果,a没有定义过
三、简答题(共 30 分)
- Linux 防火墙应用(10 分)
(1)设定 ICMP 包,状态为 8 的被 DROP 掉
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
(2)目标地址 192.168.0.3 的访问给予记录
iptables -A INPUT -s 192.168.0.3 -j LOG
(3)拒绝 192.168.0.0/24 网段的 1024-65534 的源端口访问 SSH
iptables -A INPUT -s 192.168.0.0/24 -p tcp --sport 1024:65534 --dport 22 -j DROP
(4)设定来源于 192.168.6.0 网段通过 eth1 转发过去
iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -j SNAT -o eth1
(5)将本地 80 端口的请求转发到 192.168.92.101 8080 端口,当前主机 IP 为 192.168.42.102
iptables -t nat -A PREROUTING -d 192.168.42.102 -p tcp --dport 80 -j DNAT --to-destination 192.168.92.101:8080
防火墙规则设置
iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -I INPUT 2 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -d 192.168.232.0/24 -j REJECT
iptables -t filter -I INPUT 2 -p tcp --dport 80 -j ACCEPT
[root@zylinux ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
829 56727 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
394 28096 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 120 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
- linux 下用命令如何查看当前运行程序以及相对应的端口?(2 分)
netstat -apntu - 一个 EXT3 文件分区,当用 touch 新建文件夹时报错,错误信息是磁盘已满,但是使用 df –h 查看分区信息时只使用了 50%,请分析原因?(5 分)
(1)创建的小文件太多,导致inode 耗尽。
(2)该用户的磁盘配额已达到上线。 - 简述 raid0,raid1,raid5 三种工作模式的工作原理和特点?Raid 卡带电池和不带电池有什么区别?目前需要安装一单台服务器,运行 web 和数据库服务,请规划 raid 级别,并说明自己的想法?(7 分)
RAID 0:连续以位或字节为单位分割数据,并行读/写于多个磁盘上。具有很高的数据传输率,但它没有数据冗余;只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。RAID 0不能应用于数据安全性要求高的场合。
RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。镜象结构,类似于备份模式,一个数据被复制到两块硬盘上。可以提高读取性能。是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。
RAID5:分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上。任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。支持一块盘掉线后仍然正常运行。
带电池可实现缓存数据不丢失。
系统盘采用raid1,数据盘采用raid5。 - 说明 linux 中的软连接和硬连接的区别,描述 linux 下文件删除的原理?(6 分)
硬链接,通过索引节点来进行链接。
软链接或叫符号链接,指向源文件实体,相当于windows的快捷方式。
i_link是文件的硬连接数,磁盘引用的计数器,i_count是文件被进程调运数,内存引用的计数器,只有当i_link和i_count都为0时,文件将被删除;rm命令删除的只是文件的i_link数。
四、操作题(共 70 分)
- 环境搭建与服务部署。(20 分)(提交要求:将安装好的系统导出为 ovf 格式(导出方法见附件),打包后命名为“姓名.rar”)
环境搭建:系统要求:系统版本 CentOS-7-x86_64-Minimal-1810
系统分区 /boot 1024M;/home 5G;/swap 2G;/ 剩余空间;
所有分区采用 LVM 管理方式。
系统网络 添加一块网卡,网络配置为 NAT 模式。
配置要求:1U1G,系统盘 40G,数据盘 100G。
系统配置:
(1)配置本地 yum,规定镜像挂载点/media,并永久挂载。
[root@localhost ~]# tail -n 1 /etc/fstab
/dev/sr0 /media iso9660 defaults 0 0
[root@localhost ~]# mount -a
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# cat yum.repo
[centos7]
name="centos7"
baseurl=file:///media
gpgcheck=0
enabled=1
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv Cen* bak
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache
(2)配置网络模板。
服务部署:虚拟机下发:以上述搭建的环境为母版,克隆两台虚拟机,并对虚拟机拍摄快照。
虚拟机配置:配置静态 IP 与 DNS 解析。
将数据盘分区格式化成 xfs,并永久挂载在/data 目录。
[root@localhost ~]# mkfs.xfs /dev/sdb
[root@localhost ~]# tail -n 2 /etc/fstab
/dev/sr0 /media iso9660 defaults 0 0
/dev/sdb /data xfs defaults 0 0
- Shell 编程(50 分)(提交要求:将脚本重命名为“姓名_题号.sh”,提交到指定位置)
(1)shell 实现 100 台服务器的公钥的批量分发;LLD 规划:100 台服务器 ip 为:192.168.42.101-201,root 密码:123456。(10 分)
ssh-keygen ;生成秘钥对
ssh-copy-id 192.168.232.111 ;发送公钥
sshpass -p 123456 ssh-copy-id -o StrictHostKeyChecking=no [email protected] ;带密码发送公钥(不检查knows_hosts文件)
参考程序
#远程机器的用户名和密码
password=123456
username=root
#将本机的公钥复制到远程机器的authorized_keys文件中
main(){
sshpass -p $password ssh-copy-id -o StrictHostKeyChecking=no $username@192.168.42.$1 >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "192.168.42.$1 is successful..."
fi
}
#检查sshpass工具是否安装
basecheck(){
which sshpass >/dev/null 2>&1
if [ $? -ne 0 ]
then
yum install sshpass -y >/dev/null 2>&1
fi
}
#检查网络是否畅通,若通畅则发送ssh公钥
netcheck(){
for j in {101..201}
do
ping -c 1 192.168.42.$j >/dev/null 2>&1
if [ $? -eq 0 ]
then
main $j
else
echo "192.168.42.$j 网络不通畅..."
fi
done
}
basecheck
netcheck
(2)处理以下文件内容,将域名取出并进行计数排序。(10 分)
http://www.baidu.com/index.html
http://www.baidu.com/1.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html
得到如下结果:
域名出现的次数 域名
2 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com
cat <<EOF
域名出现的次数 域名
EOF
array=(
"http://www.baidu.com/index.html"
"http://www.baidu.com/1.html"
"http://post.baidu.com/index.html"
"http://mp3.baidu.com/index.html"
"http://www.baidu.com/3.html"
"http://post.baidu.com/2.html"
)
#检查临时域名文件是否存在,存在则删除
check(){
test -f yuming.txt
if [ $? -eq 0 ]
then
rm -rf yuming.txt
fi
}
#域名统计处理及结果输出
operate(){
for var in ${array[@]}
do
echo $var >> yuming.txt
done
awk -F '/' '{print $3}' yuming.txt |sort -r|uniq -c
}
check
operate
check
其他方法
cut -d / -f3 file.txt |sort -r |uniq -c
awk -F "/"'{S[$3]=S[$3]+1}END{for(k in S) print k,S[k]}' file.txt|sort -r
sed -r 's#http://(.*)/.*#\1#g' file.txt |sort -r|uniq -c
(3)设计一个 shell 程序,在每天凌晨压缩打包/etc 目录下的所有内容,存放在/root/bak 目录里,且文件名为如下形式 yymmdd_etc.tar.gz(yy 为年,mm 为月,dd 为日),该目录保存 7 天内容;Shell 程序 fileback 存放在/usr/bin 目录下。(10 分)
day="`date +%Y%m%d`"
dir=/root/bak
backupdir="`date +%Y%m%d`_etc.tar.gz"
#查看/root/bak目录是否存在,如果不存在,则创建目录
checkbak(){
if [ ! -e $dir ]
then
mkdir $dir
fi
}
#压缩打包/etc目录下,存放在/root/bak目录里
backup(){
tar -zcvf /root/bak/$backupdir /etc/ > /dev/null 2>&1
echo "$backupdir 压缩打包成功 successful"
}
#清除7天前的过期文件
clean(){
find $dir -mtime +7 -exec rm -rf {} \;
if [ $? -eq 0 ]
then
echo "过期数据清除成功 successful"
else
echo "$day 过期数据清理失败 error,请及时关注"
fi
}
checkbak
backup
clean
[root@localhost ok]# cat /var/spool/cron/root
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#每天凌晨执行fileback
0 0 1 * * root source /etc/profile;./usr/bin/fileback >> /tmp/fileback.log 2>&1
(4)shell 开发运维管理工具。(10 分)
要求:用户交互,当用户输入菜单号时,打印相关内容。
菜单
4. 磁盘分区
5. CPU 负载
6. 剩余内存
7. 退出
输入:1
输出:(主机名,系统版本,分区情况)
hostname:
system:系统版本
---------分区一-----------(分区变量输出)
path:分区一
size:大小
file_os:分区文件系统类型
mount_on:分区挂载点
----------分区二----------
path:分区二
size:大小
file_os:分区文件系统类型
mount_on:分区挂载点
输入:2
输出:
1 分钟平均负载:
5 分钟平均负载:
15 分钟平均负载:
输入:3
输出:
目前可用内存:
可用 Swap 分区:
输入:4
输出:
Bey…
cat <<EOF
---------------------------
1.磁盘分区
2.CPU负载
3.剩余内存
4.退出
---------------------------
EOF
while true
do
read -p "请选择功能(1~4):" num
case $num in
1)
echo "hostname: `cat /etc/hostname | awk 'BEGIN{FS="."}{print $1}'`"
echo "system: `uname -r`"
echo "------------------/dev/sda1--------------------------"
echo "path:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda1/{print $1}'`"
echo "size:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda1/{print $2}'`"
echo "file_os:`df -T | awk 'BEGIN{FS=" "}/^\/dev\/sda1/{print $2}'`"
echo "mount_on:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda1/{print $6}'`"
echo "------------------/dev/sda2--------------------------"
echo "path:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda2/{print $1}'`"
echo "size:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda2/{print $2}'`"
echo "file_os:`df -T | awk 'BEGIN{FS=" "}/^\/dev\/sda2/{print $2}'`"
echo "mount_on:`df -h | awk 'BEGIN{FS=" "}/^\/dev\/sda2/{print $6}'`"
;;
2)
echo "1分钟平均负载:`uptime | awk 'BEGIN{FS="[ |,]"}{print $14}'`"
echo "10分钟平均负载:`uptime | awk 'BEGIN{FS="[ |,]"}{print $16}'`"
echo "15分钟平均负载:`uptime | awk 'BEGIN{FS="[ |,]"}{print $18}'`"
;;
3)
echo "目前可用内存:`free -h | awk 'BEGIN{FS=" "} /^M/ {print $4}'`"
echo "可用Swap分区:`free -h | awk 'BEGIN{FS=" "} /^S/ {print $4}'`"
;;
4)
exit 0
;;
*)
echo "请输入正确的菜单项!"
esac
done
(5)shell 编程完成一下需求。(10 分)
1 食堂:中国人(人民币)
2 食堂:外国人(美元)
汇率 6.798
菜单:
宫保鸡丁(1)(荤): 8.6
鱼香肉丝(2)(荤):2.5
豆芽炒青菜(1)(素):5.5
椒盐蘑菇(2)(素):1.9
倘若一哥们每天必须吃一个肉一个素;用脚本实现搭配的最低消费。
array=(
"宫保鸡丁 (1)(荤):8.6"
"鱼香肉丝 (2)(荤):2.5"
"豆芽炒青菜 (1)(素):5.5"
"椒盐蘑菇 (2)(素):1.9"
)
#检查临时菜单是否存在,存在则删除
check(){
test -f caidan.txt
if [ $? -eq 0 ]
then
rm -rf caidan.txt
fi
test -f file01.tmp
if [ $? -eq 0 ]
then
rm -rf file01.tmp
fi
}
#创建临时菜单文件
create(){
for var in ${array[@]}
do
echo $var >> caidan.txt
done
}
#菜单文件处理及结果输出
operate(){
array01=(`cat caidan.txt |grep \(2\)`)
b=`cat caidan.txt |grep \(1\)`
a=`for j in ${array01[@]};do echo $j;done |awk -F: -v OFS=':' '{print $1,$2*6.798}'`
for i in $b
do
echo $i >> file01.tmp
done
for j in $a
do
echo $j >> file01.tmp
done
array02=(`cat file01.tmp |grep \(荤\)`)
array03=(`cat file01.tmp |grep \(素\)`)
c=`for k in ${array02[@]};do echo $k;done |sort -n -k2 |head -1`
d=`for z in ${array03[@]};do echo $z;done |sort -n -k2 |head -1`
echo $c
echo $d
}
check
create
operate
check