Linux 磁盘管理

知识点

  • 磁盘和文件系统简介
  • 文件系统工具
  • 磁盘分区管理
  • 交换分区
  • 逻辑卷和阵列

 磁盘和文件系统介绍

正如上文中提到的,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:查看所有已经IDw:保存并退出q:不保存并退出m:查看帮助信息p:显示现有分区信息

当你想要退出的时候,可以按 w 来保存。如果在 fdisk 命令中修改了分区,还需要通过 Partprobe 命令让内核重新识别分区 /proc/partitions。

partprobe

SWAP 交换分区

在 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 逻辑卷

RAID 阵列

此外除了 LVM 技术,我们还使用 RAID 阵列 来提供更高性能的硬盘组。RAID 阵列和 LVM 中的 VG 有些类似。在大多数 Linux 发行版上使用名为 mdadm 的软件包进行管理。

目前,我们通常使用的是 RAID 技术由三块或者三块以上的磁盘组成阵列。RIAD 技术的诞生是因为早期技术上还不是那么成熟,一块大容量的磁盘的价格会高于几块小磁盘的组合,而现在,随着技术的发展,大容量磁盘的成本已经大幅降低。因此,RAID 技术不再是那么必要,但是仍然有一定存在的理由

在使用 RAID 技术之前,我们需要安装 adadm 包。这是一个和 RAID 技术相关的包。

Shell 脚本入门

  • Linux 常用 Shell 简介
  • Bash 特性
  • Bash 简介
  • Bash 基础
  • Bash 进阶
  • 常用命令

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
thenecho "match"
elseecho "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_dirfor ((counter=0; counter<5; counter++))
dotouch test_$counter.txt
done

While 语句

For 语句主要适用于有限次数地循环不断的执行一系列命令,而 While 语句则适用于循环次数比较多或者我们不确定有多少次循环的情况。我们将上面 For 循环中的例子略微修改一下,得到另一个例子:

#!/bin/bash
cd /
mkdir test_dir2
cd test_dir2
counter=0while (($counter<5))
dolet "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 架构简介
  • 手动部署 LNMP
  • 使用自动脚本部署 LNMP

你可能会好奇,为什么我们想要把这几个工具放在一起讨论呢,实际上,这是因为 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

下面是各个工具可能用的路径:

  • web 目录默认:/home/wwwroot/default/
  • Nginx 目录:/usr/local/nginx/
  • Mysql 目录:/usr/local/mysql/
  • PHP 目录:/usr/local/PHP/
  • PHPMYADMIN 目录:/home/wwwroot/default /phpMyadmin/
  • Nginx 主配置(默认虚拟主机)文件:/usr/local/nginx/conf/nginx.conf
  • 添加虚拟主机配置文件:/usr/local/nginx/conf/vhost/域名.conf
  • MySQL 配置文件:/ etc/my.cnf
  • PHP 配置文件:/usr/local/php/etc/php.ini
  • PHP-FPM 配置文件:/usr/local/php/etc/php-fpm.conf

使用自动脚本部署 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 是实现日志管理的一个工具。

  • 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 上日志的选择性记录,日志等级,日志转发等等常用的操作。同时,我们也看到了日志的格式,以及学会了如何看日志,这些技能对于我们排错十分有帮助。

文本处理三剑客

  • 三剑客简介
  • awk 基础
  • grep 基础
  • sed 基础

如果说 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 文件共享简介
  • ftp 服务器搭建
  • ftp 两种工作模式
  • samba 服务器搭建
  • samba 服务器配置

ftp 协议因为传输的不安全性,黑客如果截留了我们的数据包,就有可能直接看到我们的账户密码,乃至于修改文件的内容。而 sftp 采用加密的形式进行文件传输,尽管这可能会耗费一点时间和效率,但是能够提高更高的文件传输安全性。

下面,我们来尝试一下安装 ftp 服务器。

sudo apt update
sudo apt install vsftpd

查看 ftp 服务器端口号

netstat -antup | grep ftp

接下里,我们给 ftp 服务器添加用户,在创建之前,我们先备份一下默认配置文件,以免出错。

我们还需要关闭防火墙对于 20,21 端口的限制,这两个端口是 ftp 传输协议的默认端口。

Linux 防火墙

防火墙作为一种有效的阻隔计算机流量的工具被广泛使用,它基于一组定义的规则来进行有效的过滤。很多时候,我们既可以把防火墙作为一种用于获取安全性的保护屏障,例如用来缓解 DOS,DDOS 攻击,同时,我们也可以用防火墙来对用户做出筛选,比如对于不同 IP 段的用户呈现不同的内容。

