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

合集下载

linux的使用方法

linux的使用方法

linux的使用方法Linux是一个开源的操作系统,它提供了丰富的功能和灵活性。

以下是一些基本的Linux使用方法:1. 基本命令行操作:- 打开终端:在Linux系统中,可以通过键盘上的快捷键组合(通常是Ctrl+Alt+T)或者在应用程序菜单中找到终端应用来打开命令行终端。

- 文件和目录操作:可以使用命令如`ls`(列出文件和目录)、`cd`(改变当前目录)、`pwd`(显示当前目录)、`mkdir`(创建目录)、`cp`(复制文件或目录)、`rm`(删除文件或目录)等来操作文件和目录。

- 文本编辑器:Linux中有许多文本编辑器可供选择,比如Vim、Emacs、Nano等。

可以通过命令行打开文件进行编辑,例如`vim filename`。

2. 包管理器:- 大多数Linux发行版都提供了包管理器来简化软件的安装和升级过程。

比如Debian系列的APT、Red Hat系列的YUM/DNF、Arch 系列的Pacman等。

可以使用适合自己发行版的包管理器命令来搜索、安装、更新和删除软件包。

3. 用户和权限管理:- Linux是一个多用户系统,每个用户都有自己的账户和权限。

可以使用`useradd`和`userdel`命令来创建和删除用户账户,使用`passwd`命令设置用户密码。

使用`sudo`命令可以给用户授权执行特定的命令或操作。

4. 网络配置:- Linux提供了各种命令和工具来配置网络连接。

使用`ifconfig`或者`ip addr`命令来查看和配置网络接口。

使用`ping`命令来测试网络连通性,使用`nslookup`或`dig`命令来查询域名解析。

可以编辑`/etc/network/interfaces`文件或者使用网络管理工具如NetworkManager来配置网络。

5. 软件编译和安装:- 有些软件可能无法通过包管理器直接安装,需要先下载源代码,然后编译和安装。

一般的步骤包括解压源码包、运行`configure`脚本、运行`make`命令进行编译,最后使用`make install`命令安装。

Linux命令行使用技巧如何使用nohup命令在后台运行程序

Linux命令行使用技巧如何使用nohup命令在后台运行程序

Linux命令行使用技巧如何使用nohup命令在后台运行程序在Linux命令行中,nohup命令是一个非常有用的工具,可以让我们在后台运行程序,而无需担心终端退出后程序的运行终止。

本文将介绍如何正确使用nohup命令,并提供一些使用技巧,帮助您更好地利用这个命令。

一、什么是nohup命令?nohup是“no hang up”的缩写,表示“不挂断”。

它是一个在Unix和Linux系统中常用的命令,用于在后台运行程序,与终端的连接断开后仍然保持程序的运行。

二、nohup命令的基本语法nohup命令的基本语法如下:nohup command [args] &其中,command表示要运行的命令,args表示命令的参数。

&符号的作用是将命令放到后台运行。

三、nohup命令的使用示例1. 后台运行一个命令假设我们要运行一个名为example.py的Python脚本,并将其放到后台运行,可以使用以下命令:nohup python example.py &2. 将输出保存至文件默认情况下,nohup命令会将程序的输出打印到nohup.out文件中。

如果我们想将输出保存到其他文件中,可以使用重定向符号">"。

例如,将输出保存到output.txt文件中的命令如下:nohup python example.py > output.txt &3. 追加输出至文件如果希望将输出追加到现有的文件中,可以使用重定向符号">>"。

例如,将输出追加到output.txt文件中的命令如下:nohup python example.py >> output.txt &4. 忽略输入在某些情况下,程序可能需要等待用户的输入,但在后台运行时无法获取输入。

可以使用重定向符号"/dev/null"将输入重定向到空设备,从而忽略输入。

linux elf执行流程

linux elf执行流程

linux elf执行流程Linux ELF 执行流程ELF(Executable and Linkable Format)是Linux系统中可执行文件的一种格式。

在Linux下,当我们执行一个可执行文件时,操作系统会按照一定的流程解析和执行该文件。

本文将介绍Linux ELF 的执行流程。

1. ELF文件格式ELF文件由多个段(section)组成,每个段都有特定的作用。

常见的段包括.text段(包含程序的指令)、.data段(包含程序的全局变量和静态变量)、.bss段(包含未初始化的全局变量和静态变量)等。

2. 加载可执行文件当用户在终端输入可执行文件名并按下回车键时,操作系统会通过解析文件头判断该文件是否为有效的ELF文件。

如果是有效的ELF 文件,操作系统会为该进程分配一块内存空间,并将ELF文件中的各个段加载到相应的内存地址上。

3. 解析程序入口操作系统会根据ELF文件中的程序入口地址(Entry Point)来确定程序的入口点。

程序入口地址通常位于.text段的起始位置。

操作系统将程序计数器(PC)设置为程序入口地址,从而开始执行程序。

4. 执行程序指令程序从程序入口地址开始执行,按照顺序执行.text段中的指令。

每条指令都会被解码和执行,直到程序结束或者遇到跳转指令。

5. 解析跳转指令在程序执行过程中,可能会遇到跳转指令(如条件跳转、无条件跳转、函数调用等)。

当遇到跳转指令时,操作系统会根据指令中的目标地址重新设置程序计数器,从而改变程序的执行流程。

6. 处理函数调用当程序执行到函数调用指令时,操作系统会将函数的返回地址和参数等信息保存到栈中,并跳转到函数的入口地址执行。

