天天看點

了解如何執行在Linux上運作的應用程式

先決條件

  概述

  有時候第一次在 linux 上運作一個應用程式需要一點額外工作。有些應用程式,比如伺服器服務,可能無法安裝為服務,是以您需要從指令行啟動這些應用程式。對于啟動這些應用程式的使用者帳戶而言,需要在應用程式檔案中設定執行許可标志 (x)。

  運作使用者空間應用程式

  預設情況下,隻有 root 使用者有權通路核心空間。root 使用者 是 linux 中的超級使用者,相當于 windows 中的管理者帳戶。在 root 使用者帳戶下運作應用程式可能會引起安全風險,是不可取的。

  很多伺服器服務需要 root 權限啟動服務。然而,服務啟動後,root 帳戶通常會将其移至服務帳戶。嚴格地說,linux 中的服務帳戶 才是标準的使用者帳戶。主要差別是服務帳戶僅用于運作一個服務,而不是為任何實際登入的使用者準備的。

  設定權限

  您可以使用 chmod 指令在一個檔案中設定執行權限。在 linux 中,umask 設定通常用來防止下載下傳的檔案被執行,也有充分的理由相信,因為它有助于維護 linux 計算機的安全性。

   大多數 linux 發行版具有一個值為 022 的 umask 設定,這意味着,預設情況下一個新檔案權限設定為 644。權限的數字表示形式采用讀 (4)、寫 (2)、執行 (1) 的格式。是以,預設權限為 644 的應用程式下載下傳意味着檔案所有者有讀寫權限,而組使用者和其他使用者隻有讀權限。

  例如,為每個人賦予一個檔案的執行權限,使用 chmod a+x 指令。a 表示所有人,加号 (+) 表示添加,而 x 表示執行。同樣地,如果應用程式是一個伺服器服務,您應該確定隻有授權帳戶才有權執行此服務。

  如果一個應用程式能夠在标準使用者帳戶權限下運作,但隻有特定組中的使用者才需要使用它,您可以将該組所有者權限設定為可執行,然後将這些使用者添加到該組中。

  更具體地說,您可以在一個可執行檔案中設定通路控制清單 (acl) 權限,賦予特定使用者或組權限來運作該應用程式。使用 setfacl 實用工具設定 acl 權限。

  對于這些需要以 root 使用者啟動程序的應用程式,比如伺服器服務,您有幾個選擇。總結了允許使用者執行需要 root 權限的伺服器服務的各種選項。

選項 

描述 

作為 root 使用者 

不推薦用于伺服器服務。當使用者已經知道 root 密碼而且應用程式洩露不是首要關注問題時,可用于應用程式。 

setuid 

由于安全問題,不推薦使用。setuid 允許标準使用者以另一個使用者方式,比如 root 使用者,執行一個檔案。 

sudo 

很常用,并且被認為是一個很好的實踐。sudo 授予一個使用者或組成員權限以執行可能額外需要 root 權限的檔案。該使用者不需要知道 root 密碼。 

帶有檔案權限的标準使用者帳戶 

在一個檔案上為使用者所有者、組所有者或其他人(所有人)設定執行權限。這是授予那些不需要 root 權限來執行應用程式的使用者的常用方法。 

帶有 acl 權限的标準使用者帳戶 

使用較少,但是如果您不想授予一個使用者 sudo 通路或者更改檔案的權限,這也是一個可行的解決方案。在一個檔案上使用 setfacl 指令,您可以授予一個特定使用者或使用者組執行該檔案的權力。 

  從指令行運作

 從指令行或者 shell 提示符執行應用程式的一個常用方法是使用 ./ 指令。如果您在 linux 中使用句号 (.) 和正斜杠 (/),就意味着告訴環境您想要以可執行檔案運作該檔案。例如,運作一個名為 myapp 的可執行檔案,您可以使用 ./myapp 指令。同樣地,您可以在檔案名之前加上語言環境,比如:

  ● sh

● php

● python

● perl

● java

  但更多情況下,套裝應用程式使用 shell 腳本,以 #! 符号設定環境變量提供該語言的運作時可執行路徑,比如 #!/usr/bin/python。您也應該熟悉這種方法。

  清單 1 使用 catalina.sh 預設腳本通過 ./ 方法啟動 apache tomcat 應用程式伺服器。然後,使用 sh 方法啟動伺服器。因為預設端口是 8080,标準使用者不需要對其進行特别修改就可以啟動該服務。

  清單 1. 從指令行執行應用程式

$ ./catalina.sh start 

using catalina_base:   /opt/apache-tomcat-7.0.26 

using catalina_home:   /opt/apache-tomcat-7.0.26 

