Linux运维从入门到进阶
Posted Thomas_Lbw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维从入门到进阶相关的知识,希望对你有一定的参考价值。
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:查看所有已经ID
w:保存并退出
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
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 架构简介
- 手动部署 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运维从入门到进阶的主要内容,如果未能解决你的问题,请参考以下文章