一:用sed 命令修改/etc/fstab文件,删除文件中的空行,注释行,并保留文件备份(7分)
答案写这里:
#查看 fatab文件内容
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun May 26 10:28:57 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=9520d553-3641-401d-a3ef-f22c71c9c819 /boot xfs defaults 0 0
/dev/mapper/cl-home /home xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
#使用sed命令修改/etc/fatab文件中的空行,注释行
[root@localhost ~]# sed -i.bak '/^\s*$/d; /^#/d' /etc/fstab
#查看修改完的fatab文件
[root@localhost ~]# cat /etc/fstab
/dev/mapper/cl-root / xfs defaults 0 0
UUID=9520d553-3641-401d-a3ef-f22c71c9c819 /boot xfs defaults 0 0
/dev/mapper/cl-home /home xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
二: 用 find 命令查找出 /var/ 目录中大于1M且以db结尾的文件(7分)
答案写这里:
#使用find命令查找/var/ ,目录中大于1M且文件后缀为db的文件
[root@localhost ~]# ls /var
account cache db ftp gopher lib lock mail opt run tmp yp
adm crash empty games kerberos local log nis preserve spool www
[root@localhost ~]# find /var/ -type f -size +1M -name "*.db"
/var/lib/mlocate/mlocate.db
三: 先判断当前主机是否安装了nginx包,如果没安装,则执行命令安装,如果己安装,则执行命令卸载,用短路运算实现(rocky8.6)(7分)
答案写这里:
#编写一个简单的shell脚本
[root@localhost ~]# vim install_nginx.sh
#!/bin/bash
if rpm -qa | grep -q nginx; then
echo "nginx 已安装,正在卸载..."&& yum remove nginx -y
echo "nginx 已卸载"
else
echo "nginx 未安装,正在安装..." &&yum install nginx -y
echo "nginx 已安装"
fi
~
# 执行写好的脚本,NGINX被卸载
[root@localhost ~]# bash install_nginx.sh
nginx 已安装,正在卸载...
Dependencies resolved.
========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Removing:
nginx x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 @AppStream 1.7 M
Removing unused dependencies:
nginx-all-modules noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 @AppStream 0
nginx-filesystem noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 @AppStream 0
nginx-mod-http-image-filter x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 @AppStream 29 k
nginx-mod-http-perl x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 @AppStream 61 k
nginx-mod-http-xslt-filter x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 @AppStream 25 k
nginx-mod-mail x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 @AppStream 113 k
nginx-mod-stream x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 @AppStream 171 k
Transaction Summary
========================================================================================================
Remove 8 Packages
Removed:
nginx-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-all-modules-1:1.14.1-9.module_el8.0.0+184+e34fea82.noarch
nginx-filesystem-1:1.14.1-9.module_el8.0.0+184+e34fea82.noarch
nginx-mod-http-image-filter-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-http-perl-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-http-xslt-filter-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-mail-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-stream-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
Complete!
nginx 已卸载
# 在执行一次脚本,NGINX安装成功
[root@localhost ~]# bash install_nginx.sh
nginx 未安装,正在安装...
Last metadata expiration check: 0:15:30 ago on Sun 07 Jul 2024 07:30:59 PM CST.
Dependencies resolved.
========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Installing:
nginx x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 570 k
Installing dependencies:
nginx-all-modules noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 23 k
nginx-filesystem noarch 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 24 k
nginx-mod-http-image-filter x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 35 k
nginx-mod-http-perl x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 45 k
nginx-mod-http-xslt-filter x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 33 k
nginx-mod-mail x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 64 k
nginx-mod-stream x86_64 1:1.14.1-9.module_el8.0.0+184+e34fea82 AppStream 85 k
Transaction Summary
========================================================================================================
Install 8 Packag
Installed:
nginx-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-all-modules-1:1.14.1-9.module_el8.0.0+184+e34fea82.noarch
nginx-filesystem-1:1.14.1-9.module_el8.0.0+184+e34fea82.noarch
nginx-mod-http-image-filter-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-http-perl-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-http-xslt-filter-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-mail-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-stream-1:1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
Complete!
nginx 已安装
~
四:请用 rpm 命令列出 nginx 包中所有的配置文件(7分)
答案写这里:
[root@localhost ~]# rpm -qc nginx
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
五: 新增一块20G的硬盘,分三个区,大小分别是3GB,4GB,5GB,将这三个分区做成物理卷,然后创建卷组,在该卷组上创建一个6GB的逻辑卷,挂载至/log/ 目录下,再将该逻辑卷扩容至10GB,请写出实现步骤,文件系统不限(7分)
答案写这里:
分区新硬盘
使用fdisk
分区新硬盘。
fdisk /dev/sdb
在fdisk
提示符下,执行以下操作:
- 输入
n
创建新分区。 - 选择
p
(主分区)。 - 选择分区号(例如,1)。
- 输入第一个扇区号(通常使用默认的第一个可用扇区)。
- 输入最后一个扇区号或大小(+3G,+4G,+5G),创建三个分区。
- 重复上述步骤为所有三个分区(3GB, 4GB, 5GB)。
- 输入
w
写入分区表并退出。
创建物理卷
将分区创建为物理卷(PV)。
pvcreate /dev/sdb1
pvcreate /dev/sdb2
pvcreate /dev/sdb3
创建卷组
创建一个新的卷组(VG),并将上述物理卷加入其中。
vgcreate my_vg /dev/sdb1 /dev/sdb2 /dev/sdb3
创建逻辑卷
在卷组上创建一个6GB的逻辑卷(LV)。
lvcreate -L 6G -n my_log_lv my_vg
格式化逻辑卷
选择一个文件系统类型并格式化逻辑卷。这里使用ext4
。
mkfs.ext4 /dev/my_vg/my_log_lv
挂载逻辑卷
创建挂载点并挂载逻辑卷。
mkdir /log
mount /dev/my_vg/my_log_lv /log
扩容逻辑卷
lvextend -L +4G /dev/my_vg/my_log_lv
调整文件系统大小
扩容逻辑卷后,需要调整文件系统的大小以匹配新的逻辑卷大小。
resize2fs /dev/my_vg/my_log_lv
六:根据下列命令执行结果,写出你能读出来的信息(7分)
```bash
[mage@rocky86 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 2G 0 lvm [SWAP]
└─rl-home 253:2 0 127G 0 lvm /home
```
答案写这里:
有一个200G的磁盘,磁盘上有sda1和sda2两个分区
其中sda1分区的大小是1G,挂载点是/boot
sda2分区的大小是199G,sda2分区被lvm管理,分为三个逻辑卷:
rl-root
:大小为70GB,挂载点为根目录/
。rl-swap
:大小为2GB,用作交换空间(SWAP)。rl-home
:大小为127GB,挂载点为/home
。
七: 请配置一块网卡,IP地址是 10.0.0.110,子网掩码是24位,网关是 10.0.0.2,DNS分别是 10.0.0.2 和 114.114.114.114,请写出配置文件内容,另外,写一个脚本,配置成别名,该别名对 root用户永久生效,要求传入网卡设备名可以让修改后的内容重载生效。(8分)
答案写这里:
#配置新添加的网卡,在/etc/sysconfig/network-scripts/ifcfg-eth0写入新网卡的配置文件内容
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=10.0.0.110
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
DNS1=10.0.0.2
DNA2=114.114.114.114
#写完网卡配置文件需要重载网卡配置
#重载网卡配置之后,使用ifconfig命令查看配置的新网卡信息ens224: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
[root@localhost ~]# ifconfig
inet 10.0.0.110 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe49:e4c5 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:49:e4:c5 txqueuelen 1000 (Ethernet)
RX packets 6 bytes 657 (657.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13 bytes 922 (922.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#接下来,编写一个脚本,为root用户配置别名,并使修改后的配置重载生效。
八: 请描述一下一个网络请求从一台设备到另一台设备的具体过程(10分)
答案写这里:
- DNS解析
- 目的:将用户输入的域名解析为对应的IP地址,因为网络通信是基于IP地址进行的。
- 过程:
- 客户端首先在本地DNS缓存中查找域名对应的IP地址。
- 如果本地缓存中没有找到,客户端会向系统缓存(如操作系统的Hosts文件或DNS缓存)查询。
- 如果系统缓存中也没有,客户端会向配置的DNS服务器(如路由器缓存、ISP的DNS缓存服务器等)发起递归查询,直到找到对应的IP地址。
- TCP连接建立
-
目的:在客户端和服务器之间建立一条可靠的通信通道。
-
过程
(TCP三次握手):
- 客户端向服务器发送一个SYN包(同步序列编号),请求建立连接。
- 服务器收到SYN包后,回应一个SYN-ACK包(同步序列编号确认),表示同意建立连接,并发送自己的初始序列号。
- 客户端收到SYN-ACK包后,再发送一个ACK包(确认包),确认已收到服务器的SYN-ACK包。
完成这三个步骤后,TCP连接建立成功,客户端和服务器之间可以进行数据传输。
- HTTP请求发送
- 目的:客户端向服务器发送请求,请求获取特定的资源(如网页、图片等)。
- 过程:
- 客户端构建HTTP请求报文,包含请求方法(如GET、POST)、URL、协议版本、请求头等信息。
- 客户端通过之前建立的TCP连接,将HTTP请求报文发送给服务器。
- 服务器响应
- 目的:服务器处理客户端的请求,并返回相应的响应。
- 过程:
- 服务器接收到HTTP请求报文后,进行解析,获取客户端的请求信息。
- 服务器根据请求信息,处理请求,生成相应的HTTP响应报文,包含状态码、响应头、响应体等信息。
- 服务器通过TCP连接,将HTTP响应报文发送给客户端。
- TCP连接断开
-
目的:在完成数据传输后,释放TCP连接占用的资源。
-
过程
(TCP四次挥手):
- 客户端发送一个FIN包(结束标志),请求关闭连接。
- 服务器收到FIN包后,回应一个ACK包,表示确认收到客户端的关闭请求。
- 服务器在发送完所有剩余数据后,也发送一个FIN包给客户端。
- 客户端收到服务器的FIN包后,回应一个ACK包,表示确认收到服务器的关闭请求。
完成这四个步骤后,TCP连接被安全地关闭。
九:当执行shell脚本时,可向shell脚本传参,请说明 $0, KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲,@,$* 这几个参数的含义(10分)
答案写这里:
$0
:表示脚本的名称。这是传给脚本的第一个参数,即脚本名本身。$#
:表示传递给脚本的参数个数。它可以帮助脚本确定有多少参数被传递。$@
:表示所有位置参数的单个引用。当它被双引号包围时(如"@"),它会将所有参数作为一个单独的单词处理,保留参数之间的空格。这意味着如果脚本中有多个参数,并且每个参数包含空格,‘@`会将它们视为单独的参数。$*
:表示所有位置参数的单一字符串。当它被双引号包围时(如"∗"),它将所有参数视为一个单词,将所有参数合并在一起,参数之间的空格被视为一个参数内的一个空格。如果脚本中有多个参数,并且每个参数包含空格,‘*`会将它们合并为一个参数。
十: 写一个脚本,计算出100以内能被3整除的数之和,以及能被4整除的数之和,然后再输出这两个数字(10分)
答案写这里:
#!/bin/bash
# 初始化变量
sum_num_3=0
sum_num_4=0
# 循环从1到99
for i in {1..99}; do
# 如果数字能被3整除,则加到sum_num_3
if (( i % 3 == 0 )); then
sum_num_3=$((sum_num_3 + i))
fi
# 如果数字能被4整除,则加到sum_num_4
if (( i % 4 == 0 )); then
sum_num_4=$((sum_num_4 + i))
fi
done
# 输出结果
echo "100以内能被3整除的数之和: $sum_num_3"
echo "100以内能被4整除的数之和: $sum_num_4"
#执行编写的脚本
[root@localhost ~]# bash num.sh
100以内能被3整除的数之和: 1683
100以内能被4整除的数之和: 1200
十一:写一个脚本,打印输出8行8列的国际象棋棋盘,使用红黄两色(10分)
答案写这里:
#!/bin/bash
# 定义颜色代码
RED='\033[0;31m'
YELLOW='\033[1;33m'
RESET='\033[0m'
# 打印棋盘
for ((i=0; i<8; i++))
do
for ((j=0; j<8; j++))
do
# 使用模运算交替颜色
if (( (i+j) % 2 == 0 )); then
echo -ne "${YELLOW} ${RESET}"
else
echo -ne "${RED} ${RESET}"
fi
done
十二:写一个脚本,生成10个随机数放到一个数组中,再将该数组中的元素从小大到排序进行输出(10分)
答案写这里:
#!/bin/bash
# 生成10个随机数并放入数组中
random_numbers=()
for (( i=0; i<10; i++ )); do
random_numbers[i]=$((RANDOM % 100)) # 生成0到99之间的随机数
done
# 使用sort命令和索引数组来排序
sorted_numbers=($(printf "%d\n" "${random_numbers[@]}" | sort -n))
# 输出排序后的数组
echo "排序后的随机数:"
for num in "${sorted_numbers[@]}"; do
echo $num
done
#执行编写的脚本
[root@localhost ~]# bash numbers.sh
排序后的随机数:
1
13
28
34
34
42
49
52
62
76