当前位置: 首页 > news >正文

Linux命令:内置命令与外部命令的本质区别

        在Linux中,命令分为内置命令(Shell Builtin)外部命令(External Command),它们的本质区别在于执行方式存在形式。以下是详细解释:

目录

一、内置命令(Shell Builtin)

二、外部命令(External Command)

三、关键区别

四、为什么需要区分?

五、特殊情况:同名命令的优先级

六、扩展:type 和 command 命令

七、总结


一、内置命令(Shell Builtin)

  • 定义
    直接内置于Shell(如Bash)中的命令,不需要调用外部程序,由Shell自身解析和执行。

  • 特点

    • 执行速度快:无需启动新进程,直接由Shell处理。

    • 与Shell环境紧密相关:通常用于修改Shell自身状态(如目录切换、变量操作)。

    • 无法通过路径查找:例如 cd 没有独立的可执行文件。

  • 常见内置命令

    cd, echo, export, alias, exit, history, source, pwd
  • 如何判断(例子)

    type cd      # 输出: cd is a shell builtin


二、外部命令(External Command)

  • 定义
            独立的可执行程序,通常存放在文件系统的特定路径(如 /bin/usr/bin,由Shell通过创建子进程调用。

  • 特点

    • 以文件形式存在:可通过路径找到(如 /bin/ls)。

    • 功能通用:不依赖特定Shell,所有Shell均可调用。

    • 启动稍慢需要从磁盘加载程序并创建新进程。

  • 常见外部命令

    ls, cp, mv, grep, find, cat, mkdir
  • 如何判断(例子)

    type ls

  • 含义
    ls 命令被定义为一个别名(alias)实际执行时会自动替换为 ls --color=auto

  • 作用
    --color=auto 参数让 ls 根据文件类型显示颜色(如目录显示蓝色,可执行文件显示绿色),提升可读性。

  • 验证别名定义
    运行 alias ls 会显示同样的结果:

which grep

  • 含义

    • 第一行:grep 也被别名化为 grep --color=auto(高亮匹配文本)。

    • 第二行:grep 的实际可执行文件路径是 /usr/bin/grep

  • 关键点
    which 命令不仅显示路径,还会提示别名(但某些Shell中可能需要 which -a 显示全部匹配)。

命令别名形式原名(原始命令)调用原名的方法
lsls --color=auto/usr/bin/ls\ls 或 /bin/ls
grepgrep --color=auto/usr/bin/grep\grep 或 /usr/bin/grep

重点:别名的本质是一个字符串替换:输入别名时,Shell会将其替换为实际的命令或参数!!!


三、关键区别

特性内置命令外部命令
存储位置Shell进程内部文件系统(如 /usr/bin/ls
执行速度快(无进程创建开销)稍慢(需启动子进程)
依赖关系仅限特定Shell(如Bash)独立于Shell,依赖系统环境变量PATH
功能范围管理Shell环境通用系统操作

四、为什么需要区分?

  • 内置命令
            用于高效操作Shell自身(如 cd 改变当前Shell进程的工作目录)。若作为外部命令实现,子进程的目录变更无法影响父进程(Shell)。

  • 外部命令
    提供通用功能(如文件操作),可被所有Shell或脚本复用。


五、特殊情况:同名命令的优先级

当内置命令与外部命令同名时,内置命令优先。若需强制调用外部命令,需指定路径:

# 强制调用外部命令 `echo`(而非Bash内置的echo)
/bin/echo "Hello"

六、扩展:type 和 command 命令

  • type
    查看命令类型(内置、外部或别名):

    type -a echo  # 显示所有同名命令的类型和路径

  • command
    忽略别名和函数,直接调用命令本身:

    command ls     # 绕过可能的别名定义


七、总结

  • 内置命令是Shell的“亲儿子”,直接内置,高效但功能受限。

  • 外部命令是“第三方工具”,以文件形式存在,功能通用但需启动进程。

  • 理解两者的区别有助于优化脚本性能(如避免频繁调用外部命令)和解决环境问题。

http://www.xdnf.cn/news/1070047.html

相关文章:

  • 高中成绩可视化平台开发笔记
  • 时间同步 gptp ptp
  • 推荐一个前端基于vue3.x,vite7.x,后端基于springboot3.4.x的完全开源的前后端分离的中后台管理系统基础项目(纯净版)
  • 操作系统面试知识点(1):操作系统基础
  • 解锁AI无限潜能!景联文科技数据产品矩阵再升级:多语言题库、海量语料、垂域代码库,全面赋能大模型训练
  • Pydantic 模型
  • vscode运行c++文件和插件的方法
  • 信息化系统流程管理模块,企业高价值资产的跨省/市运输审批流程的功能
  • PHP基础2(流程控制,函数)
  • redis8.0新特性:t-digest计算数据百分位
  • 美团业务调整,但不裁员不降薪
  • 使用 Python 自动化文件获取:从 FTP 到 API 的全面指南
  • 力扣网C语言编程题:搜索插入位置
  • SpringBoot 中 @Transactional 的使用
  • lua 程序性能分析工具 Plua 推荐
  • CTF:PHP 多关卡绕过挑战
  • python 爬虫 下载视频
  • lua脚本为什么能保证原子性
  • 新手向:Anaconda3的安装与使用方法
  • 【UniApp 日期选择器实现与样式优化实践】
  • 大语言模型介绍
  • 推荐系统的视频特征-视频关键帧特征提取与向量生成
  • 七天学会SpringCloud分布式微服务——02——第一个微服务项目
  • Flink Oracle CDC 总结
  • 六个安全Agent设计模式:有效防止Prompt注入攻击
  • Milvus 资源调度系统的核心部分:「查询节点」「资源组」「数据库」
  • 黑马ReactDay02
  • gitlab https链接转为ssh链接
  • Android 开发 获取Debug 跟 Release 包的SHA1值
  • Host ‘db01‘ is not allowed to connect to this MariaDB server 怎么解决?