前面讲过,在 Linux 系统中“一切皆文件”,Linux 命令也不例外。那么,当编辑完成 Linux 命令并回车后,系统底层到底发生了什么事情呢?

简单来说,Linux 命令的执行过程分为如下 4 个步骤。

1) 判断路径

判断用户是否以绝对路径或相对路径的方式输入命令(如 /bin/ls),如果是的话直接执行。

2) 检查别名

Linux 系统会检查用户输入的命令是否为“别名命令”。要知道,通过 alias 命令是可以给现有命令自定义别名的,即用一个自定义的命令名称来替换原本的命令名称。

例如,我们经常使用的 rm 命令,其实就是 rm -i 这个整体的别名:

[root@localhost ~]# alias rm
alias rm='rm -i'

这使得当使用 rm 命令删除指定文件时,Linux 系统会要求我们再次确认是否执行删除操作。例如:

[root@localhost ~]# rm a.txt <-- 假定当前目录中已经存在 a.txt 文件
rm: remove regular file 'a.txt'? y <-- 手动输入 y,即确定删除
[root@localhost ~]#

这里可以使用 unalias 命令,将 Linux 系统设置的 rm 别名删除掉,执行命令如下:

[root@localhost ~]# alias rm
alias rm='rm -i'
[root@localhost ~]# unalias rm
[root@localhost ~]# rm a.txt
[root@localhost ~]# <--直接删除,不再询问

注意,这里仅是为了演示 unalisa 的用法,建议读者删除 rm 别名之后,再手动添加到系统中,执行如下命令即可再次成功添加:

[root@localhost ~]# alias rm='rm -i'

3) 判断是内部命令还是外部命令

Linux命令行解释器(又称为 shell)会判断用户输入的命令是内部命令还是外部命令。其中,内部命令指的是解释器内部的命令,会被直接执行;而用户通常输入的命令都是外部命令,这些命令交给步骤四继续处理。

内部命令由 Shell 自带,会随着系统启动,可以直接从内存中读取;而外部命令仅是在系统中有对应的可执行文件,执行时需要读取该文件。

判断一个命令属于内部命令还是外部命令,可以使用 type 命令实现。例如:

[root@localhost ~]# type pwd
pwd is a shell builtin <-- pwd是内部命令
[root@localhost ~]# type top
top is /usr/bin/top <-- top是外部命令

4) 查找外部命令对应的可执行文件

当用户执行的是外部命令时,系统会在指定的多个路径中查找该命令的可执行文件,而定义这些路径的变量,就称为 PATH 环境变量,其作用就是告诉 Shell 待执行命令的可执行文件可能存放的位置,也就是说,Shell 会在 PATH 变量包含的多个路径中逐个查找,直到找到为止(如果找不到,Shell 会提供用户“找不到此命令”)。

PATH 环境变量的改变,会直接影响 Shell 查找 Linux 命令的过程,有关 PATH 环境变量(是什么、如何查看、如何修改等),可阅读《Linux PATH环境变量》一文做详细了解。

