我有Qt应用程序,这应该在多个平台上工作。其中一个平台就是Linux。我在Linux世界里完全是个新手。
我的应用程序需要创建和管理一组数据文件。在阅读了一些关于linux目录结构的链接后,我决定将数据文件存储在/var/myapp目录及其子目录中。
问题是:如果我的应用程序在没有超级用户权限的情况下运行,那么它就没有创建/var/myapp目录的权限。即使我手动创建目录(使用sudo),我的应用程序也没有在其中写入文件的权限。
是否可以临时将应用程序的权限从Qt代码提升到创建/var/myapp目录并在其中写入文件?
或者可能在Linux目录结构中有另一个位置,默认情况下可用于存储应用程序的数据文件?
发布于 2012-08-17 20:20:19
您可以在没有安装脚本的情况下分发它,但您必须让它们以root用户身份运行一次……或者,如果系统范围的数据文件不存在,则使用gksudo/kdesudo让应用程序以root身份运行。
不过,习惯上是制作一个包含所有必要文件的包(.deb、.rpm,甚至是用户自己解压的.tar.gz )。
但是linux (以及OS )是多用户系统。您确定您的文件属于/var还是/usr?如果它们像您所说的那样是在运行时创建的,那么它们不依赖于用户输入吗?在这种情况下,您需要将它们放在用户主目录(getenv(" home "))内的某个目录中。
发布于 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)。
https://stackoverflow.com/questions/12005053
复制相似问题