一.命令分类

Linux命令分为两类,具体为内部命令和外部命令

内部命令:

指shell内部集成的命令,此类命令无需人为安装,开机后自动运行在内存中,命令help查看所有内部命令的详情,如cd、type、echo、time、true等。

外部命令:

指通过外部介质安装的命令工具包,如通过yum、rpm等方式安装,具体安装路径在$PATH下。

命令查看:

type查看命令分类,内部命令显示 shell相关信息,外部命令则显示$PATH路径

二.命令执行顺序

命令形态主要分为4类:alias别名命令、内部命令、hash缓存命令和外部命令。

实例:echo即是内部命令又是外部命令,以echo为例实验证明其执行顺序

1.将/bin/echo 复制到/usr/local/bin/下,用which -a查看echo的路径($PATH中/usr/local/bin路径优先于/bin,则echo优先使用/usr/local/bin/下的echo)

2.查看内部echo,并关闭内部命令的echo,使用echo命令在hash中形成记录,并查看记录

3.删除/usr/local/bin下的echo,hash中任然存echo的路径/usr/local/bin,再次使用echo “welcome to xi'an”

结论:执行hash中的命令优先$PATH中的命令

4.开启内部命令echo,再次执行echo “welcome to xi'an”

结论:说明内部命令优先于hash缓存命令和外部命令

5.定义别名alias echo=“hostname”,如果echo 输出是hostname的内容时,则表明alias比内部命令优先

总结:命令执行顺序为alias——内部命令——hash缓存——外部命令

三.命令分类及查找基本命令

1.type command 查看是否是内部命令

2.which -a| --skip-alias command 查看所有包含command的路径|不查看别名的路径

3.enable -n command 关闭内部命令

4.hash -l 显示hash缓存 -d 清楚具体缓存命令路径 -r 删除所有命令路径

5.alias 定义别名 ualias取消别名

四.命令执行过程

ls命令执行过程:

下面进行简单分析:

1、shell不断询问是否有键盘输入,用户以enter结束键盘输入后,shell程序以空格为分隔符,得到"ls","-l","*.c",三个字符串。

2、shell发现第三个字符串包含"*"通配符,就会在当前路径(或指定路径)下搜索满足这个通配符的文件。有bar.c和foo.c两个文件,然后展开成{"ls","-l","bar.c","foo.c"}四个字符串,并保存在argv这个二维字符数组中,并赋值argc为4。

3、shell然后会 alias——内部命令——hash缓存——外部命令,寻找一个叫"ls"的命令。如果存在,则fork()一个子进程,调用exec()加载运行ls命令。ls的main(int argc, string ** argv)函数的参数就是从shell那里得来的。若不存在就会提示用户"command not found"。

4、ls程序执行后,会分析argc和argv,"-l"表示这是一个选项开关,表明用户想得到文件的详细信息,并把这个开关量保存,以便最后输出的时候选择信息的格式。

5、ls执行完既定的步骤后,退出并返回退出码,若成功则返回0,否则根据错误的不同返回不同的非零数字。

6、shell在得到成功退出码后,继续等待用户输入。

Linux命令执行过程的更多相关文章

  1. saltstack命令执行过程

    saltstack命令执行过程 具体步骤如下 Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc salt ...

  2. ping命令执行过程详解

    [TOC] ping命令执行过程详解 机器A ping 机器B 同一网段 ping通知系统建立一个固定格式的ICMP请求数据包 ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运 ...

  3. Linux脚本执行过程重定向

    Linux脚本执行过程重定向 一.bash调试脚本,并将执行过程重定向到指定文件 bash –x  shell.sh 2>&1 | tee shell.log

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

    Linux命令执行顺序— ||和&&和; command1 && command2: &&左边的command1执行成功(返回0表示成功)后,& ...

  5. Redis 命令执行过程(上)

    今天我们来了解一下 Redis 命令执行的过程.在之前的文章中<当 Redis 发生高延迟时,到底发生了什么>我们曾简单的描述了一条命令的执行过程,本篇文章展示深入说明一下,加深读者对 R ...

  6. Redis 命令执行过程(下)

    在上一篇文章中<Redis 命令执行过程(上)>中,我们首先了解 Redis 命令执行的整体流程,然后细致分析了从 Redis 启动到建立 socket 连接,再到读取 socket 数据 ...

  7. Java调用Linux命令执行

    调用方式 Java调用linux命令执行的方式有两种,一种是直接调用linux命令,一种是将linux命令写到.sh脚本中,然后调用脚本执行. 详细说明 直接调用:使用java中lang包下面的Run ...

  8. linux在命令执行过程中ctrl +z 后[1]+ Stopped

    进程挂起 stopped 代表有进程挂起 [1]是id号 可以通过Linux命令:jobs 查看挂起进程 fg 1 把任务1放到前台 bg 1 把任务1放到后台

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

    摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...

随机推荐

  1. [atAGC048F]01 Record

    先将这个序列翻转,贪心找到最长的'101010--'的形式的子序列并删除,重复此过程并记这些字符串长度依次为$l_{1},l_{2},...,l_{n}$,若最终还有字符剩余则一定无解 假设$S$中元 ...

  2. deepin系统安装与linux磁盘分区

    制作系统盘工具 链接:https://pan.baidu.com/s/1zcV0oulUErUdU0PAGxTDdw 提取码:1111 链接:https://pan.baidu.com/s/13zBd ...

  3. 基于nexus私服配置项目pom.xml和maven settings.xml文件

    备注:搭建nexus私服请参考上一篇文章基于Docker搭建Maven私服Nexus,Nexus详解 一:将jar发送到nexus私服务器 1.pom.xml文件添加配置 pom.xml文件中的这个版 ...

  4. 统计学习3:线性支持向量机(Pytorch实现)

    学习策略 软间隔最大化 上一章我们所定义的"线性可分支持向量机"要求训练数据是线性可分的.然而在实际中,训练数据往往包括异常值(outlier),故而常是线性不可分的.这就要求我们 ...

  5. GIT Bash 简单讲解-git如何推/拉代码

    GIT Bash 简单讲解 一.            注册/登录GIT账号 注册(或者登录) GitHub地址:https://github.com/ 注册不做详细的讲解,按照注册指示进行注册就可以 ...

  6. 洛谷 P6860 - 象棋与马(找性质+杜教筛)

    题面传送门 首先我们来探究一下什么样的 \((a,b)\) 满足 \(p(a,b)=1\).不难发现只要点 \((1,0)\) 能够到达,那么网格上所有点都能到达,因为由于 \((1,0)\) 能够到 ...

  7. 【GS文献】全基因组选择模型研究进展及展望

    目录 1. GS概况 2. GS模型 1)直接法 GBLUP 直接法的模型改进 ①单随机效应 ②多随机效应 2)间接法 间接法模型 基于间接法的模型改进 3. GS模型比较 模型比较结论 4.问题及展 ...

  8. [Linux] 非root安装Lefse软件及其数据分析

    说明 Lefse软件是宏组学物种研究常用软件,一般大家用在线版本即可.但要搭建在Linux集群环境中有点烦,记录一下折腾过程. 安装 这个软件是python2写的,因此假设我已经安装好了较高版本的py ...

  9. 毕业设计之ansible_quan_bbs设置

    ansible创建连接: 客户端(管理节点) 可能需要安装包: yum install -y libselinux-python 实现ssh免密码登陆管理的服务器 [apps@anza ~]$ sud ...

  10. ZAQI

    mysql> CREATE TABLE emploee ( -> name CHAR(64) NOT NULL, -> email CHAR(64), -> password ...