zoukankan      html  css  js  c++  java
  • Bash Shell命令流程

    • 1当我们执行一个命令, 整个命令执行流程如下:
        1. 判断命令是否通过绝对路径执行
        1. 判断命令是否存在alias别名
        1. 判断用户输入的是内部命令还是外部命令
        1. Bash内部命令直接执行,外部命令检测是否存在缓存
        1. 通过PATH路径查找命令,有执行,无报错
    • 2.什么是内部命令,什么是外部命令
      • 内部命令: shell程序自带的命令。
      • 外部命令: 在系统PATH变量的某个路径下的可执行程序。

    3.如何检查用户输入的命令是内部命令还是外部命令*

    #cd命令属于shell内部命令
    [root@linux-node1 ~]# type -a cd
    cd is a shell builtin
    cd is /usr/bin/cd
    
    #ping属于外部命令, 同时会打印当前命令路径
    [root@web ~]# type -a  ping
    ping is /bin/ping
    

    4.如果是外置命令,Bash可以通过查找PATH变量,获取该命令的绝对路径。

    #打印当前环境变量目录
    [root@web ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    

    PS: PATH由多个路径组成,每个路径值之间用冒号间隔,对这些路径的增加和删除操作都将影响到Bash解释器对Linux命令的查找

    5.如果是外置命令还会涉及到一个内存缓存,也就是说,当我们出现重复执行相同的命令,会通过缓存调取执行,也就意味着不会搜索PATH路径。

    #表缓存命令所在位置
    [root@web ~]# hash
    hits	command
       1	/usr/bin/tty
       3	/sbin/ifconfig
    
    #已缓存命令,如果移动位置会导致无法找到该命令
    [root@web ~]# mv /sbin/ifconfig /bin/
    [root@web ~]# ifconfig
    -bash: /sbin/ifconfig: No such file or directory
    
    #删除缓存过的ifconfig命令, 即可执行
    [root@web ~]# hash -d ifconfig
    [root@web ~]# ifconfig
    
    #当然可以清空缓存表
    [root@web ~]# hash -r
    
    #注意: 命令缓存hash需要注意如下情况:
    1.只要执行外部命令1次就会对该命令进行缓存
    2.如果将命令移动了位置,该如何执行
        a.使用绝对路径执行
        b.删除hash表的缓存指令
    

    6.命令执行流程总结: 当我们执行了一个ping命令之后, 整个命令执行的流程步骤如下:
    1) 检查执行的命令是否使用的是绝对路径执行的。
    2) 检查ping命令是否存在alias别名
    3) 检查ping命令是内部命令还是外部命令
    4) 如果是内部命令Bash直接执行,如果是外部命令,首先检查Hash缓存,存在则直接调取
    5) 如果该命令不存在Hash缓存,则通过PATH路径进行逐行查找该命令所在的位置
    6) 如果PATH路径没有查找到该命令所在的路径,则返回错误码。command not found

    别妄自尊大! 别妄自菲薄! QQ技术交流群:Linux架构师之路~ 471443208
  • 相关阅读:
    C++ *this与this的区别(系个人转载,个人再添加相关内容)
    C++ 友元(系转载多人博客,添加个人见解)
    C++模板详解(系转载,但是个人添加了一些内容)
    实验三:klee的执行重现机制(示例分析)
    klee错误汇报二:KLEE的optimize选项的一个困惑
    KLEE错误汇报一:One phenomenon after the execution using klee
    实验一:使用符号执行工具klee对软件进行破解(来自于klee官网)
    个人发现的createProcess调用漏洞
    docker运行时设置redis密码并替换redis默认的dump.rdb
    saltstack入门个人笔记
  • 原文地址:https://www.cnblogs.com/oldxu/p/14543084.html
Copyright © 2011-2022 走看看