Linux中的命令大致分为两类:内部命令和外部命令,内部命令也称shell内建命令或者内嵌命令,外部命令存放在一个文件中,需要时候在文件中查找,这些文件定义在$PATH中。

首先linux所有的都是文件,我们在操作系统加载的时候会加载shell表现为/bin/bash文件

内部命令

内建命令不需要子进程来执行,它已经和shell编译为一体。作为shell工具的组成部分存在。内建命令不需要借助外部程序文件来运行。内部命令可以通过enable命令来查看:

enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd
...
header 1header 2
bind将键盘序列绑定到一个 readline 函数或宏
cd将当前目录切换为指定的目录
dirs显示当前存储目录的列表
echo将指定字符串输出到 STDOUT
exec用指定命令替换 shell 进程
export设置子 shell 进程可用的变量
fc从历史记录中选择命令列表
fg将作业以前台模式运行
getopts分析指定的位置参数
help显示帮助文件
history显示命令历史记录
jobs列出活动作业
kill向指定的进程 ID(PID) 发送一个系统信号
pwd显示当前工作目录的路径名
set设置并显示环境变量的值和 shell 属性
test基于指定条件返回退出状态码 0 或 1
times显示累计的用户和系统时间
type显示指定的单词如果作为命令将会如何被解释
umask为新建的文件和目录设置默认权限
unset刪除指定的环境变量或 shell 属性
wait等待指定的进程完成,并返回退出状态码

可以利用type命令来了解某个命令是否是内建的:

# 内建命令
localhost:~ dong$ type echo
echo is a shell builtin

# 外部命令
localhost:~ dong$ type ps
ps is /bin/ps

部分命令有多种实现,常见的为echo、pwd这两个命令既是内建命令也是外部命令。如果只用type命令不带选项,优先显示shell 内嵌命令,上面的例子也测试过 type echo。只会显示shell 内嵌。要查看命令的不同实现,需要使用type -a选项:

localhost:~ dong$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

外部命令

外部命令有时候被称为文件系统命令,是存在于bash shell之外的程序。它们并不是shell程序的一部分。外部命令通常位于 /bin、/usr/bin、/sbin、/usr/sbin中。可以使用which和type命令来找到。假设要找ps命令:

localhost:~ dong$ which ps
/bin/ps
localhost:~ dong$ type ps
ps is /bin/ps

注意一下:which 命令只显示外部命令的文件

外部命令的执行时,会创建一个子进程。这个操作被称为衍生。在执行速度相比内建命令来说,相对要慢些。这也因为外部命令程序通常位于/bin、/usr/bin、/sbin、/usr/sbin查找命令上需要时间。

Logo

更多推荐