0

複数のプラットフォームで動作する Qt アプリケーションがあります。それらのプラットフォームの 1 つが Linux です。私はLinuxの世界ではまったく新しいです。

私のアプリケーションでは、一連のデータ ファイルを作成および管理する必要があります。Linux ディレクトリ構造に関するいくつかのリンクを読んだ後、データ ファイルを /var/myapp ディレクトリとそのサブディレクトリに保存することにしました。

問題は次のとおりです。アプリケーションがスーパーユーザー権限なしで実行されている場合、/var/myapp ディレクトリを作成する権限がありません。手動で (sudo を使用して) ディレクトリを作成しても、アプリケーションにはそこにファイルを書き込む権限がありません。

/var/myapp ディレクトリを作成してそこにファイルを書き込むために、Qt コードからアプリケーションのアクセス許可を一時的に昇格させることは可能ですか?

または、アプリケーションのデータ ファイルを保存するためにデフォルトで利用できる Linux ディレクトリ構造の別の場所があるのでしょうか?

4

2 に答える 2

3

/var にディレクトリを作成できるのは root だけです。アプリケーションで /var の下にサブディレクトリが必要な場合は、インストール時に作成し (通常は root 権限で実行されます)、適切に chmod する必要があります: アプリケーションを実行する可能性のあるユーザーのグループを作成し、/var/myappそのグループに入れ、chmod します。それへ770; または、ディレクトリをchmodし777て、全員がアクセスできるようにします。通常のユーザーによる書き込みを防止したい場合は、代わりに 755 または 750 を使用してください。(ただし、データ ファイルの場合は、実行ビットを設定しないでください。ここでの適切なアクセス許可は 666/660/644/640 です)。chmod ug+x filename8 進数のトリプレット+の代わりxに、chmod よりも複雑なニーモニック構文を好むかもしれませfilenameん。ug

ただし、/var が必ずしも最良の選択であるとは限りません。/var は通常、揮発性データ (一時ファイルなど) や、頻繁に変更されることが予想されるもの (メール、ログ ファイルなど) に使用されます。他のデータは次のいずれかに入る必要があります。

  • /usr/share/{appname}システム全体のデータ ファイルとリソース用
  • /etc/{appname}システム全体の構成ファイル用
  • ~/.{appname}(古い規則) または~/.config/{appname}ユーザーごとの構成ファイル用
  • /var/tmp/{appname}一時ファイル用

/usrまた、プレフィックスを構成可能にしたいと考えています。ほとんどのディストリビューションは、ディストリビューション外のインストールをミラーリングする/usrを除いて/usr/local、パッケージ管理ファイル用に予約/usrされています (その場合、システム全体のリソースは/usr/local/shareではなく に入ります/usr/share)。

于 2012-08-17T11:57:29.697 に答える
1

インストール スクリプトなしで配布することもできますが、一度 root として実行するように指示する必要があります... または、システム全体のデータ ファイルが存在しない場合は、gksudo/kdesudo を使用してアプリ自体を root として実行する必要があります。
ただし、必要なすべてのファイルを含むパッケージ (.deb、.rpm、またはユーザーが自分で展開する .tar.gz など) を作成するのが習慣です。

しかし、Linux (さらに言えば OS X) はマルチユーザー システムです。あなたのファイルは /var または /usr に属していますか? あなたが言うように実行時に作成される場合、ユーザー入力に依存していませんか? その場合、ユーザーのホーム ディレクトリ (getenv("HOME")) 内のディレクトリに配置する必要があります。

于 2012-08-17T12:20:18.777 に答える