Linux基础篇学习——云计算基础结课试题

答案在每个题下的空白处,字体颜色为白色,选中反色查看

一、填空题(1-17 题,每题 1 分,其余按照题目所列分,共 50 分)

  1. 计算机的硬件组成部分主要包括___________________________外设等。
    运算器、控制器、主存储器

解析: 计算机的硬件分成5大组成部件:运算器、控制器、存储器、输入设备和输出设备。按照计算机硬件各部分结构所处的位置不同划分成主机(运算器、控制器、主存储器)和外设两部分。

  1. 如何一次性创建目录/test/1/2/3/4___________________________。
    mkdir -p /test/1/2/3/4
  2. 添加一条到 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
  1. 请写出精确匹配 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
  1. 解释2>&1是什么意思__________________________。
    把错误输出重定向到标准输出

解析: &> 和 2>&1 结果相同,但过程不同
6. 查询系统中已经安装的软件包:_________,查询指定软件的安装路径与文件列表:_________。
rpm -qa,rpm -ql

rpm -ql 包名 查询软件包安装位置
rpm -qf 系统文件名 查询系统文件属于哪个RPM包
  1. 将/var/log/messages打包压缩成 mess.tar.gz 后,并删除源文件:________。
    tar -zcvf mess.tar.gz /var/log/messages --remove-files
  2. 进程有哪些运行状态______,______,______,______。进程优先级的取值范围是____________,nice值的取值范围是____________。
    就绪,执行,阻塞,终止 0~139 -20~+19

解析: nice值:相对优先级(优先级度量)-20~+19,nice值越低优先级越高;
PR值:0~139:0-99系统进程优先级,100-139用户进程优先级
(将nice值级别显示为映射到更大优先级队列,-20映射到100,+19映射到139)

  1. Linux 查看路由的命令是_________________________。
    route -n 或 netstat -rn
  2. 管道就是将前一个命令的_______作为后一个命令的________。
    标准输入 标准输出
  3. 用于授权普通用户执行指定程序的命令是:__________。
    sudo
  4. 查看进程号为 12 的进程打开了哪些文件______________。
    lsof -p 12
  5. 在 shell 脚本中$@,$*,”$*”有何区别:_______________________。
    $*或$@获取当前Shell脚本所有传参的参数,“$*”将所有的参数视为单个字符串,相当于"$1 $2 $3"
  6. 在 shell 中判断字符串 a 是否为空: ____________________________。
    方法一:test -z $a && echo 1 || echo 0【0不为空】
    方法二:[ -n “abc” ] && echo 1 || echo 0【1不为空】

解析: 注意引号和$符号

  1. shell 中如何获取字符串 a 的长度: ____________________________。