函数执行完毕后,操作系统会从栈中恢复返回地址,继续执行函数调用指令后面的指令。

7. 处理系统调用程序中可能会包含系统调用指令,用于请求操作系统提供各种服务。

当遇到系统调用指令时,操作系统会切换到内核态,执行相应的系统调用处理程序,并返回结果给用户程序。

linux运行程序命令

linux运行程序命令

linux运⾏程序命令
1. nohup
nohup命令:如果你正在运⾏⼀个进程,⽽且你觉得在退出帐户时该进程还不会结束,那么可以使⽤nohup命令。

该命令可以在你退出帐户/关闭终端之后继续运⾏相应的进程。

nohup就是不挂断的意思( no hang up)。

该命令的⼀般形式为:nohup command &
使⽤nohup命令提交作业
如果使⽤nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到⼀个名为nohup.out的⽂件中,除⾮另外指定了输出⽂件:nohup command > myout.file 2>&1 &
在上⾯的例⼦中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输⼊到myout.file⽂件中。

[精品]linux下编译运行程序命令大全

[精品]linux下编译运行程序命令大全

gcc警告提示功能
当GCC在编译不符合ANSI/ISO C语言标准的源代码时,如果加上了pedantic选项,那么使用了扩展语法的地方将产生相应的警告信息:
# gcc -pedantic illcode.c -o illcode illcode.c: In function `main': illcode.c:9: ISO C89 does not support `long long' illcode.c:8: return type of `main' is not `int'
编译并运行上述代码,会产生一个严重的段错误 (Segmentation fault)如下:
gcc -g crash.c -o crash ./crash Input an integer:10 Segmentation fault
程序调试工具—gdb
使用下表中的命令,可以进行shell中的命令
项目问题二—C程序的编译
Linux应用程序表现为2种特殊类型的文件:可执行文 件和脚本文件。可执行文件是计算机可以直接运行的 程序,相当于Windows的.exe文件。脚本文件是一组 指令的集合,相当于Windows的.bat文件。 在POSIX兼容的系统中,C语言编译器被称为 c89.Linux尽量实现相关标准,c89,cc和gcc这些命 令全都指向系统的C语言编译器,通常是GNU C编译 器,或者称为gcc。
需要注意的是,-pedantic编译选项并不能保证被编译程序与ANSI/ISO C 标准的完全兼容,它仅仅只能用来帮助Linux程序员离这个目标越来越近。 或者换句话说, -pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码,但不是全部,事实上只有ANSI/ISO C语言标准中要求进行 编译器诊断的那些情况,才有可能被GCC发现并提出警告。 除了-pedantic之外,GCC还有一些其它编译选项也能够产生有用的警告 信息。这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能 够使GCC产生尽可能多的警告信息:

Linux 进程的启动方式

Linux  进程的启动方式

Linux 进程的启动方式程序或者命令的执行实际上是通过进程实现的。

通常情况下,程序或者命令是保存在硬盘上的,当在命令行中输入一个可执行程序的文件名或者命令并按下Enter 键后,系统内核就将该程序或者命令的相关代码加载到内存中开始执行。

系统会为该程序或者命令创建一个或者多个相关的进程,通过进程完成特定的任务。

启动进程的方式有两种,分别为前台启动方式和后台启动方式。

1.以前台方式启动进程在终端窗口的命令行上输入一个Linux命令并按Enter键,以前台方式启动了一个进程。

例如,在终端窗口上执行“find /-name myfile.txt”命令,就可以以前台的方式启动一个进程。

而在该进程还未执行完时,可按下Ctrl+z组合键将该进程暂时挂起。

然后,可以使用ps命令查看该进程的有关信息,如图41所示。

图41 前台方式启动进程2.以后台方式启动进程在前台运行的进程是正在进行交互操作的进程,它可以从标准输入设备接收输入,并将输出结果送到标准输出设备,在同一时刻只能有一个进程在前台运行。

而在后台运行的进程一般不需要进行交互操作,不接收终端的输入。

通常情况下,可以让一些运行时间较长而且不接受终端输入的程序以后台方式运行,让操作系统调度它。

要在命令行上以后台方式启动进程,需要在执行的命令后添加一个“&”。

例如,在终端窗口的命令行上输入命令“find / -name myfile2.txt &”并按下Enter键后将从后台启动一个进程。

启动后,系统会显示如下所示的信息:[2] 3516这里的数字2表示该进程是运行于后台的第2个进程,数字3516是该进程的PID(即进程标识码,用于惟一地标识一个进程)。

然后,出现了shell提示符,这表示已返回到前台。

这时,执行ps命令将能够看到现在在系统中有两个由find命令引起的进程,它们的标识号是不同的,因而是两个不同的进程,其中,PID为3385的进程就是刚才被挂起的进程。

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

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

如何执行在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 命令。

springboot在linux后台运行的方法

springboot在linux后台运行的方法

springboot在linux后台运行的方法要在Linux后台运行Spring Boot应用程序,你可以使用以下方法:1. 使用nohup命令- 运行以下命令:`nohup java -jar your-application.jar &`- "nohup"命令用于禁止进程在终端关闭时终止。

- "java -jar your-application.jar"用于启动Spring Boot应用程序。

-"&"符号用于将该进程放入后台运行。

- 运行命令后,会产生一个nohup.out文件,用于存储应用程序的输出日志。

