首页
提效神器
常用运维脚本汇总
电子书阅读
推荐
电子书阅读
事物管理
Search
1
安装docker时报错container-selinux >= 2:2.74
208 阅读
2
rsync命令介绍(可替代rm删除巨量文件)
168 阅读
3
kubernetes集群各组件安装过程汇总
163 阅读
4
docker 镜像加速器配置,daemon.json文件详解
148 阅读
5
docker search命令提示i/o timeout的解决方案
106 阅读
运维
自动化运维
数据库
容器与k8s
环境
云计算
脚本
ai
登录
/
注册
Search
标签搜索
命令
nginx
zabbix
Mingrui
累计撰写
113
篇文章
累计收到
8
条评论
首页
栏目
运维
自动化运维
数据库
容器与k8s
环境
云计算
脚本
ai
页面
提效神器
常用运维脚本汇总
电子书阅读
推荐
电子书阅读
事物管理
搜索到
88
篇与
的结果
2024-03-09
sed命令高级技巧
写入多条命令sed -i '/UseDNS/{ s/yes/no/ s/#// }' /etc/ssh/sshd_config #效果:将#UseDNS yes 该为:UseDNS no #注:此条命令是关闭ssh的DNS反查,可以加快ssh连接速度。 #或者使用-e参数 sed -ie ' /Use/s/#// s/yes/no/ ' /etc/ssh/sshd_config ls -l | awk '{print"\"" $9" " $10" "$(11)"\""}'| sed -e 's/NSD ADMIN // ' -e 's/[A-Z]/\l&/g'; 关于最后一条命令的解释:-e选项: 在单次运行中执行多个编辑命令。它的作用是 将后续的字符串参数视为独立的 sed 脚本命令,并按顺序依次应用这些命令到输入文本中。s/[A-Z]/1&/g:将所有的大写字母转换为小写删除第一个匹配到的行sed -i '0,/pattern/{/pattern/d;}' filename说明:0,/pattern/:表示从文件开始到第一个匹配 pattern 的行。/pattern/ 是匹配条件。{/pattern/d;}:{} 是一个命令块,对匹配到的行执行其中的命令。/pattern/d 表示删除匹配到的行。示例假设有如下文件test.txt line 1 pattern line 2 pattern line 3 只想删除第一个匹配到 pattern 的行,可以使用: sed '0,/pattern/{/pattern/d;}' test.txt 执行后,文件内容变为: line 1 line 2 pattern line 3多行处理技巧# 将多行合并为一行 sed ':a;N;$!ba;s/\n/ /g' file.txt # 每两行合并为一行 sed 'N;s/\n/ /' file.txt # 删除匹配行及其下一行 sed '/pattern/{N;d;}' file.txt
2024年03月09日
62 阅读
0 评论
0 点赞
2024-03-08
rsync命令介绍(可替代rm删除巨量文件)
当一个文件夹下面有海量的文件需要删除时,使用rm命令往往可能会遇到问题:一个问题是删除速度慢,往往需要几分钟到几十分钟不等的时间才能完成操作;另一个问题是可能会有参数溢出的问题导致rm命令报错。此时,可以使用rsync命令来执行删除操作,主要用到的参数是--delete。比如,可以看到下面的例子中a文件夹下面有246803个文件。要删除这些文件,可以先建一个空文件夹b,然后用rsync命令让b文件夹与a文件夹进行同步。ls | wc -l 246803 #rm命令报错 rm -f * -bash: /usr/bin/rm: Argument list too long #使用rsync命令 rsync -av --delete /tset/b/ /tset/a/ #使用一个空的文件夹与a同步,使用--delete参数删除只存在于目标目录、不存在于源目录的文件。 sent 43 bytes received 3,676,572 bytes 294,129.20 bytes/sec total size is 0 speedup is 0.00 {lamp/}rsync :同步:增量拷贝,只传输变化过的数据命令参数详解 rsync [选项...] 源目录 目标目录-n:测试同步过程,不做实际修改-a(--archive):归档模式,相当于-rlptgoD-v(--verbose):显示详细操作信息-r (--recursive):递归处理子目录-l (--links):保持软链接-p (--perms):保持权限-t (--times):保持时间戳-g (--group):保持组信息-o (--owner):保持所有者信息-D:保持设备文件和特殊文件-z:传输过程中启用压缩/解压--delete:删除目标文件夹内多余的文档--exclude 排除文件--include 用来指定必须同步的文件模式实用参数-z (--compress):传输时压缩数据-P:等同于--partial --progress,显示进度并支持断点续传--delete:删除目标目录中源目录没有的文件--exclude:排除指定文件或目录--include:包含指定文件或目录-n (--dry-run):试运行,不实际执行操作--bwlimit:限制传输带宽-e:指定远程shell程序--rsync-path:指定远程rsync程序的路径#同步时排除某些文件或目录 rsync -av --exclude='*.txt' source/ destination rsync -av --exclude '*.txt' source/ destination #上面命令排除了所有 TXT 文件。 #注意,rsync 会同步以“点”开头的隐藏文件,如果要排除隐藏文件,可以这样写--exclude=".*"。 #如果要排除某个目录里面的所有文件,但不希望排除目录本身,可以写成下面这样: rsync -av --exclude 'dir1/*' source/ destination #多个排除模式,可以用多个--exclude参数 rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination rsync -av --exclude={'file1.txt','dir1/*'} source/ destination #如果排除模式很多,可以将它们写入一个文件,每个模式一行,然后用--exclude-from参数指定这个文件 # 创建过滤规则文件 exclude-list.txt cat > exclude-list.txt << EOF *.log *.tmp cache/ .git/ node_modules/ *.pyc __pycache__/ EOF rsync -av --exclude-from='exclude-list.txt' source/ destination关于/的注意事项不加/,源目录source会被完整的复制到目标目录destination下面,形成/destination/source 这样的目录结构源目录source后面有/,则只是将source目录里面的内容完整的同步到destination目录下,而不同步source目录本身。rsync -a source destination #destination目录下会有一个source文件夹 rsync -a source/ destination #destination目录下面会有source文件夹里面的内容,而没有source本身。其他rsync命令#模拟同步操作,显示将要发生的更改,但不实际执行。 rsync --dry-run source_dir destination_dir #限制带宽使用率,以 KB/s 为单位,在同步过程中限制带宽使用率为 500 KB/s rsync --bwlimit=500 source_dir destination_dir #允许在中断后重新传输,同时显示实时进度 rsync --progress --partial source_dir destination_dir #仅同步小于 100KB 的文件 rsync -a --max-size='100K' source_dir destination_dir #仅同步大于 1MB 的文件 rsync -a --min-size='1M' source_dir destination_dir #只同步文件夹,忽略文件 rsync -a --include='*/' --exclude='*' source_dir destination_dir #将同步过程信息记录到指定的日志文件中 rsync -avzP --log-file='log.txt' source_dir destination_dir #排除所有的 .txt 文件,并在目标目录中删除已排除的文件 rsync -a --exclude='*.txt' --delete-excluded source_dir destination_dir# 在脚本中动态调整限速 if [ $(date +%H) -ge 9 ] && [ $(date +%H) -le 18 ]; then # 工作时间限速更严格 BWLIMIT="500" else # 非工作时间可以跑满带宽 BWLIMIT="0" fi rsync -avz --bwlimit=$BWLIMIT /source/ user@remote:/destination/#为了安全和自动化,建议使用SSH密钥认证而不是密码认证。 # 生成SSH密钥对 ssh-keygen -t rsa -b 2048 -f ~/.ssh/rsync_key # 将公钥复制到目标服务器 ssh-copy-id -i ~/.ssh/rsync_key.pub user@remote-host # 在rsync中指定密钥文件 rsync -avz -e "ssh -i ~/.ssh/rsync_key" /source/ user@remote:/destination/常见问题和解决方案1. 权限问题 问题:同步后文件权限不正确或无法访问某些文件。解决方案:# 确保源文件有读权限 chmod -R +r /source/ # 使用sudo执行rsync sudo rsync -avz /source/ user@remote:/destination/ # 或者在远程端使用sudo rsync -avz --rsync-path="sudo rsync" /source/ user@remote:/destination/2. 网络中断导致传输失败 问题:在传输大文件时网络不稳定导致中断。解决方案:# 使用-P参数支持断点续传和显示进度 rsync -avzP /source/ user@remote:/destination/ # 设置超时和重试 rsync -avz --timeout=60 --contimeout=60 /source/ user@remote:/destination/ # 编写重试脚本 #!/bin/bash MAX_RETRIES=3 RETRY_COUNT=0 while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do rsync -avzP /source/ user@remote:/destination/ if [ $? -eq 0 ]; then echo "同步成功" break else RETRY_COUNT=$((RETRY_COUNT + 1)) echo "第 $RETRY_COUNT 次重试..." sleep 30 fi done3. 磁盘空间不足 问题:目标磁盘空间不够导致同步失败。解决方案:# 先进行试运行检查空间需求 rsync -avzn /source/ /destination/ | grep "total size" # 使用--max-size限制单个文件大小 rsync -avz --max-size=100M /source/ /destination/ # 分批同步,先同步小文件 rsync -avz --max-size=10M /source/ /destination/ rsync -avz --min-size=10M --max-size=100M /source/ /destination/4. 软链接处理问题 问题:软链接没有正确处理或指向错误位置。解决方案:# 保持软链接(默认行为) rsync -avz /source/ /destination/ # 复制软链接指向的实际文件内容 rsync -avzL /source/ /destination/ # 转换绝对路径软链接为相对路径 rsync -avz --copy-unsafe-links /source/ /destination/性能优化技巧1. 并发同步 对于多个独立的同步任务,可以使用并发处理来提高效率。#!/bin/bash # 并发同步脚本 sync_task() { local src=$1 local dst=$2 local name=$3 echo "开始同步 $name..." rsync -avz "$src/" "$dst/" > "/tmp/sync_${name}.log" 2>&1 if [ $? -eq 0 ]; then echo "$name 同步成功" else echo "$name 同步失败,查看日志: /tmp/sync_${name}.log" fi } # 后台并发执行多个同步任务 sync_task "/data/web1" "user@server1:/backup/web1" "web1" & sync_task "/data/web2" "user@server2:/backup/web2" "web2" & sync_task "/data/db" "user@server3:/backup/db" "database" & # 等待所有后台任务完成 wait echo "所有同步任务完成"2. 优化SSH连接 通过SSH连接复用来减少连接建立的开销。# 在 ~/.ssh/config 中配置连接复用 cat >> ~/.ssh/config << EOF Host backup-server HostName 192.168.1.100 User root Port 22 ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p ControlPersist 10m Compression yes EOF # 这样多次rsync操作会复用同一个SSH连接 rsync -avz /data1/ backup-server:/backup/data1/ rsync -avz /data2/ backup-server:/backup/data2/3. 调整传输参数 根据网络环境调整rsync的传输参数。# 高带宽低延迟网络 rsync -avz --compress-level=1 /source/ user@remote:/destination/ # 低带宽高延迟网络 rsync -avz --compress-level=9 --whole-file /source/ user@remote:/destination/ # 局域网内可以关闭压缩 rsync -av --no-compress /source/ user@remote:/destination/
2024年03月08日
168 阅读
0 评论
0 点赞
2024-03-06
nginx反向代理(负载均衡)中部分参数详解
nginx的代理功能是通过http proxy 模块实现的。该模块每个选项的详细解释如下。proxy_set_header 设置HTTP请求header项传给后端服务器节点,例如:可以实现让后端服务器节点获取访问客户端用户的真实IP地址。client_body_buffer_size 用于指定客户端请求主体缓冲区大小。proxy_connect_timeout 表示反向代理与后端服务器连接的超时时间,即发起握手等候响应的超时时间。proxy_send_timeout 表示代理后端服务器的数据传回时间,即在规定时间之内后端服务器必须传完所有的数据,否则nginx将断开这个连接。proxy_read_timeout 设置nginx从代理的后端服务器获取信息的时间。表示连接成功之后,nginx等待后端服务器的响应时间,也就是nginx已经进入后端的排队之中等候处理的时间。proxy_buffer_size 设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers 设置的大小。proxy_buffers 设置缓冲区大小。nginx从代理的后端服务器获取的响应信息,会放置到缓冲区。proxy_busy_buffers_size 用于设置系统繁忙时可以使用的proxy_buffer的大小。官方推荐的大小为proxy_buffers*2。proxy_temp_file_write_size 指定proxy缓存临时文件的大小。{lamp/}nginx反向代理重要参数解释proxy_pass http://server_pools;通过proxy_pass功能把用户的请求转发给反向代理定义的upstream服务器池proxy_set_header Host $host;在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机。这是节点服务器多虚拟主机时的关键配置proxy_set_header X-Forwarded-For $remote_addr;在代理向后端服务器发送的http请求头中加入X-Forwarded-For字段信息,用于后端服务器程序、日志等接收记录真实用户的IP,而不是代理服务器的IP。这是反向代理时,节点服务器获取用户真实IP的必要功能配置。proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_connect_timeout 60; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k;{card-default label="特别说明" width=""}反向代理服务器如果配置了proxy_set_header X-Forwarded-For $remote_addr参数,这时如果节点服务器需要访问日志记录用户的真实IP,还需要在节点服务器上对日志格式进行配置,这样才能把代理传过来的X-Forwarded-For头信息记录下来。具体配置如下。{/card-default}#nginx.conf文件 http { include mime.types; …… log_format main '$remote_addr - $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" " $http_x_forwarder_for"' ; …… }
2024年03月06日
63 阅读
0 评论
0 点赞
2024-03-05
nginx中location匹配规则与regex常用的正则表达式
location指令的作用是根据用户请求的URI来执行不同的应用。也就是根据用户请求的URI进行匹配,匹配成功即进行相关的操作location [=|~|~*|^~] uri { … }~:用于区分大小写的匹配(大小写敏感)~*:用于不区分大小写的匹配。!:可以用逻辑操作符“!”对上面的匹配取反,即“!~”、“!~*”^~:进行常规的字符串匹配检查后不做正则表达式的检查。不同匹配标识符的优先级优先级标识符匹配说明1location = / {精确匹配 /2location ^~ /images/ {匹配常规字符串,不做正则匹配检查3location ~* .(gif jpg jpeg)$ {正则匹配4location /documents/ {匹配常规字符串,如果有正则,优先匹配正则5location / {所有location都不能匹配后的默认匹配regex常用的正则表达式\ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如,“\n”匹配一个换行符,“\”和“$”匹配“$”^ 匹配输入字符串的起始位置,$ 匹配输入字符串的结束位置匹配前面的字符零次或多次匹配前面的字符一次或多次? 匹配前面的字符零次或一次(pattern) 保留或作为一个整体。匹配括号内的pattern,并可以在后面获取相应的匹配。常用$0...$9属性获取小括号中匹配的内容
2024年03月05日
67 阅读
0 评论
0 点赞
2024-03-05
HTTP状态码解读
{callout color="#ff0000"}HTTP状态码是用来表示WEB服务器响应HTTP请求状态的数字代码。每当WEB客户端向服务器发送一个HTTP请求时,WEB服务器都会返回一个状态响应代码。这个代码是一个三位的数字,作用是告知WEB客户端此次请求是否成功,或者是否需要采取其他的动作方式{/callout}不同范围的状态码及其对应的作用100~199 用于指定客户端相应的某些动作200~299 用于表示请求成功300~399 (重定向)用于已经移动的文件,并且常被包含在定位头信息中指定新的地址400~499 用于指出客户端的错误500~599 用于指出服务器的错误常见状态码及其对应的作用200 服务器成功返回网页。这是成功的HTTP请求返回的标准状态码301 Moved Permanently 永久重定向302 临时重定向403 Forbidden 禁止访问,虽然这个访问是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器或服务权限配置不当所致。典型的如nginx配置文件中没有配置默认首页参数,或者首页文件在站点目录下不存在。也可能是nginx没有站点目录或内部程序文件的访问权限,或者nginx配置文件中设置了allow或者deny等权限控制。404 Not Found 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源所致500 Internal Server Error 内部服务器错误,服务器遇到了意料之外的情况,不能完成客户端的请求。这是一个较为笼统的报错,一般为服务器的设置或内部程序问题导致。例如,SELinux开启,而又没有为HTTP设置规则许可,客户端访问就是500502 Bad Gateway 网关报错,一般是代理服务器请求后端服务时,后端服务器不可用或没有完成响应网关服务器。这通常为反向代理服务器下面的节点出问题所致。503 Service Unavailable 服务当前不可用,可能是服务器超载或停机维护所致,或者是反向代理服务器后面没有可以提供服务的节点504 Gateway Timeout 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求。多数是服务器过载导致没有在指定的时间内返回数据给前段代理服务器。其他状态码及其对应的作用201 (已创建) 请求成功并且服务器创建了新的资源202 (已接受) 服务器已接受请求,但尚未处理203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源204 (无内容) 服务器成功处理了请求,但没有返回任何内容205 (重置内容) 服务器成功处理了请求,但没有返回任何内容206 (部分内容) 服务器成功处理了部分 GET 请求303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应405 (方法禁用) 禁用请求中指定的方法406 (不接受) 无法使用请求的内容特性响应请求的网页407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理408 (请求超时) 服务器等候请求时发生超时409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理415 (不支持的媒体类型) 请求的格式不受请求页面的支持416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本
2024年03月05日
59 阅读
0 评论
0 点赞
1
...
13
14
15
...
18