Linux - 从 Sudo 读取文件 - "Permission Denied"
Linux - Reading File from Sudo - "Permission Denied"
当执行驱动器的递归目录扫描以通过 运行 sudo
下的可执行程序为每个文件生成哈希时,我发现有 1,000 个文件正在抛出 "Permission Denied" 错误。
我的问题:这是设计使然,为什么 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;
}
/sys 下的不是真正的文件。它是进入内核的接口。
关于您提到的示例,请参阅 here 了解它们的作用。
鉴于它们的功能,认为这样的 "files" 可以被读取是没有意义的。
当执行驱动器的递归目录扫描以通过 运行 sudo
下的可执行程序为每个文件生成哈希时,我发现有 1,000 个文件正在抛出 "Permission Denied" 错误。
我的问题:这是设计使然,为什么 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;
}
/sys 下的不是真正的文件。它是进入内核的接口。
关于您提到的示例,请参阅 here 了解它们的作用。
鉴于它们的功能,认为这样的 "files" 可以被读取是没有意义的。