2. 使用systemd服务- 创建一个.systemd文件,例如`your-application.service`。

-在文件中添加以下内容:```[Unit]Description=Your ApplicationAfter=syslog.target[Service]User=your-userExecStart=/usr/bin/java -jar /path/to/your-application.jar SuccessExitStatus=143[Install]WantedBy=multi-user.target```- 将文件复制到`/etc/systemd/system/`目录下。

-运行以下命令激活服务:```sudo systemctl daemon-reloadsudo systemctl start your-application```这将启动你的Spring Boot应用程序并将其注册为systemd服务。

-如果想让应用在系统启动时自动启动,可以运行以下命令:```sudo systemctl enable your-application```3. 使用Supervisor- 安装Supervisor:`sudo apt-get install supervisor`- 创建一个新的supervisor配置文件,例如`your-application.conf`。

Linux中执行shell脚本命令的4种方法总结

Linux中执行shell脚本命令的4种方法总结

Linux中执⾏shell脚本命令的4种⽅法总结bash shell 脚本的⽅法有多种,现在作个⼩结。

假设我们编写好的shell脚本的⽂件名为hello.sh,⽂件位置在/data/shell⽬录中并已有执⾏权限。

⽅法⼀:切换到shell脚本所在的⽬录(此时,称为⼯作⽬录)执⾏shell脚本:复制代码代码如下:cd /data/shell./hello.sh./的意思是说在当前的⼯作⽬录下执⾏hello.sh。

如果不加上./,bash可能会响应找到不到hello.sh的错误信息。

因为⽬前的⼯作⽬录(/data/shell)可能不在执⾏程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。

查看PATH的内容可⽤ echo $PASH 命令。

现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执⾏。

⽅法⼆:以绝对路径的⽅式去执⾏bash shell脚本:复制代码代码如下:/data/shell/hello.sh⽅法三:直接使⽤bash 或sh 来执⾏bash shell脚本:复制代码代码如下:cd /data/shellbash hello.sh或复制代码代码如下:cd /data/shellsh hello.sh注意,若是以⽅法三的⽅式来执⾏,那么,可以不必事先设定shell的执⾏权限,甚⾄都不⽤写shell⽂件中的第⼀⾏(指定bash路径)。

因为⽅法三是将hello.sh作为参数传给sh(bash)命令来执⾏的。

这时不是hello.sh⾃⼰来执⾏,⽽是被⼈家调⽤执⾏,所以不要执⾏权限。

那么不⽤指定bash路径⾃然也好理解了啊,呵呵……。

⽅法四:在当前的shell环境中执⾏bash shell脚本:复制代码代码如下:cd /data/shell. hello.sh或复制代码代码如下:cd /data/shellsource hello.sh前三种⽅法执⾏shell脚本时都是在当前shell(称为⽗shell)开启⼀个⼦shell环境,此shell脚本就在这个⼦shell环境中执⾏。

linux后台执行方法

linux后台执行方法

linux后台执行方法在Linux中,有多种方法可以将进程放到后台执行,以下是一些常见的方法和相关参考内容:1. 使用&符号:在命令行中执行命令时,可以在命令的末尾加上&符号,表示将该命令放到后台执行。

例如,要执行一个脚本文件script.sh并将其放到后台执行,可以使用命令`./script.sh &`。

这种方法非常简单和快速,但是当关闭终端时,后台任务会随之关闭。

2. 使用nohup命令:nohup命令可以在后台执行命令,并且在终端关闭后任务仍然会继续执行。

使用nohup命令的语法如下:`nohup command > output.log 2>&1 &`,其中command是要执行的命令,output.log是保存命令输出的文件。

使用nohup命令后,命令的输出会被重定向到output.log文件中。

3. 使用screen命令:screen命令可以创建一个多重窗口管理器,允许在同一个终端会话中运行多个命令。

使用screen命令可以将命令放到一个独立的会话中,并且在终端关闭后任务仍然会继续执行。

使用screen命令的步骤如下:- 运行`screen`命令创建一个新的screen会话。

- 在新的screen会话中执行要后台运行的命令。

- 按下Ctrl + A,然后按下D键,即可离开当前screen会话。

- 当需要重新连接到screen会话时,可以使用命令`screen -r`。

4. 使用tmux命令:tmux命令是一个类似于screen命令的终端复用工具,可以创建多个终端会话并在其之间切换。

具体的使用方法类似于screen命令。

使用tmux命令的步骤如下:- 运行`tmux`命令创建一个新的tmux会话。

- 在新的tmux会话中执行要后台运行的命令。

- 按下Ctrl + B,然后按下D键,即可离开当前tmux会话。

- 当需要重新连接到tmux会话时,可以使用命令`tmuxattach`。

Linux系统脚本的三种执行方式

Linux系统脚本的三种执行方式

1、source命令用法: source FileName作用:在当前bash环境下读取并执行FileName中的命令。

该filename文件可以无"执行权限"注:该命令通常用命令“.”来替代。

如:source bash_profile . bash_profile两者等效。

source(或点)命令通常用于重新执行刚修改的初始化文档。

source命令(从C Shell 而来)是bash shell的内置命令。

点命令,就是个点符号,(从Bourne Shell而来)。

就是顺序的执行文件里的命令而已。

2、sh和bash命令用法: sh FileName bash FileName作用:在当前相应的bash环境下新建一个子shell读取并执行FileName中的命令。