echo  ${#a}	;速度最快
expr length "$a"
echo $a|wc -L
echo $a|awk '{print length($0)}'
  1. 使用 scp 工具将/etc 目录的下内容同步到 192.168.1.2 的/data 下,并限制传送带宽为 100M: __________________________________________。
    scp -r /etc -l 100M 192.168.1.2:/root
  2. Linux 系统中的/var/log/lastlog 日志记录了所有用户最后登录的记录,可以使用 命令________查看。
    lastlog

解析: /var/log/lastlog 记录最近几次成功登录事件和最后一次不成功登录事件

  1. 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

  1. 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 {} ;
  2. 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
  3. 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
  4. 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
  1. 共享目录设置(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
  2. 定制计划任务,用户 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 分)

  1. Linux 系统启动时,第一个启动的进程是(CD
    A.Grub
    B.Login
    C.Init
    D. systemd
  2. 用 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
  3. 如何删除一个非空子目录/tmp(B )
    A.del /tmp/*
    B.rm –rf /tmp
    C.rm –ra /tmp/*
    D.rm –rf /tmp/*
  4. 如果您想列出当前目录以及子目录下所有扩展名为“.txt”文件,那么您可以使用的命令是(B
    A. ls *.txt
    B. find -name “*.txt”
    C. ls –d .txt
    D. find . “.txt”
  5. 如果你是系统管理员,SOD 用户忘记了自己的口令,他希望你帮他将口令清空,为了达到这个目的你可以通过(B)来实现
    A. 删除/etc/shadow 文件中该用户账户所对应的记录行
    B. 编辑/etc/shadow 文件,将该用户账户所对应记录中的口令节内容删除
    C. 删除/etc/passwd 文件中该用户账户多对应的记录行
    D. 编辑/etc/passwd 文件,将该用户账户所对应记录中的口令节内容删除
  6. 下列哪几个符号是 linux 通配符:(CD
    A. #
    B. @
    C. *
    D. ?
  7. 在 linux 中的的网络配置中,进行网络配置的主要参数包括:(ABCD
    A. 网络 ip 地址
    B. 子网掩码
    C. 网关
    D. Dns 服务器地址
  8. 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重启

  1. uniq test 等价的命令:(
    A. uniq –du test
    B. uniq –c test
    C. uniq –u test
    D. uniq –d test

解析: -c 计数,-u 只输单独的,-d 只输出重复的

  1. 在 gzip 命令中,-t 的作用是:(C
    A. 解压
    B. 显示压缩文件
    C. 检验压缩文件
    D. 删除压缩文件

解析: gzip -t 测试压缩文件是否正确无误

  1. 假如您需要找出/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
  2. 有如下的命令:$dd if=f1 of=f2. 其中 if=f1 表示:(A
    A. 以 f1 作为源文件,代替标准输入
    B. 以 f1 作为目标文件代替标准输出
    C. 当条件满足 f1 的时候,执行真正的拷贝
    D. 拷贝过程中,不转化文件
  3. 在 cut 命令中,-b,-list 参数的意思是:(B
    A. 只输出在 character-list 区间的 bytes
    B. 只输出在 byte-list 区间的 bytes
    C. 只输出在 file-list 区间的 bytes
    D. 只输出在 home-list 区间的 bytes
  4. Cron 后台常驻程序(deamon)用于:(D
    A. 负责文件在网络中的共享
    B. 管理打印子系统
    C. 跟踪管理系统信息和错误
    D. 管理系统日常任务的调度
  5. 在 diff 命令中,-B 参数表示的意思是:(B
    A. 忽略空格造成的不同
    B. 忽略空行造成的不同
    C. 忽略大小写的变化
    D. 使用纲要输出的格式

解析 diff -b或–ignore-space-change 不检查空格字符的不同;diff -B或–ignore-blank-lines 不检查空白行;diff -i 忽略大小写;diff -c 使用纲要输出的格式。

  1. linux 系统中某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为(D
    A.753 B.763 C.754 D.764
  2. 关于硬盘分区的说法正确的是(BC
    A. 所有硬盘的分区均由主分区,扩展分区和逻辑分区组成
    B. 扩展分区是一个主分区
    C. 主分区的个数有硬盘的主引导记录 MBR 决定
    D. 一般情况,逻辑分区的最大数量是 4

解析: 硬盘的分区由主分区、扩展分区和逻辑分区组成:主分区(注意扩展分区也是一个主分区)的最大个数是四个,其个数是由硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(如GRUB)和分区表记录。扩展分区下又可以包含多个逻辑分区 — 所以主分区范围是从1-4,逻辑分区是从5开始的。

  1. /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服务有效

  1. 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
  2. 在 linux 上,对于多进程,子进程继承了父进程的那些? (BCD
    A. 进程地址空间
    B. 共享内存
    C. 信号掩码
    D. 已打开的文件描述符

解析: 子进程继承父进程

①用户UID和用户组GID
②环境Environment
③堆栈
④共享内存
⑤打开文件的描述符
⑥执行时关闭(Close-on-exec)标志
⑦信号(Signal)控制设定
⑧进程组号
⑨当前工作目录
⑩根目录
⑪文件方式创建屏蔽字
⑫资源限制
⑬控制终端

子进程独有

①进程号PID
②不同的父进程号
③自己的文件描述符和目录流的拷贝
④子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
⑤不继承异步输入和输出
⑥父进程和子进程拥有独立的地址空间和PID参数
  1. 下面那些说法是正确的(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命令查看。

  1. 对关系 S 和关系 R 进行集合运算,结果中既包含 S 中元组也包含 R 中元组,这种集合运算称为(A
    A. 并运算
    B. 交运算
    C. 差运算
    D. 积运算
  2. 若一台计算机的内存为 128MB,则交换分区的大小通常是(C
    A. 64MB
    B. 128MB
    C. 256MB
    D. 512MB
  3. 假设文件 fileA 的符号链接为 fileB,那么删除 fileA 后,下面的描述正确的是( B
    A. fileB 也随之删除
    B. fileB 仍存在,但是属于无效文件
    C. 因为 fileB 未被删除,所以 fileA 会被系统自动重新建立
    D. fileB 会随 flieA 的删除而被系统自动删除
  4. 下面能够判断当前系统是 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 输出行首的三行。

  1. 创建动态路由需要的文件有(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 定义了网络服务的端口。

  1. 下列关于 fstab 文件描述符正确的是(D
    A.fstab文件只能描述属于 linux 的文件系统
    B.CD_ROM 和软盘必须是自动加载的
    C.fstab 文件中描述的文件系统不能被卸载
    D.启动时按 fstab 文件描述内容加载文件系统

解析: /etc/fstab是用来存放文件系统的静态信息的文件。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。

  1. linux 中那个命令可以将普通用户转换成超级用户?(D
    A.super
    B.passwd
    C.tar
    D.su
  2. 执行命令“a=10|echo $a”,输出结果为(C
    A.10
    B.a
    C.空行
    D.a=10

解析: a=10无结果,a没有定义过

三、简答题(共 30 分)

  1. 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
  1. linux 下用命令如何查看当前运行程序以及相对应的端口?(2 分)
    netstat -apntu
  2. 一个 EXT3 文件分区,当用 touch 新建文件夹时报错,错误信息是磁盘已满,但是使用 df –h 查看分区信息时只使用了 50%,请分析原因?(5 分)
    (1)创建的小文件太多,导致inode 耗尽。
    (2)该用户的磁盘配额已达到上线。
  3. 简述 raid0,raid1,raid5 三种工作模式的工作原理和特点?Raid 卡带电池和不带电池有什么区别?目前需要安装一单台服务器,运行 web 和数据库服务,请规划 raid 级别,并说明自己的想法?(7 分)
    RAID 0:连续以位或字节为单位分割数据,并行读/写于多个磁盘上。具有很高的数据传输率,但它没有数据冗余;只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。RAID 0不能应用于数据安全性要求高的场合。
    RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。镜象结构,类似于备份模式,一个数据被复制到两块硬盘上。可以提高读取性能。是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。
    RAID5:分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上。任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。支持一块盘掉线后仍然正常运行。
    带电池可实现缓存数据不丢失。
    系统盘采用raid1,数据盘采用raid5。
  4. 说明 linux 中的软连接和硬连接的区别,描述 linux 下文件删除的原理?(6 分)
    硬链接,通过索引节点来进行链接。
    软链接或叫符号链接,指向源文件实体,相当于windows的快捷方式。
    i_link是文件的硬连接数,磁盘引用的计数器,i_count是文件被进程调运数,内存引用的计数器,只有当i_link和i_count都为0时,文件将被删除;rm命令删除的只是文件的i_link数。

四、操作题(共 70 分)

  1. 环境搭建与服务部署。(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
  1. 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

你可能感兴趣的:(Linux基础,centos,Linux基础试题,运维,笔试题,shell编程)