了解如何执行在Linux上运行的应用程序

先决条件

为了从本文中获得最大收益,您应该具有在Windows环境中使用桌面应用程序的经验。 我假设读者对如何使用Linux桌面有基本的了解。 拥有一台运行正常的Linux计算机来探索本文中的概念和示例将非常有益。

总览

有时,第一次在Linux上运行应用程序需要一些额外的工作。 某些应用程序(例如服务器服务)可能未作为服务安装,因此您需要从命令行启动这些应用程序。 对于启动应用程序的用户帐户,在应用程序文件上设置执行许可标志( x )。

运行用户空间应用程序

Linux在内核空间或用户空间中运行进程。 用户空间是应用程序通常在其中运行的操作系统区域。 简而言之,每个用户帐户都有其自己的用户空间,并且应用程序在该领域内运行。

默认情况下,只有root用户有权访问内核空间。 根用户是Linux中的超级用户,与Windows中的管理员帐户相当。 以root用户帐户运行应用程序会带来安全风险,因此不建议这样做。

许多服务器服务需要root权限才能启动服务。 但是,启动服务后,根通常会将其交给服务帐户。 Linux中的服务帐户在技​​术上是标准的用户帐户。 主要区别在于服务帐户仅用于运行服务,并不供任何人实际使用它们登录。

设置权限

您可以使用chmod命令设置文件的执行权限。 Linux中的umask设置通常也有充分的理由阻止下载的文件可执行,因为它可以帮助维护Linux计算机的安全性。

大多数Linux发行版的umask设置为022 ,这意味着默认情况下,新文件的权限设置为644 。 权限的数字表示形式为读取(4),写入(2)和执行(1)。 因此,默认权限为644的应用程序下载意味着文件所有者具有读取和写入权限,而组所有者和其他所有者具有只读权限。

例如,要授予所有人执行文件的权限,请使用chmod a+x命令。 a表示全部 ,加号( + )表示加号 , x表示执行 。 同样,如果应用程序是服务器服务,则应确保只有授权帐户才能执行该服务。

如果应用程序能够在标准用户帐户权限下运行,但是只有特定组中的用户才有权使用该应用程序,则可以将组所有者权限设置为可执行,并将用户添加到组中。

更具体地说,您还可以在可执行文件上设置访问控制列表(ACL)权限,以允许特定用户或组对运行应用程序的权限。 使用setfacl实用程序设置ACL权限。

对于需要以root用户身份启动该进程的那些应用程序,例如服务器服务,您有一些选择。 表1总结了允许用户执行需要root特权的服务器服务的各种选项。

表1.运行需要root特权的应用程序的选项
选项 描述
以root用户身份 不建议用于服务器服务。 当用户已经知道root密码并且应用程序的安全性不是主要问题时,应用程序可以接受。
SetUID 由于安全问题,不建议使用。 SetUID允许标准用户以另一个用户(例如root)的身份执行文件。
sudo 常用并被认为是一种很好的做法。 sudo授予用户或组成员执行文件的权限,否则该文件将需要root特权。 用户不需要知道root密码。
具有文件权限的标准用户帐户 为用户所有者,组所有者或其他(所有人)设置文件执行权限。 这是向不需要root特权的用户授予执行应用程序权限的常用方法。
具有ACL权限的标准用户帐户 不常用的方法,但是当您不想授予用户sudo访问权限或更改文件权限时的可行解决方案。 在文件上使用setfacl命令,可以授予特定用户或一组用户执行文件的权限。

从命令行运行

在管理Linux服务器时,从命令行运行应用程序是一项基本任务。 许多应用程序都具有外壳程序脚本(类似于Windows批处理文件(.bat)),这些脚本可以启动应用程序并执行其他任务,例如设置变量和将进程分配给其他用户。 例如,应用程序可能需要Java™虚拟机(JVM)才能执行。 在这种情况下,shell脚本可以设置适当的环境变量,然后执行Java命令以运行Java归档(JAR)或类文件。 这对于使用Perl,Python甚至C#的应用程序都适用。 (是的,C#编译的应用程序可以在Linux上运行!)