该filename文件可以无"执行权限"注:两者在执行文件时的不同,是分别用自己的shell来跑文件。

sh使用“-n”选项进行shell 脚本的语法检查,使用“-x”选项实现shell脚本逐条语句的跟踪,可以巧妙地利用shell的内置变量增强“-x”选项的输出信息等。

3、./的命令用法: ./FileName作用:打开一个子shell来读取并执行FileName中命令。

该文件必须有可执行的权限。

注:运行一个shell脚本时会启动另一个命令解释器.每个shell脚本有效地运行在父shell(parent shell)的一个子进程里. 这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.shell脚本也可以启动他自已的子进程.这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.脚本里的变量设置在父进程中无效。

脚本中的export仅仅作用于该脚本及其子脚本位置变量参数在向脚本传递参数时,可以使用此位置变量来获取参数。

他们分别是:$0:脚本名字。

此变量包含地址,可以使用basename$0获得脚本名称。

如何在Linux下运行C语言程序

如何在Linux下运行C语言程序

如何在Linux下运行C语言程序如何在Linux下运行C语言程序C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。

以下是店铺为大家搜索整理的如何在Linux下运行C语言程序,希望能给大家带来帮助!GeditGedit是一个简单实用的文本编辑器,拥有漂亮的界面,支持语法高亮,比 Vim 更易上手。

本教程将Gedit作为C代码编辑器。

Gedit的安装:sudo apt-add-repository ppa:ubuntu-on-rails/ppa //添加ubuntu的软件源sudo apt-get update //更新软件列表sudo apt-get install gedit-gmate //安装在当前目录下创建一个C源文件并打开:touch test.cgedit test.c可以看到gedit的窗口,输入:#include#includeint main(){printf("Hello,Linux.\n");exit(0);}gedit 窗口截图注意:Gedit支持多种语言的高亮显示,一般情况下能够自动识别语言,如果识别错误,请在“编辑->高亮模式“下选择C。

GCCLinux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具。

本教程毫不犹豫地使用GCC来编译C程序。

保存文件后退出,打开终端并 cd 到当前目录,输入下面的命令:gcc test.c -o test可以直接将C代码编译链接为可执行文件。

可以看到在当前目录下多出一个文件test,这就是可执行文件。

不像Windows,Linux不以文件后缀来区分可执行文件,Linux下的可执行文件后缀理论上是可以任意更改的.。

当然,也可以分步编译:1) 预处理gcc -E test.c -o test.i在当前目录下会多出一个预处理结果文件 test.i,打开 test.i 可以看到,在 test.c 的基础上把stdio.h和stdlib.h的内容插进去了。

linux运行程序语句

linux运行程序语句

linux运行程序语句在Linux系统中,可以使用各种命令来运行程序,下面列举了十个常用的运行程序的命令语句。

1. `./program`:运行当前目录下的可执行程序。

使用`./`表示当前目录,后面紧跟可执行程序的名称。

例如,`./hello`表示运行当前目录下的hello程序。

2. `bash script.sh`:运行一个Shell脚本。

使用`bash`命令来解释执行Shell脚本,后面紧跟脚本文件的名称。

例如,`bash run.sh`表示运行当前目录下的run.sh脚本。

3. `python script.py`:使用Python解释器运行Python脚本。

使用`python`命令来解释执行Python脚本,后面紧跟脚本文件的名称。

例如,`python hello.py`表示运行当前目录下的hello.py脚本。

4. `java Main`:运行Java程序。

使用`java`命令来执行Java字节码文件,后面紧跟主类的名称。

例如,`java HelloWorld`表示运行当前目录下的HelloWorld程序。

5. `gcc program.c -o program`:编译并运行C程序。

使用`gcc`编译器来编译C源代码,后面紧跟源代码文件的名称和编译选项`-o`指定生成的可执行文件的名称。

例如,`gcc hello.c -o hello`表示编译hello.c并生成可执行文件hello,然后使用`./hello`命令来运行程序。

6. `g++ program.cpp -o program`:编译并运行C++程序。

使用`g++`编译器来编译C++源代码,后面紧跟源代码文件的名称和编译选项`-o`指定生成的可执行文件的名称。

例如,`g++ hello.cpp -o hello`表示编译hello.cpp并生成可执行文件hello,然后使用`./hello`命令来运行程序。

7. `make`:使用Makefile编译并运行程序。

Linux命令高级技巧使用nohup进行后台程序运行

Linux命令高级技巧使用nohup进行后台程序运行

Linux命令高级技巧使用nohup进行后台程序运行nohup命令是Linux系统中一个非常有用的命令,可以让用户在退出终端后继续执行程序,并且不会受到SIGHUP信号的影响。

本文将介绍如何使用nohup命令进行后台程序运行,以及一些高级技巧。

一、nohup命令的基本用法使用nohup命令进行后台程序运行非常简单。

只需要在要运行的命令前面加上nohup即可。

例如:nohup command &其中,command代表要运行的命令或脚本,&表示将命令放入后台执行。

二、使用nohup命令运行长时间任务在实际使用中,我们经常需要运行一些需要较长时间才能完成的任务,如数据处理、文件转换等。

这时,可以使用nohup命令来确保任务可以在后台运行,并在终端退出后继续执行。

例如,我们有一个脚本文件script.sh,该脚本需要运行10个小时才能完成。

我们可以使用以下命令来运行这个脚本,并且不受终端关闭的影响:nohup ./script.sh &运行后,脚本将在后台持续执行,即使终端关闭。

