服务端面试题手册

梳理高频技术问题,帮助你按主题复习和查漏补缺。

服务端阅读 02月17日 23:47

Docker 安全最佳实践有哪些?

Docker 安全最佳实践包括:使用官方或可信的基础镜像、定期更新镜像以修复安全漏洞、避免在镜像中存储敏感信息(使用环境变量或 secrets)、以非 root 用户运行容器、限制容器的资源使用、使用 --read-only 标志使容器文件系统只读、使用 Docker Content Trust 验证镜像签名、限制容器的 capabilities(使用 --cap-drop 和 --cap-add)、使用 AppArmor 或 SELinux 增强安全隔离、定期审计和监控容器。
服务端阅读 02月17日 23:47

Docker 容器与消息队列的结合方式是什么?

Docker 容器与消息队列的结合可以实现异步处理和解耦。常用消息队列:RabbitMQ、Kafka、Redis、ActiveMQ。部署方式:1)使用官方镜像部署消息队列;2)使用 Docker Compose 编排消息队列和应用容器;3)使用数据卷持久化消息数据;4)配置集群模式提高可用性(如 Kafka 集群)。最佳实践:合理设置资源限制、配置持久化存储、实现消息确认机制、监控队列状态、设置告警。注意事项:消息队列的启动顺序、网络配置、数据备份、故障恢复。
服务端阅读 02月17日 23:46

Docker 容器与缓存服务的部署方法是什么?

Docker 容器与缓存服务的部署可以显著提升应用性能。常用缓存服务:Redis、Memcached。部署方式:1)使用官方镜像部署缓存服务;2)配置数据卷持久化缓存数据(如 Redis AOF/RDB);3)使用 Docker Compose 编排缓存和应用容器;4)配置缓存集群模式(如 Redis Cluster)。性能优化:使用 host 网络模式减少网络开销、调整内存配置、使用持久化模式避免数据丢失。最佳实践:设置合理的过期时间、监控缓存命中率、实现缓存预热、配置主从复制提高可用性。
服务端阅读 02月17日 23:46

Docker 容器信号处理的机制是什么?

Docker 容器信号处理是容器优雅关闭的关键。Docker 在停止容器时发送 SIGTERM 信号,容器内的进程应该捕获该信号并执行清理操作(如关闭连接、保存状态)。如果进程在超时时间(默认 10 秒)内未退出,Docker 会发送 SIGKILL 信号强制终止。在 Dockerfile 中使用 STOPSIGNAL 指令可以自定义停止信号。应用代码中需要正确处理信号,例如在 Python 中使用 signal.signal(),在 Node.js 中使用 process.on('SIGTERM')。对于多进程容器,需要使用 init 系统(如 dumb-init、tini)来正确传递信号。
服务端阅读 02月17日 23:46

Docker 容器性能优化的方法有哪些?

