磁盘和文件系统介绍
正如上文中提到的,Linux 中一切都是文件。这个重要的概念贯穿整个 Linux 的始末,磁盘也是如此。各种接口的磁盘在 Linux 系统中以文件的形式进行挂载。
文件系统 | 简述 |
---|---|
ext | 最早的 Linux 文件系统,性能和兼容性上有很多缺陷。 |
ext2 | Ext 文件系统的升级版本,改进了一些缺陷。 |
ext3 | 对于 Ext2 做出了诸多改进,引入了日志功能,提高文件系统的可靠性。 |
ext4 | 向前兼容 Ext3,在性能方面得到了极大的发展。 |
xfs | 目前较先进的文件系统技术,具有可升级性。 |
目前,主流的操作系统采用的是 xt4 和 xfs 系统,我们的实验环境 Ubuntu 采用的就是第一种文件系统——ext4。此外,除了 ext4 和 xfs 等存储性的文件系统,Linux 系统中还存在着诸多的辅助性的文件系统。
文件系统 | 简述 | 目录 |
---|---|---|
proc | 用来管理内存的虚拟文件系统 | /proc |
sysfs | Ext 文件系统的升级版本,改进了一些缺陷。 | /sys |
swap | 类似于虚拟内存,用磁盘 ROM 来模拟 RAM,当内存不够的时候就使用 Swap 分区 | — |
tmpfs | 与 sysfs 类似,但是可以使用 swap 交换分区 | — |
当你的计算机挂在了一个设备之后,Linux 的系统内核会自动把硬件名称规范起来以及识别文件系统类型,比如说 IDE 硬盘可能会被挂载到/dev/hdb。几乎所有设备都会被挂载到 dev 目录下面,这里是他们遵守的命名规范
硬件设备 | 文件名称 |
---|---|
IDE | /dev/hd[a-d] |
SATA | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
鼠标 | /dev/mouse |
接下来,我们通过一系列命令来查看磁盘分区以及相应的文件系统类型,为了防止接下来查看磁盘的时候提示权限不足,首先我们使用 sudo -i 命令打开 root 权限。
df -kh
输出清单的第一列显示的是文件系统以及路径,第二列显示的是分区包含的数据的大小,用 -h 参数以 M 为单位显示会更符合我们的阅读习惯,第三列和第四列则分别显示已用以及可用的空间大小,同时,我们可以在最后一列中看出该文件系统的挂载点。
磁盘分区命令
同时,fdisk 还提供一个交互式的接口来实现不同的管理命令。例如在上图中,我们可以看到,在我们的系统下面挂载了一个 /dev/vda 设备,这个设备只有一个 40G 的 vda1 分区,我们可以通过如下命令进入分区交互界面:
root@jjx-MS-7D09:~# fdisk -l
Disk /dev/loop0:51.04 MiB,53522432 字节,104536 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/loop1:64.77 MiB,67915776 字节,132648 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/loop2:55.45 MiB,58142720 字节,113560 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/loop3:218.99 MiB,229629952 字节,448496 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/loop4:32.27 MiB,33841152 字节,66096 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
Disk /dev/sda:465.76 GiB,500107862016 字节,976773168 个扇区
Disk model: Samsung SSD 870
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:59DBB3DB-248B-45B1-9773-D3620B28E6E9
设备 起点 末尾 扇区 大小 类型
/dev/sda1 4096 618495 614400 300M EFI 系统
/dev/sda2 618496 651263 32768 16M Microsoft 保留
/dev/sda3 651264 315228159 314576896 150G Microsoft 基本数据
/dev/sda4 315228160 609585151 294356992 140.4G Linux 文件系统
/dev/sda5 609585152 629585919 20000768 9.5G Linux 文件系统
/dev/sda6 629585920 829585407 199999488 95.4G Linux 文件系统
/dev/sda7 829585408 849586175 20000768 9.5G Linux 文件系统
/dev/sda8 849586176 912087039 62500864 29.8G Linux swap
/dev/sda9 912087040 970680319 58593280 27.9G Linux 文件系统
/dev/sda10 970680320 972681215 2000896 977M Linux 文件系统
/dev/sda11 972681216 973680639 999424 488M BIOS 启动
root@jjx-MS-7D09:~#
fdisk /dev/vda
例如,我们可以通过 P 命令查看分区表:
root@jjx-MS-7D09:~# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.36.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):
在交互界面,我们有如下命令可以使用。
n:创建新分区
d:删除已有分区
t:修改分区类型
l:查看所有已经ID
w:保存并退出
q:不保存并退出
m:查看帮助信息
p:显示现有分区信息
当你想要退出的时候,可以按 w 来保存。如果在 fdisk 命令中修改了分区,还需要通过 Partprobe 命令让内核重新识别分区 /proc/partitions。
partprobe
在 Linux 系统中,Swap 分区是用来模拟内存的,简单的来说,就是当内存不太够的时候,将调用 SWAP 分区。这跟 Windows 系统的虚拟内存很像。两者的技术原理都是将磁盘当作内存条来读写,但是我们知道磁盘的读写速度要比内存条慢很多,所以 SWAP 分区只是一种替代手段,并不能达到实际内存的效果。
通过 free -m 我们查看目前的内存以及 SWAP 分区大小
root@jjx-MS-7D09:~# free -m
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 31931 2590 27012 106 2328 28790
交换: 30517 0 30517
root@jjx-MS-7D09:~#
根据 Redhat Linux 官方给出的建议,Swap 分区设置为如下大小最合适:
内存 | 推荐分区大小 |
---|---|
<2GB | 内存的两倍 |
2GB-8GB | 与内存一样大 |
8GB-64GB | 最少 4GB |
>64GB | 最少 4GB |
事实上,Swap 分区并不是越多越好,在性能越好的设备上,Swap 分区设置的越少。因为当内存足够多的时候,磁盘的读写速度反而会成为累赘。例如可能会出现内存还剩下很多,系统却在使用 Swap 分区的情况。在目前系统的性能普遍提高的情况下,我们对 Swap 进行一定的配置来调优。
你可能会有过这样的想法,当 Windows 下 C 盘空间不够的时候,你想再给 C 盘加一点空间,但又不想格式化删内存,这时候,你可能需要的就是逻辑卷管理技术。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。类似的,Linux 上也有这样的技术。
这种技术最大的特点就是可以对磁盘进行动态管理。大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。
LVM 主要涵盖四个基本的部分
类目 | 描述 |
---|---|
PE | 物理拓展 |
PV | 物理卷 |
VG | 卷组 |
LV | 逻辑卷 |
此外除了 LVM 技术,我们还使用 RAID 阵列 来提供更高性能的硬盘组。RAID 阵列和 LVM 中的 VG 有些类似。在大多数 Linux 发行版上使用名为 mdadm 的软件包进行管理。
目前,我们通常使用的是 RAID 技术由三块或者三块以上的磁盘组成阵列。RIAD 技术的诞生是因为早期技术上还不是那么成熟,一块大容量的磁盘的价格会高于几块小磁盘的组合,而现在,随着技术的发展,大容量磁盘的成本已经大幅降低。因此,RAID 技术不再是那么必要,但是仍然有一定存在的理由
在使用 RAID 技术之前,我们需要安装 adadm 包。这是一个和 RAID 技术相关的包。
Shell 脚本入门
Linux 常用 Shell 简介
我们知道 Linux 系统的内核是操作系统的核心,而 Shell 在英文中是外壳的意思。Shell 暗指它是用来用户和内核交互的程序。Shell 提供一个与用户对话的环境,这个环境被称之为 CLI(Command Line Interface,命令行界面),我们能够在 CLI 中输入命令让系统执行。
这里,我们罗列集中几种目前使用较为广泛的 Shell 类型。
Bourne Shell
Cshell
Korn
Bash
使用下面命令,我们可以看到当前操作系统安装的所有 Shell。
cat /etc/shells
我们在写 Shell 脚本第一步声明解析器的时候,往往需要用/bin xxx。
我们来看一个 Bash 程序声明解释器的例子:
#!/bin/sh
这里告诉我们这个程序将使用 bin 目前下面的 bash 解释执行。
创建 Hello.sh
vi hello.sh
接着,我们按 i 进入插入模式,在里面输入如下内容:
#!/bin/bash # 这是评论!
echo Hello World # 这也是评论!
第一行告诉 Unix 该文件将由 /bin/sh 执行,这是几乎所有 Unix 系统上 Bourne shell 的标准位置。如果您使用的是 GNU/Linux,则 /bin/sh 通常是指向 bash(或最近的 dash)的符号链接。
变量类型
在开始下面的学习之前,我们首先要开始了解本地变量和环境变量。顾名思义,本地变量就是作用域只在当前文件的变量,而全局变量的定义是:
您可以将旧 shell 的变量复制到新 shell(即第一个 shell 变量到第二个 shell),这样的变量称为全局 shell 变量
在 Bash 中,声明变量的格式是:
变量=值
例如,我们可以声明采用如下方式变量(CLI 中依次执行如下命令):
var=123
echo $var
bash
echo $var
Bash 命令相当于打开一个新的命令行窗口,在新的命令行窗口中,bash 命令是不生效的。
与其他的编程语言不同,在 Shell 中,我们定义变量等号之间是不能有空格,否则将会执行失败。这种方式声明的变量只能在当前文件中使用变量 var,一旦出了当前文件,便无法再次使用。如果我们想要将本地环境转化成全局变量,还需要导出该变量。
Bash 进阶
If 循环
在 Bash 中,if 语句与其他编程语言十分类似,都是 if 后面紧跟着紧跟着条件,后面紧跟着 then 以及 else(分别表示条件成立以及条件不成立的情况下,代码需要做什么)。唯一有所不同的是,我们的 if 语句以 fi 结尾。这里,我们展示一个例子:
#! /bin/bash
var="Linux"
if var==Linux
then
echo "match"
else
echo "do not match"
fi
For 循环
类似的,For 循环也是如此,唯一需要注意的是 for 结构这里可以有多种不同的写法,并且与常见的写法都略有不同
写法 1:
for ((i=0; i<5; i++));
写法 2:
for i in 1,2,3,4,5
我们通过 vi test_for.sh 直接创建编写相应的文件命令,并尝试编写一个用到 for 循环的例子来说明。全部代码如下:
#!/bin/bash
cd /
mkdir test_dir
cd test_dir
for ((counter=0; counter<5; counter++))
do
touch test_$counter.txt
done
While 语句
For 语句主要适用于有限次数地循环不断的执行一系列命令,而 While 语句则适用于循环次数比较多或者我们不确定有多少次循环的情况。我们将上面 For 循环中的例子略微修改一下,得到另一个例子:
#!/bin/bash
cd /
mkdir test_dir2
cd test_dir2
counter=0
while (($counter<5))
do
let "counter++"
touch test_$i.txt
done
特别的,当我们想要循环无限次的时候,我们可以这样写:
while :
或者,
while true
常用命令
除了在上面的应用过程中我们已经用到的 set 命令,还有其他几个我们常用的 Shell 命令。
shopt 命令
shopt 内置命令用于设置和取消设置 shell 选项。使用此命令,您可以高效地利用 shell。直接使用 shopt 命令可以查看各项参数以及他们的开闭状
如果要查找某项特定的参数,我们也可以在 shopt 后面接上参数名:
shopt dotglob
LNMP 搭建
LNMP(Linux-Nginx-MySQL-PHP)网站架构是世界上最流行的 Web 堆栈之一,被誉为 Linux 下 Web 应用的黄金组合。该堆栈包括:Linux 操作系统、Nginx HTTP 服务器、MySQL 数据库、PHP 编程语言。本实验帮助学员可以帮助用户获得 LNMP 部署、安装、配置等技能。在最短时间内学会在 Linux 上使用 Nginx+PHP+MySQL 的组合。此外,本节课采用实战的方式,绝大部分命令都是在终端中执行,如果在蓝桥云课环境下操作失败,可以考虑在私人 VPS 中进行实战。
LNMP 架构既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP 代理服务器对外进行服务。此外,Nginx 用 C 编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多,面板具有较高的安全性能,有效解决了主机之间跨站攻击问题,提高服务器整体安全性。
你可能会好奇,为什么我们想要把这几个工具放在一起讨论呢,实际上,这是因为 LNMP 中的四个组件加在一起可以构成搭建服务器的最小需求。Linux 是操作环境,Nginx 用于解析服务器,Nginx 加速网站内容和应用程序交付,能够提高网络服务器安全性,促进 Internet 上网站的可用性和可扩展性。MySQL 作为服务器的后台,存储服务器用到的数据,P 一般指的是 PHP 语言,有时候,也会有人理解为 Python,或者 Perl,但是无论是这三个哪一个,都是编程语言
下面我们先从 Nginx 开始
首先我们更新软件包列表:
sudo apt update
sudo apt install nginx
nginx -v
接下来,我们安装 Mysql:
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
实验楼中默认安装有 Mysql ,但是刚启动的时候 Mysql 服务是关闭的,在这里的几条命令是为了告诉读者如何进行安装 Mysql。这三条命令分别安装的是 Mysql 的服务端,客户端,以及环境依赖。
类似地,在安装完成后,我们通过查看版本号来确定是否安装成功
最后来到我们安装 PHP,Ubuntu 上安装 PHP 十分快捷:
sudo apt update
sudo apt install php-fpm
下面是各个工具可能用的路径:
使用自动脚本部署 LNMP
自动部署 LNMP 是目前比较常用的方式,通过这种方式,我们只需要几行代码,就能够快速完成 LNMP 架构的部署。
在正式使用 Ansible-LNMP 自动化部署脚本之前,我们还需要获得 root 权限,使用:
sudo -i
接着,我们就可以开始执行 LNMP 自动化部署脚本了
wget -N https://raw.githubusercontent.com/Websoft9/ansible-linux/main/scripts/install.sh; bash install.sh -r lnmp
如果通过在线拉取的方式不成功,可以考虑使用我上传到课程附件中的备份:
https://labfile.oss.aliyuncs.com/courses/4838/install.sh
相对于二进制安装,编译安装因为是在本地编译的,更加适合当前的主机,后期出现问题的可能性更少。但也是因为采用的是编译的方式,该自动化脚本的执行时间会有些长。
此外,如果我们喜欢二进制安装追求速度,可以使用如下命令批量安装:
apt-get install nginx php-cli php make automake gcc gcc-c++ spawn-fcgi
wget mysql-server
然后,我们只需要静静的等待自动部署结束就可以了,在这个过程中可能会有一些交互式的选项需要我们选择是或者否,使用默认选项或者根据实际情况选择均可以。如果学员对于 Ansible 有所了解的话,还可以通过 Ansible 映射给大规模的服务器批量安装 LNMP 架构。
自动部署结束以后,我们采用以下命令来检查时候安装成功
php -v
mysql -v
nginx -v
注意事项:
如果希望无人值守安装 LNMP 环境,可以考虑使用这个网站来生成相应的命令:
https://lnmp.org/auto.html
Linux 日志管理
大多数情况下,运维人员无法守在每一台服务器旁边,而当服务器出了故障,我们想要维修的时候,就需要查看日志。维护、查阅日志对于运维人员来说是分析问题的非常有效的解决途径。rsyslog 是实现日志管理的一个工具。
日志记录操作系统在运行过程中的状况,既有正确的,也有错误的。例如记录服务器访问 IP,访问内容的日志就属于正确的日志。程序运行出错时生成的 log 文件则属于错误日志。当系统正常运行的时候,我们可能用不到日志,但是一旦操作系统出错,日志就起到了非常关键的作用。
几乎所有的系统日志都存储在 /var/log 目录下面,我们通过 ls 命令查看该目录下面的所有内容
/var/log/cron
/var/log/cups/
/var/log/dmesg
/var/log/secure
/var/log/btmp
/var/log/lastlog
/var/log/message
首先是 cron,你可能用到过 cron 来设置定时任务,它记录了和定时任务相关的日志。cups 文件则记录了打印信息的日志,而 dmesg 记录了开机时候内核自检的文件。此外,还有 btmp 以及 lastlog 文件,这两个文件是二进制的形式,我们不能直接打开,前者要用 lastb 命令来查看,后者要用 lastlog 命令来查看。
lastb
lastlog
lastb 命令输出的是尝试登陆但失败的日志,如果你某一次忘记输入密码,那么你这一次登录的行为可能就被 btmp 文件记录了下来。lastlog 能够列出系统当中所有的用户,包括端口以及 IP
last
rsyslog 是 syslog 的进阶版本,能够取代前者自然是因为 rsyslog 功能更先进,效果更好。目前,除了一些 RPM 包安装服务产生的日志,绝大部分的日志都是由 rsyslog 服务来管理的。通常情况下,rsyslog 在 Linux 系统中均为默认安装。
ps aux | grep rsyslog
ps aux 用来查看当前正在运行的服务器进程,我们看到返回的结果有两条,这说明在我们的操作系统上 rsyslog 正在运行。
通常情况下,rsyslog 生成的日志由以下格式构成:
日志配置
我们的日志还有相对应的配置文件,通过对配置文件的调整,可以有选择的记录不同的内容。配置文件的默认路径为 /etc/rsyslog.conf。
cat /etc/rsyslog.conf
conf 文件中的所有内容都由两部分构成,一部分是记录日志的进程,中间的"."是连接符,后面则是日志等级。
连接符:
连接符 | 描述 |
---|---|
. | 只记录.后面等级以上的日志 |
.= | 只记录对应等级 |
.! | 除了该等级日志以外,其他都记录 |
日志等级:
日志等级 | 描述 |
---|---|
debug | 一般内容 |
info | 基本通知 |
notice | 重要通知 |
warning | 警告信息 |
err | 错误信息 |
crit | 危险信息 |
alert | 警告信息 |
emerg | 紧急信息 |
我们运营一个规模略显庞大的组织的服务器的时候,日志的记录是不可避免,这一部分相应的内容也会在运维人员的工作中占据较大的一部分。但也不必害怕,通过这节课的学习,我们已经了解到了 Linux 上日志的选择性记录,日志等级,日志转发等等常用的操作。同时,我们也看到了日志的格式,以及学会了如何看日志,这些技能对于我们排错十分有帮助。
文本处理三剑客
如果说 Linux 上有哪几个推荐的文本处理工具,那么我一定毫不犹豫的推荐 awk,grep 和 sed。推荐的理由不仅仅在于他们功能的强大,更在于他们能够和彼此相互配合,实现复杂的文本处理功能。
grep 也是一种强大的文本搜索工具,最常用使用的例子是与 Linux 下面的各种命令结合,例如我们经常用到的查看进程的命令:
下面是 sed 工具,sed 主要是利用脚本来处理文本文件,通常情况下可以通过脚本来大规模的处理大量文件。
grep 的功能主要是从文件中查找过滤出我们需要的内容,常用的命令格式是:
grep [命令] [操作对象]
在这里,我们仍然用 awk.txt 作为例子,来演示 grep 的用法。grep -i 忽略大小写匹配 This。
grep -i This awk.txt
Linux 文件共享
ftp 是一个可以追溯到 1970 年的文件传输协议,最初的目的是为了方便在不同的设备上交换文件。但是由于 ftp 采用明文传输,很容易发生中间人攻击,目前 ftp 已经全面由 sftp 替代了。我们经常说的搭建 ftp 服务器,实质上也是在使用 sftp 协议。目前,经常使用的 Linux ftp 工具是 vsftp,这是一个安全且快速的工具。
ftp 协议因为传输的不安全性,黑客如果截留了我们的数据包,就有可能直接看到我们的账户密码,乃至于修改文件的内容。而 sftp 采用加密的形式进行文件传输,尽管这可能会耗费一点时间和效率,但是能够提高更高的文件传输安全性。
下面,我们来尝试一下安装 ftp 服务器。
sudo apt update
sudo apt install vsftpd
查看 ftp 服务器端口号
netstat -antup | grep ftp
接下里,我们给 ftp 服务器添加用户,在创建之前,我们先备份一下默认配置文件,以免出错。
我们还需要关闭防火墙对于 20,21 端口的限制,这两个端口是 ftp 传输协议的默认端口。
Linux 防火墙
防火墙作为一种有效的阻隔计算机流量的工具被广泛使用,它基于一组定义的规则来进行有效的过滤。很多时候,我们既可以把防火墙作为一种用于获取安全性的保护屏障,例如用来缓解 DOS,DDOS 攻击,同时,我们也可以用防火墙来对用户做出筛选,比如对于不同 IP 段的用户呈现不同的内容。
知识点
防火墙配置了一系列规则来规范流量,允许接受或者发送来自某个端口乃至协议的数据包。你可能经常听说,开放 80 端口,开放 443 端口之类的话语,这就是对防火墙进行配置。iptables 和 firewall 是我们常用的管理防火墙规则的工具。两者都是管理工具,都是对底层流量模块 netfilter 的封装。
iptables 是 Linux 上一个强大且易用的防火墙工具,它不仅可以实现黑名单,白名单控制流量,端口开闭而且可以实现流量转发等等复杂的命令。需要注意的是,在 iptables 上可以设置针对流量的多条规则,这些规则甚至有可能互相违。在 iptables 表中位置越靠上的规则权重越高,权重高的规则可以抵消权重低的规则。
我们经常说 ptables 内部包含四个表,五个链。这四表五链是 iptables 所有操作的基础。但实际上,iptables 还有一个不常用的 security 表,但是这个表我们几乎不做任何修改,所以这个表渐渐被人们遗忘。
filter:一般过滤功能
nat:端口转发功能
mangle:修改特定数据包
raw:实现复杂的高级功能
input:对外部进来的数据包
output:对向外部发送的数据包应用
forward:对转发的数据包应用此规则
prerouting:在被路由接受前的数据包
postrouting:在被路由接受后的数据包
同时,每个表上能够应用的链不一样:
表 | 链 |
---|---|
filter | input,output,forward |
nat | prerouting,postrouting,output |
mangle | prerouting,postrouting,input,output,forward |
raw | prerouting,output |
主要用到的参数:
参数 | 描述 |
---|---|
-A | 新增规则 |
-L | 序号形式罗列规则 |
-D | 常常与-L 配合使用,删除指定序号规则 |
Linux 内核入门
掌握 Linux 系统的内核,对于系统升值优化,性能优化,软硬件优化都有一定的好处,最重的是,它能够让你看问题看的更加深刻.理解内核能够让你拨开云雾看到本质.但这里并不是说让大家直接去看内核的底层实现这个有着 600 多万行代码的庞然大物.而是我们提炼出其中的重点,了解我们可以对内核做出怎么样的修改.
Linux 系统采用经典的冯诺依曼架构,内核的作用是连接软件和硬件并且充当底层驱动。内核是操作系统的核心,一个内核的好坏直接决定了系统运行的效率以及稳定性。从技术层面上来讲,内核主要发挥了以下作用
内核中提供了一系列基本的功能,例如时钟功能,进程调度功能,它就像在编写代码的时候引入的库文件,程序会调用库中的函数,而软件则会调用内核中实现的基本函数。
我们可以通过如下命令查看 CPU 的型号以及物理 ID:
root@92446759cc7c:~# cat /proc/cpuinfo | grep "model name" && cat /proc/cpuinfo | grep "physical id"
model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
physical id : 0
physical id : 0
physical id : 0
physical id : 0
内核管理
/proc/sys 目录下面,这个目录是内核启动后生成的伪目录,里面储存 Linux 系统的内核参数以及配置。
我们首先进入这个目录
cd /proc/sys
sys 目录下面是我们能够做出修改的内核部分,一般来说,我们需要修改的只有 net 目录下面的内容,其他目录要么和硬件相关,要么和 Linux 系统的架构有关。
Linux 数据同步
作为一个增量备份的工具,rsync 在 Linux 中得到了广泛的应用,最终能够实现两机的文件同步。实际上,除了基本的校验之外,Linux 还提供了文件的校验等等一系列工具。还能够解决本机和目标主机上版本冲突等等问题,这样的操作方法对于云端主机备份有着非常好的效果。
rsync 在同步过程中主要有两部分组成:第一部分是对需要同步的文件的检查,第二部分是文件同步模式的确定。默认情况下,会使用 quick check 模式进行检查。如果读者想要了解更多的细节,可以尝试分析 rsync 的执行过程。在阅读源码的过程中,可以发现,rsync 和 git 工具的模式其实有很多的相似之处。