三、将程序输出重定向到文件默认情况下,nohup命令将程序的输出重定向到nohup.out文件中。

如果希望将输出保存到其他文件,可以使用重定向符号(>)来实现。

例如,将输出保存到log.txt文件中:nohup ./script.sh > log.txt &运行后,脚本的输出将保存在log.txt文件中,而不是默认的nohup.out文件。

四、查看后台任务的运行状态使用nohup命令后,我们可能想要查看后台任务的运行状态。

可以使用以下命令来查看后台任务的PID(进程ID):ps -ef | grep script.sh其中,script.sh表示后台任务的命令或脚本。

该命令将返回包含PID的输出。

如果想要查看后台任务的实时输出,可以使用以下命令:tail -f nohup.out这将实时监视nohup.out文件的内容,并将更新的输出显示在终端上。

用qemu-user在armlinux机器上运行amd64x86程序

用qemu-user在armlinux机器上运行amd64x86程序

⽤qemu-user在armlinux机器上运⾏amd64x86程序1. qemu-user 是什么本来, 对于 QEmu, 我只知道它是⼀个模拟器, 可以像 VirtualBox/VMWare 那样跑⼀个操作系统, 只不过 QEmu 可以在 AMD64 上⾯跑针对PowerPC, ARM 的操作系统, 当然, CPU 指令是解释执⾏的, 相对来说⽐较慢.但是前⼏天折腾 CentOS/Fedora 上⾯的rpm构建⼯具时才发现, 原来 QEmu 还有⼀种运⾏⽅式, 那就是跟wine的运⾏⽅式相同: 直接运⾏程序⽂件.在这种模式下, 这个针对 PowerPC或者ARM编译的程序, 就⽐较像⼀个本地程序, 它跟本机的Linux内核打交道, 进⾏系统调⽤, 访问本地⽂件(其实是通过qemu进⾏)和本地设备.在 QEmu 的术语中, 前⾯那种运⾏整个操作系统的⽅式, 称为"full system emulation", 在 Ubuntu/CentoS 由软件包qemu-system-xxx (⽐如qemu-system-ppc, qemu-system-aarch64, qemu-system-arm)提供功能;后⾯这种运⾏单个程序⽂件的⽅式, 称为"user mode emulation",由软件包qemu-user或者qemu-user-static提供功能(注意没有细分为qemu-user-ppc, qemu-user-arm, 不过这也许只是因为这些模拟器⽂件都不⼤, 就揉到了⼀个包⾥⾯.⾄于qemu-user和qemu-user-static的区别, 现在只需要知道后者是静态链接版本, ⾄于在什么场景下需要⽤到哪⼀种, 以后再来说).1.1. 举个例⼦这⾥举个例⼦说明⼀下应⽤场景:在树莓派 2 (CPU是armv7) 上⾯跑针对 i386 编译的linux程序.我在命令⾏上⼯作是, 喜欢⽤⼀个叫做的⼩程序 (这类程序我以前介绍过: ), 但它的早期有个问题: 我⽇常⽤的⽐较多的Linux是在树莓派上的Raspbian 8, 但在Linux上只有amd64和386两个版本, 没有针对arm的.这个⼯具⼜是⽤Go语⾔写的, 我对这个语⾔不熟, 也不想去折腾安装⼯具链在树莓派上⾃⾏编译.于是就可以试试这条路: 跑i386的版本$ sudo apt install qemu-user$ wget -c 'https:///junegunn/fzf-bin/releases/download/0.16.3/fzf-0.16.3-linux_386.tgz'$ tar xvf fzf-0.16.3-linux_386.tgz$ file fzf-0.16-3-linux_386fzf-0.16.3-linux_386: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped$ qemu-i386 fzf-0.16.3-linux_386 -husage: fzf [options]Search-x, --extended Extended-search mode(enabled by default; +x or --no-extended to disable)[...]$ history | qemu-i386 fzf-0.16.3-linux_386上⾯倒数第三个命令是检查程序⽂件fzf-0.16.3-linux_386的类型, 从结果看它的确是针对386的ELF⽂件, 并且是静态链接的;倒数第⼆个命令qemu-i386 fzf-0.16.3-linux_386 -h是试着运⾏⼀下, 程序成功地跑起来, 打印除了帮助信息.最后⼀个命令history | qemu-i386 fzf-0.16.3-linux_386是真正在使⽤fzf这个程序的功能.2. ⽤binfmt_misc机制来让启动运⾏更⽅便上⾯虽然把这个程序运⾏起来了, 但命令⾏上需要将qemu-i386放在前⾯, 也就是说实际启动的qemu-i386这个程序, 它再把fzf跑起来.这样并不太⽅便, 尤其fzf这个程序⼀般都不是直接使⽤, ⽽是通过, 等封装脚本来使⽤, 脚本⾥⾯准备好备选数据后再调⽤fzf程序⽂件来让⽤户挑选,我们要⼀⼀修改这些脚本就太⿇烦了.perl/python脚本就不需要这样, 只要第⼀⾏是#!/usr/bin/perl或者#!/usr/bin/env python就可以了.我们能借⽤这个⽅法吗?fzf-0.16.3-linux_386是个⼆进制的可执⾏程序, 我们没办法去修改所谓的"第⼀⾏";对了, 有没有注意到, 安装wine之后, 命令⾏上直接输⼊notepad.exe也是可以直接启动"记事本"程序的, 并不⼀定需要wine notepad.exe才能启动, 这是怎么实现的呢?这就需要⼀种叫做binfmt_misc的机制.binfmt_misc是Linux内核说提供的⼀种扩展机制, 使得更多类型的⽂件得以成为"可执⾏"⽂件.Linux内核本⾝⽀持ELF、a.out、脚本(也就是上⾯所说的第⼀⾏#!指定解释器的⽅式)这集中"可执⾏⽂件".但它还提供了⼀个称为binfmt_misc的内核模块, 通过这个模块可以动态注册⼀些"可执⾏⽂件格式",注册之后我们就可以直接"执⾏"这个程序⽂件了.其实上⾯⽤apt install qemu-user-static安装这个包时, 它的postinstall脚本已经在binfmt_misc中注册了相应的配置, 我们可以通过下⾯的⽅式检查⼀下:$ lsmod | grep binfmtbinfmt_misc 6306 1$ ls /proc/sys/fs/binfmt_misc/python2.7 qemu-cris qemu-mips qemu-ppc64abi32 qemu-sh4eb qemu-x86_64python3.4 qemu-i386 qemu-mipsel qemu-ppc64le qemu-sparc registerqemu-alpha qemu-m68k qemu-ppc qemu-s390x qemu-sparc32plus statusqemu-armeb qemu-microblaze qemu-ppc64 qemu-sh4 qemu-sparc64$ cat /proc/sys/fs/binfmt_misc/qemu-i386enabledinterpreter /usr/bin/qemu-i386-staticflags: OCoffset 0magic 7f454c4601010100000000000000000002000300mask fffffffffffefefffffffffffffffffffeffffff$ xxd fzf-0.16.3-linux_386 | head -20000000: 7f45 4c46 0101 0100 0000 0000 0000 0000 .ELF............0000010: 0200 0300 0100 0000 d090 0908 3400 0000 ............4...$ ./fzf-0.16.3-linux_386 -husage: fzf [options]Search-x, --extended Extended-search mode(enabled by default; +x or --no-extended to disable)[....]解释⼀下上⾯⼏条命令:1. lsmod | grep binfmt: 这是检查内核模块binfmt_misc是否已经加载, 有内容输出说明已经加载了.如果没有加载, 则可以⽤modprobebinfmt_misc来加载它(在当前的很多Linux发⾏版中, ⼀般可以通过sudo systemctl restart systemd-binfmt来启动/重启它, 修改了注册配置也可以通过这条命令来重新加载)2. ls /proc/sys/fs/binfmt_misc/: 这是检查内核中⽬前注册了哪些格式(register和status这两个除外)3. cat /proc/sys/fs/binfmt_misc/qemu-i386: 这是在检查我们所关⼼的与qemu-i386相关的配置, 从输出中可以看到, 对于以7f454c4601010100000000000000000002000300开头的⽂件, 可以调⽤/usr/bin/qemu-i386-static来执⾏(各字段的详细解释可以参见)4. xxd fzf-0.16.3-linux_386 | head -2: 这是检查⼀下我们所想运⾏的程序⽂件的开头⼏个字节是怎样的, 从输出可以看出, 它与上⾯所注册的信息是匹配的5. ./fzf-0.16.3-linux_386 -h: 这是直接运⾏了这个i386程序, 可以看到它能够正确打印出帮助信息关于binfmt_misc的⼀些相关链接:: 如何直接执⾏LuaJIT字节码: 因为Go语⾔不允许第⼀⾏⽤#!/usr/bin/env go, 所以需要另外找⼀个⽅法来将*.go作为脚本运⾏3. 补充说明:现实并没有那么简单/美好虽然在上⾯我们成功运⾏了fzf-0.16.3-linux_386, 但如果你多实验⼏个程序, 就会发现失败⼏率是⽐较⾼的.因为⼤多数程序都会环境有很多依赖, ⽐如动态库依赖、数据⽂件/配置⽂件、⼦进程调⽤、CPU扩展指令集、环境变量、设备⽂件等等, 它们的缺失或者错误都可能导致程序⽆法正常运⾏.很少有只需要单个程序⽂件就能跑起来的(上⾯运⾏的fzf-0.16.3-linux_386是个静态链接版本, Go语⾔写的⼯具⼀般都是静态链接的).对于动态库依赖、数据⽂件/配置⽂件这类⽂件系统层⾯的问题, 虽然表⾯上可以想办法把⽂件补齐, ⽐如Debian/Ubuntu考虑了多架构并存,但其它Linux发⾏版并没有考虑这个问题(有的考虑了x86_64与x86并存), 混合安装也会给问题定位带来诸多困难.所以在实际使⽤中, qemu-user⼤都是通过在⼀个独⽴的⽂件系统中运⾏的.关于qemu与chroot配合的话题下次再展开吧Debian/Ubuntu的动态库都安装在.../lib/<target>-<vendor>-<abi>⽬录下, ⽐如同样⼀个动态库libncurses.so.5.9, 通过libncurses5:armhf包提供的动态库安装在/lib/arm-linux-gnueabihf/libncurses.so.5.9,通过libncurses5:i386包提供的动态库安装在/lib/i386-linux-gnu/libncurses.so.5.9(通过dpkg --add-architecture armhf && apt-get update && apt-get install libc6:armhf这种⽅式可以并⾏安装多种架构的包)qemu-user有⼀个-L path选项, 可以⽤来变更动态库查找路径(/set the elf interpreter prefix to 'path'/): 将程序所需要的动态库都放置到/home/bamanzi/i386-libs/lib⽬录下, 然后⽤qemu-user -L /home/bamanzi/i386-libs ./prog来启动程序, 就会优先到/home/bamanzi/i386-libs/lib查找prog所需要的动态库, ⽽不是主机⾥⾯/etc/ld.so.conf⾥⾯设定的路径(那些路径⾥存放的都是针对主机的动态库, 在我这个例⼦⾥⾯, 就是针对。

