在 CentOS 上编译 Java 程序时遇到权限错误,常见原因和对应解决方法如下:
报错示例
bash: /usr/bin/javac: Permission denied
解决
# 查看权限
ls -l $(which javac)
# 如果是权限不足(极少情况)
sudo chmod +x /usr/bin/javac
报错示例
error: cannot write to output directory
解决
# 查看目录权限
ls -ld 你的目录
# 修改目录所有者
sudo chown -R 你的用户名:你的用户名 你的目录
# 或加写权限
chmod -R u+w 你的目录
解决
# 推荐方式:使用 alternatives 管理 JDK
sudo alternatives --config java
sudo alternatives --config javac
或设置 JAVA_HOME:
export JAVA_HOME=/usr/java/jdk1.8.0_xxx
export PATH=$JAVA_HOME/bin:$PATH
报错示例
java.io.FilePermission "/tmp" "write"
解决
ls -ld /tmp
# 正常应为 drwxrwxrwt
sudo chmod 1777 /tmp
排查
getenforce
如果是 Enforcing:
# 临时关闭
sudo setenforce 0
# 永久关闭(不推荐生产)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
或仅对目录放行:
sudo chcon -R -t user_home_t 你的项目目录
解决
sudo chown -R 用户名:用户名 项目目录
whoami
which javac
javac -version
ls -ld 项目目录
getenforce
如果你能贴出具体报错信息,我可以更准确地告诉你改哪一条。