3.19 Linux命令的执行过程是怎样的?(新手必读)的更多相关文章

  1. pv命令监控Linux命令的执行进度

    pv命令监控Linux命令的执行进度 http://www.techweb.com.cn/network/system/2015-12-14/2241124.shtml yum install -y ...

  2. 深入Redis命令的执行过程

    深入Redis命令的执行过程 Redis 服务器: Redis 服务器实现与多个客户端的连接,并处理这些客户端发送过来的请求,同时保存客户端执行命令所产生的数据到数据库中.Redis 服务器依靠资源管 ...

  3. 浅析vue-cli脚手架命令的执行过程

    上一篇文章,已经大致了解脚手架是什么以及脚手架是如何工作的.接下来,稍微深入一下脚手架的工作过程(以vue-cli为例).首先抛出3个问题: 1.明明全局安装的是@vue/cli,最后执行的命令却是v ...

  4. 使用 pv 命令监控 linux 命令的执行进度

    如果你是一个 linux 系统管理员,那么毫无疑问你必须花费大量的工作时间在命令行上:安装和卸载软件,监视系统状态,复制.移动.删除文件,查错,等等.很多时候都是你输入一个命令,然后等待很长时间直到执 ...

  5. Linux命令的执行

    为什么在提示符下命令可以被执行呢? 执行命令过程 输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来 shell本身也是一个程序,只不过 ...

  6. LINUX 命令定期执行可执行文件

    linux命令将nodejs文件变成可执行文件 在linux中一般我们在运行node文件时用的命令为: node example.js 首先.删除文件后缀,在linux命令下添加可执行权限 mv ex ...

  7. 在Linux命令行执行python命令

    在Linux的命令行执行python的某些命令: [root@centos7 ~]# echo "import sys ;print(sys.path)"|python3.6 [' ...

  8. Ping 命令的执行过程和应用协议

    1. ICMP是“Internet Control Message Ptotocol”的缩写.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息. 控制消息是指网络通不通.主机 ...

  9. 关于ansible命令的执行过程

    首先说明一下.每一个模块.都是有相应的.py文件的,可以通过rpm -ql ansible看到 要观察模块执行过程,可以在ansible命令执行时加上-v或-vvv,或者-vvvv看得更加详细 ans ...

  10. sqlplus文件查看自带oracle命令的执行过程

    问题描述:看到一篇文章 在$ORACLE_HOME/bin/sqlplus中可以查看到数据库命令的查询语句.可以直接编辑sqlplus文件,查到到我们平时标准系统命令的原脚本,但是自己进行编辑查看却是 ...

随机推荐

  1. AWG(American wire gauge)美国线规

    AWG(American wire gauge)美国线规,是一种区分导线直径的标准,又被称为 Brown & Sharpe线规.这种标准化线规系统于1857年起在美国开始使用.AWG前面的数值 ...

  2. [SHOI2009] 会场预约 题解

    LG2161 显然: 任意时刻每个点最多被一条线段覆盖 暴力删每条线段的复杂度是对的 插入 \([l,r]\) 时需要删除的线段要么被 \([l,r]\) 包含,要么覆盖 \(l\) 或 \(r\) ...

  3. WM_LBUTTONDOWN,WM_LBUTTONUP

    WM_LBUTTONDOWN //鼠标左键按下消息WM_LBUTTONUP //鼠标左键弹起消息参数和按下一样 当用户在窗口的客户区域中按住鼠标左键时,会发布WM_LBUTTONDOWN消息.如果未捕 ...

  4. centos7.5离线安装zabbix4.0

    一.配置环境 1.1 Linux环境说明 zabbix 安装要求 https://www.zabbix.com/documentation/4.0/zh/manual/installation/req ...

  5. zabbix资产清单inventory管理

    概述 监控的设备越来越多,有时候搞不清楚哪台服务器是什么配置,大多公司有自己的资产清单,要去专门的系统查询显得多少有点麻烦.为此,zabbix专门设置了设备资产管理功能.我们创建或者编辑主机的时候,可 ...

  6. Windows提权方式汇总

    windows 提权 一.土豆(potato)家族提权 原理 土豆提权就是通过 windows 的 COM(Component Object Model,组件对象模型)类.向指定的服务器端口发送 NT ...

  7. 推荐一款开源一站式SQL审核查询平台!功能强大、安全可靠!

    1.前言 在当今这个数据驱动的时代,数据库作为企业核心信息资产的载体,其重要性不言而喻.随着企业业务规模的不断扩大,数据库的数量和种类也日益增多,这对数据库的管理与运维工作提出了前所未有的挑战.在这样 ...

  8. 使用kamailio进行分机注册及互拨

    操作系统版本:Debian 12.5_x64 kamailio版本:5.8.2 kamailio作为专业的SIP服务器,可承担注册服务器的角色.今天记录下kamailio作为注册服务器,承接分机注册, ...

  9. Java基础 韩顺平老师的 泛型 的部分笔记

    553,泛型引入 package com.hspedu.list_; import java.util.*; import java.util.concurrent.CompletionService ...

  10. 【YashanDB数据库】数据库运行正常,日志出现大量错误metadata changed

    问题现象 客户在麒麟kylin v10 sp1环境上部署YashanDB,运行正常, 但是在巡检中发现run.log中有大量错误日志文件metadata changed,需要排查原因 问题单:前置机大 ...