如何在Linux上运行Windows应用程序

如何在Linux上运行Windows应用程序

如何在Linux上运行Windows应用程序Linux作为一种开源操作系统,虽然在安全性和稳定性方面表现出色,但在兼容性方面却有所欠缺。

许多用户在使用Linux系统时可能会遇到无法运行其喜爱的Windows应用程序的问题。

然而,有幸的是,有几种方法可以在Linux上成功运行Windows应用程序。

本文将介绍几种最常用的方法。

1. 使用WineWine是一个能够在Linux系统上运行Windows应用程序的兼容层。

它允许用户在Linux上运行几乎所有的Windows应用程序,包括游戏和办公软件。

要在Linux上使用Wine,只需按照以下步骤操作:1. 在终端中输入命令`sudo apt-get install wine`来安装Wine。

2. 下载待安装的Windows应用程序,然后双击运行该程序。

3. 如果安装程序顺利运行,将根据程序的要求完成安装。

4. 在安装完成后,你可以在Linux系统的应用程序菜单中找到该Windows应用程序,并开始使用它。

需要注意的是,尽管Wine是相对稳定的,但并非所有Windows应用程序都能完美运行,有些应用程序可能会出现兼容性问题或功能受限制。

2. 使用虚拟机另一种在Linux上运行Windows应用程序的方法是通过使用虚拟机软件,如VirtualBox、VMware等。

