如果您不确定是在运行Linux命令还是在使用bash构建,请不要紧张,因为它并不是那么明显。事实上,您可以非常习惯像这样的命令cd没有意识到他们是你的外壳的一部分,不像在命令日期和我是谁调用可执行文件(/bin/date和/usr/bin/whoami)。
在一般的内置命令是内置到外壳口译命令,和bash是特别丰富的他们来说,这是一件好事,因为内置插件由于其本身的性质跑了一下比有,当你打电话给他们,被加载到内存中的命令快发挥作用。
换句话说,一些命令内置于外壳,因为他们几乎都可以。毕竟,这样的命令cd需要改变shell的世界观——或者至少是它对文件系统的看法。其他一些则为shell提供了特殊的能力来循环和评估类似数据情况下,对于和而命令。总之,这些命令使外壳什么是所有的忠实用户。还有一些人只是让命令运行快一点。
要获得bash内置程序的列表,您只需键入“help”。
$ help GNU bash,版本5.0.3(1)-release (x86_64-pc-linux-gnu)这些shell命令是在内部定义的。键入“help”以查看此列表。键入“help name”以查找有关函数“name”的更多信息。使用' info bash'来查找有关外壳的更多信息。使用“man -k”或“info”来查找更多不在此列表中的命令。名称旁边的星号(*)表示禁用该命令。job_spec [&] history [-c] [-d offset] [n]或history -an>((表达式))if命令;然后命令;[elif命令>。文件名[参数]jobs [-lnprs] [jobspec…] or jobs -x comm> : kill [-s sigspec | -n signum | -sigspec] pi> [ 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] [> bind [-lpsvPSVX] [-m keymap] [-f filename] [> 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]...) COMMAN> read [-ers] [-a array] [-d delim] [-i text]> cd [-L|[-P [-e]] [-@]] [dir] readarray [-d delim] [-n count] [-O origin]> command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or reado> compgen [-abcdefgjksuv] [-o option] [-A acti> return [n] complete [-abcdefgjksuv] [-pr] [-DEI] [-o op> select NAME [in WORDS ... ;] do COMMANDS; d> compopt [-o|+o option] [-DEI] [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 -> 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; don> unset [-f] [-v] [-n] [name ...] for (( exp1; exp2; exp3 )); do COMMANDS; don> until COMMANDS; do COMMANDS; done function name { COMMANDS ; } or name () { CO> variables - Names and meanings of some shel> getopts optstring name [arg] wait [-fn] [id ...] hash [-lr] [-p pathname] [-dt] [name ...] while COMMANDS; do COMMANDS; done help [-dms] [pattern ...] { COMMANDS ; }
你可能会注意到,一些内置的插件(例如,回声和杀了)还存在作为可执行文件。
$ ls -l /bin/echo /bin/kill -rwxr-xr-x 1 root root 39256 Sep 5 06:38 /bin/echo -rwxr-xr-x 1 root root 30952 Aug 8 12:46 /bin/kill
一个快速的方法来确定您所使用的命令是否是内置在bash与否是使用命令“命令”。是的,命令被称为“命令”。用试试吧-V(大写V)选项如下:
$命令-V命令命令是内建$命令-V回波回波一个外壳内置$命令-V日期日期的壳被散列(/ bin中/日期)
当你看到一个“命令被散列”的消息像上面的,这意味着命令已被更快投入一个哈希表中查询。
寻找在其他炮弹帮助
如果您切换炮弹并尝试运行“帮助”,你会发现,一些支持这个命令和别人不一样。你可以像这样运行在bash命令即可查看每个系统上的炮弹会告诉你:
在`LS /箱壳/ * sh`做回声$ SHELL $ SHELL -c “帮助” 回声===============完成
这个循环将尝试在/bin中的每个shell中运行帮助命令。$shell -c(例如,zsh -c)语法将只运行该shell中的单个帮助命令,然后退出。
如何告诉你目前使用的是什么壳
如果切换,你可以不依赖于$ SHELL炮弹告诉你,你目前正在使用,因为$ SHELL只是当你登录并不一定反映当前的外壳,它被设置环境变量什么壳。尝试PS -p $$代替如图在这些例子中:
$ PS -p $$ PID TTY TIME CMD 18340个PTS / 0 00:00:00的bash<==$ /bin/dash $ ps -p $ PID TTY TIME CMD 19517 pts/0 00:00:00 dash<==
内置插件是非常有用的,给每个外壳有很多的性格。如果你使用的所有的某些特定时间外壳,很容易失去跟踪其中的命令是你的shell的一部分,哪些不是。区分内置在Linux可执行外壳只需要一点点额外的努力。