首页
Linux常用
docker常用
关于
Search
1
docker安装MDCX
244 阅读
2
麒麟KylinV10离线下载安装包及安装
173 阅读
3
iStoreOS上使用WireGuard
135 阅读
4
UNRAID增加和缩小虚拟机虚拟磁盘大小
52 阅读
5
麒麟v10系统openssh升级OpenSSH_10.0p2-OpenSSL 3.4.2
50 阅读
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
登录
Search
标签搜索
nginx
unraid
PVE
数据库
dockerfile
同步
wow服务器
装机硬件
宏
v2ray
直通
电视盒子
相册
黑裙7.0.1
远程穿透
定时
ssh
emby
symlink
软链接
奥黛丽·逐爱者
累计撰写
116
篇文章
累计收到
21
条评论
首页
栏目
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
页面
Linux常用
docker常用
关于
搜索到
116
篇与
奥黛丽·逐爱者
的结果
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日
29 阅读
0 评论
0 点赞
2025-06-21
docker手册
docker手册安装# 移除旧版本dockersudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine# 配置docker yum源。sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装 最新 dockersudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 启动& 开机启动docker; enable + start 二合一systemctl enable docker --now# 配置加速sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": [ "https://do.nark.eu.org", "https://dc.j8.work", "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn" ]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker常见命令#查看运行中的容器docker ps#查看所有容器docker ps -a#获取所有容器id:docker ps -aq#搜索镜像docker search nginx#下载镜像docker pull nginx#下载指定版本镜像docker pull nginx:1.26.0#查看所有镜像docker images#删除指定id的镜像docker rmi e784f4560448#运行一个新容器docker run nginx#停止容器docker stop keen_blackwell#启动容器docker start 592#重启容器docker restart 592#查看容器资源占用情况docker stats 592#查看容器日志docker logs 592#删除指定容器docker rm 592#强制删除指定容器docker rm -f 592# 后台启动容器docker run -d --name mynginx nginx# 后台启动并暴露端口docker run -d --name mynginx -p 80:80 nginx# 进入容器内部docker exec -it mynginx /bin/bash# 查看容器详情docker container inspect mynginxdocker inspect mynginx# 提交容器变化打成一个新的镜像docker commit -m "update index.html" mynginx mynginx:v1.0# 保存镜像为指定文件docker save -o mynginx.tar mynginx:v1.0# 删除多个镜像docker rmi bde7d154a67f 94543a6c1aef e784f4560448# 加载镜像docker load -i mynginx.tar # 登录 docker hubdocker login# 重新给镜像打标签docker tag mynginx:v1.0 leifengyang/mynginx:v1.0# 推送镜像docker push leifengyang/mynginx:v1.0存储两种方式,注意区分:● 目录挂载: -v /app/nghtml:/usr/share/nginx/html● 卷映射:-v ngconf:/etc/nginx---------------------------------1、卷映射:-v 卷:容器内目录2、卷在外部主机默认存放位置:/var/lib/docker/volumes/卷名3、列出所有的卷操作docker volume ls4、创建一个卷docker volume create 卷名5、查看某个卷的详情docker volume inspect 卷名网络docker network --help# 创建自定义网络,实现主机名作为稳定域名访问。# 自定义网络docker network create mynet# docker为每个容器分配唯一IP,使用容器ip+容器端口可以互相访问# 运行镜像并且添加为自定义网络docker run -d -p 88:80 --name app01 --network mynet nginxDockerfile 自定义镜像指令作用FROM指定镜像基础环境RUN运行自定义命令CMD容器启动命令或参数LABEL自定义标签EXPOSE指定暴露端口ENV环境变量ADD添加文件到镜像COPY复制文件到镜像ENTRYPOINT容器固定启动命令VOLUME数据卷USER指定用户和用户组WORKDIR指定默认工作目录ARG指定构建参数构建命令docker build -f Dockerfile -t mynginx:v1.0 .
2025年06月21日
1 阅读
0 评论
0 点赞
2025-06-21
如何使用 Rsync 将一台主 Web 服务器上的文件和目录同步到另一台备份服务器
在管理 Web 服务器时,确保数据安全且在发生故障时能够快速恢复至关重要,备份和镜像 Web 服务器数据最可靠的方法之一是使用 rsync。Rsync 工具可以帮助在两台服务器之间同步文件和目录,非常适合用于创建 Web 服务器数据的备份和镜像。下面将详细介绍使用 rsync 将 Web 服务器与备份服务器进行同步。同时介绍设置无密码登录,通过 cron 定时任务实现自动化的同步过程。1.环境说明现在有两台服务器,一台为主 WEB 服务器,另一台为备份服器,其关键信息如下表所示:服务器类型IP 地址主机名主 Web 服务器192.168.250.100web.test.com备份服务器192.168.250.200backup.test.com其拓扑图如下:注:两台服务器之间应启用 SSH 访问,这将用于通过 SSH 密钥设置无密码登录,从而实现顺畅的自动化操作。2.设置无密码 SSH 登录为了通过 cron 自动化同步过程,需要从主 Web 服务器(主服务器)到备份服务器设置无密码 SSH 登录,这将允许 rsync 在每次运行时无需输入密码。登录到主 Web 服务器(web.test.com),生成 SSH 密钥,并确保接受默认的文件位置且不设置密钥密码。ssh-keygen -t rsa -b 2048接下来,使用 ssh-copy-id 命令将公钥复制到备份服务器:ssh-copy-id admin@192.168.250.200最后,通过从主 Web 服务器登录到备份服务器来测试连接:ssh admin@192.168.250.200如果无需输入密码即可登录,则表示设置成功。3.使用 Rsync 同步 Web 服务器数据现在我们已经设置了无密码 SSH,可以使用 rsync 将 Web 服务器的数据同步到备份服务器。Web 服务器的数据通常存储在 /var/www/html/ 目录中,我们将使用该目录进行备份和镜像。# 基本的 Rsync 命令用法补充要在主 Web 服务器(web.test.com)上执行一次性备份,请运行以下命令:rsync -avz /var/www/html/ user@host_ip:/path/to/backup/directory上述命令的解释如下:-a 表示“归档模式”,可保留文件的权限、时间戳和其他属性。-v 启用详细输出,以便您可以看到正在传输的文件。-z 启用压缩,以减少数据传输量。1)将文件同步到备份服务器目录将 /path/to/backup/directory 替换为备份服务器(这里假设备份服务器的备份目录在/data/backup/web下)上规划存储备份的实际路径。例如:rsync -avz /var/www/html/ admin@192.168.250.200:/data/backup/web2)镜像 Web 服务器目录如果需要镜像目录(即使备份与源目录完全一致),可以使用 --delete 选项:rsync -avz --delete /var/www/html/ admin@192.168.250.200:/data/backup/web--delete参数会删除备份目录中不再存在于 Web 服务器上的文件,确保两个目录完全一致。4.使用 Cron 自动化备份为了确保定期备份,我们可以使用 cron 定时任务自动运行 rsync 命令,这样备份过程将在指定的时间运行,例如每天午夜。在主 Web 服务器(web.test.com)上,通过运行以下命令打开 crontab 文件:crontab -e要将备份设置为每天00:00运行,请在 crontab 中添加以下行:0 0 * * * rsync -avz --delete /var/www/html/ admin@192.168.250.200:/data/backup/web保存 crontab 文件并退出,这样 cron 任务将每天自动在凌晨 12:00 运行(半夜时分)。也可以根据需要调整时间,比如,要改成每天凌晨 1:00 运行,可以这样修改:0 1 * * * rsync -avz --delete /var/www/html/ admin@192.168.250.200:/data/backup/web5.验证备份设置好 cron任务后,可以通过检查系统日志来验证 cron 任务是否按预期运行:grep CRON /var/log/syslog登录到备份服务器(backup.test.com),检查 /data/backup/web 目录中的文件是否与主 Web 服务器上的 /var/www/html/ 目录中的文件一致。我们还可以通过在主 Web 服务器上删除一个文件,然后验证在下一次 rsync 运行后该文件是否从备份目录中删除,来进行测试。
2025年06月21日
2 阅读
0 评论
0 点赞
2025-06-21
13、Dockerfile-制作镜像
纸上得来终觉浅,绝知此事要躬行,整理不易,如果你觉得对你有帮助,麻烦小小的赞助一波腾讯云服务器链接:https://curl.qcloud.com/qZO3kFyldockerfile允许你创建自己应用程序的镜像,不仅仅只能从应用市场下载下来,构建镜像常用的流程图如下构建镜像常用的命令如下,更详细的需要去docker官网去查看相关的命令https://docs.docker.com/reference/dockerfile/构建命令常见的类似这种:docker build -f Dockerfile -t myapp:v1.0 .后续我会以实战的模式部署一个netcore程序 到时候再详细讲,dockerfile文件一般简单这种写即可docker镜像分层存储机制容器有自己的读写层,所以容器删除了容器自己的读写层就丢了,就没法再读取相关数据,但是镜像有自己的分层不会删除不同容器有自己的读写层,互相隔离 互不影响,docker宗旨能共用则共用,分层存储 各自执行好了小伙伴们,今天先到这里赶快去试试吧,可以看看下面短剧适当放松下,感觉还挺有意思的
2025年06月21日
1 阅读
0 评论
0 点赞
1
...
7
8
9
...
24