为什么在提示符下命令可以被执行呢?

执行命令过程

输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来

shell本身也是一个程序,只不过在用户登录过程中已经加载到内存中了。

对shell可以理解为一个工具箱,集成了很多很多的小工具

shell程序对应磁盘文件

[03:05:41 root@C8[ ~]#ll /bin/bash
-rwxr-xr-x. 1 root root 1219248 Nov 8 11:30 /bin/bash

shell中可执行的两类命令

bash里集成的小工具被称为内部命令,所谓的内外是以属不属于bash来判断的

  • 内部命令:由shell自带的,而且通过某命令形式提供
  • 外部命令:在文件系统路径下有对应的可执行程序文件

区别指定的命令是内部或外部命令

type COMMAND
[03:12:01 root@C8[ ~]#type ll
ll is aliased to `ls -l --color=auto' #这是一个别名
[03:49:43 root@C8[ ~]#type hostname
hostname is /usr/bin/hostname #外部命令并显示路径
[03:50:03 root@C8[ ~]#type echo
echo is a shell builtin #内部命令 shell 建立在里边

当用户输入一个命令,系统先判断是否是内部命令,如果不是内部命令,则按照系统环境变量的地址去磁盘上寻找外部命令

搜索外部命令的次序在$PATH中,如果找到了,就加载到内存中执行。

[03:50:16 root@C8[ ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

内部命令随bash已经加载在内存中,执行效率最高。

外部命硬在硬盘上,每次需要找到再执行,这样执行效率很低。

系统策略可以将不久前执行过的命令路径记录在内存中,方便下次使用。

这种行为叫做hash

[03:59:10 root@C8[ ~]#type hostname
hostname is hashed (/usr/bin/hostname)

查看已被hash的外部命令

hits 代表命令被执行了几次

[03:59:23 root@C8[ ~]#hash
hits command
2 /usr/bin/hostname
1 /usr/bin/lscpu
1 /usr/sbin/runlevel
1 /usr/bin/ls
2 /usr/bin/free

help显示内部命令的帮助

help即是帮助,又显示出所有的内部命令

enable 也可以显示内部命令

[04:16:25 root@C8[ ~]#help
GNU bash, version 4.4.19(1)-release (x86_64-redhat-linux-gnu)
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list. A star (*) next to a name means that the command is disabled. job_spec [&] history [-c] [-d offset] [n] or history -anrw>
(( expression )) if COMMANDS; then COMMANDS; [ elif COMMANDS; >
. filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -x comman>
: kill [-s sigspec | -n signum | -sigspec] pid >
[ arg... ] let arg [arg ...]
[[ expression ]] local [option] name[=value] ...
alias [-p] [name[=value] ... ] logout [n]
bg [job_spec ...] mapfile [-d delim] [-n count] [-O origin] [-s>
bind [-lpsvPSVX] [-m keymap] [-f filename] [-q> popd [-n] [+N | -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir]
caller [expr] pwd [-LP]
case WORD in [PATTERN [| PATTERN]...) COMMANDS> read [-ers] [-a array] [-d delim] [-i text] [>
cd [-L|[-P [-e]] [-@]] [dir] readarray [-n count] [-O origin] [-s count] [>
command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or readonl>
compgen [-abcdefgjksuv] [-o option] [-A action> return [n]
complete [-abcdefgjksuv] [-pr] [-DE] [-o optio> select NAME [in WORDS ... ;] do COMMANDS; do>
compopt [-o|+o option] [-DE] [name ...] set [-abefhkmnptuvxBCHP] [-o option-name] [-->
continue [n] shift [n]
coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilnrtux] [-p] [name[=value] ...> source filename [arguments]
dirs [-clpv] [+N] [-N] suspend [-f]
disown [-h] [-ar] [jobspec ... | pid ...] test [expr]
echo [-neE] [arg ...] time [-p] pipeline
enable [-a] [-dnps] [-f filename] [name ...] times
eval [arg ...] trap [-lp] [[arg] signal_spec ...]
exec [-cl] [-a name] [command [arguments ...]]> true
exit [n] type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or export -p typeset [-aAfFgilnrtux] [-p] name[=value] ...
false ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]
fc [-e ename] [-lnr] [first] [last] or fc -s [> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMANDS; done unset [-f] [-v] [-n] [name ...]
for (( exp1; exp2; exp3 )); do COMMANDS; done until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name () { COMM> variables - Names and meanings of some shell >
getopts optstring name [arg] wait [-n] [id ...]
hash [-lr] [-p pathname] [-dt] [name ...] while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...] { COMMANDS ; }

哈希hash

  • Hash算法也被称为散列算法,Hash算法虽然被称为算法,但实际上它更像是一种思想。Hash算法没有一个固定的公式,只要符合散列思想的算法都可以被称为是Hash算法。
  • 把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
  • 简单说就是将任意长度的消息压缩到某一固定长度的消息摘要的函数。

应用举例:

MD5

  • MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。
  • MD5-Hash-文件的数字文摘通过Hash函数计算得到。不管文件长度如何,它的Hash函数计算结果是一个固定长度的数字。与加密算法不同,这一个Hash算法是一个不可逆的单向函数。采用安全性高的Hash算法,如MD5、SHA时,两个不同的文件几乎不可能得到相同的Hash结果。因此,一旦文件被修改,就可检测出来。
  • 简单的说,一个不管多大的文件,通过Hash函数计算出一个固定长度的数字,就相当于这个文件的身份证或dna,如果这个文件改变了,再用Hash算出来的数就改变了,多用于文件校完整性校验。

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

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

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

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

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

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

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

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

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

  5. linux命令行执行db2存储过程

    存储过程代码如下: CREATE PROCEDURE proc_sum2(IN n INT,OUT sum INT,OUT j INT) BEGIN DECLARE i INT; ; ; ; WHIL ...

  6. shell脚本linux命令连续执行

    shell命令连续执行的三种方式: 1.命令1:命令2:命令3 依次执行命令,无论前一条命令是否执行成功. 2.命令1 && 命令2 && 命令3 前一条命令执行成功后 ...

  7. &&、()、||决定linux命令的执行顺序

    在执行某个命令时,有时需要依赖前面的命令是否执行成功.假如你想通过ssh命令复制很多数据文件到另外的机器后,删除所有源有文件,所以在删除源有文件之前首先要确定复制是不是执行成功.只要执行复制成功才可以 ...

  8. linux 命令后台执行

    我想把updatedb命令(用于重新建立整盘索引的命令)放在后台运行.因为我不想眼睁睁的看着机器建立索引,我还想编会儿程序呢: # updatedb & [1] 23336 注释:在所要执行的 ...

  9. linux命令后台执行

    fg.bg.jobs.&.nohup.ctrl+z.ctrl+c 命令 一.& 加在一个命令的最后,可以把这个命令放到后台执行,如 watch -n 10 sh test.sh &am ...

随机推荐

  1. 4.Strom-可靠性保证

  2. Redis5设计与源码分析读后感(二)简单动态字符串SDS

    一.引言 学习之前先了解几个概念: SDS定义:简单动态字符串,Redis的基本数据结构之一,用于储存字符串和整型数据. 二进制安全:C语言中用"\0"表示字符串结束,如果字符串本 ...

  3. JVM学习(三)JVM垃圾回收

    一.引用的分类 在了解JVM垃圾回收机制之前,了解一下对象的引用类型是非常必要的. 强引用:GC时不会被回收 软引用:描述有用但不是必须的对象,在发生内存溢出异常之前被回收 弱引用:描述有用但不是必须 ...

  4. PHP数据库驱动扩展概述与不同方式连接数据库总结

    Author:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,CSDN官方首发原创文章 个人博客: cnblogs.com ...

  5. Mongodb PHP封装类

    分享一个Mongodb PHP封装类 <?php /** * Mongodb 基本操作API,支持基本类似关系统型数据库的操作接口 * * @version 1.0 * [说明] * * 1:该 ...

  6. Go gin框架 使用swagger生成API文档

    swaggos 是一个golang版本的swagger文档生成器,提供了native code包装器,并且支持主流的web框架包裹器 github 地址:https://github.com/swag ...

  7. mysql-4-functions

    #进阶4:常见函数(单行函数) /* 将一组逻辑语句封装在方法体中,对外暴露方法名 语法: SELECT 函数名() [FROM 表名] 分类: 1.单行函数:concat,length,ifnull ...

  8. 服务器备用远程-----Radmin客户端的操作指南(如何远程与传送文件)

    一台服务器的寿命一般比较长可能会从几年到几十年,就会经历各个版本的更新与升级.再经过时间的历练后,可能windwos自带的远程连接有时候会拉胯,经常报错. 这时候就需要备选方案,有钱的单位会自己搭建堡 ...

  9. Clover 引导 Windows 及 Linux 双系统

    Clover 引导 Windows 及 Linux 双系统UEFI cnblogs @ Orcim  此 文比较详细地介绍了通过修改 Clover 的配置文件,添加 Clover 启动项的方法(添加 ...

  10. 请编写sql多语句表值函数统,计指定年份中每本书的销售总额

    create table 图书表( 书号 varchar(50), 书名 varchar(50), 单价 int ) create table 销售表( 书号 varchar(50), 销售时间 da ...