Linux学习路径
桌面环境
Linux上运行的图形界面软件,以前是XFree86,现在则是xorg(X.Org)。
这套软件是通过X窗口系统实现的,X本身只是工具包及架构协议,xorg是X架构规范的一个实现体,也就是说,它是实现了X协议规范的一个提供图形界面服务的服务器。
如果只有服务器是不能实现一个完整的桌面环境的,当然还需要一个客户端,我们称为X Client,目前流行的实现了客户端功能的桌面环境有KDE,GNOME,XFCE,LXDE ,实验楼目前使用的是XFCE桌面环境。这也意味着在 Linux 上你可以自己选择安装不同的桌面环境,甚至可以定制自己的专属桌面。
Linux终端
通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal)。 下面是几个比较常见的终端模拟器: gnome-terminal,Konsole,xterm,rxvt,kvt,nxterm 和 eterm 。实验楼的终端程序是XFCE桌面环境自带的xfce-terminal。
不过要注意的是这里所说的终端(Terminal)和控制台(Console)是有区别的。终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登录就是通过不同的 /dev/tty 设备完成的,Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录。在物理机系统上你可以通过使用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),实验楼的桌面环境中使用的分别是 zsh 和 xfce。
命令行
#创建一个名为 file 的文件,touch是一个命令
$ touch file
#进入一个目录,cd是一个命令
$ cd /etc/
#查看当前所在目录
$ pwd
一些常用快捷键
按键 | 作用 |
---|---|
Tab | 进行命令补全 |
Ctrl+c | 强行终止当前程序 |
Ctrl+d | 键盘输入结束或退出终端 |
Ctrl+s | 暂停当前程序,暂停后按下任意键恢复运行 |
Ctrl+z | 将当前程序放到后台运行,恢复到前台为命令fg |
Ctrl+a | 将光标移至输入行头,相当于Home键 |
Ctrl+e | 将光标移至输入行末,相当于End键 |
Ctrl+k | 删除从光标所在位置到行末 |
Alt+Backspace | 向前删除一个单词 |
Shift+PgUp | 将终端显示向上滚动 |
Shift+PgDn | 将终端显示向下滚动 |
通配符,一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符。
$ ls *.txt
Shell 常用通配符:
字符 | 含义 |
---|---|
* | 匹配 0 或多个字符 |
? | 匹配任意一个字符 |
[list] | 匹配 list 中的任意单一字符 |
[^list] | 匹配 除 list 中的任意单一字符以外的字符 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9][a-z] |
{string1,string2,...} | 匹配 string1 或 string2 (或更多)其一字符串 |
{c1..c2} | 匹配 c1-c2 中全部字符 如{1…10} |
# 可以使用如下方式来获得某个命令的说明和使用方式的详细介绍
$ man <command_name>