Linux终端
终端的概念(terminal
)
通常我们在使用 Linux
时,并不是直接与系统打交道,而是通过一个叫做 Shell
的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux
系统还提供了一个叫做终端模拟器的程序(Terminal
),下面是几个比较常见的终端模拟器: gnome-terminal
,kconsole
,xterm
,rxvt
,kvt
,nxterm
和 eterm
。目前我们的实验中的终端程序是 xfce
桌面环境自带的 xfce-terminal
。不过要注意的是这里所说的终端(Terminal
)和控制台(Console
)是有区别的。
终端本质上是对应着
Linux
上的/dev/tty
设备,Linux
的多用户登陆就是通过不同的/dev/tty
设备完成的,Linux
默认提供了 6 个纯命令行界面的terminal
(准确的说这里应该是 6 个virtual console
s)来让用户登录。在物理机系统上你可以通过使用[Ctrl]
+[Alt]
+[F1]~[F6]
进行切换,不过在我们的在线实验环境中可能无法切换,因为特殊功能按键会被你的主机系统劫持。当你切换到其中一个终端后想要切换回图形界面,你可以按下[Ctrl]
+[Alt]
+[F7]
来完成。
Shell
通常在图形界面中对实际体验带来差异的不是上述的不同发行版的各种终端模拟器,而是这个 Shell
(壳)。有壳就有核,这里的核就是指 UNIX/Linux
内核,Shell
是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS
下的 command
(命令行)和后来的 cmd.exe
。普通意义上的 Shell
就是可以接受用户输入命令的程序。它之所以被称作 Shell
是因为它隐藏了操作系统底层的细节。同样的 UNIX/Linux
下的图形用户界面 GNOME
和 KDE
,有时也被叫做“虚拟 shell”或“图形 shell”。
UNIX/Linux
操作系统下的 Shell
既是用户交互的界面,也是控制系统的脚本语言。当然这一点也有别于 Windows
下的命令行,虽然该命令行也提供了很简单的控制语句。在 Windows
操作系统下,有些用户从来都不会直接使用 Shell,然而在
UNIX
系列操作系统下,Shell
仍然是控制系统启动、X11
启动和很多其它实用工具的脚本解释程序。
在 UNIX/Linux
中比较流行的常见的 Shell
有 bash
、zsh
、ksh
、csh
等等,Ubuntu
终端默认使用的是 bash
,默认的桌面环境是 GNOME
或者 Unity
(基于 GNOME
)
命令行操作体验
写在前面
在linux
中,最最重要的就是命令,这就包含了2个过程,输入和输出
输入
输入当然就是打开终端,然后按键盘输入,然后按回车,输入格式一般就是这类的
#创建一个名为文件,touch是一个命令
touch file
#进入一个目录,cd是一个命令
cd /etc/
#查看当前所在目录
pwd
输出
输出会返回你想要的结果,比如你要看什么文件,就会返回文件的内容。如果只是执行,执行失败会告诉你哪里错了,如果施行成功那么会没有输出,因为
linux
的哲学就是:没有结果就是最好的结果
1) 重要快捷键:
真正学习命令行之前,你先要掌握几个十分有用、必需掌握的小技巧:
[Tab]
使用Tab
键来进行命令补全,Tab
键一般是在字母Q
旁边,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时可以只输入它的开头的一部分,然后按下Tab
键就可以得到提示或者帮助完成:
当然不止补全命令,补全目录、补全命令参数都是没问题的:
[Ctrl+c]
想想你有没有遇到过这种情况,当你在 Linux
命令行中无意输入了一个不知道的命令,或者错误地使用了一个命令,导致在终端里出现了你无法预料的情况,比如,屏幕上只有光标在闪烁却无法继续输入命令,或者不停地输出一大堆你不想要的结果。你想要立即停止并恢复到你可控的状态,那该怎么办呢?这时候你就可以使用Ctrl+c
键来强行终止当前程序(你可以放心它并不会使终端退出)。
尝试输入以下命令:
$ tail
然后你会发现你接下来的输入都没有任何反应了,只是将你输入的东西显示出来,现在你可以使用Ctrl+c
,来中断这个你目前可能还不知道是什么的程序(在后续课程中我们会具体解释这个tail
命令是什么)。
又或者输入:
$ find /
显然这不是你想的结果,可以使用Ctrl+c
结束。
虽然这个按着很方便,但不要随便按,因为有时候,当你看到终端没有任何反应或提示,也不能接受你的输入时,可能只是运行的程序需要你耐心等一下,就不要急着按Ctrl+c
了。
其他一些常用快捷键
按键 | 作用 |
---|---|
Ctrl+d | 键盘输入结束或退出终端 |
Ctrl+s | 暂停当前程序,暂停后按下任意键恢复运行 |
Ctrl+z | 将当前程序放到后台运行,恢复到前台为命令fg |
Ctrl+a | 将光标移至输入行头,相当于Home 键 |
Ctrl+e | 将光标移至输入行末,相当于End 键 |
Ctrl+k | 删除从光标所在位置到行末 |
Alt+Backspace | 向前删除一个单词 |
Shift+PgUp | 将终端显示向上滚动 |
Shift+PgDn | 将终端显示向下滚动 |
2) 学会利用历史输入命令
很简单,你可以使用键盘上的方向上键↑
,恢复你之前输入过的命令,你一试便知。
3) 学会使用通配符
通配符是一种特殊语句,主要有星号(*
)和问号(?
),用来对字符串进行模糊匹配(比如文件名、参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符。
终端里面输入的通配符是由 Shell
处理的,不是由所涉及的命令语句处理的,它只会出现在命令的“参数值”里(它不能出现在命令名称里, 命令不记得,那就用Tab
补全)。当 Shell
在“参数值”中遇到了通配符时,Shell
会将其当作路径或文件名在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符实际上就是一种 Shell
实现的路径扩展功能。在通配符被处理后, Shell
会先完成该命令的重组,然后继续处理重组后的命令,直至执行该命令。
先使用 touch 命令创建 2 个文件,后缀都为 txt:
$ touch adsfasd.txt wergjlkas.txt
可以给文件随意命名,假如过了很长时间,你已经忘了这两个文件的文件名,现在你想在一大堆文件中找到这两个文件,就可以使用通配符:
$ ls *.txt
在创建文件的时候,如果需要一次性创建多个文件,比如:“love_1_linux.txt,love_2_linux.txt,… love_10_linux.txt”。在 Linux 中十分方便:
$ touch love_{1..10}_linux.txt
Shell 常用通配符:
字符 | 含义 |
---|---|
* | 匹配 0 或多个字符 |
? | 匹配任意一个字符 |
[list] | 匹配 list 中的任意单一字符 |
[!list] | 匹配 除list 中的任意单一字符以外的字符 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] |
{string1,string2,...} | 匹配 string1 或 string2 (或更多)其一字符串 |
{c1..c2} |