#Linux
共 121 篇文章
Bash 变量里的末尾换行消失:双引号挡不住命令替换的删除规则
Bash 使用 $(cat) 后末尾换行消失,双引号只保留已有内容。区分命令替换与字段拆分,使用文件输入或受控哨兵法保留文本末尾字节。
Linux 删除大日志后磁盘空间未释放,lsof 仍显示 deleted
删除日志后 df 占用不降,可能仍有进程持有旧文件。用 lsof 核对链接数、设备和持有者,再通过日志重开或受控重启释放引用,避免强杀和盲目截断。
Linux 脚本用 env 传解释器选项时报 No such file or directory
Linux 将 shebang 中 env 后面的程序和选项作为一个参数传入,导致寻找含空格的程序名。核对 GNU env 8.30 的 -S 支持,并用真实脚本入口验证。
数字列表已排序,comm 仍报 not in sorted order 或漏掉共同记录
comm 要求输入遵循同一字符排序规则,数值升序可能让共同 ID 被误分。使用一致的 locale 生成排序副本,显式检查顺序,并区分空交集、执行失败和重复记录。
awk -v 传入路径后反斜杠消失或变成换行
Shell 引号无法取消 awk 命令行赋值的转义解析。对需要原样保留的路径或标签,通过环境变量和 ENVIRON 传递,并区分后续正则或命令语法。
Arch 用户 locale.conf 不生效:核对会话启动时的 LANG
Arch 用户 locale.conf 修改后桌面语言不变时,区分 locale 生成、当前环境和会话启动加载,核对 LANG 优先级及 xrdp 或显示管理器的实际入口。
Bash 开启 pipefail 后,head 取首行使脚本以 141 退出
下游取首行提前关闭管道,上游继续写入可能收到 SIGPIPE;核对各段状态,有限输入改为完整消费,并保留真实错误与取消边界。
systemd 服务写入 /tmp 的文件在终端找不到
应用能读回自己写入 /tmp 的文件,服务器终端却找不到,可能是 systemd 的 PrivateTmp 隔离了临时目录。通过实际进程的目录视图定位文件,再把需要保留的结果迁移到专用状态目录。
sudo 重定向写文件报 Permission denied
sudo 命令后用 > 写入受保护文件仍报 Permission denied,是因为当前 shell 先打开重定向目标。区分 shell、sudo 和 tee 的错误,并按覆盖、追加或编辑配置选择写入方式。
SSH 远程命令报 sudo: no tty present:远端没有终端可供输入密码
SSH登录成功但远端sudo无法提示密码,按人工交互与无人值守区分终端分配、非交互失败和有限授权。
sort file > file 后文件变空:重定向先截断了输入
sort file > file 导致输入变空时,先保留现场和备份;改用独立输出,或在普通 GNU sort 模式使用 -o,并核对原地写入风险。
Linux umount 报 target is busy:当前终端还在挂载目录里
Linux 卸载报 target is busy,关闭原终端才成功时,检查 shell 工作目录及其他占用。区分普通卸载、lazy 分离和加密映射关闭,保留正常收尾与恢复边界。
rsync 报 file has vanished:退出码 24 与动态源文件
rsync 返回 24 并提示 file has vanished 时,确认动态源文件是否属于必须保留的数据;分开保存退出状态与日志,避免过滤管道掩盖其他错误。
Docker 单文件挂载后,容器读到的配置没有更新
宿主机保存了配置,Docker 容器仍读到旧内容。单文件绑定挂载遇到文件替换时可能保留旧对象;通过挂载路径、内容摘要和 inode 缩小范围,再选择重建容器或改为专用目录挂载。
systemd 覆盖 ExecStart 后报多条启动命令:drop-in 要先清空旧列表
systemd override 新增 ExecStart 会与原命令累积。用空赋值重置启动列表,检查加载状态并在维护窗口应用与恢复。
rsync --delete 发布时保留目标独有的 .well-known 目录
rsync 删除目标多余文件时,可用排除规则保留独立目录;若带 delete-excluded,需显式区分接收端保护与发送端隐藏,先预演再执行。
Docker 挂载目录报 Permission denied:确认 SELinux 标签与共享范围
Docker bind mount 报 Permission denied 时,先核对普通权限与 SELinux 审计,再决定私有 Z 或共享 z 标签、容器重建及宿主标签恢复范围。
Bash 已开启 expand_aliases,同一行调用别名仍报 command not found
Bash 在读取命令时展开别名,同一行执行的 alias 定义来不及影响后续调用。通过独立输入行或函数修复,并区分复合命令与新 shell 的边界。


