初级Linux运维面试题
系统基础
1、简述Linux启动流程?
1 2 3 4 5 6 7 8 9
| 1):首先是BOIS硬件自检,按照配置顺序查找可启动设备,读取磁盘第一个扇区或EFI分区中的引导程序;
2):其次是Boot Loader引导加载程序,加载所选内核镜像和初始化内存盘;将控制权交给内核;
3):接着是内核初始化,解压并加载内核,检测并初始化CPU、内存、等硬件设备,根据启动参数挂载根文件系统,启动第一个用户空间进程;
4):然后是系统初始化,以systemd作为init进程,按依赖关系并行启动系统服务,运行启动脚本;
5):最后显示登陆页面,用户输入用户名和密码进入系统后加载用户配置和环境。
|
2、Linux常见的发行版有哪些?各有什么特点?*
1 2 3
| #常见发型版本 基于 Debian 的发行版 Ubuntu,特点:强大社区支持、友好的用户界面、丰富的软件仓库; 基于 RHEL 的发行版 RockyLinux,特点 :适合企业服务器环境、免费、完全兼容RHEL
|
3、简述Linux目录结构和常见目录的作用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #目录结构 Linux采用FHS文件系统层次结构标准,以 / 作为整个文件系统的起点,包含所有目录以及文件
#常见目录及作用 etc:存放系统配置文件 dev:存放设备文件 bin:存放系统基本命令 sbin:存放需要root权限才能执行的系统管理命令 boot:存放内核、引导、启动相关文件 home:存放用户家目录 proc:存放虚拟文件系统 run:存放系统启动后的临时文件 mnt:临时挂载点 opt:存放第三方软件 var:存放日志文件 tmp:存放临时文件
|
4、如何查看系统信息?
1 2 3 4 5 6 7 8 9 10 11
| #查看内核版本 uname -a
#查看发行版信息 cat /etc/os-release
#查看主机名 hostnamectl
#查看当前用户 whoami
|
常用命令
1、ls常用选项以及ls -l 参数简述
作用:查看
1 2 3 4 5 6 7 8 9
| #常用选项 -l:以列表形式展示 -a:显示隐藏文件 -lh:以人类可读格式展示大小,KB\MB\GB -lS:降序排序 -lt:时间排序
#ls -l 参数简述 从左往右依次是:文件类别、权限、属组属主、大小、时间、名称
|
2、cp命令常用选项
作用:拷贝
1 2 3 4 5 6 7 8 9
| -r:递归拷贝 -p:保留原文件属性 -a:保留所有属性并递归复制 -i:覆盖前询问 -n:不覆盖已存在的文件 -b:覆盖前创建简单备份 -L:拷贝链接指向的源文件 -s:只拷贝链接 -v:显示过程
|
3、mv命令常用选项
作用:移动
1 2 3 4 5
| -i:覆盖前询问 -n:不覆盖 -b:覆盖前创建简单备份 -v:显示过程 -f:强制
|
4、find命令常用选项
作用:查找
1 2 3 4 5 6
| -type:按类型查找,f 代表文件、d 代表目录、l 代表链接 -size:按大小大小 -user:按属主查找 -a:与 -o:或 !:非
|
5、chmod命令
作用:设置权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #字母表示 r:可读 w:可写 x:可执行 u:属主 g:属组 o:其它组 a:所有组
#数字表示 6:可读 2:可写 1:可执行
#操作符 +:赋与权限 -:取消权限 =:精确权限
#常用选项 -R:递归修改目录及子目录权限 -v:显示修改后信息
|
6、chown命令
作用:修改文件或目录属组和属主
1 2 3 4 5 6
| #语法格式 chown 选项 属组:属主 文件或目录
#常用选项 -R:递归处理 -v:显示详细处理信息
|
7、chrgp命令
作用:修改文件或目录属组
1 2 3 4 5 6
| #语法格式 chgrp 选项 属组 文件或目录
#常用选项 -R:递归 -v:显示修改详细信息
|
8、chmod、chown、chgrp三个命令的区别
1 2 3
| chmod是修改权限; chown是修改属组和属主; chgrp是修改属组
|
9、ps命令
作用:查看进程状态
1 2 3 4
| #常用选项 -aux:查看所有进程详细信息 -ef:以完成格式查看进程列表 -u:查看指定用户进程
|
10、top命令
作用:实时查看进程信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #常用交互指令 q:退出 h:帮助 空格:立即刷新 1:显示所有CPU核心单独使用率 k:杀死进程 M:按内存占用排序 P:按CUP使用率排序 T:按运行时间排序 u:只显示某个用户的进程
#常用选项 -d:设置刷新时间 -p:只监控指定PID进程 -u:只显示指定用户进程
|
11、kill命令和killall命令
作用:终止进程
1 2 3 4 5 6 7
| #常用选项 -9:强制终止 -15:默认终止,进程可以清理资源后退出
#区别 kill只会终止指定进程 killall会终止本进程和子进程
|
12、nice命令renice命令
作用:调整进程优先级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #优先级别 -20:最高优先级,仅root可设置 0:默认优先级 19:最低优先级
#启动新进程时设置优先级 nice -n 值 命令 #nice -n 1 touch yy.lop
#renice常用选项 -n:设置新nice值 -p:目标进程PID -u:目标用户的所有进程
#查看优先级 top:PR参数 ps -l -p PID
|
## 三剑客
三剑客之grep
作用:根据条件查找匹配内容
1、如何查找包含”error”但不包含”warning”的日志行?
1 2
| #使用 -v 选项取反 grep 'error' file | grep -v 'warning'
|
2、如何显示匹配行及其后3行内容?
1 2
| #使用 -A , -B显示前行,-C显示上下行 grep -A 3 '关键字' file
|
3、如何统计文件中匹配模式的行数?
1 2
| #使用-c grep -c '关键字' file
|
4、如何递归搜索目录下所有文件中的关键字?
1 2
| #使用-r递归 grep -r '关键字' /../../..
|
5、如何显示匹配行的行号?
1 2
| #使用-n grep -r '关键字' file
|
三剑客之sed
作用:用于删除、替换文本内容
1、如何替换文件中所有”foo”为”bar”?
1 2
| #使用 s///g sed 's/foo/bar/g' file
|
2、如何删除文件中的空行?
3、如何只替换每行中第二次出现的匹配?
1 2
| #使用s///2 sed 's///2' file
|
4、如何删除文件的第10行?
5、如何显示文件的第5到第10行?
1 2
| #使用-n加p指令 sed -n '5,10p' file
|
6、如何在第5行后添加一行
1 2
| #使用a指令 sed '5a 添加的内容' file
|
7、如何在第5行前添加一行
1 2
| #使用i指令 sed '5i 添加的内容' file
|
8、如果将第6行替换成================
1 2
| #使用c指令 sed '6c ====================' file
|
三剑客之awk
作用:字段提取、统计
1、如何打印文件的第2列?
2、如何统计文件的行数?
3、如何统计文件列数?
4、如何按IP统计访问日志中的访问次数?
1
| awk '{ip[$1]++} END {for (i in ip) print ip[i],i}' file | sort -nr
|
5、如何打印文件中长度超过80个字符的行?
1
| awk 'length($0) > 80' file
|
用户与用户组
1、/etc/passwd文件的字段含义是什么?
1 2 3
| 从左往右依次是=用户名:密码:UID:GID:描述信息:家目录:登录shell
#密码 x 表示密码在shadow文件中
|
2、/etc/shadow文件的字段含义?
1
| 从左往右依次是=加密密码:最后修改时间:最小天数:最大天数:警告天数:不活动天数:失效天数:保留字段
|
3、简述UID和GID的范围规则
1 2 3
| 0:表示root用户 1~999:表示系统用户 1000+:表示普通用户
|
4、如何创建新用户并指定家目录和登录shell?
1 2 3 4 5 6
| useradd -m -p 家目录路径 -s /bin/bash
#解释 -m:如果家目录不存在自动创建 -p:指定家目录路径 -s:指定shell路径
|
5、如何修改用户密码
6、如何锁定和解锁用户
1 2 3 4 5
| #锁定 passwd -l 用户名
#解锁 passwd -u 用户名
|
7、如何修改用户UID和主组?
8、如何删除用户并同时删除家目录?
9、如何将用户添加到附加组?
10、怎么查看用户所属组
11、如何创建新用户组并指定GID?
12、如何删除用户组?
sudo
作用:授权A用户以B用户的身份执行操作
主配置文件:/etc/sudoers
附加配置文件:/etc/sudoers.d
常用配置项
1 2 3 4 5 6 7 8
| #允许用户执行所有命令 用户名 ALL=(ALL) ALL
#允许组内成员执行所有命令 组名 ALL=(ALL) ALL
#允许用户指定指定目录下命令 用户名 ALL=(ALL) 目录路径
|
磁盘管理
1、简述常见文件系统类型及特点
1 2 3 4 5 6 7
| #ext4优缺点 优点:Linux默认文件系统,稳定、日志保证数据一致性,向后兼容ext2、ext3 缺点:最大支持1EB文件系统、单个16TB文件,高并发环境不如xfs
#xfs优缺点 优:高性能、高并发、超大文件支持,单个文件8EB,8EB文件系统,在线扩展不支持缩小; 缺点:不适合小文件,不支持缩小,如果日志文件损坏恢复较慢
|
2、添加一块新硬盘后,如何使用fidsk命令操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #查看 fdisk -l
#进入分区交互模式 fdisk /dev/sd?
n:添加新分区 p/e:p主分区/e逻辑分区,二选一 分区号默认 起始位置默认 终止位置:想分多少就+跟上数字和单位即可 w:保存退出
#格式化文件系统 mkfs -t 文件系统类型 分区路径 #临时挂载 mount 分区路径 挂载目录路径 #查看挂载情况 df -h #查看分区文件类型和UID lsblk -f #永久挂载 vim /etc/fstab 分区路径 挂载目录路径 文件系统类型 defaluts 0 0
|
3、添加一块新硬盘后,如何使用parted命令操作
1 2 3 4 5 6 7 8 9 10 11 12 13
| #查看 parted -l
#分区 parted /dev/sdb mklabel gpt:将磁盘格式化为gpt mkpart primary 0GB 5GB:创建主分区,指定文件系统类型以及容量 print:查看创建结果
#格式化分区为指定文件系统 mkfs -t /dev/sdb1
#临时挂载、永久挂载和fdisk方式一样
|
4、操作raid磁盘阵列的常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #常用参数 -C:创建 -l:指定级别 -n:指定磁盘数量 -f:标记为故障盘 -a:添加磁盘 -r:移除
#创建 mdadm -C /dev/名称 -l 级别 -n 磁盘数量 所用的磁盘
#查看 mdadm -D 阵列名称
#挂载 mount /dev/名称 目录路径
#添加 mdadm /dev/名称 -a 要添加的磁盘
#卸载 umont /dev/名称
#停用 mdadm --stop /dev/名称
#删除 mdadm --zero-superblock 磁盘列表
|
5、简述LVM逻辑卷
LVM是Linux系统中用于灵活管理磁盘空间的一种技术,通过将物理磁盘抽象为逻辑卷,实现存储空间的动态调整。
PV:物理卷真实的物理磁盘或分区
VG:卷组,多个PV组成的资源池
LV:逻辑卷从VG中划分出来的逻辑磁盘,可以像普通磁盘一样挂载使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #创建PV物理卷 pvcreate 磁盘路径 #查看PV状态 pvdisplay
#创建VG资源池 vgcreate 名称 已初始化为pv卷磁盘路径(多个) #查看VG资源池 vgdisplay vg资源池名称
#创建LV逻辑卷 lvcreate -L 大小 -n 逻辑卷名称 VG资源池名称 #查看LV逻辑卷 lvdisplay LV逻辑卷名称
#格式化逻辑卷 mfks -t 文件类型 /dev/VG名称/LV名称 #挂载 mount /dev/VG名称/LV名称 目标路径
# 扩容 #如果VG空间不足需要先将物理卷添加进资源池 vgextend VG名称 PV路径 #在原容量加 lvextend -L +大小 /dev/VG名称/LV名称 #直接设定成指定大小 lvextend -L 大小 /dev/VG名称/LV名称
# 缩减 #先缩减文件系统 umont /挂载点 e2fsck -f /dev/vg01/lv01 resize2fs /dev/VG名称/LV名称 大小 #再缩减LV逻辑卷 lvreduce -L 大小 /dev/VG名称/LV名称 #重新挂载 mount /挂载点
#缩减VG资源池 #先移动PV上的数据到其它PV pvmove /dev/sd? #VG移除PV vgreduce VG名称 /dev/sd? #删除PV pvremove /dev/sd?
|
网络管理
1、OSI七层模型和TCP/IP四层模型的区别是什么?请详细说明每一层的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #OSI七层 物理层:负责比特流在物理介质上的传输,如网卡 数据链路层:提供节点到节点的可靠传输,如交换机 网络层:提供主机到主机的通信服务,如路由器 传输层:提供端口到端口的可靠数据传输,如TCP/UDP协议 会话层:负责建立、管理和终止会话,如RPC协议 表示层:负责数据格式加密和转换,如SSL协议 应用层:为应用程序提供网络服务接口。如HTTP协议
#TCP/IP 网络接口层:等同于 物理层+数据链路层,物理介质传输,MAC寻址 网络层:IP寻址、路由转发 传输层:提供端到端通信,如TCP 应用层:等同于 会话层+表示层+应用层,会话管理、提供各种网络应用服务
#不同点 OSI严格七层,TCP/IP将会话层、表示层、并入了应用层,将物理层和数据链路层并入了网络接口层 OSI是理论模型,强调通用性,TCP/IP是实用模型,源于实际协议 OSI由标准化组织制定,TCP/IP通过实践发展而来
|
2、TCP的三次握手和四次挥手
1 2 3 4 5 6 7 8 9 10
| #三次握手建立链接 第一次握手:客户端发送一个SYN请求报文,并附带初始化序列号,表示希望请求建立链接,进入请求等待状态 第二次握手:服务器收到请求后,回复一个SYN同步和ACK确认报文,ACK字段确认客户端的序列号,同时生成服务器自己的序列号,进入同步收到状态; 第三次握手:客户都安收到服务器的确认后,再发一个ACK确认报文,确认服务区的响应,进入建立连接状态,连接完成。
#四次挥手 第一次挥手:客户端发送一个带有FIN标志的报文,表示客户端不再发送数据,但还可以接收数据,进入结束等待_1状态 第二次挥手:服务器收到客户端FIN报文后,发送一个ACK报文确认,确认序列号为收到的序列号加1,进入关闭等待状态,客户端收到ACK后进入结束等待_2状态 第三次挥手:服务器完成数据发送后,向客户端发送一个FIN报文,表示服务器不再发送数据,进入最后_确认状态 第四次挥手:客户端收到FIN报文后,发送ACK报文确认,服务器收到ACK后立即进入关闭状态
|
3、TCP和UDP协议的主要区别是什么?各自适用于什么场景?
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #TCP 可靠性机制,例如数据校验 流量控制,例如动态调整发送速率 拥塞控制,例如慢启动、快速恢复 #应用场景 文件传输、网页浏览、电子邮件、数据库访问
#UCP 无需建立连接即可发送数据 固定8字节头部 无确认、无顺序控制、无流量控制 #应用场景 游戏通信、DNS查询、DHCP、物联网通信
|
4、如何在Linux系统中查看网络接口信息?如何启用/禁用某个网络接口?
1 2 3 4 5 6 7 8 9 10 11 12 13
| #查看 ip addr
#ip命令禁用和启用 ip link set 网卡名称 down ip link set 网卡名称 up
#使用nmcli命令禁用和启用 nmcil c down 网卡名称 nmcil c uo 网卡名称
#永久性操作 进入对应网卡配置文件修改 ONBOOT=yes/no
|
5、如何永久修改Linux系统的IP地址、子网掩码和默认网关?
1 2 3 4
| #进入对应配置文件修改 /etc/NetworkManager/system-connections/ address=IP/子网位数 gateway=网关 dns=dns地址
|
6、Linux系统中/etc/hosts和/etc/resolv.conf文件的作用是什么?
1 2 3 4 5
| #/etc/hosts 作用:本地主机名和IP地址映射表
#/etc/resolv.conf 作用:配置DNS解析,指定系统使用的DNS服务器和搜索域
|
7‘、简述ping
命令的作用及使用
1 2 3 4 5 6 7 8 9 10 11
| #作用 网络诊断、测试主机之间的网络连通性
#语法 ping 选项 目标主机
#常用选项 -c:指定此时 -i:指定发送间隔,秒 -s:指定大小,字节 -W:指定等待回复超时时间
|
8、简述traceroute
命令的作用及使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #作用 网络诊断 #原理 发送一系列UDP数据包,利用IP协议的TTL字段实现
#语法 traceroute 选项 目标主机
#常用选项 -n:不解析IP为域名 -I:使用ICMP请求,类似ping -T:使用TCP -U:使用UDP -p:指定目标端口 -f:指定起始跳数 -m:指定最大 跳数 -q:指定数据包数量 -w:指定超市时间
|
9、简述tcpdump
的作用及使用
1 2 3 4 5 6 7 8 9 10 11 12 13
| #作用 命令行抓包工具
#语法 tcpdump 选项 网卡名称
#常用选项 -i:指定网卡名称 -D:查看可用接口 -w:结果保存为 .pcap 文件 -r:读取.pcap文件
|
10、怎么通过SSH禁止root远程登陆
1 2 3 4 5 6 7 8 9 10 11
| #进入sshd配置文件修改 vim /etc/ssh/sshd_config
#修改 PermitRootLogin no
#限制登陆用户,设置白名单 AllowUsers 用户名
# 禁用密码登录,仅允许密钥登录(更安全) PasswordAuthentication no
|
11、密钥认证配置流程
1 2 3 4 5
| #生成密钥 ssh-keygen -t rsa -b 4096 -C "注释"
#上传至服务器 ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@ip
|
包管理器
1、搜索软件包
2、安装软件包
3、更新所有软件包
4、更新指定软件包
5、删除软件包
6、列出已安装的软件包
7、查看软件包信息
8、自动删除无用依赖
9、列出所有可用软件包
10、列出所有启用的软件仓库
服务管理
1、简述systemd
的作用及使用
作用:初始化系统和管理服务,智能处理服务之间的依赖
注意点:journalctl日志存在内存中,重启、关机即失效!!!
启动服务
查看服务状态
停止服务
重启服务
设置开机自启
禁止开机自启
重新加载服务
查看是否开机自启
1
| systemctl is-enabled 服务名称
|
2、简述journalctl
的作用及使用
作用:systemd
下的日志管理工具,用于查看和分析系统以及服务的日志。
查看全部日志
查看最新日志
查看内核日志
查看指定服务名日志
查看最新20条日志
实时追踪日志
按优先级筛选
1 2 3
| #0-7,0最简单,7最详细 #3代表 err 普通错误,4代表 warning 警告,6代表 info 服务成功、操作记录的信息 journalctl -p 等级
|
3、如何配置日志切割
使用logrotate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #需要配置某个服务的日志切割时,在logrotate指定目录下创建定制规则即可 cd /etc/logrotate.d/
#常用参数 daily:每天切割一次 weekly:每周切割一次 monthly:每月切割一次 rotate <数字>:指定保留几份历史日志 compress:启用日志压缩,gzip格式 delaycompress:延迟压缩,下一次切割时在压缩 missingok:如果日志文件丢失则不报错 notifempty:如果日志文件为空,则不切割 postrotate....endscript:在日志切割后执行的命令或脚本 dateext:使用日志为后缀
#检查 logrotate -d /etc/logrotate.d/文件名
#强制切割 logrotate -f /etc/logrotate.d/文件名
|
Shell脚本
1、解释 #!/bin/bash
的作用
1
| 用于指定该脚本的解释器路径,当该脚本被执行会根据指定的解释器来解析和运行脚本
|
2、如何在 Shell 中定义和使用变量?
1 2 3 4 5 6 7 8
| #定义 变量名=值
#使用 $变量名
#撤销 unset 变量名
|
3、简述shell的位置变量
1 2 3 4 5 6 7 8
| $0:代表名称本身 $1-9:代表1-9的参数,9以上需要 {} 包裹 $@:代表所有参数,分别看待每一个参数 $*:代表所有参数,看作一个整体 $#:代表参数总个数 $?:返回上次的执行结果,0成功,非0失败 $$:代表当前shell的进程号 $_:获取上次命令的最后一个参数
|
4、编写一个脚本,计算 1 到 100 的整数和
1 2 3 4 5 6 7 8 9 10
| #!/bin/bash
sum=0
for(( k=0;k<=100 )) do sum=$[$sum+k] done
echo $sum
|
5、如何检查一个文件是否存在?
1 2 3 4 5 6
| #!/bin/bash
if [ -f /文件路径 ] then echo '存在' fi
|
6、shell如何从文件中逐行读取内容?
1 2 3 4 5
| while IFS= read -r line;do echo $line done < /文件路径
#IFS=:防止行首 / 行尾的空格被删除
|
7、简述shell判断和循环的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #if判断,结果满足条件才会执行 if [ 条件表达式 ] then fi
#数值常用比较符,字符串用 = -lt:小于 -le:小于等于 -eq:等于 -gt:大于 -ge:大于等于 -ne:不等于
#循环,满足条件就会一直执行 while [ 条件表达式 ] do done
for 初始变量 in 参数列表 do done
for (( 初始变量;条件;自增 )) do done
|
8、简述shell数组的作用以及使用
作用:存储多个值的数据结构,按索引来访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #定义数组 数组名=(值1,值2,...) #访问数组全部数据 ${数组名[@]} #访问指定索引数据 ${数组名[索引]} #for循环遍历数组 for ((i=0;i<${数组名[@]});i++) do echo ${数组名[i]} done
|
9、shell怎么获取用户输入的内容
1
| read -t 等待时间 -p '提示内容' 变量
|
10、如何编写一个函数,并传递参数?
1 2 3 4 5 6 7
| #!/bin/bash sum=0 函数名(){ sum=$[$1+$2] }
函数名 参数1 参数2
|
11、如何调试 Shell 脚本?
1 2 3 4 5 6
| #第一种方式 bash -x 脚本文件 #第二种在脚本文件中指定开始和结束位置 开始位置:set -x 结束位置:set +x
|
安全基础
1、简述firewalld
防火墙的使用
作用:管理防火墙
原理:将流量绑定到zone上,如网段流量、网卡流量,在zone内设定规则,不同流量访问不同的zone,在指定zone内没有匹配到就去默认zone内匹配。
启动、查看、停止
1 2 3 4 5 6 7 8 9 10 11
| systemctl start friewalld
systemctl status friewalld
systemctl stop friewalld
systemctl restart friewalld
systemctl enable friewalld
systemctl disable friewalld
|
操作zone
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #查看默认zone firewall-cmd --get-default-zone
#设置默认zone firewall-cmd --set-default-zone=zone名称
#将网段关联到zone firewall-cmd --permanent --add-source=IP网段/子网位数 --zone=zone名称
#将网段切换到其它zone firewall-cmd --permanent --change-source=IP网段/子网位数 --zone=zone名称
#查看指定zone信息 firewall-cmd --list-all --zone=zone名称
#将网段移除zone内 firewall-cmd --permanent --remove-source=IP网段/子网位数 --zone=zone名称
#将网卡关联到zone firewall-cmd --permanent --add-interface=网卡名称 --zone=zone名称
#删除、修改等操作和网段大同小异,关键字不同,source/interface
|
操作zone内规则
1 2 3 4 5 6 7
| #以端口/协议方式 firewall-cmd --permanent --add-port=端口/协议 --zone=zone名称 firewall-cmd --permanent --remove-port=端口/协议 --zone=zone名称
#以服务形式 firewall-cmd --permanent --add-service=服务名称 --zone=zone名称 firewall-cmd --permanent --remove-service=服务名称 --zone=zone名称
|
性能监控
1、怎么查看CUP使用情况
1 2 3 4 5 6 7 8 9 10
| #使用top命令 top
#常用指令 u:输入用户名后只显示该用户的进程 k:终止进程 M:按内存使用率排序 P:按CPU使用率排序 T:按使用CPU时长排序 1:显示每个CPU核心的使用情况
|
2、怎么查看内存使用情况
1 2 3 4 5 6
| #使用free命令 free -h
#常用选项 -h:以人类可读展示 -s:指定多少秒刷新一次
|
3、怎么查看磁盘使用情况
1 2 3 4 5 6
| #使用df命令 df -h
#常用选项 -h:以人类可读展示 -T:显示文件类型
|
4、简述vmstat
命令的作用和使用
作用:监控系统资源
1 2 3 4 5 6 7 8
| #语法格式 vmstat 选项 间隔时间 刷新次数
#常用选项 -s:显示内存统计摘要 -d:显示磁盘统计信息 -p:显示分区统计信息 -t:显示时间戳
|
故障排查
1、系统运行很慢处理流程
1 2 3 4 5
| #第一步:使用top命令查看是不是某个进程使用CPU过载 #第二步:使用free命令查看内存情况,是否某个进程使用内存过载 #第三步:使用instat工具查看磁盘读写速率,iotop查看实时进程I/O占用 #第四步:使用网络宽带工具查看流量统计 #第五步:查看服务,是否由僵死进程,某个服务因为资源不足频繁重启或异常
|
2、磁盘空间不足的处理流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #第一步:先查看整体磁盘使用情况,看哪些分区使用率是否超过了%80甚至90 df -h
#第二步:使用ncdu工具定位大文件,根据第一步的结果进入该分区内查找大文件 ncdu [目录名称] #常用指令 ↑/↓:上下选择 回车键:进入选定目录 ←:返回上级目录 d:删除所选文件或目录 s:按大小排序 t:按修改时间排序 q:退出
#第三步:清理日志和缓存临时文件 清理日志时:保留在写日志和最新备份 清理缓存临时文件时:需要确认无程序在使用
#如果不行就添加物理磁盘
|
4、服务无法启动的排查步骤
1 2 3 4
| #使用systemd查看服务专题 #使用journactl日志工具查看分析报错信息 #检查服务配置文件是否有语法错误 #检查是否有端口冲突
|
5、忘记root密码处理流程
1、在开机动画页面按e
2、找到以linux16开头的段落,在末尾的UTF-8后面加上init=/bin/sh,再按ctrl+x键进入单用户模式
3、进入单用户名模式后输入,mount -o remount,rw / 回车
4、再次输入passwd后回车,输入第一次新密码后回车,再次输入新密码确定
5、再次输入touch /.autorelabel回车
6、最后输入exec /sbin/init回车,系统重启输入新密码即可
Ansible
1、什么是 Ansible?
1
| 它是有py开发的一款自动化运维工具,基于SSH协议一台管理节点控制多台子节点,实现任务分发到各子节点执行,此外还支持YAML格式编写playbook剧本。
|
2、简述 Ansible 的架构和工作原理
1 2 3 4 5 6 7 8 9 10 11 12
| #架构 采用客户端的C/S架构,其核心组件: Inventory:主机清单文件,定义管理的目标节点和主机 PlayBook:YAML格式的任务剧本 Module:执行具体任务的模块 Role:角色,可复用任务合集 Ad-Hoc:以命令形式将任务分发到子节点
#工作原理 阶段一:任务编排,解析PlayBook,根据Inventory主机清单筛选目标主机 阶段二:任务执行,将每个任务转换为py脚本,并通过SSH协议送到目标主机 阶段三:目标子节点将执行结果响应给管理节点
|
3、如何创建一个自定义的 Ansible Inventory 文件?动态 Inventory 是什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #定义格式 #以IP定义 IP
#主机别名和IP xxxx=IP
#定义组 [xxx] IP
#定义子组 [xxxx:children] 组名 ...
#为组定义全局变量 [组名:vars] 变量名=值 ...
#使用时需要加 -i 参数指定
#动态Inventroy 动态从外部系统获取,如云平台,灵活实用
|
**4、编写一个简单的 Playbook 来在多个服务器上安装和启动 Nginx 服务。**
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #创建 files/index.html文件 Hello PitViper
#编辑templates模板 events { worker_connections {{ number }}; }
#编辑vars变量 --- number: 1050 ...
#编辑tasks任务 --- - name: install nginx dnf: name=nginx state=present - name: copy index.html copy: src=index.html dest=/usr/share/nginx/html/index.html - name: template nginx.conf.j2 template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: restart nginx - name: start nginx systemd: name=nginx state=started
...
#编辑handlers触发 --- - name: restart nginx systemd: name=nginx state=restarted ...
#site.yaml剧本 --- - hosts: viper roles: - nginx ...
#测试运行 ansible-playbook -i /root/inventory.ini site.yaml -C
|
5、如何在 Ansible Playbook 中使用条件语句?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #使用registe来定义变量,使用when判断结果,0表示已运行 name: shell test shell: | ll /hemo register: yy
name: shell 22 shell ll /opt when: yy.rc == 0
#使用loop来定义循环,item代表循环里的元素 vars: userlist: ['Tom','Cat'] tasks: user: name: "{item}" state: present loop: "{{ userlist }}"
|
6、Ansible常用模块有哪些?
1 2 3 4 5 6 7 8 9 10
| copy模块 shell模块 user模块 gruop模块 systemd模块 file模块 script模块 软件包模块 cron定时模块 template模块
|
7、简述Tags属性
作用:指定运行哪些任务,没被Tags属性标记的则不会运行。
特殊标签:always:总是运行 / never:从不运行
1 2 3 4 5 6 7 8 9
| #使用时 tags: 标签名称
#tags作用域 可以标记整个play 可以标记多个任务,标签名称相同就行 可以标记单个任务
使用 --tage 选项跟上 "标签名称" 即可运行指定标签任务
|
8、简述Handlers属性
作用:Handlers是一种特殊任务,它只会在playbook中指定任务发生了变化才会执行,如重启操作
1 2 3 4 5 6 7
| #使用notify定义触发装置 notify:自定义名称
#触发后使用handlers来执行对应操作 handlers: - name: notify定义的名称 操作
|
9、简述Role角色
作用:模块化、复用和组织任务,将playbook拆分称可复用组件
1 2 3 4 5 6 7 8 9 10 11 12 13
| #目录结构 ├── role_name │ ├── file │ │ └── index.html │ ├── handlers │ │ └── main.yaml │ ├── tasks │ │ └── main.yaml │ ├── templates │ │ └── xxx.j2 │ └── vars │ └── main.yaml └── site.yaml
|
10、简述ansible中的templates模板
作用:动态生成配置文件,让配置文件里的参数不再是写死一个数据,而是灵活替换,以模板文件以.j2为后缀
Docker
1、什么是Docker,Docker容器和虚拟机的区别
1 2 3 4 5 6 7 8
| #什么是Docker Docker是由Go语言开发的一款开源、容器管理平台,核心作用为将项目和项目所有依赖全部打包成镜像,解决在自己电脑上能运行,在其他电脑不行的问题
#区别 隔离角度:Docker是进程级,虚拟机是硬件级 启动速度:Docker是秒级,虚拟机是分钟级 资源占用:Docker直接使用宿主机内核,虚拟机需要完成OS内核 镜像大小:Docker是M级,虚拟是G级
|
2、Docker 的核心组件有哪些?
1 2 3 4 5
| DockerD:后台服务,管理容器生命周期 Docker Cilent:Docker命令行交互工具 Docker Images:Docker镜像,用来创建容器 Docker 容器:正在运行中的镜像 Docker 镜像仓库:存放镜像
|
3、Docker 常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #镜像命令 docker images #查看所有镜像 docekr inspect 镜像id或名称 #查看镜像元数据 docker search 镜像名称 #搜索镜像 docker pull 镜像名称:版本号 #拉取镜像,不加版本号默认最新 docker rmi 镜像ID或名称 #删除镜像 docker rmi $(docker images -aq)
#容器命令 docker run 选项 镜像id或名称 #启动镜像 #常用选项[--name:指定容器名称][-d:后台运行][-it:交互模式运行,exit:停止并退出容器,Ctrl+p+q:不停止容器退出容器][-p:指定真机和容器端口][-P:随机指定端口]
docker ps #查看容器,加-a查看所有容器 docker rm 容器id或名称 #删除容器,需要先停止容器 docker rm $(docker ps -aq) #删全部停止的容器 docker start 容器id或名称 #启动容器 docker restart 容器id或名称 #重启容器 docker stop 容器id或名称 #停止容器 docker kill 容器id或名称 #强行停止 docker logs 容器id #查看容器日志,加-f实时追踪容器日志
|
5、如何进入一个正在运行的容器?
1
| docker exec -it 容器id或名称 /bin/bash
|
7、什么是Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| DockerFile是构建镜像的文本文件,包含了一些列指令,Docker引擎会根据DockerFile里的指令分层次构建镜像 #常用指令 FROM:指定基础镜像 RUN:执行命令,想让它干点啥 COPY:复制本地文件到镜像 ADD:类似COPY,额外支持解压和URL下载 WORKDIR:指定工作目录,进入容器后所在的目录 ENV:设置环境变量 EXPOSE:指定容器运行时监听的端口 USER:指定运行容器的用户 VOLUME:指定数据卷挂载点 CMD:容器启动时执行的命令 ENTRYPOINT:类似CMD
#COPY和ADD的区别 COPY:仅把文件复制到镜像 ADD:在COPY的基础上额外支持解压、URL下载
#CMD和ENTRYPOINT的区别 CMD:定义的命令,会被docker run所覆盖 ENTRYPOINT:不会被覆盖,而追加执行
#构建命令 docker build -f dockerfile文件 -t 自定义名称:版本 .
#查看构建过程 docker history 镜像名称:版本
|
8、Docker 有哪些网络模式?
1 2 3
| bridge:桥接,利用docker0作为桥实现通信 host:容器直接使用宿主机网络,无隔离,高性能 none:无网络,仅lo回环接口
|
Docker网络常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #创建 docker network create --subnet 网段/子网位数 --gateway 网关 网络名称
#使用 在docker run启动容器的时间加上 --net 网络名称 即可将容器添加进网络
#查看所有网络 docker network ls
#查看网络详细 docker network inspect 网络名称
#将容器附加到其它网络,实现不同网络容器之间的通信,一个容器多个IP docker network connect 网络名称 容器名称
#端口容器与网络的连接 docker network disconnect 网络名称 容器名称
#删除 docekr network rm 网络名称
|
10、Docker 的数据持久化方式有哪些?
1 2 3 4 5 6
| 第一种:直接使用 -v 挂载到宿主机 -v 宿主机路径:容器路径
第二种:使用数据卷 docker volume create 数据卷名称 docker run -v 数据卷名称:/容器名称/路径
|
11、如何以非 root 用户运行容器?
1 2 3 4 5 6 7
| #第一种,在dockerfile中创建并指定用户 RUN useradd -m appuser && \ chown -R appuser:appuser /app USER appuser
#第二种 在docker run时使用--user指定用户id和组id
|
12、如何限制容器的使用资源?
1 2 3 4 5 6 7 8 9
| #限制内存 docker run时加上 --memory="数值?"指定内存资源,?表示单位单位m、g --memory-swap="数值?" #显示内存和交换分区
#以权重限制CPU,默认1024 --cpu-shares=数值
#以核心限制CPU --cpus="数值"
|
DockerCompose
1、什么是DockerCompse,用来解决什么问题?
1 2
| DockerCompose是用来定义和运行多个Docker容器的工具,通过docker-compose.yaml文件配置服务、网络、存储等操作; 解决了繁琐使用docker run命令,简化多容器的管理,实现一键启动、停止、重建整个应用。
|
2、docker-compose.yml
和 Dockerfile
的区别?
1
| docker-compose.yaml定义的是多个容器的编排,DockerFile定义的是单个容器的构建步骤;
|
3、Docker Compose 的核心命令有哪些?
1 2 3 4 5 6 7 8 9 10 11 12
| #启动 docker compose up #停止并删除 docker compose down #查看运行中的容器 docker compose ps #查看日志 docker compose logs -f #重构镜像 docker compose build #进入容器 docker compose exec
|
4、DockerCompose的顶级元素有哪些
1 2 3 4 5 6
| version:compose文件版本,v2版本可以不写 name:定义应用名称 volumes:定义数据卷 networks:定义网络 services:定义服务集合 environment:定义全局变量
|
5、如何设置容器启动顺序?
1
| 使用depends_on指定哪些服务在本服务之前启动
|
6、如何管理环境变量?
1 2 3 4 5 6
| 将变量统一放在一个隐藏文件内,使用env_file指定文件路径,compose会根据路径去读取变量; 也可以使用${}形式管理变量,在.env文件里定义使用${变量名}获取 定义:PASSWORD=000000 获取: environment: PASSWORD: ${PASSWORD}
|
7、如何调试 Docker Compose 启动失败的问题?
1 2 3 4 5 6 7
| #第一步查看日志 docker compose logs 服务名称 #第二步进入容器检查 docker compose exec 服务名称 /bin/bash #第三步检查依赖程序是否就绪,如数据库链接 #第四步验证配置文件语法 doucker compose config
|
8、docker compose up命令和docker compose start命令有啥区别
1 2
| up:会创建新的容器 start:是启动已有容器
|
9、如何更新运行中的服务配置?
1 2
| #使用-d参数,compose会智能更新 docker compose up -d
|
10、如何限制容器的 CPU/内存?
1 2 3 4 5
| #使用resources配置项指定资源 resources: limits: cpus: "数值" #几核 memory: 数值和单位 #M/G
|