Linux 系统
共 111 篇文章
xargs -I 后 du 找不到已有文件:文件名前面的空格被丢掉
带前导空格的文件经 xargs -I 后报 No such file or directory 时,检查名称是否在输入解析阶段被改写,再用 NUL 分隔和 GNU du 单次统计保留路径及总计。
Bash 总是执行已删除的旧路径:清除当前 shell 命令缓存
工具迁移后 Bash 仍执行已删除的旧路径时,检查同一 shell 的 hash 记录和 PATH,定点或整体清除缓存,再排除别名、函数及加载器错误。
Linux chown 改了符号链接目标,链接所有者仍未变化
GNU chown 非递归操作默认修改符号链接目标。用 stat 分别确认两者属性,使用 chown -h 修改链接,并单独处理此前误改目标的恢复。
awk 设置 OFS 后,print $0 仍保留原来的分隔符
GNU awk 的 OFS 不会主动改写整条输入记录。区分 print $0 与多个字段输出,通过字段赋值触发重建,并核对空字段、排版丢失和下游分隔规则。
Bash printf 打印 -- 时只显示 usage
Bash printf 把首个 -- 作为选项结束标记,后面缺少格式便显示用法。用固定的 %s 格式传递文本,并区分选项分隔、格式解析和是否追加换行。
Bash 脚本给 UID 赋值时报 readonly variable
Bash 的 UID 是只读用户 ID 变量。导入脚本应把业务账户字段改成独立变量名,同步修改引用,并检查实际执行入口。
find 批量复制报 are the same file:搜索结果包含了目标目录
GNU find 搜索树包含复制目标目录时,cp 会把目标文件再次复制到自身。先预览范围并剪枝,再处理同名覆盖、路径形式与命令退出状态。
crontab 日期命令报 unexpected EOF
带 date 日期格式的命令在终端正常,放进 crontab 却报 unexpected EOF。未转义的百分号可能让 cron 提前截断命令;逐个转义,或把日期与日志重定向一起移入脚本。
开机后 apt update 报锁被占用:确认后台更新是否仍在运行
Ubuntu 开机后 apt update 报锁被占用时,核对持有进程、自动更新服务和日志,正常等待或受控恢复,再处理维护窗口与调度,不删除锁文件。
systemd 服务报 200/CHDIR:终端能运行,服务用户却进不了 /root 目录
root 终端可以运行的应用,交给 www-data 服务后报 200/CHDIR。检查工作目录的逐层权限、服务隔离和部署位置,再安全调整启动路径。
Bash 变量里的末尾换行消失:双引号挡不住命令替换的删除规则
Bash 使用 $(cat) 后末尾换行消失,双引号只保留已有内容。区分命令替换与字段拆分,使用文件输入或受控哨兵法保留文本末尾字节。
while read 中的 SSH 只执行第一台主机
主机清单可以完整打印,加入 SSH 后却只执行第一台。检查循环与 SSH 共享标准输入的情况,按远端是否需要输入选择 -n 或独立文件描述符。
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 生成排序副本,显式检查顺序,并区分空交集、执行失败和重复记录。
Bash 比较 08、09 报 value too great for base
Bash 算术把前导零数字解释为八进制。对确定为非负十进制的短字段,先校验内容和长度,再用 10# 转换,避免 010 静默变成 8。
awk -v 传入路径后反斜杠消失或变成换行
Shell 引号无法取消 awk 命令行赋值的转义解析。对需要原样保留的路径或标签,通过环境变量和 ENVIRON 传递,并区分后续正则或命令语法。
Arch 用户 locale.conf 不生效:核对会话启动时的 LANG
Arch 用户 locale.conf 修改后桌面语言不变时,区分 locale 生成、当前环境和会话启动加载,核对 LANG 优先级及 xrdp 或显示管理器的实际入口。


