linux运维从入门到进阶(代码片段)

Thomas_Lbw Thomas_Lbw     2023-01-28     140

关键词:

 

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 工具的模式其实有很多的相似之处。

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

0x01【手动安装虚拟机】安装虚拟机一般分四种:1、Localinstallmedia(使用iso或者cdrom安装)   --不做过多解释2、NetworkInstall (使用HTTP,FTP,orNFS 使用服务器iso安装)--不做过多解释 3、Importexistingdiskimage(使用已有的... 查看详情

基础运维:iptables防火墙入门到掌握(代码片段)

一、简介IPTABLES是与最新的3.5版本Linux内核集成的IP信息包过滤系统。如果Linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。防火墙在做数据... 查看详情

算法竞赛从入门到进阶(代码片段)

算法竞赛从入门到进阶1.算法竞赛概述1.1C语言中输入输出函数putchar()getcharprintf()scanf()puts()gets()sscanf()1.2输入结束方式 while(scanf("%d%d",&a,&b)!=EOF)     //等价于 while(~scanf("%d%d",&a,&b)) 查看详情

运维学习路线2

运维学习需要分为四个阶段:  Linux初级入门>Linux中级进阶>Linux高级提升>资深细分方向进阶 第一阶段:初级入门 初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所以学linux也是需要有一定... 查看详情

c语言学习从入门到进阶(代码片段)

C语言学习从入门到进阶(七)书接上文,我们继续了解一些函数函数的定义和函数的声明定义和声明是不一样的。声明是一定要在函数调用之前的,定义可以在调用之前或者调用之后。我们来看看下面一段有意思... 查看详情

sqlserveralwayson从入门到进阶——分析和部署alwaysonavailabilitygroup(代码片段)

本文属于SQLServerAlwaysON从入门到进阶系列文章前言:本节是整个系列的重点文章,到现在,读者应该已经对整个高可用架构有一定的了解,知道独立的SQLServer实例和基于群集的SQLServerFCI的区别。上一节已经介绍了... 查看详情

linux的基本指令-linux从入门到精通第二天(代码片段)

文章大纲一、指令与选项二、基础指令(重点)三、进阶指令(重点)四、学习资料下载五、参考文章 一、指令与选项什么是Linux的指令?指在Linux终端(命令行)中输入的内容就称之为指令。 一个完整的指令的标准格... 查看详情

linux运维容器篇docker入门简介和部署(代码片段)

文章目录一、docker简介docker的历史docker的概念docker和虚拟机的区别docker命名空间docker镜像docker状态二、部署docker设置仓库和拓展安转docker引擎开启镜像加速网络优化验证安装总结一、docker简介docker的历史2010年几个年轻人成立了... 查看详情

kafka从入门到进阶(代码片段)

1. ApacheKafka是一个分布式流平台1.1 流平台有三个关键功能:发布和订阅流记录,类似于一个消息队列或企业消息系统以一种容错的持久方式存储记录流在流记录生成的时候就处理它们1.2 Kafka通常用于两大类应用:构建... 查看详情

c语言学习从入门到进阶(代码片段)

C语言学习从入门到进阶(六)这一期我们来讲讲函数函数是什么?我们回顾一下我们在初中,高中学习的函数,比如一次函数,二次函数……。C语言中的函数也是一样的。我们在一开始就见过函数了。那... 查看详情

c语言学习从入门到进阶(代码片段)

C语言学习从入门到进阶(六)这一期我们来讲讲函数函数是什么?我们回顾一下我们在初中,高中学习的函数,比如一次函数,二次函数……。C语言中的函数也是一样的。我们在一开始就见过函数了。那... 查看详情

linux运维工程师必须掌握哪些技能

linux运维工程师必须掌握哪些技能?020-07-2915:42:20原创478linux运维工程师必须掌握的技能:1、Linux基础知识内容,和命令使用,以及用户和权限等核心知识点;2、Linux从进程、资源、任务、文件、软件包、磁盘等管理方法;3、安... 查看详情

android数据库room从入门到进阶(代码片段)

数据库RoomRoom在SQLite上提供了一个抽象层,以便在充分利用SQLite的强大功能的同时,能够流畅地访问数据库。1.Room入门1.gradle添加依赖build.gradle(Module中的gradle)Groovydependenciesdefroom_version="2.2.5"implementation"andro 查看详情

kotlin基础从入门到进阶系列讲解(入门篇)android之gson的使用(代码片段)

Kotlin基础从入门到进阶系列讲解(入门篇)Android之GSON的使用Android之GSON的使用Android之GSON的使用->返回总目录<-Google提供的GSON开源库可以让解析JSON数据的工作简单到让你不敢想象的地步项目中需要添加GSON库的依赖。编辑app/b... 查看详情

redux从入门到进阶,看这一篇就够了!(代码片段)

Redux,带你从入门到进阶🌂序言☂️一、基础知识1、Redux概念简述2、Redux的工作流程🎃二、使用Antd实现TodoList页面布局1、在项目中使用Antd2、使用Antd实现TodoList的基本布局3、创建redux中的store(1)创建storeÿ... 查看详情

redux从入门到进阶,看这一篇就够了!(代码片段)

Redux,带你从入门到进阶🌂序言☂️一、基础知识1、Redux概念简述2、Redux的工作流程🎃二、使用Antd实现TodoList页面布局1、在项目中使用Antd2、使用Antd实现TodoList的基本布局3、创建redux中的store(1)创建storeÿ... 查看详情

c语言学习从入门到进阶(代码片段)

循环继续的学习。这边我们学习一下循环的嵌套;我们之前学习过条件语句的嵌套,其实循环语句的嵌套也是一样的。我们看一个代码:#include<stdio.h>intmain() for(inti=0;i<10;i++) for(intj=0;j<10;j++... 查看详情

c语言学习,从入门到进阶系列(代码片段)

C语言学习,从入门到进阶系列(二)承接上文,这边帮大家解决printf里面的一些%。%a(%A)浮点数、十六进制数字和p-(P-)记数法(C99)%c字符%d有符号十进制整数%f浮点数flot%lf浮点数double%e(%E)浮点数指数输出%g(%G)浮点数... 查看详情