Linux shell 内部命令和外部命令
Linux中的命令大致分为两类:内部命令和外部命令,内部命令也称shell内建命令或者内嵌命令,外部命令存放在一个文件中,需要时候在文件中查找,这些文件定义在$PATH中。首先linux所有的都是文件,我们在操作系统加载的时候会加载shell表现为/bin/bash文件内部命令内建命令不需要子进程来执行,它已经和shell编译为一体。作为shell工具的组成部分存在。内建命令不需要借助外部程...
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 1 | header 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查找命令上需要时间。
更多推荐
所有评论(0)