linux - 在 Linux 上存储 Qt 应用程序数据文件 - 权限不足

标签 linux qt permissions

我有 Qt 应用程序,它应该可以在多个平台上运行。其中一个平台是 Linux。我对 Linux 世界是全新的。

我的应用程序需要创建和管理一组数据文件。在阅读了一些关于 linux 目录结构的链接后,我决定将数据文件存储在/var/myapp 目录及其子目录中。

这就是问题所在:如果我的应用程序在没有 super 用户权限的情况下运行,那么它无权创建/var/myapp 目录。即使我将手动创建目录(使用 sudo),我的应用程序也无权在其中写入文件。

是否可以临时提升 Qt 代码的应用程序权限以创建/var/myapp 目录并在其中写入文件?

或者可能在 Linux 目录结构中有另一个地方默认可用于存储应用程序的数据文件?

最佳答案

只有 root 可以在/var 中创建目录。如果您的应用程序需要/var 下的子目录,您需要在安装期间创建它(通常以 root 权限运行),并适本地对其进行 chmod:为可能运行您的应用程序的用户创建一个组,将 /var/myapp 在该组中,并将其修改为 770;或者只是将目录更改为 777 以允许所有人访问它。如果要防止普通用户写入,请改用 755 或 750。 (对于数据文件,不要设置执行位:这里适当的权限是 666/660/644/640)。与 chmod 相比,您可能更喜欢使用更精细的助记符语法而不是八进制三元组,例如chmod ug+x filename 添加 (+) 执行位 (x) 到拥有用户的 filename ( u) 和组 (g)。

但是,/var 不一定是最佳选择:/var 通常用于 volatile 数据(临时文件等),以及预计会经常更改的内容(邮件、日志文件等)。其他数据应进入:

  • /usr/share/{appname} 用于系统范围的数据文件和资源
  • /etc/{appname} 用于系统范围的配置文件
  • ~/.{appname}(旧约定)或 ~/.config/{appname} 用于每个用户的配置文件
  • /var/tmp/{appname} 用于临时文件

此外,您希望使 /usr 前缀可配置;大多数发行版为包管理的文件保留 /usr,除了 /usr/local,它镜像 /usr 用于发行版外安装(所以在这种情况下,您的系统范围的资源将进入 /usr/local/share 而不是 /usr/share)。

关于linux - 在 Linux 上存储 Qt 应用程序数据文件 - 权限不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12005053/

相关文章:

apache - 我的 Web 应用程序保存的文件与父级具有不同的文件权限

macos - OS X El Capitan 中的 "restricted"文件夹/文件

linux - 检查参数是文件还是目录

linux - NLST FTP 命令应该返回带或不带绝对路径的记录吗?

linux - assembly 说明的含义

linux - 是否可以更改发生核心定时器中断的时间?

c++ - 来自 Internet 和 Qt 的 XML 文件

c++ - 如何有效地使用 QCustomPlot 绘制大型时间序列?

c++ - QT 程序在 connect() 后崩溃

php - 如何修复错误 "Fatal error: Uncaught --> Smarty: unable to write file"?