Linux命令执行流程

当我们执行一条命令的时候,整个命令执行流程如下:

1、判断路径

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

2、检查别名

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

3、判断用户输入的是内部命令还是外部命令

Linux命令行解释器(又称为 Shell)会判断用户输入的命令是内部命令还是外部命令。其中,内部命令指的是解释器内部的命令,会被直接执行;而用户通常输入的命令都是外部命令。
内部命令: Shell 自带,会随着系统启动,可以直接从内存中读取
外部命令:在系统PATH变量的某个路径下的可执行文件
判断一个命令属于内部命令还是外部命令,可以使用 type 命令查看。

4、内部命令直接执行,外部命令检测是否存在缓存

5、检测PATH路径,有执行,无报错。

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

事实上执行过的外面命令都会保存在内部缓存中,当再次执行相同的命令,会通过缓存调取执行,也就意味着不会搜索PATH路径。

总结,当我们执行一个ping命令之后,整个命令执行的流程步骤如下:
1.检查执行的是否是绝对路径执行
2.检查ping命令是否存在别名
3.检查ping命令是内部命令还是外部命令
4.如果是内部命令直接执行
5.如果是外部命令,检查ping命令是否有缓存,如果没有,查找PATH变量
6.检查PATH路径直到查找到该命令然后执行
7.如果没有找到该命令则返回错误,command not found。

原文地址:https://www.cnblogs.com/liuzgg/p/11801538.html

时间: 2024-10-12 09:30:57

Linux命令执行流程的相关文章

Linux命令执行顺序— ||和&&和; 比较

Linux命令执行顺序— ||和&&和; command1 && command2: &&左边的command1执行成功(返回0表示成功)后,&&右边的command2才能被执行. command1 || command2: 如果||左边的command1执行失败(返回1表示失败),就执行&&右边的command2. command1;command2: 命令顺序执行 //第一个命令执行不成功,第二个命令才执行 [[email

linux 命令执行判断依据--;,&&,||

命令执行判断依据--;,&&,|| 在linux运维过程中或者日常linux系统操作过程中会同时执行多条命令,这样的话需要通过我们的多重命令方式进行处理. 通过使用';'分号执行多个命令,如例: #sync;sync;shutdown -h now 通过判断执行命令,&&/||执行情况 如例: cmd1&&cmd2: 若cmd1执行完毕且正确执行($?=0),则开始执行cmd2 若cmd1执行完毕且错误执行($?!=0),则开cmd2不执行 cmd1||cm

Java调用Linux命令执行

调用方式 Java调用linux命令执行的方式有两种,一种是直接调用linux命令,一种是将linux命令写到.sh脚本中,然后调用脚本执行. 详细说明 直接调用:使用java中lang包下面的Runtime类和Process类,其中Runtime类中的Runtime.getRuntime().exec(linux command)方法可以直接执行linux命令,而Process类可以接收Runtime.getRuntime().exec()类的返回值,并提供了waitFor()方法和destr

CentOS 7.3验证Linux命令执行的优先级

在Linux中,不同的目录下可能有相同的文件.虽然同名,两个文件的作用却完全不同. 执行同一命令,可能会显示完全不同的结果.如pwd本来显示当前工作目录,我们却可以定义别名使它输出时间. 要了解命令执行的先后顺序,首先我们要明白内部命令和外部命令的不同.使用type command可以查看命令类型. 我们可以看到以上四个命令的显示结果是完全不同的. 这里pwd是内部命令,cal是hash(缓存)命令,ls是别名,date则是外部命令. 这里要引进一个变量PATH,通过echo,我们可以查看变量P

CTF Linux 命令执行常规bypass

截断符 常见的RCE的形式是给一个ping的命令执行,只需要输入ip,然后返回ping ip的输出信息 常见的用来截断的符号 &  &&  ;  |  || windows或linux下: command1 && command2 先执行command1后执行command2 command1 | command2 只执行command2 command1 & command2 先执行command2后执行command1 | && ; &a

Linux命令执行的屏幕输出内容重定向到日志文件

摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到文件,比如 echo "hello,word">> temp.txt 那么我现在想把hadoop或者spark的命令执行的屏幕输出到文件怎么办?很简单,命令如下 hadoop jar *.jar $mrClass > mr.log 2>&1 注意上面命令 *

Linux命令执行过程

在shell中可执行命令分为:   内部命令:由shell自带,会随着系统启动   外部命令:在系统中有对应的可执行文件 通过type可查看命令是否为内部命令 [[email protected] ~]#type pwd # 内部命令 pwd is a shell builtin [[email protected] ~]#type top # 外部命令 top is /usr/bin/top 内部命令直接从内存中读取而外部命令需要从系统文件中读取 [[email protected] ~]#e

linux命令执行过程详解

1.执行命令输入命令后回车提请shell程序找到键入命令所对应的可执行程序或者代码,并且由其分期后,提交给内核分配资源将其运行起来.在shell中可执行的命令有俩类:内部命令:由shell自带的内部集成命令help 可以查看内部命令列表 [[email protected] ~]# help GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu) These shell commands are defined internal

redis学习笔记——命令执行流程

基础知识部分 如果需要掌握Redis的整个命令的执行过程,那么必须掌握一些基本的概念!否则根本看不懂,下面我就一些在我看来必备的基础知识进行总结,希望能为后面命令的整个执行过程做铺垫. 事件 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象.服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完