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

执行命令过程

输入命令后回车,提请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. 如何在 PyPI安装python的软件包?

    安装软件包 本节介绍如何安装Python的基本知识.包裹. 需要注意的是,这个上下文中的“包”一词被用作分布(即要安装的一组软件),而不是指包装在Python源代码中导入(即模块的容器).Python ...

  2. 【深入理解JVM】学习笔记——-1、JVM基本结构

    转载自:https://blog.csdn.net/singit/article/details/54920387?utm_source=blogkpcl11 什么是jvm?JVM的基本结构, 也就是 ...

  3. 9.Kafka API使用

  4. OpenCV计算机视觉学习(1)——图像基本操作(图像视频读取,ROI区域截取,常用cv函数解释)

    1,计算机眼中的图像 我们打开经典的 Lena图片,看看计算机是如何看待图片的: 我们点击图中的一个小格子,发现计算机会将其分为R,G,B三种通道.每个通道分别由一堆0~256之间的数字组成,那Ope ...

  5. Java操作Elasticsearch 之 [Java High Level REST Clientedit]

    1. 简述 Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架,向 Elasticsearch 中存储和从 Elasticsearch 中查询,格式是json. 向 Ela ...

  6. 基础篇:深入解析JAVA反射机制

    目录 反射的概念 获取Class的三种方法 JAVA反射API 反射机制应用的场景 反射和JDK动态代理 欢迎指正文中错误 关注公众号,一起交流 参考文章 反射的概念 java的放射机制:在程序运行时 ...

  7. PHP代码审计02之filter_var()函数缺陷

    前言 根据红日安全写的文章,学习PHP代码审计审计的第二节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完这个题目,会有一道CTF题目来进行巩固,外加一个实例来深入分析,想了 ...

  8. spark-4-文件读写

    hdfs文件读写报错: AccessControlException: Permission denied: user=root, access=WRITE, inode="/user/ch ...

  9. JSON.stringify 的使用

    一.作用:这个函数的作用主要是为了序列化对象.就是把原来是对象的类型转换成字符串类型(json格式的String类型). 二.语法:JSON.stringify(value[, replacer][, ...

  10. VS2013 C++ 生成与调用DLL(动态链接库) 需要验证

    转载:https://blog.csdn.net/s978697043/article/details/82429802 一.创建动态链接库(生成.dll .lib 两个文件) 文件→新建→项目 选择 ...