Linux运维从入门到进阶

Posted Thomas_Lbw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维从入门到进阶相关的知识,希望对你有一定的参考价值。

 

Linux 磁盘管理

知识点

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

 

 磁盘和文件系统介绍

正如上文中提到的,Linux 中一切都是文件。这个重要的概念贯穿整个 Linux 的始末,磁盘也是如此。各种接口的磁盘在 Linux 系统中以文件的形式进行挂载。

文件系统简述
ext最早的 Linux 文件系统,性能和兼容性上有很多缺陷。
ext2Ext 文件系统的升级版本,改进了一些缺陷。
ext3对于 Ext2 做出了诸多改进,引入了日志功能,提高文件系统的可靠性。
ext4向前兼容 Ext3,在性能方面得到了极大的发展。
xfs目前较先进的文件系统技术,具有可升级性。

目前,主流的操作系统采用的是 xt4 和 xfs 系统,我们的实验环境 Ubuntu 采用的就是第一种文件系统——ext4。此外,除了 ext4 和 xfs 等存储性的文件系统,Linux 系统中还存在着诸多的辅助性的文件系统。

文件系统简述目录
proc用来管理内存的虚拟文件系统/proc
sysfsExt 文件系统的升级版本,改进了一些缺陷。/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:在被路由接受后的数据包

同时,每个表上能够应用的链不一样:

filterinput,output,forward
natprerouting,postrouting,output
mangleprerouting,postrouting,input,output,forward
rawprerouting,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运维从入门到进阶的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维从#手动到#远程到#批量安装虚拟机

运维自学-18-运维开发所需前端知识

Atom编辑器入门到精通 Atom使用进阶

Atom编辑器入门到精通 Atom使用进阶

Atom编辑器入门到精通 Atom使用进阶

Atom编辑器入门到精通 Atom使用进阶