Linux 终端操作命令(2)内部命令

18647a9c4d804f0eacedc1984bee2940.png

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-循环结构,只要测试为真就执行命令。