# 学习 Linux 命令行与 Shell 脚本编程总结
# 第 1 章 Linux 介绍
Linux 就是一个操作系统。类似的还有 macOS,是苹果研发的操作系统。
# GRUB
一般最常用的,能使我们在 Linux 和 Windows 之间做出选择的 bootloader 叫做 GRUB。如果你没有做出选择,那么 GRUB 这个 bootloader 在几秒之后就会启动默认的操作系统。当然默认的操作系统也是你设定的。
# Unix
Unix 是 1969 年(或 1970 年)诞生的。
# DOS
1984 年,彼时的信息技术还远没有现在发达。那个时候,Microsoft(微软)才刚刚发布它的第一个操作系统:MS-DOS,也就是我们知道的 DOS 操作系统。
# GNU 项目
在微软发布 DOS 的同一年,1984年,Richard Stallman(理查德.斯托曼)创立了 GNU 项目。
GNU 项目的 logo(标志)是一头“牛羚”。
GNU 不仅是一个免费的操作系统,而且它也是自由的(后来也被称为“开源的”,不过与 Richard Stallman 的初衷已有些许不同了)。
# Linux
1991 年,Linus Torvalds(李纳斯·托沃兹,今天在编程领域应该无人不知、无人不晓了吧,就是 Linux 操作系统(严格地说是 Linux 内核)的作者),当时是芬兰赫尔辛基大学的一位学生,他决定在自己的业余时间编写一个类 Unix 的操作系统(内核),最终还真给他开发出了 1.0 版。
Linux 这个名字可以说是 Linus 和 Unix 的合并,也可以说是“Linux Is Not Unix”的递归缩写。
正如 GNU 有它的吉祥物,一只牛羚。Linux 也有它的吉祥物:一只名叫 Tux 的萌萌哒雄性企鹅(爷们,24K 纯滴)。
Tux 在英语里是“燕尾服”(正式名称是“男士无尾半正式晚礼服”)的意思,企鹅黑不溜秋的后背是不是很像一件燕尾服呢?而且有点神似 Linus 大叔。
那么 Linux 和 GNU 项目有什么联系呢?
GNU 项目(开源的各种程序)+ Linux (操作系统内核)= GNU/Linux 这一个完整的操作系统。
Linux 发行版
在众多的 Linux 发行版中,Ubuntu 是最流行的。它是 Debian 这个 Linux 发行版的大家族的一员,可以说是一个后继。Ubuntu 将成为我们这个课程后续一直使用的 Linux 发行版。
# 第 2 章 Linux 终端和文件操作
在你开始测试前,一定要记得如何离开真正的黑乎乎的终端噢:按 Ctrl + Alt + F1
三个键。
# 命令行提示符
oscar@oscar-laptop:~$
含义:
- oscar 这是当前用户的名字。Linux 是一个多用户的操作系统,Windows 也可以。不过 Linux 的多用户管理更方便。我们一般建议每个使用 Linux 系统的用户都创建一个属于自己的账户,便于隐私管理。我们之后的课程会讲如何在 Linux 下创建新用户;
- @ 这个符号我们应该不陌生,我们的电子邮件一般都是
name@domain.com
。这个 @ 就表示英语里的 at,是“在…里面;落户在…的;在其中”的意思。@ 前面是用户名,后面是所在的域; - oscar-laptop 这是当前电脑/主机的名字。上面说了在 @ 后面的是一个域,所以 oscar@oscar-laptop 就表示 oscar-laptop 这台电脑的 oscar 这个用户。oscar-laptop 这个名称在安装此 Linux 系统时可以任意指定,之后也还是可以修改的;
- : 冒号。这是分隔符,没有什么特别的涵义;
- ~ 这是当前所在目录的名字,会随着用户进入不同目录而改变。~ 表示当前用户的家目录,有点类似 Windows 系统的“我的文档”这个目录;
- $ 指示你所具有的权限的字符。在 Linux 系统中有两种可能
- $:美元符号。表示普通用户,有权限的限制(比如不能修改重要的系统文件等)。因此我的账户 oscar 就是一个普通用户
- #:井号。表示超级用户,也就是 root。表示你当前以 root 这个用户出现。root 拥有所有权限,是系统的大管家,想干什么就干什么。所以一般不推荐初学者登录为 root,因为一不小心可能会误删一些文件。之后的课程我们会再来研究 root 模式,暂时我们还是“乖一点”好了,以免办傻事。
# 快捷键
下面列举一些经常使用的快捷键:
- Ctrl + L 用于清理终端的内容,就是清屏的作用。其实 clear 命令也有同样效果,但是你不觉得 Ctrl + L 的按键比输入 clear 这五个字母更快速吗?
- Ctrl + D 给终端传递 EOF (End Of File,文件结束符),在运行程序时很有用。有些程序我们需要在接收到 EOF 输入时结束,那么这个快捷键就可以派上用场了。比如我们之前演示过,退出 root 用户身份,就可以用 Ctrl + D。如果你在命令行提示符后什么也不输入的情况下直接按下这组快捷键,那么就会关闭当前的终端;
- Shift + PgUp 用于向上滚屏,与鼠标的滚轮向上滚屏是一个效果;
- Shift + PgDn 用于向下滚屏,与鼠标的滚轮向下滚屏是一个效果。
下面的快捷键在你编辑一条比较长的命令时很有用:
- Ctrl + A 光标跳到一行命令的开头。一般来说,Home 键有相同的效果;
- Ctrl + E 光标跳到一行命令的结尾。一般来说,End 键有相同的效果;
- Ctrl + U 删除所有在光标左侧的命令字符;
- Ctrl + K 删除所有在光标右侧的命令字符;
- Ctrl + W 删除光标左侧的一个“单词”,这里的“单词”指的是用空格隔开的一个字符串。例如 -a 就是一个“单词”;
- Ctrl + Y 粘贴用 Ctrl + U、 Ctrl + K 或 Ctrl + W “删除”的字符串,有点像“剪切-粘贴”。
# 根目录的直属子目录
- bin:英语 binary 的缩写,表示“二进制文件”(我们知道可执行文件是二进制的)。包含了会被所有用户使用的可执行程序;
- boot:英语 boot 表示“启动”,包含与 Linux 启动密切相关的文件;
- dev:英语 device 的缩写,表示“设备”,包含外设。它里面的子目录,每一个对应一个外设。比如代表我们的光盘驱动器的文件就会出现在这个目录下面;
- etc:etc 有点不能顾名思义了。因为 etc 是法语 et cetera 的缩写,翻成英语就是“and so on”,表示“…等等”,包含系统的配置文件。至于为什么在 /etc 下面存放配置文件, 按照原始的 Unix 说法(Linux 文件结构参考 Unix 的教学实现 MINIX),这下面放的都是一堆零零碎碎的东西, 就叫 etc 好了。哈哈 ,这其实是个历史遗留;
- home:英语 home 表示“家”,用户的私人目录。之前我们提过一些,在这个目录中,我们放置私人的文件,有点类似 Windows 中的 Documents 这个文件夹,也叫“我的文档”。Linux 中的每个用户(除了大管家用户,也就是超级用户 root 外。root 因为太厉害,拥有所有权限,所以比较“任性”,跟普通用户不住在一起)都在 home 目录下有自己的一个私人目录。比如我的用户名是 oscar,那么我的私人目录就是 /home/oscar;如果另一个用户叫 john,那么他的私人目录就是 /home/john;
- lib:英语 library 的缩写,表示“库”,包含被程序所调用的库文件。例如 .so 结尾的文件,在 Windows 下这样的库文件是以 .dll 结尾的;
- media:英语 media 表示“媒体”。当一个可移动的外设(比如 USB 盘、SD 卡、DVD、光盘等等)插入电脑时,Linux 就可以让我们通过 media 的子目录来访问这些外设中的内容。
- mnt:英语 mount 的缩写,表示“挂载”。有点类似 media,但一般用于临时挂载一些装置;
- opt:英语 optional application software package 的缩写,表示“可选的应用软件包”,用于安装多数第三方软件和插件;
- root:英语“根”的意思。超级用户 root 的家目录/主目录。一般用户的家目录是位于 /home 下,不过 root 用户是个例外。之前的课程我们也提到过,root 是整个系统的超级用户,拥有一切权限,初学者请慎用此用户模式;
- sbin:英语 system binary 的缩写,表示“系统二进制文件”。比起 bin 目录多了一个前缀 system,所以包含的是系统级的重要可执行程序;
- srv:英语 service的缩写,表示“服务”。包含一些网络服务启动之后所需要取用的数据;
- tmp:英语 temporary 的缩写,表示“临时的”。普通用户和程序存放临时文件的地方;
- usr:英语 Unix Software Resource 的缩写,表示“Unix 操作系统软件资源”(也是个历史遗留的命名)。这个目录是最庞大的目录之一。有点类似 Windows 中的 C:\Windows 和 C:\Program Files 这两个文件夹的集合。在这里面安装了大部分用户要调用的程序;
- var:英语 variable 的缩写,表示“动态的,可变的”。通常包含程序的数据,比如一些 log(日志)文件,记录电脑中发生了什么事。
# 第 3 章 Linux 进程和数据流
# 第 4 章 Linux 网络和数据传输
# 第 5 章 Shell 脚本编程
# 第 6 章 总结与回顾
# 资料
- Linux命令行与Shell脚本编程大全 - Oscar / 10年Linux老司机