首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux上存储Qt应用程序数据文件-权限不足

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

Stack Overflow用户
提问于 2012-08-17 19:39:16
回答 2查看 584关注 0票数 0

我有Qt应用程序,这应该在多个平台上工作。其中一个平台就是Linux。我在Linux世界里完全是个新手。

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

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

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

或者可能在Linux目录结构中有另一个位置,默认情况下可用于存储应用程序的数据文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-17 20:20:19

您可以在没有安装脚本的情况下分发它,但您必须让它们以root用户身份运行一次……或者,如果系统范围的数据文件不存在,则使用gksudo/kdesudo让应用程序以root身份运行。

不过,习惯上是制作一个包含所有必要文件的包(.deb、.rpm,甚至是用户自己解压的.tar.gz )。

但是linux (以及OS )是多用户系统。您确定您的文件属于/var还是/usr?如果它们像您所说的那样是在运行时创建的,那么它们不依赖于用户输入吗?在这种情况下,您需要将它们放在用户主目录(getenv(" home "))内的某个目录中。

票数 1
EN

Stack Overflow用户

发布于 2012-08-17 19:57:30

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

但是,/var不一定是最佳选择: /var通常用于易失性数据(临时文件等),以及预期频繁更改的内容(邮件、日志文件等)。其他数据应放入以下两个文件中:

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12005053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档