shell的内建命令和外部命令

shell的内建命令和外部命令

Shell执行的命令可以分为内建命令(built-in)和外部命令(external),前者是构建在shell内部;后者是一个独立的文件(可以是二进制文件,也可以是一个脚本)。

内建命令的执行比较简单,由当前shell本身来执行,例如echo, eval, exec, export, readonly, read,
shift, wait和点(.)等;

外部命令的执行比较复杂,shell进程会fork一个子进程,父进程随后挂起,然后在子进程中exec加载外部文件,子进程返回后,父进程才继续执行。

从上面的区别可以看出,内建命令的性能要优于外部命令,因为它没有新建进程的开销。

使用type命令可以区别一个命令是内建命令,还是外部命令:

[[email protected] tmp]# type cd
cd is a shell builtin
[[email protected] tmp]# type awk
awk is /bin/awk

注意,Shell会沿着路径$PATH来寻找外部命令,环境变量PATH是一个以冒号分隔的目录列表,

[[email protected] tmp]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

最后,使用help命令可以查看内建命令列表:


[[email protected] tmp]# help
GNU bash, version 4.1.2(1)-release (x86_64-unknown-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 [filename] o>
(( expression )) if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS>
. filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -x command [args]
: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...>
[ arg... ] let arg [arg ...]
[[ expression ]] local [option] name[=value] ...
alias [-p] [name[=value] ... ] logout [n]
bg [job_spec ...] mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C>
bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u nam> 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 ;;]... esac read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [->
cd [-L|-P] [dir] readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [>
command [-pVv] command [arg ...] readonly [-af] [name[=value] ...] or readonly -p
compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpa> return [n]
complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action> select NAME [in WORDS ... ;] do COMMANDS; done
compopt [-o|+o option] [-DE] [name ...] set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]
continue [n] shift [n]
coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFilrtux] [-p] [name[=value] ...] source filename [arguments]
dirs [-clpv] [+N] [-N] suspend [-f]
disown [-h] [-ar] [jobspec ...] 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 ...]] [redirection> true
exit [n] type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or export -p typeset [-aAfFilrtux] [-p] name[=value] ...
false ulimit [-SHacdefilmnpqrstuvx] [limit]
fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [com> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMANDS; done unset [-f] [-v] [name ...]
for (( exp1; exp2; exp3 )); do COMMANDS; done until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name () { COMMANDS ; } variables - Names and meanings of some shell variables
getopts optstring name [arg] wait [id]
hash [-lr] [-p pathname] [-dt] [name ...] while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...] { COMMANDS ; }

shell的内建命令和外部命令,布布扣,bubuko.com

时间: 2024-10-12 14:00:03

shell的内建命令和外部命令的相关文章

shell 的内置命令与外部命令的区别

shell命令通常分为两类: 内置命令(man builtins) 外部命令 下面分析两者的区别. 内置命令: 内部命令被构建在shell之中.当执行shell命令时,内部命令的执行速度非常快.这是因为没有其他的进程因为执行这条命令而被创建.比如说,当我们执行"cd"命令时,没有进程被创建.在执行过程中只是简单的改变当前的目录. 外部命令: 外部命令并没有被构建在shell中.这些可执行的外部命令保存在一个独立的文件当中.当一个外部命令被执行时,一个新的进程即被创建同时命令被执行. 通

区分Linux内建命令和外部命令

linux命令有内部命令和外部命令之分,内部命令和外部命令功能基本相同,但是有细微差别 内部命令:shell程序的一部分 通常在Linux系统加载运行时shell就被加载并常驻内存中,内部命令是写在bashy源码里面,执行速度比外部命令快 因为解析内部命令shell不需要创建子进程 如:exit  cd  echo  history 外部命令:Linux系统中实用程序部分 因为实用程序功能通常比较强大,包含的程序量也会很大,在系统加载时不随系统一起被加载在内存中,而是需要时才会将其调入内存 通常

shell的内部命令和外部命令

shell命令分成内置命令和外部命令. 内置命令(builtin command) 是shell解释程序内建的,有shell直接执行,不需要派生新的进程.有一些内部命令可以用来改变当前的shell环境. 常见的内部命令有:.(点命令).bg.cd.continue.echo.exec.exit.export.fg.jobs.pwd.read.return.set.shift.test.times.trap.umask.unset和wait. 外部命令(external command) 又分两种

[笔记]内置命令与外部命令

内置命令(bulidin command):Bash程序本身提供,不需要到$PATH中查找,执行效率高外部命令:独立存在与文件系统中的可执行文件,文件需要存在于$PATH中        判断方法:type COMMAND 注意:Linux中严格区分大小写!!! 常见的内置命令:    help: 显示所有内置命令列表或单个内置命令的用法    type:判断命令的类型是内置还是外部命令    echo:显示,默认自动换行(加 -n 选项取消换行)    printf:依照格式显示参数内容,与C

<linux下内置命令和外部命令>

Linux下内置命令和外部命令 1.linux的命令可以分为内部命令和外部命令: 内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高. 而外部命令是系统的软件功能,用户需要时才从硬盘中读入内存. enable既可以查看内部命令,同时也可以判断是否为内部命令. [[email protected] ~]# enable ls  //判断ls是否为内置命令-bash: enable: ls: not a shell builtin //它不是内部命令[[email protected] ~

shell内部命令和外部命令

区别: 内部命令:内部命令被构建在shell之中.当执行shell命令时,内部命令的执行速度非常快.这是因为没有其他的进程因为执行这条命令而被创建.比如说,当我们执行"cd"命令时,没有进程被创建.在执行过程中只是简单的改变当前的目录. 外部命令:外部命令并没有被构建在shell中.这些可执行的外部命令保存在一个独立的文件当中.当一个外部命令被执行时,一个新的进程即被创建同时命令被执行.比如说,当我们执行"ls"(通常被保存在/bin 目录下)命令时,然后/usr/

Linux内置命令和外部命令

1.Linux的命令可以分为内部命令和外部命令: 内置命令在系统启动时就调入内存,是常驻内存的,所以执行效率高. 而外部命令是系统的软件功能,用户需要时才从硬盘中读入内存. 2.type -  Display information about command type   #查看当前系统的命令是否为内置命令和外部命令. 3.BASH_BUILTINS  alias, bg, bind, break, builtin, caller, cd, command, compgen, complete

linux中的内部命令和外部命令

linux中的命令大致可分为两类,内部命令和外部命令 内部命令:也称shell内嵌命令: 外部命令:存放在一个文件中,使用时需要去文件中查找,这些文件被定义在$PATH [[email protected] ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin type命令可以查看命令类型,以区别是内部命令还是外部命令 例 [[email protected] ~]# type cd cd is a

Linux查看命令是内部命令还是外部命令

在 Linux 中,怎样查看一个命令是内部命令还是外部命令呢?下面就来为大家介绍. 一.区别: 1.内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高. 2.外部命令是系统的软件功能,用户需要时才从硬盘中读入内存. 二.如何判断. 在终端中输入 type 可以查看命令是内部命令还是外部命令.格式为: type  要查看的命令 例如,我们要查看 cd 命令是否为内部命令,可以键入 type cd.从返回的结果可以看出, cd 是一个内部命令. $type cd cd is a shell