首页
Linux常用
docker常用
关于
Search
1
docker安装MDCX
180 阅读
2
UNRAID增加和缩小虚拟机虚拟磁盘大小
49 阅读
3
unraid添加iSCSI 发起程序
39 阅读
4
iStoreOS上使用WireGuard
20 阅读
5
docker安装WireGuard Easy
13 阅读
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
登录
Search
标签搜索
nginx
unraid
PVE
wow服务器
装机硬件
宏
v2ray
直通
电视盒子
相册
黑裙7.0.1
远程穿透
定时
ssh
emby
symlink
软链接
Linux
sftp
防火墙
奥黛丽·逐爱者
累计撰写
100
篇文章
累计收到
10
条评论
首页
栏目
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
页面
Linux常用
docker常用
关于
搜索到
20
篇与
转载微信公众号文章
的结果
2025-06-23
比lukcy更好用?专业docker 反代/监控/安全/导航!极空间部署「搞东西」反代
大家好,这里是Cherry,喜爱折腾、玩数码,热衷于分享自己的数码玩耍经验~折腾了数十款NAS和数百个Docker容器项目,关注我,每日获得docker玩法如果喜欢本文,请下方点击免费的点赞、在看!🔺玩法汇总:公众号首页,左下角点击教程合集项目均来源互联网,如有侵权,后台私信联系删除新发现的神器!一个端口搞定全部docker反代和单点登录,自带发现容器、导航面板。最近,在github又发现一个好东西——GoDoxy。它是一款轻量级、简单且高性能的 WebUI 反向代理工具。不过这玩意儿没有中文名,根据GoDoxy,我就给取了个「搞东西」的“信雅达"名称,大家权当看个乐儿。不同于目前主流的反代工具,GoDoxy具有如下几个特点,真的可以说是八项全能!唯一的缺点就是英文界面,不过用上浏览器翻译,那是毫无问题。项目地址(值得star):https://github.com/yusing/godoxy项目特点:1.读取docker.sock,并自动发现所有容器入口。2.通过一个域名,将所有容器反代,支持SSO单点登录。3.支持多节点部署。4.支持ACL访问控制,支持国家、时区、IP的访问策略。5.自动化更新SSL证书。6.拥有容器状态和流量监控。7.支持HTTP/HTTPS/TCP/UDP反代和端口转换。8.自动生成容器导航栏。 9.支持X86和ARM架构。一、项目部署1、配置域名这里先说一下GoDoxy的逻辑,它不同于寻常的反代工具,让我们自定义一个三级域名:端口的形式来访问,它是一套全自动的反代工具,有点类似一个SSO,在所有容器前自动加一层代理面板。互联网通过访问我们设置的GoDoxy域名,来访问所有的容器服务,并且我们只需要透出GoDoxy的一个HTTPS端口,就可以实现所有器的访问,生成的容器域名是容器名.domain.exm:端口PS.部分容器涉及到URL后缀的,需要手动增加后缀,比如blossom。因此,我们需要先创建一个DNS解析,解析到下面两个域名。其中泛域名是用于容器访问使用,而GoDoxy域名是用于WebUI登录。1️⃣泛域名: *.domain.top2️⃣GoDoxy域名:godoxy.domain.top ——前缀可改这里,很多人不喜欢godoxy这个域名前缀,这是可以改的,不过改了以后需要去修改根目录下的.env文件。首先,下载最新exe格式的压缩包解压,然后把生成的文件夹丢到极空间的个人空间里。建议采用常规的/路径/docker/项目的方式来管理。打包夸克:pan.quark.cn/s/27fcaa38eb67 🔻修改.env文件第72行,这里的参数GODOXY_FRONTEND_ALIASES改成你自己设置的域名前缀即可。🔻修改.env文件第52、53行,这里是我改的应用访问端口,也可以根据自己的情况修改。接着打开极空间的DDNS服务,根据自己的需要配置对应的DNS解析服务。这里以阿里云为例,点击上方蓝字登录阿里云获取Key和Secret,然后在下方增加前面提到的两个域名,保存并更新即可。2、配置文件接着使用极空间的文本编辑器打开目录/godoxy/config/config.yaml文件,主要修改红框内的两个地方(二选一)。本地证书: 即我上面未注释的部分,放你的GoDoxy域名申请下来的本地证书,在/godoxy/certs/目录下,然后在红框内的key_path和cert_path里的XXXX替换成文件名。(可选)建议使用通配符证书,确保都可以打开域名。缺点是非自签的,3个月要换一次。autocert: provider: local key_path: certs/更名.key cert_path: certs/更名.crt Cloudflare证书: 下方大红框内的配置,需要填写你的Cloudflare邮箱账号、域名信息以及auth_token。没啥缺点,首选建议。autocert: provider: cloudflare email: abc@gmail.com # 邮箱账号 domains: # 填写你的域名列表 - "*.domain.com" - "domain.com" options: auth_token: 填写Couldflare API KeyCloudflare Api Token获取方式如下,打开个人配置文件,选择API令牌——创建令牌——自定义令牌。在自定义令牌里,增加SSL和证书的权限保存。令牌只会出现一次,记得保存好备用,否则只能下次更新替换了。3、启动容器打开极空间docker应用,选择Compose标签,新建项目godoxy,在添加方式里选择从本地导入,然后选择目录下的compose.yaml文件。导入以后,我们需要修改所有的环境变量所在位置,点击上方的查询路径按钮,复制godoxy文件夹所在的目录路径。将代码中所有的【极空间路径】中文,替换成复制下来的极空间路径,并创建Compose。如果启动后,发现子容器godoxy一直重启,那么看一下容器的GODOXY_GID和GODOXY_UID两个环境变量是不是0,如果不是的话手动编辑一下改成0即可。二、GoDoxy简介GoDoxy部署完成以后,原则上我们就可以关闭所有非GoDoxy的容器端口了,因为GoDoxy会统一读取docker.sock,并且将所有容器进行反代。直接打开域名https://godoxy.你的域名.你的后缀:38843登录系统,输入账号密码cherry/cherry登录。🔻初始密码,可以在.env的25、26行修改。下面的图片是系统首页,这里展示了宿主机内的所有创建的容器,包括停止和运行中的。并且根据项目内设的规则进行了分类,包括容器管理、媒体、下载、普通docker等。这里所有自动发现的容器都是可以点击的,并且已经反代完成。将鼠标移动到容器前面的名字上,可以看到浮窗里会显示反代后的URL。切换到Config Editor界面,这里是对容器内/config/config.yaml文件的配置。这样我们就不需要去NAS里修改了,直接可以在页面上修改。比较重要的配置包括ACL策略(即黑白名单,支持地区、国家、IP等);PVE控制接入;远程Docker管理;通知;域名匹配等。内容比较多,就不一一介绍了,感兴趣的可以去官方网站研究。Proxies页面展示的所有自动发现的容器,以及它们的端口、状态、启动时间、网络延迟等,只是一个展示。Metrics则是所有容器的服务监控。Docker里是所有容器的列表展示,点开单个容器可以看到具体的容器日志。由于GoDoxy是支持接入远程docker.sock的,所以理论上可以多节点管理任何网络可达的Docker,真正成为时间管理大师。总结这个项目我折腾了有一段时间,因为作者设置了很多安全的参数,缺少一个系统可以启动,但是无法登录也没有报错,加上自己的英文能力不太行,所以可以说是一边摸索一边询问,最后也在作者的帮助下顺利完成了项目部署。整体体验下来,这一套反代工具,集成了安全登录、反代、容器发现、导航面板、容器监控、日志查看、远程容器管理等等功能,不可谓不强大!搭配极空间的DDNS服务、自带浏览器,可以解决我们绝大多数的容器外网访问安全问题,让NAS深度玩法得到更多的保障!
2025年06月23日
2 阅读
0 评论
0 点赞
2025-06-23
Dockerfile最佳实践
使用多阶段构建❌ 错误示范一个常见的错误是在单个阶段中构建所有内容,最终导致构建的镜像中包含所有构建依赖项,特别臃肿。FROM node:22WORKDIR /appCOPY . .RUN npm installRUN npm run buildEXPOSE 3000CMD ["npm", "start"]✅正确做法使用多阶段构建将构建环境与运行时环境分开。# Build stageFROM node:22 AS buildWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run build# Production stageFROM node:22-slimWORKDIR /appCOPY --from=build /app/dist ./distCOPY --from=build /app/package*.json ./RUN npm install --only=productionEXPOSE 3000CMD ["npm", "start"]选择正确的基础镜像❌ 错误示范FROM ubuntu:latestRUN apt-get update && apt-get install -y python3 python3-pipCOPY . /appWORKDIR /appRUN pip install -r requirements.txtCMD ["python3", "app.py"]✅正确做法选择满足您要求的最小基础镜像,查找带有 Docker Hub 官方徽章或已验证发布者标记的基础镜像,因为这些映像往往更安全且维护得更好。FROM python:3.12-slimWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD ["python", "app.py"]使用固定的镜像版本号❌ 错误示范不要使用像 latest 这样可能会意外更改的镜像版本。FROM node:latestWORKDIR /appCOPY . .RUN npm installCMD ["node", "index.js"]✅正确做法固定到特定镜像版本。FROM node:22.1.0WORKDIR /appCOPY . .RUN npm installCMD ["node", "index.js"]即便使用固定的基础镜像版本,由于安全更新等原因远程仓库存储的镜像也可能会发生改变,如果你不希望这种改变发生,使用哈希摘要版本号来保证镜像不变。FROM node:22.1.0@sha256:12a331df1e31e40b2f37d2524037973908895fb766b8bce742cdf8b1216e5ac2WORKDIR /appCOPY . .RUN npm installCMD ["node", "index.js"]优化镜像层缓存❌ 错误示范不要将频繁变化的文件放在前面。FROM node:22WORKDIR /app# 源代码变化频繁,直接拷贝源代码会导致后续的镜像层缓存失效,构建变慢COPY . .RUN npm installCMD ["npm", "start"]✅正确做法先拷贝包依赖管理文件,如果依赖没有变化,npm install将使用缓存而无需重新下载依赖,加速构建过程。FROM node:22WORKDIR /app# Copy package files firstCOPY package*.json ./# Install dependenciesRUN npm install# Then copy the rest of the codeCOPY . .CMD ["npm", "start"]正确处理apt-get和其他包管理器❌ 错误示范不要将 update 和 install 命令分开,此方法会缓存 apt-get update 结果,这意味着以后的构建可能会安装过时的软件包。FROM ubuntu:24.04RUN apt-get updateRUN apt-get install -y nginxRUN apt-get install -y curl✅正确做法始终将 update 和 install 合并到单个 RUN 指令中。FROM ubuntu:24.04RUN apt-get update && apt-get install -y --no-install-recommends \ nginx \ curl \&& rm -rf /var/lib/apt/lists/*使用.dockerignore排除不必要的文件❌ 错误示范不要将整个项目目录作为构建上下文发送。# Without .dockerignore, everything gets sent to Docker daemon$ docker build -t myapp .✅正确做法创建.dockerignore文件排除不必要的文件,这可以减小构建上下文的大小,加快构建过程,并有助于防止敏感信息泄漏到您的镜像中。.git.github.gitignorenode_modulesnpm-debug.logDockerfile.dockerignore*.md.env**.logcoveragedistbuildtmp不要为环境变量创建多个镜像层❌ 错误示范每个环境变量会生成一个新的镜像层。FROM node:22ENV NODE_ENV=productionENV APP_PORT=3000ENV APP_VERSION=1.2.3✅正确做法FROM node:22# Group related environment variablesENV NODE_ENV=production \ APP_PORT=3000 \ APP_VERSION=1.2.3设置适当的用户❌ 错误示范直接以root用户运行。FROM nginx:alpineCOPY app/ /usr/share/nginx/html# Implicitly runs as rootCMD ["nginx", "-g", "daemon off;"]✅正确做法创建和使用非特权用户。FROM nginx:alpine# Create a non-root userRUN addgroup -g 1000 appgroup && \ adduser -u 1000 -G appgroup -h /home/appuser -D appuser# Configure applicationCOPY --chown=appuser:appgroup app/ /usr/share/nginx/html# For services that need to bind to privileged ports,# start as root then switch to the non-root userUSER appuser# For processes that don't need rootCMD ["nginx", "-g", "daemon off;"]使用WORKDIR而不是RUN cd❌ 错误示范这种方法易出错,难阅读。FROM node:22# Bad practice - using cd commandsRUN cd /opt && mkdir appRUN cd /opt/app && npm init -yCOPY . /opt/app/RUN cd /opt/app && npm installCMD cd /opt/app && npm start✅正确做法使用WORKDIR 指定目录。FROM node:22# Good practice - using WORKDIRWORKDIR /opt/appRUN npm init -yCOPY . .RUN npm installCMD ["npm", "start"]
2025年06月23日
0 阅读
0 评论
0 点赞
2025-06-23
快速入门-Linux常用命令汇总
linux服务器系统信息# 显示系统的基本信息uname -a# 查看内核版本 uname -r # 显示有关发行版的信息-操作系统的详细信息lsb_release -a# liunx 版本cat /etc/issuecat /etc/os-release more /etc/redhat-releasehostnamectlcat /proc/version# cpu 信息cpumore /proc/cpuinfo moer /proc/cpuinfo | grep "model name"# cpu 位数getconf LONG_BIT# 内存信息grep memtotal /proc/meminfofree -m# 查看时区date -R # 已经安装的软件包rpm -qa | wc -lyum list installed | wc -l# 命令帮助信息查询man# 显示在线登入用户who# 显示用户自己的身份whoami# 显示当前系统中耗费资源最多的进程top# 显示瞬间的进程状态 ps# 显示文件系统磁盘空间的使用情况df# 显示指定的文件(目录) 已使用的磁盘空间总量du# 显示当前内存和交换空间的使用情况free# 显示网络接口信息ifconfigcat /etc/sysconfig/network# 测试网络的连通性ping# 显示网络的状态信息netstat # 查看软件安装目录whereis# 查看软件的运行路径which # 域名解析nslookup # 清屏clear# 杀死进程kill# 服务器关机shutdown -h now shutdown -r now文件夹结构说明# 在 Linux 系统中一切都属于文件(软件,硬件,文档都是)# 常用目录: 目录名称 说明 / Linux系统根目录 /bin 系统启动时需要的执行文件(二进制) /boot 存放的是启动 linux 时使用的一些核心文件 /dev 设备文件目录(linux 的外部设备) /etc 操作系统的配置文件目录(防火墙,启动项) /home 用户信息存放的目录,用户的默认工作目录 /lib Library 库文件存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件 /lost+found 系统非法关机后,存放的一些文件 /media 自动识别的一些设备,U盘,光驱等 /mnt 临时挂载别的文件系统 /opt opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录 /proc proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器 /root 该目录为系统管理员,也称作超级权限者的用户主目录 /sbin Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序 /usr usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录 /usr/src 内核源代码默认的放置目录 /var 包含在正常操作中被改变的文件:假脱机文件,记录文件,枷锁文件,临时文件和页格式文件等。 (日志文件)Linux 目录与文件操作命令# 查看当前所在目录pwd ################################cd 打开目录cd. 打开下级目录cd.. 打开上级目录################################ls -a 查看目录下的文件「隐藏的」ll 以列的方式显示目录下的文件列表################################mkdir 文件名 创建文件目录rm -rf 删除文件或目录rm -rf / 绝对路径rm -ri 删除文件前询问用户################################touch 文件名 创建空白文件echo 生成一个带内容的文件################################cp 复制文件命令cp -rf / 复制的文件绝对路径 / 复制到的绝对路径mv 移动文件或修改文件名mv / 路径旧名称 / 路径新名称mv / 移动的文件绝对路径 / 移动到的绝对路径clear 清空屏幕 ################################# 查找文件-find -name 文件名################################# 显示文本文件的内容[cat, tac, more, tail] head 从文件开始显示文件内容head -n 显示指定文件开始的n行数据。比如:head -3 shadow cat 文件名称:查看所有内容tail 从文件结尾显示文件内容tail -f 动态加载某个文件的内容。比如:tail -f message: 用于监测查看日志 tail -n 查看某个文件结尾n行的内容Linux 权限管理# (用户/用户组) 用户: 是指操作系统的实际操作者 用户组:是具有相同特征的用户的集合体 UID: 用户唯一标识 GID: 用户分组唯一标识 root用户:Linux 系统权限最高的用户######################################## 切换到指定用户su[用户名] # 查看当前登入用户whoami # 查看当前用户所属分组groups # 查看当前用户UID 和 GIDid # 添加用户useradd[用户名] # 用户名 添加用户并且指定UID-useradd -u[UID] #######################################/etc/passwd 这个文件存放的是用户的信息/etc/group 这个文件存放的是组的信息# 修改用户密码passwd[用户名] # 删除用户userdel[用户名] # 修改用户登入名usermod -|[新用户名][旧用户名] # 修改用户所属分组usermod -g[新组名称][用户名] # 添加分组groupadd[组名] # 添加分组并且指定GIDgroupadd -g[组GID][组名] # 举例:groupadd -g 601 test1Linux 用户赋权# 描述:d rwx r-x r-x 2 root root 4096 Sep 23 2011 etc -d : d表示的是目录而不是文件 -rwx : 拥有者具有读,写,执行的权力 -r-x : 同组用户具有读,执行的权力,没有写权力 -r-x : 其他组用户具有读,执行的权力,没有写的权力# 权限模式: u, g, o, a : 拥有着, 同组用户, 其他组用户, 所有人 -, +, = : 赋予, 删除, 设置 r, w, x : 读, 写, 执行权限# 数字模式# 使用3位10进制数表示权限操作 r = 4 w = 2 x = 1 r+w+x=7 r+x=5 w+x=3 拥有着 同组用户 其他组用户# 权限组合的数字表示: ---:0 --x:1 -w-:2 -wx:3 r--:4 r-x:5 rw-:6 rwx:7############################ chmod ############################### chmod(change mode)命令用于更改文件或目录的权限chmod [选项] 模式 文件名# 比如:chmod u+x filenamechmod U+X,G+W filenamechmod g-w filename# 设置权限为 rwxr-xr--:chmod 754 filename# -R:递归更改目录及其内容的权限chmod -R 755 directoryname ############################ chown ############################### chown (change owner)命令用于改变文件的所有者和/或所属组。基本语法如下:chown [选项] 用户:组 文件名# -R:递归更改目录及其内容的所有者和组chown -R newuser:newgroup filename常用设置防火墙firewalld和端口设置# 防火墙 firewalldsystemctl start firewalld 开启systemctl status firewalld 状态systemctl stop firewalld 关闭systemctl disable firewalld 禁止firewall开机启动firewall-cmd --reload 重启防火墙# 开放指定端口 firewall-cmd --zone=public --add-port=80/tcp --permanent# 移除指定端口 firewall-cmd --zone=public --remove-port=2375/tcp --permanent# 注:firewall依赖本机python版本,如果自己升级了python版本,需要修改firewall配置文件# vim /usr/bin/firewall-cmd, 将#!/usr/bin/python -Es 改为 #!/usr/bin/python2.7 -Es# vim /usr/sbin/firewalld, 将#!/usr/bin/python -Es 改为 #!/usr/bin/python2.7 -Es端口# 查看端口情况netstat -tunlpnetstat -tunlp | grep 端口号# netstat -ntulp | grep 80 //查看所有80端口使用情况·进程# 查看端口情况ps -auxps -ef# 查看特定进程ps pid监控类 IO,CPU,内存,磁盘############## 查看总体情况 ##########tophtop# top 命令动态查看一个进程的内存使用,设置为delay 1s,默认是delay 3stop -d 1 -p pid [,pid ...]# pmap 命令静态查看一个进程的内存使用# pmap命令可以显示一个或多个进程所使用的内存数量。你可以使用这个工具来了解服务器上的某个进程分配了多少内存,并以此来判断这是否是导致内存瓶颈的原因。要得到更加详细的信息,使用pmap -d选项。pmap pid################# 磁盘IO #################iostat -xd################# 网络IO #################iftop -nifstatdstat -nt################# 磁盘容量 #################df -h################# 内存 #################free -m文件解压和压缩##################################################################################################### 压缩 ###################################################################################################### tar 是一个用于创建和处理归档文件的工具,通常与 gzip 或 bzip2 配合使用。# 创建 .tar.gz 文件# 压缩单个文件tar -zcvf archive.tar.gz /path/to/file# 压缩文件夹tar -zcvf archive.tar.gz /path/to/directoryc:创建新的归档文件。z:使用 gzip 压缩。v:显示处理过程中的文件。f:指定归档文件的名称。# 创建 .tar.bz2 文件:tar -cjvf archive.tar.bz2 /path/to/directoryj:使用 bzip2 压缩。##################################################################################################### 解压 ###################################################################################################### 解压 .tar.gz 文件tar -zxvf archive.tar.gz# 解压 .tar.bz2 文件tar -xjvf archive.tar.bz2############################################################################################# gzip 和 gunzip ################################################################################################### 压缩文件gzip filename# 解压文件gunzip filename.gzgzip -d filename.gz磁盘设置# 查看磁盘总体情况df -h# 查看文件夹的空间占用情况du -sh *du -sh /path# 排序du -ah /path/to/directory | sort -rh# 查看磁盘挂载情况lsblklsblk -ffdisk -l# 普通卸载, 卸载/home/data对应挂载的磁盘umount /home/data# 强制卸载umount -l /home/data# 假设你已经在云服务提供商(如 AWS、Azure 等)控制台中增加了 /dev/sdb 磁盘的大小,现在你需要在系统中进行分区和文件系统的调整# 分区磁盘 使用 fdisk 或 parted 工具来删除并重新创建分区# 警告:使用这些工具时要非常小心,因为错误的操作可能会导致数据丢失# https://www.ywbj.cc/?p=712# https://blog.csdn.net/qq_39766779/article/details/140787071# 检查物理卷(PV)使用情况fdisk m 获取帮助信息 n 创建新分区 选择分区类型p是主分区,e是扩展分区 指定分区号(如果这是第一个分区,通常是 1) 指定起始和结束的扇区或者以 +SIZEM 或 +SIZEG 指定分区大小(例如,+500M 表示500MB的分区) 输入 w 写入更改并退出# 1.启动 fdisk 工具sudo fdisk /dev/nvme0n1# 3. 使用 growpart 扩展分区sudo growpart /dev/xvda 1# 4. 分区调整后,扩展文件系统以使用新的磁盘空间# 扩展 ext4 文件系统 # 检查和修复文件系统(可选) sudo e2fsck -f /dev/xvda1# 扩展文件系统 sudo resize2fs /dev/xvda1##################################################################################### 不同的文件系统有不同的扩展命令 ################# 对于 ext4, ext3, 或 ext2 文件系统,使用 resize2fs 命令sudo resize2fs /dev/xvda1# 对于 XFS 文件系统,使用 xfs_growfs 命令。需要注意的是,XFS 文件系统必须挂载才能扩展。sudo xfs_growfs /mount/point# 对于 Btrfs 文件系统,使用 btrfs filesystem resize 命令sudo btrfs filesystem resize max /mount/point网络相关# 配置固定ip### 在 CentOS 或 RHEL 系统中,网络接口配置通常存储在 /etc/sysconfig/network-scripts/ifcfg-<interface> 文件中### 如果 ens160 是你的网络接口名称,配置该接口的文件路径为 /etc/sysconfig/network-scripts/ifcfg-ens160。# 编辑配置文件 sudo vi /etc/sysconfig/network-scripts/ifcfg-ens160# 内容 TYPE=Ethernet BOOTPROTO=static NAME=ens160 DEVICE=ens160 ONBOOT=yes IPADDR=192.168.179.137 NETMASK=255.255.255.0 GATEWAY=192.168.179.1 DNS1=8.8.8.8 DNS2=8.8.4.4 配置项说明: TYPE: 网络接口的类型。Ethernet 表示这是一个有线网络接口。 BOOTPROTO: 设置为 static 表示使用静态 IP 地址配置。如果你使用 DHCP,应该设置为 dhcp。 NAME: 网络接口的名称(ens160)。 DEVICE: 网络接口的设备名称(ens160)。 ONBOOT: 是否在系统启动时启用此接口。设置为 yes 表示启动时启用该接口。 IPADDR: 配置的静态 IP 地址(例如 192.168.179.137)。 NETMASK: 子网掩码(通常是 255.255.255.0,如果是 /24 子网)。 GATEWAY: 默认网关的 IP 地址(例如 192.168.179.1)。 DNS1 和 DNS2: 配置 DNS 服务器地址(例如 Google 的公开 DNS 地址 8.8.8.8 和 8.8.4.4,你也可以使用其他 DNS 服务)。# 重启网络服务sudo systemctl restart networksudo systemctl restart NetworkManager# 验证网络配置ip addr show ens160软件安装rpm、yum和apt是与Linux软件包管理系统相关的工具,它们在不同的Linux发行版中执行类似的功能,但有一些关键的区别。rpm(Red Hat Package Manager): rpm 是 Red Hat 及其衍生发行版(如CentOS、Fedora等)使用的软件包管理工具。 主要功能: rpm 主要用于安装、升级、卸载和查询软件包。它管理的是单个软件包,而不涉及软件包之间的依赖关系。yum: yum(Yellowdog Updater, Modified)是基于rpm的包管理工具,用于简化rpm的使用,并解决软件包之间的依赖关系。 主要功能: yum可以自动解决依赖关系,通过从指定的软件仓库中下载并安装软件包。它可以处理依赖关系、升级和卸载软件包,并且可以在本地缓存软件包以提高效率。apt(Advanced Package Tool): apt 是用于 Debian 及其衍生发行版(如Ubuntu)的软件包管理工具。 主要功能: apt 提供了一组高级工具,用于管理 Debian 系统中的软件包。apt会自动解决依赖关系,通过从指定的软件仓库中下载并安装软件包,类似于yum的功能。apt也可以升级系统中的所有软件包。支持发行版: rpm 主要用于 Red Hat 及其衍生发行版。 yum 是在rpm基础上的扩展,专门为 Red Hat 系统设计。 apt 主要用于 Debian 及其衍生发行版。依赖解决: rpm 本身不解决依赖关系,而用户通常需要手动解决依赖问题。 yum 和 apt 都具备自动解决依赖关系的能力,使得安装和升级软件包更为方便。软件仓库: rpm 操作的是本地的软件包文件,而不是通过软件仓库进行管理。 yum 和 apt 使用软件仓库,通过在线仓库管理软件包的安装、升级和卸载。 总体而言,这些工具为Linux系统提供了便捷的软件包管理方式,其中yum和apt更加高级和用户友好,尤其是在处理依赖关系方面。包管理# Ubuntu/Debian 系统 sudo apt update# CentOS/RHEL 系统 sudo yum install epel-release 安装方式# 1.tar 解压安装 -安装包格式 : tar , tar.gz , tar.bz -安装软件包 : tar -zxvf [包名]# 2.rpm 直接安装 -安装包格式 :rpm -安装软件包 :rpm -ivh 软件包路径 -卸载软件包 :rpm -e 软件包全名# 3. yum 在线安装 -安装软件包 : yum -y install subversion -卸载软件包 : yum -y remove subversion安装示例安装JDK# 更新软件包sudo yum update# 安装sudo yum install java-1.8.0-openjdk# sudo yum install java-1.8.0-openjdk-devel# sudo yum install java-17-openjdk-develjava -version安装 Nginxsudo yum updatesudo yum install nginxsudo systemctl start nginx安装 Apache-Tomcat 下载地址: archive.apache.org 步骤: 1.下载tomcat 2.解压安装包 -tar -zxvf tomcat7.0.tar.gz -C /usr/build 【c 大写 ,后面加解压的路径 】 3.ok 4.启动在bin目录下 -sh startup.sh 5.开启端口号 - 先关闭防火墙 - 查看ip - 这时候就可以通过其他主机,通过访问ip地址和端口 就可以访问。 Swap分区使用# 1. 新建 swap 分区sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048sudo dd if=/dev/zero of=/var/swapfile bs=1G count=8sudo fallocate -l 8G /var/swapfile# 2. 授权文件sudo chmod 600 /var/swapfile# 3. 通过mkswap命令将上面新建出的文件做成swap分区sudo mkswap /var/swapfile# 4. 开启 swapsudo swapon /var/swapfile## 关闭 swap sudo swapoff /var/swapfile ## 注:若想永久修改,则编辑/etc/sysctl.conf文件 echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab# 5. 查看分区swapon -sswapon --show######## 设置swappiness值:swappiness是一个Linux内核参数,它控制系统在内存不足时,# 倾向于使用swap而不是杀死进程。你可以使用sysctl命令调整swappiness值。# 例如,将swappiness值设置为60sudo sysctl vm.swappiness=60# 释放服务器缓存sync && echo 3 > /proc/sys/vm/drop_caches# 或者sudo sysctl -w vm.drop_caches=3## 支持docker# 编辑 grub 配置: 打开 /etc/default/grub 文件# Linux buff/cache 过高吃掉物理内存drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 3:释放所有缓存 echo 3 > /proc/sys/vm/drop_caches,即可清空buff/cache,目前此设备内存已恢复正常致谢希望这篇文章对您有所帮助!如果有任何问题,欢迎交流讨论。更多内容欢迎关注 [ 小巫编程室 ] 公众号。也希望您能点赞和转发支持,您的喜欢与支持是小编最大的鼓励,小巫编程室感谢您的关注与支持。🎉🎉🎉🚀🚀🚀
2025年06月23日
0 阅读
0 评论
0 点赞
2025-06-23
linux目录结构及基本命令学习
一、linux核心目录/etc/ 系统服务配置文件的目录/home/ 普通用户的家目录/root/ 超级管理员用户家目录/dev/ 设备文件目录,硬盘,光盘...(注:所有的设备不挂载无法使用)/tmp/ 临时目录,临时存放文件的位置,垃圾堆/proc/ 存放的是内存中信息,进程,服务信息,内核信息/bin =/usr/bin 二进制文件命令,以及普通用户命令/sbin =/usr/sbin 超级管理员的命令/boot 与linux系统启动与引导相关的文件存放处,存放引导系统启动程序,系统内核镜像/lib 和 /lib64 库文件(library)服务软件以来的目录,.so 软件运行需要的环境/lost+found 系统岩机临时保存数据位置/mnt 临时的挂载磁盘的入口/opt 第三方软件的安装位置/sys 存放的是内存中信息,进程,服务信息/usr 存放用户安装软件/var 经常变换的数据,服务日志存放的位置二、路径表示形式·绝对路径:从根开始的路径是绝对路径列:/etc/hostname、/etc/sysconfig/network-scripts/ifcfg-eth0·相对路径:不是从根开始的路径就是相对路径列:etc/hostname,./ifcf-eth0 三、linux核心必会命令命令:cd 、pwd/表示根目录./当前所在目录.当前目录..上级目录~当前默认工作目录#cd ~ 回到家目录 相当于cd /root#cd 回到家#cd .. 返回上级目录 #cd - 返回上次所在目录 #cd . 进入当前目录#cd ../.. 返回上两级目录#cd !$ 把上一个命令参数作为cd参数使用#pwd 显示当先所在位置mkdir 命令mkdir 创建目录参数说明-p 或--parents允许同时创建多级目录-v 或--verbose显示创建目录时的信息-m 或 --mode创建目录时并设定权限练习:[root@xiaoyu /]# mkdir xiaoyu 创建目录[root@xiaoyu /]# mkdir xiaoyu01 xiaoyu02 xiaoyu03 创建多个目录[root@xiaoyu /]# mkdir /mnt/01/02/03 -p 创建多级目录[root@xiaoyu 03]# mkdir -m 755 mulu 创建目并指定权限录[root@xiaoyu 03]# mkdir -v newdir 创建目录显示信息mkdir: created directory ‘newdir’touch命令touch选项说明-a修改文件的存取时间atime-c仅修改文件时间,若文件不存在则不穿件新文件,与-no-create效果一样-d后面可以接想要修订的日期而不用当前的日期,也可以使用--date=“日期或时间”-m改变档案的修改时间mtime-r使用参考文件的时间作为指定文件的时间,与file效果一样-l设定时间而不用目前的时间,格式为【YYYMMMDDhhmm】练习:修改文件存取时间#touch -a file.txt (这个文件可存在或者不存在)#stat file.txt 验证ls命令ls选项说明-l以常格式显示详细信息,比如文件时间,大小,所有者-ttime按照时间修改排序-r逆序排序,一般和rt使用-h以可续大小显示-a显示隐藏文件mv move移动命令用法:mv 文件(从哪里来) 文件(到哪里去)cp copy 复制文件或目录命令cp 选项说明-a理解所有复制-r递归复制目录及目录内容-p复制的时候保持属性不变(ctim额,atime ,mtime等等)-d可以复制软件rm remove 移除,删除文件或目录rm选项说明-f强制删除不提-r递归删除,删除目录及目录内容,没有需要不要加上-recho输出信息到屏幕>重定向符号,先清空文件内容,然后再写入#echo 123456 >1.txt >>叫做追加重定向,把信息写入到末尾#echo 123456>>1.1xtcat 显示文件内容cat选项说明-n显示文件内容及行号Linux环境初步优化检查虚拟机是否能联网ping baidu.com配置网络yum源#cp/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 备份yum源下载#curl -o /etc/yum.repo.d/Centos-Base.repohttps://mirrors.aliyun.com/repo/Centos-7.repo#curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo安装常用工具yum install -y tree vim wget bashcompletion bash-completion-extras lrzsz nettools sysstat iotop iftop htop unzip nc nmap telnet bc psmisc httpd-tools bind-utils nethogs expect查看安装提示:Complete测试有没有安装成功:运行相关命令vi 和vim编辑器的使用:内容区别vi系统自带,不需要额外安装,没有vim功能多vim最小化安装版本中默认没有,需要额外安装,vi的升级版本,未来基本都用vim注:vim文件不存在可以直接打开并创建。如果是目录则vim不了vi和vim的使用编辑模式下操作:i进入编辑模式esc退出编辑模式wq保存+退出q!强制退出命令模式下操作:G定位到最后一行gg定位到行首100gg 定位到100行^光标定位到行首$光标定位到行尾kjhl上下左右yy复制当前行dd删除当前行p粘贴到当前行后 3p重复粘贴其他快捷键:u撤销:set nu 或 set number 显示行号: set nonu取消显示行号::/搜索你想要的内容n继续向下搜索N继续向上搜索批量操作:批量删除ctrl +v 进入批量操作模式,选择要操作的区域,然后按d ,删除批量编辑ctrl+v进入批量操作模式,选择要操作的区域,按I(shift+i) ,进入编辑模式,写入内容,按escvim 常用 的快捷键:G定位到最后一行gg定位到第一行100gg定位到100行yy复制当前行dd删除当前行p粘贴u(nonu)撤销:setnu 或:set number显示行号:set nonu取消显示行号:/搜索想要的内容vim 故障案列解决:故障现象:vim 编辑文件的时候,异常退出了这个文件报错如下:解决:比如编辑这个文件vim -r oldboy.txt直接删除对应文件的.swp文件:#rm -f .old.txt.swp目录结构的深入-文件-了解/etc/文件说明企业应用/etc/hostname主机名配置文件每台主机需要命名一个主机名来区别功能用途/etc/hosts主机名和ip的对应关机网站中做访问使用/etc/sysconfig/network-scripts/ifcfg-eth0网卡配置文件配置想要的ip/etc/rc.local开机自启动的文件需要开机的时候自动运行的命令、服务放在这个文件/etc/fstab开机自动挂载的文件磁盘分区后自定义挂载/etc/motd文件中的内容会在用户登录系统后显示出来登陆后自定义显示:我佛保佑,永不岩机/etc/issue/etc/issue.net文件中的内容会在用户登录前显示出来这个文件应该是清空的修改主机名:#hostname 临时修改(重启后会失效) #hostnamectl set-hostname xiaoyu001#cat /etc/hostname配置网卡:网卡配置文件内容解释:TYPE=Ethernet //网络类型:Ethernet以太网BOOTPROTO=none //引导协议:自动获取、static静态、none不指定DEFROUTE=yes //启动默认路由IPV4_FAILURE_FATAL=no //不启用IPV4错误检测功能IPV6INIT=yes //启用IPV6协议IPV6_AUTOCONF=yes //自动配置IPV6地址IPV6_DEFROUTE=yes //启用IPV6默认路由IPV6_FAILURE_FATAL=no //不启用IPV6错误检测功能NAME=eno16777736 // 网卡设备的别名UUID=90528772-9967-46da-b401-f82b64b4acbc //网卡设备的UUID唯一标识号DEVICE=eno16777736 // 网卡的设备名称ONBOOT=yes //开机自动激活网卡DNS1=6.6.6.6 //DNS域名解析服务器的IP地址IPADDR=192.168.1.199 //网卡的IP地址PREFIX=24 //子网掩码GATEWAY=192.168.1.1 //默认网关IP地址IPV6_PEERDNS=yesIPV6_PEERROUTES=yesIPADDR=192.168.2.2 #你想要设置的固定IP,理论上192.168.2.2-255之间都可以,请自行验证;NETMASK=255.255.255.0 #子网掩码,不需要修改;GATEWAY=192.168.2.1 #网关,这里是你在“配置虚拟机的NAT模式具体地址参数”中的重启网络服务 systemctl restart network 或service network restart /var/目录/var/log/ 系统及服务各种存放的目录/var/log/secure 存放用户登录情况日志,分析是否有恶意破解情况。/var/log/messages 通用各种服务日志 主要分析服务,系统异常。/proc/目录/proc/cpuinfo cpu信息 /proc/meminfo 内存信息/proc/loadavg 系统负载信息/proc/mounts 系统挂载信息
2025年06月23日
2 阅读
0 评论
0 点赞
2025-06-23
20个高效Linux一键巡检脚本 运维工程师的自动化利器!
在大型服务器集群管理中,自动化巡检脚本已成为运维工程师的核心工具。据2024年运维报告显示,使用自动化巡检的系统故障恢复时间平均缩短78%。本文将分享20个经过生产环境验证的复杂巡检脚本,涵盖性能、安全、容器、网络等核心场景。一、基础资源巡检类1. 全维度资源概览脚本#!/bin/bash# 文件名:full_system_check.shLOG="/var/log/full_system_$(date +%F).log"echo"===== 系统基础信息 =====" > $LOGecho"主机名: $(hostname)" >> $LOGecho"OS版本: $(grep PRETTY_NAME /etc/os-release | cut -d\" -f2)" >> $LOGecho"内核版本: $(uname -r)" >> $LOGecho"启动时间: $(uptime -s)" >> $LOGecho -e "\n===== CPU使用率TOP5 =====" >> $LOGps -eo pid,user,%cpu,cmd --sort=-%cpu | head -6 >> $LOGecho -e "\n===== 内存消耗TOP5 =====" >> $LOGps -eo pid,user,%mem,cmd --sort=-%mem | head -6 >> $LOGecho -e "\n===== 磁盘空间告警检测 =====" >> $LOGdf -h | awk '$5 > 80 {print $6 " 使用率: " $5}' >> $LOG用法:chmod +x full_system_check.sh && ./full_system_check.sh输出:生成/var/log下的日志文件,包含关键资源阈值检测2. 动态资源实时监控脚本#!/bin/bash# 文件名:realtime_monitor.shecho"监控开始,按Ctrl+C退出"while :do clearecho"$(date +%T) 实时监控"echo"-----------------------------------"echo"** CPU负载 **" top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print "空闲率: " 100-$1 "%"}'echo -e "\n** 内存压力 **" free -m | awk 'NR==2{printf "已用/总量: %sMB/%sMB (%.2f%%)\n", $3,$2,$3*100/$2}'echo -e "\n** 磁盘IO **" iostat -dx 2 3 | awk '/sd[a-z]/ {print $1 " 平均等待: " $10 "ms 利用率: " $14 "%"}' | tail -n3sleep 5done用法:直接执行,动态刷新系统核心指标二、安全审计类3. 安全合规基线检查#!/bin/bash# 文件名:security_audit.shREPORT="security_audit_$(date +%s).txt"echo"===== 用户安全检测 =====" > $REPORT# 空密码检测awk -F: '$2 == "" {print "空密码账户: " $1}' /etc/shadow >> $REPORT# 超管账户检测awk -F: '$3 == 0 && $1 != "root" {print "异常超管账户: " $1}' /etc/passwd >> $REPORTecho -e "\n===== SSH安全检测 =====" >> $REPORTgrep "PermitRootLogin yes" /etc/ssh/sshd_config && echo"SSH允许root登录: 高风险!" >> $REPORTecho -e "\n===== 防火墙状态 =====" >> $REPORTsystemctl is-active firewalld | grep -q active && firewall-cmd --list-all >> $REPORT || echo"防火墙未运行!" >> $REPORTecho -e "\n===== 关键文件权限 =====" >> $REPORTls -l /etc/passwd /etc/shadow | awk '$1 !~ "-rw-r--r--" {print $9 " 权限异常: " $1}' >> $REPORT用法:需root权限执行,输出当前安全风险项4. 可疑进程扫描脚本#!/bin/bash# 文件名:suspicious_process_scan.sh# 检测隐藏进程echo"隐藏进程检测:"ps -ef | awk 'NR>1 {print $2}' | sort -n | diff <(ls /proc | grep '^[0-9]' | sort -n) - | grep '>' | awk '{print "可疑PID: "$2}'# 检测挖矿进程echo -e "\n挖矿特征检测:"ps aux | awk '{ if ($3 > 50.0 || $4 > 30.0) print "高资源进程: " $11 " (CPU: "$3"%, MEM:"$4"%)" if (match($0, /(xmrig|minerd|cpuminer)/)) print "挖矿进程: " $11 " PID: " $2}'用法:定期执行排查入侵痕迹三、容器化环境专用5. Docker容器健康扫描#!/bin/bash# 文件名:docker_health_check.shecho"===== 容器状态概览 ====="docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"echo -e "\n===== 异常容器检测 ====="docker ps -a | grep -v Up | grep -v "Exited (0)" | awk 'NR>1 {print $1 " 状态异常: " $5}'echo -e "\n===== 资源消耗TOP5 ====="docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -k2 -hr | head -6用法:需安装Docker,实时输出容器健康状态6. Kubernetes节点巡检#!/bin/bash# 文件名:k8s_node_check.shNODE=$(kubectl get nodes -o name | head -1)echo"===== 节点资源 ====="kubectl describe $NODE | grep -A5 Capacityecho -e "\n===== 异常Pod检测 ====="kubectl get pods -A | grep -v Running | grep -v Completedecho -e "\n===== 服务端口检测 ====="netstat -tuln | grep -E ":(80|443|6443)"用法:需配置kubectl权限,检查K8s节点状态四、存储与网络专项7. LVM存储健康检查#!/bin/bash# 文件名:lvm_health_check.shecho"===== VG空间使用率 ====="vgs --units g -o vg_name,vg_size,vg_free | awk 'NR>1 {printf "%s 可用空间: %.1fG\n", $1, $3}'echo -e "\n===== 物理卷错误检测 ====="pvs | grep -v 'Attributes' | awk '$2 != "lvm2" {print $1 " 状态异常: " $2}'echo -e "\n===== 精简池容量告警 ====="lvs -o lv_name,data_percent,metadata_percent --separator="|" | grep thinpool | awk -F\| '$2 > 80 || $3 > 80 {print $1 " 使用率超过80%!"}'用法:检测LVM卷组、精简池风险8. 网络连通性矩阵测试#!/bin/bash# 文件名:network_matrix_test.shTARGETS=("google.com 80""内部数据库IP 3306""存储节点IP 22")TIMEOUT=2for target in"${TARGETS[@]}"; do host=${target% *} port=${target#* } (timeout$TIMEOUT bash -c ">/dev/tcp/$host/$port") &>/dev/null result=$? [ $result -eq 0 ] && status="成功" || status="失败"echo"连通性: $status -> $host:$port"doneecho -e "\n路由跟踪检测:"mtr -n -c 3 --report google.com用法:自定义TARGETS数组检测关键路径五、日志与审计类9. 日志关键错误提取#!/bin/bash# 文件名:critical_log_scan.shLOG_DIRS=("/var/log""/opt/app/logs")ERROR_KEYWORDS=("error""fatal""exception""timeout")fordirin"${LOG_DIRS[@]}"; do find $dir -type f -mtime -1 | whileread logfile; do for keyword in"${ERROR_KEYWORDS[@]}"; do grep -i "$keyword""$logfile" | awk -v file="$logfile"'{print file ": " $0}' donedonedone用法:扫描24小时内含关键错误的日志行10. 用户操作审计报告#!/bin/bash# 文件名:user_audit_report.shUSERS=("root""admin")DAYS=7for user in"${USERS[@]}"; do echo"===== $user 最近${DAYS}天操作 =====" last | grep "$user" | head -10 echo -e "\n** 命令历史摘要 **" grep -H "$user" /home/*/.bash_history | awk -F: '{print $1}' | sort | uniq -c | sort -nrdone用法:监控特权账户操作行为六、高级诊断工具11. 性能瓶颈定位脚本#!/bin/bash# 文件名:performance_bottleneck.shecho"===== 系统负载 ====="uptimeecho -e "\n===== 上下文切换分析 ====="vmstat 2 5 | awk 'NR>=3 {print "上下文切换: " $12 " | 中断: " $11}'echo -e "\n===== 块设备延迟 ====="iostat -xmd 2 3 | awk '/sd[a-z]/ {if ($10 > 50) print $1 " 平均等待: " $10 "ms → 磁盘过载!"}'echo -e "\n===== TCP重传检测 ====="netstat -s | grep -E 'segments retransmited|packet receive errors'用法:定位CPU/IO/网络层瓶颈12. 内存泄漏追踪脚本#!/bin/bash# 文件名:memory_leak_hunter.shPID=$1# 传入进程PIDif [ -z "$PID" ]; thenecho"用法: $0 <进程PID>"exit 1fiecho"监控进程: $(ps -p $PID -o comm=)"echo"采样间隔10秒,持续5次"for i in {1..5}; do rss=$(ps -p $PID -o rss=)echo"$(date +%T) RSS内存: ${rss}KB" pmap $PID | tail -1 | awk '/total/ {print "地址空间: " $2}'sleep 10done用法:./memory_leak_hunter.sh 1234 监控指定进程七、自动化巡检框架13. 多节点批量巡检框架#!/bin/bash# 文件名:multi_node_check.shNODES=("node1""192.168.1.101""app-server")SCRIPT_PATH="/opt/scripts/full_system_check.sh"for node in"${NODES[@]}"; doecho"===== 巡检 $node =====" ssh "$node""bash -s" < $SCRIPT_PATH scp "$node:/var/log/full_system_*.log" ./logs/echo"报告已保存到 ./logs/"done用法:提前配置SSH免密登录,批量执行基础巡检14. 带告警的定时巡检#!/bin/bash# 文件名:scheduled_check_with_alert.shALERT_EMAIL="admin@example.com"LOG="/var/log/scheduled_check.log"# 执行检查项df -h | awk '$5 > 90' > $LOGfree -m | awk 'NR==2 && $3*100/$2 > 90' >> $LOG# 触发告警if [ -s $LOG ]; then mail -s "服务器资源告警 $(hostname)"$ALERT_EMAIL < $LOGecho"$(date) 告警已发送" >> $LOGfi用法:配置cron定时运行,超阈值自动发邮件八、专项场景检测15. Web服务可用性检测#!/bin/bash# 文件名:web_service_check.shURLS=("https://example.com""http://api.example.com/health")TIMEOUT=10for url in"${URLS[@]}"; do status=$(curl -o /dev/null -s -w "%{http_code}" --connect-timeout $TIMEOUT$url)if [ "$status" -ne 200 ]; then echo"服务异常: $url 状态码: $status" # 自动重启示例 systemctl restart nginxfidone用法:监控Web服务状态,异常自动恢复16. 数据库连接池检测#!/bin/bash# 文件名:db_connection_check.shDB_HOST="192.168.1.100"DB_PORT=3306MAX_CONN=200current_conn=$(mysql -u monitor -p"密码" -h $DB_HOST -e "SHOW STATUS LIKE 'Threads_connected'" | awk 'NR==2 {print $2}')echo"当前连接数: $current_conn"if [ "$current_conn" -ge $MAX_CONN ]; thenecho"警告!连接数超过阈值 $MAX_CONN"# 自动扩展连接池 ansible-playbook scale_db_pool.ymlfi用法:MySQL连接池监控与自动扩容九、安全加固类17. 漏洞扫描自动化#!/bin/bash# 文件名:vulnerability_scan.shecho"===== 内核漏洞检测 ====="rpm -q --changelog kernel | grep CVEecho -e "\n===== SSL协议检测 ====="openssl s_client -connect example.com:443 < /dev/null 2>&1 | grep "Protocol"echo -e "\n===== 提权漏洞扫描 ====="find / -perm -4000 -type f 2>/dev/null | xargs ls -l | awk '$3=="root" {print $9}'用法:快速检测常见安全漏洞18. 文件完整性校验#!/bin/bash# 文件名:file_integrity_check.shBASE_DIR="/etc"CHECKSUM_FILE="/opt/security/.etc_checksums"# 生成新校验和find $BASE_DIR -type f -execsha256sum {} + > /tmp/new_checksums# 对比差异if [ -f "$CHECKSUM_FILE" ]; then diff $CHECKSUM_FILE /tmp/new_checksums | grep '^>' | awk '{print "文件被修改: " $3}'fi# 更新基准mv /tmp/new_checksums $CHECKSUM_FILE用法:监控/etc目录文件篡改十、容器专项19. Docker漏洞扫描#!/bin/bash# 文件名:docker_vuln_scan.shecho"===== 基础镜像漏洞扫描 ====="for image in $(docker images -q); doecho"扫描镜像: $(docker inspect $image | grep RepoTag)" docker scout cves $imagedoneecho -e "\n===== 容器特权模式检测 ====="docker ps --format "{{.Names}}" | whileread ctr; do docker inspect $ctr | grep -q "Privileged.*true" && echo"$ctr 运行在特权模式!"done用法:检测镜像漏洞和危险配置20. Kubernetes资源合规检查#!/bin/bash# 文件名:k8s_compliance_check.shecho"===== 未设资源限制的Pod ====="kubectl get pods -A -o json | jq -r '.items[] | select(.spec.containers[].resources.limits == null) | .metadata.namespace + "/" + .metadata.name'echo -e "\n===== 特权容器检测 ====="kubectl get pods -A -o json | jq -r '.items[] | select(.spec.containers[].securityContext.privileged == true) | .metadata.namespace + "/" + .metadata.name'echo -e "\n===== ConfigMap敏感数据检测 ====="kubectl get configmaps -A -o json | jq -r '.items[] | select(.data != null) | .metadata.namespace + "/" + .metadata.name + ": " + (.data | keys[] | select(. | test("pass|secret|key")))'用法:需安装jq,检查K8s资源合规性脚本使用高级技巧1. 定时任务配置# 每天凌晨2点执行全量巡检0 2 * * * /opt/scripts/full_system_check.sh# 每5分钟检查服务状态*/5 * * * * /opt/scripts/web_service_check.sh2. 结果可视化方案# 生成HTML报告full_system_check.sh | ansi2html > report.html# 使用ELK集中分析curl -XPOST 'http://elk:9200/server/logs' -d @system_check.json3. 企业级巡检架构 +----------------+ +-----------------+ +---------------+ | 节点执行脚本 | --> | 报告汇总服务器 | --> | 告警平台 | +----------------+ +-----------------+ +---------------+ ^ | | v [cron定时触发] [Grafana可视化面板]最后总结:20大脚本适用场景速查脚本类型推荐脚本编号核心功能巡检频率基础资源监控1, 2CPU/内存/磁盘实时监控5分钟~1小时安全审计3, 17, 18合规检查/漏洞扫描每日容器环境5, 6, 19, 20容器/K8s健康检查15分钟存储专项7LVM/磁盘性能分析每日网络诊断8, 15连通性/服务可用性1~5分钟日志分析9, 10错误提取/操作审计每小时高级诊断11, 12性能瓶颈/内存泄漏按需自动化框架13, 14批量巡检/告警集成定时任务最佳实践:生产环境推荐采用“基础监控脚本(1/2)+安全脚本(3)+服务脚本(15)”组合,每日全量执行+关键指标实时监控。 以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章,我们,下次再见。
2025年06月23日
0 阅读
0 评论
0 点赞
1
2
3
4