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关闭,然后换到后面的命令继续执行。
相关推荐
1.外部参数可控应用程序调用了能够执行系统命令的函数,比如服务器程序通过 system 、 eval 、 exec 等危险函数直接或者间接调用了 cmd.exe 。而攻击者恰好能够控制这些函数的参数,比如可以通过浏览器或者一些其他...
在Shell中,内置命令是直接由Shell执行的,而无需启动新的进程,这使得它们比外部命令更快、更有效率。以下是主要的Shell内置命令的详细说明: 1. `. (source)`: 用于读取并执行指定文件中的命令,通常用于加载配置...
`system`函数会执行外部命令,并且直接输出结果到标准输出,也可以获取命令的返回值。 ```php $cmd = 'mkdir testsystem'; $lastline = system($cmd, $var); var_dump($lastline); var_dump($var); ?> ``` 如果...
Bash Shell提供了许多内置命令,这些命令比外部命令执行得更快,因为它们直接在Shell内部执行,无需通过文件系统查找。了解并掌握Bash Shell的内置命令对于提高命令行操作效率至关重要。 首先,我们可以通过`help`...
`command`命令用于运行外部命令,即使存在同名的函数或alias。这在需要确保不使用shell内建命令或alias时特别有用。 ### 7. compgen `compgen`命令用于生成补全候选列表,主要用于脚本编写中,帮助实现命令行自动...
3. **命令执行**: 在脚本中,可以使用`echo`输出文本,`source`或`.`执行其他脚本,`exec`替换当前进程,`command`执行外部程序。 4. **条件表达式与测试**: `test`或`[`命令用于检查文件属性、比较值或执行算术...
1. **函数库**:通过source命令加载外部脚本,实现函数库的复用。 2. **数组**:虽然Bash在早期版本不直接支持数组,但可以通过巧妙的方法实现类似功能。 3. **别名和函数**:创建别名或自定义函数,简化常用命令的...
请注意,为了系统的安全,你还需要设置防火墙规则允许外部访问Tomcat端口(默认8080),并定期更新Tomcat以获取最新的安全补丁和功能。此外,不要忘记对 `$CATALINA_HOME/conf` 目录下的敏感文件进行权限控制,以...
外部命令是指存储在特定目录下的可执行文件,如`/bin`, `/sbin`等。这些命令通常是由系统管理员安装的,并且可以通过`PATH`环境变量找到它们的位置。 ##### 3、实用程序 实用程序是一系列用于日常任务的工具,如...
`exec`命令用于运行外部程序;`fileevent`命令用于处理文件事件。 在使用手册时,开发者可以查找特定命令的用法,包括它的语法、参数说明、示例代码和可能遇到的常见错误及其解决方案。手册通常也会提供一些高级...
- **Exec命令**:讲解如何使用`exec`命令执行外部命令或程序。 - **Open命令**:介绍如何使用`open`命令打开文件。 #### 二十一、了解命令和变量的存在 - **Info命令**:使用`info`命令来查询命令和变量的存在情况...
它可以执行内部命令和外部命令,例如 `cd`、`ls`、`mkdir` 等。 程序设计语言 脚本( Scripting ) --------------------------------- 脚本是一种编程方式,使用 Shell 脚本语言编写的程序可以自动执行各种任务。...
- **Exec Source**: 通过执行外部命令来捕获其标准输出或错误输出。 - **Taildir Source**: 监听指定目录下的文件变化,读取新增内容。 - **JMS Source**: 从 Java 消息服务 (JMS) 提供者处接收数据。 当内置...
内部命令与内建 11.1. 作业控制命令 12. 外部过滤器,程序和命令 12.1. 基本命令 12.2. 复杂命令 12.3. 时间/日期 命令 12.4. 文本处理命令 12.5. 文件与归档命令 12.6. 通讯命令 12.7. 终端控制命令 ...
- **环境隔离**: 使用 `exec` 命令可以替换当前进程的执行上下文。 - **子进程**: 使用 `command` 或者 `(command)` 来创建子进程执行命令。 #### 受限 Shell - **受限模式**: 受限 shell 限制用户只能执行特定的...
5. **信号处理**:进程可能会监听并响应特定的系统信号,例如`SIGINT`(中断)或`SIGTERM`(终止),以优雅地处理外部命令。 6. **文件系统交互**:读取和修改进程相关的文件,如`/proc`目录下的进程信息文件,用于...