Linux系统中如何执行命令、脚本和可执行程序的步骤?

Linux作为一款广泛使用的类Unix操作系统,其核心功能之一是通过执行命令或程序来完成用户指定的任务,无论是简单的文件操作,还是复杂的服务管理,都离不开对“执行”过程的理解,本文将从Linux执行的基础机制、命令类型、执行方式及权限控制等方面,详细解析Linux如何执行命令与程序。

linux 如何执行

Linux执行的基础:Shell与命令行交互
Linux的执行入口通常是Shell(命令行解释器),它是用户与Linux内核之间的桥梁,当用户在终端输入命令后,Shell会解析输入、查找命令、创建进程并执行,最终将结果返回给终端,常见的Shell类型包括Bash(Bourne Again Shell,大多数Linux发行版的默认Shell)、Zsh(功能丰富的增强型Shell)、sh(POSIX兼容的基础Shell)等,不同Shell在语法、功能上略有差异,但核心执行逻辑相似。

以Bash为例,其执行流程大致为:

  1. 读取输入:等待用户在终端输入命令,如ls -l。
  2. 解析命令:将输入拆分为命令名(ls)和参数(-l),同时处理通配符(如)、变量(如$HOME)等特殊字符。
  3. 查找命令:判断命令是内置命令还是外部命令,内置命令(如cd、echo)由Shell自身直接执行;外部命令需通过PATH环境变量指定的路径查找可执行文件(如/bin/ls)。
  4. 创建进程:若为外部命令,Shell通过fork()系统调用创建子进程,再由子进程通过exec()系统调用加载目标程序到内存,替换当前进程映像。
  5. 等待与返回:父进程(Shell)默认等待子进程执行完成,之后显示命令返回结果(若有),并返回终端提示符,等待下一条命令。

命令类型:内置命令与外部命令
Linux命令可分为内置命令(Built-in Commands)和外部命令(External Commands),两者的执行机制和效率差异显著。

内置命令

内置命令是Shell程序的一部分,无需创建新进程即可执行,因此速度更快。

  • cd:切换当前工作目录,直接修改Shell进程的当前目录环境,不会创建子进程。
  • echo:输出指定内容,由Shell直接处理并打印。
  • export:设置环境变量,仅在当前Shell及其子进程中生效。

外部命令

外部命令是独立于Shell的可执行文件,通常位于/bin、/usr/bin、/sbin等目录,执行时需Shell创建子进程加载程序,因此开销略大。

  • ls:列出目录内容,实际执行的是/bin/ls程序。
  • grep:文本搜索工具,执行/bin/grep程序。
  • find:文件查找工具,执行/usr/bin/find程序。
类型 执行特点 示例命令 执行速度
内置命令 Shell直接执行,无进程创建 cd、echo、pwd 快
外部命令 需创建子进程加载程序 ls、grep、vim 较慢

