程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
Shell 相关技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
Bash 5.3 实用改动:命令替换不再 fork、GLOBSORT 排序,还有两处会咬到旧脚本
编程
Bash 5.3 实用改动:命令替换不再 fork、GLOBSORT 排序,还有两处会咬到旧脚本
2026-11-10 21:09:37
Bash 5.3 里写脚本真正用得上的改动:${ cmd; } 与 ${|cmd;} 在当前 shell 执行不再 fork、BASH_MONOSECONDS 直接读单调时钟、GLOBSORT 让路径名展开自带排序,外加 source -p、compgen -V、read -E 等。也整理了两处会改变现有脚本行为的兼容性变化。
Shell
Bash
脚本
运维
wget 遇 503 不进重试直接退出码 8:-t 20 只管网路中断,--retry-on-http-error 要自己开
编程
wget 遇 503 不进重试直接退出码 8:-t 20 只管网路中断,--retry-on-http-error 要自己开
2026-11-07 00:04:32
wget 默认 -t 20 只重试连接中断和读超时,HTTP 503/429 会直接以退出码 8 结束,日志里连 Retrying. 都没有。这篇按手册核对重试边界:--waitretry 线性退避默认 10 秒、read timeout 默认 900 秒、--retry-on-http-error 从 1.19.1 才有且官方不推荐,并给出退出码 0-8 的分支判断、-c 与 -O 共用会截断文件的原因,以及可直接抄的 flock + sha256sum 脚本。
wget
Shell
运维
下载工具
OpenSSL 4.0 的十六进制输出变了两处:去掉多余的 00: 前缀,dump 宽度改成 24/16 字节
综合
OpenSSL 4.0 的十六进制输出变了两处:去掉多余的 00: 前缀,dump 宽度改成 24/16 字节
2026-11-06 21:07:07
OpenSSL 4.0 改了十六进制打印:最高字节 >= 0x80 时不再多打 00:,dump 宽度统一为签名 24 字节、其它 16 字节。靠 grep ^00:、按列宽 cut 或按行数拼 hex 的脚本会静默错位。含两版本 diff 复现、指纹与 DER 比对替代方案、多行输出聚合写法与升级自检清单。
OpenSSL
Shell
运维
证书
curl 8.23.0 一次修复 24 个 CVE:SMB 协议移除、符号改名与 --no-clobber 改动
资讯
curl 8.23.0 一次修复 24 个 CVE:SMB 协议移除、符号改名与 --no-clobber 改动
2026-10-30 21:07:06
curl 8.23.0 一次修了 24 个 CVE,同时彻底移除 SMB/SMBs 协议支持,CURL_GLOBAL_WIN32 更名为 CURL_GLOBAL_WINSOCK,--no-clobber 的编号位置也改了。给出脚本与镜像里固定版本的重建清单、用 smbclient 替代的写法,以及 curl -V 自查协议列表的方法。
curl
安全公告
Shell
运维
Bash 5.3:不再 fork 的命令替换 ${ cmd; } 与 ${|cmd;}
编程
Bash 5.3:不再 fork 的命令替换 ${ cmd; } 与 ${|cmd;}
2026-10-28 21:04:52
Bash 5.3 新增 ${ cmd; } 与 ${|cmd;} 两种命令替换,在当前 shell 执行、不 fork 子进程,副作用可见;后者从 REPLY 取结果。文章给出与 $(...) 的对照示例、版本检测写法,以及 GLOBSORT、BASH_MONOSECONDS、compgen -V 等对脚本有用的改动。
Bash
Shell
脚本
Linux
yt-dlp 报 403、只下到音轨、分片超时:从 TLS 指纹到 JS 运行时的分层排查
编程
yt-dlp 报 403、只下到音轨、分片超时:从 TLS 指纹到 JS 运行时的分层排查
2026-10-28 00:04:53
yt-dlp 的报错往往只给结果不给原因。按失败形态分四类排查:403 与 TLS 指纹(curl_cffi impersonation,注意 zipimport 版和 32 位 Windows 版不带它)、缺 JS 运行时导致拿不到高清晰度、ffmpeg 二进制缺失导致无法合流与切片、-N 与 --downloader 的分工,以及 --throttled-rate 与 --retry-sleep 的用法。
下载工具
yt-dlp
ffmpeg
curl
Shell
jq 1.8.2 一次修了 16 个 CVE:把不可信 JSON 喂给 jq 的代价
编程
jq 1.8.2 一次修了 16 个 CVE:把不可信 JSON 喂给 jq 的代价
2026-10-26 21:05:10
jq 常被塞进流水线解析外部 API、日志和用户上传的 JSON。1.8.2 一次修了 16 个 CVE:路径与 contains 的递归深度、堆溢出与越界读、NUL 截断导致的校验失真、哈希碰撞 DoS。按触发方式分组说明,并给出输入限长、ulimit、深度检查与制品校验的具体写法。
Shell
安全
jq
运维
凌晨 3 点的备份脚本:用 set -x、PS4 行号、trap ERR 和 shellcheck 逐层排查
综合
凌晨 3 点的备份脚本:用 set -x、PS4 行号、trap ERR 和 shellcheck 逐层排查
2026-10-24 20:01:33
一个每天凌晨跑的备份脚本,失败了却永远打印「备份完成」。本文从这段坏脚本出发,讲三层 Bash 排错手段:set -x 配自定义 PS4 打出文件名和行号、set -Eeuo pipefail 加 trap ERR 捕获 LINENO 与 BASH_COMMAND、bash -n 与 shellcheck 静态检查,末尾附可直接抄走的生产脚本骨架和断言写法。
Shell
Bash
运维
脚本调试
cron
脚本打印 done、产物却是 0 字节:tee 吞掉了退出码,137 才露出 OOM 的手
编程
脚本打印 done、产物却是 0 字节:tee 吞掉了退出码,137 才露出 OOM 的手
2026-10-23 21:31:53
夜间任务每天照常打印 done,汇总文件却是 0 字节。根因是 `curl | tee` 只返回 tee 的退出码。打开 pipefail 后看到 137(SIGKILL),再用 cgroup memory.events 确认 OOM;配套 preflight 预检、逐条 checkpoint + fsync、结尾数量对账,以及一张贴在任务旁的退出码表。
Shell
Bash
Linux运维
cgroup
排障
BOM 的消费端:shell 报 Exec format error、Go 报 illegal byte order mark、JSON 解析停在第 0 位
案例
BOM 的消费端:shell 报 Exec format error、Go 报 illegal byte order mark、JSON 解析停在第 0 位
2026-10-22 00:03:42
同一个 EF BB BF,在导出侧是 Excel 认 UTF-8 CSV 的必需品,在消费侧却让内核 execve 返回 ENOEXEC、Go 编译器报 illegal byte order mark、JSON.parse 在第 0 位失败。整理字节层确认方法、shell/Go/Python/Node/Jackson/PHP 的行为对照表,以及 sed 去 BOM、CI 检查与 .gitattributes 不管 BOM 的边界。
BOM
UTF-8
字节序标记
Shell
Go
JSON
字符编码
Bash 5.3 的 ${ cmd; }:在 PS0 里改当前 shell 变量,做 preexec 与命令计时
编程
Bash 5.3 的 ${ cmd; }:在 PS0 里改当前 shell 变量,做 preexec 与命令计时
2026-10-21 21:06:11
Bash 5.3 新增的 ${ cmd; } 让 PS0 能直接改当前 shell 的变量,于是命令计时与 preexec 不必再挂 DEBUG trap。本文给出用 BASH_MONOSECONDS 计时的配置、展开与执行顺序,以及为什么 DEBUG trap 不适合做耗时统计。
Shell
Bash
终端配置
logrotate:copytruncate 与 create 怎么选,以及「轮转了但磁盘不释放」的排查顺序
综合
logrotate:copytruncate 与 create 怎么选,以及「轮转了但磁盘不释放」的排查顺序
2026-10-19 21:05:23
logrotate 的 create 与 copytruncate 本质是进程 fd 指向哪个 inode。讲清 Nginx/PHP-FPM 必须 reopen、copytruncate 的丢日志窗口与 IO 峰值、df 与 du 不一致时用 lsof +L1 定位、以及容器里为什么不该跑 logrotate。
Shell
运维
日志
Linux
用发行版自带工具做服务器自动化:systemd timer、加固 SSH、机群循环与自动打补丁
综合
用发行版自带工具做服务器自动化:systemd timer、加固 SSH、机群循环与自动打补丁
2026-10-16 21:32:19
不用引入新工具,用主流发行版自带的 systemd timer/cron、OpenSSH 加固(受限密钥 command=/from=、Match+ProxyJump)、ssh+bash 机群循环、logrotate 与 unattended-upgrades/dnf-automatic 搭一套可复现的服务器自动化,并说清脚本能执行但不能观察/决策/解释的边界。
运维
Shell
Linux
SSH
systemd
sup:用一份 Supfile 把命令并行发到多台主机,无需 agent 的部署工具
编程
sup:用一份 Supfile 把命令并行发到多台主机,无需 agent 的部署工具
2026-10-16 21:31:15
pressly/sup(Stack Up)是一个用一份 YAML(Supfile)把命令并行发到多台主机的部署工具,复用系统 ssh,不用装 agent。本文讲清 networks/commands/targets 结构、serial 滚动更新、once 只在单机执行、upload/交互式 stdin、target 组合与失败即中断,以及 ssh-agent 连不上的排错。
Shell
部署
运维
SSH
Go
ShellCheck 到底比 bash -n 多查了什么:三条高频规则与 CI 落地
编程
ShellCheck 到底比 bash -n 多查了什么:三条高频规则与 CI 落地
2026-10-16 21:05:59
ShellCheck 比 bash -n 多做变量数据流与控制流分析。讲清 SC2086(引号)、SC2164(cd 退出码)、SC2155(local 吞退出码)三条高频规则的成因与改法,以及 CI/pre-commit 集成、disable 滥用、忽略被 source 文件等落地坑。
Shell
ShellCheck
bash
运维
mise 日常命令改走 mise-versions:没配 GitHub token 也不用撞 60 次/小时限流
编程
mise 日常命令改走 mise-versions:没配 GitHub token 也不用撞 60 次/小时限流
2026-10-15 21:03:21
mise v2026.10.11 让 install/exec/outdated/lock/self-update 等命令不再调用 api.github.com,改从 mise-versions 读取 release、tag 与 attestation,没配 token 的用户不再撞 60 次/小时限流。文中讲清仍直连 GitHub 的场景,并提到 path: 工具的 PATH 信任绕过修复。
mise
开发工具
GitHub
Shell
locale 起效顺序与六个坑:从 locale-gen 到 LC_ALL=C
编程
locale 起效顺序与六个坑:从 locale-gen 到 LC_ALL=C
2026-10-15 01:37:05
locale 是 glibc 的语言文化规则集,但 LANG、LC_*、LC_ALL、LANGUAGE 谁覆盖谁经常踩坑。这篇按 man 7 locale 的解析顺序讲清优先级,给出 locale-gen、localectl 等启用步骤,并列出排序随环境变化、小数点逗号、容器缺 locale 报错等六个实战坑。
locale
Linux
i18n
环境变量
Shell
运维
git checkout 拆成两条命令:Git 2.23 的 git switch / git restore 选项行为与迁移对照
编程
git checkout 拆成两条命令:Git 2.23 的 git switch / git restore 选项行为与迁移对照
2026-10-14 23:42:57
Git 2.23 把 git checkout 的「切分支」和「检出文件」拆成 git switch 与 git restore 两条新命令。本文按官方文档逐项拆解两者的命令签名与选项行为(-c/-C、--detach、--guess、--source、--staged/--worktree、--overlay 等),给出从 checkout/reset 迁移的对照表,并说明为什么 checkout 没有被废弃。
新命令
Git
Shell
版本控制
命令行
initdb 初始化集群:排序规则与 trust 认证建完就改不动
编程
initdb 初始化集群:排序规则与 trust 认证建完就改不动
2026-10-14 23:42:30
initdb 创建 PostgreSQL 集群时,排序规则、locale provider、编码和 WAL 段大小在初始化时就定死,默认信任认证还允许任意本地用户成为超级用户。梳理目录权限 0700/0600、-A scram-sha-256/-W/--pwfile 的用法,以及换 locale 只能清空重建的原因。
initdb
PostgreSQL
数据库
locale
排序规则
认证
运维
Shell
Bash 5.3 的命令替换 ${ command; }:省掉 fork,副作用留在当前 shell
编程
Bash 5.3 的命令替换 ${ command; }:省掉 fork,副作用留在当前 shell
2026-10-02 21:03:49
Bash 5.3 新增 ${ command; } 与 ${| command; } 两种在当前 shell 上下文执行的命令替换,省掉 fork 与管道,代价是副作用(变量、cd、状态)会留在当前 shell。另含 GLOBSORT、compgen -V、read -E、source -p PATH、BASH_MONOSECONDS、fltexpr,以及 C23 带来的编译要求变化。
Bash
Shell
Linux
脚本
运维
管道
set -o pipefail 搭配 grep -q:匹配到了,if 却返回 false
编程
set -o pipefail 搭配 grep -q:匹配到了,if 却返回 false
2026-10-01 21:02:26
开了 set -o pipefail 后把流管道给 grep -q,会因 grep 提前退出让上游收到 SIGPIPE,导致命中也被判失败。给出进程替换、awk、先物化等修法,以及 trap EXIT 与 ERR trap 的相关注意点。
Shell
Bash
pipefail
grep
运维脚本
pip
竞态
脚本终端能跑放进 crontab 就没了反应:环境变量、flock 与排查顺序
代码
脚本终端能跑放进 crontab 就没了反应:环境变量、flock 与排查顺序
2026-09-27 20:02:14
脚本在终端里跑得正常,放进 crontab 却毫无反应,问题基本都出在「环境不一致」。本文按时间语法、环境变量、重定向、flock 防重叠、时区、Docker 容器五个坑逐条拆解,附排查顺序:systemctl status cron、grep CRON /var/log/syslog、journalctl -u cron、crontab -l,以及用 env 输出对比 cron 实际环境的方法。
crontab
Shell
flock
定时任务
运维
install.sh 报 env: 'bash\r' 不是权限问题:CRLF、dash/noexec 与 cron PATH 的排查笔记
代码
install.sh 报 env: 'bash\r' 不是权限问题:CRLF、dash/noexec 与 cron PATH 的排查笔记
2026-09-23 21:02:58
脚本在终端能跑、部署就报 env: 'bash\r' 或 syntax error,先别急着 chmod +x。这篇按 CRLF 换行污染、/bin/sh 指向 dash、noexec 挂载、cron 精简 PATH 四类环境差异给出排查顺序,含 file/od 验证、sed 清洗、env -i 最小环境复现与 while read 读文件的安全写法。
Shell
Linux
运维
脚本
Bash 脚本上生产前的六个坑:set -e 不生效、管道里变量丢了、文件名带空格
编程
Bash 脚本上生产前的六个坑:set -e 不生效、管道里变量丢了、文件名带空格
2026-09-20 21:04:01
把 Bash 脚本上生产前最容易踩的六个坑讲清:for f in $(ls) 被文件名空格拆开、变量不加引号、set -euo pipefail 管不到的分支、管道右侧子 shell 丢变量、缺 trap 清理、缺调试手段。给出可复制的 NUL 分隔遍历与完整脚本骨架。
Shell
Bash
运维
Linux
脚本
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
下一页
共 2 页
到第
页
确定