linux 内部命令和外部命令

2019-10-17  本文已影响0人  黑曼巴yk

前言

Linux中的命令大致分为两类:内部命令和外部命令
内部命令也称shell内嵌命令,外部命令存放在一个文件中,需要时候在文件中查找,这些文件定义在$PATH
首先linux所有的都是文件,我们在操作系统加载的时候会加载shell表现为/bin/bash文件

[root@iZbp1ge7stkcnj5044oa81Z ~]# ll /bin/bash
-rwxr-xr-x. 1 root root 964608 Oct 31  2018 /bin/bash

内部命令

enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd
// ...
// 内部命令
[root@iZbp1ge7stkcnj5044oa81Z ~]# type type
type is a shell builtin
// 外部命令
[root@iZbp1ge7stkcnj5044oa81Z ~]# type who
who is /usr/bin/who

外部命令

外部命令表现为一个磁盘文件

  1. 查看外部命令的磁盘路径
[root@iZbp1ge7stkcnj5044oa81Z ~]# which pwd
/usr/bin/pwd
[root@iZbp1ge7stkcnj5044oa81Z ~]# whereis pwd
pwd: /usr/bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz

命令执行过程

首先判断是否是内部命令 type pwd。如果是外部命令则通过$PATH来查找。我们看先$PATH 里面的值是多少?

[root@iZbp1ge7stkcnj5044oa81Z ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

我们只要执行过的命令都通过hash存在内存中。

[root@iZbp1ge7stkcnj5044oa81Z ~]# whereis pwd
pwd: /usr/bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz
[root@iZbp1ge7stkcnj5044oa81Z ~]# type whereis
whereis is hashed (/usr/bin/whereis)

这里我们执行过whereis命令。下次执行时候显示whereis is hashed,说明是从内存中直接读取。我们通过hash命令可以查看缓存的路径

[root@iZbp1ge7stkcnj5044oa81Z ~]# hash
hash: hash table empty
[root@iZbp1ge7stkcnj5044oa81Z ~]# whereis pwd
pwd: /usr/bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz
[root@iZbp1ge7stkcnj5044oa81Z ~]# hash
hits    command
   1    /usr/bin/whereis
上一篇下一篇

猜你喜欢

热点阅读