测试
1,使用sed命令修改/etc/fstab 文件,删除文件中的空行,注释行,并对文件进行备份
答案:
sed -i.bak ‘/^\s*$/d; /^#/d’ /etc/fstab
2,使用find命令查找出/var/ 目录下大于1M且以db结束的文件
答案:
find /var/ -type f -size +1M -name “*.db”
3,判断当前主机是否安装nignx包,如果没安装则执行安装,如果安装了则执行命令卸载,用短路运算实现
答案:
rpm -q nginx
package nginx is not installed
if [ $? -eq 0 ];then rpm -e nginx || yum -y install nginx;fi
4,请用rpm命令列出nignx包中的所有配置文件
答案
rpm -ql nignx
5,新增一块20G的硬盘,分成3个区,大小分别3G,4G,5G,将这三个区做成物理卷,然后再创立卷组,在该卷组上建立6G的逻辑卷挂载到/log/目录下,再将该逻辑卷扩展到10G,请写出实现步骤,文件系统不限。
答案:
1,先新增一块20G的硬盘
对新硬盘sdb进行分区
通过命令 fdisk /dev/sdb 进行分区 对1,2,3分区依次分 3,4,5G
w 保存
将分区 sdb1,2,3 贴上lvm的标签
用pvcreate命令将分配好的分区改为物理卷
相关工具下载
yum -y install lvm2
创建物理卷组
root@rocky8 ~]$ pvcreate /dev/sd{b1,b2,b3}
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
[root@rocky8 ~]$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <199.00g 0
/dev/sdb1 lvm2 --- 3.00g 3.00g
/dev/sdb2 lvm2 --- 4.00g 4.00g
/dev/sdb3 lvm2 --- 5.00g 5.00g
再创建卷组 test
root@rocky8 ~]$ vgcreate test /dev/sd{b1,b2,b3}
^[[3~ Volume group "test" successfully created
[root@rocky8 ~]$ vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 3 0 wz--n- <199.00g 0
test 3 0 0 wz--n- <11.99g <11.99g
创建逻辑卷mysql_lv,指定6G大小
root@rocky8 ~]$ lvcreate -n mysql_lv -L 6G test
Logical volume "mysql_lv" created.
[root@rocky8 ~]$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home rl -wi-ao---- 126.96g
root rl -wi-ao---- 70.00g
swap rl -wi-ao---- 2.03g
mysql_lv test -wi-a----- 6.00g
为mysql_lv 创建一个文件系统,以ext4 为例
[root@rocky8 ~]$ mkfs.ext4 /dev/test/mysql_lv
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 1572864 4k blocks and 393216 inodes
Filesystem UUID: d91f26b5-85c9-4505-9c80-d2d6e264b553
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
将逻辑卷分区永久挂载到log目录下
然后创建文件/log ,再让他挂载生效
mkdir /log
mount -a
再将逻辑卷扩容到10G
lvextend -r -L 10G /dev/test/mysql_lv
root@rocky8 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 867M 0 867M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.5M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/rl-root 70G 6.1G 64G 9% /
/dev/mapper/rl-home 127G 939M 126G 1% /home
/dev/mapper/test-mysql_lv 9.8G 27M 9.3G 1% /log
/dev/sda1 1014M 258M 757M 26% /boot
tmpfs 180M 24K 179M 1% /run/user/0
/dev/sr0 10G 10G 0 100% /run/media/root/Rocky-8-5-x86_64-dvd
6,根据下面命令结果,写出你能读出的信息
答案:
sda 分区总共200G容量
sda1 占1G 挂载到/boot 目录下
sda2 占199G 其中有3个逻辑卷
rl-root逻辑卷占用70G 挂载到根目录下
rl-swap逻辑卷 占用2G 挂载到swap分区
rl-home逻辑卷 占用127G 挂载到/home目录下
7,配置一块网卡,IP地址是10.0.0.110,子网掩码是24位,网关是10.0.0.2,DNS分别是10.0.0.2和114.114.114.114.请写出配置文件内容,另外写一个脚本,配置成别名,该别名对root用户永久生效,要求传入网卡设备名可以让修改后的内容重载生效
答案:
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.110
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.2
DNS2=114.114.114.114
ONBOOT=yes
脚本不会写 不懂什么是网络的别名 和怎么对root用户永久生效
8,请描述一下一个网络请求从一台设备到另一台设备的具体过程
答案:
1,当双方都处于(closed)状态,当客户端向服务器发送连接请求时,会发送SYN(同步)标志位的TCP包,将序列号设为随机值(seq=x)
此时客户端进入到SYN-SENT状态(同步已发送),等待服务器回应
2,服务器收到客户端的SYN包和ACK(确认)标志位的TCP包后,将确认号设为客户端的序列号+1(ACK=X+1),同时将自己的序列号设为随机值(seq=y)
这时,服务器进入到SYN-RCVD(同步收到)状态
3,客户端收到服务器的SYN+ACK包后,发送一个带有ACK标志位的TCP包,将确认号设为服务器的序列号+1(ACK=Y+1)
服务器收到客户端的ACK包后,双方都进入已建立连接的ESTABLISHED状态,并开始数据传输
9,当执行shell脚本时,可向shell脚本传参,请说明 0 , 0, 0,#, @ , @, @,* 这几个参数的含义
答案:
$0: 代表当前执行的脚本或命令的名称。如果脚本包含路径,那么$0也会包含这个路径。
$#:代表传递给脚本的位置参数(即命令行参数)的个数。
$@ 和
∗
:含义:都代表传递给脚本的所有位置参数的列表。区别:在大多数情况下,它们看起来可能很相似,但在被双引号包围时,它们的行为会有所不同。
"
*: 含义:都代表传递给脚本的所有位置参数的列表。 区别:在大多数情况下,它们看起来可能很相似,但在被双引号包围时,它们的行为会有所不同。 "
∗:含义:都代表传递给脚本的所有位置参数的列表。区别:在大多数情况下,它们看起来可能很相似,但在被双引号包围时,它们的行为会有所不同。"@":将每个参数视为独立的字符串。如果脚本在遍历这些参数时使用了双引号,那么每个参数都会保持其完整性。
"
∗
"
:将所有参数视为一个单一的字符串,参数之间由
I
F
S
(
I
n
t
e
r
n
a
l
F
i
e
l
d
S
e
p
a
r
a
t
o
r
,内部字段分隔符,默认为空格)的第一个字符分隔。这意味着,在双引号内,所有参数会被视为一个整体。用途:在需要处理所有参数的场合,这两个变量都非常有用。但是,如果你需要保持参数的独立性(比如,在循环中分别处理它们),那么
"
*":将所有参数视为一个单一的字符串,参数之间由IFS(Internal Field Separator,内部字段分隔符,默认为空格)的第一个字符分隔。这意味着,在双引号内,所有参数会被视为一个整体。 用途:在需要处理所有参数的场合,这两个变量都非常有用。但是,如果你需要保持参数的独立性(比如,在循环中分别处理它们),那么"
∗":将所有参数视为一个单一的字符串,参数之间由IFS(InternalFieldSeparator,内部字段分隔符,默认为空格)的第一个字符分隔。这意味着,在双引号内,所有参数会被视为一个整体。用途:在需要处理所有参数的场合,这两个变量都非常有用。但是,如果你需要保持参数的独立性(比如,在循环中分别处理它们),那么"@"是更好的选择。
10, 写一个脚本,计算出100以内能被3整除的数之和,以及能被4整除的树之和,然后再输出这两个数字
答案:
num_3=0
num_4=0
for ((i=1; i<100; i++))
do
if ((i % 3 == 0)); then
((num_3 += i))
fi
if (( i % 4 == 0)); then
((num_4 += i))
fi
done
echo "100以内能被3整除的数之和是$num_3"
echo "100以内能被4整除的数之和是$num_4"
11,写一个脚本,打印输出8行8列的国际象棋棋盘,使用红黄两色
答案:
for i in {1..8}; do
for j in {1..8}; do
temp1=$((i % 2))
temp2=$((j % 2))
if [ $temp1 -eq $temp2 ]; then
echo -e -n "\033[43m \033[0m"
else
echo -e -n "\033[41m \033[0m"
fi
done
echo
done
12,写一个脚本,生成10个随机数放到一个数组中,再将该数组中的元素从小到大排序进行输出
答案:
numbers=()
for (( i=0; i<10; i++));do
random_num=($((RANDOM % 100 +1)))
numbers+=($random_num)
done
sort_numbers=($(printf "%s\n" "${numbers[@]}" | sort -n))
echo "${sort_numbers[@]}"