脚本的执行:从文件到命令序列
Shell脚本是将多个命令或程序指令写入扩展名为.sh的文本文件,通过Shell批量执行的方式,脚本的执行需满足两个前提:文件有执行权限(x位),且首行指定解释器(如#!/bin/bash)。

linux 如何执行

脚本执行的三种方式

  1. 路径执行(./script.sh)

    • 需先通过chmod +x script.sh添加执行权限。
    • Shell在当前子进程中加载脚本解释器(如/bin/bash),逐行执行脚本中的命令。
    • 脚本中的环境变量、函数定义仅对子进程有效,执行结束后不会影响当前Shell环境。
  2. **解释器显式执行(bash script.sh)

    • 无需脚本文件具有执行权限,直接通过bash命令加载脚本文件。
    • 与路径执行类似,在子进程中执行,不影响当前Shell环境。
  3. 当前Shell执行(source script.sh或. script.sh)

    • 使用source或点号()命令,在当前Shell中直接执行脚本内容。
    • 脚本中的环境变量、函数定义会保留在当前Shell,后续命令可直接使用,脚本中定义export VAR="test",执行source script.sh后,当前Shell可直接通过$VAR访问该变量。

程序的执行:编译型与解释型
Linux中程序的执行可分为编译型(如C/C++程序)和解释型(如Python、Perl脚本),两者的执行流程差异显著。

编译型程序

编译型程序需通过编译器(如gcc)将源代码转换为机器码(可执行文件),执行时直接加载机器码到内存运行。

  • 步骤:
    1. 编译:gcc -o hello hello.c(将hello.c编译为hello可执行文件)。
    2. 执行:./hello(直接运行生成的可执行文件)。
  • 特点:执行效率高,无需依赖解释器,但需针对不同系统架构重新编译。

解释型程序

解释型程序无需编译,由解释器(如python3、perl)逐行读取源代码并执行。

linux 如何执行

  • 步骤:
    1. 编写脚本:hello.py(如print("Hello, Linux!"))。
    2. 执行:python3 hello.py(通过python3解释器运行脚本)。
  • 特点:跨平台性好(只需安装对应解释器),但执行效率低于编译型程序。

权限与后台执行:控制执行行为
Linux的权限模型直接影响命令和程序的执行能力,而后台执行则可提升多任务处理效率。

执行权限

文件(尤其是脚本和可执行程序)需具备“执行权限”(x位),否则用户无法运行,通过ls -l查看文件权限时,rwxr-xr-x中的x即表示执行权限,若权限不足,可通过chmod u+x script.sh(为用户添加执行权限)或sudo chmod +x script.sh(root权限添加)解决。

后台执行

默认情况下,命令在前台执行,会阻塞终端(如sleep 10会等待10秒后才返回提示符),若需在后台执行,可在命令后添加&符号(如sleep 10 &),此时Shell会返回进程ID(PID),并立即显示终端提示符,用户可继续执行其他命令,后台进程可通过jobs查看,fg %1将前台进程切回,bg %1继续运行后台暂停的进程。

相关问答FAQs
问题1:为什么用执行脚本时提示“Permission denied”?
解答:该错误通常表示脚本文件没有执行权限(x位),可通过ls -l script.sh查看权限,若显示-rw-r--r--(无x位),需使用chmod +x script.sh为文件添加执行权限,若脚本所在目录的“其他用户”无执行权限(x位),也可能导致无法通过执行,需用chmod +x 目录名修复目录权限。

问题2:source和bash执行脚本有什么区别?
解答:核心区别在于执行环境是否隔离。source(或)在当前Shell中执行脚本,脚本中的变量、函数定义会保留在当前Shell,后续命令可直接使用(如source script.sh后,脚本中定义的$VAR变量在当前Shell中仍有效),而bash script.sh会创建一个子Shell执行脚本,脚本执行结束后,所有环境变量和函数定义会随子Shell销毁,不影响当前Shell环境,若脚本中包含cd /tmp,source执行后当前Shell会切换到/tmp目录,而bash执行后当前Shell仍停留在原目录。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/17741.html

赞 (0)
酷番叔酷番叔
上一篇 2025年8月26日 22:44
下一篇 2025年8月26日 22:55

相关推荐

  • Linux系统下如何正常观看视频?

    在Linux系统中观看视频是许多用户的日常需求,无论是本地视频文件、在线流媒体还是高清蓝光资源,Linux都提供了多样化的解决方案,本文将详细介绍Linux环境下观看视频的常用方法、播放器选择、格式支持、硬件加速优化及常见问题处理,帮助用户根据自身需求选择最合适的方案,桌面环境下的视频播放器选择Linux桌面环……

    2025年9月26日
    71600
  • 在Linux操作系统中如何检查RAID硬盘是否存在损坏及如何处理?

    在Linux系统中,RAID(磁盘阵列)通过数据冗余和条带化技术提升存储性能和数据可靠性,但硬盘作为物理设备,仍可能出现损坏或故障,及时检查RAID硬盘状态是保障数据安全的关键,本文将详细介绍Linux环境下检查RAID硬盘损坏的多种方法,涵盖软件RAID(如mdadm)和硬件RAID(如基于RAID卡的阵列……

    2025年9月27日
    27600
  • Linux系统中如何查找进程号?

    在Linux系统中,进程号(PID,Process ID)是操作系统为每个运行中的进程分配的唯一标识符,用于进程管理、资源监控、调试和终止等操作,准确查找进程号是系统管理和日常运维的基础技能,本文将详细介绍Linux中查找进程号的多种方法,涵盖基础命令、进阶技巧及实用场景,使用ps命令查找进程号ps(proce……

    2025年9月30日
    17100
  • Linux如何切换用户?常用命令与操作方法详解

    Linux作为多用户、多任务的操作系统,用户权限管理是核心功能之一,在日常运维或开发中,经常需要在不同用户间切换,比如从普通用户切换到root管理员执行系统操作,或临时切换到服务账户运行程序,本文将详细介绍Linux中切换用户的常用方法、命令参数及注意事项,su命令:切换用户身份su(switch user)是……

    2025年8月22日
    2.4K00
  • Linux 如何测试网络带宽?常用方法与工具详解

    在Linux系统中,测试带宽是网络管理、性能优化和故障排查的重要环节,无论是本地网络环境、服务器间互联,还是公网带宽验证,选择合适的工具和方法能准确反映网络性能,本文将详细介绍Linux下常用的带宽测试工具、使用方法及注意事项,帮助用户全面掌握带宽测试技巧,使用iperf3进行专业网络性能测试iperf3是目前……

    2025年8月30日
    34700

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信