通过虚拟机,用户可以在Linux系统上创建一个虚拟的Windows环境,并在其中运行Windows应用程序。

以下是使用虚拟机的步骤:1. 下载并安装适用于Linux的虚拟机软件。

2. 启动虚拟机软件并创建一个新的虚拟机。

3. 在虚拟机中安装Windows操作系统。

4. 安装Windows应用程序,并在虚拟机中运行它。

使用虚拟机可以更好地模拟Windows环境,以确保几乎所有的Windows应用程序都能够正常运行。

然而,使用虚拟机也需要消耗计算机的资源,并可能对性能产生一定的影响。

3. 使用CrossoverCrossover是一种商业软件,它基于Wine开发,并提供了更高级的功能和技术支持。

Linux中使用nohup命令在后台运行程序和脚本

Linux中使用nohup命令在后台运行程序和脚本

Linux中使用nohup命令在后台运行程序和脚本在Linux系统中,使用nohup命令可以使程序或脚本在后台运行,即使当前用户退出登录或关闭终端,程序仍会继续执行。

本文将介绍如何使用nohup命令在Linux中后台运行程序和脚本。

一、什么是nohup命令nohup是Linux系统内置的一个命令,用于在后台运行程序或脚本。

nohup的全称是no hang up,表示不挂断。

通过使用nohup命令,可以使程序或脚本在后台持续运行,即使用户退出登录,也不会受到影响。

使用nohup命令运行程序或脚本的语法如下:```nohup command &```其中,command表示要运行的程序或脚本。

二、使用nohup命令后台运行程序下面以一个示例来演示如何使用nohup命令后台运行程序。

假设当前目录下有一个名为test.py的Python脚本,我们希望在后台运行该脚本。

1. 打开终端,进入脚本所在目录:```cd /path/to/script```将/path/to/script替换为实际的脚本所在路径。

2. 使用nohup命令后台运行脚本:```nohup python test.py &```此命令将会在后台启动test.py脚本。

3. 在终端输入其它命令或直接关闭终端。

无论用户退出登录与否,test.py脚本都将持续运行。

注意:nohup命令默认将程序的输出重定向至nohup.out文件中。

如果希望将输出重定向到其它文件,可以使用以下命令:```nohup python test.py > output.log 2>&1 &```此命令将程序的标准输出和错误输出重定向到output.log文件中。

三、使用nohup命令后台运行脚本除了可用于程序的后台运行,nohup命令也可以在后台运行脚本。

下面以一个示例来演示如何使用nohup命令后台运行脚本。

假设当前目录下有一个名为backup.sh的Shell脚本,我们希望在后台运行该脚本,实现定时备份的功能。

Linux下编译生成SO并进行调用执行

Linux下编译生成SO并进行调用执行

Linux下编译⽣成SO并进⾏调⽤执⾏Linux下编译⽣成SO并进⾏调⽤执⾏参考博客的博客:1 代码结构(1)include中是⽤于⽣成SO的头⽂件,当前只有⼀个test.h⽂件,内容如下:void print_func(void);(2)src中是⽤于⽣成SO的源⽂件,当前只有⼀个test.c⽂件,内容如下:#include <stdio.h>void print_func(void){int i = 0;for (; i < 10; i++)printf("i = %d\n", i);return;}(3)Makefile⽂件是⽤于⽣成SO的,内容如下:PROJECT=libprint_func.soCC?=gccSOURCES=$(wildcard src/*.c)OBJECTS=$(patsubst %.c,%.o,$(SOURCES)).PHONY:cleanCFLAG = -Iinclude -fPIC -sharedLD_FLAG = -fPIC -s -Wl,-z,relro,-z,now,-z,noexecstack -fstack-protector-all$(PROJECT): $(OBJECTS)mkdir -p lib$(CC) -shared -o lib/$@ $(patsubst %.o,obj/%.o,$(notdir $(OBJECTS))) $(LD_FLAG)@echo "finish $(PROJECT)".c.o:@mkdir -p obj$(CC) -c $< $(CFLAG) -o obj/$(patsubst %.c,%.o,$(notdir $<))clean:-rm -rf obj lib@echo "clean up"⽣成的SO的名字为libprint_func.so。

