【Linux知识】exec命令行详解
文章目录
- 概述
- 主要用途
- 和 bash 有什么区别?
概述
在 Linux 系统中,exec 命令用于执行一个可执行文件,替换当前进程的映像。也就是说,当你在终端中使用 exec 命令后,当前的 shell 会被替换为 exec 指定的程序,并且不会返回原来的 shell。
以下是 exec 命令的一些基本用法和选项:
-
基本用法:
exec [OPTION]... COMMAND [ARG]... -
选项:
-a name:设置新进程的命令名称为name。-c:使用 COMMAND 的环境变量。-e path:使用path作为新进程的文本段。-l [COMMAND]或--login [COMMAND]:像登录 shell 一样运行 COMMAND。-v:显示版本信息并退出。--help:显示帮助信息并退出。
-
示例:
- 替换当前 shell 为
bash:exec bash - 替换当前 shell 为
vim编辑器,并设置新进程的命令名称为vi:exec -a vi vim
- 替换当前 shell 为
请注意,一旦使用了 exec,当前的 shell 就会被替换,除非你使用 exec 来启动一个新的 shell(比如 exec bash),否则你不会回到原来的 shell。这意味着如果你在脚本中使用 exec,脚本执行完毕后不会有任何返回,因为 exec 已经替换了当前的 shell 进程。
主要用途
exec 命令在 Linux 和 Unix 系统中的用途广泛,以下是一些具体的用途和相应的例子:
-
替换当前 shell:
- 用途:当你想要完全切换到另一个程序,并且不再返回到当前 shell 时。
- 例子:
这条命令会用exec vimvim编辑器替换当前的 shell,一旦退出vim,原来的 shell 将不会恢复。
-
运行后台进程:
- 用途:在后台运行一个进程,并且不阻塞当前 shell。
- 例子:
这条命令创建了一个管道文件exec 3<>/tmp/mypipe ; some_command <&3 >&3 3<&-/tmp/mypipe并将其与文件描述符 3 绑定,然后执行some_command,其输入输出都通过这个管道进行,而当前 shell 仍然可用。
-
重定向标准输入输出:
- 用途:将程序的标准输入输出重定向到文件。
- 例子:
这会将exec > output.txt 2> error.txt exec lsls命令的标准输出重定向到output.txt,标准错误重定向到error.txt。
-
改变进程名称:
- 用途:在 ps 命令中显示不同的进程名称。
- 例子:
这会将当前 shell 的进程名称改为exec -a my_program /path/to/programmy_program,而实际执行的是/path/to/program。
-
登录 shell 模式:
- 用途:以登录 shell 的方式执行命令,加载用户的 shell 配置。
- 例子:
这会以登录 shell 的方式启动一个新的 bash shell,加载用户的exec -l bash.bash_profile或.profile。
-
改善脚本性能:
- 用途:在脚本中执行命令时,减少进程数量。
- 例子:
这个脚本创建了一个到#!/bin/bash exec 5<>/dev/tcp/somehost/someport cat >&5 exec 5<&-somehost的someport的 TCP 连接,并将其与文件描述符 5 绑定,然后通过这个连接发送数据。
-
创建守护进程:
- 用途:创建一个守护进程,该进程在后台运行,不占用前台终端。
- 例子:
这条命令会将exec /path/to/daemon &daemon程序放到后台执行,并且不会占用前台终端。
-
环境隔离:
- 用途:为特定程序创建一个全新的环境。
- 例子:
这会为exec -c env /path/to/program/path/to/program创建一个新的环境,其中不包含当前 shell 的环境变量。
这些例子展示了 exec 命令的灵活性和多样性,它可以根据需要以多种方式使用,以适应不同的场景和需求。
和 bash 有什么区别?
exec 命令和 bash 有一些关键的区别,主要体现在它们的行为和用途上:
-
进程替换:
exec用于替换当前的 shell 进程。当你执行exec命令时,当前的 shell 进程会被替换为exec指定的程序,而不会创建新的进程。bash是一个独立的 shell 程序,当你启动bash时,它会创建一个新的进程。
-
返回行为:
- 使用
exec执行命令后,如果命令成功执行,当前的 shell 进程将被替换,不会返回到原来的 shell。 - 使用
bash启动一个新的 shell 会创建一个新的 shell 进程,你可以在新的 shell 中执行命令,并且在执行完毕后可以返回到原来的 shell。
- 使用
-
用途:
exec通常用于脚本中,当你想要替换当前的 shell 环境或者在后台执行一个命令时使用。bash是一个交互式的命令解释器,用于执行用户输入的命令,也可以用于编写和执行 shell 脚本。
-
环境变量和工作目录:
exec会继承当前 shell 的环境变量和工作目录,除非你使用特定的选项来改变这些(比如-a来改变命令名称,或者-e来改变环境变量)。bash在启动时会读取配置文件(如.bashrc或/etc/profile),并设置自己的环境变量和工作目录。
-
脚本中的使用:
- 在 shell 脚本中,
exec可以用来执行一个命令,并替换当前的 shell 进程,这在某些情况下可以减少进程数量,提高效率。 bash通常用于启动一个新的 shell 进程来执行脚本或者命令。
- 在 shell 脚本中,
-
退出状态:
exec命令本身没有退出状态,因为它替换了当前进程。被exec执行的命令的退出状态会成为当前进程的退出状态。bash作为一个新的进程,有自己的退出状态,当bash进程结束时,它的退出状态会被返回。
总结来说,exec 是一个用于替换当前进程的命令,而 bash 是一个独立的 shell 程序,用于解释和执行命令。两者在 shell 编程和命令执行中扮演着不同的角色。
相关文章:
【Linux知识】exec命令行详解
文章目录 概述主要用途和 bash 有什么区别? 概述 在 Linux 系统中,exec 命令用于执行一个可执行文件,替换当前进程的映像。也就是说,当你在终端中使用 exec 命令后,当前的 shell 会被替换为 exec 指定的程序ÿ…...
【学术小白的学习之路】基于情感词典的中文句子情感分析(代码词典获取在结尾)
【学术小白的学习之路】基于情感词典的情感分析 1.基础函数1.1 判断情感词的否定词数量1.2 导入情感词典1.3 切分句子1.3.1为什么划分1.3.2 划分代码 1.4 完整代码 2.导入词典3.中文情感分析算法思路4.1情感词获取思路4.2 计算情感分值4.3 得分的归一化处理 4.实证5.总结 本文的…...
Linux 中 grep、sed、awk 命令
1. awk:强大的文本分析工具 awk,全称“Awk语言”,是一种专门用于处理文本文件的语言。它不仅能够根据关键字匹配某一行,还能进行复杂的文本分析和处理。awk的语法简洁明了,功能强大,是文本处理领域的佼佼者…...
一起考高项啊--现代化基础设施(工业互联网)
1、工业互联网的内涵和外延 工业互联网不是互联网在工作的简单应用,是具有更为丰富的内涵和外延。 它既是工业数字化、网络化、智能化转型的基础设施,也是互联网、大数据、人工智能与实体经济深度融合的应用模式,同时也是一种新业态、新产业…...
python学opencv|读取图像(二十)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...
期权懂|如何减小个股期权交易中的风险?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 如何减小个股期权交易中的风险? 一、选择合适的期权合约 (1)选择活跃的期权合约:投资者应优先选择交易活跃的期权合约。交易活跃的…...
ubuntu20.04 wget下载--段错误 (核心已转储)
用wget下载时总是在快下载完成时遇到段错误 untu2004-9.1.0_1.0-1_am 99%[> ] 1.63G 3.11MB/s 剩余 1s s段错误 (核心已转储)有以下两种解决方法: 1.手动下载 wget后面就是要下载的资源的链接,直接复制到浏览器中下载即可 如:…...
怎么样保持mysql和redis数据一致性
保持 MySQL 和 Redis 数据的一致性是一个常见的挑战,因为 MySQL 是传统的关系型数据库,而 Redis 是内存数据库,通常用于缓存和高性能存储。这两者的数据更新方式不同,特别是当 Redis 用作缓存时,可能会存在缓存和数据库之间的数据不一致问题。为了保持数据一致性,通常可以…...
剑指Offer|LCR 013. 二维区域和检索 - 矩阵不可变
LCR 013. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 实现 NumMatrix 类: NumMatrix(…...
aosp15 - Activity生命周期切换
本文探查的是,从App冷启动后到MainActivity生命周期切换的系统实现。 调试步骤 在com.android.server.wm.RootWindowContainer#attachApplication 方法下断点,为了attach目标进程在com.android.server.wm.ActivityTaskSupervisor#realStartActivityLock…...
vxe-table 虚拟滚动的动态响应
虚拟滚动主要是在有限范围内渲染想要显示的数据,主要体现在懒加载数据和动态渲染上。如何提高虚拟滚动的操作性呢?请看本章解析 1.什么是虚拟滚动?代码如何实现? VXE-Table提供了一种名为“虚拟滚动”的功能,该功能可…...
quasar dev 命令卡住很久
别以为这是一个瞬间的截图,其实停留在这里很久很久。 折腾挺久,无论npm run dev:proxy还是 quasar dev,都是一样的情况。 最终解决办法: 有语法问题,通过 quasar build 命令暴露出来错误所在的行数。...
黑盒RCE测试 异或测试
前言 了解了漏洞的原理之后就需要知道 他在哪能出现 并且被利用 这个还是很重要的 异或测试 使用异或(XOR)运算进行加密解密的原理_异或加密-CSDN博客 异或测试是在 白盒内执行的 一个例题看一下 输入什么都是会报错 这种情况就需要使用 异或计…...
kotlin中泛型中in和out的区别
概念含义 in关键字(逆变) 在Kotlin泛型中,in关键字主要用于定义逆变(Contravariance)。它表示一个泛型类型参数可以是指定类型或者它的超类型。简单来说,就是对于类型A和B,如果A是B的子类型&…...
c# iis 解决跨域问题
该错误是一个典型的跨域问题,说明从 http://www.fuc.com 发起的请求被目标服务器(https://aip.baidubce.com)拒绝,原因是目标服务器未返回正确的 AccessControlAllowOrigin 响应头。 解决方法 1. 了解问题的本质 CORS(…...
MySQL版本对应的mysql-connector-java版本下载地址
MySQL版本mysql-connector-java版本mysql-connector-java下载地址MySQL安装版下载地址MySQL免安装版下载地址5.1.x5.1.xmysql-connector-java 5.1.xMySQL Installer 5.1.xMySQL Community Server 5.1.x5.5.x5.1.x, 5.5.x mysql-connector-java 5.1.x, mysql-connector-java 5.5…...
【读书笔记】《论语别裁》爱与罪
一、内容摘要 《论语别裁》第01章讨论了孔子关于孝悌的思想,以及其在中国文化中的重要性和复杂性。文中引用了有子的观点,强调孝弟是为人之本。然而,随着历史的发展,孔子的思想也被误解或被用作维护专制统治的工具。通过司马迁的…...
uniApp上传文件踩坑日记
最近在做移动端app,开始接触uniapp。想着直接用PC端的前后端API去做文件上传,但是uniapp的底层把请求拆成了普通请求和文件上传请求,所以不能用一个axios去做所有请求的处理,拆成uni.request和uni.uploadFile去分别处理两种情况。…...
Webhook 是什么?详解其工作原理
在现代技术中,一切都相互连接,每个应用程序通过许多服务的组合和协调实现无缝工作。这种协调是通过 webhooks 实现的。 Webhooks 是基于 HTTP 的回调函数,其中一个服务使用 API 立即通知另一个服务发生的事件。这就是简单的版本。从技术上讲…...
log4j2漏洞复现(CVE-2021-44228)
靶场环境 步骤一:设置出战规则 步骤二:开启靶场 cd vulhub cd log4j cd CVE-2021-44228 docker-compose up -d docker ps 访问端口 靶机开启 步骤三:外带注入 获得dnslog 靶机访问dnslog 得到dnslog的二级域名信息 步骤四:构造…...
geo优化软件系统好用的服务商
在当今数字化时代,GEO优化软件系统对于企业的重要性日益凸显。它能够帮助企业根据地理位置信息精准地推送广告、优化业务流程,从而提高营销效果和运营效率。那么,市场上有哪些好用的GEO优化软件系统服务商呢?今天我们就来一探究竟…...
AAV三质粒比例优化指南|教你如何选择合适的GMP级PEI转染试剂【曼博解析】
优化AAV三质粒系统比例必看!教你挑选合适的GMP级PEI转染试剂摘要:本文从三质粒系统比例与挑选GMP级转染试剂的维度,分享如何优化AAV病毒包装工艺。关键词:PEI转染试剂, AAV病毒包装,AAV三质粒比例,GMP级转染试剂,质粒转染,DNA转染…...
x64dbg调试器完全指南:5步掌握Windows逆向工程核心技术 [特殊字符]
x64dbg调试器完全指南:5步掌握Windows逆向工程核心技术 🚀 【免费下载链接】x64dbg An open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis. 项目地址: https://gitcode.com/gh_mirrors/x6/x64dbg …...
软件实施交付转运维学习第五天:用户管理和权限管理
今天是软件实施交付转运维学习的第五天。前面四天我们分别了解了运维的基本概念、Linux常用命令。今天,我们进入一个既基础又极其重要的模块——用户管理和权限管理。无论是操作系统层面,还是应用系统层面,用户和权限都是安全的基石。谁可以访…...
智能医学影像分析系统 手骨X光影像的骨折检测与分类任务 手骨x光识别10653期(数据集+模型+界面+代码)
手骨x光识别10653期 README 项目概述 类别 远端指间关节 掌指关节 近端指间关节 桡骨 尺骨 腕部/手腕手骨X光影像数据集分析数据概览关键信息总数量及类别8900,类别:6数据集数量(取整)8900数据格式与应用价值YoloVOC,适…...
深度解析:macOS微信防撤回插件WeChatIntercept的5个核心技术揭秘
深度解析:macOS微信防撤回插件WeChatIntercept的5个核心技术揭秘 【免费下载链接】WeChatIntercept 微信防撤回插件,一键安装,仅MAC可用,支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 作为…...
忍者像素绘卷:天界画坊C++高性能推理引擎封装实战
忍者像素绘卷:天界画坊C高性能推理引擎封装实战 1. 为什么需要高性能推理引擎 在游戏开发和工业软件领域,实时图像生成和处理对性能要求极高。传统的Python推理框架虽然易用,但在延迟敏感场景下往往力不从心。这就是我们需要用C打造专属推理…...
开源中国教育战略升级:构建AI时代全链条人才培养生态
在数字化转型浪潮席卷全球教育的当下,开源中国以一场战略升级宣告其从工具服务商向AI教育基础设施提供者的身份转变。4月8日至10日在北京展览馆举办的第35届北京教育装备展示会上,这家国内领先的开源技术平台展示了其覆盖K12至高等教育的完整解决方案&am…...
Krita-Vision-Tools:数字艺术家的AI助手,一键智能选区革命
Krita-Vision-Tools:数字艺术家的AI助手,一键智能选区革命 【免费下载链接】krita-vision-tools Krita plugin which adds selection tools to mask objects with a single click, or by drawing a bounding box. 项目地址: https://gitcode.com/gh_mi…...
Beyond Compare 5密钥生成器深度解析:高效解决文件对比工具的授权挑战
Beyond Compare 5密钥生成器深度解析:高效解决文件对比工具的授权挑战 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 文件对比工具Beyond Compare 5作为开发者和IT专业人士的得力助…...
