在使用有root权限的命令窗口执行这些命令或脚本时,不会出现这些Permission denied提示,如果是使用Java去执行命令或者脚本,权限不够时会出现此提示,以centos系统为例
1、Java执行到某脚本
Process process = Runtime.getRuntime().exec("sh **.sh");
提示Permission denied,是指当前执行的脚本文件时,此脚本没有执行权限
解决方法:
//解决脚本没有执行权限
ProcessBuilder builder = new ProcessBuilder("/bin/chmod", "755",script);
Process chmodprocess = builder.start();
如果再次提示 Permission denied,是指当前执行没有权限,需要按以下解决:
如提示:/sys/firmware/dmi/tables/smbios_entry_point Permission denied
直接root权限的命令窗口:chmod 755 /sys/firmware/dmi/tables/smbios_entry_point
如不是,可能是jdk的权限问题:命令行输入 chmod 777 /(java_home的完整路径)
2、Java执行某脚本或命令时,以下为读取系统硬件信息为例
#!/bin/bash
CpuID=$(dmidecode -t processor | grep 'ID')
MainBordId=$(dmidecode | grep 'Serial Number')
HardDiskSN=$(fdisk -l |grep 'Disk identifier')
BiosSN=$(dmidecode -s bios-version)
MAC=$(cat /sys/class/net/eth0/address)
echo "cpuid:$CpuID"
echo "mainborid:$MainBordId"
echo "harddisksn:$HardDiskSN"
echo "biossn:$BiosSN"
echo "mac:$MAC"
提示:
/sys/firmware/dmi/tables/smbios_entry_point Permission denied
/dev/mem Permission denied
/dev/sr0 Permission denied
/dev/vda Permission denied
/dev/vdb Permission denied
/sys/firmware/dmi/tables/DMI Permission denied
解决方法,使用root权限的命令窗口执行
chmod 755 /sys/firmware/dmi/tables/smbios_entry_point
chmod 755 /dev/mem
chmod 755 /dev/sr0
chmod 755 /dev/vda
chmod 755 /dev/vdb
chmod 755 /sys/firmware/dmi/tables/DMI
如果以上还没解决,请仔细查看报错提示,看哪些权限被限制