在 UNIX/Linux 系统中确实会遇到一些看似奇怪的行为或现象,这通常与系统特性、配置或环境相关。以下是几个常见"奇怪"场景及其解释/解决方案:
rm
删除文件后,df
显示空间未释放。bash
lsof | grep deleted # 找到占用文件的进程
kill <PID> # 重启相关进程
或清空文件内容:
bash
> /path/to/deleted_file
bash
ls -li /path # 检查 inode
mount | grep /path # 检查挂载点
echo -n "/path" | xxd # 查看路径的十六进制(检查隐藏字符)
./script.sh
报 Permission denied
,但权限为 -rwxr-xr-x
。noexec
。#!
) 解释器路径错误。bash
mount | grep /path # 检查挂载选项
head -1 script.sh # 确认 Shebang 路径
Ctrl+Q
(XON)继续输出。bash
stty -ixon # 添加到 ~/.bashrc 永久生效
ps
显示进程名为 -bash
或方括号 [ ]
-bash
:登录 Shell(首字符 -
表示是登录进程)。[kthreadd]
等:内核线程(方括号是内核标记)。df
和 du
显示结果不一致bash
du -sh /path; df -h /path
ls -ls sparse_file # 第一列为实际磁盘块数
sudo
后环境变量丢失sudo
默认重置环境(出于安全)。bash
sudo -E command # 保留当前环境
sudo env PATH=$PATH command # 传递特定变量
tar
解压后文件时间戳变化-m
(保留原时间)或 -p
(保留属性)选项。bash
tar -xzpvf file.tar.gz --preserve-permissions --same-owner
grep
匹配不到已知存在的文本\r\n
)。bash
grep -a "text" file # 强制按文本处理
dos2unix file # 转换换行符
kill -9
无法终止进程D
状态(不可中断的休眠,通常由内核 I/O 操作导致)。bash
ps -l | awk '$2=="D"' # 查找 D 状态进程
D
状态进程)。bash
tail -f /var/log/syslog # 或 /var/log/messages
dmesg | tail # 内核日志
strace
追踪系统调用:
bash
strace -f -o debug.log <command>
遇到具体问题时,提供以下信息可更快定位原因:
- 完整的命令和报错信息。
- 相关文件的权限、属组(ls -l
)。
- 系统版本(uname -a
)。
是否有某个具体场景需要深入分析?