Linux 终端操作命令(2)内部命令
Linux 终端操作命令
也称Shell命令,是用户与操作系统内核进行交互的命令解释器,它接收用户输入的命令并将其传递给操作系统进行执行,可分为内部命令和外部命令。内部命令是Shell程序的一部分,而外部命令是独立于Shell的可执行程序。
内部命令
内部命令,实际上是shell程序的一部分,由shell程序识别并在shell程序内部完成运行,通常在Linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bash源码里面的,因为解析内部命令shell不需要创建子进程,其执行速度比外部命令快。比如:alias, break, cd, echo, exit, pwd 等。
外部命令
外部命令是bash shell之外的程序,也并不是shell的一部分。外部命令位于/bin,/sbin, /usr/bin 或 /usr/sbin 等系统目录中。外部命令是Linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。比如: awk, grep, ping,tar, vi 等。 除Linux系统自带的外部命令,通常需要安装对应的程序包才能使用,内部命令之外的所有可执行程序都可以被认作为外部命令。
内外部命令区别
内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。
外部命令是系统的软件功能,用户需要时才从硬盘中读入内存,执行速度比内部命令慢。
内部命令列表
help命令可以列出所有内部命令:
hann@HannYang:~$ help
GNU bash, version 5.0.17(1)-release (x86_64-pc-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]>
(( expression )) if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMAN>
. 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 [-d delim] [-n count] [-O origin] [-s count] [-t>
bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u > 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 ;;]... esa> read [-ers] [-a array] [-d delim] [-i text] [-n nchars] >
cd [-L|[-P [-e]] [-@]] [dir] readarray [-d delim] [-n count] [-O origin] [-s count] [>
command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or readonly -p
compgen [-abcdefgjksuv] [-o option] [-A action] [-G globp> return [n]
complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A act> select NAME [in WORDS ... ;] do COMMANDS; done
compopt [-o|+o option] [-DEI] [name ...] set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
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 ...]] [redirecti> true
exit [n] type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or export -p typeset [-aAfFgilnrtux] [-p] name[=value] ...
false ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]
fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [c> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMANDS; done unset [-f] [-v] [-n] [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 [-fn] [id ...]
hash [-lr] [-p pathname] [-dt] [name ...] while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...] { COMMANDS ; }
通过整理以上内容,得到 68 个命令、函数、变量以及控制指令:
1 | alias | alias [-p] [name[=value] ... ] |
2 | bg | bg [job_spec ...] |
3 | bind | bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u > |
4 | break | break [n] |
5 | builtin | builtin [shell-builtin [arg ...]] |
6 | caller | caller [expr] |
7 | case | case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esa> |
8 | cd | cd [-L|[-P [-e]] [-@]] [dir] |
9 | command | command [-pVv] command [arg ...] |
10 | compgen | compgen [-abcdefgjksuv] [-o option] [-A action] [-G globp> |
11 | complete | complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A act> |
12 | compopt | compopt [-o|+o option] [-DEI] [name ...] |
13 | continue | continue [n] |
14 | coproc | coproc [NAME] command [redirections] |
15 | declare | declare [-aAfFgilnrtux] [-p] [name[=value] ...] |
16 | dirs | dirs [-clpv] [+N] [-N] |
17 | disown | disown [-h] [-ar] [jobspec ... | pid ...] |
18 | echo | echo [-neE] [arg ...] |
19 | enable | enable [-a] [-dnps] [-f filename] [name ...] |
20 | eval | eval [arg ...] |
21 | exec | exec [-cl] [-a name] [command [arguments ...]] [redirecti> |
22 | exit | exit [n] |
23 | export | export [-fn] [name[=value] ...] or export -p |
24 | false | false |
25 | fc | fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [c> |
26 | fg | fg [job_spec] |
27 | for | for NAME [in WORDS ... ] ; do COMMANDS; done for (( exp1; exp2; exp3 )); do COMMANDS; done |
28 | function | function name { COMMANDS ; } or name () { COMMANDS ; } |
29 | getopts | getopts optstring name [arg] |
30 | hash | hash [-lr] [-p pathname] [-dt] [name ...] |
31 | help | help [-dms] [pattern ...] |
32 | history | history [-c] [-d offset] [n] or history -anrw [filename]> |
33 | if | if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMAN> |
34 | jobs | jobs [-lnprs] [jobspec ...] or jobs -x command [args] |
35 | kill | kill [-s sigspec | -n signum | -sigspec] pid | jobspec .> |
36 | let | let arg [arg ...] |
37 | local | local [option] name[=value] ... |
38 | logout | logout [n] |
39 | mapfile | mapfile [-d delim] [-n count] [-O origin] [-s count] [-t> |
40 | popd | popd [-n] [+N | -N] |
41 | printf | printf [-v var] format [arguments] |
42 | pushd | pushd [-n] [+N | -N | dir] |
43 | pwd | pwd [-LP] |
44 | read | read [-ers] [-a array] [-d delim] [-i text] [-n nchars] > |
45 | readarray | readarray [-d delim] [-n count] [-O origin] [-s count] [> |
46 | readonly | readonly [-aAf] [name[=value] ...] or readonly -p |
47 | return | return [n] |
48 | select | select NAME [in WORDS ... ;] do COMMANDS; done |
49 | set | set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...] |
50 | shift | shift [n] |
51 | shopt | shopt [-pqsu] [-o] [optname ...] |
52 | source | source filename [arguments] |
53 | suspend | suspend [-f] |
54 | test | test [expr] |
55 | time | time [-p] pipeline |
56 | times | times |
57 | trap | trap [-lp] [[arg] signal_spec ...] |
58 | true | true |
59 | type | type [-afptP] name [name ...] |
60 | typeset | typeset [-aAfFgilnrtux] [-p] name[=value] ... |
61 | ulimit | ulimit [-SHabcdefiklmnpqrstuvxPT] [limit] |
62 | umask | umask [-p] [-S] [mode] |
63 | unalias | unalias [-a] name [name ...] |
64 | unset | unset [-f] [-v] [-n] [name ...] |
65 | until | until COMMANDS; do COMMANDS; done |
66 | variables | variables - Names and meanings of some shell variables |
67 | wait | wait [-fn] [id ...] |
68 | while | while COMMANDS; do COMMANDS; done |
注意,有些命令格式比较长的都被截短了,如bind, case 等命令最后显示的是 > 字符。
要想个办法,做一个比较完整的内部命令列表:
1. 把上表第2列,写入一个文本文件,比如 list.txt
2. 用vi编写一段shell代码,如 lists.sh
hann@HannYang:~$ cat lists.sh
#!/bin/bash
# 指定文本文件路径
file_path="list.txt"
# 打开文本文件并遍历每一行
while IFS= read -r line; do
# 获取帮助信息并输出
help -s "$line" >> commands.txt
done < "$file_path"
echo "done!"
3. 执行,遍历list.txt列出完整命令格式,写入列表文件 commands.txt
hann@HannYang:~$ bash lists.sh
4. 列出所有命令格式
hann@HannYang:~$ cat -n commands.txt
1 alias: alias [-p] [name[=value] ... ]
2 bg: bg [job_spec ...]
3 bind: bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]
4 break: break [n]
5 builtin: builtin [shell-builtin [arg ...]]
6 caller: caller [expr]
7 case: case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac
8 cd: cd [-L|[-P [-e]] [-@]] [dir]
9 command: command [-pVv] command [arg ...]
10 compgen: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]
11 complete: complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
12 compopt: compopt [-o|+o option] [-DEI] [name ...]
13 continue: continue [n]
14 coproc: coproc [NAME] command [redirections]
15 declare: declare [-aAfFgilnrtux] [-p] [name[=value] ...]
16 dirs: dirs [-clpv] [+N] [-N]
17 disown: disown [-h] [-ar] [jobspec ... | pid ...]
18 echo: echo [-neE] [arg ...]
19 enable: enable [-a] [-dnps] [-f filename] [name ...]
20 eval: eval [arg ...]
21 exec: exec [-cl] [-a name] [command [arguments ...]] [redirection ...]
22 exit: exit [n]
23 export: export [-fn] [name[=value] ...] or export -p
24 false: false
25 fc: fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]
26 fg: fg [job_spec]
27 for: for NAME [in WORDS ... ] ; do COMMANDS; done
28 function: function name { COMMANDS ; } or name () { COMMANDS ; }
29 getopts: getopts optstring name [arg]
30 hash: hash [-lr] [-p pathname] [-dt] [name ...]
31 help: help [-dms] [pattern ...]
32 history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
33 if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
34 jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
35 kill: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
36 let: let arg [arg ...]
37 local: local [option] name[=value] ...
38 logout: logout [n]
39 mapfile: mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
40 popd: popd [-n] [+N | -N]
41 printf: printf [-v var] format [arguments]
42 pushd: pushd [-n] [+N | -N | dir]
43 pwd: pwd [-LP]
44 read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
45 readarray: readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
46 readonly: readonly [-aAf] [name[=value] ...] or readonly -p
47 return: return [n]
48 select: select NAME [in WORDS ... ;] do COMMANDS; done
49 set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
50 shift: shift [n]
51 shopt: shopt [-pqsu] [-o] [optname ...]
52 source: source filename [arguments]
53 suspend: suspend [-f]
54 test: test [expr]
55 time: time [-p] pipeline
56 times: times
57 trap: trap [-lp] [[arg] signal_spec ...]
58 true: true
59 type: type [-afptP] name [name ...]
60 typeset: typeset [-aAfFgilnrtux] [-p] name[=value] ...
61 ulimit: ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]
62 umask: umask [-p] [-S] [mode]
63 unalias: unalias [-a] name [name ...]
64 unset: unset [-f] [-v] [-n] [name ...]
65 until: until COMMANDS; do COMMANDS; done
66 variables: variables - Names and meanings of some shell variables
67 wait: wait [-fn] [id ...]
68 while: while COMMANDS; do COMMANDS; done
同样,代码中help的参数换成-d 就能得到命令的功能简介。
hann@HannYang:~$ cat lists.sh
#!/bin/bash
# 指定文本文件路径
file_path="list.txt"
rm commands.txt
# 打开文本文件并遍历每一行
while IFS= read -r line; do
# 获取帮助信息并输出
help -d "$line" >> commands.txt
done < "$file_path"
echo "done!"
5. 列出所有命令简介
hann@HannYang:~$ cat -n commands.txt
1 alias - Define or display aliases.
2 bg - Move jobs to the background.
3 bind - Set Readline key bindings and variables.
4 break - Exit for, while, or until loops.
5 builtin - Execute shell builtins.
6 caller - Return the context of the current subroutine call.
7 case - Execute commands based on pattern matching.
8 cd - Change the shell working directory.
9 command - Execute a simple command or display information about commands.
10 compgen - Display possible completions depending on the options.
11 complete - Specify how arguments are to be completed by Readline.
12 compopt - Modify or display completion options.
13 continue - Resume for, while, or until loops.
14 coproc - Create a coprocess named NAME.
15 declare - Set variable values and attributes.
16 dirs - Display directory stack.
17 disown - Remove jobs from current shell.
18 echo - Write arguments to the standard output.
19 enable - Enable and disable shell builtins.
20 eval - Execute arguments as a shell command.
21 exec - Replace the shell with the given command.
22 exit - Exit the shell.
23 export - Set export attribute for shell variables.
24 false - Return an unsuccessful result.
25 fc - Display or execute commands from the history list.
26 fg - Move job to the foreground.
27 for - Execute commands for each member in a list.
28 function - Define shell function.
29 getopts - Parse option arguments.
30 hash - Remember or display program locations.
31 help - Display information about builtin commands.
32 history - Display or manipulate the history list.
33 if - Execute commands based on conditional.
34 jobs - Display status of jobs.
35 kill - Send a signal to a job.
36 let - Evaluate arithmetic expressions.
37 local - Define local variables.
38 logout - Exit a login shell.
39 mapfile - Read lines from the standard input into an indexed array variable.
40 popd - Remove directories from stack.
41 printf - Formats and prints ARGUMENTS under control of the FORMAT.
42 pushd - Add directories to stack.
43 pwd - Print the name of the current working directory.
44 read - Read a line from the standard input and split it into fields.
45 readarray - Read lines from a file into an array variable.
46 readonly - Mark shell variables as unchangeable.
47 return - Return from a shell function.
48 select - Select words from a list and execute commands.
49 set - Set or unset values of shell options and positional parameters.
50 shift - Shift positional parameters.
51 shopt - Set and unset shell options.
52 source - Execute commands from a file in the current shell.
53 suspend - Suspend shell execution.
54 test - Evaluate conditional expression.
55 time - Report time consumed by pipeline's execution.
56 times - Display process times.
57 trap - Trap signals and other events.
58 true - Return a successful result.
59 type - Display information about command type.
60 typeset - Set variable values and attributes.
61 ulimit - Modify shell resource limits.
62 umask - Display or set file mode mask.
63 unalias - Remove each NAME from the list of defined aliases.
64 unset - Unset values and attributes of shell variables and functions.
65 until - Execute commands as long as a test does not succeed.
66 variables - Common shell variable names and usage.
67 wait - Wait for job completion and return exit status.
68 while - Execute commands as long as a test succeeds.
简单翻译:
1 alias-定义或显示别名。
2 bg-将作业移到后台。
3 bind-设置Readline键绑定和变量。
4 break-退出循环、while或直到循环。
5 builtin-执行shell内建。
6 caller-返回当前子例程调用的上下文。
7 case-基于模式匹配执行命令。
8 cd-更改shell工作目录。
9 command-执行一个简单的命令或显示有关命令的信息。
10 compgen-根据选项显示可能的完成情况。
11 complete-指定Readline如何完成参数。
12 compopt-修改或显示完成选项。
13 continue-继续循环、while或直到循环。
14 coproc-创建一个名为NAME的协处理器。
15 declare-设置变量值和属性。
16 dirs-显示目录堆栈。
17 disown-从当前shell中删除作业。
18 echo-将参数写入标准输出。
19 enable-启用和禁用shell内置。
20 eval-将参数作为shell命令执行。
21 exec-用给定的命令替换shell。
22 exit-退出外壳。
23 export-为shell变量设置导出属性。
24 false-返回不成功的结果。
25 fc-显示或执行历史列表中的命令。
26 fg-将作业移到前台。
27 for-为列表中的每个成员执行命令。
28 function-定义外壳函数。
29 getopts-分析选项参数。
30 hash-记住或显示程序位置。
31 help-显示有关内置命令的信息。
32 history-显示或操作历史记录列表。
33 if-根据条件执行命令。
34 jobs-显示作业的状态。
35 kill-向工作发出信号。
36 let-评估算术表达式。
37 local-定义局部变量。
38 logout-退出登录shell。
39 mapfile-将标准输入中的行读取到索引数组变量中。
40 popd-从堆栈中删除目录。
41 printf-在FORMAT的控制下格式化和打印参数。
42 pushd-将目录添加到堆栈。
43 pwd-打印当前工作目录的名称。
44 read-从标准输入中读取一行,并将其拆分为字段。
45 readarray-将文件中的行读取到数组变量中。
46 readonly-将shell变量标记为不可更改。
47 return-从shell函数返回。
48 select-从列表中选择单词并执行命令。
49 set-设置或取消设置外壳选项和位置参数的值。
50 shift-移位位置参数。
51 shopt-设置和取消设置外壳选项。
52 source-从当前shell中的文件执行命令。
53 suspend-挂起shell执行。
54 test-评估条件表达式。
55 time-报告管道执行所消耗的时间。
56 times-显示处理时间。
57 trap-陷阱信号和其他事件。
58 true-返回成功的结果。
59 type-显示有关命令类型的信息。
60 typeset-设置变量值和属性。
61 ulimit-修改shell资源限制。
62 umask-显示或设置文件模式掩码。
63 unalias-从定义的别名列表中删除别名。
64 unset-取消设置shell变量和函数的值和属性。
65 until-只要测试不成功,就执行命令。
66 variables-常见的shell变量名称和用法。
67 wait-等待作业完成并返回退出状态。
68 while-循环结构,只要测试为真就执行命令。
完