使用Linux终端执行文件和程序

使用Linux终端执行文件和程序

使用Linux终端执行文件和程序在Linux操作系统中,终端(Terminal)是我们与系统进行交互的一种方式。

通过终端,我们可以执行命令、操作文件以及运行程序。

本文将介绍如何使用Linux终端执行文件和程序的方法,以帮助读者更好地利用Linux系统及其终端进行工作。

一、执行可执行文件1. 检查文件权限在运行一个可执行文件之前,我们首先需要确保该文件具有执行权限。

可以通过以下命令检查文件权限:```ls -l 文件路径```在命令执行结果中,可以看到文件权限对应的字符,例如:-rwxr-xr-x,其中第一个字符表示文件类型,后面的字符表示文件权限。

如果文件的权限中包含有`x`(即可执行权限),则可以继续执行下一步。

2. 运行可执行文件执行可执行文件的方法很简单,只需在终端中输入文件的路径并按下回车即可。

例如:```./可执行文件路径```其中,`./`表示当前路径,可执行文件路径根据实际情况进行填写。

3. 添加可执行文件路径到系统PATH中(可选)为了避免每次都输入可执行文件的路径,可以将可执行文件所在的目录添加到系统的PATH环境变量中。

具体操作如下:首先,打开终端,并输入以下命令编辑当前用户的bash配置文件(如果使用的是其他shell,请自行查找对应的配置文件):```vi ~/.bashrc```然后,在打开的文件中,添加以下行:```export PATH=$PATH:可执行文件目录路径```例如,如果可执行文件的目录路径为`/home/user/myapplication`,则添加的行应该是:```export PATH=$PATH:/home/user/myapplication```保存并退出配置文件之后,输入以下命令使配置文件生效:```source ~/.bashrc```此后,就可以在终端中直接输入可执行文件的名称来运行程序,而无需再输入可执行文件的完整路径。

二、执行编译型语言程序对于编译型语言,我们通常需要先将源代码编译成可执行文件,然后再执行。

linux下执行.sh文件的方法和语法

linux下执行.sh文件的方法和语法

linux下执⾏.sh⽂件的⽅法和语法1. linux下执⾏.sh⽂件的⽅法.sh⽂件就是⽂本⽂件,如果要执⾏,需要使⽤chmod a+x xxx.sh来给可执⾏权限。

是bash脚本么可以⽤touch test.sh #创建test.sh⽂件vi test.sh #编辑test.sh⽂件加⼊内容#!/bin/bashmkdir test保存退出。

chmod a+x test.sh #给test.sh可执⾏权限如test,sh⽂件在 /home/work⽂件下执⾏⽅法⼀本⾝⽬录下运⾏进⼊ cd /home/workwen⽂件下执⾏ ./test.sh命令会在当前⽬录下创建⼀个“test”⽬录。

⽅法⼆绝对路劲运⾏执⾏ /home/work/test.sh⽅法三本⾝⽬录下运⾏sh test.sh最后建议:使⽤C代码1.man shman sh 来看看sh 的介绍~linux.sh语法介绍:1 开头程序必须以下⾯的⾏开始(必须放在⽂件的第⼀⾏):#!/bin/sh符号#!⽤来告诉系统它后⾯的参数是⽤来执⾏该⽂件的程序。

在这个例⼦中我们使⽤/bin/sh来执⾏程序。

当编写脚本完成时,如果要执⾏该脚本,还必须使其可执⾏。

要使编写脚本可执⾏:编译 chmod +x filename 这样才能⽤./filename 来运⾏2 注释在进⾏shell编程时,以#开头的句⼦表⽰注释,直到这⼀⾏的结束。

我们真诚地建议您在程序中使⽤注释。

如果您使⽤了注释,那么即使相当长的时间内没有使⽤该脚本,您也能在很短的时间内明⽩该脚本的作⽤及⼯作原理。

3 变量在其他编程语⾔中您必须使⽤变量。

在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进⾏声明。

要赋值给⼀个变量,您可以这样写:#!/bin/sh#对变量赋值:a=”hello world”# 现在打印变量a的内容:echo “A is:”echo $a有时候变量名很容易与其他⽂字混淆,⽐如:num=2echo “this is the $numnd”这并不会打印出”this is the 2nd”,⽽仅仅打印”this is the “,因为shell会去搜索变量numnd的值,但是这个变量时没有值的。

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

如何执行在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 命令。

同样地,您可以在文件名之前加上语言环境,比如:shphppythonperljava但更多情况下,套装应用程序使用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 命令来查看您在后台上运行的所有应用程序。

为在后台上运行的每个任务分配了一个序列号,从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. 查看桌面或面板上的launcherMono许多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 创建一个launcherWineWine 使您可以在Linux 和其他操作系统上运行Windows 软件。

相关文档
最新文档