在 CentOS 上编译 Java 程序时遇到权限错误,通常不是 Java 本身的问题,而是文件/目录权限或用户权限导致的。下面按常见场景给你排查和解决思路。
Permission deniedjavac: cannot write to directorybash: ./xxx: Permission deniedmkdir: cannot create directory ‘xxx’: Permission denied例如:
javac Hello.java
报错:
error: cannot write to Hello.class
原因:当前目录对你没有写权限
解决:
# 查看权限
ls -ld .
# 方法1:换到有写权限的目录
mkdir ~/java_work
cd ~/java_work
# 方法2:修改目录权限(管理员或目录属主)
sudo chmod 755 /path/to/dir
# 或
sudo chown -R $USER:$USER /path/to/dir
有时用 sudo javac 编译后,生成的 .class 文件属于 root。
解决:
sudo chown -R $USER:$USER .
./run.sh
报错:
Permission denied
解决:
chmod +x run.sh
如果你自己解压了 JDK:
/usr/local/java/jdk1.8.0_xxx
解决:
sudo chown -R root:root /usr/local/java
sudo chmod -R 755 /usr/local/java
某些目录(如 /var/www)会因 SELinux 限制写文件。
检查:
getenforce
如果是 Enforcing:
# 临时关闭(不推荐生产)
sudo setenforce 0
# 或修正上下文
sudo restorecon -Rv /your/java/dir
避免在:
/
/root
/usr
等目录直接编译。
推荐:
cd ~
mkdir java
cd java
whoami
pwd
ls -ld .
javac -version
你可以把具体报错信息贴出来(完整几行),我可以更精准告诉你该改哪里。