文章使用的是 Debian 11系统,防火墙是 UFW。
本人为新手,如有错误或不足之处,欢迎指正。
安装Fail2ban和UFW1apt install fail2ban ufw
配置Fail2ban和新建jail配置文件复制配置文件, fail2ban 会默认使用 jail.local。
1cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
打开 jail.local 将以下两行修改为 ufw,以便fail2ban使用ufw防火墙来拦截 ip。
1vim /etc/fail2ban/jail.local
jail.local1234567# 修改前banaction = iptables-multiportbanaction_allports = iptables-allports# 修改后banaction = ufw # 使用 ufw 来封禁 IP 地址banaction_allports = ufw # 使用 ufw 来封禁所有端口
新建jail配置文件并添加规则。
1vim /etc/fail2ban/jai...
文章封面: Hello world by: アシマ / Ashima
本人为新手,如有错误或不足之处,欢迎指正。
分区表的概念使用哪种分区表决定了你可以创建多少分区和大小。
MBR 主引导记录(Master Boot Record)MBR 的优点是兼容性好,可以用于 BIOS 和 UEFI 启动模式,也可以和多种操作系统共存。
结构:MBR 是一个 512 字节的扇区,其中包含引导代码和分区表。
分区限制:MBR 支持最多 4 个主分区或 3 个主分区和一个扩展分区,每个主分区可以包含一个操作系统。
容量限制:MBR 最大支持 2TB 的硬盘。
GPT 全局唯一标识分区表(GUID Partition Table)GPT 的优点是更先进,更安全,更灵活,可以用于 UEFI 启动模式,也可以和多种操作系统共存,但不支持 BIOS 启动模式。
结构:GPT 使用 GUID(全局唯一标识符)标识分区表项,整个分区表存储在硬盘的开头和结尾,以提高可靠性。
分区限制:GPT 支持最多 128 个分区。每个分区都有唯一的 GUID 标识符,而不再受限于主分区和扩展分区的...
文章封面: 水面 by: 鈍色玄
本人为新手,如有错误或不足之处,欢迎指正。
物理卷(PV)卷组(VG)和逻辑卷(LV)
在 Linux 的逻辑卷管理中,逻辑卷是建立在卷组之上的,而且一个逻辑卷只能拥有一个卷组,但卷组可以拥有多个逻辑卷。
卷组则是由一个或多个物理卷组成的。
因此,如果要创建逻辑卷,您需要先有物理卷和卷组。
注意:GFS2 或者 XFS 文件系统不支持缩小。
1apt-get install lvm2 # 安装 lvm
创建物理卷
创建物理卷,可以是硬盘也可以是分区
1pvcreate /dev/[硬盘或分区]
实例1pvcreate /dev/sde # 使用 sde 硬盘来创建物理卷
查看物理卷
这里的命令先选一个来用着,慢慢来。PS:物理卷、卷组和逻辑卷的命令基本相似,不用着急。
123pvs # 显示简要信息pvscan # 扫描所有物理卷(PV)并统计pvdisplay # 显示详细的物理卷(PV)信息
创建卷组
创建卷组必须使用物理卷
1vgcreate [卷组名称] /dev/[物理卷]
实例1vgcreate vg-1 /de...
文章封面: 崩坏学园 2/艾拉·苍墟之影
linux 的特殊权限分别为SUID,SGID,SBIT三个权限。
SUID 权限当可执行文件拥有SUID 权限,普通用户就可以,以文件所有者的权限来执行该文件,从而临时获得特定权限。如果所有者是root用户,它将具有与 root 用户相同的特权级别,可以执行只有 root 用户才能执行的操作。
被赋予SUID 权限的文件会变成红色的,文件属性的所有者权限会变成 rws 而不是 rwx。
普通用户就可以,以root用户的权限使用该命令。
移出了SUID 权限,普通用户就无法访问root目录的文件了。
注意:千万不要将 SUID 权限赋予 vim、cat、rm 等命令上面!!!可能会引发潜在的安全风险。
SGID 权限SGID 权限可以应用于可执行文件和目录,不过这次是只获得组的权限。
可执行文件:可以让使用者临时获得,文件所属组的权限。
目录:会影响在该目录下新创建的文件或子目录,可以自动继承该目录的组身份。
SGID 权限针对可执行文件:赋予 SGID 权限后文件会变为黄色,文件所属组的权限会变成 r-s 不是 r...
文章封面: 无题 by: Mada
文章使用的是 Debian 12和CentOS-Stream 8系统。
注:Debian 12和CentOS-Stream 8安装的依赖不同,其他安装的方法是一样的。
本人为新手,如有错误或不足之处,欢迎指正。
准备工作Debian 12:
先安装一个叫aptitude的管理软件包工具,这个工具可以对依赖关系的更好的处理能力,就是安装依赖包更方便。
123apt-get update && apt-get upgradeapt-get install aptitude && aptitude updateaptitude upgrade
安装依赖
1aptitude install gcc make libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev libaio1 libaio-dev pkg-config libxml2 libxml2-dev sqlite3 libsqlite3-dev libonig-dev libjemalloc-...
配置文件的构成systemd 配置文件由三个部分组成:[Unit]、[Service] 和 [Install]。
[Unit]1234[Unit]Description=nginx - high performance web server # 服务描述。Documentation=http://nginx.org/en/docs/ # 该服务的文档地址。After=network.target # 在network.target服务启动后,启动。
Description:服务的简短描述。
Documentation:服务文档的说明。
After:指定在那个服务之后启动。
[Service]1234567891011[Service]Type=forking # 以子进程方式启动。PIDFile=/usr/local/nginx/logs/nginx.pid # 进程的 id。ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 启动 nginx 并指定配置文件。ExecSta...
文章封面: last bride by: YOAFERIA
chmod 是一个修改文件或文件夹权限的命令。它将为所有用户(文件所有者、同组用户和其他用户)添加读写和执行的权限。
文件权限示例12345- rwx rwx rwx # 原始权限 | | | | | +-- 其他用户权限 | +------ 同组用户权限 +---------- 文件所有者权限
每一位权限字符都有特定的含义:
r 表示读权限
w 表示写权限
x 表示执行权限
- 表示没有对应权限
所以,如果一个文件权限是 rw-r–r–,表示文件所有者具有读写权限,同组用户和其他用户只有读权限。
下面是一些常见的文件权限示例及其对应的字符表示:
rwxr-xr-x : 755
rw-rw-r-- : 664
rwx------ : 700
rw-r--r-- : 644
rwxrwxrwx : 777
chmod 命令的语法1chmod [权限] 文件名/目录名
其中,[权限] 表示你想要为文件或目录设置的新权限,可以使用数字模式或符号模式来表示权限。具体用法如下:
数字...
名词
循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while 语句。
迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for 语句。
递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的斐波纳契数列。
遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
名词引用: python 在线手册 by: PythonTab
现在只学迭代的基本
iter生成迭代器(可迭代的变量)
语法:iter(object)
object 是一个可迭代对象,可以是列表、字符串、字典等。
1234from collections.abc import Iterable # 导入可迭代的类型Iterable,来判断是否可以迭代。a = iter([1, 2, 3, 4, 5])print(isinstance(a, Iterable)) # True
next语法:next(iterator, default)
iterator:从中检索下一个项目的迭代器。
d...
抽象的概念模块:每个模块都是一个Python文件(.py),它包含了一些相关的函数和变量。包:它包含了多个模块。每个包都是一个目录(文件夹),该目录下有一个__init__.py文件和一些模块文件或者子包。为什么导入包也可以使用模块呢?
因为在导入该包的时候会自动执行__init__.py 文件。这个文件负责处理包的初始化操作,包括导入包中的模块或其他的模块(嵌套)。
import …语法:import [模块名]12import random # 导入整个"random"模块,包括函数、变量等。print(random.randint(1, 10)) # 生成 1~10 随机的整数。
注意函数的前面要带有模块名,这种方法避免了命名冲突。
import … as …语法:import [模块名] as [别名]12import random as ran # 只是换了一个名字。print(ran.randint(1, 10)) # 作用是一样的。
简化模块名了。
from … import …语法:from [模块] import [函数]说明:从...
语法zip(*iterables)enumerate(iterable, start=0)
参数说明如下:
iterables:一个或多个可迭代对象,如列表、元组、字符串等。
iterable:一个可迭代对象,如列表、元组、字符串等。
start(可选):下标起始位置的值,默认为 0。
返回值
zip:返回一个迭代器,每个元素都是一个元组,由输入的可迭代对象在相同位置上的元素组成。
使用时需要注意:zip 函数会以最短的可迭代对象的长度为准进行合并,以最短合并 多的不要。
enumerate:返回一个迭代器,每个元素都是一个包含索引和对应元素的元组。
使用比如:我们有这些变量
1234string = "ABCDEF" # 字符串arr = [1, 2, 3, 4, 5] # 数组fruits = ("apple", "banana", "cherry") # 元组person = {"name": "Alice", "age&...