我有一個應用程序,我已經寫了Windows,我正在移植到Linux(Ubuntu具體)。問題是我一直只使用Linux,從來沒有真正爲它開發過。更具體地說,我不瞭解系統的基本佈局。例如,我應該在哪裏安裝我的軟件?我希望所有用戶都可以訪問它,但我需要向該區域寫入權限才能編輯我的數據文件。此外,如何以程序化的方式確定軟件的安裝位置(而不是簡單地從哪裏調用)?在Windows中,我使用註冊表來查找具有所有相關信息的配置文件,但Linux中沒有註冊表。謝謝!如何設計與Windows有關的Linux軟件?
回答
The Filesystem Hierarchy Standard(錯誤 - 它不是一個標準)對你很有幫助;它清楚地描述了管理員對數據存儲位置的偏好。
由於你是第一次打包你的軟件,我想推薦做很少。 Debian,Ubuntu,Red Hat,SuSE,Mandriva,Arch,Annvix,Openwall,PLD等等都有自己的特點,關於如何最好地打包軟件。
建設
最好的辦法是提供一個源碼包是建立和希望用戶或包裝商爲那些分佈撿起來,並打包給你。用戶可能會在下載壓縮包,解包,編譯和安裝時很好。
對於構建軟件,make(1)
是通常的標準。其他工具存在,但是這個工具無處不在,而且非常合理。 (即使語法是胡思亂想。)用戶預計將能夠運行:make ; make install
或./configure ; make ; make install
默認情況下生成並將您的軟件安裝到/usr/local
。 (./configure
是autotools工具鏈的一部分;特別適合提供./configure --prefix=/opt/foo
以允許用戶通過一個命令行參數更改安裝軟件的位置。儘可能避免autotools,但在某些時候,更容易編寫便攜式軟件與他們比沒有他們。)
包裝
如果你確實要提供一站式的包裝,那麼Debian Policy Manual將提供如何打包軟件的規範規則。 Debian New Maintainers Guide將爲Debian和Debian派生系統的軟件包提供一個更加親切,溫和的演練。
Ubuntu's Packaging Guide可能有特定於Ubuntu的細節。當涉及到你的應用程序的配置文件,通常將文件存儲在/etc/<foo>
其中<foo>
代表程序/包(我還沒有看呢。)
配置
。見/etc/resolv.conf
的名稱解析,/etc/fstab
詳細信息包含文件系統並在安裝它們,/etc/sudoers
爲sudo(8)
配置,/etc/apt/
爲apt(8)
包管理系統的設備列表等
有時應用程序也按用戶提供組態;這些配置文件通常存儲在~/.foorc
或~/.foo/
中,以防整個目錄比文件更有用。 (見~/.vim/
,~/.mozilla/
,~/.profile
等)
如果你也想提供一個-c <filename>
命令行選項來告訴你的程序使用非標準配置文件,有時進來真正得心應手。 (特別是如果你的用戶可以運行foo -c /dev/null
與完全默認配置啓動。)
數據文件
用戶將存儲在自己的主目錄它們的數據。你不需要對此做任何事情;只需確保通過getenv("HOME")
啓動目錄導航框,或通過sprintf(config_dir, "%s/%s/config", getenv("HOME"), ".application");
或類似的東西加載配置文件。 (他們沒有權限在大多數站點上寫入除主目錄和/tmp/
以外的任何地方。)
有時所有數據都可以存儲在隱藏文件或目錄中;例如,ssh(1)
將其所有數據保存在~/.ssh/
中。通常情況下,用戶需要ssh-keygen(1)
中的默認kry名稱,以便ssh-agent(1)
能夠以最少的煩惱找到密鑰。 (它默認使用~/.ssh/id_rsa
。)shotwell(1)
照片管理器提供了管理的體驗,類似於Apple的iPhoto.app
。它可以讓用戶選擇一個起始目錄,但是它可以按照它認爲合適的方式組織文件和目錄。
如果您的應用程序是通用程序,您可能會讓用戶選擇自己的文件名。如果他們想要直接將數據存儲到安裝在/dev
或/media
中的記憶棒或安裝到/automount/blah
中的遠程文件系統,則可以將它們的主目錄,/srv/
目錄中的內容提供給計算機上的內容,或/tmp/
。用戶需要爲他們的數據選擇合理的文件名和目錄。這是由用戶有適當的權限已經。 (不要試圖爲用戶在沒有權限的位置寫入機制。)
應用程序文件的安裝和所有權
有一個Linux系統上安裝的應用程序兩種常用方法:
管理員安裝一次,給大家。這是平常的。該方案是擁有由
root
或bin
或adm
或一些類似的帳戶。程序運行作爲用戶執行它們的任何一個,因此它們獲得用戶創建和讀取文件的權限。如果它們與分發打包文件打包在一起,則可執行文件通常會生存在/usr/bin/
,庫文件爲/usr/lib/
,非目標文件(圖像,模式等)將生存在/usr/share/
中。 (/bin/
和/lib/
是在年初啓動或救援環境所需的應用程序。/usr
可能是常見到網絡中的所有計算機,只讀方式掛載在開機的過程中下旬。)(見FHS的全部細節。)如果程序是未打包的,則
/usr/local/
將作爲起點:/usr/local/bin/
,/usr/local/lib/
,/usr/local/share/
等。有些管理員更喜歡/opt/
。用戶將應用程序安裝到他們的主目錄中。這種情況並不常見,但許多用戶將在其中存儲shell腳本或程序的目錄中存在目錄,或鏈接到目錄中的
~/Local/<foo>/
目錄中的程序。 (沒有什麼魔術有關的名字。這只是我想起了幾年前的第一件事。其他選擇的其他名稱。)這是./configure --prefix=~/Local/blah
爲自己支付。)
在Linux中,一切都是文本,即ASCII。
配置存儲在通常具有.conf擴展名並存儲在/ etc文件夾中的配置文件中。
您的應用程序的可執行文件通常駐留在/usr/bin
文件夾中。您的應用程序的數據文件可以轉至/usr/lib
或/usr/
文件夾中的文件夾。
重要的是要考慮您正在編寫應用程序的語言。在C/C++中,自定義makefile
用於執行安裝,將這些文件複製到各自的文件夾中。通過跟蹤.conf文件並在使用bash腳本生成時存儲位置,可以跟蹤安裝的位置。
你應該真的知道bash腳本以便自動完成這一切。
- 1. Windows軟件的設計字體
- 2. '羣集'軟件與MPI有何關係?
- 3. 軟件項目中的軟件設計
- 4. 有關backup-prog的基本軟件設計問題。在D
- 5. Reversi軟件設計
- 6. Python軟件設計
- 7. 只有接口的軟件設計?
- 8. 如何驗證軟件設計?
- 9. 如何提高軟件設計技能?
- 10. 軟件設計,如何設計一個有兩個職責的函數
- 11. 軟與在Linux中
- 12. 如何做物聯網設備的軟件部署(基於Linux)?
- 13. 如何在ruby中設置與Windows相關的文件屬性?
- 14. 自動機設計軟件
- 15. 軟件設計策略
- 16. Rails Schema設計軟件?
- 17. 模塊化軟件設計
- 18. 設計防火牆軟件
- 19. 軟件設計問題
- 20. 軟件設計網站
- 21. 並行軟件設計
- 22. Linux Kiosk軟件?
- 23. GNU如何與Linux相關?
- 24. 如何列出/使用C++在Windows計算機上安裝所有軟件和相關的.exe文件?
- 25. 面向組件的軟件和設計
- 26. 用於軟件設計的Eclipse插件
- 27. 查找關於java中的類,軟件設計的信息?
- 28. 軟件設計和建模與軟件分析之間的區別
- 29. Python:如果我的軟件包在Linux,Mac和Windows上運行,我該如何測試我的軟件包
- 30. 是否有Linux Ubuntu的adt軟件包?
我喜歡這個努力和長時間的回答,但是有兩樣東西丟失了:1.數據文件怎麼樣?他們去哪裏? 2.如果管理員安裝該軟件,它會發生什麼? – chacham15
@ chacham15,我進一步擴展了細節 - 讓我知道它是否有幫助。你可能想看一下'stow'包,這可以使管理'/ usr/local /'目錄更容易。 – sarnold
是的,好多了,但我不清楚。該程序本身有2組數據,它需要存儲所有這些數據都不是由用戶管理的,用戶不需要擔心。 1:關於應用程序的全局信息(即用戶獨立信息)和2:關於用戶的信息。我不希望這些在用戶可見的目錄中,因爲用戶不應該搞亂甚至看到這些文件。那麼,我把它們放在哪裏? – chacham15