如果命令是Shell内置命令的一部分,或者该命令的目录位置包含在PATH变量中,则可以从命令行或Shell提示符仅使用文件名执行命令。 诸如“ ls”和“ cd”之类的命令是默认情况下通常包含在PATH中的命令示例,因为它们通常位于/ usr / local / bin或/ usr / bin目录中。 但是,如果未在PATH中设置文件位置,则必须包含文件的路径名。 例如,如果可执行文件myapp驻留在/ usr / share / scripts目录中,则键入/usr/share/scripts/myapp来执行脚本。 您还可以通过在文件名之前添加点(。)和斜杠(/)并键入./myapp来使用相对路径。 外壳程序中的点(。)指定“当前目录”。 (Windows在执行路径上包含工作目录,并且已知某些系统管理员在PATH中包含点(。)来模拟该路径,但是出于安全原因,不建议这样做。)同样,您可以在文件名前加上语言环境,例如:

  • 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 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

考虑启动典型的超文本传输​​协议(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服务器那么用户友好。 除非您要进行故障排除或希望完全了解应用程序的运行状况,否则您可能希望在过程开始后在后台运行它。 如果不这样做,则在关闭外壳程序后应用程序将终止。 运行服务器服务时,每次关闭终端外壳或以其他方式注销时,服务都会停止运行是不希望的!

如果您在后台运行应用程序,即使您关闭外壳程序窗口,该应用程序仍将继续运行。 可以通过附加符号(在后台启动的应用程序& )在执行命令的末尾。 例如,您可以使用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中的“以管理员身份运行”选项相似。 否则,您运行的所有应用程序都位于您登录帐户的用户空间中。

在Windows中,您可以创建桌面快捷方式。 Linux具有类似的称为启动器的快捷方式,您可以将其放置在面板或桌面上。 当您单击启动器时,它将执行程序。

图1显示了GNOME桌面上Mozilla Firefox Web浏览器的两个启动器。 一个启动器位于面板上,另一个位于桌面上。

图1.在桌面和面板上查看启动器
用于计算机,Firefox和tbosts主页的图标的屏幕截图

单核细胞增多症

许多Windows应用程序都是使用.NET Framework开发的。 Mono是.NET的开源实现,可在包括Linux在内的许多平台上运行。 实际上,Mono网站将其描述为C#和与.NET二进制兼容的公共语言运行时(CLR)的实现。 Xamarin当前支持该项目。

在Linux上,与在Windows上一样,执行使用.NET框架(或Mono)开发的应用程序。 但是,请记住Linux umask和默认文件权限。 您仍然需要提供对该文件的执行权限,以便Linux允许可执行文件执行。

您可以在Linux GNOME桌面上安装的一些Mono中开发的跨平台应用程序(例如F-Spot)位于本机GNOME应用程序的菜单上。 F-Spot是用于管理照片的开源应用程序。 即使它是C#应用程序,它在GNOME桌面上也显示为本地应用程序。 为应用程序创建启动器后,可以像在Windows中一样单击并运行。

图2展示了基于Mono的应用程序F-Spot的位置,以及如何为它创建桌面或面板启动器。

图2.为F-Spot创建启动器
如何打开菜单以创建启动器的屏幕截图

葡萄酒

Wine使您可以在Linux和其他操作系统上运行Windows软件。 使用Wine,您可以像在Windows中一样安装和运行这些应用程序。 Wine仍在积极开发中,并且并非所有Windows程序都可以使用Wine。 如果您的应用程序是针对Windows操作系统编译的,并且发现它可以使用Wine正常运行,则很可能是桌面应用程序而不是服务器应用程序。 请确保检查Wine文档,以了解在Linux上运行该应用程序的可能性,因为Wine无法完全支持所有应用程序。

在Linux上使用Wine时,在帐户主目录中有一个模拟Windows环境的隐藏文件夹,如清单4所示

清单4. Wine的模拟Windows环境的隐藏文件夹
$ 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,我将Windows版本安装在Linux桌面上。 与葡萄酒相关的应用程序通常被分组在“ 应用程序”>“葡萄酒”>“程序”下如图3所示

图3.使用Wine在Linux上运行Windows应用程序
使用Wine在Linux上运行Windows应用程序的屏幕截图

结论

在管理Linux服务器时,您一定会遇到从桌面和命令行执行的软件。 当您了解如何设置适当的权限和用户帐户后,就可以安全地运行那些应用程序。 对于长时间运行的进程(例如服务器服务),您可以从命令行执行并在后台进行适当设置。 如果您有适合从桌面运行的应用程序,那么您也可以做到这一点-有时甚至是Windows应用程序!


翻译自: https://www.ibm.com/developerworks/opensource/library/l-linuxappswindows/index.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值