在 Ubuntu 上调试 getconf 相关问题时,核心思路是:确认命令本身、确认参数是否合法、确认系统/库配置、必要时用 strace / 源码辅助分析。下面按实用顺序说明。
which getconf
getconf --version
通常位于:
/usr/bin/getconf
getconf -a
或:
getconf -a system
getconf -a path
如果你输入的参数不在列表中,getconf 会返回非 0 并可能无输出。
getconf NONEXISTENT_VAR
echo $?
返回:
0 # 有值
1 # 参数不存在或系统不支持
PAGE_SIZE)getconf PAGE_SIZE
getconf NAME_MAX /tmp
⚠️ 很多人误用:
getconf NAME_MAX # 错误
strace getconf PAGE_SIZE
关注:
openat("/usr/lib/x86_64-linux-gnu/...confstr, sysconf, pathconf例如:
strace -e trace=confstr,sysconf,pathconf getconf PAGE_SIZE
getconf 实际调用的是 glibc:
sysconf()pathconf()confstr()可查看:
ldd $(which getconf)
在某些容器中:
getconf 返回宿主机值调试:
env | grep -i path
ls -l /usr/bin/getconf
dpkg --print-architecture
uname -m
某些参数在不同 arch 下结果不同。
apt source glibc-source
或查看:
apt-get source libc6
posix/getconf.csysdeps/.../sysconf.c# 1. 是否可用
which getconf
# 2. 是否参数错误
getconf -a | grep 关键字
# 3. 是否路径变量
getconf NAME_MAX /
# 4. 系统调用级
strace getconf PAGE_SIZE
# 5. 返回码
echo $?
如果你能贴出:
我可以直接帮你定位是哪一层(命令 / glibc / 内核 / 容器)的问题。