`

linux内部命令 外部命令 (内部命令source exec)

阅读更多

shell命令分为内置命令和外部命令

内置命令是shell解释程序内建的,由shell直接执行,不需要派生新的进程。

外部命令分为二进制代码和shell脚本。

 

用户在命令行输入命令后,如果是shell外部命令,一般情况下Shell会fork并exec该命令。

执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程。

 

外部命令

(1)为了执行外部的二进制命令,需要一种机制,以允许子进程转换为将要被执行的命令。Unix/Linux调用exec可以做到这些。它允许一个进程用其他命令的可执行代码覆盖自己。二进制代码需要由磁盘装入内存中执行。shell解释程序会调用fork自身的一个拷贝,然后用exec系列函数来执行外部命令,这样外部命令就取代了当前的fork的子shell。

(2)shell脚本的执行与二进制文件略有不同。对于shell脚本来说,shell解释程序会fork一个子shell程序,子shell程序会检查脚本的第一行(如#!/bin/bahs),找到用来执行脚本的解释程序,然后装入(exec)这个解释程序,由它执行脚本程序。在此解释程序显然是当前shell的子进程。脚本中的命令都是在子shell环境中执行的,不会影响当前shell的环境。

 

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。

 

shell script:

有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts;一种是在当前shell下执行,不再启用其他shell。

 

一般默认的script文件(.sh)即是这种用法。这种方法先启用新的sub-shell(新的子进程),然后在其下执行命令。

另外一种方法就是上面说过的source命令,不再产生新的shell,而在当前shell下执行一切命令。

source命令即点(.)命令。

在bash下输入man source,找到source命令解释处,可以看到解释”Read and execute commands from filename in the current shell environment and …”。从中可以知道,source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程(或sub-shell)。

 

exec:

在bash下输入man exec,找到exec命令解释处,可以看到有”No new process is created.”这样的解释,这就是说exec命令不产生新的子进程。

那么exec与source的区别是什么呢?

exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行。

分享到:
评论

相关推荐

    命令注入讲解ppt.pptx

    1.外部参数可控应用程序调用了能够执行系统命令的函数,比如服务器程序通过 system 、 eval 、 exec 等危险函数直接或者间接调用了 cmd.exe 。而攻击者恰好能够控制这些函数的参数,比如可以通过浏览器或者一些其他...

    主要shell内置命令

    在Shell中,内置命令是直接由Shell执行的,而无需启动新的进程,这使得它们比外部命令更快、更有效率。以下是主要的Shell内置命令的详细说明: 1. `. (source)`: 用于读取并执行指定文件中的命令,通常用于加载配置...

    php中如何执行linux命令详解

    `system`函数会执行外部命令,并且直接输出结果到标准输出,也可以获取命令的返回值。 ```php $cmd = 'mkdir testsystem'; $lastline = system($cmd, $var); var_dump($lastline); var_dump($var); ?> ``` 如果...

    列出所有Bash Shell内置命令的方法示例

    Bash Shell提供了许多内置命令,这些命令比外部命令执行得更快,因为它们直接在Shell内部执行,无需通过文件系统查找。了解并掌握Bash Shell的内置命令对于提高命令行操作效率至关重要。 首先,我们可以通过`help`...

    bash shell内建命令

    `command`命令用于运行外部命令,即使存在同名的函数或alias。这在需要确保不使用shell内建命令或alias时特别有用。 ### 7. compgen `compgen`命令用于生成补全候选列表,主要用于脚本编写中,帮助实现命令行自动...

    Linux命令行与shell脚本编程大全案例 (2).zip

    3. **命令执行**: 在脚本中,可以使用`echo`输出文本,`source`或`.`执行其他脚本,`exec`替换当前进程,`command`执行外部程序。 4. **条件表达式与测试**: `test`或`[`命令用于检查文件属性、比较值或执行算术...

    linux_unix_shell

    1. **函数库**:通过source命令加载外部脚本,实现函数库的复用。 2. **数组**:虽然Bash在早期版本不直接支持数组,但可以通过巧妙的方法实现类似功能。 3. **别名和函数**:创建别名或自定义函数,简化常用命令的...

    linux版tomcat,附带安装教程

    请注意,为了系统的安全,你还需要设置防火墙规则允许外部访问Tomcat端口(默认8080),并定期更新Tomcat以获取最新的安全补丁和功能。此外,不要忘记对 `$CATALINA_HOME/conf` 目录下的敏感文件进行权限控制,以...

    嵌入式开发学习总结 嵌入式开发学习总结

    外部命令是指存储在特定目录下的可执行文件,如`/bin`, `/sbin`等。这些命令通常是由系统管理员安装的,并且可以通过`PATH`环境变量找到它们的位置。 ##### 3、实用程序 实用程序是一系列用于日常任务的工具,如...

    tcl 8.5 commands manual

    `exec`命令用于运行外部程序;`fileevent`命令用于处理文件事件。 在使用手册时,开发者可以查找特定命令的用法,包括它的语法、参数说明、示例代码和可能遇到的常见错误及其解决方案。手册通常也会提供一些高级...

    Tcl教程中文版

    - **Exec命令**:讲解如何使用`exec`命令执行外部命令或程序。 - **Open命令**:介绍如何使用`open`命令打开文件。 #### 二十一、了解命令和变量的存在 - **Info命令**:使用`info`命令来查询命令和变量的存在情况...

    Shell编程介绍.pptx

    它可以执行内部命令和外部命令,例如 `cd`、`ls`、`mkdir` 等。 程序设计语言 脚本( Scripting ) --------------------------------- 脚本是一种编程方式,使用 Shell 脚本语言编写的程序可以自动执行各种任务。...

    Flume.docx

    - **Exec Source**: 通过执行外部命令来捕获其标准输出或错误输出。 - **Taildir Source**: 监听指定目录下的文件变化,读取新增内容。 - **JMS Source**: 从 Java 消息服务 (JMS) 提供者处接收数据。 当内置...

    Linux高级bash编程

    内部命令与内建 11.1. 作业控制命令 12. 外部过滤器,程序和命令 12.1. 基本命令 12.2. 复杂命令 12.3. 时间/日期 命令 12.4. 文本处理命令 12.5. 文件与归档命令 12.6. 通讯命令 12.7. 终端控制命令 ...

    bash shell

    - **环境隔离**: 使用 `exec` 命令可以替换当前进程的执行上下文。 - **子进程**: 使用 `command` 或者 `(command)` 来创建子进程执行命令。 #### 受限 Shell - **受限模式**: 受限 shell 限制用户只能执行特定的...

    进程门神 源码 sourcecode

    5. **信号处理**:进程可能会监听并响应特定的系统信号,例如`SIGINT`(中断)或`SIGTERM`(终止),以优雅地处理外部命令。 6. **文件系统交互**:读取和修改进程相关的文件,如`/proc`目录下的进程信息文件,用于...

Global site tag (gtag.js) - Google Analytics