如何设计与Windows相关的Linux软件?

如何设计与Windows相关的Linux软件?,windows,ubuntu,porting,Windows,Ubuntu,Porting,我有一个为Windows编写的应用程序,我正在将其移植到Linux(具体来说是Ubuntu)。问题是我一直只使用Linux,从未真正为它开发过。更具体地说,我不了解系统的基本布局。例如,我应该在哪里安装我的软件?我希望所有用户都能访问该区域,但我需要该区域的写入权限才能编辑我的数据文件。此外,我如何以编程方式确定软件安装在何处(而不仅仅是从何处调用)?在windows中,我使用注册表来定位配置文件,该文件包含所有相关信息,但Linux中没有注册表。谢谢 在Linux中,所有内容都是文本,即ASC

我有一个为Windows编写的应用程序,我正在将其移植到Linux(具体来说是Ubuntu)。问题是我一直只使用Linux,从未真正为它开发过。更具体地说,我不了解系统的基本布局。例如,我应该在哪里安装我的软件?我希望所有用户都能访问该区域,但我需要该区域的写入权限才能编辑我的数据文件。此外,我如何以编程方式确定软件安装在何处(而不仅仅是从何处调用)?在windows中,我使用注册表来定位配置文件,该文件包含所有相关信息,但Linux中没有注册表。谢谢

在Linux中,所有内容都是文本,即ASCII

配置存储在通常具有.conf扩展名的配置文件中,并存储在/etc文件夹中

应用程序的可执行文件通常位于
/usr/bin
文件夹中。应用程序的数据文件可以转到
/usr/lib
/usr/
文件夹中的文件夹

重要的是要考虑你正在编写的应用程序中的语言。在C/C++中,使用自定义的
makefile
进行安装,将这些文件复制到相应的文件夹中。通过跟踪.conf文件并在使用bash脚本生成时存储位置,可以跟踪安装位置

为了使这一切自动化,您应该真正了解bash脚本。

(命名错误——这不是一个标准)将对您非常有帮助;它清楚地描述了管理员对数据应该驻留的位置的首选项

因为您是第一次打包软件,所以我建议您只做很少的工作。Debian、Ubuntu、redhat、SuSE、Mandriva、Arch、Annvix、Openwall、PLD等等,对于如何最好地打包软件,都有自己的小特点

建筑

您最好的选择是提供一个源tarball,用于构建并希望这些发行版的用户或打包人员能够为您选择并打包它。用户可能可以下载tarball、解包、编译和安装

对于构建软件,这是通常的标准。其他工具也存在,但这个工具随处可见,而且非常合理。(即使语法是古怪的),用户也希望能够运行:
make;进行安装
配置;制作使install
在默认情况下将软件构建并安装到
/usr/local
。(
/configure
是工具链的一部分;特别是提供了
/configure--prefix=/opt/foo
,允许用户使用一个命令行参数更改软件的安装位置。我会尽量避免使用自动工具,但在某些情况下,使用自动工具编写便携式软件比不使用自动工具更容易他们。)

包装

如果您确实希望提供一站式打包,那么将提供有关如何打包软件的规范规则。将为Debian和Debian衍生系统构建软件包提供更友好、更温和的工具演练

可能有特定于Ubuntu的详细信息。(我还没读过。)

配置

当涉及到应用程序的配置文件时,文件通常存储在
/etc/
中,其中
表示程序/包。有关名称解析的详细信息,请参见
/etc/resolv.conf
/etc/fstab
查看包含文件系统的设备列表及其安装位置,
/etc/sudoers
查看
sudo(8)
配置,
/etc/apt//code>查看
apt(8)
包管理系统等

有时应用程序还提供每个用户的配置;这些配置文件通常存储在
~/.foorc
~/.foo/
中,以防整个目录比文件更有用。(参见
~/.vim/
~/.mozilla/
~/.profile
等)

如果您还想提供一个
-c
命令行选项来告诉您的程序使用非标准配置文件,这有时会非常方便。(特别是如果您的用户可以运行
foo-c/dev/null
以完全默认配置启动。)

数据文件

用户将在其主目录中存储数据。你不需要为此做任何事情;只需确保使用
getenv(“HOME”)
启动目录导航框,或通过
sprintf(config_dir,“%s/%s/config”,getenv(“HOME”),“.application”)加载配置文件即可或类似的东西。(除了主目录和大多数站点的
/tmp/
之外,他们没有任何地方的写入权限。)

有时,所有数据都可以存储在隐藏的文件或目录中<例如,code>ssh(1)
将其所有数据保存在
~/.ssh/
中。通常,用户希望从
ssh-keygen(1)
获得默认的kry名称,因此
ssh-agent(1)
可以轻松找到密钥。(默认情况下,它使用
~/.ssh/id_rsa
shotwell(1)
照片管理器提供了一种管理体验,类似于苹果的
iPhoto.app
。它允许用户选择起始目录,但也可以根据需要在其中组织文件和目录

如果您的应用程序是通用程序,您可能会让用户选择自己的文件名。如果他们想将数据直接存储到安装在
/dev
/media
中的记忆棒,或安装在
/automount/blah
中的远程文件系统,他们的主目录,机器上服务内容的
/srv/
目录,或
/tmp/
,让他们来吧。由用户为其数据选择合理的文件名和目录。这取决于用户是否拥有