当执行驱动器的递归目录扫描以通过在sudo下运行程序可执行文件来生成每个文件的哈希时,我发现有1,000个文件正在抛出“Permission拒绝“错误。Linux - 从Sudo读取文件 - “权限被拒绝”
我的问题:这是否由设计,为什么是sudo无法读取文件?我在做什么甚至可能,因为在扫描期间文件可能被加密或当前正在使用?
当我编译到Mac OSX并执行相同的扫描sudo下,我没有这个问题,只是Linux。
Distro: 3.19.0-25-generiC#26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
许可文件的实例否认:
Can't open file: "/sys/class/gpio/unexport"
MSG: "Permission denied"
Can't open file: "/sys/class/gpio/export"
MSG: "Permission denied"
的权限设置示例:
/sys/class/gpio$ ls -al
total 0
drwxr-xr-x 2 root root 0 Oct 5 04:51 .
drwxr-xr-x 57 root root 0 Oct 4 11:25 ..
--w------- 1 root root 4096 Oct 5 04:51 export
--w------- 1 root root 4096 Oct 5 04:51 unexport
MD5函数,其中文件读取失败:
QByteArray MD5(QString sPath)
{
QByteArray resultMD5 = NULL;
QFile* file = new QFile(sPath);
if(file->open(QIODevice::ReadOnly))
{
QCryptographicHash* pHashMD5 = NULL;
resultMD5 = pHashMD5->hash(file->readAll(),QCryptographicHash::Md5);
file->close();
//Clean up pointer
delete pHashMD5;
delete file;
}
else
{
qDebug() << "Can't open file: " << sPath;
qDebug() << "MSG: " << file->errorString();
file->close();
delete file;
}
return resultMD5;
}
+0
'/ sys/...'下的文件不是真实文件,它们不存在于硬盘上。根据这些*权限*即使'root'都没有读权限,它们是*只写*'文件'。 –
+0
你真的*想读/ sys,/ dev等吗?这不是像硬盘上的图像和音乐那样的文件,而是其他奇怪的东西。从别处引用:'sysfs是基于RAM的文件系统。它提供了一种方法来导出内核数据结构及其属性,以及它们与用户空间之间的链接.'和dev是完整硬盘和其他设备的节点列表, –
+0
Yeah *'怪物'*。这是我错过的技术术语! ; o) –