using catalina_tmpdir: /opt/apache-tomcat-7.0.26/temp 

using jre_home:        /usr 

using classpath:   /opt/apache-tomcat-7.0.26/bin/bootstrap.jar: 

  /opt/apache-tomcat-7.0.26/bin/tomcat-juli.jar 

$ ./catalina.sh stop

..................................................................... 

$ sh catalina.sh start

using classpath:   /opt/apache-tomcat-7.0.26/bin/bootstrap.jar:

/opt/apache-tomcat-7.0.26/bin/tomcat-juli.jar

  考慮啟動一個典型 hypertext transfer protocol (http) web 伺服器。在 linux 中,任何低于 1024 的端口被認為是一個權限端口,隻有 root 可以打開權限端口。因為,預設情況下,web 伺服器運作于端口 80,root 需要啟動該程序。然而,如上所述,以 root 使用者運作一個服務被認為是不安全的。正确的步驟是以 root 啟動 該服務,然後将其轉移到一個标準使用者或者服務帳戶。

  幸運的是,許多伺服器服務由腳本來執行這一操作。如果您從頭開始建構 apache web 伺服器,您将會發現它以 root 使用者啟動,然後将 httpd 線程轉交給 apache 使用者。

  清單 2 啟動一個預設的 apache 2 web 伺服器編譯。安裝流程也做了一些事情,包括使 apachectl 指令可執行。因為該流程需要使用端口 80,使用 root 使用者權限啟動。然而,ps 指令顯示 httpd 流程在 apache 使用者帳戶下運作。

  清單 2. 啟動 apache web 伺服器

# cd /usr/local/apache2/bin 

# apachectl start 

#ps aux | grep httpd 

apache   23094  0.0  0.3  11784  1912 ?        s    10:41   0:00 /usr/sbin/httpd -k start 

apache   23095  0.0  0.3  11784  1912 ?        s    10:41   0:00 /usr/sbin/httpd -k start 

apache   23096  0.0  0.3  11784  1912 ?        s    10:41   0:00 /usr/sbin/httpd -k start 

apache   23097  0.0  0.3  11784  1912 ?        s    10:41   0:00 /usr/sbin/httpd -k start 

apache   23098  0.0  0.3  11784  1912 ?        s    10:41   0:00 /usr/sbin/httpd -k start

  在背景運作應用程式

  一些安裝的軟體可能不像 apache web 伺服器那樣使用者友好。您很可能需要在流程啟動後以背景方式運作它,除非您正在進行故障排除,或者想要看看應用程式到底怎麼了。如果您沒有這麼 做,shell 關閉後應用程式将終止。運作伺服器服務時,可不希望每次關閉終端 shell 或者退出時服務都會停止!

  如果在背景運作一個應用程式,即使關閉了 shell 視窗,應用程式也會繼續運作。您可以通過在執行指令結尾附加一個 (&) 符号來啟動應用程式。例如,您可以使用 vi 編輯器打開檔案,然後使用 vi /etc/sysconfig/network & 指令在背景運作該檔案,因為 & 可以打開 /etc/sysconfig/network 檔案并将其保留在背景。即使在退出後,您也可以使用 nohup 實用工具支援程序繼續運作。例如,nohup vi /etc/sysconfig/network &。

  清單 3 在 vim 編輯器中打開一個用來編輯的檔案,然後将其放在背景。

  清單 3. 在背景運作應用程式

# vi /etc/sysconfig/network & [1] 24940 # jobs [1]+  stopped   vi /etc/sysconfig/network

  您可以輸入 jobs 指令來檢視您在背景上運作的所有應用程式。為在背景上運作的每個任務配置設定了一個序列号,從 1 開始。 清單 3 中的任務序列号是 1。24940 是程序 id (pid)。您可以使用 fg 指令和特定的任務号将應用程式移到前台。在本例中,程序沒有被使用者所使用,是以顯示為 stopped。但是,指令 fg 1 打開終端并回到編輯檔案的活動程序。

  從桌面運作應用程式

  在 linux 中從桌面運作圖形使用者界面 (gui) 應用程式與在 windows 中沒多大差別。通常,您需要了解特定的桌面環境下應用程式在菜單中是如何分組的。linux 有足夠的桌面應用程式,可用于各種任務。有一些應用程式是 linux 本機固有的,還有另外一些應用程式可能是在一個常用運作時環境中使用 c# 開發的跨平台應用程式,比如,.net framework 應用程式。您會發現,使用一個 wine 這樣的虛拟環境,您甚至可以在 linux 上運作您最喜愛的 windows 應用程式。

