命令系统
shell、terminal和console
上一章节中我们已经学习过什么是shell,shell是一种命令解析器,它给用户提供了一个输入命令并接受机器返回结果的界面。
那么什么是terminal
和console
呢?
**console:**The operator’s station of a mainframe.
terminal: An electronic or electromechanical device for entering data into a computer or a communications system and displaying data received. Early terminals were called teletypes, later ones VDUs.
上图所示的就是console(控制台),一般console只能有一个(显示器或电脑用串口线连接)。
上图是terminal的示意图,它是一个封装程序,一个terminal运行一个shell来扩充为一个具备shell功能的的程序。
console 和 terminal的概念都源自大型机,console可以看作为一个特殊的terminal。现在用的一般都是引申义,一般情况下可以混用。
Linux帮助系统
在学习使用Linux的时候,我们会遇到很多以前没有用过的命令和功能,这个时候最好的解决办法就是求助于man.
man
的使用方法很简单,例如查看ls
的帮助手册,可以直接使用命令man ls
即可查看ls
的命令帮助。
LS(1) User Commands LS(1)
NAME #命令全名,简单的说明及用法
ls - list directory contents
SYNOPSIS #基本语法
ls [OPTION]... [FILE]...
DESCRIPTION #详细说明语法中参数的用法
List information about the FILEs (the current directory by default). Sort entries alphabeti‐
cally if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
#中间省略
-1 list one file per line
--help display this help and exit
--version
output version information and exit
SIZE may be (or may be an integer optionally followed by) one of following: KB 1000, K 1024,
MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.
Using color to distinguish file types is disabled both by default and with --color=never.
With --color=auto, ls emits color codes only when standard output is connected to a terminal.
The LS_COLORS environment variable can change the settings. Use the dircolors command to set
it.
Exit status: #错误返回值
0 if OK,
1 if minor problems (e.g., cannot access subdirectory),
2 if serious trouble (e.g., cannot access command-line argument).
AUTHOR #作者
Written by Richard M. Stallman and David MacKenzie.
REPORTING BUGS #bug提交联系方式
Report ls bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report ls translation bugs to <http://translationproject.org/team/>
COPYRIGHT #版权保护
Copyright © 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to
the extent permitted by law.
SEE ALSO ##在哪里可以看到更多关于该命令的文档
The full documentation for ls is maintained as a Texinfo manual. If the info and ls programs
are properly installed at your site, the command
info coreutils 'ls invocation'
should give you access to the complete manual.
GNU coreutils 8.12.197-032bb September 2011 LS(1)
眼尖的同学应该注意到了手册中开头和结尾的地方写的
LS(1)
了,那么这是什么意思呢?它代表的是一般用户可使用的命令。
在man中,常见的几个数字的含义如下表所示:
代号 | 代表的含义 | 举例 |
---|---|---|
1 | 用户在shell环境下可以操作的命令或可执行文件 | man 1 ls |
2 | 系统内核可调用的函数和工具 | man 2 reboot |
3 | 一些常用的函数与函数库,大部分C的函数库 | man 3 readdir |
4 | 设备文件的说明,通常是在/dev 下的设备 | man 4 null |
5 | 配置文件或某些文件的格式 | man 5 interfaces |
6 | 游戏 | man 6 lol 😂 |
7 | 惯例与协议等,例如Linux文件系统,网络协议等 | man 7 tcp |
8 | 系统管理员可用的命令 | man 8 reboot |
9 | 跟kernel有关的文件 | |
o | 旧文档 | |
n | 新文档 | |
l | 本地文档 |
在man手册中,我们可以用到的快捷键如下:
快捷键 | 功能 | 快捷键 | 功能 |
---|---|---|---|
Ctrl+f(orward) | 向下翻一页 | Ctrl+d(own) | 向下翻半页 |
Ctrl+b(ackward) | 向上翻一页 | Ctrl+u§ | 向上翻半页 |
/ | 查找 | q(uit) | 退出 |
随堂练习:
man -f #whatis
man -k #apropos
在Linux中还有一种在线求助的方式
info
,有兴趣的可以了解一下。
zsh
通配符
-
?
代表单个任意字符
-
代表任意几个任意字符
请看下面的例子,并自己动手尝试一下通配符的使用
suyelu@HaiZei-Tech:~$ ls
a.log code HaiZei helloworld 你好world
suyelu@HaiZei-Tech:~$ ls *ld
helloworld 你好world
suyelu@HaiZei-Tech:~$ ls ??world
你好world
suyelu@HaiZei-Tech:~$ ls ?????world
helloworld
suyelu@HaiZei-Tech:~$
除了***和?**这两个通配符之外,Linux中还有下面几种通配符
通配符 | 含义 | 举例 |
---|---|---|
[list] | 匹配list中的任意单一字符 | a[xyz]b a与b之间有且只有一个字符, 且只能是x或y或z, 如: axb, ayb, azb。 |
[!list] | 匹配除list中的任意单一字符 | a[!0-9]b a与b之间有且只有一个字符, 但不能是数字, 如axb, aab, a-b等 |
[c1-c2] | 匹配c1-c2中的任意单一字符 | a[0-9]b a与b之间有且只有一个字符,该字符是0-9之间的数字,如a0b, a1b,… ,a9b。 |
{string1,string2,…} | 匹配 sring1 或 string2 (或更多)其一字符串 | a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。 |
任务管理
-
&
在命令的后面加上**
&
**表示后台执行的意思command &
-
;
在命令之间以**
;
**相连,表示顺序执行的意思command1;command2
-
&&
命令之间以**
&&
**相连时,只有第一个命令成功执行,第二个命令才会执行command1 && command2
-
||
命令之间以**
||
**相连时,如果前一个命令执行失败,则执行第二个命令command1 || command2
-
``
命令中如果包含另一个命令,则用符号**
** 将它包括起来,在执行的时候系统将优先执行**
**中的子命令,然后将其结果代入父命令继续执行command1 `command2`
-
ctrl + z
在shell中执行命令时,同时按下**
ctrl + z
**可以将暂时挂起
suyelu@HaiZei-Tech:~$ vim helloworld.c
[1]+ Stopped vim helloworld.c
suyelu@HaiZei-Tech:~$
什么是挂起?
-
bg
执行**
bg
**命令,可以将挂起的命令后台运行
suyelu@HaiZei-Tech:~$ vim helloworld.c
[1]+ Stopped vim helloworld.c
suyelu@HaiZei-Tech:~$ bg
[1]+ vim helloworld.c &
suyelu@HaiZei-Tech:~$
-
fg
执行命令**
fg
**可以将后台执行的命令转为前台执行 -
jobs
在Linux系统中,执行**
jobs
**命令可以查看所有在后台执行和挂起的任务以及任务编号
suyelu@HaiZei-Tech:~/code$ jobs
[1]- Stopped vim a.c (wd: ~)
[2]+ Stopped vim b.c (wd: ~)
[3] Running ./a.out &
尝试执行fg和bg加上任务编号,看看是什么效果
管道、重定向
-
>
重定向符
-
>>
作用于**>基本相同,不同的是>>将内容追加到文件的末尾,而>**内容覆盖原文件
-
<
与**>**刚好相反,是从文件到命令的重定向。它将文件的内容输出到命令作为输入
-
<<
?
cat >> /etc/sysconfig/network << EOF
HOSTNAME=$HOST_NAME
EOF
转义符
在Linux中转义符**
\
的应用十分广泛,除此之外,转义符还包括“”和‘’**。
字符 | 说明 |
---|---|
‘’ | 硬转义,硬引用,其内部所有的shell元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。 |
“” | 软转义,软引用,其内部只允许出现特定的shell元字符(KaTeX parse error: Can't use function '\`' in math mode at position 2: ,\̲`̲,\\):用于变量值替换、`用于命令替换、\用于转义单个字符 |
\ | 反斜杠,转义,去除其后紧跟的元字符或通配符的特殊意义。 |
下表是部分转义字符对应表:
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符’’’ | 092 |
’ | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
? | 代表一个问号 | 063 |
\0 | 空字符(NULL) | 000 |
\nnn | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xnnn | 1到3位十六进制所代表的任意字符 | 三位十六进制 |
转义符在Shell中的应用
suyelu@HaiZei-Tech:~$ echo -e "\044"
$
suyelu@HaiZei-Tech:~$ echo "\044"
\044
suyelu@HaiZei-Tech:~$ echo $'\044'
$
suyelu@HaiZei-Tech:~$ echo $'\44'
$
附录1 Shell元字符
字符 | 说明 |
---|---|
= | 变量名=值,为变量赋值。注意=左右紧跟变量名和值,中间不要有空格 |
`` | 取命令的执行结果,与下文的$有相似之处 |
$ | 变量值替换, 变 量 名 替 换 为 s h e l l 变 量 的 值 ; 为 避 免 在 文 本 连 接 时 混 淆 , 请 使 用 变量名替换为shell变量的值;为避免在文本连接时混淆,请使用 变量名替换为shell变量的值;为避免在文本连接时混淆,请使用{变量名};$0… 9 代 表 s h e l l 文 件 的 参 数 。 ∗ ∗ 9 代表shell文件的参数。** 9代表shell文件的参数。∗∗()同``; ∗ ∗ 限 定 变 量 名 的 范 围 ; ∗ ∗ {}**限定变量名的范围;** ∗∗限定变量名的范围;∗∗[]**整数计算; |
> | prog > file 将标准输出重定向到文件。 |
>> | prog >> file 将标准输出追加到文件。 |
< | prog < file 从文件file中获取标准输入 |
<< | |
| | 管道命令,例:p1 | p2 将p1的标准输出作为p2的标准输入 |
& | 后台运行命令,最大好处是无需等待命令执行结束,就可以在同一命令行下继续输入命令 |
() | 在子shell中执行命令,在子进程中执行 |
{} | 在当前shell中执行命令,或用在变量替换的界定范围(例如上面的${变量名}用法)。 |
[] | 字符通配,匹配括号内之一 |
; | 命令结束符。例如p1;p2表示先执行p1,再执行p2 |
&& | 前一个命令执行成功后,才继续执行下一个命令。例:p1 && p2 ;若p1执行成功后,才执行p2,反之,不执行p2; |
|| | 前一个命令执行失败后,才继续执行下一个命令。例:p1 || p2 ;若p1执行成功后,不执行p2,反之,才执行p2; |
! | 执行历史记录中的命令**!731**;匹配最近的一次命令**!echo**;取非ls /dev/sda[!1];结果取反**! echo ok ;echo $?** |
% | % 1相当于fg 1 |
^ | 取非,和**!雷同;^string1^string2^ **将上一命令的string1替换为string2 |
~ | home目录 |
# | 注释 |
* | 通配符,任意字符 |
? | 通配符,任一字符 |
. | 当前目录;source |
- | 减号;上次工作目录 |
: | 真值;空命令 |
\ | 转义 |
/ | 目录分割符 |
附录2 ASCII码 对照表
Bin(二进制) | Oct(八进制) | Dec(十进制) | Hex(十六进制) | 缩写/字符 | 解释 |
---|---|---|---|---|---|
0000 0000 | 0 | 0 | 00 | NUL(null) | 空字符 |
0000 0001 | 1 | 1 | 01 | SOH(start of headline) | 标题开始 |
0000 0010 | 2 | 2 | 02 | STX (start of text) | 正文开始 |
0000 0011 | 3 | 3 | 03 | ETX (end of text) | 正文结束 |
0000 0100 | 4 | 4 | 04 | EOT (end of transmission) | 传输结束 |
0000 0101 | 5 | 5 | 05 | ENQ (enquiry) | 请求 |
0000 0110 | 6 | 6 | 06 | ACK (acknowledge) | 收到通知 |
0000 0111 | 7 | 7 | 07 | BEL (bell) | 响铃 |
0000 1000 | 10 | 8 | 08 | BS (backspace) | 退格 |
0000 1001 | 11 | 9 | 09 | HT (horizontal tab) | 水平制表符 |
0000 1010 | 12 | 10 | 0A | LF (NL line feed, new line) | 换行键 |
0000 1011 | 13 | 11 | 0B | VT (vertical tab) | 垂直制表符 |
0000 1100 | 14 | 12 | 0C | FF (NP form feed, new page) | 换页键 |
0000 1101 | 15 | 13 | 0D | CR (carriage return) | 回车键 |
0000 1110 | 16 | 14 | 0E | SO (shift out) | 不用切换 |
0000 1111 | 17 | 15 | 0F | SI (shift in) | 启用切换 |
0001 0000 | 20 | 16 | 10 | DLE (data link escape) | 数据链路转义 |
0001 0001 | 21 | 17 | 11 | DC1 (device control 1) | 设备控制1 |
0001 0010 | 22 | 18 | 12 | DC2 (device control 2) | 设备控制2 |
0001 0011 | 23 | 19 | 13 | DC3 (device control 3) | 设备控制3 |
0001 0100 | 24 | 20 | 14 | DC4 (device control 4) | 设备控制4 |
0001 0101 | 25 | 21 | 15 | NAK (negative acknowledge) | 拒绝接收 |
0001 0110 | 26 | 22 | 16 | SYN (synchronous idle) | 同步空闲 |
0001 0111 | 27 | 23 | 17 | ETB (end of trans. block) | 结束传输块 |
0001 1000 | 30 | 24 | 18 | CAN (cancel) | 取消 |
0001 1001 | 31 | 25 | 19 | EM (end of medium) | 媒介结束 |
0001 1010 | 32 | 26 | 1A | SUB (substitute) | 代替 |
0001 1011 | 33 | 27 | 1B | ESC (escape) | 换码(溢出) |
0001 1100 | 34 | 28 | 1C | FS (file separator) | 文件分隔符 |
0001 1101 | 35 | 29 | 1D | GS (group separator) | 分组符 |
0001 1110 | 36 | 30 | 1E | RS (record separator) | 记录分隔符 |
0001 1111 | 37 | 31 | 1F | US (unit separator) | 单元分隔符 |
0010 0000 | 40 | 32 | 20 | (space) | 空格 |
0010 0001 | 41 | 33 | 21 | ! | 叹号 |
0010 0010 | 42 | 34 | 22 | " | 双引号 |
0010 0011 | 43 | 35 | 23 | # | 井号 |
0010 0100 | 44 | 36 | 24 | $ | 美元符 |
0010 0101 | 45 | 37 | 25 | % | 百分号 |
0010 0110 | 46 | 38 | 26 | & | 和号 |
0010 0111 | 47 | 39 | 27 | ’ | 闭单引号 |
0010 1000 | 50 | 40 | 28 | ( | 开括号 |
0010 1001 | 51 | 41 | 29 | ) | 闭括号 |
0010 1010 | 52 | 42 | 2A | * | 星号 |
0010 1011 | 53 | 43 | 2B | + | 加号 |
0010 1100 | 54 | 44 | 2C | , | 逗号 |
0010 1101 | 55 | 45 | 2D | - | 减号/破折号 |
0010 1110 | 56 | 46 | 2E | . | 句号 |
00101111 | 57 | 47 | 2F | / | 斜杠 |
00110000 | 60 | 48 | 30 | 0 | 数字0 |
00110001 | 61 | 49 | 31 | 1 | 数字1 |
00110010 | 62 | 50 | 32 | 2 | 数字2 |
00110011 | 63 | 51 | 33 | 3 | 数字3 |
00110100 | 64 | 52 | 34 | 4 | 数字4 |
00110101 | 65 | 53 | 35 | 5 | 数字5 |
00110110 | 66 | 54 | 36 | 6 | 数字6 |
00110111 | 67 | 55 | 37 | 7 | 数字7 |
00111000 | 70 | 56 | 38 | 8 | 数字8 |
00111001 | 71 | 57 | 39 | 9 | 数字9 |
00111010 | 72 | 58 | 3A | : | 冒号 |
00111011 | 73 | 59 | 3B | ; | 分号 |
00111100 | 74 | 60 | 3C | < | 小于 |
00111101 | 75 | 61 | 3D | = | 等号 |
00111110 | 76 | 62 | 3E | > | 大于 |
00111111 | 77 | 63 | 3F | ? | 问号 |
01000000 | 100 | 64 | 40 | @ | 电子邮件符号 |
01000001 | 101 | 65 | 41 | A | 大写字母A |
01000010 | 102 | 66 | 42 | B | 大写字母B |
01000011 | 103 | 67 | 43 | C | 大写字母C |
01000100 | 104 | 68 | 44 | D | 大写字母D |
01000101 | 105 | 69 | 45 | E | 大写字母E |
01000110 | 106 | 70 | 46 | F | 大写字母F |
01000111 | 107 | 71 | 47 | G | 大写字母G |
01001000 | 110 | 72 | 48 | H | 大写字母H |
01001001 | 111 | 73 | 49 | I | 大写字母I |
01001010 | 112 | 74 | 4A | J | 大写字母J |
01001011 | 113 | 75 | 4B | K | 大写字母K |
01001100 | 114 | 76 | 4C | L | 大写字母L |
01001101 | 115 | 77 | 4D | M | 大写字母M |
01001110 | 116 | 78 | 4E | N | 大写字母N |
01001111 | 117 | 79 | 4F | O | 大写字母O |
01010000 | 120 | 80 | 50 | P | 大写字母P |
01010001 | 121 | 81 | 51 | Q | 大写字母Q |
01010010 | 122 | 82 | 52 | R | 大写字母R |
01010011 | 123 | 83 | 53 | S | 大写字母S |
01010100 | 124 | 84 | 54 | T | 大写字母T |
01010101 | 125 | 85 | 55 | U | 大写字母U |
01010110 | 126 | 86 | 56 | V | 大写字母V |
01010111 | 127 | 87 | 57 | W | 大写字母W |
01011000 | 130 | 88 | 58 | X | 大写字母X |
01011001 | 131 | 89 | 59 | Y | 大写字母Y |
01011010 | 132 | 90 | 5A | Z | 大写字母Z |
01011011 | 133 | 91 | 5B | [ | 开方括号 |
01011100 | 134 | 92 | 5C | \ | 反斜杠 |
01011101 | 135 | 93 | 5D | ] | 闭方括号 |
01011110 | 136 | 94 | 5E | ^ | 脱字符 |
01011111 | 137 | 95 | 5F | _ | 下划线 |
01100000 | 140 | 96 | 60 | ` | 开单引号 |
01100001 | 141 | 97 | 61 | a | 小写字母a |
01100010 | 142 | 98 | 62 | b | 小写字母b |
01100011 | 143 | 99 | 63 | c | 小写字母c |
01100100 | 144 | 100 | 64 | d | 小写字母d |
01100101 | 145 | 101 | 65 | e | 小写字母e |
01100110 | 146 | 102 | 66 | f | 小写字母f |
01100111 | 147 | 103 | 67 | g | 小写字母g |
01101000 | 150 | 104 | 68 | h | 小写字母h |
01101001 | 151 | 105 | 69 | i | 小写字母i |
01101010 | 152 | 106 | 6A | j | 小写字母j |
01101011 | 153 | 107 | 6B | k | 小写字母k |
01101100 | 154 | 108 | 6C | l | 小写字母l |
01101101 | 155 | 109 | 6D | m | 小写字母m |
01101110 | 156 | 110 | 6E | n | 小写字母n |
01101111 | 157 | 111 | 6F | o | 小写字母o |
01110000 | 160 | 112 | 70 | p | 小写字母p |
01110001 | 161 | 113 | 71 | q | 小写字母q |
01110010 | 162 | 114 | 72 | r | 小写字母r |
01110011 | 163 | 115 | 73 | s | 小写字母s |
01110100 | 164 | 116 | 74 | t | 小写字母t |
01110101 | 165 | 117 | 75 | u | 小写字母u |
01110110 | 166 | 118 | 76 | v | 小写字母v |
01110111 | 167 | 119 | 77 | w | 小写字母w |
01111000 | 170 | 120 | 78 | x | 小写字母x |
01111001 | 171 | 121 | 79 | y | 小写字母y |
01111010 | 172 | 122 | 7A | z | 小写字母z |
01111011 | 173 | 123 | 7B | { | 开花括号 |
01111100 | 174 | 124 | 7C | | | 垂线 |
01111101 | 175 | 125 | 7D | } | 闭花括号 |
01111110 | 176 | 126 | 7E | ~ | 波浪号 |
01111111 | 177 | 127 | 7F | DEL (delete) | 删除 |