Docker 容器性能优化可以从多个方面入手:1)选择合适的基础镜像(alpine、distroless 等)减小镜像体积;2)使用多阶段构建只保留必要文件;3)合并 RUN 指令减少镜像层数;4)利用构建缓存,将变化少的指令放在前面;5)清理不必要的文件和缓存(apt-get clean、rm -rf /var/lib/apt/lists/*);6)使用 .dockerignore 排除不需要的文件;7)优化应用代码和依赖;8)合理设置资源限制避免资源浪费;9)使用健康检查确保应用正常运行;10)定期更新基础镜像和依赖包获取性能改进和安全修复。
服务端阅读 02月17日 23:43

Docker 容器服务发现的实现方式有哪些?

Docker 容器服务发现机制用于动态发现和连接容器化服务。实现方式:1)Docker 内置 DNS:容器通过容器名互相解析;2)环境变量注入:Docker 将链接容器的信息注入环境变量;3)第三方服务发现工具:Consul、Etcd、Zookeeper;4)Kubernetes Service:通过 Service 对象提供服务发现;5)服务网格:Istio、Linkerd 提供高级服务发现功能。负载均衡:Docker Swarm 内置负载均衡,Kubernetes 使用 Service 和 Ingress。最佳实践:使用服务注册中心、实现健康检查、支持动态更新、配置超时和重试。
服务端阅读 02月17日 23:42

Docker 容器网络性能优化的方法有哪些?

Docker 容器网络性能优化可以从多个方面入手:1)选择合适的网络模式(host 模式性能最好但隔离性差);2)使用自定义网络而非默认 bridge 网络;3)优化 MTU 设置以匹配网络环境;4)减少网络层级和跳数;5)使用 DNS 缓存减少域名解析延迟;6)启用网络性能调优参数(如 TCP Fast Open);7)使用 overlay 网络时优化 VXLAN 配置;8)合理设置容器网络带宽限制;9)使用服务网格优化服务间通信;10)监控网络性能指标及时发现问题。
服务端阅读 02月17日 23:42

Docker 容器自动扩缩容的实现方法是什么?

Docker 容器自动扩缩容可以根据负载动态调整容器数量。在 Docker Swarm 中,使用 docker service scale 服务名=副本数 手动扩缩容,或配合外部监控工具实现自动扩缩容。Kubernetes 提供 Horizontal Pod Autoscaler(HPA)基于 CPU、内存或自定义指标自动扩缩容。实现自动扩缩容需要:1)配置资源请求和限制;2)设置扩缩容指标和阈值;3)配置最小和最大副本数;4)选择合适的扩缩容策略(如稳定窗口、扩缩容比例)。自动扩缩容可以提高资源利用率,降低成本,同时保证服务性能。
服务端阅读 02月17日 23:41

Docker 容器调试的方法有哪些?

Docker 容器调试常用方法:1)使用 docker logs 查看容器日志;2)使用 docker exec -it 容器名 /bin/bash 进入容器交互式 shell;3)使用 docker inspect 查看容器详细配置和状态;4)使用 docker top 查看容器内运行的进程;5)使用 docker stats 查看容器资源使用情况;6)使用 docker port 查看端口映射;7)使用 docker diff 查看容器文件系统变化。对于启动失败的容器,可以使用 docker run --rm -it 镜像名 /bin/bash 手动启动调试。调试时建议使用 --cap-add=SYS_PTRACE 和 --security-opt seccomp=unconfined 参数以获得更多调试能力。
服务端阅读 02月17日 23:40

Docker 容器重启策略有哪些?

Docker 容器重启策略包括:no(不自动重启,默认)、on-failure(容器非正常退出时重启,可设置最大重试次数)、always(总是重启,除非手动停止)、unless-stopped(总是重启,除非手动停止或 Docker 守护进程重启)。使用 --restart 参数指定重启策略。在生产环境中,always 或 unless-stopped 是常用选择,确保服务高可用性。on-failure 适合可能临时失败但可以自动恢复的服务。
服务端阅读 02月17日 23:40

Docker 容器镜像仓库的选择和对比是什么?

Docker 容器镜像仓库的选择需要考虑多个因素:Docker Hub(官方仓库,镜像丰富,但有拉取限制)、GitHub Container Registry(与 GitHub 集成,适合开源项目)、GitLab Container Registry(与 GitLab CI/CD 集成)、Harbor(企业级私有仓库,支持漏洞扫描、镜像签名)、AWS ECR(AWS 云服务,与 AWS 集成)、Google GCR(Google Cloud 集成)、Azure ACR(Azure 集成)。选择建议:个人学习用 Docker Hub,企业内部用 Harbor,云原生应用用对应云厂商的仓库。注意镜像大小、拉取速度、安全扫描、访问控制等功能。
服务端阅读 02月17日 23:38

Linux 磁盘管理和文件系统操作中如何进行分区、格式化、挂载和管理磁盘空间?

Linux 磁盘管理和文件系统是系统管理员的核心技能,涉及磁盘分区、格式化、挂载和维护等操作。磁盘分区:fdisk:传统的磁盘分区工具查看分区:fdisk -l进入交互模式:fdisk /dev/sdb常用命令:n(新建分区)、p(打印分区表)、d(删除分区)、w(保存并退出)、q(不保存退出)parted:现代磁盘分区工具,支持 GPT 分区表查看分区:parted -l进入交互模式:parted /dev/sdb创建分区:mkpart primary ext4 1MiB 100%设置分区表:mklabel gptlsblk:列出块设备信息blkid:查看块设备 UUID 和文件系统类型文件系统:常见文件系统类型:ext4、xfs、btrfs、ntfs、vfatmkfs:创建文件系统,如 mkfs.ext4 /dev/sdb1、mkfs.xfs /dev/sdb1mkfs.ext4:创建 ext4 文件系统mkfs.xfs:创建 xfs 文件系统磁盘挂载:mount:挂载文件系统,如 mount /dev/sdb1 /mnt/dataumount:卸载文件系统,如 umount /mnt/data查看挂载点:mount、df -h/etc/fstab:自动挂载配置文件格式:设备 挂载点 文件系统类型 挂载选项 dump fsck示例:/dev/sdb1 /mnt/data ext4 defaults 0 2使用 UUID:UUID=xxx /mnt/data ext4 defaults 0 2(推荐)查看设备 UUID:blkid /dev/sdb1磁盘空间管理:df:查看磁盘空间使用情况,df -h(人类可读格式)du:查看目录或文件大小,du -sh directory(显示目录总大小)du -h --max-depth=1 /:查看根目录下各目录的大小清理磁盘空间:清理包缓存:apt clean(Debian/Ubuntu)、yum clean all(CentOS/RHEL)清理旧日志:logrotate查找大文件:find / -type f -size +100MLVM(逻辑卷管理):pvcreate:创建物理卷,如 pvcreate /dev/sdb1vgcreate:创建卷组,如 vgcreate vgname /dev/sdb1lvcreate:创建逻辑卷,如 lvcreate -L 10G -n lvname vgnamelvextend:扩展逻辑卷,如 lvextend -L +5G /dev/vgname/lvnamelvreduce:缩减逻辑卷,如 lvreduce -L -5G /dev/vgname/lvnameresize2fs:调整 ext4 文件系统大小,如 resize2fs /dev/vgname/lvnamexfs_growfs:扩展 xfs 文件系统pvdisplay、vgdisplay、lvdisplay:查看物理卷、卷组、逻辑卷信息RAID(磁盘阵列):mdadm:管理软件 RAID创建 RAID 0:mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1创建 RAID 1:mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1创建 RAID 5:mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1查看 RAID 状态:cat /proc/mdstat、mdadm --detail /dev/md0磁盘性能优化:使用 SSD:提高 I/O 性能调整 I/O 调度器:echo deadline > /sys/block/sda/queue/scheduler增加文件系统块大小:mkfs.ext4 -b 4096 /dev/sdb1使用 noatime 挂载选项:减少磁盘写入启用文件系统日志:提高数据安全性磁盘故障排查:查看磁盘健康:smartctl -a /dev/sda(需要安装 smartmontools)查看磁盘 I/O:iostat -x 1查看磁盘错误:dmesg | grep -i error修复文件系统:fsck /dev/sdb1(需要先卸载)
服务端阅读 02月17日 23:38

Docker 容器与虚拟机混合部署的方案是什么?

Docker 容器与虚拟机的混合部署可以结合两者的优势。部署场景:1)使用容器运行无状态应用,使用虚拟机运行有状态应用(如数据库);2)使用容器运行微服务,使用虚拟机运行传统单体应用;3)使用容器进行快速迭代,使用虚拟机运行稳定的核心业务。网络互通:通过桥接网络、overlay 网络或 host 网络实现容器和虚拟机通信。存储共享:使用共享存储(NFS、Ceph)或数据卷挂载。管理工具:使用 Kubernetes 管理容器,使用虚拟化管理平台(如 vSphere)管理虚拟机。注意事项:资源分配、网络配置、安全策略统一。
服务端阅读 02月17日 23:38

Linux Shell 脚本编程中如何定义变量、编写条件判断和循环语句?

Linux Shell 脚本编程是自动化运维和系统管理的重要技能。变量定义和使用:变量定义:name="value"(注意等号两边不能有空格)变量引用:$name 或 ${name}只读变量:readonly name删除变量:unset name环境变量:export name="value"特殊变量:$0(脚本名)、$1-$9(位置参数)、$#(参数个数)、$*(所有参数)、$@(所有参数)、$?(上一条命令退出状态)、$$(当前进程 PID)、$!(后台进程 PID)条件判断:if 语句:if [ condition ]; then commands; fi文件测试:-f(文件存在)、-d(目录存在)、-e(存在)、-r(可读)、-w(可写)、-x(可执行)字符串比较:=(等于)、!=(不等于)、-z(空字符串)、-n(非空字符串)数值比较:-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于)逻辑运算:-a(与)、-o(或)、!(非)循环结构:for 循环:for i in {1..10}; do commands; done 或 for ((i=0; i<10; i++)); do commands; donewhile 循环:while [ condition ]; do commands; doneuntil 循环:until [ condition ]; do commands; done函数定义:函数定义:functionname() { commands; } 或 function functionname { commands; }函数调用:function_name arg1 arg2返回值:return value(0-255)局部变量:local var="value"常用命令:echo:输出文本,echo -n 不换行,echo -e 解析转义字符printf:格式化输出read:读取用户输入,read -p "prompt" vartest:条件测试,[ ] 是 test 的同义词expr:表达式求值let:算术运算awk:文本处理工具sed:流编辑器grep:文本搜索数组操作:定义数组:arr=(item1 item2 item3)访问元素:${arr[0]}、${arr[@]}(所有元素)、${#arr[@]}(元素个数)添加元素:arr+=("new_item")最佳实践:使用 set -e 遇到错误立即退出使用 set -u 使用未定义变量时报错使用 set -o pipefail 管道中任何命令失败都返回失败添加注释说明脚本用途使用引号保护变量
服务端阅读 02月17日 23:37

Linux 文件权限系统如何工作,包括读、写、执行权限以及特殊权限(SUID、SGID、Sticky Bit)的作用是什么?

Linux 文件权限系统是 Unix-like 操作系统的核心安全机制之一。每个文件和目录都有三组权限:所有者(owner)、所属组(group)和其他用户(others)。每组权限包含读(r=4)、写(w=2)和执行(x=1)三种基本权限。权限表示方法有两种:符号表示法(如 rwxr-xr-x)和数字表示法(如 755)。符号表示法中,r 表示读权限,w 表示写权限,x 表示执行权限。数字表示法中,读权限为 4,写权限为 2,执行权限为 1,通过相加得到组合权限值。常用权限命令包括:chmod:修改文件权限,如 chmod 755 filename 或 chmod u+x filenamechown:修改文件所有者,如 chown user:group filenamechgrp:修改文件所属组,如 chgrp group filename特殊权限包括:SUID(Set User ID):当执行设置了 SUID 的程序时,程序会以文件所有者的权限运行,而不是执行者的权限SGID(Set Group ID):对于文件,执行时以文件所属组的权限运行;对于目录,新创建的文件会继承目录的所属组Sticky Bit:对于目录,只有文件所有者和 root 才能删除目录中的文件,即使其他用户有写权限理解文件权限对于系统安全至关重要,需要根据最小权限原则合理设置。
服务端阅读 02月17日 23:37

Linux 容器技术(Docker、Kubernetes)的核心概念、常用命令和最佳实践有哪些?

Linux 容器技术是现代应用部署和微服务架构的核心技术,Docker 和 Kubernetes 是最主流的容器解决方案。Docker 基本概念:镜像(Image):只读的文件系统模板,包含运行应用所需的所有依赖容器(Container):镜像的运行实例,轻量级、隔离的运行环境仓库(Repository):存储和分发镜像的地方,如 Docker HubDockerfile:用于构建镜像的文本文件Docker Compose:定义和运行多容器应用的工具Docker 常用命令:镜像管理:docker images:列出本地镜像docker pull image:拉取镜像docker build -t name .:构建镜像docker rmi image:删除镜像docker tag image newname:标记镜像容器管理:docker run:运行容器docker ps:查看运行中的容器docker ps -a:查看所有容器docker stop container:停止容器docker start container:启动容器docker restart container:重启容器docker rm container:删除容器docker exec -it container /bin/bash:进入容器容器操作:docker logs container:查看容器日志docker cp file container:/path:复制文件到容器docker cp container:/path file:从容器复制文件docker inspect container:查看容器详细信息docker stats:查看容器资源使用情况Dockerfile 指令:FROM:指定基础镜像RUN:执行命令COPY:复制文件到镜像ADD:复制文件到镜像(支持解压缩和 URL)CMD:容器启动时执行的命令ENTRYPOINT:容器启动时执行的入口点ENV:设置环境变量ARG:构建时的变量EXPOSE:声明容器监听的端口VOLUME:声明挂载点WORKDIR:设置工作目录USER:设置运行用户Docker Compose:配置文件:docker-compose.yml常用命令:docker-compose up:启动服务docker-compose down:停止并删除服务docker-compose ps:查看服务状态docker-compose logs:查看服务日志docker-compose exec service command:在服务中执行命令配置示例: version: '3' services: web: build: . ports: - "80:80" volumes: - ./data:/data environment: - ENV=valueKubernetes 基本概念:Pod:最小的部署单元,包含一个或多个容器Node:运行 Pod 的物理或虚拟机Service:为 Pod 提供稳定的网络访问Deployment:管理 Pod 的副本和更新ReplicaSet:确保指定数量的 Pod 副本在运行StatefulSet:管理有状态应用DaemonSet:在每个节点上运行一个 PodConfigMap:配置数据Secret:敏感数据Namespace:资源隔离Ingress:HTTP/HTTPS 路由Kubernetes 常用命令:集群管理:kubectl cluster-info:查看集群信息kubectl get nodes:查看节点kubectl get namespaces:查看命名空间Pod 管理:kubectl get pods:查看 Podkubectl describe pod podname:查看 Pod 详情kubectl logs podname:查看 Pod 日志kubectl exec -it podname /bin/bash:进入 Podkubectl delete pod podname:删除 PodService 管理:kubectl get services:查看服务kubectl describe service servicename:查看服务详情Deployment 管理:kubectl get deployments:查看部署kubectl apply -f yaml:应用配置kubectl rollout status deployment/deploymentname:查看部署状态kubectl scale deployment/deploymentname --replicas=3:扩展副本数Kubernetes 配置示例:Pod 配置: apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80Deployment 配置: apiVersion: apps/v1 kind: Deployment metadata: name: mydeployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80容器网络:Docker 网络模式:bridge:默认模式,容器通过 Docker 网桥通信host:容器使用主机网络栈none:无网络container:共享另一个容器的网络Kubernetes 网络模型:Pod 网络:所有 Pod 在同一个扁平网络中Service 网络:为 Pod 提供稳定的 IPIngress:外部访问入口容器存储:Docker 存储驱动:overlay2、aufs、btrfs、zfs卷(Volume):持久化存储绑定挂载(Bind Mount):将主机目录挂载到容器Kubernetes 存储类(StorageClass):动态存储分配持久卷(PersistentVolume):集群级别的存储资源持久卷声明(PersistentVolumeClaim):用户对存储的请求容器安全:镜像安全:使用官方镜像或可信镜像定期更新镜像扫描镜像漏洞最小化镜像大小运行时安全:使用非 root 用户运行容器限制容器资源使用只读文件系统限制容器能力Kubernetes 安全:RBAC:基于角色的访问控制Network Policy:网络策略Pod Security Policy:Pod 安全策略容器编排最佳实践:微服务架构:将应用拆分为多个微服务健康检查:配置 liveness 和 readiness 探针资源限制:设置 CPU 和内存限制滚动更新:逐步更新应用,避免服务中断自动扩缩容:根据负载自动调整副本数配置管理:使用 ConfigMap 和 Secret 管理配置日志收集:集中收集和分析容器日志监控告警:监控容器和集群状态
服务端阅读 02月17日 23:37

Linux 文本处理中 grep、sed、awk 命令的常用用法和正则表达式有哪些?

Linux 文本处理是系统管理和数据分析的重要技能,掌握这些工具可以大大提高工作效率。grep(文本搜索):基本用法:grep "pattern" file常用选项:-i:忽略大小写-v:反向匹配(显示不匹配的行)-n:显示行号-c:统计匹配行数-r:递归搜索目录-l:只显示包含匹配的文件名-A n:显示匹配行及其后 n 行-B n:显示匹配行及其前 n 行-C n:显示匹配行及其前后各 n 行正则表达式:grep -E "pattern1|pattern2" file(扩展正则)示例:grep -rn "error" /var/log(递归搜索日志中的错误)sed(流编辑器):基本用法:sed 'command' file常用命令:s/pattern/replacement/:替换(只替换第一个匹配)s/pattern/replacement/g:全局替换(替换所有匹配)d:删除行p:打印行n:读取下一行常用选项:-i:直接修改文件-n:抑制自动输出-e:执行多个命令示例:sed 's/old/new/g' file(全局替换)sed '/pattern/d' file(删除匹配的行)sed -i 's/foo/bar/g' file(直接修改文件)awk(文本处理工具):基本用法:awk 'pattern {action}' file内置变量:$0:整行$1, $2, …:第1、2、…个字段NF:字段总数NR:当前行号FNR:当前文件的行号FS:字段分隔符(默认空格)OFS:输出字段分隔符RS:记录分隔符(默认换行符)ORS:输出记录分隔符常用函数:print:打印printf:格式化输出length():字符串长度substr():子字符串split():分割字符串gsub():全局替换示例:awk '{print $1}' file(打印第一个字段)awk -F: '{print $1, $3}' /etc/passwd(以冒号为分隔符)awk 'NR==1,NR==10' file(打印第1-10行)awk '{sum+=$1} END {print sum}' file(计算第一列总和)cut(剪切工具):基本用法:cut [options] file常用选项:-d:指定分隔符-f:指定字段-c:指定字符位置示例:cut -d: -f1 /etc/passwd(以冒号为分隔符,提取第一个字段)cut -c1-10 file(提取每行的前10个字符)sort(排序工具):基本用法:sort [options] file常用选项:-n:按数值排序-r:倒序-k:指定排序字段-t:指定分隔符-u:去重示例:sort -n -k2 file(按第二列数值排序)sort -t: -k3 -n /etc/passwd(按第三列数值排序)uniq(去重工具):基本用法:uniq [options] file常用选项:-c:统计重复次数-d:只显示重复的行-u:只显示不重复的行示例:sort file | uniq -c(排序后统计重复次数)组合使用:统计日志中错误数量:grep "error" log | wc -l查找访问量最高的 IP:awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10提取文件中的邮箱:grep -Eo '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}' file
服务端阅读 02月17日 23:36

Linux 系统安全加固措施有哪些,包括用户管理、SSH 配置和防火墙设置?

Linux 系统安全是运维和开发人员必须掌握的重要知识,涉及用户管理、权限控制、防火墙配置等多个方面。用户和组管理:useradd:创建用户,如 useradd -m -s /bin/bash username(创建用户并设置家目录和 shell)userdel:删除用户,如 userdel -r username(删除用户及其家目录)usermod:修改用户属性,如 usermod -aG group username(将用户添加到组)passwd:修改用户密码,如 passwd usernamegroupadd:创建组,如 groupadd groupnamegroupdel:删除组,如 groupdel groupnamegpasswd:管理组,如 gpasswd -a username groupname(将用户添加到组)id:查看用户 ID 和组信息whoami:查看当前用户w:查看当前登录用户SSH 安全配置:配置文件:/etc/ssh/sshd_config禁用 root 登录:PermitRootLogin no禁用密码登录:PasswordAuthentication no(使用密钥认证)修改默认端口:Port 2222限制登录用户:AllowUsers user1 user2密钥认证:ssh-keygen 生成密钥对,将公钥复制到服务器的 ~/.ssh/authorized_keys使用 ssh-copy-id:ssh-copy-id user@host防火墙配置:iptables:传统防火墙工具查看规则:iptables -L -n添加规则:iptables -A INPUT -p tcp --dport 22 -j ACCEPT删除规则:iptables -D INPUT 1保存规则:iptables-save > /etc/iptables/rules.v4firewalld:动态防火墙管理查看规则:firewall-cmd --list-all开放端口:firewall-cmd --add-port=80/tcp --permanent重载配置:firewall-cmd --reloadufw:简化防火墙配置(Ubuntu)启用防火墙:ufw enable开放端口:ufw allow 22查看状态:ufw status文件权限和 SELinux:chmod:修改文件权限chown:修改文件所有者chgrp:修改文件所属组SELinux:安全增强型 Linux查看状态:getenforce临时禁用:setenforce 0永久禁用:修改 /etc/selinux/config查看上下文:ls -Z系统加固:禁用不必要的服务:systemctl disable service更新系统:apt update && apt upgrade(Debian/Ubuntu)或 yum update(CentOS/RHEL)配置自动更新:unattended-upgrades(Debian/Ubuntu)安装安全工具:fail2ban(防止暴力破解)、rkhunter(检测 rootkit)配置日志审计:auditd限制 sudo 权限:编辑 /etc/sudoers,使用 visudo 命令安全审计:查看登录日志:last、lastlog查看认证日志:/var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS/RHEL)查看系统日志:/var/log/messages、journalctl查看进程:ps aux、top查看网络连接:ss -tulnp、netstat -tulnp查看开放端口:nmap localhost应急响应:检查异常进程:ps aux | grep -v grep | grep -E "bash|sh|python|perl"检查异常网络连接:ss -tulnp | grep ESTABLISHED检查异常文件:find / -perm -4000 -o -perm -2000(查找 SUID/SGID 文件)检查用户登录:last、lastlog隔离受感染系统:断开网络连接备份重要数据:在清理前备份关键数据
服务端阅读 02月17日 23:36

Linux 系统性能监控有哪些常用工具,如何分析 CPU、内存、磁盘和网络的使用情况?

Linux 系统性能监控是运维工程师的重要技能,需要掌握多种工具来诊断系统瓶颈。CPU 监控:top/htop:实时查看 CPU 使用率、进程信息vmstat:报告虚拟内存统计信息,如 vmstat 1 5(每秒更新一次,共5次)mpstat:显示各个 CPU 核心的使用情况,如 mpstat -P ALL 1sar:系统活动报告,如 sar -u 1 10(每秒采集一次,共10次)内存监控:free:显示内存使用情况,free -h 以人类可读格式显示vmstat:查看内存交换、缓存等信息ps aux:查看进程的内存占用(VSZ、RSS)pmap:查看进程的内存映射磁盘监控:df:查看磁盘空间使用情况,df -h 以人类可读格式显示du:查看目录或文件的大小,du -sh directoryiostat:查看磁盘 I/O 统计信息,如 iostat -x 1iotop:实时查看磁盘 I/O 使用情况(需要 root 权限)网络监控:ifconfig/ip:查看网络接口配置netstat/ss:查看网络连接和端口监听,如 netstat -tulnp 或 ss -tulnpnethogs:按进程查看网络带宽使用tcpdump:抓包分析网络流量,如 tcpdump -i eth0 port 80日志分析:/var/log/messages:系统主日志/var/log/syslog:系统日志(Debian/Ubuntu)/var/log/dmesg:内核启动日志journalctl:systemd 日志查看工具,如 journalctl -f(实时查看)综合监控工具:dstat:集成了 vmstat、iostat、netstat 等功能glances:基于 Web 的系统监控工具prometheus + grafana:企业级监控解决方案性能优化建议:CPU:优化算法、减少不必要的计算、使用多进程/多线程内存:减少内存泄漏、优化数据结构、使用缓存磁盘:使用 SSD、优化文件系统、减少 I/O 操作网络:使用 CDN、优化 TCP 参数、减少网络请求
服务端阅读 02月17日 23:35

Linux 系统服务管理中如何使用 systemctl 和 service 命令管理服务?

Linux 系统服务管理是运维工程师的核心技能,主要涉及 systemd 和传统的 init 系统。systemd 服务管理:systemctl start service:启动服务systemctl stop service:停止服务systemctl restart service:重启服务systemctl reload service:重新加载配置(不中断服务)systemctl status service:查看服务状态systemctl enable service:设置服务开机自启systemctl disable service:取消服务开机自启systemctl is-enabled service:检查服务是否开机自启systemctl list-units --type=service:列出所有服务systemctl list-unit-files --type=service:列出所有服务文件systemctl daemon-reload:重新加载 systemd 配置服务配置文件:位置:/etc/systemd/system/ 或 /usr/lib/systemd/system/示例:/etc/systemd/system/nginx.service服务配置文件格式:[Unit]Description=nginx serviceAfter=network.target[Service]Type=forkingExecStart=/usr/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPIDRestart=on-failure[Install]WantedBy=multi-user.target传统 init 服务管理(SysVinit):service service start:启动服务service service stop:停止服务service service restart:重启服务service service status:查看服务状态chkconfig --list:列出所有服务chkconfig service on:设置服务开机自启chkconfig service off:取消服务开机自启服务日志管理:journalctl -u service:查看特定服务的日志journalctl -u service -f:实时查看服务日志journalctl -u service --since today:查看今天的日志journalctl -u service --since "2024-01-01" --until "2024-01-02":查看指定时间段的日志journalctl -p err:查看错误级别的日志/var/log/messages:系统主日志/var/log/syslog:系统日志(Debian/Ubuntu)服务故障排查:检查服务状态:systemctl status service查看服务日志:journalctl -u service检查配置文件:cat /etc/systemd/system/service.service检查端口监听:ss -tulnp | grep service检查进程:ps aux | grep service手动启动测试:直接运行服务的可执行文件服务优化:调整启动顺序:使用 After 和 Wants 指令设置资源限制:使用 LimitCPU、LimitMEM 等指令配置自动重启:Restart=on-failure、RestartSec=10s优化启动时间:使用 Type=simple 或 Type=notify