java 读取linux系统中的硬件信息或者执行shell脚本或执行命令出现Permission denied的解决办法

11 篇文章 0 订阅

在使用有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

如果以上还没解决,请仔细查看报错提示,看哪些权限被限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值