执行在Linux上运行的应用程序

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

————————————————————————————————作者:————————————————————————————————日期:

2

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

关键字:Linux

先决条件

要充分理解本文,必须具备Windows 环境下桌面应用程序的工作经验,我认为读者对如何使用Linux 桌面有一个基本的了解。使用一个运行的Linux 计算来机探讨本文的概念和示例是很有帮助的。

概述

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

运行用户空间应用程序

Linux 在内核空间或用户空间运行进程。用户空间是操作系统的区域,应用程序通常在此运行。简单地说,每个用户帐户有其自己的用户空间,应用程序在这个领域内运行。

默认情况下,只有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 命令,您可以授予一个特定用户或用户组执行该文件的权力。

从命令行运行

在管理Linux 服务器时,从命令行运行应用程序是一项基本的任务。很多应用程序使用shell 脚本(类似于Windows 批处理文件.bat)来启动应用程序并执行其他任务,比如设置变量以及为其他用户分配进程。例如,应用程序可能需要一个Java?Virtual Machine (JVM) 来执行。那样的话,shell 脚本可以设置适当的环境变量,然后执行Java 命令来运行Java Archive (JAR) 或类文件。这同样适用于使用Perl、Python、甚至C# 的应用程序。(当然,C# 编译的应用程序可以在Linux 上运行)

从命令行或者shell 提示符执行应用程序的一个常用方法是使用./ 命令。如果您在Linux 中使用句号(。) 和正斜杠(/),就意味着告诉环境您想要以可执行文件运行该文件。例如,运行一个名为myapp 的可执行文件,您可以使用./myapp 命令。同样地,您可以在文件名之前加上语言环境,比如:

sh

php

python

perl

java

但更多情况下,套装应用程序使用shell 脚本,以#! 符号设置环境变量提供该语言的运行时可执行路径,比如#!/usr/bin/python.您也应该熟悉这种方法。

清单 1 使用catalina.sh 默认脚本通过./ 方法启动Apache Tomcat 应用程序服务器。然后,使用sh 方法启动服务器。因为默认端口是8080,标准用户不需要对其进行特别修改就可以启动该服务。

清单 1. 从命令行执行应用程序

考虑启动一个典型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 服务器

在后台运行应用程序

一些安装的软件可能不像Apache Web 服务器那样用户友好。您很可能需要在流程启动后以后台方式运行它,除非您正在进行故障排除,或者想要看看应用程序到底怎么了。如果您没有这么做,shell 关闭后应用程序将终止。运行服务器服务时,可不希望每次关闭终端shell 或者退出时服务都会停止!

如果在后台运行一个应用程序,即使关闭了shell 窗口,应用程序也会继续运行。您可以通过在执行命令结尾附加一个(&) 符号来启动应用程序。例如,您可以使用vi 编辑器打开文件,然后使用vi /etc/sysconfig/network & 命令在后台运行该文件,因为& 可以打开/etc/sysconfig/network 文件并将其保留在后台。即使在退出后,您也可以使用nohup 实用工具支持进程继续运行。例如,nohup vi /etc/sysconfig/network &.

清单 3 在Vim 编辑器中打开一个用来编辑的文件,然后将其放在后台。

清单 3. 在后台运行应用程序

您可以输入jobs 命令来查看您在后台上运行的所有应用程序。为在后台上运行的每个

相关文档
最新文档