根本不用装pdksh,因其已被废弃且CentOS 7官方仓库不提供;正确做法是安装ksh并创建指向它的符号链接:ln -sf /bin/ksh /bin/pdksh,使Oracle检查通过而实际运行安全稳定的ksh。

CentOS 7 上 Oracle 11g 安装报“缺少 pdksh”警告,根本不用装 pdksh —— 它早已被废弃,强行安装反而引发冲突。
为什么 yum install pdksh 会失败
CentOS 7 的官方仓库中压根没有 pdksh 包。这不是你源配错了,而是 Red Hat 早在 CentOS 6 后期就移除了它,Oracle 11g 的检查脚本却还硬编码着这个旧名。直接 yum install pdksh 必然报 No package pdksh available。
- 网上流传的
pdksh-5.2.14-37.el5_8.1.x86_64.rpm是为 EL5(即 CentOS 5)编译的,强行rpm -ivh --force可能破坏系统 shell 依赖 -
pdksh自 2009 年起停止维护,ksh(AT&T KornShell)是其官方继任者,功能兼容且 actively maintained - Oracle 11g 实际运行时调用的是
/bin/ksh,检查逻辑只是字符串匹配pdksh,属于历史包袱
正确做法:用 ksh 替代 + 符号链接欺骗检查
核心就三步,全部在 root 下执行:
- 确认
ksh已安装:yum list installed | grep ksh;如无,运行yum install -y ksh - 移除可能残留的冲突包(仅当之前手动装过旧版
pdksh):rpm -e pdksh --nodeps - 创建兼容性符号链接:
ln -sf /bin/ksh /bin/pdksh
这步最关键:/bin/pdksh 不是真实程序,只是指向 /bin/ksh 的软链。Oracle 检查脚本 runInstaller 执行 which pdksh 能返回路径,就认为满足条件,后续所有 shell 脚本实际跑的仍是安全稳定的 ksh。
静默安装或图形安装前必须验证
别等 runInstaller 报完一堆错才回头补救。提前验证能省两小时:
- 检查链接是否生效:
ls -l /bin/pdksh应输出类似/bin/pdksh -> /bin/ksh - 测试调用是否正常:
/bin/pdksh -c 'echo $KSH_VERSION'应打印版本号(如@(#)PD KSH v5.2.14 99/07/13.2,这是ksh模拟的兼容输出) - 如果用静默安装,确保
responseFile中的oracle.install.db.InstallEdition=EE等参数正确,否则即使过了pdksh检查,也会卡在下一步
真正容易被忽略的是:有些环境里 /bin/ksh 存在但权限为 700 或属主不是 root,会导致软链虽存在,runInstaller 却因无法执行而静默失败 —— 务必确认 ls -l /bin/ksh 显示权限是 -r-xr-xr-x,否则 chmod 755 /bin/ksh。


