知识点

  • 防火墙简介
  • iptables 基础
  • firewalld 基础
  • 防火墙配置

防火墙配置了一系列规则来规范流量,允许接受或者发送来自某个端口乃至协议的数据包。你可能经常听说,开放 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 工具的模式其实有很多的相似之处。

Linux运维从入门到进阶相关推荐

  1. Linux运维工程师入门第一课-赵永刚-专题视频课程

    Linux运维工程师入门第一课-75人已学习 课程介绍         本课程包含许多工作中会遇到的问题及解决方案,解决大家工作当中遇到的问题.非常适合刚刚入门的同学来学习linux基础入门. 本课程 ...

  2. Linux 运维工程师入门须掌握的 10 个技术点

    Linux系统的学习,可以选用redhat或centos,特别是centos在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究一 ...

  3. Linux运维工程师入门须掌握的10个技术点

    ↑ 点击上方"运维技术"关注我们 本篇文章来源于专业运维技术公众号: 运维技术 ,以下为全文: 今天跟大家讨论下linux运维工程师,对这方面的心得,现在我说说要掌握哪方面的工具吧 ...

  4. 第八阶段:Linux运维-03Docker入门到精通

    attach      Attach local standard input, output, and error streams to a running container   #当前shell ...

  5. Linux运维学习:中级进阶(2)——Linux企业常用服务(SSH、DHCP、FTP、NFS、DNS)

    SSH服务 简介 SSH(Secure Shell Protocol) 是由IETF网络工作小组制定,在进行数据传输之前,SSH先对联级数据包通过加密技术进行加密处理,加密后在进行数据传输,确保了传递 ...

  6. 【Linux运维-集群技术进阶】集群/分布式环境下5种session处理策略

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...

  7. linux运维自动化脚本,linux运维自动化shell脚本小工具

    linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...

  8. Linux运维方向文章汇总

    本文更新于2020年6月14日, 从今天起开始对各个知识点进行收集,汇总,全部都汇总到csdn, 汇总到本篇文章的目录下,在每个标题下加上超链接,后期你只需要这一篇文章就可以学会运维所有的知识点. 这 ...

  9. Linux运维入门及进阶全新经典视频-老男孩Linux第三部-老男孩-专题视频课程

    Linux运维入门及进阶全新经典视频-老男孩Linux第三部-20502人已学习 课程介绍         本Linux高薪运维入门及进阶,为入门教学中的基础部分,以简单.易用.高效的方式为初学者讲解 ...

  10. linux运维基础进阶和shell入门,Linux运维工程师从基础到进阶:Shell变量知识梳理...

    原标题:Linux运维工程师从基础到进阶:Shell变量知识梳理 Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂 ...

最新文章

  1. 红旗linuxcentos_用红旗Linux 11的体验报告,附使用红旗Linux 11截图
  2. 【c语言】统计字符次数
  3. 苹果手机怎么投屏 如何操作
  4. 让 CPU 告诉你硬盘和网络到底有多慢
  5. 0x13链表与邻接表之邻值查找
  6. Linux 进程基础
  7. JavaMVC之JSON
  8. Wisconsin Squares [USACO]
  9. 万方服务器维护,设备管理与维修 知网、维普、万方
  10. Flutter自定义相机,Flutter相册选择照片
  11. 非传统营销 text_传统营销已死
  12. java integer 不变模式_《JAVA与模式》之不变模式
  13. 构造avl树_浅谈AVL树,B-树,B+树
  14. 苹果6邮件服务器错了如何修改,苹果手机ID电子邮件设错了怎么改
  15. 破圈的《张朝阳的物理课》,开启“知识突围”的搜狐视频
  16. [Mac 硬件相关] 如何确定Mac笔记本版本及电池
  17. 证明:每个有n个顶点的连通图都至少有n-1条边 Show that every connected graph with n vertices has at least n − 1 edges.
  18. 手把手教你做蓝牙小车(二)
  19. WIN10企业版系统安装(KB12特供版:采用大白菜启动盘)
  20. 【C++】1023 组个最小数

热门文章

  1. svn汉化包安装后无效果
  2. 【黑客工作台特效-----附 效果 + 源代码】
  3. 黑客帝国中的代码雨写法
  4. 【原创】不如预想的精彩—读《别闹了,费曼先生》
  5. 【51单片机快速入门指南】6.2:SPI 、八线、四线控制 LCD12864 屏幕及Proteus的仿真(支持中文汉字)
  6. python系列教程176——函数调用
  7. General Mission Analysis Tool教程
  8. IP数据包、ICMP协议以及ARP协议简单介绍
  9. 使用RTX Server SDK帮助文档开发
  10. 网页内容变化监控提醒