linux 本機應用程式

  您很有可能會為您最喜愛的基于 windows 的應用程式找到一個替代的 linux 應用程式。在桌面上運作 linux 本機應用程式比較直覺。與 windows 一樣,您通常可以在菜單中找到這些已組織的應用程式,當您想要一個 windows 應用程式時,隻需單擊并運作即可。

  對于那些需要 root 權限的應用程式,将會提示您輸入 root 密碼,然後才開始運作。這在概念上類似于 windows 中的 run as administrator 選項。否則,您運作的所有程式都會位于您所登入帳戶的使用者空間中。

  在 windows 中,您可以建立桌面快捷鍵。linux 也有類似的快捷鍵 launcher,您可以将它放在面闆或桌面上。單擊 launcher 時,快捷鍵将執行程式。

  圖 1 顯示 gnome desktop 上 mozilla firefox web 浏覽器的兩個 launcher。一個 launcher 位于面闆上,另一個位于桌面上。

  圖 1. 檢視桌面或面闆上的 launcher

了解如何執行在Linux上運作的應用程式

mono

  許多 windows 應用程式都是使用 .net framework 開發的。mono 是 .net 的一個開源實作,可在很多平台上運作(包括 linux)。事實上,mono 網站稱其為 c# 和 common language runtime (clr) 的一個實作,與 .net 是二進制相容的。此項目目前由 xamarin 支援。

  在 linux 上,您可以執行使用 .net framework(或 mono)開發的應用程式,就像在 windows 上一樣。但是,記住 linux umask 和預設檔案權限。您仍然需要提供檔案的執行權限,這樣 linux 才會允許執行可執行檔案。

  在 mono(可以安裝在您的 linux gnome 桌面上)上開發的一些跨平台應用程式,比如 f-spot,同本機 gnome 應用程式一同位于菜單中。f-spot 是一個管理照片的開源應用程式。盡管它是 c# 應用程式,但是在 gnome 桌面上表現為一個本機應用程式。為應用程式建立一個 launcher 後,就可以像在 windows 中那樣單擊并運作。

  圖 2 示範了基于 mono 的應用程式 f-spot 的位置,以及為其建立桌面或面闆 launcher 的方法。

  圖 2. 為 f-spot 建立一個 launcher

了解如何執行在Linux上運作的應用程式

wine

  wine 使您可以在 linux 和其他作業系統上運作 windows 軟體。有了 wine,您就可以像在 windows 中那樣安裝和運作應用程式。wine 仍然在積極的發展中,而且并不是所有的 windows 程式都可以使用 wine。如果您的應用程式是為 windows 作業系統編譯的,您就會發現它可以使用 wine 來充分運作,前題是它是一個桌面應用程式而不是一個伺服器應用程式。一定要檢查 wine 文檔關于在 linux 上運作該應用程式的可行性,因為 wine 并不完全支援所有的應用程式。

  當您在 linux 中使用 wine 時,在您帳戶主目錄下有一個模拟 windows 環境的隐藏檔案夾,如 清單 4 所示。

  清單 4. 模拟 windows 環境的 wine 的隐藏檔案夾

$ cd /home/tbost/.wine/drive_c/windows 

$ls 

cf8e.tmp 

command 

explorer.exe 

fonts 

help 

hh.exe 

inf 

installer 

ls.txt 

microsoft.net 

notepad.exe 

pwd.txt 

regedit.exe 

rundll.exe 

system 

system32 

system.ini 

temp 

twain_32.dll 

twain.dll 

winhelp.exe 

winhlp32.exe 

win.ini 

winsxs

  使用 wine 安裝一個應用程式之後,您通常可以在桌面菜單中找到它,然後以在 windows 中同樣的方式來運作。

  例如,camstudio 是一個開源工具,用于記錄和管理螢幕視訊。目前還沒有 linux 作業系統的版本。但是,使用 wine 就可以在 linux 桌面安裝 windows 版本。與 wine 相關的應用程式通常分組為 applications > wine > programs,如 圖 3 所示。

  圖 3. 使用 wine 在 linux 上運作一個 windows 應用程式

了解如何執行在Linux上運作的應用程式

  結束語

  在管理一個 linux 伺服器時,您肯定會遇到從桌面和指令行執行軟體的問題。了解如何設定适當的權限和使用者帳戶後,您就可以安全地運作這些應用程式。使用長期運作的程序,比如 伺服器服務,您可以從指令行執行,并在背景進行适當設定。如果您的應用程式适合于從桌面運作,也可以那樣做,有時候甚至可以是 windows 應用程式!

====================================分割線================================

最新内容請見作者的github頁:http://qaseven.github.io/