Linux
- 1、 介绍
- 1.1、概述
- 1.2、特点
- 1.3、Linux的发行版
- 2、 基础篇 —— 文件系统
- 2.1、文件系统
- 2.2、目录结构
- 3、 基础篇 —— VI/VIM 编辑器
- 3.1、概述
- 3.2、编辑器模式及常用命令
- 4、 基础篇 —— 网络配置
- 4.1、VMware NetWork
- 4.2、链接测试
- 4.3、网络连接模式
- 4.4、修改虚拟机的 IP 为静态
- 4.5、配置主机名及远程登录
- 5、 基础篇 —— 系统管理
- 5.1、进程和服务
- 5.2、服务管理框架
- 5.3、systemctl
- 5.4、系统运行级别
- 5.5、配置开机自启动
- 5.6、关机重启命令
- 6、 进阶篇 —— 常用基本命令
- 7、 进阶篇 —— 软件包管理
- 8、 终结篇 —— Shell 编程
- 8.1、变量
- 8.2、脚本传参
- 8.3、运算
- 8.4、条件判断
- 8.5、循环控制
- 8.6、交互式读取参数
- 8.7、函数
- 8.8、文本处理工具
- 8.9、综合案例 —— 消息发送与接收
1、 介绍
1.1、概述
Linux 是一种开源的类 Unix 操作系统,其内核最初由林纳斯·托瓦兹(Linus Torvalds)在1991年开发。它是现代计算机系统中广泛使用的操作系统之一,涵盖从嵌入式设备到超级计算机的广泛应用场景
安装:linux、
1.2、特点
特点 | 描述 |
---|---|
开源和自由软件 | Linux 内核及其大多数应用软件都是开源的,任何人都可以查看、修改和分发源码,其根据GNU通用公共许可证(GPL)发布,用户可以自由使用、修改和再发布 |
多用户和多任务 | 支持多个用户同时使用计算机资源,每个用户有自己的权限和文件系统空间,也能够同时运行多个任务,确保系统资源高效利用 |
安全性和稳定性 | 严格的权限管理和用户隔离机制,减少了系统受到恶意攻击的风险。广泛用于服务器和关键任务系统,具备高可靠性和长期稳定运行能力 |
支持多种硬件平台 | 从嵌入式系统、个人电脑到大型服务器和超级计算机,Linux 都有相应的版本和优化 |
丰富的应用软件 | 拥有丰富的软件库,包括桌面应用、开发工具、服务器软件、科学计算软件等 |
强大的网络功能 | Linux 原生支持多种网络协议,广泛用于网络服务器、路由器和防火墙等网络设备中 |
1.3、Linux的发行版
Linux 有许多不同的发行版(Distribution),每个发行版在核心 Linux 内核的基础上,捆绑了不同的应用程序和配置工具,以满足不同用户的需求
常见的发行版 | 描述 |
---|---|
Fedora | 前沿技术的试验场,经常引入新技术 |
CentOS | 源自Red Hat Enterprise Linux,适合企业和服务器使用 |
Debian | 稳定性高,适合服务器和开发者 |
Ubuntu | 用户友好,适合桌面用户和新手 |
Linux Mint | 对初学者友好的桌面发行版,基于Ubuntu |
Arch Linux | 高度可定制,适合高级用户 |
2、 基础篇 —— 文件系统
2.1、文件系统
Linux 文件系统是一种层次化的结构,用于组织和管理计算机上的数据。以下是一些常见的 Linux 文件系统
文件系统 | 描述 |
---|---|
ext4 | 这是目前最常用的 Linux 文件系统之一,它是 ext 文件系统家族的最新版本。它支持大文件和大容量磁盘,并提供了更好的性能和可靠性 |
ext3 | ext3 是 ext 文件系统家族的前身,与 ext4 相比,它的性能稍逊,但在稳定性和兼容性方面更受信任。它支持日志记录,可以在系统崩溃后更快地恢复 |
XFS | XFS 是一个高性能的文件系统,特别适合用于大型文件和大容量存储。它支持高并发和大型文件系统,适用于高负载的服务器环境 |
Btrfs | Btrfs 是一个具有许多先进特性的先进文件系统,包括快照、压缩、校验和以及数据和元数据的复制。它被设计为面向企业和桌面用户的全功能文件系统 |
ZFS | ZFS 是一种先进的文件系统和逻辑卷管理器,具有强大的数据完整性和管理特性。它支持软件 RAID、数据压缩、快照、复制等功能,但在 Linux 中的集成有时可能需要额外的配置 |
F2FS | F2FS 是一个专为闪存存储设备(如固态硬盘)设计的文件系统,具有优化的性能和寿命管理,适用于移动设备和嵌入式系统 |
2.2、目录结构
Linux 文件系统的目录结构是一种层次化的树状结构,它只有一个根目录 / ,从根目录 / 开始,每个目录可以包含文件和子目录,形成了一个逐级嵌套的结构。并且有虚拟目录的概念,即Linux 中的一些目录是虚拟目录,不实际存储在硬盘上,而是由内核在运行时创建的,用于提供系统信息的访问接口
对比 Windows 文件系统的目录结构来说,Windows 中可以有多个根目录,它使用了驱动器字母(如 C:\、D:\)来表示不同的存储设备,每个存储设备都有自己的根目录,且这些根目录之间是相互独立的
操作系统 | 优点 | 缺点 |
---|---|---|
Linux | ① 统一的文件系统结构:Linux 的单一根目录提供了统一的文件系统结构,使得管理和访问文件更加简单直观 ② 虚拟目录的灵活性:Linux 的虚拟目录提供了对系统信息的灵活访问,可以方便地获取和管理系统状态 ③ 适用于服务器环境:Linux 的文件系统结构适用于服务器环境,能够更好地支持多用户和多任务处理 | ① 对新用户不友好:Linux 的文件系统结构对于新用户可能比较复杂,需要一定时间来适应和理解 ② 软件兼容性:某些应用程序可能针对特定的文件系统结构进行了优化,可能在 Linux 上运行时需要进行额外的配置或兼容性处理 |
Windows | ① 驱动器字母的灵活性:Windows 的驱动器字母提供了对不同存储设备的灵活管理和访问,用户可以轻松地识别和切换不同的存储设备 ② 多个根目录的独立性:Windows 的多个根目录使得不同存储设备之间相互独立,可以更好地管理和保护数据 ③ 适用于桌面环境:Windows 的文件系统结构适用于桌面环境,能够更好地满足个人用户的需求 | ① 混乱的文件系统结构:Windows 的多个根目录和特殊目录可能导致文件系统结构比较混乱,使得管理和访问文件不够直观 ② 性能问题:Windows 的文件系统结构可能对系统性能产生一定的影响,特别是在处理大量文件时可能会出现性能问题 |
通过左上角“位置” → “计算机” 可以看到 Linux 的文件有如下这些,其中图标的右下角带有小箭头的类似于 Windows 的快捷方式
将 Linux 的文件结构绘制成层次化树状结构如下
目录 | 描述 |
---|---|
/(根目录) | Linux 文件系统的根目录,所有文件和目录都从这里开始 |
/bin | 包含系统启动和运行所需的基本命令(如 cd、ls、cp、mv 等)的可执行文件 |
/boot | 包含引导加载程序和内核映像文件,用于系统启动 |
/dev | 包含系统使用的设备文件,如硬盘、键盘、鼠标等 |
/etc | 包含系统的配置文件,如网络配置、用户账户配置等 |
/home | 包含每个用户的个人文件和目录,每个用户都有一个单独的子目录 |
/lib | 包含系统运行时所需的共享库文件 |
/media | 用于挂载可移动媒体设备(如光盘、USB 驱动器等)的挂载点 |
/mnt | 用于临时挂载其他文件系统的挂载点 |
/opt | 用于存放可选软件包的安装目录 |
/proc | 虚拟文件系统,提供关于当前运行进程和系统内核状态的信息 |
/root | 超级用户(root)的家目录 |
/run | 存储系统运行时数据 |
/sbin | 包含系统管理员使用的系统管理命令 |
/srv | 存储与服务相关的数据 |
/sys | 是一个虚拟文件系统,由 Linux 内核暴露,提供了一个统一的接口来访问内核对象和硬件设备的信息 |
/tmp | 用于存放临时文件的目录,系统重启时会清空其中的内容 |
/usr | 包含用户安装的应用程序、库文件等 |
/var | 包含经常变化的文件,如日志文件、临时文件等 |
虚拟文件系统(Virtual File System,VFS):是操作系统内核中的一个抽象层,提供了统一的接口,使得不同类型的文件系统能够被操作系统以相同的方式访问和管理。VFS 使得内核可以处理多种文件系统,而不需要为每种文件系统编写单独的代码
3、 基础篇 —— VI/VIM 编辑器
3.1、概述
vi 和 vim 是 Unix 和 Linux 系统中广泛使用的文本编辑器
vi(Visual Interface)是最早的文本编辑器之一,几乎在所有 Unix 系统上都可以找到。它是轻量级的,并且不依赖图形界面,因此在许多系统管理任务中非常有用。而 vim 是 vi 编辑器的增强版,提供了许多额外功能,如语法高亮、代码折叠、插件支持等
vim的特性 | 描述 |
---|---|
语法高亮 | 根据文件类型自动高亮显示语法,提升代码阅读和编写的效率 |
多级撤销 | 支持多次撤销和重做操作,允许用户轻松回滚和恢复编辑 |
插件系统 | 支持通过插件扩展功能,可以自定义和增强编辑器 |
高级编辑功能 | 包括自动补全、宏录制与播放、文本对象操作等 |
为了接下来的代码演示,先将 /etc/profile 拷贝到 /root 目录下
拷贝:
cp 被拷贝的文件 存放位置
首先感受一下使用两种编辑器查看文件时,在“语法高亮”上的不同
# 复制
cp /etc/profile /root
# 使用 vim 查看这个文件,发现有颜色
cd /root
vim profile
:q
# 使用 vi 查看这个文件,发现没有颜色
vi profile
:q
3.2、编辑器模式及常用命令
编辑器有三种主要模式
模式 | 命令 | 描述 |
---|---|---|
一般模式 | 进入:vim xxx | 在此模式下,主要用于查看文本以及复制、粘贴、删除文本等操作 |
编辑模式 | 开始编辑:i 或者a 或者o 退出编辑:ESC键 | 在此模式下,主要用于编辑文本 |
命令模式 | 在底部输入命令:: xxx 或者/ xxx 返回:ESC键 | 在此模式下,主要用于保存文件、退出编辑器等 |
一般模式的常用命令 | 描述 |
---|---|
u | 撤回一步 |
p | 粘贴(粘贴行:在光标所在行的下方进行粘贴;粘贴多个字符:在光标右边进行粘贴) |
yy | 复制一行 |
数字yy / y数字y | 复制多行 |
y^ (y+shift+6) | 复制从行头到光标前一个字母 |
y$ (y+shift+4) | 复制从光标处到行尾 |
yw | 复制一个单词及后方的空格(光标需要放在首字母,否则会被截断) |
y数字w | 复制多个单词及后方的空格(光标需要放在第一个单词的首字符,否则第一个单词会被截断) |
dd | 删除一行 |
数字dd / d数字d | 删除多行 |
d^ (y+shift+6) | 删除从行头到光标前一个字母 |
d$ (y+shift+4) | 删除从光标处到行尾 |
dw | 删除一个单词及后方的空格(光标需要放在首字母) |
d数字w | 删除多个单词及后方的空格(光标需要放在第一个单词的首字母) |
x | 剪切一个字符(当前的光标) |
X (shift+x) | 剪切一个字符(当前光标的前一个) |
r字符 | 将光标所在的字符进行更改 |
R (shift+r) | 类似于进入编辑模式,可以替换多个字符,”替换“跟”插入“的体验不一样 |
^ (shift+6) | 移动到行头 |
$ (shift+4) | 移动到行尾 |
b | 移到当前单词的开头 |
e | 移到当前单词的结尾 |
w | 移到下一个单词的开头 |
数字G | 移动到某一行的行头 |
G | 移到文件最后一行的行头 |
L | 移动到当前窗口最后一行的行头 |
`` |
编辑模式的常用命令 | 描述 |
---|---|
i | 光标不动地进入编辑模式 |
I (shift+i) | 光标移到当前行的行头,然后进入编辑模式 |
a | 光标右移一位地进入编辑模式 |
A (shift+a) | 光标移到当前行的行尾,然后进入编辑模式 |
o | 光标下移一行地进入编辑模式 |
O (shift+o) | 光标上移一行地进入编辑模式 |
s | 删除光标所在的字符,并移动到被删除字符的右一个字符处,然后进入编辑模式 |
S (shift+s) | 删除光标所在的行,并移动到被删除行的行头,然后进入编辑模式 |
命令模式的常用命令 | 描述 |
---|---|
:q | 退出 vi/vim 编辑器 |
:q! | 强制退出编辑器且不保存 |
:w | 保存 |
:wq | 保存并退出 vi/vim 编辑器 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
/查找的内容 | 查找(搭配:n 查找下一处,N 查找上一处,:noh 不要高亮显示) |
:s/查找的内容/替换的内容 | 替换掉光标所在行的第一个匹配的内容 |
s/查找的内容/替换的内容/g | 替换掉光标所在行的全部匹配的内容 |
%s/查找的内容/替换的内容 | 替换掉每一行的第一个匹配的内容 |
%s/查找的内容/替换的内容/g | 全文替换 |
4、 基础篇 —— 网络配置
4.1、VMware NetWork
打开主机的高级网络设置查看主机有哪些网络适配器,可以看到有一个 VMware Network Adapter VMnet1 和一个 VMware Network Adapter VMnet8,这是在安装 VMware Workstation 或 VMware Player 之类的虚拟化软件时,VMware 自动为主机配置的虚拟网络适配器(又称虚拟网卡),以便支持虚拟机的网络连接,不同的 VMNet 处于不同的虚拟网络中
TIP:在典型的计算机系统中,网络接口卡(NIC,Network Interface Card)可以分为物理网卡和虚拟网卡。物理网卡包括有线以太网网卡和无线网卡(WLAN),而虚拟网卡通常是由虚拟化软件(如 VMware)创建的,用于虚拟机与宿主机及其他虚拟机之间的网络通信
网卡的功能主要有:
1、对于发送数据来说:数据封装和解封装、数据传输
2、对于接收数据来说:地址解析和控制、数据接收
3、通用:提供物理层接口、流量控制、中断处理、网络协议支持
VMware 提供了几种不同类型的虚拟网络,主要包括 VMnet0、VMnet1 和 VMnet8,每个适配器处于不同网络模式的虚拟网络中
适配器类型 | 对应的网络模式 |
---|---|
VMnet0 | 桥接网络 |
VMnet1 | 仅主机网络 |
VMnet8 | NAT网络 |
4.2、链接测试
由于我在创建虚拟机过程中进行网络配置时选择了 NAT 模式,因此现在我应该看我的 VMnet8 网卡地址:192.168.137.1。然后再找到虚拟机的网卡地址:192.168.137.128
使用命令行的查看方式
查看虚拟机的地址(Linux):ifconfig
(看ens那一栏的)
查看主机的地址(Windows):ipconfig
然后就可以使用ping
来测试是否连接的通了
TIP:谁被 ping 不通可以找谁的防火墙,例如虚拟机 ping 主机 ping 不通,那应该是主机的防火墙拦截了 ICMP 报文的请求(ping 使用的就是 ICMP 协议),由于 VMnet8 虚拟网络适配器通常被 Windows 识别为公共网络连接(因为这些虚拟网络通常是默认配置,并没有明确标识为家庭(专用)或公司网络(域)),因此将 Windows 的公用配置文件的入站连接改为允许即可
4.3、网络连接模式
网络模式 | 作用 | 用途 | 典型应用 |
---|---|---|---|
桥接网络 | 将虚拟机直接连接到物理网络,使其像物理网络上的独立设备一样存在(主机起到网桥的作用) | 使虚拟机获得与宿主机相同的网络访问权限,可以直接访问网络中的其他设备 | 虚拟机需要与网络中的其他设备(如服务器、打印机等)进行正常通信 |
仅主机网络 | 创建一个仅宿主机和虚拟机之间的网络,没有外部网络访问权限 | 用于虚拟机和宿主机之间的隔离网络通信,不与外部网络进行交互 | 创建一个独立的测试环境,不受外部网络影响 |
NAT网络 | 通过 NAT 方式让虚拟机使用宿主机的网络连接与外部网络通信 | 使虚拟机能够通过宿主机访问外部网络,同时保持内部网络隔离 | 需要虚拟机访问互联网或外部网络资源,但希望内部网络通信隔离 |
Ⅰ. VMware 实现桥接模式的细节如下,首先了解两个概念:
① 虚拟交换机:在VMware中,每个虚拟网络(如VMnet0、VMnet1等)实际上是由一个虚拟交换机构成的。这个虚拟交换机用于连接虚拟机和物理网络
虚拟交换机的工作机制 | 描述 |
---|---|
初始化连接 | 虚拟交换机与主机的物理网卡建立连接 |
MAC地址表 | 虚拟交换机会维护一个MAC地址表,这个表记录了各个虚拟机的MAC地址和对应的端口(虚拟网卡) |
数据包转发 | 当虚拟机发送数据包时,虚拟交换机会检查目的MAC地址,根据MAC地址表决定将数据包转发到哪个端口。如果目的MAC地址在表中,虚拟交换机会将数据包转发到对应的虚拟网卡。如果目的MAC地址不在表中,虚拟交换机会进行泛洪,将数据包发送到所有端口 |
② 虚拟网卡和物理网卡:每台虚拟机都有一个虚拟网卡(vNIC),这个虚拟网卡通过虚拟交换机与主机的物理网卡(pNIC)相连。在桥接模式下,虚拟交换机与物理网卡直接关联,允许虚拟机通过主机的物理网络接口直接访问网络
流程细节 | 描述 |
---|---|
虚拟网卡创建与配置 | 当用户创建一台虚拟机时,VMware会为该虚拟机分配一个或多个虚拟网卡(vNIC),每个虚拟网卡都会被分配一个唯一的MAC地址,用于网络层的数据通信,在选择桥接模式后,虚拟网卡就准备好通过虚拟交换机与物理网卡进行通信 |
虚拟交换机 | VMware会在主机上创建一个虚拟交换机(vSwitch)。这个虚拟交换机是一个软件实现的交换机,工作在数据链路层,用于在虚拟机之间以及虚拟机与物理网络之间转发以太网帧,每个虚拟网卡被分配一个虚拟端口(vPort)连接到虚拟交换机,而虚拟交换机会绑定主机的物理网卡(pNIC) |
虚拟机发包 | 虚拟机A生成一个数据包,并通过其虚拟网卡(vNIC)发送该数据包 |
虚拟交换机接收 | 数据包通过vNIC的虚拟端口进入虚拟交换机(vSwitch) |
转发到物理网卡 | 虚拟交换机根据MAC地址表决定转发路径,如果数据包的目的地址在外部网络,虚拟交换机会将数据包转发到在主机物理网卡上虚拟出来的网桥上(网桥就会将数据发到外部网络中,相当于将显卡当成了一个网桥/交换机媒介) |
物理网络中的转发 | 虚拟网桥将数据包发送到外部网络,由物理网络设备(如交换机、路由器)进行处理 |
接收方处理 | 数据包到达目的设备(如另一台物理机或虚拟机),目的设备处理并响应 |
TIP:Promiscuous Mode:在一些配置下,物理网卡可能会进入混杂模式(promiscuous mode),这样它可以接收所有通过该网卡的数据包,而不仅仅是发给它的那些。这对于虚拟机监控网络流量(如使用Wireshark进行抓包)非常有用
Ⅱ. VMware 实现 NAT 模式的细节如下,首先了解一个概念:
① 虚拟路由器:VMware 在 NAT 模式下创建了一台虚拟路由器。这个“虚拟路由器”负责在虚拟机和主机之间进行网络通信和地址转换
虚拟路由器的组成 | 描述 |
---|---|
虚拟NAT设备 | 负责地址转换(NAT),将虚拟机的私有IP地址转换为主机的公共IP地址。它类似于物理网络中的家庭路由器的NAT功能 |
虚拟DHCP服务器 | 为连接到NAT网络的虚拟机动态分配IP地址、子网掩码、网关和DNS服务器地址 |
虚拟网络适配器 | 连接虚拟机到主机的虚拟网络接口,确保虚拟机能够通过虚拟NAT设备访问外部网络 |
流程细节 | 描述 |
---|---|
虚拟机启动和IP地址分配 | 虚拟机通过虚拟网络适配器连接到VMnet8,并向虚拟DHCP服务器请求IP地址。虚拟DHCP服务器分配一个私有IP地址(例如192.168.137.x)给虚拟机(此时对应的虚拟网网关应该是192.168.137.2,而分配给主机虚拟网卡的 ip 应该是192.168.137.1) |
数据包的流动 | 当虚拟机需要访问外部网络时,数据包会通过VMnet8发送到虚拟NAT设备。虚拟NAT设备将虚拟机的私有IP地址转换为主机的公共IP地址,并通过主机的物理网络接口将数据包发送到外部网络 |
响应数据包的返回 | 外部服务器的响应数据包通过主机的公共IP地址返回到主机,虚拟NAT设备根据之前记录的连接信息,将响应数据包的目标地址转换回虚拟机的私有IP地址,然后通过VMnet8将数据包发送回虚拟机 |
TIP:由于虚拟路由器使用了 NAT 转换,因此主机本来是没办法反向访问虚拟机的,然而 VMware 会为主机配置一个虚拟网卡(现在是双网卡),这样就使得主机也能直接跟虚拟交互了
4.4、修改虚拟机的 IP 为静态
下面演示在 NAT 模式下将 IP 修改为静态的方法
进入配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 配置如下TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
# BOOTPROTO="dhcp" # 旧的 BOOTPROTO 为自动DHCP
BOOTPROTO="static" # 更换 BOOTPROTO 改为静态配置
DEFROUTE="yes"
....