目录
1. Linux 介绍
1.1 Linux 的诞生
1.2 一些名词
1.3 Linux 发行版
1.4 Linux 内核
2. Linux 目录
2.1 Linux 目录结构
2.2 相对路径
2.3 绝对路径
3. 命令解析器
3.1 工作原理
3.2 命令提示行
3.3 命令行快捷键
1991 年,GNU 计划已经开发出了许多工具软件,最受期盼的 GNU C 编译器已经出现,GNU 的操作系统核心 HURD 一直处于实验阶段 (GNU 工程从 1984 年起就在做这件事),没有任何可用性,实质上也没能开发出完整的 GNU 操作系统。
也是这一年,Linux 诞生了,Linux 是 UNIX 操作系统的一个克隆系统, 但是Linux是开源的。 那时候它只是一个系统内核,没有与之配套的应用软件,这时候 Linux 和 GNU 一拍即合,就有了我们现在使用的操作系统,GNU 奠定了 Linux 用户基础和开发环境。
Linux 时间线
Linux 主要特性
在学习和使用 Linux 的过程中,我们经常会见到一些特有名词,下面给大家介绍一些常用的:
可以以任何目的运行所购买的程序;
在得到程序代码的前提下,可以以学习为目的,对源程序进行修改;
可以对复制件进行再发行;
对所购买的程序进行改进,并进行公开发布。
LGPL 允许商业软件通过类库引用 (link) 方式使用 LGPL 类库而不需要开源商业软件的代码。
采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。
如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的 BSD 协议。
不可以用开源代码的作者 / 机构名字和原来产品的名字做市场推广。
BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。
Linux 的发行版本众多,曾有人收集过超过 300 种的发行版本。这里对最常用的发行版本进行简单的介绍,下表 为用户经常使用的版本。大家可以去相关网址查找,选择适合的版本使用。
版本名称 | 网 址 | 特 点 | 软件包管理器 |
Debian Linux | www.debian.org | 开放的开发模式,并且易于进行软件包升级 | apt |
Fedora Core | www.redhat.com | 拥有数量庞大的用户,优秀的社区技术支持, 并且有许多创新 | up2date (rpm) yum(rpm) |
CentOS | www.centos.org | CentOS 是一种对 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,由于 Linux 是 开发源代码的操作系统,并不排斥基于源代 码的再分发,CentOS 就是将商业的 Linux 操 作系统 RHEL 进行源代码再编译后分发,并 在 RHEL 的基础上修正了不少已知的漏洞 |
rpm |
SUSE Linux | www.suse.com | 专业的操作系统,易用的 YaST 软件包管理系统 | YaST(rpm),第 三方 apt(rpm)软 件库 |
Gentoo Linux | www.gentoo.org | 高度的可定制性,使用手册完整 | portage |
Ubuntu | www.ubuntu.com | 优秀易用的桌面环境,基于 Debian 构建 | apt |
想要安装稳定版的 ubuntu, 应该如何选择版本呢?
官方每年会发布两个版本,每个版本的版本号由两部分组成: 主版本号 + 副版本号
- 主版本号为当年年份,长期支持版的年份为偶数,测试版年份为奇数
- 副版本号为月份,在 4 月份发布的为相对稳定版, 在 10 月份发布的为测试版
因此应当选择主版本号为偶数,副版本号为 04 的版本,进行安装使用。
Linux 系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是 Linux 操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要件。这个和武林秘籍一样,不仅得有招式还得有内功心法。
Linux 的内核主要由 5 个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。下面将依次讲解这 5 个子系统。
进程调度 SCHED
进程调度指的是系统对进程的多种状态之间转换的策略。Linux 下的进程调度有 3 种策略:SCHED_OTHER、SCHED_FIFO 和 SCHED_RR。
内存管理 MMU
虚拟文件系统 VFS
网络接口
Linux 是在 Internet 飞速发展的时期成长起来的,所以 Linux 支持多种网络接口和协议。网络接口分为网络协议和驱动程序,网络协议是一种网络传输的通信标准,而网络驱动则是对硬件设备的驱动程序。Linux 支持的网络设备多种多样,几乎目前所有网络设备都有驱动程序。
进程间通信
Linux 操作系统支持多进程,进程之间需要进行数据的交流才能完成控制、协同工作等功能,Linux 的进程间通信是从 UNIX 系统继承过来的。Linux 下的进程间的通信方式主要有管道、信号、消息队列、共享内存和套接字等方法。
与 Windows 下的文件组织结构不同,Linux 不使用磁盘分区符号来访问文件系统,而是将整个文件系统表示成树状的结构,Linux 系统每增加一个文件系统都会将其加入到这个树中。
操作系统文件结构的开始,只有一个单独的顶级目录结构,叫做根目录。所有一切都从“根”开始,用“/”代表,并且延伸到子目录。Linux 则通过 “挂接” 的方式把所有分区都放置在 “根” 下各个目录里。一个 Linux 系统的文件结构如下图所示。
在 linux 中根目录的子目录结构相对是固定的 (名字固定), 不同的目录功能是也是固定的
- /usr/bin: 可执行的二进制应用程序
- /usr/games: 游戏目录
- /usr/include: 包含的标准头文件目录
- /usr/local: 和 opt 目录作用相同,安装第三方软件
对于用户自己的文件,一般都是存放到自己的家目录中,也就是 /home/用户名里边,通过指定的相应的路径就可以找到这个文件了。关于路径的指定的有两种方式:相对路径和绝对路径。
相对路径:相对路径就是相对于当前文件的路径。在 Linux 中有两个表示路径的特殊符号:
[root@VM-8-14-centos ~]# cd luffy/get/onepiece/
接下来研究一下相对路径的优缺点:
绝对路径:从系统磁盘起始节点开始描述的路径。
[root@VM-8-14-centos ~]# cd /root/luffy/get/onepiece/
接下来研究一下绝对路径的优缺点:
在 Linux 中需要通过终端执行对应的命令来完成某些操作,那么这些命令是如何被执行的呢?
这些命令都是通过命令解析器解析完成并执行的,如果用户在终端输入是正确的内部指令,命令解析器就执行这个命令,如果不是正确的指令,则提示命令无法解析。
命令解析器在 Linux 操作系统中就是一个进程 (运行的应用程序), 它的名字叫做 bash 通常我们更习惯将其称之为 shell (即: sh)。他们之间的渊源是这样的,在 Unix 操作系统诞生之后一个叫伯恩 (Bourne) 的人为其编写了命令解析器取名为 shell, Linux 操作系统诞生之后伯恩再次改写了 shell (sh), 将其称之为 bash (Bourne Again SHell), bash 就是 sh 的增强版本。
在 Linux 操作系统中默认使用的命令解析器是 bash, 当然也同样支持使用 sh。当用户打开一个终端窗口,并输入相关指令, 按回车键, 这时候命令解析器就开始工作了, 具体步骤如下:
在 Linux 中有一个叫做 PATH 的环境变量,里边存储了一些系统目录 (windows也有, 叫 Path)
# 通过 echo 命令可以查看环境变量 PATH 中的值, 在shell中变量名前加 $ 就是取值
[root@VM-8-14-centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
命令解析器需要依次搜索 PATH 中的各个目录,检查这些目录中是否有用户输入的指令
[root@VM-8-14-centos ~]# asdjflksd
-bash: asdjflksd: command not found
在 Linux 终端中,输入要执行的指令之前会有相应的命令提示,我们将其称之为命令提示行,例如:
[root@VM-8-14-centos ~/luffy/get/onepiece]#
[robin@VM-8-14-centos ~/luffy/get/onepiece]$
~: 当前用户的家目录
在 linux 中有很多用户,每个用户都用一个属于自己的目录,这个目录称之为家目录
普通用户家目录 /home/用户名 , root 用户家目录 /root
我们在命令行输入一些指令的时候,经常需要移动光标,或者删除一些字符,对应的一些快捷键操作如下表:
快捷键 | 功能 | 备注 |
Tab | 命令自动补齐 | 在终端中输入 某个命令的前一个或若干个字符,再按 Tab 键 |
Ctrl+p | 显示输入的上一个历史命令 | 从输入的最后一个命令往前倒,也可以使用 ↑键 |
Ctrl+n | 显示输入的下一个历史命令 | 也可以使用 ↓键 |
Ctrl+a | 光标移动命命令行首 | 也可以使用 Home 键 |
Ctrl+e | 光标移动命命令行尾 | 也可以使用 End 键 |
Ctrl+u | 删除光标前的部分字符串 | 无 |
Ctrl+k | 删除光标后的部分字符串 | 无 |
→ | 光标向右移动一个字符 | 无 |
← | 光标向右移动一个字符 | 无 |
Backspace/Delete | 删除光标前 / 后的一个字符 | 无 |
关于 Tab 的补充:
- 由于很多shell命令的开头字母是相同的, 在这种情况下, 按一次Tab是不会自动补齐的,我们可以连续按两次Tab键,在当前终端中就可以显示出所有匹配成功的shell命令
- 为了能够快速补全 shell 指令,我们可以多输入一些前缀字符之后,再按 Tab 键
作者: 苏丙榅
链接: https://subingwen.cn/linux/version-path/
来源: 爱编程的大丙
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。